@dani-builder/blocks 0.2.0

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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/dist/blocks/bento-grid.d.ts +7 -0
  4. package/dist/blocks/bento-grid.d.ts.map +1 -0
  5. package/dist/blocks/bento-grid.js +20 -0
  6. package/dist/blocks/bento-grid.js.map +1 -0
  7. package/dist/blocks/block-renderer.d.ts +19 -0
  8. package/dist/blocks/block-renderer.d.ts.map +1 -0
  9. package/dist/blocks/block-renderer.js +71 -0
  10. package/dist/blocks/block-renderer.js.map +1 -0
  11. package/dist/blocks/content.d.ts +7 -0
  12. package/dist/blocks/content.d.ts.map +1 -0
  13. package/dist/blocks/content.js +18 -0
  14. package/dist/blocks/content.js.map +1 -0
  15. package/dist/blocks/cta.d.ts +7 -0
  16. package/dist/blocks/cta.d.ts.map +1 -0
  17. package/dist/blocks/cta.js +48 -0
  18. package/dist/blocks/cta.js.map +1 -0
  19. package/dist/blocks/faq.d.ts +7 -0
  20. package/dist/blocks/faq.d.ts.map +1 -0
  21. package/dist/blocks/faq.js +7 -0
  22. package/dist/blocks/faq.js.map +1 -0
  23. package/dist/blocks/features.d.ts +11 -0
  24. package/dist/blocks/features.d.ts.map +1 -0
  25. package/dist/blocks/features.js +41 -0
  26. package/dist/blocks/features.js.map +1 -0
  27. package/dist/blocks/hero.d.ts +7 -0
  28. package/dist/blocks/hero.d.ts.map +1 -0
  29. package/dist/blocks/hero.js +57 -0
  30. package/dist/blocks/hero.js.map +1 -0
  31. package/dist/blocks/highlights.d.ts +7 -0
  32. package/dist/blocks/highlights.d.ts.map +1 -0
  33. package/dist/blocks/highlights.js +29 -0
  34. package/dist/blocks/highlights.js.map +1 -0
  35. package/dist/blocks/inquiry-form.d.ts +7 -0
  36. package/dist/blocks/inquiry-form.d.ts.map +1 -0
  37. package/dist/blocks/inquiry-form.js +62 -0
  38. package/dist/blocks/inquiry-form.js.map +1 -0
  39. package/dist/blocks/logo-cloud.d.ts +7 -0
  40. package/dist/blocks/logo-cloud.d.ts.map +1 -0
  41. package/dist/blocks/logo-cloud.js +46 -0
  42. package/dist/blocks/logo-cloud.js.map +1 -0
  43. package/dist/blocks/pricing.d.ts +7 -0
  44. package/dist/blocks/pricing.d.ts.map +1 -0
  45. package/dist/blocks/pricing.js +40 -0
  46. package/dist/blocks/pricing.js.map +1 -0
  47. package/dist/blocks/slider.d.ts +7 -0
  48. package/dist/blocks/slider.d.ts.map +1 -0
  49. package/dist/blocks/slider.js +27 -0
  50. package/dist/blocks/slider.js.map +1 -0
  51. package/dist/blocks/stats.d.ts +7 -0
  52. package/dist/blocks/stats.d.ts.map +1 -0
  53. package/dist/blocks/stats.js +35 -0
  54. package/dist/blocks/stats.js.map +1 -0
  55. package/dist/blocks/team.d.ts +7 -0
  56. package/dist/blocks/team.d.ts.map +1 -0
  57. package/dist/blocks/team.js +36 -0
  58. package/dist/blocks/team.js.map +1 -0
  59. package/dist/blocks/testimonials.d.ts +7 -0
  60. package/dist/blocks/testimonials.d.ts.map +1 -0
  61. package/dist/blocks/testimonials.js +47 -0
  62. package/dist/blocks/testimonials.js.map +1 -0
  63. package/dist/context.d.ts +37 -0
  64. package/dist/context.d.ts.map +1 -0
  65. package/dist/context.js +15 -0
  66. package/dist/context.js.map +1 -0
  67. package/dist/index.d.ts +24 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +28 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/shared/block-image.d.ts +14 -0
  72. package/dist/shared/block-image.d.ts.map +1 -0
  73. package/dist/shared/block-image.js +38 -0
  74. package/dist/shared/block-image.js.map +1 -0
  75. package/dist/shared/blocks-renderer.d.ts +8 -0
  76. package/dist/shared/blocks-renderer.d.ts.map +1 -0
  77. package/dist/shared/blocks-renderer.js +76 -0
  78. package/dist/shared/blocks-renderer.js.map +1 -0
  79. package/dist/shared/count-up.d.ts +12 -0
  80. package/dist/shared/count-up.d.ts.map +1 -0
  81. package/dist/shared/count-up.js +74 -0
  82. package/dist/shared/count-up.js.map +1 -0
  83. package/dist/shared/icon-renderer.d.ts +10 -0
  84. package/dist/shared/icon-renderer.d.ts.map +1 -0
  85. package/dist/shared/icon-renderer.js +76 -0
  86. package/dist/shared/icon-renderer.js.map +1 -0
  87. package/dist/shared/reveal.d.ts +12 -0
  88. package/dist/shared/reveal.d.ts.map +1 -0
  89. package/dist/shared/reveal.js +34 -0
  90. package/dist/shared/reveal.js.map +1 -0
  91. package/dist/shared/section-wrapper.d.ts +21 -0
  92. package/dist/shared/section-wrapper.d.ts.map +1 -0
  93. package/dist/shared/section-wrapper.js +44 -0
  94. package/dist/shared/section-wrapper.js.map +1 -0
  95. package/dist/shared/strapi-image.d.ts +26 -0
  96. package/dist/shared/strapi-image.d.ts.map +1 -0
  97. package/dist/shared/strapi-image.js +22 -0
  98. package/dist/shared/strapi-image.js.map +1 -0
  99. package/dist/shared/strapi-link.d.ts +10 -0
  100. package/dist/shared/strapi-link.d.ts.map +1 -0
  101. package/dist/shared/strapi-link.js +21 -0
  102. package/dist/shared/strapi-link.js.map +1 -0
  103. package/package.json +66 -0
  104. package/src/styles/blocks.css +291 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HJ-company
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # @dani-builder/blocks
2
+
3
+ Framework-agnostic React block renderers for [Daniworks Builder](https://github.com/HJ-company/daniworks-builder-v2) (Strapi v5). The 14 block components + shared primitives, decoupled from `next/*` via a small adapter Context so any React framework can consume them.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @dani-builder/blocks @dani-builder/strapi-client
9
+ ```
10
+
11
+ ## Usage (Next.js)
12
+
13
+ Inject your framework adapters once, near the root:
14
+
15
+ ```tsx
16
+ "use client";
17
+ import NextImage from "next/image";
18
+ import NextLink from "next/link";
19
+ import { BlocksProvider } from "@dani-builder/blocks";
20
+ import { getAssetUrl } from "@dani-builder/strapi-client/utils";
21
+
22
+ <BlocksProvider value={{
23
+ Image: (p) => <NextImage {...p} />,
24
+ Link: ({ href, children, ...r }) => <NextLink href={href} {...r}>{children}</NextLink>,
25
+ resolveAssetUrl: (asset, format) => getAssetUrl(asset, format, MEDIA_HOST),
26
+ }}>
27
+ {children}
28
+ </BlocksProvider>
29
+ ```
30
+
31
+ Then render a page's dynamic zone:
32
+
33
+ ```tsx
34
+ import { BlockRenderer } from "@dani-builder/blocks";
35
+ <BlockRenderer blocks={page.blocks} />
36
+ ```
37
+
38
+ ## Styles
39
+
40
+ Import the bundled stylesheet once, after Tailwind, and add the package to your
41
+ Tailwind sources so its utility classes are generated:
42
+
43
+ ```css
44
+ @import "tailwindcss";
45
+ @source "../node_modules/@dani-builder/blocks/dist";
46
+ ```
47
+ ```ts
48
+ import "@dani-builder/blocks/styles.css";
49
+ ```
50
+
51
+ ## License
52
+
53
+ MIT © HJ-company
@@ -0,0 +1,7 @@
1
+ import type { BentoGridBlock as BentoGridBlockType } from "@dani-builder/strapi-client/types";
2
+ interface BentoGridBlockProps {
3
+ block: BentoGridBlockType;
4
+ }
5
+ export declare function BentoGridBlock({ block }: BentoGridBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=bento-grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bento-grid.d.ts","sourceRoot":"","sources":["../../src/blocks/bento-grid.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,IAAI,kBAAkB,EAErC,MAAM,mCAAmC,CAAC;AAM3C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,+BAiB5D"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SectionWrapper } from "../shared/section-wrapper";
3
+ import { BlockImage } from "../shared/block-image";
4
+ import { StrapiLink } from "../shared/strapi-link";
5
+ import { FeatureIcon } from "./features";
6
+ export function BentoGridBlock({ block }) {
7
+ const cols = block.columns || 3;
8
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid grid-cols-1 gap-4 [grid-auto-rows:minmax(160px,auto)] md:[grid-template-columns:var(--bento-cols)]", style: { "--bento-cols": `repeat(${cols}, minmax(0, 1fr))` }, children: block.items.map((item) => (_jsx(BentoCard, { item: item, cols: cols }, item.id))) }) }));
9
+ }
10
+ function BentoCard({ item, cols }) {
11
+ // Clamp span to the column count so a span-4 card in a 2-col grid can't
12
+ // spawn implicit columns. Spans only apply at md+ (mobile is 1 column).
13
+ const colSpan = Math.min(item.colSpan ?? 1, cols);
14
+ const rowSpan = item.rowSpan ?? 1;
15
+ return (_jsxs("div", { className: "block-card block-card-hover group relative flex flex-col overflow-hidden p-6 md:[grid-column:var(--bento-col)] md:[grid-row:var(--bento-row)]", style: {
16
+ "--bento-col": colSpan > 1 ? `span ${colSpan}` : "auto",
17
+ "--bento-row": rowSpan > 1 ? `span ${rowSpan}` : "auto",
18
+ }, children: [item.image?.media && (_jsx(BlockImage, { image: item.image, aspect: "3/2", className: "mb-4 rounded-lg", sizes: "(max-width: 768px) 100vw, 50vw" })), item.icon && _jsx(FeatureIcon, { icon: item.icon }), item.title && (_jsx("h3", { className: "text-lg font-semibold", children: item.title })), item.description && (_jsx("p", { className: "mt-2 text-sm text-text-muted leading-relaxed", children: item.description })), item.link && (_jsx("div", { className: "mt-3", children: _jsx(StrapiLink, { link: item.link, className: "text-sm font-medium text-primary transition-opacity hover:opacity-80" }) }))] }));
19
+ }
20
+ //# sourceMappingURL=bento-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bento-grid.js","sourceRoot":"","sources":["../../src/blocks/bento-grid.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAuB;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAEhC,OAAO,CACL,KAAC,cAAc,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,YAGpC,cACE,SAAS,EAAC,yGAAyG,EACnH,KAAK,EAAE,EAAE,cAAc,EAAE,UAAU,IAAI,mBAAmB,EAAmB,YAE5E,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,KAAC,SAAS,IAAe,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAA/B,IAAI,CAAC,EAAE,CAA4B,CACpD,CAAC,GACE,GACS,CAClB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAqC;IAClE,wEAAwE;IACxE,wEAAwE;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAElC,OAAO,CACL,eACE,SAAS,EAAC,+IAA+I,EACzJ,KAAK,EACH;YACE,aAAa,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM;YACvD,aAAa,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM;SACvC,aAGnB,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAGpB,KAAC,UAAU,IACT,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAC,KAAK,EACZ,SAAS,EAAC,iBAAiB,EAC3B,KAAK,EAAC,gCAAgC,GACtC,CACH,EACA,IAAI,CAAC,IAAI,IAAI,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EAC7C,IAAI,CAAC,KAAK,IAAI,CACb,aAAI,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,KAAK,GAAM,CACxD,EACA,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,8CAA8C,YACxD,IAAI,CAAC,WAAW,GACf,CACL,EACA,IAAI,CAAC,IAAI,IAAI,CACZ,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAC,sEAAsE,GAChF,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { PageBlocks } from "@dani-builder/strapi-client/types";
2
+ import type { ComponentType } from "react";
3
+ export interface AnyPageBlock {
4
+ id: number;
5
+ __component: string;
6
+ }
7
+ export type BlockRenderers<TBlock extends AnyPageBlock = PageBlocks> = Partial<{
8
+ [Component in TBlock["__component"]]: ComponentType<{
9
+ block: Extract<TBlock, {
10
+ __component: Component;
11
+ }>;
12
+ }>;
13
+ }>;
14
+ export interface BlockRendererProps<TBlock extends AnyPageBlock = PageBlocks> {
15
+ blocks: NoInfer<TBlock>[];
16
+ renderers?: BlockRenderers<TBlock>;
17
+ }
18
+ export declare function BlockRenderer<TBlock extends AnyPageBlock = PageBlocks>({ blocks, renderers, }: BlockRendererProps<TBlock>): import("react").JSX.Element | null;
19
+ //# sourceMappingURL=block-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-renderer.d.ts","sourceRoot":"","sources":["../../src/blocks/block-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAiB3C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,YAAY,GAAG,UAAU,IAAI,OAAO,CAAC;KAC5E,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;QAClD,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;YAAE,WAAW,EAAE,SAAS,CAAA;SAAE,CAAC,CAAC;KACpD,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,YAAY,GAAG,UAAU;IAC1E,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,wBAAgB,aAAa,CAAC,MAAM,SAAS,YAAY,GAAG,UAAU,EAAE,EACtE,MAAM,EACN,SAAS,GACV,EAAE,kBAAkB,CAAC,MAAM,CAAC,sCAc5B"}
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { HeroBlock } from "./hero";
3
+ import { FeaturesBlock } from "./features";
4
+ import { CtaBlock } from "./cta";
5
+ import { ContentBlock } from "./content";
6
+ import { StatsBlock } from "./stats";
7
+ import { TestimonialsBlock } from "./testimonials";
8
+ import { FaqBlock } from "./faq";
9
+ import { LogoCloudBlock } from "./logo-cloud";
10
+ import { SliderBlock } from "./slider";
11
+ import { InquiryFormBlock } from "./inquiry-form";
12
+ import { HighlightsBlock } from "./highlights";
13
+ import { BentoGridBlock } from "./bento-grid";
14
+ import { PricingBlock } from "./pricing";
15
+ import { TeamBlock } from "./team";
16
+ import { SectionDivider } from "../shared/section-wrapper";
17
+ export function BlockRenderer({ blocks, renderers, }) {
18
+ if (!blocks || blocks.length === 0)
19
+ return null;
20
+ return (_jsx(_Fragment, { children: blocks.map((block) => (_jsx(RenderBlock, { block: block, renderers: renderers }, `${block.__component}-${block.id}`))) }));
21
+ }
22
+ function RenderBlock({ block, renderers, }) {
23
+ const CustomRenderer = renderers?.[block.__component];
24
+ if (CustomRenderer)
25
+ return _jsx(CustomRenderer, { block: block });
26
+ return _jsx(BuiltInBlock, { block: block });
27
+ }
28
+ function BuiltInBlock({ block }) {
29
+ switch (block.__component) {
30
+ case "blocks.hero":
31
+ return _jsx(HeroBlock, { block: block });
32
+ case "blocks.features":
33
+ return _jsx(FeaturesBlock, { block: block });
34
+ case "blocks.cta":
35
+ return _jsx(CtaBlock, { block: block });
36
+ case "blocks.content":
37
+ return _jsx(ContentBlock, { block: block });
38
+ case "blocks.stats":
39
+ return _jsx(StatsBlock, { block: block });
40
+ case "blocks.testimonials":
41
+ return _jsx(TestimonialsBlock, { block: block });
42
+ case "blocks.faq":
43
+ return _jsx(FaqBlock, { block: block });
44
+ case "blocks.logo-cloud":
45
+ return _jsx(LogoCloudBlock, { block: block });
46
+ case "blocks.slider":
47
+ return _jsx(SliderBlock, { block: block });
48
+ case "blocks.inquiry-form":
49
+ return _jsx(InquiryFormBlock, { block: block });
50
+ case "blocks.highlights":
51
+ return _jsx(HighlightsBlock, { block: block });
52
+ case "blocks.bento-grid":
53
+ return _jsx(BentoGridBlock, { block: block });
54
+ case "blocks.pricing":
55
+ return _jsx(PricingBlock, { block: block });
56
+ case "blocks.team":
57
+ return _jsx(TeamBlock, { block: block });
58
+ case "elements.section":
59
+ return _jsx(SectionDivider, { section: block });
60
+ default: {
61
+ const isDev = typeof process !== "undefined" &&
62
+ process.env?.NODE_ENV === "development";
63
+ if (isDev) {
64
+ const unhandled = block;
65
+ return (_jsx("div", { className: "mx-auto max-w-7xl px-4 py-8", children: _jsxs("div", { className: "rounded-lg border-2 border-dashed border-gray-300 p-8 text-center text-gray-500", children: ["Block not implemented: ", _jsx("code", { children: unhandled.__component })] }) }));
66
+ }
67
+ return null;
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=block-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-renderer.js","sourceRoot":"","sources":["../../src/blocks/block-renderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ContentBlock as ContentBlockType } from "@dani-builder/strapi-client/types";
2
+ interface ContentBlockProps {
3
+ block: ContentBlockType;
4
+ }
5
+ export declare function ContentBlock({ block }: ContentBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/blocks/content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAI1F,UAAU,iBAAiB;IACzB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAaD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,iBAAiB,+BAWxD"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { SectionWrapper } from "../shared/section-wrapper";
3
+ import { BlocksRenderer } from "../shared/blocks-renderer";
4
+ // Width lives on a wrapper so it can't fight the `prose` class's own
5
+ // max-width. `wide` additionally flows into columns on large screens
6
+ // (block-content-wide in blocks.css) so short structured content — office
7
+ // lists, fact sheets — fills the fold instead of stranding a narrow column.
8
+ const PROSE = { width: "mx-auto max-w-prose", inner: "" };
9
+ const variantConfig = {
10
+ prose: PROSE,
11
+ wide: { width: "mx-auto max-w-5xl", inner: "block-content-wide" },
12
+ "full-width": { width: "max-w-7xl", inner: "" },
13
+ };
14
+ export function ContentBlock({ block }) {
15
+ const { width, inner } = variantConfig[block.variant ?? "prose"] ?? PROSE;
16
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: width, children: _jsx("div", { className: `prose block-content max-w-none ${inner}`, children: _jsx(BlocksRenderer, { content: block.body }) }) }) }));
17
+ }
18
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/blocks/content.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM3D,qEAAqE;AACrE,qEAAqE;AACrE,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC1D,MAAM,aAAa,GAAqD;IACtE,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACjE,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAqB;IACvD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;IAC1E,OAAO,CACL,KAAC,cAAc,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,YACpC,cAAK,SAAS,EAAE,KAAK,YACnB,cAAK,SAAS,EAAE,kCAAkC,KAAK,EAAE,YACvD,KAAC,cAAc,IAAC,OAAO,EAAE,KAAK,CAAC,IAAI,GAAI,GACnC,GACF,GACS,CAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CtaBlock as CtaBlockType } from "@dani-builder/strapi-client/types";
2
+ interface CtaBlockProps {
3
+ block: CtaBlockType;
4
+ }
5
+ export declare function CtaBlock({ block }: CtaBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=cta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../src/blocks/cta.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAKlF,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,+BAUhD"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SectionWrapper } from "../shared/section-wrapper";
3
+ import { BlockImage } from "../shared/block-image";
4
+ import { StrapiLink } from "../shared/strapi-link";
5
+ export function CtaBlock({ block }) {
6
+ // Legacy/explicitly-null entries (created before the schema default, or
7
+ // via API without a variant) return null. Guard against `null.startsWith`
8
+ // crashing the whole page render.
9
+ const isCard = (block.variant ?? "inline-spread").startsWith("card-");
10
+ if (isCard) {
11
+ return _jsx(CardCta, { block: block });
12
+ }
13
+ return _jsx(InlineCta, { block: block });
14
+ }
15
+ function InlineCta({ block }) {
16
+ const isCentered = block.variant === "inline-centered";
17
+ const isStacked = block.variant === "inline-stacked";
18
+ const light = isDarkTheme(block.section?.theme);
19
+ // Spread: heading + supporting text on the left, buttons on the right —
20
+ // one visual unit, so the section header is folded in instead of floating
21
+ // centered above a justified row.
22
+ if (!isCentered && !isStacked) {
23
+ return (_jsx(SectionWrapper, { section: block.section, hideHeader: true, children: _jsxs("div", { className: "flex flex-col gap-8 md:flex-row md:items-center md:justify-between", children: [_jsxs("div", { className: "max-w-xl", children: [block.section?.kickerText && (_jsx("p", { className: "section-kicker mb-3", children: block.section.kickerText })), block.section?.heading && (_jsx("h2", { className: "text-2xl font-semibold tracking-tight md:text-3xl", children: block.section.heading })), (block.section?.subheading ?? block.ctaText) && (_jsx("p", { className: "mt-3 text-base text-text-muted", children: block.section?.subheading ?? block.ctaText }))] }), _jsx("div", { className: "shrink-0", children: _jsx(CtaButtons, { block: block, light: light }) })] }) }));
24
+ }
25
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: `flex gap-6 ${isStacked
26
+ ? "flex-col items-center text-center"
27
+ : "flex-col items-center text-center sm:flex-row sm:justify-center sm:text-left"}`, children: [block.ctaText && (_jsx("p", { className: "text-lg font-medium", children: block.ctaText })), _jsx(CtaButtons, { block: block, light: light })] }) }));
28
+ }
29
+ /** Dark/accent section themes need the light (white) button treatment. */
30
+ function isDarkTheme(theme) {
31
+ return theme === "dark" || theme === "accent" || theme === "contrast";
32
+ }
33
+ function CardCta({ block }) {
34
+ const isHorizontal = block.variant === "card-horizontal";
35
+ return (_jsx(SectionWrapper, { section: block.section, hideHeader: true, children: _jsxs("div", { className: `overflow-hidden rounded-3xl bg-primary p-10 text-white md:p-14 ${isHorizontal ? "flex flex-col items-center gap-8 md:flex-row" : ""}`, children: [block.image?.media && isHorizontal && (_jsx(BlockImage, { image: block.image, aspect: "1/1", className: "w-full max-w-xs shrink-0 rounded-xl", sizes: "(max-width: 768px) 100vw, 320px" })), _jsxs("div", { className: isHorizontal
36
+ ? "flex-1"
37
+ : "mx-auto max-w-2xl text-center", children: [block.section?.heading && (_jsx("h2", { className: "text-2xl font-semibold tracking-tight text-balance md:text-3xl", children: block.section.heading })), block.ctaText && (_jsx("p", { className: "mt-4 text-white/80", children: block.ctaText })), _jsx("div", { className: `mt-6 ${isHorizontal ? "" : "flex justify-center"}`, children: _jsx(CtaButtons, { block: block, light: true }) })] })] }) }));
38
+ }
39
+ function CtaButtons({ block, light, }) {
40
+ if (!block.ctaLink && !block.secondaryLink)
41
+ return null;
42
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-4", children: [_jsx(StrapiLink, { link: block.ctaLink, className: light
43
+ ? "inline-flex items-center justify-center rounded-full bg-white px-6 py-3 text-sm font-semibold text-primary transition-colors duration-150 hover:bg-white/90"
44
+ : "block-btn" }), _jsx(StrapiLink, { link: block.secondaryLink, className: light
45
+ ? "inline-flex items-center justify-center rounded-full border border-white/40 px-6 py-3 text-sm font-semibold text-white transition-colors duration-150 hover:bg-white/10"
46
+ : "block-btn-ghost" })] }));
47
+ }
48
+ //# sourceMappingURL=cta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta.js","sourceRoot":"","sources":["../../src/blocks/cta.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { FaqBlock as FaqBlockType } from "@dani-builder/strapi-client/types";
2
+ interface FaqBlockProps {
3
+ block: FaqBlockType;
4
+ }
5
+ export declare function FaqBlock({ block }: FaqBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=faq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/blocks/faq.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAIlF,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,+BA8BhD"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SectionWrapper } from "../shared/section-wrapper";
3
+ import { BlocksRenderer } from "../shared/blocks-renderer";
4
+ export function FaqBlock({ block }) {
5
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "mx-auto max-w-3xl divide-y divide-(--card-border)", children: block.items.map((faq) => (_jsxs("details", { className: "group py-4", children: [_jsxs("summary", { className: "flex cursor-pointer items-center justify-between gap-4 text-left font-semibold transition-colors duration-150 hover:text-primary", children: [faq.question, _jsx("svg", { className: "h-5 w-5 shrink-0 text-text-muted transition-transform duration-200 group-open:rotate-180", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) })] }), _jsx("div", { className: "prose prose-sm mt-3 text-text-muted", children: _jsx(BlocksRenderer, { content: faq.answer }) })] }, faq.id))) }) }));
6
+ }
7
+ //# sourceMappingURL=faq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faq.js","sourceRoot":"","sources":["../../src/blocks/faq.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM3D,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAiB;IAC/C,OAAO,CACL,KAAC,cAAc,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,YACpC,cAAK,SAAS,EAAC,mDAAmD,YAC/D,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACxB,mBAAsB,SAAS,EAAC,YAAY,aAC1C,mBAAS,SAAS,EAAC,kIAAkI,aAClJ,GAAG,CAAC,QAAQ,EACb,cACE,SAAS,EAAC,0FAA0F,EACpG,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,YAEd,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,CAAC,EAAC,gBAAgB,GAClB,GACE,IACE,EACV,cAAK,SAAS,EAAC,qCAAqC,YAClD,KAAC,cAAc,IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,GAAI,GACnC,KAnBM,GAAG,CAAC,EAAE,CAoBV,CACX,CAAC,GACE,GACS,CAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { FeaturesBlock as FeaturesBlockType } from "@dani-builder/strapi-client/types";
2
+ interface FeaturesBlockProps {
3
+ block: FeaturesBlockType;
4
+ }
5
+ export declare function FeaturesBlock({ block }: FeaturesBlockProps): import("react").JSX.Element;
6
+ /** Bundled SVG when the identifier resolves; otherwise a 2-letter monogram. */
7
+ export declare function FeatureIcon({ icon }: {
8
+ icon: string;
9
+ }): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/blocks/features.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,iBAAiB,EAEnC,MAAM,mCAAmC,CAAC;AAM3C,UAAU,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAW1D;AA8ED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAUrD"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SectionHeader, SectionWrapper } from "../shared/section-wrapper";
3
+ import { BlockImage } from "../shared/block-image";
4
+ import { StrapiLink } from "../shared/strapi-link";
5
+ import { IconRenderer, iconExists } from "../shared/icon-renderer";
6
+ export function FeaturesBlock({ block }) {
7
+ switch (block.variant) {
8
+ case "dual-column":
9
+ return _jsx(DualColumn, { block: block });
10
+ case "media-aside":
11
+ case "media-aside-compact":
12
+ return _jsx(MediaAside, { block: block });
13
+ case "simple-grid":
14
+ default:
15
+ return _jsx(SimpleGrid, { block: block });
16
+ }
17
+ }
18
+ function SimpleGrid({ block }) {
19
+ // Multiples of 3 fill a 3-col grid exactly; everything else gets 4 cols
20
+ // (2, 4, 8 … divide evenly, and odd leftovers look less stranded).
21
+ const cols = block.items.length <= 2
22
+ ? "sm:grid-cols-2"
23
+ : block.items.length % 3 === 0
24
+ ? "sm:grid-cols-2 lg:grid-cols-3"
25
+ : "sm:grid-cols-2 lg:grid-cols-4";
26
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: `grid gap-8 ${cols}`, children: block.items.map((item) => (_jsx(FeatureCard, { item: item }, item.id))) }) }));
27
+ }
28
+ function DualColumn({ block }) {
29
+ return (_jsx(SectionWrapper, { section: block.section, hideHeader: true, children: _jsxs("div", { className: "grid gap-12 lg:grid-cols-2", children: [_jsx(SectionHeader, { section: block.section, align: "left", className: "lg:sticky lg:top-24" }), _jsx("div", { className: "grid gap-6 sm:grid-cols-2", children: block.items.map((item) => (_jsx(FeatureCard, { item: item }, item.id))) })] }) }));
30
+ }
31
+ function MediaAside({ block }) {
32
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [_jsx(BlockImage, { image: block.image, aspect: "4/3", className: "rounded-2xl", sizes: "(max-width: 1024px) 100vw, 50vw" }), _jsx("div", { className: "grid gap-6 sm:grid-cols-2", children: block.items.map((item) => (_jsx(FeatureCard, { item: item }, item.id))) })] }) }));
33
+ }
34
+ function FeatureCard({ item }) {
35
+ return (_jsxs("div", { className: "block-card block-card-hover flex flex-col gap-3 p-6", children: [item.icon && _jsx(FeatureIcon, { icon: item.icon }), item.label && (_jsx("h3", { className: "text-lg font-semibold", children: item.label })), item.description && (_jsx("p", { className: "text-sm text-text-muted leading-relaxed", children: item.description })), item.link && (_jsx(StrapiLink, { link: item.link, className: "mt-1 text-sm font-semibold text-primary transition-opacity duration-150 hover:opacity-80" }))] }));
36
+ }
37
+ /** Bundled SVG when the identifier resolves; otherwise a 2-letter monogram. */
38
+ export function FeatureIcon({ icon }) {
39
+ return (_jsx("span", { className: "mb-1 flex h-11 w-11 items-center justify-center rounded-xl bg-primary/10 text-primary", children: iconExists(icon) ? (_jsx(IconRenderer, { name: icon, className: "h-5 w-5" })) : (_jsx("span", { className: "text-sm font-bold", children: icon.slice(0, 2) })) }));
40
+ }
41
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/blocks/features.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { HeroBlock as HeroBlockType } from "@dani-builder/strapi-client/types";
2
+ interface HeroBlockProps {
3
+ block: HeroBlockType;
4
+ }
5
+ export declare function HeroBlock({ block }: HeroBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=hero.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../src/blocks/hero.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAMpF,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,+BA6BlD"}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SectionWrapper } from "../shared/section-wrapper";
3
+ import { StrapiImage } from "../shared/strapi-image";
4
+ import { BlockImage } from "../shared/block-image";
5
+ import { StrapiLink } from "../shared/strapi-link";
6
+ export function HeroBlock({ block }) {
7
+ const variant = (() => {
8
+ switch (block.variant) {
9
+ case "fullscreen-media":
10
+ return _jsx(FullscreenMedia, { block: block });
11
+ case "stacked-media":
12
+ return _jsx(StackedMedia, { block: block });
13
+ case "media-extending":
14
+ return _jsx(MediaExtending, { block: block });
15
+ case "side-by-side":
16
+ default:
17
+ return _jsx(SideBySide, { block: block });
18
+ }
19
+ })();
20
+ // When headerMode is transparent-*, drop a marker the site header reacts to
21
+ // via `body:has([data-hero-header…])` in globals.css — the header then
22
+ // overlays this hero transparently (light or dark text). No JS needed.
23
+ const overlay = block.headerMode && block.headerMode !== "none" ? (_jsx("span", { "data-hero-header": block.headerMode, className: "hidden", "aria-hidden": "true" })) : null;
24
+ return (_jsxs(_Fragment, { children: [overlay, variant] }));
25
+ }
26
+ /**
27
+ * Asymmetric hero: text stays in the content column while the media bleeds off
28
+ * the right viewport edge on large screens (a distinct look from side-by-side).
29
+ */
30
+ function MediaExtending({ block }) {
31
+ const hasMedia = Boolean(block.image?.media);
32
+ return (_jsxs("section", { className: "relative overflow-hidden py-16 md:py-24 lg:min-h-[32rem]", children: [_jsx("div", { className: `mx-auto grid max-w-7xl items-center gap-12 px-4 sm:px-6 lg:px-8 ${hasMedia ? "lg:grid-cols-2" : ""}`, children: _jsx("div", { className: "flex flex-col items-start gap-6", children: _jsx(HeroCopy, { block: block }) }) }), block.image?.media && (_jsx("div", { className: "relative mt-8 px-4 sm:px-6 lg:absolute lg:right-0 lg:top-1/2 lg:mt-0 lg:w-[46vw] lg:max-w-[720px] lg:-translate-y-1/2 lg:px-0", children: _jsx(BlockImage, { image: block.image, aspect: "3/2", className: "rounded-2xl shadow-2xl ring-1 ring-black/10 lg:rounded-l-3xl lg:rounded-r-none", sizes: "(max-width: 1024px) 100vw, 46vw", priority: true }) }))] }));
33
+ }
34
+ function SideBySide({ block }) {
35
+ // Without media, a 2-column grid leaves the right half blank — center the
36
+ // copy instead so the hero still reads as designed.
37
+ if (!block.image?.media) {
38
+ return (_jsx(SectionWrapper, { section: block.section, hideHeader: true, className: "lg:py-32", children: _jsx("div", { className: "mx-auto flex max-w-3xl flex-col items-center gap-6 text-center", children: _jsx(HeroCopy, { block: block, centered: true }) }) }));
39
+ }
40
+ return (_jsx(SectionWrapper, { section: block.section, hideHeader: true, children: _jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [_jsx("div", { className: "flex flex-col items-start gap-6", children: _jsx(HeroCopy, { block: block }) }), _jsx(BlockImage, { image: block.image, aspect: "3/2", className: "rounded-3xl shadow-xl ring-1 ring-black/10", sizes: "(max-width: 1024px) 100vw, 50vw", priority: true })] }) }));
41
+ }
42
+ /** Kicker, heading, subheading, CTA row, and the supporting ctaText line. */
43
+ function HeroCopy({ block, centered }) {
44
+ return (_jsxs(_Fragment, { children: [block.section?.kickerText && (_jsx("p", { className: "section-kicker", children: block.section.kickerText })), block.section?.heading && (_jsx("h1", { className: `text-4xl font-semibold tracking-tight md:text-5xl lg:text-6xl ${centered ? "text-balance" : "text-pretty"}`, children: block.section.heading })), block.section?.subheading && (_jsx("p", { className: "max-w-xl text-lg leading-relaxed text-text-muted md:text-xl", children: block.section.subheading })), _jsx(HeroCtas, { block: block }), block.ctaText && (_jsx("p", { className: "text-sm text-text-muted", children: block.ctaText }))] }));
45
+ }
46
+ function FullscreenMedia({ block }) {
47
+ return (_jsxs("section", { className: "relative flex min-h-screen items-center justify-center", children: [_jsxs("div", { className: "absolute inset-0", children: [_jsx(StrapiImage, { asset: block.image?.media, alt: block.image?.alt ?? undefined, fill: true, sizes: "100vw", className: "object-cover", priority: true }), _jsx("div", { className: "absolute inset-0 bg-black/50" })] }), _jsxs("div", { className: "relative z-10 mx-auto max-w-4xl px-4 text-center text-white", children: [block.section?.kickerText && (_jsx("p", { className: "mb-4 text-sm font-semibold uppercase tracking-wider text-primary-light", children: block.section.kickerText })), block.section?.heading && (_jsx("h1", { className: "text-4xl font-semibold tracking-tight text-balance md:text-5xl lg:text-6xl", children: block.section.heading })), block.section?.subheading && (_jsx("p", { className: "mt-6 text-lg leading-relaxed text-gray-200 md:text-xl", children: block.section.subheading })), _jsx("div", { className: "mt-8 flex justify-center", children: _jsx(HeroCtas, { block: block }) }), block.ctaText && (_jsx("p", { className: "mt-4 text-sm text-gray-300", children: block.ctaText }))] })] }));
48
+ }
49
+ function StackedMedia({ block }) {
50
+ return (_jsx(SectionWrapper, { section: block.section, hideHeader: true, children: _jsxs("div", { className: "flex flex-col items-center gap-6 text-center", children: [block.section?.kickerText && (_jsx("p", { className: "section-kicker", children: block.section.kickerText })), block.section?.heading && (_jsx("h1", { className: "max-w-4xl text-4xl font-semibold tracking-tight text-balance md:text-5xl lg:text-6xl", children: block.section.heading })), block.section?.subheading && (_jsx("p", { className: "max-w-2xl text-lg leading-relaxed text-text-muted md:text-xl", children: block.section.subheading })), _jsx(HeroCtas, { block: block }), block.ctaText && (_jsx("p", { className: "text-sm text-text-muted", children: block.ctaText })), block.image?.media && (_jsx(BlockImage, { image: block.image, aspect: "3/2", className: "mt-4 w-full max-w-5xl rounded-2xl shadow-xl ring-1 ring-black/10", sizes: "(max-width: 1024px) 100vw, 1024px", priority: true }))] }) }));
51
+ }
52
+ function HeroCtas({ block }) {
53
+ if (!block.ctaLink && !block.secondaryLink)
54
+ return null;
55
+ return (_jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-3", children: [_jsx(StrapiLink, { link: block.ctaLink, className: "block-btn" }), _jsx(StrapiLink, { link: block.secondaryLink, className: "block-btn-ghost" })] }));
56
+ }
57
+ //# sourceMappingURL=hero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hero.js","sourceRoot":"","sources":["../../src/blocks/hero.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { HighlightsBlock as HighlightsBlockType } from "@dani-builder/strapi-client/types";
2
+ interface HighlightsBlockProps {
3
+ block: HighlightsBlockType;
4
+ }
5
+ export declare function HighlightsBlock({ block }: HighlightsBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=highlights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlights.d.ts","sourceRoot":"","sources":["../../src/blocks/highlights.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,IAAI,mBAAmB,EAEvC,MAAM,mCAAmC,CAAC;AAK3C,UAAU,oBAAoB;IAC5B,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,oBAAoB,+BAW9D"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SectionWrapper } from "../shared/section-wrapper";
3
+ import { BlockImage } from "../shared/block-image";
4
+ import { StrapiLink } from "../shared/strapi-link";
5
+ export function HighlightsBlock({ block }) {
6
+ switch (block.variant) {
7
+ case "dual-column":
8
+ return _jsx(DualColumn, { block: block });
9
+ case "triple-column":
10
+ return _jsx(TripleColumn, { block: block });
11
+ case "alternating":
12
+ return _jsx(Alternating, { block: block });
13
+ default:
14
+ return _jsx(DualColumn, { block: block });
15
+ }
16
+ }
17
+ function DualColumn({ block }) {
18
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid gap-8 md:grid-cols-2", children: block.items.map((item) => (_jsx(HighlightCard, { item: item }, item.id))) }) }));
19
+ }
20
+ function TripleColumn({ block }) {
21
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid gap-8 md:grid-cols-2 lg:grid-cols-3", children: block.items.map((item) => (_jsx(HighlightCard, { item: item }, item.id))) }) }));
22
+ }
23
+ function Alternating({ block }) {
24
+ return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "flex flex-col gap-16", children: block.items.map((item, idx) => (_jsxs("div", { className: `grid items-center gap-8 md:grid-cols-2 ${idx % 2 === 1 ? "md:direction-rtl" : ""}`, children: [_jsx(BlockImage, { image: item.image, aspect: "4/3", className: `rounded-2xl ${idx % 2 === 1 ? "md:order-2" : ""}`, sizes: "(max-width: 768px) 100vw, 50vw" }), _jsxs("div", { className: idx % 2 === 1 ? "md:order-1" : "", children: [item.label && (_jsx("h3", { className: "text-2xl font-bold", children: item.label })), item.description && (_jsx("p", { className: "mt-3 text-text-muted leading-relaxed", children: item.description })), item.link && (_jsx("div", { className: "mt-4", children: _jsx(StrapiLink, { link: item.link, className: "text-sm font-semibold text-primary transition-opacity hover:opacity-80" }) }))] })] }, item.id))) }) }));
25
+ }
26
+ function HighlightCard({ item }) {
27
+ return (_jsxs("div", { className: "block-card block-card-hover overflow-hidden", children: [_jsx(BlockImage, { image: item.image, aspect: "3/2", sizes: "(max-width: 768px) 100vw, 33vw" }), _jsxs("div", { className: "p-6", children: [item.label && (_jsx("h3", { className: "text-lg font-semibold", children: item.label })), item.description && (_jsx("p", { className: "mt-2 text-sm text-text-muted leading-relaxed", children: item.description })), item.link && (_jsx("div", { className: "mt-3", children: _jsx(StrapiLink, { link: item.link, className: "text-sm font-medium text-primary transition-opacity hover:opacity-80" }) }))] })] }));
28
+ }
29
+ //# sourceMappingURL=highlights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlights.js","sourceRoot":"","sources":["../../src/blocks/highlights.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { InquiryFormBlock as InquiryFormBlockType } from "@dani-builder/strapi-client/types";
2
+ interface InquiryFormBlockProps {
3
+ block: InquiryFormBlockType;
4
+ }
5
+ export declare function InquiryFormBlock({ block }: InquiryFormBlockProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=inquiry-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inquiry-form.d.ts","sourceRoot":"","sources":["../../src/blocks/inquiry-form.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGlG,UAAU,qBAAqB;IAC7B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,qBAAqB,+BA2KhE"}