@arbidocs/blocks 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +22 -0
  2. package/dist/{chunk-7G3JNSJB.cjs → chunk-2K33YGM6.cjs} +51 -14
  3. package/dist/chunk-2K33YGM6.cjs.map +1 -0
  4. package/dist/{chunk-S5T7ZTX2.js → chunk-2ORA62OF.js} +3 -3
  5. package/dist/{chunk-S5T7ZTX2.js.map → chunk-2ORA62OF.js.map} +1 -1
  6. package/dist/{chunk-RBXZYNVB.js → chunk-6P6AEQJB.js} +195 -35
  7. package/dist/chunk-6P6AEQJB.js.map +1 -0
  8. package/dist/{chunk-5TYEJOXY.js → chunk-7PEELPMA.js} +52 -15
  9. package/dist/chunk-7PEELPMA.js.map +1 -0
  10. package/dist/{chunk-KUA3BCT2.cjs → chunk-AE5FHFZ5.cjs} +6 -6
  11. package/dist/{chunk-KUA3BCT2.cjs.map → chunk-AE5FHFZ5.cjs.map} +1 -1
  12. package/dist/{chunk-FZQJ2S6P.cjs → chunk-DREI7EQ2.cjs} +197 -33
  13. package/dist/chunk-DREI7EQ2.cjs.map +1 -0
  14. package/dist/chunk-J2BGSWXM.cjs +990 -0
  15. package/dist/chunk-J2BGSWXM.cjs.map +1 -0
  16. package/dist/{chunk-6ALISABK.cjs → chunk-LRUCMZK6.cjs} +7 -4
  17. package/dist/{chunk-6ALISABK.cjs.map → chunk-LRUCMZK6.cjs.map} +1 -1
  18. package/dist/chunk-OBLSURHV.js +973 -0
  19. package/dist/chunk-OBLSURHV.js.map +1 -0
  20. package/dist/{chunk-DVLEQURC.js → chunk-QXEJXIP4.js} +7 -4
  21. package/dist/{chunk-DVLEQURC.js.map → chunk-QXEJXIP4.js.map} +1 -1
  22. package/dist/collaboration/index.cjs +1 -1
  23. package/dist/collaboration/index.js +1 -1
  24. package/dist/components/Chart.d.ts +9 -1
  25. package/dist/components/ContactForm.d.ts +15 -3
  26. package/dist/components/TeamGrid.d.ts +14 -2
  27. package/dist/components/editorial/ArticleList.d.ts +32 -0
  28. package/dist/components/editorial/Bands.d.ts +29 -0
  29. package/dist/components/editorial/EditorialHeading.d.ts +17 -0
  30. package/dist/components/editorial/EditorialHero.d.ts +46 -0
  31. package/dist/components/editorial/EditorialSection.d.ts +47 -0
  32. package/dist/components/editorial/Eyebrow.d.ts +14 -0
  33. package/dist/components/editorial/PanelGrid.d.ts +45 -0
  34. package/dist/components/editorial/ProfileCard.d.ts +27 -0
  35. package/dist/components/editorial/PullQuote.d.ts +17 -0
  36. package/dist/components/editorial/Reveal.d.ts +15 -0
  37. package/dist/components/editorial/index.d.ts +12 -0
  38. package/dist/components/editorial/lists.d.ts +42 -0
  39. package/dist/components/editorial/tone.d.ts +33 -0
  40. package/dist/facts/FactsViewToggle.d.ts +3 -1
  41. package/dist/facts/fact-row.d.ts +32 -0
  42. package/dist/facts/index.cjs +34 -5
  43. package/dist/facts/index.cjs.map +1 -1
  44. package/dist/facts/index.d.ts +1 -0
  45. package/dist/facts/index.js +31 -4
  46. package/dist/facts/index.js.map +1 -1
  47. package/dist/files/ViewToggle.d.ts +6 -2
  48. package/dist/files/ViewerChrome.d.ts +11 -14
  49. package/dist/files/index.cjs +20 -54
  50. package/dist/files/index.cjs.map +1 -1
  51. package/dist/files/index.js +17 -51
  52. package/dist/files/index.js.map +1 -1
  53. package/dist/index.cjs +161 -101
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.js +6 -6
  56. package/dist/shell/ActionCluster.d.ts +7 -2
  57. package/dist/shell/AskField.d.ts +6 -1
  58. package/dist/shell/index.cjs +42 -42
  59. package/dist/shell/index.js +1 -1
  60. package/dist/site/index.cjs +107 -47
  61. package/dist/site/index.d.ts +1 -0
  62. package/dist/site/index.js +2 -2
  63. package/dist/studio/index.cjs +71 -71
  64. package/dist/studio/index.js +3 -3
  65. package/package.json +3 -3
  66. package/src/blocks.css +17 -0
  67. package/dist/chunk-5TYEJOXY.js.map +0 -1
  68. package/dist/chunk-7G3JNSJB.cjs.map +0 -1
  69. package/dist/chunk-FZQJ2S6P.cjs.map +0 -1
  70. package/dist/chunk-MMYCZRKT.cjs +0 -168
  71. package/dist/chunk-MMYCZRKT.cjs.map +0 -1
  72. package/dist/chunk-RBXZYNVB.js.map +0 -1
  73. package/dist/chunk-UTWX2X2A.js +0 -165
  74. package/dist/chunk-UTWX2X2A.js.map +0 -1
@@ -0,0 +1,990 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkDREI7EQ2_cjs = require('./chunk-DREI7EQ2.cjs');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var ui = require('@arbidocs/react/ui');
8
+ var lucideReact = require('lucide-react');
9
+
10
+ function CollectionDetail({
11
+ items,
12
+ slug,
13
+ getSlug,
14
+ renderList,
15
+ renderDetail,
16
+ renderNotFound
17
+ }) {
18
+ if (!slug) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderList(items) });
19
+ const index = items.findIndex((item) => getSlug(item) === slug);
20
+ if (index === -1) {
21
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderNotFound ? renderNotFound(slug) : /* @__PURE__ */ jsxRuntime.jsx("p", { role: "status", "data-slot": "collection-not-found", children: "Not found" }) });
22
+ }
23
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderDetail(items[index], { previous: items[index - 1], next: items[index + 1] }) });
24
+ }
25
+ var W = 440;
26
+ var H = 160;
27
+ var PAD = { top: 8, right: 8, bottom: 22, left: 40 };
28
+ var color = (i) => `hsl(var(--chart-${i % 5 + 1}))`;
29
+ function truncateLabel(label, max) {
30
+ const chars = Array.from(label);
31
+ return chars.length <= max ? label : `${chars.slice(0, Math.max(1, max - 1)).join("").trimEnd()}\u2026`;
32
+ }
33
+ var defaultFormat = (v) => v >= 1e3 ? `${Math.round(v / 100) / 10}k` : String(v);
34
+ function polar(cx, cy, r, angle) {
35
+ return [cx + r * Math.sin(angle), cy - r * Math.cos(angle)];
36
+ }
37
+ function Chart({
38
+ type,
39
+ labels,
40
+ series,
41
+ ariaLabel,
42
+ formatValue = defaultFormat,
43
+ hideLegend = false,
44
+ emptyLabel = "No data",
45
+ maxLabelChars,
46
+ className,
47
+ testId
48
+ }) {
49
+ const max = react.useMemo(() => Math.max(...series.flatMap((s) => s.values), 1), [series]);
50
+ if (!labels.length || !series.length) {
51
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyLabel });
52
+ }
53
+ const legendItems = type === "pie" ? labels.map((label, i) => ({ label, color: color(i) })) : series.map((s, i) => ({ label: s.label ?? s.key, color: color(i) }));
54
+ let body;
55
+ if (type === "pie") {
56
+ const values = series[0].values;
57
+ const total = values.reduce((a, b) => a + Math.max(b, 0), 0);
58
+ const cx = 80;
59
+ const cy = 80;
60
+ const r = 72;
61
+ let angle = 0;
62
+ body = /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 160 160", className: "mx-auto h-40 w-40", role: "img", "aria-label": ariaLabel, children: total > 0 && values.map((v, i) => {
63
+ const sweep = Math.max(v, 0) / total * Math.PI * 2;
64
+ if (sweep === 0) return null;
65
+ const title = `${labels[i]}: ${formatValue(v)}`;
66
+ if (sweep >= Math.PI * 2 - 1e-6) {
67
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r, fill: color(i), children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: title }) }, i);
68
+ }
69
+ const [x1, y1] = polar(cx, cy, r, angle);
70
+ const [x2, y2] = polar(cx, cy, r, angle + sweep);
71
+ const d = `M${cx},${cy} L${x1},${y1} A${r},${r} 0 ${sweep > Math.PI ? 1 : 0} 1 ${x2},${y2} Z`;
72
+ angle += sweep;
73
+ return /* @__PURE__ */ jsxRuntime.jsx("path", { d, fill: color(i), children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: title }) }, i);
74
+ }) });
75
+ } else {
76
+ const plotW = W - PAD.left - PAD.right;
77
+ const plotH = H - PAD.top - PAD.bottom;
78
+ const y = (v) => PAD.top + plotH - v / max * plotH;
79
+ const band = plotW / labels.length;
80
+ const xCenter = (i) => PAD.left + band * i + band / 2;
81
+ const maxChars = maxLabelChars ?? Math.max(3, Math.floor((band - 4) / 5));
82
+ body = /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: `0 0 ${W} ${H}`, className: "h-auto w-full", role: "img", "aria-label": ariaLabel, children: [
83
+ [0, max / 2, max].map((v) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
84
+ /* @__PURE__ */ jsxRuntime.jsx(
85
+ "line",
86
+ {
87
+ x1: PAD.left,
88
+ x2: W - PAD.right,
89
+ y1: y(v),
90
+ y2: y(v),
91
+ className: "stroke-border",
92
+ strokeDasharray: "2,2"
93
+ }
94
+ ),
95
+ /* @__PURE__ */ jsxRuntime.jsx(
96
+ "text",
97
+ {
98
+ x: PAD.left - 4,
99
+ y: y(v) + 3,
100
+ textAnchor: "end",
101
+ className: "fill-muted-foreground text-[9px]",
102
+ children: formatValue(v)
103
+ }
104
+ )
105
+ ] }, v)),
106
+ labels.map((label, i) => /* @__PURE__ */ jsxRuntime.jsxs(
107
+ "text",
108
+ {
109
+ x: xCenter(i),
110
+ y: H - 6,
111
+ textAnchor: "middle",
112
+ className: "fill-muted-foreground text-[9px]",
113
+ children: [
114
+ truncateLabel(label, maxChars),
115
+ Array.from(label).length > maxChars && /* @__PURE__ */ jsxRuntime.jsx("title", { children: label })
116
+ ]
117
+ },
118
+ i
119
+ )),
120
+ type === "bar" && series.map((s, si) => {
121
+ const barW = band * 0.7 / series.length;
122
+ return s.values.map((v, i) => /* @__PURE__ */ jsxRuntime.jsx(
123
+ "rect",
124
+ {
125
+ x: xCenter(i) - band * 0.7 / 2 + si * barW,
126
+ y: y(v),
127
+ width: barW,
128
+ height: PAD.top + plotH - y(v),
129
+ fill: color(si),
130
+ rx: 1.5,
131
+ children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${labels[i]} ${s.label ?? s.key}: ${formatValue(v)}` })
132
+ },
133
+ `${s.key}-${i}`
134
+ ));
135
+ }),
136
+ type === "line" && series.map((s, si) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
137
+ /* @__PURE__ */ jsxRuntime.jsx(
138
+ "polyline",
139
+ {
140
+ fill: "none",
141
+ stroke: color(si),
142
+ strokeWidth: 2,
143
+ points: s.values.map((v, i) => `${xCenter(i)},${y(v)}`).join(" ")
144
+ }
145
+ ),
146
+ s.values.map((v, i) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: xCenter(i), cy: y(v), r: 2.5, fill: color(si), children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${labels[i]} ${s.label ?? s.key}: ${formatValue(v)}` }) }, i))
147
+ ] }, s.key))
148
+ ] });
149
+ }
150
+ return /* @__PURE__ */ jsxRuntime.jsxs(
151
+ "figure",
152
+ {
153
+ className: ui.cn("flex flex-col gap-2", className),
154
+ "data-slot": "chart",
155
+ "data-type": type,
156
+ "data-testid": testId,
157
+ children: [
158
+ body,
159
+ !hideLegend && /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: "flex flex-wrap justify-center gap-x-4 gap-y-1 text-xs text-muted-foreground", children: legendItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
160
+ /* @__PURE__ */ jsxRuntime.jsx(
161
+ "span",
162
+ {
163
+ "aria-hidden": "true",
164
+ className: "inline-block size-2 rounded-full",
165
+ style: { background: item.color }
166
+ }
167
+ ),
168
+ item.label
169
+ ] }, item.label)) })
170
+ ]
171
+ }
172
+ );
173
+ }
174
+ function Eyebrow({ children, index, rule = false, tone, className, testId }) {
175
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
176
+ return /* @__PURE__ */ jsxRuntime.jsxs(
177
+ "p",
178
+ {
179
+ className: ui.cn(
180
+ "flex items-center gap-3 text-xs font-semibold uppercase tracking-wider",
181
+ t.subtle,
182
+ className
183
+ ),
184
+ "data-slot": "eyebrow",
185
+ "data-testid": testId,
186
+ children: [
187
+ rule && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "h-px w-8 shrink-0 bg-primary" }),
188
+ index !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("tabular-nums", t.accent), children: chunkDREI7EQ2_cjs.formatIndex(index) }),
189
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children })
190
+ ]
191
+ }
192
+ );
193
+ }
194
+ function EditorialHeading({
195
+ eyebrow,
196
+ index,
197
+ title,
198
+ lead,
199
+ level = 2,
200
+ align = "start",
201
+ tone,
202
+ className,
203
+ testId
204
+ }) {
205
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
206
+ const Heading = `h${level}`;
207
+ return /* @__PURE__ */ jsxRuntime.jsxs(
208
+ "div",
209
+ {
210
+ className: ui.cn("max-w-3xl", align === "center" && "mx-auto text-center", className),
211
+ "data-slot": "editorial-heading",
212
+ "data-testid": testId,
213
+ children: [
214
+ (eyebrow || index !== void 0) && /* @__PURE__ */ jsxRuntime.jsx(
215
+ Eyebrow,
216
+ {
217
+ index,
218
+ tone,
219
+ className: ui.cn("mb-4", align === "center" && "justify-center"),
220
+ children: eyebrow
221
+ }
222
+ ),
223
+ /* @__PURE__ */ jsxRuntime.jsx(
224
+ Heading,
225
+ {
226
+ className: ui.cn(
227
+ "font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl",
228
+ t.text
229
+ ),
230
+ children: title
231
+ }
232
+ ),
233
+ lead && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn("mt-4 text-lg leading-relaxed", t.muted), children: lead })
234
+ ]
235
+ }
236
+ );
237
+ }
238
+ var SURFACE_CLASS = {
239
+ plain: "bg-background text-foreground",
240
+ muted: "bg-muted text-foreground",
241
+ inverse: "bg-foreground text-background"
242
+ };
243
+ var SURFACE_TONE = {
244
+ plain: "default",
245
+ muted: "default",
246
+ inverse: "inverse"
247
+ };
248
+ function renderTitle(title, emphasis) {
249
+ if (typeof title !== "string" || !emphasis || !title.includes(emphasis)) return title;
250
+ const parts = title.split(emphasis);
251
+ return parts.map((part, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
252
+ part,
253
+ i < parts.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("em", { className: "italic text-primary", children: emphasis })
254
+ ] }, i));
255
+ }
256
+ function EditorialHero({
257
+ eyebrow,
258
+ eyebrowRule = false,
259
+ title,
260
+ emphasis,
261
+ lede,
262
+ actions,
263
+ footer,
264
+ aside,
265
+ backdrop,
266
+ align = "start",
267
+ size = "page",
268
+ surface = "plain",
269
+ className,
270
+ testId,
271
+ testIds
272
+ }) {
273
+ const tone = SURFACE_TONE[surface];
274
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
275
+ const centered = align === "center" && !aside;
276
+ const ids = {
277
+ root: testIds?.root ?? testId,
278
+ eyebrow: testIds?.eyebrow ?? (testId ? `${testId}-eyebrow` : void 0),
279
+ title: testIds?.title ?? (testId ? `${testId}-title` : void 0),
280
+ lede: testIds?.lede ?? (testId ? `${testId}-lede` : void 0),
281
+ actions: testIds?.actions ?? (testId ? `${testId}-actions` : void 0),
282
+ aside: testIds?.aside ?? (testId ? `${testId}-aside` : void 0)
283
+ };
284
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsxs(
285
+ "section",
286
+ {
287
+ className: ui.cn("relative isolate overflow-hidden", SURFACE_CLASS[surface], className),
288
+ "data-slot": "editorial-hero",
289
+ "data-size": size,
290
+ "data-testid": ids.root,
291
+ children: [
292
+ backdrop && /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 -z-10", children: backdrop }),
293
+ /* @__PURE__ */ jsxRuntime.jsxs(
294
+ "div",
295
+ {
296
+ className: ui.cn(
297
+ "mx-auto max-w-7xl px-5 lg:px-8",
298
+ size === "cover" ? "py-16 lg:py-28" : "py-14 lg:py-24",
299
+ aside && "grid items-center gap-12 lg:grid-cols-[1.02fr_0.98fr] lg:gap-14"
300
+ ),
301
+ children: [
302
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("max-w-3xl", centered && "mx-auto text-center"), children: [
303
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
304
+ Eyebrow,
305
+ {
306
+ rule: eyebrowRule,
307
+ tone,
308
+ className: ui.cn("mb-6", centered && "justify-center"),
309
+ testId: ids.eyebrow,
310
+ children: eyebrow
311
+ }
312
+ ),
313
+ /* @__PURE__ */ jsxRuntime.jsx(
314
+ "h1",
315
+ {
316
+ className: ui.cn(
317
+ "font-display font-semibold tracking-tight text-balance",
318
+ size === "cover" ? "text-[2.6rem] leading-[1.03] sm:text-6xl lg:text-[4.4rem]" : "text-4xl leading-[1.05] sm:text-5xl",
319
+ t.text
320
+ ),
321
+ "data-testid": ids.title,
322
+ children: renderTitle(title, emphasis)
323
+ }
324
+ ),
325
+ lede && /* @__PURE__ */ jsxRuntime.jsx(
326
+ "p",
327
+ {
328
+ className: ui.cn(
329
+ "mt-6 max-w-2xl text-lg leading-relaxed",
330
+ centered && "mx-auto",
331
+ t.muted
332
+ ),
333
+ "data-testid": ids.lede,
334
+ children: lede
335
+ }
336
+ ),
337
+ actions && /* @__PURE__ */ jsxRuntime.jsx(
338
+ "div",
339
+ {
340
+ className: ui.cn(
341
+ "mt-8 flex flex-col gap-3 sm:flex-row",
342
+ centered && "sm:justify-center"
343
+ ),
344
+ "data-testid": ids.actions,
345
+ children: actions
346
+ }
347
+ ),
348
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("mt-8", centered && "flex justify-center"), children: footer })
349
+ ] }),
350
+ aside && /* @__PURE__ */ jsxRuntime.jsx(
351
+ "div",
352
+ {
353
+ className: "relative min-w-0",
354
+ "data-slot": "editorial-hero-aside",
355
+ "data-testid": ids.aside,
356
+ children: aside
357
+ }
358
+ )
359
+ ]
360
+ }
361
+ )
362
+ ]
363
+ }
364
+ ) });
365
+ }
366
+ function EditorialSection({
367
+ id,
368
+ eyebrow,
369
+ index,
370
+ title,
371
+ lead,
372
+ action,
373
+ layout = "stacked",
374
+ surface = "plain",
375
+ bordered = false,
376
+ spacing = "lg",
377
+ backdrop,
378
+ "aria-label": ariaLabel,
379
+ children,
380
+ className,
381
+ testId
382
+ }) {
383
+ const tone = SURFACE_TONE[surface];
384
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
385
+ const hasHeading = Boolean(title || eyebrow || index !== void 0);
386
+ const heading = hasHeading && title ? /* @__PURE__ */ jsxRuntime.jsx(EditorialHeading, { eyebrow, index, title, lead, tone }) : null;
387
+ const split = layout !== "stacked";
388
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsxs(
389
+ "section",
390
+ {
391
+ id,
392
+ "aria-label": title ? void 0 : ariaLabel,
393
+ className: ui.cn(
394
+ "relative isolate overflow-hidden scroll-mt-24",
395
+ SURFACE_CLASS[surface],
396
+ bordered && ui.cn("border-y", t.hairline),
397
+ className
398
+ ),
399
+ "data-slot": "editorial-section",
400
+ "data-testid": testId,
401
+ children: [
402
+ backdrop && /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 -z-10", children: backdrop }),
403
+ /* @__PURE__ */ jsxRuntime.jsx(
404
+ "div",
405
+ {
406
+ className: ui.cn(
407
+ "mx-auto max-w-7xl px-5 lg:px-8",
408
+ spacing === "lg" ? "py-16 lg:py-24" : "py-12 lg:py-16",
409
+ split && ui.cn(
410
+ "grid gap-10 lg:gap-16",
411
+ layout === "split-wide" ? "lg:grid-cols-[1fr_1.4fr]" : "lg:grid-cols-2"
412
+ )
413
+ ),
414
+ children: split ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
415
+ heading && /* @__PURE__ */ jsxRuntime.jsx("div", { children: heading }),
416
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children })
417
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
418
+ heading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-between gap-6 sm:flex-row sm:items-end", children: [
419
+ heading,
420
+ action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: action })
421
+ ] }),
422
+ children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn(heading && "mt-12 lg:mt-14"), children })
423
+ ] })
424
+ }
425
+ )
426
+ ]
427
+ }
428
+ ) });
429
+ }
430
+ function EditorialProse({
431
+ paragraphs,
432
+ columns = 1,
433
+ size = "base",
434
+ className,
435
+ testId
436
+ }) {
437
+ const t = chunkDREI7EQ2_cjs.useEditorialTone();
438
+ return /* @__PURE__ */ jsxRuntime.jsx(
439
+ "div",
440
+ {
441
+ className: ui.cn(
442
+ size === "lg" ? "text-lg" : "text-base",
443
+ "leading-relaxed",
444
+ t.muted,
445
+ columns === 2 ? "gap-10 md:columns-2" : "max-w-prose",
446
+ className
447
+ ),
448
+ "data-slot": "editorial-prose",
449
+ "data-testid": testId,
450
+ children: paragraphs.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn(columns === 2 ? "mb-5 break-inside-avoid" : "mt-5 first:mt-0"), children: p }, i))
451
+ }
452
+ );
453
+ }
454
+ function DefinitionList({
455
+ items,
456
+ layout = "rows",
457
+ marker = "dot",
458
+ className,
459
+ testId
460
+ }) {
461
+ const t = chunkDREI7EQ2_cjs.useEditorialTone();
462
+ return /* @__PURE__ */ jsxRuntime.jsx(
463
+ "dl",
464
+ {
465
+ className: ui.cn(layout === "rows" ? "space-y-3" : "divide-y", t.hairline, className),
466
+ "data-slot": "definition-list",
467
+ "data-layout": layout,
468
+ "data-testid": testId,
469
+ children: items.map(
470
+ (item, i) => layout === "rows" ? /* @__PURE__ */ jsxRuntime.jsxs(
471
+ "div",
472
+ {
473
+ className: ui.cn(
474
+ "flex gap-4 rounded-sm border p-5 transition-colors",
475
+ t.panel,
476
+ t.panelHover
477
+ ),
478
+ "data-testid": item.testId ?? (testId ? `${testId}-item-${i}` : void 0),
479
+ children: [
480
+ item.icon ? /* @__PURE__ */ jsxRuntime.jsx(
481
+ "span",
482
+ {
483
+ className: ui.cn(
484
+ "flex size-9 shrink-0 items-center justify-center rounded-sm border",
485
+ t.tile
486
+ ),
487
+ "aria-hidden": "true",
488
+ children: item.icon
489
+ }
490
+ ) : marker === "dot" && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "mt-2 size-2 shrink-0 rounded-full bg-primary" }),
491
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
492
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "font-medium", children: item.term }),
493
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: ui.cn("mt-0.5 text-sm", t.muted), children: item.description })
494
+ ] })
495
+ ]
496
+ },
497
+ i
498
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
499
+ "div",
500
+ {
501
+ className: "grid gap-1 py-4 sm:grid-cols-[minmax(0,1fr)_minmax(0,2fr)] sm:gap-8",
502
+ "data-testid": item.testId ?? (testId ? `${testId}-item-${i}` : void 0),
503
+ children: [
504
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "font-medium", children: item.term }),
505
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: ui.cn("text-sm leading-relaxed", t.muted), children: item.description })
506
+ ]
507
+ },
508
+ i
509
+ )
510
+ )
511
+ }
512
+ );
513
+ }
514
+ function CheckList({ items, columns = 1, icon, className, testId }) {
515
+ const t = chunkDREI7EQ2_cjs.useEditorialTone();
516
+ return /* @__PURE__ */ jsxRuntime.jsx(
517
+ "ul",
518
+ {
519
+ className: ui.cn(columns === 2 ? "grid gap-4 sm:grid-cols-2" : "space-y-3", className),
520
+ "data-slot": "check-list",
521
+ "data-testid": testId,
522
+ children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
523
+ "li",
524
+ {
525
+ className: ui.cn("flex items-start gap-3 text-sm leading-relaxed", t.muted),
526
+ "data-testid": testId ? `${testId}-item-${i}` : void 0,
527
+ children: [
528
+ /* @__PURE__ */ jsxRuntime.jsx(
529
+ "span",
530
+ {
531
+ "aria-hidden": "true",
532
+ className: ui.cn(
533
+ "mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border",
534
+ t.tile
535
+ ),
536
+ children: icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3" })
537
+ }
538
+ ),
539
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item })
540
+ ]
541
+ },
542
+ i
543
+ ))
544
+ }
545
+ );
546
+ }
547
+ function TagList({ items, label, className, testId }) {
548
+ const t = chunkDREI7EQ2_cjs.useEditorialTone();
549
+ if (items.length === 0) return null;
550
+ return /* @__PURE__ */ jsxRuntime.jsx(
551
+ "ul",
552
+ {
553
+ "aria-label": label,
554
+ className: ui.cn("flex flex-wrap gap-1.5", className),
555
+ "data-slot": "tag-list",
556
+ "data-testid": testId,
557
+ children: items.map((tag) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: ui.cn("rounded-sm border px-2 py-0.5 text-[11px]", t.chip), children: tag }, tag))
558
+ }
559
+ );
560
+ }
561
+ function Reveal({ children, delay = 0, className, testId }) {
562
+ const ref = react.useRef(null);
563
+ const [state, setState] = react.useState("idle");
564
+ react.useEffect(() => {
565
+ const el = ref.current;
566
+ if (!el || typeof IntersectionObserver === "undefined") return;
567
+ setState("pending");
568
+ const io = new IntersectionObserver(
569
+ (entries) => {
570
+ if (entries.some((e) => e.isIntersecting)) {
571
+ setState("shown");
572
+ io.disconnect();
573
+ }
574
+ },
575
+ { rootMargin: "0px 0px -90px 0px" }
576
+ );
577
+ io.observe(el);
578
+ return () => io.disconnect();
579
+ }, []);
580
+ return /* @__PURE__ */ jsxRuntime.jsx(
581
+ "div",
582
+ {
583
+ ref,
584
+ "data-slot": "reveal",
585
+ "data-reveal": state === "idle" ? void 0 : state,
586
+ style: delay ? { "--reveal-delay": `${delay}ms` } : void 0,
587
+ className: ui.cn(className),
588
+ "data-testid": testId,
589
+ children
590
+ }
591
+ );
592
+ }
593
+ var COLS = {
594
+ 2: "sm:grid-cols-2",
595
+ 3: "sm:grid-cols-2 lg:grid-cols-3",
596
+ 4: "sm:grid-cols-2 lg:grid-cols-4"
597
+ };
598
+ function PanelGrid({
599
+ items,
600
+ columns = 3,
601
+ variant = "cards",
602
+ numbered = false,
603
+ reveal = false,
604
+ linkComponent,
605
+ headingLevel = 3,
606
+ tone,
607
+ className,
608
+ testId
609
+ }) {
610
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
611
+ const Heading = `h${headingLevel}`;
612
+ const joined = variant === "joined";
613
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.EditorialToneContext.Provider, { value: t.tone, children: /* @__PURE__ */ jsxRuntime.jsx(
614
+ "ul",
615
+ {
616
+ className: ui.cn(
617
+ "grid",
618
+ joined ? ui.cn("gap-px overflow-hidden rounded-sm border", t.hairline) : "gap-4",
619
+ joined && (t.tone === "inverse" ? "bg-background/15" : "bg-border"),
620
+ COLS[columns] ?? COLS[3],
621
+ className
622
+ ),
623
+ "data-slot": "panel-grid",
624
+ "data-variant": variant,
625
+ "data-testid": testId,
626
+ children: items.map((item, i) => {
627
+ const number = item.index ?? (numbered ? i + 1 : void 0);
628
+ const inner = /* @__PURE__ */ jsxRuntime.jsxs(
629
+ "div",
630
+ {
631
+ className: ui.cn(
632
+ "group flex h-full flex-col p-6 transition-colors duration-300",
633
+ joined ? ui.cn(
634
+ t.tone === "inverse" ? "bg-foreground" : "bg-background",
635
+ item.href && "hover:bg-muted/40"
636
+ ) : ui.cn("rounded-sm border", t.panel, item.href && t.panelHover)
637
+ ),
638
+ "data-testid": item.testId ?? (testId ? `${testId}-item-${i}` : void 0),
639
+ children: [
640
+ (item.icon || number !== void 0 || item.href) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
641
+ item.icon ? /* @__PURE__ */ jsxRuntime.jsx(
642
+ "span",
643
+ {
644
+ "aria-hidden": "true",
645
+ className: ui.cn(
646
+ "flex size-11 items-center justify-center rounded-sm border",
647
+ t.tile
648
+ ),
649
+ children: item.icon
650
+ }
651
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
652
+ number !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("font-display text-sm tabular-nums", t.subtle), children: chunkDREI7EQ2_cjs.formatIndex(number) }) : item.href && /* @__PURE__ */ jsxRuntime.jsx(
653
+ lucideReact.ArrowUpRight,
654
+ {
655
+ "aria-hidden": "true",
656
+ className: ui.cn(
657
+ "size-4 transition-colors group-hover:text-primary",
658
+ t.subtle
659
+ )
660
+ }
661
+ )
662
+ ] }),
663
+ item.kicker && /* @__PURE__ */ jsxRuntime.jsx(
664
+ "p",
665
+ {
666
+ className: ui.cn(
667
+ "text-xs font-semibold uppercase tracking-wider",
668
+ item.icon || number !== void 0 ? "mt-5" : "",
669
+ t.accent
670
+ ),
671
+ children: item.kicker
672
+ }
673
+ ),
674
+ /* @__PURE__ */ jsxRuntime.jsx(
675
+ Heading,
676
+ {
677
+ className: ui.cn(
678
+ "font-display text-lg font-semibold leading-snug",
679
+ item.icon || number !== void 0 || item.kicker ? "mt-4" : "",
680
+ t.text
681
+ ),
682
+ children: item.title
683
+ }
684
+ ),
685
+ item.body && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("mt-2 text-sm leading-relaxed", t.muted), children: item.body }),
686
+ item.points && item.points.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
687
+ CheckList,
688
+ {
689
+ items: item.points,
690
+ className: ui.cn("mt-4 space-y-2 border-t pt-4", t.hairline)
691
+ }
692
+ ),
693
+ item.tags && item.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(TagList, { items: item.tags, className: "mt-auto pt-5" }),
694
+ item.footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("mt-auto pt-5 text-xs", t.subtle), children: item.footer })
695
+ ]
696
+ }
697
+ );
698
+ const cell = /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.BlockLink, { href: item.href, linkComponent, className: "block h-full", children: inner });
699
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { className: "min-w-0", children: reveal ? /* @__PURE__ */ jsxRuntime.jsx(Reveal, { delay: i * 90, className: "h-full", children: cell }) : cell }, i);
700
+ })
701
+ }
702
+ ) });
703
+ }
704
+ function PullQuote({
705
+ quote,
706
+ attribution,
707
+ cite,
708
+ align = "start",
709
+ size = "md",
710
+ className,
711
+ testId
712
+ }) {
713
+ const t = chunkDREI7EQ2_cjs.useEditorialTone();
714
+ const centered = align === "center";
715
+ return /* @__PURE__ */ jsxRuntime.jsxs(
716
+ "figure",
717
+ {
718
+ className: ui.cn(
719
+ "max-w-3xl",
720
+ centered ? "mx-auto text-center" : "border-l-2 border-primary pl-6 lg:pl-8",
721
+ className
722
+ ),
723
+ "data-slot": "pull-quote",
724
+ "data-testid": testId,
725
+ children: [
726
+ /* @__PURE__ */ jsxRuntime.jsx(
727
+ "blockquote",
728
+ {
729
+ cite,
730
+ className: ui.cn(
731
+ "font-display font-medium leading-snug text-balance",
732
+ size === "lg" ? "text-3xl sm:text-4xl" : "text-2xl sm:text-3xl",
733
+ t.text
734
+ ),
735
+ children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: quote })
736
+ }
737
+ ),
738
+ attribution && /* @__PURE__ */ jsxRuntime.jsxs("figcaption", { className: ui.cn("mt-5 text-sm", t.muted), children: [
739
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("font-semibold", t.text), children: attribution.name }),
740
+ attribution.role && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
741
+ ", ",
742
+ attribution.role
743
+ ] })
744
+ ] })
745
+ ]
746
+ }
747
+ );
748
+ }
749
+ var COLS2 = {
750
+ 2: "md:grid-cols-2",
751
+ 3: "md:grid-cols-2 lg:grid-cols-3"
752
+ };
753
+ function MetaLine({ meta, className }) {
754
+ if (!meta || meta.length === 0) return null;
755
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className, children: meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
756
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: " \xB7 " }),
757
+ m
758
+ ] }, i)) });
759
+ }
760
+ function ArticleList({
761
+ items,
762
+ layout = "cards",
763
+ featureFirst = false,
764
+ columns = 3,
765
+ linkComponent,
766
+ empty,
767
+ className,
768
+ testId
769
+ }) {
770
+ const t = chunkDREI7EQ2_cjs.useEditorialTone();
771
+ if (items.length === 0) return empty ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: empty }) : null;
772
+ const idOf = (item, i) => item.testId ?? (testId ? `${testId}-item-${i}` : void 0);
773
+ if (layout === "rows") {
774
+ return /* @__PURE__ */ jsxRuntime.jsx(
775
+ "ul",
776
+ {
777
+ className: ui.cn("divide-y border-y", t.hairline, className),
778
+ "data-slot": "article-list",
779
+ "data-layout": "rows",
780
+ "data-testid": testId,
781
+ children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.BlockLink, { href: item.href, linkComponent, className: "group block", children: /* @__PURE__ */ jsxRuntime.jsxs(
782
+ "article",
783
+ {
784
+ className: "grid gap-2 py-6 transition-colors sm:grid-cols-[10rem_minmax(0,1fr)_auto] sm:gap-8",
785
+ "data-testid": idOf(item, i),
786
+ children: [
787
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
788
+ item.kicker && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn("text-xs font-semibold uppercase tracking-wider", t.accent), children: item.kicker }),
789
+ /* @__PURE__ */ jsxRuntime.jsx(MetaLine, { meta: item.meta, className: ui.cn("text-xs", t.subtle) })
790
+ ] }),
791
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
792
+ /* @__PURE__ */ jsxRuntime.jsx(
793
+ "h3",
794
+ {
795
+ className: ui.cn(
796
+ "font-display text-xl font-semibold leading-snug transition-colors group-hover:text-primary",
797
+ t.text
798
+ ),
799
+ children: item.title
800
+ }
801
+ ),
802
+ item.summary && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn("mt-2 text-sm leading-relaxed", t.muted), children: item.summary })
803
+ ] }),
804
+ item.href && /* @__PURE__ */ jsxRuntime.jsx(
805
+ lucideReact.ArrowUpRight,
806
+ {
807
+ "aria-hidden": "true",
808
+ className: ui.cn(
809
+ "hidden size-4 transition-colors group-hover:text-primary sm:block",
810
+ t.subtle
811
+ )
812
+ }
813
+ )
814
+ ]
815
+ }
816
+ ) }) }, i))
817
+ }
818
+ );
819
+ }
820
+ const card = (item, i, lead) => /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.BlockLink, { href: item.href, linkComponent, className: "group block h-full", children: /* @__PURE__ */ jsxRuntime.jsxs(
821
+ "article",
822
+ {
823
+ className: ui.cn(
824
+ "flex h-full flex-col rounded-sm border transition-colors duration-300",
825
+ t.panel,
826
+ item.href && t.panelHover,
827
+ lead ? "p-6 lg:p-8" : "p-6"
828
+ ),
829
+ "data-testid": idOf(item, i),
830
+ children: [
831
+ item.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(
832
+ chunkDREI7EQ2_cjs.BlockImage,
833
+ {
834
+ src: item.imageUrl,
835
+ alt: item.imageAlt ?? "",
836
+ aspect: "16:9",
837
+ rounded: "none",
838
+ className: "mb-5 w-full"
839
+ }
840
+ ),
841
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
842
+ item.kicker ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn("text-xs font-semibold uppercase tracking-wider", t.accent), children: item.kicker }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
843
+ item.href && /* @__PURE__ */ jsxRuntime.jsx(
844
+ lucideReact.ArrowUpRight,
845
+ {
846
+ "aria-hidden": "true",
847
+ className: ui.cn("size-4 transition-colors group-hover:text-primary", t.subtle)
848
+ }
849
+ )
850
+ ] }),
851
+ /* @__PURE__ */ jsxRuntime.jsx(
852
+ "h3",
853
+ {
854
+ className: ui.cn(
855
+ "mt-3 font-display font-semibold leading-snug",
856
+ lead ? "text-2xl sm:text-3xl" : "text-lg",
857
+ t.text
858
+ ),
859
+ children: item.title
860
+ }
861
+ ),
862
+ item.summary && /* @__PURE__ */ jsxRuntime.jsx(
863
+ "p",
864
+ {
865
+ className: ui.cn(
866
+ "mt-3 flex-1 text-sm leading-relaxed",
867
+ lead && "max-w-xl text-base",
868
+ t.muted
869
+ ),
870
+ children: item.summary
871
+ }
872
+ ),
873
+ /* @__PURE__ */ jsxRuntime.jsx(MetaLine, { meta: item.meta, className: ui.cn("mt-5 text-xs", t.subtle) })
874
+ ]
875
+ }
876
+ ) });
877
+ if (featureFirst && items.length > 1) {
878
+ const [lead, ...rest] = items;
879
+ return /* @__PURE__ */ jsxRuntime.jsxs(
880
+ "div",
881
+ {
882
+ className: ui.cn("grid gap-5 lg:grid-cols-[1.4fr_1fr]", className),
883
+ "data-slot": "article-list",
884
+ "data-layout": "feature",
885
+ "data-testid": testId,
886
+ children: [
887
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: card(lead, 0, true) }),
888
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "grid gap-5", children: rest.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: card(item, i + 1, false) }, i)) })
889
+ ]
890
+ }
891
+ );
892
+ }
893
+ return /* @__PURE__ */ jsxRuntime.jsx(
894
+ "ul",
895
+ {
896
+ className: ui.cn("grid gap-5", COLS2[columns] ?? COLS2[3], className),
897
+ "data-slot": "article-list",
898
+ "data-layout": "cards",
899
+ "data-testid": testId,
900
+ children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: card(item, i, false) }, i))
901
+ }
902
+ );
903
+ }
904
+ function ProofStrip({
905
+ lead,
906
+ items,
907
+ label,
908
+ surface = "muted",
909
+ className,
910
+ testId
911
+ }) {
912
+ const tone = SURFACE_TONE[surface];
913
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
914
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsx(
915
+ "section",
916
+ {
917
+ "aria-label": label,
918
+ className: ui.cn("border-y", t.hairline, SURFACE_CLASS[surface], className),
919
+ "data-slot": "proof-strip",
920
+ "data-testid": testId,
921
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex max-w-7xl flex-col items-center gap-5 px-5 py-6 lg:flex-row lg:justify-between lg:px-8", children: [
922
+ lead && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2.5 text-sm font-medium", children: lead }),
923
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-wrap items-center justify-center gap-x-6 gap-y-2", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(
924
+ "li",
925
+ {
926
+ className: ui.cn("text-xs font-semibold uppercase tracking-wider", t.subtle),
927
+ children: item
928
+ },
929
+ i
930
+ )) })
931
+ ] })
932
+ }
933
+ ) });
934
+ }
935
+ function CtaBand({
936
+ title,
937
+ lead,
938
+ actions,
939
+ backdrop,
940
+ surface = "inverse",
941
+ className,
942
+ testId
943
+ }) {
944
+ const tone = SURFACE_TONE[surface];
945
+ const t = chunkDREI7EQ2_cjs.useEditorialTone(tone);
946
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDREI7EQ2_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsxs(
947
+ "section",
948
+ {
949
+ className: ui.cn("relative isolate overflow-hidden", SURFACE_CLASS[surface], className),
950
+ "data-slot": "cta-band",
951
+ "data-testid": testId,
952
+ children: [
953
+ backdrop && /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 -z-10", children: backdrop }),
954
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-4xl px-5 py-20 text-center lg:px-8 lg:py-24", children: [
955
+ /* @__PURE__ */ jsxRuntime.jsx(
956
+ "h2",
957
+ {
958
+ className: ui.cn(
959
+ "font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl",
960
+ t.text
961
+ ),
962
+ children: title
963
+ }
964
+ ),
965
+ lead && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn("mx-auto mt-4 max-w-2xl text-lg", t.muted), children: lead }),
966
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row", children: actions })
967
+ ] })
968
+ ]
969
+ }
970
+ ) });
971
+ }
972
+
973
+ exports.ArticleList = ArticleList;
974
+ exports.Chart = Chart;
975
+ exports.CheckList = CheckList;
976
+ exports.CollectionDetail = CollectionDetail;
977
+ exports.CtaBand = CtaBand;
978
+ exports.DefinitionList = DefinitionList;
979
+ exports.EditorialHeading = EditorialHeading;
980
+ exports.EditorialHero = EditorialHero;
981
+ exports.EditorialProse = EditorialProse;
982
+ exports.EditorialSection = EditorialSection;
983
+ exports.Eyebrow = Eyebrow;
984
+ exports.PanelGrid = PanelGrid;
985
+ exports.ProofStrip = ProofStrip;
986
+ exports.PullQuote = PullQuote;
987
+ exports.Reveal = Reveal;
988
+ exports.TagList = TagList;
989
+ //# sourceMappingURL=chunk-J2BGSWXM.cjs.map
990
+ //# sourceMappingURL=chunk-J2BGSWXM.cjs.map