@studiotoolkit/color-palette-generator 1.0.0

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.
package/dist/index.mjs ADDED
@@ -0,0 +1,1391 @@
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
+ };
1344
+ }
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
1391
+ };