UNPKG

@wordpress/components

Version:
160 lines (156 loc) 5.01 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _clsx = _interopRequireDefault(require("clsx")); var _compose = require("@wordpress/compose"); var _i18n = require("@wordpress/i18n"); var _element = require("@wordpress/element"); var _circularOptionPickerContext = require("./circular-option-picker-context"); var _composite = require("../composite"); var _circularOptionPickerOption = require("./circular-option-picker-option"); var _circularOptionPickerOptionGroup = require("./circular-option-picker-option-group"); var _circularOptionPickerActions = require("./circular-option-picker-actions"); var _jsxRuntime = require("react/jsx-runtime"); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** *`CircularOptionPicker` is a component that displays a set of options as circular buttons. * * ```jsx * import { CircularOptionPicker } from '../circular-option-picker'; * import { useState } from '@wordpress/element'; * * const Example = () => { * const [ currentColor, setCurrentColor ] = useState(); * const colors = [ * { color: '#f00', name: 'Red' }, * { color: '#0f0', name: 'Green' }, * { color: '#00f', name: 'Blue' }, * ]; * const colorOptions = ( * <> * { colors.map( ( { color, name }, index ) => { * return ( * <CircularOptionPicker.Option * key={ `${ color }-${ index }` } * tooltipText={ name } * style={ { backgroundColor: color, color } } * isSelected={ index === currentColor } * onClick={ () => setCurrentColor( index ) } * /> * ); * } ) } * </> * ); * return ( * <CircularOptionPicker * options={ colorOptions } * actions={ * <CircularOptionPicker.ButtonAction * onClick={ () => setCurrentColor( undefined ) } * > * { 'Clear' } * </CircularOptionPicker.ButtonAction> * } * /> * ); * }; * ``` */function ListboxCircularOptionPicker(props) { const { actions, options, baseId, className, loop = true, children, ...additionalProps } = props; const [activeId, setActiveId] = (0, _element.useState)(undefined); const contextValue = (0, _element.useMemo)(() => ({ baseId, activeId, setActiveId }), [baseId, activeId, setActiveId]); return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: className, children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_circularOptionPickerContext.CircularOptionPickerContext.Provider, { value: contextValue, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_composite.Composite, { ...additionalProps, id: baseId, focusLoop: loop, rtl: (0, _i18n.isRTL)(), role: "listbox", activeId: activeId, setActiveId: setActiveId, children: options }), children, actions] }) }); } function ButtonsCircularOptionPicker(props) { const { actions, options, children, baseId, ...additionalProps } = props; const contextValue = (0, _element.useMemo)(() => ({ baseId }), [baseId]); return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { ...additionalProps, role: "group", id: baseId, children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_circularOptionPickerContext.CircularOptionPickerContext.Provider, { value: contextValue, children: [options, children, actions] }) }); } function CircularOptionPicker(props) { const { asButtons, actions: actionsProp, options: optionsProp, children, className, ...additionalProps } = props; const baseId = (0, _compose.useInstanceId)(CircularOptionPicker, 'components-circular-option-picker', additionalProps.id); const OptionPickerImplementation = asButtons ? ButtonsCircularOptionPicker : ListboxCircularOptionPicker; const actions = actionsProp ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: "components-circular-option-picker__custom-clear-wrapper", children: actionsProp }) : undefined; const options = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: "components-circular-option-picker__swatches", children: optionsProp }); return /*#__PURE__*/(0, _jsxRuntime.jsx)(OptionPickerImplementation, { ...additionalProps, baseId: baseId, className: (0, _clsx.default)('components-circular-option-picker', className), actions: actions, options: options, children: children }); } CircularOptionPicker.Option = _circularOptionPickerOption.Option; CircularOptionPicker.OptionGroup = _circularOptionPickerOptionGroup.OptionGroup; CircularOptionPicker.ButtonAction = _circularOptionPickerActions.ButtonAction; CircularOptionPicker.DropdownLinkAction = _circularOptionPickerActions.DropdownLinkAction; var _default = exports.default = CircularOptionPicker; //# sourceMappingURL=circular-option-picker.js.map