@booga/vblocks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +83 -0
  4. package/dist/blog/index.cjs +148 -0
  5. package/dist/blog/index.cjs.map +1 -0
  6. package/dist/blog/index.d.cts +140 -0
  7. package/dist/blog/index.d.ts +140 -0
  8. package/dist/blog/index.js +141 -0
  9. package/dist/blog/index.js.map +1 -0
  10. package/dist/business/index.cjs +121 -0
  11. package/dist/business/index.cjs.map +1 -0
  12. package/dist/business/index.d.cts +102 -0
  13. package/dist/business/index.d.ts +102 -0
  14. package/dist/business/index.js +114 -0
  15. package/dist/business/index.js.map +1 -0
  16. package/dist/cta/index.cjs +99 -0
  17. package/dist/cta/index.cjs.map +1 -0
  18. package/dist/cta/index.d.cts +110 -0
  19. package/dist/cta/index.d.ts +110 -0
  20. package/dist/cta/index.js +92 -0
  21. package/dist/cta/index.js.map +1 -0
  22. package/dist/faq/index.cjs +93 -0
  23. package/dist/faq/index.cjs.map +1 -0
  24. package/dist/faq/index.d.cts +71 -0
  25. package/dist/faq/index.d.ts +71 -0
  26. package/dist/faq/index.js +86 -0
  27. package/dist/faq/index.js.map +1 -0
  28. package/dist/features/index.cjs +104 -0
  29. package/dist/features/index.cjs.map +1 -0
  30. package/dist/features/index.d.cts +81 -0
  31. package/dist/features/index.d.ts +81 -0
  32. package/dist/features/index.js +97 -0
  33. package/dist/features/index.js.map +1 -0
  34. package/dist/footer/index.cjs +117 -0
  35. package/dist/footer/index.cjs.map +1 -0
  36. package/dist/footer/index.d.cts +107 -0
  37. package/dist/footer/index.d.ts +107 -0
  38. package/dist/footer/index.js +110 -0
  39. package/dist/footer/index.js.map +1 -0
  40. package/dist/gallery/index.cjs +106 -0
  41. package/dist/gallery/index.cjs.map +1 -0
  42. package/dist/gallery/index.d.cts +78 -0
  43. package/dist/gallery/index.d.ts +78 -0
  44. package/dist/gallery/index.js +99 -0
  45. package/dist/gallery/index.js.map +1 -0
  46. package/dist/hero/index.cjs +108 -0
  47. package/dist/hero/index.cjs.map +1 -0
  48. package/dist/hero/index.d.cts +134 -0
  49. package/dist/hero/index.d.ts +134 -0
  50. package/dist/hero/index.js +101 -0
  51. package/dist/hero/index.js.map +1 -0
  52. package/dist/index.cjs +1079 -0
  53. package/dist/index.cjs.map +1 -0
  54. package/dist/index.d.cts +22 -0
  55. package/dist/index.d.ts +22 -0
  56. package/dist/index.js +1005 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/portfolio/index.cjs +122 -0
  59. package/dist/portfolio/index.cjs.map +1 -0
  60. package/dist/portfolio/index.d.cts +120 -0
  61. package/dist/portfolio/index.d.ts +120 -0
  62. package/dist/portfolio/index.js +115 -0
  63. package/dist/portfolio/index.js.map +1 -0
  64. package/dist/post/index.cjs +116 -0
  65. package/dist/post/index.cjs.map +1 -0
  66. package/dist/post/index.d.cts +74 -0
  67. package/dist/post/index.d.ts +74 -0
  68. package/dist/post/index.js +109 -0
  69. package/dist/post/index.js.map +1 -0
  70. package/dist/team/index.cjs +120 -0
  71. package/dist/team/index.cjs.map +1 -0
  72. package/dist/team/index.d.cts +128 -0
  73. package/dist/team/index.d.ts +128 -0
  74. package/dist/team/index.js +113 -0
  75. package/dist/team/index.js.map +1 -0
  76. package/dist/testimonial/index.cjs +130 -0
  77. package/dist/testimonial/index.cjs.map +1 -0
  78. package/dist/testimonial/index.d.cts +113 -0
  79. package/dist/testimonial/index.d.ts +113 -0
  80. package/dist/testimonial/index.js +123 -0
  81. package/dist/testimonial/index.js.map +1 -0
  82. package/dist/types-n6w6cZmP.d.cts +16 -0
  83. package/dist/types-n6w6cZmP.d.ts +16 -0
  84. package/package.json +126 -0
package/dist/index.cjs ADDED
@@ -0,0 +1,1079 @@
1
+ 'use strict';
2
+
3
+ var vui = require('@booga/vui');
4
+ var vdsl = require('@booga/vdsl');
5
+ var zod = require('zod');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ // src/hero/HeroSplit/index.tsx
9
+ var DBox = vdsl.dsl(vui.Box);
10
+ var DStack = vdsl.dsl(vui.Stack);
11
+ var DGrid = vdsl.dsl(vui.Grid);
12
+ var DInline = vdsl.dsl(vui.Inline);
13
+
14
+ // src/theme.ts
15
+ function themeStyle(theme) {
16
+ if (!theme) return void 0;
17
+ return Object.fromEntries(
18
+ Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])
19
+ );
20
+ }
21
+ function clampedGridCols(n) {
22
+ return Math.max(1, Math.min(6, Math.round(n)));
23
+ }
24
+ var CtaSchema = zod.z.object({
25
+ label: zod.z.string(),
26
+ href: zod.z.string()
27
+ }).strict();
28
+ var ImageSchema = zod.z.object({
29
+ src: zod.z.string(),
30
+ alt: zod.z.string()
31
+ }).strict();
32
+ var AvatarSchema = ImageSchema;
33
+
34
+ // src/hero/HeroSplit/schema.ts
35
+ var HeroSplitContentSchema = zod.z.object({
36
+ eyebrow: zod.z.string().optional(),
37
+ heading: zod.z.string(),
38
+ description: zod.z.string(),
39
+ primaryCta: CtaSchema,
40
+ secondaryCta: CtaSchema.optional(),
41
+ image: ImageSchema
42
+ }).strict();
43
+ function HeroSplit({ content, theme }) {
44
+ HeroSplitContentSchema.parse(content);
45
+ const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;
46
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 12, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
47
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
48
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
49
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
50
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
51
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, children: [
52
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, children: primaryCta.label }),
53
+ secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: secondaryCta.href, variant: "outline", children: secondaryCta.label })
54
+ ] })
55
+ ] }),
56
+ /* @__PURE__ */ jsxRuntime.jsx(
57
+ DBox,
58
+ {
59
+ as: "img",
60
+ src: image.src,
61
+ alt: image.alt,
62
+ className: vui.cn("w-full rounded-lg object-cover aspect-video")
63
+ }
64
+ )
65
+ ] }) });
66
+ }
67
+
68
+ // src/hero/HeroSplit/default.ts
69
+ var HeroSplitDefaultContent = {
70
+ heading: "Build something remarkable",
71
+ description: "A composable foundation for ambitious teams. Typed, accessible, and ready to ship.",
72
+ primaryCta: { label: "Get started", href: "#" },
73
+ secondaryCta: { label: "Learn more", href: "#" },
74
+ image: { src: "https://placehold.co/600x400", alt: "Product preview" }
75
+ };
76
+ var HeroCenteredContentSchema = zod.z.object({
77
+ eyebrow: zod.z.string().optional(),
78
+ heading: zod.z.string(),
79
+ description: zod.z.string(),
80
+ primaryCta: CtaSchema,
81
+ secondaryCta: CtaSchema.optional()
82
+ }).strict();
83
+ function HeroCentered({ content, theme }) {
84
+ HeroCenteredContentSchema.parse(content);
85
+ const { eyebrow, heading, description, primaryCta, secondaryCta } = content;
86
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 24, gap: 8, align: "center", className: vui.cn("max-w-3xl mx-auto text-center"), children: [
87
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
88
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
89
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-xl"), children: description }),
90
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
91
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, children: primaryCta.label }),
92
+ secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: secondaryCta.href, variant: "outline", children: secondaryCta.label })
93
+ ] })
94
+ ] }) });
95
+ }
96
+
97
+ // src/hero/HeroCentered/default.ts
98
+ var HeroCenteredDefaultContent = {
99
+ heading: "The foundation for what comes next",
100
+ description: "Composable blocks, typed content, and zero boilerplate. Focus on the product.",
101
+ primaryCta: { label: "Start building", href: "#" },
102
+ secondaryCta: { label: "View docs", href: "#" }
103
+ };
104
+ var CtaSplitContentSchema = zod.z.object({
105
+ heading: zod.z.string(),
106
+ description: zod.z.string(),
107
+ primaryCta: CtaSchema,
108
+ image: ImageSchema
109
+ }).strict();
110
+ function CtaSplit({ content, theme }) {
111
+ CtaSplitContentSchema.parse(content);
112
+ const { heading, description, primaryCta, image } = content;
113
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 12, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
114
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
115
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-4xl font-bold tracking-tight"), children: heading }),
116
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
117
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, size: "lg", children: primaryCta.label })
118
+ ] }),
119
+ /* @__PURE__ */ jsxRuntime.jsx(
120
+ DBox,
121
+ {
122
+ as: "img",
123
+ src: image.src,
124
+ alt: image.alt,
125
+ className: vui.cn("w-full rounded-lg object-cover aspect-video")
126
+ }
127
+ )
128
+ ] }) });
129
+ }
130
+
131
+ // src/cta/CtaSplit/default.ts
132
+ var CtaSplitDefaultContent = {
133
+ heading: "Ready to get started?",
134
+ description: "Join thousands of teams shipping faster with composable tooling.",
135
+ primaryCta: { label: "Start free", href: "#" },
136
+ image: { src: "https://placehold.co/480x320", alt: "Illustration" }
137
+ };
138
+ var CtaCenteredContentSchema = zod.z.object({
139
+ heading: zod.z.string(),
140
+ description: zod.z.string(),
141
+ primaryCta: CtaSchema,
142
+ secondaryCta: CtaSchema.optional()
143
+ }).strict();
144
+ function CtaCentered({ content, theme }) {
145
+ CtaCenteredContentSchema.parse(content);
146
+ const { heading, description, primaryCta, secondaryCta } = content;
147
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, gap: 8, align: "center", className: vui.cn("max-w-2xl mx-auto text-center py-20"), children: [
148
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-4xl font-bold tracking-tight"), children: heading }),
149
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
150
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
151
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, size: "lg", children: primaryCta.label }),
152
+ secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: secondaryCta.href, size: "lg", variant: "outline", children: secondaryCta.label })
153
+ ] })
154
+ ] }) });
155
+ }
156
+
157
+ // src/cta/CtaCentered/default.ts
158
+ var CtaCenteredDefaultContent = {
159
+ heading: "Ready to get started?",
160
+ description: "Ship faster with composable, typed section blocks.",
161
+ primaryCta: { label: "Get started", href: "#" },
162
+ secondaryCta: { label: "Learn more", href: "#" }
163
+ };
164
+ var FaqItemSchema = zod.z.object({
165
+ question: zod.z.string(),
166
+ answer: zod.z.string()
167
+ }).strict();
168
+ var FaqSplitContentSchema = zod.z.object({
169
+ heading: zod.z.string(),
170
+ description: zod.z.string().optional(),
171
+ items: zod.z.array(FaqItemSchema).min(1)
172
+ }).strict();
173
+ function FaqSplit({ content, theme }) {
174
+ FaqSplitContentSchema.parse(content);
175
+ const { heading, description, items } = content;
176
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
177
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, className: vui.cn("sticky top-16"), children: [
178
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
179
+ description && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: description })
180
+ ] }),
181
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 3, display: "flex", className: vui.cn("list-none flex-col"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "details", p: 4, className: vui.cn("border rounded-lg"), children: [
182
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "summary", className: vui.cn("font-semibold cursor-pointer list-none"), children: item.question }),
183
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", mt: 3, children: item.answer })
184
+ ] }) }, i)) })
185
+ ] }) });
186
+ }
187
+
188
+ // src/faq/FaqSplit/default.ts
189
+ var FaqSplitDefaultContent = {
190
+ heading: "Frequently asked questions",
191
+ description: "Everything you need to know about the product.",
192
+ items: [
193
+ { question: "How does it work?", answer: "Drop a block onto your page, pass typed content, and render. No manual wiring." },
194
+ { question: "Can I customise the styles?", answer: "Yes. Pass a ThemeOverride to any block to remap CSS custom properties." },
195
+ { question: "Does it require a specific framework?", answer: "React 18+ and Tailwind CSS. No other runtime dependencies." }
196
+ ]
197
+ };
198
+ var FaqItemSchema2 = zod.z.object({
199
+ question: zod.z.string(),
200
+ answer: zod.z.string()
201
+ }).strict();
202
+ var FaqGridContentSchema = zod.z.object({
203
+ heading: zod.z.string(),
204
+ items: zod.z.array(FaqItemSchema2).min(1)
205
+ }).strict();
206
+ function FaqGrid({ content, theme }) {
207
+ FaqGridContentSchema.parse(content);
208
+ const { heading, items } = content;
209
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-5xl mx-auto gap-10"), children: [
210
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
211
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, gap: 4, children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
212
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardTitle, { as: "h3", children: item.question }) }),
213
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: item.answer }) })
214
+ ] }, i)) })
215
+ ] }) });
216
+ }
217
+
218
+ // src/faq/FaqGrid/default.ts
219
+ var FaqGridDefaultContent = {
220
+ heading: "Common questions",
221
+ items: [
222
+ { question: "How does it work?", answer: "Drop a block onto your page, pass typed content, and render." },
223
+ { question: "Can I customise styles?", answer: "Yes. ThemeOverride maps to CSS custom properties." },
224
+ { question: "Which frameworks are supported?", answer: "React 18+ with Tailwind CSS." },
225
+ { question: "Is TypeScript required?", answer: "Strongly recommended. All content schemas export their types." }
226
+ ]
227
+ };
228
+ var BrandSchema = zod.z.object({
229
+ name: zod.z.string(),
230
+ tagline: zod.z.string().optional()
231
+ }).strict();
232
+ var FooterSplitContentSchema = zod.z.object({
233
+ brand: BrandSchema,
234
+ links: zod.z.array(CtaSchema).min(1),
235
+ copyright: zod.z.string()
236
+ }).strict();
237
+ function FooterSplit({ content, theme }) {
238
+ FooterSplitContentSchema.parse(content);
239
+ const { brand, links, copyright } = content;
240
+ return /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "footer", style: themeStyle(theme), children: [
241
+ /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 12, gap: 8, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
242
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
243
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", className: vui.cn("font-bold text-lg"), children: brand.name }),
244
+ brand.tagline && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: brand.tagline })
245
+ ] }),
246
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "nav", "aria-label": "Footer navigation", children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 6, display: "flex", className: vui.cn("list-none flex-wrap"), children: links.map((link, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "a", href: link.href, className: vui.cn("text-sm hover:underline"), children: link.label }) }, i)) }) })
247
+ ] }),
248
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Separator, {}),
249
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { px: 6, py: 4, className: vui.cn("max-w-6xl mx-auto"), children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-xs text-center"), children: copyright }) })
250
+ ] });
251
+ }
252
+
253
+ // src/footer/FooterSplit/default.ts
254
+ var FooterSplitDefaultContent = {
255
+ brand: { name: "Acme", tagline: "Build things that matter." },
256
+ links: [
257
+ { label: "Privacy", href: "#" },
258
+ { label: "Terms", href: "#" },
259
+ { label: "Contact", href: "#" }
260
+ ],
261
+ copyright: "\xA9 2026 Acme. All rights reserved."
262
+ };
263
+ var FooterColumnSchema = zod.z.object({
264
+ heading: zod.z.string(),
265
+ links: zod.z.array(CtaSchema).min(1)
266
+ }).strict();
267
+ var FooterGridContentSchema = zod.z.object({
268
+ columns: zod.z.array(FooterColumnSchema).min(1).max(6),
269
+ copyright: zod.z.string()
270
+ }).strict();
271
+ function FooterGrid({ content, theme }) {
272
+ FooterGridContentSchema.parse(content);
273
+ const { columns, copyright } = content;
274
+ return /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "footer", style: themeStyle(theme), children: [
275
+ /* @__PURE__ */ jsxRuntime.jsx(
276
+ DGrid,
277
+ {
278
+ columns: clampedGridCols(columns.length),
279
+ px: 6,
280
+ py: 12,
281
+ gap: 8,
282
+ className: vui.cn("max-w-6xl mx-auto"),
283
+ children: columns.map((col, i) => /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, children: [
284
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-sm uppercase tracking-widest"), children: col.heading }),
285
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 2, display: "flex", className: vui.cn("list-none flex-col"), children: col.links.map((link, j) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "a", href: link.href, color: "muted", className: vui.cn("text-sm hover:underline"), children: link.label }) }, j)) })
286
+ ] }, i))
287
+ }
288
+ ),
289
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Separator, {}),
290
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { px: 6, py: 4, className: vui.cn("max-w-6xl mx-auto"), children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-xs text-center"), children: copyright }) })
291
+ ] });
292
+ }
293
+
294
+ // src/footer/FooterGrid/default.ts
295
+ var FooterGridDefaultContent = {
296
+ columns: [
297
+ { heading: "Product", links: [{ label: "Features", href: "#" }, { label: "Pricing", href: "#" }] },
298
+ { heading: "Company", links: [{ label: "About", href: "#" }, { label: "Blog", href: "#" }] },
299
+ { heading: "Legal", links: [{ label: "Privacy", href: "#" }, { label: "Terms", href: "#" }] }
300
+ ],
301
+ copyright: "\xA9 2026 Acme. All rights reserved."
302
+ };
303
+ var GalleryItemSchema = zod.z.object({
304
+ src: zod.z.string(),
305
+ alt: zod.z.string(),
306
+ caption: zod.z.string().optional()
307
+ }).strict();
308
+ var GallerySplitContentSchema = zod.z.object({
309
+ heading: zod.z.string(),
310
+ description: zod.z.string().optional(),
311
+ items: zod.z.array(GalleryItemSchema).min(1)
312
+ }).strict();
313
+ function GallerySplit({ content, theme }) {
314
+ GallerySplitContentSchema.parse(content);
315
+ const { heading, description, items } = content;
316
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 12, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
317
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, className: vui.cn("sticky top-16"), children: [
318
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
319
+ description && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: description })
320
+ ] }),
321
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 4, display: "grid", className: vui.cn("list-none grid-cols-2"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "figure", m: 0, children: [
322
+ /* @__PURE__ */ jsxRuntime.jsx(
323
+ DBox,
324
+ {
325
+ as: "img",
326
+ src: item.src,
327
+ alt: item.alt,
328
+ className: vui.cn("w-full rounded-lg object-cover aspect-square")
329
+ }
330
+ ),
331
+ item.caption && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "figcaption", color: "muted", mt: 1, className: vui.cn("text-xs"), children: item.caption })
332
+ ] }) }, i)) })
333
+ ] }) });
334
+ }
335
+
336
+ // src/gallery/GallerySplit/default.ts
337
+ var GallerySplitDefaultContent = {
338
+ heading: "Our work",
339
+ description: "A selection of recent projects.",
340
+ items: [
341
+ { src: "https://placehold.co/400x300", alt: "Project one" },
342
+ { src: "https://placehold.co/400x300", alt: "Project two" },
343
+ { src: "https://placehold.co/400x300", alt: "Project three", caption: "Featured project" }
344
+ ]
345
+ };
346
+ var GalleryItemSchema2 = zod.z.object({
347
+ src: zod.z.string(),
348
+ alt: zod.z.string(),
349
+ caption: zod.z.string().optional()
350
+ }).strict();
351
+ var GalleryGridContentSchema = zod.z.object({
352
+ items: zod.z.array(GalleryItemSchema2).min(1)
353
+ }).strict();
354
+ function GalleryGrid({ content, theme }) {
355
+ GalleryGridContentSchema.parse(content);
356
+ const { items } = content;
357
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, px: 6, py: 12, gap: 4, className: vui.cn("max-w-6xl mx-auto"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "figure", m: 0, children: [
358
+ /* @__PURE__ */ jsxRuntime.jsx(
359
+ DBox,
360
+ {
361
+ as: "img",
362
+ src: item.src,
363
+ alt: item.alt,
364
+ className: vui.cn("w-full rounded-lg object-cover aspect-square")
365
+ }
366
+ ),
367
+ item.caption && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "figcaption", color: "muted", mt: 1, className: vui.cn("text-xs"), children: item.caption })
368
+ ] }, i)) }) });
369
+ }
370
+
371
+ // src/gallery/GalleryGrid/default.ts
372
+ var GalleryGridDefaultContent = {
373
+ items: [
374
+ { src: "https://placehold.co/400x400", alt: "Gallery image one" },
375
+ { src: "https://placehold.co/400x400", alt: "Gallery image two" },
376
+ { src: "https://placehold.co/400x400", alt: "Gallery image three" },
377
+ { src: "https://placehold.co/400x400", alt: "Gallery image four", caption: "Featured" }
378
+ ]
379
+ };
380
+ var PortfolioItemSchema = zod.z.object({
381
+ title: zod.z.string(),
382
+ category: zod.z.string(),
383
+ image: ImageSchema
384
+ }).strict();
385
+ var PortfolioSplitContentSchema = zod.z.object({
386
+ heading: zod.z.string(),
387
+ description: zod.z.string().optional(),
388
+ items: zod.z.array(PortfolioItemSchema).min(1)
389
+ }).strict();
390
+ function PortfolioSplit({ content, theme }) {
391
+ PortfolioSplitContentSchema.parse(content);
392
+ const { heading, description, items } = content;
393
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
394
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, className: vui.cn("sticky top-16"), children: [
395
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
396
+ description && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: description })
397
+ ] }),
398
+ /* @__PURE__ */ jsxRuntime.jsx(DStack, { gap: 6, children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
399
+ /* @__PURE__ */ jsxRuntime.jsx(
400
+ DBox,
401
+ {
402
+ as: "img",
403
+ src: item.image.src,
404
+ alt: item.image.alt,
405
+ className: vui.cn("w-full rounded-t-lg object-cover aspect-video")
406
+ }
407
+ ),
408
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
409
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: item.category }),
410
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-lg"), children: item.title })
411
+ ] }) })
412
+ ] }, i)) })
413
+ ] }) });
414
+ }
415
+
416
+ // src/portfolio/PortfolioSplit/default.ts
417
+ var PortfolioSplitDefaultContent = {
418
+ heading: "Selected work",
419
+ description: "Projects spanning product design, engineering, and research.",
420
+ items: [
421
+ { title: "Commerce platform redesign", category: "Product", image: { src: "https://placehold.co/480x360", alt: "Commerce project" } },
422
+ { title: "Data visualisation system", category: "Engineering", image: { src: "https://placehold.co/480x360", alt: "Data project" } },
423
+ { title: "Design language rollout", category: "Design", image: { src: "https://placehold.co/480x360", alt: "Design project" } }
424
+ ]
425
+ };
426
+ var PortfolioItemSchema2 = zod.z.object({
427
+ title: zod.z.string(),
428
+ category: zod.z.string(),
429
+ image: ImageSchema
430
+ }).strict();
431
+ var PortfolioGridContentSchema = zod.z.object({
432
+ items: zod.z.array(PortfolioItemSchema2).min(1)
433
+ }).strict();
434
+ function PortfolioGrid({ content, theme }) {
435
+ PortfolioGridContentSchema.parse(content);
436
+ const { items } = content;
437
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Portfolio", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, px: 6, py: 12, gap: 6, className: vui.cn("max-w-6xl mx-auto"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
438
+ /* @__PURE__ */ jsxRuntime.jsx(
439
+ DBox,
440
+ {
441
+ as: "img",
442
+ src: item.image.src,
443
+ alt: item.image.alt,
444
+ className: vui.cn("w-full rounded-t-lg object-cover aspect-video")
445
+ }
446
+ ),
447
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
448
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: item.category }),
449
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-lg"), children: item.title })
450
+ ] }) })
451
+ ] }, i)) }) });
452
+ }
453
+
454
+ // src/portfolio/PortfolioGrid/default.ts
455
+ var PortfolioGridDefaultContent = {
456
+ items: [
457
+ { title: "Commerce platform redesign", category: "Product", image: { src: "https://placehold.co/480x360", alt: "Commerce project" } },
458
+ { title: "Data visualisation system", category: "Engineering", image: { src: "https://placehold.co/480x360", alt: "Data project" } },
459
+ { title: "Design language rollout", category: "Design", image: { src: "https://placehold.co/480x360", alt: "Design project" } },
460
+ { title: "Mobile app architecture", category: "Engineering", image: { src: "https://placehold.co/480x360", alt: "Mobile project" } }
461
+ ]
462
+ };
463
+ var PostSplitContentSchema = zod.z.object({
464
+ title: zod.z.string(),
465
+ author: zod.z.string(),
466
+ date: zod.z.string(),
467
+ category: zod.z.string().optional(),
468
+ body: zod.z.string(),
469
+ image: ImageSchema
470
+ }).strict();
471
+ function PostSplit({ content, theme }) {
472
+ PostSplitContentSchema.parse(content);
473
+ const { title, author, date, category, body, image } = content;
474
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
475
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, className: vui.cn("sticky top-16"), children: [
476
+ category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: category }),
477
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-3xl font-bold tracking-tight leading-snug"), children: title }),
478
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Separator, {}),
479
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 2, color: "muted", className: vui.cn("text-sm"), children: [
480
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: author }),
481
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", "aria-hidden": "true", children: "\xB7" }),
482
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: date, children: date })
483
+ ] })
484
+ ] }),
485
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
486
+ /* @__PURE__ */ jsxRuntime.jsx(
487
+ DBox,
488
+ {
489
+ as: "img",
490
+ src: image.src,
491
+ alt: image.alt,
492
+ className: vui.cn("w-full rounded-lg object-cover aspect-video")
493
+ }
494
+ ),
495
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", className: vui.cn("text-base leading-relaxed"), children: body })
496
+ ] })
497
+ ] }) });
498
+ }
499
+
500
+ // src/post/PostSplit/default.ts
501
+ var PostSplitDefaultContent = {
502
+ title: "Designing for composability",
503
+ author: "Alex Meridian",
504
+ date: "2026-05-01",
505
+ category: "Design systems",
506
+ body: "Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency. This post explores the core principles behind maintainable design systems.",
507
+ image: { src: "https://placehold.co/600x400", alt: "Post cover image" }
508
+ };
509
+ var PostCenteredContentSchema = zod.z.object({
510
+ title: zod.z.string(),
511
+ author: zod.z.string(),
512
+ date: zod.z.string(),
513
+ category: zod.z.string().optional(),
514
+ body: zod.z.string()
515
+ }).strict();
516
+ function PostCentered({ content, theme }) {
517
+ PostCenteredContentSchema.parse(content);
518
+ const { title, author, date, category, body } = content;
519
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, gap: 6, className: vui.cn("max-w-2xl mx-auto"), children: [
520
+ category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: category }),
521
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-4xl font-bold tracking-tight leading-snug"), children: title }),
522
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 2, color: "muted", className: vui.cn("text-sm"), children: [
523
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: author }),
524
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", "aria-hidden": "true", children: "\xB7" }),
525
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: date, children: date })
526
+ ] }),
527
+ /* @__PURE__ */ jsxRuntime.jsx(vui.Separator, {}),
528
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", className: vui.cn("text-base leading-relaxed"), children: body })
529
+ ] }) });
530
+ }
531
+
532
+ // src/post/PostCentered/default.ts
533
+ var PostCenteredDefaultContent = {
534
+ title: "Designing for composability",
535
+ author: "Alex Meridian",
536
+ date: "2026-05-01",
537
+ category: "Design systems",
538
+ body: "Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency."
539
+ };
540
+ var TeamMemberSchema = zod.z.object({
541
+ name: zod.z.string(),
542
+ role: zod.z.string(),
543
+ avatar: AvatarSchema,
544
+ bio: zod.z.string().optional()
545
+ }).strict();
546
+ var TeamSplitContentSchema = zod.z.object({
547
+ heading: zod.z.string(),
548
+ description: zod.z.string().optional(),
549
+ members: zod.z.array(TeamMemberSchema).min(1)
550
+ }).strict();
551
+ function TeamSplit({ content, theme }) {
552
+ TeamSplitContentSchema.parse(content);
553
+ const { heading, description, members } = content;
554
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
555
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, className: vui.cn("sticky top-16"), children: [
556
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
557
+ description && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: description })
558
+ ] }),
559
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 6, display: "flex", className: vui.cn("list-none flex-col"), children: members.map((member, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 4, align: "start", children: [
560
+ /* @__PURE__ */ jsxRuntime.jsxs(vui.Avatar, { children: [
561
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarImage, { src: member.avatar.src, alt: member.avatar.alt }),
562
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarFallback, { children: member.name.slice(0, 2).toUpperCase() })
563
+ ] }),
564
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
565
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", className: vui.cn("font-semibold"), children: member.name }),
566
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: member.role }),
567
+ member.bio && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", className: vui.cn("text-sm mt-1"), children: member.bio })
568
+ ] })
569
+ ] }) }, i)) })
570
+ ] }) });
571
+ }
572
+
573
+ // src/team/TeamSplit/default.ts
574
+ var TeamSplitDefaultContent = {
575
+ heading: "Meet the team",
576
+ description: "The people behind the product.",
577
+ members: [
578
+ { name: "Jordan Ellis", role: "Product Lead", avatar: { src: "https://placehold.co/80x80", alt: "Jordan Ellis" }, bio: "Focused on user experience and product strategy." },
579
+ { name: "Sam Rivera", role: "Engineering Lead", avatar: { src: "https://placehold.co/80x80", alt: "Sam Rivera" }, bio: "Architecting scalable systems since 2015." },
580
+ { name: "Taylor Kim", role: "Design Lead", avatar: { src: "https://placehold.co/80x80", alt: "Taylor Kim" } }
581
+ ]
582
+ };
583
+ var TeamMemberSchema2 = zod.z.object({
584
+ name: zod.z.string(),
585
+ role: zod.z.string(),
586
+ avatar: AvatarSchema
587
+ }).strict();
588
+ var TeamGridContentSchema = zod.z.object({
589
+ heading: zod.z.string(),
590
+ members: zod.z.array(TeamMemberSchema2).min(1)
591
+ }).strict();
592
+ function TeamGrid({ content, theme }) {
593
+ TeamGridContentSchema.parse(content);
594
+ const { heading, members } = content;
595
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-5xl mx-auto gap-10"), children: [
596
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
597
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: members.map((member, i) => /* @__PURE__ */ jsxRuntime.jsx(vui.Card, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 3, align: "center", pt: 4, className: vui.cn("text-center"), children: [
598
+ /* @__PURE__ */ jsxRuntime.jsxs(vui.Avatar, { className: vui.cn("w-16 h-16"), children: [
599
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarImage, { src: member.avatar.src, alt: member.avatar.alt }),
600
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarFallback, { children: member.name.slice(0, 2).toUpperCase() })
601
+ ] }),
602
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
603
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", className: vui.cn("font-semibold"), children: member.name }),
604
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: member.role })
605
+ ] })
606
+ ] }) }) }, i)) })
607
+ ] }) });
608
+ }
609
+
610
+ // src/team/TeamGrid/default.ts
611
+ var TeamGridDefaultContent = {
612
+ heading: "Our team",
613
+ members: [
614
+ { name: "Jordan Ellis", role: "Product Lead", avatar: { src: "https://placehold.co/80x80", alt: "Jordan Ellis" } },
615
+ { name: "Sam Rivera", role: "Engineering Lead", avatar: { src: "https://placehold.co/80x80", alt: "Sam Rivera" } },
616
+ { name: "Taylor Kim", role: "Design Lead", avatar: { src: "https://placehold.co/80x80", alt: "Taylor Kim" } },
617
+ { name: "Morgan Blake", role: "Research Lead", avatar: { src: "https://placehold.co/80x80", alt: "Morgan Blake" } }
618
+ ]
619
+ };
620
+ var TestimonialSplitContentSchema = zod.z.object({
621
+ quote: zod.z.string(),
622
+ author: zod.z.string(),
623
+ role: zod.z.string(),
624
+ company: zod.z.string().optional(),
625
+ avatar: AvatarSchema.optional()
626
+ }).strict();
627
+ function TestimonialSplit({ content, theme }) {
628
+ TestimonialSplitContentSchema.parse(content);
629
+ const { quote, author, role, company, avatar } = content;
630
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Testimonial", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, gap: 16, align: "center", className: vui.cn("max-w-5xl mx-auto py-20"), children: [
631
+ /* @__PURE__ */ jsxRuntime.jsx(
632
+ DBox,
633
+ {
634
+ as: "blockquote",
635
+ className: vui.cn("text-2xl font-medium leading-relaxed"),
636
+ cite: void 0,
637
+ children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", children: quote })
638
+ }
639
+ ),
640
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, children: [
641
+ avatar && /* @__PURE__ */ jsxRuntime.jsxs(vui.Avatar, { className: vui.cn("w-20 h-20"), children: [
642
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarImage, { src: avatar.src, alt: avatar.alt }),
643
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarFallback, { children: author.slice(0, 2).toUpperCase() })
644
+ ] }),
645
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 1, color: "muted", className: vui.cn("text-sm"), children: [
646
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "cite", color: "fg", className: vui.cn("font-semibold not-italic"), children: author }),
647
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: "," }),
648
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: role }),
649
+ company && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
650
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: "at" }),
651
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: company })
652
+ ] })
653
+ ] })
654
+ ] })
655
+ ] }) });
656
+ }
657
+
658
+ // src/testimonial/TestimonialSplit/default.ts
659
+ var TestimonialSplitDefaultContent = {
660
+ quote: "This is the most composable block kit I have used. Schema validation caught three content bugs before they hit production.",
661
+ author: "Jordan Ellis",
662
+ role: "Product Lead",
663
+ company: "Acme",
664
+ avatar: { src: "https://placehold.co/120x120", alt: "Jordan Ellis" }
665
+ };
666
+ var TestimonialItemSchema = zod.z.object({
667
+ quote: zod.z.string(),
668
+ author: zod.z.string(),
669
+ role: zod.z.string(),
670
+ company: zod.z.string().optional(),
671
+ avatar: AvatarSchema.optional()
672
+ }).strict();
673
+ var TestimonialGridContentSchema = zod.z.object({
674
+ heading: zod.z.string(),
675
+ items: zod.z.array(TestimonialItemSchema).min(1)
676
+ }).strict();
677
+ function TestimonialGrid({ content, theme }) {
678
+ TestimonialGridContentSchema.parse(content);
679
+ const { heading, items } = content;
680
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-5xl mx-auto gap-10"), children: [
681
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
682
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(vui.Card, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, pt: 4, children: [
683
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "blockquote", className: vui.cn("text-sm leading-relaxed"), children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", children: item.quote }) }),
684
+ /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 3, align: "center", children: [
685
+ item.avatar && /* @__PURE__ */ jsxRuntime.jsxs(vui.Avatar, { children: [
686
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarImage, { src: item.avatar.src, alt: item.avatar.alt }),
687
+ /* @__PURE__ */ jsxRuntime.jsx(vui.AvatarFallback, { children: item.author.slice(0, 2).toUpperCase() })
688
+ ] }),
689
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { className: vui.cn("gap-0.5"), children: [
690
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "cite", className: vui.cn("text-sm font-semibold not-italic"), children: item.author }),
691
+ /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "span", color: "muted", className: vui.cn("text-xs"), children: [
692
+ item.role,
693
+ item.company ? `, ${item.company}` : ""
694
+ ] })
695
+ ] })
696
+ ] })
697
+ ] }) }) }, i)) })
698
+ ] }) });
699
+ }
700
+
701
+ // src/testimonial/TestimonialGrid/default.ts
702
+ var TestimonialGridDefaultContent = {
703
+ heading: "What teams are saying",
704
+ items: [
705
+ { quote: "Schema validation alone saved us from three production bugs in the first week.", author: "Jordan Ellis", role: "Product Lead", company: "Acme" },
706
+ { quote: "The composable approach means we can swap blocks without touching the rest of the page.", author: "Sam Rivera", role: "Engineering Lead" },
707
+ { quote: "Typed content props make onboarding new designers trivially easy.", author: "Taylor Kim", role: "Design Lead", company: "Studio N" }
708
+ ]
709
+ };
710
+ var BlogPostSchema = zod.z.object({
711
+ title: zod.z.string(),
712
+ excerpt: zod.z.string(),
713
+ date: zod.z.string(),
714
+ category: zod.z.string().optional(),
715
+ image: ImageSchema
716
+ }).strict();
717
+ var BlogSplitContentSchema = zod.z.object({
718
+ heading: zod.z.string(),
719
+ posts: zod.z.array(BlogPostSchema).min(1)
720
+ }).strict();
721
+ function BlogSplit({ content, theme }) {
722
+ BlogSplitContentSchema.parse(content);
723
+ const { heading, posts } = content;
724
+ const [featured, ...rest] = posts;
725
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-6xl mx-auto gap-10"), children: [
726
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
727
+ /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, gap: 8, align: "start", children: [
728
+ featured && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, children: [
729
+ /* @__PURE__ */ jsxRuntime.jsx(
730
+ DBox,
731
+ {
732
+ as: "img",
733
+ src: featured.image.src,
734
+ alt: featured.image.alt,
735
+ className: vui.cn("w-full rounded-lg object-cover aspect-video")
736
+ }
737
+ ),
738
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
739
+ featured.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: featured.category }),
740
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-xl font-semibold"), children: featured.title }),
741
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: featured.excerpt }),
742
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: featured.date, color: "muted", className: vui.cn("text-xs"), children: featured.date })
743
+ ] })
744
+ ] }) }),
745
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 6, display: "flex", className: vui.cn("list-none flex-col"), children: rest.map((post, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, gap: 4, align: "start", children: [
746
+ /* @__PURE__ */ jsxRuntime.jsx(
747
+ DBox,
748
+ {
749
+ as: "img",
750
+ src: post.image.src,
751
+ alt: post.image.alt,
752
+ className: vui.cn("w-full rounded-md object-cover aspect-video")
753
+ }
754
+ ),
755
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
756
+ post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: post.category }),
757
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold leading-snug"), children: post.title }),
758
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: vui.cn("text-xs"), children: post.date })
759
+ ] })
760
+ ] }) }) }, i)) })
761
+ ] })
762
+ ] }) });
763
+ }
764
+
765
+ // src/blog/BlogSplit/default.ts
766
+ var BlogSplitDefaultContent = {
767
+ heading: "Latest posts",
768
+ posts: [
769
+ { title: "Designing for composability", excerpt: "How modular thinking unlocks maintainable systems at scale.", date: "2026-05-01", category: "Design", image: { src: "https://placehold.co/600x400", alt: "Design systems post" } },
770
+ { title: "Type-safe content at runtime", excerpt: "Zod schemas as the single source of truth for block content.", date: "2026-04-18", image: { src: "https://placehold.co/400x280", alt: "Type safety post" } },
771
+ { title: "Tree-shaking section blocks", excerpt: "Per-category entry points and how they keep bundles lean.", date: "2026-04-05", category: "Engineering", image: { src: "https://placehold.co/400x280", alt: "Tree-shaking post" } }
772
+ ]
773
+ };
774
+ var BlogPostSchema2 = zod.z.object({
775
+ title: zod.z.string(),
776
+ excerpt: zod.z.string(),
777
+ date: zod.z.string(),
778
+ category: zod.z.string().optional(),
779
+ image: ImageSchema
780
+ }).strict();
781
+ var BlogGridContentSchema = zod.z.object({
782
+ heading: zod.z.string(),
783
+ posts: zod.z.array(BlogPostSchema2).min(1)
784
+ }).strict();
785
+ function BlogGrid({ content, theme }) {
786
+ BlogGridContentSchema.parse(content);
787
+ const { heading, posts } = content;
788
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-6xl mx-auto gap-10"), children: [
789
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
790
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: posts.map((post, i) => /* @__PURE__ */ jsxRuntime.jsx(vui.Card, { children: /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "article", children: [
791
+ /* @__PURE__ */ jsxRuntime.jsx(
792
+ DBox,
793
+ {
794
+ as: "img",
795
+ src: post.image.src,
796
+ alt: post.image.alt,
797
+ className: vui.cn("w-full rounded-t-lg object-cover aspect-video")
798
+ }
799
+ ),
800
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
801
+ post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: post.category }),
802
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold leading-snug"), children: post.title }),
803
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: post.excerpt }),
804
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: vui.cn("text-xs"), children: post.date })
805
+ ] }) })
806
+ ] }) }, i)) })
807
+ ] }) });
808
+ }
809
+
810
+ // src/blog/BlogGrid/default.ts
811
+ var BlogGridDefaultContent = {
812
+ heading: "From the blog",
813
+ posts: [
814
+ { title: "Designing for composability", excerpt: "Modular thinking at scale.", date: "2026-05-01", category: "Design", image: { src: "https://placehold.co/480x320", alt: "Design post" } },
815
+ { title: "Type-safe content at runtime", excerpt: "Zod as single source of truth.", date: "2026-04-18", image: { src: "https://placehold.co/480x320", alt: "Types post" } },
816
+ { title: "Tree-shaking section blocks", excerpt: "Lean bundles, per-category entry points.", date: "2026-04-05", category: "Engineering", image: { src: "https://placehold.co/480x320", alt: "Bundling post" } }
817
+ ]
818
+ };
819
+ var ContactSchema = zod.z.object({
820
+ phone: zod.z.string().optional(),
821
+ email: zod.z.string().optional(),
822
+ address: zod.z.string().optional()
823
+ }).strict();
824
+ var BusinessSplitContentSchema = zod.z.object({
825
+ name: zod.z.string(),
826
+ tagline: zod.z.string(),
827
+ description: zod.z.string(),
828
+ image: ImageSchema,
829
+ contact: ContactSchema.optional()
830
+ }).strict();
831
+ function BusinessSplit({ content, theme }) {
832
+ BusinessSplitContentSchema.parse(content);
833
+ const { name, tagline, description, image, contact } = content;
834
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": name, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
835
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
836
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
837
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-4xl font-bold tracking-tight"), children: name }),
838
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-xl"), children: tagline })
839
+ ] }),
840
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg leading-relaxed"), children: description }),
841
+ contact && /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "address", color: "muted", gap: 1, display: "flex", className: vui.cn("not-italic text-sm flex-col"), children: [
842
+ contact.phone && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: contact.phone }),
843
+ contact.email && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: contact.email }),
844
+ contact.address && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: contact.address })
845
+ ] })
846
+ ] }),
847
+ /* @__PURE__ */ jsxRuntime.jsx(
848
+ DBox,
849
+ {
850
+ as: "img",
851
+ src: image.src,
852
+ alt: image.alt,
853
+ className: vui.cn("w-full rounded-lg object-cover aspect-square")
854
+ }
855
+ )
856
+ ] }) });
857
+ }
858
+
859
+ // src/business/BusinessSplit/default.ts
860
+ var BusinessSplitDefaultContent = {
861
+ name: "Acme Studio",
862
+ tagline: "Strategy, design, and engineering \u2014 end to end.",
863
+ description: "We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.",
864
+ image: { src: "https://placehold.co/600x480", alt: "Studio workspace" },
865
+ contact: { email: "hello@example.com", address: "12 Innovation Lane, Tech City" }
866
+ };
867
+ var ServiceSchema = zod.z.object({
868
+ title: zod.z.string(),
869
+ description: zod.z.string(),
870
+ icon: zod.z.string().optional()
871
+ }).strict();
872
+ var BusinessGridContentSchema = zod.z.object({
873
+ heading: zod.z.string(),
874
+ services: zod.z.array(ServiceSchema).min(1)
875
+ }).strict();
876
+ function BusinessGrid({ content, theme }) {
877
+ BusinessGridContentSchema.parse(content);
878
+ const { heading, services } = content;
879
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-5xl mx-auto gap-10"), children: [
880
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
881
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, gap: 6, children: services.map((service, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
882
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
883
+ service.icon && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", className: vui.cn("text-2xl"), "aria-hidden": "true", children: service.icon }),
884
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardTitle, { as: "h3", children: service.title })
885
+ ] }) }),
886
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: service.description }) })
887
+ ] }, i)) })
888
+ ] }) });
889
+ }
890
+
891
+ // src/business/BusinessGrid/default.ts
892
+ var BusinessGridDefaultContent = {
893
+ heading: "What we do",
894
+ services: [
895
+ { title: "Product strategy", description: "From market positioning to roadmap \u2014 we help teams move with clarity.", icon: "\u{1F5FA}\uFE0F" },
896
+ { title: "UX design", description: "Research-grounded design that reduces cognitive load and increases confidence.", icon: "\u270F\uFE0F" },
897
+ { title: "Engineering", description: "Full-stack delivery with a bias toward composable, testable architecture.", icon: "\u2699\uFE0F" },
898
+ { title: "Design systems", description: "A single source of truth for tokens, components, and documentation.", icon: "\u{1F3A8}" }
899
+ ]
900
+ };
901
+ var FeatureItemSchema = zod.z.object({
902
+ title: zod.z.string(),
903
+ description: zod.z.string(),
904
+ icon: zod.z.string().optional()
905
+ }).strict();
906
+ var FeaturesSplitContentSchema = zod.z.object({
907
+ heading: zod.z.string(),
908
+ description: zod.z.string().optional(),
909
+ features: zod.z.array(FeatureItemSchema).min(1)
910
+ }).strict();
911
+ function FeaturesSplit({ content, theme }) {
912
+ FeaturesSplitContentSchema.parse(content);
913
+ const { heading, description, features } = content;
914
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
915
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, className: vui.cn("sticky top-16"), children: [
916
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
917
+ description && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description })
918
+ ] }),
919
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 8, display: "flex", className: vui.cn("list-none flex-col"), children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 4, align: "start", children: [
920
+ feature.icon && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", className: vui.cn("text-xl flex-shrink-0 mt-0.5"), "aria-hidden": "true", children: feature.icon }),
921
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
922
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold"), children: feature.title }),
923
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: feature.description })
924
+ ] })
925
+ ] }) }, i)) })
926
+ ] }) });
927
+ }
928
+
929
+ // src/features/FeaturesSplit/default.ts
930
+ var FeaturesSplitDefaultContent = {
931
+ heading: "Everything you need",
932
+ description: "A complete toolkit for building composable, schema-validated interfaces.",
933
+ features: [
934
+ { title: "Schema validation", description: "Every block validates content at runtime. Bad data fails fast, before it reaches the DOM.", icon: "\u2713" },
935
+ { title: "Tree-shaking", description: "Per-category entry points keep bundles lean. Import only what the page uses.", icon: "\u26A1" },
936
+ { title: "Accessibility first", description: "Semantic HTML, ARIA landmarks, and proper heading hierarchy \u2014 no patching required.", icon: "\u267F" },
937
+ { title: "Theme overrides", description: "Remap CSS custom properties per block without touching global styles.", icon: "\u{1F3A8}" }
938
+ ]
939
+ };
940
+ var FeatureItemSchema2 = zod.z.object({
941
+ title: zod.z.string(),
942
+ description: zod.z.string(),
943
+ icon: zod.z.string().optional()
944
+ }).strict();
945
+ var FeaturesGridContentSchema = zod.z.object({
946
+ heading: zod.z.string(),
947
+ features: zod.z.array(FeatureItemSchema2).min(1)
948
+ }).strict();
949
+ function FeaturesGrid({ content, theme }) {
950
+ FeaturesGridContentSchema.parse(content);
951
+ const { heading, features } = content;
952
+ return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-5xl mx-auto gap-10"), children: [
953
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
954
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
955
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
956
+ feature.icon && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", className: vui.cn("text-xl"), "aria-hidden": "true", children: feature.icon }),
957
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardTitle, { as: "h3", children: feature.title })
958
+ ] }) }),
959
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: feature.description }) })
960
+ ] }, i)) })
961
+ ] }) });
962
+ }
963
+
964
+ // src/features/FeaturesGrid/default.ts
965
+ var FeaturesGridDefaultContent = {
966
+ heading: "Built-in capabilities",
967
+ features: [
968
+ { title: "Schema validation", description: "Content validated at runtime via Zod.", icon: "\u2713" },
969
+ { title: "Tree-shaking", description: "Per-category entry points, lean bundles.", icon: "\u26A1" },
970
+ { title: "Accessibility", description: "Semantic HTML and ARIA by default.", icon: "\u267F" },
971
+ { title: "Theme overrides", description: "CSS custom properties per block.", icon: "\u{1F3A8}" },
972
+ { title: "TypeScript", description: "All schemas export their inferred types.", icon: "\u{1F537}" },
973
+ { title: "Zero config", description: "Drop in. Pass content. Done.", icon: "\u25B6\uFE0F" }
974
+ ]
975
+ };
976
+
977
+ // src/registry.ts
978
+ var registry = {
979
+ "hero/split": { schema: HeroSplitContentSchema, default: HeroSplitDefaultContent, component: HeroSplit },
980
+ "hero/centered": { schema: HeroCenteredContentSchema, default: HeroCenteredDefaultContent, component: HeroCentered },
981
+ "cta/split": { schema: CtaSplitContentSchema, default: CtaSplitDefaultContent, component: CtaSplit },
982
+ "cta/centered": { schema: CtaCenteredContentSchema, default: CtaCenteredDefaultContent, component: CtaCentered },
983
+ "faq/split": { schema: FaqSplitContentSchema, default: FaqSplitDefaultContent, component: FaqSplit },
984
+ "faq/grid": { schema: FaqGridContentSchema, default: FaqGridDefaultContent, component: FaqGrid },
985
+ "footer/split": { schema: FooterSplitContentSchema, default: FooterSplitDefaultContent, component: FooterSplit },
986
+ "footer/grid": { schema: FooterGridContentSchema, default: FooterGridDefaultContent, component: FooterGrid },
987
+ "gallery/split": { schema: GallerySplitContentSchema, default: GallerySplitDefaultContent, component: GallerySplit },
988
+ "gallery/grid": { schema: GalleryGridContentSchema, default: GalleryGridDefaultContent, component: GalleryGrid },
989
+ "portfolio/split": { schema: PortfolioSplitContentSchema, default: PortfolioSplitDefaultContent, component: PortfolioSplit },
990
+ "portfolio/grid": { schema: PortfolioGridContentSchema, default: PortfolioGridDefaultContent, component: PortfolioGrid },
991
+ "post/split": { schema: PostSplitContentSchema, default: PostSplitDefaultContent, component: PostSplit },
992
+ "post/centered": { schema: PostCenteredContentSchema, default: PostCenteredDefaultContent, component: PostCentered },
993
+ "team/split": { schema: TeamSplitContentSchema, default: TeamSplitDefaultContent, component: TeamSplit },
994
+ "team/grid": { schema: TeamGridContentSchema, default: TeamGridDefaultContent, component: TeamGrid },
995
+ "testimonial/split": { schema: TestimonialSplitContentSchema, default: TestimonialSplitDefaultContent, component: TestimonialSplit },
996
+ "testimonial/grid": { schema: TestimonialGridContentSchema, default: TestimonialGridDefaultContent, component: TestimonialGrid },
997
+ "blog/split": { schema: BlogSplitContentSchema, default: BlogSplitDefaultContent, component: BlogSplit },
998
+ "blog/grid": { schema: BlogGridContentSchema, default: BlogGridDefaultContent, component: BlogGrid },
999
+ "business/split": { schema: BusinessSplitContentSchema, default: BusinessSplitDefaultContent, component: BusinessSplit },
1000
+ "business/grid": { schema: BusinessGridContentSchema, default: BusinessGridDefaultContent, component: BusinessGrid },
1001
+ "features/split": { schema: FeaturesSplitContentSchema, default: FeaturesSplitDefaultContent, component: FeaturesSplit },
1002
+ "features/grid": { schema: FeaturesGridContentSchema, default: FeaturesGridDefaultContent, component: FeaturesGrid }
1003
+ };
1004
+
1005
+ exports.BlogGrid = BlogGrid;
1006
+ exports.BlogGridContentSchema = BlogGridContentSchema;
1007
+ exports.BlogGridDefaultContent = BlogGridDefaultContent;
1008
+ exports.BlogSplit = BlogSplit;
1009
+ exports.BlogSplitContentSchema = BlogSplitContentSchema;
1010
+ exports.BlogSplitDefaultContent = BlogSplitDefaultContent;
1011
+ exports.BusinessGrid = BusinessGrid;
1012
+ exports.BusinessGridContentSchema = BusinessGridContentSchema;
1013
+ exports.BusinessGridDefaultContent = BusinessGridDefaultContent;
1014
+ exports.BusinessSplit = BusinessSplit;
1015
+ exports.BusinessSplitContentSchema = BusinessSplitContentSchema;
1016
+ exports.BusinessSplitDefaultContent = BusinessSplitDefaultContent;
1017
+ exports.CtaCentered = CtaCentered;
1018
+ exports.CtaCenteredContentSchema = CtaCenteredContentSchema;
1019
+ exports.CtaCenteredDefaultContent = CtaCenteredDefaultContent;
1020
+ exports.CtaSplit = CtaSplit;
1021
+ exports.CtaSplitContentSchema = CtaSplitContentSchema;
1022
+ exports.CtaSplitDefaultContent = CtaSplitDefaultContent;
1023
+ exports.FaqGrid = FaqGrid;
1024
+ exports.FaqGridContentSchema = FaqGridContentSchema;
1025
+ exports.FaqGridDefaultContent = FaqGridDefaultContent;
1026
+ exports.FaqSplit = FaqSplit;
1027
+ exports.FaqSplitContentSchema = FaqSplitContentSchema;
1028
+ exports.FaqSplitDefaultContent = FaqSplitDefaultContent;
1029
+ exports.FeaturesGrid = FeaturesGrid;
1030
+ exports.FeaturesGridContentSchema = FeaturesGridContentSchema;
1031
+ exports.FeaturesGridDefaultContent = FeaturesGridDefaultContent;
1032
+ exports.FeaturesSplit = FeaturesSplit;
1033
+ exports.FeaturesSplitContentSchema = FeaturesSplitContentSchema;
1034
+ exports.FeaturesSplitDefaultContent = FeaturesSplitDefaultContent;
1035
+ exports.FooterGrid = FooterGrid;
1036
+ exports.FooterGridContentSchema = FooterGridContentSchema;
1037
+ exports.FooterGridDefaultContent = FooterGridDefaultContent;
1038
+ exports.FooterSplit = FooterSplit;
1039
+ exports.FooterSplitContentSchema = FooterSplitContentSchema;
1040
+ exports.FooterSplitDefaultContent = FooterSplitDefaultContent;
1041
+ exports.GalleryGrid = GalleryGrid;
1042
+ exports.GalleryGridContentSchema = GalleryGridContentSchema;
1043
+ exports.GalleryGridDefaultContent = GalleryGridDefaultContent;
1044
+ exports.GallerySplit = GallerySplit;
1045
+ exports.GallerySplitContentSchema = GallerySplitContentSchema;
1046
+ exports.GallerySplitDefaultContent = GallerySplitDefaultContent;
1047
+ exports.HeroCentered = HeroCentered;
1048
+ exports.HeroCenteredContentSchema = HeroCenteredContentSchema;
1049
+ exports.HeroCenteredDefaultContent = HeroCenteredDefaultContent;
1050
+ exports.HeroSplit = HeroSplit;
1051
+ exports.HeroSplitContentSchema = HeroSplitContentSchema;
1052
+ exports.HeroSplitDefaultContent = HeroSplitDefaultContent;
1053
+ exports.PortfolioGrid = PortfolioGrid;
1054
+ exports.PortfolioGridContentSchema = PortfolioGridContentSchema;
1055
+ exports.PortfolioGridDefaultContent = PortfolioGridDefaultContent;
1056
+ exports.PortfolioSplit = PortfolioSplit;
1057
+ exports.PortfolioSplitContentSchema = PortfolioSplitContentSchema;
1058
+ exports.PortfolioSplitDefaultContent = PortfolioSplitDefaultContent;
1059
+ exports.PostCentered = PostCentered;
1060
+ exports.PostCenteredContentSchema = PostCenteredContentSchema;
1061
+ exports.PostCenteredDefaultContent = PostCenteredDefaultContent;
1062
+ exports.PostSplit = PostSplit;
1063
+ exports.PostSplitContentSchema = PostSplitContentSchema;
1064
+ exports.PostSplitDefaultContent = PostSplitDefaultContent;
1065
+ exports.TeamGrid = TeamGrid;
1066
+ exports.TeamGridContentSchema = TeamGridContentSchema;
1067
+ exports.TeamGridDefaultContent = TeamGridDefaultContent;
1068
+ exports.TeamSplit = TeamSplit;
1069
+ exports.TeamSplitContentSchema = TeamSplitContentSchema;
1070
+ exports.TeamSplitDefaultContent = TeamSplitDefaultContent;
1071
+ exports.TestimonialGrid = TestimonialGrid;
1072
+ exports.TestimonialGridContentSchema = TestimonialGridContentSchema;
1073
+ exports.TestimonialGridDefaultContent = TestimonialGridDefaultContent;
1074
+ exports.TestimonialSplit = TestimonialSplit;
1075
+ exports.TestimonialSplitContentSchema = TestimonialSplitContentSchema;
1076
+ exports.TestimonialSplitDefaultContent = TestimonialSplitDefaultContent;
1077
+ exports.registry = registry;
1078
+ //# sourceMappingURL=index.cjs.map
1079
+ //# sourceMappingURL=index.cjs.map