@studiotoolkit/color-palette-generator 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +2 -4
  2. package/dist/index.mjs +1564 -1389
  3. package/package.json +8 -7
package/dist/index.mjs CHANGED
@@ -1,1391 +1,1566 @@
1
- const it = (t) => t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4), G = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * Math.pow(t, 0.4166666666666667) - 0.055, y = (t) => Math.max(0, Math.min(1, t)), H = (t, n, o) => t + (n - t) * o, st = Math.PI * 2, Ft = ({ r: t, g: n, b: o }) => {
2
- const e = it(t), s = it(n), r = it(o), l = Math.cbrt(
3
- 0.4122214708 * e + 0.5363325363 * s + 0.0514459929 * r
4
- ), c = Math.cbrt(
5
- 0.2119034982 * e + 0.6806995451 * s + 0.1073969566 * r
6
- ), a = Math.cbrt(
7
- 0.0883024619 * e + 0.2817188376 * s + 0.6299787005 * r
8
- );
9
- return {
10
- L: 0.2104542553 * l + 0.793617785 * c - 0.0040720468 * a,
11
- a: 1.9779984951 * l - 2.428592205 * c + 0.4505937099 * a,
12
- b: 0.0259040371 * l + 0.7827717662 * c - 0.808675766 * a
13
- };
14
- }, Gt = ({ L: t, a: n, b: o }) => {
15
- const e = t + 0.3963377774 * n + 0.2158037573 * o, s = t - 0.1055613458 * n - 0.0638541728 * o, r = t - 0.0894841775 * n - 1.291485548 * o, l = e * e * e, c = s * s * s, a = r * r * r;
16
- return {
17
- r: y(
18
- G(4.0767416621 * l - 3.3077115913 * c + 0.2309699292 * a)
19
- ),
20
- g: y(
21
- G(-1.2684380046 * l + 2.6097574011 * c - 0.3413193965 * a)
22
- ),
23
- b: y(
24
- G(-0.0041960863 * l - 0.7034186147 * c + 1.707614701 * a)
25
- )
26
- };
27
- }, nn = ({ L: t, a: n, b: o }) => ({
28
- L: t,
29
- C: Math.sqrt(n * n + o * o),
30
- H: (Math.atan2(o, n) * 180 / Math.PI + 360) % 360
31
- }), on = ({ L: t, C: n, H: o }) => ({
32
- L: t,
33
- a: n * Math.cos(o * Math.PI / 180),
34
- b: n * Math.sin(o * Math.PI / 180)
35
- }), Xt = (t) => ({
36
- r: parseInt(t.slice(1, 3), 16) / 255,
37
- g: parseInt(t.slice(3, 5), 16) / 255,
38
- b: parseInt(t.slice(5, 7), 16) / 255
39
- }), lt = ({ r: t, g: n, b: o }) => {
40
- const e = (s) => Math.round(s * 255).toString(16).padStart(2, "0");
41
- return `#${e(t)}${e(n)}${e(o)}`;
42
- }, z = (t) => nn(Ft(Xt(t))), D = (t) => lt(Gt(on(t))), en = (t) => lt(Gt(t)), St = (t, n, o) => ({
43
- L: H(t.L, n.L, o),
44
- a: H(t.a, n.a, o),
45
- b: H(t.b, n.b, o)
46
- }), Qt = (t) => {
47
- let n = t >>> 0;
48
- return () => {
49
- n += 1831565813;
50
- let o = n;
51
- return o = Math.imul(o ^ o >>> 15, o | 1), o ^= o + Math.imul(o ^ o >>> 7, o | 61), ((o ^ o >>> 14) >>> 0) / 4294967296;
52
- };
53
- }, Ut = (t) => {
54
- let n = 0;
55
- for (let o = 1; o < 7; o++) n = Math.imul(31, n) + parseInt(t[o], 16) | 0;
56
- return Math.abs(n);
57
- }, ut = (t) => {
58
- const n = [], o = Qt(t);
59
- for (let s = 0; s < 256; s++) n.push(o());
60
- const e = (s) => s * s * (3 - 2 * s);
61
- return (s) => {
62
- const r = Math.floor(s) & 255, l = s - Math.floor(s);
63
- return H(n[r], n[r + 1 & 255], e(l));
64
- };
65
- }, mt = (t, n, o, e, s) => {
66
- const r = 1 - s;
67
- return r * r * r * t + 3 * r * r * s * n + 3 * r * s * s * o + s * s * s * e;
68
- }, sn = (t, n, o, e, s) => ({
69
- L: mt(t.L, n.L, o.L, e.L, s),
70
- a: mt(t.a, n.a, o.a, e.a, s),
71
- b: mt(t.b, t.b, o.b, e.b, s)
72
- }), rn = (t) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2, an = (t) => {
73
- let n;
74
- t >= 1667 && t <= 4e3 ? n = -266123900 / (t * t * t) - 234358 / (t * t) + 877.6956 / t + 0.17991 : n = -3025846900 / (t * t * t) + 21070379e-1 / (t * t) + 222.6347 / t + 0.24039;
75
- let o;
76
- t >= 1667 && t <= 2222 ? o = -1.1063814 * n * n * n - 1.3481102 * n * n + 2.18555832 * n - 0.20219683 : t <= 4e3 ? o = -0.9549476 * n * n * n - 1.37418593 * n * n + 2.09137015 * n - 0.16748867 : o = 3.081758 * n * n * n - 5.8733867 * n * n + 3.75112997 * n - 0.37001483;
77
- const e = 1, s = e * n / Math.max(o, 1e-6), r = e * (1 - n - o) / Math.max(o, 1e-6), l = 3.2406 * s - 1.5372 * e - 0.4986 * r, c = -0.9689 * s + 1.8758 * e + 0.0415 * r, a = 0.0557 * s - 0.204 * e + 1.057 * r, i = Math.max(l, c, a, 1e-6);
78
- return {
79
- r: y(G(l / i)),
80
- g: y(G(c / i)),
81
- b: y(G(a / i))
82
- };
83
- }, cn = (t, n = 0.5, o = -1.5, e = 1.2, s = 1) => {
84
- const r = st * (n / 3 + o * t), l = Math.pow(t, s), c = e * l * (1 - l) / 2, a = Math.cos(r), i = Math.sin(r);
85
- return {
86
- r: y(l + c * (-0.14861 * a + 1.78277 * i)),
87
- g: y(l + c * (-0.29227 * a - 0.90649 * i)),
88
- b: y(l + c * (1.97294 * a))
89
- };
90
- }, ln = (t, n) => {
91
- const o = Qt(Ut(t));
92
- return Array.from(
93
- { length: n },
94
- () => D({
95
- L: H(0.35, 0.75, o()),
96
- C: H(0.08, 0.2, o()),
97
- H: o() * 360
98
- })
99
- );
100
- }, hn = (t, n) => {
101
- const o = z(t), e = 137.50776405003785;
102
- return Array.from({ length: n }, (s, r) => {
103
- const l = (o.H + e * r) % 360;
104
- return D({
105
- L: H(0.45, 0.7, r % 3 / 2),
106
- // cycle lightness softly
107
- C: Math.max(o.C, 0.1),
108
- H: l
109
- });
110
- });
111
- }, un = (t, n) => {
112
- const o = z(t), e = Ut(t), s = ut(e), r = ut(e + 1), l = ut(e + 2);
113
- return Array.from({ length: n }, (c, a) => {
114
- const i = a / Math.max(n - 1, 1);
115
- return D({
116
- L: y(H(0.35, 0.8, s(i * 3.5))),
117
- C: y(H(0.06, 0.22, r(i * 4.1 + 1))),
118
- H: (o.H + l(i * 2.7 + 2) * 120 - 60) % 360
119
- });
120
- });
121
- }, mn = (t, n) => {
122
- const o = z(t), e = 20, s = 220, r = (o.H - 120 + 360) % 360;
123
- return Array.from({ length: n }, (l, c) => {
124
- const a = c / (n - 1), i = (H(e, s, a) + r) % 360, u = 0.35 + 0.45 * Math.sin(a * Math.PI), g = H(0.18, 0.12, Math.abs(a - 0.5) * 2);
125
- return D({ L: u, C: g, H: i });
126
- });
127
- }, gn = (t, n) => {
128
- const o = t.slice(0, 4).map((s) => Ft(Xt(s)));
129
- for (; o.length < 4; ) o.push({ ...o[o.length - 1] });
130
- const e = {
131
- L: (o[0].L + o[3].L) / 2,
132
- a: (o[0].a + o[3].a) / 2,
133
- b: (o[0].b + o[3].b) / 2
134
- };
135
- return o[1] = St(o[1], e, 0.35), o[2] = St(o[2], e, 0.35), Array.from({ length: n }, (s, r) => {
136
- const l = r / (n - 1);
137
- return en(sn(o[0], o[1], o[2], o[3], l));
138
- });
139
- }, fn = (t, n) => {
140
- const o = z(t), e = 0.28, s = 0.88;
141
- return Array.from({ length: n }, (r, l) => {
142
- const c = l / (n - 1), a = rn(c), i = H(e, s, a), u = o.C * (1 - 0.4 * Math.abs(c - 0.5) * 2);
143
- return D({ L: i, C: u, H: o.H });
144
- });
145
- }, Mn = (t, n) => {
146
- const e = z(t).H / 360 * 3e3, s = Math.max(900, 1500 + e), r = Math.min(15e3, 9e3 + e);
147
- return Array.from({ length: n }, (l, c) => {
148
- const a = c / (n - 1), i = H(s, r, a);
149
- return lt(an(i));
150
- });
151
- }, bn = (t, n) => {
152
- const o = z(t), e = [1, 1];
153
- for (; e.length < n; )
154
- e.push(e[e.length - 1] + e[e.length - 2]);
155
- return Array.from({ length: n }, (s, r) => {
156
- const l = (o.H + e[r] * 47 % 360) % 360, c = H(0.4, 0.72, r % 4 / 3), a = Math.max(o.C, 0.1);
157
- return D({ L: c, C: a, H: l });
158
- });
159
- }, dn = (t, n) => {
160
- const o = z(t), e = 0.88, s = 0.28;
161
- return Array.from({ length: n }, (r, l) => {
162
- const c = 1 / (l + 1), a = 1, i = 1 / n, u = (c - i) / (a - i), g = H(s, e, u), h = H(o.C * 1.3, o.C * 0.5, u);
163
- return D({ L: g, C: y(h), H: o.H });
164
- });
165
- }, pn = (t, n) => {
166
- const o = z(t);
167
- return Array.from({ length: n }, (e, s) => {
168
- const r = s / Math.max(n - 1, 1), l = 0.55 + 0.25 * Math.sin(st * r * 1 + 0), c = o.C * (0.7 + 0.5 * Math.sin(st * r * 1.5 + Math.PI / 3)), a = (o.H + 60 * Math.sin(st * r * 0.75 + Math.PI / 6) + 360) % 360;
169
- return D({ L: y(l), C: y(c), H: a });
170
- });
171
- }, Ln = (t, n) => {
172
- const e = z(t).H / 120 % 3;
173
- return Array.from({ length: n }, (s, r) => {
174
- const l = r / (n - 1);
175
- return lt(cn(l, e, -1.5, 1.2, 1));
176
- });
177
- }, f0 = (t, n = 5) => {
178
- const o = t.square ?? [], e = o[0] ?? "#0065ff", s = o[1] ?? "#ff0000", r = o[2] ?? "#00ff00", l = o[3] ?? "#ffff00";
179
- return {
180
- random: ln(e, n),
181
- goldenRatio: hn(e, n),
182
- noise: un(e, n),
183
- temperature: mn(e, n),
184
- bezierInterpolation: gn([e, s, r, l], n),
185
- easeInOut: fn(e, n),
186
- blackbody: Mn(e, n),
187
- fibonacci: bn(e, n),
188
- harmonicSeries: dn(e, n),
189
- sinusoidal: pn(e, n),
190
- cubehelix: Ln(e, n)
191
- };
192
- }, _t = (t) => ({
193
- r: parseInt(t.slice(1, 3), 16) / 255,
194
- g: parseInt(t.slice(3, 5), 16) / 255,
195
- b: parseInt(t.slice(5, 7), 16) / 255
196
- }), O = ({ r: t, g: n, b: o }) => {
197
- const e = (s) => Math.max(0, Math.min(255, Math.round(s * 255))).toString(16).padStart(2, "0");
198
- return `#${e(t)}${e(n)}${e(o)}`;
199
- }, R = (t) => t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4), X = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - 0.055, B = (t, n, o) => t + (n - t) * o, T = (t, n = 0, o = 1) => Math.max(n, Math.min(o, t)), E = { r: 1, g: 1, b: 1 }, W = { r: 0, g: 0, b: 0 }, wt = ({ r: t, g: n, b: o }) => 0.2126 * R(t) + 0.7152 * R(n) + 0.0722 * R(o), _ = (t, n) => {
200
- const o = wt(t), e = wt(n);
201
- return (Math.max(o, e) + 0.05) / (Math.min(o, e) + 0.05);
202
- }, xn = (t, n) => {
203
- const o = ({ r: f, g: b, b: M }) => 0.2126729 * Math.pow(f, 2.4) + 0.7151522 * Math.pow(b, 2.4) + 0.072175 * Math.pow(M, 2.4);
204
- let h = o(t), m = o(n);
205
- if (h = h > 0.022 ? h : h + Math.pow(0.022 - h, 1.414), m = m > 0.022 ? m : m + Math.pow(0.022 - m, 1.414), Math.abs(m - h) < 5e-4) return 0;
206
- if (m > h) {
207
- const f = (Math.pow(m, 0.56) - Math.pow(h, 0.57)) * 1.14;
208
- return f < 0.1 ? 0 : (f - 0.027) * 100;
209
- } else {
210
- const f = (Math.pow(m, 0.65) - Math.pow(h, 0.62)) * 1.14;
211
- return f > -0.1 ? 0 : (f + 0.027) * 100;
212
- }
213
- }, Vt = ({ r: t, g: n, b: o }) => {
214
- const e = Math.max(t, n, o), s = Math.min(t, n, o), r = (e + s) / 2;
215
- if (e === s) return { h: 0, s: 0, l: r };
216
- const l = e - s, c = l / (r > 0.5 ? 2 - e - s : e + s);
217
- let a = 0;
218
- return e === t ? a = (n - o) / l + (n < o ? 6 : 0) : e === n ? a = (o - t) / l + 2 : a = (t - n) / l + 4, { h: a * 60, s: c, l: r };
219
- }, A = ({
220
- h: t,
221
- s: n,
222
- l: o
223
- }) => {
224
- const e = (1 - Math.abs(2 * o - 1)) * n, s = e * (1 - Math.abs(t / 60 % 2 - 1)), r = o - e / 2;
225
- let l = 0, c = 0, a = 0;
226
- return t < 60 ? (l = e, c = s) : t < 120 ? (l = s, c = e) : t < 180 ? (c = e, a = s) : t < 240 ? (c = s, a = e) : t < 300 ? (l = s, a = e) : (l = e, a = s), { r: l + r, g: c + r, b: a + r };
227
- }, Pt = (t, n, o, e = 48) => {
228
- if (_(t, n) >= o) return t;
229
- const s = Vt(t);
230
- let r = null;
231
- {
232
- let l = 0, c = s.l;
233
- for (let a = 0; a < e; a++) {
234
- const i = (l + c) / 2, u = A({ ...s, l: i });
235
- _(u, n) >= o ? (r = u, c = i) : l = i;
236
- }
237
- }
238
- if (r && _(r, n) >= o) return r;
239
- {
240
- let l = s.l, c = 1;
241
- for (let a = 0; a < e; a++) {
242
- const i = (l + c) / 2, u = A({ ...s, l: i });
243
- _(u, n) >= o ? (r = u, l = i) : c = i;
244
- }
245
- }
246
- return r && _(r, n) >= o ? r : _(W, n) >= _(E, n) ? W : E;
247
- }, Rt = (t, n, o, e, s, r, l = 48) => {
248
- let c = r === "dark" ? 0 : o, a = r === "dark" ? o : 1, i = null;
249
- for (let u = 0; u < l; u++) {
250
- const g = (c + a) / 2, h = A({ h: t, s: n, l: g });
251
- _(h, e) >= s ? (i = h, r === "dark" ? c = g : a = g) : r === "dark" ? a = g : c = g;
252
- }
253
- return i && _(i, e) >= s ? i : _(W, e) >= _(E, e) ? W : E;
254
- }, vt = ({ r: t, g: n, b: o }) => {
255
- const e = R(t), s = R(n), r = R(o);
256
- return {
257
- r: X(T(0.29031 * e + 0.70969 * s + 0 * r)),
258
- g: X(T(0.29031 * e + 0.70969 * s + 0 * r)),
259
- b: X(T(-0.02197 * e + 0.02197 * s + 1 * r))
260
- };
261
- }, kt = ({ r: t, g: n, b: o }) => {
262
- const e = R(t), s = R(n), r = R(o);
263
- return {
264
- r: X(T(0.10889 * e + 0.89111 * s + 0 * r)),
265
- g: X(T(0.10889 * e + 0.89111 * s + 0 * r)),
266
- b: X(T(452e-5 * e - 452e-5 * s + 1 * r))
267
- };
268
- }, zt = (t, n) => Math.sqrt((t.r - n.r) ** 2 + (t.g - n.g) ** 2 + (t.b - n.b) ** 2), Cn = (t, n, o = 0.12) => zt(vt(t), vt(n)) > o || zt(kt(t), kt(n)) > o, M0 = (t, n = 9) => {
269
- const o = Object.values(t).find(
270
- (l) => Array.isArray(l) && l.length > 0
271
- );
272
- if (!o) return {};
273
- const e = _t(o[0]), s = Vt(e), r = {};
274
- r.contrastScale = Array.from({ length: n }, (l, c) => {
275
- const a = c / (n - 1);
276
- return O(A({ h: s.h, s: s.s, l: Math.pow(a, 0.8) }));
277
- });
278
- {
279
- const c = Math.ceil(n / 2);
280
- r.accessible = Array.from({ length: n }, (a, i) => {
281
- const u = i % 2 === 0, g = u ? B(0.05, 0.35, i / 2 / c) : B(0.88, 0.98, Math.floor(i / 2) / c), h = A({ h: s.h, s: s.s * 0.6, l: g }), m = A(u ? { h: s.h, s: s.s * 0.1, l: 0.96 } : { h: s.h, s: s.s * 0.8, l: 0.15 });
282
- return O(Pt(h, m, 4.5));
283
- });
284
- }
285
- {
286
- const l = [
287
- { bg: E, ratio: 4.5, startL: 0.2 },
288
- { bg: E, ratio: 7, startL: 0.1 },
289
- { bg: W, ratio: 4.5, startL: 0.8 },
290
- { bg: W, ratio: 7, startL: 0.9 }
291
- ];
292
- r.wcag = Array.from({ length: n }, (c, a) => {
293
- const { bg: i, ratio: u, startL: g } = l[a % l.length], h = Math.floor(a / l.length), m = T(1 - h * 0.3), f = h * (g < 0.5 ? 0.08 : -0.08), b = A({
294
- h: s.h,
295
- s: s.s * m,
296
- l: T(g + f)
297
- });
298
- return O(Pt(b, i, u));
299
- });
300
- }
301
- {
302
- const l = { r: 1, g: 1, b: 1 };
303
- r.apca = Array.from({ length: n }, (c, a) => {
304
- const i = a / (n - 1), u = B(30, 90, i);
305
- let g = 0, h = 1;
306
- for (let m = 0; m < 48; m++) {
307
- const f = (g + h) / 2, b = A({ h: s.h, s: s.s, l: f });
308
- Math.abs(xn(b, l)) > u ? g = f : h = f;
309
- }
310
- return O(A({ h: s.h, s: s.s, l: (g + h) / 2 }));
311
- });
312
- }
313
- {
314
- const l = [202, 27, 56, 180, 291, 343, 120, 240, 30], c = [];
315
- for (let a = 0; a < n; a++) {
316
- const i = l[a % l.length], u = B(s.h, i, 0.65), g = B(0.25, 0.75, a / Math.max(n - 1, 1));
317
- let h = A({ h: u, s: T(s.s, 0.4, 0.85), l: g });
318
- a > 0 && !Cn(h, _t(c[a - 1])) && (h = A({ h: u, s: s.s, l: T(g + 0.15) })), c.push(O(h));
319
- }
320
- r.colorBlindSafe = c;
321
- }
322
- {
323
- const l = [
324
- { name: "background", l: 0.97, s: 0.08 },
325
- { name: "surface", l: 0.93, s: 0.12 },
326
- { name: "border", l: 0.8, s: 0.18 },
327
- { name: "muted", l: 0.65, s: 0.25 },
328
- { name: "default", l: 0.45, s: s.s },
329
- { name: "emphasis", l: 0.35, s: s.s },
330
- { name: "strong", l: 0.22, s: s.s },
331
- { name: "onColor", l: 0.98, s: 0.05 },
332
- { name: "error", l: 0.4, s: 0.85, h: 0 },
333
- { name: "success", l: 0.35, s: 0.6, h: 142 }
334
- ];
335
- r.colorTokenized = Array.from({ length: n }, (c, a) => {
336
- const { h: i, s: u, l: g } = l[a % l.length];
337
- return O(A({ h: i ?? s.h, s: u, l: g }));
338
- });
339
- }
340
- {
341
- const c = Math.ceil(n / 2), a = n - c;
342
- r.highContrast = Array.from({ length: n }, (i, u) => {
343
- if (u < c) {
344
- const g = u / Math.max(c - 1, 1), h = B(0.05, 0.28, g), m = T(B(s.s, 0, g), 0, 1);
345
- return O(
346
- Rt(s.h, m, h, E, 7, "dark")
347
- );
348
- } else {
349
- const h = (u - c) / Math.max(a - 1, 1), m = B(0.65, 0.98, h), f = T(s.s * 0.7, 0.2, 0.8);
350
- return O(
351
- Rt(s.h, f, m, W, 7, "light")
352
- );
353
- }
354
- });
355
- }
356
- return r;
357
- }, gt = (t) => t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4), ft = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - 0.055, Z = (t) => Math.max(0, Math.min(1, t)), K = (t, n, o) => t + (n - t) * o, Hn = ({ r: t, g: n, b: o }) => {
358
- const e = gt(t), s = gt(n), r = gt(o), l = Math.cbrt(
359
- 0.4122214708 * e + 0.5363325363 * s + 0.0514459929 * r
360
- ), c = Math.cbrt(
361
- 0.2119034982 * e + 0.6806995451 * s + 0.1073969566 * r
362
- ), a = Math.cbrt(
363
- 0.0883024619 * e + 0.2817188376 * s + 0.6299787005 * r
364
- );
365
- return {
366
- L: 0.2104542553 * l + 0.793617785 * c - 0.0040720468 * a,
367
- a: 1.9779984951 * l - 2.428592205 * c + 0.4505937099 * a,
368
- b: 0.0259040371 * l + 0.7827717662 * c - 0.808675766 * a
369
- };
370
- }, yn = ({ L: t, a: n, b: o }) => {
371
- const e = t + 0.3963377774 * n + 0.2158037573 * o, s = t - 0.1055613458 * n - 0.0638541728 * o, r = t - 0.0894841775 * n - 1.291485548 * o, l = e * e * e, c = s * s * s, a = r * r * r;
372
- return {
373
- r: Z(
374
- ft(4.0767416621 * l - 3.3077115913 * c + 0.2309699292 * a)
375
- ),
376
- g: Z(
377
- ft(-1.2684380046 * l + 2.6097574011 * c - 0.3413193965 * a)
378
- ),
379
- b: Z(
380
- ft(-0.0041960863 * l - 0.7034186147 * c + 1.707614701 * a)
381
- )
382
- };
383
- }, An = ({ L: t, a: n, b: o }) => ({
384
- L: t,
385
- C: Math.sqrt(n * n + o * o),
386
- H: (Math.atan2(o, n) * 180 / Math.PI + 360) % 360
387
- }), $n = ({ L: t, C: n, H: o }) => ({
388
- L: t,
389
- a: n * Math.cos(o * Math.PI / 180),
390
- b: n * Math.sin(o * Math.PI / 180)
391
- }), Tn = (t) => ({
392
- r: parseInt(t.slice(1, 3), 16) / 255,
393
- g: parseInt(t.slice(3, 5), 16) / 255,
394
- b: parseInt(t.slice(5, 7), 16) / 255
395
- }), In = ({ r: t, g: n, b: o }) => {
396
- const e = (s) => Math.round(s * 255).toString(16).padStart(2, "0");
397
- return `#${e(t)}${e(n)}${e(o)}`;
398
- }, k = (t) => An(Hn(Tn(t))), q = (t) => In(yn($n(t))), Tt = (t, n, o) => {
399
- let e = n - t;
400
- return e > 180 && (e -= 360), e < -180 && (e += 360), (t + e * o + 360) % 360;
401
- }, Ht = (t, n, o) => ({
402
- L: K(t.L, n.L, o),
403
- C: K(t.C, n.C, o),
404
- H: Tt(t.H, n.H, o)
405
- }), Sn = (t, n) => {
406
- const o = k(t);
407
- return Array.from({ length: n }, (e, s) => {
408
- const r = s / (n - 1);
409
- return q({ L: K(0.92, 0.25, r), C: o.C, H: o.H });
410
- });
411
- }, _n = (t, n, o) => {
412
- const e = k(t), s = k(n), r = { L: 0.9, C: 0.02, H: e.H };
413
- return Array.from({ length: o }, (l, c) => {
414
- const a = c / (o - 1), i = a * 2;
415
- if (a <= 0.5) {
416
- const u = { ...e, L: 0.4 };
417
- return q(Ht(u, r, i));
418
- } else {
419
- const u = { ...s, L: 0.4 };
420
- return q(Ht(r, u, i - 1));
421
- }
422
- });
423
- }, wn = (t, n) => {
424
- const o = k(t), e = Z(K(0.55, 0.65, 0.5)), s = Math.max(o.C, 0.12);
425
- return Array.from({ length: n }, (r, l) => {
426
- const c = (o.H + 360 / n * l) % 360;
427
- return q({ L: e, C: s, H: c });
428
- });
429
- }, Pn = (t, n, o) => {
430
- const e = k(t), s = k(n), r = [
431
- { L: 0.85, C: e.C * 0.5, H: e.H },
432
- // A-low B-low (light A tint)
433
- { L: 0.45, C: e.C, H: e.H },
434
- // A-high B-low (dark A)
435
- { L: 0.85, C: s.C * 0.5, H: s.H },
436
- // A-low B-high (light B tint)
437
- { L: 0.45, C: Math.max(e.C, s.C), H: Tt(e.H, s.H, 0.5) }
438
- // A-high B-high (mixed dark)
439
- ];
440
- return Array.from({ length: o }, (l, c) => {
441
- const i = c / Math.max(o - 1, 1) * (r.length - 1), u = Math.floor(i), g = Math.min(u + 1, r.length - 1);
442
- return q(Ht(r[u], r[g], i - u));
443
- });
444
- }, Rn = (t, n) => {
445
- const o = k(t), e = Z(o.L > 0.7 ? o.L : 0.62), s = Math.max(o.C, 0.12);
446
- return Array.from({ length: n }, (r, l) => {
447
- const c = l / n, a = (o.H + 360 * c) % 360;
448
- return q({ L: e, C: s, H: a });
449
- });
450
- }, vn = (t, n) => {
451
- const o = k(t), e = (o.H - 30 + 360) % 360, s = [0, 30, 60, 120, 180, 240, 280].map(
452
- (c) => (c + e) % 360
453
- ), r = Math.max(o.C, 0.14), l = [0.45, 0.6, 0.8, 0.72, 0.62, 0.5, 0.42];
454
- return Array.from({ length: n }, (c, a) => {
455
- const u = a / (n - 1) * (s.length - 1), g = Math.floor(u), h = Math.min(g + 1, s.length - 1), m = u - g;
456
- return q({
457
- L: K(l[g], l[h], m),
458
- C: r,
459
- H: Tt(s[g], s[h], m)
460
- });
461
- });
462
- }, kn = (t, n) => {
463
- const o = k(t), e = 0.3, s = 0.88, r = (s - e) / n;
464
- return Array.from({ length: n }, (l, c) => {
465
- const a = s - r * (c + 0.5);
466
- return q({ L: a, C: o.C * 0.85, H: o.H });
467
- });
468
- }, b0 = (t, n = 4) => {
469
- const o = t.square ?? [], e = o[0] ?? "#0000ff", s = o[1] ?? "#ff0000", r = o[2] ?? "#00ff00";
470
- return {
471
- // single-hue ramps use first input color
472
- sequential: Sn(e, n),
473
- // diverging uses first (cool) and third (warm) for max hue contrast
474
- diverging: _n(e, r, n),
475
- // qualitative spaces all four input hues evenly around the wheel
476
- qualitative: wn(e, n),
477
- // bivariate encodes two variables: first and second input colors
478
- bivariate: Pn(e, s, n),
479
- // cyclical starts at first input hue and wraps the full wheel
480
- cyclical: Rn(e, n),
481
- // spectral arcs across the rainbow; offset by first input hue
482
- spectral: vn(e, n),
483
- // stepped discrete breaks along first input hue
484
- stepped: kn(e, n)
485
- };
486
- }, zn = (t) => {
487
- const n = parseInt(t.slice(1, 3), 16) / 255, o = parseInt(t.slice(3, 5), 16) / 255, e = parseInt(t.slice(5, 7), 16) / 255, s = Math.max(n, o, e), r = Math.min(n, o, e);
488
- let l = 0, c = 0;
489
- const a = (s + r) / 2;
490
- if (s !== r) {
491
- const i = s - r;
492
- switch (c = a > 0.5 ? i / (2 - s - r) : i / (s + r), s) {
493
- case n:
494
- l = (o - e) / i + (o < e ? 6 : 0);
495
- break;
496
- case o:
497
- l = (e - n) / i + 2;
498
- break;
499
- case e:
500
- l = (n - o) / i + 4;
501
- break;
502
- }
503
- l /= 6;
504
- }
505
- return { h: l * 360, s: c * 100, l: a * 100 };
506
- }, Ot = ({ h: t, s: n, l: o }) => {
507
- const e = o / 100, r = n / 100 * Math.min(e, 1 - e), l = (c) => {
508
- const a = (c + t / 30) % 12, i = e - r * Math.max(Math.min(a - 3, 9 - a, 1), -1);
509
- return Math.round(255 * i).toString(16).padStart(2, "0");
510
- };
511
- return `#${l(0)}${l(8)}${l(4)}`;
512
- }, L = (t, n) => ({
513
- ...t,
514
- h: (t.h + n + 360) % 360
515
- }), d0 = (t, n = 9) => {
516
- const o = Object.values(t).find(
517
- (a) => Array.isArray(a) && a.length > 0
518
- );
519
- if (!o || o.length === 0)
520
- return {};
521
- const e = o[0], s = zn(e), r = {
522
- analogous: (a) => [L(a, -30), a, L(a, 30)],
523
- complementary: (a) => [a, L(a, 180)],
524
- splitComplementary: (a) => [a, L(a, 150), L(a, 210)],
525
- triadic: (a) => [a, L(a, 120), L(a, 240)],
526
- tetradic: (a) => [a, L(a, 60), L(a, 180), L(a, 240)],
527
- square: (a) => [a, L(a, 90), L(a, 180), L(a, 270)],
528
- accentedAnalogous: (a) => [
529
- L(a, -30),
530
- a,
531
- L(a, 30),
532
- L(a, 180)
533
- ],
534
- doubleSplitComplementary: (a) => [
535
- a,
536
- L(a, 30),
537
- L(a, 150),
538
- L(a, 210),
539
- L(a, 180),
540
- L(a, 240)
541
- ],
542
- ambiguous: (a) => [L(a, 15), L(a, 85), L(a, 145)]
543
- }, l = {
544
- monochromatic: (a, i) => Array.from({ length: i }, (u, g) => ({
545
- ...a,
546
- l: Math.max(5, Math.min(95, 15 + 70 / (i - 1 || 1) * g))
547
- })),
548
- monochromaticTintShade: (a, i) => Array.from({ length: i }, (u, g) => ({
549
- ...a,
550
- s: Math.max(0, a.s - g * 2),
551
- l: Math.max(5, Math.min(95, 10 + 80 / (i - 1 || 1) * g))
552
- }))
553
- }, c = {
554
- harmonyPalette: o
555
- };
556
- return Object.entries(r).forEach(([a, i]) => {
557
- c[a] = i(s).map(Ot);
558
- }), Object.entries(l).forEach(([a, i]) => {
559
- c[a] = i(s, n).map(Ot);
560
- }), c;
561
- }, Mt = (t) => t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4), bt = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - 0.055, $ = (t) => Math.max(0, Math.min(1, t)), On = ({ r: t, g: n, b: o }) => {
562
- const e = Mt(t), s = Mt(n), r = Mt(o), l = Math.cbrt(
563
- 0.4122214708 * e + 0.5363325363 * s + 0.0514459929 * r
564
- ), c = Math.cbrt(
565
- 0.2119034982 * e + 0.6806995451 * s + 0.1073969566 * r
566
- ), a = Math.cbrt(
567
- 0.0883024619 * e + 0.2817188376 * s + 0.6299787005 * r
568
- );
569
- return {
570
- L: 0.2104542553 * l + 0.793617785 * c - 0.0040720468 * a,
571
- a: 1.9779984951 * l - 2.428592205 * c + 0.4505937099 * a,
572
- b: 0.0259040371 * l + 0.7827717662 * c - 0.808675766 * a
573
- };
574
- }, Bn = ({ L: t, a: n, b: o }) => {
575
- const e = t + 0.3963377774 * n + 0.2158037573 * o, s = t - 0.1055613458 * n - 0.0638541728 * o, r = t - 0.0894841775 * n - 1.291485548 * o, l = e * e * e, c = s * s * s, a = r * r * r;
576
- return {
577
- r: $(
578
- bt(4.0767416621 * l - 3.3077115913 * c + 0.2309699292 * a)
579
- ),
580
- g: $(
581
- bt(-1.2684380046 * l + 2.6097574011 * c - 0.3413193965 * a)
582
- ),
583
- b: $(
584
- bt(-0.0041960863 * l - 0.7034186147 * c + 1.707614701 * a)
585
- )
586
- };
587
- }, tt = (t, n) => (t.L - n.L) ** 2 + (t.a - n.a) ** 2 + (t.b - n.b) ** 2, Y = (t) => Math.sqrt(t.a * t.a + t.b * t.b), qn = (t) => ({
588
- r: parseInt(t.slice(1, 3), 16) / 255,
589
- g: parseInt(t.slice(3, 5), 16) / 255,
590
- b: parseInt(t.slice(5, 7), 16) / 255
591
- }), rt = ({ r: t, g: n, b: o }) => {
592
- const e = (s) => Math.round(s * 255).toString(16).padStart(2, "0");
593
- return `#${e(t)}${e(n)}${e(o)}`;
594
- }, N = (t) => rt(Bn(t)), V = (t, n) => {
595
- if (t.length >= n) return t.slice(0, n);
596
- const o = [...t], e = t[t.length - 1] ?? { L: 0.5, a: 0, b: 0 };
597
- for (; o.length < n; ) {
598
- const s = o.length / n;
599
- o.push({ ...e, L: $(0.2 + s * 0.6) });
600
- }
601
- return o;
602
- }, ct = (t, n) => {
603
- if (t.length >= n) return t.slice(0, n);
604
- const o = [...t];
605
- for (; o.length < n; ) {
606
- const e = o.length / n;
607
- o.push({ r: e, g: e, b: e });
608
- }
609
- return o;
610
- }, Dn = (t, n = 6e3) => {
611
- const o = Math.max(1, Math.floor(t.length / 4 / n)), e = [], s = [];
612
- for (let r = 0; r < t.length; r += 4 * o) {
613
- if (t[r + 3] < 128) continue;
614
- const l = {
615
- r: t[r] / 255,
616
- g: t[r + 1] / 255,
617
- b: t[r + 2] / 255
618
- };
619
- e.push(l), s.push(On(l));
620
- }
621
- return { rgbs: e, labs: s };
622
- }, Nn = (t) => {
623
- const o = new Uint8ClampedArray(t.length * 800 * 4);
624
- let e = 0;
625
- for (const s of t) {
626
- const r = qn(s);
627
- for (let l = 0; l < 800; l++) {
628
- const c = () => (Math.random() - 0.5) * 30;
629
- o[e++] = Math.round($(r.r) * 255 + c()), o[e++] = Math.round($(r.g) * 255 + c()), o[e++] = Math.round($(r.b) * 255 + c()), o[e++] = 255;
630
- }
631
- }
632
- return o;
633
- }, ht = (t, n, o = 25) => {
634
- if (t.length === 0) return [];
635
- const e = t.filter((i) => {
636
- const u = Y(i);
637
- return Math.random() <= (u < 0.05 ? 0.2 : u < 0.15 ? 0.6 : 1);
638
- }), s = e.length >= n ? e : t, r = s.length, l = [s[Math.floor(Math.random() * r)]];
639
- for (let i = 1; i < n; i++) {
640
- const u = s.map(
641
- (f) => Math.min(...l.map((b) => tt(f, b)))
642
- ), g = u.reduce((f, b) => f + b, 0);
643
- let h = Math.random() * g, m = 0;
644
- for (let f = 0; f < r; f++)
645
- if (h -= u[f], h <= 0) {
646
- m = f;
647
- break;
648
- }
649
- l.push({ ...s[m] });
650
- }
651
- const c = new Int32Array(r);
652
- for (let i = 0; i < o; i++) {
653
- let u = !1;
654
- for (let h = 0; h < r; h++) {
655
- let m = 0, f = 1 / 0;
656
- for (let b = 0; b < n; b++) {
657
- const M = tt(s[h], l[b]);
658
- M < f && (f = M, m = b);
659
- }
660
- c[h] !== m && (c[h] = m, u = !0);
661
- }
662
- if (!u) break;
663
- const g = Array.from({ length: n }, () => ({
664
- L: 0,
665
- a: 0,
666
- b: 0,
667
- count: 0
668
- }));
669
- for (let h = 0; h < r; h++) {
670
- const m = c[h];
671
- g[m].L += s[h].L, g[m].a += s[h].a, g[m].b += s[h].b, g[m].count++;
672
- }
673
- for (let h = 0; h < n; h++)
674
- g[h].count > 0 && (l[h] = {
675
- L: g[h].L / g[h].count,
676
- a: g[h].a / g[h].count,
677
- b: g[h].b / g[h].count
678
- });
679
- }
680
- const a = new Array(n).fill(0);
681
- for (let i = 0; i < r; i++) a[c[i]]++;
682
- return V(
683
- l.map((i, u) => ({ lab: i, score: a[u] * (1 + 3 * Y(i)) })).sort((i, u) => u.score - i.score).map((i) => i.lab),
684
- n
685
- );
686
- }, En = (t, n) => {
687
- if (t.length === 0) return ct([], n);
688
- const o = [{ pixels: [...t] }], e = (s) => {
689
- let r = 1, l = 0, c = 1, a = 0, i = 1, u = 0;
690
- for (const m of s.pixels)
691
- r = Math.min(r, m.r), l = Math.max(l, m.r), c = Math.min(c, m.g), a = Math.max(a, m.g), i = Math.min(i, m.b), u = Math.max(u, m.b);
692
- const g = l - r >= a - c && l - r >= u - i ? "r" : a - c >= u - i ? "g" : "b";
693
- s.pixels.sort((m, f) => m[g] - f[g]);
694
- const h = Math.floor(s.pixels.length / 2);
695
- return [
696
- { pixels: s.pixels.slice(0, h) },
697
- { pixels: s.pixels.slice(h) }
698
- ];
699
- };
700
- for (; o.length < n && (o.sort((l, c) => c.pixels.length - l.pixels.length), !(o[0].pixels.length < 2)); ) {
701
- const [s, r] = e(o.shift());
702
- o.push(s, r);
703
- }
704
- return ct(
705
- o.map((s) => {
706
- const r = s.pixels.length;
707
- return {
708
- r: s.pixels.reduce((l, c) => l + c.r, 0) / r,
709
- g: s.pixels.reduce((l, c) => l + c.g, 0) / r,
710
- b: s.pixels.reduce((l, c) => l + c.b, 0) / r
711
- };
712
- }),
713
- n
714
- );
715
- }, Wn = (t, n) => {
716
- const o = /* @__PURE__ */ new Map();
717
- for (const e of t) {
718
- const s = Math.round(e.r * 7) / 7, r = Math.round(e.g * 7) / 7, l = Math.round(e.b * 7) / 7, c = `${s},${r},${l}`, a = o.get(c);
719
- a ? a.count++ : o.set(c, { rgb: { r: s, g: r, b: l }, count: 1 });
720
- }
721
- return ct(
722
- Array.from(o.values()).sort((e, s) => s.count - e.count).slice(0, n).map((e) => e.rgb),
723
- n
724
- );
725
- }, jn = (t, n) => {
726
- const o = t.filter(
727
- (e) => Y(e) > 0.1 && e.L > 0.25 && e.L < 0.85
728
- );
729
- return ht(o.length >= n ? o : t, n);
730
- }, Yn = (t, n) => {
731
- const o = t.filter((e) => {
732
- const s = Y(e);
733
- return s >= 0.02 && s <= 0.09 && e.L > 0.2 && e.L < 0.9;
734
- });
735
- return ht(o.length >= n ? o : t, n);
736
- }, Fn = (t, n) => {
737
- const o = () => ({
738
- r: 0,
739
- g: 0,
740
- b: 0,
741
- count: 0,
742
- children: new Array(8).fill(null),
743
- isLeaf: !1
744
- }), e = o(), s = (c, a, i, u, g) => {
745
- if (g === 8) {
746
- c.isLeaf = !0, c.r += a, c.g += i, c.b += u, c.count++;
747
- return;
748
- }
749
- const h = 7 - g, m = (a >> h & 1) << 2 | (i >> h & 1) << 1 | u >> h & 1;
750
- c.children[m] || (c.children[m] = o()), s(c.children[m], a, i, u, g + 1);
751
- }, r = (c) => c.isLeaf && c.count > 0 ? [c] : c.children.filter(Boolean).flatMap((a) => r(a));
752
- for (const c of t)
753
- s(
754
- e,
755
- Math.round(c.r * 255),
756
- Math.round(c.g * 255),
757
- Math.round(c.b * 255),
758
- 0
759
- );
760
- let l = r(e);
761
- for (; l.length > n; )
762
- l.sort((c, a) => c.count - a.count), l[0].count = 0, l = r(e);
763
- return ct(
764
- l.filter((c) => c.count > 0).sort((c, a) => a.count - c.count).slice(0, n).map((c) => ({
765
- r: $(c.r / c.count / 255),
766
- g: $(c.g / c.count / 255),
767
- b: $(c.b / c.count / 255)
768
- })),
769
- n
770
- );
771
- }, Gn = (t, n) => {
772
- if (t.length === 0) return V([], n);
773
- const o = t.length, e = t.reduce((h, m) => h + m.L, 0) / o, s = t.reduce((h, m) => h + m.a, 0) / o, r = t.reduce((h, m) => h + m.b, 0) / o, l = Math.sqrt(t.reduce((h, m) => h + (m.L - e) ** 2, 0) / o), c = Math.sqrt(t.reduce((h, m) => h + (m.a - s) ** 2, 0) / o), a = Math.sqrt(t.reduce((h, m) => h + (m.b - r) ** 2, 0) / o), i = Math.cbrt(t.reduce((h, m) => h + (m.L - e) ** 3, 0) / o), u = Math.cbrt(t.reduce((h, m) => h + (m.a - s) ** 3, 0) / o), g = Math.cbrt(t.reduce((h, m) => h + (m.b - r) ** 3, 0) / o);
774
- return Array.from({ length: n }, (h, m) => {
775
- const f = n === 1 ? 0 : m / (n - 1) * 2 - 1;
776
- return {
777
- L: $(e + f * l + (f * f - 1 / 3) * i * 0.3),
778
- a: $(s + f * c + (f * f - 1 / 3) * u * 0.3),
779
- b: $(r + f * a + (f * f - 1 / 3) * g * 0.3)
780
- };
781
- });
782
- }, Xn = (t, n) => {
783
- if (t.length < n) return V(ht(t, t.length), n);
784
- const o = Array.from({ length: n }, (c, a) => ({
785
- ...t[Math.floor(a / n * t.length)]
786
- })), e = 0.4, s = Math.min(t.length, 4e3), r = Math.max(1, Math.floor(t.length / s));
787
- for (let c = 0; c < s; c++) {
788
- const a = t[c * r % t.length], i = e * (1 - c / s);
789
- let u = 0, g = 1 / 0;
790
- for (let m = 0; m < n; m++) {
791
- const f = tt(a, o[m]);
792
- f < g && (g = f, u = m);
793
- }
794
- const h = Math.max(1, Math.round(n / 4 * (1 - c / s)));
795
- for (let m = 0; m < n; m++) {
796
- const f = Math.abs(m - u);
797
- if (f > h) continue;
798
- const b = i * Math.exp(-(f * f) / (2 * h * h));
799
- o[m].L += b * (a.L - o[m].L), o[m].a += b * (a.a - o[m].a), o[m].b += b * (a.b - o[m].b);
800
- }
801
- }
802
- const l = [];
803
- for (const c of o)
804
- l.some((a) => tt(a, c) < 5e-4) || l.push(c);
805
- return V(l, n);
806
- }, Qn = (t, n) => {
807
- const e = Array.from(
808
- { length: 72 },
809
- () => ({ sumL: 0, sumC: 0, count: 0 })
810
- );
811
- for (const u of t) {
812
- const g = (Math.atan2(u.b, u.a) * 180 / Math.PI + 360) % 360, h = Math.floor(g / (360 / 72)) % 72;
813
- e[h].sumL += u.L, e[h].sumC += Y(u), e[h].count++;
814
- }
815
- const s = e.map((u, g) => ({
816
- count: (e[(g - 1 + 72) % 72].count + e[g].count + e[(g + 1) % 72].count) / 3,
817
- idx: g
818
- })), r = [];
819
- for (let u = 0; u < 72; u++)
820
- s[u].count > s[(u - 1 + 72) % 72].count && s[u].count >= s[(u + 1) % 72].count && e[u].count > 0 && r.push(u);
821
- r.sort((u, g) => s[g].count - s[u].count);
822
- const l = r.slice(0, n), c = [...s].sort((u, g) => g.count - u.count);
823
- let a = 0;
824
- for (; l.length < n && a < 72; )
825
- !l.includes(c[a].idx) && e[c[a].idx].count > 0 && l.push(c[a].idx), a++;
826
- let i = 0;
827
- for (; l.length < n; )
828
- l.push(i), i += Math.floor(72 / n);
829
- return l.slice(0, n).map((u) => {
830
- const g = u / 72 * 360 + 2.5, h = e[u].count > 0 ? e[u].sumL / e[u].count : 0.5, m = e[u].count > 0 ? e[u].sumC / e[u].count : 0.12, f = g * Math.PI / 180;
831
- return { L: h, a: m * Math.cos(f), b: m * Math.sin(f) };
832
- });
833
- }, Un = (t, n) => {
834
- if (t.length === 0) return V([], n);
835
- const e = Math.max(1, Math.floor(t.length / 2e3)), s = t.filter((c, a) => a % e === 0), l = [s.reduce(
836
- (c, a) => Y(a) > Y(c) ? a : c
837
- )];
838
- for (; l.length < n; ) {
839
- let c = s[0], a = -1 / 0;
840
- for (const i of s) {
841
- const u = l.reduce(
842
- (g, h) => Math.min(g, tt(i, h)),
843
- 1 / 0
844
- );
845
- u > a && (a = u, c = i);
846
- }
847
- if (a === 0) break;
848
- l.push(c);
849
- }
850
- return V(l, n);
851
- }, p0 = (t, n = 6, o) => {
852
- const e = o ?? Nn(t.square ?? ["#888888"]), { rgbs: s, labs: r } = Dn(e);
853
- if (r.length === 0) {
854
- const l = Array(n).fill("#000000");
855
- return {
856
- kmeans: l,
857
- medianCut: l,
858
- dominant: l,
859
- vibrant: l,
860
- muted: l,
861
- octree: l,
862
- colorMoments: l,
863
- neuralQuant: l,
864
- histogram: l,
865
- deltaE: l
866
- };
867
- }
868
- return {
869
- kmeans: ht(r, n).map(N),
870
- medianCut: En(s, n).map(rt),
871
- dominant: Wn(s, n).map(rt),
872
- vibrant: jn(r, n).map(N),
873
- muted: Yn(r, n).map(N),
874
- octree: Fn(s, n).map(rt),
875
- colorMoments: Gn(r, n).map(N),
876
- neuralQuant: Xn(r, n).map(N),
877
- histogram: Qn(r, n).map(N),
878
- deltaE: Un(r, n).map(N)
879
- };
880
- }, dt = (t) => {
881
- const n = parseInt(t.slice(1, 3), 16) / 255, o = parseInt(t.slice(3, 5), 16) / 255, e = parseInt(t.slice(5, 7), 16) / 255;
882
- return { r: n, g: o, b: e };
883
- }, Vn = ({ r: t, g: n, b: o }) => {
884
- const e = (s) => Math.max(0, Math.min(255, Math.round(s * 255))).toString(16).padStart(2, "0");
885
- return `#${e(t)}${e(n)}${e(o)}`;
886
- }, I = (t) => t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4), v = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - 0.055, C = (t, n, o) => t + (n - t) * o, pt = (t, n, o) => {
887
- const e = n - t, s = e > 180 ? e - 360 : e < -180 ? e + 360 : e;
888
- return (t + s * o + 360) % 360;
889
- }, nt = (t) => {
890
- const n = I(t.r), o = I(t.g), e = I(t.b), s = 0.4122 * n + 0.5363 * o + 0.0514 * e, r = 0.2119 * n + 0.6807 * o + 0.1074 * e, l = 0.0883 * n + 0.2817 * o + 0.63 * e, c = Math.cbrt(s), a = Math.cbrt(r), i = Math.cbrt(l);
891
- return {
892
- L: 0.2104 * c + 0.7936 * a - 4e-3 * i,
893
- a: 1.9779 * c - 2.4285 * a + 0.4505 * i,
894
- b: 0.0259 * c + 0.7827 * a - 0.8086 * i
895
- };
896
- }, Bt = (t) => {
897
- const n = t.L + 0.3963 * t.a + 0.2158 * t.b, o = t.L - 0.1055 * t.a - 0.0638 * t.b, e = t.L - 0.0894 * t.a - 1.2914 * t.b, s = n * n * n, r = o * o * o, l = e * e * e, c = 4.0767 * s - 3.3077 * r + 0.2309 * l, a = -1.2684 * s + 2.6097 * r - 0.3413 * l, i = -41e-4 * s - 0.7034 * r + 1.7076 * l;
898
- return { r: v(c), g: v(a), b: v(i) };
899
- }, ot = (t) => {
900
- const n = I(t.r), o = I(t.g), e = I(t.b), s = (0.4124 * n + 0.3575 * o + 0.1804 * e) / 0.9504, r = 0.2126 * n + 0.7151 * o + 0.0721 * e, l = (0.0193 * n + 0.1191 * o + 0.9503 * e) / 1.0888, c = (a) => a > 8856e-6 ? Math.pow(a, 1 / 3) : 7.787 * a + 16 / 116;
901
- return { L: 116 * c(r) - 16, a: 500 * (c(s) - c(r)), b: 200 * (c(r) - c(l)) };
902
- }, qt = (t) => {
903
- const n = (t.L + 16) / 116, o = t.a / 500 + n, e = n - t.b / 200, s = (g) => g > 0.20689 ? g * g * g : (g - 16 / 116) / 7.787, r = s(o) * 0.9504, l = s(n), c = s(e) * 1.0888, a = 3.2404 * r - 1.5371 * l - 0.4985 * c, i = -0.9692 * r + 1.8759 * l + 0.0415 * c, u = 0.0556 * r - 0.204 * l + 1.0572 * c;
904
- return { r: v(a), g: v(i), b: v(u) };
905
- }, Dt = (t) => {
906
- const n = Math.max(t.r, t.g, t.b), o = Math.min(t.r, t.g, t.b), e = n - o;
907
- let s = 0;
908
- return e !== 0 && (n === t.r ? s = (t.g - t.b) / e + (t.g < t.b ? 6 : 0) : n === t.g ? s = (t.b - t.r) / e + 2 : s = (t.r - t.g) / e + 4), { h: s * 60, s: n === 0 ? 0 : e / n, v: n };
909
- }, Jn = ({
910
- h: t,
911
- s: n,
912
- v: o
913
- }) => {
914
- const e = Math.floor(t / 60) % 6, s = t / 60 - e, r = o * (1 - n), l = o * (1 - s * n), c = o * (1 - (1 - s) * n);
915
- switch (e) {
916
- case 0:
917
- return { r: o, g: c, b: r };
918
- case 1:
919
- return { r: l, g: o, b: r };
920
- case 2:
921
- return { r, g: o, b: c };
922
- case 3:
923
- return { r, g: l, b: o };
924
- case 4:
925
- return { r: c, g: r, b: o };
926
- default:
927
- return { r: o, g: r, b: l };
928
- }
929
- }, L0 = (t, n = 9) => {
930
- const o = Object.values(t).find(
931
- (l) => Array.isArray(l)
932
- );
933
- if (!o || o.length < 1) return {};
934
- const e = o.length === 1 ? [dt(o[0]), dt("#ffffff")] : o.map(dt), s = {};
935
- return [
936
- "lab",
937
- "lch",
938
- "oklab",
939
- "oklch",
940
- "hct",
941
- "cam16",
942
- "hsl",
943
- "hsv",
944
- "jzazbz",
945
- "ipt"
946
- ].forEach((l) => {
947
- const c = [];
948
- for (let a = 0; a < n; a++) {
949
- const u = a / (n - 1) * (e.length - 1), g = Math.min(Math.floor(u), e.length - 2), h = u - g, m = e[g], f = e[g + 1];
950
- let b;
951
- switch (l) {
952
- case "oklab": {
953
- const M = nt(m), p = nt(f);
954
- b = Bt({
955
- L: C(M.L, p.L, h),
956
- a: C(M.a, p.a, h),
957
- b: C(M.b, p.b, h)
958
- });
959
- break;
960
- }
961
- case "oklch": {
962
- const M = nt(m), p = nt(f), F = Math.atan2(M.b, M.a) * 180 / Math.PI, P = Math.atan2(p.b, p.a) * 180 / Math.PI, d = Math.sqrt(M.a ** 2 + M.b ** 2), x = Math.sqrt(p.a ** 2 + p.b ** 2), S = pt(F, P, h) * Math.PI / 180, w = C(d, x, h);
963
- b = Bt({
964
- L: C(M.L, p.L, h),
965
- a: w * Math.cos(S),
966
- b: w * Math.sin(S)
967
- });
968
- break;
969
- }
970
- case "lab": {
971
- const M = ot(m), p = ot(f);
972
- b = qt({
973
- L: C(M.L, p.L, h),
974
- a: C(M.a, p.a, h),
975
- b: C(M.b, p.b, h)
976
- });
977
- break;
978
- }
979
- case "lch": {
980
- const M = ot(m), p = ot(f), F = Math.atan2(M.b, M.a) * 180 / Math.PI, P = Math.atan2(p.b, p.a) * 180 / Math.PI, d = Math.sqrt(M.a ** 2 + M.b ** 2), x = Math.sqrt(p.a ** 2 + p.b ** 2), S = pt(F, P, h) * Math.PI / 180, w = C(d, x, h);
981
- b = qt({
982
- L: C(M.L, p.L, h),
983
- a: w * Math.cos(S),
984
- b: w * Math.sin(S)
985
- });
986
- break;
987
- }
988
- case "hsl":
989
- case "hsv": {
990
- const M = Dt(m), p = Dt(f);
991
- b = Jn({
992
- h: pt(M.h, p.h, h),
993
- s: C(M.s, p.s, h),
994
- v: C(M.v, p.v, h)
995
- });
996
- break;
997
- }
998
- case "ipt":
999
- case "jzazbz":
1000
- case "cam16":
1001
- case "hct": {
1002
- b = {
1003
- r: v(C(I(m.r), I(f.r), h)),
1004
- g: v(C(I(m.g), I(f.g), h)),
1005
- b: v(C(I(m.b), I(f.b), h))
1006
- };
1007
- const M = Math.sin(Math.PI * h) * (l === "jzazbz" ? 0.05 : 0.02);
1008
- b.r = Math.min(1, b.r + M);
1009
- break;
1010
- }
1011
- default:
1012
- b = {
1013
- r: C(m.r, f.r, h),
1014
- g: C(m.g, f.g, h),
1015
- b: C(m.b, f.b, h)
1016
- };
1017
- }
1018
- c.push(Vn(b));
1019
- }
1020
- s[l] = c;
1021
- }), s;
1022
- }, Q = (t) => t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4), Lt = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - 0.055, j = (t) => Math.max(0, Math.min(1, t)), Jt = (t, n, o) => t + (n - t) * o, It = (t) => ({
1023
- r: parseInt(t.slice(1, 3), 16) / 255,
1024
- g: parseInt(t.slice(3, 5), 16) / 255,
1025
- b: parseInt(t.slice(5, 7), 16) / 255
1026
- }), Nt = ({ r: t, g: n, b: o }) => {
1027
- const e = (s) => Math.round(j(s) * 255).toString(16).padStart(2, "0");
1028
- return `#${e(t)}${e(n)}${e(o)}`;
1029
- }, Zn = ({ r: t, g: n, b: o }) => {
1030
- const e = Q(t), s = Q(n), r = Q(o), l = Math.cbrt(
1031
- 0.4122214708 * e + 0.5363325363 * s + 0.0514459929 * r
1032
- ), c = Math.cbrt(
1033
- 0.2119034982 * e + 0.6806995451 * s + 0.1073969566 * r
1034
- ), a = Math.cbrt(
1035
- 0.0883024619 * e + 0.2817188376 * s + 0.6299787005 * r
1036
- );
1037
- return {
1038
- L: 0.2104542553 * l + 0.793617785 * c - 0.0040720468 * a,
1039
- a: 1.9779984951 * l - 2.428592205 * c + 0.4505937099 * a,
1040
- b: 0.0259040371 * l + 0.7827717662 * c - 0.808675766 * a
1041
- };
1042
- }, yt = ({ L: t, a: n, b: o }) => {
1043
- const e = t + 0.3963377774 * n + 0.2158037573 * o, s = t - 0.1055613458 * n - 0.0638541728 * o, r = t - 0.0894841775 * n - 1.291485548 * o, l = e * e * e, c = s * s * s, a = r * r * r;
1044
- return {
1045
- r: Lt(4.0767416621 * l - 3.3077115913 * c + 0.2309699292 * a),
1046
- g: Lt(-1.2684380046 * l + 2.6097574011 * c - 0.3413193965 * a),
1047
- b: Lt(-0.0041960863 * l - 0.7034186147 * c + 1.707614701 * a)
1048
- };
1049
- }, Et = (t) => {
1050
- const { r: n, g: o, b: e } = yt(t);
1051
- return { r: j(n), g: j(o), b: j(e) };
1052
- }, Kn = ({ L: t, a: n, b: o }) => ({
1053
- L: t,
1054
- C: Math.sqrt(n * n + o * o),
1055
- H: (Math.atan2(o, n) * 180 / Math.PI + 360) % 360
1056
- }), et = ({ L: t, C: n, H: o }) => ({
1057
- L: t,
1058
- a: n * Math.cos(o * Math.PI / 180),
1059
- b: n * Math.sin(o * Math.PI / 180)
1060
- }), t0 = (t) => Kn(Zn(It(t))), J = (t) => {
1061
- const n = (r) => r.r >= -1e-3 && r.r <= 1.001 && r.g >= -1e-3 && r.g <= 1.001 && r.b >= -1e-3 && r.b <= 1.001, o = yt(et(t));
1062
- if (n(o)) return Nt(Et(et(t)));
1063
- let e = 0, s = t.C;
1064
- for (let r = 0; r < 24; r++) {
1065
- const l = (e + s) / 2;
1066
- n(yt(et({ ...t, C: l }))) ? e = l : s = l;
1067
- }
1068
- return Nt(Et(et({ ...t, C: e })));
1069
- }, n0 = {
1070
- harmonypalette: [0, 150, 210],
1071
- analogous: [-30, 0, 30],
1072
- complementary: [0, 180],
1073
- splitcomplementary: [0, 150, 210],
1074
- triadic: [0, 120, 240],
1075
- tetradic: [0, 60, 180, 240],
1076
- square: [0, 90, 180, 270],
1077
- accentedanalogous: [-30, 0, 30, 180],
1078
- doublesplitcomplementary: [0, 30, 150, 180, 210, 330],
1079
- ambiguous: [15, 135, 255]
1080
- }, o0 = [
1081
- // neutralLight → very light near-white, hue ghost only
1082
- {
1083
- match: (t) => t.includes("neutrallight") || t.includes("neutral") && t.includes("light"),
1084
- apply: (t) => ({ ...t, L: 0.93, C: Math.min(t.C * 0.08, 0.015) })
1085
- },
1086
- // neutralDark → very dark near-black, hue ghost only
1087
- {
1088
- match: (t) => t.includes("neutraldark") || t.includes("neutral") && t.includes("dark"),
1089
- apply: (t) => ({ ...t, L: 0.1, C: Math.min(t.C * 0.08, 0.015) })
1090
- },
1091
- // neutral (generic) → mid-grey, very low chroma
1092
- {
1093
- match: (t) => t.includes("neutral"),
1094
- apply: (t) => ({ ...t, L: 0.55, C: Math.min(t.C * 0.06, 0.012) })
1095
- },
1096
- // *shade → fixed dark L 0.30, chroma preserved (gamut-safe)
1097
- {
1098
- match: (t) => t.endsWith("shade") || t.includes("colorshade"),
1099
- apply: (t) => ({ ...t, L: 0.3, C: t.C })
1100
- },
1101
- // *dark → deeper dark L 0.22, chroma preserved (gamut-safe)
1102
- {
1103
- match: (t) => t.endsWith("dark"),
1104
- apply: (t) => ({ ...t, L: 0.22, C: t.C })
1105
- },
1106
- // *light / *tint → fixed light L 0.88, chroma halved
1107
- {
1108
- match: (t) => t.endsWith("light") || t.endsWith("tint"),
1109
- apply: (t) => ({ ...t, L: 0.88, C: t.C * 0.5 })
1110
- },
1111
- // accent* → vivid mid-tone L 0.62, chroma floored at 0.22
1112
- {
1113
- match: (t) => t.startsWith("accent"),
1114
- apply: (t) => ({ ...t, L: 0.62, C: Math.max(t.C, 0.22) })
1115
- },
1116
- // main* / primary* / brand* → saturated mid-tone L 0.52, chroma floored at 0.22
1117
- {
1118
- match: (t) => t.startsWith("main") || t.startsWith("primary") || t.startsWith("brand"),
1119
- apply: (t) => ({ ...t, L: 0.52, C: Math.max(t.C, 0.22) })
1120
- },
1121
- // background* / bg* → near-white, essentially no chroma
1122
- {
1123
- match: (t) => t.startsWith("background") || t.startsWith("bg"),
1124
- apply: (t) => ({ ...t, L: 0.97, C: Math.min(t.C * 0.08, 0.012) })
1125
- },
1126
- // surface* → off-white with subtle hue tint
1127
- {
1128
- match: (t) => t.startsWith("surface"),
1129
- apply: (t) => ({ ...t, L: 0.91, C: Math.min(t.C * 0.18, 0.025) })
1130
- },
1131
- // foreground* / text* / on* → near-black, very low chroma
1132
- {
1133
- match: (t) => t.startsWith("foreground") || t.startsWith("text") || t.startsWith("on"),
1134
- apply: (t) => ({ ...t, L: 0.18, C: Math.min(t.C * 0.12, 0.02) })
1135
- }
1136
- ], e0 = (t, n, o) => {
1137
- const e = t.toLowerCase().replace(/[^a-z]/g, "");
1138
- if (o > 1) {
1139
- if (e.includes("tintshade")) return Wt(n, o);
1140
- if (e.includes("monochromatic")) return a0(n, o);
1141
- if (e.includes("tint") || e.includes("shade"))
1142
- return Wt(n, o);
1143
- const s = n0[e];
1144
- return s ? s0(n, s, o) : r0(n, o);
1145
- }
1146
- for (const { match: s, apply: r } of o0)
1147
- if (s(e)) return [J(r(n))];
1148
- return [J({ ...n, L: 0.55, C: Math.max(n.C, 0.18) })];
1149
- }, s0 = (t, n, o) => Array.from({ length: o }, (e, s) => {
1150
- const r = n[s % n.length], l = Math.floor(s / n.length) * 0.08;
1151
- return J({
1152
- ...t,
1153
- L: j(t.L - l),
1154
- H: (t.H + r + 360) % 360
1155
- });
1156
- }), r0 = (t, n) => Array.from(
1157
- { length: n },
1158
- (o, e) => J({ ...t, H: (t.H + 360 / n * e) % 360 })
1159
- ), a0 = (t, n) => Array.from({ length: n }, (o, e) => {
1160
- const s = e / Math.max(n - 1, 1), r = Jt(0.12, 0.94, s), l = t.C * j(1 - Math.pow(Math.abs(s - 0.45), 2.5));
1161
- return J({ L: r, C: l, H: t.H });
1162
- }), Wt = (t, n) => Array.from({ length: n }, (o, e) => {
1163
- const s = e / Math.max(n - 1, 1), r = s < 0.5 ? 0.5 * Math.pow(s * 2, 1.6) : 1 - 0.5 * Math.pow((1 - s) * 2, 1.4), l = Jt(0.1, 0.96, r), c = t.C * j(1 - Math.pow((s - 0.4) / 0.7, 2) * 0.6);
1164
- return J({ L: l, C: c, H: t.H });
1165
- }), c0 = /^#[0-9a-fA-F]{6}$/, l0 = (t) => {
1166
- for (const n of t)
1167
- if (c0.test(n)) return n;
1168
- return "#ff0000";
1169
- }, x0 = (t) => Object.fromEntries(
1170
- Object.entries(t).map(([n, o]) => {
1171
- const e = l0(o), s = t0(e);
1172
- return [n, e0(n, s, o.length)];
1173
- })
1174
- ), h0 = (t) => {
1175
- const { r: n, g: o, b: e } = It(t);
1176
- return {
1177
- r: Math.round(n * 255),
1178
- g: Math.round(o * 255),
1179
- b: Math.round(e * 255)
1180
- };
1181
- }, C0 = (t, n = 1) => {
1182
- const { r: o, g: e, b: s } = h0(t);
1183
- return `rgba(${o}, ${e}, ${s}, ${n})`;
1184
- }, At = (t) => {
1185
- const { r: n, g: o, b: e } = It(t);
1186
- return 0.2126 * Q(n) + 0.7152 * Q(o) + 0.0722 * Q(e);
1187
- }, H0 = (t, n) => {
1188
- const o = At(t), e = At(n);
1189
- return (Math.max(o, e) + 0.05) / (Math.min(o, e) + 0.05);
1190
- }, y0 = (t) => At(t) > 0.179 ? "#000000" : "#ffffff", U = (t) => t <= 0.04045 ? t / 12.92 : ((t + 0.055) / 1.055) ** 2.4, xt = (t) => t <= 31308e-7 ? 12.92 * t : 1.055 * t ** (1 / 2.4) - 0.055, at = (t) => t < 0 ? 0 : t > 1 ? 1 : t, i0 = (t, n, o) => {
1191
- const e = U(t), s = U(n), r = U(o), l = Math.cbrt(
1192
- 0.4122214708 * e + 0.5363325363 * s + 0.0514459929 * r
1193
- ), c = Math.cbrt(
1194
- 0.2119034982 * e + 0.6806995451 * s + 0.1073969566 * r
1195
- ), a = Math.cbrt(
1196
- 0.0883024619 * e + 0.2817188376 * s + 0.6299787005 * r
1197
- );
1198
- return {
1199
- L: 0.2104542553 * l + 0.793617785 * c - 0.0040720468 * a,
1200
- a: 1.9779984951 * l - 2.428592205 * c + 0.4505937099 * a,
1201
- b: 0.0259040371 * l + 0.7827717662 * c - 0.808675766 * a
1202
- };
1203
- }, u0 = (t, n, o) => {
1204
- const e = t + 0.3963377774 * n + 0.2158037573 * o, s = t - 0.1055613458 * n - 0.0638541728 * o, r = t - 0.0894841775 * n - 1.291485548 * o, l = e * e * e, c = s * s * s, a = r * r * r;
1205
- return {
1206
- r: at(
1207
- xt(4.0767416621 * l - 3.3077115913 * c + 0.2309699292 * a)
1208
- ),
1209
- g: at(
1210
- xt(-1.2684380046 * l + 2.6097574011 * c - 0.3413193965 * a)
1211
- ),
1212
- b: at(
1213
- xt(-0.0041960863 * l - 0.7034186147 * c + 1.707614701 * a)
1214
- )
1215
- };
1216
- }, Zt = (t) => {
1217
- if (typeof t != "string")
1218
- throw new TypeError(
1219
- `Color must be a string, got ${typeof t}: ${JSON.stringify(t)}`
1220
- );
1221
- const n = t.trim().replace(/^#/, "").toLowerCase();
1222
- if (/^[0-9a-f]{3}$/.test(n))
1223
- return "#" + n[0] + n[0] + n[1] + n[1] + n[2] + n[2];
1224
- if (/^[0-9a-f]{6}$/.test(n))
1225
- return "#" + n;
1226
- throw new RangeError(
1227
- `Invalid hex color: "${t}" — expected "#rgb" or "#rrggbb"`
1228
- );
1229
- }, Kt = (t) => ({
1230
- r: parseInt(t.slice(1, 3), 16) / 255,
1231
- g: parseInt(t.slice(3, 5), 16) / 255,
1232
- b: parseInt(t.slice(5, 7), 16) / 255
1233
- }), m0 = (t, n, o) => {
1234
- const e = (s) => Math.round(at(s) * 255).toString(16).padStart(2, "0");
1235
- return `#${e(t)}${e(n)}${e(o)}`;
1236
- }, jt = (t) => {
1237
- const { r: n, g: o, b: e } = Kt(t), s = i0(n, o, e);
1238
- return {
1239
- L: s.L,
1240
- C: Math.sqrt(s.a * s.a + s.b * s.b),
1241
- H: (Math.atan2(s.b, s.a) * 180 / Math.PI + 360) % 360
1242
- };
1243
- }, Ct = (t, n, o) => {
1244
- const e = o * Math.PI / 180, { r: s, g: r, b: l } = u0(t, n * Math.cos(e), n * Math.sin(e));
1245
- return m0(s, r, l);
1246
- }, Yt = (t, n) => {
1247
- const o = Math.abs(t - n) % 360;
1248
- return o > 180 ? 360 - o : o;
1249
- }, $t = (t, n) => {
1250
- const o = (r) => {
1251
- const { r: l, g: c, b: a } = Kt(Zt(r));
1252
- return 0.2126 * U(l) + 0.7152 * U(c) + 0.0722 * U(a);
1253
- }, e = o(t), s = o(n);
1254
- return (Math.max(e, s) + 0.05) / (Math.min(e, s) + 0.05);
1255
- }, g0 = (t) => $t(t, "#ffffff") >= $t(t, "#111111") ? "#ffffff" : "#111111";
1256
- function A0(t, n = {}) {
1257
- if (!Array.isArray(t) || t.length === 0)
1258
- throw new TypeError(
1259
- "palette must be a non-empty array of hex color strings"
1260
- );
1261
- const o = {
1262
- neutralChromaMax: n.neutralChromaMax ?? 0.06,
1263
- mainLightnessMin: n.mainLightnessMin ?? 0.4,
1264
- mainLightnessMax: n.mainLightnessMax ?? 0.72,
1265
- shadeHueTolerance: n.shadeHueTolerance ?? 30,
1266
- accentHueMin: n.accentHueMin ?? 100,
1267
- derivedDarkL: n.derivedDarkL ?? 0.2,
1268
- derivedDarkC: n.derivedDarkC ?? 0.035
1269
- }, e = t.map((d) => {
1270
- const x = Zt(d);
1271
- return { hex: x, lch: jt(x) };
1272
- }), s = e.filter((d) => d.lch.C < o.neutralChromaMax), r = (s.length > 0 ? s : e).slice().sort((d, x) => x.lch.L - d.lch.L)[0], l = e.filter(
1273
- (d) => d.lch.L >= o.mainLightnessMin && d.lch.L <= o.mainLightnessMax
1274
- ), c = (l.length > 0 ? l : e).slice().sort((d, x) => x.lch.C - d.lch.C)[0], a = s.filter(
1275
- (d) => d.lch.L < 0.35 && d.hex !== r.hex
1276
- );
1277
- let i, u;
1278
- a.length > 0 ? (i = a.slice().sort((d, x) => d.lch.L - x.lch.L)[0].hex, u = !1) : (i = Ct(
1279
- o.derivedDarkL,
1280
- o.derivedDarkC,
1281
- c.lch.H
1282
- ), u = !0);
1283
- const g = /* @__PURE__ */ new Set([r.hex, c.hex]), h = e.filter((d) => !g.has(d.hex));
1284
- let m, f = !1;
1285
- if (h.length > 0) {
1286
- const d = h.filter(
1287
- (x) => Yt(x.lch.H, c.lch.H) < o.shadeHueTolerance && x.lch.C > 0.1
1288
- );
1289
- m = (d.length > 0 ? d : h).slice().sort((x, S) => S.lch.C - x.lch.C)[0].hex;
1290
- } else
1291
- m = Ct(
1292
- Math.max(0.05, c.lch.L - 0.08),
1293
- c.lch.C * 0.92,
1294
- c.lch.H
1295
- ), f = !0;
1296
- const b = /* @__PURE__ */ new Set([r.hex, c.hex, m]), M = e.filter((d) => !b.has(d.hex));
1297
- let p, F = !1;
1298
- if (M.length > 0) {
1299
- const d = M.filter(
1300
- (x) => Yt(x.lch.H, c.lch.H) >= o.accentHueMin
1301
- );
1302
- p = (d.length > 0 ? d : M).slice().sort((x, S) => S.lch.C - x.lch.C)[0].hex;
1303
- } else
1304
- p = Ct(
1305
- 0.72,
1306
- Math.min(c.lch.C, 0.18),
1307
- (c.lch.H + 150) % 360
1308
- ), F = !0;
1309
- const P = (d, x, S, w, tn = !1) => ({
1310
- hex: w,
1311
- role: d,
1312
- label: x,
1313
- weight: S,
1314
- derived: tn,
1315
- lch: jt(w),
1316
- textColor: g0(w),
1317
- contrast: parseFloat($t(w, r.hex).toFixed(2))
1318
- });
1319
- return {
1320
- neutralLight: P("neutralLight", "Neutral Light", "60%", r.hex),
1321
- neutralDark: P(
1322
- "neutralDark",
1323
- "Neutral Dark",
1324
- "—",
1325
- i,
1326
- u
1327
- ),
1328
- mainColor: P("mainColor", "Main Color", "30%", c.hex),
1329
- mainColorShade: P(
1330
- "mainColorShade",
1331
- "Main Color Shade",
1332
- "—",
1333
- m,
1334
- f
1335
- ),
1336
- accentColor: P(
1337
- "accentColor",
1338
- "Accent Color",
1339
- "10%",
1340
- p,
1341
- F
1342
- )
1343
- };
1
+ // src/generators/AlgorithmicGenerator.ts
2
+ var e = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, t = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, n = (e) => Math.max(0, Math.min(1, e)), r = (e, t, n) => e + (t - e) * n, i = Math.PI * 2, a = ({ r: t, g: n, b: r }) => {
3
+ let i = e(t), a = e(n), o = e(r), s = Math.cbrt(.4122214708 * i + .5363325363 * a + .0514459929 * o), c = Math.cbrt(.2119034982 * i + .6806995451 * a + .1073969566 * o), l = Math.cbrt(.0883024619 * i + .2817188376 * a + .6299787005 * o);
4
+ return {
5
+ L: .2104542553 * s + .793617785 * c - .0040720468 * l,
6
+ a: 1.9779984951 * s - 2.428592205 * c + .4505937099 * l,
7
+ b: .0259040371 * s + .7827717662 * c - .808675766 * l
8
+ };
9
+ }, o = ({ L: e, a: r, b: i }) => {
10
+ let a = e + .3963377774 * r + .2158037573 * i, o = e - .1055613458 * r - .0638541728 * i, s = e - .0894841775 * r - 1.291485548 * i, c = a * a * a, l = o * o * o, u = s * s * s;
11
+ return {
12
+ r: n(t(4.0767416621 * c - 3.3077115913 * l + .2309699292 * u)),
13
+ g: n(t(-1.2684380046 * c + 2.6097574011 * l - .3413193965 * u)),
14
+ b: n(t(-.0041960863 * c - .7034186147 * l + 1.707614701 * u))
15
+ };
16
+ }, s = ({ L: e, a: t, b: n }) => ({
17
+ L: e,
18
+ C: Math.sqrt(t * t + n * n),
19
+ H: (Math.atan2(n, t) * 180 / Math.PI + 360) % 360
20
+ }), c = ({ L: e, C: t, H: n }) => ({
21
+ L: e,
22
+ a: t * Math.cos(n * Math.PI / 180),
23
+ b: t * Math.sin(n * Math.PI / 180)
24
+ }), l = (e) => ({
25
+ r: parseInt(e.slice(1, 3), 16) / 255,
26
+ g: parseInt(e.slice(3, 5), 16) / 255,
27
+ b: parseInt(e.slice(5, 7), 16) / 255
28
+ }), u = ({ r: e, g: t, b: n }) => {
29
+ let r = (e) => Math.round(e * 255).toString(16).padStart(2, "0");
30
+ return `#${r(e)}${r(t)}${r(n)}`;
31
+ }, d = (e) => s(a(l(e))), f = (e) => u(o(c(e))), p = (e) => u(o(e)), m = (e, t, n) => ({
32
+ L: r(e.L, t.L, n),
33
+ a: r(e.a, t.a, n),
34
+ b: r(e.b, t.b, n)
35
+ }), ee = (e) => {
36
+ let t = e >>> 0;
37
+ return () => {
38
+ t += 1831565813;
39
+ let e = t;
40
+ return e = Math.imul(e ^ e >>> 15, e | 1), e ^= e + Math.imul(e ^ e >>> 7, e | 61), ((e ^ e >>> 14) >>> 0) / 4294967296;
41
+ };
42
+ }, h = (e) => {
43
+ let t = 0;
44
+ for (let n = 1; n < 7; n++) t = Math.imul(31, t) + parseInt(e[n], 16) | 0;
45
+ return Math.abs(t);
46
+ }, g = (e) => {
47
+ let t = [], n = ee(e);
48
+ for (let e = 0; e < 256; e++) t.push(n());
49
+ let i = (e) => e * e * (3 - 2 * e);
50
+ return (e) => {
51
+ let n = Math.floor(e) & 255, a = e - Math.floor(e);
52
+ return r(t[n], t[n + 1 & 255], i(a));
53
+ };
54
+ }, _ = (e, t, n, r, i) => {
55
+ let a = 1 - i;
56
+ return a * a * a * e + 3 * a * a * i * t + 3 * a * i * i * n + i * i * i * r;
57
+ }, v = (e, t, n, r, i) => ({
58
+ L: _(e.L, t.L, n.L, r.L, i),
59
+ a: _(e.a, t.a, n.a, r.a, i),
60
+ b: _(e.b, e.b, n.b, r.b, i)
61
+ }), te = (e) => e < .5 ? 4 * e * e * e : 1 - (-2 * e + 2) ** 3 / 2, ne = (e) => {
62
+ let r;
63
+ r = e >= 1667 && e <= 4e3 ? -266123900 / (e * e * e) - 234358 / (e * e) + 877.6956 / e + .17991 : -3025846900 / (e * e * e) + 2107037.9 / (e * e) + 222.6347 / e + .24039;
64
+ let i;
65
+ i = e >= 1667 && e <= 2222 ? -1.1063814 * r * r * r - 1.3481102 * r * r + 2.18555832 * r - .20219683 : e <= 4e3 ? -.9549476 * r * r * r - 1.37418593 * r * r + 2.09137015 * r - .16748867 : 3.081758 * r * r * r - 5.8733867 * r * r + 3.75112997 * r - .37001483;
66
+ let a = 1 * r / Math.max(i, 1e-6), o = 1 * (1 - r - i) / Math.max(i, 1e-6), s = 3.2406 * a - 1.5372 - .4986 * o, c = -.9689 * a + 1.8758 + .0415 * o, l = .0557 * a - .204 + 1.057 * o, u = Math.max(s, c, l, 1e-6);
67
+ return {
68
+ r: n(t(s / u)),
69
+ g: n(t(c / u)),
70
+ b: n(t(l / u))
71
+ };
72
+ }, re = (e, t = .5, r = -1.5, a = 1.2, o = 1) => {
73
+ let s = i * (t / 3 + r * e), c = e ** +o, l = a * c * (1 - c) / 2, u = Math.cos(s), d = Math.sin(s);
74
+ return {
75
+ r: n(c + l * (-.14861 * u + 1.78277 * d)),
76
+ g: n(c + l * (-.29227 * u - .90649 * d)),
77
+ b: n(c + 1.97294 * u * l)
78
+ };
79
+ }, ie = (e, t) => {
80
+ let n = ee(h(e));
81
+ return Array.from({ length: t }, () => f({
82
+ L: r(.35, .75, n()),
83
+ C: r(.08, .2, n()),
84
+ H: n() * 360
85
+ }));
86
+ }, ae = (e, t) => {
87
+ let n = d(e);
88
+ return Array.from({ length: t }, (e, t) => {
89
+ let i = (n.H + 137.50776405003785 * t) % 360;
90
+ return f({
91
+ L: r(.45, .7, t % 3 / 2),
92
+ C: Math.max(n.C, .1),
93
+ H: i
94
+ });
95
+ });
96
+ }, oe = (e, t) => {
97
+ let i = d(e), a = h(e), o = g(a), s = g(a + 1), c = g(a + 2);
98
+ return Array.from({ length: t }, (e, a) => {
99
+ let l = a / Math.max(t - 1, 1);
100
+ return f({
101
+ L: n(r(.35, .8, o(l * 3.5))),
102
+ C: n(r(.06, .22, s(l * 4.1 + 1))),
103
+ H: (i.H + c(l * 2.7 + 2) * 120 - 60) % 360
104
+ });
105
+ });
106
+ }, se = (e, t) => {
107
+ let n = (d(e).H - 120 + 360) % 360;
108
+ return Array.from({ length: t }, (e, i) => {
109
+ let a = i / (t - 1), o = (r(20, 220, a) + n) % 360;
110
+ return f({
111
+ L: .35 + .45 * Math.sin(a * Math.PI),
112
+ C: r(.18, .12, Math.abs(a - .5) * 2),
113
+ H: o
114
+ });
115
+ });
116
+ }, ce = (e, t) => {
117
+ let n = e.slice(0, 4).map((e) => a(l(e)));
118
+ for (; n.length < 4;) n.push({ ...n[n.length - 1] });
119
+ let r = {
120
+ L: (n[0].L + n[3].L) / 2,
121
+ a: (n[0].a + n[3].a) / 2,
122
+ b: (n[0].b + n[3].b) / 2
123
+ };
124
+ return n[1] = m(n[1], r, .35), n[2] = m(n[2], r, .35), Array.from({ length: t }, (e, r) => {
125
+ let i = r / (t - 1);
126
+ return p(v(n[0], n[1], n[2], n[3], i));
127
+ });
128
+ }, le = (e, t) => {
129
+ let n = d(e);
130
+ return Array.from({ length: t }, (e, i) => {
131
+ let a = i / (t - 1);
132
+ return f({
133
+ L: r(.28, .88, te(a)),
134
+ C: n.C * (1 - .4 * Math.abs(a - .5) * 2),
135
+ H: n.H
136
+ });
137
+ });
138
+ }, ue = (e, t) => {
139
+ let n = d(e).H / 360 * 3e3, i = Math.max(900, 1500 + n), a = Math.min(15e3, 9e3 + n);
140
+ return Array.from({ length: t }, (e, n) => {
141
+ let o = n / (t - 1);
142
+ return u(ne(r(i, a, o)));
143
+ });
144
+ }, de = (e, t) => {
145
+ let n = d(e), i = [1, 1];
146
+ for (; i.length < t;) i.push(i[i.length - 1] + i[i.length - 2]);
147
+ return Array.from({ length: t }, (e, t) => {
148
+ let a = (n.H + i[t] * 47 % 360) % 360;
149
+ return f({
150
+ L: r(.4, .72, t % 4 / 3),
151
+ C: Math.max(n.C, .1),
152
+ H: a
153
+ });
154
+ });
155
+ }, fe = (e, t) => {
156
+ let i = d(e);
157
+ return Array.from({ length: t }, (e, a) => {
158
+ let o = 1 / (a + 1), s = 1 / t, c = (o - s) / (1 - s);
159
+ return f({
160
+ L: r(.28, .88, c),
161
+ C: n(r(i.C * 1.3, i.C * .5, c)),
162
+ H: i.H
163
+ });
164
+ });
165
+ }, pe = (e, t) => {
166
+ let r = d(e);
167
+ return Array.from({ length: t }, (e, a) => {
168
+ let o = a / Math.max(t - 1, 1), s = .55 + .25 * Math.sin(i * o * 1 + 0), c = r.C * (.7 + .5 * Math.sin(i * o * 1.5 + Math.PI / 3)), l = (r.H + 60 * Math.sin(i * o * .75 + Math.PI / 6) + 360) % 360;
169
+ return f({
170
+ L: n(s),
171
+ C: n(c),
172
+ H: l
173
+ });
174
+ });
175
+ }, me = (e, t) => {
176
+ let n = d(e).H / 120 % 3;
177
+ return Array.from({ length: t }, (e, r) => u(re(r / (t - 1), n, -1.5, 1.2, 1)));
178
+ }, he = (e, t = 5) => {
179
+ let n = e.square ?? [], r = n[0] ?? "#0065ff", i = n[1] ?? "#ff0000", a = n[2] ?? "#00ff00", o = n[3] ?? "#ffff00";
180
+ return {
181
+ random: ie(r, t),
182
+ goldenRatio: ae(r, t),
183
+ noise: oe(r, t),
184
+ temperature: se(r, t),
185
+ bezierInterpolation: ce([
186
+ r,
187
+ i,
188
+ a,
189
+ o
190
+ ], t),
191
+ easeInOut: le(r, t),
192
+ blackbody: ue(r, t),
193
+ fibonacci: de(r, t),
194
+ harmonicSeries: fe(r, t),
195
+ sinusoidal: pe(r, t),
196
+ cubehelix: me(r, t)
197
+ };
198
+ }, ge = (e) => ({
199
+ r: parseInt(e.slice(1, 3), 16) / 255,
200
+ g: parseInt(e.slice(3, 5), 16) / 255,
201
+ b: parseInt(e.slice(5, 7), 16) / 255
202
+ }), y = ({ r: e, g: t, b: n }) => {
203
+ let r = (e) => Math.max(0, Math.min(255, Math.round(e * 255))).toString(16).padStart(2, "0");
204
+ return `#${r(e)}${r(t)}${r(n)}`;
205
+ }, b = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, x = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, S = (e, t, n) => e + (t - e) * n, C = (e, t = 0, n = 1) => Math.max(t, Math.min(n, e)), w = {
206
+ r: 1,
207
+ g: 1,
208
+ b: 1
209
+ }, T = {
210
+ r: 0,
211
+ g: 0,
212
+ b: 0
213
+ }, _e = ({ r: e, g: t, b: n }) => .2126 * b(e) + .7152 * b(t) + .0722 * b(n), E = (e, t) => {
214
+ let n = _e(e), r = _e(t);
215
+ return (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
216
+ }, ve = (e, t) => {
217
+ let n = ({ r: e, g: t, b: n }) => .2126729 * e ** 2.4 + .7151522 * t ** 2.4 + .072175 * n ** 2.4, r = .022, i = 1.414, a = 1.14, o = n(e), s = n(t);
218
+ if (o = o > r ? o : o + (r - o) ** i, s = s > r ? s : s + (r - s) ** i, Math.abs(s - o) < 5e-4) return 0;
219
+ if (s > o) {
220
+ let e = (s ** .56 - o ** .57) * a;
221
+ return e < .1 ? 0 : (e - .027) * 100;
222
+ }
223
+ {
224
+ let e = (s ** .65 - o ** .62) * a;
225
+ return e > -.1 ? 0 : (e + .027) * 100;
226
+ }
227
+ }, ye = ({ r: e, g: t, b: n }) => {
228
+ let r = Math.max(e, t, n), i = Math.min(e, t, n), a = (r + i) / 2;
229
+ if (r === i) return {
230
+ h: 0,
231
+ s: 0,
232
+ l: a
233
+ };
234
+ let o = r - i, s = o / (a > .5 ? 2 - r - i : r + i), c = 0;
235
+ return c = r === e ? (t - n) / o + (t < n ? 6 : 0) : r === t ? (n - e) / o + 2 : (e - t) / o + 4, {
236
+ h: c * 60,
237
+ s,
238
+ l: a
239
+ };
240
+ }, D = ({ h: e, s: t, l: n }) => {
241
+ let r = (1 - Math.abs(2 * n - 1)) * t, i = r * (1 - Math.abs(e / 60 % 2 - 1)), a = n - r / 2, o = 0, s = 0, c = 0;
242
+ return e < 60 ? (o = r, s = i) : e < 120 ? (o = i, s = r) : e < 180 ? (s = r, c = i) : e < 240 ? (s = i, c = r) : e < 300 ? (o = i, c = r) : (o = r, c = i), {
243
+ r: o + a,
244
+ g: s + a,
245
+ b: c + a
246
+ };
247
+ }, be = (e, t, n, r = 48) => {
248
+ if (E(e, t) >= n) return e;
249
+ let i = ye(e), a = null;
250
+ {
251
+ let e = 0, o = i.l;
252
+ for (let s = 0; s < r; s++) {
253
+ let r = (e + o) / 2, s = D({
254
+ ...i,
255
+ l: r
256
+ });
257
+ E(s, t) >= n ? (a = s, o = r) : e = r;
258
+ }
259
+ }
260
+ if (a && E(a, t) >= n) return a;
261
+ {
262
+ let e = i.l, o = 1;
263
+ for (let s = 0; s < r; s++) {
264
+ let r = (e + o) / 2, s = D({
265
+ ...i,
266
+ l: r
267
+ });
268
+ E(s, t) >= n ? (a = s, e = r) : o = r;
269
+ }
270
+ }
271
+ return a && E(a, t) >= n ? a : E(T, t) >= E(w, t) ? T : w;
272
+ }, xe = (e, t, n, r, i, a, o = 48) => {
273
+ let s = a === "dark" ? 0 : n, c = a === "dark" ? n : 1, l = null;
274
+ for (let n = 0; n < o; n++) {
275
+ let n = (s + c) / 2, o = D({
276
+ h: e,
277
+ s: t,
278
+ l: n
279
+ });
280
+ E(o, r) >= i ? (l = o, a === "dark" ? s = n : c = n) : a === "dark" ? c = n : s = n;
281
+ }
282
+ return l && E(l, r) >= i ? l : E(T, r) >= E(w, r) ? T : w;
283
+ }, Se = ({ r: e, g: t, b: n }) => {
284
+ let r = b(e), i = b(t), a = b(n);
285
+ return {
286
+ r: x(C(.29031 * r + .70969 * i + 0 * a)),
287
+ g: x(C(.29031 * r + .70969 * i + 0 * a)),
288
+ b: x(C(-.02197 * r + .02197 * i + 1 * a))
289
+ };
290
+ }, Ce = ({ r: e, g: t, b: n }) => {
291
+ let r = b(e), i = b(t), a = b(n);
292
+ return {
293
+ r: x(C(.10889 * r + .89111 * i + 0 * a)),
294
+ g: x(C(.10889 * r + .89111 * i + 0 * a)),
295
+ b: x(C(.00452 * r - .00452 * i + 1 * a))
296
+ };
297
+ }, we = (e, t) => Math.sqrt((e.r - t.r) ** 2 + (e.g - t.g) ** 2 + (e.b - t.b) ** 2), Te = (e, t, n = .12) => we(Se(e), Se(t)) > n || we(Ce(e), Ce(t)) > n, Ee = (e, t = 9) => {
298
+ let n = Object.values(e).find((e) => Array.isArray(e) && e.length > 0);
299
+ if (!n) return {};
300
+ let r = ye(ge(n[0])), i = {};
301
+ i.contrastScale = Array.from({ length: t }, (e, n) => {
302
+ let i = n / (t - 1);
303
+ return y(D({
304
+ h: r.h,
305
+ s: r.s,
306
+ l: i ** .8
307
+ }));
308
+ });
309
+ {
310
+ let e = Math.ceil(t / 2);
311
+ i.accessible = Array.from({ length: t }, (t, n) => {
312
+ let i = n % 2 == 0, a = i ? S(.05, .35, n / 2 / e) : S(.88, .98, Math.floor(n / 2) / e);
313
+ return y(be(D({
314
+ h: r.h,
315
+ s: r.s * .6,
316
+ l: a
317
+ }), D(i ? {
318
+ h: r.h,
319
+ s: r.s * .1,
320
+ l: .96
321
+ } : {
322
+ h: r.h,
323
+ s: r.s * .8,
324
+ l: .15
325
+ }), 4.5));
326
+ });
327
+ }
328
+ {
329
+ let e = [
330
+ {
331
+ bg: w,
332
+ ratio: 4.5,
333
+ startL: .2
334
+ },
335
+ {
336
+ bg: w,
337
+ ratio: 7,
338
+ startL: .1
339
+ },
340
+ {
341
+ bg: T,
342
+ ratio: 4.5,
343
+ startL: .8
344
+ },
345
+ {
346
+ bg: T,
347
+ ratio: 7,
348
+ startL: .9
349
+ }
350
+ ];
351
+ i.wcag = Array.from({ length: t }, (t, n) => {
352
+ let { bg: i, ratio: a, startL: o } = e[n % e.length], s = Math.floor(n / e.length), c = C(1 - s * .3), l = s * (o < .5 ? .08 : -.08);
353
+ return y(be(D({
354
+ h: r.h,
355
+ s: r.s * c,
356
+ l: C(o + l)
357
+ }), i, a));
358
+ });
359
+ }
360
+ {
361
+ let e = {
362
+ r: 1,
363
+ g: 1,
364
+ b: 1
365
+ };
366
+ i.apca = Array.from({ length: t }, (n, i) => {
367
+ let a = S(30, 90, i / (t - 1)), o = 0, s = 1;
368
+ for (let t = 0; t < 48; t++) {
369
+ let t = (o + s) / 2, n = D({
370
+ h: r.h,
371
+ s: r.s,
372
+ l: t
373
+ });
374
+ Math.abs(ve(n, e)) > a ? o = t : s = t;
375
+ }
376
+ return y(D({
377
+ h: r.h,
378
+ s: r.s,
379
+ l: (o + s) / 2
380
+ }));
381
+ });
382
+ }
383
+ {
384
+ let e = [
385
+ 202,
386
+ 27,
387
+ 56,
388
+ 180,
389
+ 291,
390
+ 343,
391
+ 120,
392
+ 240,
393
+ 30
394
+ ], n = [];
395
+ for (let i = 0; i < t; i++) {
396
+ let a = e[i % e.length], o = S(r.h, a, .65), s = S(.25, .75, i / Math.max(t - 1, 1)), c = D({
397
+ h: o,
398
+ s: C(r.s, .4, .85),
399
+ l: s
400
+ });
401
+ i > 0 && !Te(c, ge(n[i - 1])) && (c = D({
402
+ h: o,
403
+ s: r.s,
404
+ l: C(s + .15)
405
+ })), n.push(y(c));
406
+ }
407
+ i.colorBlindSafe = n;
408
+ }
409
+ {
410
+ let e = [
411
+ {
412
+ name: "background",
413
+ l: .97,
414
+ s: .08
415
+ },
416
+ {
417
+ name: "surface",
418
+ l: .93,
419
+ s: .12
420
+ },
421
+ {
422
+ name: "border",
423
+ l: .8,
424
+ s: .18
425
+ },
426
+ {
427
+ name: "muted",
428
+ l: .65,
429
+ s: .25
430
+ },
431
+ {
432
+ name: "default",
433
+ l: .45,
434
+ s: r.s
435
+ },
436
+ {
437
+ name: "emphasis",
438
+ l: .35,
439
+ s: r.s
440
+ },
441
+ {
442
+ name: "strong",
443
+ l: .22,
444
+ s: r.s
445
+ },
446
+ {
447
+ name: "onColor",
448
+ l: .98,
449
+ s: .05
450
+ },
451
+ {
452
+ name: "error",
453
+ l: .4,
454
+ s: .85,
455
+ h: 0
456
+ },
457
+ {
458
+ name: "success",
459
+ l: .35,
460
+ s: .6,
461
+ h: 142
462
+ }
463
+ ];
464
+ i.colorTokenized = Array.from({ length: t }, (t, n) => {
465
+ let { h: i, s: a, l: o } = e[n % e.length];
466
+ return y(D({
467
+ h: i ?? r.h,
468
+ s: a,
469
+ l: o
470
+ }));
471
+ });
472
+ }
473
+ {
474
+ let e = Math.ceil(t / 2), n = t - e;
475
+ i.highContrast = Array.from({ length: t }, (t, i) => {
476
+ if (i < e) {
477
+ let t = i / Math.max(e - 1, 1), n = S(.05, .28, t), a = C(S(r.s, 0, t), 0, 1);
478
+ return y(xe(r.h, a, n, w, 7, "dark"));
479
+ }
480
+ {
481
+ let t = S(.65, .98, (i - e) / Math.max(n - 1, 1)), a = C(r.s * .7, .2, .8);
482
+ return y(xe(r.h, a, t, T, 7, "light"));
483
+ }
484
+ });
485
+ }
486
+ return i;
487
+ }, De = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, Oe = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, O = (e) => Math.max(0, Math.min(1, e)), k = (e, t, n) => e + (t - e) * n, ke = ({ r: e, g: t, b: n }) => {
488
+ let r = De(e), i = De(t), a = De(n), o = Math.cbrt(.4122214708 * r + .5363325363 * i + .0514459929 * a), s = Math.cbrt(.2119034982 * r + .6806995451 * i + .1073969566 * a), c = Math.cbrt(.0883024619 * r + .2817188376 * i + .6299787005 * a);
489
+ return {
490
+ L: .2104542553 * o + .793617785 * s - .0040720468 * c,
491
+ a: 1.9779984951 * o - 2.428592205 * s + .4505937099 * c,
492
+ b: .0259040371 * o + .7827717662 * s - .808675766 * c
493
+ };
494
+ }, Ae = ({ L: e, a: t, b: n }) => {
495
+ let r = e + .3963377774 * t + .2158037573 * n, i = e - .1055613458 * t - .0638541728 * n, a = e - .0894841775 * t - 1.291485548 * n, o = r * r * r, s = i * i * i, c = a * a * a;
496
+ return {
497
+ r: O(Oe(4.0767416621 * o - 3.3077115913 * s + .2309699292 * c)),
498
+ g: O(Oe(-1.2684380046 * o + 2.6097574011 * s - .3413193965 * c)),
499
+ b: O(Oe(-.0041960863 * o - .7034186147 * s + 1.707614701 * c))
500
+ };
501
+ }, je = ({ L: e, a: t, b: n }) => ({
502
+ L: e,
503
+ C: Math.sqrt(t * t + n * n),
504
+ H: (Math.atan2(n, t) * 180 / Math.PI + 360) % 360
505
+ }), Me = ({ L: e, C: t, H: n }) => ({
506
+ L: e,
507
+ a: t * Math.cos(n * Math.PI / 180),
508
+ b: t * Math.sin(n * Math.PI / 180)
509
+ }), Ne = (e) => ({
510
+ r: parseInt(e.slice(1, 3), 16) / 255,
511
+ g: parseInt(e.slice(3, 5), 16) / 255,
512
+ b: parseInt(e.slice(5, 7), 16) / 255
513
+ }), Pe = ({ r: e, g: t, b: n }) => {
514
+ let r = (e) => Math.round(e * 255).toString(16).padStart(2, "0");
515
+ return `#${r(e)}${r(t)}${r(n)}`;
516
+ }, A = (e) => je(ke(Ne(e))), j = (e) => Pe(Ae(Me(e))), Fe = (e, t, n) => {
517
+ let r = t - e;
518
+ return r > 180 && (r -= 360), r < -180 && (r += 360), (e + r * n + 360) % 360;
519
+ }, Ie = (e, t, n) => ({
520
+ L: k(e.L, t.L, n),
521
+ C: k(e.C, t.C, n),
522
+ H: Fe(e.H, t.H, n)
523
+ }), Le = (e, t) => {
524
+ let n = A(e);
525
+ return Array.from({ length: t }, (e, r) => j({
526
+ L: k(.92, .25, r / (t - 1)),
527
+ C: n.C,
528
+ H: n.H
529
+ }));
530
+ }, Re = (e, t, n) => {
531
+ let r = A(e), i = A(t), a = {
532
+ L: .9,
533
+ C: .02,
534
+ H: r.H
535
+ };
536
+ return Array.from({ length: n }, (e, t) => {
537
+ let o = t / (n - 1), s = o * 2;
538
+ if (o <= .5) return j(Ie({
539
+ ...r,
540
+ L: .4
541
+ }, a, s));
542
+ {
543
+ let e = {
544
+ ...i,
545
+ L: .4
546
+ };
547
+ return j(Ie(a, e, s - 1));
548
+ }
549
+ });
550
+ }, ze = (e, t) => {
551
+ let n = A(e), r = O(k(.55, .65, .5)), i = Math.max(n.C, .12);
552
+ return Array.from({ length: t }, (e, a) => {
553
+ let o = (n.H + 360 / t * a) % 360;
554
+ return j({
555
+ L: r,
556
+ C: i,
557
+ H: o
558
+ });
559
+ });
560
+ }, Be = (e, t, n) => {
561
+ let r = A(e), i = A(t), a = [
562
+ {
563
+ L: .85,
564
+ C: r.C * .5,
565
+ H: r.H
566
+ },
567
+ {
568
+ L: .45,
569
+ C: r.C,
570
+ H: r.H
571
+ },
572
+ {
573
+ L: .85,
574
+ C: i.C * .5,
575
+ H: i.H
576
+ },
577
+ {
578
+ L: .45,
579
+ C: Math.max(r.C, i.C),
580
+ H: Fe(r.H, i.H, .5)
581
+ }
582
+ ];
583
+ return Array.from({ length: n }, (e, t) => {
584
+ let r = t / Math.max(n - 1, 1) * (a.length - 1), i = Math.floor(r), o = Math.min(i + 1, a.length - 1);
585
+ return j(Ie(a[i], a[o], r - i));
586
+ });
587
+ }, Ve = (e, t) => {
588
+ let n = A(e), r = O(n.L > .7 ? n.L : .62), i = Math.max(n.C, .12);
589
+ return Array.from({ length: t }, (e, a) => {
590
+ let o = a / t, s = (n.H + 360 * o) % 360;
591
+ return j({
592
+ L: r,
593
+ C: i,
594
+ H: s
595
+ });
596
+ });
597
+ }, He = (e, t) => {
598
+ let n = A(e), r = (n.H - 30 + 360) % 360, i = [
599
+ 0,
600
+ 30,
601
+ 60,
602
+ 120,
603
+ 180,
604
+ 240,
605
+ 280
606
+ ].map((e) => (e + r) % 360), a = Math.max(n.C, .14), o = [
607
+ .45,
608
+ .6,
609
+ .8,
610
+ .72,
611
+ .62,
612
+ .5,
613
+ .42
614
+ ];
615
+ return Array.from({ length: t }, (e, n) => {
616
+ let r = n / (t - 1) * (i.length - 1), s = Math.floor(r), c = Math.min(s + 1, i.length - 1), l = r - s;
617
+ return j({
618
+ L: k(o[s], o[c], l),
619
+ C: a,
620
+ H: Fe(i[s], i[c], l)
621
+ });
622
+ });
623
+ }, Ue = (e, t) => {
624
+ let n = A(e), r = .5800000000000001 / t;
625
+ return Array.from({ length: t }, (e, t) => j({
626
+ L: .88 - r * (t + .5),
627
+ C: n.C * .85,
628
+ H: n.H
629
+ }));
630
+ }, We = (e, t = 4) => {
631
+ let n = e.square ?? [], r = n[0] ?? "#0000ff", i = n[1] ?? "#ff0000", a = n[2] ?? "#00ff00";
632
+ return {
633
+ sequential: Le(r, t),
634
+ diverging: Re(r, a, t),
635
+ qualitative: ze(r, t),
636
+ bivariate: Be(r, i, t),
637
+ cyclical: Ve(r, t),
638
+ spectral: He(r, t),
639
+ stepped: Ue(r, t)
640
+ };
641
+ }, Ge = (e) => {
642
+ let t = parseInt(e.slice(1, 3), 16) / 255, n = parseInt(e.slice(3, 5), 16) / 255, r = parseInt(e.slice(5, 7), 16) / 255, i = Math.max(t, n, r), a = Math.min(t, n, r), o = 0, s = 0, c = (i + a) / 2;
643
+ if (i !== a) {
644
+ let e = i - a;
645
+ switch (s = c > .5 ? e / (2 - i - a) : e / (i + a), i) {
646
+ case t:
647
+ o = (n - r) / e + (n < r ? 6 : 0);
648
+ break;
649
+ case n:
650
+ o = (r - t) / e + 2;
651
+ break;
652
+ case r: o = (t - n) / e + 4;
653
+ }
654
+ o /= 6;
655
+ }
656
+ return {
657
+ h: o * 360,
658
+ s: s * 100,
659
+ l: c * 100
660
+ };
661
+ }, Ke = ({ h: e, s: t, l: n }) => {
662
+ let r = n / 100, i = t / 100 * Math.min(r, 1 - r), a = (t) => {
663
+ let n = (t + e / 30) % 12, a = r - i * Math.max(Math.min(n - 3, 9 - n, 1), -1);
664
+ return Math.round(255 * a).toString(16).padStart(2, "0");
665
+ };
666
+ return `#${a(0)}${a(8)}${a(4)}`;
667
+ }, M = (e, t) => ({
668
+ ...e,
669
+ h: (e.h + t + 360) % 360
670
+ }), qe = (e, t = 9) => {
671
+ let n = Object.values(e).find((e) => Array.isArray(e) && e.length > 0);
672
+ if (!n || n.length === 0) return {};
673
+ let r = n[0], i = Ge(r), a = {
674
+ analogous: (e) => [
675
+ M(e, -30),
676
+ e,
677
+ M(e, 30)
678
+ ],
679
+ complementary: (e) => [e, M(e, 180)],
680
+ splitComplementary: (e) => [
681
+ e,
682
+ M(e, 150),
683
+ M(e, 210)
684
+ ],
685
+ triadic: (e) => [
686
+ e,
687
+ M(e, 120),
688
+ M(e, 240)
689
+ ],
690
+ tetradic: (e) => [
691
+ e,
692
+ M(e, 60),
693
+ M(e, 180),
694
+ M(e, 240)
695
+ ],
696
+ square: (e) => [
697
+ e,
698
+ M(e, 90),
699
+ M(e, 180),
700
+ M(e, 270)
701
+ ],
702
+ accentedAnalogous: (e) => [
703
+ M(e, -30),
704
+ e,
705
+ M(e, 30),
706
+ M(e, 180)
707
+ ],
708
+ doubleSplitComplementary: (e) => [
709
+ e,
710
+ M(e, 30),
711
+ M(e, 150),
712
+ M(e, 210),
713
+ M(e, 180),
714
+ M(e, 240)
715
+ ],
716
+ ambiguous: (e) => [
717
+ M(e, 15),
718
+ M(e, 85),
719
+ M(e, 145)
720
+ ]
721
+ }, o = {
722
+ monochromatic: (e, t) => Array.from({ length: t }, (n, r) => ({
723
+ ...e,
724
+ l: Math.max(5, Math.min(95, 15 + 70 / (t - 1 || 1) * r))
725
+ })),
726
+ monochromaticTintShade: (e, t) => Array.from({ length: t }, (n, r) => ({
727
+ ...e,
728
+ s: Math.max(0, e.s - r * 2),
729
+ l: Math.max(5, Math.min(95, 10 + 80 / (t - 1 || 1) * r))
730
+ }))
731
+ }, s = { harmonyPalette: n };
732
+ return Object.entries(a).forEach(([e, t]) => {
733
+ s[e] = t(i).map(Ke);
734
+ }), Object.entries(o).forEach(([e, n]) => {
735
+ s[e] = n(i, t).map(Ke);
736
+ }), s;
737
+ }, Je = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, Ye = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, N = (e) => Math.max(0, Math.min(1, e)), Xe = ({ r: e, g: t, b: n }) => {
738
+ let r = Je(e), i = Je(t), a = Je(n), o = Math.cbrt(.4122214708 * r + .5363325363 * i + .0514459929 * a), s = Math.cbrt(.2119034982 * r + .6806995451 * i + .1073969566 * a), c = Math.cbrt(.0883024619 * r + .2817188376 * i + .6299787005 * a);
739
+ return {
740
+ L: .2104542553 * o + .793617785 * s - .0040720468 * c,
741
+ a: 1.9779984951 * o - 2.428592205 * s + .4505937099 * c,
742
+ b: .0259040371 * o + .7827717662 * s - .808675766 * c
743
+ };
744
+ }, Ze = ({ L: e, a: t, b: n }) => {
745
+ let r = e + .3963377774 * t + .2158037573 * n, i = e - .1055613458 * t - .0638541728 * n, a = e - .0894841775 * t - 1.291485548 * n, o = r * r * r, s = i * i * i, c = a * a * a;
746
+ return {
747
+ r: N(Ye(4.0767416621 * o - 3.3077115913 * s + .2309699292 * c)),
748
+ g: N(Ye(-1.2684380046 * o + 2.6097574011 * s - .3413193965 * c)),
749
+ b: N(Ye(-.0041960863 * o - .7034186147 * s + 1.707614701 * c))
750
+ };
751
+ }, P = (e, t) => (e.L - t.L) ** 2 + (e.a - t.a) ** 2 + (e.b - t.b) ** 2, F = (e) => Math.sqrt(e.a * e.a + e.b * e.b), Qe = (e) => ({
752
+ r: parseInt(e.slice(1, 3), 16) / 255,
753
+ g: parseInt(e.slice(3, 5), 16) / 255,
754
+ b: parseInt(e.slice(5, 7), 16) / 255
755
+ }), I = ({ r: e, g: t, b: n }) => {
756
+ let r = (e) => Math.round(e * 255).toString(16).padStart(2, "0");
757
+ return `#${r(e)}${r(t)}${r(n)}`;
758
+ }, L = (e) => I(Ze(e)), R = (e, t) => {
759
+ if (e.length >= t) return e.slice(0, t);
760
+ let n = [...e], r = e[e.length - 1] ?? {
761
+ L: .5,
762
+ a: 0,
763
+ b: 0
764
+ };
765
+ for (; n.length < t;) {
766
+ let e = n.length / t;
767
+ n.push({
768
+ ...r,
769
+ L: N(.2 + e * .6)
770
+ });
771
+ }
772
+ return n;
773
+ }, z = (e, t) => {
774
+ if (e.length >= t) return e.slice(0, t);
775
+ let n = [...e];
776
+ for (; n.length < t;) {
777
+ let e = n.length / t;
778
+ n.push({
779
+ r: e,
780
+ g: e,
781
+ b: e
782
+ });
783
+ }
784
+ return n;
785
+ }, $e = (e, t = 6e3) => {
786
+ let n = Math.max(1, Math.floor(e.length / 4 / t)), r = [], i = [];
787
+ for (let t = 0; t < e.length; t += 4 * n) {
788
+ if (e[t + 3] < 128) continue;
789
+ let n = {
790
+ r: e[t] / 255,
791
+ g: e[t + 1] / 255,
792
+ b: e[t + 2] / 255
793
+ };
794
+ r.push(n), i.push(Xe(n));
795
+ }
796
+ return {
797
+ rgbs: r,
798
+ labs: i
799
+ };
800
+ }, et = (e) => {
801
+ let t = new Uint8ClampedArray(e.length * 800 * 4), n = 0;
802
+ for (let r of e) {
803
+ let e = Qe(r);
804
+ for (let r = 0; r < 800; r++) {
805
+ let r = () => (Math.random() - .5) * 30;
806
+ t[n++] = Math.round(N(e.r) * 255 + r()), t[n++] = Math.round(N(e.g) * 255 + r()), t[n++] = Math.round(N(e.b) * 255 + r()), t[n++] = 255;
807
+ }
808
+ }
809
+ return t;
810
+ }, B = (e, t, n = 25) => {
811
+ if (e.length === 0) return [];
812
+ let r = e.filter((e) => {
813
+ let t = F(e);
814
+ return Math.random() <= (t < .05 ? .2 : t < .15 ? .6 : 1);
815
+ }), i = r.length >= t ? r : e, a = i.length, o = [i[Math.floor(Math.random() * a)]];
816
+ for (let e = 1; e < t; e++) {
817
+ let e = i.map((e) => Math.min(...o.map((t) => P(e, t)))), t = e.reduce((e, t) => e + t, 0), n = Math.random() * t, r = 0;
818
+ for (let t = 0; t < a; t++) if (n -= e[t], n <= 0) {
819
+ r = t;
820
+ break;
821
+ }
822
+ o.push({ ...i[r] });
823
+ }
824
+ let s = new Int32Array(a);
825
+ for (let e = 0; e < n; e++) {
826
+ let e = !1;
827
+ for (let n = 0; n < a; n++) {
828
+ let r = 0, a = Infinity;
829
+ for (let e = 0; e < t; e++) {
830
+ let t = P(i[n], o[e]);
831
+ t < a && (a = t, r = e);
832
+ }
833
+ s[n] !== r && (s[n] = r, e = !0);
834
+ }
835
+ if (!e) break;
836
+ let n = Array.from({ length: t }, () => ({
837
+ L: 0,
838
+ a: 0,
839
+ b: 0,
840
+ count: 0
841
+ }));
842
+ for (let e = 0; e < a; e++) {
843
+ let t = s[e];
844
+ n[t].L += i[e].L, n[t].a += i[e].a, n[t].b += i[e].b, n[t].count++;
845
+ }
846
+ for (let e = 0; e < t; e++) n[e].count > 0 && (o[e] = {
847
+ L: n[e].L / n[e].count,
848
+ a: n[e].a / n[e].count,
849
+ b: n[e].b / n[e].count
850
+ });
851
+ }
852
+ let c = Array(t).fill(0);
853
+ for (let e = 0; e < a; e++) c[s[e]]++;
854
+ return R(o.map((e, t) => ({
855
+ lab: e,
856
+ score: c[t] * (1 + 3 * F(e))
857
+ })).sort((e, t) => t.score - e.score).map((e) => e.lab), t);
858
+ }, tt = (e, t) => {
859
+ if (e.length === 0) return z([], t);
860
+ let n = [{ pixels: [...e] }], r = (e) => {
861
+ let t = 1, n = 0, r = 1, i = 0, a = 1, o = 0;
862
+ for (let s of e.pixels) t = Math.min(t, s.r), n = Math.max(n, s.r), r = Math.min(r, s.g), i = Math.max(i, s.g), a = Math.min(a, s.b), o = Math.max(o, s.b);
863
+ let s = n - t >= i - r && n - t >= o - a ? "r" : i - r >= o - a ? "g" : "b";
864
+ e.pixels.sort((e, t) => e[s] - t[s]);
865
+ let c = Math.floor(e.pixels.length / 2);
866
+ return [{ pixels: e.pixels.slice(0, c) }, { pixels: e.pixels.slice(c) }];
867
+ };
868
+ for (; n.length < t && (n.sort((e, t) => t.pixels.length - e.pixels.length), !(n[0].pixels.length < 2));) {
869
+ let [e, t] = r(n.shift());
870
+ n.push(e, t);
871
+ }
872
+ return z(n.map((e) => {
873
+ let t = e.pixels.length;
874
+ return {
875
+ r: e.pixels.reduce((e, t) => e + t.r, 0) / t,
876
+ g: e.pixels.reduce((e, t) => e + t.g, 0) / t,
877
+ b: e.pixels.reduce((e, t) => e + t.b, 0) / t
878
+ };
879
+ }), t);
880
+ }, nt = (e, t) => {
881
+ let n = /* @__PURE__ */ new Map();
882
+ for (let t of e) {
883
+ let e = Math.round(t.r * 7) / 7, r = Math.round(t.g * 7) / 7, i = Math.round(t.b * 7) / 7, a = `${e},${r},${i}`, o = n.get(a);
884
+ o ? o.count++ : n.set(a, {
885
+ rgb: {
886
+ r: e,
887
+ g: r,
888
+ b: i
889
+ },
890
+ count: 1
891
+ });
892
+ }
893
+ return z(Array.from(n.values()).sort((e, t) => t.count - e.count).slice(0, t).map((e) => e.rgb), t);
894
+ }, rt = (e, t) => {
895
+ let n = e.filter((e) => F(e) > .1 && e.L > .25 && e.L < .85);
896
+ return B(n.length >= t ? n : e, t);
897
+ }, it = (e, t) => {
898
+ let n = e.filter((e) => {
899
+ let t = F(e);
900
+ return t >= .02 && t <= .09 && e.L > .2 && e.L < .9;
901
+ });
902
+ return B(n.length >= t ? n : e, t);
903
+ }, at = (e, t) => {
904
+ let n = () => ({
905
+ r: 0,
906
+ g: 0,
907
+ b: 0,
908
+ count: 0,
909
+ children: Array(8).fill(null),
910
+ isLeaf: !1
911
+ }), r = n(), i = (e, t, r, a, o) => {
912
+ if (o === 8) {
913
+ e.isLeaf = !0, e.r += t, e.g += r, e.b += a, e.count++;
914
+ return;
915
+ }
916
+ let s = 7 - o, c = (t >> s & 1) << 2 | (r >> s & 1) << 1 | a >> s & 1;
917
+ e.children[c] || (e.children[c] = n()), i(e.children[c], t, r, a, o + 1);
918
+ }, a = (e) => e.isLeaf && e.count > 0 ? [e] : e.children.filter(Boolean).flatMap((e) => a(e));
919
+ for (let t of e) i(r, Math.round(t.r * 255), Math.round(t.g * 255), Math.round(t.b * 255), 0);
920
+ let o = a(r);
921
+ for (; o.length > t;) o.sort((e, t) => e.count - t.count), o[0].count = 0, o = a(r);
922
+ return z(o.filter((e) => e.count > 0).sort((e, t) => t.count - e.count).slice(0, t).map((e) => ({
923
+ r: N(e.r / e.count / 255),
924
+ g: N(e.g / e.count / 255),
925
+ b: N(e.b / e.count / 255)
926
+ })), t);
927
+ }, ot = (e, t) => {
928
+ if (e.length === 0) return R([], t);
929
+ let n = e.length, r = e.reduce((e, t) => e + t.L, 0) / n, i = e.reduce((e, t) => e + t.a, 0) / n, a = e.reduce((e, t) => e + t.b, 0) / n, o = Math.sqrt(e.reduce((e, t) => e + (t.L - r) ** 2, 0) / n), s = Math.sqrt(e.reduce((e, t) => e + (t.a - i) ** 2, 0) / n), c = Math.sqrt(e.reduce((e, t) => e + (t.b - a) ** 2, 0) / n), l = Math.cbrt(e.reduce((e, t) => e + (t.L - r) ** 3, 0) / n), u = Math.cbrt(e.reduce((e, t) => e + (t.a - i) ** 3, 0) / n), d = Math.cbrt(e.reduce((e, t) => e + (t.b - a) ** 3, 0) / n);
930
+ return Array.from({ length: t }, (e, n) => {
931
+ let f = t === 1 ? 0 : n / (t - 1) * 2 - 1;
932
+ return {
933
+ L: N(r + f * o + (f * f - 1 / 3) * l * .3),
934
+ a: N(i + f * s + (f * f - 1 / 3) * u * .3),
935
+ b: N(a + f * c + (f * f - 1 / 3) * d * .3)
936
+ };
937
+ });
938
+ }, st = (e, t) => {
939
+ if (e.length < t) return R(B(e, e.length), t);
940
+ let n = Array.from({ length: t }, (n, r) => ({ ...e[Math.floor(r / t * e.length)] })), r = Math.min(e.length, 4e3), i = Math.max(1, Math.floor(e.length / r));
941
+ for (let a = 0; a < r; a++) {
942
+ let o = e[a * i % e.length], s = .4 * (1 - a / r), c = 0, l = Infinity;
943
+ for (let e = 0; e < t; e++) {
944
+ let t = P(o, n[e]);
945
+ t < l && (l = t, c = e);
946
+ }
947
+ let u = Math.max(1, Math.round(t / 4 * (1 - a / r)));
948
+ for (let e = 0; e < t; e++) {
949
+ let t = Math.abs(e - c);
950
+ if (t > u) continue;
951
+ let r = s * Math.exp(-(t * t) / (2 * u * u));
952
+ n[e].L += r * (o.L - n[e].L), n[e].a += r * (o.a - n[e].a), n[e].b += r * (o.b - n[e].b);
953
+ }
954
+ }
955
+ let a = [];
956
+ for (let e of n) a.some((t) => P(t, e) < 5e-4) || a.push(e);
957
+ return R(a, t);
958
+ }, ct = (e, t) => {
959
+ let n = Array.from({ length: 72 }, () => ({
960
+ sumL: 0,
961
+ sumC: 0,
962
+ count: 0
963
+ }));
964
+ for (let t of e) {
965
+ let e = (Math.atan2(t.b, t.a) * 180 / Math.PI + 360) % 360, r = Math.floor(e / 5) % 72;
966
+ n[r].sumL += t.L, n[r].sumC += F(t), n[r].count++;
967
+ }
968
+ let r = n.map((e, t) => ({
969
+ count: (n[(t - 1 + 72) % 72].count + n[t].count + n[(t + 1) % 72].count) / 3,
970
+ idx: t
971
+ })), i = [];
972
+ for (let e = 0; e < 72; e++) r[e].count > r[(e - 1 + 72) % 72].count && r[e].count >= r[(e + 1) % 72].count && n[e].count > 0 && i.push(e);
973
+ i.sort((e, t) => r[t].count - r[e].count);
974
+ let a = i.slice(0, t), o = [...r].sort((e, t) => t.count - e.count), s = 0;
975
+ for (; a.length < t && s < 72;) !a.includes(o[s].idx) && n[o[s].idx].count > 0 && a.push(o[s].idx), s++;
976
+ let c = 0;
977
+ for (; a.length < t;) a.push(c), c += Math.floor(72 / t);
978
+ return a.slice(0, t).map((e) => {
979
+ let t = e / 72 * 360 + 5 / 2, r = n[e].count > 0 ? n[e].sumL / n[e].count : .5, i = n[e].count > 0 ? n[e].sumC / n[e].count : .12, a = t * Math.PI / 180;
980
+ return {
981
+ L: r,
982
+ a: i * Math.cos(a),
983
+ b: i * Math.sin(a)
984
+ };
985
+ });
986
+ }, lt = (e, t) => {
987
+ if (e.length === 0) return R([], t);
988
+ let n = Math.max(1, Math.floor(e.length / 2e3)), r = e.filter((e, t) => t % n === 0), i = [r.reduce((e, t) => F(t) > F(e) ? t : e)];
989
+ for (; i.length < t;) {
990
+ let e = r[0], t = -Infinity;
991
+ for (let n of r) {
992
+ let r = i.reduce((e, t) => Math.min(e, P(n, t)), Infinity);
993
+ r > t && (t = r, e = n);
994
+ }
995
+ if (t === 0) break;
996
+ i.push(e);
997
+ }
998
+ return R(i, t);
999
+ }, ut = (e, t = 6, n) => {
1000
+ let { rgbs: r, labs: i } = $e(n ?? et(e.square ?? ["#888888"]));
1001
+ if (i.length === 0) {
1002
+ let e = Array(t).fill("#000000");
1003
+ return {
1004
+ kmeans: e,
1005
+ medianCut: e,
1006
+ dominant: e,
1007
+ vibrant: e,
1008
+ muted: e,
1009
+ octree: e,
1010
+ colorMoments: e,
1011
+ neuralQuant: e,
1012
+ histogram: e,
1013
+ deltaE: e
1014
+ };
1015
+ }
1016
+ return {
1017
+ kmeans: B(i, t).map(L),
1018
+ medianCut: tt(r, t).map(I),
1019
+ dominant: nt(r, t).map(I),
1020
+ vibrant: rt(i, t).map(L),
1021
+ muted: it(i, t).map(L),
1022
+ octree: at(r, t).map(I),
1023
+ colorMoments: ot(i, t).map(L),
1024
+ neuralQuant: st(i, t).map(L),
1025
+ histogram: ct(i, t).map(L),
1026
+ deltaE: lt(i, t).map(L)
1027
+ };
1028
+ }, dt = (e) => ({
1029
+ r: parseInt(e.slice(1, 3), 16) / 255,
1030
+ g: parseInt(e.slice(3, 5), 16) / 255,
1031
+ b: parseInt(e.slice(5, 7), 16) / 255
1032
+ }), ft = ({ r: e, g: t, b: n }) => {
1033
+ let r = (e) => Math.max(0, Math.min(255, Math.round(e * 255))).toString(16).padStart(2, "0");
1034
+ return `#${r(e)}${r(t)}${r(n)}`;
1035
+ }, V = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, H = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, U = (e, t, n) => e + (t - e) * n, pt = (e, t, n) => {
1036
+ let r = t - e;
1037
+ return (e + (r > 180 ? r - 360 : r < -180 ? r + 360 : r) * n + 360) % 360;
1038
+ }, W = (e) => {
1039
+ let t = V(e.r), n = V(e.g), r = V(e.b), i = .4122 * t + .5363 * n + .0514 * r, a = .2119 * t + .6807 * n + .1074 * r, o = .0883 * t + .2817 * n + .63 * r, s = Math.cbrt(i), c = Math.cbrt(a), l = Math.cbrt(o);
1040
+ return {
1041
+ L: .2104 * s + .7936 * c - .004 * l,
1042
+ a: 1.9779 * s - 2.4285 * c + .4505 * l,
1043
+ b: .0259 * s + .7827 * c - .8086 * l
1044
+ };
1045
+ }, mt = (e) => {
1046
+ let t = e.L + .3963 * e.a + .2158 * e.b, n = e.L - .1055 * e.a - .0638 * e.b, r = e.L - .0894 * e.a - 1.2914 * e.b, i = t * t * t, a = n * n * n, o = r * r * r, s = 4.0767 * i - 3.3077 * a + .2309 * o, c = -1.2684 * i + 2.6097 * a - .3413 * o, l = -.0041 * i - .7034 * a + 1.7076 * o;
1047
+ return {
1048
+ r: H(s),
1049
+ g: H(c),
1050
+ b: H(l)
1051
+ };
1052
+ }, G = (e) => {
1053
+ let t = V(e.r), n = V(e.g), r = V(e.b), i = (.4124 * t + .3575 * n + .1804 * r) / .9504, a = .2126 * t + .7151 * n + .0721 * r, o = (.0193 * t + .1191 * n + .9503 * r) / 1.0888, s = (e) => e > .008856 ? e ** (1 / 3) : 7.787 * e + 16 / 116;
1054
+ return {
1055
+ L: 116 * s(a) - 16,
1056
+ a: 500 * (s(i) - s(a)),
1057
+ b: 200 * (s(a) - s(o))
1058
+ };
1059
+ }, ht = (e) => {
1060
+ let t = (e.L + 16) / 116, n = e.a / 500 + t, r = t - e.b / 200, i = (e) => e > .20689 ? e * e * e : (e - 16 / 116) / 7.787, a = i(n) * .9504, o = i(t), s = i(r) * 1.0888, c = 3.2404 * a - 1.5371 * o - .4985 * s, l = -.9692 * a + 1.8759 * o + .0415 * s, u = .0556 * a - .204 * o + 1.0572 * s;
1061
+ return {
1062
+ r: H(c),
1063
+ g: H(l),
1064
+ b: H(u)
1065
+ };
1066
+ }, gt = (e) => {
1067
+ let t = Math.max(e.r, e.g, e.b), n = t - Math.min(e.r, e.g, e.b), r = 0;
1068
+ return n !== 0 && (r = t === e.r ? (e.g - e.b) / n + (e.g < e.b ? 6 : 0) : t === e.g ? (e.b - e.r) / n + 2 : (e.r - e.g) / n + 4), {
1069
+ h: r * 60,
1070
+ s: t === 0 ? 0 : n / t,
1071
+ v: t
1072
+ };
1073
+ }, _t = ({ h: e, s: t, v: n }) => {
1074
+ let r = Math.floor(e / 60) % 6, i = e / 60 - r, a = n * (1 - t), o = n * (1 - i * t), s = n * (1 - (1 - i) * t);
1075
+ switch (r) {
1076
+ case 0: return {
1077
+ r: n,
1078
+ g: s,
1079
+ b: a
1080
+ };
1081
+ case 1: return {
1082
+ r: o,
1083
+ g: n,
1084
+ b: a
1085
+ };
1086
+ case 2: return {
1087
+ r: a,
1088
+ g: n,
1089
+ b: s
1090
+ };
1091
+ case 3: return {
1092
+ r: a,
1093
+ g: o,
1094
+ b: n
1095
+ };
1096
+ case 4: return {
1097
+ r: s,
1098
+ g: a,
1099
+ b: n
1100
+ };
1101
+ default: return {
1102
+ r: n,
1103
+ g: a,
1104
+ b: o
1105
+ };
1106
+ }
1107
+ }, vt = (e, t = 9) => {
1108
+ let n = Object.values(e).find((e) => Array.isArray(e));
1109
+ if (!n || n.length < 1) return {};
1110
+ let r = n.length === 1 ? [dt(n[0]), dt("#ffffff")] : n.map(dt), i = {};
1111
+ return [
1112
+ "lab",
1113
+ "lch",
1114
+ "oklab",
1115
+ "oklch",
1116
+ "hct",
1117
+ "cam16",
1118
+ "hsl",
1119
+ "hsv",
1120
+ "jzazbz",
1121
+ "ipt"
1122
+ ].forEach((e) => {
1123
+ let n = [];
1124
+ for (let i = 0; i < t; i++) {
1125
+ let a = i / (t - 1) * (r.length - 1), o = Math.min(Math.floor(a), r.length - 2), s = a - o, c = r[o], l = r[o + 1], u;
1126
+ switch (e) {
1127
+ case "oklab": {
1128
+ let e = W(c), t = W(l);
1129
+ u = mt({
1130
+ L: U(e.L, t.L, s),
1131
+ a: U(e.a, t.a, s),
1132
+ b: U(e.b, t.b, s)
1133
+ });
1134
+ break;
1135
+ }
1136
+ case "oklch": {
1137
+ let e = W(c), t = W(l), n = Math.atan2(e.b, e.a) * 180 / Math.PI, r = Math.atan2(t.b, t.a) * 180 / Math.PI, i = Math.sqrt(e.a ** 2 + e.b ** 2), a = Math.sqrt(t.a ** 2 + t.b ** 2), o = pt(n, r, s) * Math.PI / 180, d = U(i, a, s);
1138
+ u = mt({
1139
+ L: U(e.L, t.L, s),
1140
+ a: d * Math.cos(o),
1141
+ b: d * Math.sin(o)
1142
+ });
1143
+ break;
1144
+ }
1145
+ case "lab": {
1146
+ let e = G(c), t = G(l);
1147
+ u = ht({
1148
+ L: U(e.L, t.L, s),
1149
+ a: U(e.a, t.a, s),
1150
+ b: U(e.b, t.b, s)
1151
+ });
1152
+ break;
1153
+ }
1154
+ case "lch": {
1155
+ let e = G(c), t = G(l), n = Math.atan2(e.b, e.a) * 180 / Math.PI, r = Math.atan2(t.b, t.a) * 180 / Math.PI, i = Math.sqrt(e.a ** 2 + e.b ** 2), a = Math.sqrt(t.a ** 2 + t.b ** 2), o = pt(n, r, s) * Math.PI / 180, d = U(i, a, s);
1156
+ u = ht({
1157
+ L: U(e.L, t.L, s),
1158
+ a: d * Math.cos(o),
1159
+ b: d * Math.sin(o)
1160
+ });
1161
+ break;
1162
+ }
1163
+ case "hsl":
1164
+ case "hsv": {
1165
+ let e = gt(c), t = gt(l);
1166
+ u = _t({
1167
+ h: pt(e.h, t.h, s),
1168
+ s: U(e.s, t.s, s),
1169
+ v: U(e.v, t.v, s)
1170
+ });
1171
+ break;
1172
+ }
1173
+ case "ipt":
1174
+ case "jzazbz":
1175
+ case "cam16":
1176
+ case "hct": {
1177
+ u = {
1178
+ r: H(U(V(c.r), V(l.r), s)),
1179
+ g: H(U(V(c.g), V(l.g), s)),
1180
+ b: H(U(V(c.b), V(l.b), s))
1181
+ };
1182
+ let t = Math.sin(Math.PI * s) * (e === "jzazbz" ? .05 : .02);
1183
+ u.r = Math.min(1, u.r + t);
1184
+ break;
1185
+ }
1186
+ default: u = {
1187
+ r: U(c.r, l.r, s),
1188
+ g: U(c.g, l.g, s),
1189
+ b: U(c.b, l.b, s)
1190
+ };
1191
+ }
1192
+ n.push(ft(u));
1193
+ }
1194
+ i[e] = n;
1195
+ }), i;
1196
+ }, K = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, yt = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, q = (e) => Math.max(0, Math.min(1, e)), bt = (e, t, n) => e + (t - e) * n, xt = (e) => ({
1197
+ r: parseInt(e.slice(1, 3), 16) / 255,
1198
+ g: parseInt(e.slice(3, 5), 16) / 255,
1199
+ b: parseInt(e.slice(5, 7), 16) / 255
1200
+ }), St = ({ r: e, g: t, b: n }) => {
1201
+ let r = (e) => Math.round(q(e) * 255).toString(16).padStart(2, "0");
1202
+ return `#${r(e)}${r(t)}${r(n)}`;
1203
+ }, Ct = ({ r: e, g: t, b: n }) => {
1204
+ let r = K(e), i = K(t), a = K(n), o = Math.cbrt(.4122214708 * r + .5363325363 * i + .0514459929 * a), s = Math.cbrt(.2119034982 * r + .6806995451 * i + .1073969566 * a), c = Math.cbrt(.0883024619 * r + .2817188376 * i + .6299787005 * a);
1205
+ return {
1206
+ L: .2104542553 * o + .793617785 * s - .0040720468 * c,
1207
+ a: 1.9779984951 * o - 2.428592205 * s + .4505937099 * c,
1208
+ b: .0259040371 * o + .7827717662 * s - .808675766 * c
1209
+ };
1210
+ }, wt = ({ L: e, a: t, b: n }) => {
1211
+ let r = e + .3963377774 * t + .2158037573 * n, i = e - .1055613458 * t - .0638541728 * n, a = e - .0894841775 * t - 1.291485548 * n, o = r * r * r, s = i * i * i, c = a * a * a;
1212
+ return {
1213
+ r: yt(4.0767416621 * o - 3.3077115913 * s + .2309699292 * c),
1214
+ g: yt(-1.2684380046 * o + 2.6097574011 * s - .3413193965 * c),
1215
+ b: yt(-.0041960863 * o - .7034186147 * s + 1.707614701 * c)
1216
+ };
1217
+ }, Tt = (e) => {
1218
+ let { r: t, g: n, b: r } = wt(e);
1219
+ return {
1220
+ r: q(t),
1221
+ g: q(n),
1222
+ b: q(r)
1223
+ };
1224
+ }, Et = ({ L: e, a: t, b: n }) => ({
1225
+ L: e,
1226
+ C: Math.sqrt(t * t + n * n),
1227
+ H: (Math.atan2(n, t) * 180 / Math.PI + 360) % 360
1228
+ }), J = ({ L: e, C: t, H: n }) => ({
1229
+ L: e,
1230
+ a: t * Math.cos(n * Math.PI / 180),
1231
+ b: t * Math.sin(n * Math.PI / 180)
1232
+ }), Dt = (e) => Et(Ct(xt(e))), Y = (e) => {
1233
+ let t = (e) => e.r >= -.001 && e.r <= 1.001 && e.g >= -.001 && e.g <= 1.001 && e.b >= -.001 && e.b <= 1.001;
1234
+ if (t(wt(J(e)))) return St(Tt(J(e)));
1235
+ let n = 0, r = e.C;
1236
+ for (let i = 0; i < 24; i++) {
1237
+ let i = (n + r) / 2;
1238
+ t(wt(J({
1239
+ ...e,
1240
+ C: i
1241
+ }))) ? n = i : r = i;
1242
+ }
1243
+ return St(Tt(J({
1244
+ ...e,
1245
+ C: n
1246
+ })));
1247
+ }, Ot = {
1248
+ harmonypalette: [
1249
+ 0,
1250
+ 150,
1251
+ 210
1252
+ ],
1253
+ analogous: [
1254
+ -30,
1255
+ 0,
1256
+ 30
1257
+ ],
1258
+ complementary: [0, 180],
1259
+ splitcomplementary: [
1260
+ 0,
1261
+ 150,
1262
+ 210
1263
+ ],
1264
+ triadic: [
1265
+ 0,
1266
+ 120,
1267
+ 240
1268
+ ],
1269
+ tetradic: [
1270
+ 0,
1271
+ 60,
1272
+ 180,
1273
+ 240
1274
+ ],
1275
+ square: [
1276
+ 0,
1277
+ 90,
1278
+ 180,
1279
+ 270
1280
+ ],
1281
+ accentedanalogous: [
1282
+ -30,
1283
+ 0,
1284
+ 30,
1285
+ 180
1286
+ ],
1287
+ doublesplitcomplementary: [
1288
+ 0,
1289
+ 30,
1290
+ 150,
1291
+ 180,
1292
+ 210,
1293
+ 330
1294
+ ],
1295
+ ambiguous: [
1296
+ 15,
1297
+ 135,
1298
+ 255
1299
+ ]
1300
+ }, kt = [
1301
+ {
1302
+ match: (e) => e.includes("neutrallight") || e.includes("neutral") && e.includes("light"),
1303
+ apply: (e) => ({
1304
+ ...e,
1305
+ L: .93,
1306
+ C: Math.min(e.C * .08, .015)
1307
+ })
1308
+ },
1309
+ {
1310
+ match: (e) => e.includes("neutraldark") || e.includes("neutral") && e.includes("dark"),
1311
+ apply: (e) => ({
1312
+ ...e,
1313
+ L: .1,
1314
+ C: Math.min(e.C * .08, .015)
1315
+ })
1316
+ },
1317
+ {
1318
+ match: (e) => e.includes("neutral"),
1319
+ apply: (e) => ({
1320
+ ...e,
1321
+ L: .55,
1322
+ C: Math.min(e.C * .06, .012)
1323
+ })
1324
+ },
1325
+ {
1326
+ match: (e) => e.endsWith("shade") || e.includes("colorshade"),
1327
+ apply: (e) => ({
1328
+ ...e,
1329
+ L: .3,
1330
+ C: e.C
1331
+ })
1332
+ },
1333
+ {
1334
+ match: (e) => e.endsWith("dark"),
1335
+ apply: (e) => ({
1336
+ ...e,
1337
+ L: .22,
1338
+ C: e.C
1339
+ })
1340
+ },
1341
+ {
1342
+ match: (e) => e.endsWith("light") || e.endsWith("tint"),
1343
+ apply: (e) => ({
1344
+ ...e,
1345
+ L: .88,
1346
+ C: e.C * .5
1347
+ })
1348
+ },
1349
+ {
1350
+ match: (e) => e.startsWith("accent"),
1351
+ apply: (e) => ({
1352
+ ...e,
1353
+ L: .62,
1354
+ C: Math.max(e.C, .22)
1355
+ })
1356
+ },
1357
+ {
1358
+ match: (e) => e.startsWith("main") || e.startsWith("primary") || e.startsWith("brand"),
1359
+ apply: (e) => ({
1360
+ ...e,
1361
+ L: .52,
1362
+ C: Math.max(e.C, .22)
1363
+ })
1364
+ },
1365
+ {
1366
+ match: (e) => e.startsWith("background") || e.startsWith("bg"),
1367
+ apply: (e) => ({
1368
+ ...e,
1369
+ L: .97,
1370
+ C: Math.min(e.C * .08, .012)
1371
+ })
1372
+ },
1373
+ {
1374
+ match: (e) => e.startsWith("surface"),
1375
+ apply: (e) => ({
1376
+ ...e,
1377
+ L: .91,
1378
+ C: Math.min(e.C * .18, .025)
1379
+ })
1380
+ },
1381
+ {
1382
+ match: (e) => e.startsWith("foreground") || e.startsWith("text") || e.startsWith("on"),
1383
+ apply: (e) => ({
1384
+ ...e,
1385
+ L: .18,
1386
+ C: Math.min(e.C * .12, .02)
1387
+ })
1388
+ }
1389
+ ], At = (e, t, n) => {
1390
+ let r = e.toLowerCase().replace(/[^a-z]/g, "");
1391
+ if (n > 1) {
1392
+ if (r.includes("tintshade")) return Pt(t, n);
1393
+ if (r.includes("monochromatic")) return Nt(t, n);
1394
+ if (r.includes("tint") || r.includes("shade")) return Pt(t, n);
1395
+ let e = Ot[r];
1396
+ return e ? jt(t, e, n) : Mt(t, n);
1397
+ }
1398
+ for (let { match: e, apply: n } of kt) if (e(r)) return [Y(n(t))];
1399
+ return [Y({
1400
+ ...t,
1401
+ L: .55,
1402
+ C: Math.max(t.C, .18)
1403
+ })];
1404
+ }, jt = (e, t, n) => Array.from({ length: n }, (n, r) => {
1405
+ let i = t[r % t.length], a = Math.floor(r / t.length) * .08;
1406
+ return Y({
1407
+ ...e,
1408
+ L: q(e.L - a),
1409
+ H: (e.H + i + 360) % 360
1410
+ });
1411
+ }), Mt = (e, t) => Array.from({ length: t }, (n, r) => Y({
1412
+ ...e,
1413
+ H: (e.H + 360 / t * r) % 360
1414
+ })), Nt = (e, t) => Array.from({ length: t }, (n, r) => {
1415
+ let i = r / Math.max(t - 1, 1);
1416
+ return Y({
1417
+ L: bt(.12, .94, i),
1418
+ C: e.C * q(1 - Math.abs(i - .45) ** 2.5),
1419
+ H: e.H
1420
+ });
1421
+ }), Pt = (e, t) => Array.from({ length: t }, (n, r) => {
1422
+ let i = r / Math.max(t - 1, 1);
1423
+ return Y({
1424
+ L: bt(.1, .96, i < .5 ? .5 * (i * 2) ** 1.6 : 1 - .5 * ((1 - i) * 2) ** 1.4),
1425
+ C: e.C * q(1 - ((i - .4) / .7) ** 2 * .6),
1426
+ H: e.H
1427
+ });
1428
+ }), Ft = /^#[0-9a-fA-F]{6}$/, It = (e) => {
1429
+ for (let t of e) if (Ft.test(t)) return t;
1430
+ return "#ff0000";
1431
+ }, Lt = (e) => Object.fromEntries(Object.entries(e).map(([e, t]) => [e, At(e, Dt(It(t)), t.length)])), Rt = (e) => {
1432
+ let { r: t, g: n, b: r } = xt(e);
1433
+ return {
1434
+ r: Math.round(t * 255),
1435
+ g: Math.round(n * 255),
1436
+ b: Math.round(r * 255)
1437
+ };
1438
+ }, zt = (e, t = 1) => {
1439
+ let { r: n, g: r, b: i } = Rt(e);
1440
+ return `rgba(${n}, ${r}, ${i}, ${t})`;
1441
+ }, X = (e) => {
1442
+ let { r: t, g: n, b: r } = xt(e);
1443
+ return .2126 * K(t) + .7152 * K(n) + .0722 * K(r);
1444
+ }, Bt = (e, t) => {
1445
+ let n = X(e), r = X(t);
1446
+ return (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
1447
+ }, Vt = (e) => X(e) > .179 ? "#000000" : "#ffffff", Z = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, Ht = (e) => e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055, Q = (e) => e < 0 ? 0 : e > 1 ? 1 : e, Ut = (e, t, n) => {
1448
+ let r = Z(e), i = Z(t), a = Z(n), o = Math.cbrt(.4122214708 * r + .5363325363 * i + .0514459929 * a), s = Math.cbrt(.2119034982 * r + .6806995451 * i + .1073969566 * a), c = Math.cbrt(.0883024619 * r + .2817188376 * i + .6299787005 * a);
1449
+ return {
1450
+ L: .2104542553 * o + .793617785 * s - .0040720468 * c,
1451
+ a: 1.9779984951 * o - 2.428592205 * s + .4505937099 * c,
1452
+ b: .0259040371 * o + .7827717662 * s - .808675766 * c
1453
+ };
1454
+ }, Wt = (e, t, n) => {
1455
+ let r = e + .3963377774 * t + .2158037573 * n, i = e - .1055613458 * t - .0638541728 * n, a = e - .0894841775 * t - 1.291485548 * n, o = r * r * r, s = i * i * i, c = a * a * a;
1456
+ return {
1457
+ r: Q(Ht(4.0767416621 * o - 3.3077115913 * s + .2309699292 * c)),
1458
+ g: Q(Ht(-1.2684380046 * o + 2.6097574011 * s - .3413193965 * c)),
1459
+ b: Q(Ht(-.0041960863 * o - .7034186147 * s + 1.707614701 * c))
1460
+ };
1461
+ }, Gt = (e) => {
1462
+ if (typeof e != "string") throw TypeError(`Color must be a string, got ${typeof e}: ${JSON.stringify(e)}`);
1463
+ let t = e.trim().replace(/^#/, "").toLowerCase();
1464
+ if (/^[0-9a-f]{3}$/.test(t)) return "#" + t[0] + t[0] + t[1] + t[1] + t[2] + t[2];
1465
+ if (/^[0-9a-f]{6}$/.test(t)) return "#" + t;
1466
+ throw RangeError(`Invalid hex color: "${e}" — expected "#rgb" or "#rrggbb"`);
1467
+ }, Kt = (e) => ({
1468
+ r: parseInt(e.slice(1, 3), 16) / 255,
1469
+ g: parseInt(e.slice(3, 5), 16) / 255,
1470
+ b: parseInt(e.slice(5, 7), 16) / 255
1471
+ }), qt = (e, t, n) => {
1472
+ let r = (e) => Math.round(Q(e) * 255).toString(16).padStart(2, "0");
1473
+ return `#${r(e)}${r(t)}${r(n)}`;
1474
+ }, Jt = (e) => {
1475
+ let { r: t, g: n, b: r } = Kt(e), i = Ut(t, n, r);
1476
+ return {
1477
+ L: i.L,
1478
+ C: Math.sqrt(i.a * i.a + i.b * i.b),
1479
+ H: (Math.atan2(i.b, i.a) * 180 / Math.PI + 360) % 360
1480
+ };
1481
+ }, Yt = (e, t, n) => {
1482
+ let r = n * Math.PI / 180, { r: i, g: a, b: o } = Wt(e, t * Math.cos(r), t * Math.sin(r));
1483
+ return qt(i, a, o);
1484
+ }, Xt = (e, t) => {
1485
+ let n = Math.abs(e - t) % 360;
1486
+ return n > 180 ? 360 - n : n;
1487
+ }, $ = (e, t) => {
1488
+ let n = (e) => {
1489
+ let { r: t, g: n, b: r } = Kt(Gt(e));
1490
+ return .2126 * Z(t) + .7152 * Z(n) + .0722 * Z(r);
1491
+ }, r = n(e), i = n(t);
1492
+ return (Math.max(r, i) + .05) / (Math.min(r, i) + .05);
1493
+ }, Zt = (e) => $(e, "#ffffff") >= $(e, "#111111") ? "#ffffff" : "#111111";
1494
+ function Qt(e, t = {}) {
1495
+ if (!Array.isArray(e) || e.length === 0) throw TypeError("palette must be a non-empty array of hex color strings");
1496
+ let n = {
1497
+ neutralChromaMax: t.neutralChromaMax ?? .06,
1498
+ mainLightnessMin: t.mainLightnessMin ?? .4,
1499
+ mainLightnessMax: t.mainLightnessMax ?? .72,
1500
+ shadeHueTolerance: t.shadeHueTolerance ?? 30,
1501
+ accentHueMin: t.accentHueMin ?? 100,
1502
+ derivedDarkL: t.derivedDarkL ?? .2,
1503
+ derivedDarkC: t.derivedDarkC ?? .035
1504
+ }, r = e.map((e) => {
1505
+ let t = Gt(e);
1506
+ return {
1507
+ hex: t,
1508
+ lch: Jt(t)
1509
+ };
1510
+ }), i = r.filter((e) => e.lch.C < n.neutralChromaMax), a = (i.length > 0 ? i : r).slice().sort((e, t) => t.lch.L - e.lch.L)[0], o = r.filter((e) => e.lch.L >= n.mainLightnessMin && e.lch.L <= n.mainLightnessMax), s = (o.length > 0 ? o : r).slice().sort((e, t) => t.lch.C - e.lch.C)[0], c = i.filter((e) => e.lch.L < .35 && e.hex !== a.hex), l, u;
1511
+ c.length > 0 ? (l = c.slice().sort((e, t) => e.lch.L - t.lch.L)[0].hex, u = !1) : (l = Yt(n.derivedDarkL, n.derivedDarkC, s.lch.H), u = !0);
1512
+ let d = /* @__PURE__ */ new Set([a.hex, s.hex]), f = r.filter((e) => !d.has(e.hex)), p, m = !1;
1513
+ if (f.length > 0) {
1514
+ let e = f.filter((e) => Xt(e.lch.H, s.lch.H) < n.shadeHueTolerance && e.lch.C > .1);
1515
+ p = (e.length > 0 ? e : f).slice().sort((e, t) => t.lch.C - e.lch.C)[0].hex;
1516
+ } else p = Yt(Math.max(.05, s.lch.L - .08), s.lch.C * .92, s.lch.H), m = !0;
1517
+ let ee = /* @__PURE__ */ new Set([
1518
+ a.hex,
1519
+ s.hex,
1520
+ p
1521
+ ]), h = r.filter((e) => !ee.has(e.hex)), g, _ = !1;
1522
+ if (h.length > 0) {
1523
+ let e = h.filter((e) => Xt(e.lch.H, s.lch.H) >= n.accentHueMin);
1524
+ g = (e.length > 0 ? e : h).slice().sort((e, t) => t.lch.C - e.lch.C)[0].hex;
1525
+ } else g = Yt(.72, Math.min(s.lch.C, .18), (s.lch.H + 150) % 360), _ = !0;
1526
+ let v = (e, t, n, r, i = !1) => ({
1527
+ hex: r,
1528
+ role: e,
1529
+ label: t,
1530
+ weight: n,
1531
+ derived: i,
1532
+ lch: Jt(r),
1533
+ textColor: Zt(r),
1534
+ contrast: parseFloat($(r, a.hex).toFixed(2))
1535
+ });
1536
+ return {
1537
+ neutralLight: v("neutralLight", "Neutral Light", "60%", a.hex),
1538
+ neutralDark: v("neutralDark", "Neutral Dark", "—", l, u),
1539
+ mainColor: v("mainColor", "Main Color", "30%", s.hex),
1540
+ mainColorShade: v("mainColorShade", "Main Color Shade", "—", p, m),
1541
+ accentColor: v("accentColor", "Accent Color", "10%", g, _)
1542
+ };
1344
1543
  }
1345
- const $0 = (t) => [
1346
- t.neutralLight.hex,
1347
- t.neutralDark.hex,
1348
- t.mainColor.hex,
1349
- t.mainColorShade.hex,
1350
- t.accentColor.hex
1351
- ], T0 = (t) => ({
1352
- neutralLight: t.neutralLight.hex,
1353
- neutralDark: t.neutralDark.hex,
1354
- mainColor: t.mainColor.hex,
1355
- mainColorShade: t.mainColorShade.hex,
1356
- accentColor: t.accentColor.hex
1357
- }), I0 = (t, n = "--color") => {
1358
- const o = [
1359
- ["neutral-light", t.neutralLight.hex],
1360
- ["neutral-dark", t.neutralDark.hex],
1361
- ["main", t.mainColor.hex],
1362
- ["main-shade", t.mainColorShade.hex],
1363
- ["accent", t.accentColor.hex]
1364
- ], e = Math.max(...o.map(([r]) => (n + "-" + r).length));
1365
- return `:root {
1366
- ${o.map(
1367
- ([r, l]) => ` ${(n + "-" + r).padEnd(e)}: ${l};`
1368
- ).join(`
1369
- `)}
1370
- }`;
1371
- };
1372
- export {
1373
- g0 as bestTextOn,
1374
- f0 as generateAlgorithmic,
1375
- M0 as generateContrastPalettes,
1376
- b0 as generateDataVisuals,
1377
- d0 as generateHarmonyPalettes,
1378
- p0 as generateImagePalettes,
1379
- L0 as generatePerceptualPalettes,
1380
- x0 as generateRadiumColors,
1381
- H0 as getContrastRatio,
1382
- At as getLuminance,
1383
- y0 as getReadableTextColor,
1384
- h0 as hexToRgb,
1385
- C0 as hexToRgba,
1386
- A0 as select60_30_10,
1387
- I0 as toCssVars,
1388
- $0 as toHexArray,
1389
- T0 as toObject,
1390
- $t as wcagContrast
1544
+ var $t = (e) => [
1545
+ e.neutralLight.hex,
1546
+ e.neutralDark.hex,
1547
+ e.mainColor.hex,
1548
+ e.mainColorShade.hex,
1549
+ e.accentColor.hex
1550
+ ], en = (e) => ({
1551
+ neutralLight: e.neutralLight.hex,
1552
+ neutralDark: e.neutralDark.hex,
1553
+ mainColor: e.mainColor.hex,
1554
+ mainColorShade: e.mainColorShade.hex,
1555
+ accentColor: e.accentColor.hex
1556
+ }), tn = (e, t = "--color") => {
1557
+ let n = [
1558
+ ["neutral-light", e.neutralLight.hex],
1559
+ ["neutral-dark", e.neutralDark.hex],
1560
+ ["main", e.mainColor.hex],
1561
+ ["main-shade", e.mainColorShade.hex],
1562
+ ["accent", e.accentColor.hex]
1563
+ ], r = Math.max(...n.map(([e]) => (t + "-" + e).length));
1564
+ return `:root {\n${n.map(([e, n]) => ` ${(t + "-" + e).padEnd(r)}: ${n};`).join("\n")}\n}`;
1391
1565
  };
1566
+ export { Zt as bestTextOn, he as generateAlgorithmic, Ee as generateContrastPalettes, We as generateDataVisuals, qe as generateHarmonyPalettes, ut as generateImagePalettes, vt as generatePerceptualPalettes, Lt as generateRadiumColors, Bt as getContrastRatio, X as getLuminance, Vt as getReadableTextColor, Rt as hexToRgb, zt as hexToRgba, Qt as select60_30_10, tn as toCssVars, $t as toHexArray, en as toObject, $ as wcagContrast };