@wordpress/components
Version:
UI components for WordPress.
119 lines (115 loc) • 8.71 kB
JavaScript
/**
* External dependencies
*/
import { css } from '@emotion/react';
import clsx from 'clsx';
/**
* WordPress dependencies
*/
import { forwardRef } from '@wordpress/element';
import { useInstanceId } from '@wordpress/compose';
import deprecated from '@wordpress/deprecated';
/**
* Internal dependencies
*/
import { FlexBlock } from '../flex';
import FormToggle from '../form-toggle';
import BaseControl from '../base-control';
import { HStack } from '../h-stack';
import { useCx } from '../utils';
import { space } from '../utils/space';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
function UnforwardedToggleControl({
__nextHasNoMarginBottom,
label,
checked,
help,
className,
onChange,
disabled
}, ref) {
function onChangeToggle(event) {
onChange(event.target.checked);
}
const instanceId = useInstanceId(ToggleControl);
const id = `inspector-toggle-control-${instanceId}`;
const cx = useCx();
const classes = cx('components-toggle-control', className, !__nextHasNoMarginBottom && /*#__PURE__*/css({
marginBottom: space(3)
}, process.env.NODE_ENV === "production" ? "" : ";label:classes;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkB3b3JkcHJlc3MvY29tcG9uZW50cy9zcmMvdG9nZ2xlLWNvbnRyb2wvaW5kZXgudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdEK0IiLCJmaWxlIjoiQHdvcmRwcmVzcy9jb21wb25lbnRzL3NyYy90b2dnbGUtY29udHJvbC9pbmRleC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4dGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBGb3J3YXJkZWRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcblxuLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgdXNlSW5zdGFuY2VJZCB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9zZSc7XG5pbXBvcnQgZGVwcmVjYXRlZCBmcm9tICdAd29yZHByZXNzL2RlcHJlY2F0ZWQnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBGbGV4QmxvY2sgfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCBGb3JtVG9nZ2xlIGZyb20gJy4uL2Zvcm0tdG9nZ2xlJztcbmltcG9ydCBCYXNlQ29udHJvbCBmcm9tICcuLi9iYXNlLWNvbnRyb2wnO1xuaW1wb3J0IHR5cGUgeyBXb3JkUHJlc3NDb21wb25lbnRQcm9wcyB9IGZyb20gJy4uL2NvbnRleHQvd29yZHByZXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7IFRvZ2dsZUNvbnRyb2xQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgSFN0YWNrIH0gZnJvbSAnLi4vaC1zdGFjayc7XG5pbXBvcnQgeyB1c2VDeCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHNwYWNlIH0gZnJvbSAnLi4vdXRpbHMvc3BhY2UnO1xuXG5mdW5jdGlvbiBVbmZvcndhcmRlZFRvZ2dsZUNvbnRyb2woXG5cdHtcblx0XHRfX25leHRIYXNOb01hcmdpbkJvdHRvbSxcblx0XHRsYWJlbCxcblx0XHRjaGVja2VkLFxuXHRcdGhlbHAsXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGRpc2FibGVkLFxuXHR9OiBXb3JkUHJlc3NDb21wb25lbnRQcm9wczwgVG9nZ2xlQ29udHJvbFByb3BzLCAnaW5wdXQnLCBmYWxzZSA+LFxuXHRyZWY6IEZvcndhcmRlZFJlZjwgSFRNTElucHV0RWxlbWVudCA+XG4pIHtcblx0ZnVuY3Rpb24gb25DaGFuZ2VUb2dnbGUoIGV2ZW50OiBDaGFuZ2VFdmVudDwgSFRNTElucHV0RWxlbWVudCA+ICkge1xuXHRcdG9uQ2hhbmdlKCBldmVudC50YXJnZXQuY2hlY2tlZCApO1xuXHR9XG5cdGNvbnN0IGluc3RhbmNlSWQgPSB1c2VJbnN0YW5jZUlkKCBUb2dnbGVDb250cm9sICk7XG5cdGNvbnN0IGlkID0gYGluc3BlY3Rvci10b2dnbGUtY29udHJvbC0keyBpbnN0YW5jZUlkIH1gO1xuXG5cdGNvbnN0IGN4ID0gdXNlQ3goKTtcblx0Y29uc3QgY2xhc3NlcyA9IGN4KFxuXHRcdCdjb21wb25lbnRzLXRvZ2dsZS1jb250cm9sJyxcblx0XHRjbGFzc05hbWUsXG5cdFx0ISBfX25leHRIYXNOb01hcmdpbkJvdHRvbSAmJiBjc3MoIHsgbWFyZ2luQm90dG9tOiBzcGFjZSggMyApIH0gKVxuXHQpO1xuXG5cdGlmICggISBfX25leHRIYXNOb01hcmdpbkJvdHRvbSApIHtcblx0XHRkZXByZWNhdGVkKCAnQm90dG9tIG1hcmdpbiBzdHlsZXMgZm9yIHdwLmNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCcsIHtcblx0XHRcdHNpbmNlOiAnNi43Jyxcblx0XHRcdHZlcnNpb246ICc3LjAnLFxuXHRcdFx0aGludDogJ1NldCB0aGUgYF9fbmV4dEhhc05vTWFyZ2luQm90dG9tYCBwcm9wIHRvIHRydWUgdG8gc3RhcnQgb3B0aW5nIGludG8gdGhlIG5ldyBzdHlsZXMsIHdoaWNoIHdpbGwgYmVjb21lIHRoZSBkZWZhdWx0IGluIGEgZnV0dXJlIHZlcnNpb24uJyxcblx0XHR9ICk7XG5cdH1cblxuXHRsZXQgZGVzY3JpYmVkQnksIGhlbHBMYWJlbDtcblx0aWYgKCBoZWxwICkge1xuXHRcdGlmICggdHlwZW9mIGhlbHAgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHQvLyBgaGVscGAgYXMgYSBmdW5jdGlvbiB3b3JrcyBvbmx5IGZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2hlcmVcblx0XHRcdC8vIGBjaGVja2VkYCBpcyBwYXNzZWQgZG93biBmcm9tIHBhcmVudCBjb21wb25lbnQuIFVuY29udHJvbGxlZFxuXHRcdFx0Ly8gY29tcG9uZW50IGNhbiBzaG93IG9ubHkgYSBzdGF0aWMgaGVscCBsYWJlbC5cblx0XHRcdGlmICggY2hlY2tlZCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRoZWxwTGFiZWwgPSBoZWxwKCBjaGVja2VkICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlbHBMYWJlbCA9IGhlbHA7XG5cdFx0fVxuXHRcdGlmICggaGVscExhYmVsICkge1xuXHRcdFx0ZGVzY3JpYmVkQnkgPSBpZCArICdfX2hlbHAnO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEJhc2VDb250cm9sXG5cdFx0XHRpZD17IGlkIH1cblx0XHRcdGhlbHA9e1xuXHRcdFx0XHRoZWxwTGFiZWwgJiYgKFxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImNvbXBvbmVudHMtdG9nZ2xlLWNvbnRyb2xfX2hlbHBcIj5cblx0XHRcdFx0XHRcdHsgaGVscExhYmVsIH1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdGNsYXNzTmFtZT17IGNsYXNzZXMgfVxuXHRcdFx0X19uZXh0SGFzTm9NYXJnaW5Cb3R0b21cblx0XHQ+XG5cdFx0XHQ8SFN0YWNrIGp1c3RpZnk9XCJmbGV4LXN0YXJ0XCIgc3BhY2luZz17IDIgfT5cblx0XHRcdFx0PEZvcm1Ub2dnbGVcblx0XHRcdFx0XHRpZD17IGlkIH1cblx0XHRcdFx0XHRjaGVja2VkPXsgY2hlY2tlZCB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyBvbkNoYW5nZVRvZ2dsZSB9XG5cdFx0XHRcdFx0YXJpYS1kZXNjcmliZWRieT17IGRlc2NyaWJlZEJ5IH1cblx0XHRcdFx0XHRkaXNhYmxlZD17IGRpc2FibGVkIH1cblx0XHRcdFx0XHRyZWY9eyByZWYgfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHQ8RmxleEJsb2NrXG5cdFx0XHRcdFx0YXM9XCJsYWJlbFwiXG5cdFx0XHRcdFx0aHRtbEZvcj17IGlkIH1cblx0XHRcdFx0XHRjbGFzc05hbWU9eyBjbHN4KCAnY29tcG9uZW50cy10b2dnbGUtY29udHJvbF9fbGFiZWwnLCB7XG5cdFx0XHRcdFx0XHQnaXMtZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHR9ICkgfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0eyBsYWJlbCB9XG5cdFx0XHRcdDwvRmxleEJsb2NrPlxuXHRcdFx0PC9IU3RhY2s+XG5cdFx0PC9CYXNlQ29udHJvbD5cblx0KTtcbn1cblxuLyoqXG4gKiBUb2dnbGVDb250cm9sIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSB0b2dnbGUgdXNlciBpbnRlcmZhY2UuXG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUb2dnbGVDb250cm9sIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbiAqIGltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbiAqXG4gKiBjb25zdCBNeVRvZ2dsZUNvbnRyb2wgPSAoKSA9PiB7XG4gKiAgIGNvbnN0IFsgdmFsdWUsIHNldFZhbHVlIF0gPSB1c2VTdGF0ZSggZmFsc2UgKTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPFRvZ2dsZUNvbnRyb2xcbiAqICAgICAgIF9fbmV4dEhhc05vTWFyZ2luQm90dG9tXG4gKiAgICAgICBsYWJlbD1cIkZpeGVkIEJhY2tncm91bmRcIlxuICogICAgICAgY2hlY2tlZD17IHZhbHVlIH1cbiAqICAgICAgIG9uQ2hhbmdlPXsgKCkgPT4gc2V0VmFsdWUoICggc3RhdGUgKSA9PiAhIHN0YXRlICkgfVxuICogICAgIC8+XG4gKiAgICk7XG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBUb2dnbGVDb250cm9sID0gZm9yd2FyZFJlZiggVW5mb3J3YXJkZWRUb2dnbGVDb250cm9sICk7XG5cbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZUNvbnRyb2w7XG4iXX0= */"));
if (!__nextHasNoMarginBottom) {
deprecated('Bottom margin styles for wp.components.ToggleControl', {
since: '6.7',
version: '7.0',
hint: 'Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version.'
});
}
let describedBy, helpLabel;
if (help) {
if (typeof help === 'function') {
// `help` as a function works only for controlled components where
// `checked` is passed down from parent component. Uncontrolled
// component can show only a static help label.
if (checked !== undefined) {
helpLabel = help(checked);
}
} else {
helpLabel = help;
}
if (helpLabel) {
describedBy = id + '__help';
}
}
return /*#__PURE__*/_jsx(BaseControl, {
id: id,
help: helpLabel && /*#__PURE__*/_jsx("span", {
className: "components-toggle-control__help",
children: helpLabel
}),
className: classes,
__nextHasNoMarginBottom: true,
children: /*#__PURE__*/_jsxs(HStack, {
justify: "flex-start",
spacing: 2,
children: [/*#__PURE__*/_jsx(FormToggle, {
id: id,
checked: checked,
onChange: onChangeToggle,
"aria-describedby": describedBy,
disabled: disabled,
ref: ref
}), /*#__PURE__*/_jsx(FlexBlock, {
as: "label",
htmlFor: id,
className: clsx('components-toggle-control__label', {
'is-disabled': disabled
}),
children: label
})]
})
});
}
/**
* ToggleControl is used to generate a toggle user interface.
*
* ```jsx
* import { ToggleControl } from '@wordpress/components';
* import { useState } from '@wordpress/element';
*
* const MyToggleControl = () => {
* const [ value, setValue ] = useState( false );
*
* return (
* <ToggleControl
* __nextHasNoMarginBottom
* label="Fixed Background"
* checked={ value }
* onChange={ () => setValue( ( state ) => ! state ) }
* />
* );
* };
* ```
*/
export const ToggleControl = forwardRef(UnforwardedToggleControl);
export default ToggleControl;
//# sourceMappingURL=index.js.map