UNPKG

@wordpress/components

Version:
161 lines (142 loc) 5.01 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _element = require("@wordpress/element"); var _es = _interopRequireDefault(require("fast-deep-equal/es6")); var _i18n = require("@wordpress/i18n"); var _colorListPicker = _interopRequireDefault(require("./color-list-picker")); var _circularOptionPicker = _interopRequireDefault(require("../circular-option-picker")); var _vStack = require("../v-stack"); var _customDuotoneBar = _interopRequireDefault(require("./custom-duotone-bar")); var _utils = require("./utils"); var _spacer = require("../spacer"); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * ```jsx * import { DuotonePicker, DuotoneSwatch } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const DUOTONE_PALETTE = [ * { colors: [ '#8c00b7', '#fcff41' ], name: 'Purple and yellow', slug: 'purple-yellow' }, * { colors: [ '#000097', '#ff4747' ], name: 'Blue and red', slug: 'blue-red' }, * ]; * * const COLOR_PALETTE = [ * { color: '#ff4747', name: 'Red', slug: 'red' }, * { color: '#fcff41', name: 'Yellow', slug: 'yellow' }, * { color: '#000097', name: 'Blue', slug: 'blue' }, * { color: '#8c00b7', name: 'Purple', slug: 'purple' }, * ]; * * const Example = () => { * const [ duotone, setDuotone ] = useState( [ '#000000', '#ffffff' ] ); * return ( * <> * <DuotonePicker * duotonePalette={ DUOTONE_PALETTE } * colorPalette={ COLOR_PALETTE } * value={ duotone } * onChange={ setDuotone } * /> * <DuotoneSwatch values={ duotone } /> * </> * ); * }; * ``` */ function DuotonePicker(_ref) { let { clearable = true, unsetable = true, colorPalette, duotonePalette, disableCustomColors, disableCustomDuotone, value, onChange } = _ref; const [defaultDark, defaultLight] = (0, _element.useMemo)(() => (0, _utils.getDefaultColors)(colorPalette), [colorPalette]); const isUnset = value === 'unset'; const unsetOption = (0, _element.createElement)(_circularOptionPicker.default.Option, { key: "unset", value: "unset", isSelected: isUnset, tooltipText: (0, _i18n.__)('Unset'), className: "components-duotone-picker__color-indicator", onClick: () => { onChange(isUnset ? undefined : 'unset'); } }); const options = duotonePalette.map(_ref2 => { let { colors, slug, name } = _ref2; const style = { background: (0, _utils.getGradientFromCSSColors)(colors, '135deg'), color: 'transparent' }; const tooltipText = name !== null && name !== void 0 ? name : (0, _i18n.sprintf)( // translators: %s: duotone code e.g: "dark-grayscale" or "7f7f7f-ffffff". (0, _i18n.__)('Duotone code: %s'), slug); const label = name ? (0, _i18n.sprintf)( // translators: %s: The name of the option e.g: "Dark grayscale". (0, _i18n.__)('Duotone: %s'), name) : tooltipText; const isSelected = (0, _es.default)(colors, value); return (0, _element.createElement)(_circularOptionPicker.default.Option, { key: slug, value: colors, isSelected: isSelected, "aria-label": label, tooltipText: tooltipText, style: style, onClick: () => { onChange(isSelected ? undefined : colors); } }); }); return (0, _element.createElement)(_circularOptionPicker.default, { options: unsetable ? [unsetOption, ...options] : options, actions: !!clearable && (0, _element.createElement)(_circularOptionPicker.default.ButtonAction, { onClick: () => onChange(undefined) }, (0, _i18n.__)('Clear')) }, (0, _element.createElement)(_spacer.Spacer, { paddingTop: 4 }, (0, _element.createElement)(_vStack.VStack, { spacing: 3 }, !disableCustomColors && !disableCustomDuotone && (0, _element.createElement)(_customDuotoneBar.default, { value: isUnset ? undefined : value, onChange: onChange }), !disableCustomDuotone && (0, _element.createElement)(_colorListPicker.default, { labels: [(0, _i18n.__)('Shadows'), (0, _i18n.__)('Highlights')], colors: colorPalette, value: isUnset ? undefined : value, disableCustomColors: disableCustomColors, enableAlpha: true, onChange: newColors => { if (!newColors[0]) { newColors[0] = defaultDark; } if (!newColors[1]) { newColors[1] = defaultLight; } const newValue = newColors.length >= 2 ? newColors : undefined; // @ts-expect-error TODO: The color arrays for a DuotonePicker should be a tuple of two colors, // but it's currently typed as a string[]. // See also https://github.com/WordPress/gutenberg/pull/49060#discussion_r1136951035 onChange(newValue); } })))); } var _default = DuotonePicker; exports.default = _default; //# sourceMappingURL=duotone-picker.js.map