@logicplanes/kaeso-ui 0.3.0 → 0.3.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.
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component guides
2
2
 
3
- Version 0.3.0. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
3
+ Version 0.3.1. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
4
4
 
5
5
  ## AlertDialog
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@logicplanes/kaeso-ui",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "components": [
5
5
  {
6
6
  "entry": "app-frame",
@@ -10615,6 +10615,13 @@
10615
10615
  "default": "banner",
10616
10616
  "description": "The artwork's aspect ratio."
10617
10617
  },
10618
+ {
10619
+ "name": "src",
10620
+ "type": "string",
10621
+ "required": false,
10622
+ "default": null,
10623
+ "description": "An image of the release's stored artwork, e.g. `https://update.kaeso.app/art/0.1.0.svg`, shown in the frame instead of the drawn picture, which takes its place if the image doesn't load."
10624
+ },
10618
10625
  {
10619
10626
  "name": "title",
10620
10627
  "type": "ReactNode",
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component registry
2
2
 
3
- Version 0.3.0. Generated from the component types, their descriptions and variants; do not edit.
3
+ Version 0.3.1. Generated from the component types, their descriptions and variants; do not edit.
4
4
 
5
5
  ## app-frame
6
6
 
@@ -2443,6 +2443,7 @@ A release's artwork: flat geometric art in one of eight styles and Kaeso's palet
2443
2443
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
2444
2444
  | `eyebrow` | `ReactNode` | | Small text above the title, e.g. “What's new in Kaeso”. |
2445
2445
  | `shape` | `"banner" \| "wide"` | `banner` | The artwork's aspect ratio. |
2446
+ | `src` | `string` | | An image of the release's stored artwork, e.g. `https://update.kaeso.app/art/0.1.0.svg`, shown in the frame instead of the drawn picture, which takes its place if the image doesn't load. |
2446
2447
  | `title` | `ReactNode` | | Large text on the artwork, e.g. the version number. |
2447
2448
 
2448
2449
  ## resource-list
package/ai/icons.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Icon vocabulary
2
2
 
3
- Version 0.3.0. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
3
+ Version 0.3.1. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
4
4
 
5
5
  ## Kaeso objects
6
6
 
package/ai/tokens.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui tokens
2
2
 
3
- Version 0.3.0. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
3
+ Version 0.3.1. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
4
4
 
5
5
  ## Neutrals
6
6
 
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { t as e } from "./cn-DUDmdLpZ.js";
3
- import { createElement as t, forwardRef as n, useId as r, useMemo as i } from "react";
4
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { art as s, font as c } from "@logicplanes/kaeso-tokens";
3
+ import { createElement as t, forwardRef as n, useId as r, useMemo as i, useState as a } from "react";
4
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ import { art as c, font as l } from "@logicplanes/kaeso-tokens";
6
6
  //#region src/components/release-art/drawing.ts
7
- var l = [
7
+ var u = [
8
8
  "bauhaus",
9
9
  "albers",
10
10
  "stripes",
@@ -13,7 +13,7 @@ var l = [
13
13
  "arcs",
14
14
  "phyllotaxis",
15
15
  "spiro"
16
- ], u = {
16
+ ], d = {
17
17
  banner: {
18
18
  w: 640,
19
19
  h: 360
@@ -22,16 +22,16 @@ var l = [
22
22
  w: 840,
23
23
  h: 360
24
24
  }
25
- }, d = 40, f = {
26
- rx: d * 7.5,
27
- ry: d * 7.5
25
+ }, f = 40, p = {
26
+ rx: f * 7.5,
27
+ ry: f * 7.5
28
28
  };
29
- function p(e) {
29
+ function m(e) {
30
30
  let t = 2166136261;
31
31
  for (let n = 0; n < e.length; n++) t ^= e.charCodeAt(n), t = Math.imul(t, 16777619);
32
32
  return t >>> 0;
33
33
  }
34
- function m(e) {
34
+ function h(e) {
35
35
  let t = e >>> 0;
36
36
  return () => {
37
37
  t = t + 1831565813 >>> 0;
@@ -39,53 +39,53 @@ function m(e) {
39
39
  return e = Math.imul(e ^ e >>> 15, e | 1), e ^= e + Math.imul(e ^ e >>> 7, e | 61), ((e ^ e >>> 14) >>> 0) / 4294967296;
40
40
  };
41
41
  }
42
- function h(e) {
42
+ function g(e) {
43
43
  if (typeof e != "object" || !e) return !1;
44
44
  let t = e;
45
- return t.version === 1 && typeof t.seed == "number" && Number.isInteger(t.seed) && t.seed >= 0 && t.seed <= 4294967295 && typeof t.style == "string" && l.includes(t.style) && typeof t.palette == "number" && Number.isInteger(t.palette) && t.palette >= 0 && t.palette < s.palettes.length;
45
+ return t.version === 1 && typeof t.seed == "number" && Number.isInteger(t.seed) && t.seed >= 0 && t.seed <= 4294967295 && typeof t.style == "string" && u.includes(t.style) && typeof t.palette == "number" && Number.isInteger(t.palette) && t.palette >= 0 && t.palette < c.palettes.length;
46
46
  }
47
- function g(e = Math.random) {
47
+ function _(e = Math.random) {
48
48
  let t = (t) => Math.min(t - 1, Math.floor(e() * t));
49
49
  return {
50
50
  version: 1,
51
51
  seed: Math.min(4294967295, Math.floor(e() * 4294967296)),
52
- style: l[t(l.length)] ?? "bauhaus",
53
- palette: t(s.palettes.length)
52
+ style: u[t(u.length)] ?? "bauhaus",
53
+ palette: t(c.palettes.length)
54
54
  };
55
55
  }
56
- function _(e, t = Math.random) {
57
- let n = e.slice(-3), r = l.filter((e) => !n.some((t) => t.style === e)), i = s.palettes.map((e, t) => t).filter((t) => !e.slice(-4).some((e) => e.palette === t)), a = new Set(e.map((e) => e.seed)), o = (e) => e[Math.min(e.length - 1, Math.floor(t() * e.length))], c = Math.min(4294967295, Math.floor(t() * 4294967296));
58
- for (; a.has(c);) c = c + 1 >>> 0;
56
+ function v(e, t = Math.random) {
57
+ let n = e.slice(-3), r = u.filter((e) => !n.some((t) => t.style === e)), i = c.palettes.map((e, t) => t).filter((t) => !e.slice(-4).some((e) => e.palette === t)), a = new Set(e.map((e) => e.seed)), o = (e) => e[Math.min(e.length - 1, Math.floor(t() * e.length))], s = Math.min(4294967295, Math.floor(t() * 4294967296));
58
+ for (; a.has(s);) s = s + 1 >>> 0;
59
59
  return {
60
60
  version: 1,
61
- seed: c,
61
+ seed: s,
62
62
  style: o(r) ?? "bauhaus",
63
63
  palette: o(i) ?? 0
64
64
  };
65
65
  }
66
- function v(e) {
67
- let t = p(e);
66
+ function y(e) {
67
+ let t = m(e);
68
68
  return {
69
69
  version: 1,
70
70
  seed: t,
71
- style: l[t % l.length] ?? "bauhaus",
72
- palette: (t >>> 8) % s.palettes.length
71
+ style: u[t % u.length] ?? "bauhaus",
72
+ palette: (t >>> 8) % c.palettes.length
73
73
  };
74
74
  }
75
- var y = (e) => Math.round(e * 100) / 100, b = (e, t, n) => n ? {
75
+ var b = (e) => Math.round(e * 100) / 100, x = (e, t, n) => n ? {
76
76
  tag: e,
77
77
  attrs: t,
78
78
  children: n
79
79
  } : {
80
80
  tag: e,
81
81
  attrs: t
82
- }, x = (e, t, n) => (t / f.rx) ** 2 + ((e.h - n) / f.ry) ** 2 < 1, S = (e, t) => {
83
- let n = (e.h - t) / f.ry;
84
- return n >= 1 ? 0 : f.rx * Math.sqrt(1 - n * n);
85
- }, C = (e, t) => b("g", { mask: `url(#${e.id("clear")})` }, t);
86
- function w(e, t, n, r, i, a) {
87
- let o = [], s = e.int(0, 7), c = `rotate(${e.int(0, 3) * 90} ${y(t + r / 2)} ${y(n + r / 2)})`;
88
- e.chance(.55) && o.push(b("rect", {
82
+ }, S = (e, t, n) => (t / p.rx) ** 2 + ((e.h - n) / p.ry) ** 2 < 1, C = (e, t) => {
83
+ let n = (e.h - t) / p.ry;
84
+ return n >= 1 ? 0 : p.rx * Math.sqrt(1 - n * n);
85
+ }, w = (e, t) => x("g", { mask: `url(#${e.id("clear")})` }, t);
86
+ function T(e, t, n, r, i, a) {
87
+ let o = [], s = e.int(0, 7), c = `rotate(${e.int(0, 3) * 90} ${b(t + r / 2)} ${b(n + r / 2)})`;
88
+ e.chance(.55) && o.push(x("rect", {
89
89
  x: t,
90
90
  y: n,
91
91
  width: r,
@@ -95,21 +95,21 @@ function w(e, t, n, r, i, a) {
95
95
  let l = o.length ? a : i;
96
96
  switch (s) {
97
97
  case 0:
98
- o.push(b("path", {
98
+ o.push(x("path", {
99
99
  d: `M${t} ${n}L${t + r} ${n}A${r} ${r} 0 0 1 ${t} ${n + r}Z`,
100
100
  fill: l,
101
101
  transform: c
102
102
  }));
103
103
  break;
104
104
  case 1:
105
- o.push(b("path", {
105
+ o.push(x("path", {
106
106
  d: `M${t} ${n + r}A${r / 2} ${r / 2} 0 0 1 ${t + r} ${n + r}Z`,
107
107
  fill: l,
108
108
  transform: c
109
109
  }));
110
110
  break;
111
111
  case 2:
112
- o.push(b("circle", {
112
+ o.push(x("circle", {
113
113
  cx: t + r / 2,
114
114
  cy: n + r / 2,
115
115
  r: r / 2,
@@ -117,14 +117,14 @@ function w(e, t, n, r, i, a) {
117
117
  }));
118
118
  break;
119
119
  case 3:
120
- o.push(b("path", {
120
+ o.push(x("path", {
121
121
  d: `M${t} ${n}L${t + r} ${n + r}L${t} ${n + r}Z`,
122
122
  fill: l,
123
123
  transform: c
124
124
  }));
125
125
  break;
126
126
  case 4:
127
- o.push(b("circle", {
127
+ o.push(x("circle", {
128
128
  cx: t + r / 2,
129
129
  cy: n + r / 2,
130
130
  r: r / 4,
@@ -132,7 +132,7 @@ function w(e, t, n, r, i, a) {
132
132
  }));
133
133
  break;
134
134
  case 5:
135
- for (let e = 0; e < 3; e++) o.push(b("rect", {
135
+ for (let e = 0; e < 3; e++) o.push(x("rect", {
136
136
  x: t + e * r / 3,
137
137
  y: n,
138
138
  width: r / 6,
@@ -142,17 +142,17 @@ function w(e, t, n, r, i, a) {
142
142
  }));
143
143
  break;
144
144
  case 6:
145
- o.push(b("path", {
145
+ o.push(x("path", {
146
146
  d: `M${t} ${n}L${t + r} ${n}L${t + r / 2} ${n + r / 2}Z`,
147
147
  fill: l,
148
148
  transform: c
149
- })), o.push(b("path", {
149
+ })), o.push(x("path", {
150
150
  d: `M${t} ${n + r}L${t + r} ${n + r}L${t + r / 2} ${n + r / 2}Z`,
151
151
  fill: l,
152
152
  transform: c
153
153
  }));
154
154
  break;
155
- default: o.push(b("path", {
155
+ default: o.push(x("path", {
156
156
  d: `M${t} ${n}A${r} ${r} 0 0 1 ${t + r} ${n + r}L${t} ${n + r}Z`,
157
157
  fill: l,
158
158
  transform: c
@@ -160,8 +160,8 @@ function w(e, t, n, r, i, a) {
160
160
  }
161
161
  return o;
162
162
  }
163
- function T(e) {
164
- let t = /* @__PURE__ */ new Set(), n = (e, t) => `${e},${t}`, r = (t, n) => x(e, t * d, (n + 1) * d), i = [], a = e.int(2, 4);
163
+ function E(e) {
164
+ let t = /* @__PURE__ */ new Set(), n = (e, t) => `${e},${t}`, r = (t, n) => S(e, t * f, (n + 1) * f), i = [], a = e.int(2, 4);
165
165
  for (let o = 0; o < a; o++) {
166
166
  let a = e.int(2, 3);
167
167
  for (let o = 0; o < 20; o++) {
@@ -170,7 +170,7 @@ function T(e) {
170
170
  if (!c) continue;
171
171
  for (let e = 0; e < a; e++) for (let r = 0; r < a; r++) t.add(n(o + e, s + r));
172
172
  let l = e.int(0, 3);
173
- i.push(...w(e, o * d, s * d, a * d, e.color(l), e.color(l + e.int(1, 3))));
173
+ i.push(...T(e, o * f, s * f, a * f, e.color(l), e.color(l + e.int(1, 3))));
174
174
  break;
175
175
  }
176
176
  }
@@ -178,12 +178,12 @@ function T(e) {
178
178
  for (let a = 0; a < e.cols; a++) for (let s = 0; s < e.rows; s++) {
179
179
  if (t.has(n(a, s)) || r(a, s) || !e.chance(o)) continue;
180
180
  let c = e.int(0, 3);
181
- i.push(...w(e, a * d, s * d, d, e.color(c), e.color(c + e.int(1, 3))));
181
+ i.push(...T(e, a * f, s * f, f, e.color(c), e.color(c + e.int(1, 3))));
182
182
  }
183
183
  return i;
184
184
  }
185
- function E(e) {
186
- let t = (e.h - 240) / 2, n = f.rx - d / 2, r = e.w - t - 240, i = n + Math.round(e.next() * Math.max(0, r - n) / (d / 2)) * (d / 2), a = e.int(3, 4), o = [
185
+ function D(e) {
186
+ let t = (e.h - 240) / 2, n = p.rx - f / 2, r = e.w - t - 240, i = n + Math.round(e.next() * Math.max(0, r - n) / (f / 2)) * (f / 2), a = e.int(3, 4), o = [
187
187
  0,
188
188
  1,
189
189
  2,
@@ -193,7 +193,7 @@ function E(e) {
193
193
  let n = Math.floor(e.next() * (t + 1));
194
194
  [o[t], o[n]] = [o[n] ?? n, o[t] ?? t];
195
195
  }
196
- return Array.from({ length: a }, (n, r) => b("rect", {
196
+ return Array.from({ length: a }, (n, r) => x("rect", {
197
197
  x: i + 24 * r,
198
198
  y: t + 36 * r,
199
199
  width: 240 - 48 * r,
@@ -201,21 +201,21 @@ function E(e) {
201
201
  fill: e.color(o[r] ?? r)
202
202
  }));
203
203
  }
204
- function D(e, t, n, r) {
204
+ function O(e, t, n, r) {
205
205
  let i = Math.hypot(e.w, e.h), a = [], o = -i, s = 0;
206
206
  for (; o < i;) {
207
- let t = n[s % n.length] ?? d;
208
- a.push(b("rect", {
209
- x: y(o),
210
- y: y(-i),
207
+ let t = n[s % n.length] ?? f;
208
+ a.push(x("rect", {
209
+ x: b(o),
210
+ y: b(-i),
211
211
  width: t,
212
- height: y(i * 2),
212
+ height: b(i * 2),
213
213
  fill: e.color(s + r)
214
214
  })), o += t, s += 1;
215
215
  }
216
- return b("g", { transform: `translate(${e.w / 2} ${e.h / 2}) rotate(${t})` }, a);
216
+ return x("g", { transform: `translate(${e.w / 2} ${e.h / 2}) rotate(${t})` }, a);
217
217
  }
218
- function O(e) {
218
+ function k(e) {
219
219
  let t = [
220
220
  0,
221
221
  90,
@@ -223,40 +223,40 @@ function O(e) {
223
223
  -45,
224
224
  30,
225
225
  -60
226
- ][e.int(0, 5)] ?? 0, n = Array.from({ length: e.int(5, 9) }, () => d / 2 * e.int(1, 5)), r = e.id("disc"), i = d * e.int(2, 3) + d / 2, a = d * e.int(Math.ceil((f.rx + i) / d), e.cols - 2), o = d * e.int(3, e.rows - 3);
226
+ ][e.int(0, 5)] ?? 0, n = Array.from({ length: e.int(5, 9) }, () => f / 2 * e.int(1, 5)), r = e.id("disc"), i = f * e.int(2, 3) + f / 2, a = f * e.int(Math.ceil((p.rx + i) / f), e.cols - 2), o = f * e.int(3, e.rows - 3);
227
227
  return [
228
- b("defs", {}, [b("clipPath", { id: r }, [b("circle", {
228
+ x("defs", {}, [x("clipPath", { id: r }, [x("circle", {
229
229
  cx: a,
230
230
  cy: o,
231
231
  r: i
232
232
  })])]),
233
- C(e, [D(e, t, n, 0)]),
234
- b("g", { clipPath: `url(#${r})` }, [b("rect", {
233
+ w(e, [O(e, t, n, 0)]),
234
+ x("g", { clipPath: `url(#${r})` }, [x("rect", {
235
235
  width: e.w,
236
236
  height: e.h,
237
237
  fill: e.ground
238
- }), D(e, t + 90, n, 1)])
238
+ }), O(e, t + 90, n, 1)])
239
239
  ];
240
240
  }
241
- function k(e) {
242
- let t = [], n = e.int(14, 18), r = d * 2.5, i = (e.h - d - r) / (n - 1), a = e.w * e.between(.58, .74), o = e.w * e.between(.09, .14), s = e.chance(.6) ? e.int(2, n - 3) : -1;
241
+ function A(e) {
242
+ let t = [], n = e.int(14, 18), r = f * 2.5, i = (e.h - f - r) / (n - 1), a = e.w * e.between(.58, .74), o = e.w * e.between(.09, .14), s = e.chance(.6) ? e.int(2, n - 3) : -1;
243
243
  for (let c = 0; c < n; c++) {
244
244
  let n = r + c * i, l = Array.from({ length: e.int(3, 5) }, () => ({
245
245
  x: a + e.between(-1.2, 1.2) * o,
246
246
  h: e.between(.3, 1),
247
247
  s: e.between(9, 22)
248
- })), u = [e.between(0, 6.28), e.between(0, 6.28)], f = Math.max(d, Math.ceil((S(e, n) + d / 2) / 4) * 4), p = [];
249
- for (let t = f; t <= e.w - d; t += 4) {
248
+ })), u = [e.between(0, 6.28), e.between(0, 6.28)], d = Math.max(f, Math.ceil((C(e, n) + f / 2) / 4) * 4), p = [];
249
+ for (let t = d; t <= e.w - f; t += 4) {
250
250
  let e = Math.exp(-((t - a) ** 2) / (2 * o * o)), n = 0;
251
251
  for (let e of l) n += e.h * Math.exp(-((t - e.x) ** 2) / (2 * e.s * e.s));
252
252
  let r = Math.sin(t * .21 + (u[0] ?? 0)) * .6 + Math.sin(t * .53 + (u[1] ?? 0)) * .4;
253
253
  p.push([t, n * e + r * .04 * (.15 + e)]);
254
254
  }
255
- let m = Math.max(...p.map(([, e]) => e), .001), h = Math.min(i * e.between(2.4, 4.4), n - d), g = `M${p.map(([e, t]) => `${e} ${y(n - t / m * h)}`).join("L")}`;
256
- t.push(b("path", {
257
- d: `${g}L${e.w - d} ${y(n + i)}L${f} ${y(n + i)}Z`,
255
+ let m = Math.max(...p.map(([, e]) => e), .001), h = Math.min(i * e.between(2.4, 4.4), n - f), g = `M${p.map(([e, t]) => `${e} ${b(n - t / m * h)}`).join("L")}`;
256
+ t.push(x("path", {
257
+ d: `${g}L${e.w - f} ${b(n + i)}L${d} ${b(n + i)}Z`,
258
258
  fill: e.ground
259
- })), t.push(b("path", {
259
+ })), t.push(x("path", {
260
260
  d: g,
261
261
  fill: "none",
262
262
  stroke: c === s ? e.color(1) : e.color(0),
@@ -267,38 +267,38 @@ function k(e) {
267
267
  }
268
268
  return t;
269
269
  }
270
- function A(e) {
271
- let t = y(80 * e.between(.2, .3)), n = e.chance(.5), r = [], i = Math.ceil(e.w / 80), a = Math.ceil(e.h / 80);
270
+ function j(e) {
271
+ let t = b(80 * e.between(.2, .3)), n = e.chance(.5), r = [], i = Math.ceil(e.w / 80), a = Math.ceil(e.h / 80);
272
272
  for (let t = 0; t < i; t++) for (let n = 0; n < a; n++) {
273
273
  let i = t * 80, a = e.h - (n + 1) * 80;
274
- if (x(e, i, a + 80)) continue;
274
+ if (S(e, i, a + 80)) continue;
275
275
  let o = e.chance(.5) ? `M${i + 40} ${a}A40 40 0 0 1 ${i} ${a + 40}M${i + 80} ${a + 40}A40 40 0 0 0 ${i + 40} ${a + 80}` : `M${i + 40} ${a}A40 40 0 0 0 ${i + 80} ${a + 40}M${i} ${a + 40}A40 40 0 0 1 ${i + 40} ${a + 80}`;
276
- r.push(b("path", { d: o }));
276
+ r.push(x("path", { d: o }));
277
277
  }
278
- let o = [b("g", {
278
+ let o = [x("g", {
279
279
  fill: "none",
280
280
  stroke: e.color(0),
281
281
  strokeWidth: t
282
282
  }, r)];
283
- return n && o.push(b("g", {
283
+ return n && o.push(x("g", {
284
284
  fill: "none",
285
285
  stroke: e.color(1),
286
- strokeWidth: y(t * .34)
286
+ strokeWidth: b(t * .34)
287
287
  }, r)), o;
288
288
  }
289
- function j(e, t, n) {
289
+ function M(e, t, n) {
290
290
  let r = Infinity;
291
291
  for (let i = 0; i <= 90; i++) {
292
292
  let a = i / 90 * (Math.PI / 2);
293
- r = Math.min(r, Math.hypot(t - f.rx * Math.cos(a), n - (e.h - f.ry * Math.sin(a))));
293
+ r = Math.min(r, Math.hypot(t - p.rx * Math.cos(a), n - (e.h - p.ry * Math.sin(a))));
294
294
  }
295
- return x(e, t, n) ? 0 : r;
295
+ return S(e, t, n) ? 0 : r;
296
296
  }
297
- function M(e) {
297
+ function N(e) {
298
298
  let t = [], n = e.int(2, 3), r = [
299
- [d * e.int(4, e.cols - 2), 0],
300
- [d * e.int(11, e.cols - 1), e.h],
301
- [e.w, d * e.int(2, e.rows - 2)],
299
+ [f * e.int(4, e.cols - 2), 0],
300
+ [f * e.int(11, e.cols - 1), e.h],
301
+ [e.w, f * e.int(2, e.rows - 2)],
302
302
  [e.w, 0],
303
303
  [e.w, e.h],
304
304
  [0, 0]
@@ -310,10 +310,10 @@ function M(e) {
310
310
  let i = 0;
311
311
  for (let [a, o] of r) {
312
312
  if (i === n) break;
313
- let r = d / 2 * e.int(1, 2), s = Math.floor((j(e, a, o) - d / 2) / r), c = Math.min(s, e.int(4, 10));
313
+ let r = f / 2 * e.int(1, 2), s = Math.floor((M(e, a, o) - f / 2) / r), c = Math.min(s, e.int(4, 10));
314
314
  if (c < 3) continue;
315
315
  let l = e.int(0, 3), u = e.chance(.4);
316
- for (let n = c; n >= 1; n--) t.push(b("circle", {
316
+ for (let n = c; n >= 1; n--) t.push(x("circle", {
317
317
  cx: a,
318
318
  cy: o,
319
319
  r: n * r,
@@ -323,9 +323,9 @@ function M(e) {
323
323
  }
324
324
  return t;
325
325
  }
326
- var N = 2.399963229728653;
327
- function P(e) {
328
- let t = [], n = e.w - e.h / 2 - d * e.int(0, 2), r = e.h / 2 + d * e.int(-1, 1), i = e.between(11, 14), a = [
326
+ var P = 2.399963229728653;
327
+ function F(e) {
328
+ let t = [], n = e.w - e.h / 2 - f * e.int(0, 2), r = e.h / 2 + f * e.int(-1, 1), i = e.between(11, 14), a = [
329
329
  8,
330
330
  13,
331
331
  21
@@ -333,33 +333,33 @@ function P(e) {
333
333
  for (let c = 1;; c++) {
334
334
  let l = i * Math.sqrt(c);
335
335
  if (l > s) break;
336
- let u = n + l * Math.cos(c * N), f = r + l * Math.sin(c * N), p = i * (.3 + .12 * Math.min(1, l / (e.h / 2)));
337
- if (u < -p || u > e.w + p || f < -p || f > e.h + p || x(e, u, f) || j(e, u, f) < p + d / 4) continue;
338
- let m = o ? Math.floor(l / (d * 1.5)) % 4 : Math.floor(c % a / a * 4);
339
- t.push(b("circle", {
340
- cx: y(u),
341
- cy: y(f),
342
- r: y(p),
336
+ let u = n + l * Math.cos(c * P), d = r + l * Math.sin(c * P), p = i * (.3 + .12 * Math.min(1, l / (e.h / 2)));
337
+ if (u < -p || u > e.w + p || d < -p || d > e.h + p || S(e, u, d) || M(e, u, d) < p + f / 4) continue;
338
+ let m = o ? Math.floor(l / (f * 1.5)) % 4 : Math.floor(c % a / a * 4);
339
+ t.push(x("circle", {
340
+ cx: b(u),
341
+ cy: b(d),
342
+ r: b(p),
343
343
  fill: e.color(m)
344
344
  }));
345
345
  }
346
346
  return t;
347
347
  }
348
- function F(e, t) {
349
- return t ? F(t, e % t) : e;
348
+ function I(e, t) {
349
+ return t ? I(t, e % t) : e;
350
350
  }
351
- function I(e) {
352
- let t = [], n = e.w - e.h / 2, r = e.h / 2, i = e.h / 2 - d, a = e.int(7, 13), o = e.int(2, a - 2);
353
- for (; F(a, o) !== 1;) o = e.int(2, a - 2);
351
+ function L(e) {
352
+ let t = [], n = e.w - e.h / 2, r = e.h / 2, i = e.h / 2 - f, a = e.int(7, 13), o = e.int(2, a - 2);
353
+ for (; I(a, o) !== 1;) o = e.int(2, a - 2);
354
354
  let s = e.chance(.5) ? 2 : 1;
355
355
  for (let c = 0; c < s; c++) {
356
- let s = o * e.between(.75, 1.05), l = (a - o) / o, u = a - o + s, d = o / F(a, o), f = d * 360, p = [], m = i * (c === 0 ? 1 : e.between(.4, .55)) / u;
356
+ let s = o * e.between(.75, 1.05), l = (a - o) / o, u = a - o + s, d = o / I(a, o), f = d * 360, p = [], m = i * (c === 0 ? 1 : e.between(.4, .55)) / u;
357
357
  for (let e = 0; e <= f; e++) {
358
358
  let t = e / f * d * Math.PI * 2, i = (a - o) * Math.cos(t) + s * Math.cos(l * t), c = (a - o) * Math.sin(t) - s * Math.sin(l * t);
359
- p.push(`${y(n + i * m)} ${y(r + c * m)}`);
359
+ p.push(`${b(n + i * m)} ${b(r + c * m)}`);
360
360
  }
361
361
  let h = `M${p.join("L")}Z`;
362
- t.push(b("path", {
362
+ t.push(x("path", {
363
363
  d: h,
364
364
  fill: e.color(c),
365
365
  fillRule: "evenodd"
@@ -367,178 +367,184 @@ function I(e) {
367
367
  }
368
368
  return t;
369
369
  }
370
- var L = {
371
- bauhaus: T,
372
- albers: E,
373
- stripes: O,
374
- waves: k,
375
- truchet: A,
376
- arcs: M,
377
- phyllotaxis: P,
378
- spiro: I
379
- }, R = (e) => s.palettes[e.palette % s.palettes.length] ?? s.palettes[0];
380
- function z(e) {
370
+ var R = {
371
+ bauhaus: E,
372
+ albers: D,
373
+ stripes: k,
374
+ waves: A,
375
+ truchet: j,
376
+ arcs: N,
377
+ phyllotaxis: F,
378
+ spiro: L
379
+ }, z = (e) => c.palettes[e.palette % c.palettes.length] ?? c.palettes[0];
380
+ function B(e) {
381
381
  return {
382
- color: s.grounds[R(e).ground].text,
382
+ color: c.grounds[z(e).ground].text,
383
383
  eyebrow: {
384
- x: d,
384
+ x: f,
385
385
  bottom: 96
386
386
  },
387
387
  title: {
388
388
  x: 38,
389
- bottom: d
389
+ bottom: f
390
390
  }
391
391
  };
392
392
  }
393
- function B(e, t = {}) {
394
- let { w: n, h: r } = u[t.shape ?? "banner"], i = m(e.seed), a = (e, t) => e + i() * (t - e), o = (e, t) => Math.min(t, e + Math.floor(i() * (t - e + 1))), l = R(e), p = z(e), h = s.grounds[l.ground], g = [...l.colors];
393
+ function V(e, t = {}) {
394
+ let { w: n, h: r } = d[t.shape ?? "banner"], i = h(e.seed), a = (e, t) => e + i() * (t - e), o = (e, t) => Math.min(t, e + Math.floor(i() * (t - e + 1))), s = z(e), u = B(e), m = c.grounds[s.ground], g = [...s.colors];
395
395
  for (let e = g.length - 1; e > 0; e--) {
396
396
  let t = Math.floor(i() * (e + 1));
397
- [g[e], g[t]] = [g[t] ?? h.text, g[e] ?? h.text];
397
+ [g[e], g[t]] = [g[t] ?? m.text, g[e] ?? m.text];
398
398
  }
399
399
  let _ = t.idPrefix ?? "art", v = {
400
400
  w: n,
401
401
  h: r,
402
- cols: n / d,
403
- rows: r / d,
402
+ cols: n / f,
403
+ rows: r / f,
404
404
  next: i,
405
405
  between: a,
406
406
  int: o,
407
407
  chance: (e) => i() < e,
408
- ground: h.fill,
409
- color: (e) => g[(e % g.length + g.length) % g.length] ?? h.text,
408
+ ground: m.fill,
409
+ color: (e) => g[(e % g.length + g.length) % g.length] ?? m.text,
410
410
  id: (e) => `${_}-${e}`
411
- }, y = v.id("clear"), x = L[e.style](v), S = [];
411
+ }, y = v.id("clear"), b = R[e.style](v), S = [];
412
412
  return t.eyebrow && S.push({
413
413
  tag: "text",
414
414
  attrs: {
415
- x: p.eyebrow.x,
416
- y: r - p.eyebrow.bottom,
417
- fill: p.color,
415
+ x: u.eyebrow.x,
416
+ y: r - u.eyebrow.bottom,
417
+ fill: u.color,
418
418
  fillOpacity: .7,
419
419
  fontSize: 16,
420
420
  fontWeight: 500,
421
421
  letterSpacing: .1,
422
- fontFamily: c.sans
422
+ fontFamily: l.sans
423
423
  },
424
424
  text: t.eyebrow
425
425
  }), t.title && S.push({
426
426
  tag: "text",
427
427
  attrs: {
428
- x: p.title.x,
429
- y: r - p.title.bottom,
430
- fill: p.color,
428
+ x: u.title.x,
429
+ y: r - u.title.bottom,
430
+ fill: u.color,
431
431
  fontSize: 52,
432
432
  fontWeight: 600,
433
433
  letterSpacing: -1.5,
434
- fontFamily: c.sans
434
+ fontFamily: l.sans
435
435
  },
436
436
  text: t.title
437
- }), b("svg", {
437
+ }), x("svg", {
438
438
  xmlns: "http://www.w3.org/2000/svg",
439
439
  viewBox: `0 0 ${n} ${r}`
440
440
  }, [
441
- b("defs", {}, [b("mask", {
441
+ x("defs", {}, [x("mask", {
442
442
  id: y,
443
443
  maskUnits: "userSpaceOnUse",
444
444
  x: 0,
445
445
  y: 0,
446
446
  width: n,
447
447
  height: r
448
- }, [b("rect", {
448
+ }, [x("rect", {
449
449
  width: n,
450
450
  height: r,
451
451
  fill: "white"
452
- }), b("ellipse", {
452
+ }), x("ellipse", {
453
453
  cx: 0,
454
454
  cy: r,
455
- rx: f.rx,
456
- ry: f.ry,
455
+ rx: p.rx,
456
+ ry: p.ry,
457
457
  fill: "black"
458
458
  })])]),
459
- b("rect", {
459
+ x("rect", {
460
460
  width: n,
461
461
  height: r,
462
- fill: h.fill
462
+ fill: m.fill
463
463
  }),
464
- ...x,
464
+ ...b,
465
465
  ...S
466
466
  ]);
467
467
  }
468
- var V = /* @__PURE__ */ new Set(["viewBox", "maskUnits"]), H = (e) => V.has(e) ? e : e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), U = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
469
- function W(e) {
470
- let t = Object.entries(e.attrs).map(([e, t]) => ` ${H(e)}="${U(String(t))}"`).join(""), n = e.text === void 0 ? (e.children ?? []).map(W).join("") : U(e.text);
468
+ var H = /* @__PURE__ */ new Set(["viewBox", "maskUnits"]), U = (e) => H.has(e) ? e : e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), W = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
469
+ function G(e) {
470
+ let t = Object.entries(e.attrs).map(([e, t]) => ` ${U(e)}="${W(String(t))}"`).join(""), n = e.text === void 0 ? (e.children ?? []).map(G).join("") : W(e.text);
471
471
  return n ? `<${e.tag}${t}>${n}</${e.tag}>` : `<${e.tag}${t}/>`;
472
472
  }
473
473
  //#endregion
474
474
  //#region src/components/release-art/release-art.tsx
475
- var G = { shape: {
475
+ var K = { shape: {
476
476
  banner: { classes: "aspect-video" },
477
477
  wide: { classes: "aspect-21/9" }
478
- } }, K = { shape: "banner" };
479
- function q(e, n) {
478
+ } }, q = { shape: "banner" };
479
+ function J(e, n) {
480
480
  return t(e.tag, {
481
481
  ...e.attrs,
482
482
  key: n
483
- }, e.text ?? e.children?.map(q));
483
+ }, e.text ?? e.children?.map(J));
484
484
  }
485
- var J = /* @__PURE__ */ n(function({ seed: t, label: n, art: s, title: l, eyebrow: d, shape: f = "banner", className: p }, m) {
486
- let { w: h, h: g } = u[f], _ = `art${r().replace(/[^a-zA-Z0-9]/g, "")}`, y = s ?? v(t), b = i(() => B(y, {
487
- shape: f,
488
- idPrefix: _
485
+ var Y = /* @__PURE__ */ n(function({ seed: t, label: n, art: c, src: u, title: f, eyebrow: p, shape: m = "banner", className: h }, g) {
486
+ let { w: _, h: v } = d[m], [b, x] = a(null), S = `art${r().replace(/[^a-zA-Z0-9]/g, "")}`, C = c ?? y(t), w = i(() => V(C, {
487
+ shape: m,
488
+ idPrefix: S
489
489
  }), [
490
- y,
491
- f,
492
- _
493
- ]), x = z(y);
494
- return /* @__PURE__ */ o("span", {
495
- className: e("relative block w-full", p),
496
- children: [/* @__PURE__ */ o("svg", {
497
- ref: m,
498
- viewBox: `0 0 ${h} ${g}`,
490
+ C,
491
+ m,
492
+ S
493
+ ]), T = B(C);
494
+ return /* @__PURE__ */ s("span", {
495
+ className: e("relative block w-full", h),
496
+ children: [/* @__PURE__ */ s("svg", {
497
+ ref: g,
498
+ viewBox: `0 0 ${_} ${v}`,
499
499
  role: "img",
500
500
  "aria-label": n,
501
501
  preserveAspectRatio: "xMidYMid slice",
502
- className: e("block w-full overflow-hidden rounded-well", G.shape[f].classes),
502
+ className: e("block w-full overflow-hidden rounded-well", K.shape[m].classes),
503
503
  children: [
504
- b.children?.map(q),
505
- d && /* @__PURE__ */ a("text", {
506
- x: x.eyebrow.x,
507
- y: g - x.eyebrow.bottom,
508
- fill: x.color,
504
+ u && b !== u ? /* @__PURE__ */ o("image", {
505
+ href: u,
506
+ width: _,
507
+ height: v,
508
+ preserveAspectRatio: "xMidYMid slice",
509
+ onError: () => x(u)
510
+ }) : w.children?.map(J),
511
+ p && /* @__PURE__ */ o("text", {
512
+ x: T.eyebrow.x,
513
+ y: v - T.eyebrow.bottom,
514
+ fill: T.color,
509
515
  fillOpacity: .7,
510
516
  fontSize: 16,
511
517
  fontWeight: 500,
512
518
  letterSpacing: .1,
513
- fontFamily: c.sans,
514
- children: d
519
+ fontFamily: l.sans,
520
+ children: p
515
521
  }),
516
- l && /* @__PURE__ */ a("text", {
517
- x: x.title.x,
518
- y: g - x.title.bottom,
519
- fill: x.color,
522
+ f && /* @__PURE__ */ o("text", {
523
+ x: T.title.x,
524
+ y: v - T.title.bottom,
525
+ fill: T.color,
520
526
  fontSize: 52,
521
527
  fontWeight: 600,
522
528
  letterSpacing: -1.5,
523
- fontFamily: c.sans,
524
- children: l
529
+ fontFamily: l.sans,
530
+ children: f
525
531
  })
526
532
  ]
527
- }), /* @__PURE__ */ a("span", {
533
+ }), /* @__PURE__ */ o("span", {
528
534
  "aria-hidden": !0,
529
535
  className: "pointer-events-none absolute inset-0 rounded-well shadow-ring"
530
536
  })]
531
537
  });
532
538
  });
533
- process.env.NODE_ENV !== "production" && (J.displayName = "ReleaseArt");
534
- function Y({ seed: e, label: t, art: n, title: r, eyebrow: i, shape: a = "banner" }) {
535
- let { w: o, h: s } = u[a], c = B(n ?? v(e), {
539
+ process.env.NODE_ENV !== "production" && (Y.displayName = "ReleaseArt");
540
+ function X({ seed: e, label: t, art: n, title: r, eyebrow: i, shape: a = "banner" }) {
541
+ let { w: o, h: s } = d[a], c = V(n ?? y(e), {
536
542
  shape: a,
537
543
  title: r,
538
544
  eyebrow: i,
539
545
  idPrefix: "art"
540
546
  });
541
- return W({
547
+ return G({
542
548
  ...c,
543
549
  attrs: {
544
550
  ...c.attrs,
@@ -550,6 +556,6 @@ function Y({ seed: e, label: t, art: n, title: r, eyebrow: i, shape: a = "banner
550
556
  });
551
557
  }
552
558
  //#endregion
553
- export { l as a, g as c, Y as i, v as l, G as n, h as o, J as r, _ as s, K as t };
559
+ export { u as a, _ as c, X as i, y as l, K as n, g as o, Y as r, v as s, q as t };
554
560
 
555
- //# sourceMappingURL=release-art-Chd8l9Rf.js.map
561
+ //# sourceMappingURL=release-art-Ogl-L1Vh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-art-Ogl-L1Vh.js","names":["cn","RELEASE_ART_STYLES","RELEASE_ART_VIEW","U","CLEAR","hash","h","i","text","random","a","seed","t","isReleaseArtSpec","value","v","art","randomReleaseArt","pick","n","next","nextReleaseArt","recent","previous","styles","p","s","palettes","seeds","list","releaseArtFor","round","node","children","open","x","c","y","clearEdge","dy","masked","primitive","out","kind","ink","accent","fill","bauhaus","taken","key","col","row","blocked","bigs","b","size","attempt","free","j","density","albers","margin","lo","hi","x0","levels","order","l","bands","diag","rects","w","widths","offset","angle","stripes","clip","r","cx","cy","waves","lines","top","gapY","peak","spread","base","bumps","ripple","start","raw","env","fine","max","lift","line","truchet","stroke","inner","paths","cols","rows","d","clearance","best","arcs","anchors","spots","placed","band","room","count","hollow","GOLDEN","phyllotaxis","step","arms","banded","reach","tone","gcd","spiro","radius","big","small","layers","pen","k","extent","turns","steps","points","scale","STYLE","paletteOf","spec","releaseArtText","drawReleaseArt","options","between","int","palette","place","ground","colors","prefix","canvas","name","mask","drawn","font","KEEP_CAMEL","attrName","m","escapeXml","serializeArt","attrs","KAESO_RELEASE_ART_VARIANTS","KAESO_RELEASE_ART_DEFAULT_VARIANTS","toElement","createElement","ReleaseArt","shape","failed","setFailed","useState","useId","useMemo","className","label","src","eyebrow","title","releaseArtSvg"],"sources":["../../src/components/release-art/drawing.ts","../../src/components/release-art/release-art.tsx"],"sourcesContent":["import { art, font } from \"@logicplanes/kaeso-tokens\";\n\nexport const RELEASE_ART_STYLES = [\"bauhaus\", \"albers\", \"stripes\", \"waves\", \"truchet\", \"arcs\", \"phyllotaxis\", \"spiro\"] as const;\nexport type ReleaseArtStyle = (typeof RELEASE_ART_STYLES)[number];\n\nexport interface ReleaseArtSpec {\n version: 1;\n seed: number;\n style: ReleaseArtStyle;\n palette: number;\n}\n\nexport interface ArtNode {\n tag: string;\n attrs: Record<string, string | number>;\n children?: ArtNode[] | undefined;\n text?: string | undefined;\n}\n\nexport const RELEASE_ART_VIEW = { banner: { w: 640, h: 360 }, wide: { w: 840, h: 360 } } as const;\nexport type ReleaseArtShape = keyof typeof RELEASE_ART_VIEW;\n\nconst U = 40;\nconst CLEAR = { rx: U * 7.5, ry: U * 7.5 };\n\nfunction hash(text: string): number {\n let h = 2166136261;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nfunction random(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function isReleaseArtSpec(value: unknown): value is ReleaseArtSpec {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as Record<string, unknown>;\n return (\n v.version === 1 &&\n typeof v.seed === \"number\" &&\n Number.isInteger(v.seed) &&\n v.seed >= 0 &&\n v.seed <= 0xffffffff &&\n typeof v.style === \"string\" &&\n (RELEASE_ART_STYLES as readonly string[]).includes(v.style) &&\n typeof v.palette === \"number\" &&\n Number.isInteger(v.palette) &&\n v.palette >= 0 &&\n v.palette < art.palettes.length\n );\n}\n\nexport function randomReleaseArt(next: () => number = Math.random): ReleaseArtSpec {\n const pick = (n: number) => Math.min(n - 1, Math.floor(next() * n));\n return {\n version: 1,\n seed: Math.min(0xffffffff, Math.floor(next() * 0x100000000)),\n style: RELEASE_ART_STYLES[pick(RELEASE_ART_STYLES.length)] ?? \"bauhaus\",\n palette: pick(art.palettes.length),\n };\n}\n\nexport function nextReleaseArt(previous: readonly ReleaseArtSpec[], next: () => number = Math.random): ReleaseArtSpec {\n const recent = previous.slice(-3);\n const styles = RELEASE_ART_STYLES.filter((s) => !recent.some((p) => p.style === s));\n const palettes = art.palettes.map((_, i) => i).filter((i) => !previous.slice(-4).some((p) => p.palette === i));\n const seeds = new Set(previous.map((p) => p.seed));\n const pick = <T>(list: readonly T[]) => list[Math.min(list.length - 1, Math.floor(next() * list.length))];\n let seed = Math.min(0xffffffff, Math.floor(next() * 0x100000000));\n while (seeds.has(seed)) seed = (seed + 1) >>> 0;\n return { version: 1, seed, style: pick(styles) ?? \"bauhaus\", palette: pick(palettes) ?? 0 };\n}\n\nexport function releaseArtFor(text: string): ReleaseArtSpec {\n const seed = hash(text);\n return {\n version: 1,\n seed,\n style: RELEASE_ART_STYLES[seed % RELEASE_ART_STYLES.length] ?? \"bauhaus\",\n palette: (seed >>> 8) % art.palettes.length,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst node = (tag: string, attrs: ArtNode[\"attrs\"], children?: ArtNode[]): ArtNode => (children ? { tag, attrs, children } : { tag, attrs });\n\ninterface Canvas {\n w: number;\n h: number;\n cols: number;\n rows: number;\n next: () => number;\n between: (lo: number, hi: number) => number;\n int: (lo: number, hi: number) => number;\n chance: (p: number) => boolean;\n ground: string;\n color: (i: number) => string;\n id: (name: string) => string;\n}\n\nconst open = (c: Canvas, x: number, y: number) => (x / CLEAR.rx) ** 2 + ((c.h - y) / CLEAR.ry) ** 2 < 1;\nconst clearEdge = (c: Canvas, y: number) => {\n const dy = (c.h - y) / CLEAR.ry;\n return dy >= 1 ? 0 : CLEAR.rx * Math.sqrt(1 - dy * dy);\n};\nconst masked = (c: Canvas, children: ArtNode[]) => node(\"g\", { mask: `url(#${c.id(\"clear\")})` }, children);\n\nfunction primitive(c: Canvas, x: number, y: number, s: number, fill: string, accent: string): ArtNode[] {\n const out: ArtNode[] = [];\n const kind = c.int(0, 7);\n const t = `rotate(${c.int(0, 3) * 90} ${round(x + s / 2)} ${round(y + s / 2)})`;\n if (c.chance(0.55)) out.push(node(\"rect\", { x, y, width: s, height: s, fill }));\n const ink = out.length ? accent : fill;\n switch (kind) {\n case 0:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}A${s} ${s} 0 0 1 ${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 1:\n out.push(node(\"path\", { d: `M${x} ${y + s}A${s / 2} ${s / 2} 0 0 1 ${x + s} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 2:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 2, fill: ink }));\n break;\n case 3:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 4:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 4, fill: ink }));\n break;\n case 5:\n for (let i = 0; i < 3; i++) out.push(node(\"rect\", { x: x + (i * s) / 3, y, width: s / 6, height: s, fill: ink, transform: t }));\n break;\n case 6:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n out.push(node(\"path\", { d: `M${x} ${y + s}L${x + s} ${y + s}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n break;\n default:\n out.push(node(\"path\", { d: `M${x} ${y}A${s} ${s} 0 0 1 ${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n }\n return out;\n}\n\nfunction bauhaus(c: Canvas): ArtNode[] {\n const taken = new Set<string>();\n const key = (col: number, row: number) => `${col},${row}`;\n const blocked = (col: number, row: number) => open(c, col * U, (row + 1) * U);\n const out: ArtNode[] = [];\n const bigs = c.int(2, 4);\n for (let b = 0; b < bigs; b++) {\n const size = c.int(2, 3);\n for (let attempt = 0; attempt < 20; attempt++) {\n const col = c.int(0, c.cols - size);\n const row = c.int(0, c.rows - size);\n let free = true;\n for (let i = 0; i < size && free; i++) for (let j = 0; j < size && free; j++) free = !taken.has(key(col + i, row + j)) && !blocked(col + i, row + j);\n if (!free) continue;\n for (let i = 0; i < size; i++) for (let j = 0; j < size; j++) taken.add(key(col + i, row + j));\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, size * U, c.color(a), c.color(a + c.int(1, 3))));\n break;\n }\n }\n const density = c.between(0.55, 0.85);\n for (let col = 0; col < c.cols; col++) {\n for (let row = 0; row < c.rows; row++) {\n if (taken.has(key(col, row)) || blocked(col, row) || !c.chance(density)) continue;\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, U, c.color(a), c.color(a + c.int(1, 3))));\n }\n }\n return out;\n}\n\nfunction albers(c: Canvas): ArtNode[] {\n const side = U * 6;\n const margin = (c.h - side) / 2;\n const lo = CLEAR.rx - U / 2;\n const hi = c.w - margin - side;\n const x0 = lo + Math.round((c.next() * Math.max(0, hi - lo)) / (U / 2)) * (U / 2);\n const unit = side / 20;\n const levels = c.int(3, 4);\n const order = [0, 1, 2, 3];\n for (let i = order.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [order[i], order[j]] = [order[j] ?? j, order[i] ?? i];\n }\n return Array.from({ length: levels }, (_, l) =>\n node(\"rect\", { x: x0 + 2 * unit * l, y: margin + 3 * unit * l, width: side - 4 * unit * l, height: side - 4 * unit * l, fill: c.color(order[l] ?? l) }),\n );\n}\n\nfunction bands(c: Canvas, angle: number, widths: number[], offset: number): ArtNode {\n const diag = Math.hypot(c.w, c.h);\n const rects: ArtNode[] = [];\n let x = -diag;\n let i = 0;\n while (x < diag) {\n const w = widths[i % widths.length] ?? U;\n rects.push(node(\"rect\", { x: round(x), y: round(-diag), width: w, height: round(diag * 2), fill: c.color(i + offset) }));\n x += w;\n i += 1;\n }\n return node(\"g\", { transform: `translate(${c.w / 2} ${c.h / 2}) rotate(${angle})` }, rects);\n}\n\nfunction stripes(c: Canvas): ArtNode[] {\n const angle = [0, 90, 45, -45, 30, -60][c.int(0, 5)] ?? 0;\n const widths = Array.from({ length: c.int(5, 9) }, () => (U / 2) * c.int(1, 5));\n const clip = c.id(\"disc\");\n const r = U * c.int(2, 3) + U / 2;\n const cx = U * c.int(Math.ceil((CLEAR.rx + r) / U), c.cols - 2);\n const cy = U * c.int(3, c.rows - 3);\n return [\n node(\"defs\", {}, [node(\"clipPath\", { id: clip }, [node(\"circle\", { cx, cy, r })])]),\n masked(c, [bands(c, angle, widths, 0)]),\n node(\"g\", { clipPath: `url(#${clip})` }, [node(\"rect\", { width: c.w, height: c.h, fill: c.ground }), bands(c, angle + 90, widths, 1)]),\n ];\n}\n\nfunction waves(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const lines = c.int(14, 18);\n const top = U * 2.5;\n const bottom = c.h - U;\n const gapY = (bottom - top) / (lines - 1);\n const peak = c.w * c.between(0.58, 0.74);\n const spread = c.w * c.between(0.09, 0.14);\n const accent = c.chance(0.6) ? c.int(2, lines - 3) : -1;\n for (let i = 0; i < lines; i++) {\n const base = top + i * gapY;\n const bumps = Array.from({ length: c.int(3, 5) }, () => ({ x: peak + c.between(-1.2, 1.2) * spread, h: c.between(0.3, 1), s: c.between(9, 22) }));\n const ripple = [c.between(0, 6.28), c.between(0, 6.28)];\n const start = Math.max(U, Math.ceil((clearEdge(c, base) + U / 2) / 4) * 4);\n const raw: [number, number][] = [];\n for (let x = start; x <= c.w - U; x += 4) {\n const env = Math.exp(-((x - peak) ** 2) / (2 * spread * spread));\n let y = 0;\n for (const b of bumps) y += b.h * Math.exp(-((x - b.x) ** 2) / (2 * b.s * b.s));\n const fine = Math.sin(x * 0.21 + (ripple[0] ?? 0)) * 0.6 + Math.sin(x * 0.53 + (ripple[1] ?? 0)) * 0.4;\n raw.push([x, y * env + fine * 0.04 * (0.15 + env)]);\n }\n const max = Math.max(...raw.map(([, y]) => y), 0.001);\n const lift = Math.min(gapY * c.between(2.4, 4.4), base - U);\n const line = `M${raw.map(([x, y]) => `${x} ${round(base - (y / max) * lift)}`).join(\"L\")}`;\n out.push(node(\"path\", { d: `${line}L${c.w - U} ${round(base + gapY)}L${start} ${round(base + gapY)}Z`, fill: c.ground }));\n out.push(\n node(\"path\", { d: line, fill: \"none\", stroke: i === accent ? c.color(1) : c.color(0), strokeWidth: 2, strokeLinejoin: \"round\", strokeLinecap: \"round\" }),\n );\n }\n return out;\n}\n\nfunction truchet(c: Canvas): ArtNode[] {\n const t = U * 2;\n const h = t / 2;\n const stroke = round(t * c.between(0.2, 0.3));\n const inner = c.chance(0.5);\n const paths: ArtNode[] = [];\n const cols = Math.ceil(c.w / t);\n const rows = Math.ceil(c.h / t);\n for (let col = 0; col < cols; col++) {\n for (let r = 0; r < rows; r++) {\n const x = col * t;\n const y = c.h - (r + 1) * t;\n if (open(c, x, y + t)) continue;\n const d = c.chance(0.5)\n ? `M${x + h} ${y}A${h} ${h} 0 0 1 ${x} ${y + h}M${x + t} ${y + h}A${h} ${h} 0 0 0 ${x + h} ${y + t}`\n : `M${x + h} ${y}A${h} ${h} 0 0 0 ${x + t} ${y + h}M${x} ${y + h}A${h} ${h} 0 0 1 ${x + h} ${y + t}`;\n paths.push(node(\"path\", { d }));\n }\n }\n const out = [node(\"g\", { fill: \"none\", stroke: c.color(0), strokeWidth: stroke }, paths)];\n if (inner) out.push(node(\"g\", { fill: \"none\", stroke: c.color(1), strokeWidth: round(stroke * 0.34) }, paths));\n return out;\n}\n\nfunction clearance(c: Canvas, cx: number, cy: number): number {\n let best = Infinity;\n for (let i = 0; i <= 90; i++) {\n const a = (i / 90) * (Math.PI / 2);\n best = Math.min(best, Math.hypot(cx - CLEAR.rx * Math.cos(a), cy - (c.h - CLEAR.ry * Math.sin(a))));\n }\n return open(c, cx, cy) ? 0 : best;\n}\n\nfunction arcs(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const anchors = c.int(2, 3);\n const spots: [number, number][] = [\n [U * c.int(4, c.cols - 2), 0],\n [U * c.int(11, c.cols - 1), c.h],\n [c.w, U * c.int(2, c.rows - 2)],\n [c.w, 0],\n [c.w, c.h],\n [0, 0],\n ];\n for (let i = spots.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [spots[i], spots[j]] = [spots[j] ?? [c.w, 0], spots[i] ?? [c.w, 0]];\n }\n let placed = 0;\n for (const [cx, cy] of spots) {\n if (placed === anchors) break;\n const band = (U / 2) * c.int(1, 2);\n const room = Math.floor((clearance(c, cx, cy) - U / 2) / band);\n const count = Math.min(room, c.int(4, 10));\n if (count < 3) continue;\n const offset = c.int(0, 3);\n const hollow = c.chance(0.4);\n for (let i = count; i >= 1; i--) out.push(node(\"circle\", { cx, cy, r: i * band, fill: i === 1 && hollow ? c.ground : c.color(i + offset) }));\n placed += 1;\n }\n return out;\n}\n\nconst GOLDEN = 2.399963229728653;\n\nfunction phyllotaxis(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2 - U * c.int(0, 2);\n const cy = c.h / 2 + U * c.int(-1, 1);\n const step = c.between(11, 14);\n const arms = [8, 13, 21][c.int(0, 2)] ?? 13;\n const banded = c.chance(0.35);\n const reach = Math.hypot(c.w, c.h);\n for (let i = 1; ; i++) {\n const r = step * Math.sqrt(i);\n if (r > reach) break;\n const x = cx + r * Math.cos(i * GOLDEN);\n const y = cy + r * Math.sin(i * GOLDEN);\n const size = step * (0.3 + 0.12 * Math.min(1, r / (c.h / 2)));\n if (x < -size || x > c.w + size || y < -size || y > c.h + size) continue;\n if (open(c, x, y) || clearance(c, x, y) < size + U / 4) continue;\n const tone = banded ? Math.floor(r / (U * 1.5)) % 4 : Math.floor(((i % arms) / arms) * 4);\n out.push(node(\"circle\", { cx: round(x), cy: round(y), r: round(size), fill: c.color(tone) }));\n }\n return out;\n}\n\nfunction gcd(a: number, b: number): number {\n return b ? gcd(b, a % b) : a;\n}\n\nfunction spiro(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2;\n const cy = c.h / 2;\n const radius = c.h / 2 - U;\n const big = c.int(7, 13);\n let small = c.int(2, big - 2);\n while (gcd(big, small) !== 1) small = c.int(2, big - 2);\n const layers = c.chance(0.5) ? 2 : 1;\n for (let l = 0; l < layers; l++) {\n const pen = small * c.between(0.75, 1.05);\n const k = (big - small) / small;\n const extent = big - small + pen;\n const turns = small / gcd(big, small);\n const steps = turns * 360;\n const points: string[] = [];\n const scale = (radius * (l === 0 ? 1 : c.between(0.4, 0.55))) / extent;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * turns * Math.PI * 2;\n const x = (big - small) * Math.cos(a) + pen * Math.cos(k * a);\n const y = (big - small) * Math.sin(a) - pen * Math.sin(k * a);\n points.push(`${round(cx + x * scale)} ${round(cy + y * scale)}`);\n }\n const d = `M${points.join(\"L\")}Z`;\n out.push(node(\"path\", { d, fill: c.color(l), fillRule: \"evenodd\" }));\n }\n return out;\n}\n\nconst STYLE = { bauhaus, albers, stripes, waves, truchet, arcs, phyllotaxis, spiro } as const;\n\nexport interface DrawOptions {\n shape?: ReleaseArtShape | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n idPrefix?: string | undefined;\n}\n\nconst paletteOf = (spec: ReleaseArtSpec) => art.palettes[spec.palette % art.palettes.length] ?? art.palettes[0];\n\nexport function releaseArtText(spec: ReleaseArtSpec) {\n return { color: art.grounds[paletteOf(spec).ground].text, eyebrow: { x: U, bottom: 96 }, title: { x: U - 2, bottom: U } };\n}\n\nexport function drawReleaseArt(spec: ReleaseArtSpec, options: DrawOptions = {}): ArtNode {\n const { w, h } = RELEASE_ART_VIEW[options.shape ?? \"banner\"];\n const next = random(spec.seed);\n const between = (lo: number, hi: number) => lo + next() * (hi - lo);\n const int = (lo: number, hi: number) => Math.min(hi, lo + Math.floor(next() * (hi - lo + 1)));\n const palette = paletteOf(spec);\n const place = releaseArtText(spec);\n const ground = art.grounds[palette.ground];\n const colors: string[] = [...palette.colors];\n for (let i = colors.length - 1; i > 0; i--) {\n const j = Math.floor(next() * (i + 1));\n [colors[i], colors[j]] = [colors[j] ?? ground.text, colors[i] ?? ground.text];\n }\n const prefix = options.idPrefix ?? \"art\";\n const canvas: Canvas = {\n w,\n h,\n cols: w / U,\n rows: h / U,\n next,\n between,\n int,\n chance: (p) => next() < p,\n ground: ground.fill,\n color: (i) => colors[((i % colors.length) + colors.length) % colors.length] ?? ground.text,\n id: (name) => `${prefix}-${name}`,\n };\n const mask = canvas.id(\"clear\");\n const drawn = STYLE[spec.style](canvas);\n const text: ArtNode[] = [];\n if (options.eyebrow)\n text.push({\n tag: \"text\",\n attrs: {\n x: place.eyebrow.x,\n y: h - place.eyebrow.bottom,\n fill: place.color,\n fillOpacity: 0.7,\n fontSize: 16,\n fontWeight: 500,\n letterSpacing: 0.1,\n fontFamily: font.sans,\n },\n text: options.eyebrow,\n });\n if (options.title)\n text.push({\n tag: \"text\",\n attrs: { x: place.title.x, y: h - place.title.bottom, fill: place.color, fontSize: 52, fontWeight: 600, letterSpacing: -1.5, fontFamily: font.sans },\n text: options.title,\n });\n return node(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${w} ${h}` }, [\n node(\"defs\", {}, [\n node(\"mask\", { id: mask, maskUnits: \"userSpaceOnUse\", x: 0, y: 0, width: w, height: h }, [\n node(\"rect\", { width: w, height: h, fill: \"white\" }),\n node(\"ellipse\", { cx: 0, cy: h, rx: CLEAR.rx, ry: CLEAR.ry, fill: \"black\" }),\n ]),\n ]),\n node(\"rect\", { width: w, height: h, fill: ground.fill }),\n ...drawn,\n ...text,\n ]);\n}\n\nconst KEEP_CAMEL = new Set([\"viewBox\", \"maskUnits\"]);\nconst attrName = (name: string) => (KEEP_CAMEL.has(name) ? name : name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`));\nconst escapeXml = (text: string) => text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n\nexport function serializeArt(n: ArtNode): string {\n const attrs = Object.entries(n.attrs)\n .map(([k, v]) => ` ${attrName(k)}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = n.text !== undefined ? escapeXml(n.text) : (n.children ?? []).map(serializeArt).join(\"\");\n return inner ? `<${n.tag}${attrs}>${inner}</${n.tag}>` : `<${n.tag}${attrs}/>`;\n}\n","import { createElement, forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { font } from \"@logicplanes/kaeso-tokens\";\nimport { cn } from \"../../utils/cn.js\";\nimport { drawReleaseArt, releaseArtFor, releaseArtText, serializeArt, RELEASE_ART_VIEW, type ArtNode, type ReleaseArtSpec } from \"./drawing.js\";\n\nexport { RELEASE_ART_STYLES, isReleaseArtSpec, nextReleaseArt, randomReleaseArt, releaseArtFor, type ReleaseArtSpec, type ReleaseArtStyle } from \"./drawing.js\";\n\nexport const KAESO_RELEASE_ART_VARIANTS = {\n shape: {\n banner: { classes: \"aspect-video\" },\n wide: { classes: \"aspect-21/9\" },\n },\n} as const;\nexport const KAESO_RELEASE_ART_DEFAULT_VARIANTS = { shape: \"banner\" } as const;\n\nexport interface ReleaseArtProps {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n src?: string | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n className?: string | undefined;\n}\n\nfunction toElement(n: ArtNode, key: number): ReactNode {\n return createElement(n.tag, { ...n.attrs, key }, n.text ?? n.children?.map(toElement));\n}\n\nexport const ReleaseArt = /* @__PURE__ */ forwardRef<SVGSVGElement, ReleaseArtProps>(function ReleaseArt(\n { seed, label, art, src, title, eyebrow, shape = \"banner\", className },\n ref,\n) {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const [failed, setFailed] = useState<string | null>(null);\n const prefix = `art${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const spec = art ?? releaseArtFor(seed);\n const drawn = useMemo(() => drawReleaseArt(spec, { shape, idPrefix: prefix }), [spec, shape, prefix]);\n const text = releaseArtText(spec);\n return (\n <span className={cn(\"relative block w-full\", className)}>\n <svg\n ref={ref}\n viewBox={`0 0 ${w} ${h}`}\n role=\"img\"\n aria-label={label}\n preserveAspectRatio=\"xMidYMid slice\"\n className={cn(\"block w-full overflow-hidden rounded-well\", KAESO_RELEASE_ART_VARIANTS.shape[shape].classes)}\n >\n {src && failed !== src ? (\n <image href={src} width={w} height={h} preserveAspectRatio=\"xMidYMid slice\" onError={() => setFailed(src)} />\n ) : (\n drawn.children?.map(toElement)\n )}\n {eyebrow && (\n <text\n x={text.eyebrow.x}\n y={h - text.eyebrow.bottom}\n fill={text.color}\n fillOpacity={0.7}\n fontSize={16}\n fontWeight={500}\n letterSpacing={0.1}\n fontFamily={font.sans}\n >\n {eyebrow}\n </text>\n )}\n {title && (\n <text x={text.title.x} y={h - text.title.bottom} fill={text.color} fontSize={52} fontWeight={600} letterSpacing={-1.5} fontFamily={font.sans}>\n {title}\n </text>\n )}\n </svg>\n <span aria-hidden className=\"pointer-events-none absolute inset-0 rounded-well shadow-ring\" />\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ReleaseArt.displayName = \"ReleaseArt\";\n\nexport interface ReleaseArtSvgOptions {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n}\n\nexport function releaseArtSvg({ seed, label, art, title, eyebrow, shape = \"banner\" }: ReleaseArtSvgOptions): string {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const drawn = drawReleaseArt(art ?? releaseArtFor(seed), { shape, title, eyebrow, idPrefix: \"art\" });\n return serializeArt({ ...drawn, attrs: { ...drawn.attrs, width: w * 2, height: h * 2, role: \"img\", ariaLabel: label } });\n}\n"],"mappings":";;;;;;AAEA,IAAaC,IAAqB;CAAC;CAAW;CAAU;CAAW;CAAS;CAAW;CAAQ;CAAe;AAAO,GAiBxGC,IAAmB;CAAE,QAAQ;EAAE,GAAG;EAAK,GAAG;CAAI;CAAG,MAAM;EAAE,GAAG;EAAK,GAAG;CAAI;AAAE,GAGjFC,IAAI,IACJC,IAAQ;CAAE,IAAID,IAAI;CAAK,IAAIA,IAAI;AAAI;AAEzC,SAASE,EAAK,GAAsB;CAClC,IAAIC,IAAI;CACR,KAAK,IAAIC,IAAI,GAAGA,IAAIC,EAAK,QAAQ,KAE/B,AADA,KAAKA,EAAK,WAAWD,CAAC,GACtB,IAAI,KAAK,KAAKD,GAAG,QAAQ;CAE3B,OAAOA,MAAM;AACf;AAEA,SAASG,EAAO,GAA4B;CAC1C,IAAIC,IAAIC,MAAS;CACjB,aAAa;EACX,IAAKD,IAAI,eAAgB;EACzB,IAAIE,IAAIF;EAGR,OAFA,IAAI,KAAK,KAAKE,IAAKA,MAAM,IAAKA,IAAI,CAAC,GACnC,KAAKA,IAAI,KAAK,KAAKA,IAAKA,MAAM,GAAIA,IAAI,EAAE,KAC/BA,IAAKA,MAAM,QAAS,KAAK;CACpC;AACF;AAEA,SAAgBC,EAAiB,GAAyC;CACxE,IAAI,OAAOC,KAAU,aAAYA,GAAgB,OAAO;CACxD,IAAMC,IAAID;CACV,OACEC,EAAE,YAAY,KACd,OAAOA,EAAE,QAAS,YAClB,OAAO,UAAUA,EAAE,IAAI,KACvBA,EAAE,QAAQ,KACVA,EAAE,QAAQ,cACV,OAAOA,EAAE,SAAU,YAClBd,EAAyC,SAASc,EAAE,KAAK,KAC1D,OAAOA,EAAE,WAAY,YACrB,OAAO,UAAUA,EAAE,OAAO,KAC1BA,EAAE,WAAW,KACbA,EAAE,UAAUC,EAAI,SAAS;AAE7B;AAEA,SAAgBC,EAAiB,IAAqB,KAAK,QAAwB;CACjF,IAAMC,KAAQ,MAAc,KAAK,IAAIC,IAAI,GAAG,KAAK,MAAMC,EAAK,IAAID,CAAC,CAAC;CAClE,OAAO;EACL,SAAS;EACT,MAAM,KAAK,IAAI,YAAY,KAAK,MAAMC,EAAK,IAAI,UAAW,CAAC;EAC3D,OAAOnB,EAAmBiB,EAAKjB,EAAmB,MAAM,MAAM;EAC9D,SAASiB,EAAKF,EAAI,SAAS,MAAM;CACnC;AACF;AAEA,SAAgBK,EAAe,GAAqC,IAAqB,KAAK,QAAwB;CACpH,IAAMC,IAASC,EAAS,MAAM,EAAE,GAC1BC,IAASvB,EAAmB,QAAQ,MAAM,CAACqB,EAAO,MAAM,MAAMG,EAAE,UAAUC,CAAC,CAAC,GAC5EC,IAAWX,EAAI,SAAS,KAAK,GAAG,MAAMT,CAAC,CAAC,CAAC,QAAQ,MAAM,CAACgB,EAAS,MAAM,EAAE,CAAC,CAAC,MAAM,MAAME,EAAE,YAAYlB,CAAC,CAAC,GACvGqB,IAAQ,IAAI,IAAIL,EAAS,KAAK,MAAME,EAAE,IAAI,CAAC,GAC3CP,KAAW,MAAuBW,EAAK,KAAK,IAAIA,EAAK,SAAS,GAAG,KAAK,MAAMT,EAAK,IAAIS,EAAK,MAAM,CAAC,IACnGlB,IAAO,KAAK,IAAI,YAAY,KAAK,MAAMS,EAAK,IAAI,UAAW,CAAC;CAChE,OAAOQ,EAAM,IAAIjB,CAAI,IAAG,IAAQA,IAAO,MAAO;CAC9C,OAAO;EAAE,SAAS;EAAG;EAAM,OAAOO,EAAKM,CAAM,KAAK;EAAW,SAASN,EAAKS,CAAQ,KAAK;CAAE;AAC5F;AAEA,SAAgBG,EAAc,GAA8B;CAC1D,IAAMnB,IAAON,EAAKG,CAAI;CACtB,OAAO;EACL,SAAS;EACT;EACA,OAAOP,EAAmBU,IAAOV,EAAmB,WAAW;EAC/D,UAAUU,MAAS,KAAKK,EAAI,SAAS;CACvC;AACF;AAEA,IAAMe,KAAS,MAAc,KAAK,MAAMZ,IAAI,GAAG,IAAI,KAC7Ca,KAAQ,GAAa,GAAyB,MAAmCC,IAAW;CAAE;CAAK;CAAO;AAAS,IAAI;CAAE;CAAK;AAAM,GAgBpIC,KAAQ,GAAW,GAAW,OAAeC,IAAI/B,EAAM,OAAO,MAAMgC,EAAE,IAAIC,KAAKjC,EAAM,OAAO,IAAI,GAChGkC,KAAa,GAAW,MAAc;CAC1C,IAAMC,KAAMH,EAAE,IAAIC,KAAKjC,EAAM;CAC7B,OAAOmC,KAAM,IAAI,IAAInC,EAAM,KAAK,KAAK,KAAK,IAAImC,IAAKA,CAAE;AACvD,GACMC,KAAU,GAAW,MAAwBR,EAAK,KAAK,EAAE,MAAM,QAAQI,EAAE,GAAG,OAAO,EAAE,GAAG,GAAGH,CAAQ;AAEzG,SAASQ,EAAU,GAAW,GAAW,GAAW,GAAW,GAAc,GAA2B;CACtG,IAAMC,IAAiB,CAAC,GAClBC,IAAOP,EAAE,IAAI,GAAG,CAAC,GACjBxB,IAAI,UAAUwB,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,GAAGL,EAAMI,IAAIT,IAAI,CAAC,EAAE,GAAGK,EAAMM,IAAIX,IAAI,CAAC,EAAE;CAC7E,AAAIU,EAAE,OAAO,GAAI,KAAGM,EAAI,KAAKV,EAAK,QAAQ;EAAE;EAAG;EAAG,OAAON;EAAG,QAAQA;EAAG;CAAK,CAAC,CAAC;CAC9E,IAAMkB,IAAMF,EAAI,SAASG,IAASC;CAClC,QAAQH,GAAR;EACE,KAAK;GACH,EAAI,KAAKX,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGF,IAAIT,EAAE,GAAGW,EAAE,GAAGX,EAAE,GAAGA,EAAE,SAASS,EAAE,GAAGE,IAAIX,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GAChH;EACF,KAAK;GACH,EAAI,KAAKoB,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,IAAIX,EAAE,GAAGA,IAAI,EAAE,GAAGA,IAAI,EAAE,SAASS,IAAIT,EAAE,GAAGW,IAAIX,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GAClH;EACF,KAAK;GACH,EAAI,KAAKoB,EAAK,UAAU;IAAE,IAAIG,IAAIT,IAAI;IAAG,IAAIW,IAAIX,IAAI;IAAG,GAAGA,IAAI;IAAG,MAAMkB;GAAI,CAAC,CAAC;GAC9E;EACF,KAAK;GACH,EAAI,KAAKZ,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGF,IAAIT,EAAE,GAAGW,IAAIX,EAAE,GAAGS,EAAE,GAAGE,IAAIX,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GACpG;EACF,KAAK;GACH,EAAI,KAAKoB,EAAK,UAAU;IAAE,IAAIG,IAAIT,IAAI;IAAG,IAAIW,IAAIX,IAAI;IAAG,GAAGA,IAAI;IAAG,MAAMkB;GAAI,CAAC,CAAC;GAC9E;EACF,KAAK;GACH,KAAK,IAAIrC,IAAI,GAAGA,IAAI,GAAG,KAAK,EAAI,KAAKyB,EAAK,QAAQ;IAAE,GAAGG,IAAK5B,IAAImB,IAAK;IAAG;IAAG,OAAOA,IAAI;IAAG,QAAQA;IAAG,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GAC9H;EACF,KAAK;GAEH,AADA8B,EAAI,KAAKV,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGF,IAAIT,EAAE,GAAGW,EAAE,GAAGF,IAAIT,IAAI,EAAE,GAAGW,IAAIX,IAAI,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC,GAC5G8B,EAAI,KAAKV,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,IAAIX,EAAE,GAAGS,IAAIT,EAAE,GAAGW,IAAIX,EAAE,GAAGS,IAAIT,IAAI,EAAE,GAAGW,IAAIX,IAAI,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GACpH;EACF,SACE,EAAI,KAAKoB,EAAK,QAAQ;GAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGX,EAAE,GAAGA,EAAE,SAASS,IAAIT,EAAE,GAAGW,IAAIX,EAAE,GAAGS,EAAE,GAAGE,IAAIX,EAAE;GAAI,MAAMkB;GAAK,WAAWhC;EAAE,CAAC,CAAC;CACxH;CACA,OAAO8B;AACT;AAEA,SAASK,EAAQ,GAAsB;CACrC,IAAMC,oBAAQ,IAAI,IAAY,GACxBC,KAAO,GAAa,MAAgB,GAAGC,EAAI,GAAGC,KAC9CC,KAAW,GAAa,MAAgBlB,EAAKE,GAAGc,IAAM/C,IAAIgD,IAAM,KAAKhD,CAAC,GACtEuC,IAAiB,CAAC,GAClBW,IAAOjB,EAAE,IAAI,GAAG,CAAC;CACvB,KAAK,IAAIkB,IAAI,GAAGA,IAAID,GAAM,KAAK;EAC7B,IAAME,IAAOnB,EAAE,IAAI,GAAG,CAAC;EACvB,KAAK,IAAIoB,IAAU,GAAGA,IAAU,IAAI,KAAW;GAC7C,IAAMN,IAAMd,EAAE,IAAI,GAAGA,EAAE,OAAOmB,CAAI,GAC5BJ,IAAMf,EAAE,IAAI,GAAGA,EAAE,OAAOmB,CAAI,GAC9BE,IAAO;GACX,KAAK,IAAIlD,IAAI,GAAGA,IAAIgD,KAAQE,GAAM,KAAK,KAAK,IAAIC,IAAI,GAAGA,IAAIH,KAAQE,GAAM,KAAK,IAAO,CAACT,EAAM,IAAIC,EAAIC,IAAM3C,GAAG4C,IAAMO,CAAC,CAAC,KAAK,CAACN,EAAQF,IAAM3C,GAAG4C,IAAMO,CAAC;GACnJ,IAAI,CAACD,GAAM;GACX,KAAK,IAAIlD,IAAI,GAAGA,IAAIgD,GAAM,KAAK,KAAK,IAAIG,IAAI,GAAGA,IAAIH,GAAM,KAAK,EAAM,IAAIN,EAAIC,IAAM3C,GAAG4C,IAAMO,CAAC,CAAC;GAC7F,IAAMhD,IAAI0B,EAAE,IAAI,GAAG,CAAC;GACpB,EAAI,KAAK,GAAGK,EAAUL,GAAGc,IAAM/C,GAAGgD,IAAMhD,GAAGoD,IAAOpD,GAAGiC,EAAE,MAAM1B,CAAC,GAAG0B,EAAE,MAAM1B,IAAI0B,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;GAC1F;EACF;CACF;CACA,IAAMuB,IAAUvB,EAAE,QAAQ,KAAM,GAAI;CACpC,KAAK,IAAIc,IAAM,GAAGA,IAAMd,EAAE,MAAM,KAC9B,KAAK,IAAIe,IAAM,GAAGA,IAAMf,EAAE,MAAM,KAAO;EACrC,IAAIY,EAAM,IAAIC,EAAIC,GAAKC,CAAG,CAAC,KAAKC,EAAQF,GAAKC,CAAG,KAAK,CAACf,EAAE,OAAOuB,CAAO,GAAG;EACzE,IAAMjD,IAAI0B,EAAE,IAAI,GAAG,CAAC;EACpB,EAAI,KAAK,GAAGK,EAAUL,GAAGc,IAAM/C,GAAGgD,IAAMhD,GAAGA,GAAGiC,EAAE,MAAM1B,CAAC,GAAG0B,EAAE,MAAM1B,IAAI0B,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;CACrF;CAEF,OAAOM;AACT;AAEA,SAASkB,EAAO,GAAsB;CACpC,IACMC,KAAUzB,EAAE,IAAI,OAAQ,GACxB0B,IAAK1D,EAAM,KAAKD,IAAI,GACpB4D,IAAK3B,EAAE,IAAIyB,IAAS,KACpBG,IAAKF,IAAK,KAAK,MAAO1B,EAAE,KAAK,IAAI,KAAK,IAAI,GAAG2B,IAAKD,CAAE,KAAM3D,IAAI,EAAE,KAAKA,IAAI,IAEzE8D,IAAS7B,EAAE,IAAI,GAAG,CAAC,GACnB8B,IAAQ;EAAC;EAAG;EAAG;EAAG;CAAC;CACzB,KAAK,IAAI3D,IAAI2D,EAAM,SAAS,GAAG3D,IAAI,GAAG,KAAK;EACzC,IAAMmD,IAAI,KAAK,MAAMtB,EAAE,KAAK,KAAK7B,IAAI,EAAE;EACvC,CAAC2D,EAAM3D,IAAI2D,EAAMR,MAAM,CAACQ,EAAMR,MAAMA,GAAGQ,EAAM3D,MAAMA,CAAC;CACtD;CACA,OAAO,MAAM,KAAK,EAAE,QAAQ0D,EAAO,IAAI,GAAG,MACxCjC,EAAK,QAAQ;EAAE,GAAGgC,IAAK,KAAWG;EAAG,GAAGN,IAAS,KAAWM;EAAG,OAAO,MAAO,KAAWA;EAAG,QAAQ,MAAO,KAAWA;EAAG,MAAM/B,EAAE,MAAM8B,EAAMC,MAAMA,CAAC;CAAE,CAAC,CACxJ;AACF;AAEA,SAASC,EAAM,GAAW,GAAe,GAAkB,GAAyB;CAClF,IAAMC,IAAO,KAAK,MAAMjC,EAAE,GAAGA,EAAE,CAAC,GAC1BkC,IAAmB,CAAC,GACtBnC,IAAI,CAACkC,GACL9D,IAAI;CACR,OAAO4B,IAAIkC,IAAM;EACf,IAAME,IAAIC,EAAOjE,IAAIiE,EAAO,WAAWrE;EAGvC,AAFAmE,EAAM,KAAKtC,EAAK,QAAQ;GAAE,GAAGD,EAAMI,CAAC;GAAG,GAAGJ,EAAM,CAACsC,CAAI;GAAG,OAAOE;GAAG,QAAQxC,EAAMsC,IAAO,CAAC;GAAG,MAAMjC,EAAE,MAAM7B,IAAIkE,CAAM;EAAE,CAAC,CAAC,GACvH,KAAKF,GACL,KAAK;CACP;CACA,OAAOvC,EAAK,KAAK,EAAE,WAAW,aAAaI,EAAE,IAAI,EAAE,GAAGA,EAAE,IAAI,EAAE,WAAWsC,EAAM,GAAG,GAAGJ,CAAK;AAC5F;AAEA,SAASK,EAAQ,GAAsB;CACrC,IAAMD,IAAQ;EAAC;EAAG;EAAI;EAAI;EAAK;EAAI;CAAG,CAAC,CAACtC,EAAE,IAAI,GAAG,CAAC,MAAM,GAClDoC,IAAS,MAAM,KAAK,EAAE,QAAQpC,EAAE,IAAI,GAAG,CAAC,EAAE,SAAUjC,IAAI,IAAKiC,EAAE,IAAI,GAAG,CAAC,CAAC,GACxEwC,IAAOxC,EAAE,GAAG,MAAM,GAClByC,IAAI1E,IAAIiC,EAAE,IAAI,GAAG,CAAC,IAAIjC,IAAI,GAC1B2E,IAAK3E,IAAIiC,EAAE,IAAI,KAAK,MAAMhC,EAAM,KAAKyE,KAAK1E,CAAC,GAAGiC,EAAE,OAAO,CAAC,GACxD2C,IAAK5E,IAAIiC,EAAE,IAAI,GAAGA,EAAE,OAAO,CAAC;CAClC,OAAO;EACLJ,EAAK,QAAQ,CAAC,GAAG,CAACA,EAAK,YAAY,EAAE,IAAI4C,EAAK,GAAG,CAAC5C,EAAK,UAAU;GAAE;GAAI;GAAI;EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EAClFQ,EAAOJ,GAAG,CAACgC,EAAMhC,GAAGsC,GAAOF,GAAQ,CAAC,CAAC,CAAC;EACtCxC,EAAK,KAAK,EAAE,UAAU,QAAQ4C,EAAK,GAAG,GAAG,CAAC5C,EAAK,QAAQ;GAAE,OAAOI,EAAE;GAAG,QAAQA,EAAE;GAAG,MAAMA,EAAE;EAAO,CAAC,GAAGgC,EAAMhC,GAAGsC,IAAQ,IAAIF,GAAQ,CAAC,CAAC,CAAC;CACvI;AACF;AAEA,SAASQ,EAAM,GAAsB;CACnC,IAAMtC,IAAiB,CAAC,GAClBuC,IAAQ7C,EAAE,IAAI,IAAI,EAAE,GACpB8C,IAAM/E,IAAI,KAEVgF,KADS/C,EAAE,IAAIjC,IACE+E,MAAQD,IAAQ,IACjCG,IAAOhD,EAAE,IAAIA,EAAE,QAAQ,KAAM,GAAI,GACjCiD,IAASjD,EAAE,IAAIA,EAAE,QAAQ,KAAM,GAAI,GACnCS,IAAST,EAAE,OAAO,EAAG,IAAIA,EAAE,IAAI,GAAG6C,IAAQ,CAAC,IAAI;CACrD,KAAK,IAAI1E,IAAI,GAAGA,IAAI0E,GAAO,KAAK;EAC9B,IAAMK,IAAOJ,IAAM3E,IAAI4E,GACjBI,IAAQ,MAAM,KAAK,EAAE,QAAQnD,EAAE,IAAI,GAAG,CAAC,EAAE,UAAU;GAAE,GAAGgD,IAAOhD,EAAE,QAAQ,MAAM,GAAG,IAAIiD;GAAQ,GAAGjD,EAAE,QAAQ,IAAK,CAAC;GAAG,GAAGA,EAAE,QAAQ,GAAG,EAAE;EAAE,EAAE,GAC1IoD,IAAS,CAACpD,EAAE,QAAQ,GAAG,IAAI,GAAGA,EAAE,QAAQ,GAAG,IAAI,CAAC,GAChDqD,IAAQ,KAAK,IAAItF,GAAG,KAAK,MAAMmC,EAAUF,GAAGkD,CAAI,IAAInF,IAAI,KAAK,CAAC,IAAI,CAAC,GACnEuF,IAA0B,CAAC;EACjC,KAAK,IAAIvD,IAAIsD,GAAOtD,KAAKC,EAAE,IAAIjC,GAAG,KAAK,GAAG;GACxC,IAAMwF,IAAM,KAAK,IAAI,GAAGxD,IAAIiD,MAAS,MAAM,IAAIC,IAASA,EAAO,GAC3DhD,IAAI;GACR,KAAK,IAAMiB,KAAKiC,GAAO,KAAKjC,EAAE,IAAI,KAAK,IAAI,GAAGnB,IAAImB,EAAE,MAAM,MAAM,IAAIA,EAAE,IAAIA,EAAE,EAAE;GAC9E,IAAMsC,IAAO,KAAK,IAAIzD,IAAI,OAAQqD,EAAO,MAAM,EAAE,IAAI,KAAM,KAAK,IAAIrD,IAAI,OAAQqD,EAAO,MAAM,EAAE,IAAI;GACnG,EAAI,KAAK,CAACrD,GAAGE,IAAIsD,IAAMC,IAAO,OAAQ,MAAOD,EAAI,CAAC;EACpD;EACA,IAAME,IAAM,KAAK,IAAI,GAAGH,EAAI,KAAK,GAAGrD,OAAOA,CAAC,GAAG,IAAK,GAC9CyD,IAAO,KAAK,IAAIX,IAAO/C,EAAE,QAAQ,KAAK,GAAG,GAAGkD,IAAOnF,CAAC,GACpD4F,IAAO,IAAIL,EAAI,KAAK,CAACvD,GAAGE,OAAO,GAAGF,EAAE,GAAGJ,EAAMuD,IAAQjD,IAAIwD,IAAOC,CAAI,GAAG,CAAC,CAAC,KAAK,GAAG;EAEvF,AADApD,EAAI,KAAKV,EAAK,QAAQ;GAAE,GAAG,GAAG+D,EAAK,GAAG3D,EAAE,IAAIjC,EAAE,GAAG4B,EAAMuD,IAAOH,CAAI,EAAE,GAAGM,EAAM,GAAG1D,EAAMuD,IAAOH,CAAI,EAAE;GAAI,MAAM/C,EAAE;EAAO,CAAC,CAAC,GACxHM,EAAI,KACFV,EAAK,QAAQ;GAAE,GAAG+D;GAAM,MAAM;GAAQ,QAAQxF,MAAMsC,IAAST,EAAE,MAAM,CAAC,IAAIA,EAAE,MAAM,CAAC;GAAG,aAAa;GAAG,gBAAgB;GAAS,eAAe;EAAQ,CAAC,CACzJ;CACF;CACA,OAAOM;AACT;AAEA,SAASsD,EAAQ,GAAsB;CACrC,IAEMC,IAASlE,EAAM,KAAIK,EAAE,QAAQ,IAAK,EAAG,CAAC,GACtC8D,IAAQ9D,EAAE,OAAO,EAAG,GACpB+D,IAAmB,CAAC,GACpBC,IAAO,KAAK,KAAKhE,EAAE,IAAI,EAAC,GACxBiE,IAAO,KAAK,KAAKjE,EAAE,IAAI,EAAC;CAC9B,KAAK,IAAIc,IAAM,GAAGA,IAAMkD,GAAM,KAC5B,KAAK,IAAIvB,IAAI,GAAGA,IAAIwB,GAAM,KAAK;EAC7B,IAAMlE,IAAIe,IAAM,IACVb,IAAID,EAAE,KAAKyC,IAAI,KAAK;EAC1B,IAAI3C,EAAKE,GAAGD,GAAGE,IAAI,EAAC,GAAG;EACvB,IAAMiE,IAAIlE,EAAE,OAAO,EAAG,IAClB,IAAID,IAAI,GAAE,GAAGE,EAAE,eAAmBF,EAAE,GAAGE,IAAI,GAAE,GAAGF,IAAI,GAAE,GAAGE,IAAI,GAAE,eAAmBF,IAAI,GAAE,GAAGE,IAAI,OAC/F,IAAIF,IAAI,GAAE,GAAGE,EAAE,eAAmBF,IAAI,GAAE,GAAGE,IAAI,GAAE,GAAGF,EAAE,GAAGE,IAAI,GAAE,eAAmBF,IAAI,GAAE,GAAGE,IAAI;EACnG,EAAM,KAAKL,EAAK,QAAQ,EAAE,KAAE,CAAC,CAAC;CAChC;CAEF,IAAMU,IAAM,CAACV,EAAK,KAAK;EAAE,MAAM;EAAQ,QAAQI,EAAE,MAAM,CAAC;EAAG,aAAa6D;CAAO,GAAGE,CAAK,CAAC;CAExF,OADID,KAAOxD,EAAI,KAAKV,EAAK,KAAK;EAAE,MAAM;EAAQ,QAAQI,EAAE,MAAM,CAAC;EAAG,aAAaL,EAAMkE,IAAS,GAAI;CAAE,GAAGE,CAAK,CAAC,GACtGzD;AACT;AAEA,SAAS6D,EAAU,GAAW,GAAY,GAAoB;CAC5D,IAAIC,IAAO;CACX,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK;EAC5B,IAAM,IAAK,IAAI,MAAO,KAAK,KAAK;EAChC,IAAO,KAAK,IAAIA,GAAM,KAAK,MAAM1B,IAAK1E,EAAM,KAAK,KAAK,IAAI,CAAC,GAAG2E,KAAM3C,EAAE,IAAIhC,EAAM,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;CACpG;CACA,OAAO8B,EAAKE,GAAG0C,GAAIC,CAAE,IAAI,IAAIyB;AAC/B;AAEA,SAASC,EAAK,GAAsB;CAClC,IAAM/D,IAAiB,CAAC,GAClBgE,IAAUtE,EAAE,IAAI,GAAG,CAAC,GACpBuE,IAA4B;EAChC,CAACxG,IAAIiC,EAAE,IAAI,GAAGA,EAAE,OAAO,CAAC,GAAG,CAAC;EAC5B,CAACjC,IAAIiC,EAAE,IAAI,IAAIA,EAAE,OAAO,CAAC,GAAGA,EAAE,CAAC;EAC/B,CAACA,EAAE,GAAGjC,IAAIiC,EAAE,IAAI,GAAGA,EAAE,OAAO,CAAC,CAAC;EAC9B,CAACA,EAAE,GAAG,CAAC;EACP,CAACA,EAAE,GAAGA,EAAE,CAAC;EACT,CAAC,GAAG,CAAC;CACP;CACA,KAAK,IAAI7B,IAAIoG,EAAM,SAAS,GAAGpG,IAAI,GAAG,KAAK;EACzC,IAAMmD,IAAI,KAAK,MAAMtB,EAAE,KAAK,KAAK7B,IAAI,EAAE;EACvC,CAACoG,EAAMpG,IAAIoG,EAAMjD,MAAM,CAACiD,EAAMjD,MAAM,CAACtB,EAAE,GAAG,CAAC,GAAGuE,EAAMpG,MAAM,CAAC6B,EAAE,GAAG,CAAC,CAAC;CACpE;CACA,IAAIwE,IAAS;CACb,KAAK,IAAM,CAAC9B,GAAIC,MAAO4B,GAAO;EAC5B,IAAIC,MAAWF,GAAS;EACxB,IAAMG,IAAQ1G,IAAI,IAAKiC,EAAE,IAAI,GAAG,CAAC,GAC3B0E,IAAO,KAAK,OAAOP,EAAUnE,GAAG0C,GAAIC,CAAE,IAAI5E,IAAI,KAAK0G,CAAI,GACvDE,IAAQ,KAAK,IAAID,GAAM1E,EAAE,IAAI,GAAG,EAAE,CAAC;EACzC,IAAI2E,IAAQ,GAAG;EACf,IAAMtC,IAASrC,EAAE,IAAI,GAAG,CAAC,GACnB4E,IAAS5E,EAAE,OAAO,EAAG;EAC3B,KAAK,IAAI7B,IAAIwG,GAAOxG,KAAK,GAAG,KAAK,EAAI,KAAKyB,EAAK,UAAU;GAAE;GAAI;GAAI,GAAGzB,IAAIsG;GAAM,MAAMtG,MAAM,KAAKyG,IAAS5E,EAAE,SAASA,EAAE,MAAM7B,IAAIkE,CAAM;EAAE,CAAC,CAAC;EAC3I,KAAU;CACZ;CACA,OAAO/B;AACT;AAEA,IAAMuE,IAAS;AAEf,SAASC,EAAY,GAAsB;CACzC,IAAMxE,IAAiB,CAAC,GAClBoC,IAAK1C,EAAE,IAAIA,EAAE,IAAI,IAAIjC,IAAIiC,EAAE,IAAI,GAAG,CAAC,GACnC2C,IAAK3C,EAAE,IAAI,IAAIjC,IAAIiC,EAAE,IAAI,IAAI,CAAC,GAC9B+E,IAAO/E,EAAE,QAAQ,IAAI,EAAE,GACvBgF,IAAO;EAAC;EAAG;EAAI;CAAE,CAAC,CAAChF,EAAE,IAAI,GAAG,CAAC,MAAM,IACnCiF,IAASjF,EAAE,OAAO,GAAI,GACtBkF,IAAQ,KAAK,MAAMlF,EAAE,GAAGA,EAAE,CAAC;CACjC,KAAK,IAAI7B,IAAI,IAAK,KAAK;EACrB,IAAMsE,IAAIsC,IAAO,KAAK,KAAK5G,CAAC;EAC5B,IAAIsE,IAAIyC,GAAO;EACf,IAAMnF,IAAI2C,IAAKD,IAAI,KAAK,IAAItE,IAAI0G,CAAM,GAChC5E,IAAI0C,IAAKF,IAAI,KAAK,IAAItE,IAAI0G,CAAM,GAChC1D,IAAO4D,KAAQ,KAAM,MAAO,KAAK,IAAI,GAAGtC,KAAKzC,EAAE,IAAI,EAAE;EAE3D,IADID,IAAI,CAACoB,KAAQpB,IAAIC,EAAE,IAAImB,KAAQlB,IAAI,CAACkB,KAAQlB,IAAID,EAAE,IAAImB,KACtDrB,EAAKE,GAAGD,GAAGE,CAAC,KAAKkE,EAAUnE,GAAGD,GAAGE,CAAC,IAAIkB,IAAOpD,IAAI,GAAG;EACxD,IAAMoH,IAAOF,IAAS,KAAK,MAAMxC,KAAK1E,IAAI,IAAI,IAAI,IAAI,KAAK,MAAQI,IAAI6G,IAAQA,IAAQ,CAAC;EACxF,EAAI,KAAKpF,EAAK,UAAU;GAAE,IAAID,EAAMI,CAAC;GAAG,IAAIJ,EAAMM,CAAC;GAAG,GAAGN,EAAMwB,CAAI;GAAG,MAAMnB,EAAE,MAAMmF,CAAI;EAAE,CAAC,CAAC;CAC9F;CACA,OAAO7E;AACT;AAEA,SAAS8E,EAAI,GAAW,GAAmB;CACzC,OAAOlE,IAAIkE,EAAIlE,GAAG5C,IAAI4C,CAAC,IAAI5C;AAC7B;AAEA,SAAS+G,EAAM,GAAsB;CACnC,IAAM/E,IAAiB,CAAC,GAClBoC,IAAK1C,EAAE,IAAIA,EAAE,IAAI,GACjB2C,IAAK3C,EAAE,IAAI,GACXsF,IAAStF,EAAE,IAAI,IAAIjC,GACnBwH,IAAMvF,EAAE,IAAI,GAAG,EAAE,GACnBwF,IAAQxF,EAAE,IAAI,GAAGuF,IAAM,CAAC;CAC5B,OAAOH,EAAIG,GAAKC,CAAK,MAAM,IAAG,IAAQxF,EAAE,IAAI,GAAGuF,IAAM,CAAC;CACtD,IAAME,IAASzF,EAAE,OAAO,EAAG,IAAI,IAAI;CACnC,KAAK,IAAI+B,IAAI,GAAGA,IAAI0D,GAAQ,KAAK;EAC/B,IAAMC,IAAMF,IAAQxF,EAAE,QAAQ,KAAM,IAAI,GAClC2F,KAAKJ,IAAMC,KAASA,GACpBI,IAASL,IAAMC,IAAQE,GACvBG,IAAQL,IAAQJ,EAAIG,GAAKC,CAAK,GAC9BM,IAAQD,IAAQ,KAChBE,IAAmB,CAAC,GACpBC,IAASV,KAAUvD,MAAM,IAAI,IAAI/B,EAAE,QAAQ,IAAK,GAAI,KAAM4F;EAChE,KAAK,IAAIzH,IAAI,GAAGA,KAAK2H,GAAO,KAAK;GAC/B,IAAMxH,IAAKH,IAAI2H,IAASD,IAAQ,KAAK,KAAK,GACpC9F,KAAKwF,IAAMC,KAAS,KAAK,IAAIlH,CAAC,IAAIoH,IAAM,KAAK,IAAIC,IAAIrH,CAAC,GACtD2B,KAAKsF,IAAMC,KAAS,KAAK,IAAIlH,CAAC,IAAIoH,IAAM,KAAK,IAAIC,IAAIrH,CAAC;GAC5D,EAAO,KAAK,GAAGqB,EAAM+C,IAAK3C,IAAIiG,CAAK,EAAE,GAAGrG,EAAMgD,IAAK1C,IAAI+F,CAAK,GAAG;EACjE;EACA,IAAM9B,IAAI,IAAI6B,EAAO,KAAK,GAAG,EAAE;EAC/B,EAAI,KAAKnG,EAAK,QAAQ;GAAE;GAAG,MAAMI,EAAE,MAAM+B,CAAC;GAAG,UAAU;EAAU,CAAC,CAAC;CACrE;CACA,OAAOzB;AACT;AAEA,IAAM2F,IAAQ;CAAE;CAAS;CAAQ;CAAS;CAAO;CAAS;CAAM;CAAa;AAAM,GAS7EC,KAAa,MAAyBtH,EAAI,SAASuH,EAAK,UAAUvH,EAAI,SAAS,WAAWA,EAAI,SAAS;AAE7G,SAAgBwH,EAAe,GAAsB;CACnD,OAAO;EAAE,OAAOxH,EAAI,QAAQsH,EAAUC,CAAI,CAAC,CAAC,OAAO,CAAC;EAAM,SAAS;GAAE,GAAGpI;GAAG,QAAQ;EAAG;EAAG,OAAO;GAAE,GAAG;GAAO,QAAQA;EAAE;CAAE;AAC1H;AAEA,SAAgBsI,EAAe,GAAsB,IAAuB,CAAC,GAAY;CACvF,IAAM,EAAE,MAAG,SAAMvI,EAAiBwI,EAAQ,SAAS,WAC7CtH,IAAOX,EAAO8H,EAAK,IAAI,GACvBI,KAAW,GAAY,MAAe7E,IAAK1C,EAAK,KAAK2C,IAAKD,IAC1D8E,KAAO,GAAY,MAAe,KAAK,IAAI7E,GAAID,IAAK,KAAK,MAAM1C,EAAK,KAAK2C,IAAKD,IAAK,EAAE,CAAC,GACtF+E,IAAUP,EAAUC,CAAI,GACxBO,IAAQN,EAAeD,CAAI,GAC3BQ,IAAS/H,EAAI,QAAQ6H,EAAQ,SAC7BG,IAAmB,CAAC,GAAGH,EAAQ,MAAM;CAC3C,KAAK,IAAItI,IAAIyI,EAAO,SAAS,GAAGzI,IAAI,GAAG,KAAK;EAC1C,IAAMmD,IAAI,KAAK,MAAMtC,EAAK,KAAKb,IAAI,EAAE;EACrC,CAACyI,EAAOzI,IAAIyI,EAAOtF,MAAM,CAACsF,EAAOtF,MAAMqF,EAAO,MAAMC,EAAOzI,MAAMwI,EAAO,IAAI;CAC9E;CACA,IAAME,IAASP,EAAQ,YAAY,OAC7BQ,IAAiB;EACrB;EACA;EACA,MAAM3E,IAAIpE;EACV,MAAMG,IAAIH;EACV;EACA;EACA;EACA,SAAS,MAAMiB,EAAK,IAAIK;EACxB,QAAQsH,EAAO;EACf,QAAQ,MAAMC,GAASzI,IAAIyI,EAAO,SAAUA,EAAO,UAAUA,EAAO,WAAWD,EAAO;EACtF,KAAK,MAAS,GAAGE,EAAO,GAAGE;CAC7B,GACMC,IAAOF,EAAO,GAAG,OAAO,GACxBG,IAAQhB,EAAME,EAAK,MAAM,CAACW,CAAM,GAChC1I,IAAkB,CAAC;CAsBzB,OArBIkI,EAAQ,WACVlI,EAAK,KAAK;EACR,KAAK;EACL,OAAO;GACL,GAAGsI,EAAM,QAAQ;GACjB,GAAGxI,IAAIwI,EAAM,QAAQ;GACrB,MAAMA,EAAM;GACZ,aAAa;GACb,UAAU;GACV,YAAY;GACZ,eAAe;GACf,YAAYQ,EAAK;EACnB;EACA,MAAMZ,EAAQ;CAChB,CAAC,GACCA,EAAQ,SACVlI,EAAK,KAAK;EACR,KAAK;EACL,OAAO;GAAE,GAAGsI,EAAM,MAAM;GAAG,GAAGxI,IAAIwI,EAAM,MAAM;GAAQ,MAAMA,EAAM;GAAO,UAAU;GAAI,YAAY;GAAK,eAAe;GAAM,YAAYQ,EAAK;EAAK;EACnJ,MAAMZ,EAAQ;CAChB,CAAC,GACI1G,EAAK,OAAO;EAAE,OAAO;EAA8B,SAAS,OAAOuC,EAAE,GAAGjE;CAAI,GAAG;EACpF0B,EAAK,QAAQ,CAAC,GAAG,CACfA,EAAK,QAAQ;GAAE,IAAIoH;GAAM,WAAW;GAAkB,GAAG;GAAG,GAAG;GAAG,OAAO7E;GAAG,QAAQjE;EAAE,GAAG,CACvF0B,EAAK,QAAQ;GAAE,OAAOuC;GAAG,QAAQjE;GAAG,MAAM;EAAQ,CAAC,GACnD0B,EAAK,WAAW;GAAE,IAAI;GAAG,IAAI1B;GAAG,IAAIF,EAAM;GAAI,IAAIA,EAAM;GAAI,MAAM;EAAQ,CAAC,CAC7E,CAAC,CACH,CAAC;EACD4B,EAAK,QAAQ;GAAE,OAAOuC;GAAG,QAAQjE;GAAG,MAAMyI,EAAO;EAAK,CAAC;EACvD,GAAGM;EACH,GAAG7I;CACL,CAAC;AACH;AAEA,IAAM+I,oBAAa,IAAI,IAAI,CAAC,WAAW,WAAW,CAAC,GAC7CC,KAAY,MAAkBD,EAAW,IAAIJ,CAAI,IAAIA,IAAOA,EAAK,QAAQ,WAAW,MAAM,IAAIM,EAAE,YAAY,GAAG,GAC/GC,KAAa,MAAiBlJ,EAAK,QAAQ,MAAM,OAAO,CAAC,CAAC,QAAQ,MAAM,MAAM,CAAC,CAAC,QAAQ,MAAM,MAAM,CAAC,CAAC,QAAQ,MAAM,QAAQ;AAElI,SAAgBmJ,EAAa,GAAoB;CAC/C,IAAMC,IAAQ,OAAO,QAAQzI,EAAE,KAAK,CAAC,CAClC,KAAK,CAAC4G,GAAGhH,OAAO,IAAIyI,EAASzB,CAAC,EAAE,IAAI2B,EAAU,OAAO3I,CAAC,CAAC,EAAE,EAAE,CAAC,CAC5D,KAAK,EAAE,GACJmF,IAAQ/E,EAAE,SAAS,KAAA,KAAiCA,EAAE,YAAY,CAAC,EAAA,CAAG,IAAIwI,CAAY,CAAC,CAAC,KAAK,EAAE,IAAhED,EAAUvI,EAAE,IAAI;CACrD,OAAO+E,IAAQ,IAAI/E,EAAE,MAAMyI,EAAM,GAAG1D,EAAM,IAAI/E,EAAE,IAAI,KAAK,IAAIA,EAAE,MAAMyI,EAAM;AAC7E;;;ACjdA,IAAaC,IAA6B,EACxC,OAAO;CACL,QAAQ,EAAE,SAAS,eAAe;CAClC,MAAM,EAAE,SAAS,cAAc;AACjC,EACF,GACaC,IAAqC,EAAE,OAAO,SAAS;AAapE,SAASC,EAAU,GAAY,GAAwB;CACrD,OAAOC,EAAc7I,EAAE,KAAK;EAAE,GAAGA,EAAE;EAAO;CAAI,GAAGA,EAAE,QAAQA,EAAE,UAAU,IAAI4I,CAAS,CAAC;AACvF;AAEA,IAAaE,IAA6B,kBAA2C,SACnF,EAAE,SAAM,UAAO,QAAK,QAAK,UAAO,YAAS,WAAQ,UAAU,gBAC3D,GACA;CACA,IAAM,EAAE,MAAG,SAAM/J,EAAiBgK,IAC5B,CAACC,GAAQC,KAAaC,EAAwB,IAAI,GAClDpB,IAAS,MAAMqB,EAAM,CAAC,CAAC,QAAQ,iBAAiB,EAAE,KAClD/B,IAAOvH,KAAOc,EAAcnB,CAAI,GAChC0I,IAAQkB,QAAc9B,EAAeF,GAAM;EAAE;EAAO,UAAUU;CAAO,CAAC,GAAG;EAACV;EAAM2B;EAAOjB;CAAM,CAAC,GAC9FzI,IAAOgI,EAAeD,CAAI;CAChC,OACE,kBAAC,QAAD;EAAM,WAAWvI,EAAG,yBAAyBwK,CAAS;EAAtD,UAAA,CACE,kBAAC,OAAD;GACO;GACL,SAAS,OAAOjG,EAAE,GAAGjE;GACrB,MAAK;GACL,cAAYmK;GACZ,qBAAoB;GACpB,WAAWzK,EAAG,6CAA6C6J,EAA2B,MAAMK,EAAM,CAAC,OAAO;GAN5G,UAAA;IAQGQ,KAAOP,MAAWO,IACjB,kBAAC,SAAD;KAAO,MAAMA;KAAK,OAAOnG;KAAG,QAAQjE;KAAG,qBAAoB;KAAiB,eAAe8J,EAAUM,CAAG;IAAI,CAAA,IAE5GrB,EAAM,UAAU,IAAIU,CAAS;IAE9BY,KACC,kBAAC,QAAD;KACE,GAAGnK,EAAK,QAAQ;KAChB,GAAGF,IAAIE,EAAK,QAAQ;KACpB,MAAMA,EAAK;KACX,aAAa;KACb,UAAU;KACV,YAAY;KACZ,eAAe;KACf,YAAY8I,EAAK;KAEhB,UAAAqB;IACG,CAAA;IAEPC,KACC,kBAAC,QAAD;KAAM,GAAGpK,EAAK,MAAM;KAAG,GAAGF,IAAIE,EAAK,MAAM;KAAQ,MAAMA,EAAK;KAAO,UAAU;KAAI,YAAY;KAAK,eAAe;KAAM,YAAY8I,EAAK;KACrI,UAAAsB;IACG,CAAA;GAEL;EACL,CAAA,GAAA,kBAAC,QAAD;GAAM,eAAA;GAAY,WAAU;EAAiE,CAAA,CACzF;;AAEV,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc;AAWpE,SAAgBC,EAAc,EAAE,SAAM,UAAO,QAAK,UAAO,YAAS,WAAQ,YAA0C;CAClH,IAAM,EAAE,MAAG,SAAM3K,EAAiBgK,IAC5Bb,IAAQZ,EAAezH,KAAOc,EAAcnB,CAAI,GAAG;EAAE;EAAO;EAAO;EAAS,UAAU;CAAM,CAAC;CACnG,OAAOgJ,EAAa;EAAE,GAAGN;EAAO,OAAO;GAAE,GAAGA,EAAM;GAAO,OAAO9E,IAAI;GAAG,QAAQjE,IAAI;GAAG,MAAM;GAAO,WAAWmK;EAAM;CAAE,CAAC;AACzH"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_RELEASE_ART_DEFAULT_VARIANTS, n as KAESO_RELEASE_ART_VARIANTS, a as RELEASE_ART_STYLES, r as ReleaseArt, o as isReleaseArtSpec, s as nextReleaseArt, c as randomReleaseArt, l as releaseArtFor, i as releaseArtSvg } from "../chunks/release-art-Chd8l9Rf.js";
2
+ export { t as KAESO_RELEASE_ART_DEFAULT_VARIANTS, n as KAESO_RELEASE_ART_VARIANTS, a as RELEASE_ART_STYLES, r as ReleaseArt, o as isReleaseArtSpec, s as nextReleaseArt, c as randomReleaseArt, l as releaseArtFor, i as releaseArtSvg } from "../chunks/release-art-Ogl-L1Vh.js";
package/dist/index.js CHANGED
@@ -126,7 +126,7 @@ import { KAESO_SPARKLINE_DEFAULT_VARIANTS as ia, KAESO_SPARKLINE_VARIANTS as aa,
126
126
  import { KAESO_STAT_DEFAULT_VARIANTS as sa, KAESO_STAT_VARIANTS as ca, MetricRow as la, STAT_VALUE_STEPS as ua, Stat as da, StatGrid as fa, StatTile as pa, statGridFit as ma, statGridLayout as ha } from "./components/stat.js";
127
127
  import { KAESO_KEY_VALUE_DEFAULT_VARIANTS as ga, KAESO_KEY_VALUE_VARIANTS as _a, KeyValue as va } from "./components/key-value.js";
128
128
  import { KAESO_QR_CODE_DEFAULT_VARIANTS as ya, KAESO_QR_CODE_VARIANTS as ba, QRCode as xa } from "./components/qr-code.js";
129
- import { a as Sa, c as Ca, i as wa, l as Ta, n as Ea, o as Da, r as Oa, s as ka, t as Aa } from "./chunks/release-art-Chd8l9Rf.js";
129
+ import { a as Sa, c as Ca, i as wa, l as Ta, n as Ea, o as Da, r as Oa, s as ka, t as Aa } from "./chunks/release-art-Ogl-L1Vh.js";
130
130
  import { i as ja, n as Ma, r as Na, t as Pa } from "./chunks/collapsible-CDQq1Y9x.js";
131
131
  import "./components/collapsible.js";
132
132
  import { KAESO_TIMELINE_DEFAULT_VARIANTS as Fa, KAESO_TIMELINE_VARIANTS as Ia, Timeline as La } from "./components/timeline.js";
@@ -4,6 +4,7 @@ export declare const docs: {
4
4
  props: {
5
5
  seed: string;
6
6
  art: string;
7
+ src: string;
7
8
  label: string;
8
9
  title: string;
9
10
  eyebrow: string;
@@ -20,6 +20,7 @@ export interface ReleaseArtProps {
20
20
  seed: string;
21
21
  label: string;
22
22
  art?: ReleaseArtSpec | undefined;
23
+ src?: string | undefined;
23
24
  title?: ReactNode | undefined;
24
25
  eyebrow?: ReactNode | undefined;
25
26
  shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicplanes/kaeso-ui",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Kaeso's UI library: React components on Base UI, Tailwind CSS v4 and the Kaeso tokens.",
5
5
  "license": "MIT",
6
6
  "author": "Devin Oldenburg",
@@ -102,7 +102,7 @@
102
102
  "shiki": "4.4.3",
103
103
  "tailwind-merge": "3.7.0",
104
104
  "uqr": "0.1.3",
105
- "@logicplanes/kaeso-tokens": "0.3.0"
105
+ "@logicplanes/kaeso-tokens": "0.3.1"
106
106
  },
107
107
  "devDependencies": {
108
108
  "@hugeicons/core-free-icons": "4.3.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-art-Chd8l9Rf.js","names":["cn","RELEASE_ART_STYLES","RELEASE_ART_VIEW","U","CLEAR","hash","h","i","text","random","a","seed","t","isReleaseArtSpec","value","v","art","randomReleaseArt","pick","n","next","nextReleaseArt","recent","previous","styles","p","s","palettes","seeds","list","releaseArtFor","round","node","children","open","x","c","y","clearEdge","dy","masked","primitive","out","kind","ink","accent","fill","bauhaus","taken","key","col","row","blocked","bigs","b","size","attempt","free","j","density","albers","margin","lo","hi","x0","levels","order","l","bands","diag","rects","w","widths","offset","angle","stripes","clip","r","cx","cy","waves","lines","top","gapY","peak","spread","base","bumps","ripple","start","raw","env","fine","max","lift","line","truchet","stroke","inner","paths","cols","rows","d","clearance","best","arcs","anchors","spots","placed","band","room","count","hollow","GOLDEN","phyllotaxis","step","arms","banded","reach","tone","gcd","spiro","radius","big","small","layers","pen","k","extent","turns","steps","points","scale","STYLE","paletteOf","spec","releaseArtText","drawReleaseArt","options","between","int","palette","place","ground","colors","prefix","canvas","name","mask","drawn","font","KEEP_CAMEL","attrName","m","escapeXml","serializeArt","attrs","KAESO_RELEASE_ART_VARIANTS","KAESO_RELEASE_ART_DEFAULT_VARIANTS","toElement","createElement","ReleaseArt","shape","useId","useMemo","className","label","eyebrow","title","releaseArtSvg"],"sources":["../../src/components/release-art/drawing.ts","../../src/components/release-art/release-art.tsx"],"sourcesContent":["import { art, font } from \"@logicplanes/kaeso-tokens\";\n\nexport const RELEASE_ART_STYLES = [\"bauhaus\", \"albers\", \"stripes\", \"waves\", \"truchet\", \"arcs\", \"phyllotaxis\", \"spiro\"] as const;\nexport type ReleaseArtStyle = (typeof RELEASE_ART_STYLES)[number];\n\nexport interface ReleaseArtSpec {\n version: 1;\n seed: number;\n style: ReleaseArtStyle;\n palette: number;\n}\n\nexport interface ArtNode {\n tag: string;\n attrs: Record<string, string | number>;\n children?: ArtNode[] | undefined;\n text?: string | undefined;\n}\n\nexport const RELEASE_ART_VIEW = { banner: { w: 640, h: 360 }, wide: { w: 840, h: 360 } } as const;\nexport type ReleaseArtShape = keyof typeof RELEASE_ART_VIEW;\n\nconst U = 40;\nconst CLEAR = { rx: U * 7.5, ry: U * 7.5 };\n\nfunction hash(text: string): number {\n let h = 2166136261;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nfunction random(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function isReleaseArtSpec(value: unknown): value is ReleaseArtSpec {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as Record<string, unknown>;\n return (\n v.version === 1 &&\n typeof v.seed === \"number\" &&\n Number.isInteger(v.seed) &&\n v.seed >= 0 &&\n v.seed <= 0xffffffff &&\n typeof v.style === \"string\" &&\n (RELEASE_ART_STYLES as readonly string[]).includes(v.style) &&\n typeof v.palette === \"number\" &&\n Number.isInteger(v.palette) &&\n v.palette >= 0 &&\n v.palette < art.palettes.length\n );\n}\n\nexport function randomReleaseArt(next: () => number = Math.random): ReleaseArtSpec {\n const pick = (n: number) => Math.min(n - 1, Math.floor(next() * n));\n return {\n version: 1,\n seed: Math.min(0xffffffff, Math.floor(next() * 0x100000000)),\n style: RELEASE_ART_STYLES[pick(RELEASE_ART_STYLES.length)] ?? \"bauhaus\",\n palette: pick(art.palettes.length),\n };\n}\n\nexport function nextReleaseArt(previous: readonly ReleaseArtSpec[], next: () => number = Math.random): ReleaseArtSpec {\n const recent = previous.slice(-3);\n const styles = RELEASE_ART_STYLES.filter((s) => !recent.some((p) => p.style === s));\n const palettes = art.palettes.map((_, i) => i).filter((i) => !previous.slice(-4).some((p) => p.palette === i));\n const seeds = new Set(previous.map((p) => p.seed));\n const pick = <T>(list: readonly T[]) => list[Math.min(list.length - 1, Math.floor(next() * list.length))];\n let seed = Math.min(0xffffffff, Math.floor(next() * 0x100000000));\n while (seeds.has(seed)) seed = (seed + 1) >>> 0;\n return { version: 1, seed, style: pick(styles) ?? \"bauhaus\", palette: pick(palettes) ?? 0 };\n}\n\nexport function releaseArtFor(text: string): ReleaseArtSpec {\n const seed = hash(text);\n return {\n version: 1,\n seed,\n style: RELEASE_ART_STYLES[seed % RELEASE_ART_STYLES.length] ?? \"bauhaus\",\n palette: (seed >>> 8) % art.palettes.length,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst node = (tag: string, attrs: ArtNode[\"attrs\"], children?: ArtNode[]): ArtNode => (children ? { tag, attrs, children } : { tag, attrs });\n\ninterface Canvas {\n w: number;\n h: number;\n cols: number;\n rows: number;\n next: () => number;\n between: (lo: number, hi: number) => number;\n int: (lo: number, hi: number) => number;\n chance: (p: number) => boolean;\n ground: string;\n color: (i: number) => string;\n id: (name: string) => string;\n}\n\nconst open = (c: Canvas, x: number, y: number) => (x / CLEAR.rx) ** 2 + ((c.h - y) / CLEAR.ry) ** 2 < 1;\nconst clearEdge = (c: Canvas, y: number) => {\n const dy = (c.h - y) / CLEAR.ry;\n return dy >= 1 ? 0 : CLEAR.rx * Math.sqrt(1 - dy * dy);\n};\nconst masked = (c: Canvas, children: ArtNode[]) => node(\"g\", { mask: `url(#${c.id(\"clear\")})` }, children);\n\nfunction primitive(c: Canvas, x: number, y: number, s: number, fill: string, accent: string): ArtNode[] {\n const out: ArtNode[] = [];\n const kind = c.int(0, 7);\n const t = `rotate(${c.int(0, 3) * 90} ${round(x + s / 2)} ${round(y + s / 2)})`;\n if (c.chance(0.55)) out.push(node(\"rect\", { x, y, width: s, height: s, fill }));\n const ink = out.length ? accent : fill;\n switch (kind) {\n case 0:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}A${s} ${s} 0 0 1 ${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 1:\n out.push(node(\"path\", { d: `M${x} ${y + s}A${s / 2} ${s / 2} 0 0 1 ${x + s} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 2:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 2, fill: ink }));\n break;\n case 3:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 4:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 4, fill: ink }));\n break;\n case 5:\n for (let i = 0; i < 3; i++) out.push(node(\"rect\", { x: x + (i * s) / 3, y, width: s / 6, height: s, fill: ink, transform: t }));\n break;\n case 6:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n out.push(node(\"path\", { d: `M${x} ${y + s}L${x + s} ${y + s}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n break;\n default:\n out.push(node(\"path\", { d: `M${x} ${y}A${s} ${s} 0 0 1 ${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n }\n return out;\n}\n\nfunction bauhaus(c: Canvas): ArtNode[] {\n const taken = new Set<string>();\n const key = (col: number, row: number) => `${col},${row}`;\n const blocked = (col: number, row: number) => open(c, col * U, (row + 1) * U);\n const out: ArtNode[] = [];\n const bigs = c.int(2, 4);\n for (let b = 0; b < bigs; b++) {\n const size = c.int(2, 3);\n for (let attempt = 0; attempt < 20; attempt++) {\n const col = c.int(0, c.cols - size);\n const row = c.int(0, c.rows - size);\n let free = true;\n for (let i = 0; i < size && free; i++) for (let j = 0; j < size && free; j++) free = !taken.has(key(col + i, row + j)) && !blocked(col + i, row + j);\n if (!free) continue;\n for (let i = 0; i < size; i++) for (let j = 0; j < size; j++) taken.add(key(col + i, row + j));\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, size * U, c.color(a), c.color(a + c.int(1, 3))));\n break;\n }\n }\n const density = c.between(0.55, 0.85);\n for (let col = 0; col < c.cols; col++) {\n for (let row = 0; row < c.rows; row++) {\n if (taken.has(key(col, row)) || blocked(col, row) || !c.chance(density)) continue;\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, U, c.color(a), c.color(a + c.int(1, 3))));\n }\n }\n return out;\n}\n\nfunction albers(c: Canvas): ArtNode[] {\n const side = U * 6;\n const margin = (c.h - side) / 2;\n const lo = CLEAR.rx - U / 2;\n const hi = c.w - margin - side;\n const x0 = lo + Math.round((c.next() * Math.max(0, hi - lo)) / (U / 2)) * (U / 2);\n const unit = side / 20;\n const levels = c.int(3, 4);\n const order = [0, 1, 2, 3];\n for (let i = order.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [order[i], order[j]] = [order[j] ?? j, order[i] ?? i];\n }\n return Array.from({ length: levels }, (_, l) =>\n node(\"rect\", { x: x0 + 2 * unit * l, y: margin + 3 * unit * l, width: side - 4 * unit * l, height: side - 4 * unit * l, fill: c.color(order[l] ?? l) }),\n );\n}\n\nfunction bands(c: Canvas, angle: number, widths: number[], offset: number): ArtNode {\n const diag = Math.hypot(c.w, c.h);\n const rects: ArtNode[] = [];\n let x = -diag;\n let i = 0;\n while (x < diag) {\n const w = widths[i % widths.length] ?? U;\n rects.push(node(\"rect\", { x: round(x), y: round(-diag), width: w, height: round(diag * 2), fill: c.color(i + offset) }));\n x += w;\n i += 1;\n }\n return node(\"g\", { transform: `translate(${c.w / 2} ${c.h / 2}) rotate(${angle})` }, rects);\n}\n\nfunction stripes(c: Canvas): ArtNode[] {\n const angle = [0, 90, 45, -45, 30, -60][c.int(0, 5)] ?? 0;\n const widths = Array.from({ length: c.int(5, 9) }, () => (U / 2) * c.int(1, 5));\n const clip = c.id(\"disc\");\n const r = U * c.int(2, 3) + U / 2;\n const cx = U * c.int(Math.ceil((CLEAR.rx + r) / U), c.cols - 2);\n const cy = U * c.int(3, c.rows - 3);\n return [\n node(\"defs\", {}, [node(\"clipPath\", { id: clip }, [node(\"circle\", { cx, cy, r })])]),\n masked(c, [bands(c, angle, widths, 0)]),\n node(\"g\", { clipPath: `url(#${clip})` }, [node(\"rect\", { width: c.w, height: c.h, fill: c.ground }), bands(c, angle + 90, widths, 1)]),\n ];\n}\n\nfunction waves(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const lines = c.int(14, 18);\n const top = U * 2.5;\n const bottom = c.h - U;\n const gapY = (bottom - top) / (lines - 1);\n const peak = c.w * c.between(0.58, 0.74);\n const spread = c.w * c.between(0.09, 0.14);\n const accent = c.chance(0.6) ? c.int(2, lines - 3) : -1;\n for (let i = 0; i < lines; i++) {\n const base = top + i * gapY;\n const bumps = Array.from({ length: c.int(3, 5) }, () => ({ x: peak + c.between(-1.2, 1.2) * spread, h: c.between(0.3, 1), s: c.between(9, 22) }));\n const ripple = [c.between(0, 6.28), c.between(0, 6.28)];\n const start = Math.max(U, Math.ceil((clearEdge(c, base) + U / 2) / 4) * 4);\n const raw: [number, number][] = [];\n for (let x = start; x <= c.w - U; x += 4) {\n const env = Math.exp(-((x - peak) ** 2) / (2 * spread * spread));\n let y = 0;\n for (const b of bumps) y += b.h * Math.exp(-((x - b.x) ** 2) / (2 * b.s * b.s));\n const fine = Math.sin(x * 0.21 + (ripple[0] ?? 0)) * 0.6 + Math.sin(x * 0.53 + (ripple[1] ?? 0)) * 0.4;\n raw.push([x, y * env + fine * 0.04 * (0.15 + env)]);\n }\n const max = Math.max(...raw.map(([, y]) => y), 0.001);\n const lift = Math.min(gapY * c.between(2.4, 4.4), base - U);\n const line = `M${raw.map(([x, y]) => `${x} ${round(base - (y / max) * lift)}`).join(\"L\")}`;\n out.push(node(\"path\", { d: `${line}L${c.w - U} ${round(base + gapY)}L${start} ${round(base + gapY)}Z`, fill: c.ground }));\n out.push(\n node(\"path\", { d: line, fill: \"none\", stroke: i === accent ? c.color(1) : c.color(0), strokeWidth: 2, strokeLinejoin: \"round\", strokeLinecap: \"round\" }),\n );\n }\n return out;\n}\n\nfunction truchet(c: Canvas): ArtNode[] {\n const t = U * 2;\n const h = t / 2;\n const stroke = round(t * c.between(0.2, 0.3));\n const inner = c.chance(0.5);\n const paths: ArtNode[] = [];\n const cols = Math.ceil(c.w / t);\n const rows = Math.ceil(c.h / t);\n for (let col = 0; col < cols; col++) {\n for (let r = 0; r < rows; r++) {\n const x = col * t;\n const y = c.h - (r + 1) * t;\n if (open(c, x, y + t)) continue;\n const d = c.chance(0.5)\n ? `M${x + h} ${y}A${h} ${h} 0 0 1 ${x} ${y + h}M${x + t} ${y + h}A${h} ${h} 0 0 0 ${x + h} ${y + t}`\n : `M${x + h} ${y}A${h} ${h} 0 0 0 ${x + t} ${y + h}M${x} ${y + h}A${h} ${h} 0 0 1 ${x + h} ${y + t}`;\n paths.push(node(\"path\", { d }));\n }\n }\n const out = [node(\"g\", { fill: \"none\", stroke: c.color(0), strokeWidth: stroke }, paths)];\n if (inner) out.push(node(\"g\", { fill: \"none\", stroke: c.color(1), strokeWidth: round(stroke * 0.34) }, paths));\n return out;\n}\n\nfunction clearance(c: Canvas, cx: number, cy: number): number {\n let best = Infinity;\n for (let i = 0; i <= 90; i++) {\n const a = (i / 90) * (Math.PI / 2);\n best = Math.min(best, Math.hypot(cx - CLEAR.rx * Math.cos(a), cy - (c.h - CLEAR.ry * Math.sin(a))));\n }\n return open(c, cx, cy) ? 0 : best;\n}\n\nfunction arcs(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const anchors = c.int(2, 3);\n const spots: [number, number][] = [\n [U * c.int(4, c.cols - 2), 0],\n [U * c.int(11, c.cols - 1), c.h],\n [c.w, U * c.int(2, c.rows - 2)],\n [c.w, 0],\n [c.w, c.h],\n [0, 0],\n ];\n for (let i = spots.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [spots[i], spots[j]] = [spots[j] ?? [c.w, 0], spots[i] ?? [c.w, 0]];\n }\n let placed = 0;\n for (const [cx, cy] of spots) {\n if (placed === anchors) break;\n const band = (U / 2) * c.int(1, 2);\n const room = Math.floor((clearance(c, cx, cy) - U / 2) / band);\n const count = Math.min(room, c.int(4, 10));\n if (count < 3) continue;\n const offset = c.int(0, 3);\n const hollow = c.chance(0.4);\n for (let i = count; i >= 1; i--) out.push(node(\"circle\", { cx, cy, r: i * band, fill: i === 1 && hollow ? c.ground : c.color(i + offset) }));\n placed += 1;\n }\n return out;\n}\n\nconst GOLDEN = 2.399963229728653;\n\nfunction phyllotaxis(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2 - U * c.int(0, 2);\n const cy = c.h / 2 + U * c.int(-1, 1);\n const step = c.between(11, 14);\n const arms = [8, 13, 21][c.int(0, 2)] ?? 13;\n const banded = c.chance(0.35);\n const reach = Math.hypot(c.w, c.h);\n for (let i = 1; ; i++) {\n const r = step * Math.sqrt(i);\n if (r > reach) break;\n const x = cx + r * Math.cos(i * GOLDEN);\n const y = cy + r * Math.sin(i * GOLDEN);\n const size = step * (0.3 + 0.12 * Math.min(1, r / (c.h / 2)));\n if (x < -size || x > c.w + size || y < -size || y > c.h + size) continue;\n if (open(c, x, y) || clearance(c, x, y) < size + U / 4) continue;\n const tone = banded ? Math.floor(r / (U * 1.5)) % 4 : Math.floor(((i % arms) / arms) * 4);\n out.push(node(\"circle\", { cx: round(x), cy: round(y), r: round(size), fill: c.color(tone) }));\n }\n return out;\n}\n\nfunction gcd(a: number, b: number): number {\n return b ? gcd(b, a % b) : a;\n}\n\nfunction spiro(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2;\n const cy = c.h / 2;\n const radius = c.h / 2 - U;\n const big = c.int(7, 13);\n let small = c.int(2, big - 2);\n while (gcd(big, small) !== 1) small = c.int(2, big - 2);\n const layers = c.chance(0.5) ? 2 : 1;\n for (let l = 0; l < layers; l++) {\n const pen = small * c.between(0.75, 1.05);\n const k = (big - small) / small;\n const extent = big - small + pen;\n const turns = small / gcd(big, small);\n const steps = turns * 360;\n const points: string[] = [];\n const scale = (radius * (l === 0 ? 1 : c.between(0.4, 0.55))) / extent;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * turns * Math.PI * 2;\n const x = (big - small) * Math.cos(a) + pen * Math.cos(k * a);\n const y = (big - small) * Math.sin(a) - pen * Math.sin(k * a);\n points.push(`${round(cx + x * scale)} ${round(cy + y * scale)}`);\n }\n const d = `M${points.join(\"L\")}Z`;\n out.push(node(\"path\", { d, fill: c.color(l), fillRule: \"evenodd\" }));\n }\n return out;\n}\n\nconst STYLE = { bauhaus, albers, stripes, waves, truchet, arcs, phyllotaxis, spiro } as const;\n\nexport interface DrawOptions {\n shape?: ReleaseArtShape | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n idPrefix?: string | undefined;\n}\n\nconst paletteOf = (spec: ReleaseArtSpec) => art.palettes[spec.palette % art.palettes.length] ?? art.palettes[0];\n\nexport function releaseArtText(spec: ReleaseArtSpec) {\n return { color: art.grounds[paletteOf(spec).ground].text, eyebrow: { x: U, bottom: 96 }, title: { x: U - 2, bottom: U } };\n}\n\nexport function drawReleaseArt(spec: ReleaseArtSpec, options: DrawOptions = {}): ArtNode {\n const { w, h } = RELEASE_ART_VIEW[options.shape ?? \"banner\"];\n const next = random(spec.seed);\n const between = (lo: number, hi: number) => lo + next() * (hi - lo);\n const int = (lo: number, hi: number) => Math.min(hi, lo + Math.floor(next() * (hi - lo + 1)));\n const palette = paletteOf(spec);\n const place = releaseArtText(spec);\n const ground = art.grounds[palette.ground];\n const colors: string[] = [...palette.colors];\n for (let i = colors.length - 1; i > 0; i--) {\n const j = Math.floor(next() * (i + 1));\n [colors[i], colors[j]] = [colors[j] ?? ground.text, colors[i] ?? ground.text];\n }\n const prefix = options.idPrefix ?? \"art\";\n const canvas: Canvas = {\n w,\n h,\n cols: w / U,\n rows: h / U,\n next,\n between,\n int,\n chance: (p) => next() < p,\n ground: ground.fill,\n color: (i) => colors[((i % colors.length) + colors.length) % colors.length] ?? ground.text,\n id: (name) => `${prefix}-${name}`,\n };\n const mask = canvas.id(\"clear\");\n const drawn = STYLE[spec.style](canvas);\n const text: ArtNode[] = [];\n if (options.eyebrow)\n text.push({\n tag: \"text\",\n attrs: {\n x: place.eyebrow.x,\n y: h - place.eyebrow.bottom,\n fill: place.color,\n fillOpacity: 0.7,\n fontSize: 16,\n fontWeight: 500,\n letterSpacing: 0.1,\n fontFamily: font.sans,\n },\n text: options.eyebrow,\n });\n if (options.title)\n text.push({\n tag: \"text\",\n attrs: { x: place.title.x, y: h - place.title.bottom, fill: place.color, fontSize: 52, fontWeight: 600, letterSpacing: -1.5, fontFamily: font.sans },\n text: options.title,\n });\n return node(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${w} ${h}` }, [\n node(\"defs\", {}, [\n node(\"mask\", { id: mask, maskUnits: \"userSpaceOnUse\", x: 0, y: 0, width: w, height: h }, [\n node(\"rect\", { width: w, height: h, fill: \"white\" }),\n node(\"ellipse\", { cx: 0, cy: h, rx: CLEAR.rx, ry: CLEAR.ry, fill: \"black\" }),\n ]),\n ]),\n node(\"rect\", { width: w, height: h, fill: ground.fill }),\n ...drawn,\n ...text,\n ]);\n}\n\nconst KEEP_CAMEL = new Set([\"viewBox\", \"maskUnits\"]);\nconst attrName = (name: string) => (KEEP_CAMEL.has(name) ? name : name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`));\nconst escapeXml = (text: string) => text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n\nexport function serializeArt(n: ArtNode): string {\n const attrs = Object.entries(n.attrs)\n .map(([k, v]) => ` ${attrName(k)}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = n.text !== undefined ? escapeXml(n.text) : (n.children ?? []).map(serializeArt).join(\"\");\n return inner ? `<${n.tag}${attrs}>${inner}</${n.tag}>` : `<${n.tag}${attrs}/>`;\n}\n","import { createElement, forwardRef, useId, useMemo, type ReactNode } from \"react\";\nimport { font } from \"@logicplanes/kaeso-tokens\";\nimport { cn } from \"../../utils/cn.js\";\nimport { drawReleaseArt, releaseArtFor, releaseArtText, serializeArt, RELEASE_ART_VIEW, type ArtNode, type ReleaseArtSpec } from \"./drawing.js\";\n\nexport { RELEASE_ART_STYLES, isReleaseArtSpec, nextReleaseArt, randomReleaseArt, releaseArtFor, type ReleaseArtSpec, type ReleaseArtStyle } from \"./drawing.js\";\n\nexport const KAESO_RELEASE_ART_VARIANTS = {\n shape: {\n banner: { classes: \"aspect-video\" },\n wide: { classes: \"aspect-21/9\" },\n },\n} as const;\nexport const KAESO_RELEASE_ART_DEFAULT_VARIANTS = { shape: \"banner\" } as const;\n\nexport interface ReleaseArtProps {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n className?: string | undefined;\n}\n\nfunction toElement(n: ArtNode, key: number): ReactNode {\n return createElement(n.tag, { ...n.attrs, key }, n.text ?? n.children?.map(toElement));\n}\n\nexport const ReleaseArt = /* @__PURE__ */ forwardRef<SVGSVGElement, ReleaseArtProps>(function ReleaseArt(\n { seed, label, art, title, eyebrow, shape = \"banner\", className },\n ref,\n) {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const prefix = `art${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const spec = art ?? releaseArtFor(seed);\n const drawn = useMemo(() => drawReleaseArt(spec, { shape, idPrefix: prefix }), [spec, shape, prefix]);\n const text = releaseArtText(spec);\n return (\n <span className={cn(\"relative block w-full\", className)}>\n <svg\n ref={ref}\n viewBox={`0 0 ${w} ${h}`}\n role=\"img\"\n aria-label={label}\n preserveAspectRatio=\"xMidYMid slice\"\n className={cn(\"block w-full overflow-hidden rounded-well\", KAESO_RELEASE_ART_VARIANTS.shape[shape].classes)}\n >\n {drawn.children?.map(toElement)}\n {eyebrow && (\n <text\n x={text.eyebrow.x}\n y={h - text.eyebrow.bottom}\n fill={text.color}\n fillOpacity={0.7}\n fontSize={16}\n fontWeight={500}\n letterSpacing={0.1}\n fontFamily={font.sans}\n >\n {eyebrow}\n </text>\n )}\n {title && (\n <text x={text.title.x} y={h - text.title.bottom} fill={text.color} fontSize={52} fontWeight={600} letterSpacing={-1.5} fontFamily={font.sans}>\n {title}\n </text>\n )}\n </svg>\n <span aria-hidden className=\"pointer-events-none absolute inset-0 rounded-well shadow-ring\" />\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ReleaseArt.displayName = \"ReleaseArt\";\n\nexport interface ReleaseArtSvgOptions {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n}\n\nexport function releaseArtSvg({ seed, label, art, title, eyebrow, shape = \"banner\" }: ReleaseArtSvgOptions): string {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const drawn = drawReleaseArt(art ?? releaseArtFor(seed), { shape, title, eyebrow, idPrefix: \"art\" });\n return serializeArt({ ...drawn, attrs: { ...drawn.attrs, width: w * 2, height: h * 2, role: \"img\", ariaLabel: label } });\n}\n"],"mappings":"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"}