{"version":3,"file":"alyle-ui-color.mjs","sources":["../../../lib/color/color.ts","../../../lib/color/alyle-ui-color.ts"],"sourcesContent":["const EPS = 1e-7;\nconst MAX_ITER = 20;\nconst { pow, min, max } = Math;\n\nexport class Color {\n\n  private readonly _color: number[];\n\n  constructor(hex: number, alpha?: number)\n  constructor(r: number, g: number, b: number, alpha?: number)\n  constructor(...args: number[])\n  constructor(...args: number[]) {\n    if (args.length < 3 && args.length > 0) {\n      this._color = bigIntToRgb(args[0], args[1]);\n    } else if (args.length > 2) {\n      this._color = args;\n\n      // Set default alpha\n      if (args.length === 3) {\n        this._color[3] = 1;\n      }\n    } else {\n      this._color = [];\n    }\n  }\n\n  rgba() {\n    return this._color.slice(0);\n  }\n\n  /**\n   * Get the color opacity\n   */\n  alpha(): number;\n  /**\n   * Set the color opacity\n   * @param value opacity\n   */\n  alpha(value: number): Color;\n  alpha(value?: number) {\n    if (value === void 0) {\n      return this._color[3];\n    }\n\n    // Clone\n    const _color = this.rgba();\n\n    // Set alpha\n    _color[3] = value;\n    return new Color(..._color);\n  }\n\n  /**\n   * Returns the relative brightness\n   */\n  luminance(): number;\n  /**\n   * Normalized to 0 for darkest black and 1 for lightest white.\n   * @param lum 0 to 1\n   */\n  luminance(lum: number): Color;\n  luminance(lum?: number) {\n    if (lum === void 0) {\n      return rgbToLuminance(...(this._color as [number, number, number]));\n    }\n\n    if (lum === 0) {\n      // return pure black\n      return new Color(0, 0, 0, this._color[3]);\n    }\n    if (lum === 1) {\n      // return pure white\n      return new Color(255, 255, 255, this._color[3]);\n    }\n\n    const relativeLuminance = this.luminance();\n    let max_iter = MAX_ITER;\n\n    const test = (low: Color, high: Color): Color => {\n      const mid = new Color(...interpolateRgb(low.rgba(), high.rgba(), 0.5));\n      const lm = mid.luminance() as number;\n\n      if (Math.abs(lum - lm) < EPS || !max_iter--) {\n        return mid;\n      }\n\n      return lm > lum ? test(low, mid) : test(mid, high);\n    };\n\n    const rgb = (relativeLuminance > lum\n        ? test(new Color(0, 0, 0), this)\n        : test(this, new Color(255, 255, 255))).rgba();\n    rgb.pop();\n    rgb.push(this._color[ 3 ]);\n\n    return new Color(...rgb);\n\n  }\n  /**\n   * Changes the saturation of a color by manipulating the Lch chromaticity.\n   * @param amount default: 1\n   */\n  saturate(amount = 1) {\n    const lab = rgbToLab(this._color);\n    const lch = labToLch(lab);\n\n    lch[1] += 18 * amount;\n\n    if (lch[1] < 0) {\n      lch[1] = 0;\n    }\n\n    const labFromLch = lchToLab(lch);\n    const xyzFromLab = labToXyz(labFromLch);\n    const rgb = xyzToRgb(xyzFromLab);\n\n    // Set alpha\n    rgb.push(this._color[3]);\n\n    return new Color(...rgb);\n  }\n  /**\n   * Similar to saturate, but the opposite direction.\n   * @param amount default: 1\n   */\n  desaturate(amount = 1) {\n    return this.saturate(-amount);\n  }\n\n  /**\n   * @param amount default: 1\n   */\n  darken(amount = 1) {\n    const lab = rgbToLab(this._color);\n    lab[0] -= 18 * amount;\n    const xyzFromLab = labToXyz(lab);\n    const rgb = xyzToRgb(xyzFromLab);\n\n    // Set alpha\n    rgb.push(this._color[3]);\n\n    return new Color(...rgb);\n  }\n\n  /**\n   * The opposite of darken\n   * @param amount default 1\n   */\n  brighten(amount = 1) {\n    return this.darken(-amount);\n  }\n\n  css() {\n    if (!this._color.length) {\n      return 'undefined - invalid color';\n    }\n    return rgbToCss(this.rgba() as [number, number, number, number]);\n  }\n\n  toString() {\n    return this.css();\n  }\n\n}\n\n\n// /**\n//  * Convert number to CSS\n//  * 0x00bcd4 > #00bcd4\n//  * @param int Int\n//  */\n// function bigIntToCss(int: number) {\n//   const hex = int.toString(16);\n//   return '#000000'.substring(0, 7 - hex.length) + hex;\n// }\n\nfunction rgbToCss(rgb: [number, number, number, number]) {\n  const alpha = rgb.pop();\n  if (alpha === 1) {\n    return `rgb(${rgb.map(Math.round).join()})`;\n  }\n  return `rgba(${rgb.map(Math.round).join()},${alpha})`;\n}\n\nfunction bigIntToRgb(bigInt: number, alpha = 1) {\n  // if (bigInt < 0x1000) {\n  //   bigInt = parseInt(bigInt.toString(16).split('').map(char => {\n  //     return char + char;\n  //   }).join(''), 16);\n  // }\n  // tslint:disable-next-line: no-bitwise\n  const red = (bigInt >> 16) & 0xff;\n  // tslint:disable-next-line: no-bitwise\n  const green = (bigInt >> 8) & 0xff;\n  // tslint:disable-next-line: no-bitwise\n  const blue = bigInt & 0xff;\n\n  return [red, green, blue, alpha];\n}\n\n// function rgbToBigInt(r: number, g: number, b: number) {\n//   // tslint:disable-next-line: no-bitwise\n//   return (r << 16) + (g << 8) + b;\n// }\n\nfunction rgbToXyz(rgb: number[]) {\n  let r = rgb[0] / 255;\n  let g = rgb[1] / 255;\n  let b = rgb[2] / 255;\n\n  // Assume sRGB\n  r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n  g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n  b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n  const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n  const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n  const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n  return [x * 100, y * 100, z * 100];\n}\n\nfunction rgbToLab(rgb: number[]) {\n  const xyz = rgbToXyz(rgb);\n  let x = xyz[ 0 ];\n  let y = xyz[ 1 ];\n  let z = xyz[ 2 ];\n\n  x /= 95.047;\n  y /= 100;\n  z /= 108.883;\n\n  x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n  y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n  z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n  const l = (116 * y) - 16;\n  const a = 500 * (x - y);\n  const b = 200 * (y - z);\n\n  return [ l, a, b ];\n}\n\nfunction labToLch(lab: number[]) {\n  const l = lab[ 0 ];\n  const a = lab[ 1 ];\n  const b = lab[ 2 ];\n  let h: number;\n\n  const hr = Math.atan2(b, a);\n  h = hr * 360 / 2 / Math.PI;\n\n  if (h < 0) {\n    h += 360;\n  }\n\n  const c = Math.sqrt(a * a + b * b);\n\n  return [ l, c, h ];\n}\n\nfunction lchToLab(lch: number[]) {\n  const l = lch[ 0 ];\n  const c = lch[ 1 ];\n  const h = lch[ 2 ];\n\n  const hr = h / 360 * 2 * Math.PI;\n  const a = c * Math.cos(hr);\n  const b = c * Math.sin(hr);\n\n  return [ l, a, b ];\n}\n\nfunction labToXyz(lab: number[]) {\n  const l = lab[ 0 ];\n  const a = lab[ 1 ];\n  const b = lab[ 2 ];\n  let x;\n  let y;\n  let z;\n\n  y = (l + 16) / 116;\n  x = a / 500 + y;\n  z = y - b / 200;\n\n  const y2 = y ** 3;\n  const x2 = x ** 3;\n  const z2 = z ** 3;\n  y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n  x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n  z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n  x *= 95.047;\n  y *= 100;\n  z *= 108.883;\n\n  return [ x, y, z ];\n}\n\nfunction xyzToRgb(xyz: number[]) {\n  const x = xyz[ 0 ] / 100;\n  const y = xyz[ 1 ] / 100;\n  const z = xyz[ 2 ] / 100;\n  let r;\n  let g;\n  let b;\n\n  r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n  g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n  b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n  // Assume sRGB\n  r = r > 0.0031308\n    ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n    : r * 12.92;\n\n  g = g > 0.0031308\n    ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n    : g * 12.92;\n\n  b = b > 0.0031308\n    ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n    : b * 12.92;\n\n  r = min(max(0, r), 1);\n  g = min(max(0, g), 1);\n  b = min(max(0, b), 1);\n\n  return [ r * 255, g * 255, b * 255 ];\n}\n\nfunction rgbToLuminance(r: number, g: number, b: number) {\n  // Relative luminance\n  // See http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n  r = luminance_channel(r);\n  g = luminance_channel(g);\n  b = luminance_channel(b);\n  return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\nfunction luminance_channel(x: number) {\n  x /= 255;\n  return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction interpolateRgb(rgb1: number[], rgb2: number[], f = 0.5) {\n\n  return [\n    rgb1[ 0 ] + f * (rgb2[ 0 ] - rgb1[ 0 ]),\n    rgb1[ 1 ] + f * (rgb2[ 1 ] - rgb1[ 1 ]),\n    rgb1[ 2 ] + f * (rgb2[ 2 ] - rgb1[ 2 ]),\n  ];\n}\n\nexport function hexColorToInt(_color: string) {\n  if (_color.startsWith('#')) {\n    return parseInt(_color.slice(1), 16);\n  }\n  throw new Error(`Expected to start with '#' the given value is: ${_color}`);\n}\n\nexport function color(hex: number, alpha?: number): Color;\nexport function color(r: number, g: number, b: number, alpha?: number): Color;\nexport function color(...args: number[]): Color;\nexport function color(...args: (number | undefined)[]): Color {\n  return new Color(...args as number[]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}