UNPKG

primevue

Version:

PrimeVue is a premium UI library for Vue featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBlock, wh

1,303 lines (1,297 loc) 51.2 kB
import BaseEditableHolder from '@primevue/core/baseeditableholder'; import InputColorStyle from 'primevue/inputcolor/style'; import { renderSlot } from 'vue'; var script$1 = { name: 'BaseInputColor', "extends": BaseEditableHolder, props: { format: { type: String, "default": 'hsba' } }, style: InputColorStyle, provide: function provide() { return { $pcInputColor: this, $parentInstance: this }; } }; function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = true, o = false; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = true, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof$1(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(t.prototype ), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); } function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; } function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: true, configurable: true } }), Object.defineProperty(t, "prototype", { writable: false }), e && _setPrototypeOf(t, e); } function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } function _typeof$1(o) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$1(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey$1(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: false }), e; } function _toPropertyKey$1(t) { var i = _toPrimitive$1(t, "string"); return "symbol" == _typeof$1(i) ? i : i + ""; } function _toPrimitive$1(t, r) { if ("object" != _typeof$1(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r); if ("object" != _typeof$1(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return (String )(t); } // CONSTANTS var RGB_MAX = 255; // Matches hsb(...) or hsba(...) var HSB_REGEX = /hsb\(([-+]?\d+(?:.\d+)?\s*,\s*[-+]?\d+(?:.\d+)?%\s*,\s*[-+]?\d+(?:.\d+)?%)\)|hsba\(([-+]?\d+(?:.\d+)?\s*,\s*[-+]?\d+(?:.\d+)?%\s*,\s*[-+]?\d+(?:.\d+)?%\s*,\s*[-+]?\d(.\d+)?)\)/; // Matches hsl(...) or hsla(...) var HSL_REGEX = /hsl\(([-+]?\d+(?:.\d+)?\s*,\s*[-+]?\d+(?:.\d+)?%\s*,\s*[-+]?\d+(?:.\d+)?%)\)|hsla\(([-+]?\d+(?:.\d+)?\s*,\s*[-+]?\d+(?:.\d+)?%\s*,\s*[-+]?\d+(?:.\d+)?%\s*,\s*[-+]?\d(.\d+)?)\)/; // Matches #rgb, #rgba, #rrggbb, #rrggbbaa (hash optional) var HEX_REGEX = /^#?([a-fA-F0-9]{3,8})$/; // Matches rgb(...) or rgba(...) var RGB_REGEX = /^rgba?\(\s*([^)]+)\s*\)$/; // Matches oklch(L C H / a) var OKLCH_REGEX = /oklch\(\s*([\d.]+)%?\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.]+))?\)/i; // UTILS function clamp(value, min, max) { return Math.min(Math.max(value, min), max); } var multiplyMatrices = function multiplyMatrices(A, B) { return [A[0] * B[0] + A[1] * B[1] + A[2] * B[2], A[3] * B[0] + A[4] * B[1] + A[5] * B[2], A[6] * B[0] + A[7] * B[1] + A[8] * B[2]]; }; /** * Snaps a value to the nearest step increment within min/max bounds * @example snap(23.7, 0, 100, 5) => 25 * @example snap(0.234, 0, 1, 0.01) => 0.23 */ function snap(value, min, max, step) { var clamped = clamp(value, min, max); var offset = clamped - min; var steps = Math.round(offset / step); var snapped = min + steps * step; var precision = (step.toString().split('.')[1] || '').length; return parseFloat(snapped.toFixed(precision)); } function getNativeFormatForChannel(channel) { switch (channel) { case 'hue': case 'saturation': case 'brightness': return 'hsba'; case 'lightness': return 'hsla'; case 'red': case 'green': case 'blue': return 'rgba'; case 'L': case 'C': case 'H': return 'oklcha'; case 'alpha': return undefined; default: return undefined; } } var Color = /*#__PURE__*/function () { function Color() { _classCallCheck(this, Color); } return _createClass(Color, [{ key: "getChannelValue", value: function getChannelValue(channel) { if (channel in this) { return this[channel]; } var nativeFormat = getNativeFormatForChannel(channel); if (nativeFormat) { return this.toFormat(nativeFormat).getChannelValue(channel); } throw new Error("Unknown color channel: ".concat(channel)); } }, { key: "withChannelValue", value: function withChannelValue(channel, value) { if (channel in this) { var _this$getChannelRange = this.getChannelRange(channel), min = _this$getChannelRange.min, max = _this$getChannelRange.max; var cloned = this.clone(); cloned[channel] = clamp(value, min, max); return cloned; } var nativeFormat = getNativeFormatForChannel(channel); if (nativeFormat) { return this.toFormat(nativeFormat).withChannelValue(channel, value).toFormat(this.getFormat()); } throw new Error("Unknown color channel: ".concat(channel)); } }, { key: "getChannelRange", value: function getChannelRange(channel) { var nativeFormat = getNativeFormatForChannel(channel); if (nativeFormat) { return this.toFormat(nativeFormat).getChannelRange(channel); } if (channel === 'alpha') { return { min: 0, max: 1, step: 0.01 }; } throw new Error("Unknown color channel: ".concat(channel)); } }, { key: "getSpaceAxes", value: function getSpaceAxes(xyChannels) { var xChannel = xyChannels.xChannel, yChannel = xyChannels.yChannel; if (xChannel === yChannel) { throw new Error('xChannel and yChannel cannot be the same'); } var zChannel = this.getChannels().find(function (channel) { return channel !== xChannel && channel !== yChannel; }); if (!zChannel) { throw new Error('zChannel not found'); } return { xChannel: xChannel, yChannel: yChannel, zChannel: zChannel }; } }, { key: "incChannelValue", value: function incChannelValue(channel, step) { var _this$getChannelRange2 = this.getChannelRange(channel), min = _this$getChannelRange2.min, max = _this$getChannelRange2.max, availableStep = _this$getChannelRange2.step; var value = snap(clamp(this.getChannelValue(channel) + step, min, max), min, max, availableStep); return this.withChannelValue(channel, value); } }, { key: "decChannelValue", value: function decChannelValue(channel, step) { return this.incChannelValue(channel, -step); } }]); }(); var HSBColor = /*#__PURE__*/function (_Color) { function HSBColor(hue, saturation, brightness, alpha) { var _this; _classCallCheck(this, HSBColor); _this = _callSuper(this, HSBColor); _this.hue = hue; _this.saturation = saturation; _this.brightness = brightness; _this.alpha = alpha; return _this; } _inherits(HSBColor, _Color); return _createClass(HSBColor, [{ key: "toRGB", value: function toRGB() { var h = this.hue; var s = this.saturation / 100; var b = this.brightness / 100; function f(n) { var k = (n + h / 60) % 6; return b - b * s * Math.max(0, Math.min(k, 4 - k, 1)); } return new RGBColor(Math.round(f(5) * RGB_MAX), Math.round(f(3) * RGB_MAX), Math.round(f(1) * RGB_MAX), Number(this.alpha.toFixed(2))); } }, { key: "toHSL", value: function toHSL() { var h = this.hue; var s = this.saturation / 100; var b = this.brightness / 100; var l = b * (1 - s / 2); if (l === 0 || l === 1) { s = 0; } else { s = (b - l) / Math.min(l, 1 - l); } return new HSLColor(Number(h.toFixed(2)), Number((s * 100).toFixed(2)), Number((l * 100).toFixed(2)), Number(this.alpha.toFixed(2))); } }, { key: "toFormat", value: function toFormat(format) { switch (format) { case 'hsba': return this; case 'rgba': return this.toRGB(); case 'hsla': return this.toHSL(); case 'oklcha': return this.toRGB().toFormat('oklcha'); default: throw new Error("Invalid format: ".concat(format)); } } }, { key: "toString", value: function toString(format) { switch (format) { case 'css': return this.toHSL().toString('css'); case 'hex': return this.toRGB().toString('hex'); case 'hexa': return this.toRGB().toString('hexa'); case 'hsb': return "hsb(".concat(this.hue, ", ").concat(this.saturation.toFixed(2), "%, ").concat(this.brightness.toFixed(2), "%)"); case 'hsba': return "hsba(".concat(this.hue, ", ").concat(this.saturation.toFixed(2), "%, ").concat(this.brightness.toFixed(2), "%, ").concat(this.alpha, ")"); case 'hsl': return this.toHSL().toString('hsl'); case 'rgb': return this.toRGB().toString('rgb'); case 'oklch': return this.toRGB().toFormat('oklcha').toString('oklch'); default: return this.toFormat(format).toString(format); } } }, { key: "toJSON", value: function toJSON() { return { hue: this.hue, saturation: this.saturation, brightness: this.brightness, alpha: this.alpha }; } }, { key: "clone", value: function clone() { return new HSBColor(this.hue, this.saturation, this.brightness, this.alpha); } }, { key: "getChannelRange", value: function getChannelRange(channel) { switch (channel) { case 'hue': return { min: 0, max: 360, step: 1 }; case 'saturation': case 'brightness': return { min: 0, max: 100, step: 1 }; case 'alpha': return { min: 0, max: 1, step: 0.01 }; default: return _superPropGet(HSBColor, "getChannelRange", this, 3)([channel]); } } }, { key: "getFormat", value: function getFormat() { return 'hsba'; } }, { key: "getChannels", value: function getChannels() { return ['hue', 'saturation', 'brightness']; } }], [{ key: "parse", value: function parse(value) { var _match$; var match = value.match(HSB_REGEX); if (!match) return undefined; var _split$map = ((_match$ = match[1]) !== null && _match$ !== void 0 ? _match$ : match[2]).split(',').map(function (n) { return Number(n.trim().replace('%', '')); }), _split$map2 = _slicedToArray(_split$map, 4), h = _split$map2[0], s = _split$map2[1], b = _split$map2[2], a = _split$map2[3]; return new HSBColor(h % 360, clamp(s, 0, 100), clamp(b, 0, 100), clamp(a !== null && a !== void 0 ? a : 1, 0, 1)); } }]); }(Color); var HSLColor = /*#__PURE__*/function (_Color2) { function HSLColor(hue, saturation, lightness, alpha) { var _this2; _classCallCheck(this, HSLColor); _this2 = _callSuper(this, HSLColor); _this2.hue = hue; _this2.saturation = saturation; _this2.lightness = lightness; _this2.alpha = alpha; return _this2; } _inherits(HSLColor, _Color2); return _createClass(HSLColor, [{ key: "toRGB", value: function toRGB() { var h = this.hue; var s = this.saturation / 100; var l = this.lightness / 100; function f(n) { var k = (n + h / 30) % 12; var a = s * Math.min(l, 1 - l); return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); } return new RGBColor(Math.round(f(0) * RGB_MAX), Math.round(f(8) * RGB_MAX), Math.round(f(4) * RGB_MAX), Number(this.alpha.toFixed(2))); } }, { key: "toHSB", value: function toHSB() { var h = this.hue; var s = this.saturation / 100; var l = this.lightness / 100; var b = l + s * Math.min(l, 1 - l); if (b === 0) { s = 0; } else { s = 2 * (1 - l / b); } return new HSBColor(Number(h.toFixed(2)), Number((s * 100).toFixed(2)), Number((b * 100).toFixed(2)), Number(this.alpha.toFixed(2))); } }, { key: "toFormat", value: function toFormat(format) { switch (format) { case 'hsla': return this; case 'rgba': return this.toRGB(); case 'hsba': return this.toHSB(); case 'oklcha': return this.toRGB().toFormat('oklcha'); default: throw new Error("Invalid format: ".concat(format)); } } }, { key: "toString", value: function toString(format) { switch (format) { case 'hex': return this.toRGB().toString('hex'); case 'hexa': return this.toRGB().toString('hexa'); case 'hsl': return "hsl(".concat(this.hue, ", ").concat(this.saturation.toFixed(2), "%, ").concat(this.lightness.toFixed(2), "%)"); case 'css': case 'hsla': return "hsla(".concat(this.hue, ", ").concat(this.saturation.toFixed(2), "%, ").concat(this.lightness.toFixed(2), "%, ").concat(this.alpha, ")"); case 'rgb': return this.toRGB().toString('rgb'); case 'hsb': return this.toHSB().toString('hsb'); case 'oklch': return this.toRGB().toFormat('oklcha').toString('oklch'); default: return this.toFormat(format).toString(format); } } }, { key: "toJSON", value: function toJSON() { return { hue: this.hue, saturation: this.saturation, lightness: this.lightness, alpha: this.alpha }; } }, { key: "clone", value: function clone() { return new HSLColor(this.hue, this.saturation, this.lightness, this.alpha); } }, { key: "getChannelRange", value: function getChannelRange(channel) { switch (channel) { case 'hue': return { min: 0, max: 360, step: 1 }; case 'saturation': case 'lightness': return { min: 0, max: 100, step: 1 }; case 'alpha': return { min: 0, max: 1, step: 0.01 }; default: return _superPropGet(HSLColor, "getChannelRange", this, 3)([channel]); } } }, { key: "getFormat", value: function getFormat() { return 'hsla'; } }, { key: "getChannels", value: function getChannels() { return ['hue', 'saturation', 'lightness']; } }], [{ key: "parse", value: function parse(value) { var _split$map3, _ref3; var match = value.match(HSL_REGEX); if (!match) return undefined; var _ref = (_split$map3 = (_ref3 = match[1] || match[2]) === null || _ref3 === void 0 ? void 0 : _ref3.split(',').map(function (n) { return Number(n.trim().replace('%', '')); })) !== null && _split$map3 !== void 0 ? _split$map3 : [], _ref2 = _slicedToArray(_ref, 4), h = _ref2[0], s = _ref2[1], l = _ref2[2], a = _ref2[3]; return new HSLColor(h % 360, clamp(s, 0, 100), clamp(l, 0, 100), clamp(a !== null && a !== void 0 ? a : 1, 0, 1)); } }]); }(Color); var RGBColor = /*#__PURE__*/function (_Color3) { function RGBColor(red, green, blue, alpha) { var _this3; _classCallCheck(this, RGBColor); _this3 = _callSuper(this, RGBColor); _this3.red = red; _this3.green = green; _this3.blue = blue; _this3.alpha = alpha; return _this3; } _inherits(RGBColor, _Color3); return _createClass(RGBColor, [{ key: "toHSB", value: function toHSB() { var r = this.red / RGB_MAX, g = this.green / RGB_MAX, b = this.blue / RGB_MAX; var mmax = Math.max(r, g, b); var mmin = Math.min(r, g, b); var chroma = mmax - mmin; var brightness = mmax; var saturation = mmax === 0 ? 0 : chroma / mmax; var hue = 0; if (chroma !== 0) { switch (mmax) { case r: hue = (g - b) / chroma % 6; break; case g: hue = (b - r) / chroma + 2; break; case b: hue = (r - g) / chroma + 4; break; } hue *= 60; if (hue < 0) { hue += 360; } } return new HSBColor(Number(hue.toFixed(2)), Number((saturation * 100).toFixed(2)), Number((brightness * 100).toFixed(2)), Number(this.alpha.toFixed(2))); } }, { key: "toHSL", value: function toHSL() { var r = this.red / RGB_MAX, g = this.green / RGB_MAX, b = this.blue / RGB_MAX; var mmax = Math.max(r, g, b); var mmin = Math.min(r, g, b); var lightness = (mmax + mmin) / 2; var chroma = mmax - mmin; var hue = 0; // eslint-disable-next-line no-useless-assignment var saturation = -1; if (chroma !== 0) { switch (mmax) { case r: hue = (g - b) / chroma % 6; break; case g: hue = (b - r) / chroma + 2; break; case b: hue = (r - g) / chroma + 4; break; } hue *= 60; if (hue < 0) { hue += 360; } } if (lightness === 0 || lightness === 1) { saturation = 0; } else { saturation = chroma / (1 - Math.abs(2 * mmax - chroma - 1)); } return new HSLColor(Number(hue.toFixed(2)), Number((saturation * 100).toFixed(2)), Number((lightness * 100).toFixed(2)), Number(this.alpha.toFixed(2))); } }, { key: "toOKLCH", value: function toOKLCH() { var rgb = [this.red / RGB_MAX, this.green / RGB_MAX, this.blue / RGB_MAX]; var rgbLinear = rgb.map(function (c) { return Math.abs(c) <= 0.04045 ? c / 12.92 : (c < 0 ? -1 : 1) * Math.pow((Math.abs(c) + 0.055) / 1.055, 2.4); }); var xyz = multiplyMatrices([0.41239079926595934, 0.357584339383878, 0.1804807884018343, 0.21263900587151027, 0.715168678767756, 0.07219231536073371, 0.01933081871559182, 0.11919477979462598, 0.9505321522496607], rgbLinear); var LMS = multiplyMatrices([0.819022437996703, 0.3619062600528904, -0.1288737815209879, 0.0329836539323885, 0.9292868615863434, 0.0361446663506424, 0.0481771893596242, 0.2642395317527308, 0.6335478284694309], xyz); var LMSg = LMS.map(function (val) { return Math.cbrt(val); }); var _multiplyMatrices = multiplyMatrices([0.210454268309314, 0.7936177747023054, -0.0040720430116193, 1.9779985324311684, -2.42859224204858, 0.450593709617411, 0.0259040424655478, 0.7827717124575296, -0.8086757549230774], LMSg), _multiplyMatrices2 = _slicedToArray(_multiplyMatrices, 3), L = _multiplyMatrices2[0], a = _multiplyMatrices2[1], b = _multiplyMatrices2[2]; var C = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); var H = Math.abs(a) < 0.0002 && Math.abs(b) < 0.0002 ? NaN : (Math.atan2(b, a) * 180 / Math.PI % 360 + 360) % 360; var outL = Number(Math.min(1, Math.max(0, L)).toFixed(4)); var outC = Number(C.toFixed(4)); var outH = Number.isNaN(H) ? NaN : Number(H.toFixed(2)); return new OKLCHColor(outL, outC, outH, Number(this.alpha.toFixed(2))); } }, { key: "toHexInt", value: function toHexInt() { return this.red << 16 | this.green << 8 | this.blue; } }, { key: "toFormat", value: function toFormat(format) { switch (format) { case 'rgba': return this; case 'hsla': return this.toHSL(); case 'hsba': return this.toHSB(); case 'oklcha': return this.toOKLCH(); default: throw new Error("Invalid format: ".concat(format)); } } }, { key: "toString", value: function toString(format) { switch (format) { case 'hex': return "#".concat(this.red.toString(16).padStart(2, '0')).concat(this.green.toString(16).padStart(2, '0')).concat(this.blue.toString(16).padStart(2, '0')); case 'hexa': return "#".concat(this.red.toString(16).padStart(2, '0')).concat(this.green.toString(16).padStart(2, '0')).concat(this.blue.toString(16).padStart(2, '0')).concat(Math.round(this.alpha * RGB_MAX).toString(16).padStart(2, '0')); case 'rgb': return "rgb(".concat(this.red, ", ").concat(this.green, ", ").concat(this.blue, ")"); case 'rgba': case 'css': return "rgba(".concat(this.red, ", ").concat(this.green, ", ").concat(this.blue, ", ").concat(this.alpha, ")"); case 'hsl': return this.toHSL().toString('hsl'); case 'hsb': return this.toHSB().toString('hsb'); case 'oklch': return this.toOKLCH().toString('oklch'); default: return this.toFormat(format).toString(format); } } }, { key: "toJSON", value: function toJSON() { return { red: this.red, green: this.green, blue: this.blue, alpha: this.alpha }; } }, { key: "clone", value: function clone() { return new RGBColor(this.red, this.green, this.blue, this.alpha); } }, { key: "getChannelRange", value: function getChannelRange(channel) { switch (channel) { case 'red': case 'green': case 'blue': return { min: 0, max: RGB_MAX, step: 1 }; case 'alpha': return { min: 0, max: 1, step: 0.01 }; default: return _superPropGet(RGBColor, "getChannelRange", this, 3)([channel]); } } }, { key: "getFormat", value: function getFormat() { return 'rgba'; } }, { key: "getChannels", value: function getChannels() { return ['red', 'green', 'blue']; } }], [{ key: "parse", value: function parse(value) { var _this$parseHexColor; if (!value) return undefined; var input = value.trim(); return (_this$parseHexColor = this.parseHexColor(input)) !== null && _this$parseHexColor !== void 0 ? _this$parseHexColor : this.parseRgbFunction(input); } }, { key: "expandShortHex", value: function expandShortHex(hex) { return hex.split('').map(function (c) { return c + c; }).join(''); } }, { key: "parseHexColor", value: function parseHexColor(input) { var match = input.match(HEX_REGEX); if (!match) return undefined; var hex = match[1]; // Expand shorthand (#abc -> #aabbcc, #abcd -> #aabbccdd) if (hex.length <= 4) { hex = this.expandShortHex(hex); } if (![6, 8].includes(hex.length)) return undefined; var r = parseInt(hex.slice(0, 2), 16); var g = parseInt(hex.slice(2, 4), 16); var b = parseInt(hex.slice(4, 6), 16); var a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / RGB_MAX : 1; return new RGBColor(r, g, b, a); } }, { key: "parseRgbFunction", value: function parseRgbFunction(input) { var match = input.match(RGB_REGEX); if (!(match !== null && match !== void 0 && match[1])) return undefined; var _match$1$split$map = match[1].split(',').map(function (v) { return v.trim(); }), _match$1$split$map2 = _slicedToArray(_match$1$split$map, 4), rStr = _match$1$split$map2[0], gStr = _match$1$split$map2[1], bStr = _match$1$split$map2[2], aStr = _match$1$split$map2[3]; var r = clamp(Number(rStr), 0, RGB_MAX); var g = clamp(Number(gStr), 0, RGB_MAX); var b = clamp(Number(bStr), 0, RGB_MAX); var a = aStr !== undefined ? clamp(Number(aStr), 0, 1) : 1; if ([r, g, b, a].some(function (v) { return Number.isNaN(v); })) return undefined; return new RGBColor(r, g, b, a); } }]); }(Color); var OKLCHColor = /*#__PURE__*/function (_Color4) { function OKLCHColor(L, C, H, alpha) { var _this4; _classCallCheck(this, OKLCHColor); _this4 = _callSuper(this, OKLCHColor); _this4.L = L; // 0–1 _this4.C = C; // ~0–0.4 typical usable range _this4.H = H; // 0–360 _this4.alpha = alpha; // 0–1 return _this4; } _inherits(OKLCHColor, _Color4); return _createClass(OKLCHColor, [{ key: "toRGB", value: function toRGB() { var L = this.L; var a = Number.isNaN(this.H) ? 0 : this.C * Math.cos(this.H * Math.PI / 180); var b = Number.isNaN(this.H) ? 0 : this.C * Math.sin(this.H * Math.PI / 180); var LMSg = multiplyMatrices([1, 0.3963377774, 0.2158037573, 1, -0.1055613458, -0.0638541728, 1, -0.0894841775, -1.291485548], [L, a, b]); var LMS = LMSg.map(function (v) { return Math.pow(v, 3); }); var xyz = multiplyMatrices([1.2268798758, -0.5578149945, 0.2813910457, -0.0405757452, 1.1122868033, -0.0717110581, -0.0763729367, -0.4214933324, 1.5869240198], LMS); var _multiplyMatrices3 = multiplyMatrices([3.240969942, -1.537383178, -0.49861076, -0.969243636, 1.875967502, 0.041555057, 0.05563008, -0.203976959, 1.056971514], xyz), _multiplyMatrices4 = _slicedToArray(_multiplyMatrices3, 3), r = _multiplyMatrices4[0], g = _multiplyMatrices4[1], b2 = _multiplyMatrices4[2]; var _map = [r, g, b2].map(function (c) { return Math.abs(c) > 0.0031308 ? (c < 0 ? -1 : 1) * (1.055 * Math.pow(Math.abs(c), 1 / 2.4) - 0.055) : 12.92 * c; }); var _map2 = _slicedToArray(_map, 3); r = _map2[0]; g = _map2[1]; b2 = _map2[2]; return new RGBColor(Math.round(clamp(r, 0, 1) * RGB_MAX), Math.round(clamp(g, 0, 1) * RGB_MAX), Math.round(clamp(b2, 0, 1) * RGB_MAX), Number(this.alpha.toFixed(2))); } }, { key: "toJSON", value: function toJSON() { return { L: this.L, C: this.C, H: this.H, alpha: this.alpha }; } }, { key: "clone", value: function clone() { return new OKLCHColor(this.L, this.C, this.H, this.alpha); } }, { key: "toFormat", value: function toFormat(format) { switch (format) { case 'oklcha': return this; case 'rgba': return this.toRGB(); case 'hsla': return this.toRGB().toFormat('hsla'); case 'hsba': return this.toRGB().toFormat('hsba'); default: throw new Error("Invalid format: ".concat(format)); } } }, { key: "toString", value: function toString(format) { switch (format) { case 'hex': return this.toRGB().toString('hex'); case 'hexa': return this.toRGB().toString('hexa'); case 'oklch': { var l = Number.isNaN(this.L) ? 0 : Number((this.L * 100).toFixed(2)); var c = Number.isNaN(this.C) ? 0 : Number(this.C.toFixed(4)); var h = Number.isNaN(this.H) ? 0 : Number(this.H.toFixed(2)); return "oklch(".concat(l, "% ").concat(c, " ").concat(h, ")"); } case 'oklcha': case 'css': { var _l = Number.isNaN(this.L) ? 0 : Number((this.L * 100).toFixed(2)); var _c = Number.isNaN(this.C) ? 0 : Number(this.C.toFixed(4)); var _h = Number.isNaN(this.H) ? 0 : Number(this.H.toFixed(2)); var a = Number.isNaN(this.alpha) ? 1 : Number(this.alpha.toFixed(2)); return "oklch(".concat(_l, "% ").concat(_c, " ").concat(_h, " / ").concat(a, ")"); } case 'hsl': return this.toRGB().toString('hsl'); case 'hsb': return this.toRGB().toString('hsb'); case 'rgb': return this.toRGB().toString('rgb'); default: return this.toFormat(format).toString(format); } } }, { key: "getChannelRange", value: function getChannelRange(channel) { switch (channel) { case 'L': return { min: 0, max: 1, step: 0.01 }; case 'C': return { min: 0, max: 0.4, step: 0.01 }; case 'H': return { min: 0, max: 360, step: 1 }; case 'alpha': return { min: 0, max: 1, step: 0.01 }; default: return _superPropGet(OKLCHColor, "getChannelRange", this, 3)([channel]); } } }, { key: "getFormat", value: function getFormat() { return 'oklcha'; } }, { key: "getChannels", value: function getChannels() { return ['L', 'C', 'H']; } }], [{ key: "parse", value: function parse(value) { if (!value) return undefined; var m = value.trim().match(OKLCH_REGEX); if (!m) return; var l = Number(m[1]) / 100; var c = Number(m[2]); var h = Number(m[3]); var alpha = m[5] !== undefined ? Number(m[5]) : 1; return new OKLCHColor(l, c, h, alpha); } }]); }(Color); var parseColor = function parseColor(color) { var _ref4, _ref5, _ref6, _RGBColor$parse; var parsedColor = (_ref4 = (_ref5 = (_ref6 = (_RGBColor$parse = RGBColor.parse(color)) !== null && _RGBColor$parse !== void 0 ? _RGBColor$parse : HSLColor.parse(color)) !== null && _ref6 !== void 0 ? _ref6 : HSBColor.parse(color)) !== null && _ref5 !== void 0 ? _ref5 : OKLCHColor.parse(color)) !== null && _ref4 !== void 0 ? _ref4 : undefined; if (!parsedColor) { throw new Error("Invalid color: ".concat(color)); } return parsedColor; }; function getChannelGradient(channel, value, orientation) { var _value$getChannelRang = value.getChannelRange(channel), min = _value$getChannelRang.min, max = _value$getChannelRang.max; var direction = orientation === 'horizontal' ? 'right' : 'bottom'; switch (channel) { case 'hue': case 'H': return "linear-gradient(to ".concat(direction, ", rgb(255, 0, 0) 0%, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0) 100%)"); case 'lightness': { var start = value.withChannelValue(channel, min).toString('css'); var middle = value.withChannelValue(channel, (max - min) / 2).toString('css'); var end = value.withChannelValue(channel, max).toString('css'); return "linear-gradient(to ".concat(direction, ", ").concat(start, ", ").concat(middle, ", ").concat(end, ")"); } case 'L': { var _start = value.withChannelValue(channel, min).toString('css'); var _middle = value.withChannelValue(channel, (max - min) / 2).toString('css'); var _end = value.withChannelValue(channel, max).toString('css'); return "linear-gradient(to ".concat(direction, ", ").concat(_start, ", ").concat(_middle, ", ").concat(_end, ")"); } case 'red': case 'green': case 'blue': case 'C': case 'saturation': case 'brightness': case 'alpha': { var _start2 = value.withChannelValue(channel, min).toString('css'); var _end2 = value.withChannelValue(channel, max).toString('css'); return "linear-gradient(to ".concat(direction, ", ").concat(_start2, ", ").concat(_end2, ")"); } default: throw new Error("Unknown color channel: ".concat(channel)); } } function getChannelColor(color, channel) { switch (channel) { case 'hue': return parseColor("hsl(".concat(color.getChannelValue('hue'), ", 100%, 50%)")); case 'red': case 'green': case 'blue': case 'L': case 'C': case 'H': case 'lightness': case 'brightness': case 'saturation': return color.withChannelValue('alpha', 1); case 'alpha': { return color; } default: return color.withChannelValue('alpha', 1); } } var channelGenerators = { hue: function hue(color) { return [0, 60, 120, 180, 240, 300, 360].map(function (h) { return color.withChannelValue('hue', h).toString('css'); }).join(', '); }, saturation: function saturation(color) { return "".concat(color.withChannelValue('saturation', 0).toString('css'), ", transparent"); }, lightness: function lightness() { return 'black, transparent, white'; }, brightness: function brightness() { return 'black, transparent'; } }; function getAreaGradient(color, axes) { var _color$getSpaceAxes = color.getSpaceAxes(axes), xChannel = _color$getSpaceAxes.xChannel, zChannel = _color$getSpaceAxes.zChannel; var zValue = color.getChannelValue(zChannel); var baseFormat = color.getFormat(); var format = baseFormat === 'rgba' || baseFormat === 'oklcha' ? 'hsba' : baseFormat; var base = (format === 'hsla' ? parseColor('hsl(0, 100%, 50%)') : parseColor('hsb(0, 100%, 100%)')).withChannelValue(zChannel, zValue); var channels = color.getChannels(); var direction = function direction(c) { return c === xChannel ? 'right' : 'top'; }; var layers = channels.filter(function (c) { return c !== zChannel; }).map(function (c) { return "linear-gradient(to ".concat(direction(c), ", ").concat(channelGenerators[c](base), ")"); }).reverse(); if (zChannel === 'hue') { layers.push(base.toString('css')); } return { '--px-area-gradient': layers.join(', ') }; } function getInputChannelValue(color, channel) { var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'hsba'; var isHSL = color.getFormat() === 'hsla'; switch (channel) { case 'hex': { if (color.getChannelValue('alpha') < color.getChannelRange('alpha').max) { return color.toString('hexa'); } return color.toString('hex'); } case 'css': return color.toFormat(format).toString('css'); case 'red': case 'green': case 'blue': return color.toFormat('rgba').getChannelValue(channel).toString(); case 'hue': return color.toFormat(isHSL ? 'hsla' : 'hsba').getChannelValue('hue').toString(); case 'saturation': return color.toFormat(isHSL ? 'hsla' : 'hsba').getChannelValue('saturation').toString(); case 'lightness': return color.toFormat('hsla').getChannelValue('lightness').toString(); case 'brightness': return color.toFormat('hsba').getChannelValue('brightness').toString(); case 'C': return color.toFormat('oklcha').getChannelValue('C').toString(); case 'H': return color.toFormat('oklcha').getChannelValue('H').toString(); case 'L': return color.toFormat('oklcha').getChannelValue('L').toString(); default: return color.getChannelValue(channel).toString(); } } function getInputChannelRange(color) { var channel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'hex'; switch (channel) { case 'hex': { return { min: parseColor('#000000').toHexInt(), max: parseColor('#FFFFFF').toHexInt(), step: 1 }; } case 'css': return undefined; case 'red': case 'green': case 'blue': return color.toFormat('rgba').getChannelRange(channel); case 'hue': case 'lightness': case 'saturation': return color.toFormat('hsla').getChannelRange(channel); case 'brightness': return color.toFormat('hsba').getChannelRange(channel); case 'L': case 'C': case 'H': return color.toFormat('oklcha').getChannelRange(channel); default: return color.getChannelRange(channel); } } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var DEFAULT_COLOR = '#ff0000'; var script = { name: 'InputColor', "extends": script$1, inheritAttrs: false, emits: ['value-change-end'], data: function data() { return { isAreaDragging: false, parsedColor: parseColor(DEFAULT_COLOR).toFormat(this.getColorSpaceFormat(this.format)) }; }, watch: { d_value: { immediate: true, handler: function handler(value) { var _this$parsedColor; var resolved = value !== null && value !== void 0 ? value : DEFAULT_COLOR; if (((_this$parsedColor = this.parsedColor) === null || _this$parsedColor === void 0 ? void 0 : _this$parsedColor.toString(this.getOutputFormat())) === resolved) { return; } var parsed; try { parsed = parseColor(resolved); } catch (_unused) { parsed = parseColor(DEFAULT_COLOR); } this.parsedColor = parsed.toFormat(this.getColorSpaceFormat(this.format)); } }, format: function format(newFormat) { var nextSpace = this.getColorSpaceFormat(newFormat); if (this.parsedColor.getFormat() === nextSpace) return; this.parsedColor = this.parsedColor.toFormat(nextSpace); } }, methods: { getOutputFormat: function getOutputFormat() { var _this$format; return (_this$format = this.format) !== null && _this$format !== void 0 ? _this$format : 'hsba'; }, getColorSpaceFormat: function getColorSpaceFormat() { var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.format; switch (format) { case 'hex': case 'hexa': case 'rgb': case 'rgba': return 'rgba'; case 'hsl': case 'hsla': return 'hsla'; case 'oklch': case 'oklcha': return 'oklcha'; case 'hsb': case 'hsba': default: return 'hsba'; } }, updateColor: function updateColor(nextColor, originalEvent) { this.parsedColor = nextColor; this.writeValue(nextColor.toString(this.getOutputFormat()), originalEvent); }, emitValueChangeEnd: function emitValueChangeEnd(originalEvent) { this.$emit('value-change-end', { originalEvent: originalEvent, value: this.parsedColor.toString(this.getOutputFormat()), color: this.parsedColor }); }, updateChannel: function updateChannel(channel, value, originalEvent) { if (this.disabled) return false; var next; if (channel === 'hex' || channel === 'css') { if (value == null || value === '') { this.writeValue(null, originalEvent); return true; } try { next = parseColor(value); } catch (_unused2) { return false; } } else { var numericValue = parseFloat(value); if (Number.isNaN(numericValue)) return false; var working = this.toChannelColorSpace(this.getChannelColorValue(channel), channel); next = working.withChannelValue(channel, numericValue); } this.updateColor(next, originalEvent); return true; }, toChannelColorSpace: function toChannelColorSpace(color, channel) { if (channel === 'alpha' || color.getChannels().includes(channel)) { return color; } switch (channel) { case 'hue': case 'saturation': case 'brightness': return color.toFormat('hsba'); case 'lightness': return color.toFormat('hsla'); case 'red': case 'green': case 'blue': return color.toFormat('rgba'); case 'L': case 'C': case 'H': return color.toFormat('oklcha'); default: return color; } }, getChannelColorValue: function getChannelColorValue(channel) { if (channel === 'alpha') return this.parsedColor; if (this.parsedColor.getChannels().includes(channel)) return this.parsedColor; if (this.areaColor.getChannels().includes(channel)) return this.areaColor; return this.toChannelColorSpace(this.parsedColor, channel); }, updateAreaValue: function updateAreaValue(x, y, element, event) { if (!element || this.disabled) return; var rect = element.getBoundingClientRect(); var nx = clamp((x - rect.left) / rect.width, 0, 1); var ny = clamp((y - rect.top) / rect.height, 0, 1); var _this$areaAxes = this.areaAxes, xChannel = _this$areaAxes.xChannel, yChannel = _this$areaAxes.yChannel; var xRange = this.areaColor.getChannelRange(xChannel); var yRange = this.areaColor.getChannelRange(yChannel); var xValue = nx * (xRange.max - xRange.min) + xRange.min; var yValue = (1 - ny) * (yRange.max - yRange.min) + yRange.min; var next = this.areaColor.withChannelValue(xChannel, xValue).withChannelValue(yChannel, yValue); this.updateColor(next, event); }, onAreaPointerDown: function onAreaPointerDown(event) { var _event$currentTarget$, _event$currentTarget; if (event.button !== 0 || this.disabled) return; (_event$currentTarget$ = (_event$currentTarget = event.currentTarget).setPointerCapture) === null || _event$currentTarget$ === void 0 || _event$currentTarget$.call(_event$currentTarget, event.pointerId); this.isAreaDragging = true; this.updateAreaValue(event.clientX, event.clientY, event.currentTarget, event); }, onAreaPointerMove: function onAreaPointerMove(event) { if (!this.isAreaDragging) return; this.updateAreaValue(event.clientX, event.clientY, event.currentTarget, event); }, onAreaPointerUp: function onAreaPointerUp(event) { var _event$currentTarget$2, _event$currentTarget2; if (!this.isAreaDragging) return; (_event$currentTarget$2 = (_event$currentTarget2 = event.currentTarget).releasePointerCapture) === null || _event$currentTarget$2 === void 0 || _event$currentTarget$2.call(_event$currentTarget2, event.pointerId); this.isAreaDragging = false; this.emitValueChangeEnd(event); }, onAreaBlur: function onAreaBlur(event) { this.emitValueChangeEnd(event); }, onAreaKeyDown: function onAreaKeyDown(event) { if (this.disabled) return; var _this$areaAxes2 = this.areaAxes, xChannel = _this$areaAxes2.xChannel, yChannel = _this$areaAxes2.yChannel; var xStep = this.areaColor.getChannelRange(xChannel).step; var yStep = this.areaColor.getChannelRange(yChannel).step; var next = this.areaColor; switch (event.key) { case 'ArrowRight': next = next.incChannelValue(xChannel, xStep); break; case 'ArrowLeft': next = next.decChannelValue(xChannel, xStep); break; case 'ArrowUp': next = next.incChannelValue(yChannel, yStep); break; case 'ArrowDown': next = next.decChannelValue(yChannel, yStep); break; default: return; } event.preventDefault(); this.updateColor(next, event); this.emitValueChangeEnd(event); }, getInputChannelValue: function getInputChannelValue$1(channel) { return getInputChannelValue(this.parsedColor, channel, this.getColorSpaceFormat(this.format)); }, getInputChannelRange: function getInputChannelRange$1(channel) { return getInputChannelRange(this.parsedColor, channel); }, getChannelGradient: function getChannelGradient$1(channel, orientation) { return getChannelGradient(channel, this.getChannelColorValue(channel), orientation); }, getChannelColor: function getChannelColor$1(channel) { return getChannelColor(this.getChannelColorValue(channel), channel); }, openEyeDropper: function openEyeDropper(event) { var _this = this; if (this.disabled || typeof window === 'undefined' || !window.EyeDropper) return; var eyeDropper = new window.EyeDropper(); eyeDropper.open().then(function (result) { _this.updateColor(parseColor(result.sRGBHex), event); _this.emitValueChangeEnd(event); })["catch"](function () { /* user cancelled */ }); } }, computed: { areaColorSpace: function areaColorSpace() { var _this$format2; return ((_this$format2 = this.format) !== null && _this$format2 !== void 0 ? _this$format2 : 'hsba').startsWith('hsl') ? 'hsla' : 'hsba'; }, areaColor: function areaColor() { return this.parsedColor.toFormat(this.areaColorSpace); }, areaAxes: function areaAxes() { var channels = this.areaColor.getChannels(); return { xChannel: channels[1], yChannel: channels[2] }; }, areaStyles: function areaStyles() { var _this$areaAxes3 = this.areaAxes, xChannel = _this$areaAxes3.xChann