@gechiui/components
Version:
UI components for GeChiUI.
197 lines (171 loc) • 5.71 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CustomColorPickerDropdown = CustomColorPickerDropdown;
exports.default = ColorPalette;
var _element = require("@gechiui/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _colord = require("colord");
var _names = _interopRequireDefault(require("colord/plugins/names"));
var _a11y = _interopRequireDefault(require("colord/plugins/a11y"));
var _classnames = _interopRequireDefault(require("classnames"));
var _i18n = require("@gechiui/i18n");
var _dropdown = _interopRequireDefault(require("../dropdown"));
var _colorPicker = require("../color-picker");
var _circularOptionPicker = _interopRequireDefault(require("../circular-option-picker"));
var _vStack = require("../v-stack");
var _styles = require("./styles");
/**
* External dependencies
*/
/**
* GeChiUI dependencies
*/
/**
* Internal dependencies
*/
(0, _colord.extend)([_names.default, _a11y.default]);
function SinglePalette(_ref) {
let {
className,
clearColor,
colors,
onChange,
value,
actions
} = _ref;
const colorOptions = (0, _element.useMemo)(() => {
return (0, _lodash.map)(colors, _ref2 => {
let {
color,
name
} = _ref2;
const colordColor = (0, _colord.colord)(color);
return (0, _element.createElement)(_circularOptionPicker.default.Option, {
key: color,
isSelected: value === color,
selectedIconProps: value === color ? {
fill: colordColor.contrast() > colordColor.contrast('#000') ? '#fff' : '#000'
} : {},
tooltipText: name || // translators: %s: color hex code e.g: "#f00".
(0, _i18n.sprintf)((0, _i18n.__)('颜色代码:%s'), color),
style: {
backgroundColor: color,
color
},
onClick: value === color ? clearColor : () => onChange(color),
"aria-label": name ? // translators: %s: The name of the color e.g: "vivid red".
(0, _i18n.sprintf)((0, _i18n.__)('颜色:%s'), name) : // translators: %s: color hex code e.g: "#f00".
(0, _i18n.sprintf)((0, _i18n.__)('颜色代码:%s'), color)
});
});
}, [colors, value, onChange, clearColor]);
return (0, _element.createElement)(_circularOptionPicker.default, {
className: className,
options: colorOptions,
actions: actions
});
}
function MultiplePalettes(_ref3) {
let {
className,
clearColor,
colors,
onChange,
value,
actions
} = _ref3;
return (0, _element.createElement)(_vStack.VStack, {
spacing: 3,
className: className
}, colors.map((_ref4, index) => {
let {
name,
colors: colorPalette
} = _ref4;
return (0, _element.createElement)(_vStack.VStack, {
spacing: 2,
key: index
}, (0, _element.createElement)(_styles.ColorHeading, null, name), (0, _element.createElement)(SinglePalette, {
clearColor: clearColor,
colors: colorPalette,
onChange: onChange,
value: value,
actions: colors.length === index + 1 ? actions : null
}));
}));
}
function CustomColorPickerDropdown(_ref5) {
let {
isRenderedInSidebar,
...props
} = _ref5;
return (0, _element.createElement)(_dropdown.default, (0, _extends2.default)({
contentClassName: (0, _classnames.default)('components-color-palette__custom-color-dropdown-content', {
'is-rendered-in-sidebar': isRenderedInSidebar
})
}, props));
}
function ColorPalette(_ref6) {
let {
clearable = true,
className,
colors,
disableCustomColors = false,
enableAlpha,
onChange,
value,
__experimentalHasMultipleOrigins = false,
__experimentalIsRenderedInSidebar = false
} = _ref6;
const clearColor = (0, _element.useCallback)(() => onChange(undefined), [onChange]);
const Component = __experimentalHasMultipleOrigins && colors !== null && colors !== void 0 && colors.length ? MultiplePalettes : SinglePalette;
const renderCustomColorPicker = () => (0, _element.createElement)(_colorPicker.ColorPicker, {
color: value,
onChange: color => onChange(color),
enableAlpha: enableAlpha
});
let dropdownPosition;
if (__experimentalIsRenderedInSidebar) {
dropdownPosition = 'bottom left';
}
const colordColor = (0, _colord.colord)(value);
return (0, _element.createElement)(_vStack.VStack, {
spacing: 3,
className: className
}, !disableCustomColors && (0, _element.createElement)(CustomColorPickerDropdown, {
position: dropdownPosition,
isRenderedInSidebar: __experimentalIsRenderedInSidebar,
renderContent: renderCustomColorPicker,
renderToggle: _ref7 => {
let {
isOpen,
onToggle
} = _ref7;
return (0, _element.createElement)("button", {
className: "components-color-palette__custom-color",
"aria-expanded": isOpen,
"aria-haspopup": "true",
onClick: onToggle,
"aria-label": (0, _i18n.__)('自定义颜色选择器'),
style: {
background: value,
color: colordColor.contrast() > colordColor.contrast('#000') ? '#fff' : '#000'
}
}, value);
}
}), (0, _element.createElement)(Component, {
clearable: clearable,
clearColor: clearColor,
colors: colors,
onChange: onChange,
value: value,
actions: !!clearable && (0, _element.createElement)(_circularOptionPicker.default.ButtonAction, {
onClick: clearColor
}, (0, _i18n.__)('清除'))
}));
}
//# sourceMappingURL=index.js.map