{"version":3,"file":"color.js","names":[],"sources":["../../../src/js/color.ts"],"sourcesContent":["/**\n * color\n *\n * Ref: CSS Color Module Level 4\n *      Sample code for Color Conversions\n *      https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code\n */\n\nimport { createCacheKey, getCache, setCache } from './cache';\nimport { isString } from './common';\nimport { interpolateHue, roundToPrecision, splitValue } from './util';\nimport {\n  ColorChannels,\n  ComputedColorChannels,\n  Options,\n  MatchedRegExp,\n  SpecifiedColorChannels,\n  StringColorChannels,\n  StringColorSpacedChannels\n} from './typedef';\n\n/* constants */\nimport {\n  ANGLE,\n  CS_HUE_CAPT,\n  CS_MIX,\n  CS_RGB,\n  CS_XYZ,\n  FN_COLOR,\n  FN_LIGHT_DARK,\n  FN_MIX,\n  NONE,\n  NUM,\n  PCT,\n  SYN_COLOR_TYPE,\n  SYN_FN_COLOR,\n  SYN_HSL,\n  SYN_HSL_LV3,\n  SYN_LCH,\n  SYN_MIX,\n  SYN_MIX_CAPT,\n  SYN_MIX_PART,\n  SYN_MOD,\n  SYN_RGB_LV3,\n  VAL_COMP,\n  VAL_MIX,\n  VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'color';\n\n/* numeric constants */\nconst PPTH = 0.001;\nconst HALF = 0.5;\nconst DUO = 2;\nconst TRIA = 3;\nconst QUAD = 4;\nconst OCT = 8;\nconst DEC = 10;\nconst DOZ = 12;\nconst HEX = 16;\nconst SEXA = 60;\nconst DEG_HALF = 180;\nconst DEG = 360;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\nconst POW_SQR = 2;\nconst POW_CUBE = 3;\nconst POW_LINEAR = 2.4;\nconst LINEAR_COEF = 12.92;\nconst LINEAR_OFFSET = 0.055;\nconst LAB_L = 116;\nconst LAB_A = 500;\nconst LAB_B = 200;\nconst LAB_EPSILON = 216 / 24389;\nconst LAB_KAPPA = 24389 / 27;\n\n/* type definitions */\n/**\n * @type NumStrColorChannels - string or numeric color channels\n */\ntype NumStrColorChannels = [\n  x: number | string,\n  y: number | string,\n  z: number | string,\n  alpha: number | string\n];\n\n/**\n * @type TriColorChannels - color channels without alpha\n */\ntype TriColorChannels = [x: number, y: number, z: number];\n\n/**\n * @type ColorMatrix - color matrix\n */\ntype ColorMatrix = [\n  r1: TriColorChannels,\n  r2: TriColorChannels,\n  r3: TriColorChannels\n];\n\n/* white point */\nconst D50: TriColorChannels = [\n  0.3457 / 0.3585,\n  1.0,\n  (1.0 - 0.3457 - 0.3585) / 0.3585\n];\nconst MATRIX_D50_TO_D65: ColorMatrix = [\n  [0.955473421488075, -0.02309845494876471, 0.06325924320057072],\n  [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],\n  [0.012314014864481998, -0.020507649298898964, 1.330365926242124]\n];\nconst MATRIX_D65_TO_D50: ColorMatrix = [\n  [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],\n  [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],\n  [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371]\n];\n\n/* color space */\nconst MATRIX_L_RGB_TO_XYZ: ColorMatrix = [\n  [506752 / 1228815, 87881 / 245763, 12673 / 70218],\n  [87098 / 409605, 175762 / 245763, 12673 / 175545],\n  [7918 / 409605, 87881 / 737289, 1001167 / 1053270]\n];\nconst MATRIX_XYZ_TO_L_RGB: ColorMatrix = [\n  [12831 / 3959, -329 / 214, -1974 / 3959],\n  [-851781 / 878810, 1648619 / 878810, 36519 / 878810],\n  [705 / 12673, -2585 / 12673, 705 / 667]\n];\nconst MATRIX_XYZ_TO_LMS: ColorMatrix = [\n  [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n  [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n  [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n];\nconst MATRIX_LMS_TO_XYZ: ColorMatrix = [\n  [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n  [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n  [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n];\nconst MATRIX_OKLAB_TO_LMS: ColorMatrix = [\n  [1.0, 0.3963377773761749, 0.2158037573099136],\n  [1.0, -0.1055613458156586, -0.0638541728258133],\n  [1.0, -0.0894841775298119, -1.2914855480194092]\n];\nconst MATRIX_LMS_TO_OKLAB: ColorMatrix = [\n  [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n  [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n  [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n];\nconst MATRIX_P3_TO_XYZ: ColorMatrix = [\n  [608311 / 1250200, 189793 / 714400, 198249 / 1000160],\n  [35783 / 156275, 247089 / 357200, 198249 / 2500400],\n  [0 / 1, 32229 / 714400, 5220557 / 5000800]\n];\nconst MATRIX_REC2020_TO_XYZ: ColorMatrix = [\n  [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],\n  [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],\n  [0 / 1, 19567812 / 697040785, 295819943 / 278816314]\n];\nconst MATRIX_A98_TO_XYZ: ColorMatrix = [\n  [573536 / 994567, 263643 / 1420810, 187206 / 994567],\n  [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],\n  [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835]\n];\nconst MATRIX_PROPHOTO_TO_XYZ_D50: ColorMatrix = [\n  [0.7977666449006423, 0.13518129740053308, 0.0313477341283922],\n  [0.2880748288194013, 0.711835234241873, 0.00008993693872564],\n  [0.0, 0.0, 0.8251046025104602]\n];\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`);\nconst REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/;\nconst REG_CURRENT = /^currentColor$/i;\nconst REG_FN_COLOR = new RegExp(`^color\\\\(\\\\s*(${SYN_FN_COLOR})\\\\s*\\\\)$`);\nconst REG_HSL = new RegExp(`^hsla?\\\\(\\\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\\\s*\\\\)$`);\nconst REG_HWB = new RegExp(`^hwb\\\\(\\\\s*(${SYN_HSL})\\\\s*\\\\)$`);\nconst REG_LAB = new RegExp(`^lab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_LCH = new RegExp(`^lch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_MIX = new RegExp(`^${SYN_MIX}$`);\nconst REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`);\nconst REG_MIX_NEST = new RegExp(`${SYN_MIX}`, 'g');\nconst REG_OKLAB = new RegExp(`^oklab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_OKLCH = new RegExp(`^oklch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_SPEC = /^(?:specifi|comput)edValue$/;\nconst REG_ANGLE_TO_DEG = new RegExp(`^(${NUM})(${ANGLE})?$`);\nconst REG_PARSE_RGB = new RegExp(\n  `^rgba?\\\\(\\\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\\\s*\\\\)$`\n);\nconst REG_MIX_CS_RGB_XYZ = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`);\nconst REG_MIX_IN_CS = new RegExp(`in\\\\s+(${CS_MIX})`);\nconst REG_MIX_START = new RegExp(`^color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,`);\nconst REG_MIX_COLOR_PART = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n\n/**\n * named colors\n */\nexport const NAMED_COLORS = {\n  aliceblue: [0xf0, 0xf8, 0xff],\n  antiquewhite: [0xfa, 0xeb, 0xd7],\n  aqua: [0x00, 0xff, 0xff],\n  aquamarine: [0x7f, 0xff, 0xd4],\n  azure: [0xf0, 0xff, 0xff],\n  beige: [0xf5, 0xf5, 0xdc],\n  bisque: [0xff, 0xe4, 0xc4],\n  black: [0x00, 0x00, 0x00],\n  blanchedalmond: [0xff, 0xeb, 0xcd],\n  blue: [0x00, 0x00, 0xff],\n  blueviolet: [0x8a, 0x2b, 0xe2],\n  brown: [0xa5, 0x2a, 0x2a],\n  burlywood: [0xde, 0xb8, 0x87],\n  cadetblue: [0x5f, 0x9e, 0xa0],\n  chartreuse: [0x7f, 0xff, 0x00],\n  chocolate: [0xd2, 0x69, 0x1e],\n  coral: [0xff, 0x7f, 0x50],\n  cornflowerblue: [0x64, 0x95, 0xed],\n  cornsilk: [0xff, 0xf8, 0xdc],\n  crimson: [0xdc, 0x14, 0x3c],\n  cyan: [0x00, 0xff, 0xff],\n  darkblue: [0x00, 0x00, 0x8b],\n  darkcyan: [0x00, 0x8b, 0x8b],\n  darkgoldenrod: [0xb8, 0x86, 0x0b],\n  darkgray: [0xa9, 0xa9, 0xa9],\n  darkgreen: [0x00, 0x64, 0x00],\n  darkgrey: [0xa9, 0xa9, 0xa9],\n  darkkhaki: [0xbd, 0xb7, 0x6b],\n  darkmagenta: [0x8b, 0x00, 0x8b],\n  darkolivegreen: [0x55, 0x6b, 0x2f],\n  darkorange: [0xff, 0x8c, 0x00],\n  darkorchid: [0x99, 0x32, 0xcc],\n  darkred: [0x8b, 0x00, 0x00],\n  darksalmon: [0xe9, 0x96, 0x7a],\n  darkseagreen: [0x8f, 0xbc, 0x8f],\n  darkslateblue: [0x48, 0x3d, 0x8b],\n  darkslategray: [0x2f, 0x4f, 0x4f],\n  darkslategrey: [0x2f, 0x4f, 0x4f],\n  darkturquoise: [0x00, 0xce, 0xd1],\n  darkviolet: [0x94, 0x00, 0xd3],\n  deeppink: [0xff, 0x14, 0x93],\n  deepskyblue: [0x00, 0xbf, 0xff],\n  dimgray: [0x69, 0x69, 0x69],\n  dimgrey: [0x69, 0x69, 0x69],\n  dodgerblue: [0x1e, 0x90, 0xff],\n  firebrick: [0xb2, 0x22, 0x22],\n  floralwhite: [0xff, 0xfa, 0xf0],\n  forestgreen: [0x22, 0x8b, 0x22],\n  fuchsia: [0xff, 0x00, 0xff],\n  gainsboro: [0xdc, 0xdc, 0xdc],\n  ghostwhite: [0xf8, 0xf8, 0xff],\n  gold: [0xff, 0xd7, 0x00],\n  goldenrod: [0xda, 0xa5, 0x20],\n  gray: [0x80, 0x80, 0x80],\n  green: [0x00, 0x80, 0x00],\n  greenyellow: [0xad, 0xff, 0x2f],\n  grey: [0x80, 0x80, 0x80],\n  honeydew: [0xf0, 0xff, 0xf0],\n  hotpink: [0xff, 0x69, 0xb4],\n  indianred: [0xcd, 0x5c, 0x5c],\n  indigo: [0x4b, 0x00, 0x82],\n  ivory: [0xff, 0xff, 0xf0],\n  khaki: [0xf0, 0xe6, 0x8c],\n  lavender: [0xe6, 0xe6, 0xfa],\n  lavenderblush: [0xff, 0xf0, 0xf5],\n  lawngreen: [0x7c, 0xfc, 0x00],\n  lemonchiffon: [0xff, 0xfa, 0xcd],\n  lightblue: [0xad, 0xd8, 0xe6],\n  lightcoral: [0xf0, 0x80, 0x80],\n  lightcyan: [0xe0, 0xff, 0xff],\n  lightgoldenrodyellow: [0xfa, 0xfa, 0xd2],\n  lightgray: [0xd3, 0xd3, 0xd3],\n  lightgreen: [0x90, 0xee, 0x90],\n  lightgrey: [0xd3, 0xd3, 0xd3],\n  lightpink: [0xff, 0xb6, 0xc1],\n  lightsalmon: [0xff, 0xa0, 0x7a],\n  lightseagreen: [0x20, 0xb2, 0xaa],\n  lightskyblue: [0x87, 0xce, 0xfa],\n  lightslategray: [0x77, 0x88, 0x99],\n  lightslategrey: [0x77, 0x88, 0x99],\n  lightsteelblue: [0xb0, 0xc4, 0xde],\n  lightyellow: [0xff, 0xff, 0xe0],\n  lime: [0x00, 0xff, 0x00],\n  limegreen: [0x32, 0xcd, 0x32],\n  linen: [0xfa, 0xf0, 0xe6],\n  magenta: [0xff, 0x00, 0xff],\n  maroon: [0x80, 0x00, 0x00],\n  mediumaquamarine: [0x66, 0xcd, 0xaa],\n  mediumblue: [0x00, 0x00, 0xcd],\n  mediumorchid: [0xba, 0x55, 0xd3],\n  mediumpurple: [0x93, 0x70, 0xdb],\n  mediumseagreen: [0x3c, 0xb3, 0x71],\n  mediumslateblue: [0x7b, 0x68, 0xee],\n  mediumspringgreen: [0x00, 0xfa, 0x9a],\n  mediumturquoise: [0x48, 0xd1, 0xcc],\n  mediumvioletred: [0xc7, 0x15, 0x85],\n  midnightblue: [0x19, 0x19, 0x70],\n  mintcream: [0xf5, 0xff, 0xfa],\n  mistyrose: [0xff, 0xe4, 0xe1],\n  moccasin: [0xff, 0xe4, 0xb5],\n  navajowhite: [0xff, 0xde, 0xad],\n  navy: [0x00, 0x00, 0x80],\n  oldlace: [0xfd, 0xf5, 0xe6],\n  olive: [0x80, 0x80, 0x00],\n  olivedrab: [0x6b, 0x8e, 0x23],\n  orange: [0xff, 0xa5, 0x00],\n  orangered: [0xff, 0x45, 0x00],\n  orchid: [0xda, 0x70, 0xd6],\n  palegoldenrod: [0xee, 0xe8, 0xaa],\n  palegreen: [0x98, 0xfb, 0x98],\n  paleturquoise: [0xaf, 0xee, 0xee],\n  palevioletred: [0xdb, 0x70, 0x93],\n  papayawhip: [0xff, 0xef, 0xd5],\n  peachpuff: [0xff, 0xda, 0xb9],\n  peru: [0xcd, 0x85, 0x3f],\n  pink: [0xff, 0xc0, 0xcb],\n  plum: [0xdd, 0xa0, 0xdd],\n  powderblue: [0xb0, 0xe0, 0xe6],\n  purple: [0x80, 0x00, 0x80],\n  rebeccapurple: [0x66, 0x33, 0x99],\n  red: [0xff, 0x00, 0x00],\n  rosybrown: [0xbc, 0x8f, 0x8f],\n  royalblue: [0x41, 0x69, 0xe1],\n  saddlebrown: [0x8b, 0x45, 0x13],\n  salmon: [0xfa, 0x80, 0x72],\n  sandybrown: [0xf4, 0xa4, 0x60],\n  seagreen: [0x2e, 0x8b, 0x57],\n  seashell: [0xff, 0xf5, 0xee],\n  sienna: [0xa0, 0x52, 0x2d],\n  silver: [0xc0, 0xc0, 0xc0],\n  skyblue: [0x87, 0xce, 0xeb],\n  slateblue: [0x6a, 0x5a, 0xcd],\n  slategray: [0x70, 0x80, 0x90],\n  slategrey: [0x70, 0x80, 0x90],\n  snow: [0xff, 0xfa, 0xfa],\n  springgreen: [0x00, 0xff, 0x7f],\n  steelblue: [0x46, 0x82, 0xb4],\n  tan: [0xd2, 0xb4, 0x8c],\n  teal: [0x00, 0x80, 0x80],\n  thistle: [0xd8, 0xbf, 0xd8],\n  tomato: [0xff, 0x63, 0x47],\n  turquoise: [0x40, 0xe0, 0xd0],\n  violet: [0xee, 0x82, 0xee],\n  wheat: [0xf5, 0xde, 0xb3],\n  white: [0xff, 0xff, 0xff],\n  whitesmoke: [0xf5, 0xf5, 0xf5],\n  yellow: [0xff, 0xff, 0x00],\n  yellowgreen: [0x9a, 0xcd, 0x32]\n} as const satisfies {\n  [key: string]: TriColorChannels;\n};\n\n/**\n * cache invalid color value\n * @param key - cache key\n * @param nullable - is nullable\n * @returns cached value\n */\nexport const cacheInvalidColorValue = (\n  cacheKey: string,\n  format: string,\n  nullable: boolean = false\n): SpecifiedColorChannels | string | null => {\n  if (format === VAL_SPEC) {\n    const res = '';\n    setCache(cacheKey, res);\n    return res;\n  }\n  if (nullable) {\n    setCache(cacheKey, null);\n    return null;\n  }\n  const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n  setCache(cacheKey, res);\n  return res;\n};\n\n/**\n * resolve invalid color value\n * @param format - output format\n * @param nullable - is nullable\n * @returns resolved value\n */\nexport const resolveInvalidColorValue = (\n  format: string,\n  nullable: boolean = false\n): SpecifiedColorChannels | string | null => {\n  switch (format) {\n    case 'hsl':\n    case 'hwb':\n    case VAL_MIX: {\n      return null;\n    }\n    case VAL_SPEC: {\n      return '';\n    }\n    default: {\n      if (nullable) {\n        return null;\n      }\n      return ['rgb', 0, 0, 0, 0] as SpecifiedColorChannels;\n    }\n  }\n};\n\n/**\n * validate color components\n * @param arr - color components\n * @param opt - options\n * @param opt.alpha - alpha channel\n * @param opt.minLength - min length\n * @param opt.maxLength - max length\n * @param opt.minRange - min range\n * @param opt.maxRange - max range\n * @param opt.validateRange - validate range\n * @returns result - validated color components\n */\nexport const validateColorComponents = (\n  arr: ColorChannels | TriColorChannels,\n  opt: {\n    alpha?: boolean;\n    minLength?: number;\n    maxLength?: number;\n    minRange?: number;\n    maxRange?: number;\n    validateRange?: boolean;\n  } = {}\n): ColorChannels | TriColorChannels => {\n  if (!Array.isArray(arr)) {\n    throw new TypeError(`${arr} is not an array.`);\n  }\n  const {\n    alpha = false,\n    minLength = TRIA,\n    maxLength = QUAD,\n    minRange = 0,\n    maxRange = 1,\n    validateRange = true\n  } = opt;\n  if (!Number.isFinite(minLength)) {\n    throw new TypeError(`${minLength} is not a number.`);\n  }\n  if (!Number.isFinite(maxLength)) {\n    throw new TypeError(`${maxLength} is not a number.`);\n  }\n  if (!Number.isFinite(minRange)) {\n    throw new TypeError(`${minRange} is not a number.`);\n  }\n  if (!Number.isFinite(maxRange)) {\n    throw new TypeError(`${maxRange} is not a number.`);\n  }\n  const l = arr.length;\n  if (l < minLength || l > maxLength) {\n    throw new Error(`Unexpected array length ${l}.`);\n  }\n  let i = 0;\n  while (i < l) {\n    const v = arr[i] as number;\n    if (!Number.isFinite(v)) {\n      throw new TypeError(`${v} is not a number.`);\n    } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) {\n      throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`);\n    } else if (i === TRIA && (v < 0 || v > 1)) {\n      throw new RangeError(`${v} is not between 0 and 1.`);\n    }\n    i++;\n  }\n  if (alpha && l === TRIA) {\n    arr.push(1);\n  }\n  return arr;\n};\n\n/**\n * transform matrix\n * @param mtx - 3 * 3 matrix\n * @param vct - vector\n * @param [skip] - skip validate\n * @returns TriColorChannels - [p1, p2, p3]\n */\nexport const transformMatrix = (\n  mtx: ColorMatrix,\n  vct: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  if (!Array.isArray(mtx)) {\n    throw new TypeError(`${mtx} is not an array.`);\n  } else if (mtx.length !== TRIA) {\n    throw new Error(`Unexpected array length ${mtx.length}.`);\n  } else if (!skip) {\n    for (let i of mtx) {\n      i = validateColorComponents(i as TriColorChannels, {\n        maxLength: TRIA,\n        validateRange: false\n      }) as TriColorChannels;\n    }\n  }\n  const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx;\n  let v1, v2, v3;\n  if (skip) {\n    [v1, v2, v3] = vct;\n  } else {\n    [v1, v2, v3] = validateColorComponents(vct, {\n      maxLength: TRIA,\n      validateRange: false\n    });\n  }\n  const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3;\n  const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3;\n  const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3;\n  return [p1, p2, p3];\n};\n\n/**\n * normalize color components\n * @param colorA - color components [v1, v2, v3, v4]\n * @param colorB - color components [v1, v2, v3, v4]\n * @param [skip] - skip validate\n * @returns result - [colorA, colorB]\n */\nexport const normalizeColorComponents = (\n  colorA: [number | string, number | string, number | string, number | string],\n  colorB: [number | string, number | string, number | string, number | string],\n  skip: boolean = false\n): [ColorChannels, ColorChannels] => {\n  if (!Array.isArray(colorA)) {\n    throw new TypeError(`${colorA} is not an array.`);\n  } else if (colorA.length !== QUAD) {\n    throw new Error(`Unexpected array length ${colorA.length}.`);\n  }\n  if (!Array.isArray(colorB)) {\n    throw new TypeError(`${colorB} is not an array.`);\n  } else if (colorB.length !== QUAD) {\n    throw new Error(`Unexpected array length ${colorB.length}.`);\n  }\n  let i = 0;\n  while (i < QUAD) {\n    if (colorA[i] === NONE && colorB[i] === NONE) {\n      colorA[i] = 0;\n      colorB[i] = 0;\n    } else if (colorA[i] === NONE) {\n      colorA[i] = colorB[i] as number;\n    } else if (colorB[i] === NONE) {\n      colorB[i] = colorA[i] as number;\n    }\n    i++;\n  }\n  if (skip) {\n    return [colorA as ColorChannels, colorB as ColorChannels];\n  }\n  const validatedColorA = validateColorComponents(colorA as ColorChannels, {\n    minLength: QUAD,\n    validateRange: false\n  });\n  const validatedColorB = validateColorComponents(colorB as ColorChannels, {\n    minLength: QUAD,\n    validateRange: false\n  });\n  return [validatedColorA as ColorChannels, validatedColorB as ColorChannels];\n};\n\n/**\n * number to hex string\n * @param value - numeric value\n * @returns hex string\n */\nexport const numberToHexString = (value: number): string => {\n  if (!Number.isFinite(value)) {\n    throw new TypeError(`${value} is not a number.`);\n  } else {\n    value = Math.round(value);\n    if (value < 0 || value > MAX_RGB) {\n      throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`);\n    }\n  }\n  let hex = value.toString(HEX);\n  if (hex.length === 1) {\n    hex = `0${hex}`;\n  }\n  return hex;\n};\n\n/**\n * angle to deg\n * @param angle\n * @returns deg: 0..360\n */\nexport const angleToDeg = (angle: string): number => {\n  if (isString(angle)) {\n    angle = angle.trim();\n  } else {\n    throw new TypeError(`${angle} is not a string.`);\n  }\n  const GRAD = DEG / 400;\n  const RAD = DEG / (Math.PI * DUO);\n  if (!REG_ANGLE_TO_DEG.test(angle)) {\n    throw new SyntaxError(`Invalid property value: ${angle}`);\n  }\n  const [, value, unit] = angle.match(REG_ANGLE_TO_DEG) as MatchedRegExp;\n  let deg;\n  switch (unit) {\n    case 'grad':\n      deg = parseFloat(value) * GRAD;\n      break;\n    case 'rad':\n      deg = parseFloat(value) * RAD;\n      break;\n    case 'turn':\n      deg = parseFloat(value) * DEG;\n      break;\n    default:\n      deg = parseFloat(value);\n  }\n  deg %= DEG;\n  if (deg < 0) {\n    deg += DEG;\n  } else if (Object.is(deg, -0)) {\n    deg = 0;\n  }\n  return deg;\n};\n\n/**\n * parse alpha\n * @param [alpha] - alpha value\n * @returns alpha: 0..1\n */\nexport const parseAlpha = (alpha: string = ''): number => {\n  if (isString(alpha)) {\n    alpha = alpha.trim();\n    if (!alpha) {\n      alpha = '1';\n    } else if (alpha === NONE) {\n      alpha = '0';\n    } else {\n      let a;\n      if (alpha.endsWith('%')) {\n        a = parseFloat(alpha) / MAX_PCT;\n      } else {\n        a = parseFloat(alpha);\n      }\n      if (!Number.isFinite(a)) {\n        throw new TypeError(`${a} is not a finite number.`);\n      }\n      if (a < PPTH) {\n        alpha = '0';\n      } else if (a > 1) {\n        alpha = '1';\n      } else {\n        alpha = a.toFixed(TRIA);\n      }\n    }\n  } else {\n    alpha = '1';\n  }\n  return parseFloat(alpha);\n};\n\n/**\n * parse hex alpha\n * @param value - alpha value in hex string\n * @returns alpha: 0..1\n */\nexport const parseHexAlpha = (value: string): number => {\n  if (isString(value)) {\n    if (value === '') {\n      throw new SyntaxError('Invalid property value: (empty string)');\n    }\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  let alpha = parseInt(value, HEX);\n  if (alpha <= 0) {\n    return 0;\n  }\n  if (alpha >= MAX_RGB) {\n    return 1;\n  }\n  const alphaMap = new Map();\n  for (let i = 1; i < MAX_PCT; i++) {\n    alphaMap.set(Math.round((i * MAX_RGB) / MAX_PCT), i);\n  }\n  if (alphaMap.has(alpha)) {\n    alpha = alphaMap.get(alpha) / MAX_PCT;\n  } else {\n    alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH;\n  }\n  return parseFloat(alpha.toFixed(TRIA));\n};\n\n/**\n * transform rgb to linear rgb\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..1\n */\nexport const transformRgbToLinearRgb = (\n  rgb: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  let rr, gg, bb;\n  if (skip) {\n    [rr, gg, bb] = rgb;\n  } else {\n    [rr, gg, bb] = validateColorComponents(rgb, {\n      maxLength: TRIA,\n      maxRange: MAX_RGB\n    });\n  }\n  let r = rr / MAX_RGB;\n  let g = gg / MAX_RGB;\n  let b = bb / MAX_RGB;\n  const COND_POW = 0.04045;\n  if (r > COND_POW) {\n    r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n  } else {\n    r /= LINEAR_COEF;\n  }\n  if (g > COND_POW) {\n    g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n  } else {\n    g /= LINEAR_COEF;\n  }\n  if (b > COND_POW) {\n    b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n  } else {\n    b /= LINEAR_COEF;\n  }\n  return [r, g, b];\n};\n\n/**\n * transform rgb to xyz\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyz = (\n  rgb: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  if (!skip) {\n    rgb = validateColorComponents(rgb, {\n      maxLength: TRIA,\n      maxRange: MAX_RGB\n    }) as TriColorChannels;\n  }\n  rgb = transformRgbToLinearRgb(rgb, true);\n  const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true);\n  return xyz;\n};\n\n/**\n * transform rgb to xyz-d50\n * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyzD50 = (\n  rgb: TriColorChannels\n): TriColorChannels => {\n  let xyz = transformRgbToXyz(rgb);\n  xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n  return xyz;\n};\n\n/**\n * transform linear rgb to rgb\n * @param rgb - [r, g, b] r|g|b: 0..1\n * @param [round] - round result\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformLinearRgbToRgb = (\n  rgb: TriColorChannels,\n  round: boolean = false\n): TriColorChannels => {\n  let [r, g, b] = validateColorComponents(rgb, {\n    maxLength: TRIA\n  });\n  const COND_POW = 809 / 258400;\n  if (r > COND_POW) {\n    r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n  } else {\n    r *= LINEAR_COEF;\n  }\n  r *= MAX_RGB;\n  if (g > COND_POW) {\n    g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n  } else {\n    g *= LINEAR_COEF;\n  }\n  g *= MAX_RGB;\n  if (b > COND_POW) {\n    b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n  } else {\n    b *= LINEAR_COEF;\n  }\n  b *= MAX_RGB;\n  return [\n    round ? Math.round(r) : r,\n    round ? Math.round(g) : g,\n    round ? Math.round(b) : b\n  ];\n};\n\n/**\n * transform xyz to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzToRgb = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  if (!skip) {\n    xyz = validateColorComponents(xyz, {\n      maxLength: TRIA,\n      validateRange: false\n    }) as TriColorChannels;\n  }\n  let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true);\n  [r, g, b] = transformLinearRgbToRgb(\n    [\n      Math.min(Math.max(r, 0), 1),\n      Math.min(Math.max(g, 0), 1),\n      Math.min(Math.max(b, 0), 1)\n    ],\n    true\n  );\n  return [r, g, b];\n};\n\n/**\n * transform xyz to xyz-d50\n * @param xyz - [x, y, z]\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformXyzToXyzD50 = (\n  xyz: TriColorChannels\n): TriColorChannels => {\n  xyz = validateColorComponents(xyz, {\n    maxLength: TRIA,\n    validateRange: false\n  }) as TriColorChannels;\n  xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n  return xyz;\n};\n\n/**\n * transform xyz to hsl\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, s, l]\n */\nexport const transformXyzToHsl = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  const [rr, gg, bb] = transformXyzToRgb(xyz, skip);\n  const r = rr / MAX_RGB;\n  const g = gg / MAX_RGB;\n  const b = bb / MAX_RGB;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const d = max - min;\n  const l = (max + min) * HALF * MAX_PCT;\n  let h, s;\n  if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) {\n    h = 0;\n    s = 0;\n  } else {\n    s = (d / (1 - Math.abs(max + min - 1))) * MAX_PCT;\n    if (s === 0) {\n      h = 0;\n    } else {\n      switch (max) {\n        case r:\n          h = (g - b) / d;\n          break;\n        case g:\n          h = (b - r) / d + DUO;\n          break;\n        case b:\n        default:\n          h = (r - g) / d + QUAD;\n          break;\n      }\n      h = (h * SEXA) % DEG;\n      if (h < 0) {\n        h += DEG;\n      }\n    }\n  }\n  return [h, s, l];\n};\n\n/**\n * transform xyz to hwb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, w, b]\n */\nexport const transformXyzToHwb = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  const [r, g, b] = transformXyzToRgb(xyz, skip);\n  const wh = Math.min(r, g, b) / MAX_RGB;\n  const bk = 1 - Math.max(r, g, b) / MAX_RGB;\n  let h;\n  if (wh + bk === 1) {\n    h = 0;\n  } else {\n    [h] = transformXyzToHsl(xyz);\n  }\n  return [h, wh * MAX_PCT, bk * MAX_PCT];\n};\n\n/**\n * transform xyz to oklab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzToOklab = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  if (!skip) {\n    xyz = validateColorComponents(xyz, {\n      maxLength: TRIA,\n      validateRange: false\n    }) as TriColorChannels;\n  }\n  const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true);\n  const xyzLms = lms.map(c => Math.cbrt(c)) as TriColorChannels;\n  let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true);\n  l = Math.min(Math.max(l, 0), 1);\n  const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n  if (lPct === 0 || lPct === MAX_PCT) {\n    a = 0;\n    b = 0;\n  }\n  return [l, a, b];\n};\n\n/**\n * transform xyz to oklch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzToOklch = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  const [l, a, b] = transformXyzToOklab(xyz, skip);\n  let c, h;\n  const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n  if (lPct === 0 || lPct === MAX_PCT) {\n    c = 0;\n    h = 0;\n  } else {\n    c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n    if (parseFloat(c.toFixed(QUAD)) === 0) {\n      h = 0;\n    } else {\n      h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n      if (h < 0) {\n        h += DEG;\n      }\n    }\n  }\n  return [l, c, h];\n};\n\n/**\n * transform xyz D50 to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzD50ToRgb = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  if (!skip) {\n    xyz = validateColorComponents(xyz, {\n      maxLength: TRIA,\n      validateRange: false\n    }) as TriColorChannels;\n  }\n  const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true);\n  const rgb = transformXyzToRgb(xyzD65, true);\n  return rgb;\n};\n\n/**\n * transform xyz-d50 to lab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzD50ToLab = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  if (!skip) {\n    xyz = validateColorComponents(xyz, {\n      maxLength: TRIA,\n      validateRange: false\n    }) as TriColorChannels;\n  }\n  const xyzD50 = xyz.map((val, i) => val / (D50[i] as number));\n  const [f0, f1, f2] = xyzD50.map(val =>\n    val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L\n  ) as TriColorChannels;\n  const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT);\n  let a, b;\n  if (l === 0 || l === MAX_PCT) {\n    a = 0;\n    b = 0;\n  } else {\n    a = (f0 - f1) * LAB_A;\n    b = (f1 - f2) * LAB_B;\n  }\n  return [l, a, b];\n};\n\n/**\n * transform xyz-d50 to lch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzD50ToLch = (\n  xyz: TriColorChannels,\n  skip: boolean = false\n): TriColorChannels => {\n  const [l, a, b] = transformXyzD50ToLab(xyz, skip);\n  let c, h;\n  if (l === 0 || l === MAX_PCT) {\n    c = 0;\n    h = 0;\n  } else {\n    c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n    h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n    if (h < 0) {\n      h += DEG;\n    }\n  }\n  return [l, c, h];\n};\n\n/**\n * convert rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n * @returns hex color\n */\nexport const convertRgbToHex = (rgb: ColorChannels): string => {\n  const [r, g, b, alpha] = validateColorComponents(rgb, {\n    alpha: true,\n    maxRange: MAX_RGB\n  }) as ColorChannels;\n  const rr = numberToHexString(r);\n  const gg = numberToHexString(g);\n  const bb = numberToHexString(b);\n  const aa = numberToHexString(alpha * MAX_RGB);\n  let hex;\n  if (aa === 'ff') {\n    hex = `#${rr}${gg}${bb}`;\n  } else {\n    hex = `#${rr}${gg}${bb}${aa}`;\n  }\n  return hex;\n};\n\n/**\n * convert linear rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1\n * @param [skip] - skip validate\n * @returns hex color\n */\nexport const convertLinearRgbToHex = (\n  rgb: ColorChannels,\n  skip: boolean = false\n): string => {\n  let r, g, b, alpha;\n  if (skip) {\n    [r, g, b, alpha] = rgb;\n  } else {\n    [r, g, b, alpha] = validateColorComponents(rgb, {\n      minLength: QUAD\n    }) as ColorChannels;\n  }\n  [r, g, b] = transformLinearRgbToRgb([r, g, b], true);\n  const rr = numberToHexString(r);\n  const gg = numberToHexString(g);\n  const bb = numberToHexString(b);\n  const aa = numberToHexString(alpha * MAX_RGB);\n  let hex;\n  if (aa === 'ff') {\n    hex = `#${rr}${gg}${bb}`;\n  } else {\n    hex = `#${rr}${gg}${bb}${aa}`;\n  }\n  return hex;\n};\n\n/**\n * convert xyz to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzToHex = (xyz: ColorChannels): string => {\n  const [x, y, z, alpha] = validateColorComponents(xyz, {\n    minLength: QUAD,\n    validateRange: false\n  }) as ColorChannels;\n  const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n  const hex = convertLinearRgbToHex(\n    [\n      Math.min(Math.max(r, 0), 1),\n      Math.min(Math.max(g, 0), 1),\n      Math.min(Math.max(b, 0), 1),\n      alpha\n    ],\n    true\n  );\n  return hex;\n};\n\n/**\n * convert xyz D50 to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzD50ToHex = (xyz: ColorChannels): string => {\n  const [x, y, z, alpha] = validateColorComponents(xyz, {\n    minLength: QUAD,\n    validateRange: false\n  }) as ColorChannels;\n  const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n  const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyzD65, true);\n  const hex = convertLinearRgbToHex([\n    Math.min(Math.max(r, 0), 1),\n    Math.min(Math.max(g, 0), 1),\n    Math.min(Math.max(b, 0), 1),\n    alpha\n  ]);\n  return hex;\n};\n\n/**\n * convert hex color to rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertHexToRgb = (value: string): ColorChannels => {\n  if (isString(value)) {\n    value = value.toLowerCase().trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  if (!(\n    /^#[\\da-f]{6}$/.test(value) ||\n    /^#[\\da-f]{3}$/.test(value) ||\n    /^#[\\da-f]{8}$/.test(value) ||\n    /^#[\\da-f]{4}$/.test(value)\n  )) {\n    throw new SyntaxError(`Invalid property value: ${value}`);\n  }\n  const arr: number[] = [];\n  if (/^#[\\da-f]{3}$/.test(value)) {\n    const [, r, g, b] = value.match(\n      /^#([\\da-f])([\\da-f])([\\da-f])$/\n    ) as MatchedRegExp;\n    arr.push(\n      parseInt(`${r}${r}`, HEX),\n      parseInt(`${g}${g}`, HEX),\n      parseInt(`${b}${b}`, HEX),\n      1\n    );\n  } else if (/^#[\\da-f]{4}$/.test(value)) {\n    const [, r, g, b, alpha] = value.match(\n      /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])$/\n    ) as MatchedRegExp;\n    arr.push(\n      parseInt(`${r}${r}`, HEX),\n      parseInt(`${g}${g}`, HEX),\n      parseInt(`${b}${b}`, HEX),\n      parseHexAlpha(`${alpha}${alpha}`)\n    );\n  } else if (/^#[\\da-f]{8}$/.test(value)) {\n    const [, r, g, b, alpha] = value.match(\n      /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n    ) as MatchedRegExp;\n    arr.push(\n      parseInt(r, HEX),\n      parseInt(g, HEX),\n      parseInt(b, HEX),\n      parseHexAlpha(alpha)\n    );\n  } else {\n    const [, r, g, b] = value.match(\n      /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n    ) as MatchedRegExp;\n    arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1);\n  }\n  return arr as ColorChannels;\n};\n\n/**\n * convert hex color to linear rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertHexToLinearRgb = (value: string): ColorChannels => {\n  const [rr, gg, bb, alpha] = convertHexToRgb(value);\n  const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true);\n  return [r, g, b, alpha];\n};\n\n/**\n * convert hex color to xyz\n * @param value - hex color value\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const convertHexToXyz = (value: string): ColorChannels => {\n  const [r, g, b, alpha] = convertHexToLinearRgb(value);\n  const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true);\n  return [x, y, z, alpha];\n};\n\n/**\n * parse rgb()\n * @param value - rgb color value\n * @param opt - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', null\n */\nexport const parseRgb = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.toLowerCase().trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_PARSE_RGB.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const [, val] = value.match(REG_PARSE_RGB) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let r, g, b;\n  if (v1 === NONE) {\n    r = 0;\n  } else {\n    if (v1.endsWith('%')) {\n      r = (parseFloat(v1) * MAX_RGB) / MAX_PCT;\n    } else {\n      r = parseFloat(v1);\n    }\n    r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB);\n  }\n  if (v2 === NONE) {\n    g = 0;\n  } else {\n    if (v2.endsWith('%')) {\n      g = (parseFloat(v2) * MAX_RGB) / MAX_PCT;\n    } else {\n      g = parseFloat(v2);\n    }\n    g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB);\n  }\n  if (v3 === NONE) {\n    b = 0;\n  } else {\n    if (v3.endsWith('%')) {\n      b = (parseFloat(v3) * MAX_RGB) / MAX_PCT;\n    } else {\n      b = parseFloat(v3);\n    }\n    b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB);\n  }\n  const alpha = parseAlpha(v4);\n  return ['rgb', r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha];\n};\n\n/**\n * parse hsl()\n * @param value - hsl color value\n * @param opt - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', null\n */\nexport const parseHsl = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_HSL.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const [, val] = value.match(REG_HSL) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let h, s, l;\n  if (v1 === NONE) {\n    h = 0;\n  } else {\n    h = angleToDeg(v1);\n  }\n  if (v2 === NONE) {\n    s = 0;\n  } else {\n    s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT);\n  }\n  if (v3 === NONE) {\n    l = 0;\n  } else {\n    l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT);\n  }\n  const alpha = parseAlpha(v4);\n  if (format === 'hsl') {\n    return [\n      format,\n      v1 === NONE ? v1 : h,\n      v2 === NONE ? v2 : s,\n      v3 === NONE ? v3 : l,\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  h = (h / DEG) * DOZ;\n  l /= MAX_PCT;\n  const sa = (s / MAX_PCT) * Math.min(l, 1 - l);\n  const rk = h % DOZ;\n  const gk = (8 + h) % DOZ;\n  const bk = (4 + h) % DOZ;\n  const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1));\n  const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1));\n  const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1));\n  return [\n    'rgb',\n    Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB),\n    Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB),\n    Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB),\n    alpha\n  ];\n};\n\n/**\n * parse hwb()\n * @param value - hwb color value\n * @param opt - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', null\n */\nexport const parseHwb = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_HWB.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const [, val] = value.match(REG_HWB) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let h, wh, bk;\n  if (v1 === NONE) {\n    h = 0;\n  } else {\n    h = angleToDeg(v1);\n  }\n  if (v2 === NONE) {\n    wh = 0;\n  } else {\n    wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT;\n  }\n  if (v3 === NONE) {\n    bk = 0;\n  } else {\n    bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT;\n  }\n  const alpha = parseAlpha(v4);\n  if (format === 'hwb') {\n    return [\n      format,\n      v1 === NONE ? v1 : h,\n      v2 === NONE ? v2 : wh * MAX_PCT,\n      v3 === NONE ? v3 : bk * MAX_PCT,\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  if (wh + bk >= 1) {\n    const v = roundToPrecision((wh / (wh + bk)) * MAX_RGB, OCT);\n    return ['rgb', v, v, v, alpha];\n  }\n  const factor = (1 - wh - bk) / MAX_RGB;\n  let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`) as ComputedColorChannels;\n  r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT);\n  g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT);\n  b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT);\n  return [\n    'rgb',\n    Math.min(Math.max(r, 0), MAX_RGB),\n    Math.min(Math.max(g, 0), MAX_RGB),\n    Math.min(Math.max(b, 0), MAX_RGB),\n    alpha\n  ];\n};\n\n/**\n * parse lab()\n * @param value - lab color value\n * @param opt - options\n * @returns parsed color\n *   - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', null\n */\nexport const parseLab = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_LAB.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const COEF_PCT = 1.25;\n  const COND_POW = 8;\n  const [, val] = value.match(REG_LAB) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let l, a, b;\n  if (v1 === NONE) {\n    l = 0;\n  } else {\n    if (v1.endsWith('%')) {\n      l = parseFloat(v1);\n      if (l > MAX_PCT) {\n        l = MAX_PCT;\n      }\n    } else {\n      l = parseFloat(v1);\n    }\n    if (l < 0) {\n      l = 0;\n    }\n  }\n  if (v2 === NONE) {\n    a = 0;\n  } else {\n    a = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n  }\n  if (v3 === NONE) {\n    b = 0;\n  } else {\n    b = v3.endsWith('%') ? parseFloat(v3) * COEF_PCT : parseFloat(v3);\n  }\n  const alpha = parseAlpha(v4);\n  if (REG_SPEC.test(format)) {\n    return [\n      'lab',\n      v1 === NONE ? v1 : roundToPrecision(l, HEX),\n      v2 === NONE ? v2 : roundToPrecision(a, HEX),\n      v3 === NONE ? v3 : roundToPrecision(b, HEX),\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  const fl = (l + HEX) / LAB_L;\n  const fa = a / LAB_A + fl;\n  const fb = fl - b / LAB_B;\n  const powFl = Math.pow(fl, POW_CUBE);\n  const powFa = Math.pow(fa, POW_CUBE);\n  const powFb = Math.pow(fb, POW_CUBE);\n  const xyz = [\n    powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA,\n    l > COND_POW ? powFl : l / LAB_KAPPA,\n    powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA\n  ];\n  const [x, y, z] = xyz.map(\n    (val, i) => val * (D50[i] as number)\n  ) as TriColorChannels;\n  return [\n    'xyz-d50',\n    roundToPrecision(x, HEX),\n    roundToPrecision(y, HEX),\n    roundToPrecision(z, HEX),\n    alpha\n  ];\n};\n\n/**\n * parse lch()\n * @param value - lch color value\n * @param opt - options\n * @returns parsed color\n *   - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha], '(empty)', null\n */\nexport const parseLch = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_LCH.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const COEF_PCT = 1.5;\n  const [, val] = value.match(REG_LCH) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let l, c, h;\n  if (v1 === NONE) {\n    l = 0;\n  } else {\n    l = parseFloat(v1);\n    if (l < 0) {\n      l = 0;\n    }\n  }\n  if (v2 === NONE) {\n    c = 0;\n  } else {\n    c = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n  }\n  if (v3 === NONE) {\n    h = 0;\n  } else {\n    h = angleToDeg(v3);\n  }\n  const alpha = parseAlpha(v4);\n  if (REG_SPEC.test(format)) {\n    return [\n      'lch',\n      v1 === NONE ? v1 : roundToPrecision(l, HEX),\n      v2 === NONE ? v2 : roundToPrecision(c, HEX),\n      v3 === NONE ? v3 : roundToPrecision(h, HEX),\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n  const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n  const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`) as ComputedColorChannels;\n  return [\n    'xyz-d50',\n    roundToPrecision(x, HEX),\n    roundToPrecision(y, HEX),\n    roundToPrecision(z, HEX),\n    alpha as number\n  ];\n};\n\n/**\n * parse oklab()\n * @param value - oklab color value\n * @param opt - options\n * @returns parsed color\n *   - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha], '(empty)', null\n */\nexport const parseOklab = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_OKLAB.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const COEF_PCT = 0.4;\n  const [, val] = value.match(REG_OKLAB) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let l, a, b;\n  if (v1 === NONE) {\n    l = 0;\n  } else {\n    l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n    if (l < 0) {\n      l = 0;\n    }\n  }\n  if (v2 === NONE) {\n    a = 0;\n  } else if (v2.endsWith('%')) {\n    a = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n  } else {\n    a = parseFloat(v2);\n  }\n  if (v3 === NONE) {\n    b = 0;\n  } else if (v3.endsWith('%')) {\n    b = (parseFloat(v3) * COEF_PCT) / MAX_PCT;\n  } else {\n    b = parseFloat(v3);\n  }\n  const alpha = parseAlpha(v4);\n  if (REG_SPEC.test(format)) {\n    return [\n      'oklab',\n      v1 === NONE ? v1 : roundToPrecision(l, HEX),\n      v2 === NONE ? v2 : roundToPrecision(a, HEX),\n      v3 === NONE ? v3 : roundToPrecision(b, HEX),\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n  const xyzLms = lms.map(c => Math.pow(c, POW_CUBE)) as TriColorChannels;\n  const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n  return [\n    'xyz-d65',\n    roundToPrecision(x, HEX),\n    roundToPrecision(y, HEX),\n    roundToPrecision(z, HEX),\n    alpha as number\n  ];\n};\n\n/**\n * parse oklch()\n * @param value - oklch color value\n * @param opt - options\n * @returns parsed color\n *   - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha], '(empty)', null\n */\nexport const parseOklch = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  if (!REG_OKLCH.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const COEF_PCT = 0.4;\n  const [, val] = value.match(REG_OKLCH) as MatchedRegExp;\n  const [v1, v2, v3, v4 = ''] = val.match(/[^\\s,/]+/g) as StringColorChannels;\n  let l, c, h;\n  if (v1 === NONE) {\n    l = 0;\n  } else {\n    l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n    if (l < 0) {\n      l = 0;\n    }\n  }\n  if (v2 === NONE) {\n    c = 0;\n  } else {\n    if (v2.endsWith('%')) {\n      c = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n    } else {\n      c = parseFloat(v2);\n    }\n    if (c < 0) {\n      c = 0;\n    }\n  }\n  if (v3 === NONE) {\n    h = 0;\n  } else {\n    h = angleToDeg(v3);\n  }\n  const alpha = parseAlpha(v4);\n  if (REG_SPEC.test(format)) {\n    return [\n      'oklch',\n      v1 === NONE ? v1 : roundToPrecision(l, HEX),\n      v2 === NONE ? v2 : roundToPrecision(c, HEX),\n      v3 === NONE ? v3 : roundToPrecision(h, HEX),\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n  const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n  const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n  const xyzLms = lms.map(cc => Math.pow(cc, POW_CUBE)) as TriColorChannels;\n  const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n  return [\n    'xyz-d65',\n    roundToPrecision(x, HEX),\n    roundToPrecision(y, HEX),\n    roundToPrecision(z, HEX),\n    alpha\n  ];\n};\n\n/**\n * parse color()\n * @param value - color function value\n * @param opt - options\n * @returns parsed color\n *   - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha], '(empty)', null\n */\nexport const parseColorFunc = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { colorSpace = '', d50 = false, format = '', nullable = false } = opt;\n  if (!REG_FN_COLOR.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n  let [cs, v1, v2, v3, v4 = ''] = val.match(\n    /[^\\s,/]+/g\n  ) as StringColorSpacedChannels;\n  let r, g, b;\n  if (cs === 'xyz') {\n    cs = 'xyz-d65';\n  }\n  if (v1 === NONE) {\n    r = 0;\n  } else {\n    r = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n  }\n  if (v2 === NONE) {\n    g = 0;\n  } else {\n    g = v2.endsWith('%') ? parseFloat(v2) / MAX_PCT : parseFloat(v2);\n  }\n  if (v3 === NONE) {\n    b = 0;\n  } else {\n    b = v3.endsWith('%') ? parseFloat(v3) / MAX_PCT : parseFloat(v3);\n  }\n  const alpha = parseAlpha(v4);\n  if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n    return [\n      cs,\n      v1 === NONE ? v1 : roundToPrecision(r, DEC),\n      v2 === NONE ? v2 : roundToPrecision(g, DEC),\n      v3 === NONE ? v3 : roundToPrecision(b, DEC),\n      v4 === NONE ? v4 : alpha\n    ];\n  }\n  let x = 0;\n  let y = 0;\n  let z = 0;\n  // srgb-linear\n  if (cs === 'srgb-linear') {\n    [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // display-p3\n  } else if (cs === 'display-p3') {\n    const linearRgb = transformRgbToLinearRgb([\n      r * MAX_RGB,\n      g * MAX_RGB,\n      b * MAX_RGB\n    ]);\n    [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // rec2020\n  } else if (cs === 'rec2020') {\n    const ALPHA = 1.09929682680944;\n    const BETA = 0.018053968510807;\n    const REC_COEF = 0.45;\n    const rgb = [r, g, b].map(c => {\n      let cl;\n      if (c < BETA * REC_COEF * DEC) {\n        cl = c / (REC_COEF * DEC);\n      } else {\n        cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF);\n      }\n      return cl;\n    }) as TriColorChannels;\n    [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // a98-rgb\n  } else if (cs === 'a98-rgb') {\n    const POW_A98 = 563 / 256;\n    const rgb = [r, g, b].map(c => {\n      const cl = Math.pow(c, POW_A98);\n      return cl;\n    }) as TriColorChannels;\n    [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // prophoto-rgb\n  } else if (cs === 'prophoto-rgb') {\n    const POW_PROPHOTO = 1.8;\n    const rgb = [r, g, b].map(c => {\n      let cl;\n      if (c > 1 / (HEX * DUO)) {\n        cl = Math.pow(c, POW_PROPHOTO);\n      } else {\n        cl = c / HEX;\n      }\n      return cl;\n    }) as TriColorChannels;\n    [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb);\n    if (!d50) {\n      [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n    }\n    // xyz, xyz-d50, xyz-d65\n  } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) {\n    [x, y, z] = [r, g, b];\n    if (cs === 'xyz-d50') {\n      if (!d50) {\n        [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]);\n      }\n    } else if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // srgb\n  } else {\n    [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n  }\n  return [\n    d50 ? 'xyz-d50' : 'xyz-d65',\n    roundToPrecision(x, HEX),\n    roundToPrecision(y, HEX),\n    roundToPrecision(z, HEX),\n    format === VAL_MIX && v4 === NONE ? v4 : alpha\n  ];\n};\n\n/**\n * parse color value\n * @param value - CSS color value\n * @param opt - options\n * @returns parsed color\n *   - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha]\n *   - value, '(empty)', null\n */\nexport const parseColorValue = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.toLowerCase().trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { d50 = false, format = '', nullable = false } = opt;\n  if (!REG_COLOR.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      return null;\n    } else if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  let x = 0;\n  let y = 0;\n  let z = 0;\n  let alpha = 0;\n  // complement currentcolor as a missing color\n  if (REG_CURRENT.test(value)) {\n    if (format === VAL_COMP) {\n      return ['rgb', 0, 0, 0, 0];\n    }\n    if (format === VAL_SPEC) {\n      return value;\n    }\n    // named-color\n  } else if (/^[a-z]+$/.test(value)) {\n    if (Object.hasOwn(NAMED_COLORS, value)) {\n      if (format === VAL_SPEC) {\n        return value;\n      }\n      const [r, g, b] = NAMED_COLORS[\n        value as keyof typeof NAMED_COLORS\n      ] as TriColorChannels;\n      alpha = 1;\n      if (format === VAL_COMP) {\n        return ['rgb', r, g, b, alpha];\n      }\n      [x, y, z] = transformRgbToXyz([r, g, b], true);\n      if (d50) {\n        [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n      }\n    } else {\n      switch (format) {\n        case VAL_COMP: {\n          if (nullable && value !== 'transparent') {\n            return null;\n          }\n          return ['rgb', 0, 0, 0, 0];\n        }\n        case VAL_SPEC: {\n          if (value === 'transparent') {\n            return value;\n          }\n          return '';\n        }\n        case VAL_MIX: {\n          if (value === 'transparent') {\n            return ['rgb', 0, 0, 0, 0];\n          }\n          return null;\n        }\n        default:\n      }\n    }\n    // hex-color\n  } else if (value[0] === '#') {\n    if (REG_SPEC.test(format)) {\n      const rgb = convertHexToRgb(value);\n      return ['rgb', ...rgb];\n    }\n    [x, y, z, alpha] = convertHexToXyz(value);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // lab()\n  } else if (value.startsWith('lab')) {\n    if (REG_SPEC.test(format)) {\n      return parseLab(value, opt);\n    }\n    [, x, y, z, alpha] = parseLab(value) as ComputedColorChannels;\n    if (!d50) {\n      [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n    }\n    // lch()\n  } else if (value.startsWith('lch')) {\n    if (REG_SPEC.test(format)) {\n      return parseLch(value, opt);\n    }\n    [, x, y, z, alpha] = parseLch(value) as ComputedColorChannels;\n    if (!d50) {\n      [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n    }\n    // oklab()\n  } else if (value.startsWith('oklab')) {\n    if (REG_SPEC.test(format)) {\n      return parseOklab(value, opt);\n    }\n    [, x, y, z, alpha] = parseOklab(value) as ComputedColorChannels;\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n    // oklch()\n  } else if (value.startsWith('oklch')) {\n    if (REG_SPEC.test(format)) {\n      return parseOklch(value, opt);\n    }\n    [, x, y, z, alpha] = parseOklch(value) as ComputedColorChannels;\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n  } else {\n    let r, g, b;\n    // hsl()\n    if (value.startsWith('hsl')) {\n      [, r, g, b, alpha] = parseHsl(value) as ComputedColorChannels;\n      // hwb()\n    } else if (value.startsWith('hwb')) {\n      [, r, g, b, alpha] = parseHwb(value) as ComputedColorChannels;\n      // rgb()\n    } else {\n      [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n    }\n    if (REG_SPEC.test(format)) {\n      return ['rgb', Math.round(r), Math.round(g), Math.round(b), alpha];\n    }\n    [x, y, z] = transformRgbToXyz([r, g, b]);\n    if (d50) {\n      [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n    }\n  }\n  return [\n    d50 ? 'xyz-d50' : 'xyz-d65',\n    roundToPrecision(x, HEX),\n    roundToPrecision(y, HEX),\n    roundToPrecision(z, HEX),\n    alpha\n  ];\n};\n\n/**\n * resolve color value\n * @param value - CSS color value\n * @param opt - options\n * @returns resolved color\n *   - [cs, v1, v2, v3, alpha], value, '(empty)', null\n */\nexport const resolveColorValue = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.toLowerCase().trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { colorSpace = '', format = '', nullable = false } = opt;\n  const cacheKey: string = createCacheKey(\n    {\n      namespace: NAMESPACE,\n      name: 'resolveColorValue',\n      value\n    },\n    opt\n  );\n  const cachedResult = getCache(cacheKey);\n  if (cachedResult !== false) {\n    return cachedResult.item as SpecifiedColorChannels | string | null;\n  }\n  if (!REG_COLOR.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      setCache(cacheKey, null);\n      return null;\n    }\n    setCache(cacheKey, res);\n    if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  let cs = '';\n  let r = 0;\n  let g = 0;\n  let b = 0;\n  let alpha = 0;\n  // complement currentcolor as a missing color\n  if (REG_CURRENT.test(value)) {\n    if (format === VAL_SPEC) {\n      setCache(cacheKey, value);\n      return value;\n    }\n    // named-color\n  } else if (/^[a-z]+$/.test(value)) {\n    if (Object.hasOwn(NAMED_COLORS, value)) {\n      if (format === VAL_SPEC) {\n        setCache(cacheKey, value);\n        return value;\n      }\n      [r, g, b] = NAMED_COLORS[\n        value as keyof typeof NAMED_COLORS\n      ] as TriColorChannels;\n      alpha = 1;\n    } else {\n      switch (format) {\n        case VAL_SPEC: {\n          if (value === 'transparent') {\n            setCache(cacheKey, value);\n            return value;\n          }\n          const res = '';\n          setCache(cacheKey, res);\n          return res;\n        }\n        case VAL_MIX: {\n          if (value === 'transparent') {\n            const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n            setCache(cacheKey, res);\n            return res;\n          }\n          setCache(cacheKey, null);\n          return null;\n        }\n        case VAL_COMP:\n        default: {\n          if (nullable && value !== 'transparent') {\n            setCache(cacheKey, null);\n            return null;\n          }\n          const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n          setCache(cacheKey, res);\n          return res;\n        }\n      }\n    }\n    // hex-color\n  } else if (value[0] === '#') {\n    [r, g, b, alpha] = convertHexToRgb(value);\n    // hsl()\n  } else if (value.startsWith('hsl')) {\n    [, r, g, b, alpha] = parseHsl(value, opt) as ComputedColorChannels;\n    // hwb()\n  } else if (value.startsWith('hwb')) {\n    [, r, g, b, alpha] = parseHwb(value, opt) as ComputedColorChannels;\n    // lab(), lch()\n  } else if (/^l(?:ab|ch)/.test(value)) {\n    let x, y, z;\n    if (value.startsWith('lab')) {\n      [cs, x, y, z, alpha] = parseLab(value, opt) as ComputedColorChannels;\n    } else {\n      [cs, x, y, z, alpha] = parseLch(value, opt) as ComputedColorChannels;\n    }\n    if (REG_SPEC.test(format)) {\n      const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n      setCache(cacheKey, res);\n      return res;\n    }\n    [r, g, b] = transformXyzD50ToRgb([x, y, z]);\n    // oklab(), oklch()\n  } else if (/^okl(?:ab|ch)/.test(value)) {\n    let x, y, z;\n    if (value.startsWith('oklab')) {\n      [cs, x, y, z, alpha] = parseOklab(value, opt) as ComputedColorChannels;\n    } else {\n      [cs, x, y, z, alpha] = parseOklch(value, opt) as ComputedColorChannels;\n    }\n    if (REG_SPEC.test(format)) {\n      const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n      setCache(cacheKey, res);\n      return res;\n    }\n    [r, g, b] = transformXyzToRgb([x, y, z]);\n    // rgb()\n  } else {\n    [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n  }\n  if (format === VAL_MIX && colorSpace === 'srgb') {\n    const res: SpecifiedColorChannels = [\n      'srgb',\n      r / MAX_RGB,\n      g / MAX_RGB,\n      b / MAX_RGB,\n      alpha\n    ];\n    setCache(cacheKey, res);\n    return res;\n  }\n  const res: SpecifiedColorChannels = [\n    'rgb',\n    Math.round(r),\n    Math.round(g),\n    Math.round(b),\n    alpha\n  ];\n  setCache(cacheKey, res);\n  return res;\n};\n\n/**\n * resolve color()\n * @param value - color function value\n * @param opt - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', null\n */\nexport const resolveColorFunc = (\n  value: string,\n  opt: Options = {}\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.toLowerCase().trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { colorSpace = '', format = '', nullable = false } = opt;\n  const cacheKey: string = createCacheKey(\n    {\n      namespace: NAMESPACE,\n      name: 'resolveColorFunc',\n      value\n    },\n    opt\n  );\n  const cachedResult = getCache(cacheKey);\n  if (cachedResult !== false) {\n    return cachedResult.item as SpecifiedColorChannels | string | null;\n  }\n  if (!REG_FN_COLOR.test(value)) {\n    const res = resolveInvalidColorValue(format, nullable);\n    if (res === null) {\n      setCache(cacheKey, null);\n      return null;\n    }\n    setCache(cacheKey, res);\n    if (isString(res)) {\n      return res as string;\n    }\n    return res as SpecifiedColorChannels;\n  }\n  const [cs, v1, v2, v3, v4] = parseColorFunc(\n    value,\n    opt\n  ) as SpecifiedColorChannels;\n  if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n    const res: SpecifiedColorChannels = [cs, v1, v2, v3, v4];\n    setCache(cacheKey, res);\n    return res;\n  }\n  const x = parseFloat(`${v1}`);\n  const y = parseFloat(`${v2}`);\n  const z = parseFloat(`${v3}`);\n  const alpha = parseAlpha(`${v4}`);\n  const [r, g, b] = transformXyzToRgb([x, y, z], true);\n  const res: SpecifiedColorChannels = ['rgb', r, g, b, alpha];\n  setCache(cacheKey, res);\n  return res;\n};\n\n/**\n * convert color value to linear rgb\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertColorToLinearRgb = (\n  value: string,\n  opt: {\n    colorSpace?: string;\n    format?: string;\n  } = {}\n): ColorChannels | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { colorSpace = '', format = '' } = opt;\n  let cs = '';\n  let r, g, b, alpha, x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [cs, x, y, z, alpha] = xyz as ComputedColorChannels;\n    if (cs === colorSpace) {\n      return [x, y, z, alpha];\n    }\n    [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n  } else if (value.startsWith(FN_COLOR)) {\n    const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n    const [cs] = val.match(/[^\\s,/]+/g) as StringColorSpacedChannels;\n    if (cs === 'srgb-linear') {\n      [, r, g, b, alpha] = resolveColorFunc(value, {\n        format: VAL_COMP\n      }) as ComputedColorChannels;\n    } else {\n      [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n      [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n    }\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n    [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n  }\n  return [\n    Math.min(Math.max(r, 0), 1),\n    Math.min(Math.max(g, 0), 1),\n    Math.min(Math.max(b, 0), 1),\n    alpha\n  ];\n};\n\n/**\n * convert color value to rgb\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertColorToRgb = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let r, g, b, alpha;\n  if (format === VAL_MIX) {\n    let rgb;\n    if (value.startsWith(FN_COLOR)) {\n      rgb = resolveColorFunc(value, opt);\n    } else {\n      rgb = resolveColorValue(value, opt);\n    }\n    if (rgb === null) {\n      return null;\n    }\n    [, r, g, b, alpha] = rgb as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n    const [cs] = val.match(/[^\\s,/]+/g) as StringColorSpacedChannels;\n    if (cs === 'srgb') {\n      [, r, g, b, alpha] = resolveColorFunc(value, {\n        format: VAL_COMP\n      }) as ComputedColorChannels;\n      r *= MAX_RGB;\n      g *= MAX_RGB;\n      b *= MAX_RGB;\n    } else {\n      [, r, g, b, alpha] = resolveColorFunc(value) as ComputedColorChannels;\n    }\n  } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) {\n    [r, g, b, alpha] = convertColorToLinearRgb(value) as ColorChannels;\n    [r, g, b] = transformLinearRgbToRgb([r, g, b]);\n  } else {\n    [, r, g, b, alpha] = resolveColorValue(value, {\n      format: VAL_COMP\n    }) as ComputedColorChannels;\n  }\n  return [r, g, b, alpha];\n};\n\n/**\n * convert color value to xyz\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [x, y, z, alpha]\n */\nexport const convertColorToXyz = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { d50 = false, format = '' } = opt;\n  let x, y, z, alpha;\n  if (format === VAL_MIX) {\n    let xyz;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n    const [cs] = val.match(/[^\\s,/]+/g) as StringColorSpacedChannels;\n    if (d50) {\n      if (cs === 'xyz-d50') {\n        [, x, y, z, alpha] = resolveColorFunc(value, {\n          format: VAL_COMP\n        }) as ComputedColorChannels;\n      } else {\n        [, x, y, z, alpha] = parseColorFunc(\n          value,\n          opt\n        ) as ComputedColorChannels;\n      }\n    } else if (/^xyz(?:-d65)?$/.test(cs)) {\n      [, x, y, z, alpha] = resolveColorFunc(value, {\n        format: VAL_COMP\n      }) as ComputedColorChannels;\n    } else {\n      [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n    }\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value, opt) as ComputedColorChannels;\n  }\n  return [x, y, z, alpha];\n};\n\n/**\n * convert color value to hsl\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [h, s, l, alpha], hue may be powerless\n */\nexport const convertColorToHsl = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let h, s, l, alpha;\n  if (REG_HSL.test(value)) {\n    [, h, s, l, alpha] = parseHsl(value, {\n      format: 'hsl'\n    }) as ComputedColorChannels;\n    if (format === 'hsl') {\n      return [Math.round(h), Math.round(s), Math.round(l), alpha];\n    }\n    return [h, s, l, alpha];\n  }\n  let x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n  }\n  [h, s, l] = transformXyzToHsl([x, y, z], true) as TriColorChannels;\n  if (format === 'hsl') {\n    return [Math.round(h), Math.round(s), Math.round(l), alpha];\n  }\n  return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha];\n};\n\n/**\n * convert color value to hwb\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [h, w, b, alpha], hue may be powerless\n */\nexport const convertColorToHwb = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let h, w, b, alpha;\n  if (REG_HWB.test(value)) {\n    [, h, w, b, alpha] = parseHwb(value, {\n      format: 'hwb'\n    }) as ComputedColorChannels;\n    if (format === 'hwb') {\n      return [Math.round(h), Math.round(w), Math.round(b), alpha];\n    }\n    return [h, w, b, alpha];\n  }\n  let x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n  }\n  [h, w, b] = transformXyzToHwb([x, y, z], true) as TriColorChannels;\n  if (format === 'hwb') {\n    return [Math.round(h), Math.round(w), Math.round(b), alpha];\n  }\n  return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha];\n};\n\n/**\n * convert color value to lab\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [l, a, b, alpha]\n */\nexport const convertColorToLab = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let l, a, b, alpha;\n  if (REG_LAB.test(value)) {\n    [, l, a, b, alpha] = parseLab(value, {\n      format: VAL_COMP\n    }) as ComputedColorChannels;\n    return [l, a, b, alpha];\n  }\n  let x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    opt.d50 = true;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    [, x, y, z, alpha] = parseColorFunc(value, {\n      d50: true\n    }) as ComputedColorChannels;\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value, {\n      d50: true\n    }) as ComputedColorChannels;\n  }\n  [l, a, b] = transformXyzD50ToLab([x, y, z], true);\n  return [l, a, b, alpha];\n};\n\n/**\n * convert color value to lch\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToLch = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let l, c, h, alpha;\n  if (REG_LCH.test(value)) {\n    [, l, c, h, alpha] = parseLch(value, {\n      format: VAL_COMP\n    }) as ComputedColorChannels;\n    return [l, c, h, alpha];\n  }\n  let x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    opt.d50 = true;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    [, x, y, z, alpha] = parseColorFunc(value, {\n      d50: true\n    }) as ComputedColorChannels;\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value, {\n      d50: true\n    }) as ComputedColorChannels;\n  }\n  [l, c, h] = transformXyzD50ToLch([x, y, z], true);\n  return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * convert color value to oklab\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [l, a, b, alpha]\n */\nexport const convertColorToOklab = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let l, a, b, alpha;\n  if (REG_OKLAB.test(value)) {\n    [, l, a, b, alpha] = parseOklab(value, {\n      format: VAL_COMP\n    }) as ComputedColorChannels;\n    return [l, a, b, alpha];\n  }\n  let x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n  }\n  [l, a, b] = transformXyzToOklab([x, y, z], true);\n  return [l, a, b, alpha];\n};\n\n/**\n * convert color value to oklch\n * @param value - CSS color value\n * @param opt - options\n * @returns ColorChannels | null - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToOklch = (\n  value: string,\n  opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | null => {\n  if (isString(value)) {\n    value = value.trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '' } = opt;\n  let l, c, h, alpha;\n  if (REG_OKLCH.test(value)) {\n    [, l, c, h, alpha] = parseOklch(value, {\n      format: VAL_COMP\n    }) as ComputedColorChannels;\n    return [l, c, h, alpha];\n  }\n  let x, y, z;\n  if (format === VAL_MIX) {\n    let xyz;\n    if (value.startsWith(FN_COLOR)) {\n      xyz = parseColorFunc(value, opt);\n    } else {\n      xyz = parseColorValue(value, opt);\n    }\n    if (xyz === null) {\n      return null;\n    }\n    [, x, y, z, alpha] = xyz as ComputedColorChannels;\n  } else if (value.startsWith(FN_COLOR)) {\n    [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n  } else {\n    [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n  }\n  [l, c, h] = transformXyzToOklch([x, y, z], true) as TriColorChannels;\n  return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * resolve color-mix()\n * @param value - color-mix color value\n * @param opt - options\n * @param resolver - resolver function\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', null\n */\nexport const resolveColorMix = (\n  value: string,\n  opt: Options = {},\n  resolver: (v: string, o?: Options) => string | null = () => null\n): SpecifiedColorChannels | string | null => {\n  if (isString(value)) {\n    value = value.toLowerCase().trim();\n  } else {\n    throw new TypeError(`${value} is not a string.`);\n  }\n  const { format = '', nullable = false } = opt;\n  const cacheKey: string = createCacheKey(\n    {\n      namespace: NAMESPACE,\n      name: 'resolveColorMix',\n      value\n    },\n    opt\n  );\n  const cachedResult = getCache(cacheKey);\n  if (cachedResult !== false) {\n    return cachedResult.item as SpecifiedColorChannels | string | null;\n  }\n  const nestedItems = [];\n  let colorSpace = '';\n  let hueArc = '';\n  let colorA = '';\n  let pctA = '';\n  let colorB = '';\n  let pctB = '';\n  let parsed = false;\n  if (!REG_MIX.test(value)) {\n    // nested color-mix()\n    if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) {\n      const items = value.match(REG_MIX_NEST) as RegExpMatchArray;\n      for (const item of items) {\n        if (item) {\n          let val = resolveColorMix(\n            item,\n            {\n              format: format === VAL_SPEC ? format : VAL_COMP\n            },\n            resolver\n          ) as ComputedColorChannels | string;\n          // computed value\n          if (Array.isArray(val)) {\n            const [cs, v1, v2, v3, v4] = val as ComputedColorChannels;\n            if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) {\n              value = '';\n              break;\n            }\n            if (REG_MIX_CS_RGB_XYZ.test(cs)) {\n              if (v4 === 1) {\n                val = `color(${cs} ${v1} ${v2} ${v3})`;\n              } else {\n                val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n              }\n            } else if (v4 === 1) {\n              val = `${cs}(${v1} ${v2} ${v3})`;\n            } else {\n              val = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n            }\n          } else if (!REG_MIX.test(val)) {\n            value = '';\n            break;\n          }\n          nestedItems.push(val);\n          value = value.replace(item, val);\n        }\n      }\n      if (!value) {\n        const res = cacheInvalidColorValue(cacheKey, format, nullable);\n        return res;\n      }\n      // contains light-dark()\n    } else if (\n      value.startsWith(FN_MIX) &&\n      value.endsWith(')') &&\n      value.includes(FN_LIGHT_DARK)\n    ) {\n      const colorParts = value.replace(FN_MIX, '').replace(/\\)$/, '');\n      const [csPart = '', partA = '', partB = ''] = splitValue(colorParts, {\n        delimiter: ','\n      });\n      const [colorPartA = '', pctPartA = ''] = splitValue(partA);\n      const [colorPartB = '', pctPartB = ''] = splitValue(partB);\n      const specifiedColorA = resolver(colorPartA, {\n        format: VAL_SPEC\n      }) as string;\n      const specifiedColorB = resolver(colorPartB, {\n        format: VAL_SPEC\n      }) as string;\n      if (REG_MIX_IN_CS.test(csPart) && specifiedColorA && specifiedColorB) {\n        if (format === VAL_SPEC) {\n          const [, cs] = csPart.match(REG_MIX_IN_CS) as MatchedRegExp;\n          if (REG_CS_HUE.test(cs)) {\n            [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n          } else {\n            colorSpace = cs;\n          }\n          colorA = specifiedColorA;\n          if (pctPartA) {\n            pctA = pctPartA;\n          }\n          colorB = specifiedColorB;\n          if (pctPartB) {\n            pctB = pctPartB;\n          }\n          value = value\n            .replace(colorPartA, specifiedColorA)\n            .replace(colorPartB, specifiedColorB);\n          parsed = true;\n        } else {\n          const resolvedColorA = resolver(colorPartA, opt);\n          const resolvedColorB = resolver(colorPartB, opt);\n          if (isString(resolvedColorA) && isString(resolvedColorB)) {\n            value = value\n              .replace(colorPartA, resolvedColorA)\n              .replace(colorPartB, resolvedColorB);\n          }\n        }\n      } else {\n        const res = cacheInvalidColorValue(cacheKey, format, nullable);\n        return res;\n      }\n    } else {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n  }\n  if (nestedItems.length && format === VAL_SPEC) {\n    const [, cs] = value.match(REG_MIX_START) as MatchedRegExp;\n    if (REG_CS_HUE.test(cs)) {\n      [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n    } else {\n      colorSpace = cs;\n    }\n    if (nestedItems.length === 2) {\n      let [itemA, itemB] = nestedItems as [string, string];\n      itemA = itemA.replace(/(?=[()])/g, '\\\\');\n      itemB = itemB.replace(/(?=[()])/g, '\\\\');\n      const regA = new RegExp(`(${itemA})(?:\\\\s+(${PCT}))?`);\n      const regB = new RegExp(`(${itemB})(?:\\\\s+(${PCT}))?`);\n      [, colorA, pctA] = value.match(regA) as MatchedRegExp;\n      [, colorB, pctB] = value.match(regB) as MatchedRegExp;\n    } else {\n      let [item] = nestedItems as [string];\n      item = item.replace(/(?=[()])/g, '\\\\');\n      const itemPart = `${item}(?:\\\\s+${PCT})?`;\n      const itemPartCapt = `(${item})(?:\\\\s+(${PCT}))?`;\n      const regItemPart = new RegExp(`^${itemPartCapt}$`);\n      const regLastItem = new RegExp(`${itemPartCapt}\\\\s*\\\\)$`);\n      // item is at the end\n      if (regLastItem.test(value)) {\n        const reg = new RegExp(\n          `(${SYN_MIX_PART})\\\\s*,\\\\s*(${itemPart})\\\\s*\\\\)$`\n        );\n        const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n        [, colorA, pctA] = colorPartA.match(\n          REG_MIX_COLOR_PART\n        ) as MatchedRegExp;\n        [, colorB, pctB] = colorPartB.match(regItemPart) as MatchedRegExp;\n      } else {\n        const reg = new RegExp(\n          `(${itemPart})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)$`\n        );\n        const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n        [, colorA, pctA] = colorPartA.match(regItemPart) as MatchedRegExp;\n        [, colorB, pctB] = colorPartB.match(\n          REG_MIX_COLOR_PART\n        ) as MatchedRegExp;\n      }\n    }\n  } else if (!parsed) {\n    const [, cs, colorPartA, colorPartB] = value.match(\n      REG_MIX_CAPT\n    ) as MatchedRegExp;\n    [, colorA, pctA] = colorPartA.match(REG_MIX_COLOR_PART) as MatchedRegExp;\n    [, colorB, pctB] = colorPartB.match(REG_MIX_COLOR_PART) as MatchedRegExp;\n    if (REG_CS_HUE.test(cs)) {\n      [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n    } else {\n      colorSpace = cs;\n    }\n  }\n  // normalize percentages and set multipler\n  let pA, pB, m;\n  if (pctA && pctB) {\n    const p1 = parseFloat(pctA) / MAX_PCT;\n    const p2 = parseFloat(pctB) / MAX_PCT;\n    if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || (p1 === 0 && p2 === 0)) {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n    const factor = p1 + p2;\n    pA = p1 / factor;\n    pB = p2 / factor;\n    m = factor < 1 ? factor : 1;\n  } else {\n    if (pctA) {\n      pA = parseFloat(pctA) / MAX_PCT;\n      if (pA < 0 || pA > 1) {\n        const res = cacheInvalidColorValue(cacheKey, format, nullable);\n        return res;\n      }\n      pB = 1 - pA;\n    } else if (pctB) {\n      pB = parseFloat(pctB) / MAX_PCT;\n      if (pB < 0 || pB > 1) {\n        const res = cacheInvalidColorValue(cacheKey, format, nullable);\n        return res;\n      }\n      pA = 1 - pB;\n    } else {\n      pA = HALF;\n      pB = HALF;\n    }\n    m = 1;\n  }\n  if (colorSpace === 'xyz') {\n    colorSpace = 'xyz-d65';\n  }\n  // specified value\n  if (format === VAL_SPEC) {\n    let valueA = '';\n    let valueB = '';\n    if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) {\n      valueA = colorA;\n    } else if (colorA.startsWith(FN_COLOR)) {\n      const [cs, v1, v2, v3, v4] = parseColorFunc(\n        colorA,\n        opt\n      ) as SpecifiedColorChannels;\n      if (v4 === 1) {\n        valueA = `color(${cs} ${v1} ${v2} ${v3})`;\n      } else {\n        valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n      }\n    } else {\n      const val = parseColorValue(colorA, opt);\n      if (Array.isArray(val)) {\n        const [cs, v1, v2, v3, v4] = val;\n        if (v4 === 1) {\n          if (cs === 'rgb') {\n            valueA = `${cs}(${v1}, ${v2}, ${v3})`;\n          } else {\n            valueA = `${cs}(${v1} ${v2} ${v3})`;\n          }\n        } else if (cs === 'rgb') {\n          valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n        } else {\n          valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n        }\n      } else {\n        if (!isString(val) || !val) {\n          setCache(cacheKey, '');\n          return '';\n        }\n        valueA = val;\n      }\n    }\n    if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) {\n      valueB = colorB;\n    } else if (colorB.startsWith(FN_COLOR)) {\n      const [cs, v1, v2, v3, v4] = parseColorFunc(\n        colorB,\n        opt\n      ) as SpecifiedColorChannels;\n      if (v4 === 1) {\n        valueB = `color(${cs} ${v1} ${v2} ${v3})`;\n      } else {\n        valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n      }\n    } else {\n      const val = parseColorValue(colorB, opt);\n      if (Array.isArray(val)) {\n        const [cs, v1, v2, v3, v4] = val;\n        if (v4 === 1) {\n          if (cs === 'rgb') {\n            valueB = `${cs}(${v1}, ${v2}, ${v3})`;\n          } else {\n            valueB = `${cs}(${v1} ${v2} ${v3})`;\n          }\n        } else if (cs === 'rgb') {\n          valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n        } else {\n          valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n        }\n      } else {\n        if (!isString(val) || !val) {\n          setCache(cacheKey, '');\n          return '';\n        }\n        valueB = val;\n      }\n    }\n    if (pctA && pctB) {\n      valueA += ` ${parseFloat(pctA)}%`;\n      valueB += ` ${parseFloat(pctB)}%`;\n    } else if (pctA) {\n      const pA = parseFloat(pctA);\n      if (pA !== MAX_PCT * HALF) {\n        valueA += ` ${pA}%`;\n      }\n    } else if (pctB) {\n      const pA = MAX_PCT - parseFloat(pctB);\n      if (pA !== MAX_PCT * HALF) {\n        valueA += ` ${pA}%`;\n      }\n    }\n    if (hueArc) {\n      const res = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`;\n      setCache(cacheKey, res);\n      return res;\n    } else {\n      const res = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`;\n      setCache(cacheKey, res);\n      return res;\n    }\n  }\n  let r = 0;\n  let g = 0;\n  let b = 0;\n  let alpha = 0;\n  // in srgb, srgb-linear\n  if (/^srgb(?:-linear)?$/.test(colorSpace)) {\n    let rgbA, rgbB;\n    if (colorSpace === 'srgb') {\n      if (REG_CURRENT.test(colorA)) {\n        rgbA = [NONE, NONE, NONE, NONE];\n      } else {\n        rgbA = convertColorToRgb(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        rgbB = [NONE, NONE, NONE, NONE];\n      } else {\n        rgbB = convertColorToRgb(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    } else {\n      if (REG_CURRENT.test(colorA)) {\n        rgbA = [NONE, NONE, NONE, NONE];\n      } else {\n        rgbA = convertColorToLinearRgb(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        rgbB = [NONE, NONE, NONE, NONE];\n      } else {\n        rgbB = convertColorToLinearRgb(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    }\n    if (rgbA === null || rgbB === null) {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n    const [rrA, ggA, bbA, aaA] = rgbA as NumStrColorChannels;\n    const [rrB, ggB, bbB, aaB] = rgbB as NumStrColorChannels;\n    const rNone = rrA === NONE && rrB === NONE;\n    const gNone = ggA === NONE && ggB === NONE;\n    const bNone = bbA === NONE && bbB === NONE;\n    const alphaNone = aaA === NONE && aaB === NONE;\n    const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] =\n      normalizeColorComponents(\n        [rrA, ggA, bbA, aaA],\n        [rrB, ggB, bbB, aaB],\n        true\n      );\n    const factorA = alphaA * pA;\n    const factorB = alphaB * pB;\n    alpha = factorA + factorB;\n    if (alpha === 0) {\n      r = rA * pA + rB * pB;\n      g = gA * pA + gB * pB;\n      b = bA * pA + bB * pB;\n    } else {\n      r = (rA * factorA + rB * factorB) / alpha;\n      g = (gA * factorA + gB * factorB) / alpha;\n      b = (bA * factorA + bB * factorB) / alpha;\n      alpha = parseFloat(alpha.toFixed(3));\n    }\n    if (format === VAL_COMP) {\n      const res: SpecifiedColorChannels = [\n        colorSpace,\n        rNone ? NONE : roundToPrecision(r, HEX),\n        gNone ? NONE : roundToPrecision(g, HEX),\n        bNone ? NONE : roundToPrecision(b, HEX),\n        alphaNone ? NONE : alpha * m\n      ];\n      setCache(cacheKey, res);\n      return res;\n    }\n    r *= MAX_RGB;\n    g *= MAX_RGB;\n    b *= MAX_RGB;\n    // in xyz, xyz-d65, xyz-d50\n  } else if (REG_CS_XYZ.test(colorSpace)) {\n    let xyzA, xyzB;\n    if (REG_CURRENT.test(colorA)) {\n      xyzA = [NONE, NONE, NONE, NONE];\n    } else {\n      xyzA = convertColorToXyz(colorA, {\n        colorSpace,\n        d50: colorSpace === 'xyz-d50',\n        format: VAL_MIX\n      });\n    }\n    if (REG_CURRENT.test(colorB)) {\n      xyzB = [NONE, NONE, NONE, NONE];\n    } else {\n      xyzB = convertColorToXyz(colorB, {\n        colorSpace,\n        d50: colorSpace === 'xyz-d50',\n        format: VAL_MIX\n      });\n    }\n    if (xyzA === null || xyzB === null) {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n    const [xxA, yyA, zzA, aaA] = xyzA;\n    const [xxB, yyB, zzB, aaB] = xyzB;\n    const xNone = xxA === NONE && xxB === NONE;\n    const yNone = yyA === NONE && yyB === NONE;\n    const zNone = zzA === NONE && zzB === NONE;\n    const alphaNone = aaA === NONE && aaB === NONE;\n    const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] =\n      normalizeColorComponents(\n        [xxA, yyA, zzA, aaA],\n        [xxB, yyB, zzB, aaB],\n        true\n      );\n    const factorA = alphaA * pA;\n    const factorB = alphaB * pB;\n    alpha = factorA + factorB;\n    let x, y, z;\n    if (alpha === 0) {\n      x = xA * pA + xB * pB;\n      y = yA * pA + yB * pB;\n      z = zA * pA + zB * pB;\n    } else {\n      x = (xA * factorA + xB * factorB) / alpha;\n      y = (yA * factorA + yB * factorB) / alpha;\n      z = (zA * factorA + zB * factorB) / alpha;\n      alpha = parseFloat(alpha.toFixed(3));\n    }\n    if (format === VAL_COMP) {\n      const res: SpecifiedColorChannels = [\n        colorSpace,\n        xNone ? NONE : roundToPrecision(x, HEX),\n        yNone ? NONE : roundToPrecision(y, HEX),\n        zNone ? NONE : roundToPrecision(z, HEX),\n        alphaNone ? NONE : alpha * m\n      ];\n      setCache(cacheKey, res);\n      return res;\n    }\n    if (colorSpace === 'xyz-d50') {\n      [r, g, b] = transformXyzD50ToRgb([x, y, z], true);\n    } else {\n      [r, g, b] = transformXyzToRgb([x, y, z], true);\n    }\n    // in hsl, hwb\n  } else if (/^h(?:sl|wb)$/.test(colorSpace)) {\n    let hslA, hslB;\n    if (colorSpace === 'hsl') {\n      if (REG_CURRENT.test(colorA)) {\n        hslA = [NONE, NONE, NONE, NONE];\n      } else {\n        hslA = convertColorToHsl(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        hslB = [NONE, NONE, NONE, NONE];\n      } else {\n        hslB = convertColorToHsl(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    } else {\n      if (REG_CURRENT.test(colorA)) {\n        hslA = [NONE, NONE, NONE, NONE];\n      } else {\n        hslA = convertColorToHwb(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        hslB = [NONE, NONE, NONE, NONE];\n      } else {\n        hslB = convertColorToHwb(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    }\n    if (hslA === null || hslB === null) {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n    const [hhA, ssA, llA, aaA] = hslA;\n    const [hhB, ssB, llB, aaB] = hslB;\n    const alphaNone = aaA === NONE && aaB === NONE;\n    let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents(\n      [hhA, ssA, llA, aaA],\n      [hhB, ssB, llB, aaB],\n      true\n    );\n    if (hueArc) {\n      [hA, hB] = interpolateHue(hA, hB, hueArc);\n    }\n    const factorA = alphaA * pA;\n    const factorB = alphaB * pB;\n    alpha = factorA + factorB;\n    const h = (hA * pA + hB * pB) % DEG;\n    let s, l;\n    if (alpha === 0) {\n      s = sA * pA + sB * pB;\n      l = lA * pA + lB * pB;\n    } else {\n      s = (sA * factorA + sB * factorB) / alpha;\n      l = (lA * factorA + lB * factorB) / alpha;\n      alpha = parseFloat(alpha.toFixed(3));\n    }\n    [r, g, b] = convertColorToRgb(\n      `${colorSpace}(${h} ${s} ${l})`\n    ) as ColorChannels;\n    if (format === VAL_COMP) {\n      const res: SpecifiedColorChannels = [\n        'srgb',\n        roundToPrecision(r / MAX_RGB, HEX),\n        roundToPrecision(g / MAX_RGB, HEX),\n        roundToPrecision(b / MAX_RGB, HEX),\n        alphaNone ? NONE : alpha * m\n      ];\n      setCache(cacheKey, res);\n      return res;\n    }\n    // in lch, oklch\n  } else if (/^(?:ok)?lch$/.test(colorSpace)) {\n    let lchA, lchB;\n    if (colorSpace === 'lch') {\n      if (REG_CURRENT.test(colorA)) {\n        lchA = [NONE, NONE, NONE, NONE];\n      } else {\n        lchA = convertColorToLch(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        lchB = [NONE, NONE, NONE, NONE];\n      } else {\n        lchB = convertColorToLch(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    } else {\n      if (REG_CURRENT.test(colorA)) {\n        lchA = [NONE, NONE, NONE, NONE];\n      } else {\n        lchA = convertColorToOklch(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        lchB = [NONE, NONE, NONE, NONE];\n      } else {\n        lchB = convertColorToOklch(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    }\n    if (lchA === null || lchB === null) {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n    const [llA, ccA, hhA, aaA] = lchA;\n    const [llB, ccB, hhB, aaB] = lchB;\n    const lNone = llA === NONE && llB === NONE;\n    const cNone = ccA === NONE && ccB === NONE;\n    const hNone = hhA === NONE && hhB === NONE;\n    const alphaNone = aaA === NONE && aaB === NONE;\n    let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents(\n      [llA, ccA, hhA, aaA],\n      [llB, ccB, hhB, aaB],\n      true\n    );\n    if (hueArc) {\n      [hA, hB] = interpolateHue(hA, hB, hueArc);\n    }\n    const factorA = alphaA * pA;\n    const factorB = alphaB * pB;\n    alpha = factorA + factorB;\n    const h = (hA * pA + hB * pB) % DEG;\n    let l, c;\n    if (alpha === 0) {\n      l = lA * pA + lB * pB;\n      c = cA * pA + cB * pB;\n    } else {\n      l = (lA * factorA + lB * factorB) / alpha;\n      c = (cA * factorA + cB * factorB) / alpha;\n      alpha = parseFloat(alpha.toFixed(3));\n    }\n    if (format === VAL_COMP) {\n      const res: SpecifiedColorChannels = [\n        colorSpace,\n        lNone ? NONE : roundToPrecision(l, HEX),\n        cNone ? NONE : roundToPrecision(c, HEX),\n        hNone ? NONE : roundToPrecision(h, HEX),\n        alphaNone ? NONE : alpha * m\n      ];\n      setCache(cacheKey, res);\n      return res;\n    }\n    [, r, g, b] = resolveColorValue(\n      `${colorSpace}(${l} ${c} ${h})`\n    ) as ComputedColorChannels;\n    // in lab, oklab\n  } else {\n    let labA, labB;\n    if (colorSpace === 'lab') {\n      if (REG_CURRENT.test(colorA)) {\n        labA = [NONE, NONE, NONE, NONE];\n      } else {\n        labA = convertColorToLab(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        labB = [NONE, NONE, NONE, NONE];\n      } else {\n        labB = convertColorToLab(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    } else {\n      if (REG_CURRENT.test(colorA)) {\n        labA = [NONE, NONE, NONE, NONE];\n      } else {\n        labA = convertColorToOklab(colorA, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n      if (REG_CURRENT.test(colorB)) {\n        labB = [NONE, NONE, NONE, NONE];\n      } else {\n        labB = convertColorToOklab(colorB, {\n          colorSpace,\n          format: VAL_MIX\n        });\n      }\n    }\n    if (labA === null || labB === null) {\n      const res = cacheInvalidColorValue(cacheKey, format, nullable);\n      return res;\n    }\n    const [llA, aaA, bbA, alA] = labA;\n    const [llB, aaB, bbB, alB] = labB;\n    const lNone = llA === NONE && llB === NONE;\n    const aNone = aaA === NONE && aaB === NONE;\n    const bNone = bbA === NONE && bbB === NONE;\n    const alphaNone = alA === NONE && alB === NONE;\n    const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] =\n      normalizeColorComponents(\n        [llA, aaA, bbA, alA],\n        [llB, aaB, bbB, alB],\n        true\n      );\n    const factorA = alphaA * pA;\n    const factorB = alphaB * pB;\n    alpha = factorA + factorB;\n    let l, aO, bO;\n    if (alpha === 0) {\n      l = lA * pA + lB * pB;\n      aO = aA * pA + aB * pB;\n      bO = bA * pA + bB * pB;\n    } else {\n      l = (lA * factorA + lB * factorB) / alpha;\n      aO = (aA * factorA + aB * factorB) / alpha;\n      bO = (bA * factorA + bB * factorB) / alpha;\n      alpha = parseFloat(alpha.toFixed(3));\n    }\n    if (format === VAL_COMP) {\n      const res: SpecifiedColorChannels = [\n        colorSpace,\n        lNone ? NONE : roundToPrecision(l, HEX),\n        aNone ? NONE : roundToPrecision(aO, HEX),\n        bNone ? NONE : roundToPrecision(bO, HEX),\n        alphaNone ? NONE : alpha * m\n      ];\n      setCache(cacheKey, res);\n      return res;\n    }\n    [, r, g, b] = resolveColorValue(\n      `${colorSpace}(${l} ${aO} ${bO})`\n    ) as ComputedColorChannels;\n  }\n  const res: SpecifiedColorChannels = [\n    'rgb',\n    Math.round(r),\n    Math.round(g),\n    Math.round(b),\n    parseFloat((alpha * m).toFixed(3))\n  ];\n  setCache(cacheKey, res);\n  return res;\n};\n"],"mappings":"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"}