UNPKG

@iconsets/svg-morpheus-ts

Version:

ESM TypeScript library enabling SVG icons to morph from one to the other. It implements Material Design's Delightful Details transitions. Refactored with modern TypeScript + Vite + pnpm stack. Supports both Chinese and English documentation.

2,233 lines 129 kB
/*! * SVG Morpheus TypeScript * Version: v1.4.14 * Build Date: 2026-04-13T07:32:54.080Z * Repository: https://github.com/caixw/SVG-Morpheus-ts */ //#region src/easings.ts var e = Math.asin(1), t = Math.PI * 2, n = { "circ-in": (e) => -1 * (Math.sqrt(1 - e * e) - 1), "circ-out": (e) => Math.sqrt(1 - --e * e), "circ-in-out": (e) => (e /= .5) < 1 ? -.5 * (Math.sqrt(1 - e * e) - 1) : .5 * (Math.sqrt(1 - (e -= 2) * e) + 1), "cubic-in": (e) => e * e * e, "cubic-out": (e) => --e * e * e + 1, "cubic-in-out": (e) => e < .5 ? 4 * e * e * e : (e - 1) * (2 * e - 2) * (2 * e - 2) + 1, "elastic-in": (n) => { if (n === 0) return 0; if (n === 1) return 1; let r = .3, i = r / t * e; return -(2 ** (10 * --n) * Math.sin((n - i) * t / r)); }, "elastic-out": (n) => { if (n === 0) return 0; if (n === 1) return 1; let r = .3, i = r / t * e; return 2 ** (-10 * n) * Math.sin((n - i) * t / r) + 1; }, "elastic-in-out": (n) => { if (n === 0) return 0; if ((n /= .5) == 2) return 1; let r = .45, i = r / t * e; return n < 1 ? -.5 * (2 ** (10 * --n) * Math.sin((n - i) * t / r)) : 2 ** (-10 * --n) * Math.sin((n - i) * t / r) * .5 + 1; }, "expo-in": (e) => e === 0 ? 0 : 2 ** (10 * (e - 1)), "expo-out": (e) => e === 1 ? 1 : 1 - 2 ** (-10 * e), "expo-in-out": (e) => e === 0 ? 0 : e === 1 ? 1 : (e /= .5) < 1 ? .5 * 2 ** (10 * (e - 1)) : .5 * (-(2 ** (-10 * --e)) + 2), linear: (e) => e, "quad-in": (e) => e * e, "quad-out": (e) => e * (2 - e), "quad-in-out": (e) => e < .5 ? 2 * e * e : -1 + (4 - 2 * e) * e, "quart-in": (e) => e * e * e * e, "quart-out": (e) => 1 - --e * e * e * e, "quart-in-out": (e) => e < .5 ? 8 * e * e * e * e : 1 - 8 * --e * e * e * e, "quint-in": (e) => e * e * e * e * e, "quint-out": (e) => 1 + --e * e * e * e * e, "quint-in-out": (e) => e < .5 ? 16 * e * e * e * e * e : 1 + 16 * --e * e * e * e * e, "sine-in": (e) => 1 - Math.cos(Math.PI / 2 * e), "sine-out": (e) => Math.sin(Math.PI / 2 * e), "sine-in-out": (e) => .5 * (1 - Math.cos(Math.PI * e)) }; //#endregion //#region node_modules/.pnpm/colorjs.io@0.6.1/node_modules/colorjs.io/dist/color.js function r(e, t) { let n = e.length, r, i, a = !1, o = !1; Array.isArray(e[0]) ? r = e : (r = [e], n = r.length, a = !0), Array.isArray(t[0]) ? i = t : (i = t.length > 0 ? t.map((e) => [e]) : [[]], o = !0); let s = i[0].length, c = i[0].map((e, t) => i.map((e) => e[t])), l = r.map((e) => c.map((t) => { let n = 0; if (!Array.isArray(e)) { for (let r of t) n += e * r; return n; } for (let r = 0; r < e.length; r++) n += e[r] * (t[r] || 0); return n; })); return n === 1 && a && (l = l[0]), s === 1 && o ? n === 1 && a ? l[0] : l.map((e) => e[0]) : l; } function i(e, t) { return e[0] * t[0] + e[1] * t[1] + e[2] * t[2]; } function a(e, t, n = [ 0, 0, 0 ]) { let r = i(e, t[0]), a = i(e, t[1]), o = i(e, t[2]); return n[0] = r, n[1] = a, n[2] = o, n; } function o(e) { return s(e) === "string"; } function s(e) { return (Object.prototype.toString.call(e).match(/^\[object\s+(.*?)\]$/)[1] || "").toLowerCase(); } function c(e, { precision: t = 16, unit: n }) { return l(e) ? "none" : (e = +d(e, t), e + (n ?? "")); } function l(e) { return e === null; } function u(e) { return l(e) ? 0 : e; } function d(e, t) { if (e === 0) return 0; let n = ~~e, r = 0; n && t && (r = ~~Math.log10(Math.abs(n)) + 1); let i = 10 ** (t - r); return Math.floor(e * i + .5) / i; } function f(e, t, n) { return isNaN(e) ? t : isNaN(t) ? e : e + (t - e) * n; } function p(e, t, n) { return (n - e) / (t - e); } function m(e, t, n) { return !e || !t || e === t || e[0] === t[0] && e[1] === t[1] || isNaN(n) || n === null ? n : f(t[0], t[1], p(e[0], e[1], n)); } function h(e, t, n) { return Math.max(Math.min(n, t), e); } function g(e, t) { return Math.sign(e) === Math.sign(t) ? e : -e; } function _(e, t) { return g(Math.abs(e) ** t, e); } function v(e, t) { return t === 0 ? 0 : e / t; } function y(e, t, n = 0, r = e.length) { for (; n < r;) { let i = n + r >> 1; e[i] < t ? n = i + 1 : r = i; } return n; } function b(e, t) { if (e instanceof t) return !0; let n = t.name; for (; e;) { let t = Object.getPrototypeOf(e), r = t?.constructor?.name; if (r === n) return !0; if (!r || r === "Object") return !1; e = t; } return !1; } var x = /* @__PURE__ */ Object.freeze({ __proto__: null, bisectLeft: y, clamp: h, copySign: g, interpolate: f, interpolateInv: p, isInstance: b, isNone: l, isString: o, mapRange: m, multiplyMatrices: r, multiply_v3_m3x3: a, serializeNumber: c, skipNone: u, spow: _, toPrecision: d, type: s, zdiv: v }), S = new class { add(e, t, n) { if (typeof arguments[0] != "string") { for (var e in arguments[0]) this.add(e, arguments[0][e], arguments[1]); return; } (Array.isArray(e) ? e : [e]).forEach(function(e) { this[e] = this[e] || [], t && this[e][n ? "unshift" : "push"](t); }, this); } run(e, t) { this[e] = this[e] || [], this[e].forEach(function(e) { e.call(t && t.context ? t.context : t, t); }); } }(), C = { gamut_mapping: "css", precision: 5, deltaE: "76", verbose: globalThis?.process?.env?.NODE_ENV?.toLowerCase() !== "test", warn: function(e) { this.verbose && globalThis?.console?.warn?.(e); } }, w = class { type; coordMeta; coordRange; range; constructor(e, t) { if (typeof e == "object" && (this.coordMeta = e), t && (this.coordMeta = t, this.coordRange = t.range ?? t.refRange), typeof e == "string") { let t = e.trim().match(/^(?<type><[a-z]+>)(\[(?<min>-?[.\d]+),\s*(?<max>-?[.\d]+)\])?$/); if (!t) throw TypeError(`Cannot parse ${e} as a type definition.`); this.type = t.groups.type; let { min: n, max: r } = t.groups; (n || r) && (this.range = [+n, +r]); } } get computedRange() { return this.range ? this.range : this.type === "<percentage>" ? this.percentageRange() : this.type === "<angle>" ? [0, 360] : null; } get unit() { return this.type === "<percentage>" ? "%" : this.type === "<angle>" ? "deg" : ""; } resolve(e) { if (this.type === "<angle>") return e; let t = this.computedRange, n = this.coordRange; return this.type === "<percentage>" && (n ??= this.percentageRange()), m(t, n, e); } serialize(e, t) { let n = this.type === "<percentage>" ? this.percentageRange(100) : this.computedRange, r = this.unit; return e = m(this.coordRange, n, e), c(e, { unit: r, precision: t }); } toString() { let e = this.type; if (this.range) { let [t = "", n = ""] = this.range; e += `[${t},${n}]`; } return e; } percentageRange(e = 1) { let t; return t = this.coordMeta && this.coordMeta.range || this.coordRange && this.coordRange[0] >= 0 ? [0, 1] : [-1, 1], [t[0] * e, t[1] * e]; } static get(e, t) { return b(e, this) ? e : new this(e, t); } }, T = Symbol("instance"), E = class e { type; name; spaceCoords; coords; id; alpha; constructor(e, t = e.space) { e[T] = this, this.type = "function", this.name = "color", Object.assign(this, e), this.space = t, this.type !== "custom" && (this.spaceCoords = Object.values(t.coords), this.coords ||= this.spaceCoords.map((e) => { let t = ["<number>", "<percentage>"]; return e.type === "angle" && t.push("<angle>"), t; }), this.coords = this.coords.map((e, t) => { let n = this.spaceCoords[t]; return typeof e == "string" && (e = e.trim().split(/\s*\|\s*/)), e.map((e) => w.get(e, n)); })); } serializeCoords(e, t, n) { return n = e.map((e, t) => w.get(n?.[t] ?? this.coords[t][0], this.spaceCoords[t])), e.map((e, r) => n[r].serialize(e, t)); } coerceCoords(e, t) { return Object.entries(this.space.coords).map(([n, r], i) => { let a = e[i]; if (l(a) || isNaN(a)) return a; let o = t[i], s = this.coords[i].find((e) => e.type == o); if (!s) { let e = r.name || n; throw TypeError(`${o ?? a?.raw ?? a} not allowed for ${e} in ${this.name}()`); } return a = s.resolve(a), s.range && (t[i] = s.toString()), a; }); } canSerialize() { return this.type === "function" || this.serialize; } parse(e) { return null; } static get(t, ...n) { return !t || b(t, this) ? t : t[T] ? t[T] : new e(t, ...n); } }, D = { D50: [ .3457 / .3585, 1, .2958 / .3585 ], D65: [ .3127 / .329, 1, .3583 / .329 ] }; function O(e) { return Array.isArray(e) ? e : D[e]; } function k(e, t, n, r = {}) { if (e = O(e), t = O(t), !e || !t) throw TypeError(`Missing white point to convert ${e ? "" : "from"}${!e && !t ? "/" : ""}${t ? "" : "to"}`); if (e === t) return n; let i = { W1: e, W2: t, XYZ: n, options: r }; if (S.run("chromatic-adaptation-start", i), i.M || (i.W1 === D.D65 && i.W2 === D.D50 ? i.M = [ [ 1.0479297925449969, .022946870601609652, -.05019226628920524 ], [ .02962780877005599, .9904344267538799, -.017073799063418826 ], [ -.009243040646204504, .015055191490298152, .7518742814281371 ] ] : i.W1 === D.D50 && i.W2 === D.D65 && (i.M = [ [ .955473421488075, -.02309845494876471, .06325924320057072 ], [ -.0283697093338637, 1.0099953980813041, .021041441191917323 ], [ .012314014864481998, -.020507649298898964, 1.330365926242124 ] ])), S.run("chromatic-adaptation-end", i), i.M) return a(i.XYZ, i.M); throw TypeError("Only Bradford CAT with white points D50 and D65 supported for now."); } function A(e, t) { let n = { str: String(e)?.trim(), options: t }; if (S.run("parse-start", n), n.color) return n.color; n.parsed = N(n.str); let r, i = n.options ? n.options.parseMeta ?? n.options.meta : null; if (n.parsed) { let t = n.parsed.name, a, o, s = n.parsed.args, c = s.map((e, t) => n.parsed.argMeta[t]?.type); if (t === "color") { let r = s.shift(); c.shift(); let i = r.startsWith("--") ? r.substring(2) : `--${r}`, l = [r, i]; if (a = I.findFormat({ name: t, id: l, type: "function" }), !a) { let t, a = r in I.registry ? r : i; if (a in I.registry) { let n = I.registry[a].formats?.color?.id; n && (t = `Did you mean ${e.replace("color(" + r, "color(" + n)}?`); } throw TypeError(`Cannot parse ${n.str}. ` + (t ?? "Missing a plugin?")); } o = a.space, a.id.startsWith("--") && !r.startsWith("--") && C.warn(`${o.name} is a non-standard space and not currently supported in the CSS spec. Use prefixed color(${a.id}) instead of color(${r}).`), r.startsWith("--") && !a.id.startsWith("--") && C.warn(`${o.name} is a standard space and supported in the CSS spec. Use color(${a.id}) instead of prefixed color(${r}).`); } else a = I.findFormat({ name: t, type: "function" }), o = a.space; i && Object.assign(i, { format: a, formatId: a.name, types: c, commas: n.parsed.commas }); let l = 1; n.parsed.lastAlpha && (l = n.parsed.args.pop(), i && (i.alphaType = c.pop())); let u = a.coords.length; if (s.length !== u) throw TypeError(`Expected ${u} coordinates for ${o.id} in ${n.str}), got ${s.length}`); s = a.coerceCoords(s, c), r = { spaceId: o.id, coords: s, alpha: l }; } else spaceloop: for (let e of I.all) for (let t in e.formats) { let a = e.formats[t]; if (a.type !== "custom" || a.test && !a.test(n.str)) continue; let o = e.getFormat(a), s = o.parse(n.str); if (s) { i && Object.assign(i, { format: o, formatId: t }), r = s; break spaceloop; } } if (!r) throw TypeError(`Could not parse ${e} as a color. Missing a plugin?`); return r.alpha = l(r.alpha) ? r.alpha : r.alpha === void 0 ? 1 : h(0, r.alpha, 1), r; } var j = { "%": .01, deg: 1, grad: .9, rad: 180 / Math.PI, turn: 360 }, M = { function: /^([a-z]+)\(((?:calc\(NaN\)|.)+?)\)$/i, number: /^([-+]?(?:[0-9]*\.)?[0-9]+(e[-+]?[0-9]+)?)$/i, unitValue: RegExp(`(${Object.keys(j).join("|")})$`), singleArgument: /\/?\s*(none|NaN|calc\(NaN\)|[-+\w.]+(?:%|deg|g?rad|turn)?)/g }; function ee(e) { let t = {}, n = e.match(M.unitValue)?.[0], r = t.raw = e; return n ? (t.type = n === "%" ? "<percentage>" : "<angle>", t.unit = n, t.unitless = Number(r.slice(0, -n.length)), r = t.unitless * j[n]) : M.number.test(r) ? (r = Number(r), t.type = "<number>") : r === "none" ? r = null : r === "NaN" || r === "calc(NaN)" ? (r = NaN, t.type = "<number>") : t.type = "<ident>", { value: r, meta: t }; } function N(e) { if (!e) return; e = e.trim(); let t = e.match(M.function); if (t) { let e = [], n = [], r = !1, i = t[1].toLowerCase(), a = t[2].replace(M.singleArgument, (t, a) => { let { value: o, meta: s } = ee(a); return (t.startsWith("/") || i !== "color" && e.length === 3) && (r = !0), e.push(o), n.push(s), ""; }); return { name: i, args: e, argMeta: n, lastAlpha: r, commas: a.includes(","), rawName: t[1], rawArgs: t[2] }; } } function P(e, t) { if (Array.isArray(e)) return e.map((e) => P(e, t)); if (!e) throw TypeError("Empty color reference"); o(e) && (e = A(e, t)); let n = e.space || e.spaceId; return typeof n == "string" && (e.space = I.get(n)), e.alpha === void 0 && (e.alpha = 1), e; } var F = 75e-6, I = class e { constructor(t) { this.id = t.id, this.name = t.name, this.base = t.base ? e.get(t.base) : null, this.aliases = t.aliases, this.base && (this.fromBase = t.fromBase, this.toBase = t.toBase); let n = t.coords ?? this.base.coords; for (let e in n) "name" in n[e] || (n[e].name = e); this.coords = n, this.white = O(t.white ?? this.base.white ?? "D65"), this.formats = t.formats ?? {}; for (let e in this.formats) { let t = this.formats[e]; t.type ||= "function", t.name ||= e; } this.formats.color?.id || (this.formats.color = { ...this.formats.color ?? {}, id: t.cssId || this.id }), t.gamutSpace ? this.gamutSpace = t.gamutSpace === "self" ? this : e.get(t.gamutSpace) : this.isPolar ? this.gamutSpace = this.base : this.gamutSpace = this, this.gamutSpace.isUnbounded && (this.inGamut = (e, t) => !0), this.referred = t.referred, Object.defineProperty(this, "path", { value: te(this).reverse(), writable: !1, enumerable: !0, configurable: !0 }), S.run("colorspace-init-end", this); } inGamut(e, { epsilon: t = F } = {}) { if (!this.equals(this.gamutSpace)) return e = this.to(this.gamutSpace, e), this.gamutSpace.inGamut(e, { epsilon: t }); let n = Object.values(this.coords); return e.every((e, r) => { let i = n[r]; if (i.type !== "angle" && i.range) { if (l(e)) return !0; let [n, r] = i.range; return (n === void 0 || e >= n - t) && (r === void 0 || e <= r + t); } return !0; }); } get isUnbounded() { return Object.values(this.coords).every((e) => !("range" in e)); } get cssId() { return this.formats?.color?.id || this.id; } get isPolar() { for (let e in this.coords) if (this.coords[e].type === "angle") return !0; return !1; } getFormat(e) { if (!e) return null; e === "default" ? e = Object.values(this.formats)[0] : typeof e == "string" && (e = this.formats[e]); let t = E.get(e, this); return t !== e && e.name in this.formats && (this.formats[e.name] = t), t; } equals(e) { return e ? this === e || this.id === e || this.id === e.id : !1; } to(t, n) { if (arguments.length === 1) { let e = P(t); [t, n] = [e.space, e.coords]; } if (t = e.get(t), this.equals(t)) return n; n = n.map((e) => l(e) ? 0 : e); let r = this.path, i = t.path, a, o; for (let e = 0; e < r.length && r[e].equals(i[e]); e++) a = r[e], o = e; if (!a) throw Error(`Cannot convert between color spaces ${this} and ${t}: no connection space was found`); for (let e = r.length - 1; e > o; e--) n = r[e].toBase(n); for (let e = o + 1; e < i.length; e++) n = i[e].fromBase(n); return n; } from(t, n) { if (arguments.length === 1) { let e = P(t); [t, n] = [e.space, e.coords]; } return t = e.get(t), t.to(this, n); } toString() { return `${this.name} (${this.id})`; } getMinCoords() { let e = []; for (let t in this.coords) { let n = this.coords[t], r = n.range || n.refRange; e.push(r?.min ?? 0); } return e; } static registry = {}; static get all() { return [...new Set(Object.values(e.registry))]; } static register(e, t) { if (arguments.length === 1 && (t = arguments[0], e = t.id), t = this.get(t), this.registry[e] && this.registry[e] !== t) throw Error(`Duplicate color space registration: '${e}'`); if (this.registry[e] = t, arguments.length === 1 && t.aliases) for (let e of t.aliases) this.register(e, t); return t; } static get(t, ...n) { if (!t || b(t, this)) return t; if (s(t) === "string") { let n = e.registry[t.toLowerCase()]; if (!n) throw TypeError(`No color space found with id = "${t}"`); return n; } if (n.length) return e.get(...n); throw TypeError(`${t} is not a valid color space`); } static findFormat(t, n = e.all) { if (!t) return null; typeof t == "string" && (t = { name: t }); for (let e of n) for (let [n, r] of Object.entries(e.formats)) { r.name ??= n, r.type ??= "function"; let i = (!t.name || r.name === t.name) && (!t.type || r.type === t.type); if (t.id) { let e = r.ids || [r.id], n = Array.isArray(t.id) ? t.id : [t.id]; i &&= n.some((t) => e.includes(t)); } if (i) { let t = E.get(r, e); return t !== r && (e.formats[r.name] = t), t; } } return null; } static resolveCoord(t, n) { let r = s(t), i, a; if (r === "string" ? t.includes(".") ? [i, a] = t.split(".") : [i, a] = [, t] : Array.isArray(t) ? [i, a] = t : (i = t.space, a = t.coordId), i = e.get(i), i ||= n, !i) throw TypeError(`Cannot resolve coordinate reference ${t}: No color space specified and relative references are not allowed here`); if (r = s(a), r === "number" || r === "string" && a >= 0) { let e = Object.entries(i.coords)[a]; if (e) return { space: i, id: e[0], index: a, ...e[1] }; } i = e.get(i); let o = a.toLowerCase(), c = 0; for (let e in i.coords) { let t = i.coords[e]; if (e.toLowerCase() === o || t.name?.toLowerCase() === o) return { space: i, id: e, index: c, ...t }; c++; } throw TypeError(`No "${a}" coordinate found in ${i.name}. Its coordinates are: ${Object.keys(i.coords).join(", ")}`); } static DEFAULT_FORMAT = { type: "functions", name: "color" }; }; function te(e) { let t = [e]; for (let n = e; n = n.base;) t.push(n); return t; } var L = new I({ id: "xyz-d65", name: "XYZ D65", coords: { x: { refRange: [0, 1], name: "X" }, y: { refRange: [0, 1], name: "Y" }, z: { refRange: [0, 1], name: "Z" } }, white: "D65", formats: { color: { ids: ["xyz-d65", "xyz"] } }, aliases: ["xyz"] }), R = class extends I { constructor(e) { e.coords ||= { r: { range: [0, 1], name: "Red" }, g: { range: [0, 1], name: "Green" }, b: { range: [0, 1], name: "Blue" } }, e.base ||= L, e.toXYZ_M && e.fromXYZ_M && (e.toBase ??= (t) => { let n = a(t, e.toXYZ_M); return this.white !== this.base.white && (n = k(this.white, this.base.white, n)), n; }, e.fromBase ??= (t) => (t = k(this.base.white, this.white, t), a(t, e.fromXYZ_M))), e.referred ??= "display", super(e); } }; function ne(e, t = {}) { if (Array.isArray(e)) return e.map((e) => ne(e, t)); let { cssProperty: n = "background-color", element: r, ...i } = t, a = null; try { return P(e, i); } catch (e) { a = e; } let { CSS: s, getComputedStyle: c } = globalThis; if (o(e) && r && s && c && s.supports(n, e)) { let t = r.style[n]; e !== t && (r.style[n] = e); let o = c(r).getPropertyValue(n); if (e !== t && (r.style[n] = t), o !== e) try { return P(o, i); } catch (e) { a = e; } else a = { message: "Color value is a valid CSS color, but it could not be resolved :(" }; } return t.errorMeta && (t.errorMeta.error = a), null; } function z(e, t) { e = P(e); let n = I.get(t, t?.space), r = t?.precision, i; return i = !n || e.space.equals(n) ? e.coords.slice() : n.from(e), r === void 0 ? i : i.map((e) => d(e, r)); } function B(e, t) { if (e = P(e), t === "alpha") return e.alpha ?? 1; let { space: n, index: r } = I.resolveCoord(t, e.space); return z(e, n)[r]; } function re(e, t, n, r) { return e = P(e), Array.isArray(t) && ([t, n, r] = [ e.space, t, n ]), t = I.get(t), e.coords = t === e.space ? n.slice() : t.to(e.space, n), r !== void 0 && (e.alpha = r), e; } re.returns = "color"; function V(e, t, n) { if (e = P(e), arguments.length === 2 && s(arguments[1]) === "object") { let t = arguments[1]; for (let n in t) V(e, n, t[n]); } else if (typeof n == "function" && (n = n(B(e, t))), t === "alpha") e.alpha = n; else { let { space: r, index: i } = I.resolveCoord(t, e.space), a = z(e, r); a[i] = n, re(e, r, a); } return e; } V.returns = "color"; var ie = new I({ id: "xyz-d50", name: "XYZ D50", white: "D50", base: L, fromBase: (e) => k(L.white, "D50", e), toBase: (e) => k("D50", L.white, e) }), ae = 216 / 24389, oe = 24 / 116, se = 24389 / 27, ce = D.D50, H = new I({ id: "lab", name: "Lab", coords: { l: { refRange: [0, 100], name: "Lightness" }, a: { refRange: [-125, 125] }, b: { refRange: [-125, 125] } }, white: ce, base: ie, fromBase(e) { let t = e.map((e, t) => e / ce[t]).map((e) => e > ae ? Math.cbrt(e) : (se * e + 16) / 116); return [ 116 * t[1] - 16, 500 * (t[0] - t[1]), 200 * (t[1] - t[2]) ]; }, toBase(e) { let [t, n, r] = e, i = []; return i[1] = (t + 16) / 116, i[0] = n / 500 + i[1], i[2] = i[1] - r / 200, [ i[0] > oe ? i[0] ** 3 : (116 * i[0] - 16) / se, e[0] > 8 ? ((e[0] + 16) / 116) ** 3 : e[0] / se, i[2] > oe ? i[2] ** 3 : (116 * i[2] - 16) / se ].map((e, t) => e * ce[t]); }, formats: { lab: { coords: [ "<percentage> | <number>", "<number> | <percentage>", "<number> | <percentage>" ] } } }); function U(e) { return typeof e == "number" ? (e % 360 + 360) % 360 : e; } function le(e, t) { let [n, r] = t, i = l(n), a = l(r); if (i && a) return [n, r]; if (i ? n = r : a && (r = n), e === "raw") return t; n = U(n), r = U(r); let o = r - n; return e === "increasing" ? o < 0 && (r += 360) : e === "decreasing" ? o > 0 && (n += 360) : e === "longer" ? -180 < o && o < 180 && (o > 0 ? n += 360 : r += 360) : e === "shorter" && (o > 180 ? n += 360 : o < -180 && (r += 360)), [n, r]; } var W = new I({ id: "lch", name: "LCH", coords: { l: { refRange: [0, 100], name: "Lightness" }, c: { refRange: [0, 150], name: "Chroma" }, h: { refRange: [0, 360], type: "angle", name: "Hue" } }, base: H, fromBase(e) { if (this.ε === void 0) { let e = Object.values(this.base.coords)[1].refRange; this.ε = (e[1] - e[0]) / 1e5; } let [t, n, r] = e, i = Math.abs(n) < this.ε && Math.abs(r) < this.ε, a = i ? null : U(Math.atan2(r, n) * 180 / Math.PI); return [ t, i ? 0 : Math.sqrt(n ** 2 + r ** 2), a ]; }, toBase(e) { let [t, n, r] = e, i = null, a = null; return l(r) || (n = n < 0 ? 0 : n, i = n * Math.cos(r * Math.PI / 180), a = n * Math.sin(r * Math.PI / 180)), [ t, i, a ]; }, formats: { lch: { coords: [ "<percentage> | <number>", "<number> | <percentage>", "<number> | <angle>" ] } } }), ue = 25 ** 7, de = Math.PI, fe = 180 / de, pe = de / 180; function me(e) { let t = e * e; return t * t * t * e; } function he(e, t, { kL: n = 1, kC: r = 1, kH: i = 1 } = {}) { [e, t] = P([e, t]); let [a, o, s] = H.from(e), c = W.from(H, [ a, o, s ])[1], [l, u, d] = H.from(t), f = W.from(H, [ l, u, d ])[1]; c < 0 && (c = 0), f < 0 && (f = 0); let p = me((c + f) / 2), m = .5 * (1 - Math.sqrt(p / (p + ue))), h = (1 + m) * o, g = (1 + m) * u, _ = Math.sqrt(h ** 2 + s ** 2), v = Math.sqrt(g ** 2 + d ** 2), y = h === 0 && s === 0 ? 0 : Math.atan2(s, h), b = g === 0 && d === 0 ? 0 : Math.atan2(d, g); y < 0 && (y += 2 * de), b < 0 && (b += 2 * de), y *= fe, b *= fe; let x = l - a, S = v - _, w = b - y, T = y + b, E = Math.abs(w), D; _ * v === 0 ? D = 0 : E <= 180 ? D = w : w > 180 ? D = w - 360 : w < -180 ? D = w + 360 : C.warn("the unthinkable has happened"); let O = 2 * Math.sqrt(v * _) * Math.sin(D * pe / 2), k = (a + l) / 2, A = (_ + v) / 2, j = me(A), M; M = _ * v === 0 ? T : E <= 180 ? T / 2 : T < 360 ? (T + 360) / 2 : (T - 360) / 2; let ee = (k - 50) ** 2, N = 1 + .015 * ee / Math.sqrt(20 + ee), F = 1 + .045 * A, I = 1; I -= .17 * Math.cos((M - 30) * pe), I += .24 * Math.cos(2 * M * pe), I += .32 * Math.cos((3 * M + 6) * pe), I -= .2 * Math.cos((4 * M - 63) * pe); let te = 1 + .015 * A * I, L = 30 * Math.exp(-1 * ((M - 275) / 25) ** 2), R = 2 * Math.sqrt(j / (j + ue)), ne = -1 * Math.sin(2 * L * pe) * R, z = (x / (n * N)) ** 2; return z += (S / (r * F)) ** 2, z += (O / (i * te)) ** 2, z += ne * (S / (r * F)) * (O / (i * te)), Math.sqrt(z); } var ge = [ [ .819022437996703, .3619062600528904, -.1288737815209879 ], [ .0329836539323885, .9292868615863434, .0361446663506424 ], [ .0481771893596242, .2642395317527308, .6335478284694309 ] ], _e = [ [ 1.2268798758459243, -.5578149944602171, .2813910456659647 ], [ -.0405757452148008, 1.112286803280317, -.0717110580655164 ], [ -.0763729366746601, -.4214933324022432, 1.5869240198367816 ] ], ve = [ [ .210454268309314, .7936177747023054, -.0040720430116193 ], [ 1.9779985324311684, -2.42859224204858, .450593709617411 ], [ .0259040424655478, .7827717124575296, -.8086757549230774 ] ], G = [ [ 1, .3963377773761749, .2158037573099136 ], [ 1, -.1055613458156586, -.0638541728258133 ], [ 1, -.0894841775298119, -1.2914855480194092 ] ], K = new I({ id: "oklab", name: "Oklab", coords: { l: { refRange: [0, 1], name: "Lightness" }, a: { refRange: [-.4, .4] }, b: { refRange: [-.4, .4] } }, white: "D65", base: L, fromBase(e) { let t = a(e, ge); return t[0] = Math.cbrt(t[0]), t[1] = Math.cbrt(t[1]), t[2] = Math.cbrt(t[2]), a(t, ve, t); }, toBase(e) { let t = a(e, G); return t[0] **= 3, t[1] **= 3, t[2] **= 3, a(t, _e, t); }, formats: { oklab: { coords: [ "<percentage> | <number>", "<number> | <percentage>", "<number> | <percentage>" ] } } }); function ye(e, t) { [e, t] = P([e, t]); let [n, r, i] = K.from(e), [a, o, s] = K.from(t), c = n - a, l = r - o, u = i - s; return Math.sqrt(c ** 2 + l ** 2 + u ** 2); } var be = 75e-6; function xe(e, t, { epsilon: n = be } = {}) { e = P(e), t ||= e.space, t = I.get(t); let r = e.coords; return t !== e.space && (r = t.from(e)), t.inGamut(r, { epsilon: n }); } function Se(e) { return { space: e.space, coords: e.coords.slice(), alpha: e.alpha }; } function Ce(e, t, n = "lab") { n = I.get(n); let r = n.from(e), i = n.from(t); return Math.sqrt(r.reduce((e, t, n) => { let r = i[n]; return l(t) || l(r) ? e : e + (r - t) ** 2; }, 0)); } function we(e, t) { return Ce(e, t, "lab"); } var Te = Math.PI / 180; function Ee(e, t, { l: n = 2, c: r = 1 } = {}) { [e, t] = P([e, t]); let [i, a, o] = H.from(e), [, s, c] = W.from(H, [ i, a, o ]), [u, d, f] = H.from(t), p = W.from(H, [ u, d, f ])[1]; s < 0 && (s = 0), p < 0 && (p = 0); let m = i - u, h = s - p, g = a - d, _ = o - f, v = g ** 2 + _ ** 2 - h ** 2, y = .511; i >= 16 && (y = .040975 * i / (1 + .01765 * i)); let b = .0638 * s / (1 + .0131 * s) + .638, x; l(c) && (c = 0), x = c >= 164 && c <= 345 ? .56 + Math.abs(.2 * Math.cos((c + 168) * Te)) : .36 + Math.abs(.4 * Math.cos((c + 35) * Te)); let S = s ** 4, C = Math.sqrt(S / (S + 1900)), w = b * (C * x + 1 - C), T = (m / (n * y)) ** 2; return T += (h / (r * b)) ** 2, T += v / w ** 2, Math.sqrt(T); } var De = 203, Oe = new I({ id: "xyz-abs-d65", cssId: "--xyz-abs-d65", name: "Absolute XYZ D65", coords: { x: { refRange: [0, 9504.7], name: "Xa" }, y: { refRange: [0, 1e4], name: "Ya" }, z: { refRange: [0, 10888.3], name: "Za" } }, base: L, fromBase(e) { return e.map((e) => e * De); }, toBase(e) { return e.map((e) => e / De); } }), ke = 1.15, Ae = .66, je = 2610 / 2 ** 14, Me = 2 ** 14 / 2610, Ne = 3424 / 2 ** 12, Pe = 2413 / 2 ** 7, Fe = 2392 / 2 ** 7, Ie = 1.7 * 2523 / 2 ** 5, Le = 2 ** 5 / (1.7 * 2523), Re = -.56, ze = 16295499532821565e-27, Be = [ [ .41478972, .579999, .014648 ], [ -.20151, 1.120649, .0531008 ], [ -.0166008, .2648, .6684799 ] ], Ve = [ [ 1.9242264357876067, -1.0047923125953657, .037651404030618 ], [ .35031676209499907, .7264811939316552, -.06538442294808501 ], [ -.09098281098284752, -.3127282905230739, 1.5227665613052603 ] ], He = [ [ .5, .5, 0 ], [ 3.524, -4.066708, .542708 ], [ .199076, 1.096799, -1.295875 ] ], Ue = [ [ 1, .13860504327153927, .05804731615611883 ], [ 1, -.1386050432715393, -.058047316156118904 ], [ 1, -.09601924202631895, -.811891896056039 ] ], We = new I({ id: "jzazbz", name: "Jzazbz", coords: { jz: { refRange: [0, 1], name: "Jz" }, az: { refRange: [-.21, .21] }, bz: { refRange: [-.21, .21] } }, base: Oe, fromBase(e) { let [t, n, r] = e, [i, o, s] = a(a([ ke * t - (ke - 1) * r, Ae * n - (Ae - 1) * t, r ], Be).map(function(e) { return _((Ne + Pe * _(e / 1e4, je)) / (1 + Fe * _(e / 1e4, je)), Ie); }), He); return [ (1 + Re) * i / (1 + Re * i) - ze, o, s ]; }, toBase(e) { let [t, n, r] = e, [i, o, s] = a(a([ (t + ze) / (1 + Re - Re * (t + ze)), n, r ], Ue).map(function(e) { return 1e4 * _((Ne - _(e, Le)) / (Fe * _(e, Le) - Pe), Me); }), Ve), c = (i + (ke - 1) * s) / ke; return [ c, (o + (Ae - 1) * c) / Ae, s ]; }, formats: { jzazbz: { coords: [ "<percentage> | <number>", "<number> | <percentage>", "<number> | <percentage>" ] } } }), Ge = new I({ id: "jzczhz", name: "JzCzHz", coords: { jz: { refRange: [0, 1], name: "Jz" }, cz: { refRange: [0, .26], name: "Chroma" }, hz: { refRange: [0, 360], type: "angle", name: "Hue" } }, base: We, fromBase: W.fromBase, toBase: W.toBase, formats: { jzczhz: { coords: [ "<percentage> | <number>", "<number> | <percentage>", "<number> | <angle>" ] } } }); function Ke(e, t) { [e, t] = P([e, t]); let [n, r, i] = Ge.from(e), [a, o, s] = Ge.from(t), c = n - a, u = r - o; l(i) && l(s) ? (i = 0, s = 0) : l(i) ? i = s : l(s) && (s = i); let d = i - s, f = 2 * Math.sqrt(r * o) * Math.sin(d / 2 * (Math.PI / 180)); return Math.sqrt(c ** 2 + u ** 2 + f ** 2); } var qe = 3424 / 4096, Je = 2413 / 128, Ye = 2392 / 128, Xe = 2610 / 16384, Ze = 2523 / 32, Qe = 16384 / 2610, $e = 32 / 2523, et = [ [ .3592832590121217, .6976051147779502, -.035891593232029 ], [ -.1920808463704993, 1.100476797037432, .0753748658519118 ], [ .0070797844607479, .0748396662186362, .8433265453898765 ] ], tt = [ [ 2048 / 4096, 2048 / 4096, 0 ], [ 6610 / 4096, -13613 / 4096, 7003 / 4096 ], [ 17933 / 4096, -17390 / 4096, -543 / 4096 ] ], nt = [ [ .9999999999999998, .0086090370379328, .111029625003026 ], [ .9999999999999998, -.0086090370379328, -.1110296250030259 ], [ .9999999999999998, .5600313357106791, -.3206271749873188 ] ], rt = [ [ 2.0701522183894223, -1.3263473389671563, .2066510476294053 ], [ .3647385209748072, .6805660249472273, -.0453045459220347 ], [ -.0497472075358123, -.0492609666966131, 1.1880659249923042 ] ], it = new I({ id: "ictcp", name: "ICTCP", coords: { i: { refRange: [0, 1], name: "I" }, ct: { refRange: [-.5, .5], name: "CT" }, cp: { refRange: [-.5, .5], name: "CP" } }, base: Oe, fromBase(e) { return at(a(e, et)); }, toBase(e) { return a(ot(e), rt); }, formats: { ictcp: { coords: [ "<percentage> | <number>", "<number> | <percentage>", "<number> | <percentage>" ] } } }); function at(e) { return a(e.map(function(e) { return ((qe + Je * (e / 1e4) ** Xe) / (1 + Ye * (e / 1e4) ** Xe)) ** Ze; }), tt); } function ot(e) { return a(e, nt).map(function(e) { return 1e4 * (Math.max(e ** $e - qe, 0) / (Je - Ye * e ** $e)) ** Qe; }); } function st(e, t) { [e, t] = P([e, t]); let [n, r, i] = it.from(e), [a, o, s] = it.from(t); return 720 * Math.sqrt((n - a) ** 2 + .25 * (r - o) ** 2 + (i - s) ** 2); } function ct(e, t) { [e, t] = P([e, t]); let [n, r, i] = K.from(e), [a, o, s] = K.from(t), c = n - a, l = 2 * (r - o), u = 2 * (i - s); return Math.sqrt(c ** 2 + l ** 2 + u ** 2); } var lt = D.D65, ut = .42, dt = 1 / ut, ft = 2 * Math.PI, pt = [ [ .401288, .650173, -.051461 ], [ -.250268, 1.204414, .045854 ], [ -.002079, .048952, .953127 ] ], mt = [ [ 1.8620678550872327, -1.0112546305316843, .14918677544445175 ], [ .38752654323613717, .6214474419314753, -.008973985167612518 ], [ -.015841498849333856, -.03412293802851557, 1.0499644368778496 ] ], ht = [ [ 460, 451, 288 ], [ 460, -891, -261 ], [ 460, -220, -6300 ] ], gt = { dark: [ .8, .525, .8 ], dim: [ .9, .59, .9 ], average: [ 1, .69, 1 ] }, _t = { h: [ 20.14, 90, 164.25, 237.53, 380.14 ], e: [ .8, .7, 1, 1.2, .8 ], H: [ 0, 100, 200, 300, 400 ] }, vt = 180 / Math.PI, yt = Math.PI / 180; function bt(e, t) { return e.map((e) => { let n = _(t * Math.abs(e) * .01, ut); return 400 * g(n, e) / (n + 27.13); }); } function xt(e, t) { let n = 100 / t * 27.13 ** dt; return e.map((e) => { let t = Math.abs(e); return g(n * _(t / (400 - t), dt), e); }); } function St(e) { let t = U(e); t <= _t.h[0] && (t += 360); let n = y(_t.h, t) - 1, [r, i] = _t.h.slice(n, n + 2), [a, o] = _t.e.slice(n, n + 2), s = _t.H[n], c = (t - r) / a; return s + 100 * c / (c + (i - t) / o); } function Ct(e) { let t = (e % 400 + 400) % 400, n = Math.floor(.01 * t); t %= 100; let [r, i] = _t.h.slice(n, n + 2), [a, o] = _t.e.slice(n, n + 2); return U((t * (o * r - a * i) - 100 * r * o) / (t * (o - a) - 100 * o)); } function wt(e, t, n, r, i) { let o = {}; o.discounting = i, o.refWhite = e, o.surround = r; let s = e.map((e) => e * 100); o.la = t, o.yb = n; let c = s[1], l = a(s, pt), u = gt[o.surround], d = u[0]; o.c = u[1], o.nc = u[2]; let p = (1 / (5 * o.la + 1)) ** 4; o.fl = p * o.la + .1 * (1 - p) * (1 - p) * Math.cbrt(5 * o.la), o.flRoot = o.fl ** .25, o.n = o.yb / c, o.z = 1.48 + Math.sqrt(o.n), o.nbb = .725 * o.n ** -.2, o.ncb = o.nbb; let m = Math.max(Math.min(d * (1 - 1 / 3.6 * Math.exp((-o.la - 42) / 92)), 1), 0); o.dRgb = l.map((e) => f(1, c / e, m)), o.dRgbInv = o.dRgb.map((e) => 1 / e); let h = bt(l.map((e, t) => e * o.dRgb[t]), o.fl); return o.aW = o.nbb * (2 * h[0] + h[1] + .05 * h[2]), o; } var Tt = wt(lt, 64 / Math.PI * .2, 20, "average", !1); function Et(e, t) { if (!(e.J !== void 0 ^ e.Q !== void 0)) throw Error("Conversion requires one and only one: 'J' or 'Q'"); if (!(e.C !== void 0 ^ e.M !== void 0 ^ e.s !== void 0)) throw Error("Conversion requires one and only one: 'C', 'M' or 's'"); if (!(e.h !== void 0 ^ e.H !== void 0)) throw Error("Conversion requires one and only one: 'h' or 'H'"); if (e.J === 0 || e.Q === 0) return [ 0, 0, 0 ]; let n = 0; n = e.h === void 0 ? Ct(e.H) * yt : U(e.h) * yt; let r = Math.cos(n), i = Math.sin(n), o = 0; e.J === void 0 ? e.Q !== void 0 && (o = .25 * t.c * e.Q / ((t.aW + 4) * t.flRoot)) : o = _(e.J, 1 / 2) * .1; let s = 0; e.C === void 0 ? e.M === void 0 ? e.s !== void 0 && (s = 4e-4 * e.s ** 2 * (t.aW + 4) / t.c) : s = e.M / t.flRoot / o : s = e.C / o; let c = _(s * (1.64 - .29 ** t.n) ** -.73, 10 / 9), l = .25 * (Math.cos(n + 2) + 3.8), u = t.aW * _(o, 2 / t.c / t.z), d = 5e4 / 13 * t.nc * t.ncb * l, f = u / t.nbb, p = 23 * (f + .305) * v(c, 23 * d + c * (11 * r + 108 * i)); return a(xt(a([ f, p * r, p * i ], ht).map((e) => e * 1 / 1403), t.fl).map((e, n) => e * t.dRgbInv[n]), mt).map((e) => e / 100); } function Dt(e, t) { let n = bt(a(e.map((e) => e * 100), pt).map((e, n) => e * t.dRgb[n]), t.fl), r = n[0] + (-12 * n[1] + n[2]) / 11, i = (n[0] + n[1] - 2 * n[2]) / 9, o = (Math.atan2(i, r) % ft + ft) % ft, s = .25 * (Math.cos(o + 2) + 3.8), c = _(5e4 / 13 * t.nc * t.ncb * v(s * Math.sqrt(r ** 2 + i ** 2), n[0] + n[1] + 1.05 * n[2] + .305), .9) * (1.64 - .29 ** t.n) ** .73, l = _(t.nbb * (2 * n[0] + n[1] + .05 * n[2]) / t.aW, .5 * t.c * t.z), u = 100 * _(l, 2), d = 4 / t.c * l * (t.aW + 4) * t.flRoot, f = c * l, p = f * t.flRoot, m = U(o * vt), h = St(m); return { J: u, C: f, h: m, s: 50 * _(t.c * c / (t.aW + 4), 1 / 2), Q: d, M: p, H: h }; } var Ot = new I({ id: "cam16-jmh", cssId: "--cam16-jmh", name: "CAM16-JMh", coords: { j: { refRange: [0, 100], name: "J" }, m: { refRange: [0, 105], name: "Colorfulness" }, h: { refRange: [0, 360], type: "angle", name: "Hue" } }, base: L, fromBase(e) { this.ε === void 0 && (this.ε = Object.values(this.coords)[1].refRange[1] / 1e5); let t = Dt(e, Tt), n = Math.abs(t.M) < this.ε; return [ t.J, n ? 0 : t.M, n ? null : t.h ]; }, toBase(e) { return Et({ J: e[0], M: e[1], h: e[2] }, Tt); } }), kt = D.D65, At = 216 / 24389, jt = 24389 / 27; function Mt(e) { return 116 * (e > At ? Math.cbrt(e) : (jt * e + 16) / 116) - 16; } function Nt(e) { return e > 8 ? ((e + 16) / 116) ** 3 : e / jt; } function Pt(e, t) { let [n, r, i] = e, a = [], o = 0; if (i === 0) return [ 0, 0, 0 ]; let s = Nt(i); o = i > 0 ? .00379058511492914 * i ** 2 + .608983189401032 * i + .9155088574762233 : 9514440756550361e-21 * i ** 2 + .08693057439788597 * i - 21.928975842194614; let c = 0, l = Infinity; for (; c <= 15;) { a = Et({ J: o, C: r, h: n }, t); let e = Math.abs(a[1] - s); if (e < l) { if (e <= 2e-12) return a; l = e; } o -= (a[1] - s) * o / (2 * a[1]), c += 1; } return Et({ J: o, C: r, h: n }, t); } function Ft(e, t) { let n = Mt(e[1]); if (n === 0) return [ 0, 0, 0 ]; let r = Dt(e, It); return [ U(r.h), r.C, n ]; } var It = wt(kt, 200 / Math.PI * Nt(50), Nt(50) * 100, "average", !1), Lt = new I({ id: "hct", name: "HCT", coords: { h: { refRange: [0, 360], type: "angle", name: "Hue" }, c: { refRange: [0, 145], name: "Colorfulness" }, t: { refRange: [0, 100], name: "Tone" } }, base: L, fromBase(e) { this.ε === void 0 && (this.ε = Object.values(this.coords)[1].refRange[1] / 1e5); let t = Ft(e); return t[1] < this.ε && (t[1] = 0, t[0] = null), t; }, toBase(e) { return Pt(e, It); }, formats: { color: { id: "--hct", coords: [ "<number> | <angle>", "<percentage> | <number>", "<percentage> | <number>" ] } } }), Rt = Math.PI / 180, zt = [ 1, .007, .0228 ]; function Bt(e) { e[1] < 0 && (e = Lt.fromBase(Lt.toBase(e))); let t = Math.log(Math.max(1 + zt[2] * e[1] * It.flRoot, 1)) / zt[2], n = e[0] * Rt, r = t * Math.cos(n), i = t * Math.sin(n); return [ e[2], r, i ]; } function Vt(e, t) { [e, t] = P([e, t]); let [n, r, i] = Bt(Lt.from(e)), [a, o, s] = Bt(Lt.from(t)); return Math.sqrt((n - a) ** 2 + (r - o) ** 2 + (i - s) ** 2); } var Ht = { deltaE76: we, deltaECMC: Ee, deltaE2000: he, deltaEJz: Ke, deltaEITP: st, deltaEOK: ye, deltaEOK2: ct, deltaEHCT: Vt }; function Ut(e) { return Math.max(parseFloat(`1e${(e ? Math.floor(Math.log10(Math.abs(e))) : 0) - 2}`), 1e-6); } var Wt = { hct: { method: "hct.c", jnd: 2, deltaEMethod: "hct", blackWhiteClamp: {} }, "hct-tonal": { method: "hct.c", jnd: 0, deltaEMethod: "hct", blackWhiteClamp: { channel: "hct.t", min: 0, max: 100 } } }; function q(e, { method: t = C.gamut_mapping, space: n = void 0, deltaEMethod: r = "", jnd: i = 2, blackWhiteClamp: a = void 0 } = {}) { if (e = P(e), o(arguments[1]) ? n = arguments[1] : n ||= e.space, n = I.get(n), xe(e, n, { epsilon: 0 })) return e; let s; if (t === "css") s = Kt(e, { space: n }); else { if (t !== "clip" && !xe(e, n)) { Object.prototype.hasOwnProperty.call(Wt, t) && ({method: t, jnd: i, deltaEMethod: r, blackWhiteClamp: a} = Wt[t]); let o = he; if (r !== "") { for (let e in Ht) if ("deltae" + r.toLowerCase() === e.toLowerCase()) { o = Ht[e]; break; } } i === 0 && (i = 1e-16); let c = q(J(e, n), { method: "clip", space: n }); if (o(e, c) > i) { if (a && Object.keys(a).length === 3) { let t = I.resolveCoord(a.channel), n = B(J(e, t.space), t.id); if (l(n) && (n = 0), n >= a.max) return J({ space: "xyz-d65", coords: D.D65 }, e.space); if (n <= a.min) return J({ space: "xyz-d65", coords: [ 0, 0, 0 ] }, e.space); } let r = I.resolveCoord(t), c = r.space, u = r.id, d = J(e, c); d.coords.forEach((e, t) => { l(e) && (d.coords[t] = 0); }); let f = (r.range || r.refRange)[0], p = Ut(i), m = f, h = B(d, u); for (; h - m > p;) { let e = Se(d); e = q(e, { space: n, method: "clip" }), o(d, e) - i < p ? m = B(d, u) : h = B(d, u), V(d, u, (m + h) / 2); } s = J(d, n); } else s = c; } else s = J(e, n); if (t === "clip" || !xe(s, n, { epsilon: 0 })) { let e = Object.values(n.coords).map((e) => e.range || []); s.coords = s.coords.map((t, n) => { let [r, i] = e[n]; return r !== void 0 && (t = Math.max(r, t)), i !== void 0 && (t = Math.min(t, i)), t; }); } } return n !== e.space && (s = J(s, e.space)), e.coords = s.coords, e; } q.returns = "color"; var Gt = { WHITE: { space: K, coords: [ 1, 0, 0 ], alpha: 1 }, BLACK: { space: K, coords: [ 0, 0, 0 ], alpha: 1 } }; function Kt(e, { space: t } = {}) { let n = .02, r = 1e-4; e = P(e), t ||= e.space, t = I.get(t); let i = I.get("oklch"); if (t.isUnbounded) return J(e, t); let a = J(e, i), o = a.coords[0]; if (o >= 1) { let n = J(Gt.WHITE, t); return n.alpha = e.alpha, J(n, t); } if (o <= 0) { let n = J(Gt.BLACK, t); return n.alpha = e.alpha, J(n, t); } if (xe(a, t, { epsilon: 0 })) return J(a, t); function s(e) { let n = J(e, t), r = Object.values(t.coords); return n.coords = n.coords.map((e, t) => { if ("range" in r[t]) { let [n, i] = r[t].range; return h(n, e, i); } return e; }), n; } let c = 0, l = a.coords[1], u = !0, d = Se(a), f = s(d), p = ye(f, d); if (p < n) return f; for (; l - c > r;) { let e = (c + l) / 2; if (d.coords[1] = e, u && xe(d, t, { epsilon: 0 })) c = e; else if (f = s(d), p = ye(f, d), p < n) { if (n - p < r) break; u = !1, c = e; } else l = e; } return f; } function J(e, t, { inGamut: n } = {}) { e = P(e), t = I.get(t); let r = t.from(e), i = { space: t, coords: r, alpha: e.alpha }; return n && (i = q(i, n === !0 ? void 0 : n)), i; } J.returns = "color"; function qt(e, t = {}) { let { precision: n = C.precision, format: r, inGamut: i = !0, coords: a, alpha: o, commas: s } = t, l, u = P(e), d = r, f = u.parseMeta; f && !r && (f.format.canSerialize() && (r = f.format, d = f.formatId), a ??= f.types, o ??= f.alphaType, s ??= f.commas), d && (r = u.space.getFormat(r) ?? I.findFormat(d)), r || (r = u.space.getFormat("default") ?? I.DEFAULT_FORMAT, d = r.name), r && r.space && r.space !== u.space && (u = J(u, r.space)); let p = u.coords.slice(); if (i ||= r.toGamut, i && !xe(u) && (p = q(Se(u), i === !0 ? void 0 : i).coords), r.type === "custom") if (r.serialize) l = r.serialize(p, u.alpha, t); else throw TypeError(`format ${d} can only be used to parse colors, not for serialization`); else { let e = r.name || "color", t = r.serializeCoords(p, n, a); if (e === "color") { let e = r.id || r.ids?.[0] || u.space.cssId || u.space.id; t.unshift(e); } let i = u.alpha; o !== void 0 && typeof o != "object" && (o = typeof o == "string" ? { type: o } : { include: o }); let d = o?.type ?? "<number>", f = o?.include === !0 || r.alpha === !0 || o?.include !== !1 && r.alpha !== !1 && i < 1, m = ""; if (s ??= r.commas, f) { if (n !== null) { let e; d === "<percentage>" && (e = "%", i *= 100), i = c(i, { precision: n, unit: e }); } m = `${s ? "," : " /"} ${i}`; } l = `${e}(${t.join(s ? ", " : " ")}${m})`; } return l; } var Jt = new R({ id: "rec2020-linear", cssId: "--rec2020-linear", name: "Linear REC.2020", white: "D65", toXYZ_M: [ [ .6369580483012914, .14461690358620832, .1688809751641721 ], [ .2627002120112671, .6779980715188708, .05930171646986196 ], [ 0, .028072693049087428, 1.060985057710791 ] ], fromXYZ_M: [ [ 1.716651187971268, -.355670783776392, -.25336628137366 ], [ -.666684351832489, 1.616481236634939, .0157685458139111 ], [ .017639857445311, -.042770613257809, .942103121235474 ] ] }), Yt = new R({ id: "rec2020", name: "REC.2020", base: Jt, toBase(e) { return e.map(function(e) { let t = e < 0 ? -1 : 1; return t * (e * t) ** 2.4; }); }, fromBase(e) { return e.map(function(e) { let t = e < 0 ? -1 : 1; return t * (e * t) ** (1 / 2.4); }); } }), Xt = new R({ id: "p3-linear", cssId: "display-p3-linear", name: "Linear P3", white: "D65", toXYZ_M: [ [ .4865709486482162, .26566769316909306, .1982172852343625 ], [ .2289745640697488, .6917385218365064, .079286914093745 ], [ 0, .04511338185890264, 1.043944368900976 ] ], fromXYZ_M: [ [ 2.493496911941425, -.9313836179191239, -.40271078445071684 ], [ -.8294889695615747, 1.7626640603183463, .023624685841943577 ], [ .03584583024378447, -.07617238926804182, .9568845240076872 ] ] }), Zt = [ [ .41239079926595934, .357584339383878, .1804807884018343 ], [ .21263900587151027, .715168678767756, .07219231536073371 ], [ .01933081871559182, .11919477979462598, .9505321522496607 ] ], Y = [ [ 3.2409699419045226, -1.537383177570094, -.4986107602930034 ], [ -.9692436362808796, 1.8759675015077202, .04155505740717559 ], [ .05563007969699366, -.20397695888897652, 1.0569715142428786 ] ], Qt = new R({ id: "srgb-linear", name: "Linear sRGB", white: "D65", toXYZ_M: Zt, fromXYZ_M: Y }), $t = { aliceblue: [ 240 / 255, 248 / 255, 1 ], antiquewhite: [ 250 / 255, 235 / 255, 215 / 255 ], aqua: [ 0, 1, 1 ], aquamarine: [ 127 / 255, 1, 212 / 255 ], azure: [ 240 / 255, 1, 1 ], beige: [ 245 / 255, 245 / 255, 220 / 255 ], bisque: [ 1, 228 / 255, 196 / 255 ], black: [ 0, 0, 0 ], blanchedalmond: [ 1, 235 / 255, 205 / 255 ], blue: [ 0, 0, 1 ], blueviolet: [ 138 / 255, 43 / 255, 226 / 255 ], brown: [ 165 / 255, 42 / 255, 42 / 255 ], burlywood: [ 222 / 255, 184 / 255, 135 / 255 ], cadetblue: [ 95 / 255, 158 / 255, 160 / 255 ], chartreuse: [ 127 / 255, 1, 0 ], chocolate: [ 210 / 255, 105 / 255, 30 / 255 ], coral: [ 1, 127 / 255, 80 / 255 ], cornflowerblue: [ 100 / 255, 149 / 255, 237 / 255 ], cornsilk: [ 1, 248 / 255, 220 / 255 ], crimson: [ 220 / 255, 20 / 255, 60 / 255 ], cyan: [ 0, 1, 1 ], darkblue: [ 0, 0, 139 / 255 ], darkcyan: [ 0, 139 / 255, 139 / 255 ], darkgoldenrod: [ 184 / 255, 134 / 255, 11 / 255 ], darkgray: [ 169 / 255, 169 / 255, 169 / 255 ], darkgreen: [ 0, 100 / 255, 0 ], darkgrey: [ 169 / 255, 169 / 255, 169 / 255 ], darkkhaki: [ 189 / 255, 183 / 255, 107 / 255 ], darkmagenta: [ 139 / 255, 0, 139 / 255 ], darkolivegreen: [ 85 / 255, 107 / 255, 47 / 255 ], darkorange: [ 1, 140 / 255, 0 ], darkorchid: [ 153 / 255, 50 / 255, 204 / 255 ], darkred: [ 139 / 255, 0, 0 ], darksalmon: [ 233 / 255, 150 / 255, 122 / 255 ], darkseagreen: [ 143 / 255, 188 / 255, 143 / 255 ], darkslateblue: [ 72 / 255, 61 / 255, 139 / 255 ], darkslategray: [ 47 / 255, 79 / 255, 79 / 255 ], darkslategrey: [ 47 / 255, 79 / 255, 79 / 255 ], darkturquoise: [ 0, 206 / 255, 209 / 255 ], darkviolet: [ 148 / 255, 0, 211 / 255 ], deeppink: [ 1, 20 / 255, 147 / 255 ], deepskyblue: [ 0, 191 / 255, 1 ], dimgray: [ 105 / 255, 105 / 255, 105 / 255 ], dimgrey: [ 105 / 255, 105 / 255, 105 / 255 ], dodgerblue: [ 30 / 255, 144 / 255, 1 ], firebrick: [ 178 / 255, 34 / 255, 34 / 255 ], floralwhite: [ 1, 250 / 255, 240 / 255 ], forestgreen: [ 34 / 255, 139 / 255, 34 / 255 ], fuchsia: [ 1, 0, 1 ], gainsboro: [ 220 / 255, 220 / 255, 220 / 255 ], ghostwhite: [ 248 / 255, 248 / 255, 1 ], gold: [ 1, 215 / 255, 0 ], goldenrod: [ 218 / 255, 165 / 255, 32 / 255 ], gray: [ 128 / 255, 128 / 255, 128 / 255 ], green: [ 0, 128 / 255, 0 ], greenyellow: [ 173 / 255, 1, 47 / 255 ], grey: [ 128 / 255, 128 / 255, 128 / 255 ], honeydew: [ 240 / 255, 1, 240 / 255 ], hotpink: [ 1, 105 / 255, 180 / 255 ], indianred: [ 205 / 255, 92 / 255, 92 / 255 ], indigo: [ 75 / 255, 0, 130 / 255 ], ivory: [ 1, 1, 240 / 255 ], khaki: [ 240 / 255, 230 / 255, 140 / 255 ], lavender: [ 230 / 255, 230 / 255, 250 / 255 ], lavenderblush: [ 1, 240 / 255, 245 / 255 ], lawngreen: [ 124 / 255, 252 / 255, 0 ], lemonchiffon: [ 1, 250 / 255, 205 / 255 ], lightblue: [ 173 / 255, 216 / 255, 230 / 255 ], lightcoral: [ 240 / 255, 128 / 255, 128 / 255 ], lightcyan: [ 224 / 255, 1, 1 ], lightgoldenrodyellow: [ 250 / 255, 250 / 255, 210 / 255 ], lightgray: [ 211 / 255, 211 / 255, 211 / 255 ], lightgreen: [ 144 / 255, 238 / 255, 144 / 255 ], lightgrey: [ 211 / 255, 211 / 255, 211 / 255 ], lightpink: [ 1, 182 / 255, 193 / 255 ], lightsalmon: [ 1, 160 / 255, 122 / 255 ], lightseagreen: [ 32 / 255, 178 /