@booga/vblocks 0.3.1 → 0.3.2
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 +7 -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/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/portfolio/index.cjs +2 -2
- package/dist/portfolio/index.cjs.map +1 -1
- package/dist/portfolio/index.js +2 -2
- package/dist/portfolio/index.js.map +1 -1
- package/dist/post/index.cjs +2 -2
- package/dist/post/index.cjs.map +1 -1
- package/dist/post/index.js +2 -2
- package/dist/post/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/portfolio/index.cjs
CHANGED
|
@@ -57,7 +57,7 @@ function PortfolioSplit({ content, theme }) {
|
|
|
57
57
|
}
|
|
58
58
|
),
|
|
59
59
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
60
|
-
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: item.category }),
|
|
60
|
+
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: item.category }),
|
|
61
61
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-lg"), children: item.title })
|
|
62
62
|
] }) })
|
|
63
63
|
] }, i)) })
|
|
@@ -96,7 +96,7 @@ function PortfolioGrid({ content, theme }) {
|
|
|
96
96
|
}
|
|
97
97
|
),
|
|
98
98
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
99
|
-
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: item.category }),
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: item.category }),
|
|
100
100
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-lg"), children: item.title })
|
|
101
101
|
] }) })
|
|
102
102
|
] }, i)) }) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/portfolio/PortfolioSplit/schema.ts","../../src/portfolio/PortfolioSplit/index.tsx","../../src/portfolio/PortfolioSplit/default.ts","../../src/portfolio/PortfolioGrid/schema.ts","../../src/portfolio/PortfolioGrid/index.tsx","../../src/portfolio/PortfolioGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Card","CardContent","Badge","PortfolioItemSchema"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioSplitContent = z.infer<typeof PortfolioSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioSplitContentSchema, type PortfolioSplitContent } from \"./schema\";\n\nexport function PortfolioSplit({ content, theme }: BlockProps<PortfolioSplitContent>) {\n PortfolioSplitContentSchema.parse(content);\n const { heading, description, items } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"start\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={4} className={cn(\"sticky top-16\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n {description && (\n <DBox as=\"p\" color=\"muted\">{description}</DBox>\n )}\n </DStack>\n <DStack gap={6}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\">{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioSplitContent } from \"./schema\";\n\nexport const PortfolioSplitDefaultContent: PortfolioSplitContent = {\n heading: \"Selected work\",\n description: \"Projects spanning product design, engineering, and research.\",\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioGridContentSchema = z.object({\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioGridContent = z.infer<typeof PortfolioGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioGridContentSchema, type PortfolioGridContent } from \"./schema\";\n\nexport function PortfolioGrid({ content, theme }: BlockProps<PortfolioGridContent>) {\n PortfolioGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Portfolio\" style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={12} gap={6} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\">{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioGridContent } from \"./schema\";\n\nexport const PortfolioGridDefaultContent: PortfolioGridContent = {\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n { title: \"Mobile app architecture\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Mobile project\" } },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/portfolio/PortfolioSplit/schema.ts","../../src/portfolio/PortfolioSplit/index.tsx","../../src/portfolio/PortfolioSplit/default.ts","../../src/portfolio/PortfolioGrid/schema.ts","../../src/portfolio/PortfolioGrid/index.tsx","../../src/portfolio/PortfolioGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Card","CardContent","Badge","PortfolioItemSchema"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioSplitContent = z.infer<typeof PortfolioSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioSplitContentSchema, type PortfolioSplitContent } from \"./schema\";\n\nexport function PortfolioSplit({ content, theme }: BlockProps<PortfolioSplitContent>) {\n PortfolioSplitContentSchema.parse(content);\n const { heading, description, items } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"start\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={4} className={cn(\"sticky top-16\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n {description && (\n <DBox as=\"p\" color=\"muted\">{description}</DBox>\n )}\n </DStack>\n <DStack gap={6}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\" className={cn(\"self-start\")}>{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioSplitContent } from \"./schema\";\n\nexport const PortfolioSplitDefaultContent: PortfolioSplitContent = {\n heading: \"Selected work\",\n description: \"Projects spanning product design, engineering, and research.\",\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioGridContentSchema = z.object({\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioGridContent = z.infer<typeof PortfolioGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioGridContentSchema, type PortfolioGridContent } from \"./schema\";\n\nexport function PortfolioGrid({ content, theme }: BlockProps<PortfolioGridContent>) {\n PortfolioGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Portfolio\" style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={12} gap={6} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\" className={cn(\"self-start\")}>{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioGridContent } from \"./schema\";\n\nexport const PortfolioGridDefaultContent: PortfolioGridContent = {\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n { title: \"Mobile app architecture\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Mobile project\" } },\n ],\n};\n"]}
|
package/dist/portfolio/index.js
CHANGED
|
@@ -55,7 +55,7 @@ function PortfolioSplit({ content, theme }) {
|
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
57
|
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
58
|
-
/* @__PURE__ */ jsx(Badge, { variant: "secondary", children: item.category }),
|
|
58
|
+
/* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: item.category }),
|
|
59
59
|
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("font-semibold text-lg"), children: item.title })
|
|
60
60
|
] }) })
|
|
61
61
|
] }, i)) })
|
|
@@ -94,7 +94,7 @@ function PortfolioGrid({ content, theme }) {
|
|
|
94
94
|
}
|
|
95
95
|
),
|
|
96
96
|
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
97
|
-
/* @__PURE__ */ jsx(Badge, { variant: "secondary", children: item.category }),
|
|
97
|
+
/* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: item.category }),
|
|
98
98
|
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("font-semibold text-lg"), children: item.title })
|
|
99
99
|
] }) })
|
|
100
100
|
] }, i)) }) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/portfolio/PortfolioSplit/schema.ts","../../src/portfolio/PortfolioSplit/index.tsx","../../src/portfolio/PortfolioSplit/default.ts","../../src/portfolio/PortfolioGrid/schema.ts","../../src/portfolio/PortfolioGrid/index.tsx","../../src/portfolio/PortfolioGrid/default.ts"],"names":["z","PortfolioItemSchema","jsx","cn","jsxs","Card","CardContent","Badge"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioSplitContent = z.infer<typeof PortfolioSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioSplitContentSchema, type PortfolioSplitContent } from \"./schema\";\n\nexport function PortfolioSplit({ content, theme }: BlockProps<PortfolioSplitContent>) {\n PortfolioSplitContentSchema.parse(content);\n const { heading, description, items } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"start\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={4} className={cn(\"sticky top-16\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n {description && (\n <DBox as=\"p\" color=\"muted\">{description}</DBox>\n )}\n </DStack>\n <DStack gap={6}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\">{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioSplitContent } from \"./schema\";\n\nexport const PortfolioSplitDefaultContent: PortfolioSplitContent = {\n heading: \"Selected work\",\n description: \"Projects spanning product design, engineering, and research.\",\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioGridContentSchema = z.object({\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioGridContent = z.infer<typeof PortfolioGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioGridContentSchema, type PortfolioGridContent } from \"./schema\";\n\nexport function PortfolioGrid({ content, theme }: BlockProps<PortfolioGridContent>) {\n PortfolioGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Portfolio\" style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={12} gap={6} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\">{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioGridContent } from \"./schema\";\n\nexport const PortfolioGridDefaultContent: PortfolioGridContent = {\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n { title: \"Mobile app architecture\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Mobile project\" } },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/portfolio/PortfolioSplit/schema.ts","../../src/portfolio/PortfolioSplit/index.tsx","../../src/portfolio/PortfolioSplit/default.ts","../../src/portfolio/PortfolioGrid/schema.ts","../../src/portfolio/PortfolioGrid/index.tsx","../../src/portfolio/PortfolioGrid/default.ts"],"names":["z","PortfolioItemSchema","jsx","cn","jsxs","Card","CardContent","Badge"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string().optional(),\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioSplitContent = z.infer<typeof PortfolioSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioSplitContentSchema, type PortfolioSplitContent } from \"./schema\";\n\nexport function PortfolioSplit({ content, theme }: BlockProps<PortfolioSplitContent>) {\n PortfolioSplitContentSchema.parse(content);\n const { heading, description, items } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"start\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={4} className={cn(\"sticky top-16\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n {description && (\n <DBox as=\"p\" color=\"muted\">{description}</DBox>\n )}\n </DStack>\n <DStack gap={6}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\" className={cn(\"self-start\")}>{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioSplitContent } from \"./schema\";\n\nexport const PortfolioSplitDefaultContent: PortfolioSplitContent = {\n heading: \"Selected work\",\n description: \"Projects spanning product design, engineering, and research.\",\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst PortfolioItemSchema = z.object({\n title: z.string(),\n category: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport const PortfolioGridContentSchema = z.object({\n items: z.array(PortfolioItemSchema).min(1),\n}).strict();\n\nexport type PortfolioGridContent = z.infer<typeof PortfolioGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Card, CardContent, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PortfolioGridContentSchema, type PortfolioGridContent } from \"./schema\";\n\nexport function PortfolioGrid({ content, theme }: BlockProps<PortfolioGridContent>) {\n PortfolioGridContentSchema.parse(content);\n const { items } = content;\n return (\n <DBox as=\"section\" aria-label=\"Portfolio\" style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={12} gap={6} className={cn(\"max-w-6xl mx-auto\")}>\n {items.map((item, i) => (\n <Card key={i}>\n <DBox\n as=\"img\"\n src={item.image.src}\n alt={item.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n <Badge variant=\"secondary\" className={cn(\"self-start\")}>{item.category}</Badge>\n <DBox as=\"h3\" className={cn(\"font-semibold text-lg\")}>{item.title}</DBox>\n </DStack>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PortfolioGridContent } from \"./schema\";\n\nexport const PortfolioGridDefaultContent: PortfolioGridContent = {\n items: [\n { title: \"Commerce platform redesign\", category: \"Product\", image: { src: \"https://placehold.co/480x360\", alt: \"Commerce project\" } },\n { title: \"Data visualisation system\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Data project\" } },\n { title: \"Design language rollout\", category: \"Design\", image: { src: \"https://placehold.co/480x360\", alt: \"Design project\" } },\n { title: \"Mobile app architecture\", category: \"Engineering\", image: { src: \"https://placehold.co/480x360\", alt: \"Mobile project\" } },\n ],\n};\n"]}
|
package/dist/post/index.cjs
CHANGED
|
@@ -41,7 +41,7 @@ function PostSplit({ content, theme }) {
|
|
|
41
41
|
const { title, author, date, category, body, image } = content;
|
|
42
42
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
|
|
43
43
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, className: vui.cn("sticky top-16"), children: [
|
|
44
|
-
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: category }),
|
|
44
|
+
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: category }),
|
|
45
45
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-3xl font-bold tracking-tight leading-snug"), children: title }),
|
|
46
46
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Separator, {}),
|
|
47
47
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 2, color: "muted", className: vui.cn("text-sm"), children: [
|
|
@@ -85,7 +85,7 @@ function PostCentered({ content, theme }) {
|
|
|
85
85
|
PostCenteredContentSchema.parse(content);
|
|
86
86
|
const { title, author, date, category, body } = content;
|
|
87
87
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, gap: 6, className: vui.cn("max-w-2xl mx-auto"), children: [
|
|
88
|
-
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: category }),
|
|
88
|
+
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: category }),
|
|
89
89
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-4xl font-bold tracking-tight leading-snug"), children: title }),
|
|
90
90
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 2, color: "muted", className: vui.cn("text-sm"), children: [
|
|
91
91
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: author }),
|
package/dist/post/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/post/PostSplit/schema.ts","../../src/post/PostSplit/index.tsx","../../src/post/PostSplit/default.ts","../../src/post/PostCentered/schema.ts","../../src/post/PostCentered/index.tsx","../../src/post/PostCentered/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Badge","Separator"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nexport const PostSplitContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport type PostSplitContent = z.infer<typeof PostSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostSplitContentSchema, type PostSplitContent } from \"./schema\";\n\nexport function PostSplit({ content, theme }: BlockProps<PostSplitContent>) {\n PostSplitContentSchema.parse(content);\n const { title, author, date, category, body, image } = content;\n return (\n <DBox as=\"article\" 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={6} className={cn(\"sticky top-16\")}>\n {category && <Badge variant=\"secondary\">{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-3xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <Separator />\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n </DStack>\n <DStack gap={6}>\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 <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostSplitContent } from \"./schema\";\n\nexport const PostSplitDefaultContent: PostSplitContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency. This post explores the core principles behind maintainable design systems.\",\n image: { src: \"https://placehold.co/600x400\", alt: \"Post cover image\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const PostCenteredContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n}).strict();\n\nexport type PostCenteredContent = z.infer<typeof PostCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostCenteredContentSchema, type PostCenteredContent } from \"./schema\";\n\nexport function PostCentered({ content, theme }: BlockProps<PostCenteredContent>) {\n PostCenteredContentSchema.parse(content);\n const { title, author, date, category, body } = content;\n return (\n <DBox as=\"article\" style={themeStyle(theme)}>\n <DStack px={6} py={16} gap={6} className={cn(\"max-w-2xl mx-auto\")}>\n {category && <Badge variant=\"secondary\">{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-4xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n <Separator />\n <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostCenteredContent } from \"./schema\";\n\nexport const PostCenteredDefaultContent: PostCenteredContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency.\",\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/post/PostSplit/schema.ts","../../src/post/PostSplit/index.tsx","../../src/post/PostSplit/default.ts","../../src/post/PostCentered/schema.ts","../../src/post/PostCentered/index.tsx","../../src/post/PostCentered/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Badge","Separator"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nexport const PostSplitContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport type PostSplitContent = z.infer<typeof PostSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostSplitContentSchema, type PostSplitContent } from \"./schema\";\n\nexport function PostSplit({ content, theme }: BlockProps<PostSplitContent>) {\n PostSplitContentSchema.parse(content);\n const { title, author, date, category, body, image } = content;\n return (\n <DBox as=\"article\" 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={6} className={cn(\"sticky top-16\")}>\n {category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-3xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <Separator />\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n </DStack>\n <DStack gap={6}>\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 <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostSplitContent } from \"./schema\";\n\nexport const PostSplitDefaultContent: PostSplitContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency. This post explores the core principles behind maintainable design systems.\",\n image: { src: \"https://placehold.co/600x400\", alt: \"Post cover image\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const PostCenteredContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n}).strict();\n\nexport type PostCenteredContent = z.infer<typeof PostCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostCenteredContentSchema, type PostCenteredContent } from \"./schema\";\n\nexport function PostCentered({ content, theme }: BlockProps<PostCenteredContent>) {\n PostCenteredContentSchema.parse(content);\n const { title, author, date, category, body } = content;\n return (\n <DBox as=\"article\" style={themeStyle(theme)}>\n <DStack px={6} py={16} gap={6} className={cn(\"max-w-2xl mx-auto\")}>\n {category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-4xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n <Separator />\n <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostCenteredContent } from \"./schema\";\n\nexport const PostCenteredDefaultContent: PostCenteredContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency.\",\n};\n"]}
|
package/dist/post/index.js
CHANGED
|
@@ -39,7 +39,7 @@ function PostSplit({ content, theme }) {
|
|
|
39
39
|
const { title, author, date, category, body, image } = content;
|
|
40
40
|
return /* @__PURE__ */ jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: cn("max-w-6xl mx-auto"), children: [
|
|
41
41
|
/* @__PURE__ */ jsxs(DStack, { gap: 6, className: cn("sticky top-16"), children: [
|
|
42
|
-
category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: category }),
|
|
42
|
+
category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: category }),
|
|
43
43
|
/* @__PURE__ */ jsx(DBox, { as: "h1", className: cn("text-3xl font-bold tracking-tight leading-snug"), children: title }),
|
|
44
44
|
/* @__PURE__ */ jsx(Separator, {}),
|
|
45
45
|
/* @__PURE__ */ jsxs(DInline, { gap: 2, color: "muted", className: cn("text-sm"), children: [
|
|
@@ -83,7 +83,7 @@ function PostCentered({ content, theme }) {
|
|
|
83
83
|
PostCenteredContentSchema.parse(content);
|
|
84
84
|
const { title, author, date, category, body } = content;
|
|
85
85
|
return /* @__PURE__ */ jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DStack, { px: 6, py: 16, gap: 6, className: cn("max-w-2xl mx-auto"), children: [
|
|
86
|
-
category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: category }),
|
|
86
|
+
category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: category }),
|
|
87
87
|
/* @__PURE__ */ jsx(DBox, { as: "h1", className: cn("text-4xl font-bold tracking-tight leading-snug"), children: title }),
|
|
88
88
|
/* @__PURE__ */ jsxs(DInline, { gap: 2, color: "muted", className: cn("text-sm"), children: [
|
|
89
89
|
/* @__PURE__ */ jsx(DBox, { as: "span", children: author }),
|
package/dist/post/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/post/PostSplit/schema.ts","../../src/post/PostSplit/index.tsx","../../src/post/PostSplit/default.ts","../../src/post/PostCentered/schema.ts","../../src/post/PostCentered/index.tsx","../../src/post/PostCentered/default.ts"],"names":["z","jsx","jsxs","cn","Badge","Separator"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nexport const PostSplitContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport type PostSplitContent = z.infer<typeof PostSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostSplitContentSchema, type PostSplitContent } from \"./schema\";\n\nexport function PostSplit({ content, theme }: BlockProps<PostSplitContent>) {\n PostSplitContentSchema.parse(content);\n const { title, author, date, category, body, image } = content;\n return (\n <DBox as=\"article\" 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={6} className={cn(\"sticky top-16\")}>\n {category && <Badge variant=\"secondary\">{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-3xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <Separator />\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n </DStack>\n <DStack gap={6}>\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 <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostSplitContent } from \"./schema\";\n\nexport const PostSplitDefaultContent: PostSplitContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency. This post explores the core principles behind maintainable design systems.\",\n image: { src: \"https://placehold.co/600x400\", alt: \"Post cover image\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const PostCenteredContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n}).strict();\n\nexport type PostCenteredContent = z.infer<typeof PostCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostCenteredContentSchema, type PostCenteredContent } from \"./schema\";\n\nexport function PostCentered({ content, theme }: BlockProps<PostCenteredContent>) {\n PostCenteredContentSchema.parse(content);\n const { title, author, date, category, body } = content;\n return (\n <DBox as=\"article\" style={themeStyle(theme)}>\n <DStack px={6} py={16} gap={6} className={cn(\"max-w-2xl mx-auto\")}>\n {category && <Badge variant=\"secondary\">{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-4xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n <Separator />\n <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostCenteredContent } from \"./schema\";\n\nexport const PostCenteredDefaultContent: PostCenteredContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency.\",\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/post/PostSplit/schema.ts","../../src/post/PostSplit/index.tsx","../../src/post/PostSplit/default.ts","../../src/post/PostCentered/schema.ts","../../src/post/PostCentered/index.tsx","../../src/post/PostCentered/default.ts"],"names":["z","jsx","jsxs","cn","Badge","Separator"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nexport const PostSplitContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n image: ImageSchema,\n}).strict();\n\nexport type PostSplitContent = z.infer<typeof PostSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostSplitContentSchema, type PostSplitContent } from \"./schema\";\n\nexport function PostSplit({ content, theme }: BlockProps<PostSplitContent>) {\n PostSplitContentSchema.parse(content);\n const { title, author, date, category, body, image } = content;\n return (\n <DBox as=\"article\" 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={6} className={cn(\"sticky top-16\")}>\n {category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-3xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <Separator />\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n </DStack>\n <DStack gap={6}>\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 <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostSplitContent } from \"./schema\";\n\nexport const PostSplitDefaultContent: PostSplitContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency. This post explores the core principles behind maintainable design systems.\",\n image: { src: \"https://placehold.co/600x400\", alt: \"Post cover image\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const PostCenteredContentSchema = z.object({\n title: z.string(),\n author: z.string(),\n date: z.string(),\n category: z.string().optional(),\n body: z.string(),\n}).strict();\n\nexport type PostCenteredContent = z.infer<typeof PostCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, Separator, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { PostCenteredContentSchema, type PostCenteredContent } from \"./schema\";\n\nexport function PostCentered({ content, theme }: BlockProps<PostCenteredContent>) {\n PostCenteredContentSchema.parse(content);\n const { title, author, date, category, body } = content;\n return (\n <DBox as=\"article\" style={themeStyle(theme)}>\n <DStack px={6} py={16} gap={6} className={cn(\"max-w-2xl mx-auto\")}>\n {category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{category}</Badge>}\n <DBox as=\"h1\" className={cn(\"text-4xl font-bold tracking-tight leading-snug\")}>{title}</DBox>\n <DInline gap={2} color=\"muted\" className={cn(\"text-sm\")}>\n <DBox as=\"span\">{author}</DBox>\n <DBox as=\"span\" aria-hidden=\"true\">·</DBox>\n <DBox as=\"time\" dateTime={date}>{date}</DBox>\n </DInline>\n <Separator />\n <DBox as=\"p\" className={cn(\"text-base leading-relaxed\")}>{body}</DBox>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type PostCenteredContent } from \"./schema\";\n\nexport const PostCenteredDefaultContent: PostCenteredContent = {\n title: \"Designing for composability\",\n author: \"Alex Meridian\",\n date: \"2026-05-01\",\n category: \"Design systems\",\n body: \"Composable systems decouple structure from style, enabling teams to build faster without sacrificing consistency.\",\n};\n"]}
|
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--v-color-background:98% 0.005 240;--v-color-foreground:12% 0.01 240;--v-color-card:100% 0 0;--v-color-card-foreground:12% 0.01 240;--v-color-popover:100% 0 0;--v-color-popover-foreground:12% 0.01 240;--v-color-primary:55% 0.2 250;--v-color-primary-foreground:99% 0.005 250;--v-color-secondary:95% 0.01 240;--v-color-secondary-foreground:20% 0.02 240;--v-color-muted:95% 0.008 240;--v-color-muted-foreground:55% 0.015 240;--v-color-accent:95% 0.01 240;--v-color-accent-foreground:20% 0.02 240;--v-color-destructive:55% 0.22 27;--v-color-destructive-foreground:99% 0.005 27;--v-color-success:55% 0.18 145;--v-color-success-foreground:99% 0.005 145;--v-color-warning:70% 0.18 65;--v-color-warning-foreground:20% 0.05 65;--v-color-border:90% 0.008 240;--v-color-input:90% 0.008 240;--v-color-ring:55% 0.2 250}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-0{top:0;bottom:0}.bottom-full{bottom:100%}.left-1\/2,.left-\[50\%\]{left:50%}.right-0{right:0}.top-16{top:4rem}.top-\[50\%\]{top:50%}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.inline-grid{display:inline-grid}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-20{height:5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-full{height:100%}.h-px{height:1px}.min-h-\[80px\]{min-height:80px}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-5{width:1.25rem}.w-72{width:18rem}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-6xl{max-width:72rem}.max-w-lg{max-width:32rem}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-y-\[-50\%\]{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-0\.5{gap:.125rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-l{border-left-width:1px}.border-input{--tw-border-opacity:1;border-color:oklch(var(--v-color-input)/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.bg-background{--tw-bg-opacity:1;background-color:oklch(var(--v-color-background)/var(--tw-bg-opacity,1))}.bg-border{--tw-bg-opacity:1;background-color:oklch(var(--v-color-border)/var(--tw-bg-opacity,1))}.bg-card{--tw-bg-opacity:1;background-color:oklch(var(--v-color-card)/var(--tw-bg-opacity,1))}.bg-destructive{--tw-bg-opacity:1;background-color:oklch(var(--v-color-destructive)/var(--tw-bg-opacity,1))}.bg-input{--tw-bg-opacity:1;background-color:oklch(var(--v-color-input)/var(--tw-bg-opacity,1))}.bg-muted{--tw-bg-opacity:1;background-color:oklch(var(--v-color-muted)/var(--tw-bg-opacity,1))}.bg-popover{--tw-bg-opacity:1;background-color:oklch(var(--v-color-popover)/var(--tw-bg-opacity,1))}.bg-primary{--tw-bg-opacity:1;background-color:oklch(var(--v-color-primary)/var(--tw-bg-opacity,1))}.bg-secondary{--tw-bg-opacity:1;background-color:oklch(var(--v-color-secondary)/var(--tw-bg-opacity,1))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.pt-0{padding-top:0}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:1.35;font-weight:600}.text-3xl{font-size:1.875rem;line-height:1.3;font-weight:700}.text-4xl{font-size:2.25rem;line-height:1.2;font-weight:700}.text-5xl{font-size:3rem;line-height:1.1;font-weight:800}.text-base{font-size:1rem;line-height:1.5;font-weight:400}.text-lg{font-size:1.125rem;line-height:1.45;font-weight:500}.text-sm{font-size:.875rem;line-height:1.55;font-weight:400}.text-xl{font-size:1.25rem;line-height:1.4;font-weight:600}.text-xs{font-size:.75rem;line-height:1.6;font-weight:400}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-card-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-card-foreground)/var(--tw-text-opacity,1))}.text-destructive-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-destructive-foreground)/var(--tw-text-opacity,1))}.text-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-foreground)/var(--tw-text-opacity,1))}.text-muted-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-muted-foreground)/var(--tw-text-opacity,1))}.text-popover-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-popover-foreground)/var(--tw-text-opacity,1))}.text-primary{--tw-text-opacity:1;color:oklch(var(--v-color-primary)/var(--tw-text-opacity,1))}.text-primary-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-primary-foreground)/var(--tw-text-opacity,1))}.text-secondary-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-secondary-foreground)/var(--tw-text-opacity,1))}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:oklch(var(--v-color-primary)/1)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-offset-background{--tw-ring-offset-color:oklch(var(--v-color-background)/1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.55;font-weight:400}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{--tw-text-opacity:1;color:oklch(var(--v-color-muted-foreground)/var(--tw-text-opacity,1))}.placeholder\:text-muted-foreground::placeholder{--tw-text-opacity:1;color:oklch(var(--v-color-muted-foreground)/var(--tw-text-opacity,1))}.hover\:bg-accent:hover{--tw-bg-opacity:1;background-color:oklch(var(--v-color-accent)/var(--tw-bg-opacity,1))}.hover\:bg-destructive\/90:hover{background-color:oklch(var(--v-color-destructive)/.9)}.hover\:bg-primary\/90:hover{background-color:oklch(var(--v-color-primary)/.9)}.hover\:bg-secondary\/80:hover{background-color:oklch(var(--v-color-secondary)/.8)}.hover\:text-accent-foreground:hover{--tw-text-opacity:1;color:oklch(var(--v-color-accent-foreground)/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-opacity:1;--tw-ring-color:oklch(var(--v-color-ring)/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-opacity:1;--tw-ring-color:oklch(var(--v-color-ring)/var(--tw-ring-opacity,1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}}
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--v-color-background:98% 0.005 240;--v-color-foreground:12% 0.01 240;--v-color-card:100% 0 0;--v-color-card-foreground:12% 0.01 240;--v-color-popover:100% 0 0;--v-color-popover-foreground:12% 0.01 240;--v-color-primary:55% 0.2 250;--v-color-primary-foreground:99% 0.005 250;--v-color-secondary:95% 0.01 240;--v-color-secondary-foreground:20% 0.02 240;--v-color-muted:95% 0.008 240;--v-color-muted-foreground:55% 0.015 240;--v-color-accent:95% 0.01 240;--v-color-accent-foreground:20% 0.02 240;--v-color-destructive:55% 0.22 27;--v-color-destructive-foreground:99% 0.005 27;--v-color-success:55% 0.18 145;--v-color-success-foreground:99% 0.005 145;--v-color-warning:70% 0.18 65;--v-color-warning-foreground:20% 0.05 65;--v-color-border:90% 0.008 240;--v-color-input:90% 0.008 240;--v-color-ring:55% 0.2 250}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-0{top:0;bottom:0}.bottom-full{bottom:100%}.left-1\/2,.left-\[50\%\]{left:50%}.right-0{right:0}.top-16{top:4rem}.top-\[50\%\]{top:50%}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.inline-grid{display:inline-grid}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-20{height:5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-full{height:100%}.h-px{height:1px}.min-h-\[80px\]{min-height:80px}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-5{width:1.25rem}.w-72{width:18rem}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-6xl{max-width:72rem}.max-w-lg{max-width:32rem}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-y-\[-50\%\]{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-0\.5{gap:.125rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-l{border-left-width:1px}.border-input{--tw-border-opacity:1;border-color:oklch(var(--v-color-input)/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.bg-background{--tw-bg-opacity:1;background-color:oklch(var(--v-color-background)/var(--tw-bg-opacity,1))}.bg-border{--tw-bg-opacity:1;background-color:oklch(var(--v-color-border)/var(--tw-bg-opacity,1))}.bg-card{--tw-bg-opacity:1;background-color:oklch(var(--v-color-card)/var(--tw-bg-opacity,1))}.bg-destructive{--tw-bg-opacity:1;background-color:oklch(var(--v-color-destructive)/var(--tw-bg-opacity,1))}.bg-input{--tw-bg-opacity:1;background-color:oklch(var(--v-color-input)/var(--tw-bg-opacity,1))}.bg-muted{--tw-bg-opacity:1;background-color:oklch(var(--v-color-muted)/var(--tw-bg-opacity,1))}.bg-popover{--tw-bg-opacity:1;background-color:oklch(var(--v-color-popover)/var(--tw-bg-opacity,1))}.bg-primary{--tw-bg-opacity:1;background-color:oklch(var(--v-color-primary)/var(--tw-bg-opacity,1))}.bg-secondary{--tw-bg-opacity:1;background-color:oklch(var(--v-color-secondary)/var(--tw-bg-opacity,1))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.pt-0{padding-top:0}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:1.35;font-weight:600}.text-3xl{font-size:1.875rem;line-height:1.3;font-weight:700}.text-4xl{font-size:2.25rem;line-height:1.2;font-weight:700}.text-5xl{font-size:3rem;line-height:1.1;font-weight:800}.text-base{font-size:1rem;line-height:1.5;font-weight:400}.text-lg{font-size:1.125rem;line-height:1.45;font-weight:500}.text-sm{font-size:.875rem;line-height:1.55;font-weight:400}.text-xl{font-size:1.25rem;line-height:1.4;font-weight:600}.text-xs{font-size:.75rem;line-height:1.6;font-weight:400}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-card-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-card-foreground)/var(--tw-text-opacity,1))}.text-destructive-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-destructive-foreground)/var(--tw-text-opacity,1))}.text-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-foreground)/var(--tw-text-opacity,1))}.text-muted-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-muted-foreground)/var(--tw-text-opacity,1))}.text-popover-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-popover-foreground)/var(--tw-text-opacity,1))}.text-primary{--tw-text-opacity:1;color:oklch(var(--v-color-primary)/var(--tw-text-opacity,1))}.text-primary-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-primary-foreground)/var(--tw-text-opacity,1))}.text-secondary-foreground{--tw-text-opacity:1;color:oklch(var(--v-color-secondary-foreground)/var(--tw-text-opacity,1))}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:oklch(var(--v-color-primary)/1)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-offset-background{--tw-ring-offset-color:oklch(var(--v-color-background)/1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.55;font-weight:400}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{--tw-text-opacity:1;color:oklch(var(--v-color-muted-foreground)/var(--tw-text-opacity,1))}.placeholder\:text-muted-foreground::placeholder{--tw-text-opacity:1;color:oklch(var(--v-color-muted-foreground)/var(--tw-text-opacity,1))}.hover\:bg-accent:hover{--tw-bg-opacity:1;background-color:oklch(var(--v-color-accent)/var(--tw-bg-opacity,1))}.hover\:bg-destructive\/90:hover{background-color:oklch(var(--v-color-destructive)/.9)}.hover\:bg-primary\/90:hover{background-color:oklch(var(--v-color-primary)/.9)}.hover\:bg-secondary\/80:hover{background-color:oklch(var(--v-color-secondary)/.8)}.hover\:text-accent-foreground:hover{--tw-text-opacity:1;color:oklch(var(--v-color-accent-foreground)/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-opacity:1;--tw-ring-color:oklch(var(--v-color-ring)/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-opacity:1;--tw-ring-color:oklch(var(--v-color-ring)/var(--tw-ring-opacity,1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@booga/vblocks",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Composed section blocks: hero, CTA, FAQ, footer, gallery, portfolio, post, team, testimonial, blog, business, features. Schema-validated content, vUi primitives, DSL-styled.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|