@booga/vblocks 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/blog/index.cjs +8 -8
- package/dist/blog/index.cjs.map +1 -1
- package/dist/blog/index.js +8 -8
- package/dist/blog/index.js.map +1 -1
- package/dist/business/index.cjs +1 -1
- package/dist/business/index.cjs.map +1 -1
- package/dist/business/index.js +1 -1
- package/dist/business/index.js.map +1 -1
- package/dist/cta/index.cjs +2 -2
- package/dist/cta/index.cjs.map +1 -1
- package/dist/cta/index.js +2 -2
- package/dist/cta/index.js.map +1 -1
- package/dist/features/index.cjs +1 -1
- package/dist/features/index.cjs.map +1 -1
- package/dist/features/index.js +1 -1
- package/dist/features/index.js.map +1 -1
- package/dist/gallery/index.cjs +1 -1
- package/dist/gallery/index.cjs.map +1 -1
- package/dist/gallery/index.js +1 -1
- package/dist/gallery/index.js.map +1 -1
- package/dist/hero/index.cjs +2 -2
- package/dist/hero/index.cjs.map +1 -1
- package/dist/hero/index.js +2 -2
- package/dist/hero/index.js.map +1 -1
- package/dist/index.cjs +24 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +25 -30
- package/dist/index.js.map +1 -1
- package/dist/portfolio/index.cjs +3 -3
- package/dist/portfolio/index.cjs.map +1 -1
- package/dist/portfolio/index.js +3 -3
- package/dist/portfolio/index.js.map +1 -1
- package/dist/post/index.cjs +3 -3
- package/dist/post/index.cjs.map +1 -1
- package/dist/post/index.js +3 -3
- package/dist/post/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/team/index.cjs +1 -1
- package/dist/team/index.cjs.map +1 -1
- package/dist/team/index.js +1 -1
- package/dist/team/index.js.map +1 -1
- package/dist/testimonial/index.cjs +2 -7
- package/dist/testimonial/index.cjs.map +1 -1
- package/dist/testimonial/index.js +3 -8
- package/dist/testimonial/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -43,7 +43,7 @@ var HeroSplitContentSchema = zod.z.object({
|
|
|
43
43
|
function HeroSplit({ content, theme }) {
|
|
44
44
|
HeroSplitContentSchema.parse(content);
|
|
45
45
|
const { eyebrow, heading, description, primaryCta, secondaryCta, image } = content;
|
|
46
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py:
|
|
46
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 24, gap: 12, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
|
|
47
47
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
|
|
48
48
|
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
|
|
49
49
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
|
|
@@ -86,7 +86,7 @@ function HeroCentered({ content, theme }) {
|
|
|
86
86
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 24, gap: 8, align: "center", className: vui.cn("max-w-3xl mx-auto text-center"), children: [
|
|
87
87
|
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-sm font-semibold uppercase tracking-widest"), children: eyebrow }),
|
|
88
88
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-5xl font-bold tracking-tight leading-tight"), children: heading }),
|
|
89
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
|
|
90
90
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
|
|
91
91
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, children: primaryCta.label }),
|
|
92
92
|
secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: secondaryCta.href, variant: "outline", children: secondaryCta.label })
|
|
@@ -112,7 +112,7 @@ function CtaSplit({ content, theme }) {
|
|
|
112
112
|
const { heading, description, primaryCta, image } = content;
|
|
113
113
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 12, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
|
|
114
114
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
|
|
115
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-
|
|
115
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
|
|
116
116
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
|
|
117
117
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, size: "lg", children: primaryCta.label })
|
|
118
118
|
] }),
|
|
@@ -145,7 +145,7 @@ function CtaCentered({ content, theme }) {
|
|
|
145
145
|
CtaCenteredContentSchema.parse(content);
|
|
146
146
|
const { heading, description, primaryCta, secondaryCta } = content;
|
|
147
147
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, gap: 8, align: "center", className: vui.cn("max-w-2xl mx-auto text-center py-20"), children: [
|
|
148
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
|
|
149
149
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
|
|
150
150
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
|
|
151
151
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, size: "lg", children: primaryCta.label }),
|
|
@@ -354,7 +354,7 @@ var GalleryGridContentSchema = zod.z.object({
|
|
|
354
354
|
function GalleryGrid({ content, theme }) {
|
|
355
355
|
GalleryGridContentSchema.parse(content);
|
|
356
356
|
const { items } = content;
|
|
357
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, px: 6, py:
|
|
357
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Gallery", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, px: 6, py: 16, gap: 4, className: vui.cn("max-w-6xl mx-auto"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(DBox, { as: "figure", m: 0, children: [
|
|
358
358
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
359
359
|
DBox,
|
|
360
360
|
{
|
|
@@ -406,7 +406,7 @@ function PortfolioSplit({ content, theme }) {
|
|
|
406
406
|
}
|
|
407
407
|
),
|
|
408
408
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
409
|
-
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: item.category }),
|
|
409
|
+
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: item.category }),
|
|
410
410
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-lg"), children: item.title })
|
|
411
411
|
] }) })
|
|
412
412
|
] }, i)) })
|
|
@@ -434,7 +434,7 @@ var PortfolioGridContentSchema = zod.z.object({
|
|
|
434
434
|
function PortfolioGrid({ content, theme }) {
|
|
435
435
|
PortfolioGridContentSchema.parse(content);
|
|
436
436
|
const { items } = content;
|
|
437
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Portfolio", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, px: 6, py:
|
|
437
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": "Portfolio", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 2, px: 6, py: 16, gap: 6, className: vui.cn("max-w-6xl mx-auto"), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(vui.Card, { children: [
|
|
438
438
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
439
439
|
DBox,
|
|
440
440
|
{
|
|
@@ -445,7 +445,7 @@ function PortfolioGrid({ content, theme }) {
|
|
|
445
445
|
}
|
|
446
446
|
),
|
|
447
447
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
448
|
-
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: item.category }),
|
|
448
|
+
/* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: item.category }),
|
|
449
449
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold text-lg"), children: item.title })
|
|
450
450
|
] }) })
|
|
451
451
|
] }, i)) }) });
|
|
@@ -473,8 +473,8 @@ function PostSplit({ content, theme }) {
|
|
|
473
473
|
const { title, author, date, category, body, image } = content;
|
|
474
474
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "start", className: vui.cn("max-w-6xl mx-auto"), children: [
|
|
475
475
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, className: vui.cn("sticky top-16"), children: [
|
|
476
|
-
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: category }),
|
|
477
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-
|
|
476
|
+
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: category }),
|
|
477
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-4xl font-bold tracking-tight leading-snug"), children: title }),
|
|
478
478
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Separator, {}),
|
|
479
479
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 2, color: "muted", className: vui.cn("text-sm"), children: [
|
|
480
480
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: author }),
|
|
@@ -517,7 +517,7 @@ function PostCentered({ content, theme }) {
|
|
|
517
517
|
PostCenteredContentSchema.parse(content);
|
|
518
518
|
const { title, author, date, category, body } = content;
|
|
519
519
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "article", style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, gap: 6, className: vui.cn("max-w-2xl mx-auto"), children: [
|
|
520
|
-
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: category }),
|
|
520
|
+
category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: category }),
|
|
521
521
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h1", className: vui.cn("text-4xl font-bold tracking-tight leading-snug"), children: title }),
|
|
522
522
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 2, color: "muted", className: vui.cn("text-sm"), children: [
|
|
523
523
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: author }),
|
|
@@ -594,7 +594,7 @@ function TeamGrid({ content, theme }) {
|
|
|
594
594
|
const { heading, members } = content;
|
|
595
595
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": heading, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { px: 6, py: 16, className: vui.cn("max-w-6xl mx-auto gap-10"), children: [
|
|
596
596
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight text-center"), children: heading }),
|
|
597
|
-
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: members.map((member, i) => /* @__PURE__ */ jsxRuntime.jsx(vui.Card, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap:
|
|
597
|
+
/* @__PURE__ */ jsxRuntime.jsx(DGrid, { columns: 3, gap: 6, children: members.map((member, i) => /* @__PURE__ */ jsxRuntime.jsx(vui.Card, { children: /* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 4, align: "center", py: 6, className: vui.cn("text-center"), children: [
|
|
598
598
|
/* @__PURE__ */ jsxRuntime.jsxs(vui.Avatar, { className: vui.cn("w-16 h-16"), children: [
|
|
599
599
|
/* @__PURE__ */ jsxRuntime.jsx(vui.AvatarImage, { src: member.avatar.src, alt: member.avatar.alt }),
|
|
600
600
|
/* @__PURE__ */ jsxRuntime.jsx(vui.AvatarFallback, { children: member.name.slice(0, 2).toUpperCase() })
|
|
@@ -642,14 +642,9 @@ function TestimonialSplit({ content, theme }) {
|
|
|
642
642
|
/* @__PURE__ */ jsxRuntime.jsx(vui.AvatarImage, { src: avatar.src, alt: avatar.alt }),
|
|
643
643
|
/* @__PURE__ */ jsxRuntime.jsx(vui.AvatarFallback, { children: author.slice(0, 2).toUpperCase() })
|
|
644
644
|
] }),
|
|
645
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap:
|
|
645
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 0, color: "muted", className: vui.cn("text-sm"), children: [
|
|
646
646
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "cite", color: "fg", className: vui.cn("font-semibold not-italic"), children: author }),
|
|
647
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children:
|
|
648
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: role }),
|
|
649
|
-
company && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
650
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: "at" }),
|
|
651
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: company })
|
|
652
|
-
] })
|
|
647
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", children: `, ${company ? `${role} at ${company}` : role}` })
|
|
653
648
|
] })
|
|
654
649
|
] })
|
|
655
650
|
] }) });
|
|
@@ -736,8 +731,8 @@ function BlogSplit({ content, theme }) {
|
|
|
736
731
|
}
|
|
737
732
|
),
|
|
738
733
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
739
|
-
featured.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: featured.category }),
|
|
740
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-
|
|
734
|
+
featured.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: featured.category }),
|
|
735
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold"), children: featured.title }),
|
|
741
736
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: featured.excerpt }),
|
|
742
737
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: featured.date, color: "muted", className: vui.cn("text-xs"), children: featured.date })
|
|
743
738
|
] })
|
|
@@ -753,8 +748,8 @@ function BlogSplit({ content, theme }) {
|
|
|
753
748
|
}
|
|
754
749
|
),
|
|
755
750
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
|
|
756
|
-
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: post.category }),
|
|
757
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold leading-snug"), children: post.title }),
|
|
751
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: post.category }),
|
|
752
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold leading-snug"), children: post.title }),
|
|
758
753
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: vui.cn("text-xs"), children: post.date })
|
|
759
754
|
] })
|
|
760
755
|
] }) }) }, i)) })
|
|
@@ -767,7 +762,7 @@ var BlogSplitDefaultContent = {
|
|
|
767
762
|
heading: "Latest posts",
|
|
768
763
|
posts: [
|
|
769
764
|
{ title: "Designing for composability", excerpt: "How modular thinking unlocks maintainable systems at scale.", date: "2026-05-01", category: "Design", image: { src: "https://placehold.co/600x400", alt: "Design systems post" } },
|
|
770
|
-
{ title: "Type-safe content at runtime", excerpt: "Zod schemas as the single source of truth for block content.", date: "2026-04-18", image: { src: "https://placehold.co/400x280", alt: "Type safety post" } },
|
|
765
|
+
{ title: "Type-safe content at runtime", excerpt: "Zod schemas as the single source of truth for block content.", date: "2026-04-18", category: "Engineering", image: { src: "https://placehold.co/400x280", alt: "Type safety post" } },
|
|
771
766
|
{ title: "Tree-shaking section blocks", excerpt: "Per-category entry points and how they keep bundles lean.", date: "2026-04-05", category: "Engineering", image: { src: "https://placehold.co/400x280", alt: "Tree-shaking post" } }
|
|
772
767
|
]
|
|
773
768
|
};
|
|
@@ -798,8 +793,8 @@ function BlogGrid({ content, theme }) {
|
|
|
798
793
|
}
|
|
799
794
|
),
|
|
800
795
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
801
|
-
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: post.category }),
|
|
802
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold leading-snug"), children: post.title }),
|
|
796
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: post.category }),
|
|
797
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold leading-snug"), children: post.title }),
|
|
803
798
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: post.excerpt }),
|
|
804
799
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: vui.cn("text-xs"), children: post.date })
|
|
805
800
|
] }) })
|
|
@@ -812,7 +807,7 @@ var BlogGridDefaultContent = {
|
|
|
812
807
|
heading: "From the blog",
|
|
813
808
|
posts: [
|
|
814
809
|
{ title: "Designing for composability", excerpt: "Modular thinking at scale.", date: "2026-05-01", category: "Design", image: { src: "https://placehold.co/480x320", alt: "Design post" } },
|
|
815
|
-
{ title: "Type-safe content at runtime", excerpt: "Zod as single source of truth.", date: "2026-04-18", image: { src: "https://placehold.co/480x320", alt: "Types post" } },
|
|
810
|
+
{ title: "Type-safe content at runtime", excerpt: "Zod as single source of truth.", date: "2026-04-18", category: "Engineering", image: { src: "https://placehold.co/480x320", alt: "Types post" } },
|
|
816
811
|
{ title: "Tree-shaking section blocks", excerpt: "Lean bundles, per-category entry points.", date: "2026-04-05", category: "Engineering", image: { src: "https://placehold.co/480x320", alt: "Bundling post" } }
|
|
817
812
|
]
|
|
818
813
|
};
|
|
@@ -834,7 +829,7 @@ function BusinessSplit({ content, theme }) {
|
|
|
834
829
|
return /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "section", "aria-label": name, style: themeStyle(theme), children: /* @__PURE__ */ jsxRuntime.jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "center", className: vui.cn("max-w-6xl mx-auto"), children: [
|
|
835
830
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
|
|
836
831
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
837
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-
|
|
832
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: name }),
|
|
838
833
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-xl"), children: tagline })
|
|
839
834
|
] }),
|
|
840
835
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg leading-relaxed"), children: description }),
|
|
@@ -919,7 +914,7 @@ function FeaturesSplit({ content, theme }) {
|
|
|
919
914
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "ul", m: 0, p: 0, gap: 8, display: "flex", className: vui.cn("list-none flex-col"), children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "li", children: /* @__PURE__ */ jsxRuntime.jsxs(DInline, { gap: 4, align: "start", children: [
|
|
920
915
|
feature.icon && /* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "span", className: vui.cn("text-xl flex-shrink-0 mt-0.5"), "aria-hidden": "true", children: feature.icon }),
|
|
921
916
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
|
|
922
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold"), children: feature.title }),
|
|
917
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold"), children: feature.title }),
|
|
923
918
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: feature.description })
|
|
924
919
|
] })
|
|
925
920
|
] }) }, i)) })
|