UNPKG

@wordpress/components

Version:
140 lines (135 loc) 3.82 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement } from "@wordpress/element"; /** * External dependencies */ import classnames from 'classnames'; /** * WordPress dependencies */ import { Icon, check } from '@wordpress/icons'; /** * Internal dependencies */ import Button from '../button'; import Dropdown from '../dropdown'; import Tooltip from '../tooltip'; export function Option(_ref) { let { className, isSelected, selectedIconProps, tooltipText, ...additionalProps } = _ref; const optionButton = createElement(Button, _extends({ isPressed: isSelected, className: "components-circular-option-picker__option" }, additionalProps)); return createElement("div", { className: classnames(className, 'components-circular-option-picker__option-wrapper') }, tooltipText ? createElement(Tooltip, { text: tooltipText }, optionButton) : optionButton, isSelected && createElement(Icon, _extends({ icon: check }, selectedIconProps ? selectedIconProps : {}))); } export function DropdownLinkAction(_ref2) { let { buttonProps, className, dropdownProps, linkText } = _ref2; return createElement(Dropdown, _extends({ className: classnames('components-circular-option-picker__dropdown-link-action', className), renderToggle: _ref3 => { let { isOpen, onToggle } = _ref3; return createElement(Button, _extends({ "aria-expanded": isOpen, "aria-haspopup": "true", onClick: onToggle, variant: "link" }, buttonProps), linkText); } }, dropdownProps)); } export function ButtonAction(_ref4) { let { className, children, ...additionalProps } = _ref4; return createElement(Button, _extends({ className: classnames('components-circular-option-picker__clear', className), variant: "tertiary" }, additionalProps), children); } /** *`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 ) } * aria-label={ name } * /> * ); * } ) } * </> * ); * return ( * <CircularOptionPicker * options={ colorOptions } * actions={ * <CircularOptionPicker.ButtonAction * onClick={ () => setCurrentColor( undefined ) } * > * { 'Clear' } * </CircularOptionPicker.ButtonAction> * } * /> * ); * }; * ``` */ function CircularOptionPicker(props) { const { actions, className, options, children } = props; return createElement("div", { className: classnames('components-circular-option-picker', className) }, createElement("div", { className: "components-circular-option-picker__swatches" }, options), children, actions && createElement("div", { className: "components-circular-option-picker__custom-clear-wrapper" }, actions)); } CircularOptionPicker.Option = Option; CircularOptionPicker.ButtonAction = ButtonAction; CircularOptionPicker.DropdownLinkAction = DropdownLinkAction; export default CircularOptionPicker; //# sourceMappingURL=index.js.map