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, 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, 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, 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: () => hsl, 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, 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, modeJab: () => definition_default10, modeJch: () => definition_default11, modeLab: () => definition_default12, modeLab65: () => definition_default13, modeLch: () => definition_default14, modeLch65: () => definition_default15, modeLchuv: () => definition_default16, modeLrgb: () => definition_default17, modeLuv: () => definition_default18, modeOkhsl: () => modeOkhsl_default, modeOkhsv: () => modeOkhsv_default, modeOklab: () => definition_default19, modeOklch: () => definition_default20, modeP3: () => definition_default21, modeProphoto: () => definition_default22, modeRec2020: () => definition_default23, modeRgb: () => definition_default, modeXyb: () => definition_default24, modeXyz50: () => definition_default25, modeXyz65: () => definition_default26, modeYiq: () => definition_default27, 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: () => rgb3, 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 }); module.exports = __toCommonJS(src_exports); // 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 = match[4] / 100; } else if (match[5] !== void 0) { res.alpha = +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 = (definition28) => { converters[definition28.mode] = { ...converters[definition28.mode], ...definition28.toMode }; Object.keys(definition28.fromMode || {}).forEach((k4) => { if (!converters[k4]) { converters[k4] = {}; } converters[k4][definition28.mode] = definition28.fromMode[k4]; }); if (!definition28.ranges) { definition28.ranges = {}; } if (!definition28.difference) { definition28.difference = {}; } definition28.channels.forEach((channel) => { if (definition28.ranges[channel] === void 0) { definition28.ranges[channel] = [0, 1]; } if (!definition28.interpolate[channel]) { throw new Error(`Missing interpolator for: ${channel}`); } if (typeof definition28.interpolate[channel] === "function") { definition28.interpolate[channel] = { use: definition28.interpolate[channel] }; } if (!definition28.interpolate[channel].fixup) { definition28.interpolate[channel].fixup = identity; } }); modes[definition28.mode] = definition28; (definition28.parse || []).forEach((parser) => { useParser(parser, definition28.mode); }); return converter_default(definition28.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, c4; ii < channels.length; ii++) { c4 = coords[ii]; if (c4.type !== Tok.None) { res[channels[ii]] = c4.type === Tok.Number ? c4.value : c4.value / 100; } } 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((c4) => c4.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 = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseRgb_default = parseRgb; // src/rgb/parseTransparent.js var parseTransparent = (c4) => c4 === "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 }; var definition_default = definition; // src/a98/convertA98ToXyz65.js var linearize = (v) => 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 }) => { 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 = (c4) => { const abs3 = Math.abs(c4); if (abs3 <= 0.04045) { return c4 / 12.92; } return (Math.sign(c4) || 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 = (rgb4) => { let { r: r2, g, b, alpha } = convertRgbToLrgb_default(rgb4); 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 = (c4) => { const abs3 = Math.abs(c4); if (abs3 > 31308e-7) { return (Math.sign(c4) || 1) * (1.055 * Math.pow(abs3, 1 / 2.4) - 0.055); } return c4 * 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 }) => { 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 }) => { 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; 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, c4 = 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(c4 * 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]); // 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 } ); return Math.atan2(sum.sin, sum.cos) * 180 / Math.PI; }; 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((c4) => c4[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") => { let c4 = Math.sqrt(a * a + b * b); let res = { mode, l, c: c4 }; if (c4) 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: c4, h, alpha }, mode = "lab") => { let res = { mode, l, a: c4 ? c4 * Math.cos(h / 180 * Math.PI) : 0, b: c4 ? c4 * 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 }) => { 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 }) => { 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 = (rgb4) => { let res = convertXyz65ToLab65_default(convertRgbToXyz65_default(rgb4)); if (rgb4.r === rgb4.b && rgb4.b === rgb4.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(\u03B8); var factor = 100 / Math.log(139 / 100); // src/dlch/convertDlchToLab65.js var convertDlchToLab65 = ({ l, c: c4, h, alpha }) => { let res = { mode: "lab65", l: (Math.exp(l * kE / factor) - 1) / 39e-4 }; if (h === void 0) { res.a = res.b = 0; } else { let G = (Math.exp(0.0435 * c4 * kCH * kE) - 1) / 0.075; let e4 = G * Math.cos(h / 180 * Math.PI - \u03B8); let f3 = G * Math.sin(h / 180 * Math.PI - \u03B8); res.a = e4 * cos\u03B8 - f3 / 0.83 * sin\u03B8; res.b = e4 * sin\u03B8 + f3 / 0.83 * cos\u03B8; } if (alpha !== void 0) res.alpha = alpha; return res; }; var convertDlchToLab65_default = convertDlchToLab65; // src/dlch/convertLab65ToDlch.js var convertLab65ToDlch = ({ l, a, b, alpha }) => { let e4 = a * cos\u03B8 + b * sin\u03B8; let f3 = 0.83 * (b * cos\u03B8 - a * sin\u03B8); let G = Math.sqrt(e4 * e4 + f3 * f3); let res = { mode: "dlch", l: factor / kE * Math.log(1 + 39e-4 * l), c: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE) }; if (res.c) { res.h = normalizeHue_default((Math.atan2(f3, e4) + \u03B8) / Math.PI * 180); } if (alpha !== void 0) res.alpha = alpha; return res; }; var convertLab65ToDlch_default = convertLab65ToDlch; // src/dlab/definition.js var convertDlabToLab65 = (c4) => convertDlchToLab65_default(convertLabToLch_default(c4, "dlch")); var convertLab65ToDlab = (c4) => convertLchToLab_default(convertLab65ToDlch_default(c4), "dlab"); var definition4 = { mode: "dlab", parse: ["--din99o-lab"], serialize: "--din99o-lab", toMode: { lab65: convertDlabToLab65, rgb: (c4) => convertLab65ToRgb_default(convertDlabToLab65(c4)) }, fromMode: { lab65: convertLab65ToDlab, rgb: (c4) => convertLab65ToDlab(convertRgbToLab65_default(c4)) }, channels: ["l", "a", "b", "alpha"], ranges: { l: [0, 100], a: [-40.09, 45.501], b: [-40.469, 44.344] }, interpolate: { l: interpolatorLinear, a: interpolatorLinear, b: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default4 = definition4; // src/dlch/definition.js var definition5 = { mode: "dlch", parse: ["--din99o-lch"], serialize: "--din99o-lch", toMode: { lab65: convertDlchToLab65_default, dlab: (c4) => convertLchToLab_default(c4, "dlab"), rgb: (c4) => convertLab65ToRgb_default(convertDlchToLab65_default(c4)) }, fromMode: { lab65: convertLab65ToDlch_default, dlab: (c4) => convertLabToLch_default(c4, "dlch"), rgb: (c4) => convertLab65ToDlch_default(convertRgbToLab65_default(c4)) }, channels: ["l", "c", "h", "alpha"], ranges: { l: [0, 100], c: [0, 51.484], h: [0, 360] }, interpolate: { l: interpolatorLinear, c: interpolatorLinear, h: { use: interpolatorLinear, fixup: fixupHueShorter }, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueChroma }, average: { h: averageAngle } }; var definition_default5 = definition5; // src/hsi/convertHsiToRgb.js function convertHsiToRgb({ h, s, i, alpha }) { h = normalizeHue_default(h); let f3 = Math.abs(h / 60 % 2 - 1); let res; switch (Math.floor(h / 60)) { case 0: res = { r: i * (1 + s * (3 / (2 - f3) - 1)), g: i * (1 + s * (3 * (1 - f3) / (2 - f3) - 1)), b: i * (1 - s) }; break; case 1: res = { r: i * (1 + s * (3 * (1 - f3) / (2 - f3) - 1)), g: i * (1 + s * (3 / (2 - f3) - 1)), b: i * (1 - s) }; break; case 2: res = { r: i * (1 - s), g: i * (1 + s * (3 / (2 - f3) - 1)), b: i * (1 + s * (3 * (1 - f3) / (2 - f3) - 1)) }; break; case 3: res = { r: i * (1 - s), g: i * (1 + s * (3 * (1 - f3) / (2 - f3) - 1)), b: i * (1 + s * (3 / (2 - f3) - 1)) }; break; case 4: res = { r: i * (1 + s * (3 * (1 - f3) / (2 - f3) - 1)), g: i * (1 - s), b: i * (1 + s * (3 / (2 - f3) - 1)) }; break; case 5: res = { r: i * (1 + s * (3 / (2 - f3) - 1)), g: i * (1 - s), b: i * (1 + s * (3 * (1 - f3) / (2 - f3) - 1)) }; break; default: res = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) }; } res.mode = "rgb"; if (alpha !== void 0) res.alpha = alpha; return res; } // src/hsi/convertRgbToHsi.js function convertRgbToHsi({ r: r2, g, b, alpha }) { let M2 = Math.max(r2, g, b), m = Math.min(r2, g, b); let res = { mode: "hsi", s: r2 + g + b === 0 ? 0 : 1 - 3 * m / (r2 + g + b), i: (r2 + g + b) / 3 }; if (M2 - m !== 0) res.h = (M2 === r2 ? (g - b) / (M2 - m) + (g < b) * 6 : M2 === g ? (b - r2) / (M2 - m) + 2 : (r2 - g) / (M2 - m) + 4) * 60; if (alpha !== void 0) res.alpha = alpha; return res; } // src/hsi/definition.js var definition6 = { mode: "hsi", toMode: { rgb: convertHsiToRgb }, parse: ["--hsi"], serialize: "--hsi", fromMode: { rgb: convertRgbToHsi }, channels: ["h", "s", "i", "alpha"], ranges: { h: [0, 360] }, gamut: "rgb", interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, s: interpolatorLinear, i: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueSaturation }, average: { h: averageAngle } }; var definition_default6 = definition6; // src/hsl/convertHslToRgb.js function convertHslToRgb({ h, s, l, alpha }) { h = normalizeHue_default(h); let m1 = l + s * (l < 0.5 ? l : 1 - l); let m2 = m1 - (m1 - l) * 2 * Math.abs(h / 60 % 2 - 1); let res; switch (Math.floor(h / 60)) { case 0: res = { r: m1, g: m2, b: 2 * l - m1 }; break; case 1: res = { r: m2, g: m1, b: 2 * l - m1 }; break; case 2: res = { r: 2 * l - m1, g: m1, b: m2 }; break; case 3: res = { r: 2 * l - m1, g: m2, b: m1 }; break; case 4: res = { r: m2, g: 2 * l - m1, b: m1 }; break; case 5: res = { r: m1, g: 2 * l - m1, b: m2 }; break; default: res = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 }; } res.mode = "rgb"; if (alpha !== void 0) res.alpha = alpha; return res; } // src/hsl/convertRgbToHsl.js function convertRgbToHsl({ r: r2, g, b, alpha }) { let M2 = Math.max(r2, g, b), m = Math.min(r2, g, b); let res = { mode: "hsl", s: M2 === m ? 0 : (M2 - m) / (1 - Math.abs(M2 + m - 1)), l: 0.5 * (M2 + m) }; if (M2 - m !== 0) res.h = (M2 === r2 ? (g - b) / (M2 - m) + (g < b) * 6 : M2 === g ? (b - r2) / (M2 - m) + 2 : (r2 - g) / (M2 - m) + 4) * 60; if (alpha !== void 0) res.alpha = alpha; return res; } // src/util/hue.js var hueToDeg = (val, unit) => { switch (unit) { case "deg": return +val; case "rad": return val / Math.PI * 180; case "grad": return val / 10 * 9; case "turn": return val * 360; } }; var hue_default = hueToDeg; // src/hsl/parseHslLegacy.js var hsl_old = new RegExp( `^hsla?\\(\\s*${hue}${c}${per}${c}${per}\\s*(?:,\\s*${num_per}\\s*)?\\)$` ); var parseHslLegacy = (color) => { let match = color.match(hsl_old); if (!match) return; let res = { mode: "hsl" }; if (match[3] !== void 0) { res.h = +match[3]; } else if (match[1] !== void 0 && match[2] !== void 0) { res.h = hue_default(match[1], match[2]); } if (match[4] !== void 0) { res.s = Math.min(Math.max(0, match[4] / 100), 1); } if (match[5] !== void 0) { res.l = Math.min(Math.max(0, match[5] / 100), 1); } if (match[6] !== void 0) { res.alpha = match[6] / 100; } else if (match[7] !== void 0) { res.alpha = +match[7]; } return res; }; var parseHslLegacy_default = parseHslLegacy; // src/hsl/parseHsl.js function parseHsl(color, parsed) { if (!parsed || parsed[0] !== "hsl" && parsed[0] !== "hsla") { return void 0; } const res = { mode: "hsl" }; const [, h, s, l, alpha] = parsed; if (h.type !== Tok.None) { if (h.type === Tok.Percentage) { return void 0; } res.h = h.value; } if (s.type !== Tok.None) { if (s.type === Tok.Hue) { return void 0; } res.s = s.type === Tok.Number ? s.value : s.value / 100; } if (l.type !== Tok.None) { if (l.type === Tok.Hue) { return void 0; } res.l = l.type === Tok.Number ? l.value : l.value / 100; } if (alpha.type !== Tok.None) { res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseHsl_default = parseHsl; // src/hsl/definition.js var definition7 = { mode: "hsl", toMode: { rgb: convertHslToRgb }, fromMode: { rgb: convertRgbToHsl }, channels: ["h", "s", "l", "alpha"], ranges: { h: [0, 360] }, gamut: "rgb", parse: [parseHsl_default, parseHslLegacy_default], serialize: (c4) => `hsl(${c4.h || 0} ${c4.s !== void 0 ? c4.s * 100 + "%" : "none"} ${c4.l !== void 0 ? c4.l * 100 + "%" : "none"}${c4.alpha < 1 ? ` / ${c4.alpha}` : ""})`, interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, s: interpolatorLinear, l: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueSaturation }, average: { h: averageAngle } }; var definition_default7 = definition7; // src/hsv/convertHsvToRgb.js function convertHsvToRgb({ h, s, v, alpha }) { h = normalizeHue_default(h); let f3 = Math.abs(h / 60 % 2 - 1); let res; switch (Math.floor(h / 60)) { case 0: res = { r: v, g: v * (1 - s * f3), b: v * (1 - s) }; break; case 1: res = { r: v * (1 - s * f3), g: v, b: v * (1 - s) }; break; case 2: res = { r: v * (1 - s), g: v, b: v * (1 - s * f3) }; break; case 3: res = { r: v * (1 - s), g: v * (1 - s * f3), b: v }; break; case 4: res = { r: v * (1 - s * f3), g: v * (1 - s), b: v }; break; case 5: res = { r: v, g: v * (1 - s), b: v * (1 - s * f3) }; break; default: res = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) }; } res.mode = "rgb"; if (alpha !== void 0) res.alpha = alpha; return res; } // src/hsv/convertRgbToHsv.js function convertRgbToHsv({ r: r2, g, b, alpha }) { let M2 = Math.max(r2, g, b), m = Math.min(r2, g, b); let res = { mode: "hsv", s: M2 === 0 ? 0 : 1 - m / M2, v: M2 }; if (M2 - m !== 0) res.h = (M2 === r2 ? (g - b) / (M2 - m) + (g < b) * 6 : M2 === g ? (b - r2) / (M2 - m) + 2 : (r2 - g) / (M2 - m) + 4) * 60; if (alpha !== void 0) res.alpha = alpha; return res; } // src/hsv/definition.js var definition8 = { mode: "hsv", toMode: { rgb: convertHsvToRgb }, parse: ["--hsv"], serialize: "--hsv", fromMode: { rgb: convertRgbToHsv }, channels: ["h", "s", "v", "alpha"], ranges: { h: [0, 360] }, gamut: "rgb", interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, s: interpolatorLinear, v: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueSaturation }, average: { h: averageAngle } }; var definition_default8 = definition8; // src/hwb/convertHwbToRgb.js function convertHwbToRgb({ h, w, b, alpha }) { if (w + b > 1) { let s = w + b; w /= s; b /= s; } return convertHsvToRgb({ h, s: b === 1 ? 1 : 1 - w / (1 - b), v: 1 - b, alpha }); } // src/hwb/convertRgbToHwb.js function convertRgbToHwb(rgba) { let hsv2 = convertRgbToHsv(rgba); if (hsv2 === void 0) return void 0; let res = { mode: "hwb", w: (1 - hsv2.s) * hsv2.v, b: 1 - hsv2.v }; if (hsv2.h !== void 0) res.h = hsv2.h; if (hsv2.alpha !== void 0) res.alpha = hsv2.alpha; return res; } // src/hwb/parseHwb.js function ParseHwb(color, parsed) { if (!parsed || parsed[0] !== "hwb") { return void 0; } const res = { mode: "hwb" }; const [, h, w, b, alpha] = parsed; if (h.type !== Tok.None) { if (h.type === Tok.Percentage) { return void 0; } res.h = h.value; } if (w.type !== Tok.None) { if (w.type === Tok.Hue) { return void 0; } res.w = w.type === Tok.Number ? w.value : w.value / 100; } if (b.type !== Tok.None) { if (b.type === Tok.Hue) { return void 0; } res.b = b.type === Tok.Number ? b.value : b.value / 100; } if (alpha.type !== Tok.None) { res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseHwb_default = ParseHwb; // src/hwb/definition.js var definition9 = { mode: "hwb", toMode: { rgb: convertHwbToRgb }, fromMode: { rgb: convertRgbToHwb }, channels: ["h", "w", "b", "alpha"], ranges: { h: [0, 360] }, gamut: "rgb", parse: [parseHwb_default], serialize: (c4) => `hwb(${c4.h || 0} ${c4.w * 100}% ${c4.b * 100}%${c4.alpha < 1 ? ` / ${c4.alpha}` : ""})`, interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, w: interpolatorLinear, b: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueNaive }, average: { h: averageAngle } }; var definition_default9 = definition9; // src/jab/convertXyz65ToJab.js var n = 0.1593017578125; var p = 134.03437499999998; var c1 = 0.8359375; var c2 = 18.8515625; var c3 = 18.6875; var d0 = 16295499532821565e-27; var pq = (v) => { let vn3 = Math.pow(v / 1e4, n); return Math.pow((c1 + c2 * vn3) / (1 + c3 * vn3), p) || 0; }; var abs = (v) => Math.max(v * 203, 0); var convertXyz65ToJab = ({ x, y, z, alpha }) => { x = abs(x); y = abs(y); z = abs(z); let xp = 1.15 * x - 0.15 * z; let yp = 0.66 * y + 0.34 * x; let l = pq(0.41478972 * xp + 0.579999 * yp + 0.014648 * z); let m = pq(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z); let s = pq(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z); let i = (l + m) / 2; let res = { mode: "jab", j: 0.44 * i / (1 - 0.56 * i) - d0, a: 3.524 * l - 4.066708 * m + 0.542708 * s, b: 0.199076 * l + 1.096799 * m - 1.295875 * s }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToJab_default = convertXyz65ToJab; // src/jab/convertJabToXyz65.js var n2 = 0.1593017578125; var p2 = 134.03437499999998; var c12 = 0.8359375; var c22 = 18.8515625; var c32 = 18.6875; var d02 = 16295499532821565e-27; var pq_inv = (v) => { let vp = Math.pow(v, 1 / p2); return 1e4 * Math.pow((c12 - vp) / (c32 * vp - c22), 1 / n2) || 0; }; var rel = (v) => v / 203; var convertJabToXyz65 = ({ j, a, b, alpha }) => { let i = (j + d02) / (0.44 + 0.56 * (j + d02)); let l = pq_inv(i + 0.13860504 * a + 0.058047316 * b); let m = pq_inv(i - 0.13860504 * a - 0.058047316 * b); let s = pq_inv(i - 0.096019242 * a - 0.8118919 * b); let res = { mode: "xyz65", x: rel( 1.661373024652174 * l - 0.914523081304348 * m + 0.23136208173913045 * s ), y: rel( -0.3250758611844533 * l + 1.571847026732543 * m - 0.21825383453227928 * s ), z: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s) }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertJabToXyz65_default = convertJabToXyz65; // src/jab/convertRgbToJab.js var convertRgbToJab = (rgb4) => { let res = convertXyz65ToJab_default(convertRgbToXyz65_default(rgb4)); if (rgb4.r === rgb4.b && rgb4.b === rgb4.g) { res.a = res.b = 0; } return res; }; var convertRgbToJab_default = convertRgbToJab; // src/jab/convertJabToRgb.js var convertJabToRgb = (color) => convertXyz65ToRgb_default(convertJabToXyz65_default(color)); var convertJabToRgb_default = convertJabToRgb; // src/jab/definition.js var definition10 = { mode: "jab", channels: ["j", "a", "b", "alpha"], parse: ["--jzazbz"], serialize: "--jzazbz", fromMode: { rgb: convertRgbToJab_default, xyz65: convertXyz65ToJab_default }, toMode: { rgb: convertJabToRgb_default, xyz65: convertJabToXyz65_default }, ranges: { j: [0, 0.222], a: [-0.109, 0.129], b: [-0.185, 0.134] }, interpolate: { j: interpolatorLinear, a: interpolatorLinear, b: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default10 = definition10; // src/jch/convertJabToJch.js var convertJabToJch = ({ j, a, b, alpha }) => { let c4 = Math.sqrt(a * a + b * b); let res = { mode: "jch", j, c: c4 }; if (c4) { res.h = normalizeHue_default(Math.atan2(b, a) * 180 / Math.PI); } if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertJabToJch_default = convertJabToJch; // src/jch/convertJchToJab.js var convertJchToJab = ({ j, c: c4, h, alpha }) => { let res = { mode: "jab", j, a: c4 ? c4 * Math.cos(h / 180 * Math.PI) : 0, b: c4 ? c4 * Math.sin(h / 180 * Math.PI) : 0 }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertJchToJab_default = convertJchToJab; // src/jch/definition.js var definition11 = { mode: "jch", parse: ["--jzczhz"], serialize: "--jzczhz", toMode: { jab: convertJchToJab_default, rgb: (c4) => convertJabToRgb_default(convertJchToJab_default(c4)) }, fromMode: { rgb: (c4) => convertJabToJch_default(convertRgbToJab_default(c4)), jab: convertJabToJch_default }, channels: ["j", "c", "h", "alpha"], ranges: { j: [0, 0.221], c: [0, 0.19], h: [0, 360] }, interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, c: interpolatorLinear, j: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueChroma }, average: { h: averageAngle } }; var definition_default11 = definition11; // src/xyz50/constants.js var k3 = Math.pow(29, 3) / Math.pow(3, 3); var e3 = Math.pow(6, 3) / Math.pow(29, 3); // src/lab/convertLabToXyz50.js var fn4 = (v) => Math.pow(v, 3) > e3 ? Math.pow(v, 3) : (116 * v - 16) / k3; var convertLabToXyz50 = ({ l, a, b, alpha }) => { let fy = (l + 16) / 116; let fx = a / 500 + fy; let fz = fy - b / 200; let res = { mode: "xyz50", x: fn4(fx) * D50.X, y: fn4(fy) * D50.Y, z: fn4(fz) * D50.Z }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertLabToXyz50_default = convertLabToXyz50; // src/xyz50/convertXyz50ToRgb.js var convertXyz50ToRgb = ({ x, y, z, alpha }) => { let res = convertLrgbToRgb_default({ r: x * 3.1341359569958707 - y * 1.6173863321612538 - 0.4906619460083532 * z, g: x * -0.978795502912089 + y * 1.916254567259524 + 0.03344273116131949 * z, b: x * 0.07195537988411677 - y * 0.2289768264158322 + 1.405386058324125 * z }); if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz50ToRgb_default = convertXyz50ToRgb; // src/lab/convertLabToRgb.js var convertLabToRgb = (lab2) => convertXyz50ToRgb_default(convertLabToXyz50_default(lab2)); var convertLabToRgb_default = convertLabToRgb; // src/xyz50/convertRgbToXyz50.js var convertRgbToXyz50 = (rgb4) => { let { r: r2, g, b, alpha } = convertRgbToLrgb_default(rgb4); let res = { mode: "xyz50", x: 0.436065742824811 * r2 + 0.3851514688337912 * g + 0.14307845442264197 * b, y: 0.22249319175623702 * r2 + 0.7168870538238823 * g + 0.06061979053616537 * b, z: 0.013923904500943465 * r2 + 0.09708128566574634 * g + 0.7140993584005155 * b }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertRgbToXyz50_default = convertRgbToXyz50; // src/lab/convertXyz50ToLab.js var f2 = (value) => value > e3 ? Math.cbrt(value) : (k3 * value + 16) / 116; var convertXyz50ToLab = ({ x, y, z, alpha }) => { let f0 = f2(x / D50.X); let f1 = f2(y / D50.Y); let f22 = f2(z / D50.Z); let res = { mode: "lab", l: 116 * f1 - 16, a: 500 * (f0 - f1), b: 200 * (f1 - f22) }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz50ToLab_default = convertXyz50ToLab; // src/lab/convertRgbToLab.js var convertRgbToLab = (rgb4) => { let res = convertXyz50ToLab_default(convertRgbToXyz50_default(rgb4)); if (rgb4.r === rgb4.b && rgb4.b === rgb4.g) { res.a = res.b = 0; } return res; }; var convertRgbToLab_default = convertRgbToLab; // src/lab/parseLab.js function parseLab(color, parsed) { if (!parsed || parsed[0] !== "lab") { return void 0; } const res = { mode: "lab" }; const [, l, a, b, alpha] = parsed; if (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) { return void 0; } if (l.type !== Tok.None) { res.l = l.value; } if (a.type !== Tok.None) { res.a = a.type === Tok.Number ? a.value : a.value * 125 / 100; } if (b.type !== Tok.None) { res.b = b.type === Tok.Number ? b.value : b.value * 125 / 100; } if (alpha.type !== Tok.None) { res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseLab_default = parseLab; // src/lab/definition.js var definition12 = { mode: "lab", toMode: { xyz50: convertLabToXyz50_default, rgb: convertLabToRgb_default }, fromMode: { xyz50: convertXyz50ToLab_default, rgb: convertRgbToLab_default }, channels: ["l", "a", "b", "alpha"], ranges: { l: [0, 100], a: [-100, 100], b: [-100, 100] }, parse: [parseLab_default], serialize: (c4) => `lab(${c4.l !== void 0 ? c4.l : "none"} ${c4.a !== void 0 ? c4.a : "none"} ${c4.b !== void 0 ? c4.b : "none"}${c4.alpha < 1 ? ` / ${c4.alpha}` : ""})`, interpolate: { l: interpolatorLinear, a: interpolatorLinear, b: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default12 = definition12; // src/lab65/definition.js var definition13 = { ...definition_default12, mode: "lab65", parse: ["--lab-d65"], serialize: "--lab-d65", toMode: { xyz65: convertLab65ToXyz65_default, rgb: convertLab65ToRgb_default }, fromMode: { xyz65: convertXyz65ToLab65_default, rgb: convertRgbToLab65_default }, ranges: { l: [0, 100], a: [-86.182, 98.234], b: [-107.86, 94.477] } }; var definition_default13 = definition13; // src/lch/parseLch.js function parseLch(color, parsed) { if (!parsed || parsed[0] !== "lch") { return void 0; } const res = { mode: "lch" }; const [, l, c4, h, alpha] = parsed; if (l.type !== Tok.None) { if (l.type === Tok.Hue) { return void 0; } res.l = l.value; } if (c4.type !== Tok.None) { res.c = Math.max( 0, c4.type === Tok.Number ? c4.value : c4.value * 150 / 100 ); } if (h.type !== Tok.None) { if (h.type === Tok.Percentage) { return void 0; } res.h = h.value; } if (alpha.type !== Tok.None) { res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseLch_default = parseLch; // src/lch/definition.js var definition14 = { mode: "lch", toMode: { lab: convertLchToLab_default, rgb: (c4) => convertLabToRgb_default(convertLchToLab_default(c4)) }, fromMode: { rgb: (c4) => convertLabToLch_default(convertRgbToLab_default(c4)), lab: convertLabToLch_default }, channels: ["l", "c", "h", "alpha"], ranges: { l: [0, 100], c: [0, 150], h: [0, 360] }, parse: [parseLch_default], serialize: (c4) => `lch(${c4.l !== void 0 ? c4.l : "none"} ${c4.c !== void 0 ? c4.c : "none"} ${c4.h || 0}${c4.alpha < 1 ? ` / ${c4.alpha}` : ""})`, interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, c: interpolatorLinear, l: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueChroma }, average: { h: averageAngle } }; var definition_default14 = definition14; // src/lch65/definition.js var definition15 = { ...definition_default14, mode: "lch65", parse: ["--lch-d65"], serialize: "--lch-d65", toMode: { lab65: (c4) => convertLchToLab_default(c4, "lab65"), rgb: (c4) => convertLab65ToRgb_default(convertLchToLab_default(c4, "lab65")) }, fromMode: { rgb: (c4) => convertLabToLch_default(convertRgbToLab65_default(c4), "lch65"), lab65: (c4) => convertLabToLch_default(c4, "lch65") }, ranges: { l: [0, 100], c: [0, 133.807], h: [0, 360] } }; var definition_default15 = definition15; // src/lchuv/convertLuvToLchuv.js var convertLuvToLchuv = ({ l, u, v, alpha }) => { let c4 = Math.sqrt(u * u + v * v); let res = { mode: "lchuv", l, c: c4 }; if (c4) { res.h = normalizeHue_default(Math.atan2(v, u) * 180 / Math.PI); } if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertLuvToLchuv_default = convertLuvToLchuv; // src/lchuv/convertLchuvToLuv.js var convertLchuvToLuv = ({ l, c: c4, h, alpha }) => { let res = { mode: "luv", l, u: c4 ? c4 * Math.cos(h / 180 * Math.PI) : 0, v: c4 ? c4 * Math.sin(h / 180 * Math.PI) : 0 }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertLchuvToLuv_default = convertLchuvToLuv; // src/luv/convertXyz50ToLuv.js var u_fn = (x, y, z) => 4 * x / (x + 15 * y + 3 * z); var v_fn = (x, y, z) => 9 * y / (x + 15 * y + 3 * z); var un = u_fn(D50.X, D50.Y, D50.Z); var vn = v_fn(D50.X, D50.Y, D50.Z); var l_fn = (value) => value <= e3 ? k3 * value : 116 * Math.cbrt(value) - 16; var convertXyz50ToLuv = ({ x, y, z, alpha }) => { let l = l_fn(y / D50.Y); let u = u_fn(x, y, z); let v = v_fn(x, y, z); if (!isFinite(u) || !isFinite(v)) { l = u = v = 0; } else { u = 13 * l * (u - un); v = 13 * l * (v - vn); } let res = { mode: "luv", l, u, v }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz50ToLuv_default = convertXyz50ToLuv; // src/luv/convertLuvToXyz50.js var u_fn2 = (x, y, z) => 4 * x / (x + 15 * y + 3 * z); var v_fn2 = (x, y, z) => 9 * y / (x + 15 * y + 3 * z); var un2 = u_fn2(D50.X, D50.Y, D50.Z); var vn2 = v_fn2(D50.X, D50.Y, D50.Z); var convertLuvToXyz50 = ({ l, u, v, alpha }) => { let up = u / (13 * l) + un2; let vp = v / (13 * l) + vn2; let y = D50.Y * (l <= 8 ? l / k3 : Math.pow((l + 16) / 116, 3)); let x = y * (9 * up) / (4 * vp); let z = y * (12 - 3 * up - 20 * vp) / (4 * vp); let res = { mode: "xyz50", x, y, z }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertLuvToXyz50_default = convertLuvToXyz50; // src/lchuv/definition.js var convertRgbToLchuv = (rgb4) => convertLuvToLchuv_default(convertXyz50ToLuv_default(convertRgbToXyz50_default(rgb4))); var convertLchuvToRgb = (lchuv2) => convertXyz50ToRgb_default(convertLuvToXyz50_default(convertLchuvToLuv_default(lchuv2))); var definition16 = { mode: "lchuv", toMode: { luv: convertLchuvToLuv_default, rgb: convertLchuvToRgb }, fromMode: { rgb: convertRgbToLchuv, luv: convertLuvToLchuv_default }, channels: ["l", "c", "h", "alpha"], parse: ["--lchuv"], serialize: "--lchuv", ranges: { l: [0, 100], c: [0, 176.956], h: [0, 360] }, interpolate: { h: { use: interpolatorLinear, fixup: fixupHueShorter }, c: interpolatorLinear, l: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } }, difference: { h: differenceHueChroma }, average: { h: averageAngle } }; var definition_default16 = definition16; // src/lrgb/definition.js var definition17 = { ...definition_default, mode: "lrgb", toMode: { rgb: convertLrgbToRgb_default }, fromMode: { rgb: convertRgbToLrgb_default }, parse: ["srgb-linear"], serialize: "srgb-linear" }; var definition_default17 = definition17; // src/luv/definition.js var definition18 = { mode: "luv", toMode: { xyz50: convertLuvToXyz50_default, rgb: (luv2) => convertXyz50ToRgb_default(convertLuvToXyz50_default(luv2)) }, fromMode: { xyz50: convertXyz50ToLuv_default, rgb: (rgb4) => convertXyz50ToLuv_default(convertRgbToXyz50_default(rgb4)) }, channels: ["l", "u", "v", "alpha"], parse: ["--luv"], serialize: "--luv", ranges: { l: [0, 100], u: [-84.936, 175.042], v: [-125.882, 87.243] }, interpolate: { l: interpolatorLinear, u: interpolatorLinear, v: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default18 = definition18; // src/oklab/convertLrgbToOklab.js var convertLrgbToOklab = ({ r: r2, g, b, alpha }) => { let L = Math.cbrt( 0.41222147079999993 * r2 + 0.5363325363 * g + 0.0514459929 * b ); let M2 = Math.cbrt( 0.2119034981999999 * r2 + 0.6806995450999999 * g + 0.1073969566 * b ); let S = Math.cbrt( 0.08830246189999998 * r2 + 0.2817188376 * g + 0.6299787005000002 * b ); let res = { mode: "oklab", l: 0.2104542553 * L + 0.793617785 * M2 - 0.0040720468 * S, a: 1.9779984951 * L - 2.428592205 * M2 + 0.4505937099 * S, b: 0.0259040371 * L + 0.7827717662 * M2 - 0.808675766 * S }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertLrgbToOklab_default = convertLrgbToOklab; // src/oklab/convertRgbToOklab.js var convertRgbToOklab = (rgb4) => { let res = convertLrgbToOklab_default(convertRgbToLrgb_default(rgb4)); if (rgb4.r === rgb4.b && rgb4.b === rgb4.g) { res.a = res.b = 0; } return res; }; var convertRgbToOklab_default = convertRgbToOklab; // src/oklab/convertOklabToLrgb.js var convertOklabToLrgb = ({ l, a, b, alpha }) => { let L = Math.pow( l * 0.9999999984505198 + 0.39633779217376786 * a + 0.2158037580607588 * b, 3 ); let M2 = Math.pow( l * 1.0000000088817609 - 0.10556134232365635 * a - 0.06385417477170591 * b, 3 ); let S = Math.pow( l * 1.0000000546724108 - 0.08948418209496575 * a - 1.2914855378640917 * b, 3 ); let res = { mode: "lrgb", r: 4.076741661347994 * L - 3.307711590408193 * M2 + 0.230969928729428 * S, g: -1.2684380040921763 * L + 2.6097574006633715 * M2 - 0.3413193963102197 * S, b: -0.004196086541837188 * L - 0.7034186144594493 * M2 + 1.7076147009309444 * S }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertOklabToLrgb_default = convertOklabToLrgb; // src/oklab/convertOklabToRgb.js var convertOklabToRgb = (c4) => convertLrgbToRgb_default(convertOklabToLrgb_default(c4)); var convertOklabToRgb_default = convertOklabToRgb; // src/okhsl/helpers.js function toe(x) { const k_1 = 0.206; const k_2 = 0.03; const k_3 = (1 + k_1) / (1 + k_2); return 0.5 * (k_3 * x - k_1 + Math.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x)); } function toe_inv(x) { const k_1 = 0.206; const k_2 = 0.03; const k_3 = (1 + k_1) / (1 + k_2); return (x * x + k_1 * x) / (k_3 * (x + k_2)); } function compute_max_saturation(a, b) { let k0, k1, k22, k32, k4, wl, wm, ws; if (-1.88170328 * a - 0.80936493 * b > 1) { k0 = 1.19086277; k1 = 1.76576728; k22 = 0.59662641; k32 = 0.75515197; k4 = 0.56771245; wl = 4.0767416621; wm = -3.3077115913; ws = 0.2309699292; } else if (1.81444104 * a - 1.19445276 * b > 1) { k0 = 0.73956515; k1 = -0.45954404; k22 = 0.08285427; k32 = 0.1254107; k4 = 0.14503204; wl = -1.2684380046; wm = 2.6097574011; ws = -0.3413193965; } else { k0 = 1.35733652; k1 = -915799e-8; k22 = -1.1513021; k32 = -0.50559606; k4 = 692167e-8; wl = -0.0041960863; wm = -0.7034186147; ws = 1.707614701; } let S = k0 + k1 * a + k22 * b + k32 * a * a + k4 * a * b; let k_l = 0.3963377774 * a + 0.2158037573 * b; let k_m = -0.1055613458 * a - 0.0638541728 * b; let k_s = -0.0894841775 * a - 1.291485548 * b; { let l_ = 1 + S * k_l; let m_ = 1 + S * k_m; let s_ = 1 + S * k_s; let l = l_ * l_ * l_; let m = m_ * m_ * m_; let s = s_ * s_ * s_; let l_dS = 3 * k_l * l_ * l_; let m_dS = 3 * k_m * m_ * m_; let s_dS = 3 * k_s * s_ * s_; let l_dS2 = 6 * k_l * k_l * l_; let m_dS2 = 6 * k_m * k_m * m_; let s_dS2 = 6 * k_s * k_s * s_; let f3 = wl * l + wm * m + ws * s; let f1 = wl * l_dS + wm * m_dS + ws * s_dS; let f22 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2; S = S - f3 * f1 / (f1 * f1 - 0.5 * f3 * f22); } return S; } function find_cusp(a, b) { let S_cusp = compute_max_saturation(a, b); let rgb4 = convertOklabToLrgb_default({ l: 1, a: S_cusp * a, b: S_cusp * b }); let L_cusp = Math.cbrt(1 / Math.max(rgb4.r, rgb4.g, rgb4.b)); let C_cusp = L_cusp * S_cusp; return [L_cusp, C_cusp]; } function find_gamut_intersection(a, b, L1, C1, L0, cusp = null) { if (!cusp) { cusp = find_cusp(a, b); } let t; if ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) { t = cusp[1] * L0 / (C1 * cusp[0] + cusp[1] * (L0 - L1)); } else { t = cusp[1] * (L0 - 1) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1)); { let dL = L1 - L0; let dC = C1; let k_l = 0.3963377774 * a + 0.2158037573 * b; let k_m = -0.1055613458 * a - 0.0638541728 * b; let k_s = -0.0894841775 * a - 1.291485548 * b; let l_dt = dL + dC * k_l; let m_dt = dL + dC * k_m; let s_dt = dL + dC * k_s; { let L = L0 * (1 - t) + t * L1; let C = t * C1; let l_ = L + C * k_l; let m_ = L + C * k_m; let s_ = L + C * k_s; let l = l_ * l_ * l_; let m = m_ * m_ * m_; let s = s_ * s_ * s_; let ldt = 3 * l_dt * l_ * l_; let mdt = 3 * m_dt * m_ * m_; let sdt = 3 * s_dt * s_ * s_; let ldt2 = 6 * l_dt * l_dt * l_; let mdt2 = 6 * m_dt * m_dt * m_; let sdt2 = 6 * s_dt * s_dt * s_; let r2 = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1; let r1 = 4.0767416621 * ldt - 3.3077115913 * mdt + 0.2309699292 * sdt; let r22 = 4.0767416621 * ldt2 - 3.3077115913 * mdt2 + 0.2309699292 * sdt2; let u_r = r1 / (r1 * r1 - 0.5 * r2 * r22); let t_r = -r2 * u_r; let g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1; let g1 = -1.2684380046 * ldt + 2.6097574011 * mdt - 0.3413193965 * sdt; let g2 = -1.2684380046 * ldt2 + 2.6097574011 * mdt2 - 0.3413193965 * sdt2; let u_g = g1 / (g1 * g1 - 0.5 * g * g2); let t_g = -g * u_g; let b2 = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1; let b1 = -0.0041960863 * ldt - 0.7034186147 * mdt + 1.707614701 * sdt; let b22 = -0.0041960863 * ldt2 - 0.7034186147 * mdt2 + 1.707614701 * sdt2; let u_b = b1 / (b1 * b1 - 0.5 * b2 * b22); let t_b = -b2 * u_b; t_r = u_r >= 0 ? t_r : 1e6; t_g = u_g >= 0 ? t_g : 1e6; t_b = u_b >= 0 ? t_b : 1e6; t += Math.min(t_r, Math.min(t_g, t_b)); } } } return t; } function get_ST_max(a_, b_, cusp = null) { if (!cusp) { cusp = find_cusp(a_, b_); } let L = cusp[0]; let C = cusp[1]; return [C / L, C / (1 - L)]; } function get_Cs(L, a_, b_) { let cusp = find_cusp(a_, b_); let C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp); let ST_max = get_ST_max(a_, b_, cusp); let S_mid = 0.11516993 + 1 / (7.4477897 + 4.1590124 * b_ + a_ * (-2.19557347 + 1.75198401 * b_ + a_ * (-2.13704948 - 10.02301043 * b_ + a_ * (-4.24894561 + 5.38770819 * b_ + 4.69891013 * a_)))); let T_mid = 0.11239642 + 1 / (1.6132032 - 0.68124379 * b_ + a_ * (0.40370612 + 0.90148123 * b_ + a_ * (-0.27087943 + 0.6122399 * b_ + a_ * (299215e-8 - 0.45399568 * b_ - 0.14661872 * a_)))); let k4 = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]); let C_a = L * S_mid; let C_b = (1 - L) * T_mid; let C_mid = 0.9 * k4 * Math.sqrt( Math.sqrt( 1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b)) ) ); C_a = L * 0.4; C_b = (1 - L) * 0.8; let C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b))); return [C_0, C_mid, C_max]; } // src/okhsl/convertOklabToOkhsl.js function convertOklabToOkhsl(lab2) { const ret = { mode: "okhsl", l: toe(lab2.l) }; if (lab2.alpha !== void 0) { ret.alpha = lab2.alpha; } let c4 = Math.sqrt(lab2.a * lab2.a + lab2.b * lab2.b); if (!c4) { ret.s = 0; return ret; } let [C_0, C_mid, C_max] = get_Cs(lab2.l, lab2.a / c4, lab2.b / c4); let s; if (c4 < C_mid) { let k_0 = 0; let k_1 = 0.8 * C_0; let k_2 = 1 - k_1 / C_mid; let t = (c4 - k_0) / (k_1 + k_2 * (c4 - k_0)); s = t * 0.8; } else { let k_0 = C_mid; let k_1 = 0.2 * C_mid * C_mid * 1.25 * 1.25 / C_0; let k_2 = 1 - k_1 / (C_max - C_mid); let t = (c4 - k_0) / (k_1 + k_2 * (c4 - k_0)); s = 0.8 + 0.2 * t; } if (s) { ret.s = s; ret.h = normalizeHue_default(Math.atan2(lab2.b, lab2.a) * 180 / Math.PI); } return ret; } // src/okhsl/convertOkhslToOklab.js function convertOkhslToOklab(hsl2) { let l = toe_inv(hsl2.l); const ret = { mode: "oklab", l }; if (hsl2.alpha !== void 0) { ret.alpha = hsl2.alpha; } if (!hsl2.s || hsl2.l === 1) { ret.a = ret.b = 0; return ret; } let a_ = Math.cos(hsl2.h / 180 * Math.PI); let b_ = Math.sin(hsl2.h / 180 * Math.PI); let [C_0, C_mid, C_max] = get_Cs(l, a_, b_); let t, k_0, k_1, k_2; if (hsl2.s < 0.8) { t = 1.25 * hsl2.s; k_0 = 0; k_1 = 0.8 * C_0; k_2 = 1 - k_1 / C_mid; } else { t = 5 * (hsl2.s - 0.8); k_0 = C_mid; k_1 = 0.2 * C_mid * C_mid * 1.25 * 1.25 / C_0; k_2 = 1 - k_1 / (C_max - C_mid); } let C = k_0 + t * k_1 / (1 - k_2 * t); ret.a = C * a_; ret.b = C * b_; return ret; } // src/okhsl/modeOkhsl.js var modeOkhsl = { ...definition_default7, mode: "okhsl", channels: ["h", "s", "l", "alpha"], parse: ["--okhsl"], serialize: "--okhsl", fromMode: { oklab: convertOklabToOkhsl, rgb: (c4) => convertOklabToOkhsl(convertRgbToOklab_default(c4)) }, toMode: { oklab: convertOkhslToOklab, rgb: (c4) => convertOklabToRgb_default(convertOkhslToOklab(c4)) } }; var modeOkhsl_default = modeOkhsl; // src/okhsv/convertOklabToOkhsv.js function convertOklabToOkhsv(lab2) { let c4 = Math.sqrt(lab2.a * lab2.a + lab2.b * lab2.b); let l = lab2.l; let a_ = c4 ? lab2.a / c4 : 1; let b_ = c4 ? lab2.b / c4 : 1; let [S_max, T] = get_ST_max(a_, b_); let S_0 = 0.5; let k4 = 1 - S_0 / S_max; let t = T / (c4 + l * T); let L_v = t * l; let C_v = t * c4; let L_vt = toe_inv(L_v); let C_vt = C_v * L_vt / L_v; let rgb_scale = convertOklabToLrgb_default({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt }); let scale_L = Math.cbrt( 1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0) ); l = l / scale_L; c4 = c4 / scale_L * toe(l) / l; l = toe(l); const ret = { mode: "okhsv", s: c4 ? (S_0 + T) * C_v / (T * S_0 + T * k4 * C_v) : 0, v: l ? l / L_v : 0 }; if (ret.s) { ret.h = normalizeHue_default(Math.atan2(lab2.b, lab2.a) * 180 / Math.PI); } if (lab2.alpha !== void 0) { ret.alpha = lab2.alpha; } return ret; } // src/okhsv/convertOkhsvToOklab.js function convertOkhsvToOklab(hsv2) { const ret = { mode: "oklab" }; if (hsv2.alpha !== void 0) { ret.alpha = hsv2.alpha; } const h = hsv2.h || 0; const a_ = Math.cos(h / 180 * Math.PI); const b_ = Math.sin(h / 180 * Math.PI); const [S_max, T] = get_ST_max(a_, b_); const S_0 = 0.5; const k4 = 1 - S_0 / S_max; const L_v = 1 - hsv2.s * S_0 / (S_0 + T - T * k4 * hsv2.s); const C_v = hsv2.s * T * S_0 / (S_0 + T - T * k4 * hsv2.s); const L_vt = toe_inv(L_v); const C_vt = C_v * L_vt / L_v; const rgb_scale = convertOklabToLrgb_default({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt }); const scale_L = Math.cbrt( 1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0) ); const L_new = toe_inv(hsv2.v * L_v); const C = C_v * L_new / L_v; ret.l = L_new * scale_L; ret.a = C * a_ * scale_L; ret.b = C * b_ * scale_L; return ret; } // src/okhsv/modeOkhsv.js var modeOkhsv = { ...definition_default8, mode: "okhsv", channels: ["h", "s", "v", "alpha"], parse: ["--okhsv"], serialize: "--okhsv", fromMode: { oklab: convertOklabToOkhsv, rgb: (c4) => convertOklabToOkhsv(convertRgbToOklab_default(c4)) }, toMode: { oklab: convertOkhsvToOklab, rgb: (c4) => convertOklabToRgb_default(convertOkhsvToOklab(c4)) } }; var modeOkhsv_default = modeOkhsv; // src/oklab/parseOklab.js function parseOklab(color, parsed) { if (!parsed || parsed[0] !== "oklab") { return void 0; } const res = { mode: "oklab" }; const [, l, a, b, alpha] = parsed; if (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) { return void 0; } if (l.type !== Tok.None) { res.l = l.type === Tok.Number ? l.value : l.value / 100; } if (a.type !== Tok.None) { res.a = a.type === Tok.Number ? a.value : a.value * 0.4 / 100; } if (b.type !== Tok.None) { res.b = b.type === Tok.Number ? b.value : b.value * 0.4 / 100; } if (alpha.type !== Tok.None) { res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseOklab_default = parseOklab; // src/oklab/definition.js var definition19 = { ...definition_default12, mode: "oklab", toMode: { lrgb: convertOklabToLrgb_default, rgb: convertOklabToRgb_default }, fromMode: { lrgb: convertLrgbToOklab_default, rgb: convertRgbToOklab_default }, ranges: { l: [0, 1], a: [-0.4, 0.4], b: [-0.4, 0.4] }, parse: [parseOklab_default], serialize: (c4) => `oklab(${c4.l !== void 0 ? c4.l : "none"} ${c4.a !== void 0 ? c4.a : "none"} ${c4.b !== void 0 ? c4.b : "none"}${c4.alpha < 1 ? ` / ${c4.alpha}` : ""})` }; var definition_default19 = definition19; // src/oklch/parseOklch.js function parseOklch(color, parsed) { if (!parsed || parsed[0] !== "oklch") { return void 0; } const res = { mode: "oklch" }; const [, l, c4, h, alpha] = parsed; if (l.type !== Tok.None) { if (l.type === Tok.Hue) { return void 0; } res.l = l.type === Tok.Number ? l.value : l.value / 100; } if (c4.type !== Tok.None) { res.c = Math.max( 0, c4.type === Tok.Number ? c4.value : c4.value * 0.4 / 100 ); } if (h.type !== Tok.None) { if (h.type === Tok.Percentage) { return void 0; } res.h = h.value; } if (alpha.type !== Tok.None) { res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100; } return res; } var parseOklch_default = parseOklch; // src/oklch/definition.js var definition20 = { ...definition_default14, mode: "oklch", toMode: { oklab: (c4) => convertLchToLab_default(c4, "oklab"), rgb: (c4) => convertOklabToRgb_default(convertLchToLab_default(c4, "oklab")) }, fromMode: { rgb: (c4) => convertLabToLch_default(convertRgbToOklab_default(c4), "oklch"), oklab: (c4) => convertLabToLch_default(c4, "oklch") }, parse: [parseOklch_default], serialize: (c4) => `oklch(${c4.l !== void 0 ? c4.l : "none"} ${c4.c !== void 0 ? c4.c : "none"} ${c4.h || 0}${c4.alpha < 1 ? ` / ${c4.alpha}` : ""})`, ranges: { l: [0, 1], c: [0, 0.4], h: [0, 360] } }; var definition_default20 = definition20; // src/p3/convertP3ToXyz65.js var convertP3ToXyz65 = (rgb4) => { let { r: r2, g, b, alpha } = convertRgbToLrgb_default(rgb4); let res = { mode: "xyz65", x: 0.486570948648216 * r2 + 0.265667693169093 * g + 0.1982172852343625 * b, y: 0.2289745640697487 * r2 + 0.6917385218365062 * g + 0.079286914093745 * b, z: 0 * r2 + 0.0451133818589026 * g + 1.043944368900976 * b }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertP3ToXyz65_default = convertP3ToXyz65; // src/p3/convertXyz65ToP3.js var convertXyz65ToP3 = ({ x, y, z, alpha }) => { let res = convertLrgbToRgb_default( { r: x * 2.4934969119414263 - y * 0.9313836179191242 - 0.402710784450717 * z, g: x * -0.8294889695615749 + y * 1.7626640603183465 + 0.0236246858419436 * z, b: x * 0.0358458302437845 - y * 0.0761723892680418 + 0.9568845240076871 * z }, "p3" ); if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToP3_default = convertXyz65ToP3; // src/p3/definition.js var definition21 = { ...definition_default, mode: "p3", parse: ["display-p3"], serialize: "display-p3", fromMode: { rgb: (color) => convertXyz65ToP3_default(convertRgbToXyz65_default(color)), xyz65: convertXyz65ToP3_default }, toMode: { rgb: (color) => convertXyz65ToRgb_default(convertP3ToXyz65_default(color)), xyz65: convertP3ToXyz65_default } }; var definition_default21 = definition21; // src/prophoto/convertXyz50ToProphoto.js var gamma2 = (v) => { let abs3 = Math.abs(v); if (abs3 >= 1 / 512) { return Math.sign(v) * Math.pow(abs3, 1 / 1.8); } return 16 * v; }; var convertXyz50ToProphoto = ({ x, y, z, alpha }) => { let res = { mode: "prophoto", r: gamma2( x * 1.3457868816471585 - y * 0.2555720873797946 - 0.0511018649755453 * z ), g: gamma2( x * -0.5446307051249019 + y * 1.5082477428451466 + 0.0205274474364214 * z ), b: gamma2(x * 0 + y * 0 + 1.2119675456389452 * z) }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz50ToProphoto_default = convertXyz50ToProphoto; // src/prophoto/convertProphotoToXyz50.js var linearize2 = (v) => { let abs3 = Math.abs(v); if (abs3 >= 16 / 512) { return Math.sign(v) * Math.pow(abs3, 1.8); } return v / 16; }; var convertProphotoToXyz50 = (prophoto2) => { let r2 = linearize2(prophoto2.r); let g = linearize2(prophoto2.g); let b = linearize2(prophoto2.b); let res = { mode: "xyz50", x: 0.7977666449006423 * r2 + 0.1351812974005331 * g + 0.0313477341283922 * b, y: 0.2880748288194013 * r2 + 0.7118352342418731 * g + 899369387256e-16 * b, z: 0 * r2 + 0 * g + 0.8251046025104602 * b }; if (prophoto2.alpha !== void 0) { res.alpha = prophoto2.alpha; } return res; }; var convertProphotoToXyz50_default = convertProphotoToXyz50; // src/prophoto/definition.js var definition22 = { ...definition_default, mode: "prophoto", parse: ["prophoto-rgb"], serialize: "prophoto-rgb", fromMode: { xyz50: convertXyz50ToProphoto_default, rgb: (color) => convertXyz50ToProphoto_default(convertRgbToXyz50_default(color)) }, toMode: { xyz50: convertProphotoToXyz50_default, rgb: (color) => convertXyz50ToRgb_default(convertProphotoToXyz50_default(color)) } }; var definition_default22 = definition22; // src/rec2020/convertXyz65ToRec2020.js var \u03B1 = 1.09929682680944; var \u03B2 = 0.018053968510807; var gamma3 = (v) => { const abs3 = Math.abs(v); if (abs3 > \u03B2) { return (Math.sign(v) || 1) * (\u03B1 * Math.pow(abs3, 0.45) - (\u03B1 - 1)); } return 4.5 * v; }; var convertXyz65ToRec2020 = ({ x, y, z, alpha }) => { let res = { mode: "rec2020", r: gamma3( x * 1.7166511879712683 - y * 0.3556707837763925 - 0.2533662813736599 * z ), g: gamma3( x * -0.6666843518324893 + y * 1.6164812366349395 + 0.0157685458139111 * z ), b: gamma3( x * 0.0176398574453108 - y * 0.0427706132578085 + 0.9421031212354739 * z ) }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToRec2020_default = convertXyz65ToRec2020; // src/rec2020/convertRec2020ToXyz65.js var \u03B12 = 1.09929682680944; var \u03B22 = 0.018053968510807; var linearize3 = (v) => { let abs3 = Math.abs(v); if (abs3 < \u03B22 * 4.5) { return v / 4.5; } return (Math.sign(v) || 1) * Math.pow((abs3 + \u03B12 - 1) / \u03B12, 1 / 0.45); }; var convertRec2020ToXyz65 = (rec20202) => { let r2 = linearize3(rec20202.r); let g = linearize3(rec20202.g); let b = linearize3(rec20202.b); let res = { mode: "xyz65", x: 0.6369580483012911 * r2 + 0.1446169035862083 * g + 0.1688809751641721 * b, y: 0.262700212011267 * r2 + 0.6779980715188708 * g + 0.059301716469862 * b, z: 0 * r2 + 0.0280726930490874 * g + 1.0609850577107909 * b }; if (rec20202.alpha !== void 0) { res.alpha = rec20202.alpha; } return res; }; var convertRec2020ToXyz65_default = convertRec2020ToXyz65; // src/rec2020/definition.js var definition23 = { ...definition_default, mode: "rec2020", fromMode: { xyz65: convertXyz65ToRec2020_default, rgb: (color) => convertXyz65ToRec2020_default(convertRgbToXyz65_default(color)) }, toMode: { xyz65: convertRec2020ToXyz65_default, rgb: (color) => convertXyz65ToRgb_default(convertRec2020ToXyz65_default(color)) }, parse: ["rec2020"], serialize: "rec2020" }; var definition_default23 = definition23; // src/xyb/constants.js var bias = 0.0037930732552754493; var bias_cbrt = Math.cbrt(bias); // src/xyb/convertRgbToXyb.js var transfer = (v) => Math.cbrt(v) - bias_cbrt; var convertRgbToXyb = (color) => { const { r: r2, g, b, alpha } = convertRgbToLrgb_default(color); const l = transfer(0.3 * r2 + 0.622 * g + 0.078 * b + bias); const m = transfer(0.23 * r2 + 0.692 * g + 0.078 * b + bias); const s = transfer( 0.2434226892454782 * r2 + 0.2047674442449682 * g + 0.5518098665095535 * b + bias ); const res = { mode: "xyb", x: (l - m) / 2, y: (l + m) / 2, /* Apply default chroma from luma (subtract Y from B) */ b: s - (l + m) / 2 }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertRgbToXyb_default = convertRgbToXyb; // src/xyb/convertXybToRgb.js var transfer2 = (v) => Math.pow(v + bias_cbrt, 3); var convertXybToRgb = ({ x, y, b, alpha }) => { const l = transfer2(x + y) - bias; const m = transfer2(y - x) - bias; const s = transfer2(b + y) - bias; const res = convertLrgbToRgb_default({ r: 11.031566904639861 * l - 9.866943908131562 * m - 0.16462299650829934 * s, g: -3.2541473810744237 * l + 4.418770377582723 * m - 0.16462299650829934 * s, b: -3.6588512867136815 * l + 2.7129230459360922 * m + 1.9459282407775895 * s }); if (alpha !== void 0) res.alpha = alpha; return res; }; var convertXybToRgb_default = convertXybToRgb; // src/xyb/definition.js var definition24 = { mode: "xyb", channels: ["x", "y", "b", "alpha"], parse: ["--xyb"], serialize: "--xyb", toMode: { rgb: convertXybToRgb_default }, fromMode: { rgb: convertRgbToXyb_default }, ranges: { x: [-0.0154, 0.0281], y: [0, 0.8453], b: [-0.2778, 0.388] }, interpolate: { x: interpolatorLinear, y: interpolatorLinear, b: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default24 = definition24; // src/xyz50/definition.js var definition25 = { mode: "xyz50", parse: ["xyz-d50"], serialize: "xyz-d50", toMode: { rgb: convertXyz50ToRgb_default, lab: convertXyz50ToLab_default }, fromMode: { rgb: convertRgbToXyz50_default, lab: convertLabToXyz50_default }, channels: ["x", "y", "z", "alpha"], ranges: { x: [0, 0.964], y: [0, 0.999], z: [0, 0.825] }, interpolate: { x: interpolatorLinear, y: interpolatorLinear, z: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default25 = definition25; // src/xyz65/convertXyz65ToXyz50.js var convertXyz65ToXyz50 = (xyz652) => { let { x, y, z, alpha } = xyz652; let res = { mode: "xyz50", x: 1.0479298208405488 * x + 0.0229467933410191 * y - 0.0501922295431356 * z, y: 0.0296278156881593 * x + 0.990434484573249 * y - 0.0170738250293851 * z, z: -0.0092430581525912 * x + 0.0150551448965779 * y + 0.7518742899580008 * z }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz65ToXyz50_default = convertXyz65ToXyz50; // src/xyz65/convertXyz50ToXyz65.js var convertXyz50ToXyz65 = (xyz502) => { let { x, y, z, alpha } = xyz502; let res = { mode: "xyz65", x: 0.9554734527042182 * x - 0.0230985368742614 * y + 0.0632593086610217 * z, y: -0.0283697069632081 * x + 1.0099954580058226 * y + 0.021041398966943 * z, z: 0.0123140016883199 * x - 0.0205076964334779 * y + 1.3303659366080753 * z }; if (alpha !== void 0) { res.alpha = alpha; } return res; }; var convertXyz50ToXyz65_default = convertXyz50ToXyz65; // src/xyz65/definition.js var definition26 = { mode: "xyz65", toMode: { rgb: convertXyz65ToRgb_default, xyz50: convertXyz65ToXyz50_default }, fromMode: { rgb: convertRgbToXyz65_default, xyz50: convertXyz50ToXyz65_default }, ranges: { x: [0, 0.95], y: [0, 1], z: [0, 1.088] }, channels: ["x", "y", "z", "alpha"], parse: ["xyz", "xyz-d65"], serialize: "xyz-d65", interpolate: { x: interpolatorLinear, y: interpolatorLinear, z: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default26 = definition26; // src/yiq/convertRgbToYiq.js var convertRgbToYiq = ({ r: r2, g, b, alpha }) => { const res = { mode: "yiq", y: 0.29889531 * r2 + 0.58662247 * g + 0.11448223 * b, i: 0.59597799 * r2 - 0.2741761 * g - 0.32180189 * b, q: 0.21147017 * r2 - 0.52261711 * g + 0.31114694 * b }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertRgbToYiq_default = convertRgbToYiq; // src/yiq/convertYiqToRgb.js var convertYiqToRgb = ({ y, i, q, alpha }) => { const res = { mode: "rgb", r: y + 0.95608445 * i + 0.6208885 * q, g: y - 0.27137664 * i - 0.6486059 * q, b: y - 1.10561724 * i + 1.70250126 * q }; if (alpha !== void 0) res.alpha = alpha; return res; }; var convertYiqToRgb_default = convertYiqToRgb; // src/yiq/definition.js var definition27 = { mode: "yiq", toMode: { rgb: convertYiqToRgb_default }, fromMode: { rgb: convertRgbToYiq_default }, channels: ["y", "i", "q", "alpha"], parse: ["--yiq"], serialize: "--yiq", ranges: { i: [-0.595, 0.595], q: [-0.522, 0.522] }, interpolate: { y: interpolatorLinear, i: interpolatorLinear, q: interpolatorLinear, alpha: { use: interpolatorLinear, fixup: fixupAlpha } } }; var definition_default27 = definition27; // src/round.js var r = (value, precision) => Math.round(value * (precision = Math.pow(10, precision))) / precision; var round = (precision = 4) => (value) => typeof value === "number" ? r(value, precision) : value; var round_default = round; // src/formatter.js var twoDecimals = round_default(2); var clamp = (value) => Math.max(0, Math.min(1, value)); var fixup = (value) => Math.round(clamp(value) * 255); var serializeHex = (color) => { if (color === void 0) { return void 0; } let r2 = fixup(color.r); let g = fixup(color.g); let b = fixup(color.b); return "#" + (1 << 24 | r2 << 16 | g << 8 | b).toString(16).slice(1); }; var serializeHex8 = (color) => { if (color === void 0) { return void 0; } let a = fixup(color.alpha !== void 0 ? color.alpha : 1); return serializeHex(color) + (1 << 8 | a).toString(16).slice(1); }; var serializeRgb = (color) => { if (color === void 0) { return void 0; } let r2 = color.r !== void 0 ? fixup(color.r) : "none"; let g = color.g !== void 0 ? fixup(color.g) : "none"; let b = color.b !== void 0 ? fixup(color.b) : "none"; if (color.alpha === void 0 || color.alpha === 1) { return `rgb(${r2}, ${g}, ${b})`; } else { return `rgba(${r2}, ${g}, ${b}, ${twoDecimals(clamp(color.alpha))})`; } }; var serializeHsl = (color) => { if (color === void 0) { return void 0; } const h = twoDecimals(color.h || 0); const s = color.s !== void 0 ? twoDecimals(clamp(color.s) * 100) + "%" : "none"; const l = color.l !== void 0 ? twoDecimals(clamp(color.l) * 100) + "%" : "none"; if (color.alpha === void 0 || color.alpha === 1) { return `hsl(${h}, ${s}, ${l})`; } else { return `hsla(${h}, ${s}, ${l}, ${twoDecimals(clamp(color.alpha))})`; } }; var formatCss = (c4) => { const color = prepare_default(c4); if (!color) { return void 0; } const def = getMode(color.mode); if (!def.serialize || typeof def.serialize === "string") { let res = `color(${def.serialize || `--${color.mode}`} `; def.channels.forEach((ch, i) => { if (ch !== "alpha") { res += (i ? " " : "") + (color[ch] !== void 0 ? color[ch] : "none"); } }); if (color.alpha !== void 0 && color.alpha < 1) { res += ` / ${color.alpha}`; } return res + ")"; } if (typeof def.serialize === "function") { return def.serialize(color); } return void 0; }; var formatHex = (c4) => serializeHex(converter_default("rgb")(c4)); var formatHex8 = (c4) => serializeHex8(converter_default("rgb")(c4)); var formatRgb = (c4) => serializeRgb(converter_default("rgb")(c4)); var formatHsl = (c4) => serializeHsl(converter_default("hsl")(c4)); // src/blend.js var BLENDS = { normal: (b, s) => s, multiply: (b, s) => b * s, screen: (b, s) => b + s - b * s, "hard-light": (b, s) => s < 0.5 ? b * 2 * s : 2 * s * (1 - b) - 1, overlay: (b, s) => b < 0.5 ? s * 2 * b : 2 * b * (1 - s) - 1, darken: (b, s) => Math.min(b, s), lighten: (b, s) => Math.max(b, s), "color-dodge": (b, s) => b === 0 ? 0 : s === 1 ? 1 : Math.min(1, b / (1 - s)), "color-burn": (b, s) => b === 1 ? 1 : s === 0 ? 0 : 1 - Math.min(1, (1 - b) / s), "soft-light": (b, s) => s < 0.5 ? b - (1 - 2 * s) * b * (1 - b) : b + (2 * s - 1) * ((b < 0.25 ? ((16 * b - 12) * b + 4) * b : Math.sqrt(b)) - b), difference: (b, s) => Math.abs(b - s), exclusion: (b, s) => b + s - 2 * b * s }; var blend = (colors, type = "normal", mode = "rgb") => { let fn5 = typeof type === "function" ? type : BLENDS[type]; let conv = converter_default(mode); let channels = getMode(mode).channels; let converted = colors.map((c4) => { let cc = conv(c4); if (cc.alpha === void 0) { cc.alpha = 1; } return cc; }); return converted.reduce((b, s) => { if (b === void 0) return s; let alpha = s.alpha + b.alpha * (1 - s.alpha); return channels.reduce( (res, ch) => { if (ch !== "alpha") { if (alpha === 0) { res[ch] = 0; } else { res[ch] = s.alpha * (1 - b.alpha) * s[ch] + s.alpha * b.alpha * fn5(b[ch], s[ch]) + (1 - s.alpha) * b.alpha * b[ch]; res[ch] = Math.max(0, Math.min(1, res[ch] / alpha)); } } return res; }, { mode, alpha } ); }); }; var blend_default = blend; // src/random.js var rand = ([min2, max]) => min2 + Math.random() * (max - min2); var to_intervals = (constraints) => Object.keys(constraints).reduce((o, k4) => { let v = constraints[k4]; o[k4] = Array.isArray(v) ? v : [v, v]; return o; }, {}); var random = (mode = "rgb", constraints = {}) => { let def = getMode(mode); let limits = to_intervals(constraints); return def.channels.reduce( (res, ch) => { if (limits.alpha || ch !== "alpha") { res[ch] = rand(limits[ch] || def.ranges[ch]); } return res; }, { mode } ); }; var random_default = random; // src/map.js var mapper = (fn5, mode = "rgb", preserve_mode = false) => { let channels = mode ? getMode(mode).channels : null; let conv = mode ? converter_default(mode) : prepare_default; return (color) => { let conv_color = conv(color); if (!conv_color) { return void 0; } let res = (channels || getMode(conv_color.mode).channels).reduce( (res2, ch) => { let v = fn5(conv_color[ch], ch, conv_color, mode); if (v !== void 0 && !isNaN(v)) { res2[ch] = v; } return res2; }, { mode: conv_color.mode } ); if (!preserve_mode) { return res; } let prep = prepare_default(color); if (prep && prep.mode !== res.mode) { return converter_default(prep.mode)(res); } return res; }; }; var mapAlphaMultiply = (v, ch, c4) => { if (ch !== "alpha") { return (v || 0) * (c4.alpha !== void 0 ? c4.alpha : 1); } return v; }; var mapAlphaDivide = (v, ch, c4) => { if (ch !== "alpha" && c4.alpha !== 0) { return (v || 0) / (c4.alpha !== void 0 ? c4.alpha : 1); } return v; }; var mapTransferLinear = (slope = 1, intercept = 0) => (v, ch) => { if (ch !== "alpha") { return v * slope + intercept; } return v; }; var mapTransferGamma = (amplitude = 1, exponent = 1, offset = 0) => (v, ch) => { if (ch !== "alpha") { return amplitude * Math.pow(v, exponent) + offset; } return v; }; // src/util/normalizePositions.js var normalizePositions = (arr) => { if (arr[0] === void 0) { arr[0] = 0; } if (arr[arr.length - 1] === void 0) { arr[arr.length - 1] = 1; } let i = 1; let j; let from_idx; let from_pos; let inc; while (i < arr.length) { if (arr[i] === void 0) { from_idx = i; from_pos = arr[i - 1]; j = i; while (arr[j] === void 0) j++; inc = (arr[j] - from_pos) / (j - i + 1); while (i < j) { arr[i] = from_pos + (i + 1 - from_idx) * inc; i++; } } else if (arr[i] < arr[i - 1]) { arr[i] = arr[i - 1]; } i++; } return arr; }; var normalizePositions_default = normalizePositions; // src/easing/midpoint.js var midpoint = (H = 0.5) => (t) => H <= 0 ? 1 : H >= 1 ? 0 : Math.pow(t, Math.log(0.5) / Math.log(H)); var midpoint_default = midpoint; // src/interpolate/interpolate.js var isfn2 = (o) => typeof o === "function"; var isobj = (o) => o && typeof o === "object"; var isnum = (o) => typeof o === "number"; var interpolate_fn = (colors, mode = "rgb", overrides, premap) => { let def = getMode(mode); let conv = converter_default(mode); let conv_colors = []; let positions = []; let fns = {}; colors.forEach((val) => { if (Array.isArray(val)) { conv_colors.push(conv(val[0])); positions.push(val[1]); } else if (isnum(val) || isfn2(val)) { fns[positions.length] = val; } else { conv_colors.push(conv(val)); positions.push(void 0); } }); normalizePositions_default(positions); let fixed = def.channels.reduce((res, ch) => { let ffn; if (isobj(overrides) && isobj(overrides[ch]) && overrides[ch].fixup) { ffn = overrides[ch].fixup; } else if (isobj(def.interpolate[ch]) && def.interpolate[ch].fixup) { ffn = def.interpolate[ch].fixup; } else { ffn = (v) => v; } res[ch] = ffn(conv_colors.map((color) => color[ch])); return res; }, {}); if (premap) { let ccolors = conv_colors.map((color, idx) => { return def.channels.reduce( (c4, ch) => { c4[ch] = fixed[ch][idx]; return c4; }, { mode } ); }); fixed = def.channels.reduce((res, ch) => { res[ch] = ccolors.map((c4) => { let v = premap(c4[ch], ch, c4, mode); return isNaN(v) ? void 0 : v; }); return res; }, {}); } let interpolators = def.channels.reduce((res, ch) => { let ifn; if (isfn2(overrides)) { ifn = overrides; } else if (isobj(overrides) && isfn2(overrides[ch])) { ifn = overrides[ch]; } else if (isobj(overrides) && isobj(overrides[ch]) && overrides[ch].use) { ifn = overrides[ch].use; } else if (isfn2(def.interpolate[ch])) { ifn = def.interpolate[ch]; } else if (isobj(def.interpolate[ch])) { ifn = def.interpolate[ch].use; } res[ch] = ifn(fixed[ch]); return res; }, {}); let n3 = conv_colors.length - 1; return (t) => { t = Math.min(Math.max(0, t), 1); if (t <= positions[0]) { return conv_colors[0]; } if (t > positions[n3]) { return conv_colors[n3]; } let idx = 0; while (positions[idx] < t) idx++; let start = positions[idx - 1]; let delta = positions[idx] - start; let P = (t - start) / delta; let fn5 = fns[idx] || fns[0]; if (fn5 !== void 0) { if (isnum(fn5)) { fn5 = midpoint_default((fn5 - start) / delta); } P = fn5(P); } let t0 = (idx - 1 + P) / n3; return def.channels.reduce( (res, channel) => { let val = interpolators[channel](t0); if (val !== void 0) { res[channel] = val; } return res; }, { mode } ); }; }; var interpolate = (colors, mode = "rgb", overrides) => interpolate_fn(colors, mode, overrides); var interpolateWith = (premap, postmap) => (colors, mode = "rgb", overrides) => { let post = postmap ? mapper(postmap, mode) : void 0; let it = interpolate_fn(colors, mode, overrides, premap); return post ? (t) => post(it(t)) : it; }; var interpolateWithPremultipliedAlpha = interpolateWith( mapAlphaMultiply, mapAlphaDivide ); // src/interpolate/splineBasis.js var mod = (v, l) => (v + l) % l; var bspline = (Vim2, Vim1, Vi, Vip1, t) => { let t2 = t * t; let t3 = t2 * t; return ((1 - 3 * t + 3 * t2 - t3) * Vim2 + (4 - 6 * t2 + 3 * t3) * Vim1 + (1 + 3 * t + 3 * t2 - 3 * t3) * Vi + t3 * Vip1) / 6; }; var interpolatorSplineBasis = (arr) => (t) => { let classes = arr.length - 1; let i = t >= 1 ? classes - 1 : Math.max(0, Math.floor(t * classes)); return bspline( i > 0 ? arr[i - 1] : 2 * arr[i] - arr[i + 1], arr[i], arr[i + 1], i < classes - 1 ? arr[i + 2] : 2 * arr[i + 1] - arr[i], (t - i / classes) * classes ); }; var interpolatorSplineBasisClosed = (arr) => (t) => { const classes = arr.length - 1; const i = Math.floor(t * classes); return bspline( arr[mod(i - 1, arr.length)], arr[mod(i, arr.length)], arr[mod(i + 1, arr.length)], arr[mod(i + 2, arr.length)], (t - i / classes) * classes ); }; // src/interpolate/splineNatural.js var solve = (v) => { let i; let n3 = v.length - 1; let c4 = new Array(n3); let _v = new Array(n3); let sol = new Array(n3); c4[1] = 1 / 4; _v[1] = (6 * v[1] - v[0]) / 4; for (i = 2; i < n3; ++i) { c4[i] = 1 / (4 - c4[i - 1]); _v[i] = (6 * v[i] - (i == n3 - 1 ? v[n3] : 0) - _v[i - 1]) * c4[i]; } sol[0] = v[0]; sol[n3] = v[n3]; if (n3 - 1 > 0) { sol[n3 - 1] = _v[n3 - 1]; } for (i = n3 - 2; i > 0; --i) { sol[i] = _v[i] - c4[i] * sol[i + 1]; } return sol; }; var interpolatorSplineNatural = (arr) => interpolatorSplineBasis(solve(arr)); var interpolatorSplineNaturalClosed = (arr) => interpolatorSplineBasisClosed(solve(arr)); // src/interpolate/splineMonotone.js var sgn = Math.sign; var min = Math.min; var abs2 = Math.abs; var mono = (arr) => { let n3 = arr.length - 1; let s = []; let p4 = []; let yp = []; for (let i = 0; i < n3; i++) { s.push((arr[i + 1] - arr[i]) * n3); p4.push(i > 0 ? 0.5 * (arr[i + 1] - arr[i - 1]) * n3 : void 0); yp.push( i > 0 ? (sgn(s[i - 1]) + sgn(s[i])) * min(abs2(s[i - 1]), abs2(s[i]), 0.5 * abs2(p4[i])) : void 0 ); } return [s, p4, yp]; }; var interpolator = (arr, yp, s) => { let n3 = arr.length - 1; let n22 = n3 * n3; return (t) => { let i; if (t >= 1) { i = n3 - 1; } else { i = Math.max(0, Math.floor(t * n3)); } let t1 = t - i / n3; let t2 = t1 * t1; let t3 = t2 * t1; return (yp[i] + yp[i + 1] - 2 * s[i]) * n22 * t3 + (3 * s[i] - 2 * yp[i] - yp[i + 1]) * n3 * t2 + yp[i] * t1 + arr[i]; }; }; var interpolatorSplineMonotone = (arr) => { if (arr.length < 3) { return interpolatorLinear(arr); } let n3 = arr.length - 1; let [s, , yp] = mono(arr); yp[0] = s[0]; yp[n3] = s[n3 - 1]; return interpolator(arr, yp, s); }; var interpolatorSplineMonotone2 = (arr) => { if (arr.length < 3) { return interpolatorLinear(arr); } let n3 = arr.length - 1; let [s, p4, yp] = mono(arr); p4[0] = (arr[1] * 2 - arr[0] * 1.5 - arr[2] * 0.5) * n3; p4[n3] = (arr[n3] * 1.5 - arr[n3 - 1] * 2 + arr[n3 - 2] * 0.5) * n3; yp[0] = p4[0] * s[0] <= 0 ? 0 : abs2(p4[0]) > 2 * abs2(s[0]) ? 2 * s[0] : p4[0]; yp[n3] = p4[n3] * s[n3 - 1] <= 0 ? 0 : abs2(p4[n3]) > 2 * abs2(s[n3 - 1]) ? 2 * s[n3 - 1] : p4[n3]; return interpolator(arr, yp, s); }; var interpolatorSplineMonotoneClosed = (arr) => { let n3 = arr.length - 1; let [s, p4, yp] = mono(arr); p4[0] = 0.5 * (arr[1] - arr[n3]) * n3; p4[n3] = 0.5 * (arr[0] - arr[n3 - 1]) * n3; let s_m1 = (arr[0] - arr[n3]) * n3; let s_n = s_m1; yp[0] = (sgn(s_m1) + sgn(s[0])) * min(abs2(s_m1), abs2(s[0]), 0.5 * abs2(p4[0])); yp[n3] = (sgn(s[n3 - 1]) + sgn(s_n)) * min(abs2(s[n3 - 1]), abs2(s_n), 0.5 * abs2(p4[n3])); return interpolator(arr, yp, s); }; // src/easing/gamma.js var gamma4 = (\u03B3 = 1) => \u03B3 === 1 ? (t) => t : (t) => Math.pow(t, \u03B3); var gamma_default = gamma4; // src/samples.js var samples = (n3 = 2, \u03B3 = 1) => { let ease = gamma_default(\u03B3); if (n3 < 2) { return n3 < 1 ? [] : [ease(0.5)]; } let res = []; for (let i = 0; i < n3; i++) { res.push(ease(i / (n3 - 1))); } return res; }; var samples_default = samples; // src/clamp.js var rgb = converter_default("rgb"); var fixup_rgb = (c4) => { const res = { mode: c4.mode, r: Math.max(0, Math.min(c4.r, 1)), g: Math.max(0, Math.min(c4.g, 1)), b: Math.max(0, Math.min(c4.b, 1)) }; if (c4.alpha !== void 0) { res.alpha = c4.alpha; } return res; }; var to_displayable_srgb = (c4) => fixup_rgb(rgb(c4)); var inrange_rgb = (c4) => { return c4 !== void 0 && c4.r >= 0 && c4.r <= 1 && c4.g >= 0 && c4.g <= 1 && c4.b >= 0 && c4.b <= 1; }; function displayable(color) { return inrange_rgb(rgb(color)); } function inGamut(mode = "rgb") { const { gamut } = getMode(mode); if (!gamut) { return (color) => true; } const conv = converter_default(typeof gamut === "string" ? gamut : mode); return (color) => inrange_rgb(conv(color)); } function clampRgb(color) { color = prepare_default(color); if (color === void 0 || displayable(color)) return color; let conv = converter_default(color.mode); return conv(to_displayable_srgb(color)); } function clampGamut(mode = "rgb") { const { gamut } = getMode(mode); if (!gamut) { return (color) => prepare_default(color); } const destMode = typeof gamut === "string" ? gamut : mode; const destConv = converter_default(destMode); const inDestGamut = inGamut(destMode); return (color) => { const original = prepare_default(color); if (!original) { return void 0; } const converted = destConv(original); if (inDestGamut(converted)) { return original; } const clamped = fixup_rgb(converted); if (original.mode === clamped.mode) { return clamped; } return converter_default(original.mode)(clamped); }; } function clampChroma(color, mode = "lch", rgbGamut = "rgb") { color = prepare_default(color); let inDestinationGamut = rgbGamut === "rgb" ? displayable : inGamut(rgbGamut); let clipToGamut = rgbGamut === "rgb" ? to_displayable_srgb : clampGamut(rgbGamut); if (color === void 0 || inDestinationGamut(color)) return color; let conv = converter_default(color.mode); color = converter_default(mode)(color); let clamped = { ...color, c: 0 }; if (!inDestinationGamut(clamped)) { return conv(clipToGamut(clamped)); } let start = 0; let end = color.c; let range = getMode(mode).ranges.c; let resolution = (range[1] - range[0]) / Math.pow(2, 13); let _last_good_c; while (end - start > resolution) { clamped.c = start + (end - start) * 0.5; if (inDestinationGamut(clamped)) { _last_good_c = clamped.c; start = clamped.c; } else { end = clamped.c; } } return conv( inDestinationGamut(clamped) ? clamped : { ...clamped, c: _last_good_c } ); } function toGamut(dest = "rgb", mode = "oklch", delta = differenceEuclidean("oklch"), jnd = 0.02) { const destConv = converter_default(dest); if (!getMode(dest).gamut) { return (color) => destConv(color); } const inDestinationGamut = inGamut(dest); const clipToGamut = clampGamut(dest); const ucs = converter_default(mode); const { ranges } = getMode(mode); const White = destConv("white"); const Black = destConv("black"); return (color) => { color = prepare_default(color); if (color === void 0) { return void 0; } const candidate = { ...ucs(color) }; if (candidate.l >= ranges.l[1]) { const res = { ...White }; if (color.alpha !== void 0) { res.alpha = color.alpha; } return res; } if (candidate.l <= ranges.l[0]) { const res = { ...Black }; if (color.alpha !== void 0) { res.alpha = color.alpha; } return res; } if (inDestinationGamut(candidate)) { return destConv(candidate); } let start = 0; let end = candidate.c; let epsilon = (ranges.c[1] - ranges.c[0]) / 4e3; let clipped = clipToGamut(candidate); while (end - start > epsilon) { candidate.c = (start + end) * 0.5; clipped = clipToGamut(candidate); if (inDestinationGamut(candidate) || delta && jnd > 0 && delta(candidate, clipped) <= jnd) { start = candidate.c; } else { end = candidate.c; } } return destConv(inDestinationGamut(candidate) ? candidate : clipped); }; } // src/nearest.js var nearest = (colors, metric = differenceEuclidean(), accessor = (d) => d) => { let arr = colors.map((c4, idx) => ({ color: accessor(c4), i: idx })); return (color, n3 = 1, \u03C4 = Infinity) => { if (isFinite(n3)) { n3 = Math.max(1, Math.min(n3, arr.length - 1)); } arr.forEach((c4) => { c4.d = metric(color, c4.color); }); return arr.sort((a, b) => a.d - b.d).slice(0, n3).filter((c4) => c4.d < \u03C4).map((c4) => colors[c4.i]); }; }; var nearest_default = nearest; // src/filter.js var minzero = (v) => Math.max(v, 0); var clamp2 = (v) => Math.max(Math.min(v, 1), 0); var lerp2 = (a, b, t) => a === void 0 || b === void 0 ? void 0 : a + t * (b - a); var matrixSepia = (amount) => { let a = 1 - clamp2(amount); return [ 0.393 + 0.607 * a, 0.769 - 0.769 * a, 0.189 - 0.189 * a, 0, 0.349 - 0.349 * a, 0.686 + 0.314 * a, 0.168 - 0.168 * a, 0, 0.272 - 0.272 * a, 0.534 - 0.534 * a, 0.131 + 0.869 * a, 0, 0, 0, 0, 1 ]; }; var matrixSaturate = (sat) => { let s = minzero(sat); return [ 0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0, 0, 0, 1 ]; }; var matrixGrayscale = (amount) => { let a = 1 - clamp2(amount); return [ 0.2126 + 0.7874 * a, 0.7152 - 0.7152 * a, 0.0722 - 0.0722 * a, 0, 0.2126 - 0.2126 * a, 0.7152 + 0.2848 * a, 0.0722 - 0.0722 * a, 0, 0.2126 - 0.2126 * a, 0.7152 - 0.7152 * a, 0.0722 + 0.9278 * a, 0, 0, 0, 0, 1 ]; }; var matrixHueRotate = (degrees) => { let rad = Math.PI * degrees / 180; let c4 = Math.cos(rad); let s = Math.sin(rad); return [ 0.213 + c4 * 0.787 - s * 0.213, 0.715 - c4 * 0.715 - s * 0.715, 0.072 - c4 * 0.072 + s * 0.928, 0, 0.213 - c4 * 0.213 + s * 0.143, 0.715 + c4 * 0.285 + s * 0.14, 0.072 - c4 * 0.072 - s * 0.283, 0, 0.213 - c4 * 0.213 - s * 0.787, 0.715 - c4 * 0.715 + s * 0.715, 0.072 + c4 * 0.928 + s * 0.072, 0, 0, 0, 0, 1 ]; }; var matrix = (values, mode, preserve_mode = false) => { let conv = converter_default(mode); let channels = getMode(mode).channels; return (color) => { let c4 = conv(color); if (!c4) { return void 0; } let res = { mode }; let ch; let count = channels.length; for (let i = 0; i < values.length; i++) { ch = channels[Math.floor(i / count)]; if (c4[ch] === void 0) { continue; } res[ch] = (res[ch] || 0) + values[i] * (c4[channels[i % count]] || 0); } if (!preserve_mode) { return res; } let prep = prepare_default(color); return prep && res.mode !== prep.mode ? converter_default(prep.mode)(res) : res; }; }; var filterBrightness = (amt = 1, mode = "rgb") => { let a = minzero(amt); return mapper(mapTransferLinear(a), mode, true); }; var filterContrast = (amt = 1, mode = "rgb") => { let a = minzero(amt); return mapper(mapTransferLinear(a, (1 - a) / 2), mode, true); }; var filterSepia = (amt = 1, mode = "rgb") => matrix(matrixSepia(amt), mode, true); var filterSaturate = (amt = 1, mode = "rgb") => matrix(matrixSaturate(amt), mode, true); var filterGrayscale = (amt = 1, mode = "rgb") => matrix(matrixGrayscale(amt), mode, true); var filterInvert = (amt = 1, mode = "rgb") => { let a = clamp2(amt); return mapper( (v, ch) => ch === "alpha" ? v : lerp2(a, 1 - a, v), mode, true ); }; var filterHueRotate = (deg = 0, mode = "rgb") => matrix(matrixHueRotate(deg), mode, true); // src/deficiency.js var rgb2 = converter_default("rgb"); var PROT = [ [1, 0, -0, 0, 1, 0, -0, -0, 1], [ 0.856167, 0.182038, -0.038205, 0.029342, 0.955115, 0.015544, -288e-5, -1563e-6, 1.004443 ], [ 0.734766, 0.334872, -0.069637, 0.05184, 0.919198, 0.028963, -4928e-6, -4209e-6, 1.009137 ], [ 0.630323, 0.465641, -0.095964, 0.069181, 0.890046, 0.040773, -6308e-6, -7724e-6, 1.014032 ], [ 0.539009, 0.579343, -0.118352, 0.082546, 0.866121, 0.051332, -7136e-6, -0.011959, 1.019095 ], [ 0.458064, 0.679578, -0.137642, 0.092785, 0.846313, 0.060902, -7494e-6, -0.016807, 1.024301 ], [ 0.38545, 0.769005, -0.154455, 0.100526, 0.829802, 0.069673, -7442e-6, -0.02219, 1.029632 ], [ 0.319627, 0.849633, -0.169261, 0.106241, 0.815969, 0.07779, -7025e-6, -0.028051, 1.035076 ], [ 0.259411, 0.923008, -0.18242, 0.110296, 0.80434, 0.085364, -6276e-6, -0.034346, 1.040622 ], [ 0.203876, 0.990338, -0.194214, 0.112975, 0.794542, 0.092483, -5222e-6, -0.041043, 1.046265 ], [ 0.152286, 1.052583, -0.204868, 0.114503, 0.786281, 0.099216, -3882e-6, -0.048116, 1.051998 ] ]; var DEUTER = [ [1, 0, -0, 0, 1, 0, -0, -0, 1], [ 0.866435, 0.177704, -0.044139, 0.049567, 0.939063, 0.01137, -3453e-6, 7233e-6, 0.99622 ], [ 0.760729, 0.319078, -0.079807, 0.090568, 0.889315, 0.020117, -6027e-6, 0.013325, 0.992702 ], [ 0.675425, 0.43385, -0.109275, 0.125303, 0.847755, 0.026942, -795e-5, 0.018572, 0.989378 ], [ 0.605511, 0.52856, -0.134071, 0.155318, 0.812366, 0.032316, -9376e-6, 0.023176, 0.9862 ], [ 0.547494, 0.607765, -0.155259, 0.181692, 0.781742, 0.036566, -0.01041, 0.027275, 0.983136 ], [ 0.498864, 0.674741, -0.173604, 0.205199, 0.754872, 0.039929, -0.011131, 0.030969, 0.980162 ], [ 0.457771, 0.731899, -0.18967, 0.226409, 0.731012, 0.042579, -0.011595, 0.034333, 0.977261 ], [ 0.422823, 0.781057, -0.203881, 0.245752, 0.709602, 0.044646, -0.011843, 0.037423, 0.974421 ], [ 0.392952, 0.82361, -0.216562, 0.263559, 0.69021, 0.046232, -0.01191, 0.040281, 0.97163 ], [ 0.367322, 0.860646, -0.227968, 0.280085, 0.672501, 0.047413, -0.01182, 0.04294, 0.968881 ] ]; var TRIT = [ [1, 0, -0, 0, 1, 0, -0, -0, 1], [ 0.92667, 0.092514, -0.019184, 0.021191, 0.964503, 0.014306, 8437e-6, 0.054813, 0.93675 ], [ 0.89572, 0.13333, -0.02905, 0.029997, 0.9454, 0.024603, 0.013027, 0.104707, 0.882266 ], [ 0.905871, 0.127791, -0.033662, 0.026856, 0.941251, 0.031893, 0.01341, 0.148296, 0.838294 ], [ 0.948035, 0.08949, -0.037526, 0.014364, 0.946792, 0.038844, 0.010853, 0.193991, 0.795156 ], [ 1.017277, 0.027029, -0.044306, -6113e-6, 0.958479, 0.047634, 6379e-6, 0.248708, 0.744913 ], [ 1.104996, -0.046633, -0.058363, -0.032137, 0.971635, 0.060503, 1336e-6, 0.317922, 0.680742 ], [ 1.193214, -0.109812, -0.083402, -0.058496, 0.97941, 0.079086, -2346e-6, 0.403492, 0.598854 ], [ 1.257728, -0.139648, -0.118081, -0.078003, 0.975409, 0.102594, -3316e-6, 0.501214, 0.502102 ], [ 1.278864, -0.125333, -0.153531, -0.084748, 0.957674, 0.127074, -989e-6, 0.601151, 0.399838 ], [ 1.255528, -0.076749, -0.178779, -0.078411, 0.930809, 0.147602, 4733e-6, 0.691367, 0.3039 ] ]; var deficiency = (lut, t) => { let tt = Math.max(0, Math.min(1, t)); let i = Math.round(tt / 0.1); let w = Math.round(tt % 0.1); let arr = lut[i]; if (w > 0 && i < lut.length - 1) { let arr_2 = lut[i + 1]; arr = arr.map((v, idx) => lerp(arr[idx], arr_2[idx], w)); } return (color) => { let c4 = prepare_default(color); if (c4 === void 0) { return void 0; } let { r: r2, g, b } = rgb2(c4); let ret = { mode: "rgb", r: arr[0] * r2 + arr[1] * g + arr[2] * b, g: arr[3] * r2 + arr[4] * g + arr[5] * b, b: arr[6] * r2 + arr[7] * g + arr[8] * b }; if (c4.alpha !== void 0) { ret.alpha = c4.alpha; } return converter_default(c4.mode)(ret); }; }; var filterDeficiencyProt = (severity = 1) => deficiency(PROT, severity); var filterDeficiencyDeuter = (severity = 1) => deficiency(DEUTER, severity); var filterDeficiencyTrit = (severity = 1) => deficiency(TRIT, severity); // src/easing/smoothstep.js var easingSmoothstep = (t) => t * t * (3 - 2 * t); var easingSmoothstepInverse = (t) => 0.5 - Math.sin(Math.asin(1 - 2 * t) / 3); // src/easing/smootherstep.js var smootherstep = (t) => t * t * t * (t * (t * 6 - 15) + 10); var smootherstep_default = smootherstep; // src/easing/inOutSine.js var inOutSine = (t) => (1 - Math.cos(t * Math.PI)) / 2; var inOutSine_default = inOutSine; // src/wcag.js function luminance(color) { let c4 = converter_default("lrgb")(color); return 0.2126 * c4.r + 0.7152 * c4.g + 0.0722 * c4.b; } function contrast(a, b) { let L1 = luminance(a); let L2 = luminance(b); return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05); } // src/index.js var a98 = useMode(definition_default2); var cubehelix = useMode(definition_default3); var dlab = useMode(definition_default4); var dlch = useMode(definition_default5); var hsi = useMode(definition_default6); var hsl = useMode(definition_default7); var hsv = useMode(definition_default8); var hwb = useMode(definition_default9); var jab = useMode(definition_default10); var jch = useMode(definition_default11); var lab = useMode(definition_default12); var lab65 = useMode(definition_default13); var lch = useMode(definition_default14); var lch65 = useMode(definition_default15); var lchuv = useMode(definition_default16); var lrgb = useMode(definition_default17); var luv = useMode(definition_default18); var okhsl = useMode(modeOkhsl_default); var okhsv = useMode(modeOkhsv_default); var oklab = useMode(definition_default19); var oklch = useMode(definition_default20); var p3 = useMode(definition_default21); var prophoto = useMode(definition_default22); var rec2020 = useMode(definition_default23); var rgb3 = useMode(definition_default); var xyb = useMode(definition_default24); var xyz50 = useMode(definition_default25); var xyz65 = useMode(definition_default26); var yiq = useMode(definition_default27);