@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/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,50 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.3] - 2026-05-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Precompiled `dist/styles.css` omitted most of the spacing scale (`gap-6`,
|
|
13
|
+
`px-6`, `py-16`, …) and every color-role utility. `dsl()` builds those class
|
|
14
|
+
names at runtime via template literals, which Tailwind's content scanner
|
|
15
|
+
cannot see, so the precompiled build dropped them — blocks rendered with
|
|
16
|
+
collapsed gaps and padding, and all `color="muted"` text fell back to black
|
|
17
|
+
instead of muted grey. `tailwind.config.js` now safelists `@booga/vdsl`'s
|
|
18
|
+
`dslSafelist`; the styled-render gate asserts full coverage so it cannot
|
|
19
|
+
regress. Requires `@booga/vdsl ^0.2.0`, whose color tokens also now resolve
|
|
20
|
+
through vTheme's role contract (`text-muted-foreground`, `bg-accent`, …)
|
|
21
|
+
instead of invalid raw-channel `var()` references.
|
|
22
|
+
- BlogSplit default content: the first secondary post lacked a `category`, so
|
|
23
|
+
its card rendered without the badge its sibling cards had.
|
|
24
|
+
- TestimonialSplit attribution rendered "Jordan Ellis , Product Lead at Acme"
|
|
25
|
+
with a stray space before the comma — the comma was a separately gapped span.
|
|
26
|
+
Attribution is now a single run: "Jordan Ellis, Product Lead at Acme".
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- Unified the type hierarchy across all blocks. Section headings were a mix of
|
|
31
|
+
`text-3xl` and `text-4xl`; they are now uniformly `text-3xl` (`text-4xl` for
|
|
32
|
+
the PostSplit article `<h1>`, `text-5xl` for hero `<h1>`). Card/feature `<h3>`
|
|
33
|
+
titles that carried no size class — and so rendered at body size — are now
|
|
34
|
+
`text-lg`, giving every block a consistent heading→subhead→body progression.
|
|
35
|
+
- HeroCentered description lowered from `text-xl` to `text-lg`. In vTheme's type
|
|
36
|
+
scale `text-xl` carries `font-weight: 600`, so the lead paragraph rendered as
|
|
37
|
+
a bold line competing with the heading; `text-lg` (weight 500) reads as a
|
|
38
|
+
proper subordinate lead.
|
|
39
|
+
- Unified section vertical rhythm: content blocks pad `py-16`, hero blocks
|
|
40
|
+
`py-24`, footers `py-12`. GalleryGrid and PortfolioGrid (`py-12`) and HeroSplit
|
|
41
|
+
(`py-16`) previously broke the scheme.
|
|
42
|
+
- TeamGrid member cards: avatar/name/role were jammed to the card top with dead
|
|
43
|
+
space below (`pt-4` + `gap-3`); now balanced (`py-6` + `gap-4`).
|
|
44
|
+
|
|
45
|
+
## [0.3.2] - 2026-05-18
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- Category `<Badge>` in BlogGrid, BlogSplit, PortfolioGrid, PortfolioSplit, PostCentered, and PostSplit stretched to a full-width bar: each sat in a flex-column `DStack` whose default `align-items: stretch` widened it. Badges now carry `self-start`, rendering as content-width chips.
|
|
50
|
+
- BlogGrid default content: the middle post lacked a `category`, so its card rendered without the badge the sibling cards had. All default posts now carry a category for a consistent three-card grid.
|
|
51
|
+
|
|
8
52
|
## [0.3.1] - 2026-05-18
|
|
9
53
|
|
|
10
54
|
### Fixed
|
package/dist/blog/index.cjs
CHANGED
|
@@ -57,8 +57,8 @@ function BlogSplit({ content, theme }) {
|
|
|
57
57
|
}
|
|
58
58
|
),
|
|
59
59
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
60
|
-
featured.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: featured.category }),
|
|
61
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-
|
|
60
|
+
featured.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: featured.category }),
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold"), children: featured.title }),
|
|
62
62
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", children: featured.excerpt }),
|
|
63
63
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: featured.date, color: "muted", className: vui.cn("text-xs"), children: featured.date })
|
|
64
64
|
] })
|
|
@@ -74,8 +74,8 @@ function BlogSplit({ content, theme }) {
|
|
|
74
74
|
}
|
|
75
75
|
),
|
|
76
76
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 1, children: [
|
|
77
|
-
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: post.category }),
|
|
78
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold leading-snug"), children: post.title }),
|
|
77
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: post.category }),
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold leading-snug"), children: post.title }),
|
|
79
79
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: vui.cn("text-xs"), children: post.date })
|
|
80
80
|
] })
|
|
81
81
|
] }) }) }, i)) })
|
|
@@ -88,7 +88,7 @@ var BlogSplitDefaultContent = {
|
|
|
88
88
|
heading: "Latest posts",
|
|
89
89
|
posts: [
|
|
90
90
|
{ 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" } },
|
|
91
|
-
{ 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" } },
|
|
91
|
+
{ 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" } },
|
|
92
92
|
{ 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" } }
|
|
93
93
|
]
|
|
94
94
|
};
|
|
@@ -119,8 +119,8 @@ function BlogGrid({ content, theme }) {
|
|
|
119
119
|
}
|
|
120
120
|
),
|
|
121
121
|
/* @__PURE__ */ jsxRuntime.jsx(vui.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
122
|
-
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", children: post.category }),
|
|
123
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("font-semibold leading-snug"), children: post.title }),
|
|
122
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx(vui.Badge, { variant: "secondary", className: vui.cn("self-start"), children: post.category }),
|
|
123
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h3", className: vui.cn("text-lg font-semibold leading-snug"), children: post.title }),
|
|
124
124
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-sm"), children: post.excerpt }),
|
|
125
125
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: vui.cn("text-xs"), children: post.date })
|
|
126
126
|
] }) })
|
|
@@ -133,7 +133,7 @@ var BlogGridDefaultContent = {
|
|
|
133
133
|
heading: "From the blog",
|
|
134
134
|
posts: [
|
|
135
135
|
{ title: "Designing for composability", excerpt: "Modular thinking at scale.", date: "2026-05-01", category: "Design", image: { src: "https://placehold.co/480x320", alt: "Design post" } },
|
|
136
|
-
{ 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" } },
|
|
136
|
+
{ 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" } },
|
|
137
137
|
{ 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" } }
|
|
138
138
|
]
|
|
139
139
|
};
|
package/dist/blog/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/blog/BlogSplit/schema.ts","../../src/blog/BlogSplit/index.tsx","../../src/blog/BlogSplit/default.ts","../../src/blog/BlogGrid/schema.ts","../../src/blog/BlogGrid/index.tsx","../../src/blog/BlogGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsxs","cn","jsx","Badge","BlogPostSchema","Card","CardContent"],"mappings":";;;;;;;;AAQO,IAAM,IAAA,GAAUA,SAAIC,OAAgC,CAAA;AACpD,IAAM,MAAA,GAAUD,SAAIE,SAAgC,CAAA;AACpD,IAAM,KAAA,GAAUF,SAAIG,QAAgC,CAAA;AACpCH,SAAII,UAAgC;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNyBC,MAAE,MAAA,CAAO;AAAA,EAChC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,MAAE,MAAA;AACV,CAAC,EAAE,MAAA;AAEI,IAAM,WAAA,GAAcA,MAAE,MAAA,CAAO;AAAA,EAClC,GAAA,EAAKA,MAAE,MAAA,EAAO;AAAA,EACd,GAAA,EAAKA,MAAE,MAAA;AACT,CAAC,EAAE,MAAA,EAAO;;;ACPV,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA,EAC9B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAO;AACT,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,OAAOA,KAAAA,CAAE,KAAA,CAAM,cAAc,CAAA,CAAE,IAAI,CAAC;AACtC,CAAC,EAAE,MAAA;ACRI,SAAS,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAM,EAAiC;AAC1E,EAAA,sBAAA,CAAuB,MAAM,OAAO,CAAA;AACpC,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,OAAA;AAC3B,EAAA,MAAM,CAAC,QAAA,EAAU,GAAG,IAAI,CAAA,GAAI,KAAA;AAC5B,EAAA,sCACG,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,eAAA,CAAC,MAAA,EAAA,EAAO,IAAI,CAAA,EAAG,EAAA,EAAI,IAAI,SAAA,EAAWC,MAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWD,MAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oCAC1E,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EAAG,OAAM,OAAA,EAC9B,QAAA,EAAA;AAAA,MAAA,QAAA,mCACE,IAAA,EAAA,EAAK,EAAA,EAAG,WACP,QAAA,kBAAAD,eAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,wBAAAE,cAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,KAAA;AAAA,YACH,GAAA,EAAK,SAAS,KAAA,CAAM,GAAA;AAAA,YACpB,GAAA,EAAK,SAAS,KAAA,CAAM,GAAA;AAAA,YACpB,SAAA,EAAWD,OAAG,6CAA6C;AAAA;AAAA,SAC7D;AAAA,wBACAD,eAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACV,QAAA,EAAA;AAAA,UAAA,QAAA,CAAS,4BAAYE,cAAA,CAACC,SAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAa,mBAAS,QAAA,EAAS,CAAA;AAAA,0BACpED,cAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWD,MAAA,CAAG,uBAAuB,CAAA,EAAI,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,CAAA;AAAA,yCACrE,IAAA,EAAA,EAAK,EAAA,EAAG,KAAI,KAAA,EAAM,OAAA,EAAS,mBAAS,OAAA,EAAQ,CAAA;AAAA,0BAC7CC,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,UAAU,QAAA,CAAS,IAAA,EAAM,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWD,MAAA,CAAG,SAAS,CAAA,EAAI,mBAAS,IAAA,EAAK;AAAA,SAAA,EAClG;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,qCAED,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,SAAQ,MAAA,EAAO,SAAA,EAAWA,MAAA,CAAG,oBAAoB,GAChF,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,EAAM,sBACfC,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EACP,yCAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EACP,QAAA,kBAAAF,eAAA,CAAC,SAAM,OAAA,EAAS,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAM,OAAA,EAC/B,QAAA,EAAA;AAAA,wBAAAE,cAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,KAAA;AAAA,YACH,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,YAChB,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,YAChB,SAAA,EAAWD,OAAG,6CAA6C;AAAA;AAAA,SAC7D;AAAA,wBACAD,eAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACV,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,4BAAYE,cAAA,CAACC,SAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAa,eAAK,QAAA,EAAS,CAAA;AAAA,0BAC5DD,cAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWD,MAAA,CAAG,4BAA4B,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,0BACvEC,cAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,UAAU,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWD,MAAA,CAAG,SAAS,CAAA,EAAI,eAAK,IAAA,EAAK;AAAA,SAAA,EAC1F;AAAA,OAAA,EACF,CAAA,EACF,CAAA,EAAA,EAfiB,CAgBnB,CACD,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACxDO,IAAM,uBAAA,GAA4C;AAAA,EACvD,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO;AAAA,IACL,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,+DAA+D,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,QAAA,EAAU,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,uBAAsB,EAAE;AAAA,IACnO,EAAE,KAAA,EAAO,8BAAA,EAAgC,OAAA,EAAS,8DAAA,EAAgE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,oBAAmB,EAAE;AAAA,IAC9M,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,6DAA6D,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,qBAAoB;AAAE;AAExO;ACNA,IAAMG,eAAAA,GAAiBL,MAAE,MAAA,CAAO;AAAA,EAC9B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAO;AACT,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,OAAOA,KAAAA,CAAE,KAAA,CAAMK,eAAc,CAAA,CAAE,IAAI,CAAC;AACtC,CAAC,EAAE,MAAA;ACRI,SAAS,QAAA,CAAS,EAAE,OAAA,EAAS,KAAA,EAAM,EAAgC;AACxE,EAAA,qBAAA,CAAsB,MAAM,OAAO,CAAA;AACnC,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,OAAA;AAC3B,EAAA,uBACEF,eAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAF,eAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,MAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWD,MAAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBAC3EC,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,GAAA,EAAK,GACrB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBA,cAAAA,CAACG,QAAA,EAAA,EACC,0BAAAL,eAAAA,CAAC,IAAA,EAAA,EAAK,IAAG,SAAA,EACP,QAAA,EAAA;AAAA,sBAAAE,cAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,KAAA;AAAA,UACH,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,UAChB,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,UAChB,SAAA,EAAWD,OAAG,+CAA+C;AAAA;AAAA,OAC/D;AAAA,sBACAC,eAACI,eAAA,EAAA,EACC,QAAA,kBAAAN,gBAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,CAAA,EACjB,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,QAAA,oBAAYE,cAAAA,CAACC,SAAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAa,eAAK,QAAA,EAAS,CAAA;AAAA,wBAC5DD,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,WAAWD,MAAAA,CAAG,4BAA4B,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,wBACvEC,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWD,MAAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,OAAA,EAAQ,CAAA;AAAA,wBACnEC,cAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,QAAO,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,SAAQ,SAAA,EAAWD,MAAAA,CAAG,SAAS,CAAA,EAAI,eAAK,IAAA,EAAK;AAAA,OAAA,EAC1F,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EAAA,EAhBS,CAiBX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACpCO,IAAM,sBAAA,GAA0C;AAAA,EACrD,OAAA,EAAS,eAAA;AAAA,EACT,KAAA,EAAO;AAAA,IACL,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,8BAA8B,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,QAAA,EAAU,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,eAAc,EAAE;AAAA,IAC1L,EAAE,KAAA,EAAO,8BAAA,EAAgC,OAAA,EAAS,gCAAA,EAAkC,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,cAAa,EAAE;AAAA,IAC1K,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,4CAA4C,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,iBAAgB;AAAE;AAEnN","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 BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogSplitContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogSplitContent = z.infer<typeof BlogSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BlogSplitContentSchema, type BlogSplitContent } from \"./schema\";\n\nexport function BlogSplit({ content, theme }: BlockProps<BlogSplitContent>) {\n BlogSplitContentSchema.parse(content);\n const { heading, posts } = content;\n const [featured, ...rest] = posts;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={2} gap={8} align=\"start\">\n {featured && (\n <DBox as=\"article\">\n <DStack gap={4}>\n <DBox\n as=\"img\"\n src={featured.image.src}\n alt={featured.image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-video\")}\n />\n <DStack gap={2}>\n {featured.category && <Badge variant=\"secondary\">{featured.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-xl font-semibold\")}>{featured.title}</DBox>\n <DBox as=\"p\" color=\"muted\">{featured.excerpt}</DBox>\n <DBox as=\"time\" dateTime={featured.date} color=\"muted\" className={cn(\"text-xs\")}>{featured.date}</DBox>\n </DStack>\n </DStack>\n </DBox>\n )}\n <DBox as=\"ul\" m={0} p={0} gap={6} display=\"flex\" className={cn(\"list-none flex-col\")}>\n {rest.map((post, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"article\">\n <DGrid columns={2} gap={4} align=\"start\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-md object-cover aspect-video\")}\n />\n <DStack gap={1}>\n {post.category && <Badge variant=\"secondary\">{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n </DBox>\n ))}\n </DBox>\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogSplitContent } from \"./schema\";\n\nexport const BlogSplitDefaultContent: BlogSplitContent = {\n heading: \"Latest posts\",\n posts: [\n { 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\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogGridContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogGridContent = z.infer<typeof BlogGridContentSchema>;\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 { BlogGridContentSchema, type BlogGridContent } from \"./schema\";\n\nexport function BlogGrid({ content, theme }: BlockProps<BlogGridContent>) {\n BlogGridContentSchema.parse(content);\n const { heading, posts } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={3} gap={6}>\n {posts.map((post, i) => (\n <Card key={i}>\n <DBox as=\"article\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n {post.category && <Badge variant=\"secondary\">{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{post.excerpt}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </CardContent>\n </DBox>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogGridContent } from \"./schema\";\n\nexport const BlogGridDefaultContent: BlogGridContent = {\n heading: \"From the blog\",\n posts: [\n { title: \"Designing for composability\", excerpt: \"Modular thinking at scale.\", date: \"2026-05-01\", category: \"Design\", image: { src: \"https://placehold.co/480x320\", alt: \"Design post\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/blog/BlogSplit/schema.ts","../../src/blog/BlogSplit/index.tsx","../../src/blog/BlogSplit/default.ts","../../src/blog/BlogGrid/schema.ts","../../src/blog/BlogGrid/index.tsx","../../src/blog/BlogGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsxs","cn","jsx","Badge","BlogPostSchema","Card","CardContent"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogSplitContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogSplitContent = z.infer<typeof BlogSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BlogSplitContentSchema, type BlogSplitContent } from \"./schema\";\n\nexport function BlogSplit({ content, theme }: BlockProps<BlogSplitContent>) {\n BlogSplitContentSchema.parse(content);\n const { heading, posts } = content;\n const [featured, ...rest] = posts;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={2} gap={8} align=\"start\">\n {featured && (\n <DBox as=\"article\">\n <DStack gap={4}>\n <DBox\n as=\"img\"\n src={featured.image.src}\n alt={featured.image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-video\")}\n />\n <DStack gap={2}>\n {featured.category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{featured.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-lg font-semibold\")}>{featured.title}</DBox>\n <DBox as=\"p\" color=\"muted\">{featured.excerpt}</DBox>\n <DBox as=\"time\" dateTime={featured.date} color=\"muted\" className={cn(\"text-xs\")}>{featured.date}</DBox>\n </DStack>\n </DStack>\n </DBox>\n )}\n <DBox as=\"ul\" m={0} p={0} gap={6} display=\"flex\" className={cn(\"list-none flex-col\")}>\n {rest.map((post, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"article\">\n <DGrid columns={2} gap={4} align=\"start\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-md object-cover aspect-video\")}\n />\n <DStack gap={1}>\n {post.category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-lg font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n </DBox>\n ))}\n </DBox>\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogSplitContent } from \"./schema\";\n\nexport const BlogSplitDefaultContent: BlogSplitContent = {\n heading: \"Latest posts\",\n posts: [\n { 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\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogGridContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogGridContent = z.infer<typeof BlogGridContentSchema>;\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 { BlogGridContentSchema, type BlogGridContent } from \"./schema\";\n\nexport function BlogGrid({ content, theme }: BlockProps<BlogGridContent>) {\n BlogGridContentSchema.parse(content);\n const { heading, posts } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={3} gap={6}>\n {posts.map((post, i) => (\n <Card key={i}>\n <DBox as=\"article\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n {post.category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-lg font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{post.excerpt}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </CardContent>\n </DBox>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogGridContent } from \"./schema\";\n\nexport const BlogGridDefaultContent: BlogGridContent = {\n heading: \"From the blog\",\n posts: [\n { title: \"Designing for composability\", excerpt: \"Modular thinking at scale.\", date: \"2026-05-01\", category: \"Design\", image: { src: \"https://placehold.co/480x320\", alt: \"Design post\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n"]}
|
package/dist/blog/index.js
CHANGED
|
@@ -55,8 +55,8 @@ function BlogSplit({ content, theme }) {
|
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
57
|
/* @__PURE__ */ jsxs(DStack, { gap: 2, children: [
|
|
58
|
-
featured.category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: featured.category }),
|
|
59
|
-
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("text-
|
|
58
|
+
featured.category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: featured.category }),
|
|
59
|
+
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("text-lg font-semibold"), children: featured.title }),
|
|
60
60
|
/* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", children: featured.excerpt }),
|
|
61
61
|
/* @__PURE__ */ jsx(DBox, { as: "time", dateTime: featured.date, color: "muted", className: cn("text-xs"), children: featured.date })
|
|
62
62
|
] })
|
|
@@ -72,8 +72,8 @@ function BlogSplit({ content, theme }) {
|
|
|
72
72
|
}
|
|
73
73
|
),
|
|
74
74
|
/* @__PURE__ */ jsxs(DStack, { gap: 1, children: [
|
|
75
|
-
post.category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: post.category }),
|
|
76
|
-
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("font-semibold leading-snug"), children: post.title }),
|
|
75
|
+
post.category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: post.category }),
|
|
76
|
+
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("text-lg font-semibold leading-snug"), children: post.title }),
|
|
77
77
|
/* @__PURE__ */ jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: cn("text-xs"), children: post.date })
|
|
78
78
|
] })
|
|
79
79
|
] }) }) }, i)) })
|
|
@@ -86,7 +86,7 @@ var BlogSplitDefaultContent = {
|
|
|
86
86
|
heading: "Latest posts",
|
|
87
87
|
posts: [
|
|
88
88
|
{ 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" } },
|
|
89
|
-
{ 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" } },
|
|
89
|
+
{ 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" } },
|
|
90
90
|
{ 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" } }
|
|
91
91
|
]
|
|
92
92
|
};
|
|
@@ -117,8 +117,8 @@ function BlogGrid({ content, theme }) {
|
|
|
117
117
|
}
|
|
118
118
|
),
|
|
119
119
|
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(DStack, { gap: 2, pt: 2, children: [
|
|
120
|
-
post.category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: post.category }),
|
|
121
|
-
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("font-semibold leading-snug"), children: post.title }),
|
|
120
|
+
post.category && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: cn("self-start"), children: post.category }),
|
|
121
|
+
/* @__PURE__ */ jsx(DBox, { as: "h3", className: cn("text-lg font-semibold leading-snug"), children: post.title }),
|
|
122
122
|
/* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-sm"), children: post.excerpt }),
|
|
123
123
|
/* @__PURE__ */ jsx(DBox, { as: "time", dateTime: post.date, color: "muted", className: cn("text-xs"), children: post.date })
|
|
124
124
|
] }) })
|
|
@@ -131,7 +131,7 @@ var BlogGridDefaultContent = {
|
|
|
131
131
|
heading: "From the blog",
|
|
132
132
|
posts: [
|
|
133
133
|
{ title: "Designing for composability", excerpt: "Modular thinking at scale.", date: "2026-05-01", category: "Design", image: { src: "https://placehold.co/480x320", alt: "Design post" } },
|
|
134
|
-
{ 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" } },
|
|
134
|
+
{ 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" } },
|
|
135
135
|
{ 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" } }
|
|
136
136
|
]
|
|
137
137
|
};
|
package/dist/blog/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/blog/BlogSplit/schema.ts","../../src/blog/BlogSplit/index.tsx","../../src/blog/BlogSplit/default.ts","../../src/blog/BlogGrid/schema.ts","../../src/blog/BlogGrid/index.tsx","../../src/blog/BlogGrid/default.ts"],"names":["z","BlogPostSchema","jsx","jsxs","cn","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 BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogSplitContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogSplitContent = z.infer<typeof BlogSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BlogSplitContentSchema, type BlogSplitContent } from \"./schema\";\n\nexport function BlogSplit({ content, theme }: BlockProps<BlogSplitContent>) {\n BlogSplitContentSchema.parse(content);\n const { heading, posts } = content;\n const [featured, ...rest] = posts;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={2} gap={8} align=\"start\">\n {featured && (\n <DBox as=\"article\">\n <DStack gap={4}>\n <DBox\n as=\"img\"\n src={featured.image.src}\n alt={featured.image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-video\")}\n />\n <DStack gap={2}>\n {featured.category && <Badge variant=\"secondary\">{featured.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-xl font-semibold\")}>{featured.title}</DBox>\n <DBox as=\"p\" color=\"muted\">{featured.excerpt}</DBox>\n <DBox as=\"time\" dateTime={featured.date} color=\"muted\" className={cn(\"text-xs\")}>{featured.date}</DBox>\n </DStack>\n </DStack>\n </DBox>\n )}\n <DBox as=\"ul\" m={0} p={0} gap={6} display=\"flex\" className={cn(\"list-none flex-col\")}>\n {rest.map((post, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"article\">\n <DGrid columns={2} gap={4} align=\"start\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-md object-cover aspect-video\")}\n />\n <DStack gap={1}>\n {post.category && <Badge variant=\"secondary\">{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n </DBox>\n ))}\n </DBox>\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogSplitContent } from \"./schema\";\n\nexport const BlogSplitDefaultContent: BlogSplitContent = {\n heading: \"Latest posts\",\n posts: [\n { 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\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogGridContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogGridContent = z.infer<typeof BlogGridContentSchema>;\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 { BlogGridContentSchema, type BlogGridContent } from \"./schema\";\n\nexport function BlogGrid({ content, theme }: BlockProps<BlogGridContent>) {\n BlogGridContentSchema.parse(content);\n const { heading, posts } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={3} gap={6}>\n {posts.map((post, i) => (\n <Card key={i}>\n <DBox as=\"article\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n {post.category && <Badge variant=\"secondary\">{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{post.excerpt}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </CardContent>\n </DBox>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogGridContent } from \"./schema\";\n\nexport const BlogGridDefaultContent: BlogGridContent = {\n heading: \"From the blog\",\n posts: [\n { title: \"Designing for composability\", excerpt: \"Modular thinking at scale.\", date: \"2026-05-01\", category: \"Design\", image: { src: \"https://placehold.co/480x320\", alt: \"Design post\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/blog/BlogSplit/schema.ts","../../src/blog/BlogSplit/index.tsx","../../src/blog/BlogSplit/default.ts","../../src/blog/BlogGrid/schema.ts","../../src/blog/BlogGrid/index.tsx","../../src/blog/BlogGrid/default.ts"],"names":["z","BlogPostSchema","jsx","jsxs","cn","Badge"],"mappings":";;;;;;AAQO,IAAM,IAAA,GAAU,IAAI,GAAgC,CAAA;AACpD,IAAM,MAAA,GAAU,IAAI,KAAgC,CAAA;AACpD,IAAM,KAAA,GAAU,IAAI,IAAgC,CAAA;AACpC,IAAI,MAAgC;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNyB,EAAE,MAAA,CAAO;AAAA,EAChC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,EAAE,MAAA;AAEI,IAAM,WAAA,GAAc,EAAE,MAAA,CAAO;AAAA,EAClC,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,GAAA,EAAK,EAAE,MAAA;AACT,CAAC,EAAE,MAAA,EAAO;;;ACPV,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AAAA,EAC9B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAO;AACT,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,OAAOA,CAAAA,CAAE,KAAA,CAAM,cAAc,CAAA,CAAE,IAAI,CAAC;AACtC,CAAC,EAAE,MAAA;ACRI,SAAS,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAM,EAAiC;AAC1E,EAAA,sBAAA,CAAuB,MAAM,OAAO,CAAA;AACpC,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,OAAA;AAC3B,EAAA,MAAM,CAAC,QAAA,EAAU,GAAG,IAAI,CAAA,GAAI,KAAA;AAC5B,EAAA,2BACG,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,IAAI,CAAA,EAAG,EAAA,EAAI,IAAI,SAAA,EAAW,EAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAW,EAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,yBAC1E,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EAAG,OAAM,OAAA,EAC9B,QAAA,EAAA;AAAA,MAAA,QAAA,wBACE,IAAA,EAAA,EAAK,EAAA,EAAG,WACP,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,KAAA;AAAA,YACH,GAAA,EAAK,SAAS,KAAA,CAAM,GAAA;AAAA,YACpB,GAAA,EAAK,SAAS,KAAA,CAAM,GAAA;AAAA,YACpB,SAAA,EAAW,GAAG,6CAA6C;AAAA;AAAA,SAC7D;AAAA,wBACA,IAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACV,QAAA,EAAA;AAAA,UAAA,QAAA,CAAS,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,WAAW,EAAA,CAAG,YAAY,CAAA,EAAI,QAAA,EAAA,QAAA,CAAS,QAAA,EAAS,CAAA;AAAA,0BACjG,GAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAW,EAAA,CAAG,uBAAuB,CAAA,EAAI,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,CAAA;AAAA,8BACrE,IAAA,EAAA,EAAK,EAAA,EAAG,KAAI,KAAA,EAAM,OAAA,EAAS,mBAAS,OAAA,EAAQ,CAAA;AAAA,0BAC7C,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,UAAU,QAAA,CAAS,IAAA,EAAM,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,mBAAS,IAAA,EAAK;AAAA,SAAA,EAClG;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,0BAED,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,SAAQ,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,oBAAoB,GAChF,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,EAAM,sBACf,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EACP,8BAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EACP,QAAA,kBAAA,IAAA,CAAC,SAAM,OAAA,EAAS,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAM,OAAA,EAC/B,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,KAAA;AAAA,YACH,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,YAChB,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,YAChB,SAAA,EAAW,GAAG,6CAA6C;AAAA;AAAA,SAC7D;AAAA,wBACA,IAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACV,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,WAAW,EAAA,CAAG,YAAY,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS,CAAA;AAAA,0BACzF,GAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAW,EAAA,CAAG,oCAAoC,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,0BAC/E,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,UAAU,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,eAAK,IAAA,EAAK;AAAA,SAAA,EAC1F;AAAA,OAAA,EACF,CAAA,EACF,CAAA,EAAA,EAfiB,CAgBnB,CACD,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACxDO,IAAM,uBAAA,GAA4C;AAAA,EACvD,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO;AAAA,IACL,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,+DAA+D,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,QAAA,EAAU,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,uBAAsB,EAAE;AAAA,IACnO,EAAE,KAAA,EAAO,8BAAA,EAAgC,OAAA,EAAS,gEAAgE,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,oBAAmB,EAAE;AAAA,IACvO,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,6DAA6D,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,qBAAoB;AAAE;AAExO;ACNA,IAAMC,eAAAA,GAAiBD,EAAE,MAAA,CAAO;AAAA,EAC9B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAO;AACT,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,OAAOA,CAAAA,CAAE,KAAA,CAAMC,eAAc,CAAA,CAAE,IAAI,CAAC;AACtC,CAAC,EAAE,MAAA;ACRI,SAAS,QAAA,CAAS,EAAE,OAAA,EAAS,KAAA,EAAM,EAAgC;AACxE,EAAA,qBAAA,CAAsB,MAAM,OAAO,CAAA;AACnC,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,OAAA;AAC3B,EAAA,uBACEC,IAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,IAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,EAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,EAAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBAC3EF,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,GAAA,EAAK,GACrB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBA,GAAAA,CAAC,IAAA,EAAA,EACC,0BAAAC,IAAAA,CAAC,IAAA,EAAA,EAAK,IAAG,SAAA,EACP,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,KAAA;AAAA,UACH,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,UAChB,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,UAChB,SAAA,EAAWE,GAAG,+CAA+C;AAAA;AAAA,OAC/D;AAAA,sBACAF,IAAC,WAAA,EAAA,EACC,QAAA,kBAAAC,KAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,CAAA,EACjB,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,QAAA,oBAAYD,GAAAA,CAACG,KAAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,SAAA,EAAWD,EAAAA,CAAG,YAAY,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS,CAAA;AAAA,wBACzFF,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,EAAAA,CAAG,oCAAoC,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,wBAC/EF,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAWE,EAAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,OAAA,EAAQ,CAAA;AAAA,wBACnEF,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,QAAO,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,SAAQ,SAAA,EAAWE,EAAAA,CAAG,SAAS,CAAA,EAAI,eAAK,IAAA,EAAK;AAAA,OAAA,EAC1F,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EAAA,EAhBS,CAiBX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACpCO,IAAM,sBAAA,GAA0C;AAAA,EACrD,OAAA,EAAS,eAAA;AAAA,EACT,KAAA,EAAO;AAAA,IACL,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,8BAA8B,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,QAAA,EAAU,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,eAAc,EAAE;AAAA,IAC1L,EAAE,KAAA,EAAO,8BAAA,EAAgC,OAAA,EAAS,kCAAkC,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,cAAa,EAAE;AAAA,IACnM,EAAE,KAAA,EAAO,6BAAA,EAA+B,OAAA,EAAS,4CAA4C,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,OAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,GAAA,EAAK,iBAAgB;AAAE;AAEnN","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 BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogSplitContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogSplitContent = z.infer<typeof BlogSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Badge, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BlogSplitContentSchema, type BlogSplitContent } from \"./schema\";\n\nexport function BlogSplit({ content, theme }: BlockProps<BlogSplitContent>) {\n BlogSplitContentSchema.parse(content);\n const { heading, posts } = content;\n const [featured, ...rest] = posts;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={2} gap={8} align=\"start\">\n {featured && (\n <DBox as=\"article\">\n <DStack gap={4}>\n <DBox\n as=\"img\"\n src={featured.image.src}\n alt={featured.image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-video\")}\n />\n <DStack gap={2}>\n {featured.category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{featured.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-lg font-semibold\")}>{featured.title}</DBox>\n <DBox as=\"p\" color=\"muted\">{featured.excerpt}</DBox>\n <DBox as=\"time\" dateTime={featured.date} color=\"muted\" className={cn(\"text-xs\")}>{featured.date}</DBox>\n </DStack>\n </DStack>\n </DBox>\n )}\n <DBox as=\"ul\" m={0} p={0} gap={6} display=\"flex\" className={cn(\"list-none flex-col\")}>\n {rest.map((post, i) => (\n <DBox as=\"li\" key={i}>\n <DBox as=\"article\">\n <DGrid columns={2} gap={4} align=\"start\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-md object-cover aspect-video\")}\n />\n <DStack gap={1}>\n {post.category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-lg font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </DGrid>\n </DBox>\n </DBox>\n ))}\n </DBox>\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogSplitContent } from \"./schema\";\n\nexport const BlogSplitDefaultContent: BlogSplitContent = {\n heading: \"Latest posts\",\n posts: [\n { 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\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst BlogPostSchema = z.object({\n title: z.string(),\n excerpt: z.string(),\n date: z.string(),\n category: z.string().optional(),\n image: ImageSchema,\n}).strict();\n\nexport const BlogGridContentSchema = z.object({\n heading: z.string(),\n posts: z.array(BlogPostSchema).min(1),\n}).strict();\n\nexport type BlogGridContent = z.infer<typeof BlogGridContentSchema>;\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 { BlogGridContentSchema, type BlogGridContent } from \"./schema\";\n\nexport function BlogGrid({ content, theme }: BlockProps<BlogGridContent>) {\n BlogGridContentSchema.parse(content);\n const { heading, posts } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{heading}</DBox>\n <DGrid columns={3} gap={6}>\n {posts.map((post, i) => (\n <Card key={i}>\n <DBox as=\"article\">\n <DBox\n as=\"img\"\n src={post.image.src}\n alt={post.image.alt}\n className={cn(\"w-full rounded-t-lg object-cover aspect-video\")}\n />\n <CardContent>\n <DStack gap={2} pt={2}>\n {post.category && <Badge variant=\"secondary\" className={cn(\"self-start\")}>{post.category}</Badge>}\n <DBox as=\"h3\" className={cn(\"text-lg font-semibold leading-snug\")}>{post.title}</DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{post.excerpt}</DBox>\n <DBox as=\"time\" dateTime={post.date} color=\"muted\" className={cn(\"text-xs\")}>{post.date}</DBox>\n </DStack>\n </CardContent>\n </DBox>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BlogGridContent } from \"./schema\";\n\nexport const BlogGridDefaultContent: BlogGridContent = {\n heading: \"From the blog\",\n posts: [\n { title: \"Designing for composability\", excerpt: \"Modular thinking at scale.\", date: \"2026-05-01\", category: \"Design\", image: { src: \"https://placehold.co/480x320\", alt: \"Design post\" } },\n { 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\" } },\n { 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\" } },\n ],\n};\n"]}
|
package/dist/business/index.cjs
CHANGED
|
@@ -46,7 +46,7 @@ function BusinessSplit({ content, theme }) {
|
|
|
46
46
|
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: [
|
|
47
47
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
|
|
48
48
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 2, children: [
|
|
49
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: name }),
|
|
50
50
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "accent", className: vui.cn("text-xl"), children: tagline })
|
|
51
51
|
] }),
|
|
52
52
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg leading-relaxed"), children: description }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Card","CardHeader","CardTitle","CardContent"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Card, CardContent, CardHeader, CardTitle, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.description}</DBox>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Card","CardHeader","CardTitle","CardContent"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Card, CardContent, CardHeader, CardTitle, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.description}</DBox>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
package/dist/business/index.js
CHANGED
|
@@ -44,7 +44,7 @@ function BusinessSplit({ content, theme }) {
|
|
|
44
44
|
return /* @__PURE__ */ jsx(DBox, { as: "section", "aria-label": name, style: themeStyle(theme), children: /* @__PURE__ */ jsxs(DGrid, { columns: 2, px: 6, py: 16, gap: 16, align: "center", className: cn("max-w-6xl mx-auto"), children: [
|
|
45
45
|
/* @__PURE__ */ jsxs(DStack, { gap: 6, children: [
|
|
46
46
|
/* @__PURE__ */ jsxs(DStack, { gap: 2, children: [
|
|
47
|
-
/* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-
|
|
47
|
+
/* @__PURE__ */ jsx(DBox, { as: "h2", className: cn("text-3xl font-bold tracking-tight"), children: name }),
|
|
48
48
|
/* @__PURE__ */ jsx(DBox, { as: "p", color: "accent", className: cn("text-xl"), children: tagline })
|
|
49
49
|
] }),
|
|
50
50
|
/* @__PURE__ */ jsx(DBox, { as: "p", color: "muted", className: cn("text-lg leading-relaxed"), children: description }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["z","jsx","jsxs","cn"],"mappings":";;;;;;AAQO,IAAM,IAAA,GAAU,IAAI,GAAgC,CAAA;AACpD,IAAM,MAAA,GAAU,IAAI,KAAgC,CAAA;AACpD,IAAM,KAAA,GAAU,IAAI,IAAgC,CAAA;AACpC,IAAI,MAAgC;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNyB,EAAE,MAAA,CAAO;AAAA,EAChC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,EAAE,MAAA;AAEI,IAAM,WAAA,GAAc,EAAE,MAAA,CAAO;AAAA,EAClC,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,GAAA,EAAK,EAAE,MAAA;AACT,CAAC,EAAE,MAAA,EAAO;;;ACPV,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EAC7B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,KAAA,EAAO,WAAA;AAAA,EACP,OAAA,EAAS,cAAc,QAAA;AACzB,CAAC,EAAE,MAAA;ACTI,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAM,EAAqC;AAClF,EAAA,0BAAA,CAA2B,MAAM,OAAO,CAAA;AACxC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,KAAA,EAAO,SAAQ,GAAI,OAAA;AACvD,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EAAU,YAAA,EAAY,MAAM,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,EAC1D,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,KAAA,EAAM,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,mBAAmB,CAAA,EACzF,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAW,EAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBACxE,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,UAAS,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACjE,CAAA;AAAA,sBACA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,SAAQ,SAAA,EAAW,EAAA,CAAG,yBAAyB,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,MACjF,OAAA,oBACC,IAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,KAAA,EAAM,OAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,6BAA6B,CAAA,EAChG,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,yBAAS,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAQ,kBAAQ,KAAA,EAAM,CAAA;AAAA,QAChD,QAAQ,KAAA,oBAAS,GAAA,CAAC,QAAK,EAAA,EAAG,MAAA,EAAQ,kBAAQ,KAAA,EAAM,CAAA;AAAA,QAChD,QAAQ,OAAA,oBAAW,GAAA,CAAC,QAAK,EAAA,EAAG,MAAA,EAAQ,kBAAQ,OAAA,EAAQ;AAAA,OAAA,EACvD;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,KAAA;AAAA,QACH,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,SAAA,EAAW,GAAG,8CAA8C;AAAA;AAAA;AAC9D,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACjCO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,EAAS,sDAAA;AAAA,EACT,WAAA,EAAa,iIAAA;AAAA,EACb,KAAA,EAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,KAAK,kBAAA,EAAmB;AAAA,EACtE,OAAA,EAAS,EAAE,KAAA,EAAO,mBAAA,EAAqB,SAAS,+BAAA;AAClD;ACNA,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EAC7B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,UAAUA,CAAAA,CAAE,KAAA,CAAM,aAAa,CAAA,CAAE,IAAI,CAAC;AACxC,CAAC,EAAE,MAAA;ACLI,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAM,EAAoC;AAChF,EAAA,yBAAA,CAA0B,MAAM,OAAO,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,OAAA;AAC9B,EAAA,uBACEC,IAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,IAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,EAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,EAAAA,CAAG,+CAA+C,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACvFF,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EACrB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACtBC,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,IAAC,UAAA,EAAA,EACC,QAAA,kBAAAC,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACV,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,IAAA,oBACPD,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,SAAA,EAAWE,EAAAA,CAAG,UAAU,CAAA,EAAG,aAAA,EAAY,MAAA,EAAQ,kBAAQ,IAAA,EAAK,CAAA;AAAA,wBAE9EF,GAAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,IAAA,EAAM,kBAAQ,KAAA,EAAM;AAAA,OAAA,EACpC,CAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,WAAWE,EAAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,aAAY,CAAA,EAC5E;AAAA,KAAA,EAAA,EAXS,CAYX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;AC/BO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACR,EAAE,KAAA,EAAO,kBAAA,EAAoB,WAAA,EAAa,4EAAA,EAAyE,MAAM,iBAAA,EAAM;AAAA,IAC/H,EAAE,KAAA,EAAO,WAAA,EAAa,WAAA,EAAa,gFAAA,EAAkF,MAAM,cAAA,EAAK;AAAA,IAChI,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,2EAAA,EAA6E,MAAM,cAAA,EAAK;AAAA,IAC7H,EAAE,KAAA,EAAO,gBAAA,EAAkB,WAAA,EAAa,qEAAA,EAAuE,MAAM,WAAA;AAAK;AAE9H","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Card, CardContent, CardHeader, CardTitle, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.description}</DBox>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/business/BusinessSplit/schema.ts","../../src/business/BusinessSplit/index.tsx","../../src/business/BusinessSplit/default.ts","../../src/business/BusinessGrid/schema.ts","../../src/business/BusinessGrid/index.tsx","../../src/business/BusinessGrid/default.ts"],"names":["z","jsx","jsxs","cn"],"mappings":";;;;;;AAQO,IAAM,IAAA,GAAU,IAAI,GAAgC,CAAA;AACpD,IAAM,MAAA,GAAU,IAAI,KAAgC,CAAA;AACpD,IAAM,KAAA,GAAU,IAAI,IAAgC,CAAA;AACpC,IAAI,MAAgC;;;ACNpD,SAAS,WAAW,KAAA,EAA6D;AACtF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GACvD;AACF;ACNyB,EAAE,MAAA,CAAO;AAAA,EAChC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,EAAE,MAAA;AAEI,IAAM,WAAA,GAAc,EAAE,MAAA,CAAO;AAAA,EAClC,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,GAAA,EAAK,EAAE,MAAA;AACT,CAAC,EAAE,MAAA,EAAO;;;ACPV,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EAC7B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,KAAA,EAAO,WAAA;AAAA,EACP,OAAA,EAAS,cAAc,QAAA;AACzB,CAAC,EAAE,MAAA;ACTI,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAM,EAAqC;AAClF,EAAA,0BAAA,CAA2B,MAAM,OAAO,CAAA;AACxC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,KAAA,EAAO,SAAQ,GAAI,OAAA;AACvD,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,SAAA,EAAU,YAAA,EAAY,MAAM,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,EAC1D,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,SAAS,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,KAAA,EAAM,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,mBAAmB,CAAA,EACzF,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAW,EAAA,CAAG,mCAAmC,GAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBACxE,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,UAAS,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACjE,CAAA;AAAA,sBACA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,SAAQ,SAAA,EAAW,EAAA,CAAG,yBAAyB,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,MACjF,OAAA,oBACC,IAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,KAAA,EAAM,OAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,6BAA6B,CAAA,EAChG,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,yBAAS,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAQ,kBAAQ,KAAA,EAAM,CAAA;AAAA,QAChD,QAAQ,KAAA,oBAAS,GAAA,CAAC,QAAK,EAAA,EAAG,MAAA,EAAQ,kBAAQ,KAAA,EAAM,CAAA;AAAA,QAChD,QAAQ,OAAA,oBAAW,GAAA,CAAC,QAAK,EAAA,EAAG,MAAA,EAAQ,kBAAQ,OAAA,EAAQ;AAAA,OAAA,EACvD;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,KAAA;AAAA,QACH,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,SAAA,EAAW,GAAG,8CAA8C;AAAA;AAAA;AAC9D,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACjCO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,EAAS,sDAAA;AAAA,EACT,WAAA,EAAa,iIAAA;AAAA,EACb,KAAA,EAAO,EAAE,GAAA,EAAK,8BAAA,EAAgC,KAAK,kBAAA,EAAmB;AAAA,EACtE,OAAA,EAAS,EAAE,KAAA,EAAO,mBAAA,EAAqB,SAAS,+BAAA;AAClD;ACNA,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EAC7B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC,EAAE,MAAA,EAAO;AAEH,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,UAAUA,CAAAA,CAAE,KAAA,CAAM,aAAa,CAAA,CAAE,IAAI,CAAC;AACxC,CAAC,EAAE,MAAA;ACLI,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAM,EAAoC;AAChF,EAAA,yBAAA,CAA0B,MAAM,OAAO,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,OAAA;AAC9B,EAAA,uBACEC,IAAC,IAAA,EAAA,EAAK,EAAA,EAAG,WAAU,YAAA,EAAY,OAAA,EAAS,OAAO,UAAA,CAAW,KAAK,GAC7D,QAAA,kBAAAC,IAAAA,CAAC,UAAO,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAI,SAAA,EAAWC,EAAAA,CAAG,0BAA0B,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,WAAWE,EAAAA,CAAG,+CAA+C,GAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACvFF,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA,EACrB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACtBC,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,IAAC,UAAA,EAAA,EACC,QAAA,kBAAAC,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAK,CAAA,EACV,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,IAAA,oBACPD,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,SAAA,EAAWE,EAAAA,CAAG,UAAU,CAAA,EAAG,aAAA,EAAY,MAAA,EAAQ,kBAAQ,IAAA,EAAK,CAAA;AAAA,wBAE9EF,GAAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,IAAA,EAAM,kBAAQ,KAAA,EAAM;AAAA,OAAA,EACpC,CAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,KAAA,EAAM,OAAA,EAAQ,WAAWE,EAAAA,CAAG,SAAS,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,aAAY,CAAA,EAC5E;AAAA,KAAA,EAAA,EAXS,CAYX,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;AC/BO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACR,EAAE,KAAA,EAAO,kBAAA,EAAoB,WAAA,EAAa,4EAAA,EAAyE,MAAM,iBAAA,EAAM;AAAA,IAC/H,EAAE,KAAA,EAAO,WAAA,EAAa,WAAA,EAAa,gFAAA,EAAkF,MAAM,cAAA,EAAK;AAAA,IAChI,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,2EAAA,EAA6E,MAAM,cAAA,EAAK;AAAA,IAC7H,EAAE,KAAA,EAAO,gBAAA,EAAkB,WAAA,EAAa,qEAAA,EAAuE,MAAM,WAAA;AAAK;AAE9H","file":"index.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { ImageSchema } from \"../../shared/schemas\";\n\nconst ContactSchema = z.object({\n phone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n}).strict();\n\nexport const BusinessSplitContentSchema = z.object({\n name: z.string(),\n tagline: z.string(),\n description: z.string(),\n image: ImageSchema,\n contact: ContactSchema.optional(),\n}).strict();\n\nexport type BusinessSplitContent = z.infer<typeof BusinessSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessSplitContentSchema, type BusinessSplitContent } from \"./schema\";\n\nexport function BusinessSplit({ content, theme }: BlockProps<BusinessSplitContent>) {\n BusinessSplitContentSchema.parse(content);\n const { name, tagline, description, image, contact } = content;\n return (\n <DBox as=\"section\" aria-label={name} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={16} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DStack gap={2}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>{name}</DBox>\n <DBox as=\"p\" color=\"accent\" className={cn(\"text-xl\")}>{tagline}</DBox>\n </DStack>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg leading-relaxed\")}>{description}</DBox>\n {contact && (\n <DBox as=\"address\" color=\"muted\" gap={1} display=\"flex\" className={cn(\"not-italic text-sm flex-col\")}>\n {contact.phone && <DBox as=\"span\">{contact.phone}</DBox>}\n {contact.email && <DBox as=\"span\">{contact.email}</DBox>}\n {contact.address && <DBox as=\"span\">{contact.address}</DBox>}\n </DBox>\n )}\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-square\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessSplitContent } from \"./schema\";\n\nexport const BusinessSplitDefaultContent: BusinessSplitContent = {\n name: \"Acme Studio\",\n tagline: \"Strategy, design, and engineering — end to end.\",\n description: \"We partner with ambitious teams to define, design, and ship products that matter. From early exploration through to production.\",\n image: { src: \"https://placehold.co/600x480\", alt: \"Studio workspace\" },\n contact: { email: \"hello@example.com\", address: \"12 Innovation Lane, Tech City\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nconst ServiceSchema = z.object({\n title: z.string(),\n description: z.string(),\n icon: z.string().optional(),\n}).strict();\n\nexport const BusinessGridContentSchema = z.object({\n heading: z.string(),\n services: z.array(ServiceSchema).min(1),\n}).strict();\n\nexport type BusinessGridContent = z.infer<typeof BusinessGridContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Card, CardContent, CardHeader, CardTitle, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { BusinessGridContentSchema, type BusinessGridContent } from \"./schema\";\n\nexport function BusinessGrid({ content, theme }: BlockProps<BusinessGridContent>) {\n BusinessGridContentSchema.parse(content);\n const { heading, services } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} py={16} className={cn(\"max-w-6xl mx-auto gap-10\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight text-center\")}>{heading}</DBox>\n <DGrid columns={2} gap={6}>\n {services.map((service, i) => (\n <Card key={i}>\n <CardHeader>\n <DStack gap={2}>\n {service.icon && (\n <DBox as=\"span\" className={cn(\"text-2xl\")} aria-hidden=\"true\">{service.icon}</DBox>\n )}\n <CardTitle as=\"h3\">{service.title}</CardTitle>\n </DStack>\n </CardHeader>\n <CardContent>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-sm\")}>{service.description}</DBox>\n </CardContent>\n </Card>\n ))}\n </DGrid>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type BusinessGridContent } from \"./schema\";\n\nexport const BusinessGridDefaultContent: BusinessGridContent = {\n heading: \"What we do\",\n services: [\n { title: \"Product strategy\", description: \"From market positioning to roadmap — we help teams move with clarity.\", icon: \"🗺️\" },\n { title: \"UX design\", description: \"Research-grounded design that reduces cognitive load and increases confidence.\", icon: \"✏️\" },\n { title: \"Engineering\", description: \"Full-stack delivery with a bias toward composable, testable architecture.\", icon: \"⚙️\" },\n { title: \"Design systems\", description: \"A single source of truth for tokens, components, and documentation.\", icon: \"🎨\" },\n ],\n};\n"]}
|
package/dist/cta/index.cjs
CHANGED
|
@@ -39,7 +39,7 @@ function CtaSplit({ content, theme }) {
|
|
|
39
39
|
const { heading, description, primaryCta, image } = content;
|
|
40
40
|
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: [
|
|
41
41
|
/* @__PURE__ */ jsxRuntime.jsxs(DStack, { gap: 6, children: [
|
|
42
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
|
|
43
43
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
|
|
44
44
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, size: "lg", children: primaryCta.label })
|
|
45
45
|
] }),
|
|
@@ -72,7 +72,7 @@ function CtaCentered({ content, theme }) {
|
|
|
72
72
|
CtaCenteredContentSchema.parse(content);
|
|
73
73
|
const { heading, description, primaryCta, secondaryCta } = content;
|
|
74
74
|
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: [
|
|
75
|
-
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "h2", className: vui.cn("text-3xl font-bold tracking-tight"), children: heading }),
|
|
76
76
|
/* @__PURE__ */ jsxRuntime.jsx(DBox, { as: "p", color: "muted", className: vui.cn("text-lg"), children: description }),
|
|
77
77
|
/* @__PURE__ */ jsxRuntime.jsxs(DInline, { wrap: true, gap: 3, justify: "center", children: [
|
|
78
78
|
/* @__PURE__ */ jsxRuntime.jsx(vui.Button, { as: "a", href: primaryCta.href, size: "lg", children: primaryCta.label }),
|
package/dist/cta/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/cta/CtaSplit/schema.ts","../../src/cta/CtaSplit/index.tsx","../../src/cta/CtaSplit/default.ts","../../src/cta/CtaCentered/schema.ts","../../src/cta/CtaCentered/index.tsx","../../src/cta/CtaCentered/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Button"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const CtaSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n image: ImageSchema,\n}).strict();\n\nexport type CtaSplitContent = z.infer<typeof CtaSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaSplitContentSchema, type CtaSplitContent } from \"./schema\";\n\nexport function CtaSplit({ content, theme }: BlockProps<CtaSplitContent>) {\n CtaSplitContentSchema.parse(content);\n const { heading, description, primaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">\n {primaryCta.label}\n </Button>\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaSplitContent } from \"./schema\";\n\nexport const CtaSplitDefaultContent: CtaSplitContent = {\n heading: \"Ready to get started?\",\n description: \"Join thousands of teams shipping faster with composable tooling.\",\n primaryCta: { label: \"Start free\", href: \"#\" },\n image: { src: \"https://placehold.co/480x320\", alt: \"Illustration\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const CtaCenteredContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type CtaCenteredContent = z.infer<typeof CtaCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaCenteredContentSchema, type CtaCenteredContent } from \"./schema\";\n\nexport function CtaCentered({ content, theme }: BlockProps<CtaCenteredContent>) {\n CtaCenteredContentSchema.parse(content);\n const { heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} gap={8} align=\"center\" className={cn(\"max-w-2xl mx-auto text-center py-20\")}>\n <DBox as=\"h2\" className={cn(\"text-4xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaCenteredContent } from \"./schema\";\n\nexport const CtaCenteredDefaultContent: CtaCenteredContent = {\n heading: \"Ready to get started?\",\n description: \"Ship faster with composable, typed section blocks.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives.ts","../../src/theme.ts","../../src/shared/schemas.ts","../../src/cta/CtaSplit/schema.ts","../../src/cta/CtaSplit/index.tsx","../../src/cta/CtaSplit/default.ts","../../src/cta/CtaCentered/schema.ts","../../src/cta/CtaCentered/index.tsx","../../src/cta/CtaCentered/default.ts"],"names":["dsl","Box","Stack","Grid","Inline","z","jsx","jsxs","cn","Button"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type ElementType } from \"react\";\nimport { dsl } from \"@booga/vdsl\";\nimport { Box, Stack, Grid, Inline } from \"@booga/vui\";\n\n// PolymorphicComponent is not structurally assignable to ElementType; dsl() uses\n// createElement() at runtime which accepts any callable, so the bridge is safe.\nexport const DBox = dsl(Box as unknown as ElementType);\nexport const DStack = dsl(Stack as unknown as ElementType);\nexport const DGrid = dsl(Grid as unknown as ElementType);\nexport const DInline = dsl(Inline as unknown as ElementType);\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CSSProperties } from \"react\";\nimport { type ThemeOverride } from \"./types\";\n\nexport function themeStyle(theme: ThemeOverride | undefined): CSSProperties | undefined {\n if (!theme) return undefined;\n return Object.fromEntries(\n Object.entries(theme).map(([k, v]) => [`--v-${k}`, v])\n ) as CSSProperties;\n}\n\nexport function clampedGridCols(n: number): 1 | 2 | 3 | 4 | 5 | 6 {\n return Math.max(1, Math.min(6, Math.round(n))) as 1 | 2 | 3 | 4 | 5 | 6;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\n\nexport const CtaSchema = z.object({\n label: z.string(),\n href: z.string(),\n}).strict();\n\nexport const ImageSchema = z.object({\n src: z.string(),\n alt: z.string(),\n}).strict();\n\nexport const AvatarSchema = ImageSchema;\n\nexport type Cta = z.infer<typeof CtaSchema>;\nexport type Image = z.infer<typeof ImageSchema>;\nexport type AvatarSrc = Image;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema, ImageSchema } from \"../../shared/schemas\";\n\nexport const CtaSplitContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n image: ImageSchema,\n}).strict();\n\nexport type CtaSplitContent = z.infer<typeof CtaSplitContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DGrid, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaSplitContentSchema, type CtaSplitContent } from \"./schema\";\n\nexport function CtaSplit({ content, theme }: BlockProps<CtaSplitContent>) {\n CtaSplitContentSchema.parse(content);\n const { heading, description, primaryCta, image } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DGrid columns={2} px={6} py={16} gap={12} align=\"center\" className={cn(\"max-w-6xl mx-auto\")}>\n <DStack gap={6}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">\n {primaryCta.label}\n </Button>\n </DStack>\n <DBox\n as=\"img\"\n src={image.src}\n alt={image.alt}\n className={cn(\"w-full rounded-lg object-cover aspect-video\")}\n />\n </DGrid>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaSplitContent } from \"./schema\";\n\nexport const CtaSplitDefaultContent: CtaSplitContent = {\n heading: \"Ready to get started?\",\n description: \"Join thousands of teams shipping faster with composable tooling.\",\n primaryCta: { label: \"Start free\", href: \"#\" },\n image: { src: \"https://placehold.co/480x320\", alt: \"Illustration\" },\n};\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { z } from \"zod\";\nimport { CtaSchema } from \"../../shared/schemas\";\n\nexport const CtaCenteredContentSchema = z.object({\n heading: z.string(),\n description: z.string(),\n primaryCta: CtaSchema,\n secondaryCta: CtaSchema.optional(),\n}).strict();\n\nexport type CtaCenteredContent = z.infer<typeof CtaCenteredContentSchema>;\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { Button, cn } from \"@booga/vui\";\nimport { DBox, DInline, DStack } from \"../../primitives\";\nimport { type BlockProps } from \"../../types\";\nimport { themeStyle } from \"../../theme\";\nimport { CtaCenteredContentSchema, type CtaCenteredContent } from \"./schema\";\n\nexport function CtaCentered({ content, theme }: BlockProps<CtaCenteredContent>) {\n CtaCenteredContentSchema.parse(content);\n const { heading, description, primaryCta, secondaryCta } = content;\n return (\n <DBox as=\"section\" aria-label={heading} style={themeStyle(theme)}>\n <DStack px={6} gap={8} align=\"center\" className={cn(\"max-w-2xl mx-auto text-center py-20\")}>\n <DBox as=\"h2\" className={cn(\"text-3xl font-bold tracking-tight\")}>\n {heading}\n </DBox>\n <DBox as=\"p\" color=\"muted\" className={cn(\"text-lg\")}>\n {description}\n </DBox>\n <DInline wrap gap={3} justify=\"center\">\n <Button as=\"a\" href={primaryCta.href} size=\"lg\">{primaryCta.label}</Button>\n {secondaryCta && (\n <Button as=\"a\" href={secondaryCta.href} size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n )}\n </DInline>\n </DStack>\n </DBox>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 bvasilenko\nimport { type CtaCenteredContent } from \"./schema\";\n\nexport const CtaCenteredDefaultContent: CtaCenteredContent = {\n heading: \"Ready to get started?\",\n description: \"Ship faster with composable, typed section blocks.\",\n primaryCta: { label: \"Get started\", href: \"#\" },\n secondaryCta: { label: \"Learn more\", href: \"#\" },\n};\n"]}
|