{"version":3,"file":"color.mjs","sources":["../../../../../packages/components/color-picker/src/color.ts"],"sourcesContent":["import { hasOwn } from '@element-ultra/utils'\n\nconst hsv2hsl = function (hue: number, sat: number, val: number) {\n  return [\n    hue,\n    (sat * val) / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0,\n    hue / 2,\n  ]\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nconst isOnePointZero = function (n: unknown) {\n  return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1\n}\n\nconst isPercentage = function (n: unknown) {\n  return typeof n === 'string' && n.indexOf('%') !== -1\n}\n\n// Take input from [0, n] and return it as [0, 1]\nconst bound01 = function (value: number | string, max: number | string) {\n  if (isOnePointZero(value)) value = '100%'\n\n  const processPercent = isPercentage(value)\n  value = Math.min(max as number, Math.max(0, parseFloat(`${value}`)))\n\n  // Automatically convert percentage into number\n  if (processPercent) {\n    value = parseInt(`${value * (max as number)}`, 10) / 100\n  }\n\n  // Handle floating point rounding errors\n  if (Math.abs(value - (max as number)) < 0.000001) {\n    return 1\n  }\n\n  // Convert into [0, 1] range if it isn't already\n  return (value % (max as number)) / parseFloat(max as string)\n}\n\nconst INT_HEX_MAP = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' }\n\nconst hexOne = function (value: number) {\n  value = Math.min(Math.round(value), 255)\n  const high = Math.floor(value / 16)\n  const low = value % 16\n  return `${INT_HEX_MAP[high] || high}${INT_HEX_MAP[low] || low}`\n}\n\nconst toHex = function ({ r, g, b }) {\n  if (isNaN(r) || isNaN(g) || isNaN(b)) return ''\n\n  return `#${hexOne(r)}${hexOne(g)}${hexOne(b)}`\n}\n\nconst HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 }\n\nconst parseHexChannel = function (hex: string) {\n  if (hex.length === 2) {\n    return (\n      (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 +\n      (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1])\n    )\n  }\n\n  return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]\n}\n\nconst hsl2hsv = function (hue: number, sat: number, light: number) {\n  sat = sat / 100\n  light = light / 100\n  let smin = sat\n  const lmin = Math.max(light, 0.01)\n  // let sv\n  // let v\n\n  light *= 2\n  sat *= light <= 1 ? light : 2 - light\n  smin *= lmin <= 1 ? lmin : 2 - lmin\n  const v = (light + sat) / 2\n  const sv =\n    light === 0 ? (2 * smin) / (lmin + smin) : (2 * sat) / (light + sat)\n\n  return {\n    h: hue,\n    s: sv * 100,\n    v: v * 100,\n  }\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nconst rgb2hsv = function (r, g, b) {\n  r = bound01(r, 255)\n  g = bound01(g, 255)\n  b = bound01(b, 255)\n\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n  let h\n  const v = max\n\n  const d = max - min\n  const s = max === 0 ? 0 : d / max\n\n  if (max === min) {\n    h = 0 // achromatic\n  } else {\n    switch (max) {\n      case r: {\n        h = (g - b) / d + (g < b ? 6 : 0)\n        break\n      }\n      case g: {\n        h = (b - r) / d + 2\n        break\n      }\n      case b: {\n        h = (r - g) / d + 4\n        break\n      }\n    }\n    h /= 6\n  }\n\n  return { h: h * 360, s: s * 100, v: v * 100 }\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nconst hsv2rgb = function (h, s, v) {\n  h = bound01(h, 360) * 6\n  s = bound01(s, 100)\n  v = bound01(v, 100)\n\n  const i = Math.floor(h)\n  const f = h - i\n  const p = v * (1 - s)\n  const q = v * (1 - f * s)\n  const t = v * (1 - (1 - f) * s)\n  const mod = i % 6\n  const r = [v, q, p, p, t, v][mod]\n  const g = [t, v, v, q, p, p][mod]\n  const b = [p, p, t, v, v, q][mod]\n\n  return {\n    r: Math.round(r * 255),\n    g: Math.round(g * 255),\n    b: Math.round(b * 255),\n  }\n}\n\nexport interface Options {\n  enableAlpha: boolean\n  format: string\n  value?: string\n}\n\nexport default class Color {\n  private _hue = 0\n  private _saturation = 100\n  private _value = 100\n  private _alpha = 100\n  public enableAlpha = false\n  public format = 'hex'\n  public value = ''\n  public selected?: boolean\n  constructor(options?: Options) {\n    options = options || ({} as Options)\n\n    for (const option in options) {\n      if (hasOwn(options, option)) {\n        this[option] = options[option]\n      }\n    }\n    if (options.value) {\n      this.fromString(options.value)\n    } else {\n      this.doOnChange()\n    }\n  }\n\n  set(prop: { [key: string]: any } | any, value?: number) {\n    if (arguments.length === 1 && typeof prop === 'object') {\n      for (const p in prop) {\n        if (hasOwn(prop, p)) {\n          this.set(p, prop[p])\n        }\n      }\n\n      return\n    }\n\n    this[`_${prop}`] = value\n    this.doOnChange()\n  }\n\n  get(prop: string) {\n    if (prop === 'alpha') {\n      return Math.floor(this[`_${prop}`])\n    }\n    return this[`_${prop}`]\n  }\n\n  toRgb() {\n    return hsv2rgb(this._hue, this._saturation, this._value)\n  }\n\n  fromString(value) {\n    if (!value) {\n      this._hue = 0\n      this._saturation = 100\n      this._value = 100\n\n      this.doOnChange()\n      return\n    }\n\n    const fromHSV = (h, s, v) => {\n      this._hue = Math.max(0, Math.min(360, h))\n      this._saturation = Math.max(0, Math.min(100, s))\n      this._value = Math.max(0, Math.min(100, v))\n\n      this.doOnChange()\n    }\n\n    if (value.indexOf('hsl') !== -1) {\n      const parts = value\n        .replace(/hsla|hsl|\\(|\\)/gm, '')\n        .split(/\\s|,/g)\n        .filter((val) => val !== '')\n        .map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)))\n\n      if (parts.length === 4) {\n        this._alpha = parseFloat(parts[3]) * 100\n      } else if (parts.length === 3) {\n        this._alpha = 100\n      }\n      if (parts.length >= 3) {\n        const { h, s, v } = hsl2hsv(parts[0], parts[1], parts[2])\n        fromHSV(h, s, v)\n      }\n    } else if (value.indexOf('hsv') !== -1) {\n      const parts = value\n        .replace(/hsva|hsv|\\(|\\)/gm, '')\n        .split(/\\s|,/g)\n        .filter((val) => val !== '')\n        .map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)))\n\n      if (parts.length === 4) {\n        this._alpha = parseFloat(parts[3]) * 100\n      } else if (parts.length === 3) {\n        this._alpha = 100\n      }\n      if (parts.length >= 3) {\n        fromHSV(parts[0], parts[1], parts[2])\n      }\n    } else if (value.indexOf('rgb') !== -1) {\n      const parts = value\n        .replace(/rgba|rgb|\\(|\\)/gm, '')\n        .split(/\\s|,/g)\n        .filter((val) => val !== '')\n        .map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)))\n\n      if (parts.length === 4) {\n        this._alpha = parseFloat(parts[3]) * 100\n      } else if (parts.length === 3) {\n        this._alpha = 100\n      }\n      if (parts.length >= 3) {\n        const { h, s, v } = rgb2hsv(parts[0], parts[1], parts[2])\n        fromHSV(h, s, v)\n      }\n    } else if (value.indexOf('#') !== -1) {\n      const hex = value.replace('#', '').trim()\n      if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$|^[0-9a-fA-F]{8}$/.test(hex))\n        return\n      let r, g, b\n\n      if (hex.length === 3) {\n        r = parseHexChannel(hex[0] + hex[0])\n        g = parseHexChannel(hex[1] + hex[1])\n        b = parseHexChannel(hex[2] + hex[2])\n      } else if (hex.length === 6 || hex.length === 8) {\n        r = parseHexChannel(hex.substring(0, 2))\n        g = parseHexChannel(hex.substring(2, 4))\n        b = parseHexChannel(hex.substring(4, 6))\n      }\n\n      if (hex.length === 8) {\n        this._alpha = (parseHexChannel(hex.substring(6)) / 255) * 100\n      } else if (hex.length === 3 || hex.length === 6) {\n        this._alpha = 100\n      }\n\n      const { h, s, v } = rgb2hsv(r, g, b)\n      fromHSV(h, s, v)\n    }\n  }\n\n  compare(color) {\n    return (\n      Math.abs(color._hue - this._hue) < 2 &&\n      Math.abs(color._saturation - this._saturation) < 1 &&\n      Math.abs(color._value - this._value) < 1 &&\n      Math.abs(color._alpha - this._alpha) < 1\n    )\n  }\n\n  doOnChange() {\n    const { _hue, _saturation, _value, _alpha, format } = this\n\n    if (this.enableAlpha) {\n      switch (format) {\n        case 'hsl': {\n          const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100)\n          this.value = `hsla(${_hue}, ${Math.round(\n            hsl[1] * 100\n          )}%, ${Math.round(hsl[2] * 100)}%, ${this.get('alpha') / 100})`\n          break\n        }\n        case 'hsv': {\n          this.value = `hsva(${_hue}, ${Math.round(_saturation)}%, ${Math.round(\n            _value\n          )}%, ${this.get('alpha') / 100})`\n          break\n        }\n        case 'hex': {\n          this.value = `${toHex(hsv2rgb(_hue, _saturation, _value))}${hexOne(\n            (_alpha * 255) / 100\n          )}`\n          break\n        }\n        default: {\n          const { r, g, b } = hsv2rgb(_hue, _saturation, _value)\n          this.value = `rgba(${r}, ${g}, ${b}, ${this.get('alpha') / 100})`\n        }\n      }\n    } else {\n      switch (format) {\n        case 'hsl': {\n          const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100)\n          this.value = `hsl(${_hue}, ${Math.round(hsl[1] * 100)}%, ${Math.round(\n            hsl[2] * 100\n          )}%)`\n          break\n        }\n        case 'hsv': {\n          this.value = `hsv(${_hue}, ${Math.round(_saturation)}%, ${Math.round(\n            _value\n          )}%)`\n          break\n        }\n        case 'rgb': {\n          const { r, g, b } = hsv2rgb(_hue, _saturation, _value)\n          this.value = `rgb(${r}, ${g}, ${b})`\n          break\n        }\n        default: {\n          this.value = toHex(hsv2rgb(_hue, _saturation, _value))\n        }\n      }\n    }\n  }\n}\n"],"names":[],"mappings":"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"}