{"version":3,"file":"Color.mjs","sources":["../../../src/color/Color.ts"],"sourcesContent":["import { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { ColorNameMap } from './color_map';\nimport { reHSLa, reHex, reRGBa } from './constants';\nimport type { TRGBAColorSource, TColorArg } from './typedefs';\nimport {\n  hue2rgb,\n  hexify,\n  rgb2Hsl,\n  fromAlphaToFloat,\n  greyAverage,\n} from './util';\n\n/**\n * @class Color common color operations\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors}\n */\nexport class Color {\n  private declare _source: TRGBAColorSource;\n  isUnrecognised = false;\n\n  /**\n   *\n   * @param {string} [color] optional in hex or rgb(a) or hsl format or from known color list\n   */\n  constructor(color?: TColorArg) {\n    if (!color) {\n      // we default to black as canvas does\n      this.setSource([0, 0, 0, 1]);\n    } else if (color instanceof Color) {\n      this.setSource([...color._source]);\n    } else if (Array.isArray(color)) {\n      const [r, g, b, a = 1] = color;\n      this.setSource([r, g, b, a]);\n    } else {\n      this.setSource(this._tryParsingColor(color));\n    }\n  }\n\n  /**\n   * @private\n   * @param {string} [color] Color value to parse\n   * @returns {TRGBAColorSource}\n   */\n  protected _tryParsingColor(color: string) {\n    if (color in ColorNameMap) {\n      color = ColorNameMap[color as keyof typeof ColorNameMap];\n    }\n    return color === 'transparent'\n      ? ([255, 255, 255, 0] as TRGBAColorSource)\n      : Color.sourceFromHex(color) ||\n          Color.sourceFromRgb(color) ||\n          Color.sourceFromHsl(color) ||\n          // color is not recognized\n          // we default to black as canvas does\n          ((this.isUnrecognised = true) && ([0, 0, 0, 1] as TRGBAColorSource));\n  }\n\n  /**\n   * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n   * @return {TRGBAColorSource}\n   */\n  getSource() {\n    return this._source;\n  }\n\n  /**\n   * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n   * @param {TRGBAColorSource} source\n   */\n  setSource(source: TRGBAColorSource) {\n    this._source = source;\n  }\n\n  /**\n   * Returns color representation in RGB format\n   * @return {String} ex: rgb(0-255,0-255,0-255)\n   */\n  toRgb() {\n    const [r, g, b] = this.getSource();\n    return `rgb(${r},${g},${b})`;\n  }\n\n  /**\n   * Returns color representation in RGBA format\n   * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n   */\n  toRgba() {\n    return `rgba(${this.getSource().join(',')})`;\n  }\n\n  /**\n   * Returns color representation in HSL format\n   * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n   */\n  toHsl() {\n    const [h, s, l] = rgb2Hsl(...this.getSource());\n    return `hsl(${h},${s}%,${l}%)`;\n  }\n\n  /**\n   * Returns color representation in HSLA format\n   * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n   */\n  toHsla() {\n    const [h, s, l, a] = rgb2Hsl(...this.getSource());\n    return `hsla(${h},${s}%,${l}%,${a})`;\n  }\n\n  /**\n   * Returns color representation in HEX format\n   * @return {String} ex: FF5555\n   */\n  toHex() {\n    const fullHex = this.toHexa();\n    return fullHex.slice(0, 6);\n  }\n\n  /**\n   * Returns color representation in HEXA format\n   * @return {String} ex: FF5555CC\n   */\n  toHexa() {\n    const [r, g, b, a] = this.getSource();\n    return `${hexify(r)}${hexify(g)}${hexify(b)}${hexify(Math.round(a * 255))}`;\n  }\n\n  /**\n   * Gets value of alpha channel for this color\n   * @return {Number} 0-1\n   */\n  getAlpha() {\n    return this.getSource()[3];\n  }\n\n  /**\n   * Sets value of alpha channel for this color\n   * @param {Number} alpha Alpha value 0-1\n   * @return {Color} thisArg\n   */\n  setAlpha(alpha: number) {\n    this._source[3] = alpha;\n    return this;\n  }\n\n  /**\n   * Transforms color to its grayscale representation\n   * @return {Color} thisArg\n   */\n  toGrayscale() {\n    this.setSource(greyAverage(this.getSource()));\n    return this;\n  }\n\n  /**\n   * Transforms color to its black and white representation\n   * @param {Number} threshold\n   * @return {Color} thisArg\n   */\n  toBlackWhite(threshold: number) {\n    const [average, , , a] = greyAverage(this.getSource()),\n      bOrW = average < (threshold || 127) ? 0 : 255;\n    this.setSource([bOrW, bOrW, bOrW, a]);\n    return this;\n  }\n\n  /**\n   * Overlays color with another color\n   * @param {String|Color} otherColor\n   * @return {Color} thisArg\n   */\n  overlayWith(otherColor: string | Color) {\n    if (!(otherColor instanceof Color)) {\n      otherColor = new Color(otherColor);\n    }\n\n    const source = this.getSource(),\n      otherAlpha = 0.5,\n      otherSource = otherColor.getSource(),\n      [R, G, B] = source.map((value, index) =>\n        Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha)\n      );\n\n    this.setSource([R, G, B, source[3]]);\n    return this;\n  }\n\n  /**\n   * Returns new color object, when given a color in RGB format\n   * @memberOf Color\n   * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n   * @return {Color}\n   */\n  static fromRgb(color: string): Color {\n    return Color.fromRgba(color);\n  }\n\n  /**\n   * Returns new color object, when given a color in RGBA format\n   * @static\n   * @function\n   * @memberOf Color\n   * @param {String} color\n   * @return {Color}\n   */\n  static fromRgba(color: string): Color {\n    return new Color(Color.sourceFromRgb(color));\n  }\n\n  /**\n   * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n   * @memberOf Color\n   * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n   * @return {TRGBAColorSource | undefined} source\n   */\n  static sourceFromRgb(color: string): TRGBAColorSource | undefined {\n    const match = color.match(reRGBa());\n    if (match) {\n      const [r, g, b] = match.slice(1, 4).map((value) => {\n        const parsedValue = parseFloat(value);\n        return value.endsWith('%')\n          ? Math.round(parsedValue * 2.55)\n          : parsedValue;\n      });\n      return [r, g, b, fromAlphaToFloat(match[4])];\n    }\n  }\n\n  /**\n   * Returns new color object, when given a color in HSL format\n   * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n   * @memberOf Color\n   * @return {Color}\n   */\n  static fromHsl(color: string): Color {\n    return Color.fromHsla(color);\n  }\n\n  /**\n   * Returns new color object, when given a color in HSLA format\n   * @static\n   * @function\n   * @memberOf Color\n   * @param {String} color\n   * @return {Color}\n   */\n  static fromHsla(color: string): Color {\n    return new Color(Color.sourceFromHsl(color));\n  }\n\n  /**\n   * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n   * Adapted from <a href=\"https://rawgithub.com/mjijackson/mjijackson.github.com/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.html\">https://github.com/mjijackson</a>\n   * @memberOf Color\n   * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n   * @return {TRGBAColorSource | undefined} source\n   * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n   */\n  static sourceFromHsl(color: string): TRGBAColorSource | undefined {\n    const match = color.match(reHSLa());\n    if (!match) {\n      return;\n    }\n    const match1degrees = Color.parseAngletoDegrees(match[1]);\n\n    const h = (((match1degrees % 360) + 360) % 360) / 360,\n      s = parseFloat(match[2]) / 100,\n      l = parseFloat(match[3]) / 100;\n    let r: number, g: number, b: number;\n\n    if (s === 0) {\n      r = g = b = l;\n    } else {\n      const q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n        p = l * 2 - q;\n\n      r = hue2rgb(p, q, h + 1 / 3);\n      g = hue2rgb(p, q, h);\n      b = hue2rgb(p, q, h - 1 / 3);\n    }\n\n    return [\n      Math.round(r * 255),\n      Math.round(g * 255),\n      Math.round(b * 255),\n      fromAlphaToFloat(match[4]),\n    ];\n  }\n\n  /**\n   * Returns new color object, when given a color in HEX format\n   * @static\n   * @memberOf Color\n   * @param {String} color Color value ex: FF5555\n   * @return {Color}\n   */\n  static fromHex(color: string): Color {\n    return new Color(Color.sourceFromHex(color));\n  }\n\n  /**\n   * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n   * @static\n   * @memberOf Color\n   * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n   * @return {TRGBAColorSource | undefined} source\n   */\n  static sourceFromHex(color: string): TRGBAColorSource | undefined {\n    if (color.match(reHex())) {\n      const value = color.slice(color.indexOf('#') + 1),\n        isShortNotation = value.length <= 4;\n      let expandedValue: string[];\n      if (isShortNotation) {\n        expandedValue = value.split('').map((hex) => hex + hex);\n      } else {\n        expandedValue = value.match(/.{2}/g)!;\n      }\n      const [r, g, b, a = 255] = expandedValue.map((hexCouple) =>\n        parseInt(hexCouple, 16)\n      );\n      return [r, g, b, a / 255];\n    }\n  }\n\n  /**\n   * Converts a string that could be any angle notation (50deg, 0.5turn, 2rad)\n   * into degrees without the 'deg' suffix\n   * @static\n   * @memberOf Color\n   * @param {String} value ex: 0deg, 0.5turn, 2rad\n   * @return {Number} number in degrees or NaN if inputs are invalid\n   */\n  static parseAngletoDegrees(value: string): number {\n    const lowercase = value.toLowerCase();\n    const numeric = parseFloat(lowercase);\n\n    if (lowercase.includes('rad')) {\n      return radiansToDegrees(numeric);\n    }\n\n    if (lowercase.includes('turn')) {\n      return numeric * 360;\n    }\n\n    // Value is probably just a number already in degrees eg '50'\n    return numeric;\n  }\n}\n"],"names":["Color","constructor","color","_defineProperty","setSource","_source","Array","isArray","r","g","b","a","_tryParsingColor","ColorNameMap","sourceFromHex","sourceFromRgb","sourceFromHsl","isUnrecognised","getSource","source","toRgb","concat","toRgba","join","toHsl","h","s","l","rgb2Hsl","toHsla","toHex","fullHex","toHexa","slice","hexify","Math","round","getAlpha","setAlpha","alpha","toGrayscale","greyAverage","toBlackWhite","threshold","average","bOrW","overlayWith","otherColor","otherAlpha","otherSource","R","G","B","map","value","index","fromRgb","fromRgba","match","reRGBa","parsedValue","parseFloat","endsWith","fromAlphaToFloat","fromHsl","fromHsla","reHSLa","match1degrees","parseAngletoDegrees","q","p","hue2rgb","fromHex","reHex","indexOf","isShortNotation","length","expandedValue","split","hex","hexCouple","parseInt","lowercase","toLowerCase","numeric","includes","radiansToDegrees"],"mappings":"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"}