UNPKG

react-color

Version:

A Collection of Color Pickers from Sketch, Photoshop, Chrome & more

363 lines (327 loc) 12.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ChromeFields = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactcss = require('reactcss'); var _reactcss2 = _interopRequireDefault(_reactcss); var _color = require('../../helpers/color'); var color = _interopRequireWildcard(_color); var _isUndefined = require('lodash/isUndefined'); var _isUndefined2 = _interopRequireDefault(_isUndefined); var _common = require('../common'); var _UnfoldMoreHorizontalIcon = require('@icons/material/UnfoldMoreHorizontalIcon'); var _UnfoldMoreHorizontalIcon2 = _interopRequireDefault(_UnfoldMoreHorizontalIcon); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable react/no-did-mount-set-state, no-param-reassign */ var ChromeFields = exports.ChromeFields = function (_React$Component) { _inherits(ChromeFields, _React$Component); function ChromeFields(props) { _classCallCheck(this, ChromeFields); var _this = _possibleConstructorReturn(this, (ChromeFields.__proto__ || Object.getPrototypeOf(ChromeFields)).call(this)); _this.toggleViews = function () { if (_this.state.view === 'hex') { _this.setState({ view: 'rgb' }); } else if (_this.state.view === 'rgb') { _this.setState({ view: 'hsl' }); } else if (_this.state.view === 'hsl') { if (_this.props.hsl.a === 1) { _this.setState({ view: 'hex' }); } else { _this.setState({ view: 'rgb' }); } } }; _this.handleChange = function (data, e) { if (data.hex) { color.isValidHex(data.hex) && _this.props.onChange({ hex: data.hex, source: 'hex' }, e); } else if (data.r || data.g || data.b) { _this.props.onChange({ r: data.r || _this.props.rgb.r, g: data.g || _this.props.rgb.g, b: data.b || _this.props.rgb.b, source: 'rgb' }, e); } else if (data.a) { if (data.a < 0) { data.a = 0; } else if (data.a > 1) { data.a = 1; } _this.props.onChange({ h: _this.props.hsl.h, s: _this.props.hsl.s, l: _this.props.hsl.l, a: Math.round(data.a * 100) / 100, source: 'rgb' }, e); } else if (data.h || data.s || data.l) { // Remove any occurances of '%'. if (typeof data.s === 'string' && data.s.includes('%')) { data.s = data.s.replace('%', ''); } if (typeof data.l === 'string' && data.l.includes('%')) { data.l = data.l.replace('%', ''); } // We store HSL as a unit interval so we need to override the 1 input to 0.01 if (data.s == 1) { data.s = 0.01; } else if (data.l == 1) { data.l = 0.01; } _this.props.onChange({ h: data.h || _this.props.hsl.h, s: Number(!(0, _isUndefined2.default)(data.s) ? data.s : _this.props.hsl.s), l: Number(!(0, _isUndefined2.default)(data.l) ? data.l : _this.props.hsl.l), source: 'hsl' }, e); } }; _this.showHighlight = function (e) { e.currentTarget.style.background = '#eee'; }; _this.hideHighlight = function (e) { e.currentTarget.style.background = 'transparent'; }; if (props.hsl.a !== 1 && props.view === "hex") { _this.state = { view: "rgb" }; } else { _this.state = { view: props.view }; } return _this; } _createClass(ChromeFields, [{ key: 'render', value: function render() { var _this2 = this; var styles = (0, _reactcss2.default)({ 'default': { wrap: { paddingTop: '16px', display: 'flex' }, fields: { flex: '1', display: 'flex', marginLeft: '-6px' }, field: { paddingLeft: '6px', width: '100%' }, alpha: { paddingLeft: '6px', width: '100%' }, toggle: { width: '32px', textAlign: 'right', position: 'relative' }, icon: { marginRight: '-4px', marginTop: '12px', cursor: 'pointer', position: 'relative' }, iconHighlight: { position: 'absolute', width: '24px', height: '28px', background: '#eee', borderRadius: '4px', top: '10px', left: '12px', display: 'none' }, input: { fontSize: '11px', color: '#333', width: '100%', borderRadius: '2px', border: 'none', boxShadow: 'inset 0 0 0 1px #dadada', height: '21px', textAlign: 'center' }, label: { textTransform: 'uppercase', fontSize: '11px', lineHeight: '11px', color: '#969696', textAlign: 'center', display: 'block', marginTop: '12px' }, svg: { fill: '#333', width: '24px', height: '24px', border: '1px transparent solid', borderRadius: '5px' } }, 'disableAlpha': { alpha: { display: 'none' } } }, this.props, this.state); var fields = void 0; if (this.state.view === 'hex') { fields = _react2.default.createElement( 'div', { style: styles.fields, className: 'flexbox-fix' }, _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'hex', value: this.props.hex, onChange: this.handleChange }) ) ); } else if (this.state.view === 'rgb') { fields = _react2.default.createElement( 'div', { style: styles.fields, className: 'flexbox-fix' }, _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'r', value: this.props.rgb.r, onChange: this.handleChange }) ), _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'g', value: this.props.rgb.g, onChange: this.handleChange }) ), _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'b', value: this.props.rgb.b, onChange: this.handleChange }) ), _react2.default.createElement( 'div', { style: styles.alpha }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'a', value: this.props.rgb.a, arrowOffset: 0.01, onChange: this.handleChange }) ) ); } else if (this.state.view === 'hsl') { fields = _react2.default.createElement( 'div', { style: styles.fields, className: 'flexbox-fix' }, _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'h', value: Math.round(this.props.hsl.h), onChange: this.handleChange }) ), _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 's', value: Math.round(this.props.hsl.s * 100) + '%', onChange: this.handleChange }) ), _react2.default.createElement( 'div', { style: styles.field }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'l', value: Math.round(this.props.hsl.l * 100) + '%', onChange: this.handleChange }) ), _react2.default.createElement( 'div', { style: styles.alpha }, _react2.default.createElement(_common.EditableInput, { style: { input: styles.input, label: styles.label }, label: 'a', value: this.props.hsl.a, arrowOffset: 0.01, onChange: this.handleChange }) ) ); } return _react2.default.createElement( 'div', { style: styles.wrap, className: 'flexbox-fix' }, fields, _react2.default.createElement( 'div', { style: styles.toggle }, _react2.default.createElement( 'div', { style: styles.icon, onClick: this.toggleViews, ref: function ref(icon) { return _this2.icon = icon; } }, _react2.default.createElement(_UnfoldMoreHorizontalIcon2.default, { style: styles.svg, onMouseOver: this.showHighlight, onMouseEnter: this.showHighlight, onMouseOut: this.hideHighlight }) ) ) ); } }], [{ key: 'getDerivedStateFromProps', value: function getDerivedStateFromProps(nextProps, state) { if (nextProps.hsl.a !== 1 && state.view === 'hex') { return { view: 'rgb' }; } return null; } }]); return ChromeFields; }(_react2.default.Component); ChromeFields.defaultProps = { view: "hex" }; exports.default = ChromeFields;