{"version":3,"file":"149.mass-edit.js","mappings":"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","sources":["webpack://multi-token-edit/./multi-token-edit/scripts/libs/color/color.js"],"sourcesContent":["// MIT License\r\n\r\n// Original Library\r\n//   - Copyright (c) Marak Squires\r\n\r\n// Additional Functionality\r\n//  - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\r\n\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy\r\n// of this software and associated documentation files (the \"Software\"), to deal\r\n// in the Software without restriction, including without limitation the rights\r\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n// copies of the Software, and to permit persons to whom the Software is\r\n// furnished to do so, subject to the following conditions:\r\n\r\n// The above copyright notice and this permission notice shall be included in\r\n// all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n// THE SOFTWARE.\r\n\r\n// A is m x n. B is n x p. product is m x p.\r\nfunction multiplyMatrices(A, B) {\r\n  let m = A.length;\r\n\r\n  if (!Array.isArray(A[0])) {\r\n    // A is vector, convert to [[a, b, c, ...]]\r\n    A = [A];\r\n  }\r\n\r\n  if (!Array.isArray(B[0])) {\r\n    // B is vector, convert to [[a], [b], [c], ...]]\r\n    B = B.map((x) => [x]);\r\n  }\r\n\r\n  let p = B[0].length;\r\n  let B_cols = B[0].map((_, i) => B.map((x) => x[i])); // transpose B\r\n  let product = A.map((row) =>\r\n    B_cols.map((col) => {\r\n      let ret = 0;\r\n\r\n      if (!Array.isArray(row)) {\r\n        for (let c of col) {\r\n          ret += row * c;\r\n        }\r\n\r\n        return ret;\r\n      }\r\n\r\n      for (let i = 0; i < row.length; i++) {\r\n        ret += row[i] * (col[i] || 0);\r\n      }\r\n\r\n      return ret;\r\n    })\r\n  );\r\n\r\n  if (m === 1) {\r\n    product = product[0]; // Avoid [[a, b, c, ...]]\r\n  }\r\n\r\n  if (p === 1) {\r\n    return product.map((x) => x[0]); // Avoid [[a], [b], [c], ...]]\r\n  }\r\n\r\n  return product;\r\n}\r\n\r\n/**\r\n * Various utility functions\r\n */\r\n\r\n/**\r\n * Check if a value is a string (including a String object)\r\n * @param {*} str - Value to check\r\n * @returns {boolean}\r\n */\r\nfunction isString(str) {\r\n  return type(str) === 'string';\r\n}\r\n\r\n/**\r\n * Determine the internal JavaScript [[Class]] of an object.\r\n * @param {*} o - Value to check\r\n * @returns {string}\r\n */\r\nfunction type(o) {\r\n  let str = Object.prototype.toString.call(o);\r\n\r\n  return (str.match(/^\\[object\\s+(.*?)\\]$/)[1] || '').toLowerCase();\r\n}\r\n\r\n/**\r\n * Round a number to a certain number of significant digits\r\n * @param {number} n - The number to round\r\n * @param {number} precision - Number of significant digits\r\n */\r\nfunction toPrecision(n, precision) {\r\n  n = +n;\r\n  precision = +precision;\r\n  let integerLength = (Math.floor(n) + '').length;\r\n\r\n  if (precision > integerLength) {\r\n    return +n.toFixed(precision - integerLength);\r\n  } else {\r\n    let p10 = 10 ** (integerLength - precision);\r\n    return Math.round(n / p10) * p10;\r\n  }\r\n}\r\n\r\n/**\r\n * Parse a CSS function, regardless of its name and arguments\r\n * @param String str String to parse\r\n * @return {{name, args, rawArgs}}\r\n */\r\nfunction parseFunction(str) {\r\n  if (!str) {\r\n    return;\r\n  }\r\n\r\n  str = str.trim();\r\n\r\n  const isFunctionRegex = /^([a-z]+)\\((.+?)\\)$/i;\r\n  const isNumberRegex = /^-?[\\d.]+$/;\r\n  let parts = str.match(isFunctionRegex);\r\n\r\n  if (parts) {\r\n    // It is a function, parse args\r\n    let args = [];\r\n    parts[2].replace(/\\/?\\s*([-\\w.]+(?:%|deg)?)/g, ($0, arg) => {\r\n      if (/%$/.test(arg)) {\r\n        // Convert percentages to 0-1 numbers\r\n        arg = new Number(arg.slice(0, -1) / 100);\r\n        arg.type = '<percentage>';\r\n      } else if (/deg$/.test(arg)) {\r\n        // Drop deg from degrees and convert to number\r\n        // TODO handle other units too\r\n        arg = new Number(+arg.slice(0, -3));\r\n        arg.type = '<angle>';\r\n        arg.unit = 'deg';\r\n      } else if (isNumberRegex.test(arg)) {\r\n        // Convert numerical args to numbers\r\n        arg = new Number(arg);\r\n        arg.type = '<number>';\r\n      }\r\n\r\n      if ($0.startsWith('/')) {\r\n        // It's alpha\r\n        arg = arg instanceof Number ? arg : new Number(arg);\r\n        arg.alpha = true;\r\n      }\r\n\r\n      args.push(arg);\r\n    });\r\n\r\n    return {\r\n      name: parts[1].toLowerCase(),\r\n      rawName: parts[1],\r\n      rawArgs: parts[2],\r\n      // An argument could be (as of css-color-4):\r\n      // a number, percentage, degrees (hue), ident (in color())\r\n      args,\r\n    };\r\n  }\r\n}\r\n\r\nfunction last(arr) {\r\n  return arr[arr.length - 1];\r\n}\r\n\r\nfunction interpolate(start, end, p) {\r\n  if (isNaN(start)) {\r\n    return end;\r\n  }\r\n\r\n  if (isNaN(end)) {\r\n    return start;\r\n  }\r\n\r\n  return start + (end - start) * p;\r\n}\r\n\r\nfunction interpolateInv(start, end, value) {\r\n  return (value - start) / (end - start);\r\n}\r\n\r\nfunction mapRange(from, to, value) {\r\n  return interpolate(to[0], to[1], interpolateInv(from[0], from[1], value));\r\n}\r\n\r\nfunction parseCoordGrammar(coordGrammars) {\r\n  return coordGrammars.map((coordGrammar) => {\r\n    return coordGrammar.split('|').map((type) => {\r\n      type = type.trim();\r\n      let range = type.match(/^(<[a-z]+>)\\[(-?[.\\d]+),\\s*(-?[.\\d]+)\\]?$/);\r\n\r\n      if (range) {\r\n        let ret = new String(range[1]);\r\n        ret.range = [+range[2], +range[3]];\r\n        return ret;\r\n      }\r\n\r\n      return type;\r\n    });\r\n  });\r\n}\r\n\r\nvar util = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  isString: isString,\r\n  type: type,\r\n  toPrecision: toPrecision,\r\n  parseFunction: parseFunction,\r\n  last: last,\r\n  interpolate: interpolate,\r\n  interpolateInv: interpolateInv,\r\n  mapRange: mapRange,\r\n  parseCoordGrammar: parseCoordGrammar,\r\n  multiplyMatrices: multiplyMatrices,\r\n});\r\n\r\n/**\r\n * A class for adding deep extensibility to any piece of JS code\r\n */\r\nclass Hooks {\r\n  add(name, callback, first) {\r\n    if (typeof arguments[0] != 'string') {\r\n      // Multiple hooks\r\n      for (var name in arguments[0]) {\r\n        this.add(name, arguments[0][name], arguments[1]);\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    (Array.isArray(name) ? name : [name]).forEach(function (name) {\r\n      this[name] = this[name] || [];\r\n\r\n      if (callback) {\r\n        this[name][first ? 'unshift' : 'push'](callback);\r\n      }\r\n    }, this);\r\n  }\r\n\r\n  run(name, env) {\r\n    this[name] = this[name] || [];\r\n    this[name].forEach(function (callback) {\r\n      callback.call(env && env.context ? env.context : env, env);\r\n    });\r\n  }\r\n}\r\n/**\r\n * The instance of {@link Hooks} used throughout Color.js\r\n */\r\nconst hooks = new Hooks();\r\n\r\n// Global defaults one may want to configure\r\n\r\nvar defaults = {\r\n  gamut_mapping: 'lch.c',\r\n  precision: 5,\r\n  deltaE: '76', // Default deltaE method\r\n};\r\n\r\nconst WHITES = {\r\n  // for compatibility, the four-digit chromaticity-derived ones everyone else uses\r\n  D50: [0.3457 / 0.3585, 1.0, (1.0 - 0.3457 - 0.3585) / 0.3585],\r\n  D65: [0.3127 / 0.329, 1.0, (1.0 - 0.3127 - 0.329) / 0.329],\r\n};\r\n\r\nfunction getWhite(name) {\r\n  if (Array.isArray(name)) {\r\n    return name;\r\n  }\r\n\r\n  return WHITES[name];\r\n}\r\n\r\n// Adapt XYZ from white point W1 to W2\r\nfunction adapt$1(W1, W2, XYZ, options = {}) {\r\n  W1 = getWhite(W1);\r\n  W2 = getWhite(W2);\r\n\r\n  if (!W1 || !W2) {\r\n    throw new TypeError(\r\n      `Missing white point to convert ${!W1 ? 'from' : ''}${!W1 && !W2 ? '/' : ''}${!W2 ? 'to' : ''}`\r\n    );\r\n  }\r\n\r\n  if (W1 === W2) {\r\n    // Same whitepoints, no conversion needed\r\n    return XYZ;\r\n  }\r\n\r\n  let env = { W1, W2, XYZ, options };\r\n\r\n  hooks.run('chromatic-adaptation-start', env);\r\n\r\n  if (!env.M) {\r\n    if (env.W1 === WHITES.D65 && env.W2 === WHITES.D50) {\r\n      env.M = [\r\n        [1.0479298208405488, 0.022946793341019088, -0.05019222954313557],\r\n        [0.029627815688159344, 0.990434484573249, -0.01707382502938514],\r\n        [-0.009243058152591178, 0.015055144896577895, 0.7518742899580008],\r\n      ];\r\n    } else if (env.W1 === WHITES.D50 && env.W2 === WHITES.D65) {\r\n      env.M = [\r\n        [0.9554734527042182, -0.023098536874261423, 0.0632593086610217],\r\n        [-0.028369706963208136, 1.0099954580058226, 0.021041398966943008],\r\n        [0.012314001688319899, -0.020507696433477912, 1.3303659366080753],\r\n      ];\r\n    }\r\n  }\r\n\r\n  hooks.run('chromatic-adaptation-end', env);\r\n\r\n  if (env.M) {\r\n    return multiplyMatrices(env.M, env.XYZ);\r\n  } else {\r\n    throw new TypeError('Only Bradford CAT with white points D50 and D65 supported for now.');\r\n  }\r\n}\r\n\r\nconst ε$4 = 0.000075;\r\n\r\n/**\r\n * Class to represent a color space\r\n */\r\nclass ColorSpace {\r\n  constructor(options) {\r\n    this.id = options.id;\r\n    this.name = options.name;\r\n    this.base = options.base ? ColorSpace.get(options.base) : null;\r\n    this.aliases = options.aliases;\r\n\r\n    if (this.base) {\r\n      this.fromBase = options.fromBase;\r\n      this.toBase = options.toBase;\r\n    }\r\n\r\n    // Coordinate metadata\r\n\r\n    let coords = options.coords ?? this.base.coords;\r\n    this.coords = coords;\r\n\r\n    // White point\r\n\r\n    let white = options.white ?? this.base.white ?? 'D65';\r\n    this.white = getWhite(white);\r\n\r\n    // Sort out formats\r\n\r\n    this.formats = options.formats ?? {};\r\n\r\n    for (let name in this.formats) {\r\n      let format = this.formats[name];\r\n      format.type ||= 'function';\r\n      format.name ||= name;\r\n    }\r\n\r\n    if (options.cssId && !this.formats.functions?.color) {\r\n      this.formats.color = { id: options.cssId };\r\n      Object.defineProperty(this, 'cssId', { value: options.cssId });\r\n    } else if (this.formats?.color && !this.formats?.color.id) {\r\n      this.formats.color.id = this.id;\r\n    }\r\n\r\n    // Other stuff\r\n    this.referred = options.referred;\r\n\r\n    // Compute ancestors and store them, since they will never change\r\n    this.#path = this.#getPath().reverse();\r\n\r\n    hooks.run('colorspace-init-end', this);\r\n  }\r\n\r\n  inGamut(coords, { epsilon = ε$4 } = {}) {\r\n    if (this.isPolar) {\r\n      // Do not check gamut through polar coordinates\r\n      coords = this.toBase(coords);\r\n\r\n      return this.base.inGamut(coords, { epsilon });\r\n    }\r\n\r\n    let coordMeta = Object.values(this.coords);\r\n\r\n    return coords.every((c, i) => {\r\n      let meta = coordMeta[i];\r\n\r\n      if (meta.type !== 'angle' && meta.range) {\r\n        if (Number.isNaN(c)) {\r\n          // NaN is always in gamut\r\n          return true;\r\n        }\r\n\r\n        let [min, max] = meta.range;\r\n        return (min === undefined || c >= min - epsilon) && (max === undefined || c <= max + epsilon);\r\n      }\r\n\r\n      return true;\r\n    });\r\n  }\r\n\r\n  get cssId() {\r\n    return this.formats.functions?.color?.id || this.id;\r\n  }\r\n\r\n  get isPolar() {\r\n    for (let id in this.coords) {\r\n      if (this.coords[id].type === 'angle') {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  #processFormat(format) {\r\n    if (format.coords && !format.coordGrammar) {\r\n      format.type ||= 'function';\r\n      format.name ||= 'color';\r\n\r\n      // Format has not been processed\r\n      format.coordGrammar = parseCoordGrammar(format.coords);\r\n\r\n      let coordFormats = Object.entries(this.coords).map(([id, coordMeta], i) => {\r\n        // Preferred format for each coord is the first one\r\n        let outputType = format.coordGrammar[i][0];\r\n\r\n        let fromRange = coordMeta.range || coordMeta.refRange;\r\n        let toRange = outputType.range,\r\n          suffix = '';\r\n\r\n        // Non-strict equals intentional since outputType could be a string object\r\n        if (outputType == '<percentage>') {\r\n          toRange = [0, 100];\r\n          suffix = '%';\r\n        } else if (outputType == '<angle>') {\r\n          suffix = 'deg';\r\n        }\r\n\r\n        return { fromRange, toRange, suffix };\r\n      });\r\n\r\n      format.serializeCoords = (coords, precision) => {\r\n        return coords.map((c, i) => {\r\n          let { fromRange, toRange, suffix } = coordFormats[i];\r\n\r\n          if (fromRange && toRange) {\r\n            c = mapRange(fromRange, toRange, c);\r\n          }\r\n\r\n          c = toPrecision(c, precision);\r\n\r\n          if (suffix) {\r\n            c += suffix;\r\n          }\r\n\r\n          return c;\r\n        });\r\n      };\r\n    }\r\n\r\n    return format;\r\n  }\r\n\r\n  getFormat(format) {\r\n    if (typeof format === 'object') {\r\n      format = this.#processFormat(format);\r\n      return format;\r\n    }\r\n\r\n    let ret;\r\n    if (format === 'default') {\r\n      // Get first format\r\n      ret = Object.values(this.formats)[0];\r\n    } else {\r\n      ret = this.formats[format];\r\n    }\r\n\r\n    if (ret) {\r\n      ret = this.#processFormat(ret);\r\n      return ret;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  #path;\r\n\r\n  #getPath() {\r\n    let ret = [this];\r\n\r\n    for (let space = this; (space = space.base); ) {\r\n      ret.push(space);\r\n    }\r\n\r\n    return ret;\r\n  }\r\n\r\n  to(space, coords) {\r\n    if (arguments.length === 1) {\r\n      [space, coords] = [space.space, space.coords];\r\n    }\r\n\r\n    space = ColorSpace.get(space);\r\n\r\n    if (this === space) {\r\n      // Same space, no change needed\r\n      return coords;\r\n    }\r\n\r\n    // Convert NaN to 0, which seems to be valid in every coordinate of every color space\r\n    coords = coords.map((c) => (Number.isNaN(c) ? 0 : c));\r\n\r\n    // Find connection space = lowest common ancestor in the base tree\r\n    let myPath = this.#path;\r\n    let otherPath = space.#path;\r\n\r\n    let connectionSpace, connectionSpaceIndex;\r\n\r\n    for (let i = 0; i < myPath.length; i++) {\r\n      if (myPath[i] === otherPath[i]) {\r\n        connectionSpace = myPath[i];\r\n        connectionSpaceIndex = i;\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!connectionSpace) {\r\n      // This should never happen\r\n      throw new Error(`Cannot convert between color spaces ${this} and ${space}: no connection space was found`);\r\n    }\r\n\r\n    // Go up from current space to connection space\r\n    for (let i = myPath.length - 1; i > connectionSpaceIndex; i--) {\r\n      coords = myPath[i].toBase(coords);\r\n    }\r\n\r\n    // Go down from connection space to target space\r\n    for (let i = connectionSpaceIndex + 1; i < otherPath.length; i++) {\r\n      coords = otherPath[i].fromBase(coords);\r\n    }\r\n\r\n    return coords;\r\n  }\r\n\r\n  from(space, coords) {\r\n    if (arguments.length === 1) {\r\n      [space, coords] = [space.space, space.coords];\r\n    }\r\n\r\n    space = ColorSpace.get(space);\r\n\r\n    return space.to(this, coords);\r\n  }\r\n\r\n  toString() {\r\n    return `${this.name} (${this.id})`;\r\n  }\r\n\r\n  getMinCoords() {\r\n    let ret = [];\r\n\r\n    for (let id in this.coords) {\r\n      let meta = this.coords[id];\r\n      let range = meta.range || meta.refRange;\r\n      ret.push(range?.min ?? 0);\r\n    }\r\n\r\n    return ret;\r\n  }\r\n\r\n  static registry = {};\r\n\r\n  // Returns array of unique color spaces\r\n  static get all() {\r\n    return [...new Set(Object.values(ColorSpace.registry))];\r\n  }\r\n\r\n  static register(id, space) {\r\n    if (arguments.length === 1) {\r\n      space = arguments[0];\r\n      id = space.id;\r\n    }\r\n\r\n    space = this.get(space);\r\n\r\n    if (this.registry[id] && this.registry[id] !== space) {\r\n      throw new Error(`Duplicate color space registration: '${id}'`);\r\n    }\r\n    this.registry[id] = space;\r\n\r\n    // Register aliases when called without an explicit ID.\r\n    if (arguments.length === 1 && space.aliases) {\r\n      for (let alias of space.aliases) {\r\n        this.register(alias, space);\r\n      }\r\n    }\r\n\r\n    return space;\r\n  }\r\n\r\n  /**\r\n   * Lookup ColorSpace object by name\r\n   * @param {ColorSpace | string} name\r\n   */\r\n  static get(space, ...alternatives) {\r\n    if (!space || space instanceof ColorSpace) {\r\n      return space;\r\n    }\r\n\r\n    let argType = type(space);\r\n\r\n    if (argType === 'string') {\r\n      // It's a color space id\r\n      let ret = ColorSpace.registry[space.toLowerCase()];\r\n\r\n      if (!ret) {\r\n        throw new TypeError(`No color space found with id = \"${space}\"`);\r\n      }\r\n\r\n      return ret;\r\n    }\r\n\r\n    if (alternatives.length) {\r\n      return ColorSpace.get(...alternatives);\r\n    }\r\n\r\n    throw new TypeError(`${space} is not a valid color space`);\r\n  }\r\n\r\n  /**\r\n   * Get metadata about a coordinate of a color space\r\n   *\r\n   * @static\r\n   * @param {Array | string} ref\r\n   * @param {ColorSpace | string} [workingSpace]\r\n   * @return {Object}\r\n   */\r\n  static resolveCoord(ref, workingSpace) {\r\n    let coordType = type(ref);\r\n    let space, coord;\r\n\r\n    if (coordType === 'string') {\r\n      if (ref.includes('.')) {\r\n        // Absolute coordinate\r\n        [space, coord] = ref.split('.');\r\n      } else {\r\n        // Relative coordinate\r\n        [space, coord] = [, ref];\r\n      }\r\n    } else if (Array.isArray(ref)) {\r\n      [space, coord] = ref;\r\n    } else {\r\n      // Object\r\n      space = ref.space;\r\n      coord = ref.coordId;\r\n    }\r\n\r\n    space = ColorSpace.get(space);\r\n\r\n    if (!space) {\r\n      space = workingSpace;\r\n    }\r\n\r\n    if (!space) {\r\n      throw new TypeError(\r\n        `Cannot resolve coordinate reference ${ref}: No color space specified and relative references are not allowed here`\r\n      );\r\n    }\r\n\r\n    coordType = type(coord);\r\n\r\n    if (coordType === 'number' || (coordType === 'string' && coord >= 0)) {\r\n      // Resolve numerical coord\r\n      let meta = Object.entries(space.coords)[coord];\r\n\r\n      if (meta) {\r\n        return { space, id: meta[0], index: coord, ...meta[1] };\r\n      }\r\n    }\r\n\r\n    space = ColorSpace.get(space);\r\n\r\n    let normalizedCoord = coord.toLowerCase();\r\n\r\n    let i = 0;\r\n    for (let id in space.coords) {\r\n      let meta = space.coords[id];\r\n\r\n      if (id.toLowerCase() === normalizedCoord || meta.name?.toLowerCase() === normalizedCoord) {\r\n        return { space, id, index: i, ...meta };\r\n      }\r\n\r\n      i++;\r\n    }\r\n\r\n    throw new TypeError(\r\n      `No \"${coord}\" coordinate found in ${space.name}. Its coordinates are: ${Object.keys(space.coords).join(', ')}`\r\n    );\r\n  }\r\n\r\n  static DEFAULT_FORMAT = {\r\n    type: 'functions',\r\n    name: 'color',\r\n  };\r\n}\r\n\r\nvar XYZ_D65 = new ColorSpace({\r\n  id: 'xyz-d65',\r\n  name: 'XYZ D65',\r\n  coords: {\r\n    x: { name: 'X' },\r\n    y: { name: 'Y' },\r\n    z: { name: 'Z' },\r\n  },\r\n  white: 'D65',\r\n  formats: {\r\n    color: {\r\n      ids: ['xyz-d65', 'xyz'],\r\n    },\r\n  },\r\n  aliases: ['xyz'],\r\n});\r\n\r\n/**\r\n * Convenience class for RGB color spaces\r\n * @extends {ColorSpace}\r\n */\r\nclass RGBColorSpace extends ColorSpace {\r\n  /**\r\n   * Creates a new RGB ColorSpace.\r\n   * If coords are not specified, they will use the default RGB coords.\r\n   * Instead of `fromBase()` and `toBase()` functions,\r\n   * you can specify to/from XYZ matrices and have `toBase()` and `fromBase()` automatically generated.\r\n   * @param {*} options - Same options as {@link ColorSpace} plus:\r\n   * @param {number[][]} options.toXYZ_M - Matrix to convert to XYZ\r\n   * @param {number[][]} options.fromXYZ_M - Matrix to convert from XYZ\r\n   */\r\n  constructor(options) {\r\n    if (!options.coords) {\r\n      options.coords = {\r\n        r: {\r\n          range: [0, 1],\r\n          name: 'Red',\r\n        },\r\n        g: {\r\n          range: [0, 1],\r\n          name: 'Green',\r\n        },\r\n        b: {\r\n          range: [0, 1],\r\n          name: 'Blue',\r\n        },\r\n      };\r\n    }\r\n\r\n    if (!options.base) {\r\n      options.base = XYZ_D65;\r\n    }\r\n\r\n    if (options.toXYZ_M && options.fromXYZ_M) {\r\n      options.toBase ??= (rgb) => {\r\n        let xyz = multiplyMatrices(options.toXYZ_M, rgb);\r\n\r\n        if (this.white !== this.base.white) {\r\n          // Perform chromatic adaptation\r\n          xyz = adapt$1(this.white, this.base.white, xyz);\r\n        }\r\n\r\n        return xyz;\r\n      };\r\n\r\n      options.fromBase ??= (xyz) => {\r\n        xyz = adapt$1(this.base.white, this.white, xyz);\r\n        return multiplyMatrices(options.fromXYZ_M, xyz);\r\n      };\r\n    }\r\n\r\n    options.referred ??= 'display';\r\n\r\n    super(options);\r\n  }\r\n}\r\n\r\n// CSS color to Color object\r\nfunction parse(str) {\r\n  let env = { str: String(str)?.trim() };\r\n  hooks.run('parse-start', env);\r\n\r\n  if (env.color) {\r\n    return env.color;\r\n  }\r\n\r\n  env.parsed = parseFunction(env.str);\r\n\r\n  if (env.parsed) {\r\n    // Is a functional syntax\r\n    let name = env.parsed.name;\r\n\r\n    if (name === 'color') {\r\n      // color() function\r\n      let id = env.parsed.args.shift();\r\n      let alpha = env.parsed.rawArgs.indexOf('/') > 0 ? env.parsed.args.pop() : 1;\r\n\r\n      for (let space of ColorSpace.all) {\r\n        let colorSpec = space.getFormat('color');\r\n\r\n        if (colorSpec) {\r\n          if (id === colorSpec.id || colorSpec.ids?.includes(id)) {\r\n            // From https://drafts.csswg.org/css-color-4/#color-function\r\n            // If more <number>s or <percentage>s are provided than parameters that the colorspace takes, the excess <number>s at the end are ignored.\r\n            // If less <number>s or <percentage>s are provided than parameters that the colorspace takes, the missing parameters default to 0. (This is particularly convenient for multichannel printers where the additional inks are spot colors or varnishes that most colors on the page won’t use.)\r\n            let argCount = Object.keys(space.coords).length;\r\n            let coords = Array(argCount).fill(0);\r\n            coords.forEach((_, i) => (coords[i] = env.parsed.args[i] || 0));\r\n\r\n            return { spaceId: space.id, coords, alpha };\r\n          }\r\n        }\r\n      }\r\n\r\n      // Not found\r\n      let didYouMean = '';\r\n      if (id in ColorSpace.registry) {\r\n        // Used color space id instead of color() id, these are often different\r\n        let cssId = ColorSpace.registry[id].formats?.functions?.color?.id;\r\n\r\n        if (cssId) {\r\n          didYouMean = `Did you mean color(${cssId})?`;\r\n        }\r\n      }\r\n      throw new TypeError(`Cannot parse color(${id}). ` + (didYouMean || 'Missing a plugin?'));\r\n    } else {\r\n      for (let space of ColorSpace.all) {\r\n        // color space specific function\r\n        let format = space.getFormat(name);\r\n        if (format && format.type === 'function') {\r\n          let alpha = 1;\r\n\r\n          if (format.lastAlpha || last(env.parsed.args).alpha) {\r\n            alpha = env.parsed.args.pop();\r\n          }\r\n\r\n          let coords = env.parsed.args;\r\n\r\n          if (format.coordGrammar) {\r\n            Object.entries(space.coords).forEach(([id, coordMeta], i) => {\r\n              let coordGrammar = format.coordGrammar[i];\r\n              let providedType = coords[i]?.type;\r\n\r\n              // Find grammar alternative that matches the provided type\r\n              // Non-strict equals is intentional because we are comparing w/ string objects\r\n              coordGrammar = coordGrammar.find((c) => c == providedType);\r\n\r\n              // Check that each coord conforms to its grammar\r\n              if (!coordGrammar) {\r\n                // Type does not exist in the grammar, throw\r\n                let coordName = coordMeta.name || id;\r\n                throw new TypeError(`${providedType} not allowed for ${coordName} in ${name}()`);\r\n              }\r\n\r\n              let fromRange = coordGrammar.range;\r\n\r\n              if (providedType === '<percentage>') {\r\n                fromRange ||= [0, 1];\r\n              }\r\n\r\n              let toRange = coordMeta.range || coordMeta.refRange;\r\n\r\n              if (fromRange && toRange) {\r\n                coords[i] = mapRange(fromRange, toRange, coords[i]);\r\n              }\r\n            });\r\n          }\r\n\r\n          return {\r\n            spaceId: space.id,\r\n            coords,\r\n            alpha,\r\n          };\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    // Custom, colorspace-specific format\r\n    for (let space of ColorSpace.all) {\r\n      for (let formatId in space.formats) {\r\n        let format = space.formats[formatId];\r\n\r\n        if (format.type !== 'custom') {\r\n          continue;\r\n        }\r\n\r\n        if (format.test && !format.test(env.str)) {\r\n          continue;\r\n        }\r\n\r\n        let color = format.parse(env.str);\r\n\r\n        if (color) {\r\n          color.alpha ??= 1;\r\n          return color;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // If we're here, we couldn't parse\r\n  throw new TypeError(`Could not parse ${str} as a color. Missing a plugin?`);\r\n}\r\n\r\n/**\r\n * Resolves a color reference (object or string) to a plain color object\r\n * @param {Color | {space, coords, alpha} | string} color\r\n * @returns {{space, coords, alpha}}\r\n */\r\nfunction getColor(color) {\r\n  if (!color) {\r\n    throw new TypeError('Empty color reference');\r\n  }\r\n\r\n  if (isString(color)) {\r\n    color = parse(color);\r\n  }\r\n\r\n  // Object fixup\r\n  let space = color.space || color.spaceId;\r\n\r\n  if (!(space instanceof ColorSpace)) {\r\n    // Convert string id to color space object\r\n    color.space = ColorSpace.get(space);\r\n  }\r\n\r\n  if (color.alpha === undefined) {\r\n    color.alpha = 1;\r\n  }\r\n\r\n  return color;\r\n}\r\n\r\n/**\r\n * Get the coordinates of a color in another color space\r\n *\r\n * @param {string | ColorSpace} space\r\n * @returns {number[]}\r\n */\r\nfunction getAll(color, space) {\r\n  space = ColorSpace.get(space);\r\n  return space.from(color);\r\n}\r\n\r\nfunction get(color, prop) {\r\n  let { space, index } = ColorSpace.resolveCoord(prop, color.space);\r\n  let coords = getAll(color, space);\r\n  return coords[index];\r\n}\r\n\r\nfunction setAll(color, space, coords) {\r\n  space = ColorSpace.get(space);\r\n  color.coords = space.to(color.space, coords);\r\n  return color;\r\n}\r\n\r\n// Set properties and return current instance\r\nfunction set$1(color, prop, value) {\r\n  color = getColor(color);\r\n\r\n  if (arguments.length === 2 && type(arguments[1]) === 'object') {\r\n    // Argument is an object literal\r\n    let object = arguments[1];\r\n    for (let p in object) {\r\n      set$1(color, p, object[p]);\r\n    }\r\n  } else {\r\n    if (typeof value === 'function') {\r\n      value = value(get(color, prop));\r\n    }\r\n\r\n    let { space, index } = ColorSpace.resolveCoord(prop, color.space);\r\n    let coords = getAll(color, space);\r\n    coords[index] = value;\r\n    setAll(color, space, coords);\r\n  }\r\n\r\n  return color;\r\n}\r\n\r\nvar XYZ_D50 = new ColorSpace({\r\n  id: 'xyz-d50',\r\n  name: 'XYZ D50',\r\n  white: 'D50',\r\n  base: XYZ_D65,\r\n  fromBase: (coords) => adapt$1(XYZ_D65.white, 'D50', coords),\r\n  toBase: (coords) => adapt$1('D50', XYZ_D65.white, coords),\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\n// κ * ε  = 2^3 = 8\r\nconst ε$3 = 216 / 24389; // 6^3/29^3 == (24/116)^3\r\nconst ε3$1 = 24 / 116;\r\nconst κ$1 = 24389 / 27; // 29^3/3^3\r\n\r\nlet white$1 = WHITES.D50;\r\n\r\nvar lab = new ColorSpace({\r\n  id: 'lab',\r\n  name: 'Lab',\r\n  coords: {\r\n    l: {\r\n      refRange: [0, 100],\r\n      name: 'L',\r\n    },\r\n    a: {\r\n      refRange: [-125, 125],\r\n    },\r\n    b: {\r\n      refRange: [-125, 125],\r\n    },\r\n  },\r\n\r\n  // Assuming XYZ is relative to D50, convert to CIE Lab\r\n  // from CIE standard, which now defines these as a rational fraction\r\n  white: white$1,\r\n\r\n  base: XYZ_D50,\r\n  // Convert D50-adapted XYX to Lab\r\n  //  CIE 15.3:2004 section 8.2.1.1\r\n  fromBase(XYZ) {\r\n    // compute xyz, which is XYZ scaled relative to reference white\r\n    let xyz = XYZ.map((value, i) => value / white$1[i]);\r\n\r\n    // now compute f\r\n    let f = xyz.map((value) => (value > ε$3 ? Math.cbrt(value) : (κ$1 * value + 16) / 116));\r\n\r\n    return [\r\n      116 * f[1] - 16, // L\r\n      500 * (f[0] - f[1]), // a\r\n      200 * (f[1] - f[2]), // b\r\n    ];\r\n  },\r\n  // Convert Lab to D50-adapted XYZ\r\n  // Same result as CIE 15.3:2004 Appendix D although the derivation is different\r\n  // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n  toBase(Lab) {\r\n    // compute f, starting with the luminance-related term\r\n    let f = [];\r\n    f[1] = (Lab[0] + 16) / 116;\r\n    f[0] = Lab[1] / 500 + f[1];\r\n    f[2] = f[1] - Lab[2] / 200;\r\n\r\n    // compute xyz\r\n    let xyz = [\r\n      f[0] > ε3$1 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ$1,\r\n      Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ$1,\r\n      f[2] > ε3$1 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ$1,\r\n    ];\r\n\r\n    // Compute XYZ by scaling xyz by reference white\r\n    return xyz.map((value, i) => value * white$1[i]);\r\n  },\r\n\r\n  formats: {\r\n    lab: {\r\n      coords: ['<percentage> | <number>', '<number>', '<number>'],\r\n    },\r\n  },\r\n});\r\n\r\nfunction constrain(angle) {\r\n  return ((angle % 360) + 360) % 360;\r\n}\r\n\r\nfunction adjust(arc, angles) {\r\n  if (arc === 'raw') {\r\n    return angles;\r\n  }\r\n\r\n  let [a1, a2] = angles.map(constrain);\r\n\r\n  let angleDiff = a2 - a1;\r\n\r\n  if (arc === 'increasing') {\r\n    if (angleDiff < 0) {\r\n      a2 += 360;\r\n    }\r\n  } else if (arc === 'decreasing') {\r\n    if (angleDiff > 0) {\r\n      a1 += 360;\r\n    }\r\n  } else if (arc === 'longer') {\r\n    if (-180 < angleDiff && angleDiff < 180) {\r\n      if (angleDiff > 0) {\r\n        a2 += 360;\r\n      } else {\r\n        a1 += 360;\r\n      }\r\n    }\r\n  } else if (arc === 'shorter') {\r\n    if (angleDiff > 180) {\r\n      a1 += 360;\r\n    } else if (angleDiff < -180) {\r\n      a2 += 360;\r\n    }\r\n  }\r\n\r\n  return [a1, a2];\r\n}\r\n\r\nvar lch = new ColorSpace({\r\n  id: 'lch',\r\n  name: 'LCH',\r\n  coords: {\r\n    l: {\r\n      refRange: [0, 100],\r\n      name: 'Lightness',\r\n    },\r\n    c: {\r\n      refRange: [0, 150],\r\n      name: 'Chroma',\r\n    },\r\n    h: {\r\n      refRange: [0, 360],\r\n      type: 'angle',\r\n      name: 'Hue',\r\n    },\r\n  },\r\n\r\n  base: lab,\r\n  fromBase(Lab) {\r\n    // Convert to polar form\r\n    let [L, a, b] = Lab;\r\n    let hue;\r\n    const ε = 0.02;\r\n\r\n    if (Math.abs(a) < ε && Math.abs(b) < ε) {\r\n      hue = NaN;\r\n    } else {\r\n      hue = (Math.atan2(b, a) * 180) / Math.PI;\r\n    }\r\n\r\n    return [\r\n      L, // L is still L\r\n      Math.sqrt(a ** 2 + b ** 2), // Chroma\r\n      constrain(hue), // Hue, in degrees [0 to 360)\r\n    ];\r\n  },\r\n  toBase(LCH) {\r\n    // Convert from polar form\r\n    let [Lightness, Chroma, Hue] = LCH;\r\n    // Clamp any negative Chroma\r\n    if (Chroma < 0) {\r\n      Chroma = 0;\r\n    } // Deal with NaN Hue\r\n    if (isNaN(Hue)) {\r\n      Hue = 0;\r\n    }\r\n    return [\r\n      Lightness, // L is still L\r\n      Chroma * Math.cos((Hue * Math.PI) / 180), // a\r\n      Chroma * Math.sin((Hue * Math.PI) / 180), // b\r\n    ];\r\n  },\r\n\r\n  formats: {\r\n    lch: {\r\n      coords: ['<percentage> | <number>', '<number>', '<number> | <angle>'],\r\n    },\r\n  },\r\n});\r\n\r\n// deltaE2000 is a statistically significant improvement\r\n// and is recommended by the CIE and Idealliance\r\n// especially for color differences less than 10 deltaE76\r\n// but is wicked complicated\r\n// and many implementations have small errors!\r\n// DeltaE2000 is also discontinuous; in case this\r\n// matters to you, use deltaECMC instead.\r\n\r\nconst Gfactor = 25 ** 7;\r\nconst π$1 = Math.PI;\r\nconst r2d = 180 / π$1;\r\nconst d2r$1 = π$1 / 180;\r\n\r\nfunction deltaE2000(color, sample, { kL = 1, kC = 1, kH = 1 } = {}) {\r\n  // Given this color as the reference\r\n  // and the function parameter as the sample,\r\n  // calculate deltaE 2000.\r\n\r\n  // This implementation assumes the parametric\r\n  // weighting factors kL, kC and kH\r\n  // for the influence of viewing conditions\r\n  // are all 1, as sadly seems typical.\r\n  // kL should be increased for lightness texture or noise\r\n  // and kC increased for chroma noise\r\n\r\n  let [L1, a1, b1] = lab.from(color);\r\n  let C1 = lch.from(lab, [L1, a1, b1])[1];\r\n  let [L2, a2, b2] = lab.from(sample);\r\n  let C2 = lch.from(lab, [L2, a2, b2])[1];\r\n\r\n  // Check for negative Chroma,\r\n  // which might happen through\r\n  // direct user input of LCH values\r\n\r\n  if (C1 < 0) {\r\n    C1 = 0;\r\n  }\r\n  if (C2 < 0) {\r\n    C2 = 0;\r\n  }\r\n\r\n  let Cbar = (C1 + C2) / 2; // mean Chroma\r\n\r\n  // calculate a-axis asymmetry factor from mean Chroma\r\n  // this turns JND ellipses for near-neutral colors back into circles\r\n  let C7 = Cbar ** 7;\r\n\r\n  let G = 0.5 * (1 - Math.sqrt(C7 / (C7 + Gfactor)));\r\n\r\n  // scale a axes by asymmetry factor\r\n  // this by the way is why there is no Lab2000 colorspace\r\n  let adash1 = (1 + G) * a1;\r\n  let adash2 = (1 + G) * a2;\r\n\r\n  // calculate new Chroma from scaled a and original b axes\r\n  let Cdash1 = Math.sqrt(adash1 ** 2 + b1 ** 2);\r\n  let Cdash2 = Math.sqrt(adash2 ** 2 + b2 ** 2);\r\n\r\n  // calculate new hues, with zero hue for true neutrals\r\n  // and in degrees, not radians\r\n\r\n  let h1 = adash1 === 0 && b1 === 0 ? 0 : Math.atan2(b1, adash1);\r\n  let h2 = adash2 === 0 && b2 === 0 ? 0 : Math.atan2(b2, adash2);\r\n\r\n  if (h1 < 0) {\r\n    h1 += 2 * π$1;\r\n  }\r\n  if (h2 < 0) {\r\n    h2 += 2 * π$1;\r\n  }\r\n\r\n  h1 *= r2d;\r\n  h2 *= r2d;\r\n\r\n  // Lightness and Chroma differences; sign matters\r\n  let ΔL = L2 - L1;\r\n  let ΔC = Cdash2 - Cdash1;\r\n\r\n  // Hue difference, getting the sign correct\r\n  let hdiff = h2 - h1;\r\n  let hsum = h1 + h2;\r\n  let habs = Math.abs(hdiff);\r\n  let Δh;\r\n\r\n  if (Cdash1 * Cdash2 === 0) {\r\n    Δh = 0;\r\n  } else if (habs <= 180) {\r\n    Δh = hdiff;\r\n  } else if (hdiff > 180) {\r\n    Δh = hdiff - 360;\r\n  } else if (hdiff < -180) {\r\n    Δh = hdiff + 360;\r\n  } else {\r\n    console.log('the unthinkable has happened');\r\n  }\r\n\r\n  // weighted Hue difference, more for larger Chroma\r\n  let ΔH = 2 * Math.sqrt(Cdash2 * Cdash1) * Math.sin((Δh * d2r$1) / 2);\r\n\r\n  // calculate mean Lightness and Chroma\r\n  let Ldash = (L1 + L2) / 2;\r\n  let Cdash = (Cdash1 + Cdash2) / 2;\r\n  let Cdash7 = Math.pow(Cdash, 7);\r\n\r\n  // Compensate for non-linearity in the blue region of Lab.\r\n  // Four possibilities for hue weighting factor,\r\n  // depending on the angles, to get the correct sign\r\n  let hdash;\r\n  if (Cdash1 * Cdash2 === 0) {\r\n    hdash = hsum; // which should be zero\r\n  } else if (habs <= 180) {\r\n    hdash = hsum / 2;\r\n  } else if (hsum < 360) {\r\n    hdash = (hsum + 360) / 2;\r\n  } else {\r\n    hdash = (hsum - 360) / 2;\r\n  }\r\n\r\n  // positional corrections to the lack of uniformity of CIELAB\r\n  // These are all trying to make JND ellipsoids more like spheres\r\n\r\n  // SL Lightness crispening factor\r\n  // a background with L=50 is assumed\r\n  let lsq = (Ldash - 50) ** 2;\r\n  let SL = 1 + (0.015 * lsq) / Math.sqrt(20 + lsq);\r\n\r\n  // SC Chroma factor, similar to those in CMC and deltaE 94 formulae\r\n  let SC = 1 + 0.045 * Cdash;\r\n\r\n  // Cross term T for blue non-linearity\r\n  let T = 1;\r\n  T -= 0.17 * Math.cos((hdash - 30) * d2r$1);\r\n  T += 0.24 * Math.cos(2 * hdash * d2r$1);\r\n  T += 0.32 * Math.cos((3 * hdash + 6) * d2r$1);\r\n  T -= 0.2 * Math.cos((4 * hdash - 63) * d2r$1);\r\n\r\n  // SH Hue factor depends on Chroma,\r\n  // as well as adjusted hue angle like deltaE94.\r\n  let SH = 1 + 0.015 * Cdash * T;\r\n\r\n  // RT Hue rotation term compensates for rotation of JND ellipses\r\n  // and Munsell constant hue lines\r\n  // in the medium-high Chroma blue region\r\n  // (Hue 225 to 315)\r\n  let Δθ = 30 * Math.exp(-1 * ((hdash - 275) / 25) ** 2);\r\n  let RC = 2 * Math.sqrt(Cdash7 / (Cdash7 + Gfactor));\r\n  let RT = -1 * Math.sin(2 * Δθ * d2r$1) * RC;\r\n\r\n  // Finally calculate the deltaE, term by term as root sume of squares\r\n  let dE = (ΔL / (kL * SL)) ** 2;\r\n  dE += (ΔC / (kC * SC)) ** 2;\r\n  dE += (ΔH / (kH * SH)) ** 2;\r\n  dE += RT * (ΔC / (kC * SC)) * (ΔH / (kH * SH));\r\n  return Math.sqrt(dE);\r\n  // Yay!!!\r\n}\r\n\r\nconst ε$2 = 0.000075;\r\n\r\n/**\r\n * Check if a color is in gamut of either its own or another color space\r\n * @return {Boolean} Is the color in gamut?\r\n */\r\nfunction inGamut(color, space = color.space, { epsilon = ε$2 } = {}) {\r\n  color = getColor(color);\r\n  space = ColorSpace.get(space);\r\n  let coords = color.coords;\r\n\r\n  if (space !== color.space) {\r\n    coords = space.from(color);\r\n  }\r\n\r\n  return space.inGamut(coords, { epsilon });\r\n}\r\n\r\nfunction clone(color) {\r\n  return {\r\n    space: color.space,\r\n    coords: color.coords.slice(),\r\n    alpha: color.alpha,\r\n  };\r\n}\r\n\r\n/**\r\n * Force coordinates to be in gamut of a certain color space.\r\n * Mutates the color it is passed.\r\n * @param {Object} options\r\n * @param {string} options.method - How to force into gamut.\r\n *        If \"clip\", coordinates are just clipped to their reference range.\r\n *        If in the form [colorSpaceId].[coordName], that coordinate is reduced\r\n *        until the color is in gamut. Please note that this may produce nonsensical\r\n *        results for certain coordinates (e.g. hue) or infinite loops if reducing the coordinate never brings the color in gamut.\r\n * @param {ColorSpace|string} options.space - The space whose gamut we want to map to\r\n */\r\nfunction toGamut(color, { method = defaults.gamut_mapping, space = color.space } = {}) {\r\n  if (isString(arguments[1])) {\r\n    space = arguments[1];\r\n  }\r\n\r\n  space = ColorSpace.get(space);\r\n\r\n  if (inGamut(color, space, { epsilon: 0 })) {\r\n    return color;\r\n  }\r\n\r\n  // 3 spaces:\r\n  // color.space: current color space\r\n  // space: space whose gamut we are mapping to\r\n  // mapSpace: space with the coord we're reducing\r\n  let spaceColor = to(color, space);\r\n\r\n  if (method !== 'clip' && !inGamut(color, space)) {\r\n    let clipped = toGamut(clone(spaceColor), { method: 'clip', space });\r\n    if (deltaE2000(color, clipped) > 2) {\r\n      // Reduce a coordinate of a certain color space until the color is in gamut\r\n      let coordMeta = ColorSpace.resolveCoord(method);\r\n      let mapSpace = coordMeta.space;\r\n      let coordId = coordMeta.id;\r\n\r\n      let mappedColor = to(spaceColor, mapSpace);\r\n      let bounds = coordMeta.range || coordMeta.refRange;\r\n      let min = bounds[0];\r\n      let ε = 0.01; // for deltaE\r\n      let low = min;\r\n      let high = get(mappedColor, coordId);\r\n\r\n      while (high - low > ε) {\r\n        let clipped = clone(mappedColor);\r\n        clipped = toGamut(clipped, { space, method: 'clip' });\r\n        let deltaE = deltaE2000(mappedColor, clipped);\r\n\r\n        if (deltaE - 2 < ε) {\r\n          low = get(mappedColor, coordId);\r\n        } else {\r\n          high = get(mappedColor, coordId);\r\n        }\r\n\r\n        set$1(mappedColor, coordId, (low + high) / 2);\r\n      }\r\n\r\n      spaceColor = to(mappedColor, space);\r\n    } else {\r\n      spaceColor = clipped;\r\n    }\r\n  }\r\n\r\n  if (\r\n    method === 'clip' || // Dumb coord clipping\r\n    // finish off smarter gamut mapping with clip to get rid of ε, see #17\r\n    !inGamut(spaceColor, space, { epsilon: 0 })\r\n  ) {\r\n    let bounds = Object.values(space.coords).map((c) => c.range || []);\r\n\r\n    spaceColor.coords = spaceColor.coords.map((c, i) => {\r\n      let [min, max] = bounds[i];\r\n\r\n      if (min !== undefined) {\r\n        c = Math.max(min, c);\r\n      }\r\n\r\n      if (max !== undefined) {\r\n        c = Math.min(c, max);\r\n      }\r\n\r\n      return c;\r\n    });\r\n  }\r\n\r\n  if (space !== color.space) {\r\n    spaceColor = to(spaceColor, color.space);\r\n  }\r\n\r\n  color.coords = spaceColor.coords;\r\n  return color;\r\n}\r\n\r\ntoGamut.returns = 'color';\r\n\r\n/**\r\n * Convert to color space and return a new color\r\n * @param {Object|string} space - Color space object or id\r\n * @param {Object} options\r\n * @param {boolean} options.inGamut - Whether to force resulting color in gamut\r\n * @returns {Color}\r\n */\r\nfunction to(color, space, { inGamut } = {}) {\r\n  color = getColor(color);\r\n  space = ColorSpace.get(space);\r\n\r\n  let coords = space.from(color);\r\n  let ret = { space, coords, alpha: color.alpha };\r\n\r\n  if (inGamut) {\r\n    ret = toGamut(ret);\r\n  }\r\n\r\n  return ret;\r\n}\r\n\r\nto.returns = 'color';\r\n\r\n/**\r\n * Generic toString() method, outputs a color(spaceId ...coords) function, a functional syntax, or custom formats defined by the color space\r\n * @param {Object} options\r\n * @param {number} options.precision - Significant digits\r\n * @param {boolean} options.inGamut - Adjust coordinates to fit in gamut first? [default: false]\r\n */\r\nfunction serialize(\r\n  color,\r\n  { precision = defaults.precision, format = 'default', inGamut: inGamut$1 = true, ...customOptions } = {}\r\n) {\r\n  let ret;\r\n\r\n  color = getColor(color);\r\n\r\n  let formatId = format;\r\n  format = color.space.getFormat(format) ?? color.space.getFormat('default') ?? ColorSpace.DEFAULT_FORMAT;\r\n\r\n  inGamut$1 ||= format.toGamut;\r\n\r\n  let coords = color.coords;\r\n\r\n  // Convert NaN to zeros to have a chance at a valid CSS color\r\n  // Also convert -0 to 0\r\n  // This also clones it so we can manipulate it\r\n  coords = coords.map((c) => (c ? c : 0));\r\n\r\n  if (inGamut$1 && !inGamut(color)) {\r\n    coords = toGamut(clone(color), inGamut$1 === true ? undefined : inGamut$1).coords;\r\n  }\r\n\r\n  if (format.type === 'custom') {\r\n    customOptions.precision = precision;\r\n\r\n    if (format.serialize) {\r\n      ret = format.serialize(coords, color.alpha, customOptions);\r\n    } else {\r\n      throw new TypeError(`format ${formatId} can only be used to parse colors, not for serialization`);\r\n    }\r\n  } else {\r\n    // Functional syntax\r\n    let name = format.name || 'color';\r\n\r\n    if (format.serializeCoords) {\r\n      coords = format.serializeCoords(coords, precision);\r\n    } else {\r\n      if (precision !== null) {\r\n        coords = coords.map((c) => toPrecision(c, precision));\r\n      }\r\n    }\r\n\r\n    let args = [...coords];\r\n\r\n    if (name === 'color') {\r\n      // If output is a color() function, add colorspace id as first argument\r\n      let cssId = format.id || format.ids?.[0] || color.space.id;\r\n      args.unshift(cssId);\r\n    }\r\n\r\n    let alpha = color.alpha;\r\n    if (precision !== null) {\r\n      alpha = toPrecision(alpha, precision);\r\n    }\r\n\r\n    let strAlpha = color.alpha < 1 ? ` ${format.commas ? ',' : '/'} ${alpha}` : '';\r\n    ret = `${name}(${args.join(format.commas ? ', ' : ' ')}${strAlpha})`;\r\n  }\r\n\r\n  return ret;\r\n}\r\n\r\n// convert an array of linear-light rec2020 values to CIE XYZ\r\n// using  D65 (no chromatic adaptation)\r\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n// 0 is actually calculated as  4.994106574466076e-17\r\nconst toXYZ_M$5 = [\r\n  [0.6369580483012914, 0.14461690358620832, 0.1688809751641721],\r\n  [0.2627002120112671, 0.6779980715188708, 0.05930171646986196],\r\n  [0.0, 0.028072693049087428, 1.060985057710791],\r\n];\r\n\r\n// from ITU-R BT.2124-0 Annex 2 p.3\r\nconst fromXYZ_M$5 = [\r\n  [1.716651187971268, -0.355670783776392, -0.25336628137366],\r\n  [-0.666684351832489, 1.616481236634939, 0.0157685458139111],\r\n  [0.017639857445311, -0.042770613257809, 0.942103121235474],\r\n];\r\n\r\nvar REC2020Linear = new RGBColorSpace({\r\n  id: 'rec2020-linear',\r\n  name: 'Linear REC.2020',\r\n  white: 'D65',\r\n  toXYZ_M: toXYZ_M$5,\r\n  fromXYZ_M: fromXYZ_M$5,\r\n});\r\n\r\n// import sRGB from \"./srgb.js\";\r\n\r\nconst α = 1.09929682680944;\r\nconst β = 0.018053968510807;\r\n\r\nvar REC2020 = new RGBColorSpace({\r\n  id: 'rec2020',\r\n  name: 'REC.2020',\r\n  base: REC2020Linear,\r\n  // Non-linear transfer function from Rec. ITU-R BT.2020-2 table 4\r\n  toBase(RGB) {\r\n    return RGB.map(function (val) {\r\n      if (val < β * 4.5) {\r\n        return val / 4.5;\r\n      }\r\n\r\n      return Math.pow((val + α - 1) / α, 1 / 0.45);\r\n    });\r\n  },\r\n  fromBase(RGB) {\r\n    return RGB.map(function (val) {\r\n      if (val >= β) {\r\n        return α * Math.pow(val, 0.45) - (α - 1);\r\n      }\r\n\r\n      return 4.5 * val;\r\n    });\r\n  },\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\nconst toXYZ_M$4 = [\r\n  [0.4865709486482162, 0.26566769316909306, 0.1982172852343625],\r\n  [0.2289745640697488, 0.6917385218365064, 0.079286914093745],\r\n  [0.0, 0.04511338185890264, 1.043944368900976],\r\n];\r\n\r\nconst fromXYZ_M$4 = [\r\n  [2.493496911941425, -0.9313836179191239, -0.40271078445071684],\r\n  [-0.8294889695615747, 1.7626640603183463, 0.023624685841943577],\r\n  [0.03584583024378447, -0.07617238926804182, 0.9568845240076872],\r\n];\r\n\r\nvar P3Linear = new RGBColorSpace({\r\n  id: 'p3-linear',\r\n  name: 'Linear P3',\r\n  white: 'D65',\r\n  toXYZ_M: toXYZ_M$4,\r\n  fromXYZ_M: fromXYZ_M$4,\r\n});\r\n\r\n// This is the linear-light version of sRGB\r\n// as used for example in SVG filters\r\n// or in Canvas\r\n\r\n// This matrix was calculated directly from the RGB and white chromaticities\r\n// when rounded to 8 decimal places, it agrees completely with the official matrix\r\n// see https://github.com/w3c/csswg-drafts/issues/5922\r\nconst toXYZ_M$3 = [\r\n  [0.41239079926595934, 0.357584339383878, 0.1804807884018343],\r\n  [0.21263900587151027, 0.715168678767756, 0.07219231536073371],\r\n  [0.01933081871559182, 0.11919477979462598, 0.9505321522496607],\r\n];\r\n\r\n// This matrix is the inverse of the above;\r\n// again it agrees with the official definition when rounded to 8 decimal places\r\nconst fromXYZ_M$3 = [\r\n  [3.2409699419045226, -1.537383177570094, -0.4986107602930034],\r\n  [-0.9692436362808796, 1.8759675015077202, 0.04155505740717559],\r\n  [0.05563007969699366, -0.20397695888897652, 1.0569715142428786],\r\n];\r\n\r\nvar sRGBLinear = new RGBColorSpace({\r\n  id: 'srgb-linear',\r\n  name: 'Linear sRGB',\r\n  white: 'D65',\r\n  toXYZ_M: toXYZ_M$3,\r\n  fromXYZ_M: fromXYZ_M$3,\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\n/* List of CSS color keywords\r\n * Note that this does not include currentColor, transparent,\r\n * or system colors\r\n */\r\n\r\n// To produce: Visit https://www.w3.org/TR/css-color-4/#named-colors\r\n// and run in the console:\r\n// copy($$(\"tr\", $(\".named-color-table tbody\")).map(tr => `\"${tr.cells[2].textContent.trim()}\": [${tr.cells[4].textContent.trim().split(/\\s+/).map(c => c === \"0\"? \"0\" : c === \"255\"? \"1\" : c + \" / 255\").join(\", \")}]`).join(\",\\n\"))\r\nvar KEYWORDS = {\r\n  aliceblue: [240 / 255, 248 / 255, 1],\r\n  antiquewhite: [250 / 255, 235 / 255, 215 / 255],\r\n  aqua: [0, 1, 1],\r\n  aquamarine: [127 / 255, 1, 212 / 255],\r\n  azure: [240 / 255, 1, 1],\r\n  beige: [245 / 255, 245 / 255, 220 / 255],\r\n  bisque: [1, 228 / 255, 196 / 255],\r\n  black: [0, 0, 0],\r\n  blanchedalmond: [1, 235 / 255, 205 / 255],\r\n  blue: [0, 0, 1],\r\n  blueviolet: [138 / 255, 43 / 255, 226 / 255],\r\n  brown: [165 / 255, 42 / 255, 42 / 255],\r\n  burlywood: [222 / 255, 184 / 255, 135 / 255],\r\n  cadetblue: [95 / 255, 158 / 255, 160 / 255],\r\n  chartreuse: [127 / 255, 1, 0],\r\n  chocolate: [210 / 255, 105 / 255, 30 / 255],\r\n  coral: [1, 127 / 255, 80 / 255],\r\n  cornflowerblue: [100 / 255, 149 / 255, 237 / 255],\r\n  cornsilk: [1, 248 / 255, 220 / 255],\r\n  crimson: [220 / 255, 20 / 255, 60 / 255],\r\n  cyan: [0, 1, 1],\r\n  darkblue: [0, 0, 139 / 255],\r\n  darkcyan: [0, 139 / 255, 139 / 255],\r\n  darkgoldenrod: [184 / 255, 134 / 255, 11 / 255],\r\n  darkgray: [169 / 255, 169 / 255, 169 / 255],\r\n  darkgreen: [0, 100 / 255, 0],\r\n  darkgrey: [169 / 255, 169 / 255, 169 / 255],\r\n  darkkhaki: [189 / 255, 183 / 255, 107 / 255],\r\n  darkmagenta: [139 / 255, 0, 139 / 255],\r\n  darkolivegreen: [85 / 255, 107 / 255, 47 / 255],\r\n  darkorange: [1, 140 / 255, 0],\r\n  darkorchid: [153 / 255, 50 / 255, 204 / 255],\r\n  darkred: [139 / 255, 0, 0],\r\n  darksalmon: [233 / 255, 150 / 255, 122 / 255],\r\n  darkseagreen: [143 / 255, 188 / 255, 143 / 255],\r\n  darkslateblue: [72 / 255, 61 / 255, 139 / 255],\r\n  darkslategray: [47 / 255, 79 / 255, 79 / 255],\r\n  darkslategrey: [47 / 255, 79 / 255, 79 / 255],\r\n  darkturquoise: [0, 206 / 255, 209 / 255],\r\n  darkviolet: [148 / 255, 0, 211 / 255],\r\n  deeppink: [1, 20 / 255, 147 / 255],\r\n  deepskyblue: [0, 191 / 255, 1],\r\n  dimgray: [105 / 255, 105 / 255, 105 / 255],\r\n  dimgrey: [105 / 255, 105 / 255, 105 / 255],\r\n  dodgerblue: [30 / 255, 144 / 255, 1],\r\n  firebrick: [178 / 255, 34 / 255, 34 / 255],\r\n  floralwhite: [1, 250 / 255, 240 / 255],\r\n  forestgreen: [34 / 255, 139 / 255, 34 / 255],\r\n  fuchsia: [1, 0, 1],\r\n  gainsboro: [220 / 255, 220 / 255, 220 / 255],\r\n  ghostwhite: [248 / 255, 248 / 255, 1],\r\n  gold: [1, 215 / 255, 0],\r\n  goldenrod: [218 / 255, 165 / 255, 32 / 255],\r\n  gray: [128 / 255, 128 / 255, 128 / 255],\r\n  green: [0, 128 / 255, 0],\r\n  greenyellow: [173 / 255, 1, 47 / 255],\r\n  grey: [128 / 255, 128 / 255, 128 / 255],\r\n  honeydew: [240 / 255, 1, 240 / 255],\r\n  hotpink: [1, 105 / 255, 180 / 255],\r\n  indianred: [205 / 255, 92 / 255, 92 / 255],\r\n  indigo: [75 / 255, 0, 130 / 255],\r\n  ivory: [1, 1, 240 / 255],\r\n  khaki: [240 / 255, 230 / 255, 140 / 255],\r\n  lavender: [230 / 255, 230 / 255, 250 / 255],\r\n  lavenderblush: [1, 240 / 255, 245 / 255],\r\n  lawngreen: [124 / 255, 252 / 255, 0],\r\n  lemonchiffon: [1, 250 / 255, 205 / 255],\r\n  lightblue: [173 / 255, 216 / 255, 230 / 255],\r\n  lightcoral: [240 / 255, 128 / 255, 128 / 255],\r\n  lightcyan: [224 / 255, 1, 1],\r\n  lightgoldenrodyellow: [250 / 255, 250 / 255, 210 / 255],\r\n  lightgray: [211 / 255, 211 / 255, 211 / 255],\r\n  lightgreen: [144 / 255, 238 / 255, 144 / 255],\r\n  lightgrey: [211 / 255, 211 / 255, 211 / 255],\r\n  lightpink: [1, 182 / 255, 193 / 255],\r\n  lightsalmon: [1, 160 / 255, 122 / 255],\r\n  lightseagreen: [32 / 255, 178 / 255, 170 / 255],\r\n  lightskyblue: [135 / 255, 206 / 255, 250 / 255],\r\n  lightslategray: [119 / 255, 136 / 255, 153 / 255],\r\n  lightslategrey: [119 / 255, 136 / 255, 153 / 255],\r\n  lightsteelblue: [176 / 255, 196 / 255, 222 / 255],\r\n  lightyellow: [1, 1, 224 / 255],\r\n  lime: [0, 1, 0],\r\n  limegreen: [50 / 255, 205 / 255, 50 / 255],\r\n  linen: [250 / 255, 240 / 255, 230 / 255],\r\n  magenta: [1, 0, 1],\r\n  maroon: [128 / 255, 0, 0],\r\n  mediumaquamarine: [102 / 255, 205 / 255, 170 / 255],\r\n  mediumblue: [0, 0, 205 / 255],\r\n  mediumorchid: [186 / 255, 85 / 255, 211 / 255],\r\n  mediumpurple: [147 / 255, 112 / 255, 219 / 255],\r\n  mediumseagreen: [60 / 255, 179 / 255, 113 / 255],\r\n  mediumslateblue: [123 / 255, 104 / 255, 238 / 255],\r\n  mediumspringgreen: [0, 250 / 255, 154 / 255],\r\n  mediumturquoise: [72 / 255, 209 / 255, 204 / 255],\r\n  mediumvioletred: [199 / 255, 21 / 255, 133 / 255],\r\n  midnightblue: [25 / 255, 25 / 255, 112 / 255],\r\n  mintcream: [245 / 255, 1, 250 / 255],\r\n  mistyrose: [1, 228 / 255, 225 / 255],\r\n  moccasin: [1, 228 / 255, 181 / 255],\r\n  navajowhite: [1, 222 / 255, 173 / 255],\r\n  navy: [0, 0, 128 / 255],\r\n  oldlace: [253 / 255, 245 / 255, 230 / 255],\r\n  olive: [128 / 255, 128 / 255, 0],\r\n  olivedrab: [107 / 255, 142 / 255, 35 / 255],\r\n  orange: [1, 165 / 255, 0],\r\n  orangered: [1, 69 / 255, 0],\r\n  orchid: [218 / 255, 112 / 255, 214 / 255],\r\n  palegoldenrod: [238 / 255, 232 / 255, 170 / 255],\r\n  palegreen: [152 / 255, 251 / 255, 152 / 255],\r\n  paleturquoise: [175 / 255, 238 / 255, 238 / 255],\r\n  palevioletred: [219 / 255, 112 / 255, 147 / 255],\r\n  papayawhip: [1, 239 / 255, 213 / 255],\r\n  peachpuff: [1, 218 / 255, 185 / 255],\r\n  peru: [205 / 255, 133 / 255, 63 / 255],\r\n  pink: [1, 192 / 255, 203 / 255],\r\n  plum: [221 / 255, 160 / 255, 221 / 255],\r\n  powderblue: [176 / 255, 224 / 255, 230 / 255],\r\n  purple: [128 / 255, 0, 128 / 255],\r\n  rebeccapurple: [102 / 255, 51 / 255, 153 / 255],\r\n  red: [1, 0, 0],\r\n  rosybrown: [188 / 255, 143 / 255, 143 / 255],\r\n  royalblue: [65 / 255, 105 / 255, 225 / 255],\r\n  saddlebrown: [139 / 255, 69 / 255, 19 / 255],\r\n  salmon: [250 / 255, 128 / 255, 114 / 255],\r\n  sandybrown: [244 / 255, 164 / 255, 96 / 255],\r\n  seagreen: [46 / 255, 139 / 255, 87 / 255],\r\n  seashell: [1, 245 / 255, 238 / 255],\r\n  sienna: [160 / 255, 82 / 255, 45 / 255],\r\n  silver: [192 / 255, 192 / 255, 192 / 255],\r\n  skyblue: [135 / 255, 206 / 255, 235 / 255],\r\n  slateblue: [106 / 255, 90 / 255, 205 / 255],\r\n  slategray: [112 / 255, 128 / 255, 144 / 255],\r\n  slategrey: [112 / 255, 128 / 255, 144 / 255],\r\n  snow: [1, 250 / 255, 250 / 255],\r\n  springgreen: [0, 1, 127 / 255],\r\n  steelblue: [70 / 255, 130 / 255, 180 / 255],\r\n  tan: [210 / 255, 180 / 255, 140 / 255],\r\n  teal: [0, 128 / 255, 128 / 255],\r\n  thistle: [216 / 255, 191 / 255, 216 / 255],\r\n  tomato: [1, 99 / 255, 71 / 255],\r\n  turquoise: [64 / 255, 224 / 255, 208 / 255],\r\n  violet: [238 / 255, 130 / 255, 238 / 255],\r\n  wheat: [245 / 255, 222 / 255, 179 / 255],\r\n  white: [1, 1, 1],\r\n  whitesmoke: [245 / 255, 245 / 255, 245 / 255],\r\n  yellow: [1, 1, 0],\r\n  yellowgreen: [154 / 255, 205 / 255, 50 / 255],\r\n};\r\n\r\nlet coordGrammar = Array(3).fill('<percentage> | <number>[0, 255]');\r\n\r\nvar sRGB = new RGBColorSpace({\r\n  id: 'srgb',\r\n  name: 'sRGB',\r\n  base: sRGBLinear,\r\n  fromBase: (rgb) => {\r\n    // convert an array of linear-light sRGB values in the range 0.0-1.0\r\n    // to gamma corrected form\r\n    // https://en.wikipedia.org/wiki/SRGB\r\n    return rgb.map((val) => {\r\n      let sign = val < 0 ? -1 : 1;\r\n      let abs = val * sign;\r\n\r\n      if (abs > 0.0031308) {\r\n        return sign * (1.055 * abs ** (1 / 2.4) - 0.055);\r\n      }\r\n\r\n      return 12.92 * val;\r\n    });\r\n  },\r\n  toBase: (rgb) => {\r\n    // convert an array of sRGB values in the range 0.0 - 1.0\r\n    // to linear light (un-companded) form.\r\n    // https://en.wikipedia.org/wiki/SRGB\r\n    return rgb.map((val) => {\r\n      let sign = val < 0 ? -1 : 1;\r\n      let abs = val * sign;\r\n\r\n      if (abs < 0.04045) {\r\n        return val / 12.92;\r\n      }\r\n\r\n      return sign * ((abs + 0.055) / 1.055) ** 2.4;\r\n    });\r\n  },\r\n  formats: {\r\n    rgb: {\r\n      coords: coordGrammar,\r\n    },\r\n    color: {\r\n      /* use defaults */\r\n    },\r\n    rgba: {\r\n      coords: coordGrammar,\r\n      commas: true,\r\n      lastAlpha: true,\r\n    },\r\n    hex: {\r\n      type: 'custom',\r\n      toGamut: true,\r\n      test: (str) => /^#([a-f0-9]{3,4}){1,2}$/i.test(str),\r\n      parse(str) {\r\n        if (str.length <= 5) {\r\n          // #rgb or #rgba, duplicate digits\r\n          str = str.replace(/[a-f0-9]/gi, '$&$&');\r\n        }\r\n\r\n        let rgba = [];\r\n        str.replace(/[a-f0-9]{2}/gi, (component) => {\r\n          rgba.push(parseInt(component, 16) / 255);\r\n        });\r\n\r\n        return {\r\n          spaceId: 'srgb',\r\n          coords: rgba.slice(0, 3),\r\n          alpha: rgba.slice(3)[0],\r\n        };\r\n      },\r\n      serialize: (\r\n        coords,\r\n        alpha,\r\n        {\r\n          collapse = true, // collapse to 3-4 digit hex when possible?\r\n        } = {}\r\n      ) => {\r\n        if (alpha < 1) {\r\n          coords.push(alpha);\r\n        }\r\n\r\n        coords = coords.map((c) => Math.round(c * 255));\r\n\r\n        let collapsible = collapse && coords.every((c) => c % 17 === 0);\r\n\r\n        let hex = coords\r\n          .map((c) => {\r\n            if (collapsible) {\r\n              return (c / 17).toString(16);\r\n            }\r\n\r\n            return c.toString(16).padStart(2, '0');\r\n          })\r\n          .join('');\r\n\r\n        return '#' + hex;\r\n      },\r\n    },\r\n    keyword: {\r\n      type: 'custom',\r\n      test: (str) => /^[a-z]+$/i.test(str),\r\n      parse(str) {\r\n        str = str.toLowerCase();\r\n        let ret = { spaceId: 'srgb', coords: null, alpha: 1 };\r\n\r\n        if (str === 'transparent') {\r\n          ret.coords = KEYWORDS.black;\r\n          ret.alpha = 0;\r\n        } else {\r\n          ret.coords = KEYWORDS[str];\r\n        }\r\n\r\n        if (ret.coords) {\r\n          return ret;\r\n        }\r\n      },\r\n    },\r\n  },\r\n});\r\n\r\nvar P3 = new RGBColorSpace({\r\n  id: 'p3',\r\n  name: 'P3',\r\n  base: P3Linear,\r\n  // Gamma encoding/decoding is the same as sRGB\r\n  fromBase: sRGB.fromBase,\r\n  toBase: sRGB.toBase,\r\n  formats: {\r\n    color: {\r\n      id: 'display-p3',\r\n    },\r\n  },\r\n});\r\n\r\n// Default space for CSS output. Code in Color.js makes this wider if there's a DOM available\r\ndefaults.display_space = sRGB;\r\n\r\nif (typeof CSS !== 'undefined' && CSS.supports) {\r\n  // Find widest supported color space for CSS\r\n  for (let space of [lab, REC2020, P3]) {\r\n    let coords = space.getMinCoords();\r\n    let color = { space, coords, alpha: 1 };\r\n    let str = serialize(color);\r\n\r\n    if (CSS.supports('color', str)) {\r\n      defaults.display_space = space;\r\n      break;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Returns a serialization of the color that can actually be displayed in the browser.\r\n * If the default serialization can be displayed, it is returned.\r\n * Otherwise, the color is converted to Lab, REC2020, or P3, whichever is the widest supported.\r\n * In Node.js, this is basically equivalent to `serialize()` but returns a `String` object instead.\r\n *\r\n * @export\r\n * @param {{space, coords} | Color | string} color\r\n * @param {*} [options={}] Options to be passed to serialize()\r\n * @param {ColorSpace | string} [options.space = defaults.display_space] Color space to use for serialization if default is not supported\r\n * @returns {String} String object containing the serialized color with a color property containing the converted color (or the original, if no conversion was necessary)\r\n */\r\nfunction display(color, { space = defaults.display_space, ...options } = {}) {\r\n  let ret = serialize(color, options);\r\n\r\n  if (typeof CSS === 'undefined' || CSS.supports('color', ret) || !defaults.display_space) {\r\n    ret = new String(ret);\r\n    ret.color = color;\r\n  } else {\r\n    // If we're here, what we were about to output is not supported\r\n    // Fall back to fallback space\r\n    let fallbackColor = to(color, space);\r\n    ret = new String(serialize(fallbackColor, options));\r\n    ret.color = fallbackColor;\r\n  }\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * Euclidean distance of colors in an arbitrary color space\r\n */\r\nfunction distance(color1, color2, space = 'lab') {\r\n  space = ColorSpace.get(space);\r\n\r\n  let coords1 = space.from(color1);\r\n  let coords2 = space.from(color2);\r\n\r\n  return Math.sqrt(\r\n    coords1.reduce((acc, c1, i) => {\r\n      let c2 = coords2[i];\r\n      if (isNaN(c1) || isNaN(c2)) {\r\n        return acc;\r\n      }\r\n\r\n      return acc + (c2 - c1) ** 2;\r\n    }, 0)\r\n  );\r\n}\r\n\r\nfunction equals(color1, color2) {\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  return (\r\n    color1.space === color2.space &&\r\n    color1.alpha === color2.alpha &&\r\n    color1.coords.every((c, i) => c === color2.coords[i])\r\n  );\r\n}\r\n\r\n/**\r\n * Relative luminance\r\n */\r\n\r\nfunction getLuminance(color) {\r\n  return get(color, [XYZ_D65, 'y']);\r\n}\r\n\r\nfunction setLuminance(color) {\r\n  set(color, [XYZ_D65, 'y'], value);\r\n}\r\n\r\nfunction register$2(Color) {\r\n  Object.defineProperty(Color.prototype, 'luminance', {\r\n    get() {\r\n      return getLuminance(this);\r\n    },\r\n    set(value) {\r\n      setLuminance(this);\r\n    },\r\n  });\r\n}\r\n\r\nvar luminance = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  getLuminance: getLuminance,\r\n  setLuminance: setLuminance,\r\n  register: register$2,\r\n});\r\n\r\n// WCAG 2.0 contrast https://www.w3.org/TR/WCAG20-TECHS/G18.html\r\n\r\nfunction contrastWCAG21(color1, color2) {\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  let Y1 = Math.max(getLuminance(color1), 0);\r\n  let Y2 = Math.max(getLuminance(color2), 0);\r\n\r\n  if (Y2 > Y1) {\r\n    [Y1, Y2] = [Y2, Y1];\r\n  }\r\n\r\n  return (Y1 + 0.05) / (Y2 + 0.05);\r\n}\r\n\r\n// APCA 0.0.98G\r\n\r\n// exponents\r\nconst normBG = 0.56;\r\nconst normTXT = 0.57;\r\nconst revTXT = 0.62;\r\nconst revBG = 0.65;\r\n\r\n// clamps\r\nconst blkThrs = 0.022;\r\nconst blkClmp = 1.414;\r\nconst loClip = 0.1;\r\nconst deltaYmin = 0.0005;\r\n\r\n// scalers\r\n// see https://github.com/w3c/silver/issues/645\r\nconst scaleBoW = 1.14;\r\nconst loBoWoffset = 0.027;\r\nconst scaleWoB = 1.14;\r\n\r\nfunction fclamp(Y) {\r\n  if (Y >= blkThrs) return Y;\r\n  return Y + (blkThrs - Y) ** blkClmp;\r\n}\r\n\r\nfunction linearize(val) {\r\n  let sign = val < 0 ? -1 : 1;\r\n  let abs = Math.abs(val);\r\n  return sign * Math.pow(abs, 2.4);\r\n}\r\n\r\n// Not symmetric, requires a foreground (text) color, and a background color\r\nfunction contrastAPCA(background, foreground) {\r\n  foreground = getColor(foreground);\r\n  background = getColor(background);\r\n\r\n  let S;\r\n  let C;\r\n  let Sapc;\r\n\r\n  // Myndex as-published, assumes sRGB inputs\r\n  let R, G, B;\r\n\r\n  foreground = to(foreground, 'srgb');\r\n  // Should these be clamped to in-gamut values?\r\n\r\n  // Calculates \"screen luminance\" with non-standard simple gamma EOTF\r\n  // weights should be from CSS Color 4, not the ones here which are via Myndex and copied from Lindbloom\r\n  [R, G, B] = foreground.coords;\r\n  let lumTxt = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.072175;\r\n\r\n  background = to(background, 'srgb');\r\n  [R, G, B] = background.coords;\r\n  let lumBg = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.072175;\r\n\r\n  // toe clamping of very dark values to account for flare\r\n  let Ytxt = fclamp(lumTxt);\r\n  let Ybg = fclamp(lumBg);\r\n\r\n  // are we \"Black on White\" (dark on light), or light on dark?\r\n  let BoW = Ybg > Ytxt;\r\n\r\n  // why is this a delta, when Y is not perceptually uniform?\r\n  // Answer: it is a noise gate, see\r\n  // https://github.com/LeaVerou/color.js/issues/208\r\n  if (Math.abs(Ybg - Ytxt) < deltaYmin) {\r\n    C = 0;\r\n  } else {\r\n    if (BoW) {\r\n      // dark text on light background\r\n      S = Ybg ** normBG - Ytxt ** normTXT;\r\n      C = S * scaleBoW;\r\n    } else {\r\n      // light text on dark background\r\n      S = Ybg ** revBG - Ytxt ** revTXT;\r\n      C = S * scaleWoB;\r\n    }\r\n  }\r\n  if (Math.abs(C) < loClip) {\r\n    Sapc = 0;\r\n  } else if (C > 0) {\r\n    // not clear whether Woffset is loBoWoffset or loWoBoffset\r\n    // but they have the same value\r\n    Sapc = C - loBoWoffset;\r\n  } else {\r\n    Sapc = C + loBoWoffset;\r\n  }\r\n\r\n  return Sapc * 100;\r\n}\r\n\r\n// Michelson  luminance contrast\r\n\r\nfunction contrastMichelson(color1, color2) {\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  let Y1 = Math.max(getLuminance(color1), 0);\r\n  let Y2 = Math.max(getLuminance(color2), 0);\r\n\r\n  if (Y2 > Y1) {\r\n    [Y1, Y2] = [Y2, Y1];\r\n  }\r\n\r\n  let denom = Y1 + Y2;\r\n  return denom === 0 ? 0 : (Y1 - Y2) / denom;\r\n}\r\n\r\n// Weber luminance contrast\r\n\r\n// the darkest sRGB color above black is #000001 and this produces\r\n// a plain Weber contrast of ~45647.\r\n// So, setting the divide-by-zero result at 50000 is a reasonable\r\n// max clamp for the plain Weber\r\nconst max = 50000;\r\n\r\nfunction contrastWeber(color1, color2) {\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  let Y1 = Math.max(getLuminance(color1), 0);\r\n  let Y2 = Math.max(getLuminance(color2), 0);\r\n\r\n  if (Y2 > Y1) {\r\n    [Y1, Y2] = [Y2, Y1];\r\n  }\r\n\r\n  return Y2 === 0 ? max : (Y1 - Y2) / Y2;\r\n}\r\n\r\n// CIE Lightness difference, as used by Google Material Design\r\n\r\nfunction contrastLstar(color1, color2) {\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  let L1 = get(color1, [lab, 'l']);\r\n  let L2 = get(color2, [lab, 'l']);\r\n\r\n  return Math.abs(L1 - L2);\r\n}\r\n\r\n// κ * ε  = 2^3 = 8\r\nconst ε$1 = 216 / 24389; // 6^3/29^3 == (24/116)^3\r\nconst ε3 = 24 / 116;\r\nconst κ = 24389 / 27; // 29^3/3^3\r\n\r\nlet white = WHITES.D65;\r\n\r\nvar lab_d65 = new ColorSpace({\r\n  id: 'lab-d65',\r\n  name: 'Lab D65',\r\n  coords: {\r\n    l: {\r\n      refRange: [0, 100],\r\n      name: 'L',\r\n    },\r\n    a: {\r\n      refRange: [-125, 125],\r\n    },\r\n    b: {\r\n      refRange: [-125, 125],\r\n    },\r\n  },\r\n\r\n  // Assuming XYZ is relative to D65, convert to CIE Lab\r\n  // from CIE standard, which now defines these as a rational fraction\r\n  white,\r\n\r\n  base: XYZ_D65,\r\n  // Convert D65-adapted XYZ to Lab\r\n  //  CIE 15.3:2004 section 8.2.1.1\r\n  fromBase(XYZ) {\r\n    // compute xyz, which is XYZ scaled relative to reference white\r\n    let xyz = XYZ.map((value, i) => value / white[i]);\r\n\r\n    // now compute f\r\n    let f = xyz.map((value) => (value > ε$1 ? Math.cbrt(value) : (κ * value + 16) / 116));\r\n\r\n    return [\r\n      116 * f[1] - 16, // L\r\n      500 * (f[0] - f[1]), // a\r\n      200 * (f[1] - f[2]), // b\r\n    ];\r\n  },\r\n  // Convert Lab to D65-adapted XYZ\r\n  // Same result as CIE 15.3:2004 Appendix D although the derivation is different\r\n  // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n  toBase(Lab) {\r\n    // compute f, starting with the luminance-related term\r\n    let f = [];\r\n    f[1] = (Lab[0] + 16) / 116;\r\n    f[0] = Lab[1] / 500 + f[1];\r\n    f[2] = f[1] - Lab[2] / 200;\r\n\r\n    // compute xyz\r\n    let xyz = [\r\n      f[0] > ε3 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ,\r\n      Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ,\r\n      f[2] > ε3 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ,\r\n    ];\r\n\r\n    // Compute XYZ by scaling xyz by reference white\r\n    return xyz.map((value, i) => value * white[i]);\r\n  },\r\n\r\n  formats: {\r\n    'lab-d65': {\r\n      coords: ['<percentage> | <number>', '<number>', '<number>'],\r\n    },\r\n  },\r\n});\r\n\r\n// Delta Phi Star perceptual lightness contrast\r\n\r\nconst phi = Math.pow(5, 0.5) * 0.5 + 0.5; // Math.phi can be used if Math.js\r\n\r\nfunction contrastDeltaPhi(color1, color2) {\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  let Lstr1 = get(color1, [lab_d65, 'l']);\r\n  let Lstr2 = get(color2, [lab_d65, 'l']);\r\n\r\n  let deltaPhiStar = Math.abs(Math.pow(Lstr1, phi) - Math.pow(Lstr2, phi));\r\n\r\n  let contrast = Math.pow(deltaPhiStar, 1 / phi) * Math.SQRT2 - 40;\r\n\r\n  return contrast < 7.5 ? 0.0 : contrast;\r\n}\r\n\r\nvar contrastMethods = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  contrastWCAG21: contrastWCAG21,\r\n  contrastAPCA: contrastAPCA,\r\n  contrastMichelson: contrastMichelson,\r\n  contrastWeber: contrastWeber,\r\n  contrastLstar: contrastLstar,\r\n  contrastDeltaPhi: contrastDeltaPhi,\r\n});\r\n\r\nfunction contrast(background, foreground, o = {}) {\r\n  if (isString(o)) {\r\n    o = { algorithm: o };\r\n  }\r\n\r\n  let { algorithm, ...rest } = o;\r\n\r\n  if (!algorithm) {\r\n    let algorithms = Object.keys(contrastMethods)\r\n      .map((a) => a.replace(/^contrast/, ''))\r\n      .join(', ');\r\n    throw new TypeError(`contrast() function needs a contrast algorithm. Please specify one of: ${algorithms}`);\r\n  }\r\n\r\n  background = getColor(background);\r\n  foreground = getColor(foreground);\r\n\r\n  for (let a in contrastMethods) {\r\n    if ('contrast' + algorithm.toLowerCase() === a.toLowerCase()) {\r\n      return contrastMethods[a](background, foreground, rest);\r\n    }\r\n  }\r\n\r\n  throw new TypeError(`Unknown contrast algorithm: ${algorithm}`);\r\n}\r\n\r\n// Chromaticity coordinates\r\nfunction uv(color) {\r\n  let [X, Y, Z] = getAll(color, XYZ_D65);\r\n  let denom = X + 15 * Y + 3 * Z;\r\n  return [(4 * X) / denom, (9 * Y) / denom];\r\n}\r\n\r\nfunction xy(color) {\r\n  let [X, Y, Z] = getAll(color, XYZ_D65);\r\n  let sum = X + Y + Z;\r\n  return [X / sum, Y / sum];\r\n}\r\n\r\nfunction register$1(Color) {\r\n  // no setters, as lightness information is lost\r\n  // when converting color to chromaticity\r\n  Object.defineProperty(Color.prototype, 'uv', {\r\n    get() {\r\n      return uv(this);\r\n    },\r\n  });\r\n\r\n  Object.defineProperty(Color.prototype, 'xy', {\r\n    get() {\r\n      return xy(this);\r\n    },\r\n  });\r\n}\r\n\r\nvar chromaticity = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  uv: uv,\r\n  xy: xy,\r\n  register: register$1,\r\n});\r\n\r\nfunction deltaE76(color, sample) {\r\n  return distance(color, sample, 'lab');\r\n}\r\n\r\n// More accurate color-difference formulae\r\n// than the simple 1976 Euclidean distance in Lab\r\n\r\n// CMC by the Color Measurement Committee of the\r\n// Bradford Society of Dyeists and Colorsts, 1994.\r\n// Uses LCH rather than Lab,\r\n// with different weights for L, C and H differences\r\n// A nice increase in accuracy for modest increase in complexity\r\nconst π = Math.PI;\r\nconst d2r = π / 180;\r\n\r\nfunction deltaECMC(color, sample, { l = 2, c = 1 } = {}) {\r\n  // Given this color as the reference\r\n  // and a sample,\r\n  // calculate deltaE CMC.\r\n\r\n  // This implementation assumes the parametric\r\n  // weighting factors l:c are 2:1\r\n  // which is typical for non-textile uses.\r\n\r\n  let [L1, a1, b1] = lab.from(color);\r\n  let [, C1, H1] = lch.from(lab, [L1, a1, b1]);\r\n  let [L2, a2, b2] = lab.from(sample);\r\n  let C2 = lch.from(lab, [L2, a2, b2])[1];\r\n\r\n  // let [L1, a1, b1] = color.getAll(lab);\r\n  // let C1 = color.get(\"lch.c\");\r\n  // let H1 = color.get(\"lch.h\");\r\n  // let [L2, a2, b2] = sample.getAll(lab);\r\n  // let C2 = sample.get(\"lch.c\");\r\n\r\n  // Check for negative Chroma,\r\n  // which might happen through\r\n  // direct user input of LCH values\r\n\r\n  if (C1 < 0) {\r\n    C1 = 0;\r\n  }\r\n  if (C2 < 0) {\r\n    C2 = 0;\r\n  }\r\n\r\n  // we don't need H2 as ΔH is calculated from Δa, Δb and ΔC\r\n\r\n  // Lightness and Chroma differences\r\n  // These are (color - sample), unlike deltaE2000\r\n  let ΔL = L1 - L2;\r\n  let ΔC = C1 - C2;\r\n\r\n  let Δa = a1 - a2;\r\n  let Δb = b1 - b2;\r\n\r\n  // weighted Hue difference, less for larger Chroma difference\r\n\r\n  let H2 = Δa ** 2 + Δb ** 2 - ΔC ** 2;\r\n  // due to roundoff error it is possible that, for zero a and b,\r\n  // ΔC > Δa + Δb is 0, resulting in attempting\r\n  // to take the square root of a negative number\r\n\r\n  // trying instead the equation from Industrial Color Physics\r\n  // By Georg A. Klein\r\n\r\n  // let ΔH = ((a1 * b2) - (a2 * b1)) / Math.sqrt(0.5 * ((C2 * C1) + (a2 * a1) + (b2 * b1)));\r\n  // This gives the same result to 12 decimal places\r\n  // except it sometimes NaNs when trying to root a negative number\r\n\r\n  // let ΔH = Math.sqrt(H2); we never actually use the root, it gets squared again!!\r\n\r\n  // positional corrections to the lack of uniformity of CIELAB\r\n  // These are all trying to make JND ellipsoids more like spheres\r\n\r\n  // SL Lightness crispening factor, depends entirely on L1 not L2\r\n  let SL = 0.511; // linear portion of the Y to L transfer function\r\n  if (L1 >= 16) {\r\n    // cubic portion\r\n    SL = (0.040975 * L1) / (1 + 0.01765 * L1);\r\n  }\r\n\r\n  // SC Chroma factor\r\n  let SC = (0.0638 * C1) / (1 + 0.0131 * C1) + 0.638;\r\n\r\n  // Cross term T for blue non-linearity\r\n  let T;\r\n  if (Number.isNaN(H1)) {\r\n    H1 = 0;\r\n  }\r\n\r\n  if (H1 >= 164 && H1 <= 345) {\r\n    T = 0.56 + Math.abs(0.2 * Math.cos((H1 + 168) * d2r));\r\n  } else {\r\n    T = 0.36 + Math.abs(0.4 * Math.cos((H1 + 35) * d2r));\r\n  }\r\n\r\n  // SH Hue factor also depends on C1,\r\n  let C4 = Math.pow(C1, 4);\r\n  let F = Math.sqrt(C4 / (C4 + 1900));\r\n  let SH = SC * (F * T + 1 - F);\r\n\r\n  // Finally calculate the deltaE, term by term as root sume of squares\r\n  let dE = (ΔL / (l * SL)) ** 2;\r\n  dE += (ΔC / (c * SC)) ** 2;\r\n  dE += H2 / SH ** 2;\r\n  // dE += (ΔH / SH)  ** 2;\r\n  return Math.sqrt(dE);\r\n  // Yay!!!\r\n}\r\n\r\nconst Yw$1 = 203; // absolute luminance of media white\r\n\r\nvar XYZ_Abs_D65 = new ColorSpace({\r\n  // Absolute CIE XYZ, with a D65 whitepoint,\r\n  // as used in most HDR colorspaces as a starting point.\r\n  // SDR spaces are converted per BT.2048\r\n  // so that diffuse, media white is 203 cd/m²\r\n  id: 'xyz-abs-d65',\r\n  name: 'Absolute XYZ D65',\r\n  coords: {\r\n    x: {\r\n      refRange: [0, 9504.7],\r\n      name: 'Xa',\r\n    },\r\n    y: {\r\n      refRange: [0, 10000],\r\n      name: 'Ya',\r\n    },\r\n    z: {\r\n      refRange: [0, 10888.3],\r\n      name: 'Za',\r\n    },\r\n  },\r\n\r\n  base: XYZ_D65,\r\n  fromBase(XYZ) {\r\n    // Make XYZ absolute, not relative to media white\r\n    // Maximum luminance in PQ is 10,000 cd/m²\r\n    // Relative XYZ has Y=1 for media white\r\n    return XYZ.map((v) => Math.max(v * Yw$1, 0));\r\n  },\r\n  toBase(AbsXYZ) {\r\n    // Convert to media-white relative XYZ\r\n    return AbsXYZ.map((v) => Math.max(v / Yw$1, 0));\r\n  },\r\n});\r\n\r\nconst b$1 = 1.15;\r\nconst g = 0.66;\r\nconst n$1 = 2610 / 2 ** 14;\r\nconst ninv$1 = 2 ** 14 / 2610;\r\nconst c1$2 = 3424 / 2 ** 12;\r\nconst c2$2 = 2413 / 2 ** 7;\r\nconst c3$2 = 2392 / 2 ** 7;\r\nconst p = (1.7 * 2523) / 2 ** 5;\r\nconst pinv = 2 ** 5 / (1.7 * 2523);\r\nconst d = -0.56;\r\nconst d0 = 1.6295499532821566e-11;\r\n\r\nconst XYZtoCone_M = [\r\n  [0.41478972, 0.579999, 0.014648],\r\n  [-0.20151, 1.120649, 0.0531008],\r\n  [-0.0166008, 0.2648, 0.6684799],\r\n];\r\n// XYZtoCone_M inverted\r\nconst ConetoXYZ_M = [\r\n  [1.9242264357876067, -1.0047923125953657, 0.037651404030618],\r\n  [0.35031676209499907, 0.7264811939316552, -0.06538442294808501],\r\n  [-0.09098281098284752, -0.3127282905230739, 1.5227665613052603],\r\n];\r\nconst ConetoIab_M = [\r\n  [0.5, 0.5, 0],\r\n  [3.524, -4.066708, 0.542708],\r\n  [0.199076, 1.096799, -1.295875],\r\n];\r\n// ConetoIab_M inverted\r\nconst IabtoCone_M = [\r\n  [1, 0.1386050432715393, 0.05804731615611886],\r\n  [0.9999999999999999, -0.1386050432715393, -0.05804731615611886],\r\n  [0.9999999999999998, -0.09601924202631895, -0.8118918960560388],\r\n];\r\n\r\nvar Jzazbz = new ColorSpace({\r\n  id: 'jzazbz',\r\n  name: 'Jzazbz',\r\n  coords: {\r\n    jz: {\r\n      refRange: [0, 1],\r\n      name: 'Jz',\r\n    },\r\n    az: {\r\n      refRange: [-0.5, 0.5],\r\n    },\r\n    bz: {\r\n      refRange: [-0.5, 0.5],\r\n    },\r\n  },\r\n\r\n  base: XYZ_Abs_D65,\r\n  fromBase(XYZ) {\r\n    // First make XYZ absolute, not relative to media white\r\n    // Maximum luminance in PQ is 10,000 cd/m²\r\n    // Relative XYZ has Y=1 for media white\r\n    // BT.2048 says media white Y=203 at PQ 58\r\n\r\n    let [Xa, Ya, Za] = XYZ;\r\n\r\n    // modify X and Y\r\n    let Xm = b$1 * Xa - (b$1 - 1) * Za;\r\n    let Ym = g * Ya - (g - 1) * Xa;\r\n\r\n    // move to LMS cone domain\r\n    let LMS = multiplyMatrices(XYZtoCone_M, [Xm, Ym, Za]);\r\n\r\n    // PQ-encode LMS\r\n    let PQLMS = LMS.map(function (val) {\r\n      let num = c1$2 + c2$2 * (val / 10000) ** n$1;\r\n      let denom = 1 + c3$2 * (val / 10000) ** n$1;\r\n\r\n      return (num / denom) ** p;\r\n    });\r\n\r\n    // almost there, calculate Iz az bz\r\n    let [Iz, az, bz] = multiplyMatrices(ConetoIab_M, PQLMS);\r\n\r\n    let Jz = ((1 + d) * Iz) / (1 + d * Iz) - d0;\r\n    return [Jz, az, bz];\r\n  },\r\n  toBase(Jzazbz) {\r\n    let [Jz, az, bz] = Jzazbz;\r\n    let Iz = (Jz + d0) / (1 + d - d * (Jz + d0));\r\n\r\n    // bring into LMS cone domain\r\n    let PQLMS = multiplyMatrices(IabtoCone_M, [Iz, az, bz]);\r\n\r\n    // convert from PQ-coded to linear-light\r\n    let LMS = PQLMS.map(function (val) {\r\n      let num = c1$2 - val ** pinv;\r\n      let denom = c3$2 * val ** pinv - c2$2;\r\n      let x = 10000 * (num / denom) ** ninv$1;\r\n\r\n      return x; // luminance relative to diffuse white, [0, 70 or so].\r\n    });\r\n\r\n    // modified abs XYZ\r\n    let [Xm, Ym, Za] = multiplyMatrices(ConetoXYZ_M, LMS);\r\n\r\n    // restore standard D50 relative XYZ, relative to media white\r\n    let Xa = (Xm + (b$1 - 1) * Za) / b$1;\r\n    let Ya = (Ym + (g - 1) * Xa) / g;\r\n    return [Xa, Ya, Za];\r\n  },\r\n\r\n  formats: {\r\n    // https://drafts.csswg.org/css-color-hdr/#Jzazbz\r\n    color: {},\r\n  },\r\n});\r\n\r\nvar jzczhz = new ColorSpace({\r\n  id: 'jzczhz',\r\n  name: 'JzCzHz',\r\n  coords: {\r\n    jz: {\r\n      refRange: [0, 1],\r\n      name: 'Jz',\r\n    },\r\n    cz: {\r\n      refRange: [0, 1],\r\n      name: 'Chroma',\r\n    },\r\n    hz: {\r\n      refRange: [0, 360],\r\n      type: 'angle',\r\n      name: 'Hue',\r\n    },\r\n  },\r\n\r\n  base: Jzazbz,\r\n  fromBase(jzazbz) {\r\n    // Convert to polar form\r\n    let [Jz, az, bz] = jzazbz;\r\n    let hue;\r\n    const ε = 0.0002; // chromatic components much smaller than a,b\r\n\r\n    if (Math.abs(az) < ε && Math.abs(bz) < ε) {\r\n      hue = NaN;\r\n    } else {\r\n      hue = (Math.atan2(bz, az) * 180) / Math.PI;\r\n    }\r\n\r\n    return [\r\n      Jz, // Jz is still Jz\r\n      Math.sqrt(az ** 2 + bz ** 2), // Chroma\r\n      constrain(hue), // Hue, in degrees [0 to 360)\r\n    ];\r\n  },\r\n  toBase(jzczhz) {\r\n    // Convert from polar form\r\n    // debugger;\r\n    return [\r\n      jzczhz[0], // Jz is still Jz\r\n      jzczhz[1] * Math.cos((jzczhz[2] * Math.PI) / 180), // az\r\n      jzczhz[1] * Math.sin((jzczhz[2] * Math.PI) / 180), // bz\r\n    ];\r\n  },\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\n// More accurate color-difference formulae\r\n// than the simple 1976 Euclidean distance in Lab\r\n\r\n// Uses JzCzHz, which has improved perceptual uniformity\r\n// and thus a simple Euclidean root-sum of ΔL² ΔC² ΔH²\r\n// gives good results.\r\n\r\nfunction deltaEJz(color, sample) {\r\n  // Given this color as the reference\r\n  // and a sample,\r\n  // calculate deltaE in JzCzHz.\r\n  let [Jz1, Cz1, Hz1] = jzczhz.from(color);\r\n  let [Jz2, Cz2, Hz2] = jzczhz.from(sample);\r\n\r\n  // Lightness and Chroma differences\r\n  // sign does not matter as they are squared.\r\n  let ΔJ = Jz1 - Jz2;\r\n  let ΔC = Cz1 - Cz2;\r\n\r\n  // length of chord for ΔH\r\n  if (Number.isNaN(Hz1) && Number.isNaN(Hz2)) {\r\n    // both undefined hues\r\n    Hz1 = 0;\r\n    Hz2 = 0;\r\n  } else if (Number.isNaN(Hz1)) {\r\n    // one undefined, set to the defined hue\r\n    Hz1 = Hz2;\r\n  } else if (Number.isNaN(Hz2)) {\r\n    Hz2 = Hz1;\r\n  }\r\n\r\n  let Δh = Hz1 - Hz2;\r\n  let ΔH = 2 * Math.sqrt(Cz1 * Cz2) * Math.sin((Δh / 2) * (Math.PI / 180));\r\n\r\n  return Math.sqrt(ΔJ ** 2 + ΔC ** 2 + ΔH ** 2);\r\n}\r\n\r\nconst c1$1 = 3424 / 4096;\r\nconst c2$1 = 2413 / 128;\r\nconst c3$1 = 2392 / 128;\r\nconst m1 = 2610 / 16384;\r\nconst m2 = 2523 / 32;\r\nconst im1 = 16384 / 2610;\r\nconst im2 = 32 / 2523;\r\n\r\n// The matrix below includes the 4% crosstalk components\r\n// and is from the Dolby \"What is ICtCp\" paper\"\r\nconst XYZtoLMS_M$1 = [\r\n  [0.3592, 0.6976, -0.0358],\r\n  [-0.1922, 1.1004, 0.0755],\r\n  [0.007, 0.0749, 0.8434],\r\n];\r\n// linear-light Rec.2020 to LMS, again with crosstalk\r\n// rational terms from Jan Fröhlich,\r\n// Encoding High Dynamic Range andWide Color Gamut Imagery, p.97\r\n// and ITU-R BT.2124-0 p.2\r\n/*\r\nconst Rec2020toLMS_M = [\r\n\t[ 1688 / 4096,  2146 / 4096,   262 / 4096 ],\r\n\t[  683 / 4096,  2951 / 4096,   462 / 4096 ],\r\n\t[   99 / 4096,   309 / 4096,  3688 / 4096 ]\r\n];\r\n*/\r\n// this includes the Ebner LMS coefficients,\r\n// the rotation, and the scaling to [-0.5,0.5] range\r\n// rational terms from Fröhlich p.97\r\n// and ITU-R BT.2124-0 pp.2-3\r\nconst LMStoIPT_M = [\r\n  [2048 / 4096, 2048 / 4096, 0],\r\n  [6610 / 4096, -13613 / 4096, 7003 / 4096],\r\n  [17933 / 4096, -17390 / 4096, -543 / 4096],\r\n];\r\n\r\n// inverted matrices, calculated from the above\r\nconst IPTtoLMS_M = [\r\n  [0.99998889656284013833, 0.00860505014728705821, 0.1110343715986164786],\r\n  [1.0000111034371598616, -0.00860505014728705821, -0.1110343715986164786],\r\n  [1.000032063391005412, 0.56004913547279000113, -0.32063391005412026469],\r\n];\r\n/*\r\nconst LMStoRec2020_M = [\r\n\t[ 3.4375568932814012112,   -2.5072112125095058195,   0.069654319228104608382],\r\n\t[-0.79142868665644156125,   1.9838372198740089874,  -0.19240853321756742626 ],\r\n\t[-0.025646662911506476363, -0.099240248643945566751, 1.1248869115554520431  ]\r\n];\r\n*/\r\nconst LMStoXYZ_M$1 = [\r\n  [2.0701800566956135096, -1.3264568761030210255, 0.20661600684785517081],\r\n  [0.36498825003265747974, 0.68046736285223514102, -0.045421753075853231409],\r\n  [-0.049595542238932107896, -0.049421161186757487412, 1.1879959417328034394],\r\n];\r\n\r\n// Only the PQ form of ICtCp is implemented here. There is also an HLG form.\r\n// from Dolby, \"WHAT IS ICTCP?\"\r\n// https://professional.dolby.com/siteassets/pdfs/ictcp_dolbywhitepaper_v071.pdf\r\n// and\r\n// Dolby, \"Perceptual Color Volume\r\n// Measuring the Distinguishable Colors of HDR and WCG Displays\"\r\n// https://professional.dolby.com/siteassets/pdfs/dolby-vision-measuring-perceptual-color-volume-v7.1.pdf\r\nvar ictcp = new ColorSpace({\r\n  id: 'ictcp',\r\n  name: 'ICTCP',\r\n  // From BT.2100-2 page 7:\r\n  // During production, signal values are expected to exceed the\r\n  // range E′ = [0.0 : 1.0]. This provides processing headroom and avoids\r\n  // signal degradation during cascaded processing. Such values of E′,\r\n  // below 0.0 or exceeding 1.0, should not be clipped during production\r\n  // and exchange.\r\n  // Values below 0.0 should not be clipped in reference displays (even\r\n  // though they represent “negative” light) to allow the black level of\r\n  // the signal (LB) to be properly set using test signals known as “PLUGE”\r\n  coords: {\r\n    i: {\r\n      refRange: [0, 1], // Constant luminance,\r\n      name: 'I',\r\n    },\r\n    ct: {\r\n      refRange: [-0.5, 0.5], // Full BT.2020 gamut in range [-0.5, 0.5]\r\n      name: 'CT',\r\n    },\r\n    cp: {\r\n      refRange: [-0.5, 0.5],\r\n      name: 'CP',\r\n    },\r\n  },\r\n\r\n  base: XYZ_Abs_D65,\r\n  fromBase(XYZ) {\r\n    // move to LMS cone domain\r\n    let LMS = multiplyMatrices(XYZtoLMS_M$1, XYZ);\r\n\r\n    return LMStoICtCp(LMS);\r\n  },\r\n  toBase(ICtCp) {\r\n    let LMS = ICtCptoLMS(ICtCp);\r\n\r\n    return multiplyMatrices(LMStoXYZ_M$1, LMS);\r\n  },\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\nfunction LMStoICtCp(LMS) {\r\n  // apply the PQ EOTF\r\n  // we can't ever be dividing by zero because of the \"1 +\" in the denominator\r\n  let PQLMS = LMS.map(function (val) {\r\n    let num = c1$1 + c2$1 * (val / 10000) ** m1;\r\n    let denom = 1 + c3$1 * (val / 10000) ** m1;\r\n\r\n    return (num / denom) ** m2;\r\n  });\r\n\r\n  // LMS to IPT, with rotation for Y'C'bC'r compatibility\r\n  return multiplyMatrices(LMStoIPT_M, PQLMS);\r\n}\r\n\r\nfunction ICtCptoLMS(ICtCp) {\r\n  let PQLMS = multiplyMatrices(IPTtoLMS_M, ICtCp);\r\n\r\n  // From BT.2124-0 Annex 2 Conversion 3\r\n  let LMS = PQLMS.map(function (val) {\r\n    let num = Math.max(val ** im2 - c1$1, 0);\r\n    let denom = c2$1 - c3$1 * val ** im2;\r\n    return 10000 * (num / denom) ** im1;\r\n  });\r\n\r\n  return LMS;\r\n}\r\n\r\n// Delta E in ICtCp space,\r\n// which the ITU calls Delta E ITP, which is shorter\r\n// formulae from ITU Rec. ITU-R BT.2124-0\r\n\r\nfunction deltaEITP(color, sample) {\r\n  // Given this color as the reference\r\n  // and a sample,\r\n  // calculate deltaE in ICtCp\r\n  // which is simply the Euclidean distance\r\n\r\n  let [I1, T1, P1] = ictcp.from(color);\r\n  let [I2, T2, P2] = ictcp.from(sample);\r\n\r\n  // the 0.25 factor is to undo the encoding scaling in Ct\r\n  // the 720 is so that 1 deltaE = 1 JND\r\n  // per  ITU-R BT.2124-0 p.3\r\n\r\n  return 720 * Math.sqrt((I1 - I2) ** 2 + 0.25 * (T1 - T2) ** 2 + (P1 - P2) ** 2);\r\n}\r\n\r\n// Recalculated for consistent reference white\r\n// see https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484\r\nconst XYZtoLMS_M = [\r\n  [0.8190224432164319, 0.3619062562801221, -0.12887378261216414],\r\n  [0.0329836671980271, 0.9292868468965546, 0.03614466816999844],\r\n  [0.048177199566046255, 0.26423952494422764, 0.6335478258136937],\r\n];\r\n// inverse of XYZtoLMS_M\r\nconst LMStoXYZ_M = [\r\n  [1.2268798733741557, -0.5578149965554813, 0.28139105017721583],\r\n  [-0.04057576262431372, 1.1122868293970594, -0.07171106666151701],\r\n  [-0.07637294974672142, -0.4214933239627914, 1.5869240244272418],\r\n];\r\nconst LMStoLab_M = [\r\n  [0.2104542553, 0.793617785, -0.0040720468],\r\n  [1.9779984951, -2.428592205, 0.4505937099],\r\n  [0.0259040371, 0.7827717662, -0.808675766],\r\n];\r\n// LMStoIab_M inverted\r\nconst LabtoLMS_M = [\r\n  [0.99999999845051981432, 0.39633779217376785678, 0.21580375806075880339],\r\n  [1.0000000088817607767, -0.1055613423236563494, -0.063854174771705903402],\r\n  [1.0000000546724109177, -0.089484182094965759684, -1.2914855378640917399],\r\n];\r\n\r\nvar OKLab = new ColorSpace({\r\n  id: 'oklab',\r\n  name: 'OKLab',\r\n  coords: {\r\n    l: {\r\n      refRange: [0, 1],\r\n      name: 'L',\r\n    },\r\n    a: {\r\n      refRange: [-0.4, 0.4],\r\n    },\r\n    b: {\r\n      refRange: [-0.4, 0.4],\r\n    },\r\n  },\r\n\r\n  // Note that XYZ is relative to D65\r\n  white: 'D65',\r\n  base: XYZ_D65,\r\n  fromBase(XYZ) {\r\n    // move to LMS cone domain\r\n    let LMS = multiplyMatrices(XYZtoLMS_M, XYZ);\r\n\r\n    // non-linearity\r\n    let LMSg = LMS.map((val) => Math.cbrt(val));\r\n\r\n    return multiplyMatrices(LMStoLab_M, LMSg);\r\n  },\r\n  toBase(OKLab) {\r\n    // move to LMS cone domain\r\n    let LMSg = multiplyMatrices(LabtoLMS_M, OKLab);\r\n\r\n    // restore linearity\r\n    let LMS = LMSg.map((val) => val ** 3);\r\n\r\n    return multiplyMatrices(LMStoXYZ_M, LMS);\r\n  },\r\n\r\n  formats: {\r\n    oklab: {\r\n      coords: ['<percentage>', '<number>', '<number>'],\r\n    },\r\n  },\r\n});\r\n\r\n// More accurate color-difference formulae\r\n\r\nfunction deltaEOK(color, sample) {\r\n  // Given this color as the reference\r\n  // and a sample,\r\n  // calculate deltaEOK, term by term as root sum of squares\r\n  let [L1, a1, b1] = OKLab.from(color);\r\n  let [L2, a2, b2] = OKLab.from(sample);\r\n  let ΔL = L1 - L2;\r\n  let Δa = a1 - a2;\r\n  let Δb = b1 - b2;\r\n  return Math.sqrt(ΔL ** 2 + Δa ** 2 + Δb ** 2);\r\n}\r\n\r\nvar deltaEMethods = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  deltaE76: deltaE76,\r\n  deltaECMC: deltaECMC,\r\n  deltaE2000: deltaE2000,\r\n  deltaEJz: deltaEJz,\r\n  deltaEITP: deltaEITP,\r\n  deltaEOK: deltaEOK,\r\n});\r\n\r\nfunction deltaE(c1, c2, o = {}) {\r\n  if (isString(o)) {\r\n    o = { method: o };\r\n  }\r\n\r\n  let { method = defaults.deltaE, ...rest } = o;\r\n\r\n  c1 = getColor(c1);\r\n  c2 = getColor(c2);\r\n\r\n  for (let m in deltaEMethods) {\r\n    if ('deltae' + method.toLowerCase() === m.toLowerCase()) {\r\n      return deltaEMethods[m](c1, c2, rest);\r\n    }\r\n  }\r\n\r\n  throw new TypeError(`Unknown deltaE method: ${method}`);\r\n}\r\n\r\nvar deltaE$1 = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  default: deltaE,\r\n});\r\n\r\nfunction lighten(color, amount = 0.25) {\r\n  let space = ColorSpace.get('oklch', 'lch');\r\n  let lightness = [space, 'l'];\r\n  return set$1(color, lightness, (l) => l * (1 + amount));\r\n}\r\n\r\nfunction darken(color, amount = 0.25) {\r\n  let space = ColorSpace.get('oklch', 'lch');\r\n  let lightness = [space, 'l'];\r\n  return set$1(color, lightness, (l) => l * (1 - amount));\r\n}\r\n\r\nvar variations = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  lighten: lighten,\r\n  darken: darken,\r\n});\r\n\r\n/**\r\n * Functions related to color interpolation\r\n */\r\n\r\n/**\r\n * Return an intermediate color between two colors\r\n * Signatures: mix(c1, c2, p, options)\r\n *             mix(c1, c2, options)\r\n *             mix(color)\r\n * @param {Color | string} c1 The first color\r\n * @param {Color | string} [c2] The second color\r\n * @param {number} [p=.5] A 0-1 percentage where 0 is c1 and 1 is c2\r\n * @param {Object} [o={}]\r\n * @return {Color}\r\n */\r\nfunction mix(c1, c2, p = 0.5, o = {}) {\r\n  [c1, c2] = [getColor(c1), getColor(c2)];\r\n\r\n  if (type(p) === 'object') {\r\n    [p, o] = [0.5, p];\r\n  }\r\n\r\n  let { space, outputSpace } = o;\r\n\r\n  let r = range(c1, c2, { space, outputSpace });\r\n  return r(p);\r\n}\r\n\r\n/**\r\n *\r\n * @param {Color | string | Function} c1 The first color or a range\r\n * @param {Color | string} [c2] The second color if c1 is not a range\r\n * @param {Object} [options={}]\r\n * @return {Color[]}\r\n */\r\nfunction steps(c1, c2, options = {}) {\r\n  let colorRange;\r\n\r\n  if (isRange(c1)) {\r\n    // Tweaking existing range\r\n    [colorRange, options] = [c1, c2];\r\n    [c1, c2] = colorRange.rangeArgs.colors;\r\n  }\r\n\r\n  let { maxDeltaE, deltaEMethod, steps = 2, maxSteps = 1000, ...rangeOptions } = options;\r\n\r\n  if (!colorRange) {\r\n    [c1, c2] = [getColor(c1), getColor(c2)];\r\n    colorRange = range(c1, c2, rangeOptions);\r\n  }\r\n\r\n  let totalDelta = deltaE(c1, c2);\r\n  let actualSteps = maxDeltaE > 0 ? Math.max(steps, Math.ceil(totalDelta / maxDeltaE) + 1) : steps;\r\n  let ret = [];\r\n\r\n  if (maxSteps !== undefined) {\r\n    actualSteps = Math.min(actualSteps, maxSteps);\r\n  }\r\n\r\n  if (actualSteps === 1) {\r\n    ret = [{ p: 0.5, color: colorRange(0.5) }];\r\n  } else {\r\n    let step = 1 / (actualSteps - 1);\r\n    ret = Array.from({ length: actualSteps }, (_, i) => {\r\n      let p = i * step;\r\n      return { p, color: colorRange(p) };\r\n    });\r\n  }\r\n\r\n  if (maxDeltaE > 0) {\r\n    // Iterate over all stops and find max deltaE\r\n    let maxDelta = ret.reduce((acc, cur, i) => {\r\n      if (i === 0) {\r\n        return 0;\r\n      }\r\n\r\n      let ΔΕ = deltaE(cur.color, ret[i - 1].color, deltaEMethod);\r\n      return Math.max(acc, ΔΕ);\r\n    }, 0);\r\n\r\n    while (maxDelta > maxDeltaE) {\r\n      // Insert intermediate stops and measure maxDelta again\r\n      // We need to do this for all pairs, otherwise the midpoint shifts\r\n      maxDelta = 0;\r\n\r\n      for (let i = 1; i < ret.length && ret.length < maxSteps; i++) {\r\n        let prev = ret[i - 1];\r\n        let cur = ret[i];\r\n\r\n        let p = (cur.p + prev.p) / 2;\r\n        let color = colorRange(p);\r\n        maxDelta = Math.max(maxDelta, deltaE(color, prev.color), deltaE(color, cur.color));\r\n        ret.splice(i, 0, { p, color: colorRange(p) });\r\n        i++;\r\n      }\r\n    }\r\n  }\r\n\r\n  ret = ret.map((a) => a.color);\r\n\r\n  return ret;\r\n}\r\n/**\r\n * Interpolate to color2 and return a function that takes a 0-1 percentage\r\n * @param {Color | string | Function} color1 The first color or an existing range\r\n * @param {Color | string} [color2] If color1 is a color, this is the second color\r\n * @param {Object} [options={}]\r\n * @returns {Function} A function that takes a 0-1 percentage and returns a color\r\n */\r\nfunction range(color1, color2, options = {}) {\r\n  if (isRange(color1)) {\r\n    // Tweaking existing range\r\n    let [r, options] = [color1, color2];\r\n\r\n    return range(...r.rangeArgs.colors, { ...r.rangeArgs.options, ...options });\r\n  }\r\n\r\n  let { space, outputSpace, progression, premultiplied } = options;\r\n\r\n  color1 = getColor(color1);\r\n  color2 = getColor(color2);\r\n\r\n  // Make sure we're working on copies of these colors\r\n  color1 = clone(color1);\r\n  color2 = clone(color2);\r\n\r\n  let rangeArgs = { colors: [color1, color2], options };\r\n\r\n  if (space) {\r\n    space = ColorSpace.get(space);\r\n  } else {\r\n    space = ColorSpace.registry[defaults.interpolationSpace] || color1.space;\r\n  }\r\n\r\n  outputSpace = outputSpace ? ColorSpace.get(outputSpace) : space;\r\n\r\n  color1 = to(color1, space);\r\n  color2 = to(color2, space);\r\n\r\n  // Gamut map to avoid areas of flat color\r\n  color1 = toGamut(color1);\r\n  color2 = toGamut(color2);\r\n\r\n  // Handle hue interpolation\r\n  // See https://github.com/w3c/csswg-drafts/issues/4735#issuecomment-635741840\r\n  if (space.coords.h && space.coords.h.type === 'angle') {\r\n    let arc = (options.hue = options.hue || 'shorter');\r\n\r\n    let hue = [space, 'h'];\r\n    let [θ1, θ2] = [get(color1, hue), get(color2, hue)];\r\n    [θ1, θ2] = adjust(arc, [θ1, θ2]);\r\n    set$1(color1, hue, θ1);\r\n    set$1(color2, hue, θ2);\r\n  }\r\n\r\n  if (premultiplied) {\r\n    // not coping with polar spaces yet\r\n    color1.coords = color1.coords.map((c) => c * color1.alpha);\r\n    color2.coords = color2.coords.map((c) => c * color2.alpha);\r\n  }\r\n\r\n  return Object.assign(\r\n    (p) => {\r\n      p = progression ? progression(p) : p;\r\n      let coords = color1.coords.map((start, i) => {\r\n        let end = color2.coords[i];\r\n        return interpolate(start, end, p);\r\n      });\r\n\r\n      let alpha = interpolate(color1.alpha, color2.alpha, p);\r\n      let ret = { space, coords, alpha };\r\n\r\n      if (premultiplied) {\r\n        // undo premultiplication\r\n        ret.coords = ret.coords.map((c) => c / alpha);\r\n      }\r\n\r\n      if (outputSpace !== space) {\r\n        ret = to(ret, outputSpace);\r\n      }\r\n\r\n      return ret;\r\n    },\r\n    {\r\n      rangeArgs,\r\n    }\r\n  );\r\n}\r\nfunction isRange(val) {\r\n  return type(val) === 'function' && !!val.rangeArgs;\r\n}\r\ndefaults.interpolationSpace = 'lab';\r\n\r\nfunction register(Color) {\r\n  Color.defineFunction('mix', mix, { returns: 'color' });\r\n  Color.defineFunction('range', range, { returns: 'function<color>' });\r\n  Color.defineFunction('steps', steps, { returns: 'array<color>' });\r\n}\r\n\r\nvar interpolation = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  mix: mix,\r\n  steps: steps,\r\n  range: range,\r\n  isRange: isRange,\r\n  register: register,\r\n});\r\n\r\nvar HSL = new ColorSpace({\r\n  id: 'hsl',\r\n  name: 'HSL',\r\n  coords: {\r\n    h: {\r\n      refRange: [0, 360],\r\n      type: 'angle',\r\n      name: 'Hue',\r\n    },\r\n    s: {\r\n      range: [0, 100],\r\n      name: 'Saturation',\r\n    },\r\n    l: {\r\n      range: [0, 100],\r\n      name: 'Lightness',\r\n    },\r\n  },\r\n\r\n  base: sRGB,\r\n\r\n  // Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB\r\n  fromBase: (rgb) => {\r\n    let max = Math.max(...rgb);\r\n    let min = Math.min(...rgb);\r\n    let [r, g, b] = rgb;\r\n    let [h, s, l] = [NaN, 0, (min + max) / 2];\r\n    let d = max - min;\r\n\r\n    if (d !== 0) {\r\n      s = l === 0 || l === 1 ? 0 : (max - l) / Math.min(l, 1 - l);\r\n\r\n      switch (max) {\r\n        case r:\r\n          h = (g - b) / d + (g < b ? 6 : 0);\r\n          break;\r\n        case g:\r\n          h = (b - r) / d + 2;\r\n          break;\r\n        case b:\r\n          h = (r - g) / d + 4;\r\n      }\r\n\r\n      h = h * 60;\r\n    }\r\n\r\n    return [h, s * 100, l * 100];\r\n  },\r\n\r\n  // Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative\r\n  toBase: (hsl) => {\r\n    let [h, s, l] = hsl;\r\n    h = h % 360;\r\n\r\n    if (h < 0) {\r\n      h += 360;\r\n    }\r\n\r\n    s /= 100;\r\n    l /= 100;\r\n\r\n    function f(n) {\r\n      let k = (n + h / 30) % 12;\r\n      let a = s * Math.min(l, 1 - l);\r\n      return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\r\n    }\r\n\r\n    return [f(0), f(8), f(4)];\r\n  },\r\n\r\n  formats: {\r\n    hsl: {\r\n      toGamut: true,\r\n      coords: ['<number> | <angle>', '<percentage>', '<percentage>'],\r\n    },\r\n    hsla: {\r\n      coords: ['<number> | <angle>', '<percentage>', '<percentage>'],\r\n      commas: true,\r\n      lastAlpha: true,\r\n    },\r\n  },\r\n});\r\n\r\n// The Hue, Whiteness Blackness (HWB) colorspace\r\n// See https://drafts.csswg.org/css-color-4/#the-hwb-notation\r\n// Note that, like HSL, calculations are done directly on\r\n// gamma-corrected sRGB values rather than linearising them first.\r\n\r\nvar HSV = new ColorSpace({\r\n  id: 'hsv',\r\n  name: 'HSV',\r\n  coords: {\r\n    h: {\r\n      refRange: [0, 360],\r\n      type: 'angle',\r\n      name: 'Hue',\r\n    },\r\n    s: {\r\n      range: [0, 100],\r\n      name: 'Saturation',\r\n    },\r\n    v: {\r\n      range: [0, 100],\r\n      name: 'Value',\r\n    },\r\n  },\r\n\r\n  base: HSL,\r\n  // https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion\r\n  fromBase(hsl) {\r\n    let [h, s, l] = hsl;\r\n    s /= 100;\r\n    l /= 100;\r\n\r\n    let v = l + s * Math.min(l, 1 - l);\r\n\r\n    return [\r\n      h, // h is the same\r\n      v === 0 ? 0 : 200 * (1 - l / v), // s\r\n      100 * v,\r\n    ];\r\n  },\r\n  // https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion\r\n  toBase(hsv) {\r\n    let [h, s, v] = hsv;\r\n\r\n    s /= 100;\r\n    v /= 100;\r\n\r\n    let l = v * (1 - s / 2);\r\n\r\n    return [\r\n      h, // h is the same\r\n      l === 0 || l === 1 ? 0 : ((v - l) / Math.min(l, 1 - l)) * 100,\r\n      l * 100,\r\n    ];\r\n  },\r\n  formats: {\r\n    color: {\r\n      toGamut: true,\r\n    },\r\n  },\r\n});\r\n\r\n// The Hue, Whiteness Blackness (HWB) colorspace\r\n// See https://drafts.csswg.org/css-color-4/#the-hwb-notation\r\n// Note that, like HSL, calculations are done directly on\r\n// gamma-corrected sRGB values rather than linearising them first.\r\n\r\nvar hwb = new ColorSpace({\r\n  id: 'hwb',\r\n  name: 'HWB',\r\n  coords: {\r\n    h: {\r\n      refRange: [0, 360],\r\n      type: 'angle',\r\n      name: 'Hue',\r\n    },\r\n    w: {\r\n      range: [0, 100],\r\n      name: 'Whiteness',\r\n    },\r\n    b: {\r\n      range: [0, 100],\r\n      name: 'Blackness',\r\n    },\r\n  },\r\n\r\n  base: HSV,\r\n  fromBase(hsv) {\r\n    let [h, s, v] = hsv;\r\n\r\n    return [h, (v * (100 - s)) / 100, 100 - v];\r\n  },\r\n  toBase(hwb) {\r\n    let [h, w, b] = hwb;\r\n\r\n    // Now convert percentages to [0..1]\r\n    w /= 100;\r\n    b /= 100;\r\n\r\n    // Achromatic check (white plus black >= 1)\r\n    let sum = w + b;\r\n    if (sum >= 1) {\r\n      let gray = w / sum;\r\n      return [h, 0, gray * 100];\r\n    }\r\n\r\n    let v = 1 - b;\r\n    let s = v === 0 ? 0 : 1 - w / v;\r\n    return [h, s * 100, v * 100];\r\n  },\r\n\r\n  formats: {\r\n    hwb: {\r\n      toGamut: true,\r\n      coords: ['<number> | <angle>', '<percentage>', '<percentage>'],\r\n    },\r\n  },\r\n});\r\n\r\n// convert an array of linear-light a98-rgb values to CIE XYZ\r\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n// has greater numerical precision than section 4.3.5.3 of\r\n// https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\r\n// but the values below were calculated from first principles\r\n// from the chromaticity coordinates of R G B W\r\nconst toXYZ_M$2 = [\r\n  [0.5766690429101305, 0.1855582379065463, 0.1882286462349947],\r\n  [0.29734497525053605, 0.6273635662554661, 0.07529145849399788],\r\n  [0.02703136138641234, 0.07068885253582723, 0.9913375368376388],\r\n];\r\n\r\nconst fromXYZ_M$2 = [\r\n  [2.0415879038107465, -0.5650069742788596, -0.34473135077832956],\r\n  [-0.9692436362808795, 1.8759675015077202, 0.04155505740717557],\r\n  [0.013444280632031142, -0.11836239223101838, 1.0151749943912054],\r\n];\r\n\r\nvar A98Linear = new RGBColorSpace({\r\n  id: 'a98rgb-linear',\r\n  name: 'Linear Adobe® 98 RGB compatible',\r\n  white: 'D65',\r\n  toXYZ_M: toXYZ_M$2,\r\n  fromXYZ_M: fromXYZ_M$2,\r\n});\r\n\r\nvar a98rgb = new RGBColorSpace({\r\n  id: 'a98rgb',\r\n  name: 'Adobe® 98 RGB compatible',\r\n  base: A98Linear,\r\n  toBase: (RGB) => RGB.map((val) => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)),\r\n  fromBase: (RGB) => RGB.map((val) => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)),\r\n  formats: {\r\n    color: {\r\n      id: 'a98-rgb',\r\n    },\r\n  },\r\n});\r\n\r\n// convert an array of  prophoto-rgb values to CIE XYZ\r\n// using  D50 (so no chromatic adaptation needed afterwards)\r\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\nconst toXYZ_M$1 = [\r\n  [0.7977604896723027, 0.13518583717574031, 0.0313493495815248],\r\n  [0.2880711282292934, 0.7118432178101014, 0.00008565396060525902],\r\n  [0.0, 0.0, 0.8251046025104601],\r\n];\r\n\r\nconst fromXYZ_M$1 = [\r\n  [1.3457989731028281, -0.25558010007997534, -0.05110628506753401],\r\n  [-0.5446224939028347, 1.5082327413132781, 0.02053603239147973],\r\n  [0.0, 0.0, 1.2119675456389454],\r\n];\r\n\r\nvar ProPhotoLinear = new RGBColorSpace({\r\n  id: 'prophoto-linear',\r\n  name: 'Linear ProPhoto',\r\n  white: 'D50',\r\n  base: XYZ_D50,\r\n  toXYZ_M: toXYZ_M$1,\r\n  fromXYZ_M: fromXYZ_M$1,\r\n});\r\n\r\nconst Et = 1 / 512;\r\nconst Et2 = 16 / 512;\r\n\r\nvar prophoto = new RGBColorSpace({\r\n  id: 'prophoto',\r\n  name: 'ProPhoto',\r\n  base: ProPhotoLinear,\r\n  toBase(RGB) {\r\n    // Transfer curve is gamma 1.8 with a small linear portion\r\n    return RGB.map((v) => (v < Et2 ? v / 16 : v ** 1.8));\r\n  },\r\n  fromBase(RGB) {\r\n    return RGB.map((v) => (v >= Et ? v ** (1 / 1.8) : 16 * v));\r\n  },\r\n  formats: {\r\n    color: {\r\n      id: 'prophoto-rgb',\r\n    },\r\n  },\r\n});\r\n\r\nvar oklch = new ColorSpace({\r\n  id: 'oklch',\r\n  name: 'OKLCh',\r\n  coords: {\r\n    l: {\r\n      refRange: [0, 1],\r\n      name: 'Lightness',\r\n    },\r\n    c: {\r\n      refRange: [0, 0.4],\r\n      name: 'Chroma',\r\n    },\r\n    h: {\r\n      refRange: [0, 360],\r\n      type: 'angle',\r\n      name: 'Hue',\r\n    },\r\n  },\r\n  white: 'D65',\r\n\r\n  base: OKLab,\r\n  fromBase(oklab) {\r\n    // Convert to polar form\r\n    let [L, a, b] = oklab;\r\n    let h;\r\n    const ε = 0.0002; // chromatic components much smaller than a,b\r\n\r\n    if (Math.abs(a) < ε && Math.abs(b) < ε) {\r\n      h = NaN;\r\n    } else {\r\n      h = (Math.atan2(b, a) * 180) / Math.PI;\r\n    }\r\n\r\n    return [\r\n      L, // OKLab L is still L\r\n      Math.sqrt(a ** 2 + b ** 2), // Chroma\r\n      constrain(h), // Hue, in degrees [0 to 360)\r\n    ];\r\n  },\r\n  // Convert from polar form\r\n  toBase(oklch) {\r\n    let [L, C, h] = oklch;\r\n    let a, b;\r\n\r\n    // check for NaN hue\r\n    if (isNaN(h)) {\r\n      a = 0;\r\n      b = 0;\r\n    } else {\r\n      a = C * Math.cos((h * Math.PI) / 180);\r\n      b = C * Math.sin((h * Math.PI) / 180);\r\n    }\r\n\r\n    return [L, a, b];\r\n  },\r\n\r\n  formats: {\r\n    oklch: {\r\n      coords: ['<percentage>', '<number>', '<number> | <angle>'],\r\n    },\r\n  },\r\n});\r\n\r\nconst Yw = 203; // absolute luminance of media white, cd/m²\r\nconst n = 2610 / 2 ** 14;\r\nconst ninv = 2 ** 14 / 2610;\r\nconst m = 2523 / 2 ** 5;\r\nconst minv = 2 ** 5 / 2523;\r\nconst c1 = 3424 / 2 ** 12;\r\nconst c2 = 2413 / 2 ** 7;\r\nconst c3 = 2392 / 2 ** 7;\r\n\r\nvar rec2100Pq = new RGBColorSpace({\r\n  id: 'rec2100pq',\r\n  name: 'REC.2100-PQ',\r\n  base: REC2020Linear,\r\n  toBase(RGB) {\r\n    // given PQ encoded component in range [0, 1]\r\n    // return media-white relative linear-light\r\n    return RGB.map(function (val) {\r\n      let x = (Math.max(val ** minv - c1, 0) / (c2 - c3 * val ** minv)) ** ninv;\r\n      return (x * 10000) / Yw; // luminance relative to diffuse white, [0, 70 or so].\r\n    });\r\n  },\r\n  fromBase(RGB) {\r\n    // given media-white relative linear-light\r\n    // returnPQ encoded component in range [0, 1]\r\n    return RGB.map(function (val) {\r\n      let x = Math.max((val * Yw) / 10000, 0); // absolute luminance of peak white is 10,000 cd/m².\r\n      let num = c1 + c2 * x ** n;\r\n      let denom = 1 + c3 * x ** n;\r\n\r\n      return (num / denom) ** m;\r\n    });\r\n  },\r\n  formats: {\r\n    color: {\r\n      id: 'rec2100-pq',\r\n    },\r\n  },\r\n});\r\n\r\n// FIXME see https://github.com/LeaVerou/color.js/issues/190\r\n\r\nconst a = 0.17883277;\r\nconst b = 0.28466892; // 1 - (4 * a)\r\nconst c = 0.55991073; // 0.5 - a * Math.log(4 *a)\r\n\r\nvar rec2100Hlg = new RGBColorSpace({\r\n  id: 'rec2100hlg',\r\n  cssid: 'rec2100-hlg',\r\n  name: 'REC.2100-HLG',\r\n  referred: 'scene',\r\n\r\n  base: REC2020Linear,\r\n  toBase(RGB) {\r\n    // given HLG encoded component in range [0, 1]\r\n    // return media-white relative linear-light\r\n    return RGB.map(function (val) {\r\n      if (val <= 1 / 12) {\r\n        return Math.sqrt(3 * val);\r\n      }\r\n      return a * Math.log(12 * val - b) + c;\r\n    });\r\n  },\r\n  fromBase(RGB) {\r\n    // given media-white relative linear-light\r\n    // return HLG encoded component in range [0, 1]\r\n    // per ITU Rec BT.2390\r\n    return RGB.map(function (val) {\r\n      if (val <= 0.5) {\r\n        return val ** 2 / 3;\r\n      }\r\n      return Math.exp((val - c) / a + b) / 12;\r\n    });\r\n  },\r\n  formats: {\r\n    color: {\r\n      id: 'rec2100-hlg',\r\n    },\r\n  },\r\n});\r\n\r\nconst CATs = {};\r\n\r\nhooks.add('chromatic-adaptation-start', (env) => {\r\n  if (env.options.method) {\r\n    env.M = adapt(env.W1, env.W2, env.options.method);\r\n  }\r\n});\r\n\r\nhooks.add('chromatic-adaptation-end', (env) => {\r\n  if (!env.M) {\r\n    env.M = adapt(env.W1, env.W2, env.options.method);\r\n  }\r\n});\r\n\r\nfunction defineCAT({ id, toCone_M, fromCone_M }) {\r\n  // Use id, toCone_M, fromCone_M like variables\r\n  CATs[id] = arguments[0];\r\n}\r\nfunction adapt(W1, W2, id = 'Bradford') {\r\n  // adapt from a source whitepoint or illuminant W1\r\n  // to a destination whitepoint or illuminant W2,\r\n  // using the given chromatic adaptation transform (CAT)\r\n  // debugger;\r\n  let method = CATs[id];\r\n\r\n  let [ρs, γs, βs] = multiplyMatrices(method.toCone_M, W1);\r\n  let [ρd, γd, βd] = multiplyMatrices(method.toCone_M, W2);\r\n\r\n  // all practical illuminants have non-zero XYZ so no division by zero can occur below\r\n  let scale = [\r\n    [ρd / ρs, 0, 0],\r\n    [0, γd / γs, 0],\r\n    [0, 0, βd / βs],\r\n  ];\r\n\r\n  let scaled_cone_M = multiplyMatrices(scale, method.toCone_M);\r\n  let adapt_M = multiplyMatrices(method.fromCone_M, scaled_cone_M);\r\n  return adapt_M;\r\n}\r\ndefineCAT({\r\n  id: 'von Kries',\r\n  toCone_M: [\r\n    [0.40024, 0.7076, -0.08081],\r\n    [-0.2263, 1.16532, 0.0457],\r\n    [0.0, 0.0, 0.91822],\r\n  ],\r\n  fromCone_M: [\r\n    [1.8599364, -1.1293816, 0.2198974],\r\n    [0.3611914, 0.6388125, -0.0000064],\r\n    [0.0, 0.0, 1.0890636],\r\n  ],\r\n});\r\n\r\ndefineCAT({\r\n  id: 'Bradford',\r\n  // Convert an array of XYZ values in the range 0.0 - 1.0\r\n  // to cone fundamentals\r\n  toCone_M: [\r\n    [0.8951, 0.2664, -0.1614],\r\n    [-0.7502, 1.7135, 0.0367],\r\n    [0.0389, -0.0685, 1.0296],\r\n  ],\r\n  // and back\r\n  fromCone_M: [\r\n    [0.9869929, -0.1470543, 0.1599627],\r\n    [0.4323053, 0.5183603, 0.0492912],\r\n    [-0.0085287, 0.0400428, 0.9684867],\r\n  ],\r\n});\r\n\r\ndefineCAT({\r\n  id: 'CAT02',\r\n  // with complete chromatic adaptation to W2, so D = 1.0\r\n  toCone_M: [\r\n    [0.7328, 0.4296, -0.1624],\r\n    [-0.7036, 1.6975, 0.0061],\r\n    [0.003, 0.0136, 0.9834],\r\n  ],\r\n  fromCone_M: [\r\n    [1.0961238, -0.278869, 0.1827452],\r\n    [0.454369, 0.4735332, 0.0720978],\r\n    [-0.0096276, -0.005698, 1.0153256],\r\n  ],\r\n});\r\n\r\ndefineCAT({\r\n  id: 'CAT16',\r\n  toCone_M: [\r\n    [0.401288, 0.650173, -0.051461],\r\n    [-0.250268, 1.204414, 0.045854],\r\n    [-0.002079, 0.048952, 0.953127],\r\n  ],\r\n  // the extra precision is needed to avoid roundtripping errors\r\n  fromCone_M: [\r\n    [1.862067855087233, -1.011254630531685, 1.491867754444518e-1],\r\n    [3.875265432361372e-1, 6.214474419314753e-1, -8.973985167612518e-3],\r\n    [-1.584149884933386e-2, -3.412293802851557e-2, 1.04996443687785],\r\n  ],\r\n});\r\n\r\nObject.assign(WHITES, {\r\n  // whitepoint values from ASTM E308-01 with 10nm spacing, 1931 2 degree observer\r\n  // all normalized to Y (luminance) = 1.00000\r\n  // Illuminant A is a tungsten electric light, giving a very warm, orange light.\r\n  A: [1.0985, 1.0, 0.35585],\r\n\r\n  // Illuminant C was an early approximation to daylight: illuminant A with a blue filter.\r\n  C: [0.98074, 1.0, 1.18232],\r\n\r\n  // The daylight series of illuminants simulate natural daylight.\r\n  // The color temperature (in degrees Kelvin/100) ranges from\r\n  // cool, overcast daylight (D50) to bright, direct sunlight (D65).\r\n  D55: [0.95682, 1.0, 0.92149],\r\n  D75: [0.94972, 1.0, 1.22638],\r\n\r\n  // Equal-energy illuminant, used in two-stage CAT16\r\n  E: [1.0, 1.0, 1.0],\r\n\r\n  // The F series of illuminants represent fluorescent lights\r\n  F2: [0.99186, 1.0, 0.67393],\r\n  F7: [0.95041, 1.0, 1.08747],\r\n  F11: [1.00962, 1.0, 0.6435],\r\n});\r\n\r\n// The ACES whitepoint\r\n// see TB-2018-001 Derivation of the ACES White Point CIE Chromaticity Coordinates\r\n// also https://github.com/ampas/aces-dev/blob/master/documents/python/TB-2018-001/aces_wp.py\r\n// Similar to D60\r\nWHITES.ACES = [0.32168 / 0.33767, 1.0, (1.0 - 0.32168 - 0.33767) / 0.33767];\r\n\r\n// convert an array of linear-light ACEScc values to CIE XYZ\r\nconst toXYZ_M = [\r\n  [0.6624541811085053, 0.13400420645643313, 0.1561876870049078],\r\n  [0.27222871678091454, 0.6740817658111484, 0.05368951740793705],\r\n  [-0.005574649490394108, 0.004060733528982826, 1.0103391003129971],\r\n];\r\nconst fromXYZ_M = [\r\n  [1.6410233796943257, -0.32480329418479, -0.23642469523761225],\r\n  [-0.6636628587229829, 1.6153315916573379, 0.016756347685530137],\r\n  [0.011721894328375376, -0.008284441996237409, 0.9883948585390215],\r\n];\r\n\r\nvar ACEScg = new RGBColorSpace({\r\n  id: 'acescg',\r\n  name: 'ACEScg',\r\n\r\n  // ACEScg – A scene-referred, linear-light encoding of ACES Data\r\n  // https://docs.acescentral.com/specifications/acescg/\r\n  // uses the AP1 primaries, see section 4.3.1 Color primaries\r\n  coords: {\r\n    r: {\r\n      range: [0, 65504],\r\n      name: 'Red',\r\n    },\r\n    g: {\r\n      range: [0, 65504],\r\n      name: 'Green',\r\n    },\r\n    b: {\r\n      range: [0, 65504],\r\n      name: 'Blue',\r\n    },\r\n  },\r\n\r\n  referred: 'scene',\r\n\r\n  white: WHITES.ACES,\r\n\r\n  toXYZ_M,\r\n  fromXYZ_M,\r\n\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\n// export default Color;\r\n\r\nconst ε = 2 ** -16;\r\n\r\n// the smallest value which, in the 32bit IEEE 754 float encoding,\r\n// decodes as a non-negative value\r\nconst ACES_min_nonzero = -0.35828683;\r\n\r\n// brightest encoded value, decodes to 65504\r\nconst ACES_cc_max = (Math.log2(65504) + 9.72) / 17.52; // 1.468\r\n\r\nvar acescc = new RGBColorSpace({\r\n  id: 'acescc',\r\n  name: 'ACEScc',\r\n  // see S-2014-003 ACEScc – A Logarithmic Encoding of ACES Data\r\n  // https://docs.acescentral.com/specifications/acescc/\r\n  // uses the AP1 primaries, see section 4.3.1 Color primaries\r\n\r\n  // Appendix A: \"Very small ACES scene referred values below 7 1/4 stops\r\n  // below 18% middle gray are encoded as negative ACEScc values.\r\n  // These values should be preserved per the encoding in Section 4.4\r\n  // so that all positive ACES values are maintained.\"\r\n  coords: {\r\n    r: {\r\n      range: [ACES_min_nonzero, ACES_cc_max],\r\n      name: 'Red',\r\n    },\r\n    g: {\r\n      range: [ACES_min_nonzero, ACES_cc_max],\r\n      name: 'Green',\r\n    },\r\n    b: {\r\n      range: [ACES_min_nonzero, ACES_cc_max],\r\n      name: 'Blue',\r\n    },\r\n  },\r\n  referred: 'scene',\r\n\r\n  base: ACEScg,\r\n  // from section 4.4.2 Decoding Function\r\n  toBase(RGB) {\r\n    const low = (9.72 - 15) / 17.52; // -0.3014\r\n\r\n    return RGB.map(function (val) {\r\n      if (val <= low) {\r\n        return (2 ** (val * 17.52 - 9.72) - ε) * 2; // very low values, below -0.3014\r\n      } else if (val < ACES_cc_max) {\r\n        return 2 ** (val * 17.52 - 9.72);\r\n      } else {\r\n        // val >= ACES_cc_max\r\n        return 65504;\r\n      }\r\n    });\r\n  },\r\n\r\n  // Non-linear encoding function from S-2014-003, section 4.4.1 Encoding Function\r\n  fromBase(RGB) {\r\n    return RGB.map(function (val) {\r\n      if (val <= 0) {\r\n        return (Math.log2(ε) + 9.72) / 17.52; // -0.3584\r\n      } else if (val < ε) {\r\n        return (Math.log2(ε + val * 0.5) + 9.72) / 17.52;\r\n      } else {\r\n        // val >= ε\r\n        return (Math.log2(val) + 9.72) / 17.52;\r\n      }\r\n    });\r\n  },\r\n  // encoded media white (rgb 1,1,1) => linear  [ 222.861, 222.861, 222.861 ]\r\n  // encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857]\r\n  formats: {\r\n    color: {},\r\n  },\r\n});\r\n\r\nvar spaces = /*#__PURE__*/ Object.freeze({\r\n  __proto__: null,\r\n  XYZ_D65: XYZ_D65,\r\n  XYZ_D50: XYZ_D50,\r\n  XYZ_ABS_D65: XYZ_Abs_D65,\r\n  Lab_D65: lab_d65,\r\n  Lab: lab,\r\n  LCH: lch,\r\n  sRGB_Linear: sRGBLinear,\r\n  sRGB: sRGB,\r\n  HSL: HSL,\r\n  HWB: hwb,\r\n  HSV: HSV,\r\n  P3_Linear: P3Linear,\r\n  P3: P3,\r\n  A98RGB_Linear: A98Linear,\r\n  A98RGB: a98rgb,\r\n  ProPhoto_Linear: ProPhotoLinear,\r\n  ProPhoto: prophoto,\r\n  REC_2020_Linear: REC2020Linear,\r\n  REC_2020: REC2020,\r\n  OKLab: OKLab,\r\n  OKLCH: oklch,\r\n  Jzazbz: Jzazbz,\r\n  JzCzHz: jzczhz,\r\n  ICTCP: ictcp,\r\n  REC_2100_PQ: rec2100Pq,\r\n  REC_2100_HLG: rec2100Hlg,\r\n  ACEScg: ACEScg,\r\n  ACEScc: acescc,\r\n});\r\n\r\n/**\r\n * Class that represents a color\r\n */\r\nclass Color {\r\n  /**\r\n   * Creates an instance of Color.\r\n   * Signatures:\r\n   * - `new Color(stringToParse)`\r\n   * - `new Color(otherColor)`\r\n   * - `new Color({space, coords, alpha})`\r\n   * - `new Color(space, coords, alpha)`\r\n   * - `new Color(spaceId, coords, alpha)`\r\n   */\r\n  constructor(...args) {\r\n    let color;\r\n\r\n    if (args.length === 1) {\r\n      color = getColor(args[0]);\r\n    }\r\n\r\n    let space, coords, alpha;\r\n\r\n    if (color) {\r\n      space = color.space || color.spaceId;\r\n      coords = color.coords;\r\n      alpha = color.alpha;\r\n    } else {\r\n      // default signature new Color(ColorSpace, array [, alpha])\r\n      [space, coords, alpha] = args;\r\n    }\r\n\r\n    this.#space = ColorSpace.get(space);\r\n    this.coords = coords ? coords.slice() : [0, 0, 0];\r\n    this.alpha = alpha < 1 ? alpha : 1; // this also deals with NaN etc\r\n\r\n    // Convert \"NaN\" to NaN\r\n    for (let i = 0; i < this.coords.length; i++) {\r\n      if (this.coords[i] === 'NaN') {\r\n        this.coords[i] = NaN;\r\n      }\r\n    }\r\n\r\n    // Define getters and setters for each coordinate\r\n    for (let id in this.#space.coords) {\r\n      Object.defineProperty(this, id, {\r\n        get: () => this.get(id),\r\n        set: (value) => this.set(id, value),\r\n      });\r\n    }\r\n  }\r\n\r\n  #space;\r\n\r\n  get space() {\r\n    return this.#space;\r\n  }\r\n\r\n  get spaceId() {\r\n    return this.#space.id;\r\n  }\r\n\r\n  clone() {\r\n    return new Color(this.space, this.coords, this.alpha);\r\n  }\r\n\r\n  toJSON() {\r\n    return {\r\n      spaceId: this.spaceId,\r\n      coords: this.coords,\r\n      alpha: this.alpha,\r\n    };\r\n  }\r\n\r\n  display(...args) {\r\n    let ret = display(this, ...args);\r\n\r\n    // Convert color object to Color instance\r\n    ret.color = new Color(ret.color);\r\n\r\n    return ret;\r\n  }\r\n\r\n  /**\r\n   * Get a color from the argument passed\r\n   * Basically gets us the same result as new Color(color) but doesn't clone an existing color object\r\n   */\r\n  static get(color, ...args) {\r\n    if (color instanceof Color) {\r\n      return color;\r\n    }\r\n\r\n    return new Color(color, ...args);\r\n  }\r\n\r\n  static defineFunction(name, code, o = code) {\r\n    if (arguments.length === 1) {\r\n      [name, code, o] = [arguments[0].name, arguments[0], arguments[0]];\r\n    }\r\n\r\n    let { instance = true, returns } = o;\r\n\r\n    let func = function (...args) {\r\n      let ret = code(...args);\r\n\r\n      if (returns === 'color') {\r\n        ret = Color.get(ret);\r\n      } else if (returns === 'function<color>') {\r\n        let f = ret;\r\n        ret = function (...args) {\r\n          let ret = f(...args);\r\n          return Color.get(ret);\r\n        };\r\n        // Copy any function metadata\r\n        Object.assign(ret, f);\r\n      } else if (returns === 'array<color>') {\r\n        ret = ret.map((c) => Color.get(c));\r\n      }\r\n\r\n      return ret;\r\n    };\r\n\r\n    if (!(name in Color)) {\r\n      Color[name] = func;\r\n    }\r\n\r\n    if (instance) {\r\n      Color.prototype[name] = function (...args) {\r\n        return func(this, ...args);\r\n      };\r\n    }\r\n  }\r\n\r\n  static defineFunctions(o) {\r\n    for (let name in o) {\r\n      Color.defineFunction(name, o[name], o[name]);\r\n    }\r\n  }\r\n\r\n  static extend(exports) {\r\n    if (exports.register) {\r\n      exports.register(Color);\r\n    } else if (exports.default) {\r\n      Color.defineFunction(exports.default.name, exports.default);\r\n    } else if (typeof exports === 'function') {\r\n      Color.defineFunction(exports);\r\n    } else {\r\n      // No register method, just add the module's functions\r\n      for (let name in exports) {\r\n        Color.defineFunction(name, exports[name]);\r\n      }\r\n    }\r\n  }\r\n}\r\nColor.defineFunctions({\r\n  get,\r\n  getAll,\r\n  set: set$1,\r\n  setAll,\r\n  to,\r\n  equals,\r\n  inGamut,\r\n  toGamut,\r\n  distance,\r\n  toString: serialize,\r\n});\r\n\r\nObject.assign(Color, {\r\n  util,\r\n  hooks,\r\n  WHITES,\r\n  Space: ColorSpace,\r\n  spaces: ColorSpace.registry,\r\n  parse,\r\n\r\n  // Global defaults one may want to configure\r\n  defaults,\r\n});\r\n\r\nfor (let key of Object.keys(spaces)) {\r\n  ColorSpace.register(spaces[key]);\r\n}\r\n\r\n/**\r\n * This plugin defines getters and setters for color[spaceId]\r\n * e.g. color.lch on *any* color gives us the lch coords\r\n */\r\n\r\n// Add space accessors to existing color spaces\r\nfor (let id in ColorSpace.registry) {\r\n  addSpaceAccessors(id, ColorSpace.registry[id]);\r\n}\r\n\r\n// Add space accessors to color spaces not yet created\r\nhooks.add('colorspace-init-end', addSpaceAccessors);\r\n\r\nfunction addSpaceAccessors(id, space) {\r\n  // Coordinates can be looked up by both id and name\r\n  Object.keys(space.coords);\r\n  Object.values(space.coords).map((c) => c.name);\r\n\r\n  let propId = id.replace(/-/g, '_');\r\n\r\n  Object.defineProperty(Color.prototype, propId, {\r\n    // Convert coords to coords in another colorspace and return them\r\n    // Source colorspace: this.spaceId\r\n    // Target colorspace: id\r\n    get() {\r\n      let ret = this.getAll(id);\r\n\r\n      if (typeof Proxy === 'undefined') {\r\n        // If proxies are not supported, just return a static array\r\n        return ret;\r\n      }\r\n\r\n      // Enable color.spaceId.coordName syntax\r\n      return new Proxy(ret, {\r\n        has: (obj, property) => {\r\n          try {\r\n            ColorSpace.resolveCoord([space, property]);\r\n            return true;\r\n          } catch (e) {}\r\n\r\n          return Reflect.has(obj, property);\r\n        },\r\n        get: (obj, property, receiver) => {\r\n          if (property && typeof property !== 'symbol' && !(property in obj)) {\r\n            let { index } = ColorSpace.resolveCoord([space, property]);\r\n\r\n            if (index >= 0) {\r\n              return obj[index];\r\n            }\r\n          }\r\n\r\n          return Reflect.get(obj, property, receiver);\r\n        },\r\n        set: (obj, property, value, receiver) => {\r\n          if ((property && typeof property !== 'symbol' && !(property in obj)) || property >= 0) {\r\n            let { index } = ColorSpace.resolveCoord([space, property]);\r\n\r\n            if (index >= 0) {\r\n              obj[index] = value;\r\n\r\n              // Update color.coords\r\n              this.setAll(id, obj);\r\n\r\n              return true;\r\n            }\r\n          }\r\n\r\n          return Reflect.set(obj, property, value, receiver);\r\n        },\r\n      });\r\n    },\r\n    // Convert coords in another colorspace to internal coords and set them\r\n    // Target colorspace: this.spaceId\r\n    // Source colorspace: id\r\n    set(coords) {\r\n      this.setAll(id, coords);\r\n    },\r\n    configurable: true,\r\n    enumerable: true,\r\n  });\r\n}\r\n\r\n// Import all modules of Color.js\r\n\r\nColor.extend(deltaEMethods);\r\nColor.extend(deltaE$1);\r\nColor.extend(variations);\r\nColor.extend(contrast);\r\nColor.extend(chromaticity);\r\nColor.extend(luminance);\r\nColor.extend(interpolation);\r\nColor.extend(contrastMethods);\r\n\r\nexport { Color as default };\r\n"],"names":["multiplyMatrices","A","B","m","length","Array","isArray","map","x","p","B_cols","_","i","product","row","col","ret","c","isString","str","type","o","Object","prototype","toString","call","match","toLowerCase","toPrecision","n","precision","integerLength","Math","floor","toFixed","p10","round","parseFunction","trim","isNumberRegex","parts","args","replace","$0","arg","test","Number","slice","unit","startsWith","alpha","push","name","rawName","rawArgs","last","arr","interpolate","start","end","isNaN","interpolateInv","value","mapRange","from","to","parseCoordGrammar","coordGrammars","coordGrammar","split","range","String","util","freeze","__proto__","hooks","Hooks","add","callback","first","arguments","forEach","this","run","env","context","defaults","gamut_mapping","deltaE","WHITES","D50","D65","getWhite","adapt$1","W1","W2","XYZ","options","TypeError","M","ColorSpace","constructor","id","base","get","aliases","fromBase","toBase","coords","white","formats","format","cssId","functions","color","defineProperty","referred","reverse","inGamut","epsilon","isPolar","coordMeta","values","every","meta","min","max","undefined","coordFormats","entries","outputType","fromRange","refRange","toRange","suffix","serializeCoords","getFormat","space","connectionSpace","connectionSpaceIndex","myPath","otherPath","Error","getMinCoords","static","all","Set","registry","register","alias","alternatives","resolveCoord","ref","workingSpace","coord","coordType","includes","coordId","index","normalizedCoord","keys","join","XYZ_D65","y","z","ids","RGBColorSpace","r","g","b","toXYZ_M","fromXYZ_M","rgb","xyz","super","parse","parsed","shift","indexOf","pop","colorSpec","argCount","fill","spaceId","didYouMean","lastAlpha","providedType","find","coordName","formatId","getColor","getAll","prop","setAll","set$1","object","XYZ_D50","white$1","lab","l","a","f","cbrt","Lab","pow","constrain","angle","lch","h","hue","L","abs","NaN","atan2","PI","sqrt","LCH","Lightness","Chroma","Hue","cos","sin","Gfactor","r2d","d2r$1","deltaE2000","sample","kL","kC","kH","L1","a1","b1","C1","L2","a2","b2","C2","C7","G","adash1","adash2","Cdash1","Cdash2","h1","h2","hdiff","hsum","habs","console","log","hdash","Ldash","Cdash","Cdash7","lsq","SL","SC","T","SH","exp","RC","dE","clone","toGamut","method","spaceColor","clipped","mapSpace","mappedColor","low","high","bounds","serialize","inGamut$1","customOptions","DEFAULT_FORMAT","unshift","strAlpha","commas","returns","REC2020Linear","REC2020","RGB","val","P3Linear","sRGBLinear","KEYWORDS","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","sRGB","sign","rgba","hex","component","parseInt","collapse","collapsible","padStart","keyword","P3","display_space","CSS","supports","distance","color1","color2","coords1","coords2","reduce","acc","c1","c2","getLuminance","setLuminance","set","luminance","Color","fclamp","Y","linearize","lab_d65","phi","contrastMethods","contrastWCAG21","Y1","Y2","contrastAPCA","background","foreground","S","C","Sapc","R","lumTxt","lumBg","Ytxt","Ybg","BoW","contrastMichelson","denom","contrastWeber","contrastLstar","contrastDeltaPhi","Lstr1","Lstr2","deltaPhiStar","contrast","SQRT2","uv","X","Z","xy","sum","chromaticity","d2r","XYZ_Abs_D65","v","AbsXYZ","b$1","n$1","ninv$1","c1$2","c2$2","c3$2","pinv","d","d0","XYZtoCone_M","ConetoXYZ_M","ConetoIab_M","IabtoCone_M","Jzazbz","jz","az","bz","Xa","Ya","Za","PQLMS","Iz","Jz","LMS","Xm","Ym","jzczhz","cz","hz","jzazbz","c1$1","c2$1","c3$1","m1","m2","im1","im2","XYZtoLMS_M$1","LMStoIPT_M","IPTtoLMS_M","LMStoXYZ_M$1","ictcp","ct","cp","LMStoICtCp","ICtCp","ICtCptoLMS","XYZtoLMS_M","LMStoXYZ_M","LMStoLab_M","LabtoLMS_M","OKLab","LMSg","oklab","deltaEMethods","deltaE76","deltaECMC","H1","H2","C4","F","deltaEJz","Jz1","Cz1","Hz1","Jz2","Cz2","Hz2","deltaEITP","I1","T1","P1","I2","T2","P2","deltaEOK","rest","deltaE$1","default","variations","lighten","amount","darken","mix","outputSpace","steps","colorRange","isRange","rangeArgs","colors","maxDeltaE","deltaEMethod","maxSteps","rangeOptions","totalDelta","actualSteps","ceil","step","maxDelta","cur","prev","splice","progression","premultiplied","interpolationSpace","arc","angles","angleDiff","adjust","assign","interpolation","defineFunction","HSL","s","hsl","k","hsla","HSV","hsv","hwb","w","A98Linear","a98rgb","ProPhotoLinear","Et","prophoto","oklch","ninv","minv","c3","rec2100Pq","rec2100Hlg","cssid","CATs","defineCAT","toCone_M","fromCone_M","adapt","scaled_cone_M","D55","D75","E","F2","F7","F11","ACES","ACEScg","ACES_min_nonzero","ACES_cc_max","log2","acescc","spaces","XYZ_ABS_D65","Lab_D65","sRGB_Linear","HWB","P3_Linear","A98RGB_Linear","A98RGB","ProPhoto_Linear","ProPhoto","REC_2020_Linear","REC_2020","OKLCH","JzCzHz","ICTCP","REC_2100_PQ","REC_2100_HLG","ACEScc","toJSON","display","fallbackColor","code","instance","func","defineFunctions","extend","exports","equals","Space","key","addSpaceAccessors","propId","Proxy","has","obj","property","e","Reflect","receiver","configurable","enumerable","algorithm","algorithms"],"sourceRoot":""}