UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

682 lines (585 loc) 20.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper")); var _tslib = require("tslib"); var _react = _interopRequireDefault(require("react")); var _mobxReact = require("mobx-react"); var _mobx = require("mobx"); var _defaultTo = _interopRequireDefault(require("lodash/defaultTo")); var _isEmpty = _interopRequireDefault(require("lodash/isEmpty")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _TriggerField2 = _interopRequireDefault(require("../trigger-field/TriggerField")); var _autobind = _interopRequireDefault(require("../_util/autobind")); var _EventManager = _interopRequireDefault(require("../_util/EventManager")); var _enum = require("../data-set/enum"); var _localeContext = require("../locale-context"); function getNodeRect(node) { return node.getBoundingClientRect(); } var ColorPicker = /*#__PURE__*/function (_TriggerField) { (0, _inherits2["default"])(ColorPicker, _TriggerField); var _super = (0, _createSuper2["default"])(ColorPicker); function ColorPicker() { var _this; (0, _classCallCheck2["default"])(this, ColorPicker); _this = _super.apply(this, arguments); _this.eventManager = new _EventManager["default"](typeof window === 'undefined' ? undefined : document); _this.HSV = { h: 0, s: 1, v: 1, a: 1 }; _this.saveGradientRef = function (node) { return _this.gradient = node; }; _this.saveSelectPointerRef = function (node) { return _this.selectPointer = node; }; _this.saveHuePointerRef = function (node) { return _this.huePointer = node; }; _this.saveHueRef = function (node) { return _this.hue = node; }; _this.saveOpacityRef = function (node) { return _this.opacity = node; }; _this.saveOpacityPointerRef = function (node) { return _this.opacityPointer = node; }; return _this; } (0, _createClass2["default"])(ColorPicker, [{ key: "defaultValidationMessages", get: function get() { var label = this.getProp('label'); return { valueMissing: (0, _localeContext.$l)('ColorPicker', label ? 'value_missing' : 'value_missing_no_label', { label: label }), typeMismatch: (0, _localeContext.$l)('ColorPicker', 'type_mismatch') }; } }, { key: "componentDidUpdate", value: function componentDidUpdate() { var popup = this.popup; if (popup) { var _this$HSV = this.HSV, h = _this$HSV.h, s = _this$HSV.s, v = _this$HSV.v; var huePointer = this.huePointer, selectPointer = this.selectPointer, hue = this.hue, gradient = this.gradient; if (huePointer && hue) { var _getNodeRect = getNodeRect(hue), width = _getNodeRect.width; this.setHuePointer(width * h / 360, huePointer, hue, false); } if (selectPointer && gradient) { var _getNodeRect2 = getNodeRect(gradient), _width = _getNodeRect2.width, height = _getNodeRect2.height; var left = s * _width; var top = height - v * height; this.setGradientPointer(left, top, selectPointer, gradient, false); } } } }, { key: "syncValueOnBlur", value: function syncValueOnBlur(value) { if (value !== '' && value[0] !== '#' && !value.startsWith('rgb') && !value.startsWith('hls')) { value = "#".concat(value); } (0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "syncValueOnBlur", this).call(this, value); } }, { key: "getFieldType", value: function getFieldType() { return _enum.FieldType.color; } }, { key: "getPrefix", value: function getPrefix() { var prefixCls = this.prefixCls; return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-prefix") }, /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-color"), style: { backgroundColor: this.getValue() } })); } }, { key: "getPopupFooter", value: function getPopupFooter() { var prefixCls = this.prefixCls; var huePointerProps = { onMouseDown: this.handleHPMouseDown, ref: this.saveHuePointerRef, className: "".concat(prefixCls, "-popup-footer-slider-pointer") }; return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-popup-footer") }, /*#__PURE__*/_react["default"].createElement("div", { ref: this.saveHueRef, className: "".concat(prefixCls, "-popup-footer-slider") }, /*#__PURE__*/_react["default"].createElement("div", { onClick: this.handleHueClick, className: "hue" }), /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, huePointerProps))), /*#__PURE__*/_react["default"].createElement("div", { ref: this.saveOpacityRef, className: "".concat(prefixCls, "-popup-footer-slider opacity") }, /*#__PURE__*/_react["default"].createElement("div", { ref: this.saveOpacityPointerRef, className: "".concat(prefixCls, "-popup-footer-slider-pointer") }))); } }, { key: "getPopupContent", value: function getPopupContent() { var prefixCls = this.prefixCls; var gradientProps = { className: "".concat(prefixCls, "-popup-body-gradient"), onClick: this.handleGPClick, ref: this.saveGradientRef }; var gradientPointerProps = { onMouseDown: this.handleGPMouseDown, ref: this.saveSelectPointerRef, className: "".concat(prefixCls, "-popup-body-selector") }; if ((0, _isEmpty["default"])(this.hueColor)) { this.setColor(this.getValue()); } return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-popup-view") }, /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-popup-body"), style: { backgroundColor: (0, _defaultTo["default"])(this.hueColor, '#ff0000') } }, /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, gradientProps)), /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, gradientPointerProps))), this.getPopupFooter()); } }, { key: "setHSV", value: function setHSV(h, s, v, a) { var HSV = this.HSV; if (h !== undefined && h !== HSV.h) { HSV.h = h; } if (v !== undefined && v !== HSV.v) { HSV.v = v; } if (s !== undefined && s !== HSV.s) { HSV.s = s; } if (a !== undefined && a !== HSV.a) { HSV.a = a; } } }, { key: "setHueColor", value: function setHueColor(color) { if (color !== this.hueColor) { this.hueColor = color; } } }, { key: "setColor", value: function setColor(color) { if (!(0, _isNil["default"])(color) && color.slice(0, 1) === '#' && color.length > 3) { var gradient = this.gradient, selectPointer = this.selectPointer, hue = this.hue, huePointer = this.huePointer; var _this$hexToRGB = this.hexToRGB(color), r = _this$hexToRGB.r, g = _this$hexToRGB.g, b = _this$hexToRGB.b, a = _this$hexToRGB.a; var _this$rgbToHSV = this.rgbToHSV(r / 255, g / 255, b / 255, a), h = _this$rgbToHSV.h, s = _this$rgbToHSV.s, v = _this$rgbToHSV.v; this.setHSV(h, s, v, a); var _this$hsvToRGB = this.hsvToRGB(h, 1, 1, 1), hr = _this$hsvToRGB.r, hg = _this$hsvToRGB.g, hb = _this$hsvToRGB.b, ha = _this$hsvToRGB.a; var hueColor = this.rgbToHEX(hr, hg, hb, ha); this.setHueColor(hueColor); if (gradient && selectPointer && hue && huePointer) { var _getNodeRect3 = getNodeRect(gradient), height = _getNodeRect3.height, width = _getNodeRect3.width; var left = s * width; var top = height - v * height; var _getNodeRect4 = getNodeRect(hue), hueWidth = _getNodeRect4.width; var hueLeft = h / 360 * hueWidth; this.setHuePointer(hueLeft, huePointer, hue, false); this.setGradientPointer(left, top, selectPointer, gradient, false); } } } }, { key: "positionToHSV", value: function positionToHSV(left, top, width, height) { var _this$HSV2 = this.HSV, h = _this$HSV2.h, a = _this$HSV2.a; if (width < 0) { width = 0; } var s = left / width; var v = 1 - top / height; return { h: h, s: s, v: v, a: a }; } }, { key: "rgbToHEX", value: function rgbToHEX(r, g, b, a) { function hex(num) { var hexNum = num.toString(16); return hexNum.length === 1 ? "0".concat(hexNum) : hexNum; } if (a !== 1) { return "#".concat(hex(r)).concat(hex(g)).concat(hex(b)).concat(hex(a * 255 / 10)); } return "#".concat(hex(r)).concat(hex(g)).concat(hex(b)); } }, { key: "hexToRGB", value: function hexToRGB(hex) { hex = hex.split('#')[1] || hex.split('#')[0]; var length = hex.length; var results = ''; var hexArray = hex.split(''); if (length === 3 || length === 4) { for (var i = 0; i < length; i++) { results = "".concat(results).concat(hexArray[i]).concat(hexArray[i]); } } else if (length === 5) { results = "".concat(hex).concat(hexArray[length - 1]); } else { results = hex; } results = results.slice(0, 6); var result = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(results); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16), a: 1 } : { r: 255, g: 0, b: 0, a: 1 }; } }, { key: "rgbToHSV", value: function rgbToHSV(r, g, b, a) { var max = Math.max(r, g, b); var min = Math.min(r, g, b); var v = max; var s; var h; if (v === 0) { s = 0; } else { s = (max - min) / max; } if (max === min) { h = 0; } else { var d = r === min ? g - b : b === min ? r - g : b - r; var m = r === min ? 3 : b === min ? 1 : 5; h = 60 * (m - d / (max - min)); } if (h < 0) { h += 360; } return { h: h, s: s, v: v, a: a }; } }, { key: "hsvToRGB", value: function hsvToRGB(h, s, v, a) { h /= 60; var h1 = Math.floor(h); var f = h - h1; var p = v * (1 - s); var q = v * (1 - f * s); var t = v * (1 - (1 - f) * s); var rgb; switch (h1) { case 0: rgb = { r: v, g: t, b: p, a: a }; break; case 1: rgb = { r: q, g: v, b: p, a: a }; break; case 2: rgb = { r: p, g: v, b: t, a: a }; break; case 3: rgb = { r: p, g: q, b: v, a: a }; break; case 4: rgb = { r: t, g: p, b: v, a: a }; break; default: rgb = { r: v, g: p, b: q, a: a }; break; } rgb.r = Math.floor(rgb.r * 255); rgb.g = Math.floor(rgb.g * 255); rgb.b = Math.floor(rgb.b * 255); return rgb; } }, { key: "setGradientPointer", value: function setGradientPointer(x, y, pointer, wrap, isClient) { var _getNodeRect5 = getNodeRect(wrap), wrapX = _getNodeRect5.left, wrapY = _getNodeRect5.top, wrapW = _getNodeRect5.width, wrapH = _getNodeRect5.height; var _getNodeRect6 = getNodeRect(pointer), pointerH = _getNodeRect6.height, pointerW = _getNodeRect6.width; var left; var top; if (isClient) { left = x - wrapX < 0 ? 0 : x - wrapX > wrapW ? wrapW : x - wrapX; top = y - wrapY < 0 ? 0 : y - wrapY > wrapH ? wrapH : y - wrapY; } else { left = x; top = y; } pointer.style.left = "".concat(left - pointerH / 2, "px"); pointer.style.top = "".concat(top - pointerW / 2, "px"); return { left: left, top: top }; } }, { key: "handleGPClick", value: function handleGPClick(e) { var gradient = this.gradient, selectPointer = this.selectPointer, setGradientPointer = this.setGradientPointer; if (gradient && selectPointer) { var positionToHSV = this.positionToHSV, rgbToHEX = this.rgbToHEX, hsvToRGB = this.hsvToRGB; var _setGradientPointer = setGradientPointer(e.clientX, e.clientY, selectPointer, gradient, true), left = _setGradientPointer.left, top = _setGradientPointer.top; var _getNodeRect7 = getNodeRect(gradient), height = _getNodeRect7.height, width = _getNodeRect7.width; var _positionToHSV = positionToHSV(left, top, width, height), h = _positionToHSV.h, s = _positionToHSV.s, v = _positionToHSV.v, opacity = _positionToHSV.a; this.setHSV(undefined, s, v, undefined); var _hsvToRGB = hsvToRGB(h, s, v, opacity), r = _hsvToRGB.r, g = _hsvToRGB.g, b = _hsvToRGB.b, a = _hsvToRGB.a; var hexColor = rgbToHEX(r, g, b, a); this.prepareSetValue(hexColor); } } }, { key: "setHuePointer", value: function setHuePointer(x, pointer, wrap, isClient) { var _getNodeRect8 = getNodeRect(wrap), wrapX = _getNodeRect8.left, wrapW = _getNodeRect8.width; var _getNodeRect9 = getNodeRect(pointer), pointerW = _getNodeRect9.width; var left; if (isClient) { left = x - wrapX < 0 ? 0 : x - wrapX > wrapW ? wrapW : x - wrapX; } else { left = x; } pointer.style.left = "".concat(left - pointerW / 2, "px"); if (left === wrapW) { return { left: 0, wrapW: wrapW }; } return { left: left, wrapW: wrapW }; } }, { key: "handleHueClick", value: function handleHueClick(e) { var hue = this.hue, huePointer = this.huePointer, setHuePointer = this.setHuePointer, hsvToRGB = this.hsvToRGB, rgbToHEX = this.rgbToHEX; if (hue && huePointer) { var _setHuePointer = setHuePointer(e.clientX, huePointer, hue, true), left = _setHuePointer.left, wrapW = _setHuePointer.wrapW; var h = Math.floor(left / wrapW * 360); var _this$HSV3 = this.HSV, s = _this$HSV3.s, v = _this$HSV3.v, opacity = _this$HSV3.a; this.setHSV(h, undefined, undefined, undefined); var _hsvToRGB2 = hsvToRGB(h, 1, 1, 1), r = _hsvToRGB2.r, g = _hsvToRGB2.g, b = _hsvToRGB2.b, a = _hsvToRGB2.a; var _hsvToRGB3 = hsvToRGB(h, s, v, opacity), valueR = _hsvToRGB3.r, valueG = _hsvToRGB3.g, valueB = _hsvToRGB3.b, valueA = _hsvToRGB3.a; var hueColor = rgbToHEX(r, g, b, a); var valueColor = rgbToHEX(valueR, valueG, valueB, valueA); this.setHueColor(hueColor); this.prepareSetValue(valueColor); } } }, { key: "handleGPMouseDown", value: function handleGPMouseDown() { this.eventManager.addEventListener('mousemove', this.handleGPClick).addEventListener('mouseup', this.onGPMouseUp); } }, { key: "onGPMouseUp", value: function onGPMouseUp() { this.eventManager.removeEventListener('mousemove', this.handleGPClick).removeEventListener('mouseup', this.onGPMouseUp); } }, { key: "handleHPMouseDown", value: function handleHPMouseDown() { this.eventManager.addEventListener('mousemove', this.handleHueClick).addEventListener('mouseup', this.onHPMouseUp); } }, { key: "onHPMouseUp", value: function onHPMouseUp() { this.eventManager.removeEventListener('mousemove', this.handleHueClick).removeEventListener('mouseup', this.onHPMouseUp); } }, { key: "handlePopupAnimateAppear", value: function handlePopupAnimateAppear() { this.setColor(this.getValue()); } }, { key: "handlePopupAnimateEnd", value: function handlePopupAnimateEnd() {// noop } }, { key: "getPopupStyleFromAlign", value: function getPopupStyleFromAlign() { return undefined; } }, { key: "getTriggerIconFont", value: function getTriggerIconFont() { return 'palette'; } }, { key: "renderLengthInfo", value: function renderLengthInfo() { return undefined; } }]); return ColorPicker; }(_TriggerField2["default"]); ColorPicker.displayName = 'ColorPicker'; ColorPicker.defaultProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _TriggerField2["default"].defaultProps), {}, { suffixCls: 'color-picker', clearButton: false }); (0, _tslib.__decorate)([_mobx.observable], ColorPicker.prototype, "hueColor", void 0); (0, _tslib.__decorate)([_mobx.action], ColorPicker.prototype, "setHueColor", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "setColor", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "positionToHSV", null); (0, _tslib.__decorate)([_mobx.action], ColorPicker.prototype, "hexToRGB", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "setGradientPointer", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleGPClick", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "setHuePointer", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleHueClick", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleGPMouseDown", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "onGPMouseUp", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleHPMouseDown", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "onHPMouseUp", null); (0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handlePopupAnimateAppear", null); ColorPicker = (0, _tslib.__decorate)([_mobxReact.observer], ColorPicker); var _default = ColorPicker; exports["default"] = _default; //# sourceMappingURL=ColorPicker.js.map