@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
JavaScript
/*!
* 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 /