@booga/vblocks 0.3.2 → 0.3.3
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 +37 -0
- package/dist/blog/index.cjs +4 -4
- package/dist/blog/index.cjs.map +1 -1
- package/dist/blog/index.js +4 -4
- package/dist/blog/index.js.map +1 -1
- 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/cta/index.cjs +2 -2
- package/dist/cta/index.cjs.map +1 -1
- package/dist/cta/index.js +2 -2
- package/dist/cta/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/gallery/index.cjs +1 -1
- package/dist/gallery/index.cjs.map +1 -1
- package/dist/gallery/index.js +1 -1
- package/dist/gallery/index.js.map +1 -1
- package/dist/hero/index.cjs +2 -2
- package/dist/hero/index.cjs.map +1 -1
- package/dist/hero/index.js +2 -2
- package/dist/hero/index.js.map +1 -1
- package/dist/index.cjs +16 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +17 -22
- package/dist/index.js.map +1 -1
- package/dist/portfolio/index.cjs +1 -1
- package/dist/portfolio/index.cjs.map +1 -1
- package/dist/portfolio/index.js +1 -1
- package/dist/portfolio/index.js.map +1 -1
- package/dist/post/index.cjs +1 -1
- package/dist/post/index.cjs.map +1 -1
- package/dist/post/index.js +1 -1
- package/dist/post/index.js.map +1 -1
- package/dist/styles.css +1 -1
- 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 -7
- package/dist/testimonial/index.cjs.map +1 -1
- package/dist/testimonial/index.js +3 -8
- package/dist/testimonial/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cta/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/cta/CtaSplit/schema.ts","../../src/cta/CtaSplit/index.tsx","../../src/cta/CtaSplit/default.ts","../../src/cta/CtaCentered/schema.ts","../../src/cta/CtaCentered/index.tsx","../../src/cta/CtaCentered/default.ts"],"names":["z","jsx","jsxs","cn","Button"],"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 { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const CtaSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n image: ImageSchema,\n}).strict();\n\nexport type CtaSplitContent = z.infer<typeof CtaSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaSplitContentSchema, type CtaSplitContent } from \"./schema\";\n\nexport function CtaSplit({ content, theme }: BlockProps<CtaSplitContent>) {\n CtaSplitContentSchema.parse(content);\n const { heading, description, primaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">\n {primaryCta.label}\n </Button>\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-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaSplitContent } from \"./schema\";\n\nexport const CtaSplitDefaultContent: CtaSplitContent = {\n heading: \"Ready to get started?\",\n description: \"Join thousands of teams shipping faster with composable tooling.\",\n primaryCta: { label: \"Start free\", href: \"#\" },\n image: { src: \"https://placehold.co/480x320\", alt: \"Illustration\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const CtaCenteredContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type CtaCenteredContent = z.infer<typeof CtaCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaCenteredContentSchema, type CtaCenteredContent } from \"./schema\";\n\nexport function CtaCentered({ content, theme }: BlockProps<CtaCenteredContent>) {\n CtaCenteredContentSchema.parse(content);\n const { heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} gap={8} align=\"center\" className={cn(\"max-w-2xl mx-auto text-center py-20\")}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaCenteredContent } from \"./schema\";\n\nexport const CtaCenteredDefaultContent: CtaCenteredContent = {\n heading: \"Ready to get started?\",\n description: \"Ship faster with composable, typed section blocks.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/cta/CtaSplit/schema.ts","../../src/cta/CtaSplit/index.tsx","../../src/cta/CtaSplit/default.ts","../../src/cta/CtaCentered/schema.ts","../../src/cta/CtaCentered/index.tsx","../../src/cta/CtaCentered/default.ts"],"names":["z","jsx","jsxs","cn","Button"],"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 { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const CtaSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n image: ImageSchema,\n}).strict();\n\nexport type CtaSplitContent = z.infer<typeof CtaSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaSplitContentSchema, type CtaSplitContent } from \"./schema\";\n\nexport function CtaSplit({ content, theme }: BlockProps<CtaSplitContent>) {\n CtaSplitContentSchema.parse(content);\n const { heading, description, primaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">\n {primaryCta.label}\n </Button>\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-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaSplitContent } from \"./schema\";\n\nexport const CtaSplitDefaultContent: CtaSplitContent = {\n heading: \"Ready to get started?\",\n description: \"Join thousands of teams shipping faster with composable tooling.\",\n primaryCta: { label: \"Start free\", href: \"#\" },\n image: { src: \"https://placehold.co/480x320\", alt: \"Illustration\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const CtaCenteredContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type CtaCenteredContent = z.infer<typeof CtaCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaCenteredContentSchema, type CtaCenteredContent } from \"./schema\";\n\nexport function CtaCentered({ content, theme }: BlockProps<CtaCenteredContent>) {\n CtaCenteredContentSchema.parse(content);\n const { heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} gap={8} align=\"center\" className={cn(\"max-w-2xl mx-auto text-center py-20\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaCenteredContent } from \"./schema\";\n\nexport const CtaCenteredDefaultContent: CtaCenteredContent = {\n heading: \"Ready to get started?\",\n description: \"Ship faster with composable, typed section blocks.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n};\n"]}
|
package/dist/features/index.cjs
CHANGED
|
@@ -39,7 +39,7 @@ function FeaturesSplit({ content, theme }) {
|
|
|
39
39
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 8, display: "flex", className: vui.cn("list-none flex-col"), children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 4, align: "start", children: [
|
|
40
40
|
feature.icon && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", className: vui.cn("text-xl flex-shrink-0 mt-0.5"), "aria-hidden": "true", children: feature.icon }),
|
|
41
41
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
|
|
42
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold"), children: feature.title }),
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold"), children: feature.title }),
|
|
43
43
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: feature.description })
|
|
44
44
|
] })
|
|
45
45
|
] }) }, i)) })
|
|
@@ -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-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"]}
|
|
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(\"text-lg 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
|
@@ -37,7 +37,7 @@ function FeaturesSplit({ content, theme }) {
|
|
|
37
37
|
/* @__PURE__ */ jsx(DBox, { as: "ul", m: 0, p: 0, gap: 8, display: "flex", className: cn("list-none flex-col"), children: features.map((feature, i) => /* @__PURE__ */ jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxs(DInline, { gap: 4, align: "start", children: [
|
|
38
38
|
feature.icon && /* @__PURE__ */ jsx(DBox, { as: "span", className: cn("text-xl flex-shrink-0 mt-0.5"), "aria-hidden": "true", children: feature.icon }),
|
|
39
39
|
/* @__PURE__ */ jsxs(DStack, { gap: 1, children: [
|
|
40
|
-
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("font-semibold"), children: feature.title }),
|
|
40
|
+
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("text-lg font-semibold"), children: feature.title }),
|
|
41
41
|
/* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-sm"), children: feature.description })
|
|
42
42
|
] })
|
|
43
43
|
] }) }, i)) })
|
|
@@ -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-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"]}
|
|
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(\"text-lg 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/gallery/index.cjs
CHANGED
|
@@ -72,7 +72,7 @@ var GalleryGridContentSchema = zod.z.object({
|
|
|
72
72
|
function GalleryGrid({ content, theme }) {
|
|
73
73
|
GalleryGridContentSchema.parse(content);
|
|
74
74
|
const { items } = content;
|
|
75
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, px: 6, py:
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, px: 6, py: 16, gap: 4, className: vui.cn("max-w-6xl mx-auto"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "figure", m: 0, children: [
|
|
76
76
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
77
77
|
DBox,
|
|
78
78
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/gallery/GallerySplit/schema.ts","../../src/gallery/GallerySplit/index.tsx","../../src/gallery/GallerySplit/default.ts","../../src/gallery/GalleryGrid/schema.ts","../../src/gallery/GalleryGrid/index.tsx","../../src/gallery/GalleryGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","GalleryItemSchema"],"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 GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GallerySplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GallerySplitContent = z.infer<typeof GallerySplitContentSchema>;\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 { GallerySplitContentSchema, type GallerySplitContent } from \"./schema\";\n\nexport function GallerySplit({ content, theme }: BlockProps<GallerySplitContent>) {\n GallerySplitContentSchema.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={12} 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\">{description}</DBox>\n )}\n </DStack>\n <DBox as=\"ul\" m={0} p={0} gap={4} display=\"grid\" className={cn(\"list-none grid-cols-2\")}>\n {items.map((item, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"figure\" m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\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 GallerySplitContent } from \"./schema\";\n\nexport const GallerySplitDefaultContent: GallerySplitContent = {\n heading: \"Our work\",\n description: \"A selection of recent projects.\",\n items: [\n { src: \"https://placehold.co/400x300\", alt: \"Project one\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project two\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project three\", caption: \"Featured project\" },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GalleryGridContentSchema = z.object({\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GalleryGridContent = z.infer<typeof GalleryGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { GalleryGridContentSchema, type GalleryGridContent } from \"./schema\";\n\nexport function GalleryGrid({ content, theme }: BlockProps<GalleryGridContent>) {\n GalleryGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Gallery\" style={themeStyle(theme)}>\n <DGrid columns={3} px={6} py={12} gap={4} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <DBox as=\"figure\" key={i} m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\n </DBox>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type GalleryGridContent } from \"./schema\";\n\nexport const GalleryGridDefaultContent: GalleryGridContent = {\n items: [\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image one\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image two\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image three\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image four\", caption: \"Featured\" },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/gallery/GallerySplit/schema.ts","../../src/gallery/GallerySplit/index.tsx","../../src/gallery/GallerySplit/default.ts","../../src/gallery/GalleryGrid/schema.ts","../../src/gallery/GalleryGrid/index.tsx","../../src/gallery/GalleryGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","GalleryItemSchema"],"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 GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GallerySplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GallerySplitContent = z.infer<typeof GallerySplitContentSchema>;\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 { GallerySplitContentSchema, type GallerySplitContent } from \"./schema\";\n\nexport function GallerySplit({ content, theme }: BlockProps<GallerySplitContent>) {\n GallerySplitContentSchema.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={12} 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\">{description}</DBox>\n )}\n </DStack>\n <DBox as=\"ul\" m={0} p={0} gap={4} display=\"grid\" className={cn(\"list-none grid-cols-2\")}>\n {items.map((item, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"figure\" m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\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 GallerySplitContent } from \"./schema\";\n\nexport const GallerySplitDefaultContent: GallerySplitContent = {\n heading: \"Our work\",\n description: \"A selection of recent projects.\",\n items: [\n { src: \"https://placehold.co/400x300\", alt: \"Project one\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project two\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project three\", caption: \"Featured project\" },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GalleryGridContentSchema = z.object({\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GalleryGridContent = z.infer<typeof GalleryGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { GalleryGridContentSchema, type GalleryGridContent } from \"./schema\";\n\nexport function GalleryGrid({ content, theme }: BlockProps<GalleryGridContent>) {\n GalleryGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Gallery\" style={themeStyle(theme)}>\n <DGrid columns={3} px={6} py={16} gap={4} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <DBox as=\"figure\" key={i} m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\n </DBox>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type GalleryGridContent } from \"./schema\";\n\nexport const GalleryGridDefaultContent: GalleryGridContent = {\n items: [\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image one\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image two\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image three\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image four\", caption: \"Featured\" },\n ],\n};\n"]}
|
package/dist/gallery/index.js
CHANGED
|
@@ -70,7 +70,7 @@ var GalleryGridContentSchema = z.object({
|
|
|
70
70
|
function GalleryGrid({ content, theme }) {
|
|
71
71
|
GalleryGridContentSchema.parse(content);
|
|
72
72
|
const { items } = content;
|
|
73
|
-
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsx(DGrid, { columns: 3, px: 6, py:
|
|
73
|
+
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsx(DGrid, { columns: 3, px: 6, py: 16, gap: 4, className: cn("max-w-6xl mx-auto"), children: items.map((item, i) => /* @__PURE__ */ jsxs(DBox, { as: "figure", m: 0, children: [
|
|
74
74
|
/* @__PURE__ */ jsx(
|
|
75
75
|
DBox,
|
|
76
76
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/gallery/GallerySplit/schema.ts","../../src/gallery/GallerySplit/index.tsx","../../src/gallery/GallerySplit/default.ts","../../src/gallery/GalleryGrid/schema.ts","../../src/gallery/GalleryGrid/index.tsx","../../src/gallery/GalleryGrid/default.ts"],"names":["GalleryItemSchema","z","jsx","cn","jsxs"],"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 GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GallerySplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GallerySplitContent = z.infer<typeof GallerySplitContentSchema>;\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 { GallerySplitContentSchema, type GallerySplitContent } from \"./schema\";\n\nexport function GallerySplit({ content, theme }: BlockProps<GallerySplitContent>) {\n GallerySplitContentSchema.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={12} 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\">{description}</DBox>\n )}\n </DStack>\n <DBox as=\"ul\" m={0} p={0} gap={4} display=\"grid\" className={cn(\"list-none grid-cols-2\")}>\n {items.map((item, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"figure\" m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\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 GallerySplitContent } from \"./schema\";\n\nexport const GallerySplitDefaultContent: GallerySplitContent = {\n heading: \"Our work\",\n description: \"A selection of recent projects.\",\n items: [\n { src: \"https://placehold.co/400x300\", alt: \"Project one\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project two\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project three\", caption: \"Featured project\" },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GalleryGridContentSchema = z.object({\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GalleryGridContent = z.infer<typeof GalleryGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { GalleryGridContentSchema, type GalleryGridContent } from \"./schema\";\n\nexport function GalleryGrid({ content, theme }: BlockProps<GalleryGridContent>) {\n GalleryGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Gallery\" style={themeStyle(theme)}>\n <DGrid columns={3} px={6} py={12} gap={4} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <DBox as=\"figure\" key={i} m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\n </DBox>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type GalleryGridContent } from \"./schema\";\n\nexport const GalleryGridDefaultContent: GalleryGridContent = {\n items: [\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image one\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image two\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image three\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image four\", caption: \"Featured\" },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/gallery/GallerySplit/schema.ts","../../src/gallery/GallerySplit/index.tsx","../../src/gallery/GallerySplit/default.ts","../../src/gallery/GalleryGrid/schema.ts","../../src/gallery/GalleryGrid/index.tsx","../../src/gallery/GalleryGrid/default.ts"],"names":["GalleryItemSchema","z","jsx","cn","jsxs"],"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 GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GallerySplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GallerySplitContent = z.infer<typeof GallerySplitContentSchema>;\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 { GallerySplitContentSchema, type GallerySplitContent } from \"./schema\";\n\nexport function GallerySplit({ content, theme }: BlockProps<GallerySplitContent>) {\n GallerySplitContentSchema.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={12} 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\">{description}</DBox>\n )}\n </DStack>\n <DBox as=\"ul\" m={0} p={0} gap={4} display=\"grid\" className={cn(\"list-none grid-cols-2\")}>\n {items.map((item, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"figure\" m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\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 GallerySplitContent } from \"./schema\";\n\nexport const GallerySplitDefaultContent: GallerySplitContent = {\n heading: \"Our work\",\n description: \"A selection of recent projects.\",\n items: [\n { src: \"https://placehold.co/400x300\", alt: \"Project one\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project two\" },\n { src: \"https://placehold.co/400x300\", alt: \"Project three\", caption: \"Featured project\" },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst GalleryItemSchema = z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n}).strict();\n\nexport const GalleryGridContentSchema = z.object({\n items: z.array(GalleryItemSchema).min(1),\n}).strict();\n\nexport type GalleryGridContent = z.infer<typeof GalleryGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { GalleryGridContentSchema, type GalleryGridContent } from \"./schema\";\n\nexport function GalleryGrid({ content, theme }: BlockProps<GalleryGridContent>) {\n GalleryGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Gallery\" style={themeStyle(theme)}>\n <DGrid columns={3} px={6} py={16} gap={4} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <DBox as=\"figure\" key={i} m={0}>\n <DBox\n as=\"img\"\n src={item.src}\n alt={item.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n {item.caption && (\n <DBox as=\"figcaption\" color=\"muted\" mt={1} className={cn(\"text-xs\")}>\n {item.caption}\n </DBox>\n )}\n </DBox>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type GalleryGridContent } from \"./schema\";\n\nexport const GalleryGridDefaultContent: GalleryGridContent = {\n items: [\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image one\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image two\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image three\" },\n { src: \"https://placehold.co/400x400\", alt: \"Gallery image four\", caption: \"Featured\" },\n ],\n};\n"]}
|
package/dist/hero/index.cjs
CHANGED
|
@@ -39,7 +39,7 @@ var HeroSplitContentSchema = zod.z.object({
|
|
|
39
39
|
function HeroSplit({ content, theme }) {
|
|
40
40
|
HeroSplitContentSchema.parse(content);
|
|
41
41
|
const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;
|
|
42
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py:
|
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 24, gap: 12, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
|
|
43
43
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
|
|
44
44
|
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
|
|
45
45
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
|
|
@@ -82,7 +82,7 @@ function HeroCentered({ content, theme }) {
|
|
|
82
82
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 24, gap: 8, align: "center", className: vui.cn("max-w-3xl mx-auto text-center"), children: [
|
|
83
83
|
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
|
|
84
84
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
|
|
85
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-
|
|
85
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
|
|
86
86
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
|
|
87
87
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, children: primaryCta.label }),
|
|
88
88
|
secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: secondaryCta.href, variant: "outline", children: secondaryCta.label })
|
package/dist/hero/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/hero/HeroSplit/schema.ts","../../src/hero/HeroSplit/index.tsx","../../src/hero/HeroSplit/default.ts","../../src/hero/HeroCentered/schema.ts","../../src/hero/HeroCentered/index.tsx","../../src/hero/HeroCentered/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Button"],"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;ACNO,IAAM,SAAA,GAAYC,MAAE,MAAA,CAAO;AAAA,EAChC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,MAAE,MAAA;AACV,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,WAAA,GAAcA,MAAE,MAAA,CAAO;AAAA,EAClC,GAAA,EAAKA,MAAE,MAAA,EAAO;AAAA,EACd,GAAA,EAAKA,MAAE,MAAA;AACT,CAAC,EAAE,MAAA,EAAO;;;ACPH,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,UAAU,QAAA,EAAS;AAAA,EACjC,KAAA,EAAO;AACT,CAAC,EAAE,MAAA;ACJI,SAAS,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAM,EAAiC;AAC1E,EAAA,sBAAA,CAAuB,MAAM,OAAO,CAAA;AACpC,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,aAAa,UAAA,EAAY,YAAA,EAAc,OAAM,GAAI,OAAA;AAC3E,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,QAAA,EAAS,SAAA,EAAWC,MAAA,CAAG,mBAAmB,CAAA,EACzF,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACV,QAAA,EAAA;AAAA,MAAA,OAAA,oBACCD,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,UAAS,SAAA,EAAWE,MAAA,CAAG,iDAAiD,CAAA,EACxF,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,sBAEFF,cAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,MAAA,CAAG,iDAAiD,GAC1E,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,sBACAF,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,SAAQ,SAAA,EAAWE,MAAA,CAAG,SAAS,CAAA,EAC/C,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACAD,eAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAI,IAAA,EAAC,KAAK,CAAA,EACjB,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAACG,cAAO,EAAA,EAAG,GAAA,EAAI,MAAM,UAAA,CAAW,IAAA,EAAO,qBAAW,KAAA,EAAM,CAAA;AAAA,QACvD,YAAA,oBACCH,cAAA,CAACG,UAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAA,EAAM,YAAA,CAAa,IAAA,EAAM,OAAA,EAAQ,SAAA,EAC7C,QAAA,EAAA,YAAA,CAAa,KAAA,EAChB;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBACAH,cAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,KAAA;AAAA,QACH,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,SAAA,EAAWE,OAAG,6CAA6C;AAAA;AAAA;AAC7D,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACxCO,IAAM,uBAAA,GAA4C;AAAA,EACvD,OAAA,EAAS,4BAAA;AAAA,EACT,WAAA,EAAa,oFAAA;AAAA,EACb,UAAA,EAAY,EAAE,KAAA,EAAO,aAAA,EAAe,MAAM,GAAA,EAAI;AAAA,EAC9C,YAAA,EAAc,EAAE,KAAA,EAAO,YAAA,EAAc,MAAM,GAAA,EAAI;AAAA,EAC/C,KAAA,EAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,KAAK,iBAAA;AACrD;ACLO,IAAM,yBAAA,GAA4BH,MAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,UAAU,QAAA;AAC1B,CAAC,EAAE,MAAA;ACHI,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAM,EAAoC;AAChF,EAAA,yBAAA,CAA0B,MAAM,OAAO,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,UAAA,EAAY,cAAa,GAAI,OAAA;AACpE,EAAA,uBACEC,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EAAU,cAAY,OAAA,EAAS,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,EAC7D,QAAA,kBAAAC,gBAAC,MAAA,EAAA,EAAO,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAAS,SAAA,EAAWC,MAAAA,CAAG,+BAA+B,CAAA,EACxF,QAAA,EAAA;AAAA,IAAA,OAAA,oBACCF,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,QAAA,EAAS,SAAA,EAAWE,MAAAA,CAAG,iDAAiD,CAAA,EACxF,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,oBAEFF,eAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAK,SAAA,EAAWE,MAAAA,CAAG,iDAAiD,CAAA,EAC1E,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,oBACAF,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWE,MAAAA,CAAG,SAAS,CAAA,EAC/C,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,oBACAD,gBAAC,OAAA,EAAA,EAAQ,IAAA,EAAI,MAAC,GAAA,EAAK,CAAA,EAAG,SAAQ,QAAA,EAC5B,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAACG,YAAA,EAAO,EAAA,EAAG,KAAI,IAAA,EAAM,UAAA,CAAW,IAAA,EAAO,QAAA,EAAA,UAAA,CAAW,KAAA,EAAM,CAAA;AAAA,MACvD,YAAA,oBACCH,cAAAA,CAACG,UAAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAA,EAAM,YAAA,CAAa,IAAA,EAAM,OAAA,EAAQ,SAAA,EAC7C,uBAAa,KAAA,EAChB;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;AChCO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,oCAAA;AAAA,EACT,WAAA,EAAa,+EAAA;AAAA,EACb,UAAA,EAAY,EAAE,KAAA,EAAO,gBAAA,EAAkB,MAAM,GAAA,EAAI;AAAA,EACjD,YAAA,EAAc,EAAE,KAAA,EAAO,WAAA,EAAa,MAAM,GAAA;AAC5C","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 { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const HeroSplitContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n image: ImageSchema,\n}).strict();\n\nexport type HeroSplitContent = z.infer<typeof HeroSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroSplitContentSchema, type HeroSplitContent } from \"./schema\";\n\nexport function HeroSplit({ content, theme }: BlockProps<HeroSplitContent>) {\n HeroSplitContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3}>\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\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-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroSplitContent } from \"./schema\";\n\nexport const HeroSplitDefaultContent: HeroSplitContent = {\n heading: \"Build something remarkable\",\n description: \"A composable foundation for ambitious teams. Typed, accessible, and ready to ship.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n image: { src: \"https://placehold.co/600x400\", alt: \"Product preview\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const HeroCenteredContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type HeroCenteredContent = z.infer<typeof HeroCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroCenteredContentSchema, type HeroCenteredContent } from \"./schema\";\n\nexport function HeroCentered({ content, theme }: BlockProps<HeroCenteredContent>) {\n HeroCenteredContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={24} gap={8} align=\"center\" className={cn(\"max-w-3xl mx-auto text-center\")}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-xl\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroCenteredContent } from \"./schema\";\n\nexport const HeroCenteredDefaultContent: HeroCenteredContent = {\n heading: \"The foundation for what comes next\",\n description: \"Composable blocks, typed content, and zero boilerplate. Focus on the product.\",\n primaryCta: { label: \"Start building\", href: \"#\" },\n secondaryCta: { label: \"View docs\", href: \"#\" },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/hero/HeroSplit/schema.ts","../../src/hero/HeroSplit/index.tsx","../../src/hero/HeroSplit/default.ts","../../src/hero/HeroCentered/schema.ts","../../src/hero/HeroCentered/index.tsx","../../src/hero/HeroCentered/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Button"],"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 { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const HeroSplitContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n image: ImageSchema,\n}).strict();\n\nexport type HeroSplitContent = z.infer<typeof HeroSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroSplitContentSchema, type HeroSplitContent } from \"./schema\";\n\nexport function HeroSplit({ content, theme }: BlockProps<HeroSplitContent>) {\n HeroSplitContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={24} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3}>\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\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-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroSplitContent } from \"./schema\";\n\nexport const HeroSplitDefaultContent: HeroSplitContent = {\n heading: \"Build something remarkable\",\n description: \"A composable foundation for ambitious teams. Typed, accessible, and ready to ship.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n image: { src: \"https://placehold.co/600x400\", alt: \"Product preview\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const HeroCenteredContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type HeroCenteredContent = z.infer<typeof HeroCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroCenteredContentSchema, type HeroCenteredContent } from \"./schema\";\n\nexport function HeroCentered({ content, theme }: BlockProps<HeroCenteredContent>) {\n HeroCenteredContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={24} gap={8} align=\"center\" className={cn(\"max-w-3xl mx-auto text-center\")}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroCenteredContent } from \"./schema\";\n\nexport const HeroCenteredDefaultContent: HeroCenteredContent = {\n heading: \"The foundation for what comes next\",\n description: \"Composable blocks, typed content, and zero boilerplate. Focus on the product.\",\n primaryCta: { label: \"Start building\", href: \"#\" },\n secondaryCta: { label: \"View docs\", href: \"#\" },\n};\n"]}
|
package/dist/hero/index.js
CHANGED
|
@@ -37,7 +37,7 @@ var HeroSplitContentSchema = z.object({
|
|
|
37
37
|
function HeroSplit({ content, theme }) {
|
|
38
38
|
HeroSplitContentSchema.parse(content);
|
|
39
39
|
const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;
|
|
40
|
-
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DGrid, { columns: 2, px: 6, py:
|
|
40
|
+
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DGrid, { columns: 2, px: 6, py: 24, gap: 12, align: "center", className: cn("max-w-6xl mx-auto"), children: [
|
|
41
41
|
/* @__PURE__ */ jsxs(DStack, { gap: 6, children: [
|
|
42
42
|
eyebrow && /* @__PURE__ */ jsx(DBox, { as: "p", color: "accent", className: cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
|
|
43
43
|
/* @__PURE__ */ jsx(DBox, { as: "h1", className: cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
|
|
@@ -80,7 +80,7 @@ function HeroCentered({ content, theme }) {
|
|
|
80
80
|
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DStack, { px: 6, py: 24, gap: 8, align: "center", className: cn("max-w-3xl mx-auto text-center"), children: [
|
|
81
81
|
eyebrow && /* @__PURE__ */ jsx(DBox, { as: "p", color: "accent", className: cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
|
|
82
82
|
/* @__PURE__ */ jsx(DBox, { as: "h1", className: cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
|
|
83
|
-
/* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-
|
|
83
|
+
/* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-lg"), children: description }),
|
|
84
84
|
/* @__PURE__ */ jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
|
|
85
85
|
/* @__PURE__ */ jsx(Button, { as: "a", href: primaryCta.href, children: primaryCta.label }),
|
|
86
86
|
secondaryCta && /* @__PURE__ */ jsx(Button, { as: "a", href: secondaryCta.href, variant: "outline", children: secondaryCta.label })
|
package/dist/hero/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/hero/HeroSplit/schema.ts","../../src/hero/HeroSplit/index.tsx","../../src/hero/HeroSplit/default.ts","../../src/hero/HeroCentered/schema.ts","../../src/hero/HeroCentered/index.tsx","../../src/hero/HeroCentered/default.ts"],"names":["z","jsx","jsxs","cn","Button"],"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 { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const HeroSplitContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n image: ImageSchema,\n}).strict();\n\nexport type HeroSplitContent = z.infer<typeof HeroSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroSplitContentSchema, type HeroSplitContent } from \"./schema\";\n\nexport function HeroSplit({ content, theme }: BlockProps<HeroSplitContent>) {\n HeroSplitContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3}>\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\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-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroSplitContent } from \"./schema\";\n\nexport const HeroSplitDefaultContent: HeroSplitContent = {\n heading: \"Build something remarkable\",\n description: \"A composable foundation for ambitious teams. Typed, accessible, and ready to ship.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n image: { src: \"https://placehold.co/600x400\", alt: \"Product preview\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const HeroCenteredContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type HeroCenteredContent = z.infer<typeof HeroCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroCenteredContentSchema, type HeroCenteredContent } from \"./schema\";\n\nexport function HeroCentered({ content, theme }: BlockProps<HeroCenteredContent>) {\n HeroCenteredContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={24} gap={8} align=\"center\" className={cn(\"max-w-3xl mx-auto text-center\")}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-xl\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroCenteredContent } from \"./schema\";\n\nexport const HeroCenteredDefaultContent: HeroCenteredContent = {\n heading: \"The foundation for what comes next\",\n description: \"Composable blocks, typed content, and zero boilerplate. Focus on the product.\",\n primaryCta: { label: \"Start building\", href: \"#\" },\n secondaryCta: { label: \"View docs\", href: \"#\" },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/hero/HeroSplit/schema.ts","../../src/hero/HeroSplit/index.tsx","../../src/hero/HeroSplit/default.ts","../../src/hero/HeroCentered/schema.ts","../../src/hero/HeroCentered/index.tsx","../../src/hero/HeroCentered/default.ts"],"names":["z","jsx","jsxs","cn","Button"],"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 { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const HeroSplitContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n image: ImageSchema,\n}).strict();\n\nexport type HeroSplitContent = z.infer<typeof HeroSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroSplitContentSchema, type HeroSplitContent } from \"./schema\";\n\nexport function HeroSplit({ content, theme }: BlockProps<HeroSplitContent>) {\n HeroSplitContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={24} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3}>\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\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-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroSplitContent } from \"./schema\";\n\nexport const HeroSplitDefaultContent: HeroSplitContent = {\n heading: \"Build something remarkable\",\n description: \"A composable foundation for ambitious teams. Typed, accessible, and ready to ship.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n image: { src: \"https://placehold.co/600x400\", alt: \"Product preview\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const HeroCenteredContentSchema = z.object({\n eyebrow: z.string().optional(),\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type HeroCenteredContent = z.infer<typeof HeroCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { HeroCenteredContentSchema, type HeroCenteredContent } from \"./schema\";\n\nexport function HeroCentered({ content, theme }: BlockProps<HeroCenteredContent>) {\n HeroCenteredContentSchema.parse(content);\n const { eyebrow, heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={24} gap={8} align=\"center\" className={cn(\"max-w-3xl mx-auto text-center\")}>\n {eyebrow && (\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-sm font-semibold uppercase tracking-widest\")}>\n {eyebrow}\n </DBox>\n )}\n <DBox as=\"h1\" className={cn(\"text-5xl font-bold tracking-tight leading-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type HeroCenteredContent } from \"./schema\";\n\nexport const HeroCenteredDefaultContent: HeroCenteredContent = {\n heading: \"The foundation for what comes next\",\n description: \"Composable blocks, typed content, and zero boilerplate. Focus on the product.\",\n primaryCta: { label: \"Start building\", href: \"#\" },\n secondaryCta: { label: \"View docs\", href: \"#\" },\n};\n"]}
|