UNPKG

culori

Version:

A general-purpose color library for JavaScript

1,579 lines (1,537 loc) 147 kB
(function(root, factory) { if (typeof define === 'function' && define.amd) { define([], factory); } else if (typeof module === 'object' && module.exports) { module.exports = factory(); } else { root.culori = factory(); } } (typeof self !== 'undefined' ? self : this, function() { var culori = (() => { var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2); // src/index.js var src_exports = {}; __export(src_exports, { a98: () => a98, average: () => average, averageAngle: () => averageAngle, averageNumber: () => averageNumber, blend: () => blend_default, blerp: () => blerp, clampChroma: () => clampChroma, clampGamut: () => clampGamut, clampRgb: () => clampRgb, colorsNamed: () => named_default, convertA98ToXyz65: () => convertA98ToXyz65_default, convertCubehelixToRgb: () => convertCubehelixToRgb_default, convertDlchToLab65: () => convertDlchToLab65_default, convertHsiToRgb: () => convertHsiToRgb, convertHslToRgb: () => convertHslToRgb, convertHsvToRgb: () => convertHsvToRgb, convertHwbToRgb: () => convertHwbToRgb, convertItpToXyz65: () => convertItpToXyz65_default, convertJabToJch: () => convertJabToJch_default, convertJabToRgb: () => convertJabToRgb_default, convertJabToXyz65: () => convertJabToXyz65_default, convertJchToJab: () => convertJchToJab_default, convertLab65ToDlch: () => convertLab65ToDlch_default, convertLab65ToRgb: () => convertLab65ToRgb_default, convertLab65ToXyz65: () => convertLab65ToXyz65_default, convertLabToLch: () => convertLabToLch_default, convertLabToRgb: () => convertLabToRgb_default, convertLabToXyz50: () => convertLabToXyz50_default, convertLchToLab: () => convertLchToLab_default, convertLchuvToLuv: () => convertLchuvToLuv_default, convertLrgbToOklab: () => convertLrgbToOklab_default, convertLrgbToRgb: () => convertLrgbToRgb_default, convertLuvToLchuv: () => convertLuvToLchuv_default, convertLuvToXyz50: () => convertLuvToXyz50_default, convertOkhslToOklab: () => convertOkhslToOklab, convertOkhsvToOklab: () => convertOkhsvToOklab, convertOklabToLrgb: () => convertOklabToLrgb_default, convertOklabToOkhsl: () => convertOklabToOkhsl, convertOklabToOkhsv: () => convertOklabToOkhsv, convertOklabToRgb: () => convertOklabToRgb_default, convertP3ToXyz65: () => convertP3ToXyz65_default, convertProphotoToXyz50: () => convertProphotoToXyz50_default, convertRec2020ToXyz65: () => convertRec2020ToXyz65_default, convertRgbToCubehelix: () => convertRgbToCubehelix_default, convertRgbToHsi: () => convertRgbToHsi, convertRgbToHsl: () => convertRgbToHsl, convertRgbToHsv: () => convertRgbToHsv, convertRgbToHwb: () => convertRgbToHwb, convertRgbToJab: () => convertRgbToJab_default, convertRgbToLab: () => convertRgbToLab_default, convertRgbToLab65: () => convertRgbToLab65_default, convertRgbToLrgb: () => convertRgbToLrgb_default, convertRgbToOklab: () => convertRgbToOklab_default, convertRgbToXyb: () => convertRgbToXyb_default, convertRgbToXyz50: () => convertRgbToXyz50_default, convertRgbToXyz65: () => convertRgbToXyz65_default, convertRgbToYiq: () => convertRgbToYiq_default, convertXybToRgb: () => convertXybToRgb_default, convertXyz50ToLab: () => convertXyz50ToLab_default, convertXyz50ToLuv: () => convertXyz50ToLuv_default, convertXyz50ToProphoto: () => convertXyz50ToProphoto_default, convertXyz50ToRgb: () => convertXyz50ToRgb_default, convertXyz50ToXyz65: () => convertXyz50ToXyz65_default, convertXyz65ToA98: () => convertXyz65ToA98_default, convertXyz65ToItp: () => convertXyz65ToItp_default, convertXyz65ToJab: () => convertXyz65ToJab_default, convertXyz65ToLab65: () => convertXyz65ToLab65_default, convertXyz65ToP3: () => convertXyz65ToP3_default, convertXyz65ToRec2020: () => convertXyz65ToRec2020_default, convertXyz65ToRgb: () => convertXyz65ToRgb_default, convertXyz65ToXyz50: () => convertXyz65ToXyz50_default, convertYiqToRgb: () => convertYiqToRgb_default, converter: () => converter_default, cubehelix: () => cubehelix, differenceCie76: () => differenceCie76, differenceCie94: () => differenceCie94, differenceCiede2000: () => differenceCiede2000, differenceCmc: () => differenceCmc, differenceEuclidean: () => differenceEuclidean, differenceHueChroma: () => differenceHueChroma, differenceHueNaive: () => differenceHueNaive, differenceHueSaturation: () => differenceHueSaturation, differenceHyab: () => differenceHyab, differenceItp: () => differenceItp, differenceKotsarenkoRamos: () => differenceKotsarenkoRamos, displayable: () => displayable, dlab: () => dlab, dlch: () => dlch, easingGamma: () => gamma_default, easingInOutSine: () => inOutSine_default, easingMidpoint: () => midpoint_default, easingSmootherstep: () => smootherstep_default, easingSmoothstep: () => easingSmoothstep, easingSmoothstepInverse: () => easingSmoothstepInverse, filterBrightness: () => filterBrightness, filterContrast: () => filterContrast, filterDeficiencyDeuter: () => filterDeficiencyDeuter, filterDeficiencyProt: () => filterDeficiencyProt, filterDeficiencyTrit: () => filterDeficiencyTrit, filterGrayscale: () => filterGrayscale, filterHueRotate: () => filterHueRotate, filterInvert: () => filterInvert, filterSaturate: () => filterSaturate, filterSepia: () => filterSepia, fixupAlpha: () => fixupAlpha, fixupHueDecreasing: () => fixupHueDecreasing, fixupHueIncreasing: () => fixupHueIncreasing, fixupHueLonger: () => fixupHueLonger, fixupHueShorter: () => fixupHueShorter, formatCss: () => formatCss, formatHex: () => formatHex, formatHex8: () => formatHex8, formatHsl: () => formatHsl, formatRgb: () => formatRgb, getMode: () => getMode, hsi: () => hsi, hsl: () => hsl2, hsv: () => hsv, hwb: () => hwb, inGamut: () => inGamut, interpolate: () => interpolate, interpolateWith: () => interpolateWith, interpolateWithPremultipliedAlpha: () => interpolateWithPremultipliedAlpha, interpolatorLinear: () => interpolatorLinear, interpolatorPiecewise: () => interpolatorPiecewise, interpolatorSplineBasis: () => interpolatorSplineBasis, interpolatorSplineBasisClosed: () => interpolatorSplineBasisClosed, interpolatorSplineMonotone: () => interpolatorSplineMonotone, interpolatorSplineMonotone2: () => interpolatorSplineMonotone2, interpolatorSplineMonotoneClosed: () => interpolatorSplineMonotoneClosed, interpolatorSplineNatural: () => interpolatorSplineNatural, interpolatorSplineNaturalClosed: () => interpolatorSplineNaturalClosed, itp: () => itp, jab: () => jab, jch: () => jch, lab: () => lab, lab65: () => lab65, lch: () => lch, lch65: () => lch65, lchuv: () => lchuv, lerp: () => lerp, lrgb: () => lrgb, luv: () => luv, mapAlphaDivide: () => mapAlphaDivide, mapAlphaMultiply: () => mapAlphaMultiply, mapTransferGamma: () => mapTransferGamma, mapTransferLinear: () => mapTransferLinear, mapper: () => mapper, modeA98: () => definition_default2, modeCubehelix: () => definition_default3, modeDlab: () => definition_default4, modeDlch: () => definition_default5, modeHsi: () => definition_default6, modeHsl: () => definition_default7, modeHsv: () => definition_default8, modeHwb: () => definition_default9, modeItp: () => definition_default10, modeJab: () => definition_default11, modeJch: () => definition_default12, modeLab: () => definition_default13, modeLab65: () => definition_default14, modeLch: () => definition_default15, modeLch65: () => definition_default16, modeLchuv: () => definition_default17, modeLrgb: () => definition_default18, modeLuv: () => definition_default19, modeOkhsl: () => modeOkhsl_default, modeOkhsv: () => modeOkhsv_default, modeOklab: () => definition_default20, modeOklch: () => definition_default21, modeP3: () => definition_default22, modeProphoto: () => definition_default23, modeRec2020: () => definition_default24, modeRgb: () => definition_default, modeXyb: () => definition_default25, modeXyz50: () => definition_default26, modeXyz65: () => definition_default27, modeYiq: () => definition_default28, nearest: () => nearest_default, okhsl: () => okhsl, okhsv: () => okhsv, oklab: () => oklab, oklch: () => oklch, p3: () => p3, parse: () => parse_default, parseHex: () => parseHex_default, parseHsl: () => parseHsl_default, parseHslLegacy: () => parseHslLegacy_default, parseHwb: () => parseHwb_default, parseLab: () => parseLab_default, parseLch: () => parseLch_default, parseNamed: () => parseNamed_default, parseOklab: () => parseOklab_default, parseOklch: () => parseOklch_default, parseRgb: () => parseRgb_default, parseRgbLegacy: () => parseRgbLegacy_default, parseTransparent: () => parseTransparent_default, prophoto: () => prophoto, random: () => random_default, rec2020: () => rec2020, removeParser: () => removeParser, rgb: () => rgb4, round: () => round_default, samples: () => samples_default, serializeHex: () => serializeHex, serializeHex8: () => serializeHex8, serializeHsl: () => serializeHsl, serializeRgb: () => serializeRgb, toGamut: () => toGamut, trilerp: () => trilerp, unlerp: () => unlerp, useMode: () => useMode, useParser: () => useParser, wcagContrast: () => contrast, wcagLuminance: () => luminance, xyb: () => xyb, xyz50: () => xyz50, xyz65: () => xyz65, yiq: () => yiq }); // src/rgb/parseNumber.js var parseNumber = (color, len) => { if (typeof color !== "number") return; if (len === 3) { return { mode: "rgb", r: (color >> 8 & 15 | color >> 4 & 240) / 255, g: (color >> 4 & 15 | color & 240) / 255, b: (color & 15 | color << 4 & 240) / 255 }; } if (len === 4) { return { mode: "rgb", r: (color >> 12 & 15 | color >> 8 & 240) / 255, g: (color >> 8 & 15 | color >> 4 & 240) / 255, b: (color >> 4 & 15 | color & 240) / 255, alpha: (color & 15 | color << 4 & 240) / 255 }; } if (len === 6) { return { mode: "rgb", r: (color >> 16 & 255) / 255, g: (color >> 8 & 255) / 255, b: (color & 255) / 255 }; } if (len === 8) { return { mode: "rgb", r: (color >> 24 & 255) / 255, g: (color >> 16 & 255) / 255, b: (color >> 8 & 255) / 255, alpha: (color & 255) / 255 }; } }; var parseNumber_default = parseNumber; // src/colors/named.js var named = { aliceblue: 15792383, antiquewhite: 16444375, aqua: 65535, aquamarine: 8388564, azure: 15794175, beige: 16119260, bisque: 16770244, black: 0, blanchedalmond: 16772045, blue: 255, blueviolet: 9055202, brown: 10824234, burlywood: 14596231, cadetblue: 6266528, chartreuse: 8388352, chocolate: 13789470, coral: 16744272, cornflowerblue: 6591981, cornsilk: 16775388, crimson: 14423100, cyan: 65535, darkblue: 139, darkcyan: 35723, darkgoldenrod: 12092939, darkgray: 11119017, darkgreen: 25600, darkgrey: 11119017, darkkhaki: 12433259, darkmagenta: 9109643, darkolivegreen: 5597999, darkorange: 16747520, darkorchid: 10040012, darkred: 9109504, darksalmon: 15308410, darkseagreen: 9419919, darkslateblue: 4734347, darkslategray: 3100495, darkslategrey: 3100495, darkturquoise: 52945, darkviolet: 9699539, deeppink: 16716947, deepskyblue: 49151, dimgray: 6908265, dimgrey: 6908265, dodgerblue: 2003199, firebrick: 11674146, floralwhite: 16775920, forestgreen: 2263842, fuchsia: 16711935, gainsboro: 14474460, ghostwhite: 16316671, gold: 16766720, goldenrod: 14329120, gray: 8421504, green: 32768, greenyellow: 11403055, grey: 8421504, honeydew: 15794160, hotpink: 16738740, indianred: 13458524, indigo: 4915330, ivory: 16777200, khaki: 15787660, lavender: 15132410, lavenderblush: 16773365, lawngreen: 8190976, lemonchiffon: 16775885, lightblue: 11393254, lightcoral: 15761536, lightcyan: 14745599, lightgoldenrodyellow: 16448210, lightgray: 13882323, lightgreen: 9498256, lightgrey: 13882323, lightpink: 16758465, lightsalmon: 16752762, lightseagreen: 2142890, lightskyblue: 8900346, lightslategray: 7833753, lightslategrey: 7833753, lightsteelblue: 11584734, lightyellow: 16777184, lime: 65280, limegreen: 3329330, linen: 16445670, magenta: 16711935, maroon: 8388608, mediumaquamarine: 6737322, mediumblue: 205, mediumorchid: 12211667, mediumpurple: 9662683, mediumseagreen: 3978097, mediumslateblue: 8087790, mediumspringgreen: 64154, mediumturquoise: 4772300, mediumvioletred: 13047173, midnightblue: 1644912, mintcream: 16121850, mistyrose: 16770273, moccasin: 16770229, navajowhite: 16768685, navy: 128, oldlace: 16643558, olive: 8421376, olivedrab: 7048739, orange: 16753920, orangered: 16729344, orchid: 14315734, palegoldenrod: 15657130, palegreen: 10025880, paleturquoise: 11529966, palevioletred: 14381203, papayawhip: 16773077, peachpuff: 16767673, peru: 13468991, pink: 16761035, plum: 14524637, powderblue: 11591910, purple: 8388736, // Added in CSS Colors Level 4: // https://drafts.csswg.org/css-color/#changes-from-3 rebeccapurple: 6697881, red: 16711680, rosybrown: 12357519, royalblue: 4286945, saddlebrown: 9127187, salmon: 16416882, sandybrown: 16032864, seagreen: 3050327, seashell: 16774638, sienna: 10506797, silver: 12632256, skyblue: 8900331, slateblue: 6970061, slategray: 7372944, slategrey: 7372944, snow: 16775930, springgreen: 65407, steelblue: 4620980, tan: 13808780, teal: 32896, thistle: 14204888, tomato: 16737095, turquoise: 4251856, violet: 15631086, wheat: 16113331, white: 16777215, whitesmoke: 16119285, yellow: 16776960, yellowgreen: 10145074 }; var named_default = named; // src/rgb/parseNamed.js var parseNamed = (color) => { return parseNumber_default(named_default[color.toLowerCase()], 6); }; var parseNamed_default = parseNamed; // src/rgb/parseHex.js var hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i; var parseHex = (color) => { let match; return (match = color.match(hex)) ? parseNumber_default(parseInt(match[1], 16), match[1].length) : void 0; }; var parseHex_default = parseHex; // src/util/regex.js var num = "([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)"; var num_none = `(?:${num}|none)`; var per = `${num}%`; var per_none = `(?:${num}%|none)`; var num_per = `(?:${num}%|${num})`; var num_per_none = `(?:${num}%|${num}|none)`; var hue = `(?:${num}(deg|grad|rad|turn)|${num})`; var hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`; var c = `\\s*,\\s*`; var rx_num_per_none = new RegExp("^" + num_per_none + "$"); // src/rgb/parseRgbLegacy.js var rgb_num_old = new RegExp( `^rgba?\\(\\s*${num}${c}${num}${c}${num}\\s*(?:,\\s*${num_per}\\s*)?\\)$` ); var rgb_per_old = new RegExp( `^rgba?\\(\\s*${per}${c}${per}${c}${per}\\s*(?:,\\s*${num_per}\\s*)?\\)$` ); var parseRgbLegacy = (color) => { let res = { mode: "rgb" }; let match; if (match = color.match(rgb_num_old)) { if (match[1] !== void 0) { res.r = match[1] / 255; } if (match[2] !== void 0) { res.g = match[2] / 255; } if (match[3] !== void 0) { res.b = match[3] / 255; } } else if (match = color.match(rgb_per_old)) { if (match[1] !== void 0) { res.r = match[1] / 100; } if (match[2] !== void 0) { res.g = match[2] / 100; } if (match[3] !== void 0) { res.b = match[3] / 100; } } else { return void 0; } if (match[4] !== void 0) { res.alpha = Math.max(0, Math.min(1, match[4] / 100)); } else if (match[5] !== void 0) { res.alpha = Math.max(0, Math.min(1, +match[5])); } return res; }; var parseRgbLegacy_default = parseRgbLegacy; // src/_prepare.js var prepare = (color, mode) => color === void 0 ? void 0 : typeof color !== "object" ? parse_default(color) : color.mode !== void 0 ? color : mode ? { ...color, mode } : void 0; var prepare_default = prepare; // src/converter.js var converter = (target_mode = "rgb") => (color) => (color = prepare_default(color, target_mode)) !== void 0 ? ( // if the color's mode corresponds to our target mode color.mode === target_mode ? ( // then just return the color color ) : ( // otherwise check to see if we have a dedicated // converter for the target mode converters[color.mode][target_mode] ? ( // and return its result... converters[color.mode][target_mode](color) ) : ( // ...otherwise pass through RGB as an intermediary step. // if the target mode is RGB... target_mode === "rgb" ? ( // just return the RGB converters[color.mode].rgb(color) ) : ( // otherwise convert color.mode -> RGB -> target_mode converters.rgb[target_mode](converters[color.mode].rgb(color)) ) ) ) ) : void 0; var converter_default = converter; // src/modes.js var converters = {}; var modes = {}; var parsers = []; var colorProfiles = {}; var identity = (v) => v; var useMode = (definition29) => { converters[definition29.mode] = { ...converters[definition29.mode], ...definition29.toMode }; Object.keys(definition29.fromMode || {}).forEach((k4) => { if (!converters[k4]) { converters[k4] = {}; } converters[k4][definition29.mode] = definition29.fromMode[k4]; }); if (!definition29.ranges) { definition29.ranges = {}; } if (!definition29.difference) { definition29.difference = {}; } definition29.channels.forEach((channel) => { if (definition29.ranges[channel] === void 0) { definition29.ranges[channel] = [0, 1]; } if (!definition29.interpolate[channel]) { throw new Error(`Missing interpolator for: ${channel}`); } if (typeof definition29.interpolate[channel] === "function") { definition29.interpolate[channel] = { use: definition29.interpolate[channel] }; } if (!definition29.interpolate[channel].fixup) { definition29.interpolate[channel].fixup = identity; } }); modes[definition29.mode] = definition29; (definition29.parse || []).forEach((parser) => { useParser(parser, definition29.mode); }); return converter_default(definition29.mode); }; var getMode = (mode) => modes[mode]; var useParser = (parser, mode) => { if (typeof parser === "string") { if (!mode) { throw new Error(`'mode' required when 'parser' is a string`); } colorProfiles[parser] = mode; } else if (typeof parser === "function") { if (parsers.indexOf(parser) < 0) { parsers.push(parser); } } }; var removeParser = (parser) => { if (typeof parser === "string") { delete colorProfiles[parser]; } else if (typeof parser === "function") { const idx = parsers.indexOf(parser); if (idx > 0) { parsers.splice(idx, 1); } } }; // src/parse.js var IdentStartCodePoint = /[^\x00-\x7F]|[a-zA-Z_]/; var IdentCodePoint = /[^\x00-\x7F]|[-\w]/; var Tok = { Function: "function", Ident: "ident", Number: "number", Percentage: "percentage", ParenClose: ")", None: "none", Hue: "hue", Alpha: "alpha" }; var _i = 0; function is_num(chars) { let ch = chars[_i]; let ch1 = chars[_i + 1]; if (ch === "-" || ch === "+") { return /\d/.test(ch1) || ch1 === "." && /\d/.test(chars[_i + 2]); } if (ch === ".") { return /\d/.test(ch1); } return /\d/.test(ch); } function is_ident(chars) { if (_i >= chars.length) { return false; } let ch = chars[_i]; if (IdentStartCodePoint.test(ch)) { return true; } if (ch === "-") { if (chars.length - _i < 2) { return false; } let ch1 = chars[_i + 1]; if (ch1 === "-" || IdentStartCodePoint.test(ch1)) { return true; } return false; } return false; } var huenits = { deg: 1, rad: 180 / Math.PI, grad: 9 / 10, turn: 360 }; function num2(chars) { let value = ""; if (chars[_i] === "-" || chars[_i] === "+") { value += chars[_i++]; } value += digits(chars); if (chars[_i] === "." && /\d/.test(chars[_i + 1])) { value += chars[_i++] + digits(chars); } if (chars[_i] === "e" || chars[_i] === "E") { if ((chars[_i + 1] === "-" || chars[_i + 1] === "+") && /\d/.test(chars[_i + 2])) { value += chars[_i++] + chars[_i++] + digits(chars); } else if (/\d/.test(chars[_i + 1])) { value += chars[_i++] + digits(chars); } } if (is_ident(chars)) { let id = ident(chars); if (id === "deg" || id === "rad" || id === "turn" || id === "grad") { return { type: Tok.Hue, value: value * huenits[id] }; } return void 0; } if (chars[_i] === "%") { _i++; return { type: Tok.Percentage, value: +value }; } return { type: Tok.Number, value: +value }; } function digits(chars) { let v = ""; while (/\d/.test(chars[_i])) { v += chars[_i++]; } return v; } function ident(chars) { let v = ""; while (_i < chars.length && IdentCodePoint.test(chars[_i])) { v += chars[_i++]; } return v; } function identlike(chars) { let v = ident(chars); if (chars[_i] === "(") { _i++; return { type: Tok.Function, value: v }; } if (v === "none") { return { type: Tok.None, value: void 0 }; } return { type: Tok.Ident, value: v }; } function tokenize(str = "") { let chars = str.trim(); let tokens = []; let ch; _i = 0; while (_i < chars.length) { ch = chars[_i++]; if (ch === "\n" || ch === " " || ch === " ") { while (_i < chars.length && (chars[_i] === "\n" || chars[_i] === " " || chars[_i] === " ")) { _i++; } continue; } if (ch === ",") { return void 0; } if (ch === ")") { tokens.push({ type: Tok.ParenClose }); continue; } if (ch === "+") { _i--; if (is_num(chars)) { tokens.push(num2(chars)); continue; } return void 0; } if (ch === "-") { _i--; if (is_num(chars)) { tokens.push(num2(chars)); continue; } if (is_ident(chars)) { tokens.push({ type: Tok.Ident, value: ident(chars) }); continue; } return void 0; } if (ch === ".") { _i--; if (is_num(chars)) { tokens.push(num2(chars)); continue; } return void 0; } if (ch === "/") { while (_i < chars.length && (chars[_i] === "\n" || chars[_i] === " " || chars[_i] === " ")) { _i++; } let alpha; if (is_num(chars)) { alpha = num2(chars); if (alpha.type !== Tok.Hue) { tokens.push({ type: Tok.Alpha, value: alpha }); continue; } } if (is_ident(chars)) { if (ident(chars) === "none") { tokens.push({ type: Tok.Alpha, value: { type: Tok.None, value: void 0 } }); continue; } } return void 0; } if (/\d/.test(ch)) { _i--; tokens.push(num2(chars)); continue; } if (IdentStartCodePoint.test(ch)) { _i--; tokens.push(identlike(chars)); continue; } return void 0; } return tokens; } function parseColorSyntax(tokens) { tokens._i = 0; let token = tokens[tokens._i++]; if (!token || token.type !== Tok.Function || token.value !== "color") { return void 0; } token = tokens[tokens._i++]; if (token.type !== Tok.Ident) { return void 0; } const mode = colorProfiles[token.value]; if (!mode) { return void 0; } const res = { mode }; const coords = consumeCoords(tokens, false); if (!coords) { return void 0; } const channels = getMode(mode).channels; for (let ii = 0, c2, ch; ii < channels.length; ii++) { c2 = coords[ii]; ch = channels[ii]; if (c2.type !== Tok.None) { res[ch] = c2.type === Tok.Number ? c2.value : c2.value / 100; if (ch === "alpha") { res[ch] = Math.max(0, Math.min(1, res[ch])); } } } return res; } function consumeCoords(tokens, includeHue) { const coords = []; let token; while (tokens._i < tokens.length) { token = tokens[tokens._i++]; if (token.type === Tok.None || token.type === Tok.Number || token.type === Tok.Alpha || token.type === Tok.Percentage || includeHue && token.type === Tok.Hue) { coords.push(token); continue; } if (token.type === Tok.ParenClose) { if (tokens._i < tokens.length) { return void 0; } continue; } return void 0; } if (coords.length < 3 || coords.length > 4) { return void 0; } if (coords.length === 4) { if (coords[3].type !== Tok.Alpha) { return void 0; } coords[3] = coords[3].value; } if (coords.length === 3) { coords.push({ type: Tok.None, value: void 0 }); } return coords.every((c2) => c2.type !== Tok.Alpha) ? coords : void 0; } function parseModernSyntax(tokens, includeHue) { tokens._i = 0; let token = tokens[tokens._i++]; if (!token || token.type !== Tok.Function) { return void 0; } let coords = consumeCoords(tokens, includeHue); if (!coords) { return void 0; } coords.unshift(token.value); return coords; } var parse = (color) => { if (typeof color !== "string") { return void 0; } const tokens = tokenize(color); const parsed = tokens ? parseModernSyntax(tokens, true) : void 0; let result = void 0; let i = 0; let len = parsers.length; while (i < len) { if ((result = parsers[i++](color, parsed)) !== void 0) { return result; } } return tokens ? parseColorSyntax(tokens) : void 0; }; var parse_default = parse; // src/rgb/parseRgb.js function parseRgb(color, parsed) { if (!parsed || parsed[0] !== "rgb" && parsed[0] !== "rgba") { return void 0; } const res = { mode: "rgb" }; const [, r2, g, b, alpha] = parsed; if (r2.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) { return void 0; } if (r2.type !== Tok.None) { res.r = r2.type === Tok.Number ? r2.value / 255 : r2.value / 100; } if (g.type !== Tok.None) { res.g = g.type === Tok.Number ? g.value / 255 : g.value / 100; } if (b.type !== Tok.None) { res.b = b.type === Tok.Number ? b.value / 255 : b.value / 100; } if (alpha.type !== Tok.None) { res.alpha = Math.min( 1, Math.max( 0, alpha.type === Tok.Number ? alpha.value : alpha.value / 100 ) ); } return res; } var parseRgb_default = parseRgb; // src/rgb/parseTransparent.js var parseTransparent = (c2) => c2 === "transparent" ? { mode: "rgb", r: 0, g: 0, b: 0, alpha: 0 } : void 0; var parseTransparent_default = parseTransparent; // src/interpolate/lerp.js var lerp = (a, b, t) => a + t * (b - a); var unlerp = (a, b, v) => (v - a) / (b - a); var blerp = (a00, a01, a10, a11, tx, ty) => { return lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty); }; var trilerp = (a000, a010, a100, a110, a001, a011, a101, a111, tx, ty, tz) => { return lerp( blerp(a000, a010, a100, a110, tx, ty), blerp(a001, a011, a101, a111, tx, ty), tz ); }; // src/interpolate/piecewise.js var get_classes = (arr) => { let classes = []; for (let i = 0; i < arr.length - 1; i++) { let a = arr[i]; let b = arr[i + 1]; if (a === void 0 && b === void 0) { classes.push(void 0); } else if (a !== void 0 && b !== void 0) { classes.push([a, b]); } else { classes.push(a !== void 0 ? [a, a] : [b, b]); } } return classes; }; var interpolatorPiecewise = (interpolator2) => (arr) => { let classes = get_classes(arr); return (t) => { let cls = t * classes.length; let idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0); let pair = classes[idx]; return pair === void 0 ? void 0 : interpolator2(pair[0], pair[1], cls - idx); }; }; // src/interpolate/linear.js var interpolatorLinear = interpolatorPiecewise(lerp); // src/fixup/alpha.js var fixupAlpha = (arr) => { let some_defined = false; let res = arr.map((v) => { if (v !== void 0) { some_defined = true; return v; } return 1; }); return some_defined ? res : arr; }; // src/rgb/definition.js var definition = { mode: "rgb", channels: ["r", "g", "b", "alpha"], parse: [ parseRgb_default, parseHex_default, parseRgbLegacy_default, parseNamed_default, parseTransparent_default, "srgb" ], serialize: "srgb", interpolate: { r: interpolatorLinear, g: interpolatorLinear, b: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, gamut: true, white: { r: 1, g: 1, b: 1 }, black: { r: 0, g: 0, b: 0 } }; var definition_default = definition; // src/a98/convertA98ToXyz65.js var linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v); var convertA98ToXyz65 = (a982) => { let r2 = linearize(a982.r); let g = linearize(a982.g); let b = linearize(a982.b); let res = { mode: "xyz65", x: 0.5766690429101305 * r2 + 0.1855582379065463 * g + 0.1882286462349947 * b, y: 0.297344975250536 * r2 + 0.6273635662554661 * g + 0.0752914584939979 * b, z: 0.0270313613864123 * r2 + 0.0706888525358272 * g + 0.9913375368376386 * b }; if (a982.alpha !== void 0) { res.alpha = a982.alpha; } return res; }; var convertA98ToXyz65_default = convertA98ToXyz65; // src/a98/convertXyz65ToA98.js var gamma = (v) => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v); var convertXyz65ToA98 = ({ x, y, z, alpha }) => { if (x === void 0) x = 0; if (y === void 0) y = 0; if (z === void 0) z = 0; let res = { mode: "a98", r: gamma( x * 2.0415879038107465 - y * 0.5650069742788597 - 0.3447313507783297 * z ), g: gamma( x * -0.9692436362808798 + y * 1.8759675015077206 + 0.0415550574071756 * z ), b: gamma( x * 0.0134442806320312 - y * 0.1183623922310184 + 1.0151749943912058 * z ) }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToA98_default = convertXyz65ToA98; // src/lrgb/convertRgbToLrgb.js var fn = (c2 = 0) => { const abs3 = Math.abs(c2); if (abs3 <= 0.04045) { return c2 / 12.92; } return (Math.sign(c2) || 1) * Math.pow((abs3 + 0.055) / 1.055, 2.4); }; var convertRgbToLrgb = ({ r: r2, g, b, alpha }) => { let res = { mode: "lrgb", r: fn(r2), g: fn(g), b: fn(b) }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertRgbToLrgb_default = convertRgbToLrgb; // src/xyz65/convertRgbToXyz65.js var convertRgbToXyz65 = (rgb5) => { let { r: r2, g, b, alpha } = convertRgbToLrgb_default(rgb5); let res = { mode: "xyz65", x: 0.4123907992659593 * r2 + 0.357584339383878 * g + 0.1804807884018343 * b, y: 0.2126390058715102 * r2 + 0.715168678767756 * g + 0.0721923153607337 * b, z: 0.0193308187155918 * r2 + 0.119194779794626 * g + 0.9505321522496607 * b }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertRgbToXyz65_default = convertRgbToXyz65; // src/lrgb/convertLrgbToRgb.js var fn2 = (c2 = 0) => { const abs3 = Math.abs(c2); if (abs3 > 31308e-7) { return (Math.sign(c2) || 1) * (1.055 * Math.pow(abs3, 1 / 2.4) - 0.055); } return c2 * 12.92; }; var convertLrgbToRgb = ({ r: r2, g, b, alpha }, mode = "rgb") => { let res = { mode, r: fn2(r2), g: fn2(g), b: fn2(b) }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertLrgbToRgb_default = convertLrgbToRgb; // src/xyz65/convertXyz65ToRgb.js var convertXyz65ToRgb = ({ x, y, z, alpha }) => { if (x === void 0) x = 0; if (y === void 0) y = 0; if (z === void 0) z = 0; let res = convertLrgbToRgb_default({ r: x * 3.2409699419045226 - y * 1.537383177570094 - 0.4986107602930034 * z, g: x * -0.9692436362808796 + y * 1.8759675015077204 + 0.0415550574071756 * z, b: x * 0.0556300796969936 - y * 0.2039769588889765 + 1.0569715142428784 * z }); if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToRgb_default = convertXyz65ToRgb; // src/a98/definition.js var definition2 = { ...definition_default, mode: "a98", parse: ["a98-rgb"], serialize: "a98-rgb", fromMode: { rgb: (color) => convertXyz65ToA98_default(convertRgbToXyz65_default(color)), xyz65: convertXyz65ToA98_default }, toMode: { rgb: (color) => convertXyz65ToRgb_default(convertA98ToXyz65_default(color)), xyz65: convertA98ToXyz65_default } }; var definition_default2 = definition2; // src/util/normalizeHue.js var normalizeHue = (hue3) => (hue3 = hue3 % 360) < 0 ? hue3 + 360 : hue3; var normalizeHue_default = normalizeHue; // src/fixup/hue.js var hue2 = (hues, fn5) => { return hues.map((hue3, idx, arr) => { if (hue3 === void 0) { return hue3; } let normalized = normalizeHue_default(hue3); if (idx === 0 || hues[idx - 1] === void 0) { return normalized; } return fn5(normalized - normalizeHue_default(arr[idx - 1])); }).reduce((acc, curr) => { if (!acc.length || curr === void 0 || acc[acc.length - 1] === void 0) { acc.push(curr); return acc; } acc.push(curr + acc[acc.length - 1]); return acc; }, []); }; var fixupHueShorter = (arr) => hue2(arr, (d) => Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)); var fixupHueLonger = (arr) => hue2(arr, (d) => Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)); var fixupHueIncreasing = (arr) => hue2(arr, (d) => d >= 0 ? d : d + 360); var fixupHueDecreasing = (arr) => hue2(arr, (d) => d <= 0 ? d : d - 360); // src/cubehelix/constants.js var M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0]; var degToRad = Math.PI / 180; var radToDeg = 180 / Math.PI; // src/cubehelix/convertRgbToCubehelix.js var DE = M[3] * M[4]; var BE = M[1] * M[4]; var BCAD = M[1] * M[2] - M[0] * M[3]; var convertRgbToCubehelix = ({ r: r2, g, b, alpha }) => { if (r2 === void 0) r2 = 0; if (g === void 0) g = 0; if (b === void 0) b = 0; let l = (BCAD * b + r2 * DE - g * BE) / (BCAD + DE - BE); let x = b - l; let y = (M[4] * (g - l) - M[2] * x) / M[3]; let res = { mode: "cubehelix", l, s: l === 0 || l === 1 ? void 0 : Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l)) }; if (res.s) res.h = Math.atan2(y, x) * radToDeg - 120; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertRgbToCubehelix_default = convertRgbToCubehelix; // src/cubehelix/convertCubehelixToRgb.js var convertCubehelixToRgb = ({ h, s, l, alpha }) => { let res = { mode: "rgb" }; h = (h === void 0 ? 0 : h + 120) * degToRad; if (l === void 0) l = 0; let amp = s === void 0 ? 0 : s * l * (1 - l); let cosh = Math.cos(h); let sinh = Math.sin(h); res.r = l + amp * (M[0] * cosh + M[1] * sinh); res.g = l + amp * (M[2] * cosh + M[3] * sinh); res.b = l + amp * (M[4] * cosh + M[5] * sinh); if (alpha !== void 0) res.alpha = alpha; return res; }; var convertCubehelixToRgb_default = convertCubehelixToRgb; // src/difference.js var differenceHueSaturation = (std, smp) => { if (std.h === void 0 || smp.h === void 0 || !std.s || !smp.s) { return 0; } let std_h = normalizeHue_default(std.h); let smp_h = normalizeHue_default(smp.h); let dH = Math.sin((smp_h - std_h + 360) / 2 * Math.PI / 180); return 2 * Math.sqrt(std.s * smp.s) * dH; }; var differenceHueNaive = (std, smp) => { if (std.h === void 0 || smp.h === void 0) { return 0; } let std_h = normalizeHue_default(std.h); let smp_h = normalizeHue_default(smp.h); if (Math.abs(smp_h - std_h) > 180) { return std_h - (smp_h - 360 * Math.sign(smp_h - std_h)); } return smp_h - std_h; }; var differenceHueChroma = (std, smp) => { if (std.h === void 0 || smp.h === void 0 || !std.c || !smp.c) { return 0; } let std_h = normalizeHue_default(std.h); let smp_h = normalizeHue_default(smp.h); let dH = Math.sin((smp_h - std_h + 360) / 2 * Math.PI / 180); return 2 * Math.sqrt(std.c * smp.c) * dH; }; var differenceEuclidean = (mode = "rgb", weights = [1, 1, 1, 0]) => { let def = getMode(mode); let channels = def.channels; let diffs = def.difference; let conv = converter_default(mode); return (std, smp) => { let ConvStd = conv(std); let ConvSmp = conv(smp); return Math.sqrt( channels.reduce((sum, k4, idx) => { let delta = diffs[k4] ? diffs[k4](ConvStd, ConvSmp) : ConvStd[k4] - ConvSmp[k4]; return sum + (weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2); }, 0) ); }; }; var differenceCie76 = () => differenceEuclidean("lab65"); var differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => { let lab2 = converter_default("lab65"); return (std, smp) => { let LabStd = lab2(std); let LabSmp = lab2(smp); let lStd = LabStd.l; let aStd = LabStd.a; let bStd = LabStd.b; let cStd = Math.sqrt(aStd * aStd + bStd * bStd); let lSmp = LabSmp.l; let aSmp = LabSmp.a; let bSmp = LabSmp.b; let cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp); let dL2 = Math.pow(lStd - lSmp, 2); let dC2 = Math.pow(cStd - cSmp, 2); let dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2; return Math.sqrt( dL2 / Math.pow(kL, 2) + dC2 / Math.pow(1 + K1 * cStd, 2) + dH2 / Math.pow(1 + K2 * cStd, 2) ); }; }; var differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => { let lab2 = converter_default("lab65"); return (std, smp) => { let LabStd = lab2(std); let LabSmp = lab2(smp); let lStd = LabStd.l; let aStd = LabStd.a; let bStd = LabStd.b; let cStd = Math.sqrt(aStd * aStd + bStd * bStd); let lSmp = LabSmp.l; let aSmp = LabSmp.a; let bSmp = LabSmp.b; let cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp); let cAvg = (cStd + cSmp) / 2; let G = 0.5 * (1 - Math.sqrt( Math.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7)) )); let apStd = aStd * (1 + G); let apSmp = aSmp * (1 + G); let cpStd = Math.sqrt(apStd * apStd + bStd * bStd); let cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp); let hpStd = Math.abs(apStd) + Math.abs(bStd) === 0 ? 0 : Math.atan2(bStd, apStd); hpStd += (hpStd < 0) * 2 * Math.PI; let hpSmp = Math.abs(apSmp) + Math.abs(bSmp) === 0 ? 0 : Math.atan2(bSmp, apSmp); hpSmp += (hpSmp < 0) * 2 * Math.PI; let dL = lSmp - lStd; let dC = cpSmp - cpStd; let dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd; dhp -= (dhp > Math.PI) * 2 * Math.PI; dhp += (dhp < -Math.PI) * 2 * Math.PI; let dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2); let Lp = (lStd + lSmp) / 2; let Cp = (cpStd + cpSmp) / 2; let hp; if (cpStd * cpSmp === 0) { hp = hpStd + hpSmp; } else { hp = (hpStd + hpSmp) / 2; hp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI; hp += (hp < 0) * 2 * Math.PI; } let Lpm50 = Math.pow(Lp - 50, 2); let T = 1 - 0.17 * Math.cos(hp - Math.PI / 6) + 0.24 * Math.cos(2 * hp) + 0.32 * Math.cos(3 * hp + Math.PI / 30) - 0.2 * Math.cos(4 * hp - 63 * Math.PI / 180); let Sl = 1 + 0.015 * Lpm50 / Math.sqrt(20 + Lpm50); let Sc = 1 + 0.045 * Cp; let Sh = 1 + 0.015 * Cp * T; let deltaTheta = 30 * Math.PI / 180 * Math.exp(-1 * Math.pow((180 / Math.PI * hp - 275) / 25, 2)); let Rc = 2 * Math.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7))); let Rt = -1 * Math.sin(2 * deltaTheta) * Rc; return Math.sqrt( Math.pow(dL / (Kl * Sl), 2) + Math.pow(dC / (Kc * Sc), 2) + Math.pow(dH / (Kh * Sh), 2) + Rt * dC / (Kc * Sc) * dH / (Kh * Sh) ); }; }; var differenceCmc = (l = 1, c2 = 1) => { let lab2 = converter_default("lab65"); return (std, smp) => { let LabStd = lab2(std); let lStd = LabStd.l; let aStd = LabStd.a; let bStd = LabStd.b; let cStd = Math.sqrt(aStd * aStd + bStd * bStd); let hStd = Math.atan2(bStd, aStd); hStd = hStd + 2 * Math.PI * (hStd < 0); let LabSmp = lab2(smp); let lSmp = LabSmp.l; let aSmp = LabSmp.a; let bSmp = LabSmp.b; let cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp); let dL2 = Math.pow(lStd - lSmp, 2); let dC2 = Math.pow(cStd - cSmp, 2); let dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2; let F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900)); let T = hStd >= 164 / 180 * Math.PI && hStd <= 345 / 180 * Math.PI ? 0.56 + Math.abs(0.2 * Math.cos(hStd + 168 / 180 * Math.PI)) : 0.36 + Math.abs(0.4 * Math.cos(hStd + 35 / 180 * Math.PI)); let Sl = lStd < 16 ? 0.511 : 0.040975 * lStd / (1 + 0.01765 * lStd); let Sc = 0.0638 * cStd / (1 + 0.0131 * cStd) + 0.638; let Sh = Sc * (F * T + 1 - F); return Math.sqrt( dL2 / Math.pow(l * Sl, 2) + dC2 / Math.pow(c2 * Sc, 2) + dH2 / Math.pow(Sh, 2) ); }; }; var differenceHyab = () => { let lab2 = converter_default("lab65"); return (std, smp) => { let LabStd = lab2(std); let LabSmp = lab2(smp); let dL = LabStd.l - LabSmp.l; let dA = LabStd.a - LabSmp.a; let dB = LabStd.b - LabSmp.b; return Math.abs(dL) + Math.sqrt(dA * dA + dB * dB); }; }; var differenceKotsarenkoRamos = () => differenceEuclidean("yiq", [0.5053, 0.299, 0.1957]); var differenceItp = () => differenceEuclidean("itp", [518400, 129600, 518400]); // src/average.js var averageAngle = (val) => { let sum = val.reduce( (sum2, val2) => { if (val2 !== void 0) { let rad = val2 * Math.PI / 180; sum2.sin += Math.sin(rad); sum2.cos += Math.cos(rad); } return sum2; }, { sin: 0, cos: 0 } ); let angle = Math.atan2(sum.sin, sum.cos) * 180 / Math.PI; return angle < 0 ? 360 + angle : angle; }; var averageNumber = (val) => { let a = val.filter((v) => v !== void 0); return a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : void 0; }; var isfn = (o) => typeof o === "function"; function average(colors, mode = "rgb", overrides) { let def = getMode(mode); let cc = colors.map(converter_default(mode)); return def.channels.reduce( (res, ch) => { let arr = cc.map((c2) => c2[ch]).filter((val) => val !== void 0); if (arr.length) { let fn5; if (isfn(overrides)) { fn5 = overrides; } else if (overrides && isfn(overrides[ch])) { fn5 = overrides[ch]; } else if (def.average && isfn(def.average[ch])) { fn5 = def.average[ch]; } else { fn5 = averageNumber; } res[ch] = fn5(arr, ch); } return res; }, { mode } ); } // src/cubehelix/definition.js var definition3 = { mode: "cubehelix", channels: ["h", "s", "l", "alpha"], parse: ["--cubehelix"], serialize: "--cubehelix", ranges: { h: [0, 360], s: [0, 4.614], l: [0, 1] }, fromMode: { rgb: convertRgbToCubehelix_default }, toMode: { rgb: convertCubehelixToRgb_default }, interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, s: interpolatorLinear, l: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueSaturation }, average: { h: averageAngle } }; var definition_default3 = definition3; // src/lch/convertLabToLch.js var convertLabToLch = ({ l, a, b, alpha }, mode = "lch") => { if (a === void 0) a = 0; if (b === void 0) b = 0; let c2 = Math.sqrt(a * a + b * b); let res = { mode, l, c: c2 }; if (c2) res.h = normalizeHue_default(Math.atan2(b, a) * 180 / Math.PI); if (alpha !== void 0) res.alpha = alpha; return res; }; var convertLabToLch_default = convertLabToLch; // src/lch/convertLchToLab.js var convertLchToLab = ({ l, c: c2, h, alpha }, mode = "lab") => { if (h === void 0) h = 0; let res = { mode, l, a: c2 ? c2 * Math.cos(h / 180 * Math.PI) : 0, b: c2 ? c2 * Math.sin(h / 180 * Math.PI) : 0 }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertLchToLab_default = convertLchToLab; // src/xyz65/constants.js var k = Math.pow(29, 3) / Math.pow(3, 3); var e = Math.pow(6, 3) / Math.pow(29, 3); // src/constants.js var D50 = { X: 0.3457 / 0.3585, Y: 1, Z: (1 - 0.3457 - 0.3585) / 0.3585 }; var D65 = { X: 0.3127 / 0.329, Y: 1, Z: (1 - 0.3127 - 0.329) / 0.329 }; var k2 = Math.pow(29, 3) / Math.pow(3, 3); var e2 = Math.pow(6, 3) / Math.pow(29, 3); // src/lab65/convertLab65ToXyz65.js var fn3 = (v) => Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k; var convertLab65ToXyz65 = ({ l, a, b, alpha }) => { if (l === void 0) l = 0; if (a === void 0) a = 0; if (b === void 0) b = 0; let fy = (l + 16) / 116; let fx = a / 500 + fy; let fz = fy - b / 200; let res = { mode: "xyz65", x: fn3(fx) * D65.X, y: fn3(fy) * D65.Y, z: fn3(fz) * D65.Z }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertLab65ToXyz65_default = convertLab65ToXyz65; // src/lab65/convertLab65ToRgb.js var convertLab65ToRgb = (lab2) => convertXyz65ToRgb_default(convertLab65ToXyz65_default(lab2)); var convertLab65ToRgb_default = convertLab65ToRgb; // src/lab65/convertXyz65ToLab65.js var f = (value) => value > e ? Math.cbrt(value) : (k * value + 16) / 116; var convertXyz65ToLab65 = ({ x, y, z, alpha }) => { if (x === void 0) x = 0; if (y === void 0) y = 0; if (z === void 0) z = 0; let f0 = f(x / D65.X); let f1 = f(y / D65.Y); let f22 = f(z / D65.Z); let res = { mode: "lab65", l: 116 * f1 - 16, a: 500 * (f0 - f1), b: 200 * (f1 - f22) }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToLab65_default = convertXyz65ToLab65; // src/lab65/convertRgbToLab65.js var convertRgbToLab65 = (rgb5) => { let res = convertXyz65ToLab65_default(convertRgbToXyz65_default(rgb5)); if (rgb5.r === rgb5.b && rgb5.b === rgb5.g) { res.a = res.b = 0; } return res; }; var convertRgbToLab65_default = convertRgbToLab65; // src/dlch/constants.js var kE = 1; var kCH = 1; var \u03B8 = 26 / 180 * Math.PI; var cos\u03B8 = Math.cos(\u03B8); var sin\u03B8 = Math.sin(