UNPKG

wix-style-react

Version:
226 lines (224 loc) • 7.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _color3 = _interopRequireDefault(require("color")); var _propTypes = _interopRequireDefault(require("prop-types")); var _ColorPickerHsb = _interopRequireDefault(require("./ColorPickerHsb")); var _ColorPickerHue = _interopRequireDefault(require("./ColorPickerHue")); var _ColorPickerHistory = _interopRequireDefault(require("./ColorPickerHistory")); var _ColorPickerConverter = _interopRequireDefault(require("./ColorPickerConverter")); var _ColorPickerActions = _interopRequireDefault(require("./ColorPickerActions")); var _ColorPickerSt = require("./ColorPicker.st.css"); var _utils = require("./utils"); var _constants = require("./constants"); var _jsxFileName = "/home/builduser/work/a9c1ac8876d5057c/packages/wix-style-react/dist/cjs/ColorPicker/ColorPicker.js"; var FALLBACK_COLOR = (0, _color3.default)('#86c6e5'); /** * Color Picker * * Under the hood uses color manipulation library [https://github.com/Qix-/color](https://github.com/Qix-/color). * Value for this component can be given in `string` or `object` format. * The callbacks always respond with color `object` format. */ class ColorPicker extends _react.default.PureComponent { constructor(props) { super(props); this._renderChildren = () => { var { children } = this.props; var childrenInterface = { changeColor: _color => { try { var colorObject = _color; if (typeof _color !== 'object') { colorObject = _color === '' ? (0, _color3.default)().fade(1) : (0, _color3.default)(_color); } this.change(colorObject); } catch (err) {} } }; if (typeof children === 'function') { return children(childrenInterface); } return children; }; /** * sets the selected color * @param {object} color - An object that contains data for the selected color, model, and valpha. */ this.change = _color => { this.setState({ current: _color }, () => { this.props.onChange(_color); }); }; /** * confirms the selected color */ this.confirm = () => { this.setState({ previous: this.state.current }); this.props.onConfirm(this.state.current); }; /** * cancels the selected color */ this.cancel = () => { this.props.onCancel(this.state.previous); }; var _color2 = (0, _utils.safeColor)(props.value, props.allowEmpty) || FALLBACK_COLOR; this.state = { current: _color2, previous: _color2 }; } render() { var { showHistory, showInput, showConverter, children, value, onAdd, addTooltipContent, allowEmpty, emptyPlaceholder, dataHook } = this.props; var { current, previous } = this.state; return /*#__PURE__*/_react.default.createElement("div", { className: _ColorPickerSt.classes.root, "data-hook": dataHook, __self: this, __source: { fileName: _jsxFileName, lineNumber: 48, columnNumber: 7 } }, /*#__PURE__*/_react.default.createElement(_ColorPickerHsb.default, { dataHook: _constants.DataHooks.hsb, current: current, onChange: this.change, __self: this, __source: { fileName: _jsxFileName, lineNumber: 49, columnNumber: 9 } }), /*#__PURE__*/_react.default.createElement(_ColorPickerHue.default, { dataHook: _constants.DataHooks.hue, current: current, onChange: this.change, __self: this, __source: { fileName: _jsxFileName, lineNumber: 54, columnNumber: 9 } }), /*#__PURE__*/_react.default.createElement(_ColorPickerHistory.default, { show: showHistory, current: current, previous: previous, onClick: this.change, __self: this, __source: { fileName: _jsxFileName, lineNumber: 59, columnNumber: 9 } }), /*#__PURE__*/_react.default.createElement(_ColorPickerConverter.default, { dataHook: _constants.DataHooks.converter, showConverter: showConverter, showInput: showInput, current: current, onChange: this.change, onEnter: this.confirm, onAdd: onAdd, addTooltipContent: addTooltipContent, allowEmpty: allowEmpty, hexPlaceholder: emptyPlaceholder, __self: this, __source: { fileName: _jsxFileName, lineNumber: 65, columnNumber: 9 } }), children && /*#__PURE__*/_react.default.createElement("div", { className: _ColorPickerSt.classes.children, "data-hook": _constants.DataHooks.children, __self: this, __source: { fileName: _jsxFileName, lineNumber: 78, columnNumber: 11 } }, this._renderChildren()), /*#__PURE__*/_react.default.createElement(_ColorPickerActions.default, { disabled: !allowEmpty && value === '', onConfirm: this.confirm, onCancel: this.cancel, __self: this, __source: { fileName: _jsxFileName, lineNumber: 82, columnNumber: 9 } })); } UNSAFE_componentWillReceiveProps(props) { var _color = (0, _utils.safeColor)(props.value, props.allowEmpty); if (!_color) return; if (_color.hex() !== this.state.current.hex() || (0, _utils.isTransparent)(_color) !== (0, _utils.isTransparent)(this.state.current)) { this.setState({ current: _color }); } } } ColorPicker.displayName = 'ColorPicker'; ColorPicker.propTypes = { /** Applies a data-hook HTML attribute that can be used in the tests */ dataHook: _propTypes.default.string, /** Defines current color. It can be provided in `string` or `object` format [https://github.com/Qix-/color](https://github.com/Qix-/color) */ value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]).isRequired, /** Specifies whether current and previously used colors should be displayed */ showHistory: _propTypes.default.bool, /** Specifies whether `HEX`/`RGB`/`HSB` converter tabs be displayed */ showConverter: _propTypes.default.bool, /** Specifies whether color input in HEX mode should be displayed. This is relevant only if `showConverter` is `false` */ showInput: _propTypes.default.bool, /** Defines an event handler for color change. */ onChange: _propTypes.default.func, /** Defines an event handler for cancel button click. */ onCancel: _propTypes.default.func, /** Defines an event handler for confirm button click. */ onConfirm: _propTypes.default.func, /** Defines an event handler for color add button click. If not passed, the plus icon will not be visible. */ onAdd: _propTypes.default.func, /** Defines child items to be rendered above action buttons. Accepts any kind of content. */ children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]), /** Defines content to show in add button tooltip. Does not appear if `onAdd` is not passed. */ addTooltipContent: _propTypes.default.node, /** Allows to submit when color is not selected. Returns a color object with alpha equal to 0. */ allowEmpty: _propTypes.default.bool, /** Defines a placeholder text to show in an input when `allowEmpty` is true */ emptyPlaceholder: _propTypes.default.string }; ColorPicker.defaultProps = { showHistory: false, showConverter: true, showInput: true, allowEmpty: false, onChange: () => {}, onCancel: () => {}, onConfirm: () => {} }; var _default = exports.default = ColorPicker; //# sourceMappingURL=ColorPicker.js.map