@xiwebdesign/xicms-core 7.13.0 → 7.15.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.
- package/dist/admin/lib/mediaUsage.d.ts +17 -0
- package/dist/admin/lib/mediaUsage.js +32 -1
- package/dist/admin/lib/mediaUsage.js.map +1 -1
- package/dist/admin/media/MediaManager.js +74 -17
- package/dist/admin/media/MediaManager.js.map +1 -1
- package/dist/admin/visual/VisualEditor.js +37 -3
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/blocks/BlockErrorBoundary.d.ts +1 -0
- package/dist/blocks/BlockErrorBoundary.js +4 -0
- package/dist/blocks/BlockErrorBoundary.js.map +1 -1
- package/dist/blocks/BlockRenderer.js +1 -1
- package/dist/blocks/BlockRenderer.js.map +1 -1
- package/dist/blocks/builtins/Accordion.d.ts +1 -2
- package/dist/blocks/builtins/Accordion.js +2 -39
- package/dist/blocks/builtins/Accordion.js.map +1 -1
- package/dist/blocks/builtins/AccordionRender.d.ts +7 -0
- package/dist/blocks/builtins/AccordionRender.js +42 -0
- package/dist/blocks/builtins/AccordionRender.js.map +1 -0
- package/dist/blocks/builtins/Agenda.d.ts +1 -29
- package/dist/blocks/builtins/Agenda.js +3 -94
- package/dist/blocks/builtins/Agenda.js.map +1 -1
- package/dist/blocks/builtins/AgendaRender.d.ts +34 -0
- package/dist/blocks/builtins/AgendaRender.js +96 -0
- package/dist/blocks/builtins/AgendaRender.js.map +1 -0
- package/dist/blocks/builtins/Banner.d.ts +1 -2
- package/dist/blocks/builtins/Banner.js +2 -32
- package/dist/blocks/builtins/Banner.js.map +1 -1
- package/dist/blocks/builtins/BannerRender.d.ts +11 -0
- package/dist/blocks/builtins/BannerRender.js +35 -0
- package/dist/blocks/builtins/BannerRender.js.map +1 -0
- package/dist/blocks/builtins/BeforeAfter.d.ts +1 -2
- package/dist/blocks/builtins/BeforeAfter.js +2 -31
- package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
- package/dist/blocks/builtins/BeforeAfterRender.d.ts +11 -0
- package/dist/blocks/builtins/BeforeAfterRender.js +34 -0
- package/dist/blocks/builtins/BeforeAfterRender.js.map +1 -0
- package/dist/blocks/builtins/Booking.d.ts +1 -2
- package/dist/blocks/builtins/Booking.js +2 -14
- package/dist/blocks/builtins/Booking.js.map +1 -1
- package/dist/blocks/builtins/BookingRender.d.ts +8 -0
- package/dist/blocks/builtins/BookingRender.js +17 -0
- package/dist/blocks/builtins/BookingRender.js.map +1 -0
- package/dist/blocks/builtins/Breadcrumbs.d.ts +1 -10
- package/dist/blocks/builtins/Breadcrumbs.js +3 -69
- package/dist/blocks/builtins/Breadcrumbs.js.map +1 -1
- package/dist/blocks/builtins/BreadcrumbsRender.d.ts +18 -0
- package/dist/blocks/builtins/BreadcrumbsRender.js +71 -0
- package/dist/blocks/builtins/BreadcrumbsRender.js.map +1 -0
- package/dist/blocks/builtins/Cards.d.ts +1 -2
- package/dist/blocks/builtins/Cards.js +2 -74
- package/dist/blocks/builtins/Cards.js.map +1 -1
- package/dist/blocks/builtins/CardsRender.d.ts +7 -0
- package/dist/blocks/builtins/CardsRender.js +77 -0
- package/dist/blocks/builtins/CardsRender.js.map +1 -0
- package/dist/blocks/builtins/Columns.d.ts +1 -2
- package/dist/blocks/builtins/Columns.js +2 -9
- package/dist/blocks/builtins/Columns.js.map +1 -1
- package/dist/blocks/builtins/ColumnsRender.d.ts +6 -0
- package/dist/blocks/builtins/ColumnsRender.js +12 -0
- package/dist/blocks/builtins/ColumnsRender.js.map +1 -0
- package/dist/blocks/builtins/Contact.d.ts +2 -7
- package/dist/blocks/builtins/Contact.js +3 -102
- package/dist/blocks/builtins/Contact.js.map +1 -1
- package/dist/blocks/builtins/ContactRender.d.ts +9 -0
- package/dist/blocks/builtins/ContactRender.js +105 -0
- package/dist/blocks/builtins/ContactRender.js.map +1 -0
- package/dist/blocks/builtins/Countdown.d.ts +1 -18
- package/dist/blocks/builtins/Countdown.js +3 -53
- package/dist/blocks/builtins/Countdown.js.map +1 -1
- package/dist/blocks/builtins/CountdownRender.d.ts +22 -0
- package/dist/blocks/builtins/CountdownRender.js +55 -0
- package/dist/blocks/builtins/CountdownRender.js.map +1 -0
- package/dist/blocks/builtins/Cta.d.ts +1 -2
- package/dist/blocks/builtins/Cta.js +2 -39
- package/dist/blocks/builtins/Cta.js.map +1 -1
- package/dist/blocks/builtins/CtaRender.d.ts +6 -0
- package/dist/blocks/builtins/CtaRender.js +42 -0
- package/dist/blocks/builtins/CtaRender.js.map +1 -0
- package/dist/blocks/builtins/Downloads.d.ts +1 -2
- package/dist/blocks/builtins/Downloads.js +2 -16
- package/dist/blocks/builtins/Downloads.js.map +1 -1
- package/dist/blocks/builtins/DownloadsRender.d.ts +7 -0
- package/dist/blocks/builtins/DownloadsRender.js +19 -0
- package/dist/blocks/builtins/DownloadsRender.js.map +1 -0
- package/dist/blocks/builtins/Elements.d.ts +3 -4
- package/dist/blocks/builtins/Elements.js +4 -38
- package/dist/blocks/builtins/Elements.js.map +1 -1
- package/dist/blocks/builtins/ElementsRender.d.ts +10 -0
- package/dist/blocks/builtins/ElementsRender.js +41 -0
- package/dist/blocks/builtins/ElementsRender.js.map +1 -0
- package/dist/blocks/builtins/Embed.d.ts +1 -2
- package/dist/blocks/builtins/Embed.js +2 -19
- package/dist/blocks/builtins/Embed.js.map +1 -1
- package/dist/blocks/builtins/EmbedRender.d.ts +7 -0
- package/dist/blocks/builtins/EmbedRender.js +22 -0
- package/dist/blocks/builtins/EmbedRender.js.map +1 -0
- package/dist/blocks/builtins/Faq.d.ts +1 -6
- package/dist/blocks/builtins/Faq.js +3 -103
- package/dist/blocks/builtins/Faq.js.map +1 -1
- package/dist/blocks/builtins/FaqRender.d.ts +10 -0
- package/dist/blocks/builtins/FaqRender.js +105 -0
- package/dist/blocks/builtins/FaqRender.js.map +1 -0
- package/dist/blocks/builtins/FormBlock.d.ts +1 -2
- package/dist/blocks/builtins/FormBlock.js +2 -222
- package/dist/blocks/builtins/FormBlock.js.map +1 -1
- package/dist/blocks/builtins/FormBlockRender.d.ts +6 -0
- package/dist/blocks/builtins/FormBlockRender.js +225 -0
- package/dist/blocks/builtins/FormBlockRender.js.map +1 -0
- package/dist/blocks/builtins/Gallery.d.ts +1 -23
- package/dist/blocks/builtins/Gallery.js +2 -164
- package/dist/blocks/builtins/Gallery.js.map +1 -1
- package/dist/blocks/builtins/GalleryRender.d.ts +25 -0
- package/dist/blocks/builtins/GalleryRender.js +167 -0
- package/dist/blocks/builtins/GalleryRender.js.map +1 -0
- package/dist/blocks/builtins/Hero.d.ts +1 -2
- package/dist/blocks/builtins/Hero.js +2 -73
- package/dist/blocks/builtins/Hero.js.map +1 -1
- package/dist/blocks/builtins/HeroRender.d.ts +6 -0
- package/dist/blocks/builtins/HeroRender.js +76 -0
- package/dist/blocks/builtins/HeroRender.js.map +1 -0
- package/dist/blocks/builtins/ImageBlock.d.ts +1 -2
- package/dist/blocks/builtins/ImageBlock.js +2 -22
- package/dist/blocks/builtins/ImageBlock.js.map +1 -1
- package/dist/blocks/builtins/ImageBlockRender.d.ts +6 -0
- package/dist/blocks/builtins/ImageBlockRender.js +25 -0
- package/dist/blocks/builtins/ImageBlockRender.js.map +1 -0
- package/dist/blocks/builtins/Jobs.d.ts +1 -15
- package/dist/blocks/builtins/Jobs.js +3 -69
- package/dist/blocks/builtins/Jobs.js.map +1 -1
- package/dist/blocks/builtins/JobsRender.d.ts +17 -0
- package/dist/blocks/builtins/JobsRender.js +71 -0
- package/dist/blocks/builtins/JobsRender.js.map +1 -0
- package/dist/blocks/builtins/Layout.d.ts +2 -3
- package/dist/blocks/builtins/Layout.js +3 -39
- package/dist/blocks/builtins/Layout.js.map +1 -1
- package/dist/blocks/builtins/LayoutRender.d.ts +8 -0
- package/dist/blocks/builtins/LayoutRender.js +42 -0
- package/dist/blocks/builtins/LayoutRender.js.map +1 -0
- package/dist/blocks/builtins/MapBlock.d.ts +1 -2
- package/dist/blocks/builtins/MapBlock.js +2 -45
- package/dist/blocks/builtins/MapBlock.js.map +1 -1
- package/dist/blocks/builtins/MapBlockRender.d.ts +6 -0
- package/dist/blocks/builtins/MapBlockRender.js +48 -0
- package/dist/blocks/builtins/MapBlockRender.js.map +1 -0
- package/dist/blocks/builtins/NewsListBlock.d.ts +1 -2
- package/dist/blocks/builtins/NewsListBlock.js +2 -11
- package/dist/blocks/builtins/NewsListBlock.js.map +1 -1
- package/dist/blocks/builtins/NewsListBlockRender.d.ts +6 -0
- package/dist/blocks/builtins/NewsListBlockRender.js +14 -0
- package/dist/blocks/builtins/NewsListBlockRender.js.map +1 -0
- package/dist/blocks/builtins/Newsletter.d.ts +1 -2
- package/dist/blocks/builtins/Newsletter.js +2 -89
- package/dist/blocks/builtins/Newsletter.js.map +1 -1
- package/dist/blocks/builtins/NewsletterRender.d.ts +13 -0
- package/dist/blocks/builtins/NewsletterRender.js +92 -0
- package/dist/blocks/builtins/NewsletterRender.js.map +1 -0
- package/dist/blocks/builtins/OpeningHours.d.ts +1 -2
- package/dist/blocks/builtins/OpeningHours.js +2 -28
- package/dist/blocks/builtins/OpeningHours.js.map +1 -1
- package/dist/blocks/builtins/OpeningHoursRender.d.ts +7 -0
- package/dist/blocks/builtins/OpeningHoursRender.js +31 -0
- package/dist/blocks/builtins/OpeningHoursRender.js.map +1 -0
- package/dist/blocks/builtins/PdfBlock.d.ts +1 -2
- package/dist/blocks/builtins/PdfBlock.js +2 -76
- package/dist/blocks/builtins/PdfBlock.js.map +1 -1
- package/dist/blocks/builtins/PdfBlockRender.d.ts +11 -0
- package/dist/blocks/builtins/PdfBlockRender.js +79 -0
- package/dist/blocks/builtins/PdfBlockRender.js.map +1 -0
- package/dist/blocks/builtins/Portfolio.d.ts +1 -2
- package/dist/blocks/builtins/Portfolio.js +2 -75
- package/dist/blocks/builtins/Portfolio.js.map +1 -1
- package/dist/blocks/builtins/PortfolioRender.d.ts +7 -0
- package/dist/blocks/builtins/PortfolioRender.js +78 -0
- package/dist/blocks/builtins/PortfolioRender.js.map +1 -0
- package/dist/blocks/builtins/Pricing.d.ts +1 -8
- package/dist/blocks/builtins/Pricing.js +3 -73
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/PricingRender.d.ts +10 -0
- package/dist/blocks/builtins/PricingRender.js +75 -0
- package/dist/blocks/builtins/PricingRender.js.map +1 -0
- package/dist/blocks/builtins/RichTextBlock.d.ts +1 -2
- package/dist/blocks/builtins/RichTextBlock.js +2 -5
- package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
- package/dist/blocks/builtins/RichTextBlockRender.d.ts +6 -0
- package/dist/blocks/builtins/RichTextBlockRender.js +8 -0
- package/dist/blocks/builtins/RichTextBlockRender.js.map +1 -0
- package/dist/blocks/builtins/Search.d.ts +1 -2
- package/dist/blocks/builtins/Search.js +2 -80
- package/dist/blocks/builtins/Search.js.map +1 -1
- package/dist/blocks/builtins/SearchRender.d.ts +7 -0
- package/dist/blocks/builtins/SearchRender.js +83 -0
- package/dist/blocks/builtins/SearchRender.js.map +1 -0
- package/dist/blocks/builtins/Sections.d.ts +4 -5
- package/dist/blocks/builtins/Sections.js +5 -142
- package/dist/blocks/builtins/Sections.js.map +1 -1
- package/dist/blocks/builtins/SectionsRender.d.ts +12 -0
- package/dist/blocks/builtins/SectionsRender.js +145 -0
- package/dist/blocks/builtins/SectionsRender.js.map +1 -0
- package/dist/blocks/builtins/Slider.d.ts +1 -2
- package/dist/blocks/builtins/Slider.js +2 -134
- package/dist/blocks/builtins/Slider.js.map +1 -1
- package/dist/blocks/builtins/SliderRender.d.ts +7 -0
- package/dist/blocks/builtins/SliderRender.js +137 -0
- package/dist/blocks/builtins/SliderRender.js.map +1 -0
- package/dist/blocks/builtins/Spacer.d.ts +1 -2
- package/dist/blocks/builtins/Spacer.js +2 -6
- package/dist/blocks/builtins/Spacer.js.map +1 -1
- package/dist/blocks/builtins/SpacerRender.d.ts +6 -0
- package/dist/blocks/builtins/SpacerRender.js +9 -0
- package/dist/blocks/builtins/SpacerRender.js.map +1 -0
- package/dist/blocks/builtins/SymbolRef.d.ts +1 -2
- package/dist/blocks/builtins/SymbolRef.js +2 -76
- package/dist/blocks/builtins/SymbolRef.js.map +1 -1
- package/dist/blocks/builtins/SymbolRefRender.d.ts +13 -0
- package/dist/blocks/builtins/SymbolRefRender.js +79 -0
- package/dist/blocks/builtins/SymbolRefRender.js.map +1 -0
- package/dist/blocks/builtins/Team.d.ts +1 -2
- package/dist/blocks/builtins/Team.js +2 -55
- package/dist/blocks/builtins/Team.js.map +1 -1
- package/dist/blocks/builtins/TeamRender.d.ts +7 -0
- package/dist/blocks/builtins/TeamRender.js +58 -0
- package/dist/blocks/builtins/TeamRender.js.map +1 -0
- package/dist/blocks/builtins/Testimonials.d.ts +1 -8
- package/dist/blocks/builtins/Testimonials.js +2 -69
- package/dist/blocks/builtins/Testimonials.js.map +1 -1
- package/dist/blocks/builtins/TestimonialsRender.d.ts +10 -0
- package/dist/blocks/builtins/TestimonialsRender.js +72 -0
- package/dist/blocks/builtins/TestimonialsRender.js.map +1 -0
- package/dist/blocks/builtins/Video.d.ts +1 -9
- package/dist/blocks/builtins/Video.js +2 -64
- package/dist/blocks/builtins/Video.js.map +1 -1
- package/dist/blocks/builtins/VideoRender.d.ts +10 -0
- package/dist/blocks/builtins/VideoRender.js +67 -0
- package/dist/blocks/builtins/VideoRender.js.map +1 -0
- package/dist/blocks/builtins/WhatsappChat.d.ts +1 -8
- package/dist/blocks/builtins/WhatsappChat.js +2 -37
- package/dist/blocks/builtins/WhatsappChat.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChatRender.d.ts +17 -0
- package/dist/blocks/builtins/WhatsappChatRender.js +40 -0
- package/dist/blocks/builtins/WhatsappChatRender.js.map +1 -0
- package/dist/blocks/builtins/Widgets.d.ts +12 -13
- package/dist/blocks/builtins/Widgets.js +13 -175
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/builtins/WidgetsRender.d.ts +34 -0
- package/dist/blocks/builtins/WidgetsRender.js +178 -0
- package/dist/blocks/builtins/WidgetsRender.js.map +1 -0
- package/dist/blocks/reportRenderFout.d.ts +13 -0
- package/dist/blocks/reportRenderFout.js +31 -0
- package/dist/blocks/reportRenderFout.js.map +1 -0
- package/dist/modules/contract.js +2 -1
- package/dist/modules/contract.js.map +1 -1
- package/dist/modules/shop/blocks/Cart.js +1 -2
- package/dist/modules/shop/blocks/Cart.js.map +1 -1
- package/dist/modules/shop/blocks/Checkout.js +1 -2
- package/dist/modules/shop/blocks/Checkout.js.map +1 -1
- package/dist/modules/shop/blocks/Donation.js +1 -2
- package/dist/modules/shop/blocks/Donation.js.map +1 -1
- package/dist/modules/shop/blocks/OrderStatus.js +0 -2
- package/dist/modules/shop/blocks/OrderStatus.js.map +1 -1
- package/dist/modules/shop/blocks/ProductDetail.js +1 -7
- package/dist/modules/shop/blocks/ProductDetail.js.map +1 -1
- package/dist/modules/shop/blocks/ProductGrid.js +1 -2
- package/dist/modules/shop/blocks/ProductGrid.js.map +1 -1
- package/dist/modules/shop/blocks/ShopCategories.js +0 -2
- package/dist/modules/shop/blocks/ShopCategories.js.map +1 -1
- package/dist/modules/shop/module.js +1 -0
- package/dist/modules/shop/module.js.map +1 -1
- package/dist/modules/shop/schemas.d.ts +1 -0
- package/dist/modules/shop/schemas.js +32 -0
- package/dist/modules/shop/schemas.js.map +1 -0
- package/dist/modules/types.d.ts +6 -0
- package/dist/schema/shop.d.ts +1 -11
- package/dist/schema/shop.js +1 -20
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/shopGeld.d.ts +18 -0
- package/dist/schema/shopGeld.js +27 -0
- package/dist/schema/shopGeld.js.map +1 -0
- package/dist/styles.css +17 -0
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { Heading } from "../ui/index.js";
|
|
5
|
+
function compute(target) {
|
|
6
|
+
const t = new Date(target).getTime();
|
|
7
|
+
if (Number.isNaN(t)) return null;
|
|
8
|
+
const diff = t - Date.now();
|
|
9
|
+
if (diff <= 0) return { days: 0, hours: 0, minutes: 0, seconds: 0, done: true };
|
|
10
|
+
const s = Math.floor(diff / 1e3);
|
|
11
|
+
return {
|
|
12
|
+
days: Math.floor(s / 86400),
|
|
13
|
+
hours: Math.floor(s % 86400 / 3600),
|
|
14
|
+
minutes: Math.floor(s % 3600 / 60),
|
|
15
|
+
seconds: s % 60,
|
|
16
|
+
done: false
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function useCountdown(target) {
|
|
20
|
+
const [r, setR] = useState(null);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!target) return;
|
|
23
|
+
setR(compute(target));
|
|
24
|
+
const id = setInterval(() => setR(compute(target)), 1e3);
|
|
25
|
+
return () => clearInterval(id);
|
|
26
|
+
}, [target]);
|
|
27
|
+
return r;
|
|
28
|
+
}
|
|
29
|
+
const UNITS = [
|
|
30
|
+
{ key: "days", label: "dagen" },
|
|
31
|
+
{ key: "hours", label: "uur" },
|
|
32
|
+
{ key: "minutes", label: "min" },
|
|
33
|
+
{ key: "seconds", label: "sec" }
|
|
34
|
+
];
|
|
35
|
+
function CountdownDigits({ r, showLabels = true }) {
|
|
36
|
+
return /* @__PURE__ */ jsx("div", { className: "xicms-countdown__digits", role: "timer", "aria-live": "off", children: UNITS.map((u) => /* @__PURE__ */ jsxs("div", { className: "xicms-countdown__unit", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-countdown__value", children: String(r[u.key]).padStart(2, "0") }),
|
|
38
|
+
showLabels && /* @__PURE__ */ jsx("span", { className: "xicms-countdown__label", children: u.label })
|
|
39
|
+
] }, u.key)) });
|
|
40
|
+
}
|
|
41
|
+
function CountdownRender({ block, mode }) {
|
|
42
|
+
const r = useCountdown(block.target);
|
|
43
|
+
if (!block.target) return null;
|
|
44
|
+
if (r?.done && block.onExpire === "hide" && mode !== "preview") return null;
|
|
45
|
+
return /* @__PURE__ */ jsxs("section", { className: "xicms-countdown", children: [
|
|
46
|
+
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, className: "xicms-countdown__heading", "data-xicms-edit": "heading", children: block.heading }),
|
|
47
|
+
r === null ? /* @__PURE__ */ jsx("p", { className: "xicms-countdown__loading", "aria-hidden": "true", children: "\u2026" }) : r.done ? /* @__PURE__ */ jsx("p", { className: "xicms-countdown__expired", "data-xicms-edit": "expiredText", children: block.expiredText }) : /* @__PURE__ */ jsx(CountdownDigits, { r, showLabels: block.showLabels })
|
|
48
|
+
] });
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
CountdownDigits,
|
|
52
|
+
CountdownRender,
|
|
53
|
+
useCountdown
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=CountdownRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/CountdownRender.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { z } from \"zod\";\nimport type { CountdownBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { Heading } from \"../ui\";\n\nexport interface Remaining {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n done: boolean;\n}\n\nfunction compute(target: string): Remaining | null {\n const t = new Date(target).getTime();\n if (Number.isNaN(t)) return null;\n const diff = t - Date.now();\n if (diff <= 0) return { days: 0, hours: 0, minutes: 0, seconds: 0, done: true };\n const s = Math.floor(diff / 1000);\n return {\n days: Math.floor(s / 86400),\n hours: Math.floor((s % 86400) / 3600),\n minutes: Math.floor((s % 3600) / 60),\n seconds: s % 60,\n done: false,\n };\n}\n\n/**\n * Tikkende afteltimer naar `target`. Client-only (start `null` om hydration-mismatch te voorkomen).\n * Gedeeld door het volwaardige Countdown-blok en de compacte widget.\n */\nexport function useCountdown(target: string): Remaining | null {\n const [r, setR] = useState<Remaining | null>(null);\n useEffect(() => {\n if (!target) return;\n setR(compute(target));\n const id = setInterval(() => setR(compute(target)), 1000);\n return () => clearInterval(id);\n }, [target]);\n return r;\n}\n\nconst UNITS: { key: keyof Remaining; label: string }[] = [\n { key: \"days\", label: \"dagen\" },\n { key: \"hours\", label: \"uur\" },\n { key: \"minutes\", label: \"min\" },\n { key: \"seconds\", label: \"sec\" },\n];\n\nexport function CountdownDigits({ r, showLabels = true }: { r: Remaining; showLabels?: boolean }) {\n return (\n <div className=\"xicms-countdown__digits\" role=\"timer\" aria-live=\"off\">\n {UNITS.map((u) => (\n <div key={u.key} className=\"xicms-countdown__unit\">\n <span className=\"xicms-countdown__value\">{String(r[u.key] as number).padStart(2, \"0\")}</span>\n {showLabels && <span className=\"xicms-countdown__label\">{u.label}</span>}\n </div>\n ))}\n </div>\n );\n}\n\ntype Countdown = z.infer<typeof CountdownBlockSchema>;\n\nexport function CountdownRender({ block, mode }: BlockRenderProps<Countdown>) {\n const r = useCountdown(block.target);\n if (!block.target) return null;\n // Na afloop optioneel het hele blok verbergen (bv. een verlopen actie-aankondiging) —\n // behalve in de editor-preview, anders kan de editor het blok niet meer terugvinden.\n if (r?.done && block.onExpire === \"hide\" && mode !== \"preview\") return null;\n return (\n <section className=\"xicms-countdown\">\n {block.heading && <Heading level={2} className=\"xicms-countdown__heading\" data-xicms-edit=\"heading\">{block.heading}</Heading>}\n {r === null ? (\n <p className=\"xicms-countdown__loading\" aria-hidden=\"true\">…</p>\n ) : r.done ? (\n <p className=\"xicms-countdown__expired\" data-xicms-edit=\"expiredText\">{block.expiredText}</p>\n ) : (\n <CountdownDigits r={r} showLabels={block.showLabels} />\n )}\n </section>\n );\n}\n"],"mappings":";AAyDQ,SACE,KADF;AAvDR,SAAS,WAAW,gBAAgB;AAIpC,SAAS,eAAe;AAUxB,SAAS,QAAQ,QAAkC;AACjD,QAAM,IAAI,IAAI,KAAK,MAAM,EAAE,QAAQ;AACnC,MAAI,OAAO,MAAM,CAAC,EAAG,QAAO;AAC5B,QAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,MAAI,QAAQ,EAAG,QAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,KAAK;AAC9E,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,SAAO;AAAA,IACL,MAAM,KAAK,MAAM,IAAI,KAAK;AAAA,IAC1B,OAAO,KAAK,MAAO,IAAI,QAAS,IAAI;AAAA,IACpC,SAAS,KAAK,MAAO,IAAI,OAAQ,EAAE;AAAA,IACnC,SAAS,IAAI;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAMO,SAAS,aAAa,QAAkC;AAC7D,QAAM,CAAC,GAAG,IAAI,IAAI,SAA2B,IAAI;AACjD,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,SAAK,QAAQ,MAAM,CAAC;AACpB,UAAM,KAAK,YAAY,MAAM,KAAK,QAAQ,MAAM,CAAC,GAAG,GAAI;AACxD,WAAO,MAAM,cAAc,EAAE;AAAA,EAC/B,GAAG,CAAC,MAAM,CAAC;AACX,SAAO;AACT;AAEA,MAAM,QAAmD;AAAA,EACvD,EAAE,KAAK,QAAQ,OAAO,QAAQ;AAAA,EAC9B,EAAE,KAAK,SAAS,OAAO,MAAM;AAAA,EAC7B,EAAE,KAAK,WAAW,OAAO,MAAM;AAAA,EAC/B,EAAE,KAAK,WAAW,OAAO,MAAM;AACjC;AAEO,SAAS,gBAAgB,EAAE,GAAG,aAAa,KAAK,GAA2C;AAChG,SACE,oBAAC,SAAI,WAAU,2BAA0B,MAAK,SAAQ,aAAU,OAC7D,gBAAM,IAAI,CAAC,MACV,qBAAC,SAAgB,WAAU,yBACzB;AAAA,wBAAC,UAAK,WAAU,0BAA0B,iBAAO,EAAE,EAAE,GAAG,CAAW,EAAE,SAAS,GAAG,GAAG,GAAE;AAAA,IACrF,cAAc,oBAAC,UAAK,WAAU,0BAA0B,YAAE,OAAM;AAAA,OAFzD,EAAE,GAGZ,CACD,GACH;AAEJ;AAIO,SAAS,gBAAgB,EAAE,OAAO,KAAK,GAAgC;AAC5E,QAAM,IAAI,aAAa,MAAM,MAAM;AACnC,MAAI,CAAC,MAAM,OAAQ,QAAO;AAG1B,MAAI,GAAG,QAAQ,MAAM,aAAa,UAAU,SAAS,UAAW,QAAO;AACvE,SACE,qBAAC,aAAQ,WAAU,mBAChB;AAAA,UAAM,WAAW,oBAAC,WAAQ,OAAO,GAAG,WAAU,4BAA2B,mBAAgB,WAAW,gBAAM,SAAQ;AAAA,IAClH,MAAM,OACL,oBAAC,OAAE,WAAU,4BAA2B,eAAY,QAAO,oBAAC,IAC1D,EAAE,OACJ,oBAAC,OAAE,WAAU,4BAA2B,mBAAgB,eAAe,gBAAM,aAAY,IAEzF,oBAAC,mBAAgB,GAAM,YAAY,MAAM,YAAY;AAAA,KAEzD;AAEJ;","names":[]}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const ctaBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const ctaBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,46 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
3
2
|
import { defineBlock } from "../registry.js";
|
|
4
|
-
import { VStack, HStack, Card, Heading, Text, Btn } from "../ui/index.js";
|
|
5
|
-
function CtaRender({ block }) {
|
|
6
|
-
if (block.sticky) {
|
|
7
|
-
return /* @__PURE__ */ jsxs(
|
|
8
|
-
HStack,
|
|
9
|
-
{
|
|
10
|
-
gap: 3,
|
|
11
|
-
vAlign: "center",
|
|
12
|
-
hAlign: "between",
|
|
13
|
-
role: "region",
|
|
14
|
-
"aria-label": block.title || "Call-to-action",
|
|
15
|
-
style: { position: "sticky", bottom: 0, zIndex: 30, padding: "0.75rem 1rem", background: "var(--color-background-card)", borderTop: "1px solid var(--color-border)", flexWrap: "wrap" },
|
|
16
|
-
children: [
|
|
17
|
-
/* @__PURE__ */ jsx(Text, { weight: "bold", children: block.title || block.text }),
|
|
18
|
-
/* @__PURE__ */ jsx(Btn, { label: block.buttonLabel, href: block.buttonHref, variant: block.buttonVariant, size: "md", editField: "buttonLabel" })
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
return /* @__PURE__ */ jsx(
|
|
24
|
-
Card,
|
|
25
|
-
{
|
|
26
|
-
padding: 6,
|
|
27
|
-
variant: block.backgroundColor ? "default" : "muted",
|
|
28
|
-
style: block.backgroundColor ? { background: block.backgroundColor } : void 0,
|
|
29
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: 3, hAlign: "center", style: { textAlign: "center" }, children: [
|
|
30
|
-
block.title && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "title", children: block.title }),
|
|
31
|
-
block.text && /* @__PURE__ */ jsx(Text, { type: "large", color: "secondary", "data-xicms-edit": "text", children: block.text }),
|
|
32
|
-
/* @__PURE__ */ jsxs(HStack, { gap: 2, hAlign: "center", style: { flexWrap: "wrap" }, children: [
|
|
33
|
-
/* @__PURE__ */ jsx(Btn, { label: block.buttonLabel, href: block.buttonHref, variant: block.buttonVariant, editField: "buttonLabel" }),
|
|
34
|
-
block.button2Label && /* @__PURE__ */ jsx(Btn, { label: block.button2Label, href: block.button2Href ?? "#", variant: "outline", editField: "button2Label" })
|
|
35
|
-
] })
|
|
36
|
-
] })
|
|
37
|
-
}
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
3
|
const ctaBlock = defineBlock({
|
|
41
4
|
type: "cta",
|
|
42
5
|
fields: { buttonVariant: { type: "select", options: [{ value: "primary", label: "Primair" }, { value: "secondary", label: "Secundair" }, { value: "outline", label: "Outline" }] } },
|
|
43
|
-
Render: CtaRender,
|
|
6
|
+
Render: dynamic(() => import("./CtaRender.js").then((m) => m.CtaRender)),
|
|
44
7
|
label: "Call-to-action",
|
|
45
8
|
icon: "\u{1F4E3}",
|
|
46
9
|
defaults: () => ({ title: "Klaar om te starten?", buttonLabel: "Neem contact op", buttonHref: "#contact", buttonVariant: "primary" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Cta.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Cta.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const ctaBlock = defineBlock({\n type: \"cta\",\n fields: { buttonVariant: { type: \"select\", options: [{ value: \"primary\", label: \"Primair\" }, { value: \"secondary\", label: \"Secundair\" }, { value: \"outline\", label: \"Outline\" }] } },\n Render: dynamic(() => import(\"./CtaRender\").then((m) => m.CtaRender)),\n label: \"Call-to-action\",\n icon: \"📣\",\n defaults: () => ({ title: \"Klaar om te starten?\", buttonLabel: \"Neem contact op\", buttonHref: \"#contact\", buttonVariant: \"primary\" }),\n});\n"],"mappings":"AAAA,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAErB,MAAM,WAAW,YAAY;AAAA,EAClC,MAAM;AAAA,EACN,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,WAAW,OAAO,UAAU,GAAG,EAAE,OAAO,aAAa,OAAO,YAAY,GAAG,EAAE,OAAO,WAAW,OAAO,UAAU,CAAC,EAAE,EAAE;AAAA,EACnL,QAAQ,QAAQ,MAAM,OAAO,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,EACpE,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,OAAO,wBAAwB,aAAa,mBAAmB,YAAY,YAAY,eAAe,UAAU;AACrI,CAAC;","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { CtaBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
type Cta = z.infer<typeof CtaBlockSchema>;
|
|
5
|
+
export declare function CtaRender({ block }: BlockRenderProps<Cta>): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { VStack, HStack, Card, Heading, Text, Btn } from "../ui/index.js";
|
|
4
|
+
function CtaRender({ block }) {
|
|
5
|
+
if (block.sticky) {
|
|
6
|
+
return /* @__PURE__ */ jsxs(
|
|
7
|
+
HStack,
|
|
8
|
+
{
|
|
9
|
+
gap: 3,
|
|
10
|
+
vAlign: "center",
|
|
11
|
+
hAlign: "between",
|
|
12
|
+
role: "region",
|
|
13
|
+
"aria-label": block.title || "Call-to-action",
|
|
14
|
+
style: { position: "sticky", bottom: 0, zIndex: 30, padding: "0.75rem 1rem", background: "var(--color-background-card)", borderTop: "1px solid var(--color-border)", flexWrap: "wrap" },
|
|
15
|
+
children: [
|
|
16
|
+
/* @__PURE__ */ jsx(Text, { weight: "bold", children: block.title || block.text }),
|
|
17
|
+
/* @__PURE__ */ jsx(Btn, { label: block.buttonLabel, href: block.buttonHref, variant: block.buttonVariant, size: "md", editField: "buttonLabel" })
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
Card,
|
|
24
|
+
{
|
|
25
|
+
padding: 6,
|
|
26
|
+
variant: block.backgroundColor ? "default" : "muted",
|
|
27
|
+
style: block.backgroundColor ? { background: block.backgroundColor } : void 0,
|
|
28
|
+
children: /* @__PURE__ */ jsxs(VStack, { gap: 3, hAlign: "center", style: { textAlign: "center" }, children: [
|
|
29
|
+
block.title && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "title", children: block.title }),
|
|
30
|
+
block.text && /* @__PURE__ */ jsx(Text, { type: "large", color: "secondary", "data-xicms-edit": "text", children: block.text }),
|
|
31
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 2, hAlign: "center", style: { flexWrap: "wrap" }, children: [
|
|
32
|
+
/* @__PURE__ */ jsx(Btn, { label: block.buttonLabel, href: block.buttonHref, variant: block.buttonVariant, editField: "buttonLabel" }),
|
|
33
|
+
block.button2Label && /* @__PURE__ */ jsx(Btn, { label: block.button2Label, href: block.button2Href ?? "#", variant: "outline", editField: "button2Label" })
|
|
34
|
+
] })
|
|
35
|
+
] })
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
CtaRender
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=CtaRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/CtaRender.tsx"],"sourcesContent":["\"use client\";\n\nimport type { z } from \"zod\";\nimport type { CtaBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { VStack, HStack, Card, Heading, Text, Btn } from \"../ui\";\n\ntype Cta = z.infer<typeof CtaBlockSchema>;\n\nexport function CtaRender({ block }: BlockRenderProps<Cta>) {\n if (block.sticky) {\n return (\n <HStack\n gap={3}\n vAlign=\"center\"\n hAlign=\"between\"\n role=\"region\"\n aria-label={block.title || \"Call-to-action\"}\n style={{ position: \"sticky\", bottom: 0, zIndex: 30, padding: \"0.75rem 1rem\", background: \"var(--color-background-card)\", borderTop: \"1px solid var(--color-border)\", flexWrap: \"wrap\" }}\n >\n <Text weight=\"bold\">{block.title || block.text}</Text>\n <Btn label={block.buttonLabel} href={block.buttonHref} variant={block.buttonVariant} size=\"md\" editField=\"buttonLabel\" />\n </HStack>\n );\n }\n return (\n <Card\n padding={6}\n variant={block.backgroundColor ? \"default\" : \"muted\"}\n style={block.backgroundColor ? { background: block.backgroundColor } : undefined}\n >\n <VStack gap={3} hAlign=\"center\" style={{ textAlign: \"center\" }}>\n {block.title && <Heading level={2} data-xicms-edit=\"title\">{block.title}</Heading>}\n {block.text && <Text type=\"large\" color=\"secondary\" data-xicms-edit=\"text\">{block.text}</Text>}\n <HStack gap={2} hAlign=\"center\" style={{ flexWrap: \"wrap\" }}>\n <Btn label={block.buttonLabel} href={block.buttonHref} variant={block.buttonVariant} editField=\"buttonLabel\" />\n {block.button2Label && (\n <Btn label={block.button2Label} href={block.button2Href ?? \"#\"} variant=\"outline\" editField=\"button2Label\" />\n )}\n </HStack>\n </VStack>\n </Card>\n );\n}\n"],"mappings":";AAYM,SAQE,KARF;AAPN,SAAS,QAAQ,QAAQ,MAAM,SAAS,MAAM,WAAW;AAIlD,SAAS,UAAU,EAAE,MAAM,GAA0B;AAC1D,MAAI,MAAM,QAAQ;AAChB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,QAAO;AAAA,QACP,QAAO;AAAA,QACP,MAAK;AAAA,QACL,cAAY,MAAM,SAAS;AAAA,QAC3B,OAAO,EAAE,UAAU,UAAU,QAAQ,GAAG,QAAQ,IAAI,SAAS,gBAAgB,YAAY,gCAAgC,WAAW,iCAAiC,UAAU,OAAO;AAAA,QAEtL;AAAA,8BAAC,QAAK,QAAO,QAAQ,gBAAM,SAAS,MAAM,MAAK;AAAA,UAC/C,oBAAC,OAAI,OAAO,MAAM,aAAa,MAAM,MAAM,YAAY,SAAS,MAAM,eAAe,MAAK,MAAK,WAAU,eAAc;AAAA;AAAA;AAAA,IACzH;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,SAAS,MAAM,kBAAkB,YAAY;AAAA,MAC7C,OAAO,MAAM,kBAAkB,EAAE,YAAY,MAAM,gBAAgB,IAAI;AAAA,MAEvE,+BAAC,UAAO,KAAK,GAAG,QAAO,UAAS,OAAO,EAAE,WAAW,SAAS,GAC1D;AAAA,cAAM,SAAS,oBAAC,WAAQ,OAAO,GAAG,mBAAgB,SAAS,gBAAM,OAAM;AAAA,QACvE,MAAM,QAAQ,oBAAC,QAAK,MAAK,SAAQ,OAAM,aAAY,mBAAgB,QAAQ,gBAAM,MAAK;AAAA,QACvF,qBAAC,UAAO,KAAK,GAAG,QAAO,UAAS,OAAO,EAAE,UAAU,OAAO,GACxD;AAAA,8BAAC,OAAI,OAAO,MAAM,aAAa,MAAM,MAAM,YAAY,SAAS,MAAM,eAAe,WAAU,eAAc;AAAA,UAC5G,MAAM,gBACL,oBAAC,OAAI,OAAO,MAAM,cAAc,MAAM,MAAM,eAAe,KAAK,SAAQ,WAAU,WAAU,gBAAe;AAAA,WAE/G;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const downloadsBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const downloadsBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,22 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
2
2
|
import { defineBlock } from "../registry.js";
|
|
3
|
-
import { Heading } from "../ui/index.js";
|
|
4
|
-
import { fileIcon } from "./lib/fileIcon.js";
|
|
5
|
-
function DownloadsRender({ block }) {
|
|
6
|
-
const items = (block.items ?? []).map((d, i) => ({ ...d, _i: i })).filter((d) => d.label && d.href);
|
|
7
|
-
if (items.length === 0) return null;
|
|
8
|
-
return /* @__PURE__ */ jsxs("section", { className: "xicms-downloads", children: [
|
|
9
|
-
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
10
|
-
/* @__PURE__ */ jsx("ul", { className: "xicms-downloads__list", children: items.map((d) => /* @__PURE__ */ jsx("li", { className: "xicms-downloads__item", children: /* @__PURE__ */ jsxs("a", { className: "xicms-downloads__link", href: d.href, download: true, children: [
|
|
11
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-downloads__icon", "aria-hidden": "true", children: fileIcon(d.href) }),
|
|
12
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-downloads__label", "data-xicms-edit": `items.${d._i}.label`, children: d.label }),
|
|
13
|
-
d.meta && /* @__PURE__ */ jsx("span", { className: "xicms-downloads__meta", "data-xicms-edit": `items.${d._i}.meta`, children: d.meta })
|
|
14
|
-
] }) }, d._i)) })
|
|
15
|
-
] });
|
|
16
|
-
}
|
|
17
3
|
const downloadsBlock = defineBlock({
|
|
18
4
|
type: "downloads",
|
|
19
|
-
Render: DownloadsRender,
|
|
5
|
+
Render: dynamic(() => import("./DownloadsRender.js").then((m) => m.DownloadsRender)),
|
|
20
6
|
label: "Downloads",
|
|
21
7
|
icon: "\u{1F4E5}",
|
|
22
8
|
defaults: () => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Downloads.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Downloads.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const downloadsBlock = defineBlock({\n type: \"downloads\",\n Render: dynamic(() => import(\"./DownloadsRender\").then((m) => m.DownloadsRender)),\n label: \"Downloads\",\n icon: \"📥\",\n defaults: () => ({\n heading: \"Downloads\",\n items: [{ label: \"Brochure (PDF)\", href: \"\", meta: \"PDF\" }],\n }),\n});\n"],"mappings":"AAAA,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAErB,MAAM,iBAAiB,YAAY;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,mBAAmB,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC;AAAA,EAChF,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO;AAAA,IACf,SAAS;AAAA,IACT,OAAO,CAAC,EAAE,OAAO,kBAAkB,MAAM,IAAI,MAAM,MAAM,CAAC;AAAA,EAC5D;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { DownloadsBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
type Downloads = z.infer<typeof DownloadsBlockSchema>;
|
|
5
|
+
/** Downloadbare documenten (brochures, prijslijsten, voorwaarden). Server-safe. */
|
|
6
|
+
export declare function DownloadsRender({ block }: BlockRenderProps<Downloads>): import("react").JSX.Element | null;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Heading } from "../ui/index.js";
|
|
3
|
+
import { fileIcon } from "./lib/fileIcon.js";
|
|
4
|
+
function DownloadsRender({ block }) {
|
|
5
|
+
const items = (block.items ?? []).map((d, i) => ({ ...d, _i: i })).filter((d) => d.label && d.href);
|
|
6
|
+
if (items.length === 0) return null;
|
|
7
|
+
return /* @__PURE__ */ jsxs("section", { className: "xicms-downloads", children: [
|
|
8
|
+
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
9
|
+
/* @__PURE__ */ jsx("ul", { className: "xicms-downloads__list", children: items.map((d) => /* @__PURE__ */ jsx("li", { className: "xicms-downloads__item", children: /* @__PURE__ */ jsxs("a", { className: "xicms-downloads__link", href: d.href, download: true, children: [
|
|
10
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-downloads__icon", "aria-hidden": "true", children: fileIcon(d.href) }),
|
|
11
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-downloads__label", "data-xicms-edit": `items.${d._i}.label`, children: d.label }),
|
|
12
|
+
d.meta && /* @__PURE__ */ jsx("span", { className: "xicms-downloads__meta", "data-xicms-edit": `items.${d._i}.meta`, children: d.meta })
|
|
13
|
+
] }) }, d._i)) })
|
|
14
|
+
] });
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
DownloadsRender
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=DownloadsRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/DownloadsRender.tsx"],"sourcesContent":["import type { z } from \"zod\";\nimport type { DownloadsBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { Heading } from \"../ui\";\nimport { fileIcon } from \"./lib/fileIcon\";\n\ntype Downloads = z.infer<typeof DownloadsBlockSchema>;\n\n/** Downloadbare documenten (brochures, prijslijsten, voorwaarden). Server-safe. */\nexport function DownloadsRender({ block }: BlockRenderProps<Downloads>) {\n // _i = index in de OORSPRONKELIJKE array — de lijst wordt gefilterd op label && href.\n const items = (block.items ?? []).map((d, i) => ({ ...d, _i: i })).filter((d) => d.label && d.href);\n if (items.length === 0) return null;\n return (\n <section className=\"xicms-downloads\">\n {block.heading && <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>}\n <ul className=\"xicms-downloads__list\">\n {items.map((d) => (\n <li key={d._i} className=\"xicms-downloads__item\">\n <a className=\"xicms-downloads__link\" href={d.href} download>\n <span className=\"xicms-downloads__icon\" aria-hidden=\"true\">{fileIcon(d.href)}</span>\n <span className=\"xicms-downloads__label\" data-xicms-edit={`items.${d._i}.label`}>{d.label}</span>\n {d.meta && <span className=\"xicms-downloads__meta\" data-xicms-edit={`items.${d._i}.meta`}>{d.meta}</span>}\n </a>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n"],"mappings":"AAewB,cAIZ,YAJY;AAZxB,SAAS,eAAe;AACxB,SAAS,gBAAgB;AAKlB,SAAS,gBAAgB,EAAE,MAAM,GAAgC;AAEtE,QAAM,SAAS,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI;AAClG,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SACE,qBAAC,aAAQ,WAAU,mBAChB;AAAA,UAAM,WAAW,oBAAC,WAAQ,OAAO,GAAG,mBAAgB,WAAW,gBAAM,SAAQ;AAAA,IAC9E,oBAAC,QAAG,WAAU,yBACX,gBAAM,IAAI,CAAC,MACV,oBAAC,QAAc,WAAU,yBACvB,+BAAC,OAAE,WAAU,yBAAwB,MAAM,EAAE,MAAM,UAAQ,MACzD;AAAA,0BAAC,UAAK,WAAU,yBAAwB,eAAY,QAAQ,mBAAS,EAAE,IAAI,GAAE;AAAA,MAC7E,oBAAC,UAAK,WAAU,0BAAyB,mBAAiB,SAAS,EAAE,EAAE,UAAW,YAAE,OAAM;AAAA,MACzF,EAAE,QAAQ,oBAAC,UAAK,WAAU,yBAAwB,mBAAiB,SAAS,EAAE,EAAE,SAAU,YAAE,MAAK;AAAA,OACpG,KALO,EAAE,EAMX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const dividerBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const buttonsBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
2
|
+
export declare const quoteBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
3
|
+
export declare const dividerBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,57 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
3
2
|
import { defineBlock } from "../registry.js";
|
|
4
|
-
import { HStack, VStack, Card, Text, Btn, Divider } from "../ui/index.js";
|
|
5
|
-
function ButtonsRender({ block }) {
|
|
6
|
-
const items = (block.items ?? []).map((b, i) => ({ ...b, _i: i })).filter((b) => b.label);
|
|
7
|
-
if (items.length === 0) return null;
|
|
8
|
-
const hAlign = block.align === "center" ? "center" : block.align === "right" ? "end" : "start";
|
|
9
|
-
return /* @__PURE__ */ jsx(HStack, { gap: 2, hAlign, style: { flexWrap: "wrap" }, children: items.map((b) => /* @__PURE__ */ jsx(Btn, { label: b.label, href: b.href, variant: b.variant, editField: `items.${b._i}.label` }, b._i)) });
|
|
10
|
-
}
|
|
11
3
|
const buttonsBlock = defineBlock({
|
|
12
4
|
type: "buttons",
|
|
13
5
|
fields: { "items.variant": { type: "select", options: [{ value: "primary", label: "Primair" }, { value: "secondary", label: "Secundair" }, { value: "outline", label: "Outline" }] } },
|
|
14
|
-
Render: ButtonsRender,
|
|
6
|
+
Render: dynamic(() => import("./ElementsRender.js").then((m) => m.ButtonsRender)),
|
|
15
7
|
label: "Knoppen",
|
|
16
8
|
icon: "\u{1F518}",
|
|
17
9
|
defaults: () => ({ align: "left", items: [{ label: "Knop", href: "#", variant: "primary" }] })
|
|
18
10
|
});
|
|
19
|
-
function QuoteRender({ block }) {
|
|
20
|
-
if (!block.text) return null;
|
|
21
|
-
return /* @__PURE__ */ jsx(Card, { padding: 5, variant: "muted", children: /* @__PURE__ */ jsxs(VStack, { gap: 2, as: "figure", style: { margin: 0 }, children: [
|
|
22
|
-
/* @__PURE__ */ jsxs(Text, { type: "large", as: "p", style: { fontStyle: "italic" }, children: [
|
|
23
|
-
"\u201C",
|
|
24
|
-
/* @__PURE__ */ jsx("span", { "data-xicms-edit": "text", children: block.text }),
|
|
25
|
-
"\u201D"
|
|
26
|
-
] }),
|
|
27
|
-
(block.author || block.role) && /* @__PURE__ */ jsxs(Text, { as: "label", color: "secondary", children: [
|
|
28
|
-
"\u2014 ",
|
|
29
|
-
/* @__PURE__ */ jsx("span", { "data-xicms-edit": "author", children: block.author }),
|
|
30
|
-
block.role ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
31
|
-
" \xB7 ",
|
|
32
|
-
/* @__PURE__ */ jsx("span", { "data-xicms-edit": "role", children: block.role })
|
|
33
|
-
] }) : ""
|
|
34
|
-
] })
|
|
35
|
-
] }) });
|
|
36
|
-
}
|
|
37
11
|
const quoteBlock = defineBlock({
|
|
38
12
|
type: "quote",
|
|
39
|
-
Render: QuoteRender,
|
|
13
|
+
Render: dynamic(() => import("./ElementsRender.js").then((m) => m.QuoteRender)),
|
|
40
14
|
label: "Uitspraak",
|
|
41
15
|
icon: "\u275D",
|
|
42
16
|
defaults: () => ({ text: "Een krachtige uitspraak.", author: "" })
|
|
43
17
|
});
|
|
44
|
-
function DividerRender({ block }) {
|
|
45
|
-
const pad = block.spacing === "sm" ? "0.75rem" : block.spacing === "lg" ? "3rem" : "1.5rem";
|
|
46
|
-
if (block.variant === "space") return /* @__PURE__ */ jsx("div", { style: { height: pad }, "aria-hidden": "true" });
|
|
47
|
-
if (block.variant === "dots") {
|
|
48
|
-
return /* @__PURE__ */ jsx("div", { style: { textAlign: "center", padding: `${pad} 0`, color: "var(--color-text-secondary)", letterSpacing: "0.5em" }, "aria-hidden": "true", children: "\u2022 \u2022 \u2022" });
|
|
49
|
-
}
|
|
50
|
-
return /* @__PURE__ */ jsx("div", { style: { padding: `${pad} 0` }, children: /* @__PURE__ */ jsx(Divider, { variant: "subtle" }) });
|
|
51
|
-
}
|
|
52
18
|
const dividerBlock = defineBlock({
|
|
53
19
|
type: "divider",
|
|
54
|
-
Render: DividerRender,
|
|
20
|
+
Render: dynamic(() => import("./ElementsRender.js").then((m) => m.DividerRender)),
|
|
55
21
|
label: "Scheiding",
|
|
56
22
|
icon: "\u2796",
|
|
57
23
|
defaults: () => ({ variant: "line", spacing: "md" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Elements.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Elements.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const buttonsBlock = defineBlock({\n type: \"buttons\",\n fields: { \"items.variant\": { type: \"select\", options: [{ value: \"primary\", label: \"Primair\" }, { value: \"secondary\", label: \"Secundair\" }, { value: \"outline\", label: \"Outline\" }] } },\n Render: dynamic(() => import(\"./ElementsRender\").then((m) => m.ButtonsRender)),\n label: \"Knoppen\",\n icon: \"🔘\",\n defaults: () => ({ align: \"left\", items: [{ label: \"Knop\", href: \"#\", variant: \"primary\" }] }),\n});\n\nexport const quoteBlock = defineBlock({\n type: \"quote\",\n Render: dynamic(() => import(\"./ElementsRender\").then((m) => m.QuoteRender)),\n label: \"Uitspraak\",\n icon: \"❝\",\n defaults: () => ({ text: \"Een krachtige uitspraak.\", author: \"\" }),\n});\n\nexport const dividerBlock = defineBlock({\n type: \"divider\",\n Render: dynamic(() => import(\"./ElementsRender\").then((m) => m.DividerRender)),\n label: \"Scheiding\",\n icon: \"➖\",\n defaults: () => ({ variant: \"line\", spacing: \"md\" }),\n});\n"],"mappings":"AAAA,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAErB,MAAM,eAAe,YAAY;AAAA,EACtC,MAAM;AAAA,EACN,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,WAAW,OAAO,UAAU,GAAG,EAAE,OAAO,aAAa,OAAO,YAAY,GAAG,EAAE,OAAO,WAAW,OAAO,UAAU,CAAC,EAAE,EAAE;AAAA,EACrL,QAAQ,QAAQ,MAAM,OAAO,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;AAAA,EAC7E,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,OAAO,QAAQ,OAAO,CAAC,EAAE,OAAO,QAAQ,MAAM,KAAK,SAAS,UAAU,CAAC,EAAE;AAC9F,CAAC;AAEM,MAAM,aAAa,YAAY;AAAA,EACpC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAAA,EAC3E,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,MAAM,4BAA4B,QAAQ,GAAG;AAClE,CAAC;AAEM,MAAM,eAAe,YAAY;AAAA,EACtC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;AAAA,EAC7E,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,SAAS,QAAQ,SAAS,KAAK;AACpD,CAAC;","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { ButtonsBlockSchema, QuoteBlockSchema, DividerBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
type Buttons = z.infer<typeof ButtonsBlockSchema>;
|
|
5
|
+
export declare function ButtonsRender({ block }: BlockRenderProps<Buttons>): import("react").JSX.Element | null;
|
|
6
|
+
type Quote = z.infer<typeof QuoteBlockSchema>;
|
|
7
|
+
export declare function QuoteRender({ block }: BlockRenderProps<Quote>): import("react").JSX.Element | null;
|
|
8
|
+
type DividerBlk = z.infer<typeof DividerBlockSchema>;
|
|
9
|
+
export declare function DividerRender({ block }: BlockRenderProps<DividerBlk>): import("react").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { HStack, VStack, Card, Text, Btn, Divider } from "../ui/index.js";
|
|
4
|
+
function ButtonsRender({ block }) {
|
|
5
|
+
const items = (block.items ?? []).map((b, i) => ({ ...b, _i: i })).filter((b) => b.label);
|
|
6
|
+
if (items.length === 0) return null;
|
|
7
|
+
const hAlign = block.align === "center" ? "center" : block.align === "right" ? "end" : "start";
|
|
8
|
+
return /* @__PURE__ */ jsx(HStack, { gap: 2, hAlign, style: { flexWrap: "wrap" }, children: items.map((b) => /* @__PURE__ */ jsx(Btn, { label: b.label, href: b.href, variant: b.variant, editField: `items.${b._i}.label` }, b._i)) });
|
|
9
|
+
}
|
|
10
|
+
function QuoteRender({ block }) {
|
|
11
|
+
if (!block.text) return null;
|
|
12
|
+
return /* @__PURE__ */ jsx(Card, { padding: 5, variant: "muted", children: /* @__PURE__ */ jsxs(VStack, { gap: 2, as: "figure", style: { margin: 0 }, children: [
|
|
13
|
+
/* @__PURE__ */ jsxs(Text, { type: "large", as: "p", style: { fontStyle: "italic" }, children: [
|
|
14
|
+
"\u201C",
|
|
15
|
+
/* @__PURE__ */ jsx("span", { "data-xicms-edit": "text", children: block.text }),
|
|
16
|
+
"\u201D"
|
|
17
|
+
] }),
|
|
18
|
+
(block.author || block.role) && /* @__PURE__ */ jsxs(Text, { as: "label", color: "secondary", children: [
|
|
19
|
+
"\u2014 ",
|
|
20
|
+
/* @__PURE__ */ jsx("span", { "data-xicms-edit": "author", children: block.author }),
|
|
21
|
+
block.role ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22
|
+
" \xB7 ",
|
|
23
|
+
/* @__PURE__ */ jsx("span", { "data-xicms-edit": "role", children: block.role })
|
|
24
|
+
] }) : ""
|
|
25
|
+
] })
|
|
26
|
+
] }) });
|
|
27
|
+
}
|
|
28
|
+
function DividerRender({ block }) {
|
|
29
|
+
const pad = block.spacing === "sm" ? "0.75rem" : block.spacing === "lg" ? "3rem" : "1.5rem";
|
|
30
|
+
if (block.variant === "space") return /* @__PURE__ */ jsx("div", { style: { height: pad }, "aria-hidden": "true" });
|
|
31
|
+
if (block.variant === "dots") {
|
|
32
|
+
return /* @__PURE__ */ jsx("div", { style: { textAlign: "center", padding: `${pad} 0`, color: "var(--color-text-secondary)", letterSpacing: "0.5em" }, "aria-hidden": "true", children: "\u2022 \u2022 \u2022" });
|
|
33
|
+
}
|
|
34
|
+
return /* @__PURE__ */ jsx("div", { style: { padding: `${pad} 0` }, children: /* @__PURE__ */ jsx(Divider, { variant: "subtle" }) });
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
ButtonsRender,
|
|
38
|
+
DividerRender,
|
|
39
|
+
QuoteRender
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=ElementsRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/ElementsRender.tsx"],"sourcesContent":["\"use client\";\n\nimport type { z } from \"zod\";\nimport type { ButtonsBlockSchema, QuoteBlockSchema, DividerBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { HStack, VStack, Card, Text, Btn, Divider } from \"../ui\";\n\n/* ── Buttons (knopgroep) ─────────────────────────────────────────────────── */\ntype Buttons = z.infer<typeof ButtonsBlockSchema>;\nexport function ButtonsRender({ block }: BlockRenderProps<Buttons>) {\n // _i = index in de OORSPRONKELIJKE array — inline-edit-paden moeten naar de ongefilterde\n // items wijzen, anders schrijft bewerken naar het verkeerde (weggefilterde) item.\n const items = (block.items ?? []).map((b, i) => ({ ...b, _i: i })).filter((b) => b.label);\n if (items.length === 0) return null;\n const hAlign = block.align === \"center\" ? \"center\" : block.align === \"right\" ? \"end\" : \"start\";\n return (\n <HStack gap={2} hAlign={hAlign} style={{ flexWrap: \"wrap\" }}>\n {items.map((b) => (\n <Btn key={b._i} label={b.label} href={b.href} variant={b.variant} editField={`items.${b._i}.label`} />\n ))}\n </HStack>\n );\n}\n/* ── Quote (uitspraak) ───────────────────────────────────────────────────── */\ntype Quote = z.infer<typeof QuoteBlockSchema>;\nexport function QuoteRender({ block }: BlockRenderProps<Quote>) {\n if (!block.text) return null;\n return (\n <Card padding={5} variant=\"muted\">\n <VStack gap={2} as=\"figure\" style={{ margin: 0 }}>\n <Text type=\"large\" as=\"p\" style={{ fontStyle: \"italic\" }}>“<span data-xicms-edit=\"text\">{block.text}</span>”</Text>\n {(block.author || block.role) && (\n <Text as=\"label\" color=\"secondary\">\n — <span data-xicms-edit=\"author\">{block.author}</span>\n {block.role ? <> · <span data-xicms-edit=\"role\">{block.role}</span></> : \"\"}\n </Text>\n )}\n </VStack>\n </Card>\n );\n}\n/* ── Divider (scheiding) ─────────────────────────────────────────────────── */\ntype DividerBlk = z.infer<typeof DividerBlockSchema>;\nexport function DividerRender({ block }: BlockRenderProps<DividerBlk>) {\n const pad = block.spacing === \"sm\" ? \"0.75rem\" : block.spacing === \"lg\" ? \"3rem\" : \"1.5rem\";\n if (block.variant === \"space\") return <div style={{ height: pad }} aria-hidden=\"true\" />;\n if (block.variant === \"dots\") {\n return (\n <div style={{ textAlign: \"center\", padding: `${pad} 0`, color: \"var(--color-text-secondary)\", letterSpacing: \"0.5em\" }} aria-hidden=\"true\">\n • • •\n </div>\n );\n }\n return <div style={{ padding: `${pad} 0` }}><Divider variant=\"subtle\" /></div>;\n}\n"],"mappings":";AAkBQ,SAgBkB,UAhBlB,KAYA,YAZA;AAbR,SAAS,QAAQ,QAAQ,MAAM,MAAM,KAAK,eAAe;AAIlD,SAAS,cAAc,EAAE,MAAM,GAA8B;AAGlE,QAAM,SAAS,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK;AACxF,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,SAAS,MAAM,UAAU,WAAW,WAAW,MAAM,UAAU,UAAU,QAAQ;AACvF,SACE,oBAAC,UAAO,KAAK,GAAG,QAAgB,OAAO,EAAE,UAAU,OAAO,GACvD,gBAAM,IAAI,CAAC,MACV,oBAAC,OAAe,OAAO,EAAE,OAAO,MAAM,EAAE,MAAM,SAAS,EAAE,SAAS,WAAW,SAAS,EAAE,EAAE,YAAhF,EAAE,EAAwF,CACrG,GACH;AAEJ;AAGO,SAAS,YAAY,EAAE,MAAM,GAA4B;AAC9D,MAAI,CAAC,MAAM,KAAM,QAAO;AACxB,SACE,oBAAC,QAAK,SAAS,GAAG,SAAQ,SACxB,+BAAC,UAAO,KAAK,GAAG,IAAG,UAAS,OAAO,EAAE,QAAQ,EAAE,GAC7C;AAAA,yBAAC,QAAK,MAAK,SAAQ,IAAG,KAAI,OAAO,EAAE,WAAW,SAAS,GAAG;AAAA;AAAA,MAAC,oBAAC,UAAK,mBAAgB,QAAQ,gBAAM,MAAK;AAAA,MAAO;AAAA,OAAC;AAAA,KAC1G,MAAM,UAAU,MAAM,SACtB,qBAAC,QAAK,IAAG,SAAQ,OAAM,aAAY;AAAA;AAAA,MAC/B,oBAAC,UAAK,mBAAgB,UAAU,gBAAM,QAAO;AAAA,MAC9C,MAAM,OAAO,iCAAE;AAAA;AAAA,QAAG,oBAAC,UAAK,mBAAgB,QAAQ,gBAAM,MAAK;AAAA,SAAO,IAAM;AAAA,OAC3E;AAAA,KAEJ,GACF;AAEJ;AAGO,SAAS,cAAc,EAAE,MAAM,GAAiC;AACrE,QAAM,MAAM,MAAM,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,SAAS;AACnF,MAAI,MAAM,YAAY,QAAS,QAAO,oBAAC,SAAI,OAAO,EAAE,QAAQ,IAAI,GAAG,eAAY,QAAO;AACtF,MAAI,MAAM,YAAY,QAAQ;AAC5B,WACE,oBAAC,SAAI,OAAO,EAAE,WAAW,UAAU,SAAS,GAAG,GAAG,MAAM,OAAO,+BAA+B,eAAe,QAAQ,GAAG,eAAY,QAAO,kCAE3I;AAAA,EAEJ;AACA,SAAO,oBAAC,SAAI,OAAO,EAAE,SAAS,GAAG,GAAG,KAAK,GAAG,8BAAC,WAAQ,SAAQ,UAAS,GAAE;AAC1E;","names":[]}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const embedBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const embedBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,25 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
3
2
|
import { defineBlock } from "../registry.js";
|
|
4
|
-
import { ConsentEmbed } from "./consentEmbed.js";
|
|
5
|
-
function EmbedRender({ block, mode }) {
|
|
6
|
-
if (!block.url) return null;
|
|
7
|
-
const sizing = block.aspectRatio && block.aspectRatio !== "fixed" ? { aspectRatio: block.aspectRatio.replace("/", " / ") } : { height: `${block.height}px` };
|
|
8
|
-
return /* @__PURE__ */ jsx("div", { className: "xicms-embed", style: sizing, children: /* @__PURE__ */ jsx(ConsentEmbed, { gated: block.consentGated, preview: mode === "preview", label: block.title ?? "Embed", children: /* @__PURE__ */ jsx(
|
|
9
|
-
"iframe",
|
|
10
|
-
{
|
|
11
|
-
src: block.url,
|
|
12
|
-
title: block.title ?? "Embed",
|
|
13
|
-
loading: "lazy",
|
|
14
|
-
referrerPolicy: "no-referrer-when-downgrade",
|
|
15
|
-
sandbox: "allow-scripts allow-same-origin allow-forms allow-popups",
|
|
16
|
-
style: { border: 0, width: "100%", height: "100%" }
|
|
17
|
-
}
|
|
18
|
-
) }) });
|
|
19
|
-
}
|
|
20
3
|
const embedBlock = defineBlock({
|
|
21
4
|
type: "embed",
|
|
22
|
-
Render: EmbedRender,
|
|
5
|
+
Render: dynamic(() => import("./EmbedRender.js").then((m) => m.EmbedRender)),
|
|
23
6
|
label: "Embed (iframe)",
|
|
24
7
|
icon: "\u{1F9E9}",
|
|
25
8
|
defaults: () => ({ url: "", height: 420, consentGated: true })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Embed.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Embed.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const embedBlock = defineBlock({\n type: \"embed\",\n Render: dynamic(() => import(\"./EmbedRender\").then((m) => m.EmbedRender)),\n label: \"Embed (iframe)\",\n icon: \"🧩\",\n defaults: () => ({ url: \"\", height: 420, consentGated: true }),\n});\n"],"mappings":"AAAA,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAErB,MAAM,aAAa,YAAY;AAAA,EACpC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,eAAe,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAAA,EACxE,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,cAAc,KAAK;AAC9D,CAAC;","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { EmbedBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
type Embed = z.infer<typeof EmbedBlockSchema>;
|
|
5
|
+
/** Generieke responsive iframe-embed (consent-gated by default) — voor wat dan ook met een URL. */
|
|
6
|
+
export declare function EmbedRender({ block, mode }: BlockRenderProps<Embed>): import("react").JSX.Element | null;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { ConsentEmbed } from "./consentEmbed.js";
|
|
4
|
+
function EmbedRender({ block, mode }) {
|
|
5
|
+
if (!block.url) return null;
|
|
6
|
+
const sizing = block.aspectRatio && block.aspectRatio !== "fixed" ? { aspectRatio: block.aspectRatio.replace("/", " / ") } : { height: `${block.height}px` };
|
|
7
|
+
return /* @__PURE__ */ jsx("div", { className: "xicms-embed", style: sizing, children: /* @__PURE__ */ jsx(ConsentEmbed, { gated: block.consentGated, preview: mode === "preview", label: block.title ?? "Embed", children: /* @__PURE__ */ jsx(
|
|
8
|
+
"iframe",
|
|
9
|
+
{
|
|
10
|
+
src: block.url,
|
|
11
|
+
title: block.title ?? "Embed",
|
|
12
|
+
loading: "lazy",
|
|
13
|
+
referrerPolicy: "no-referrer-when-downgrade",
|
|
14
|
+
sandbox: "allow-scripts allow-same-origin allow-forms allow-popups",
|
|
15
|
+
style: { border: 0, width: "100%", height: "100%" }
|
|
16
|
+
}
|
|
17
|
+
) }) });
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
EmbedRender
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=EmbedRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/EmbedRender.tsx"],"sourcesContent":["\"use client\";\n\nimport type { z } from \"zod\";\nimport type { EmbedBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { ConsentEmbed } from \"./consentEmbed\";\n\ntype Embed = z.infer<typeof EmbedBlockSchema>;\n\n/** Generieke responsive iframe-embed (consent-gated by default) — voor wat dan ook met een URL. */\nexport function EmbedRender({ block, mode }: BlockRenderProps<Embed>) {\n if (!block.url) return null;\n // \"fixed\" = vaste hoogte (bestaand gedrag); anders schaalt de embed mee met de beeldverhouding.\n const sizing =\n block.aspectRatio && block.aspectRatio !== \"fixed\"\n ? { aspectRatio: block.aspectRatio.replace(\"/\", \" / \") }\n : { height: `${block.height}px` };\n return (\n <div className=\"xicms-embed\" style={sizing}>\n <ConsentEmbed gated={block.consentGated} preview={mode === \"preview\"} label={block.title ?? \"Embed\"}>\n <iframe\n src={block.url}\n title={block.title ?? \"Embed\"}\n loading=\"lazy\"\n referrerPolicy=\"no-referrer-when-downgrade\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups\"\n style={{ border: 0, width: \"100%\", height: \"100%\" }}\n />\n </ConsentEmbed>\n </div>\n );\n}\n"],"mappings":";AAoBQ;AAfR,SAAS,oBAAoB;AAKtB,SAAS,YAAY,EAAE,OAAO,KAAK,GAA4B;AACpE,MAAI,CAAC,MAAM,IAAK,QAAO;AAEvB,QAAM,SACJ,MAAM,eAAe,MAAM,gBAAgB,UACvC,EAAE,aAAa,MAAM,YAAY,QAAQ,KAAK,KAAK,EAAE,IACrD,EAAE,QAAQ,GAAG,MAAM,MAAM,KAAK;AACpC,SACE,oBAAC,SAAI,WAAU,eAAc,OAAO,QAClC,8BAAC,gBAAa,OAAO,MAAM,cAAc,SAAS,SAAS,WAAW,OAAO,MAAM,SAAS,SAC1F;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,MAAM;AAAA,MACX,OAAO,MAAM,SAAS;AAAA,MACtB,SAAQ;AAAA,MACR,gBAAe;AAAA,MACf,SAAQ;AAAA,MACR,OAAO,EAAE,QAAQ,GAAG,OAAO,QAAQ,QAAQ,OAAO;AAAA;AAAA,EACpD,GACF,GACF;AAEJ;","names":[]}
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/** Anker-id voor een vraag (deep-link: /faq#hoe-werkt-het). */
|
|
3
|
-
export declare function questionSlug(q: string): string;
|
|
4
|
-
/** Unieke anker-ids voor een vragenlijst: identieke vragen krijgen -2, -3, … (ids moeten uniek zijn). */
|
|
5
|
-
export declare function questionSlugs(questions: string[]): string[];
|
|
6
|
-
export declare const faqBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const faqBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|