@booga/vblocks 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/business/index.cjs +1 -1
- package/dist/business/index.cjs.map +1 -1
- package/dist/business/index.js +1 -1
- package/dist/business/index.js.map +1 -1
- package/dist/faq/index.cjs +1 -1
- package/dist/faq/index.cjs.map +1 -1
- package/dist/faq/index.js +1 -1
- package/dist/faq/index.js.map +1 -1
- package/dist/features/index.cjs +1 -1
- package/dist/features/index.cjs.map +1 -1
- package/dist/features/index.js +1 -1
- package/dist/features/index.js.map +1 -1
- package/dist/index.cjs +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -0
- package/dist/team/index.cjs +1 -1
- package/dist/team/index.cjs.map +1 -1
- package/dist/team/index.js +1 -1
- package/dist/team/index.js.map +1 -1
- package/dist/testimonial/index.cjs +2 -2
- package/dist/testimonial/index.cjs.map +1 -1
- package/dist/testimonial/index.js +2 -2
- package/dist/testimonial/index.js.map +1 -1
- package/package.json +9 -5
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.1] - 2026-05-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Grid/Split block section containers used inconsistent max-widths (`max-w-5xl` on 6 blocks, `max-w-6xl` on the rest), so a page stacking different blocks showed misaligned content columns. All full-width Grid/Split blocks now share `max-w-6xl`. (Centered/Post blocks keep their intentionally narrower measure.)
|
|
13
|
+
|
|
14
|
+
## [0.3.0] - 2026-05-18
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Precompiled stylesheet at `@booga/vblocks/styles.css` — zero-config adoption. A consumer with no Tailwind pipeline imports this one file and the blocks render styled; no preset, no content globs, no Tailwind build. It covers the blocks' own classes and the vUi classes they render through. Consumers running their own Tailwind should keep using `@booga/vtheme/preset`.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- `@booga/vui` dependency raised to `^0.3.0`.
|
|
23
|
+
|
|
8
24
|
## [0.2.0] - 2026-05-18
|
|
9
25
|
|
|
10
26
|
### Changed
|
package/dist/business/index.cjs
CHANGED
|
@@ -88,7 +88,7 @@ var BusinessGridContentSchema = zod.z.object({
|
|
|
88
88
|
function BusinessGrid({ content, theme }) {
|
|
89
89
|
BusinessGridContentSchema.parse(content);
|
|
90
90
|
const { heading, services } = content;
|
|
91
|
-
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-
|
|
91
|
+
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: [
|
|
92
92
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
93
93
|
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, gap: 6, children: services.map((service, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
94
94
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","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\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\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 { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\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 { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = 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={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.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 BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","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\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\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 { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\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 { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.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 BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
package/dist/business/index.js
CHANGED
|
@@ -86,7 +86,7 @@ var BusinessGridContentSchema = z.object({
|
|
|
86
86
|
function BusinessGrid({ content, theme }) {
|
|
87
87
|
BusinessGridContentSchema.parse(content);
|
|
88
88
|
const { heading, services } = content;
|
|
89
|
-
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DStack, { px: 6, py: 16, className: cn("max-w-
|
|
89
|
+
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DStack, { px: 6, py: 16, className: cn("max-w-6xl mx-auto gap-10"), children: [
|
|
90
90
|
/* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
91
91
|
/* @__PURE__ */ jsx(DGrid, { columns: 2, gap: 6, children: services.map((service, i) => /* @__PURE__ */ jsxs(Card, { children: [
|
|
92
92
|
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(DStack, { gap: 2, children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["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\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\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 { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\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 { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = 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={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.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 BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["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\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\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 { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\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 { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.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 BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
package/dist/faq/index.cjs
CHANGED
|
@@ -63,7 +63,7 @@ var FaqGridContentSchema = zod.z.object({
|
|
|
63
63
|
function FaqGrid({ content, theme }) {
|
|
64
64
|
FaqGridContentSchema.parse(content);
|
|
65
65
|
const { heading, items } = content;
|
|
66
|
-
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-
|
|
66
|
+
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: [
|
|
67
67
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
68
68
|
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, gap: 4, children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
69
69
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardTitle, { as: "h3", children: item.question }) }),
|
package/dist/faq/index.cjs.map
CHANGED
|
@@ -1 +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":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","FaqItemSchema","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 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"]}
|
|
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":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","FaqItemSchema","Card","CardHeader","CardTitle","CardContent"],"mappings":";;;;;;;;AAQO,IAAM,IAAA,GAAUA,SAAIC,OAAgC,CAAA;AACpD,IAAM,MAAA,GAAUD,SAAIE,SAAgC,CAAA;AACpD,IAAM,KAAA,GAAUF,SAAIG,QAAgC,CAAA;AACpCH,SAAII,UAAgC;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNA,IAAM,aAAA,GAAgBC,MAAE,MAAA,CAAO;AAAA,EAC7B,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,MAAA,EAAQA,MAAE,MAAA;AACZ,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAOA,KAAA,CAAE,KAAA,CAAM,aAAa,CAAA,CAAE,IAAI,CAAC;AACrC,CAAC,EAAE,MAAA;ACLI,SAAS,QAAA,CAAS,EAAE,OAAA,EAAS,KAAA,EAAM,EAAgC;AACxE,EAAA,qBAAA,CAAsB,MAAM,OAAO,CAAA;AACnC,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,KAAA,EAAM,GAAI,OAAA;AACxC,EAAA,uBACEC,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EAAU,YAAA,EAAY,SAAS,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,EAC7D,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWC,MAAA,CAAG,mBAAmB,CAAA,EACxF,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,UAAO,GAAA,EAAK,CAAA,EAAG,SAAA,EAAWC,MAAA,CAAG,eAAe,CAAA,EAC3C,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,MAAA,CAAG,mCAAmC,GAC5D,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACC,+BACCF,cAAA,CAAC,IAAA,EAAA,EAAK,IAAG,GAAA,EAAI,KAAA,EAAM,SAChB,QAAA,EAAA,WAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACAA,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,GAAG,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAWE,MAAA,CAAG,oBAAoB,CAAA,EAChF,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBF,cAAA,CAAC,IAAA,EAAA,EAAK,IAAG,IAAA,EACP,QAAA,kBAAAC,eAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,CAAA,EAAG,CAAA,EAAG,SAAA,EAAWC,MAAA,CAAG,mBAAmB,CAAA,EACxD,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,IAAA,EAAA,EAAK,IAAG,SAAA,EAAU,SAAA,EAAWE,OAAG,wCAAwC,CAAA,EACtE,eAAK,QAAA,EACR,CAAA;AAAA,sBACAF,cAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,OAAM,OAAA,EAAQ,EAAA,EAAI,CAAA,EAC5B,QAAA,EAAA,IAAA,CAAK,MAAA,EACR;AAAA,KAAA,EACF,CAAA,EAAA,EARiB,CASnB,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACrCO,IAAM,sBAAA,GAA0C;AAAA,EACrD,OAAA,EAAS,4BAAA;AAAA,EACT,WAAA,EAAa,gDAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,EAAE,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,gFAAA,EAAiF;AAAA,IAC1H,EAAE,QAAA,EAAU,6BAAA,EAA+B,MAAA,EAAQ,wEAAA,EAAyE;AAAA,IAC5H,EAAE,QAAA,EAAU,uCAAA,EAAyC,MAAA,EAAQ,4DAAA;AAA6D;AAE9H;ACRA,IAAMG,cAAAA,GAAgBJ,MAAE,MAAA,CAAO;AAAA,EAC7B,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,MAAA,EAAQA,MAAE,MAAA;AACZ,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,OAAOA,KAAAA,CAAE,KAAA,CAAMI,cAAa,CAAA,CAAE,IAAI,CAAC;AACrC,CAAC,EAAE,MAAA;ACJI,SAAS,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAM,EAA+B;AACtE,EAAA,oBAAA,CAAqB,MAAM,OAAO,CAAA;AAClC,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,OAAA;AAC3B,EAAA,uBACEH,eAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,eAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,MAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,MAAAA,CAAG,+CAA+C,GACxE,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EACrB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBC,gBAACG,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,cAAAA,CAACK,kBACC,QAAA,kBAAAL,cAAAA,CAACM,iBAAU,EAAA,EAAG,IAAA,EAAM,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS,CAAA,EACpC,CAAA;AAAA,sBACAN,cAAAA,CAACO,eAAA,EAAA,EACC,QAAA,kBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAChB,QAAA,EAAA,IAAA,CAAK,MAAA,EACR,CAAA,EACF;AAAA,KAAA,EAAA,EARS,CASX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;AC9BO,IAAM,qBAAA,GAAwC;AAAA,EACnD,OAAA,EAAS,kBAAA;AAAA,EACT,KAAA,EAAO;AAAA,IACL,EAAE,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,8DAAA,EAA+D;AAAA,IACxG,EAAE,QAAA,EAAU,yBAAA,EAA2B,MAAA,EAAQ,mDAAA,EAAoD;AAAA,IACnG,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,8BAAA,EAA+B;AAAA,IACtF,EAAE,QAAA,EAAU,yBAAA,EAA2B,MAAA,EAAQ,+DAAA;AAAgE;AAEnH","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 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-6xl 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"]}
|
package/dist/faq/index.js
CHANGED
|
@@ -61,7 +61,7 @@ var FaqGridContentSchema = z.object({
|
|
|
61
61
|
function FaqGrid({ content, theme }) {
|
|
62
62
|
FaqGridContentSchema.parse(content);
|
|
63
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
65
65
|
/* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
66
66
|
/* @__PURE__ */ jsx(DGrid, { columns: 2, gap: 4, children: items.map((item, i) => /* @__PURE__ */ jsxs(Card, { children: [
|
|
67
67
|
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { as: "h3", children: item.question }) }),
|
package/dist/faq/index.js.map
CHANGED
|
@@ -1 +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"]}
|
|
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-6xl 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"]}
|
package/dist/features/index.cjs
CHANGED
|
@@ -69,7 +69,7 @@ var FeaturesGridContentSchema = zod.z.object({
|
|
|
69
69
|
function FeaturesGrid({ content, theme }) {
|
|
70
70
|
FeaturesGridContentSchema.parse(content);
|
|
71
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
73
73
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
74
74
|
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
75
75
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
@@ -1 +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"]}
|
|
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":";;;;;;;;AAQO,IAAM,IAAA,GAAUA,SAAIC,OAAgC,CAAA;AACpD,IAAM,MAAA,GAAUD,SAAIE,SAAgC,CAAA;AACpD,IAAM,KAAA,GAAUF,SAAIG,QAAgC,CAAA;AACpD,IAAM,OAAA,GAAUH,SAAII,UAAgC,CAAA;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNA,IAAM,iBAAA,GAAoBC,MAAE,MAAA,CAAO;AAAA,EACjC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,UAAUA,KAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA,CAAE,IAAI,CAAC;AAC5C,CAAC,EAAE,MAAA;ACNI,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAM,EAAqC;AAClF,EAAA,0BAAA,CAA2B,MAAM,OAAO,CAAA;AACxC,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,QAAA,EAAS,GAAI,OAAA;AAC3C,EAAA,uBACEC,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EAAU,YAAA,EAAY,SAAS,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,EAC7D,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWC,MAAA,CAAG,mBAAmB,CAAA,EACxF,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,UAAO,GAAA,EAAK,CAAA,EAAG,SAAA,EAAWC,MAAA,CAAG,eAAe,CAAA,EAC3C,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,MAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,MAC1E,WAAA,oBACCF,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWE,MAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAEtE,CAAA;AAAA,oBACAF,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAQ,MAAA,EAAO,WAAWE,MAAA,CAAG,oBAAoB,CAAA,EAChF,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACtBF,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EACP,QAAA,kBAAAC,eAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,OAAM,OAAA,EACpB,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,IAAA,oBACPD,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,SAAA,EAAWE,MAAA,CAAG,8BAA8B,CAAA,EAAG,aAAA,EAAY,MAAA,EACxE,QAAA,EAAA,OAAA,CAAQ,IAAA,EACX,CAAA;AAAA,sBAEFD,eAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACX,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,IAAA,EAAA,EAAK,IAAG,IAAA,EAAK,SAAA,EAAWE,OAAG,eAAe,CAAA,EAAI,kBAAQ,KAAA,EAAM,CAAA;AAAA,wBAC7DF,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWE,MAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,WAAA,EAAY;AAAA,OAAA,EAC5E;AAAA,KAAA,EACF,CAAA,EAAA,EAXiB,CAYnB,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACpCO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,0EAAA;AAAA,EACb,QAAA,EAAU;AAAA,IACR,EAAE,KAAA,EAAO,mBAAA,EAAqB,WAAA,EAAa,2FAAA,EAA6F,MAAM,QAAA,EAAI;AAAA,IAClJ,EAAE,KAAA,EAAO,cAAA,EAAgB,WAAA,EAAa,8EAAA,EAAgF,MAAM,QAAA,EAAI;AAAA,IAChI,EAAE,KAAA,EAAO,qBAAA,EAAuB,WAAA,EAAa,0FAAA,EAAuF,MAAM,QAAA,EAAI;AAAA,IAC9I,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAa,uEAAA,EAAyE,MAAM,WAAA;AAAK;AAEjI;ACTA,IAAMC,kBAAAA,GAAoBJ,MAAE,MAAA,CAAO;AAAA,EACjC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,yBAAA,GAA4BA,MAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,UAAUA,KAAAA,CAAE,KAAA,CAAMI,kBAAiB,CAAA,CAAE,IAAI,CAAC;AAC5C,CAAC,EAAE,MAAA;ACLI,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAM,EAAoC;AAChF,EAAA,yBAAA,CAA0B,MAAM,OAAO,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,OAAA;AAC9B,EAAA,uBACEH,eAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,eAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,MAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,MAAAA,CAAG,+CAA+C,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACvFF,cAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EACrB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACtBC,gBAACG,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,eAACK,cAAA,EAAA,EACC,QAAA,kBAAAJ,eAAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACV,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,IAAA,oBACPD,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,SAAA,EAAWE,MAAAA,CAAG,SAAS,CAAA,EAAG,aAAA,EAAY,MAAA,EAAQ,kBAAQ,IAAA,EAAK,CAAA;AAAA,wBAE7EF,cAAAA,CAACM,aAAA,EAAA,EAAU,EAAA,EAAG,IAAA,EAAM,kBAAQ,KAAA,EAAM;AAAA,OAAA,EACpC,CAAA,EACF,CAAA;AAAA,sBACAN,cAAAA,CAACO,eAAA,EAAA,EACC,QAAA,kBAAAP,cAAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,WAAWE,MAAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,aAAY,CAAA,EAC5E;AAAA,KAAA,EAAA,EAXS,CAYX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;AC/BO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,uBAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACR,EAAE,KAAA,EAAO,mBAAA,EAAqB,WAAA,EAAa,uCAAA,EAAyC,MAAM,QAAA,EAAI;AAAA,IAC9F,EAAE,KAAA,EAAO,cAAA,EAAgB,WAAA,EAAa,0CAAA,EAA4C,MAAM,QAAA,EAAI;AAAA,IAC5F,EAAE,KAAA,EAAO,eAAA,EAAiB,WAAA,EAAa,oCAAA,EAAsC,MAAM,QAAA,EAAI;AAAA,IACvF,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAa,kCAAA,EAAoC,MAAM,WAAA,EAAK;AAAA,IACxF,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,0CAAA,EAA4C,MAAM,WAAA,EAAK;AAAA,IAC3F,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,8BAAA,EAAgC,MAAM,cAAA;AAAK;AAEpF","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-6xl 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"]}
|
package/dist/features/index.js
CHANGED
|
@@ -67,7 +67,7 @@ var FeaturesGridContentSchema = z.object({
|
|
|
67
67
|
function FeaturesGrid({ content, theme }) {
|
|
68
68
|
FeaturesGridContentSchema.parse(content);
|
|
69
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
71
71
|
/* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
72
72
|
/* @__PURE__ */ jsx(DGrid, { columns: 3, gap: 6, children: features.map((feature, i) => /* @__PURE__ */ jsxs(Card, { children: [
|
|
73
73
|
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(DStack, { gap: 2, children: [
|
|
@@ -1 +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":["FeatureItemSchema","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 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"]}
|
|
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":["FeatureItemSchema","z","jsx","jsxs","cn"],"mappings":";;;;;;AAQO,IAAM,IAAA,GAAU,IAAI,GAAgC,CAAA;AACpD,IAAM,MAAA,GAAU,IAAI,KAAgC,CAAA;AACpD,IAAM,KAAA,GAAU,IAAI,IAAgC,CAAA;AACpD,IAAM,OAAA,GAAU,IAAI,MAAgC,CAAA;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNA,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACjC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,UAAU,CAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA,CAAE,IAAI,CAAC;AAC5C,CAAC,EAAE,MAAA;ACNI,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAM,EAAqC;AAClF,EAAA,0BAAA,CAA2B,MAAM,OAAO,CAAA;AACxC,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,QAAA,EAAS,GAAI,OAAA;AAC3C,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EAAU,YAAA,EAAY,SAAS,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,EAC7D,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,mBAAmB,CAAA,EACxF,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,UAAO,GAAA,EAAK,CAAA,EAAG,SAAA,EAAW,EAAA,CAAG,eAAe,CAAA,EAC3C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAW,EAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,MAC1E,WAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAEtE,CAAA;AAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAQ,MAAA,EAAO,WAAW,EAAA,CAAG,oBAAoB,CAAA,EAChF,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACtB,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EACP,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,OAAM,OAAA,EACpB,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,IAAA,oBACP,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,8BAA8B,CAAA,EAAG,aAAA,EAAY,MAAA,EACxE,QAAA,EAAA,OAAA,CAAQ,IAAA,EACX,CAAA;AAAA,sBAEF,IAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACX,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAG,IAAA,EAAK,SAAA,EAAW,GAAG,eAAe,CAAA,EAAI,kBAAQ,KAAA,EAAM,CAAA;AAAA,wBAC7D,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,WAAA,EAAY;AAAA,OAAA,EAC5E;AAAA,KAAA,EACF,CAAA,EAAA,EAXiB,CAYnB,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACpCO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,0EAAA;AAAA,EACb,QAAA,EAAU;AAAA,IACR,EAAE,KAAA,EAAO,mBAAA,EAAqB,WAAA,EAAa,2FAAA,EAA6F,MAAM,QAAA,EAAI;AAAA,IAClJ,EAAE,KAAA,EAAO,cAAA,EAAgB,WAAA,EAAa,8EAAA,EAAgF,MAAM,QAAA,EAAI;AAAA,IAChI,EAAE,KAAA,EAAO,qBAAA,EAAuB,WAAA,EAAa,0FAAA,EAAuF,MAAM,QAAA,EAAI;AAAA,IAC9I,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAa,uEAAA,EAAyE,MAAM,WAAA;AAAK;AAEjI;ACTA,IAAMA,kBAAAA,GAAoBC,EAAE,MAAA,CAAO;AAAA,EACjC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,UAAUA,CAAAA,CAAE,KAAA,CAAMD,kBAAiB,CAAA,CAAE,IAAI,CAAC;AAC5C,CAAC,EAAE,MAAA;ACLI,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAM,EAAoC;AAChF,EAAA,yBAAA,CAA0B,MAAM,OAAO,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,OAAA;AAC9B,EAAA,uBACEE,IAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,IAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,EAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,EAAAA,CAAG,+CAA+C,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACvFF,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EACrB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACtBC,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,IAAC,UAAA,EAAA,EACC,QAAA,kBAAAC,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACV,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,IAAA,oBACPD,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,SAAA,EAAWE,EAAAA,CAAG,SAAS,CAAA,EAAG,aAAA,EAAY,MAAA,EAAQ,kBAAQ,IAAA,EAAK,CAAA;AAAA,wBAE7EF,GAAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,IAAA,EAAM,kBAAQ,KAAA,EAAM;AAAA,OAAA,EACpC,CAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,WAAWE,EAAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,aAAY,CAAA,EAC5E;AAAA,KAAA,EAAA,EAXS,CAYX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;AC/BO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,uBAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACR,EAAE,KAAA,EAAO,mBAAA,EAAqB,WAAA,EAAa,uCAAA,EAAyC,MAAM,QAAA,EAAI;AAAA,IAC9F,EAAE,KAAA,EAAO,cAAA,EAAgB,WAAA,EAAa,0CAAA,EAA4C,MAAM,QAAA,EAAI;AAAA,IAC5F,EAAE,KAAA,EAAO,eAAA,EAAiB,WAAA,EAAa,oCAAA,EAAsC,MAAM,QAAA,EAAI;AAAA,IACvF,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAa,kCAAA,EAAoC,MAAM,WAAA,EAAK;AAAA,IACxF,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,0CAAA,EAA4C,MAAM,WAAA,EAAK;AAAA,IAC3F,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,8BAAA,EAAgC,MAAM,cAAA;AAAK;AAEpF","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 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-6xl 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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -206,7 +206,7 @@ var FaqGridContentSchema = zod.z.object({
|
|
|
206
206
|
function FaqGrid({ content, theme }) {
|
|
207
207
|
FaqGridContentSchema.parse(content);
|
|
208
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
210
210
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
211
211
|
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, gap: 4, children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
212
212
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardTitle, { as: "h3", children: item.question }) }),
|
|
@@ -592,7 +592,7 @@ var TeamGridContentSchema = zod.z.object({
|
|
|
592
592
|
function TeamGrid({ content, theme }) {
|
|
593
593
|
TeamGridContentSchema.parse(content);
|
|
594
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
596
596
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
597
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
598
|
/* @__PURE__ */ jsxRuntime.jsxs(vui.Avatar, { className: vui.cn("w-16 h-16"), children: [
|
|
@@ -627,7 +627,7 @@ var TestimonialSplitContentSchema = zod.z.object({
|
|
|
627
627
|
function TestimonialSplit({ content, theme }) {
|
|
628
628
|
TestimonialSplitContentSchema.parse(content);
|
|
629
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-
|
|
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-6xl mx-auto py-20"), children: [
|
|
631
631
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
632
632
|
DBox,
|
|
633
633
|
{
|
|
@@ -677,7 +677,7 @@ var TestimonialGridContentSchema = zod.z.object({
|
|
|
677
677
|
function TestimonialGrid({ content, theme }) {
|
|
678
678
|
TestimonialGridContentSchema.parse(content);
|
|
679
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
681
681
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
682
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
683
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "blockquote", className: vui.cn("text-sm leading-relaxed"), children: /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", children: item.quote }) }),
|
|
@@ -876,7 +876,7 @@ var BusinessGridContentSchema = zod.z.object({
|
|
|
876
876
|
function BusinessGrid({ content, theme }) {
|
|
877
877
|
BusinessGridContentSchema.parse(content);
|
|
878
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
880
880
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
881
881
|
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, gap: 6, children: services.map((service, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
882
882
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
@@ -949,7 +949,7 @@ var FeaturesGridContentSchema = zod.z.object({
|
|
|
949
949
|
function FeaturesGrid({ content, theme }) {
|
|
950
950
|
FeaturesGridContentSchema.parse(content);
|
|
951
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-
|
|
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-6xl mx-auto gap-10"), children: [
|
|
953
953
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
954
954
|
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
955
955
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|