choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,222 lines (1,060 loc) • 41.5 kB
JavaScript
"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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _typeMismatch = require("choerodon-ui/dataset/validator/rules/typeMismatch");
var _icon = _interopRequireDefault(require("../../../lib/icon"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _defaultTo = _interopRequireDefault(require("lodash/defaultTo"));
var _isBoolean = _interopRequireDefault(require("lodash/isBoolean"));
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _round = _interopRequireDefault(require("lodash/round"));
var _pull = _interopRequireDefault(require("lodash/pull"));
var _concat = _interopRequireDefault(require("lodash/concat"));
var _classnames = _interopRequireDefault(require("classnames"));
var _TriggerField2 = _interopRequireDefault(require("../trigger-field/TriggerField"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _EventManager = _interopRequireDefault(require("../_util/EventManager"));
var _DocumentUtils = require("../_util/DocumentUtils");
var _enum = require("../data-set/enum");
var _localeContext = require("../locale-context");
var _enum2 = require("./enum");
var _presetColorMap = require("./presetColorMap");
var FILL_COLOR = '#FFFFFF';
var COLOR_LINE_LENGTH = 9;
var COLOR_STORAGE_ITEM = 'color.picker.customized.used'; // 相对亮度计算公式:L = 0.2126 * R + 0.7152 * G + 0.0722 * B
// 最高亮度:L = (0.2126 * 255 + 0.7152 * 255 + 0.0722 * 255) - 1.05
var COLOR_MAX_LIGHT = 253.95;
function getNodeRect(node) {
return node.getBoundingClientRect();
}
var ColorPicker = /*#__PURE__*/function (_TriggerField) {
(0, _inherits2["default"])(ColorPicker, _TriggerField);
var _super = (0, _createSuper2["default"])(ColorPicker);
function ColorPicker(props, context) {
var _this;
(0, _classCallCheck2["default"])(this, ColorPicker);
_this = _super.call(this, props, context);
_this.eventManager = new _EventManager["default"](typeof window === 'undefined' ? undefined : document);
_this.footerInputRef = null;
_this.HSV = {
h: 0,
s: 1,
v: 1,
a: 1
};
_this.RGBA = {
r: 255,
g: 0,
b: 0,
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;
};
_this.saveFooterAlphaRef = function (node) {
return _this.footerInputRef = node;
};
(0, _mobx.runInAction)(function () {
_this.gradientHidden = true;
});
_this.popupView = null;
return _this;
}
(0, _createClass2["default"])(ColorPicker, [{
key: "multiple",
get: function get() {
return false;
}
}, {
key: "range",
get: function get() {
return false;
}
}, {
key: "preset",
get: function get() {
var preset = this.props.preset;
if ((0, _isBoolean["default"])(preset)) {
return preset;
}
return this.getContextConfig('colorPreset');
}
}, {
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: "colorPickUsed",
get: function get() {
var list = JSON.parse(localStorage.getItem(COLOR_STORAGE_ITEM) || '[]');
if (list.length < COLOR_LINE_LENGTH) {
return (0, _concat["default"])(list, Array(COLOR_LINE_LENGTH - list.length).fill(FILL_COLOR));
}
return list;
}
}, {
key: "getOmitPropsKeys",
value: function getOmitPropsKeys() {
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "getOmitPropsKeys", this).call(this).concat(['mode', 'preset']);
}
}, {
key: "getDefaultAction",
value: function getDefaultAction() {
return this.getContextConfig('selectTrigger') || (0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "getDefaultAction", this).call(this);
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
var _this2 = this;
var popup = this.popup;
if (popup) {
var _this$HSV = this.HSV,
h = _this$HSV.h,
s = _this$HSV.s,
v = _this$HSV.v,
a = _this$HSV.a;
var huePointer = this.huePointer,
opacityPointer = this.opacityPointer,
selectPointer = this.selectPointer,
hue = this.hue,
opacity = this.opacity,
gradient = this.gradient;
var _this$hsvToRGB = this.hsvToRGB(h, s, v, a),
Alpha = _this$hsvToRGB.a;
if (huePointer && hue) {
var _getNodeRect = getNodeRect(hue),
width = _getNodeRect.width;
this.setSliderPointer(width * h / 360, huePointer, hue, false);
}
if (opacityPointer && opacity) {
var _getNodeRect2 = getNodeRect(opacity),
_width = _getNodeRect2.width;
this.setSliderPointer(_width * Alpha, opacityPointer, opacity, false);
}
if (selectPointer && gradient) {
var _getNodeRect3 = getNodeRect(gradient),
_width2 = _getNodeRect3.width,
height = _getNodeRect3.height;
var left = s * _width2;
var top = height - v * height;
this.setGradientPointer(left, top, selectPointer, gradient, false);
}
}
if (!this.gradientHidden && this.popupView) {
var offsetTop = this.popupView.offsetTop;
var _this$popupView$getBo = this.popupView.getBoundingClientRect(),
_left = _this$popupView$getBo.left,
_top = _this$popupView$getBo.top,
_width3 = _this$popupView$getBo.width,
_height = _this$popupView$getBo.height;
var _window = window,
innerWidth = _window.innerWidth,
innerHeight = _window.innerHeight;
(0, _mobx.runInAction)(function () {
if (_left + _width3 > innerWidth && _left > _width3) {
_this2.gradienLeft = -_width3;
}
if (_top + _height > innerHeight) {
_this2.gradienTop = offsetTop - (_top + _height - innerHeight);
}
});
}
}
}, {
key: "getValue",
value: function getValue() {
var value = (0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "getValue", this).call(this);
return typeof value === 'string' ? value : undefined;
}
}, {
key: "getBorder",
value: function getBorder() {
var r = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 255;
var g = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var b = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
return 0.2126 * r + 0.7152 * g + 0.0722 * b > COLOR_MAX_LIGHT;
}
}, {
key: "syncValueOnBlur",
value: function syncValueOnBlur(value) {
var footerEditFlag = this.footerEditFlag,
gradientHidden = this.gradientHidden,
preset = this.preset;
if (!footerEditFlag) {
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);
}
if (preset && !gradientHidden) {
this.setGradientHidden(true);
}
}
}, {
key: "getFieldType",
value: function getFieldType() {
return _enum.FieldType.color;
}
}, {
key: "getPrefix",
value: function getPrefix() {
var _classNames;
var prefixCls = this.prefixCls,
_this$props = this.props,
mode = _this$props.mode,
renderer = _this$props.renderer;
var backgroundColor = this.getValue();
var isButtonMode = mode === _enum2.ViewMode.button;
if (isButtonMode && renderer) {
return this.processRenderer(backgroundColor);
}
var _ref = backgroundColor && this.hexToRGB ? this.hexToRGB(backgroundColor) : this.RGBA,
r = _ref.r,
g = _ref.g,
b = _ref.b;
var className = (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-color"), !isButtonMode), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-button-color"), isButtonMode), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-prefix-border"), !isButtonMode && this.getBorder(r, g, b)), _classNames));
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-prefix")
}, /*#__PURE__*/_react["default"].createElement("span", {
className: className,
style: {
backgroundColor: backgroundColor
}
}));
}
}, {
key: "getPopupFooter",
value: function getPopupFooter() {
var _this3 = this;
var prefixCls = this.prefixCls,
RGBA = this.RGBA;
var className = "".concat(prefixCls, "-popup-footer-slider-pointer");
var huePointerProps = {
onMouseDown: this.handleHPMouseDown,
ref: this.saveHuePointerRef,
className: className
};
var opacityPointerProps = {
onMouseDown: this.handleOpacityMouseDown,
ref: this.saveOpacityPointerRef,
className: className
};
var inputProps = {
onInput: this.handleFooterInput,
onFocus: this.handleFooterFocus
};
var r = RGBA.r,
g = RGBA.g,
b = RGBA.b,
a = RGBA.a;
var value = (this.getEditorTextInfo().text || '').replace('#', '');
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-footer")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-footer-slide-bar")
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__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")
}, /*#__PURE__*/_react["default"].createElement("div", {
onClick: this.handleOpacityClick,
className: "opacity",
style: {
background: "linear-gradient(to right, rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", 0), rgb(").concat(r, ", ").concat(g, ", ").concat(b, "))")
}
}), /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, opacityPointerProps)))), /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-popup-footer-color"),
style: {
background: "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(a, ")")
}
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-footer-input")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-footer-input-color")
}, /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({
name: _enum2.ColorUnit.hex,
value: value,
autoComplete: "off"
}, inputProps)), /*#__PURE__*/_react["default"].createElement("span", null, _enum2.ColorUnit.hex)), Object.keys(RGBA).map(function (item) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-footer-input-color"),
key: item
}, /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({
name: item,
value: value ? _this3.RGBA[item] : '',
autoComplete: "off",
ref: item === 'a' ? _this3.saveFooterAlphaRef : undefined
}, inputProps)), /*#__PURE__*/_react["default"].createElement("span", null, _enum2.ColorUnit[item]));
})));
}
}, {
key: "getGradientPopupContent",
value: function getGradientPopupContent() {
var _this4 = this;
var gradientHidden = this.gradientHidden,
prefixCls = this.prefixCls,
preset = this.preset;
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", {
ref: function ref(dom) {
_this4.popupView = dom;
},
className: "".concat(prefixCls, "-popup-view"),
style: {
display: preset && !gradientHidden || !preset ? 'block' : 'none',
top: this.gradienTop,
left: this.gradienLeft
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-view-picker-name")
}, (0, _localeContext.$l)('ColorPicker', 'pick_color_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: "getPresetData",
value: function getPresetData(list, value) {
var _this5 = this;
var prefixCls = this.prefixCls,
hexToRGB = this.hexToRGB,
getBorder = this.getBorder;
var className = "".concat(prefixCls, "-popup-view-palettes");
var valueRgba = value ? hexToRGB(value) : {
r: undefined,
g: undefined,
b: undefined,
a: undefined
};
return /*#__PURE__*/_react["default"].createElement("div", {
className: className
}, (0, _toConsumableArray2["default"])(list).map(function (item, index) {
var _classNames2;
var _hexToRGB = hexToRGB(item),
r = _hexToRGB.r,
g = _hexToRGB.g,
b = _hexToRGB.b,
a = _hexToRGB.a;
var border = getBorder(r, g, b);
var vr = valueRgba.r,
vg = valueRgba.g,
vb = valueRgba.b,
va = valueRgba.a;
var active = r === vr && g === vg && b === vb && a === va;
var key = "".concat(item, "_").concat(index);
return /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])("".concat(className, "-block"), (_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(className, "-block-border"), border), (0, _defineProperty2["default"])(_classNames2, "".concat(className, "-block-active"), active), _classNames2)),
style: {
backgroundColor: item
},
key: key,
onClick: function onClick() {
return _this5.handlePreset(item);
}
}, active && /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "check"
}));
}));
}
}, {
key: "getPopupContent",
value: function getPopupContent() {
var _this6 = this;
var prefixCls = this.prefixCls,
preset = this.preset;
if (preset) {
var value = this.getValue();
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-view-preset")
}, /*#__PURE__*/_react["default"].createElement("div", {
onClick: function onClick() {
return _this6.setGradientHidden(true);
}
}, this.getPresetData(_presetColorMap.commonColorMap, value), this.getPresetData(_presetColorMap.defaultColorMap, value), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-picker-name")
}, (0, _localeContext.$l)('ColorPicker', 'used_view')), this.getPresetData(this.colorPickUsed)), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-view-gradient")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-popup-picker-name"),
onClick: this.onExpandChange
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "color_lens-o"
}), /*#__PURE__*/_react["default"].createElement("span", null, (0, _localeContext.$l)('ColorPicker', 'custom_view'))), /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "navigate_next"
})), this.getGradientPopupContent()));
}
return this.getGradientPopupContent();
}
}, {
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: "setRGBA",
value: function setRGBA(r, g, b, a) {
var RGBA = this.RGBA;
if ((0, _isNil["default"])(r) || r > 255) r = 255;
if ((0, _isNil["default"])(g) || g > 255) g = 255;
if ((0, _isNil["default"])(b) || b > 255) b = 255;
if ((0, _isNil["default"])(a) || a > 1) a = 1;
if (r !== RGBA.r) {
RGBA.r = (0, _round["default"])(r);
}
if (g !== RGBA.g) {
RGBA.g = (0, _round["default"])(g);
}
if (b !== RGBA.b) {
RGBA.b = (0, _round["default"])(b);
}
if (a !== RGBA.a) {
RGBA.a = a;
}
}
}, {
key: "setHueColor",
value: function setHueColor(color) {
if (color !== this.hueColor) {
this.hueColor = color;
}
}
}, {
key: "setFooterEditFlag",
value: function setFooterEditFlag(footerEditFlag) {
if (footerEditFlag !== this.footerEditFlag) {
this.footerEditFlag = footerEditFlag;
}
}
}, {
key: "setGradientHidden",
value: function setGradientHidden(gradientHidden) {
if (gradientHidden !== this.gradientHidden) {
this.gradientHidden = gradientHidden;
}
}
}, {
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,
opacity = this.opacity,
opacityPointer = this.opacityPointer;
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);
this.setRGBA(r, g, b, a);
var _this$hsvToRGB2 = this.hsvToRGB(h, 1, 1, 1),
hr = _this$hsvToRGB2.r,
hg = _this$hsvToRGB2.g,
hb = _this$hsvToRGB2.b,
ha = _this$hsvToRGB2.a;
var hueColor = this.rgbToHEX(hr, hg, hb, ha);
this.setHueColor(hueColor);
if (gradient && selectPointer && hue && huePointer) {
var _getNodeRect4 = getNodeRect(gradient),
height = _getNodeRect4.height,
width = _getNodeRect4.width;
var left = s * width;
var top = height - v * height;
var _getNodeRect5 = getNodeRect(hue),
hueWidth = _getNodeRect5.width;
var _getNodeRect6 = getNodeRect(opacity),
opacityWidth = _getNodeRect6.width;
var hueLeft = h / 360 * hueWidth;
var opacityLeft = a * opacityWidth;
this.setSliderPointer(hueLeft, huePointer, hue, false);
this.setSliderPointer(opacityLeft, opacityPointer, opacity, false);
this.setGradientPointer(left, top, selectPointer, gradient, false);
}
if (this.getValue() !== color) {
this.prepareSetValue(color);
}
}
}
}, {
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 = Number(num).toString(16);
return hexNum.length === 1 ? "0".concat(hexNum) : hexNum[1] === '.' ? "0".concat(hexNum[0]) : hexNum;
}
if (a !== 1) {
return "#".concat(hex(r)).concat(hex(g)).concat(hex(b)).concat(hex((0, _round["default"])(a * 255)));
}
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;
}
var hasAlpha = results.length === 8;
results = results.slice(0, hasAlpha ? 8 : 6);
var result = /^#?([0-9a-f]{2})([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: hasAlpha ? (0, _round["default"])(parseInt(result[4], 16) / 255, 2) : 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 _getNodeRect7 = getNodeRect(wrap),
wrapX = _getNodeRect7.left,
wrapY = _getNodeRect7.top,
wrapW = _getNodeRect7.width,
wrapH = _getNodeRect7.height;
var _getNodeRect8 = getNodeRect(pointer),
pointerH = _getNodeRect8.height,
pointerW = _getNodeRect8.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((0, _DocumentUtils.transformZoomData)(e.clientX), (0, _DocumentUtils.transformZoomData)(e.clientY), selectPointer, gradient, true),
left = _setGradientPointer.left,
top = _setGradientPointer.top;
var _getNodeRect9 = getNodeRect(gradient),
height = _getNodeRect9.height,
width = _getNodeRect9.width;
var _positionToHSV = positionToHSV(left, top, width, height),
h = _positionToHSV.h,
s = _positionToHSV.s,
v = _positionToHSV.v,
ha = _positionToHSV.a;
this.setHSV(undefined, s, v, undefined);
var _hsvToRGB = hsvToRGB(h, s, v, ha),
r = _hsvToRGB.r,
g = _hsvToRGB.g,
b = _hsvToRGB.b,
a = _hsvToRGB.a;
var hexColor = rgbToHEX(r, g, b, a);
this.setRGBA(r, g, b, (0, _round["default"])(a, 2));
this.prepareSetValue(hexColor);
}
}
}, {
key: "setSliderPointer",
value: function setSliderPointer(x, pointer, wrap, isClient) {
var _getNodeRect10 = getNodeRect(wrap),
wrapX = _getNodeRect10.left,
wrapW = _getNodeRect10.width;
var _getNodeRect11 = getNodeRect(pointer),
pointerW = _getNodeRect11.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");
return {
left: left,
wrapW: wrapW
};
}
}, {
key: "handleHueClick",
value: function handleHueClick(e) {
var hue = this.hue,
huePointer = this.huePointer,
setSliderPointer = this.setSliderPointer,
hsvToRGB = this.hsvToRGB,
rgbToHEX = this.rgbToHEX;
if (hue && huePointer) {
var _setSliderPointer = setSliderPointer((0, _DocumentUtils.transformZoomData)(e.clientX), huePointer, hue, true),
left = _setSliderPointer.left,
wrapW = _setSliderPointer.wrapW;
var h = Math.floor(left / wrapW * 360);
var _this$HSV3 = this.HSV,
s = _this$HSV3.s,
v = _this$HSV3.v,
ha = _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, ha),
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.setRGBA(valueR, valueG, valueB, valueA);
this.setHueColor(hueColor);
this.prepareSetValue(valueColor);
}
}
}, {
key: "handleOpacityClick",
value: function handleOpacityClick(e) {
var opacity = this.opacity,
opacityPointer = this.opacityPointer,
setSliderPointer = this.setSliderPointer,
hsvToRGB = this.hsvToRGB,
rgbToHEX = this.rgbToHEX;
if (opacity && opacityPointer) {
var _setSliderPointer2 = setSliderPointer((0, _DocumentUtils.transformZoomData)(e.clientX), opacityPointer, opacity, true),
left = _setSliderPointer2.left,
wrapW = _setSliderPointer2.wrapW;
var a = (0, _round["default"])(left / wrapW, 2);
var _this$HSV4 = this.HSV,
h = _this$HSV4.h,
s = _this$HSV4.s,
v = _this$HSV4.v;
var _hsvToRGB4 = hsvToRGB(h, s, v, a),
r = _hsvToRGB4.r,
g = _hsvToRGB4.g,
b = _hsvToRGB4.b;
this.setHSV(h, s, v, a);
this.setRGBA(r, g, b, a);
this.prepareSetValue(rgbToHEX(r, g, b, a));
}
}
}, {
key: "handleFooterInput",
value: function handleFooterInput(e) {
var _this7 = this;
var target = e.target,
name = e.target.name;
var value = target.value;
var rgba = this.RGBA;
if (name === _enum2.ColorUnit.hex) {
value = "#".concat(value);
this.prepareSetValue(value);
if (_typeMismatch.colorHexReg.test(value)) {
var _this$hexToRGB2 = this.hexToRGB(value),
r = _this$hexToRGB2.r,
g = _this$hexToRGB2.g,
b = _this$hexToRGB2.b,
a = _this$hexToRGB2.a;
var _this$rgbToHSV2 = this.rgbToHSV(r / 255, g / 255, b / 255, a),
h = _this$rgbToHSV2.h,
s = _this$rgbToHSV2.s,
v = _this$rgbToHSV2.v;
var _this$hsvToRGB3 = this.hsvToRGB(h, 1, 1, 1),
hr = _this$hsvToRGB3.r,
hg = _this$hsvToRGB3.g,
hb = _this$hsvToRGB3.b,
ha = _this$hsvToRGB3.a;
this.setRGBA(r, g, b, a);
this.setHSV(h, s, v, a);
this.setHueColor(this.rgbToHEX(hr, hg, hb, ha));
}
} else {
var valueToNumber = Number(value);
if (!isNaN(valueToNumber) || name === 'a') {
if (name === 'a') {
if (valueToNumber >= 1) {
valueToNumber = 1;
} else if (value && value.slice(-1) === '.') {
var timer = setTimeout(function () {
clearTimeout(timer);
if (_this7.footerInputRef) {
_this7.footerInputRef.value = value;
}
}, 0);
return;
}
} else if (value > 255) {
valueToNumber = 255;
}
rgba[name] = valueToNumber;
var _r = rgba.r,
_g = rgba.g,
_b = rgba.b,
_a = rgba.a;
var _this$rgbToHSV3 = this.rgbToHSV(_r / 255, _g / 255, _b / 255, _a),
_h = _this$rgbToHSV3.h,
_s = _this$rgbToHSV3.s,
_v = _this$rgbToHSV3.v;
this.setRGBA(_r, _g, _b, _a);
this.setHSV(_h, _s, _v, _a);
this.prepareSetValue(this.rgbToHEX(_r, _g, _b, _a));
}
}
}
}, {
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: "handleOpacityMouseDown",
value: function handleOpacityMouseDown() {
this.eventManager.addEventListener('mousemove', this.handleOpacityClick).addEventListener('mouseup', this.onOpacityMouseUp);
}
}, {
key: "onHPMouseUp",
value: function onHPMouseUp() {
this.eventManager.removeEventListener('mousemove', this.handleHueClick).removeEventListener('mouseup', this.onHPMouseUp);
}
}, {
key: "onOpacityMouseUp",
value: function onOpacityMouseUp() {
this.eventManager.removeEventListener('mousemove', this.handleOpacityClick).removeEventListener('mouseup', this.onOpacityMouseUp);
}
}, {
key: "onExpandChange",
value: function onExpandChange(e) {
e.stopPropagation();
this.setGradientHidden(!this.gradientHidden);
this.forceUpdate();
}
}, {
key: "handleFocus",
value: function handleFocus(e) {
this.setFooterEditFlag(false);
(0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "handleFocus", this).call(this, e);
}
}, {
key: "handleFooterFocus",
value: function handleFooterFocus() {
this.setFooterEditFlag(true);
}
}, {
key: "setPopup",
value: function setPopup(statePopup) {
(0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "setPopup", this).call(this, statePopup);
var value = this.getValue();
if (value && statePopup) {
this.setColor(value);
} else if (value && _typeMismatch.colorHexReg.test(value)) {
var colorPickUsed = this.colorPickUsed;
var valueIndex = colorPickUsed.indexOf(value);
if (valueIndex === -1) {
colorPickUsed = (0, _toConsumableArray2["default"])(new Set([value].concat((0, _toConsumableArray2["default"])(colorPickUsed)))).slice(0, COLOR_LINE_LENGTH);
} else {
colorPickUsed = (0, _toConsumableArray2["default"])(new Set([value].concat((0, _toConsumableArray2["default"])((0, _pull["default"])(colorPickUsed, value)))));
}
localStorage.setItem(COLOR_STORAGE_ITEM, JSON.stringify(colorPickUsed));
}
}
}, {
key: "handlePreset",
value: function handlePreset(color) {
this.setColor(color);
this.setPopup(false);
}
}, {
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() {
var mode = this.props.mode;
if (mode !== _enum2.ViewMode.button) {
return 'palette';
}
return '';
}
}, {
key: "getWrapperClassNames",
value: function getWrapperClassNames() {
var prefixCls = this.prefixCls;
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(ColorPicker.prototype), "getWrapperClassNames", this).call(this, (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-button"), this.props.mode === _enum2.ViewMode.button));
}
}, {
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,
mode: _enum2.ViewMode["default"]
});
(0, _tslib.__decorate)([_mobx.observable], ColorPicker.prototype, "hueColor", void 0);
(0, _tslib.__decorate)([_mobx.observable], ColorPicker.prototype, "footerEditFlag", void 0);
(0, _tslib.__decorate)([_mobx.observable], ColorPicker.prototype, "gradientHidden", void 0);
(0, _tslib.__decorate)([_mobx.observable], ColorPicker.prototype, "gradienLeft", void 0);
(0, _tslib.__decorate)([_mobx.observable], ColorPicker.prototype, "gradienTop", void 0);
(0, _tslib.__decorate)([_mobx.action], ColorPicker.prototype, "setHueColor", null);
(0, _tslib.__decorate)([_mobx.action], ColorPicker.prototype, "setFooterEditFlag", null);
(0, _tslib.__decorate)([_mobx.action], ColorPicker.prototype, "setGradientHidden", 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, "setSliderPointer", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleHueClick", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleOpacityClick", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleFooterInput", 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, "handleOpacityMouseDown", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "onHPMouseUp", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "onOpacityMouseUp", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "onExpandChange", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleFocus", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handleFooterFocus", null);
(0, _tslib.__decorate)([_mobx.action], ColorPicker.prototype, "setPopup", null);
(0, _tslib.__decorate)([_autobind["default"]], ColorPicker.prototype, "handlePreset", 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