{"version":3,"file":"color.mjs","sources":["../../../../../../../packages/components/color-picker/src/utils/color.ts"],"sourcesContent":["import { hasOwn } from '@bigin/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.includes('.') && Number.parseFloat(n) === 1\n}\n\nconst isPercentage = function (n: unknown) {\n  return typeof n === 'string' && n.includes('%')\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, Number.parseFloat(`${value}`)))\n\n  // Automatically convert percentage into number\n  if (processPercent) {\n    value = Number.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)) / Number.parseFloat(max as string)\n}\n\nconst INT_HEX_MAP: Record<string, string> = {\n  10: 'A',\n  11: 'B',\n  12: 'C',\n  13: 'D',\n  14: 'E',\n  15: 'F',\n}\n\nconst hexOne = (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 }: { r: number; g: number; b: number }) {\n  if (Number.isNaN(+r) || Number.isNaN(+g) || Number.isNaN(+b)) return ''\n  return `#${hexOne(r)}${hexOne(g)}${hexOne(b)}`\n}\n\nconst HEX_INT_MAP: Record<string, number> = {\n  A: 10,\n  B: 11,\n  C: 12,\n  D: 13,\n  E: 14,\n  F: 15,\n}\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 = (r: number, g: number, b: number) => {\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: number\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: number, s: number, v: number) {\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\ninterface ColorOptions {\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  _alpha = 100\n  public enableAlpha = false\n  public format = 'hex'\n  public value = ''\n  public selected?: boolean\n\n  constructor(options: Partial<ColorOptions> = {}) {\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 as any)[`_${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 as any)[`_${prop}`]\n  }\n\n  toRgb() {\n    return hsv2rgb(this._hue, this._saturation, this._value)\n  }\n\n  fromString(value: string) {\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: number, s: number, v: number) => {\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.includes('hsl')) {\n      const parts = value\n        .replace(/hsla|hsl|\\(|\\)/gm, '')\n        .split(/\\s|,/g)\n        .filter((val) => val !== '')\n        .map((val, index) =>\n          index > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)\n        )\n\n      if (parts.length === 4) {\n        // @ts-expect-error\n        this._alpha = Number.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.includes('hsv')) {\n      const parts = value\n        .replace(/hsva|hsv|\\(|\\)/gm, '')\n        .split(/\\s|,/g)\n        .filter((val) => val !== '')\n        .map((val, index) =>\n          index > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)\n        )\n\n      if (parts.length === 4) {\n        // @ts-expect-error\n        this._alpha = Number.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.includes('rgb')) {\n      const parts = value\n        .replace(/rgba|rgb|\\(|\\)/gm, '')\n        .split(/\\s|,/g)\n        .filter((val) => val !== '')\n        .map((val, index) =>\n          index > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)\n        )\n\n      if (parts.length === 4) {\n        // @ts-expect-error\n        this._alpha = Number.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.includes('#')) {\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: number, g: number, b: number\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.slice(0, 2))\n        g = parseHexChannel(hex.slice(2, 4))\n        b = parseHexChannel(hex.slice(4, 6))\n      }\n\n      if (hex.length === 8) {\n        this._alpha = (parseHexChannel(hex.slice(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: this) {\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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"}