@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
@@ -0,0 +1,71 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { a as BlockProps } from '../types-n6w6cZmP.cjs';
3
+ import { z } from 'zod';
4
+ import 'react';
5
+
6
+ declare const FaqSplitContentSchema: z.ZodObject<{
7
+ heading: z.ZodString;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ items: z.ZodArray<z.ZodObject<{
10
+ question: z.ZodString;
11
+ answer: z.ZodString;
12
+ }, "strict", z.ZodTypeAny, {
13
+ question: string;
14
+ answer: string;
15
+ }, {
16
+ question: string;
17
+ answer: string;
18
+ }>, "many">;
19
+ }, "strict", z.ZodTypeAny, {
20
+ heading: string;
21
+ items: {
22
+ question: string;
23
+ answer: string;
24
+ }[];
25
+ description?: string | undefined;
26
+ }, {
27
+ heading: string;
28
+ items: {
29
+ question: string;
30
+ answer: string;
31
+ }[];
32
+ description?: string | undefined;
33
+ }>;
34
+ type FaqSplitContent = z.infer<typeof FaqSplitContentSchema>;
35
+
36
+ declare function FaqSplit({ content, theme }: BlockProps<FaqSplitContent>): react_jsx_runtime.JSX.Element;
37
+
38
+ declare const FaqSplitDefaultContent: FaqSplitContent;
39
+
40
+ declare const FaqGridContentSchema: z.ZodObject<{
41
+ heading: z.ZodString;
42
+ items: z.ZodArray<z.ZodObject<{
43
+ question: z.ZodString;
44
+ answer: z.ZodString;
45
+ }, "strict", z.ZodTypeAny, {
46
+ question: string;
47
+ answer: string;
48
+ }, {
49
+ question: string;
50
+ answer: string;
51
+ }>, "many">;
52
+ }, "strict", z.ZodTypeAny, {
53
+ heading: string;
54
+ items: {
55
+ question: string;
56
+ answer: string;
57
+ }[];
58
+ }, {
59
+ heading: string;
60
+ items: {
61
+ question: string;
62
+ answer: string;
63
+ }[];
64
+ }>;
65
+ type FaqGridContent = z.infer<typeof FaqGridContentSchema>;
66
+
67
+ declare function FaqGrid({ content, theme }: BlockProps<FaqGridContent>): react_jsx_runtime.JSX.Element;
68
+
69
+ declare const FaqGridDefaultContent: FaqGridContent;
70
+
71
+ export { FaqGrid, type FaqGridContent, FaqGridContentSchema, FaqGridDefaultContent, FaqSplit, type FaqSplitContent, FaqSplitContentSchema, FaqSplitDefaultContent };
@@ -0,0 +1,71 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { a as BlockProps } from '../types-n6w6cZmP.js';
3
+ import { z } from 'zod';
4
+ import 'react';
5
+
6
+ declare const FaqSplitContentSchema: z.ZodObject<{
7
+ heading: z.ZodString;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ items: z.ZodArray<z.ZodObject<{
10
+ question: z.ZodString;
11
+ answer: z.ZodString;
12
+ }, "strict", z.ZodTypeAny, {
13
+ question: string;
14
+ answer: string;
15
+ }, {
16
+ question: string;
17
+ answer: string;
18
+ }>, "many">;
19
+ }, "strict", z.ZodTypeAny, {
20
+ heading: string;
21
+ items: {
22
+ question: string;
23
+ answer: string;
24
+ }[];
25
+ description?: string | undefined;
26
+ }, {
27
+ heading: string;
28
+ items: {
29
+ question: string;
30
+ answer: string;
31
+ }[];
32
+ description?: string | undefined;
33
+ }>;
34
+ type FaqSplitContent = z.infer<typeof FaqSplitContentSchema>;
35
+
36
+ declare function FaqSplit({ content, theme }: BlockProps<FaqSplitContent>): react_jsx_runtime.JSX.Element;
37
+
38
+ declare const FaqSplitDefaultContent: FaqSplitContent;
39
+
40
+ declare const FaqGridContentSchema: z.ZodObject<{
41
+ heading: z.ZodString;
42
+ items: z.ZodArray<z.ZodObject<{
43
+ question: z.ZodString;
44
+ answer: z.ZodString;
45
+ }, "strict", z.ZodTypeAny, {
46
+ question: string;
47
+ answer: string;
48
+ }, {
49
+ question: string;
50
+ answer: string;
51
+ }>, "many">;
52
+ }, "strict", z.ZodTypeAny, {
53
+ heading: string;
54
+ items: {
55
+ question: string;
56
+ answer: string;
57
+ }[];
58
+ }, {
59
+ heading: string;
60
+ items: {
61
+ question: string;
62
+ answer: string;
63
+ }[];
64
+ }>;
65
+ type FaqGridContent = z.infer<typeof FaqGridContentSchema>;
66
+
67
+ declare function FaqGrid({ content, theme }: BlockProps<FaqGridContent>): react_jsx_runtime.JSX.Element;
68
+
69
+ declare const FaqGridDefaultContent: FaqGridContent;
70
+
71
+ export { FaqGrid, type FaqGridContent, FaqGridContentSchema, FaqGridDefaultContent, FaqSplit, type FaqSplitContent, FaqSplitContentSchema, FaqSplitDefaultContent };
@@ -0,0 +1,86 @@
1
+ import { Box, Stack, Grid, Inline, cn, Card, CardHeader, CardTitle, CardContent } from '@booga/vui';
2
+ import { dsl } from '@booga/vdsl';
3
+ import { z } from 'zod';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ // src/faq/FaqSplit/index.tsx
7
+ var DBox = dsl(Box);
8
+ var DStack = dsl(Stack);
9
+ var DGrid = dsl(Grid);
10
+ dsl(Inline);
11
+
12
+ // src/theme.ts
13
+ function themeStyle(theme) {
14
+ if (!theme) return void 0;
15
+ return Object.fromEntries(
16
+ Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])
17
+ );
18
+ }
19
+ var FaqItemSchema = z.object({
20
+ question: z.string(),
21
+ answer: z.string()
22
+ }).strict();
23
+ var FaqSplitContentSchema = z.object({
24
+ heading: z.string(),
25
+ description: z.string().optional(),
26
+ items: z.array(FaqItemSchema).min(1)
27
+ }).strict();
28
+ function FaqSplit({ content, theme }) {
29
+ FaqSplitContentSchema.parse(content);
30
+ const { heading, description, items } = content;
31
+ return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: cn("max-w-6xl mx-auto"), children: [
32
+ /* @__PURE__ */ jsxs(DStack, { gap: 4, className: cn("sticky top-16"), children: [
33
+ /* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight"), children: heading }),
34
+ description && /* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", children: description })
35
+ ] }),
36
+ /* @__PURE__ */ jsx(DBox, { as: "ul", m: 0, p: 0, gap: 3, display: "flex", className: cn("list-none flex-col"), children: items.map((item, i) => /* @__PURE__ */ jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxs(DBox, { as: "details", p: 4, className: cn("border rounded-lg"), children: [
37
+ /* @__PURE__ */ jsx(DBox, { as: "summary", className: cn("font-semibold cursor-pointer list-none"), children: item.question }),
38
+ /* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", mt: 3, children: item.answer })
39
+ ] }) }, i)) })
40
+ ] }) });
41
+ }
42
+
43
+ // src/faq/FaqSplit/default.ts
44
+ var FaqSplitDefaultContent = {
45
+ heading: "Frequently asked questions",
46
+ description: "Everything you need to know about the product.",
47
+ items: [
48
+ { question: "How does it work?", answer: "Drop a block onto your page, pass typed content, and render. No manual wiring." },
49
+ { question: "Can I customise the styles?", answer: "Yes. Pass a ThemeOverride to any block to remap CSS custom properties." },
50
+ { question: "Does it require a specific framework?", answer: "React 18+ and Tailwind CSS. No other runtime dependencies." }
51
+ ]
52
+ };
53
+ var FaqItemSchema2 = z.object({
54
+ question: z.string(),
55
+ answer: z.string()
56
+ }).strict();
57
+ var FaqGridContentSchema = z.object({
58
+ heading: z.string(),
59
+ items: z.array(FaqItemSchema2).min(1)
60
+ }).strict();
61
+ function FaqGrid({ content, theme }) {
62
+ FaqGridContentSchema.parse(content);
63
+ const { heading, items } = content;
64
+ return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DStack, { px: 6, py: 16, className: cn("max-w-5xl mx-auto gap-10"), children: [
65
+ /* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
66
+ /* @__PURE__ */ jsx(DGrid, { columns: 2, gap: 4, children: items.map((item, i) => /* @__PURE__ */ jsxs(Card, { children: [
67
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { as: "h3", children: item.question }) }),
68
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", children: item.answer }) })
69
+ ] }, i)) })
70
+ ] }) });
71
+ }
72
+
73
+ // src/faq/FaqGrid/default.ts
74
+ var FaqGridDefaultContent = {
75
+ heading: "Common questions",
76
+ items: [
77
+ { question: "How does it work?", answer: "Drop a block onto your page, pass typed content, and render." },
78
+ { question: "Can I customise styles?", answer: "Yes. ThemeOverride maps to CSS custom properties." },
79
+ { question: "Which frameworks are supported?", answer: "React 18+ with Tailwind CSS." },
80
+ { question: "Is TypeScript required?", answer: "Strongly recommended. All content schemas export their types." }
81
+ ]
82
+ };
83
+
84
+ export { FaqGrid, FaqGridContentSchema, FaqGridDefaultContent, FaqSplit, FaqSplitContentSchema, FaqSplitDefaultContent };
85
+ //# sourceMappingURL=index.js.map
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/faq/FaqSplit/schema.ts","../../src/faq/FaqSplit/index.tsx","../../src/faq/FaqSplit/default.ts","../../src/faq/FaqGrid/schema.ts","../../src/faq/FaqGrid/index.tsx","../../src/faq/FaqGrid/default.ts"],"names":["FaqItemSchema","z","jsx","jsxs","cn"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst FaqItemSchema = z.object({\n question: z.string(),\n answer: z.string(),\n}).strict();\n\nexport const FaqSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(FaqItemSchema).min(1),\n}).strict();\n\nexport type FaqSplitContent = z.infer<typeof FaqSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { FaqSplitContentSchema, type FaqSplitContent } from \"./schema\";\n\nexport function FaqSplit({ content, theme }: BlockProps<FaqSplitContent>) {\n FaqSplitContentSchema.parse(content);\n const { heading, description, items } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"start\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={4} className={cn(\"sticky top-16\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n {description && (\n <DBox as=\"p\" color=\"muted\">\n {description}\n </DBox>\n )}\n </DStack>\n <DBox as=\"ul\" m={0} p={0} gap={3} display=\"flex\" className={cn(\"list-none flex-col\")}>\n {items.map((item, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"details\" p={4} className={cn(\"border rounded-lg\")}>\n <DBox as=\"summary\" className={cn(\"font-semibold cursor-pointer list-none\")}>\n {item.question}\n </DBox>\n <DBox as=\"p\" color=\"muted\" mt={3}>\n {item.answer}\n </DBox>\n </DBox>\n </DBox>\n ))}\n </DBox>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type FaqSplitContent } from \"./schema\";\n\nexport const FaqSplitDefaultContent: FaqSplitContent = {\n heading: \"Frequently asked questions\",\n description: \"Everything you need to know about the product.\",\n items: [\n { question: \"How does it work?\", answer: \"Drop a block onto your page, pass typed content, and render. No manual wiring.\" },\n { question: \"Can I customise the styles?\", answer: \"Yes. Pass a ThemeOverride to any block to remap CSS custom properties.\" },\n { question: \"Does it require a specific framework?\", answer: \"React 18+ and Tailwind CSS. No other runtime dependencies.\" },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst FaqItemSchema = z.object({\n question: z.string(),\n answer: z.string(),\n}).strict();\n\nexport const FaqGridContentSchema = z.object({\n heading: z.string(),\n items: z.array(FaqItemSchema).min(1),\n}).strict();\n\nexport type FaqGridContent = z.infer<typeof FaqGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Card, CardContent, CardHeader, CardTitle, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { FaqGridContentSchema, type FaqGridContent } from \"./schema\";\n\nexport function FaqGrid({ content, theme }: BlockProps<FaqGridContent>) {\n FaqGridContentSchema.parse(content);\n const { heading, items } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-5xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>\n {heading}\n </DBox>\n <DGrid columns={2} gap={4}>\n {items.map((item, i) => (\n <Card key={i}>\n <CardHeader>\n <CardTitle as=\"h3\">{item.question}</CardTitle>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\">\n {item.answer}\n </DBox>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type FaqGridContent } from \"./schema\";\n\nexport const FaqGridDefaultContent: FaqGridContent = {\n heading: \"Common questions\",\n items: [\n { question: \"How does it work?\", answer: \"Drop a block onto your page, pass typed content, and render.\" },\n { question: \"Can I customise styles?\", answer: \"Yes. ThemeOverride maps to CSS custom properties.\" },\n { question: \"Which frameworks are supported?\", answer: \"React 18+ with Tailwind CSS.\" },\n { question: \"Is TypeScript required?\", answer: \"Strongly recommended. All content schemas export their types.\" },\n ],\n};\n"]}
@@ -0,0 +1,104 @@
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/features/FeaturesSplit/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
+ var FeatureItemSchema = zod.z.object({
22
+ title: zod.z.string(),
23
+ description: zod.z.string(),
24
+ icon: zod.z.string().optional()
25
+ }).strict();
26
+ var FeaturesSplitContentSchema = zod.z.object({
27
+ heading: zod.z.string(),
28
+ description: zod.z.string().optional(),
29
+ features: zod.z.array(FeatureItemSchema).min(1)
30
+ }).strict();
31
+ function FeaturesSplit({ content, theme }) {
32
+ FeaturesSplitContentSchema.parse(content);
33
+ const { heading, description, features } = content;
34
+ 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: [
35
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, className: vui.cn("sticky top-16"), children: [
36
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
37
+ description && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description })
38
+ ] }),
39
+ /* @__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: [
40
+ 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 }),
41
+ /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
42
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold"), children: feature.title }),
43
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: feature.description })
44
+ ] })
45
+ ] }) }, i)) })
46
+ ] }) });
47
+ }
48
+
49
+ // src/features/FeaturesSplit/default.ts
50
+ var FeaturesSplitDefaultContent = {
51
+ heading: "Everything you need",
52
+ description: "A complete toolkit for building composable, schema-validated interfaces.",
53
+ features: [
54
+ { title: "Schema validation", description: "Every block validates content at runtime. Bad data fails fast, before it reaches the DOM.", icon: "\u2713" },
55
+ { title: "Tree-shaking", description: "Per-category entry points keep bundles lean. Import only what the page uses.", icon: "\u26A1" },
56
+ { title: "Accessibility first", description: "Semantic HTML, ARIA landmarks, and proper heading hierarchy \u2014 no patching required.", icon: "\u267F" },
57
+ { title: "Theme overrides", description: "Remap CSS custom properties per block without touching global styles.", icon: "\u{1F3A8}" }
58
+ ]
59
+ };
60
+ var FeatureItemSchema2 = zod.z.object({
61
+ title: zod.z.string(),
62
+ description: zod.z.string(),
63
+ icon: zod.z.string().optional()
64
+ }).strict();
65
+ var FeaturesGridContentSchema = zod.z.object({
66
+ heading: zod.z.string(),
67
+ features: zod.z.array(FeatureItemSchema2).min(1)
68
+ }).strict();
69
+ function FeaturesGrid({ content, theme }) {
70
+ FeaturesGridContentSchema.parse(content);
71
+ const { heading, features } = content;
72
+ 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: [
73
+ /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
74
+ /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
75
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
76
+ feature.icon && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", className: vui.cn("text-xl"), "aria-hidden": "true", children: feature.icon }),
77
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardTitle, { as: "h3", children: feature.title })
78
+ ] }) }),
79
+ /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: feature.description }) })
80
+ ] }, i)) })
81
+ ] }) });
82
+ }
83
+
84
+ // src/features/FeaturesGrid/default.ts
85
+ var FeaturesGridDefaultContent = {
86
+ heading: "Built-in capabilities",
87
+ features: [
88
+ { title: "Schema validation", description: "Content validated at runtime via Zod.", icon: "\u2713" },
89
+ { title: "Tree-shaking", description: "Per-category entry points, lean bundles.", icon: "\u26A1" },
90
+ { title: "Accessibility", description: "Semantic HTML and ARIA by default.", icon: "\u267F" },
91
+ { title: "Theme overrides", description: "CSS custom properties per block.", icon: "\u{1F3A8}" },
92
+ { title: "TypeScript", description: "All schemas export their inferred types.", icon: "\u{1F537}" },
93
+ { title: "Zero config", description: "Drop in. Pass content. Done.", icon: "\u25B6\uFE0F" }
94
+ ]
95
+ };
96
+
97
+ exports.FeaturesGrid = FeaturesGrid;
98
+ exports.FeaturesGridContentSchema = FeaturesGridContentSchema;
99
+ exports.FeaturesGridDefaultContent = FeaturesGridDefaultContent;
100
+ exports.FeaturesSplit = FeaturesSplit;
101
+ exports.FeaturesSplitContentSchema = FeaturesSplitContentSchema;
102
+ exports.FeaturesSplitDefaultContent = FeaturesSplitDefaultContent;
103
+ //# sourceMappingURL=index.cjs.map
104
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/features/FeaturesSplit/schema.ts","../../src/features/FeaturesSplit/index.tsx","../../src/features/FeaturesSplit/default.ts","../../src/features/FeaturesGrid/schema.ts","../../src/features/FeaturesGrid/index.tsx","../../src/features/FeaturesGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","FeatureItemSchema","Card","CardHeader","CardTitle","CardContent"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst FeatureItemSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const FeaturesSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n features: z.array(FeatureItemSchema).min(1),\n}).strict();\n\nexport type FeaturesSplitContent = z.infer<typeof FeaturesSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { FeaturesSplitContentSchema, type FeaturesSplitContent } from \"./schema\";\n\nexport function FeaturesSplit({ content, theme }: BlockProps<FeaturesSplitContent>) {\n FeaturesSplitContentSchema.parse(content);\n const { heading, description, features } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"start\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={4} className={cn(\"sticky top-16\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n {description && (\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>{description}</DBox>\n )}\n </DStack>\n <DBox as=\"ul\" m={0} p={0} gap={8} display=\"flex\" className={cn(\"list-none flex-col\")}>\n {features.map((feature, i) => (\n <DBox as=\"li\" key={i}>\n <DInline gap={4} align=\"start\">\n {feature.icon && (\n <DBox as=\"span\" className={cn(\"text-xl flex-shrink-0 mt-0.5\")} aria-hidden=\"true\">\n {feature.icon}\n </DBox>\n )}\n <DStack gap={1}>\n <DBox as=\"h3\" className={cn(\"font-semibold\")}>{feature.title}</DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{feature.description}</DBox>\n </DStack>\n </DInline>\n </DBox>\n ))}\n </DBox>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type FeaturesSplitContent } from \"./schema\";\n\nexport const FeaturesSplitDefaultContent: FeaturesSplitContent = {\n heading: \"Everything you need\",\n description: \"A complete toolkit for building composable, schema-validated interfaces.\",\n features: [\n { title: \"Schema validation\", description: \"Every block validates content at runtime. Bad data fails fast, before it reaches the DOM.\", icon: \"✓\" },\n { title: \"Tree-shaking\", description: \"Per-category entry points keep bundles lean. Import only what the page uses.\", icon: \"⚡\" },\n { title: \"Accessibility first\", description: \"Semantic HTML, ARIA landmarks, and proper heading hierarchy — no patching required.\", icon: \"♿\" },\n { title: \"Theme overrides\", description: \"Remap CSS custom properties per block without touching global styles.\", icon: \"🎨\" },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst FeatureItemSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const FeaturesGridContentSchema = z.object({\n heading: z.string(),\n features: z.array(FeatureItemSchema).min(1),\n}).strict();\n\nexport type FeaturesGridContent = z.infer<typeof FeaturesGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Card, CardContent, CardHeader, CardTitle, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { FeaturesGridContentSchema, type FeaturesGridContent } from \"./schema\";\n\nexport function FeaturesGrid({ content, theme }: BlockProps<FeaturesGridContent>) {\n FeaturesGridContentSchema.parse(content);\n const { heading, features } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-5xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={3} gap={6}>\n {features.map((feature, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {feature.icon && (\n <DBox as=\"span\" className={cn(\"text-xl\")} aria-hidden=\"true\">{feature.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{feature.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{feature.description}</DBox>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type FeaturesGridContent } from \"./schema\";\n\nexport const FeaturesGridDefaultContent: FeaturesGridContent = {\n heading: \"Built-in capabilities\",\n features: [\n { title: \"Schema validation\", description: \"Content validated at runtime via Zod.\", icon: \"✓\" },\n { title: \"Tree-shaking\", description: \"Per-category entry points, lean bundles.\", icon: \"⚡\" },\n { title: \"Accessibility\", description: \"Semantic HTML and ARIA by default.\", icon: \"♿\" },\n { title: \"Theme overrides\", description: \"CSS custom properties per block.\", icon: \"🎨\" },\n { title: \"TypeScript\", description: \"All schemas export their inferred types.\", icon: \"🔷\" },\n { title: \"Zero config\", description: \"Drop in. Pass content. Done.\", icon: \"▶️\" },\n ],\n};\n"]}
@@ -0,0 +1,81 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { a as BlockProps } from '../types-n6w6cZmP.cjs';
3
+ import { z } from 'zod';
4
+ import 'react';
5
+
6
+ declare const FeaturesSplitContentSchema: z.ZodObject<{
7
+ heading: z.ZodString;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ features: z.ZodArray<z.ZodObject<{
10
+ title: z.ZodString;
11
+ description: z.ZodString;
12
+ icon: z.ZodOptional<z.ZodString>;
13
+ }, "strict", z.ZodTypeAny, {
14
+ title: string;
15
+ description: string;
16
+ icon?: string | undefined;
17
+ }, {
18
+ title: string;
19
+ description: string;
20
+ icon?: string | undefined;
21
+ }>, "many">;
22
+ }, "strict", z.ZodTypeAny, {
23
+ heading: string;
24
+ features: {
25
+ title: string;
26
+ description: string;
27
+ icon?: string | undefined;
28
+ }[];
29
+ description?: string | undefined;
30
+ }, {
31
+ heading: string;
32
+ features: {
33
+ title: string;
34
+ description: string;
35
+ icon?: string | undefined;
36
+ }[];
37
+ description?: string | undefined;
38
+ }>;
39
+ type FeaturesSplitContent = z.infer<typeof FeaturesSplitContentSchema>;
40
+
41
+ declare function FeaturesSplit({ content, theme }: BlockProps<FeaturesSplitContent>): react_jsx_runtime.JSX.Element;
42
+
43
+ declare const FeaturesSplitDefaultContent: FeaturesSplitContent;
44
+
45
+ declare const FeaturesGridContentSchema: z.ZodObject<{
46
+ heading: z.ZodString;
47
+ features: z.ZodArray<z.ZodObject<{
48
+ title: z.ZodString;
49
+ description: z.ZodString;
50
+ icon: z.ZodOptional<z.ZodString>;
51
+ }, "strict", z.ZodTypeAny, {
52
+ title: string;
53
+ description: string;
54
+ icon?: string | undefined;
55
+ }, {
56
+ title: string;
57
+ description: string;
58
+ icon?: string | undefined;
59
+ }>, "many">;
60
+ }, "strict", z.ZodTypeAny, {
61
+ heading: string;
62
+ features: {
63
+ title: string;
64
+ description: string;
65
+ icon?: string | undefined;
66
+ }[];
67
+ }, {
68
+ heading: string;
69
+ features: {
70
+ title: string;
71
+ description: string;
72
+ icon?: string | undefined;
73
+ }[];
74
+ }>;
75
+ type FeaturesGridContent = z.infer<typeof FeaturesGridContentSchema>;
76
+
77
+ declare function FeaturesGrid({ content, theme }: BlockProps<FeaturesGridContent>): react_jsx_runtime.JSX.Element;
78
+
79
+ declare const FeaturesGridDefaultContent: FeaturesGridContent;
80
+
81
+ export { FeaturesGrid, type FeaturesGridContent, FeaturesGridContentSchema, FeaturesGridDefaultContent, FeaturesSplit, type FeaturesSplitContent, FeaturesSplitContentSchema, FeaturesSplitDefaultContent };
@@ -0,0 +1,81 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { a as BlockProps } from '../types-n6w6cZmP.js';
3
+ import { z } from 'zod';
4
+ import 'react';
5
+
6
+ declare const FeaturesSplitContentSchema: z.ZodObject<{
7
+ heading: z.ZodString;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ features: z.ZodArray<z.ZodObject<{
10
+ title: z.ZodString;
11
+ description: z.ZodString;
12
+ icon: z.ZodOptional<z.ZodString>;
13
+ }, "strict", z.ZodTypeAny, {
14
+ title: string;
15
+ description: string;
16
+ icon?: string | undefined;
17
+ }, {
18
+ title: string;
19
+ description: string;
20
+ icon?: string | undefined;
21
+ }>, "many">;
22
+ }, "strict", z.ZodTypeAny, {
23
+ heading: string;
24
+ features: {
25
+ title: string;
26
+ description: string;
27
+ icon?: string | undefined;
28
+ }[];
29
+ description?: string | undefined;
30
+ }, {
31
+ heading: string;
32
+ features: {
33
+ title: string;
34
+ description: string;
35
+ icon?: string | undefined;
36
+ }[];
37
+ description?: string | undefined;
38
+ }>;
39
+ type FeaturesSplitContent = z.infer<typeof FeaturesSplitContentSchema>;
40
+
41
+ declare function FeaturesSplit({ content, theme }: BlockProps<FeaturesSplitContent>): react_jsx_runtime.JSX.Element;
42
+
43
+ declare const FeaturesSplitDefaultContent: FeaturesSplitContent;
44
+
45
+ declare const FeaturesGridContentSchema: z.ZodObject<{
46
+ heading: z.ZodString;
47
+ features: z.ZodArray<z.ZodObject<{
48
+ title: z.ZodString;
49
+ description: z.ZodString;
50
+ icon: z.ZodOptional<z.ZodString>;
51
+ }, "strict", z.ZodTypeAny, {
52
+ title: string;
53
+ description: string;
54
+ icon?: string | undefined;
55
+ }, {
56
+ title: string;
57
+ description: string;
58
+ icon?: string | undefined;
59
+ }>, "many">;
60
+ }, "strict", z.ZodTypeAny, {
61
+ heading: string;
62
+ features: {
63
+ title: string;
64
+ description: string;
65
+ icon?: string | undefined;
66
+ }[];
67
+ }, {
68
+ heading: string;
69
+ features: {
70
+ title: string;
71
+ description: string;
72
+ icon?: string | undefined;
73
+ }[];
74
+ }>;
75
+ type FeaturesGridContent = z.infer<typeof FeaturesGridContentSchema>;
76
+
77
+ declare function FeaturesGrid({ content, theme }: BlockProps<FeaturesGridContent>): react_jsx_runtime.JSX.Element;
78
+
79
+ declare const FeaturesGridDefaultContent: FeaturesGridContent;
80
+
81
+ export { FeaturesGrid, type FeaturesGridContent, FeaturesGridContentSchema, FeaturesGridDefaultContent, FeaturesSplit, type FeaturesSplitContent, FeaturesSplitContentSchema, FeaturesSplitDefaultContent };
@@ -0,0 +1,97 @@
1
+ import { Box, Stack, Grid, Inline, cn, Card, CardHeader, CardTitle, CardContent } from '@booga/vui';
2
+ import { dsl } from '@booga/vdsl';
3
+ import { z } from 'zod';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ // src/features/FeaturesSplit/index.tsx
7
+ var DBox = dsl(Box);
8
+ var DStack = dsl(Stack);
9
+ var DGrid = dsl(Grid);
10
+ var DInline = dsl(Inline);
11
+
12
+ // src/theme.ts
13
+ function themeStyle(theme) {
14
+ if (!theme) return void 0;
15
+ return Object.fromEntries(
16
+ Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])
17
+ );
18
+ }
19
+ var FeatureItemSchema = z.object({
20
+ title: z.string(),
21
+ description: z.string(),
22
+ icon: z.string().optional()
23
+ }).strict();
24
+ var FeaturesSplitContentSchema = z.object({
25
+ heading: z.string(),
26
+ description: z.string().optional(),
27
+ features: z.array(FeatureItemSchema).min(1)
28
+ }).strict();
29
+ function FeaturesSplit({ content, theme }) {
30
+ FeaturesSplitContentSchema.parse(content);
31
+ const { heading, description, features } = content;
32
+ return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: cn("max-w-6xl mx-auto"), children: [
33
+ /* @__PURE__ */ jsxs(DStack, { gap: 4, className: cn("sticky top-16"), children: [
34
+ /* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight"), children: heading }),
35
+ description && /* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-lg"), children: description })
36
+ ] }),
37
+ /* @__PURE__ */ jsx(DBox, { as: "ul", m: 0, p: 0, gap: 8, display: "flex", className: cn("list-none flex-col"), children: features.map((feature, i) => /* @__PURE__ */ jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxs(DInline, { gap: 4, align: "start", children: [
38
+ feature.icon && /* @__PURE__ */ jsx(DBox, { as: "span", className: cn("text-xl flex-shrink-0 mt-0.5"), "aria-hidden": "true", children: feature.icon }),
39
+ /* @__PURE__ */ jsxs(DStack, { gap: 1, children: [
40
+ /* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("font-semibold"), children: feature.title }),
41
+ /* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-sm"), children: feature.description })
42
+ ] })
43
+ ] }) }, i)) })
44
+ ] }) });
45
+ }
46
+
47
+ // src/features/FeaturesSplit/default.ts
48
+ var FeaturesSplitDefaultContent = {
49
+ heading: "Everything you need",
50
+ description: "A complete toolkit for building composable, schema-validated interfaces.",
51
+ features: [
52
+ { title: "Schema validation", description: "Every block validates content at runtime. Bad data fails fast, before it reaches the DOM.", icon: "\u2713" },
53
+ { title: "Tree-shaking", description: "Per-category entry points keep bundles lean. Import only what the page uses.", icon: "\u26A1" },
54
+ { title: "Accessibility first", description: "Semantic HTML, ARIA landmarks, and proper heading hierarchy \u2014 no patching required.", icon: "\u267F" },
55
+ { title: "Theme overrides", description: "Remap CSS custom properties per block without touching global styles.", icon: "\u{1F3A8}" }
56
+ ]
57
+ };
58
+ var FeatureItemSchema2 = z.object({
59
+ title: z.string(),
60
+ description: z.string(),
61
+ icon: z.string().optional()
62
+ }).strict();
63
+ var FeaturesGridContentSchema = z.object({
64
+ heading: z.string(),
65
+ features: z.array(FeatureItemSchema2).min(1)
66
+ }).strict();
67
+ function FeaturesGrid({ content, theme }) {
68
+ FeaturesGridContentSchema.parse(content);
69
+ const { heading, features } = content;
70
+ return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DStack, { px: 6, py: 16, className: cn("max-w-5xl mx-auto gap-10"), children: [
71
+ /* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
72
+ /* @__PURE__ */ jsx(DGrid, { columns: 3, gap: 6, children: features.map((feature, i) => /* @__PURE__ */ jsxs(Card, { children: [
73
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(DStack, { gap: 2, children: [
74
+ feature.icon && /* @__PURE__ */ jsx(DBox, { as: "span", className: cn("text-xl"), "aria-hidden": "true", children: feature.icon }),
75
+ /* @__PURE__ */ jsx(CardTitle, { as: "h3", children: feature.title })
76
+ ] }) }),
77
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-sm"), children: feature.description }) })
78
+ ] }, i)) })
79
+ ] }) });
80
+ }
81
+
82
+ // src/features/FeaturesGrid/default.ts
83
+ var FeaturesGridDefaultContent = {
84
+ heading: "Built-in capabilities",
85
+ features: [
86
+ { title: "Schema validation", description: "Content validated at runtime via Zod.", icon: "\u2713" },
87
+ { title: "Tree-shaking", description: "Per-category entry points, lean bundles.", icon: "\u26A1" },
88
+ { title: "Accessibility", description: "Semantic HTML and ARIA by default.", icon: "\u267F" },
89
+ { title: "Theme overrides", description: "CSS custom properties per block.", icon: "\u{1F3A8}" },
90
+ { title: "TypeScript", description: "All schemas export their inferred types.", icon: "\u{1F537}" },
91
+ { title: "Zero config", description: "Drop in. Pass content. Done.", icon: "\u25B6\uFE0F" }
92
+ ]
93
+ };
94
+
95
+ export { FeaturesGrid, FeaturesGridContentSchema, FeaturesGridDefaultContent, FeaturesSplit, FeaturesSplitContentSchema, FeaturesSplitDefaultContent };
96
+ //# sourceMappingURL=index.js.map
97
+ //# sourceMappingURL=index.js.map