@gryt/theme 0.6.0 → 0.8.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.js CHANGED
@@ -1,13 +1,13 @@
1
- function N(r) {
1
+ function _(r) {
2
2
  return r <= 0.04045 ? r / 12.92 : ((r + 0.055) / 1.055) ** 2.4;
3
3
  }
4
- function v(r) {
4
+ function A(r) {
5
5
  return r <= 31308e-7 ? 12.92 * r : 1.055 * r ** (1 / 2.4) - 0.055;
6
6
  }
7
- function L(r) {
7
+ function x(r) {
8
8
  return Math.min(1, Math.max(0, r));
9
9
  }
10
- function x(r) {
10
+ function H(r) {
11
11
  const a = r.replace("#", ""), t = a.length === 3 ? a.split("").map((e) => e + e).join("") : a;
12
12
  return [
13
13
  parseInt(t.slice(0, 2), 16) / 255,
@@ -15,40 +15,40 @@ function x(r) {
15
15
  parseInt(t.slice(4, 6), 16) / 255
16
16
  ];
17
17
  }
18
- function I([r, a, t]) {
19
- const e = (o) => Math.round(L(o) * 255).toString(16).padStart(2, "0");
18
+ function N([r, a, t]) {
19
+ const e = (o) => Math.round(x(o) * 255).toString(16).padStart(2, "0");
20
20
  return `#${e(r)}${e(a)}${e(t)}`;
21
21
  }
22
- function S(r) {
23
- const [a, t, e] = x(r).map(N), o = Math.cbrt(
22
+ function R(r) {
23
+ const [a, t, e] = H(r).map(_), o = Math.cbrt(
24
24
  0.4122214708 * a + 0.5363325363 * t + 0.0514459929 * e
25
25
  ), c = Math.cbrt(
26
26
  0.2119034982 * a + 0.6806995451 * t + 0.1073969566 * e
27
27
  ), n = Math.cbrt(
28
28
  0.0883024619 * a + 0.2817188376 * t + 0.6299787005 * e
29
- ), f = 0.2104542553 * o + 0.793617785 * c - 0.0040720468 * n, d = 1.9779984951 * o - 2.428592205 * c + 0.4505937099 * n, g = 0.0259040371 * o + 0.7827717662 * c - 0.808675766 * n;
29
+ ), d = 0.2104542553 * o + 0.793617785 * c - 0.0040720468 * n, f = 1.9779984951 * o - 2.428592205 * c + 0.4505937099 * n, g = 0.0259040371 * o + 0.7827717662 * c - 0.808675766 * n;
30
30
  return {
31
- l: f,
32
- c: Math.hypot(d, g),
33
- h: (Math.atan2(g, d) * 180 / Math.PI + 360) % 360
31
+ l: d,
32
+ c: Math.hypot(f, g),
33
+ h: (Math.atan2(g, f) * 180 / Math.PI + 360) % 360
34
34
  };
35
35
  }
36
- function y({ l: r, c: a, h: t }) {
37
- const e = a * Math.cos(t * Math.PI / 180), o = a * Math.sin(t * Math.PI / 180), c = (r + 0.3963377774 * e + 0.2158037573 * o) ** 3, n = (r - 0.1055613458 * e - 0.0638541728 * o) ** 3, f = (r - 0.0894841775 * e - 1.291485548 * o) ** 3;
38
- return I([
39
- v(L(4.0767416621 * c - 3.3077115913 * n + 0.2309699292 * f)),
40
- v(L(-1.2684380046 * c + 2.6097574011 * n - 0.3413193965 * f)),
41
- v(L(-0.0041960863 * c - 0.7034186147 * n + 1.707614701 * f))
36
+ function m({ l: r, c: a, h: t }) {
37
+ const e = a * Math.cos(t * Math.PI / 180), o = a * Math.sin(t * Math.PI / 180), c = (r + 0.3963377774 * e + 0.2158037573 * o) ** 3, n = (r - 0.1055613458 * e - 0.0638541728 * o) ** 3, d = (r - 0.0894841775 * e - 1.291485548 * o) ** 3;
38
+ return N([
39
+ A(x(4.0767416621 * c - 3.3077115913 * n + 0.2309699292 * d)),
40
+ A(x(-1.2684380046 * c + 2.6097574011 * n - 0.3413193965 * d)),
41
+ A(x(-0.0041960863 * c - 0.7034186147 * n + 1.707614701 * d))
42
42
  ]);
43
43
  }
44
- const B = [0.195, 0.24, 0.27, 0.3, 0.33, 0.37, 0.43, 0.52], F = [0.014, 0.026, 0.04, 0.052, 0.062, 0.072, 0.084, 0.1];
44
+ const Y = [0.195, 0.24, 0.27, 0.3, 0.33, 0.37, 0.43, 0.52], z = [0.014, 0.026, 0.04, 0.052, 0.062, 0.072, 0.084, 0.1];
45
45
  function h(r, a) {
46
- const { h: t } = S(r), e = B.map((f, d) => y({ l: f, c: F[d], h: t }));
46
+ const { h: t } = R(r), e = Y.map((d, f) => m({ l: d, c: z[f], h: t }));
47
47
  e.push(r, a);
48
- const o = S(a).l, c = Math.min(0.95, Math.max(0.84, o + 0.04)), n = Math.min(0.98, Math.max(c + 0.06, 0.93));
49
- return e.push(y({ l: c, c: 0.11, h: t })), e.push(y({ l: n, c: 0.055, h: t })), e;
48
+ const o = R(a).l, c = Math.min(0.95, Math.max(0.84, o + 0.04)), n = Math.min(0.98, Math.max(c + 0.06, 0.93));
49
+ return e.push(m({ l: c, c: 0.11, h: t })), e.push(m({ l: n, c: 0.055, h: t })), e;
50
50
  }
51
- const W = [
51
+ const q = [
52
52
  0.187,
53
53
  0.231,
54
54
  0.245,
@@ -83,28 +83,28 @@ function U(r) {
83
83
  5: r.border,
84
84
  10: r.muted,
85
85
  11: r.text
86
- }, t = S(r.border).h;
87
- return W.map(
88
- (e, o) => a[o] ?? y({ l: e, c: K[o], h: t })
86
+ }, t = R(r.border).h;
87
+ return q.map(
88
+ (e, o) => a[o] ?? m({ l: e, c: K[o], h: t })
89
89
  );
90
90
  }
91
- function w(r, a) {
92
- const t = x(a);
91
+ function S(r, a) {
92
+ const t = H(a);
93
93
  return r.map((e) => {
94
- const o = x(e);
94
+ const o = H(e);
95
95
  let c = 0;
96
96
  for (let u = 0; u < 3; u++) {
97
- const i = o[u], m = t[u];
98
- i > m ? c = Math.max(c, m < 1 ? (i - m) / (1 - m) : 0) : i < m && (c = Math.max(c, m > 0 ? (m - i) / m : 0));
97
+ const i = o[u], p = t[u];
98
+ i > p ? c = Math.max(c, p < 1 ? (i - p) / (1 - p) : 0) : i < p && (c = Math.max(c, p > 0 ? (p - i) / p : 0));
99
99
  }
100
100
  if (c < 1e-6) return "transparent";
101
- const n = I(
102
- o.map((u, i) => L(t[i] + (u - t[i]) / c))
103
- ), [f, d, g] = x(n).map((u) => Math.round(u * 255));
104
- return `rgb(${f} ${d} ${g} / ${(c * 100).toFixed(1)}%)`;
101
+ const n = N(
102
+ o.map((u, i) => x(t[i] + (u - t[i]) / c))
103
+ ), [d, f, g] = H(n).map((u) => Math.round(u * 255));
104
+ return `rgb(${d} ${f} ${g} / ${(c * 100).toFixed(1)}%)`;
105
105
  });
106
106
  }
107
- const q = [
107
+ const J = [
108
108
  0.962,
109
109
  1,
110
110
  0.978,
@@ -117,7 +117,7 @@ const q = [
117
117
  0.61,
118
118
  0.48,
119
119
  0.25
120
- ], J = [
120
+ ], X = [
121
121
  6e-3,
122
122
  0,
123
123
  4e-3,
@@ -130,8 +130,8 @@ const q = [
130
130
  0.014,
131
131
  0.012,
132
132
  0.014
133
- ], X = [0.975, 0.955, 0.93, 0.905, 0.878, 0.845, 0.795, 0.72], Q = [0.012, 0.024, 0.038, 0.05, 0.062, 0.074, 0.09, 0.11];
134
- function C(r) {
133
+ ], Q = [0.975, 0.955, 0.93, 0.905, 0.878, 0.845, 0.795, 0.72], V = [0.012, 0.024, 0.038, 0.05, 0.062, 0.074, 0.09, 0.11];
134
+ function F(r) {
135
135
  const a = {
136
136
  0: r.bg,
137
137
  1: r.surface,
@@ -139,23 +139,23 @@ function C(r) {
139
139
  5: r.border,
140
140
  10: r.muted,
141
141
  11: r.text
142
- }, t = S(r.border).h;
143
- return q.map(
144
- (e, o) => a[o] ?? y({ l: e, c: J[o], h: t })
142
+ }, t = R(r.border).h;
143
+ return J.map(
144
+ (e, o) => a[o] ?? m({ l: e, c: X[o], h: t })
145
145
  );
146
146
  }
147
147
  function b(r) {
148
- const { l: a, c: t, h: e } = S(r), o = X.map(
149
- (c, n) => y({ l: c, c: Q[n], h: e })
148
+ const { l: a, c: t, h: e } = R(r), o = Q.map(
149
+ (c, n) => m({ l: c, c: V[n], h: e })
150
150
  );
151
- return o.push(r), o.push(y({ l: Math.max(0, a - 0.07), c: t, h: e })), o.push(y({ l: 0.46, c: 0.15, h: e })), o.push(y({ l: 0.33, c: 0.1, h: e })), o;
151
+ return o.push(r), o.push(m({ l: Math.max(0, a - 0.07), c: t, h: e })), o.push(m({ l: 0.46, c: 0.15, h: e })), o.push(m({ l: 0.33, c: 0.1, h: e })), o;
152
152
  }
153
- function G(r) {
154
- const [a, t, e] = x(r).map(N);
153
+ function E(r) {
154
+ const [a, t, e] = H(r).map(_);
155
155
  return 0.2126 * a + 0.7152 * t + 0.0722 * e;
156
156
  }
157
157
  function se(r, a) {
158
- const t = G(r), e = G(a);
158
+ const t = E(r), e = E(a);
159
159
  return (Math.max(t, e) + 0.05) / (Math.min(t, e) + 0.05);
160
160
  }
161
161
  const s = {
@@ -196,7 +196,7 @@ const s = {
196
196
  border: "#dadde6",
197
197
  muted: "#5b5d65",
198
198
  text: "#1f2129"
199
- }, _ = {
199
+ }, C = {
200
200
  neutral: U({
201
201
  bg: s.color.bg,
202
202
  surface: s.color.surface,
@@ -213,19 +213,19 @@ const s = {
213
213
  success: h(s.color.success, s.color.success),
214
214
  danger: h(s.color.danger, s.color.dangerLight),
215
215
  warning: h(s.color.warning, s.color.warning)
216
- }, A = {
217
- neutral: C(l),
216
+ }, T = {
217
+ neutral: F(l),
218
218
  accent: b(s.color.accent),
219
219
  secondary: b(s.color.secondary),
220
220
  success: b(s.color.success),
221
221
  danger: b(s.color.danger),
222
222
  warning: b(s.color.warning)
223
- }, O = A.neutral[3], fe = {
224
- neutral: w(_.neutral, s.color.bg),
225
- accent: w(_.accent, s.color.bg)
226
- }, de = {
227
- neutral: w(A.neutral, l.bg),
228
- accent: w(A.accent, l.bg)
223
+ }, O = T.neutral[3], de = {
224
+ neutral: S(C.neutral, s.color.bg),
225
+ accent: S(C.accent, s.color.bg)
226
+ }, fe = {
227
+ neutral: S(T.neutral, l.bg),
228
+ accent: S(T.accent, l.bg)
229
229
  };
230
230
  function ue(r = {}) {
231
231
  const a = r.appearance === "light", e = { ...a ? {
@@ -240,7 +240,7 @@ function ue(r = {}) {
240
240
  muted: e.muted,
241
241
  text: e.text
242
242
  }, n = a ? {
243
- neutral: C(c),
243
+ neutral: F(c),
244
244
  accent: b(e.accent),
245
245
  secondary: b(e.secondary),
246
246
  success: b(e.success),
@@ -253,17 +253,17 @@ function ue(r = {}) {
253
253
  success: h(e.success, e.success),
254
254
  danger: h(e.danger, e.dangerLight),
255
255
  warning: h(e.warning, e.warning)
256
- }, f = {};
257
- for (const [d, g] of Object.entries(n))
256
+ }, d = {};
257
+ for (const [f, g] of Object.entries(n))
258
258
  g.forEach((u, i) => {
259
- f[`--gryt-${d}-${i + 1}`] = u, f[`--color-gryt-${d}-${i + 1}`] = u;
259
+ d[`--gryt-${f}-${i + 1}`] = u, d[`--color-gryt-${f}-${i + 1}`] = u;
260
260
  });
261
- for (const d of ["neutral", "accent"])
262
- w(n[d], e.bg).forEach((g, u) => {
263
- f[`--gryt-${d}-a${u + 1}`] = g, f[`--color-gryt-${d}-a${u + 1}`] = g;
261
+ for (const f of ["neutral", "accent"])
262
+ S(n[f], e.bg).forEach((g, u) => {
263
+ d[`--gryt-${f}-a${u + 1}`] = g, d[`--color-gryt-${f}-a${u + 1}`] = g;
264
264
  });
265
265
  return {
266
- ...f,
266
+ ...d,
267
267
  "--gryt-bg": e.bg,
268
268
  "--gryt-surface": e.surface,
269
269
  "--gryt-surface-raised": e.surfaceRaised,
@@ -310,7 +310,7 @@ function ue(r = {}) {
310
310
  "--gryt-radius-full": `${o.full}px`
311
311
  };
312
312
  }
313
- const R = [
313
+ const v = [
314
314
  "accent",
315
315
  "accentLight",
316
316
  "secondary",
@@ -322,7 +322,7 @@ const R = [
322
322
  "onAccent",
323
323
  "onSecondary",
324
324
  "onDanger"
325
- ], j = [
325
+ ], B = [
326
326
  "bg",
327
327
  "surface",
328
328
  "surfaceRaised",
@@ -330,11 +330,11 @@ const R = [
330
330
  "border",
331
331
  "muted",
332
332
  "text"
333
- ], M = ["sm", "md", "lg", "xl", "full"], V = 60;
334
- function $(r) {
335
- return r.replace(/\s+/g, " ").trim().slice(0, V);
333
+ ], D = ["sm", "md", "lg", "xl", "full"], Z = 60;
334
+ function M(r) {
335
+ return r.replace(/\s+/g, " ").trim().slice(0, Z);
336
336
  }
337
- const p = {
337
+ const L = {
338
338
  hue: {
339
339
  accent: s.color.accent,
340
340
  accentLight: s.color.accentLight,
@@ -369,7 +369,7 @@ const p = {
369
369
  },
370
370
  radius: { ...s.radius }
371
371
  };
372
- function D(r) {
372
+ function G(r) {
373
373
  return {
374
374
  ...r.name === void 0 ? {} : { name: r.name },
375
375
  hue: { ...r.hue },
@@ -379,17 +379,17 @@ function D(r) {
379
379
  radius: { ...r.radius }
380
380
  };
381
381
  }
382
- function Z(r, a) {
382
+ function ee(r, a) {
383
383
  return a === "light" && r.lightHue !== null ? r.lightHue : r.hue;
384
384
  }
385
385
  function ge(r, a) {
386
386
  return {
387
387
  appearance: a,
388
- color: { ...Z(r, a), ...r[a] },
388
+ color: { ...ee(r, a), ...r[a] },
389
389
  radius: { ...r.radius }
390
390
  };
391
391
  }
392
- const H = {
392
+ const w = {
393
393
  accent: "accent",
394
394
  accentLight: "accent-light",
395
395
  secondary: "secondary",
@@ -401,7 +401,7 @@ const H = {
401
401
  onAccent: "on-accent",
402
402
  onSecondary: "on-secondary",
403
403
  onDanger: "on-danger"
404
- }, Y = {
404
+ }, j = {
405
405
  bg: "bg",
406
406
  surface: "surface",
407
407
  surfaceRaised: "raised",
@@ -409,68 +409,68 @@ const H = {
409
409
  border: "border",
410
410
  muted: "muted",
411
411
  text: "text"
412
- }, ee = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
413
- function z(r) {
414
- return ee.test(r.trim());
412
+ }, re = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
413
+ function W(r) {
414
+ return re.test(r.trim());
415
415
  }
416
- function E(r) {
416
+ function $(r) {
417
417
  const a = r.trim().toLowerCase();
418
418
  return a.length === 4 ? `#${a[1]}${a[1]}${a[2]}${a[2]}${a[3]}${a[3]}` : a;
419
419
  }
420
420
  function ie(r, a) {
421
- const t = new URLSearchParams(), e = (c) => E(c).slice(1), o = $(r.name ?? "");
421
+ const t = new URLSearchParams(), e = (c) => $(c).slice(1), o = M(r.name ?? "");
422
422
  o !== "" && t.set("name", o);
423
- for (const c of R)
424
- r.hue[c] !== p.hue[c] && t.set(H[c], e(r.hue[c]));
423
+ for (const c of v)
424
+ r.hue[c] !== L.hue[c] && t.set(w[c], e(r.hue[c]));
425
425
  if (r.lightHue !== null)
426
- for (const c of R)
427
- t.set(`lh-${H[c]}`, e(r.lightHue[c]));
426
+ for (const c of v)
427
+ t.set(`lh-${w[c]}`, e(r.lightHue[c]));
428
428
  for (const c of ["dark", "light"]) {
429
429
  const n = c === "dark" ? "d" : "l";
430
- for (const f of j)
431
- r[c][f] !== p[c][f] && t.set(`${n}-${Y[f]}`, e(r[c][f]));
430
+ for (const d of B)
431
+ r[c][d] !== L[c][d] && t.set(`${n}-${j[d]}`, e(r[c][d]));
432
432
  }
433
- for (const c of M)
434
- r.radius[c] !== p.radius[c] && t.set(`r-${c}`, String(r.radius[c]));
433
+ for (const c of D)
434
+ r.radius[c] !== L.radius[c] && t.set(`r-${c}`, String(r.radius[c]));
435
435
  return a === "light" && t.set("mode", "light"), t;
436
436
  }
437
437
  function le(r) {
438
438
  const a = r.trim();
439
439
  if (a === "") return null;
440
- if (a.startsWith("{")) return ae(a);
440
+ if (a.startsWith("{")) return ce(a);
441
441
  const t = a.includes("?") ? a.slice(a.indexOf("?") + 1) : a;
442
- return re(new URLSearchParams(t));
442
+ return ae(new URLSearchParams(t));
443
443
  }
444
- function re(r) {
445
- const a = D(p);
444
+ function ae(r) {
445
+ const a = G(L);
446
446
  let t = !1;
447
447
  const e = (c) => {
448
448
  const n = r.get(c);
449
449
  if (n === null) return null;
450
- const f = n.startsWith("#") ? n : `#${n}`;
451
- return z(f) ? (t = !0, E(f)) : null;
452
- }, o = $(r.get("name") ?? "");
450
+ const d = n.startsWith("#") ? n : `#${n}`;
451
+ return W(d) ? (t = !0, $(d)) : null;
452
+ }, o = M(r.get("name") ?? "");
453
453
  o !== "" && (a.name = o, t = !0);
454
- for (const c of R) {
455
- const n = e(H[c]);
454
+ for (const c of v) {
455
+ const n = e(w[c]);
456
456
  n !== null && (a.hue[c] = n);
457
457
  }
458
- if (r.has(`lh-${H.accent}`)) {
458
+ if (r.has(`lh-${w.accent}`)) {
459
459
  const c = { ...a.hue };
460
- for (const n of R) {
461
- const f = e(`lh-${H[n]}`);
462
- f !== null && (c[n] = f);
460
+ for (const n of v) {
461
+ const d = e(`lh-${w[n]}`);
462
+ d !== null && (c[n] = d);
463
463
  }
464
464
  a.lightHue = c;
465
465
  }
466
466
  for (const c of ["dark", "light"]) {
467
467
  const n = c === "dark" ? "d" : "l";
468
- for (const f of j) {
469
- const d = e(`${n}-${Y[f]}`);
470
- d !== null && (a[c][f] = d);
468
+ for (const d of B) {
469
+ const f = e(`${n}-${j[d]}`);
470
+ f !== null && (a[c][d] = f);
471
471
  }
472
472
  }
473
- for (const c of M) {
473
+ for (const c of D) {
474
474
  const n = Number(r.get(`r-${c}`));
475
475
  Number.isFinite(n) && n >= 0 && n <= 999 && r.has(`r-${c}`) && (a.radius[c] = Math.round(n), t = !0);
476
476
  }
@@ -479,7 +479,7 @@ function re(r) {
479
479
  appearance: r.get("mode") === "light" ? "light" : "dark"
480
480
  } : null;
481
481
  }
482
- function ae(r) {
482
+ function ce(r) {
483
483
  let a;
484
484
  try {
485
485
  a = JSON.parse(r);
@@ -487,15 +487,15 @@ function ae(r) {
487
487
  return null;
488
488
  }
489
489
  if (typeof a != "object" || a === null) return null;
490
- const t = a, e = D(p);
490
+ const t = a, e = G(L);
491
491
  let o = !1;
492
- const c = (n, f) => {
492
+ const c = (n, d) => {
493
493
  if (!(typeof n != "object" || n === null))
494
- for (const [d, g] of Object.entries(n))
495
- typeof g == "string" && z(g) && d in f && (f[d] = E(g), o = !0);
494
+ for (const [f, g] of Object.entries(n))
495
+ typeof g == "string" && W(g) && f in d && (d[f] = $(g), o = !0);
496
496
  };
497
497
  if (typeof t.name == "string") {
498
- const n = $(t.name);
498
+ const n = M(t.name);
499
499
  n !== "" && (e.name = n, o = !0);
500
500
  }
501
501
  if (c(t.hue, e.hue), c(t.dark, e.dark), c(t.light, e.light), typeof t.lightHue == "object" && t.lightHue !== null) {
@@ -503,22 +503,22 @@ function ae(r) {
503
503
  c(t.lightHue, n), e.lightHue = n;
504
504
  }
505
505
  if (typeof t.radius == "object" && t.radius !== null)
506
- for (const [n, f] of Object.entries(
506
+ for (const [n, d] of Object.entries(
507
507
  t.radius
508
508
  )) {
509
- const d = Number(f);
510
- M.includes(n) && Number.isFinite(d) && d >= 0 && d <= 999 && (e.radius[n] = Math.round(d), o = !0);
509
+ const f = Number(d);
510
+ D.includes(n) && Number.isFinite(f) && f >= 0 && f <= 999 && (e.radius[n] = Math.round(f), o = !0);
511
511
  }
512
512
  return o ? { theme: e, appearance: "dark" } : null;
513
513
  }
514
- const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg: 14, xl: 18, full: 999 }, ce = { sm: 4, md: 6, lg: 10, xl: 14, full: 6 }, te = { sm: 6, md: 8, lg: 10, xl: 14, full: 10 }, P = { sm: 2, md: 4, lg: 6, xl: 8, full: 4 }, ne = { sm: 8, md: 8, lg: 8, xl: 8, full: 8 }, oe = [
514
+ const y = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, k = { sm: 6, md: 8, lg: 14, xl: 18, full: 999 }, I = { sm: 4, md: 6, lg: 10, xl: 14, full: 6 }, te = { sm: 6, md: 8, lg: 10, xl: 14, full: 10 }, P = { sm: 2, md: 4, lg: 6, xl: 8, full: 4 }, ne = { sm: 8, md: 8, lg: 8, xl: 8, full: 8 }, oe = [
515
515
  {
516
516
  id: "gryt",
517
517
  name: "Gryt",
518
518
  note: "What the library ships, from the Gryt code-theme.",
519
519
  group: "Gryt",
520
520
  source: "github.com/Gryt-chat/code-theme",
521
- theme: p
521
+ theme: L
522
522
  },
523
523
  {
524
524
  /* Credits to Carlo, who made this in the generator and sent the link.
@@ -531,7 +531,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
531
531
  note: "The shipped palette, every corner at eight pixels. Made by Carlo.",
532
532
  group: "Gryt",
533
533
  source: "Carlo",
534
- theme: { ...D(p), name: "Gryt Rounded", radius: ne }
534
+ theme: { ...G(L), name: "Gryt Rounded", radius: ne }
535
535
  },
536
536
  {
537
537
  id: "ember",
@@ -572,7 +572,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
572
572
  muted: "#6b5b50",
573
573
  text: "#241a14"
574
574
  },
575
- radius: k
575
+ radius: y
576
576
  }
577
577
  },
578
578
  {
@@ -614,7 +614,358 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
614
614
  muted: "#5b5b63",
615
615
  text: "#17171a"
616
616
  },
617
- radius: T
617
+ radius: k
618
+ }
619
+ },
620
+ /*
621
+ * The owl palettes, as themes.
622
+ *
623
+ * Six drawings of the Gryt owl, each in a different set of colours. They were
624
+ * made as artwork rather than as themes, so what is here is derived from them
625
+ * rather than lifted: a drawing names four or five colours and a theme needs
626
+ * eleven hues and seven neutrals in each of two appearances.
627
+ *
628
+ * Derived in OKLCH, and the reason is visible in the result — a ramp built by
629
+ * darkening sRGB drifts grey, so the surfaces stop belonging to the theme
630
+ * about three steps down. Holding hue and chroma while moving lightness keeps
631
+ * Rose's greys pink and Forest's greys green, which is the whole point of a
632
+ * themed neutral.
633
+ *
634
+ * Secondaries are analogous rather than complementary, matching Ember above.
635
+ * A true complement put Indigo's secondary on orange and Ice's on tan, which
636
+ * read as colours borrowed from another theme.
637
+ *
638
+ * `onAccent` is chosen per theme rather than assumed: whichever of the light
639
+ * or dark ink has more contrast on that accent is the one that ships. Forest's
640
+ * sage takes dark ink at 8.1:1; Indigo's periwinkle takes light at 4.7:1.
641
+ *
642
+ * Every one is checked in both appearances — text 14.8:1 or better on its own
643
+ * background, muted 5.7:1 or better on its surface.
644
+ */
645
+ {
646
+ id: "owl-rose",
647
+ name: "Rose",
648
+ note: "Dusty rose over plum. The warmest of the six.",
649
+ group: "Gryt",
650
+ source: "Gryt owl palettes",
651
+ theme: {
652
+ name: "Rose",
653
+ hue: {
654
+ accent: "#D87489",
655
+ accentLight: "#EDAAAF",
656
+ secondary: "#d7906f",
657
+ secondaryLight: "#efb499",
658
+ success: "#69b27a",
659
+ danger: "#da534f",
660
+ dangerLight: "#f07f77",
661
+ warning: "#e6ac3d",
662
+ onAccent: "#2b0614",
663
+ onSecondary: "#2b0614",
664
+ onDanger: "#2b0a08"
665
+ },
666
+ lightHue: null,
667
+ dark: {
668
+ bg: "#1f020b",
669
+ surface: "#2b0c16",
670
+ surfaceRaised: "#34151e",
671
+ surfaceHover: "#45202b",
672
+ border: "#4c2933",
673
+ muted: "#a38b90",
674
+ text: "#f4ede9"
675
+ },
676
+ light: {
677
+ bg: "#fbf1ed",
678
+ surface: "#fffcfb",
679
+ surfaceRaised: "#fdf5f1",
680
+ surfaceHover: "#f3e6e1",
681
+ border: "#e4d6d0",
682
+ muted: "#765b61",
683
+ text: "#31151d"
684
+ },
685
+ radius: y
686
+ }
687
+ },
688
+ {
689
+ id: "owl-amber",
690
+ name: "Amber",
691
+ note: "Amber on aubergine — a warm accent over cool-dark neutrals.",
692
+ group: "Gryt",
693
+ source: "Gryt owl palettes",
694
+ theme: {
695
+ name: "Amber",
696
+ hue: {
697
+ accent: "#E39336",
698
+ accentLight: "#ECC07C",
699
+ secondary: "#c0b760",
700
+ secondaryLight: "#ddd793",
701
+ success: "#69b27a",
702
+ danger: "#da534f",
703
+ dangerLight: "#f07f77",
704
+ warning: "#e6ac3d",
705
+ onAccent: "#1e101e",
706
+ onSecondary: "#1e101e",
707
+ onDanger: "#2b0a08"
708
+ },
709
+ lightHue: null,
710
+ dark: {
711
+ bg: "#140814",
712
+ surface: "#20131f",
713
+ surfaceRaised: "#281c27",
714
+ surfaceHover: "#372836",
715
+ border: "#3e303d",
716
+ muted: "#988f97",
717
+ text: "#f1eee8"
718
+ },
719
+ light: {
720
+ bg: "#f7f3ec",
721
+ surface: "#fffdfa",
722
+ surfaceRaised: "#faf6f0",
723
+ surfaceHover: "#efe9df",
724
+ border: "#dfd8cd",
725
+ muted: "#6a5f69",
726
+ text: "#261b26"
727
+ },
728
+ radius: y
729
+ }
730
+ },
731
+ {
732
+ id: "owl-wine",
733
+ name: "Wine",
734
+ note: "Deep red throughout. Neutrals carry the same hue as the accent.",
735
+ group: "Gryt",
736
+ source: "Gryt owl palettes",
737
+ theme: {
738
+ name: "Wine",
739
+ hue: {
740
+ accent: "#CE7072",
741
+ accentLight: "#E29A98",
742
+ secondary: "#c88d61",
743
+ secondaryLight: "#e0b08d",
744
+ success: "#69b27a",
745
+ danger: "#da534f",
746
+ dangerLight: "#f07f77",
747
+ warning: "#e6ac3d",
748
+ onAccent: "#250d16",
749
+ onSecondary: "#250d16",
750
+ onDanger: "#2b0a08"
751
+ },
752
+ lightHue: null,
753
+ dark: {
754
+ bg: "#1a050d",
755
+ surface: "#261118",
756
+ surfaceRaised: "#2e1920",
757
+ surfaceHover: "#3e252e",
758
+ border: "#452e35",
759
+ muted: "#9d8d92",
760
+ text: "#f4edea"
761
+ },
762
+ light: {
763
+ bg: "#faf1ee",
764
+ surface: "#fffdfb",
765
+ surfaceRaised: "#fdf5f1",
766
+ surfaceHover: "#f2e7e2",
767
+ border: "#e3d6d0",
768
+ muted: "#705d63",
769
+ text: "#2c191f"
770
+ },
771
+ radius: y
772
+ }
773
+ },
774
+ {
775
+ id: "owl-indigo",
776
+ name: "Indigo",
777
+ note: "Periwinkle on deep indigo. The closest to the Gryt mark.",
778
+ group: "Gryt",
779
+ source: "Gryt owl palettes",
780
+ theme: {
781
+ name: "Indigo",
782
+ hue: {
783
+ accent: "#786FF6",
784
+ accentLight: "#9E97FA",
785
+ secondary: "#ba70cb",
786
+ secondaryLight: "#d397e1",
787
+ success: "#69b27a",
788
+ danger: "#da534f",
789
+ dangerLight: "#f07f77",
790
+ warning: "#e6ac3d",
791
+ onAccent: "#121329",
792
+ onSecondary: "#121329",
793
+ onDanger: "#2b0a08"
794
+ },
795
+ lightHue: null,
796
+ dark: {
797
+ bg: "#0a0b1e",
798
+ surface: "#151629",
799
+ surfaceRaised: "#1d1e32",
800
+ surfaceHover: "#2a2c42",
801
+ border: "#323348",
802
+ muted: "#8f919f",
803
+ text: "#eeeef3"
804
+ },
805
+ light: {
806
+ bg: "#f3f2f9",
807
+ surface: "#fdfdff",
808
+ surfaceRaised: "#f6f6fc",
809
+ surfaceHover: "#e9e8f1",
810
+ border: "#d9d8e2",
811
+ muted: "#606272",
812
+ text: "#1c1d2f"
813
+ },
814
+ radius: y
815
+ }
816
+ },
817
+ {
818
+ id: "owl-forest",
819
+ name: "Forest",
820
+ note: "Sage over slate. The only one whose accent is the quiet colour.",
821
+ group: "Gryt",
822
+ source: "Gryt owl palettes",
823
+ theme: {
824
+ name: "Forest",
825
+ hue: {
826
+ accent: "#98B4A1",
827
+ accentLight: "#C7D7CA",
828
+ secondary: "#a2bfbe",
829
+ secondaryLight: "#c5dddc",
830
+ success: "#69b27a",
831
+ danger: "#da534f",
832
+ dangerLight: "#f07f77",
833
+ warning: "#e6ac3d",
834
+ onAccent: "#13161e",
835
+ onSecondary: "#13161e",
836
+ onDanger: "#2b0a08"
837
+ },
838
+ lightHue: null,
839
+ dark: {
840
+ bg: "#0a0d14",
841
+ surface: "#15181f",
842
+ surfaceRaised: "#1d2028",
843
+ surfaceHover: "#2a2e36",
844
+ border: "#32353d",
845
+ muted: "#909297",
846
+ text: "#edefed"
847
+ },
848
+ light: {
849
+ bg: "#f2f4f2",
850
+ surface: "#fdfefd",
851
+ surfaceRaised: "#f5f7f6",
852
+ surfaceHover: "#e7eae8",
853
+ border: "#d7dad7",
854
+ muted: "#616369",
855
+ text: "#1d1f26"
856
+ },
857
+ radius: y
858
+ }
859
+ },
860
+ {
861
+ id: "owl-ice",
862
+ name: "Ice",
863
+ note: "Steel blue on near-white. Built light first.",
864
+ group: "Gryt",
865
+ source: "Gryt owl palettes",
866
+ theme: {
867
+ name: "Ice",
868
+ hue: {
869
+ accent: "#7495B9",
870
+ accentLight: "#BADDFC",
871
+ secondary: "#9c99bc",
872
+ secondaryLight: "#bcbad6",
873
+ success: "#69b27a",
874
+ danger: "#da534f",
875
+ dangerLight: "#f07f77",
876
+ warning: "#e6ac3d",
877
+ onAccent: "#10171e",
878
+ onSecondary: "#10171e",
879
+ onDanger: "#2b0a08"
880
+ },
881
+ lightHue: null,
882
+ dark: {
883
+ bg: "#080e14",
884
+ surface: "#13191f",
885
+ surfaceRaised: "#1b2127",
886
+ surfaceHover: "#272f36",
887
+ border: "#2f363d",
888
+ muted: "#8e9397",
889
+ text: "#eeeeef"
890
+ },
891
+ light: {
892
+ bg: "#f3f3f4",
893
+ surface: "#fdfdfe",
894
+ surfaceRaised: "#f6f7f8",
895
+ surfaceHover: "#e9e9eb",
896
+ border: "#d8d9da",
897
+ muted: "#5f6469",
898
+ text: "#1a2025"
899
+ },
900
+ radius: y
901
+ }
902
+ },
903
+ {
904
+ /* Four photographs: snow-loaded spruces through a gym window, a dark room
905
+ lit by white strips, a white can on black rubber, grey sweatpants.
906
+
907
+ Paper is already near-monochrome, so this earns its place by being cold
908
+ rather than neutral. Every grey carries the blue that overcast snow
909
+ light has — Paper's are hueless, and side by side the difference is the
910
+ whole theme.
911
+
912
+ The accent is the white can on the black floor, which is why this is the
913
+ only Gryt preset with a split `lightHue`. A near-white accent is the
914
+ point in the dark half and invisible in the light one, so light gets the
915
+ colour of a wet window frame instead and keeps the same job. */
916
+ id: "winter-arc",
917
+ name: "Winter Arc",
918
+ note: "Cold monochrome. A near-white accent in the dark, snow-light greys.",
919
+ group: "Gryt",
920
+ theme: {
921
+ name: "Winter Arc",
922
+ hue: {
923
+ accent: "#dce6ec",
924
+ accentLight: "#f0f6f9",
925
+ secondary: "#7d95a3",
926
+ secondaryLight: "#9db1bc",
927
+ success: "#7fa88d",
928
+ danger: "#c2686b",
929
+ dangerLight: "#d68b8d",
930
+ warning: "#b9a068",
931
+ onAccent: "#0b0d0f",
932
+ onSecondary: "#0b1114",
933
+ onDanger: "#1b0c0d"
934
+ },
935
+ lightHue: {
936
+ accent: "#2b3a44",
937
+ accentLight: "#43596a",
938
+ secondary: "#55707f",
939
+ secondaryLight: "#6f8b9a",
940
+ success: "#4a7059",
941
+ danger: "#a4494c",
942
+ dangerLight: "#b96b6e",
943
+ warning: "#856c33",
944
+ onAccent: "#eef3f6",
945
+ onSecondary: "#eef3f6",
946
+ onDanger: "#fdf2f2"
947
+ },
948
+ dark: {
949
+ bg: "#0b0d0f",
950
+ surface: "#111417",
951
+ surfaceRaised: "#171b1f",
952
+ surfaceHover: "#1f252a",
953
+ border: "#2a3238",
954
+ muted: "#8b979f",
955
+ text: "#eef3f6"
956
+ },
957
+ light: {
958
+ bg: "#eaeef1",
959
+ surface: "#ffffff",
960
+ surfaceRaised: "#f4f7f9",
961
+ surfaceHover: "#dde4e9",
962
+ border: "#c6d0d7",
963
+ muted: "#55626b",
964
+ text: "#0f1417"
965
+ },
966
+ /* Hard corners on purpose. The reference is window mullions, plate
967
+ edges and rubber floor tiles, and Paper already has the soft set. */
968
+ radius: I
618
969
  }
619
970
  },
620
971
  {
@@ -715,7 +1066,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
715
1066
  muted: "#6c664b",
716
1067
  text: "#1f1f1f"
717
1068
  },
718
- radius: T
1069
+ radius: k
719
1070
  }
720
1071
  },
721
1072
  {
@@ -773,7 +1124,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
773
1124
  muted: "#4c566a",
774
1125
  text: "#2e3440"
775
1126
  },
776
- radius: T
1127
+ radius: k
777
1128
  }
778
1129
  },
779
1130
  {
@@ -832,7 +1183,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
832
1183
  muted: "#6c6f85",
833
1184
  text: "#4c4f69"
834
1185
  },
835
- radius: k
1186
+ radius: y
836
1187
  }
837
1188
  },
838
1189
  {
@@ -892,7 +1243,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
892
1243
  muted: "#59636e",
893
1244
  text: "#1f2328"
894
1245
  },
895
- radius: ce
1246
+ radius: I
896
1247
  }
897
1248
  },
898
1249
  {
@@ -940,7 +1291,7 @@ const k = { sm: 8, md: 12, lg: 20, xl: 28, full: 999 }, T = { sm: 6, md: 8, lg:
940
1291
  muted: "#87867f",
941
1292
  text: "#141413"
942
1293
  },
943
- radius: k
1294
+ radius: y
944
1295
  }
945
1296
  },
946
1297
  {
@@ -1149,41 +1500,41 @@ function xe(r, a) {
1149
1500
  return c + (n - c) * o;
1150
1501
  }
1151
1502
  export {
1152
- R as GRYT_HUE_KEYS,
1153
- j as GRYT_NEUTRAL_KEYS,
1154
- M as GRYT_RADIUS_KEYS,
1155
- V as GRYT_THEME_NAME_MAX,
1156
- w as alphaScale,
1157
- D as cloneGrytTheme,
1503
+ v as GRYT_HUE_KEYS,
1504
+ B as GRYT_NEUTRAL_KEYS,
1505
+ D as GRYT_RADIUS_KEYS,
1506
+ Z as GRYT_THEME_NAME_MAX,
1507
+ S as alphaScale,
1508
+ G as cloneGrytTheme,
1158
1509
  se as contrast,
1159
1510
  ue as createGrytTheme,
1160
1511
  le as decodeGrytTheme,
1161
1512
  ie as encodeGrytTheme,
1162
- fe as grytAlphaScales,
1163
- de as grytAlphaScalesLight,
1513
+ de as grytAlphaScales,
1514
+ fe as grytAlphaScalesLight,
1164
1515
  Le as grytDrawerBleed,
1165
1516
  me as grytDurations,
1166
1517
  l as grytLightTokens,
1167
1518
  oe as grytPresets,
1168
1519
  he as grytPresetsById,
1169
1520
  pe as grytScaleSteps,
1170
- _ as grytScales,
1171
- A as grytScalesLight,
1172
- p as grytTheme,
1173
- Z as grytThemeHues,
1521
+ C as grytScales,
1522
+ T as grytScalesLight,
1523
+ L as grytTheme,
1524
+ ee as grytThemeHues,
1174
1525
  ge as grytThemeToOptions,
1175
1526
  s as grytTokens,
1176
- S as hexToOklch,
1177
- x as hexToRgb,
1527
+ R as hexToOklch,
1528
+ H as hexToRgb,
1178
1529
  h as hueScale,
1179
1530
  b as hueScaleLight,
1180
- z as isHexColor,
1531
+ W as isHexColor,
1181
1532
  U as neutralScale,
1182
- C as neutralScaleLight,
1183
- E as normalizeHexColor,
1184
- $ as normalizeThemeName,
1185
- y as oklchToHex,
1186
- I as rgbToHex,
1533
+ F as neutralScaleLight,
1534
+ $ as normalizeHexColor,
1535
+ M as normalizeThemeName,
1536
+ m as oklchToHex,
1537
+ N as rgbToHex,
1187
1538
  xe as sampleCurve,
1188
1539
  be as springSamples,
1189
1540
  ye as springTightSamples