@wordpress/components
Version:
UI components for WordPress.
140 lines (135 loc) • 3.82 kB
JavaScript
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