{"version":3,"file":"index.mjs","sources":["src/util.js","src/rgb-hsl.js","src/rgb-hwb.js","src/rgb-hsv.js","src/rgb-xyz.js","src/hsl-hsv.js","src/hwb-hsv.js","src/lab-xyz.js","src/lab-lch.js","src/rgb-contrast.js","src/hex-rgb.js","src/keyword-rgb.js","src/lab-ciede.js","src/index.js"],"sourcesContent":["/**\n* @private\n* @func rgb2hue\n* @desc Return a hue angle from an RGB color\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Red (0 - 100)\n* @param {Number} b - Red (0 - 100)\n* @param {Number} f - Hue Fallback (0 - 360)\n* @return {Number} Hue Angle (0 - 360)\n* @example\n* rgb2hue(100, 0, 0)\n* @example\n* rgb2hue(100, 0, 0, 0)\n*/\n\nexport function rgb2hue(rgbR, rgbG, rgbB, fallbackhue = 0) {\n\tconst value     = rgb2value(rgbR, rgbG, rgbB);\n\tconst whiteness = rgb2whiteness(rgbR, rgbG, rgbB);\n\tconst delta     = value - whiteness;\n\n\tif (delta) {\n\t\t// calculate segment\n\t\tconst segment = value === rgbR\n\t\t\t? (rgbG - rgbB) / delta\n\t\t: value === rgbG\n\t\t\t? (rgbB - rgbR) / delta\n\t\t: (rgbR - rgbG) / delta;\n\n\t\t// calculate shift\n\t\tconst shift = value === rgbR\n\t\t\t? segment < 0\n\t\t\t\t? 360 / 60\n\t\t\t\t: 0 / 60\n\t\t: value === rgbG\n\t\t\t? 120 / 60\n\t\t: 240 / 60;\n\n\t\t// calculate hue\n\t\tconst hue = (segment + shift) * 60;\n\n\t\treturn hue;\n\t} else {\n\t\t// otherwise return the Hue Fallback\n\t\treturn fallbackhue;\n\t}\n}\n\n/**\n* @private\n* @func hue2rgb\n* @desc Return an RGB channel from a hue angle\n* @param {Number} t1\n* @param {Number} t2\n* @param {Number} h - Hue Angle (0 - 360)\n* @return {Number} RGB channel (0 - 100)\n* @example\n* hue2rgb(0, 0, 0)\n*/\n\nexport function hue2rgb(t1, t2, hue) {\n\t// calculate the ranged hue\n\tconst rhue = hue < 0 ? hue + 360 : hue > 360 ? hue - 360 : hue;\n\n\t// calculate the rgb value\n\tconst rgb = rhue * 6 < 360\n\t\t? t1 + (t2 - t1) * rhue / 60\n\t: rhue * 2 < 360\n\t\t? t2\n\t: rhue * 3 < 720\n\t\t? t1 + (t2 - t1) * (240 - rhue) / 60\n\t: t1;\n\n\treturn rgb;\n}\n\n/**\n* @private\n* @func luminance2contrast\n* @desc Return the contrast ratio between 2 luminance.\n* @param {Number} l1 - Relative luminance of one color\n* @param {Number} l2 - Relative luminance of another color\n* @return {Number} Contrast ratio between the 2 luminance\n* @example\n* luminance2contrast(0.2126, 0) // => 5.252\n* @link https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio\n*/\n\nexport function luminance2contrast(relativeLuminance1, relativeLuminance2) {\n\t// l1 is the relative luminance of the lighter of the colors\n\tconst l1 = max(relativeLuminance1, relativeLuminance2);\n\n\t// l1 is the relative luminance of the darker of the colors\n\tconst l2 = min(relativeLuminance1, relativeLuminance2);\n\n\treturn (l1 * precision + 0.05 * precision) / (l2 * precision + 0.05 * precision);\n}\n\n\n/* RGB tooling\n/* ========================================================================== */\n\nexport function rgb2value(rgbR, rgbG, rgbB) {\n\tconst value = max(rgbR, rgbG, rgbB);\n\n\treturn value;\n}\n\nexport function rgb2whiteness(rgbR, rgbG, rgbB) {\n\tconst whiteness = min(rgbR, rgbG, rgbB);\n\n\treturn whiteness;\n}\n\n/* Math matrix\n/* ========================================================================== */\n\nexport function matrix(params, mats) {\n\treturn mats.map(\n\t\tmat => mat.reduce(\n\t\t\t// (acc, value, index) => acc + params[index] * value,\n\t\t\t(acc, value, index) => acc + params[index] * precision * (value * precision) / precision / precision,\n\t\t\t0\n\t\t)\n\t);\n}\n\n/* Precision\n/* ========================================================================== */\n\nexport const precision = 100000000;\n\n/* D50 reference white\n/* ========================================================================== */\n\nexport const [ wd50X, wd50Y, wd50Z ] = [ 96.42, 100, 82.49 ];\n\n/* Math Expressions\n/* ========================================================================== */\n\nexport const atan2d = (y, x) => rad2deg(atan2(y, x)); // arc-tangent in degrees\nexport const cosd = x => cos(deg2rad(x)); // cosine of the specified angle in degrees\nexport const deg2rad = x => x * PI / 180; // degree to radian\nexport const rad2deg = x => x * 180 / PI; // radian to degree\nexport const sind = x => sin(deg2rad(x)); // sine in degrees\n\n/* Math Constants\n/* ========================================================================== */\n\nexport const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cbrt = Math.cbrt;\nexport const cos = Math.cos;\nexport const exp = Math.exp;\nexport const floor = Math.floor;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const PI = Math.PI;\nexport const pow = Math.pow;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = pow(6, 3) / pow(29, 3);\nexport const kappa = pow(29, 3) / pow(3, 3);\n","import { abs, rgb2hue, rgb2value, rgb2whiteness, hue2rgb } from './util';\n\n/**\n* @func rgb2hsl\n* @desc Return a HSL color from an RGB color\n* @param {Number} r - red (0 - 100)\n* @param {Number} g - green (0 - 100)\n* @param {Number} b - blue (0 - 100)\n* @param {Number=} f - Hue Fallback (0 - 360)\n* @return {ArrayHSL}\n* @example\n* rgb2hsl(0, 100, 100) // => [0, 100, 50]\n* @link https://www.w3.org/TR/css-color-3/#hsl-color\n* @link https://www.w3.org/TR/css-color-4/#hsl-to-rgb\n* @link https://www.rapidtables.com/convert/color/rgb-to-hsl.html\n* @link https://www.rapidtables.com/convert/color/hsl-to-rgb.html\n*/\n\nexport function rgb2hsl(rgbR, rgbG, rgbB, fallbackhue) {\n\tconst hslH = rgb2hue(rgbR, rgbG, rgbB, fallbackhue);\n\tconst hslV = rgb2value(rgbR, rgbG, rgbB);\n\tconst hslW = rgb2whiteness(rgbR, rgbG, rgbB);\n\n\t// calculate value/whiteness delta\n\tconst hslD = hslV - hslW;\n\n\t// calculate lightness\n\tconst hslL = (hslV + hslW) / 2;\n\n\t// calculate saturation\n\tconst hslS = hslD === 0 ? 0 : hslD / (100 - abs(2 * hslL - 100)) * 100;\n\n\treturn [ hslH, hslS, hslL ];\n}\n\n/**\n* @func hsl2rgb\n* @desc Return an RGB color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {ArrayRGB}\n* @example\n* hsl2rgb(0, 100, 50) // => [0, 100, 100]\n* @link https://www.w3.org/TR/css-color-3/#hsl-color\n* @link https://www.w3.org/TR/css-color-4/#hsl-to-rgb\n* @link https://www.rapidtables.com/convert/color/rgb-to-hsl.html\n* @link https://www.rapidtables.com/convert/color/hsl-to-rgb.html\n*/\n\nexport function hsl2rgb(hslH, hslS, hslL) {\n\t// calcuate t2\n\tconst t2 = hslL <= 50 ? hslL * (hslS + 100) / 100 : hslL + hslS - hslL * hslS / 100;\n\n\t// calcuate t1\n\tconst t1 = hslL * 2 - t2;\n\n\t// calculate rgb\n\tconst [ rgbR, rgbG, rgbB ] = [\n\t\thue2rgb(t1, t2, hslH + 120),\n\t\thue2rgb(t1, t2, hslH),\n\t\thue2rgb(t1, t2, hslH - 120)\n\t];\n\n\treturn [ rgbR, rgbG, rgbB ];\n}\n","import { rgb2hue, rgb2whiteness, rgb2value } from './util';\nimport { hsl2rgb } from './rgb-hsl';\n\n/**\n* @func rgb2hwb\n* @desc Return an HWB color from an RGB color\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Green (0 - 100)\n* @param {Number} b - Blue (0 - 100)\n* @param {Number} f - Hue Fallback (0 - 360)\n* @return {ArrayHWB}\n* @example\n* rgb2hwb(100, 0, 0) // => [0, 0, 0]\n* @link https://www.w3.org/TR/css-color-4/#hwb-to-rgb\n* @link http://alvyray.com/Papers/CG/hwb2rgb.htm\n*/\n\nexport function rgb2hwb(rgbR, rgbG, rgbB, fallbackhue) {\n\tconst hwbH = rgb2hue(rgbR, rgbG, rgbB, fallbackhue);\n\tconst hwbW = rgb2whiteness(rgbR, rgbG, rgbB);\n\tconst hwbV = rgb2value(rgbR, rgbG, rgbB);\n\tconst hwbB = 100 - hwbV;\n\n\treturn [hwbH, hwbW, hwbB];\n}\n\n/**\n* @func hwb2rgb\n* @desc Return an RGB color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {ArrayRGB}\n* @example\n* hwb2rgb(0, 0, 0) // => [100, 0, 0]\n* @link https://www.w3.org/TR/css-color-4/#hwb-to-rgb\n* @link http://alvyray.com/Papers/CG/hwb2rgb.htm\n*/\n\nexport function hwb2rgb(hwbH, hwbW, hwbB, fallbackhue) {\n\tconst [ rgbR, rgbG, rgbB ] = hsl2rgb(hwbH, 100, 50, fallbackhue).map(\n\t\tv => v * (100 - hwbW - hwbB) / 100 + hwbW\n\t);\n\n\treturn [ rgbR, rgbG, rgbB ];\n}\n","import { floor, rgb2value, rgb2whiteness, rgb2hue } from './util';\n\n/**\n* @func rgb2hsv\n* @desc Return an HSV color from an RGB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @param {Number=} f - Hue Fallback (0 - 360)\n* @return {ArrayHSV}\n* @example\n* rgb2hsv(100, 0, 0) // => [0, 100, 100]\n* @link http://alvyray.com/Papers/CG/hsv2rgb.htm\n*/\n\nexport function rgb2hsv(rgbR, rgbG, rgbB, fallbackhue) {\n\tconst hsvV = rgb2value(rgbR, rgbG, rgbB);\n\tconst hsvW = rgb2whiteness(rgbR, rgbG, rgbB);\n\tconst hsvH = rgb2hue(rgbR, rgbG, rgbB, fallbackhue);\n\n\t// calculate saturation\n\tconst hsvS = hsvV === hsvW ? 0 : (hsvV - hsvW) / hsvV * 100;\n\n\treturn [ hsvH, hsvS, hsvV ];\n}\n\n/**\n* @func hsv2rgb\n* @desc Return an RGB color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {ArrayRGB}\n* @example\n* hsv2rgb(100, 0, 0) // => [100, 0, 0]\n* @link http://alvyray.com/Papers/CG/hsv2rgb.htm\n*/\n\nexport function hsv2rgb(hsvH, hsvS, hsvV) {\n\tconst rgbI = floor(hsvH / 60);\n\n\t// calculate rgb parts\n\tconst rgbF = hsvH / 60 - rgbI & 1 ? hsvH / 60 - rgbI : 1 - hsvH / 60 - rgbI;\n\tconst rgbM = hsvV * (100 - hsvS) / 100;\n\tconst rgbN = hsvV * (100 - hsvS * rgbF) / 100;\n\tconst rgbT = hsvV * (100 - (100 - rgbF) * hsvS / 100) / 100;\n\n\tconst [ rgbR, rgbG, rgbB ] = rgbI === 5\n\t\t? [ hsvV, rgbM, rgbN ]\n\t: rgbI === 4\n\t\t? [ rgbT, rgbM, hsvV ]\n\t: rgbI === 3\n\t\t? [ rgbM, rgbN, hsvV ]\n\t: rgbI === 2\n\t\t? [ rgbM, hsvV, rgbT ]\n\t: rgbI === 1\n\t\t? [ rgbN, hsvV, rgbM ]\n\t: [ hsvV, rgbT, rgbM ];\n\n\treturn [ rgbR, rgbG, rgbB ];\n}\n","import { matrix, pow } from './util';\n\n/**\n* @func rgb2xyz\n* @desc Return an XYZ color from an RGB color\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Green (0 - 100)\n* @param {Number} b - Blue (0 - 100)\n* @return {ArrayXYZ}\n* @example\n* rgb2xyz(100, 0, 0) // => [41.25, 21.27, 1.93]\n* @link https://www.w3.org/TR/css-color-4/#rgb-to-lab\n* @link https://www.w3.org/TR/css-color-4/#color-conversion-code\n*/\n\nexport function rgb2xyz(rgbR, rgbG, rgbB) {\n\tconst [ lrgbR, lrgbB, lrgbG ] = [ rgbR, rgbG, rgbB ].map(\n\t\tv => v > 4.045 ? pow((v + 5.5) / 105.5, 2.4) * 100 : v / 12.92\n\t);\n\n\tconst [ xyzX, xyzY, xyzZ ] = matrix([ lrgbR, lrgbB, lrgbG ], [\n\t\t[0.4124564, 0.3575761, 0.1804375],\n\t\t[0.2126729, 0.7151522, 0.0721750],\n\t\t[0.0193339, 0.1191920, 0.9503041]\n\t]);\n\n\treturn [ xyzX, xyzY, xyzZ ];\n}\n\n/**\n* @func xyz2rgb\n* @desc Return an XYZ color from an RGB color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {ArrayRGB}\n* @example\n* xyz2rgb(41.25, 21.27, 1.93) // => [100, 0, 0]\n* @link https://www.w3.org/TR/css-color-4/#rgb-to-lab\n* @link https://www.w3.org/TR/css-color-4/#color-conversion-code\n*/\n\nexport function xyz2rgb(xyzX, xyzY, xyzZ) {\n\tconst [ lrgbR, lrgbB, lrgbG ] = matrix([ xyzX, xyzY, xyzZ ], [\n\t\t[ 3.2404542, -1.5371385, -0.4985314],\n\t\t[-0.9692660,  1.8760108,  0.0415560],\n\t\t[ 0.0556434, -0.2040259,  1.0572252]\n\t]);\n\n\tconst [ rgbR, rgbG, rgbB ] = [ lrgbR, lrgbB, lrgbG ].map(\n\t\tv => v > 0.31308 ? 1.055 * pow(v / 100, 1 / 2.4) * 100 - 5.5 : 12.92 * v\n\t);\n\n\treturn [ rgbR, rgbG, rgbB ];\n}\n","/**\n* @func hsl2hsv\n* @desc Return an HSV color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {ArrayHSV}\n* @example\n* hsl2hsv(0, 100, 50)\n* @link https://gist.github.com/defims/0ca2ef8832833186ed396a2f8a204117\n*/\n\nexport function hsl2hsv(hslH, hslS, hslL) {\n\tconst hsv1 = hslS * (hslL < 50 ? hslL : 100 - hslL) / 100;\n\tconst hsvS = hsv1 === 0 ? 0 : 2 * hsv1 / (hslL + hsv1) * 100;\n\tconst hsvV = hslL + hsv1;\n\n\treturn [ hslH, hsvS, hsvV ];\n}\n\n/**\n* @func hsv2hsl\n* @desc Return an HSL color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {ArrayHSL}\n* @example\n* hsv2hsl(0, 0, 0) // => [0, 100, 50]\n* @link https://gist.github.com/defims/0ca2ef8832833186ed396a2f8a204117\n*/\n\nexport function hsv2hsl(hsvH, hsvS, hsvV) {\n\tconst hslL = (200 - hsvS) * hsvV / 100;\n\n\tconst [ hslS, hslV ] = [\n\t\thslL === 0 || hslL === 200 ? 0 : hsvS * hsvV / 100 / (hslL <= 100 ? hslL : 200 - hslL) * 100,\n\t\thslL * 5 / 10\n\t];\n\n\treturn [ hsvH, hslS, hslV ];\n}\n","/**\n* @func hwb2hsv\n* @desc Return an HSV color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {ArrayHSV}\n* @example\n* hwb2hsv(0, 0, 0) // => [0, 100, 100]\n* @link https://en.wikipedia.org/wiki/HWB_color_model#Converting_to_and_from_HSV\n*/\n\nexport function hwb2hsv(hwbH, hwbW, hwbB) {\n\tconst [ hsvH, hsvS, hsvV ] = [\n\t\thwbH,\n\t\thwbB === 100 ? 0 : 100 - hwbW / (100 - hwbB) * 100,\n\t\t100 - hwbB\n\t];\n\n\treturn [ hsvH, hsvS, hsvV ];\n}\n\n\n/**\n* @func hsv2hwb\n* @desc Return an HWB color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {ArrayHWB}\n* @example\n* hsv2hwb(0, 100, 100) // => [0, 0, 0]\n* @link https://en.wikipedia.org/wiki/HWB_color_model#Converting_to_and_from_HSV\n*/\n\nexport function hsv2hwb(hsvH, hsvS, hsvV) {\n\tconst [ hwbH, hwbW, hwbB ] = [\n\t\thsvH,\n\t\t(100 - hsvS) * hsvV / 100,\n\t\t100 - hsvV\n\t];\n\n\treturn [ hwbH, hwbW, hwbB ];\n}\n","import { cbrt, epsilon, kappa, pow, wd50X, wd50Y, wd50Z, matrix } from './util';\n\n/**\n* @func lab2xyz\n* @desc Return an XYZ color from a LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @return {ArrayXYZ}\n* @example\n* lab2xyz(54.29, 80.82, 69.88) // => 41.25, 21.27, 1.93\n* @link https://www.w3.org/TR/css-color-4/#rgb-to-lab\n* @link https://www.w3.org/TR/css-color-4/#color-conversion-code\n* @link https://www.easyrgb.com/en/math.php\n*/\n\nexport function lab2xyz(labL, labA, labB) {\n\t// compute f, starting with the luminance-related term\n\tconst f2 = (labL + 16) / 116;\n\tconst f1 = labA / 500 + f2;\n\tconst f3 = f2 - labB / 200;\n\n\t// compute pre-scaled XYZ\n\tconst [ initX, initY, initZ ] = [\n\t\tpow(f1, 3) > epsilon   ? pow(f1, 3)                : (116 * f1 - 16) / kappa,\n\t\tlabL > kappa * epsilon ? pow((labL + 16) / 116, 3) : labL / kappa,\n\t\tpow(f3, 3) > epsilon   ? pow(f3, 3)                : (116 * f3 - 16) / kappa\n\t];\n\n\tconst [ xyzX, xyzY, xyzZ ] = matrix(\n\t\t// compute XYZ by scaling pre-scaled XYZ by reference white\n\t\t[ initX * wd50X, initY * wd50Y, initZ * wd50Z ],\n\t\t// calculate D65 XYZ from D50 XYZ\n\t\t[\n\t\t\t[ 0.9555766, -0.0230393,  0.0631636],\n\t\t\t[-0.0282895,  1.0099416,  0.0210077],\n\t\t\t[ 0.0122982, -0.0204830,  1.3299098]\n\t\t]\n\t);\n\n\treturn [ xyzX, xyzY, xyzZ ];\n}\n\n/**\n* @func xyz2lab\n* @desc Return an LAB color from a XYZ color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {ArrayLAB}\n* @example\n* xyz2lab(41.25, 21.27, 1.93) // => [54.29, 80.82, 69.88]\n* @link https://www.w3.org/TR/css-color-4/#rgb-to-lab\n* @link https://www.w3.org/TR/css-color-4/#color-conversion-code\n* @link https://www.easyrgb.com/en/math.php\n*/\n\nexport function xyz2lab(xyzX, xyzY, xyzZ) {\n\t// calculate D50 XYZ from D65 XYZ\n\tconst [ d50X, d50Y, d50Z ] = matrix([ xyzX, xyzY, xyzZ ], [\n\t\t[ 1.0478112,  0.0228866, -0.0501270],\n\t\t[ 0.0295424,  0.9904844, -0.0170491],\n\t\t[-0.0092345,  0.0150436,  0.7521316]\n\t]);\n\n\t// calculate f\n\tconst [ f1, f2, f3 ] = [\n\t\td50X / wd50X,\n\t\td50Y / wd50Y,\n\t\td50Z / wd50Z\n\t].map(\n\t\tvalue => value > epsilon ? cbrt(value) : (kappa * value + 16) / 116\n\t);\n\n\tconst [ labL, labA, labB ] = [\n\t\t116 * f2 - 16,\n\t\t500 * (f1 - f2),\n\t\t200 * (f2 - f3)\n\t];\n\n\treturn [ labL, labA, labB ];\n}\n","import { atan2, cosd, pow, rad2deg, sind, sqrt } from './util';\n\n/**\n* @func lab2lch\n* @desc Return an LCH color from a LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @return {ArrayLAB}\n* @example\n* lab2lch(54.29, 80.82, 69.88) // => [54.29, 106.84, 40.85]\n* @link https://www.w3.org/TR/css-color-4/#color-conversion-code\n* @link https://www.w3.org/TR/css-color-4/#lch-to-lab\n*/\n\nexport function lab2lch(labL, labA, labB) {\n\tconst [ lchC, lchH ] = [\n\t\tsqrt(pow(labA, 2) + pow(labB, 2)), // convert to chroma\n\t\trad2deg(atan2(labB, labA)) // convert to hue, in degrees\n\t];\n\n\treturn [ labL, lchC, lchH ];\n}\n\n/**\n* @func lch2lab\n* @desc Return a LAB color from an LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue Angle\n* @return {ArrayLCH}\n* @example\n* lch2lab(54.29, 106.84, 40.85) // => [54.29, 80.82, 69.88]\n* @link https://www.w3.org/TR/css-color-4/#color-conversion-code\n* @link https://www.w3.org/TR/css-color-4/#lch-to-lab\n*/\n\nexport function lch2lab(lchL, lchC, lchH) {\n\t// convert to Lab a and b from the polar form\n\tconst [ labA, labB ] = [\n\t\tlchC * cosd(lchH),\n\t\tlchC * sind(lchH)\n\t];\n\n\treturn [ lchL, labA, labB ];\n}\n","import { luminance2contrast, pow, precision } from './util'\n\n/**\n* @func rgb2contrast\n* @desc Return the contrast ratio of of RGB colors\n* @param {ArrayRGB} rgb1 - RGB Color Array\n* @param {ArrayRGB} rgb2 - RGB Color Array\n* @return {NumberContrast}\n* @example\n* rgb2contrast([100, 0, 0], [0, 0, 0]) // => 5.252\n* @link https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio\n*/\n\nexport default function rgb2contrast(rgb1, rgb2) {\n\tconst luminance1 = rgb2luminance(...rgb1);\n\tconst luminance2 = rgb2luminance(...rgb2);\n\n\treturn luminance2contrast(luminance1, luminance2);\n}\n\n/**\n* @private\n* @func rgb2luminance\n* @desc Return the relative brightness of RGB\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Green (0 - 100)\n* @param {Number} b - Blue (0 - 100)\n* @return {Number} Relative luminance of the color\n* @example\n* rgb2luminance(100, 0, 0) // => 0.2126\n* @link https://www.w3.org/TR/WCAG21/#dfn-relative-luminance\n*/\n\nexport function rgb2luminance(rgbR, rgbG, rgbB) {\n\treturn (adjustChannel(rgbR) * coefficientR + adjustChannel(rgbG) * coefficientG + adjustChannel(rgbB) * coefficientB) / precision;\n}\n\n// low-gamma adjust coefficients\nconst adjustChannel = x => x <= 3.928 ? x / lowc : adjustGamma(x);\nconst adjustGamma = x => pow((x + 5.5) / 105.5, 2.4);\nconst lowc = 1292;\n\n// red/green/blue coefficients\nconst coefficientR = 0.2126 * precision;\nconst coefficientG = 0.7152 * precision;\nconst coefficientB = 0.0722 * precision;\n","/**\n* @func hex2rgb\n* @desc Return an RGBA color from a Hex color.\n* @param {StringHex} hex\n* @return {ArrayRGBA}\n* @example\n* hex2rgb(\"#f00\") // => [100, 0, 0, 100]\n* hex2rgb(\"#f00f\") // => [100, 0, 0, 100]\n* @example\n* hex2rgb(\"#ff0000\") // => [100, 0, 0, 100]\n* hex2rgb(\"#ff0000ff\") // => [100, 0, 0, 100]\n*/\n\nexport function hex2rgb(hex) {\n\t// #<hex-color>{3,4,6,8}\n\tconst [, r, g, b, a, rr, gg, bb, aa] = hex.match(hexColorMatch) || [];\n\n\tif (rr !== undefined || r !== undefined) {\n\t\tconst red   = rr !== undefined ? parseInt(rr, 16) : parseInt(r + r, 16);\n\t\tconst green = gg !== undefined ? parseInt(gg, 16) : parseInt(g + g, 16);\n\t\tconst blue  = bb !== undefined ? parseInt(bb, 16) : parseInt(b + b, 16);\n\t\tconst alpha = aa !== undefined ? parseInt(aa, 16) : a !== undefined ? parseInt(a + a, 16) : 255;\n\n\t\treturn [red, green, blue, alpha].map(c => c * 100 / 255);\n\t}\n\n\treturn undefined;\n}\n\n/**\n* @func rgb2hex\n* @desc Return a HEX color from an RGB color\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Green (0 - 100)\n* @param {Number} b - Blue (0 - 100)\n* @return {StringHex}\n* @example\n* rgb2hex(100, 0, 0) // => \"#ff0000\"\n*/\n\nexport function rgb2hex(rgbR, rgbG, rgbB) {\n\treturn `#${((1 << 24) + (Math.round(rgbR * 255 / 100) << 16) + (Math.round(rgbG * 255 / 100) << 8) + Math.round(rgbB * 255 / 100)).toString(16).slice(1)}`;\n}\n\nconst hexColorMatch = /^#?(?:([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?|([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?)$/i;\n","/**\n* @func keyword2rgb\n* @desc Return an RGB color from a CSS keyword color\n* @param {StringKeyword} keyword\n* @return {ArrayRGB}\n* @example\n* keyword2rgb('red') // => [100, 0, 0]\n*/\n\nexport default function keyword2rgb(keyword) {\n\tconst rgb255 = keywords[String(keyword).toLowerCase()];\n\n\treturn rgb255 ? rgb255.map(x => x * 100 / 255) : null;\n}\n\nconst keywords = {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\ttransparent: [0, 0, 0],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50]\n};\n","import { abs, atan2d, cosd, exp, pow, sind, sqrt, precision } from './util';\n\n/* Return\n/* ========================================================================== */\n\n/**\n* @func lab2ciede\n* @desc Return the CIEDE2000 difference between 2 CIE LAB colors (International Commission on Illumination, Delta E).\n* @param {Array} lab1 - CIE LAB color\n* @param {Number} lab1.0 - Lightness\n* @param {Number} lab1.1 - Red/Green Coordinate\n* @param {Number} lab1.2 - Yellow/Blue Coordinate\n* @param {Array} lab2 - CIE LAB color\n* @param {Number} lab2.0 - Lightness\n* @param {Number} lab2.1 - Red/Green Coordinate\n* @param {Number} lab2.2 - Yellow/Blue Coordinate\n* @return {NumberCIEDE}\n* @example\n* lab2ciede([97.14, -21.56, 94.48], [0, 0, 0]) // => 100\n* @link https://en.wikipedia.org/wiki/Color_difference#CIEDE2000\n*/\n\nexport default function lab2ciede([L1, a1, b1], [L2, a2, b2]) {\n\tconst c1 = sqrt(pow(a1, 2) + pow(b1, 2));\n\tconst c2 = sqrt(pow(a2, 2) + pow(b2, 2));\n\n\tconst deltaLPrime = L2 - L1;\n\n\tconst lBar = (L1 + L2) / 2;\n\tconst cBar = (c1 + c2) / 2;\n\n\tconst cBarPow7 = pow(cBar, 7);\n\tconst cCoeff = sqrt(cBarPow7 / (cBarPow7 + pow(25, 7)));\n\tconst a1Prime = a1 + a1 / 2 * (1 - cCoeff);\n\tconst a2Prime = a2 + a2 / 2 * (1 - cCoeff);\n\n\tconst c1Prime = sqrt(a1Prime * a1Prime + b1 * b1);\n\tconst c2Prime = sqrt(a2Prime * a2Prime + b2 * b2);\n\tconst cBarPrime = (c1Prime + c2Prime) / 2;\n\tconst deltaCPrime = c2Prime - c1Prime;\n\n\tconst h1Prime = a1Prime === 0 && b1 === 0 ? 0 : atan2d(b1, a1Prime) % 360;\n\tconst h2Prime = a2Prime === 0 && b2 === 0 ? 0 : atan2d(b2, a2Prime) % 360;\n\n\tlet deltaSmallHPrime;\n\tlet deltaBigHPrime;\n\tlet hBarPrime;\n\n\tif (c1Prime === 0 || c2Prime === 0) {\n\t\tdeltaSmallHPrime = 0;\n\t\tdeltaBigHPrime = 0;\n\t\thBarPrime = h1Prime + h2Prime;\n\t} else {\n\t\tdeltaSmallHPrime = abs(h1Prime - h2Prime) <= 180\n\t\t\t? h2Prime - h1Prime\n\t\t: h2Prime <= h1Prime\n\t\t\t? h2Prime - h1Prime + 360\n\t\t: h2Prime - h1Prime - 360;\n\n\t\tdeltaBigHPrime = 2 * sqrt(c1Prime * c2Prime) * sind(deltaSmallHPrime / 2);\n\n\t\thBarPrime = abs(h1Prime - h2Prime) <= 180\n\t\t\t? (h1Prime + h2Prime) / 2\n\t\t: h1Prime + h2Prime < 360\n\t\t\t? (h1Prime + h2Prime + 360) / 2\n\t\t: (h1Prime + h2Prime - 360) / 2;\n\t}\n\n\tconst T = 1 - 0.17 * precision * cosd(hBarPrime - 30) + 0.24 * precision * cosd(2 * hBarPrime) + 0.32 * precision * cosd(3 * hBarPrime + 6) - 0.2 * precision * cosd(4 * hBarPrime - 63) / precision / precision;\n\n\tconst slCoeff = (lBar - 50) * (lBar - 50);\n\tconst sl = 1 + 0.015 * precision * slCoeff / sqrt(20 + slCoeff) / precision;\n\tconst sc = 1 + 0.045 * precision * cBarPrime / precision;\n\tconst sh = 1 + 0.015 * precision * cBarPrime * T / precision;\n\n\tconst RtCoeff = 60 * exp(-((hBarPrime - 275) / 25) * ((hBarPrime - 275) / 25));\n\tconst Rt = -2 * cCoeff * sind(RtCoeff);\n\n\tconst term1 = deltaLPrime / (kl * sl);\n\tconst term2 = deltaCPrime / (kc * sc);\n\tconst term3 = deltaBigHPrime / (kh * sh);\n\tconst term4 = Rt * term2 * term3;\n\n\treturn sqrt(term1 * term1 + term2 * term2 + term3 * term3 + term4);\n}\n\n// weight factors\nconst kl = 1;\nconst kc = 1;\nconst kh = 1;\n","import { rgb2hsl, hsl2rgb } from './rgb-hsl';\nimport { rgb2hwb, hwb2rgb } from './rgb-hwb';\nimport { rgb2hsv, hsv2rgb } from './rgb-hsv';\nimport { rgb2xyz, xyz2rgb } from './rgb-xyz';\nimport { hsl2hsv, hsv2hsl } from './hsl-hsv';\nimport { hwb2hsv, hsv2hwb } from './hwb-hsv';\nimport { lab2xyz, xyz2lab } from './lab-xyz';\nimport { lab2lch, lch2lab } from './lab-lch';\nimport rgb2contrast from './rgb-contrast';\nimport { hex2rgb, rgb2hex } from './hex-rgb';\nimport keyword2rgb from './keyword-rgb';\nimport lab2ciede from './lab-ciede';\n\n/* Convert between RGB and Lab\n/* ========================================================================== */\n\n/**\n* @func rgb2lab\n* @desc Return a CIE LAB color from an RGB color\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Green (0 - 100)\n* @param {Number} b - Blue (0 - 100)\n* @return {ArrayLAB}\n* @example\n* rgb2lab(100, 0, 0) // => [54.29, 80.82, 69.88]\n*/\n\nfunction rgb2lab(rgbR, rgbG, rgbB) {\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\n\treturn [ labL, labA, labB ];\n}\n\n/**\n* @func lab2rgb\n* @desc Return an RGB color from a CIE LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @return {ArrayRGBA}\n* @example\n* lab2rgb(54.29, 80.82, 69.88) // => [100, 0, 0]\n*/\n\nfunction lab2rgb(labL, labA, labB) {\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\n\treturn [ rgbR, rgbG, rgbB ];\n}\n\n/* Convert between RGB and LCH\n/* ========================================================================== */\n\n/**\n* @func rgb2lch\n* @desc Return a CIE LAB color from an RGB color\n* @param {Number} r - Red (0 - 100)\n* @param {Number} g - Green (0 - 100)\n* @param {Number} b - Blue (0 - 100)\n* @return {ArrayLCH}\n* @example\n* rgb2lch(100, 0, 0) // => [54.29, 106.84, 40.85]\n*/\n\nfunction rgb2lch(rgbR, rgbG, rgbB) {\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\tconst [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);\n\n\treturn [ lchL, lchC, lchH ];\n}\n\n/**\n* @func lch2rgb\n* @desc Return an RGB color from a CIE LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue\n* @return {ArrayRGBA}\n* @example\n* lch2rgb(54.29, 106.84, 40.85) // => [100, 0, 0]\n*/\n\nfunction lch2rgb(lchL, lchC, lchH) {\n\tconst [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\n\treturn [ rgbR, rgbG, rgbB ];\n}\n\n/* Convert between HSL and HWB\n/* ========================================================================== */\n\n/**\n* @func hwb2hsl\n* @desc Return an HSV color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {ArrayHSL}\n* @example\n* hwb2hsl(0, 0, 0) // => [0, 0, 100]\n*/\n\nfunction hwb2hsl(hwbH, hwbW, hwbB) {\n\tconst [ hsvH, hsvS, hsvV ] = hwb2hsv(hwbH, hwbW, hwbB);\n\tconst [ hslH, hslS, hslL ] = hsv2hsl(hsvH, hsvS, hsvV);\n\n\treturn [ hslH, hslS, hslL ];\n}\n\n/**\n* @func hsl2hwb\n* @desc Return an HWB color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {ArrayHWB}\n* @example\n* hsl2hwb(0, 0, 100) // => [0, 0, 0]\n*/\n\nfunction hsl2hwb(hslH, hslS, hslL) {\n\tconst [ , hsvS, hsvV ] = hsl2hsv(hslH, hslS, hslL);\n\tconst [ , hwbW, hwbB ] = hsv2hwb(hslH, hsvS, hsvV);\n\n\treturn [ hslH, hwbW, hwbB ];\n}\n\n/* Convert between HSL and Lab\n/* ========================================================================== */\n\n/**\n* @func hsl2lab\n* @desc Return a CIE LAB color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {ArrayLAB}\n* @example\n* hsl2lab(0, 100, 50) // => [54.29, 80.82, 69.88]\n*/\n\nfunction hsl2lab(hslH, hslS, hslL) {\n\tconst [ rgbR, rgbG, rgbB ] = hsl2rgb(hslH, hslS, hslL);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\n\treturn [ labL, labA, labB ];\n}\n\n/**\n* @func lab2hsl\n* @desc Return a HSL color from a CIE LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @param {Number=} f - Hue Fallback (0 - 360)\n* @return {ArrayHSL}\n* @example\n* lab2hsl(54.29, 80.82, 69.88) // => [0, 100, 50]\n*/\n\nfunction lab2hsl(labL, labA, labB, fallbackhue) {\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hslH, hslS, hslL ] = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hslH, hslS, hslL ];\n}\n\n/* Convert between HSL and LCH\n/* ========================================================================== */\n\n/**\n* @func hsl2lch\n* @desc Return a CIE LCH color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {ArrayLCH}\n* @example\n* hsl2lch(0, 100, 50) // => [54.29, 106.84, 40.85]\n*/\n\nfunction hsl2lch(hslH, hslS, hslL) {\n\tconst [ rgbR, rgbG, rgbB ] = hsl2rgb(hslH, hslS, hslL);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\tconst [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);\n\n\treturn [ lchL, lchC, lchH ];\n}\n\n/**\n* @func lch2hsl\n* @desc Return an HSL from a CIE LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue Angle\n* @return {ArrayLCH}\n* @example\n* lch2hsl(54.29, 106.84, 40.85) // => [0, 100, 50]\n*/\n\nfunction lch2hsl(lchL, lchC, lchH, fallbackhue) {\n\tconst [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hslH, hslS, hslL ] = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hslH, hslS, hslL ];\n}\n\n/* Convert between HSL and XYZ\n/* ========================================================================== */\n\n/**\n* @func hsl2xyz\n* @desc Return an XYZ color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {ArrayXYZ}\n* @example\n* hsl2xyz(0, 100, 50) // => [41.25, 21.27, 1.93]\n*/\n\nfunction hsl2xyz(hslH, hslS, hslL) {\n\tconst [ rgbR, rgbG, rgbB ] = hsl2rgb(hslH, hslS, hslL);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\n\treturn [ xyzX, xyzY, xyzZ ];\n}\n\n/**\n* @func xyz2hsl\n* @desc Return an HSL color from an XYZ color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {ArrayHSL}\n* @example\n* xyz2hsl(0, 100, 50) // => [41.25, 21.27, 1.93]\n*/\n\nfunction xyz2hsl(xyzX, xyzY, xyzZ, fallbackhue) {\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hslH, hslS, hslL ] = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hslH, hslS, hslL ];\n}\n\n/* Convert between HWB and Lab\n/* ========================================================================== */\n\n/**\n* @func hwb2lab\n* @desc Return a CIE LAB color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {ArrayLAB}\n* @example\n* hwb2lab(0, 0, 0) // => [54.29, 80.82, 69.88]\n*/\n\nfunction hwb2lab(hwbH, hwbW, hwbB) {\n\tconst [ rgbR, rgbG, rgbB ] = hwb2rgb(hwbH, hwbW, hwbB);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\n\treturn [ labL, labA, labB ];\n}\n\n/**\n* @func lab2hwb\n* @desc Return an HWB color from a CIE LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @return {ArrayHWB}\n* @example\n* lab2hwb(54.29, 80.82, 69.88) // => [0, 0, 0]\n*/\n\nfunction lab2hwb(labL, labA, labB, fallbackhue) {\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hwbH, hwbW, hwbB ] = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hwbH, hwbW, hwbB ];\n}\n\n/* Convert between HWB and LCH\n/* ========================================================================== */\n\n/**\n* @func hwb2lch\n* @desc Return a CIE LCH color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {ArrayLCH}\n* @example\n* hwb2lch(0, 0, 0) // => [54.29, 106.84, 40.85]\n*/\n\nfunction hwb2lch(hwbH, hwbW, hwbB) {\n\tconst [ rgbR, rgbG, rgbB ] = hwb2rgb(hwbH, hwbW, hwbB);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\tconst [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);\n\n\treturn [ lchL, lchC, lchH ];\n}\n\n/**\n* @func lch2hwb\n* @desc Return an HWB color from a CIE LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue Angle\n* @return {ArrayLCH}\n* @example\n* lch2hwb(54.29, 106.84, 40.85) // => [0, 0, 0]\n*/\n\nfunction lch2hwb(lchL, lchC, lchH, fallbackhue) {\n\tconst [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hwbH, hwbW, hwbB ] = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hwbH, hwbW, hwbB ];\n}\n\n/* Convert between HWB and XYZ\n/* ========================================================================== */\n\n/**\n* @func hwb2xyz\n* @desc Return an XYZ color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {ArrayXYZ}\n* @example\n* hwb2xyz(0, 0, 0) // => [41.25, 21.27, 1.93]\n*/\n\nfunction hwb2xyz(hwbH, hwbW, hwbB) {\n\tconst [ rgbR, rgbG, rgbB ] = hwb2rgb(hwbH, hwbW, hwbB);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\n\treturn [ xyzX, xyzY, xyzZ ];\n}\n\n/**\n* @func xyz2hwb\n* @desc Return an HWB color from an XYZ color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {ArrayXYZ}\n* @example\n* xyz2hwb(0, 0, 0) // => [41.25, 21.27, 1.93]\n*/\n\nfunction xyz2hwb(xyzX, xyzY, xyzZ, fallbackhue) {\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hwbH, hwbW, hwbB ] = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hwbH, hwbW, hwbB ];\n}\n\n/* Convert between HSV and Lab\n/* ========================================================================== */\n\n/**\n* @func hsv2lab\n* @desc Return a CIE LAB color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {ArrayLAB}\n* @example\n* hsv2lab(0, 100, 100) // => [54.29, 80.82, 69.88]\n*/\n\nfunction hsv2lab(hsvH, hsvS, hsvV) {\n\tconst [ rgbR, rgbG, rgbB ] = hsv2rgb(hsvH, hsvS, hsvV);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\n\treturn [ labL, labA, labB ];\n}\n\n/**\n* @func lab2hsv\n* @desc Return an HSV color from a CIE LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @return {ArrayHSV}\n* @example\n* lab2hsv(54.29, 80.82, 69.88) // => [0, 100, 100]\n*/\n\nfunction lab2hsv(labL, labA, labB, fallbackhue) {\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hsvH, hsvS, hsvV ] = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hsvH, hsvS, hsvV ];\n}\n\n/* Convert between HSV and LCH\n/* ========================================================================== */\n\n/**\n* @func hsv2lch\n* @desc Return a CIE LCH color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {ArrayLCH}\n* @example\n* hsv2lch(0, 100, 100) // => [54.29, 106.84, 40.85]\n*/\n\nfunction hsv2lch(hsvH, hsvS, hsvV) {\n\tconst [ rgbR, rgbG, rgbB ] = hsv2rgb(hsvH, hsvS, hsvV);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\tconst [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);\n\n\treturn [ lchL, lchC, lchH ];\n}\n\n/**\n* @func lch2hsv\n* @desc Return an HSV color from a CIE LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue Angle\n* @return {ArrayHSV}\n* @example\n* lch2hsv(54.29, 106.84, 40.85) // => [0, 100, 100]\n*/\n\nfunction lch2hsv(lchL, lchC, lchH, fallbackhue) {\n\tconst [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hsvH, hsvS, hsvV ] = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hsvH, hsvS, hsvV ];\n}\n\n/* Convert between HSV and XYZ\n/* ========================================================================== */\n\n/**\n* @func hsv2xyz\n* @desc Return an XYZ color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {ArrayXYZ}\n* @example\n* hsv2xyz(0, 100, 100) // => [41.25, 21.27, 1.93]\n*/\n\nfunction hsv2xyz(hsvH, hsvS, hsvV) {\n\tconst [ rgbR, rgbG, rgbB ] = hsv2rgb(hsvH, hsvS, hsvV);\n\tconst [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);\n\n\treturn [ xyzX, xyzY, xyzZ ];\n}\n\n/**\n* @func xyz2hsv\n* @desc Return an XYZ color from an HSV color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {ArrayHSV}\n* @example\n* xyz2hsv(41.25, 21.27, 1.93) // => [0, 100, 100]\n*/\n\nfunction xyz2hsv(xyzX, xyzY, xyzZ, fallbackhue) {\n\tconst [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);\n\tconst [ hsvH, hsvS, hsvV ] = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue);\n\n\treturn [ hsvH, hsvS, hsvV ];\n}\n\n/* Convert between XYZ and LCH\n/* ========================================================================== */\n\n/**\n* @func xyz2lch\n* @desc Return a CIE LCH color from an XYZ color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {ArrayLCH}\n* @example\n* xyz2lch(41.25, 21.27, 1.93) // => [54.29, 106.84, 40.85]\n*/\n\nfunction xyz2lch(xyzX, xyzY, xyzZ) {\n\tconst [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);\n\tconst [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);\n\n\treturn [ lchL, lchC, lchH ];\n}\n\n/**\n* @func lch2xyz\n* @desc Return an XYZ color from a CIE LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue Angle\n* @return {ArrayXYZ}\n* @example\n* lch2xyz(54.29, 106.84, 40.85) // => [41.25, 21.27, 1.93]\n*/\n\nfunction lch2xyz(lchL, lchC, lchH) {\n\tconst [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);\n\tconst [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);\n\n\treturn [ xyzX, xyzY, xyzZ ];\n}\n\n/* Hex input conversions\n/* ========================================================================== */\n\n/**\n* @func hex2hsl\n* @desc Return an HSL color from a Hex color\n* @param {StringHex} hex\n* @return {ArrayHSL}\n* @example\n* hex2hsl(\"#f00\") // => [0, 100, 50]\n*/\n\nfunction hex2hsl(hex) {\n\treturn rgb2hsl(...hex2rgb(hex));\n}\n\n/**\n* @func hex2hsv\n* @desc Return an HSL color from a Hex color\n* @param {StringHex} hex\n* @return {ArrayHSV}\n* @example\n* hex2hsv(\"#f00\") // => [0, 100, 100]\n*/\n\nfunction hex2hsv(hex) {\n\treturn rgb2hsv(...hex2rgb(hex));\n}\n\n/**\n* @func hex2hwb\n* @desc Return an HWB color from a Hex color\n* @param {StringHex} hex\n* @return {ArrayHWB}\n* @example\n* hex2hwb(\"#f00\") // => [0, 0, 0]\n*/\n\nfunction hex2hwb(hex) {\n\treturn rgb2hwb(...hex2rgb(hex));\n}\n\n/**\n* @func hex2lab\n* @desc Return a CIE LAB color from a Hex color\n* @param {StringHex} hex\n* @return {ArrayLAB}\n* @example\n* hex2lab(\"#f00\") // => [54.29, 80.82, 69.88]\n*/\n\nfunction hex2lab(hex) {\n\treturn rgb2lab(...hex2rgb(hex));\n}\n\n/**\n* @func hex2lch\n* @desc Return a CIE LCH color from a Hex color\n* @param {StringHex} hex\n* @return {ArrayLCH}\n* @example\n* hex2lch(\"#f00\") // => [54.29, 106.84, 40.85]\n*/\n\nfunction hex2lch(hex) {\n\treturn rgb2lch(...hex2rgb(hex));\n}\n\n/**\n* @func hex2xyz\n* @desc Return an XYZ color from a Hex color\n* @param {StringHex} hex\n* @return {ArrayXYZ}\n* @example\n* hex2xyz(\"#f00\") // => [41.25, 21.27, 1.93]\n*/\n\nfunction hex2xyz(hex) {\n\treturn rgb2xyz(...hex2rgb(hex));\n}\n\n/* Hex output conversions\n/* ========================================================================== */\n\n/**\n* @func hsl2hex\n* @desc Return a Hex color from an HSL color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} l - Lightness (0 - 100)\n* @return {StringHex}\n* @example\n* hsl2hex(0, 100, 50) // => \"#f00\"\n*/\n\nfunction hsl2hex(hslH, hslS, hslL) {\n\treturn rgb2hex(...hsl2rgb(hslH, hslS, hslL));\n}\n\n/**\n* @func hsv2hex\n* @desc Return a Hex color from an HSV color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} s - Saturation (0 - 100)\n* @param {Number} v - Value (0 - 100)\n* @return {StringHex}\n* @example\n* hsv2hex(0, 100, 100) // => \"#f00\"\n*/\n\nfunction hsv2hex(hsvH, hsvS, hsvV) {\n\treturn rgb2hex(...hsl2rgb(hsvH, hsvS, hsvV));\n}\n\n/**\n* @func hwb2hex\n* @desc Return a Hex color from an HWB color\n* @param {Number} h - Hue Angle (0 - 360)\n* @param {Number} w - Whiteness (0 - 100)\n* @param {Number} b - Blackness (0 - 100)\n* @return {StringHex}\n* @example\n* hwb2hex(0, 0, 0) // => \"#f00\"\n*/\n\nfunction hwb2hex(hwbH, hwbW, hwbB) {\n\treturn rgb2hex(...hwb2rgb(hwbH, hwbW, hwbB));\n}\n\n/**\n* @func lab2hex\n* @desc Return a Hex color from a CIE LAB color\n* @param {Number} l - CIE Lightness\n* @param {Number} a - Red/Green Coordinate\n* @param {Number} b - Yellow/Blue Coordinate\n* @return {StringHex}\n* @example\n* lab2hex(54.29, 80.82, 69.88) // => \"#f00\"\n*/\n\nfunction lab2hex(labL, labA, labB) {\n\treturn rgb2hex(...lab2rgb(labL, labA, labB));\n}\n\n/**\n* @func lch2hex\n* @desc Return a Hex color from a CIE LCH color\n* @param {Number} l - CIE Lightness\n* @param {Number} c - CIE Chroma\n* @param {Number} h - CIE Hue Angle\n* @return {StringHex}\n* @example\n* lch2hex(54.29, 106.84, 40.85) // => \"#f00\"\n*/\n\nfunction lch2hex(lchL, lchC, lchH) {\n\treturn rgb2hex(...lch2rgb(lchL, lchC, lchH));\n}\n\n/**\n* @func xyz2hex\n* @desc Return a Hex color from an XYZ color\n* @param {Number} x - Chromaticity of X\n* @param {Number} y - Chromaticity of Y\n* @param {Number} z - Chromaticity of Z\n* @return {StringHex}\n* @example\n* xyz2hex(41.25, 21.27, 1.93) // => \"#f00\"\n*/\n\nfunction xyz2hex(xyzX, xyzY, xyzZ) {\n\treturn rgb2hex(...xyz2rgb(xyzX, xyzY, xyzZ));\n}\n\n/* CIEDE conversions\n/* ========================================================================== */\n\n/**\n* @func hex2ciede\n* @desc Return the CIEDE2000 difference between 2 HEX colors\n* @param {StringHex} hex1\n* @param {StringHex} hex2\n* @return {NumberCIEDE}\n* @example\n* hex2ciede('#fff', '#000') // => 100\n*/\n\nfunction hex2ciede(hex1, hex2) {\n\treturn lab2ciede(hex2lab(hex1), hex2lab(hex2));\n}\n\n/**\n* @func hsl2ciede\n* @desc Return the CIEDE2000 difference between 2 HSL colors\n* @param {ArrayHSL} hsl1\n* @param {ArrayHSL} hsl2\n* @return {NumberCIEDE}\n* @example\n* hsl2ciede([0, 0, 100], [0, 0, 0]) // => 100\n*/\n\nfunction hsl2ciede(hsl1, hsl2) {\n\treturn lab2ciede(hsl2lab(...hsl1), hsl2lab(...hsl2));\n}\n\n/**\n* @func hsv2ciede\n* @desc Return the CIEDE2000 difference between 2 HSV colors\n* @param {ArrayHSV} hsl1\n* @param {ArrayHSV} hsl2\n* @return {NumberCIEDE}.\n* @example\n* hsv2ciede([0, 0, 40], [0, 0, 0]) // => 100\n*/\n\nfunction hsv2ciede(hsv1, hsv2) {\n\treturn lab2ciede(hsv2lab(...hsv1), hsv2lab(...hsv2));\n}\n\n/**\n* @func hwb2ciede\n* @desc Return the CIEDE2000 difference between 2 HWB colors\n* @param {ArrayHWB} hwb1\n* @param {ArrayHWB} hwb2\n* @return {NumberCIEDE}.\n* @example\n* hwb2ciede([0, 0, 40], [0, 0, 0]) // => 100\n*/\n\nfunction hwb2ciede(hwb1, hwb2) {\n\treturn lab2ciede(hwb2lab(...hwb1), hwb2lab(...hwb2));\n}\n\n/**\n* @func keyword2ciede\n* @desc Return the CIEDE2000 difference between 2 keyword colors\n* @param {StringKeyword} keyword1\n* @param {StringKeyword} keyword2\n* @return {NumberCIEDE}.\n* @example\n* keyword2ciede('white', 'black') // => 100\n*/\n\nfunction keyword2ciede(keyword1, keyword2) {\n\treturn lab2ciede(keyword2lab(keyword1), keyword2lab(keyword2));\n}\n\n/**\n* @func lch2ciede\n* @desc Return the CIEDE2000 difference between 2 LCH colors\n* @param {ArrayLCH} lch1\n* @param {ArrayLCH} lch2\n* @return {NumberCIEDE}.\n* @example\n* lch2ciede([100, 0.03, -82.2], [0, 0, 0]) // => 100\n*/\n\nfunction lch2ciede(lch1, lch2) {\n\treturn lab2ciede(lch2lab(...lch1), lch2lab(...lch2));\n}\n\n/**\n* @func rgb2ciede\n* @desc Return the CIEDE2000 difference between 2 RGB colors\n* @param {ArrayRGB} rgb1\n* @param {ArrayRGB} rgb2\n* @return {NumberCIEDE}.\n* @example\n* rgb2ciede([100, 100, 100], [0, 0, 0]) // => 100\n*/\n\nfunction rgb2ciede(rgb1, rgb2) {\n\treturn lab2ciede(rgb2lab(...rgb1), rgb2lab(...rgb2));\n}\n\n/**\n* @func xyz2ciede\n* @desc Return the CIEDE2000 difference between 2 XYZ colors\n* @param {ArrayXYZ} xyz1\n* @param {ArrayXYZ} xyz2\n* @return {NumberCIEDE}.\n* @example\n* xyz2ciede([95.05, 100, 108.88], [0, 0, 0]) // => 100\n*/\n\nfunction xyz2ciede(xyz1, xyz2) {\n\treturn lab2ciede(xyz2lab(...xyz1), xyz2lab(...xyz2));\n}\n\n/* Contrast conversions\n/* ========================================================================== */\n\n/**\n* @func hex2contrast\n* @desc Return the contrast ratio of 2 HEX colors\n* @param {StringHex} hex1\n* @param {StringHex} hex2\n* @return {NumberContrast}\n* @example\n* rgb2contrast(\"#fff\", '#000') // => 21\n*/\n\nfunction hex2contrast(hex1, hex2) {\n\treturn rgb2contrast(hex2rgb(hex1), hex2rgb(hex2));\n}\n\n/**\n* @func hsl2contrast\n* @desc Return the contrast ratio of 2 HSL colors\n* @param {ArrayHSL} hsl1\n* @param {ArrayHSL} hsl2\n* @return {NumberContrast}\n* @example\n* hsl2contrast([0, 0, 100], [0, 0, 0]) // => 21\n*/\n\nfunction hsl2contrast(hsl1, hsl2) {\n\treturn rgb2contrast(hsl2rgb(...hsl1), hsl2rgb(...hsl2));\n}\n\n/**\n* @func hsv2contrast\n* @desc Return the contrast ratio of 2 HSV colors\n* @param {ArrayHSV} hsv1\n* @param {ArrayHSV} hsv2\n* @return {NumberContrast}\n* @example\n* hsv2contrast([0, 0, 100], [0, 0, 0]) // => 21\n*/\n\nfunction hsv2contrast(hsv1, hsv2) {\n\treturn rgb2contrast(hsv2rgb(...hsv1), hsv2rgb(...hsv2));\n}\n\n/**\n* @func hwb2contrast\n* @desc Return the contrast ratio of 2 HWB colors\n* @param {ArrayHWB} hwb1\n* @param {ArrayHWB} hwb2\n* @return {NumberContrast}\n* @example\n* hwb2contrast([0, 100, 0], [0, 0, 100]) // => 21\n*/\n\nfunction hwb2contrast(hwb1, hwb2) {\n\treturn rgb2contrast(hwb2rgb(...hwb1), hwb2rgb(...hwb2));\n}\n\n/**\n* @func keyword2contrast\n* @desc Return the contrast ratio of 2 keyword colors\n* @param {StringKeyword} keyword1\n* @param {StringKeyword} keyword2\n* @return {NumberContrast}\n* @example\n* keyword2contrast('white', 'black') // => 21\n*/\n\nfunction keyword2contrast(keyword1, keyword2) {\n\treturn rgb2contrast(keyword2rgb(keyword1), keyword2rgb(keyword2));\n}\n\n/**\n* @func lab2contrast\n* @desc Return the contrast ratio of 2 LAB colors\n* @param {ArrayLAB} lab1\n* @param {ArrayLAB} lab2\n* @return {NumberContrast}\n* @example\n* lab2contrast([100, 0.003, -0.025], [0, 0, 0]) // => 21\n*/\n\nfunction lab2contrast(lab1, lab2) {\n\treturn rgb2contrast(lab2rgb(...lab1), lab2rgb(...lab2));\n}\n\n/**\n* @func lch2contrast\n* @desc Return the contrast ratio of 2 LCH colors\n* @param {ArrayLCH} lch1\n* @param {ArrayLCH} lch2\n* @return {NumberContrast}\n* @example\n* lch2contrast([100, 0.025, -82.2], [0, 0, 0]) // => 21\n*/\n\nfunction lch2contrast(lch1, lch2) {\n\treturn rgb2contrast(lch2rgb(...lch1), lch2rgb(...lch2));\n}\n\n/**\n* @func xyz2contrast\n* @desc Return the contrast ratio of 2 XYZ colors\n* @param {ArrayXYZ} xyz1\n* @param {ArrayXYZ} xyz2\n* @return {NumberContrast}\n* @example\n* xyz2contrast([95.05, 100, 108.88], [0, 0, 0]) // => 21\n*/\n\nfunction xyz2contrast(xyz1, xyz2) {\n\treturn rgb2contrast(xyz2rgb(...xyz1), xyz2rgb(...xyz2));\n}\n\n/* Keyword Conversions\n/* ========================================================================== */\n\n/**\n* @func keyword2hex\n* @desc Return an RGB color from a keyword color\n* @param {StringKeyword} keyword - CSS Color Keyword\n* @return {String}\n* @example\n* keyword2hex('white') // => \"#ffffff\"\n*/\n\nfunction keyword2hex(keyword) {\n\treturn rgb2hex(...keyword2rgb(keyword));\n}\n\n/**\n* @func keyword2hsl\n* @desc Return an HSL color from a keyword color\n* @param {StringKeyword}\n* @return {ArrayHSL}\n* @example\n* keyword2hsl('white') // => [0, 0, 100]\n*/\n\nfunction keyword2hsl(keyword) {\n\treturn rgb2hsl(...keyword2rgb(keyword));\n}\n\n/**\n* @func keyword2hsv\n* @desc Return an HSV color from a keyword color\n* @param {StringKeyword}\n* @return {ArrayHSV}\n* @example\n* keyword2hsv('white') // => [0, 0, 100]\n*/\n\nfunction keyword2hsv(keyword) {\n\treturn rgb2hsv(...keyword2rgb(keyword));\n}\n\n/**\n* @func keyword2hwb\n* @desc Return an HWB color from a keyword color\n* @param {StringKeyword}\n* @return {ArrayHWB}\n* @example\n* keyword2hwb('red') // => [0, 0, 0]\n*/\n\nfunction keyword2hwb(keyword) {\n\treturn rgb2hwb(...keyword2rgb(keyword));\n}\n\n/**\n* @func keyword2lab\n* @desc Return a CIE LAB color from a keyword color\n* @param {StringKeyword}\n* @return {ArrayLAB}\n* @example\n* keyword2lab('red') // => [54.29, 80.82, 69.88]\n*/\n\nfunction keyword2lab(keyword) {\n\treturn rgb2lab(...keyword2rgb(keyword));\n}\n\n/**\n* @func keyword2lch\n* @desc Return a CIE LCH color from a keyword color\n* @param {StringKeyword}\n* @return {ArrayLCH}\n* @example\n* keyword2lch('red') // => [54.29, 106.84, 40.85]\n*/\n\nfunction keyword2lch(keyword) {\n\treturn rgb2lch(...keyword2rgb(keyword));\n}\n\n/**\n* @func keyword2lch\n* @desc Return an XYZ color from a keyword color\n* @param {StringKeyword}\n* @return {ArrayXYZ}\n* @example\n* keyword2lch('red') // => [41.25, 21.27, 1.93]\n*/\n\nfunction keyword2xyz(keyword) {\n\treturn rgb2xyz(...keyword2rgb(keyword));\n}\n\n/* All Conversions\n/* ========================================================================== */\n\nexport {\n\thex2ciede,\n\thex2contrast,\n\thex2hsl,\n\thex2hsv,\n\thex2hwb,\n\thex2lab,\n\thex2lch,\n\thex2rgb,\n\thex2xyz,\n\n\thsl2ciede,\n\thsl2contrast,\n\thsl2hex,\n\thsl2hsv,\n\thsl2hwb,\n\thsl2lab,\n\thsl2lch,\n\thsl2rgb,\n\thsl2xyz,\n\n\thsv2ciede,\n\thsv2contrast,\n\thsv2hex,\n\thsv2hsl,\n\thsv2hwb,\n\thsv2lab,\n\thsv2lch,\n\thsv2rgb,\n\thsv2xyz,\n\n\thwb2ciede,\n\thwb2contrast,\n\thwb2hex,\n\thwb2hsl,\n\thwb2hsv,\n\thwb2lab,\n\thwb2lch,\n\thwb2rgb,\n\thwb2xyz,\n\n\tkeyword2ciede,\n\tkeyword2contrast,\n\tkeyword2hex,\n\tkeyword2hsl,\n\tkeyword2hsv,\n\tkeyword2hwb,\n\tkeyword2lab,\n\tkeyword2lch,\n\tkeyword2rgb,\n\tkeyword2xyz,\n\n\tlab2ciede,\n\tlab2contrast,\n\tlab2hex,\n\tlab2hsl,\n\tlab2hsv,\n\tlab2hwb,\n\tlab2lch,\n\tlab2rgb,\n\tlab2xyz,\n\n\tlch2ciede,\n\tlch2contrast,\n\tlch2hex,\n\tlch2hsl,\n\tlch2hsv,\n\tlch2hwb,\n\tlch2lab,\n\tlch2rgb,\n\tlch2xyz,\n\n\trgb2ciede,\n\trgb2contrast,\n\trgb2hex,\n\trgb2hsl,\n\trgb2hsv,\n\trgb2hwb,\n\trgb2lab,\n\trgb2lch,\n\trgb2xyz,\n\n\txyz2ciede,\n\txyz2contrast,\n\txyz2hex,\n\txyz2hsl,\n\txyz2hsv,\n\txyz2hwb,\n\txyz2lab,\n\txyz2lch,\n\txyz2rgb\n};\n\n/**\n* @typedef {Array} ArrayRGB\n* An array of red, green, and blue channels.\n* @property {Number} 0 - Red (0 - 100)\n* @property {Number} 1 - Green (0 - 100)\n* @property {Number} 2 - Blue (0 - 100)\n*\n*/\n/**\n* @typedef {Array} ArrayRGBA\n* An array of red, green, blue, and alpha channels.\n* @property {Number} 0 - Red (0 - 100)\n* @property {Number} 1 - Green (0 - 100)\n* @property {Number} 2 - Blue (0 - 100)\n* @property {Number} 3 - Alpha (0 - 100)\n*/\n/**\n* @typedef {Array} ArrayHSL\n* An array of hue, saturation, and lightness channels.\n* @property {Number} 0 - Hue Angle (0 - 360)\n* @property {Number} 1 - Saturation (0 - 100)\n* @property {Number} 2 - Lightness (0 - 100)\n*/\n/**\n* @typedef {Array} ArrayHSV\n* An array of hue, saturation, and value channels.\n* @property {Number} 0 - Hue Angle (0 - 360)\n* @property {Number} 1 - Saturation (0 - 100)\n* @property {Number} 2 - Value (0 - 100)\n*/\n/**\n* @typedef {Array} ArrayLAB\n* An array of CIELAB lightness, red/green, and yellow/blue.\n* @property {Number} 0 - CIE Lightness\n* @property {Number} 1 - Red/Green Coordinate\n* @property {Number} 2 - Yellow/Blue Coordinate\n*/\n/**\n* @typedef {Array} ArrayLCH\n* An array of CIELAB lightness, chroma, and hue.\n* @property {Number} 0 - CIE Lightness\n* @property {Number} 1 - CIE Chroma\n* @property {Number} 2 - CIE Hue\n*/\n/**\n* @typedef {Array} ArrayHWB\n* An array of hue, whiteness, and blackness channels.\n* @property {Number} 0 - Hue Angle (0 - 360)\n* @property {Number} 1 - Whiteness (0 - 100)\n* @property {Number} 2 - Blackness (0 - 100)\n*/\n/**\n* @typedef {Array} ArrayXYZ\n* An array of CIELAB chromacity.\n* @property {Number} 0 - X Chromacity\n* @property {Number} 1 - Y Chromacity\n* @property {Number} 2 - Z Chromacity\n* @example\n* [95.05, 100, 108.88]\n* @example\n* [0, 0, 0]\n*/\n/**\n* @typedef {String} StringHex\n* A string representing the 3, 4, 6, or 8 digit hexidecimal color.\n* @example\n* \"#f00\"\n* \"#f00f\"\n* @example\n* \"#ff0000\"\n* \"#ff0000ff\"\n*/\n/**\n* @typedef {String} StringKeyword\n* A case-insensitive string identifier that represents a specific color.\n* @example\n* \"#f00\"\n* \"#f00f\"\n* @example\n* \"#ff0000\"\n* \"#ff0000ff\"\n*/\n/**\n* @typedef {Number} NumberContrast\n* A contrast ratio of the colors (0 - 21)\n* @example\n* 0\n* @example\n* 21\n*/\n/**\n* @typedef {Number} NumberCIEDE\n* A CIEDE2000 difference between 2 colors (0 - 100)\n* @example\n* 0\n* @example\n* 100\n*/\n"],"names":["rgb2hue","rgbR","rgbG","rgbB","fallbackhue","value","rgb2value","delta","rgb2whiteness","segment","hue2rgb","t1","t2","hue","rhue","max","min","matrix","params","mats","map","mat","reduce","acc","index","precision","atan2d","y","x","rad2deg","atan2","cosd","cos","deg2rad","PI","sind","sin","abs","Math","cbrt","exp","floor","pow","sqrt","epsilon","kappa","rgb2hsl","hslH","hslV","hslW","hslD","hslL","hsl2rgb","hslS","_ref","rgb2hwb","hwb2rgb","hwbH","hwbW","hwbB","_hsl2rgb$map2","_slicedToArray","v","rgb2hsv","hsvV","hsvW","hsv2rgb","hsvH","hsvS","rgbI","rgbF","rgbM","rgbN","rgbT","_ref2","rgb2xyz","_map2","_matrix2","xyz2rgb","xyzX","xyzY","xyzZ","_matrix4","_map4","hsl2hsv","hsv1","hsv2hsl","hwb2hsv","hsv2hwb","lab2xyz","labL","labA","labB","f2","f1","f3","xyz2lab","lab2lch","lch2lab","lchL","lchC","lchH","rgb2contrast","rgb1","rgb2","relativeLuminance1","relativeLuminance2","l1","l2","luminance2contrast","rgb2luminance","adjustChannel","coefficientR","coefficientG","coefficientB","lowc","adjustGamma","hex2rgb","hex","match","hexColorMatch","r","g","b","a","rr","gg","bb","aa","undefined","parseInt","c","rgb2hex","round","toString","slice","keyword2rgb","keyword","rgb255","keywords","String","toLowerCase","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","transparent","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","lab2ciede","L1","a1","b1","L2","a2","b2","c1","c2","deltaLPrime","lBar","cBarPow7","cCoeff","a1Prime","a2Prime","c1Prime","c2Prime","cBarPrime","deltaCPrime","h1Prime","h2Prime","deltaSmallHPrime","deltaBigHPrime","hBarPrime","T","slCoeff","sl","sc","sh","RtCoeff","Rt","term1","kl","term2","kc","term3","kh","rgb2lab","_rgb2xyz2","_xyz2lab2","lab2rgb","_lab2xyz2","_xyz2rgb2","rgb2lch","_rgb2xyz4","_xyz2lab4","_lab2lch2","lch2rgb","_lch2lab2","_lab2xyz4","_xyz2rgb4","hwb2hsl","_hwb2hsv2","_hsv2hsl2","hsl2hwb","_hsl2hsv2","_hsv2hwb2","hsl2lab","_hsl2rgb2","_rgb2xyz6","_xyz2lab6","lab2hsl","_lab2xyz6","_xyz2rgb6","_rgb2hsl2","hsl2lch","_hsl2rgb4","_rgb2xyz8","_xyz2lab8","_lab2lch4","lch2hsl","_lch2lab4","_lab2xyz8","_xyz2rgb8","_rgb2hsl4","hsl2xyz","_hsl2rgb6","_rgb2xyz0","xyz2hsl","_xyz2rgb0","_rgb2hsl6","hwb2lab","_hwb2rgb2","_rgb2xyz10","_xyz2lab0","lab2hwb","_lab2xyz0","_xyz2rgb10","_rgb2hwb2","hwb2lch","_hwb2rgb4","_rgb2xyz12","_xyz2lab10","_lab2lch6","lch2hwb","_lch2lab6","_lab2xyz10","_xyz2rgb12","_rgb2hwb4","hwb2xyz","_hwb2rgb6","_rgb2xyz14","xyz2hwb","_xyz2rgb14","_rgb2hwb6","hsv2lab","_hsv2rgb2","_rgb2xyz16","_xyz2lab12","lab2hsv","_lab2xyz12","_xyz2rgb16","_rgb2hsv2","hsv2lch","_hsv2rgb4","_rgb2xyz18","_xyz2lab14","_lab2lch8","lch2hsv","_lch2lab8","_lab2xyz14","_xyz2rgb18","_rgb2hsv4","hsv2xyz","_hsv2rgb6","_rgb2xyz20","xyz2hsv","_xyz2rgb20","_rgb2hsv6","xyz2lch","_xyz2lab16","_lab2lch0","lch2xyz","_lch2lab0","_lab2xyz16","hex2hsl","hex2hsv","hex2hwb","hex2lab","hex2lch","hex2xyz","hsl2hex","hsv2hex","hwb2hex","lab2hex","lch2hex","xyz2hex","hex2ciede","hex1","hex2","hsl2ciede","hsl1","hsl2","hsv2ciede","hsv2","hwb2ciede","hwb1","hwb2","keyword2ciede","keyword1","keyword2","keyword2lab","lch2ciede","lch1","lch2","rgb2ciede","xyz2ciede","xyz1","xyz2","hex2contrast","hsl2contrast","hsv2contrast","hwb2contrast","keyword2contrast","lab2contrast","lab1","lab2","lch2contrast","xyz2contrast","keyword2hex","keyword2hsl","keyword2hsv","keyword2hwb","keyword2lch","keyword2xyz"],"mappings":"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"}