@xiwebdesign/xicms-core 7.14.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/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/modules/contract.js +2 -1
- package/dist/modules/contract.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const columnsBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const columnsBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,15 +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 { BlockRenderer } from "../BlockRenderer.js";
|
|
5
|
-
import { useRegistry } from "../context.js";
|
|
6
|
-
function ColumnsRender({ block, siteId, mode }) {
|
|
7
|
-
const registry = useRegistry();
|
|
8
|
-
return /* @__PURE__ */ jsx("div", { className: "xicms-columns", "data-cols": block.columns.length, style: { gridTemplateColumns: `repeat(${block.columns.length}, 1fr)` }, children: block.columns.map((col, idx) => /* @__PURE__ */ jsx("div", { className: "xicms-column", children: /* @__PURE__ */ jsx(BlockRenderer, { blocks: col.blocks, registry, siteId, mode }) }, idx)) });
|
|
9
|
-
}
|
|
10
3
|
const columnsBlock = defineBlock({
|
|
11
4
|
type: "columns",
|
|
12
|
-
Render: ColumnsRender,
|
|
5
|
+
Render: dynamic(() => import("./ColumnsRender.js").then((m) => m.ColumnsRender)),
|
|
13
6
|
label: "Kolommen",
|
|
14
7
|
icon: "\u25A5",
|
|
15
8
|
defaults: () => ({ columns: [{ blocks: [] }, { blocks: [] }] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Columns.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Columns.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const columnsBlock = defineBlock({\n type: \"columns\",\n Render: dynamic(() => import(\"./ColumnsRender\").then((m) => m.ColumnsRender)),\n label: \"Kolommen\",\n icon: \"▥\",\n defaults: () => ({ columns: [{ blocks: [] }, { blocks: [] }] }),\n});\n"],"mappings":"AAAA,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAErB,MAAM,eAAe,YAAY;AAAA,EACtC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;AAAA,EAC5E,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC/D,CAAC;","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { ColumnsBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
type Columns = z.infer<typeof ColumnsBlockSchema>;
|
|
5
|
+
export declare function ColumnsRender({ block, siteId, mode }: BlockRenderProps<Columns>): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { BlockRenderer } from "../BlockRenderer.js";
|
|
4
|
+
import { useRegistry } from "../context.js";
|
|
5
|
+
function ColumnsRender({ block, siteId, mode }) {
|
|
6
|
+
const registry = useRegistry();
|
|
7
|
+
return /* @__PURE__ */ jsx("div", { className: "xicms-columns", "data-cols": block.columns.length, style: { gridTemplateColumns: `repeat(${block.columns.length}, 1fr)` }, children: block.columns.map((col, idx) => /* @__PURE__ */ jsx("div", { className: "xicms-column", children: /* @__PURE__ */ jsx(BlockRenderer, { blocks: col.blocks, registry, siteId, mode }) }, idx)) });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
ColumnsRender
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=ColumnsRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/ColumnsRender.tsx"],"sourcesContent":["\"use client\";\n\nimport type { z } from \"zod\";\nimport type { ColumnsBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { BlockRenderer } from \"../BlockRenderer\";\nimport { useRegistry } from \"../context\";\n\ntype Columns = z.infer<typeof ColumnsBlockSchema>;\n\nexport function ColumnsRender({ block, siteId, mode }: BlockRenderProps<Columns>) {\n const registry = useRegistry();\n return (\n <div className=\"xicms-columns\" data-cols={block.columns.length} style={{ gridTemplateColumns: `repeat(${block.columns.length}, 1fr)` }}>\n {block.columns.map((col, idx) => (\n <div key={idx} className=\"xicms-column\">\n <BlockRenderer blocks={col.blocks} registry={registry} siteId={siteId} mode={mode} />\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":";AAgBU;AAXV,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAIrB,SAAS,cAAc,EAAE,OAAO,QAAQ,KAAK,GAA8B;AAChF,QAAM,WAAW,YAAY;AAC7B,SACE,oBAAC,SAAI,WAAU,iBAAgB,aAAW,MAAM,QAAQ,QAAQ,OAAO,EAAE,qBAAqB,UAAU,MAAM,QAAQ,MAAM,SAAS,GAClI,gBAAM,QAAQ,IAAI,CAAC,KAAK,QACvB,oBAAC,SAAc,WAAU,gBACvB,8BAAC,iBAAc,QAAQ,IAAI,QAAQ,UAAoB,QAAgB,MAAY,KAD3E,GAEV,CACD,GACH;AAEJ;","names":[]}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
type Contact = z.infer<typeof ContactBlockSchema>;
|
|
4
|
-
export declare function contactJsonLd(b: Contact): Record<string, unknown>;
|
|
5
|
-
export declare const contactBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
6
|
-
export declare const socialBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
7
|
-
export {};
|
|
1
|
+
export declare const contactBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
2
|
+
export declare const socialBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,120 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsonLdHtml } from "./jsonld.js";
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
3
2
|
import { defineBlock } from "../registry.js";
|
|
4
|
-
import { Heading } from "../ui/index.js";
|
|
5
|
-
function contactJsonLd(b) {
|
|
6
|
-
return {
|
|
7
|
-
"@context": "https://schema.org",
|
|
8
|
-
"@type": "LocalBusiness",
|
|
9
|
-
// Gedeeld relatief @id: contact-, openingstijden- en layout-JSON-LD beschrijven hetzelfde
|
|
10
|
-
// bedrijf; zonder @id ziet Google drie conflicterende LocalBusiness-entiteiten per pagina.
|
|
11
|
-
"@id": "#business",
|
|
12
|
-
// Bewust géén `name: heading` — de blokkop is meestal "Contact" en zou als bedrijfsnaam in de
|
|
13
|
-
// samengevoegde #business-entiteit belanden; de naam komt uit de layout-brede businessJsonLd.
|
|
14
|
-
...b.address ? { address: b.address } : {},
|
|
15
|
-
...b.phone ? { telephone: b.phone } : {},
|
|
16
|
-
...b.email ? { email: b.email } : {},
|
|
17
|
-
...b.geo ? { geo: { "@type": "GeoCoordinates", latitude: b.geo.lat, longitude: b.geo.lng } } : {}
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function ContactRender({ block }) {
|
|
21
|
-
return /* @__PURE__ */ jsxs("section", { className: "xicms-contact", children: [
|
|
22
|
-
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
23
|
-
/* @__PURE__ */ jsxs("dl", { className: "xicms-contact__list", children: [
|
|
24
|
-
block.address && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
25
|
-
/* @__PURE__ */ jsx("dt", { children: "Adres" }),
|
|
26
|
-
/* @__PURE__ */ jsx("dd", { "data-xicms-edit": "address", children: block.address })
|
|
27
|
-
] }),
|
|
28
|
-
block.phone && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
29
|
-
/* @__PURE__ */ jsx("dt", { children: "Telefoon" }),
|
|
30
|
-
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx("a", { href: `tel:${block.phone.replace(/\s+/g, "")}`, "data-xicms-edit": "phone", children: block.phone }) })
|
|
31
|
-
] }),
|
|
32
|
-
block.email && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
33
|
-
/* @__PURE__ */ jsx("dt", { children: "E-mail" }),
|
|
34
|
-
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx("a", { href: `mailto:${block.email}`, "data-xicms-edit": "email", children: block.email }) })
|
|
35
|
-
] }),
|
|
36
|
-
block.hours && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
37
|
-
/* @__PURE__ */ jsx("dt", { children: "Openingstijden" }),
|
|
38
|
-
/* @__PURE__ */ jsx("dd", { "data-xicms-edit": "hours", children: block.hours })
|
|
39
|
-
] })
|
|
40
|
-
] }),
|
|
41
|
-
block.jsonLd && /* @__PURE__ */ jsx(
|
|
42
|
-
"script",
|
|
43
|
-
{
|
|
44
|
-
type: "application/ld+json",
|
|
45
|
-
dangerouslySetInnerHTML: { __html: jsonLdHtml(contactJsonLd(block)) }
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
] });
|
|
49
|
-
}
|
|
50
3
|
const contactBlock = defineBlock({
|
|
51
4
|
type: "contact",
|
|
52
|
-
Render: ContactRender,
|
|
5
|
+
Render: dynamic(() => import("./ContactRender.js").then((m) => m.ContactRender)),
|
|
53
6
|
label: "Contactgegevens",
|
|
54
7
|
icon: "\u{1F4C7}",
|
|
55
8
|
defaults: () => ({ heading: "Contact", jsonLd: true })
|
|
56
9
|
});
|
|
57
|
-
function SocialIcon({ platform }) {
|
|
58
|
-
const p = platform.toLowerCase();
|
|
59
|
-
const common = { width: 22, height: 22, viewBox: "0 0 24 24", "aria-hidden": true };
|
|
60
|
-
if (p.includes("instagram")) {
|
|
61
|
-
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "none", stroke: "currentColor", strokeWidth: "1.8", children: [
|
|
62
|
-
/* @__PURE__ */ jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "4.5" }),
|
|
63
|
-
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3.6" }),
|
|
64
|
-
/* @__PURE__ */ jsx("circle", { cx: "16.7", cy: "7.3", r: "1.1", fill: "currentColor", stroke: "none" })
|
|
65
|
-
] });
|
|
66
|
-
}
|
|
67
|
-
if (p.includes("facebook")) {
|
|
68
|
-
return /* @__PURE__ */ jsx("svg", { ...common, fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M13.5 20v-6.2h2.1l.4-2.6h-2.5V9.6c0-.8.3-1.3 1.3-1.3h1.3V6c-.3 0-1-.1-1.9-.1-2 0-3.3 1.2-3.3 3.4v1.9H8.7v2.6h2.2V20h2.6z" }) });
|
|
69
|
-
}
|
|
70
|
-
if (p.includes("linkedin")) {
|
|
71
|
-
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "currentColor", children: [
|
|
72
|
-
/* @__PURE__ */ jsx("circle", { cx: "6", cy: "6.4", r: "1.8" }),
|
|
73
|
-
/* @__PURE__ */ jsx("rect", { x: "4.6", y: "9.6", width: "2.8", height: "9.9" }),
|
|
74
|
-
/* @__PURE__ */ jsx("path", { d: "M10.4 9.6h2.7v1.4c.5-.9 1.6-1.7 3.1-1.7 2.4 0 3.7 1.5 3.7 4.3v5.9h-2.8v-5.4c0-1.5-.6-2.3-1.7-2.3-1.2 0-2.2.8-2.2 2.4v5.3h-2.8V9.6z" })
|
|
75
|
-
] });
|
|
76
|
-
}
|
|
77
|
-
if (p.includes("twitter") || p === "x" || p.startsWith("x ") || p.includes("(x)")) {
|
|
78
|
-
return /* @__PURE__ */ jsx("svg", { ...common, fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M4.5 4.5h3.6l4.1 5.6 4.7-5.6h2.6l-6.1 7.2 6.4 8.4h-3.6l-4.4-6-5 6H4.2l6.5-7.7-6.2-7.9z" }) });
|
|
79
|
-
}
|
|
80
|
-
if (p.includes("youtube")) {
|
|
81
|
-
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "currentColor", children: [
|
|
82
|
-
/* @__PURE__ */ jsx("rect", { x: "3.2", y: "6.2", width: "17.6", height: "11.6", rx: "3.2" }),
|
|
83
|
-
/* @__PURE__ */ jsx("path", { d: "M10.4 9.4v5.2l4.8-2.6z", fill: "var(--xicms-surface, #fff)" })
|
|
84
|
-
] });
|
|
85
|
-
}
|
|
86
|
-
if (p.includes("whatsapp")) {
|
|
87
|
-
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "none", stroke: "currentColor", strokeWidth: "1.8", children: [
|
|
88
|
-
/* @__PURE__ */ jsx("path", { d: "M12 4.2a7.8 7.8 0 0 0-6.7 11.8L4.4 19.6l3.7-.9A7.8 7.8 0 1 0 12 4.2z" }),
|
|
89
|
-
/* @__PURE__ */ jsx("path", { d: "M9.3 8.9c.7 2.4 2.6 4.4 5 5l1-1.2 2 1.2", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
90
|
-
] });
|
|
91
|
-
}
|
|
92
|
-
if (p.includes("tiktok")) {
|
|
93
|
-
return /* @__PURE__ */ jsx("svg", { ...common, fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M14.5 4h2.6c.2 1.7 1.3 3 3 3.3v2.6a6.6 6.6 0 0 1-3.2-1v5.7a5.4 5.4 0 1 1-5.4-5.4c.2 0 .5 0 .7.1v2.8a2.6 2.6 0 1 0 2.3 2.6V4z" }) });
|
|
94
|
-
}
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
function SocialRender({ block }) {
|
|
98
|
-
const items = (block.items ?? []).filter((i) => i.href && i.platform);
|
|
99
|
-
if (items.length === 0) return null;
|
|
100
|
-
return /* @__PURE__ */ jsxs("section", { className: "xicms-social", children: [
|
|
101
|
-
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
102
|
-
/* @__PURE__ */ jsx("ul", { className: "xicms-social__list", children: items.map((it, i) => {
|
|
103
|
-
const icon = SocialIcon({ platform: it.platform });
|
|
104
|
-
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: it.href, rel: "noopener noreferrer", target: "_blank", "aria-label": it.platform, title: it.platform, className: icon ? "xicms-social__iconlink" : void 0, children: icon ?? /* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${i}.platform`, children: it.platform }) }) }, i);
|
|
105
|
-
}) })
|
|
106
|
-
] });
|
|
107
|
-
}
|
|
108
10
|
const socialBlock = defineBlock({
|
|
109
11
|
type: "social",
|
|
110
|
-
Render: SocialRender,
|
|
12
|
+
Render: dynamic(() => import("./ContactRender.js").then((m) => m.SocialRender)),
|
|
111
13
|
label: "Social-links",
|
|
112
14
|
icon: "\u{1F517}",
|
|
113
15
|
defaults: () => ({ items: [{ platform: "Instagram", href: "" }] })
|
|
114
16
|
});
|
|
115
17
|
export {
|
|
116
18
|
contactBlock,
|
|
117
|
-
contactJsonLd,
|
|
118
19
|
socialBlock
|
|
119
20
|
};
|
|
120
21
|
//# sourceMappingURL=Contact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Contact.tsx"],"sourcesContent":["import type { z } from \"zod\";\nimport { jsonLdHtml } from \"./jsonld\";\nimport type { ContactBlockSchema, SocialBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { Heading } from \"../ui\";\n\n/* ── Contact ─────────────────────────────────────────────────────────────── */\ntype Contact = z.infer<typeof ContactBlockSchema>;\nexport function contactJsonLd(b: Contact): Record<string, unknown> {\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"LocalBusiness\",\n // Gedeeld relatief @id: contact-, openingstijden- en layout-JSON-LD beschrijven hetzelfde\n // bedrijf; zonder @id ziet Google drie conflicterende LocalBusiness-entiteiten per pagina.\n \"@id\": \"#business\",\n // Bewust géén `name: heading` — de blokkop is meestal \"Contact\" en zou als bedrijfsnaam in de\n // samengevoegde #business-entiteit belanden; de naam komt uit de layout-brede businessJsonLd.\n ...(b.address ? { address: b.address } : {}),\n ...(b.phone ? { telephone: b.phone } : {}),\n ...(b.email ? { email: b.email } : {}),\n ...(b.geo ? { geo: { \"@type\": \"GeoCoordinates\", latitude: b.geo.lat, longitude: b.geo.lng } } : {}),\n };\n}\nfunction ContactRender({ block }: BlockRenderProps<Contact>) {\n return (\n <section className=\"xicms-contact\">\n {block.heading && <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>}\n <dl className=\"xicms-contact__list\">\n {block.address && (\n <div className=\"xicms-contact__row\">\n <dt>Adres</dt>\n <dd data-xicms-edit=\"address\">{block.address}</dd>\n </div>\n )}\n {block.phone && (\n <div className=\"xicms-contact__row\">\n <dt>Telefoon</dt>\n <dd><a href={`tel:${block.phone.replace(/\\s+/g, \"\")}`} data-xicms-edit=\"phone\">{block.phone}</a></dd>\n </div>\n )}\n {block.email && (\n <div className=\"xicms-contact__row\">\n <dt>E-mail</dt>\n <dd><a href={`mailto:${block.email}`} data-xicms-edit=\"email\">{block.email}</a></dd>\n </div>\n )}\n {block.hours && (\n <div className=\"xicms-contact__row\">\n <dt>Openingstijden</dt>\n <dd data-xicms-edit=\"hours\">{block.hours}</dd>\n </div>\n )}\n </dl>\n {block.jsonLd && (\n <script\n type=\"application/ld+json\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: jsonLdHtml(contactJsonLd(block)) }}\n />\n )}\n </section>\n );\n}\nexport const contactBlock = defineBlock({\n type: \"contact\",\n Render: ContactRender,\n label: \"Contactgegevens\",\n icon: \"📇\",\n defaults: () => ({ heading: \"Contact\", jsonLd: true }),\n});\n\n/* ── Social ──────────────────────────────────────────────────────────────── */\ntype Social = z.infer<typeof SocialBlockSchema>;\n\n/**\n * Minimalistische, monochrome merk-iconen (currentColor) — geen icon-dependency nodig.\n * Onbekende platformen vallen terug op de tekstweergave, dus niets breekt.\n */\nfunction SocialIcon({ platform }: { platform: string }) {\n const p = platform.toLowerCase();\n const common = { width: 22, height: 22, viewBox: \"0 0 24 24\", \"aria-hidden\": true } as const;\n if (p.includes(\"instagram\")) {\n return (\n <svg {...common} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"4.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"3.6\" />\n <circle cx=\"16.7\" cy=\"7.3\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n }\n if (p.includes(\"facebook\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <path d=\"M13.5 20v-6.2h2.1l.4-2.6h-2.5V9.6c0-.8.3-1.3 1.3-1.3h1.3V6c-.3 0-1-.1-1.9-.1-2 0-3.3 1.2-3.3 3.4v1.9H8.7v2.6h2.2V20h2.6z\" />\n </svg>\n );\n }\n if (p.includes(\"linkedin\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <circle cx=\"6\" cy=\"6.4\" r=\"1.8\" />\n <rect x=\"4.6\" y=\"9.6\" width=\"2.8\" height=\"9.9\" />\n <path d=\"M10.4 9.6h2.7v1.4c.5-.9 1.6-1.7 3.1-1.7 2.4 0 3.7 1.5 3.7 4.3v5.9h-2.8v-5.4c0-1.5-.6-2.3-1.7-2.3-1.2 0-2.2.8-2.2 2.4v5.3h-2.8V9.6z\" />\n </svg>\n );\n }\n if (p.includes(\"twitter\") || p === \"x\" || p.startsWith(\"x \") || p.includes(\"(x)\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <path d=\"M4.5 4.5h3.6l4.1 5.6 4.7-5.6h2.6l-6.1 7.2 6.4 8.4h-3.6l-4.4-6-5 6H4.2l6.5-7.7-6.2-7.9z\" />\n </svg>\n );\n }\n if (p.includes(\"youtube\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <rect x=\"3.2\" y=\"6.2\" width=\"17.6\" height=\"11.6\" rx=\"3.2\" />\n <path d=\"M10.4 9.4v5.2l4.8-2.6z\" fill=\"var(--xicms-surface, #fff)\" />\n </svg>\n );\n }\n if (p.includes(\"whatsapp\")) {\n return (\n <svg {...common} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M12 4.2a7.8 7.8 0 0 0-6.7 11.8L4.4 19.6l3.7-.9A7.8 7.8 0 1 0 12 4.2z\" />\n <path d=\"M9.3 8.9c.7 2.4 2.6 4.4 5 5l1-1.2 2 1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n }\n if (p.includes(\"tiktok\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <path d=\"M14.5 4h2.6c.2 1.7 1.3 3 3 3.3v2.6a6.6 6.6 0 0 1-3.2-1v5.7a5.4 5.4 0 1 1-5.4-5.4c.2 0 .5 0 .7.1v2.8a2.6 2.6 0 1 0 2.3 2.6V4z\" />\n </svg>\n );\n }\n return null;\n}\n\nfunction SocialRender({ block }: BlockRenderProps<Social>) {\n const items = (block.items ?? []).filter((i) => i.href && i.platform);\n if (items.length === 0) return null;\n return (\n <section className=\"xicms-social\">\n {block.heading && <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>}\n <ul className=\"xicms-social__list\">\n {items.map((it, i) => {\n // Als functie aangeroepen (geen hooks) zodat `null` echt null is — een JSX-element\n // zou altijd truthy zijn en de tekst-fallback nooit tonen.\n const icon = SocialIcon({ platform: it.platform });\n return (\n <li key={i}>\n <a href={it.href} rel=\"noopener noreferrer\" target=\"_blank\" aria-label={it.platform} title={it.platform} className={icon ? \"xicms-social__iconlink\" : undefined}>\n {icon ?? <span data-xicms-edit={`items.${i}.platform`}>{it.platform}</span>}\n </a>\n </li>\n );\n })}\n </ul>\n </section>\n );\n}\nexport const socialBlock = defineBlock({\n type: \"social\",\n Render: SocialRender,\n label: \"Social-links\",\n icon: \"🔗\",\n defaults: () => ({ items: [{ platform: \"Instagram\", href: \"\" }] }),\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Contact.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const contactBlock = defineBlock({\n type: \"contact\",\n Render: dynamic(() => import(\"./ContactRender\").then((m) => m.ContactRender)),\n label: \"Contactgegevens\",\n icon: \"📇\",\n defaults: () => ({ heading: \"Contact\", jsonLd: true }),\n});\n\nexport const socialBlock = defineBlock({\n type: \"social\",\n Render: dynamic(() => import(\"./ContactRender\").then((m) => m.SocialRender)),\n label: \"Social-links\",\n icon: \"🔗\",\n defaults: () => ({ items: [{ platform: \"Instagram\", href: \"\" }] }),\n});\n"],"mappings":"AAAA,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAErB,MAAM,eAAe,YAAY;AAAA,EACtC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;AAAA,EAC5E,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,SAAS,WAAW,QAAQ,KAAK;AACtD,CAAC;AAEM,MAAM,cAAc,YAAY;AAAA,EACrC,MAAM;AAAA,EACN,QAAQ,QAAQ,MAAM,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC;AAAA,EAC3E,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,aAAa,MAAM,GAAG,CAAC,EAAE;AAClE,CAAC;","names":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { ContactBlockSchema, SocialBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
type Contact = z.infer<typeof ContactBlockSchema>;
|
|
5
|
+
export declare function contactJsonLd(b: Contact): Record<string, unknown>;
|
|
6
|
+
export declare function ContactRender({ block }: BlockRenderProps<Contact>): import("react").JSX.Element;
|
|
7
|
+
type Social = z.infer<typeof SocialBlockSchema>;
|
|
8
|
+
export declare function SocialRender({ block }: BlockRenderProps<Social>): import("react").JSX.Element | null;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsonLdHtml } from "./jsonld.js";
|
|
3
|
+
import { Heading } from "../ui/index.js";
|
|
4
|
+
function contactJsonLd(b) {
|
|
5
|
+
return {
|
|
6
|
+
"@context": "https://schema.org",
|
|
7
|
+
"@type": "LocalBusiness",
|
|
8
|
+
// Gedeeld relatief @id: contact-, openingstijden- en layout-JSON-LD beschrijven hetzelfde
|
|
9
|
+
// bedrijf; zonder @id ziet Google drie conflicterende LocalBusiness-entiteiten per pagina.
|
|
10
|
+
"@id": "#business",
|
|
11
|
+
// Bewust géén `name: heading` — de blokkop is meestal "Contact" en zou als bedrijfsnaam in de
|
|
12
|
+
// samengevoegde #business-entiteit belanden; de naam komt uit de layout-brede businessJsonLd.
|
|
13
|
+
...b.address ? { address: b.address } : {},
|
|
14
|
+
...b.phone ? { telephone: b.phone } : {},
|
|
15
|
+
...b.email ? { email: b.email } : {},
|
|
16
|
+
...b.geo ? { geo: { "@type": "GeoCoordinates", latitude: b.geo.lat, longitude: b.geo.lng } } : {}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function ContactRender({ block }) {
|
|
20
|
+
return /* @__PURE__ */ jsxs("section", { className: "xicms-contact", children: [
|
|
21
|
+
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
22
|
+
/* @__PURE__ */ jsxs("dl", { className: "xicms-contact__list", children: [
|
|
23
|
+
block.address && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
24
|
+
/* @__PURE__ */ jsx("dt", { children: "Adres" }),
|
|
25
|
+
/* @__PURE__ */ jsx("dd", { "data-xicms-edit": "address", children: block.address })
|
|
26
|
+
] }),
|
|
27
|
+
block.phone && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
28
|
+
/* @__PURE__ */ jsx("dt", { children: "Telefoon" }),
|
|
29
|
+
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx("a", { href: `tel:${block.phone.replace(/\s+/g, "")}`, "data-xicms-edit": "phone", children: block.phone }) })
|
|
30
|
+
] }),
|
|
31
|
+
block.email && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
32
|
+
/* @__PURE__ */ jsx("dt", { children: "E-mail" }),
|
|
33
|
+
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx("a", { href: `mailto:${block.email}`, "data-xicms-edit": "email", children: block.email }) })
|
|
34
|
+
] }),
|
|
35
|
+
block.hours && /* @__PURE__ */ jsxs("div", { className: "xicms-contact__row", children: [
|
|
36
|
+
/* @__PURE__ */ jsx("dt", { children: "Openingstijden" }),
|
|
37
|
+
/* @__PURE__ */ jsx("dd", { "data-xicms-edit": "hours", children: block.hours })
|
|
38
|
+
] })
|
|
39
|
+
] }),
|
|
40
|
+
block.jsonLd && /* @__PURE__ */ jsx(
|
|
41
|
+
"script",
|
|
42
|
+
{
|
|
43
|
+
type: "application/ld+json",
|
|
44
|
+
dangerouslySetInnerHTML: { __html: jsonLdHtml(contactJsonLd(block)) }
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
function SocialIcon({ platform }) {
|
|
50
|
+
const p = platform.toLowerCase();
|
|
51
|
+
const common = { width: 22, height: 22, viewBox: "0 0 24 24", "aria-hidden": true };
|
|
52
|
+
if (p.includes("instagram")) {
|
|
53
|
+
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "none", stroke: "currentColor", strokeWidth: "1.8", children: [
|
|
54
|
+
/* @__PURE__ */ jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "4.5" }),
|
|
55
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3.6" }),
|
|
56
|
+
/* @__PURE__ */ jsx("circle", { cx: "16.7", cy: "7.3", r: "1.1", fill: "currentColor", stroke: "none" })
|
|
57
|
+
] });
|
|
58
|
+
}
|
|
59
|
+
if (p.includes("facebook")) {
|
|
60
|
+
return /* @__PURE__ */ jsx("svg", { ...common, fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M13.5 20v-6.2h2.1l.4-2.6h-2.5V9.6c0-.8.3-1.3 1.3-1.3h1.3V6c-.3 0-1-.1-1.9-.1-2 0-3.3 1.2-3.3 3.4v1.9H8.7v2.6h2.2V20h2.6z" }) });
|
|
61
|
+
}
|
|
62
|
+
if (p.includes("linkedin")) {
|
|
63
|
+
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "currentColor", children: [
|
|
64
|
+
/* @__PURE__ */ jsx("circle", { cx: "6", cy: "6.4", r: "1.8" }),
|
|
65
|
+
/* @__PURE__ */ jsx("rect", { x: "4.6", y: "9.6", width: "2.8", height: "9.9" }),
|
|
66
|
+
/* @__PURE__ */ jsx("path", { d: "M10.4 9.6h2.7v1.4c.5-.9 1.6-1.7 3.1-1.7 2.4 0 3.7 1.5 3.7 4.3v5.9h-2.8v-5.4c0-1.5-.6-2.3-1.7-2.3-1.2 0-2.2.8-2.2 2.4v5.3h-2.8V9.6z" })
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
if (p.includes("twitter") || p === "x" || p.startsWith("x ") || p.includes("(x)")) {
|
|
70
|
+
return /* @__PURE__ */ jsx("svg", { ...common, fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M4.5 4.5h3.6l4.1 5.6 4.7-5.6h2.6l-6.1 7.2 6.4 8.4h-3.6l-4.4-6-5 6H4.2l6.5-7.7-6.2-7.9z" }) });
|
|
71
|
+
}
|
|
72
|
+
if (p.includes("youtube")) {
|
|
73
|
+
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "currentColor", children: [
|
|
74
|
+
/* @__PURE__ */ jsx("rect", { x: "3.2", y: "6.2", width: "17.6", height: "11.6", rx: "3.2" }),
|
|
75
|
+
/* @__PURE__ */ jsx("path", { d: "M10.4 9.4v5.2l4.8-2.6z", fill: "var(--xicms-surface, #fff)" })
|
|
76
|
+
] });
|
|
77
|
+
}
|
|
78
|
+
if (p.includes("whatsapp")) {
|
|
79
|
+
return /* @__PURE__ */ jsxs("svg", { ...common, fill: "none", stroke: "currentColor", strokeWidth: "1.8", children: [
|
|
80
|
+
/* @__PURE__ */ jsx("path", { d: "M12 4.2a7.8 7.8 0 0 0-6.7 11.8L4.4 19.6l3.7-.9A7.8 7.8 0 1 0 12 4.2z" }),
|
|
81
|
+
/* @__PURE__ */ jsx("path", { d: "M9.3 8.9c.7 2.4 2.6 4.4 5 5l1-1.2 2 1.2", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
82
|
+
] });
|
|
83
|
+
}
|
|
84
|
+
if (p.includes("tiktok")) {
|
|
85
|
+
return /* @__PURE__ */ jsx("svg", { ...common, fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M14.5 4h2.6c.2 1.7 1.3 3 3 3.3v2.6a6.6 6.6 0 0 1-3.2-1v5.7a5.4 5.4 0 1 1-5.4-5.4c.2 0 .5 0 .7.1v2.8a2.6 2.6 0 1 0 2.3 2.6V4z" }) });
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
function SocialRender({ block }) {
|
|
90
|
+
const items = (block.items ?? []).filter((i) => i.href && i.platform);
|
|
91
|
+
if (items.length === 0) return null;
|
|
92
|
+
return /* @__PURE__ */ jsxs("section", { className: "xicms-social", children: [
|
|
93
|
+
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
94
|
+
/* @__PURE__ */ jsx("ul", { className: "xicms-social__list", children: items.map((it, i) => {
|
|
95
|
+
const icon = SocialIcon({ platform: it.platform });
|
|
96
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: it.href, rel: "noopener noreferrer", target: "_blank", "aria-label": it.platform, title: it.platform, className: icon ? "xicms-social__iconlink" : void 0, children: icon ?? /* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${i}.platform`, children: it.platform }) }) }, i);
|
|
97
|
+
}) })
|
|
98
|
+
] });
|
|
99
|
+
}
|
|
100
|
+
export {
|
|
101
|
+
ContactRender,
|
|
102
|
+
SocialRender,
|
|
103
|
+
contactJsonLd
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=ContactRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/ContactRender.tsx"],"sourcesContent":["import type { z } from \"zod\";\nimport { jsonLdHtml } from \"./jsonld\";\nimport type { ContactBlockSchema, SocialBlockSchema } from \"../../schema/blocks\";\nimport type { BlockRenderProps } from \"../registry\";\nimport { Heading } from \"../ui\";\n\n/* ── Contact ─────────────────────────────────────────────────────────────── */\ntype Contact = z.infer<typeof ContactBlockSchema>;\nexport function contactJsonLd(b: Contact): Record<string, unknown> {\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"LocalBusiness\",\n // Gedeeld relatief @id: contact-, openingstijden- en layout-JSON-LD beschrijven hetzelfde\n // bedrijf; zonder @id ziet Google drie conflicterende LocalBusiness-entiteiten per pagina.\n \"@id\": \"#business\",\n // Bewust géén `name: heading` — de blokkop is meestal \"Contact\" en zou als bedrijfsnaam in de\n // samengevoegde #business-entiteit belanden; de naam komt uit de layout-brede businessJsonLd.\n ...(b.address ? { address: b.address } : {}),\n ...(b.phone ? { telephone: b.phone } : {}),\n ...(b.email ? { email: b.email } : {}),\n ...(b.geo ? { geo: { \"@type\": \"GeoCoordinates\", latitude: b.geo.lat, longitude: b.geo.lng } } : {}),\n };\n}\nexport function ContactRender({ block }: BlockRenderProps<Contact>) {\n return (\n <section className=\"xicms-contact\">\n {block.heading && <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>}\n <dl className=\"xicms-contact__list\">\n {block.address && (\n <div className=\"xicms-contact__row\">\n <dt>Adres</dt>\n <dd data-xicms-edit=\"address\">{block.address}</dd>\n </div>\n )}\n {block.phone && (\n <div className=\"xicms-contact__row\">\n <dt>Telefoon</dt>\n <dd><a href={`tel:${block.phone.replace(/\\s+/g, \"\")}`} data-xicms-edit=\"phone\">{block.phone}</a></dd>\n </div>\n )}\n {block.email && (\n <div className=\"xicms-contact__row\">\n <dt>E-mail</dt>\n <dd><a href={`mailto:${block.email}`} data-xicms-edit=\"email\">{block.email}</a></dd>\n </div>\n )}\n {block.hours && (\n <div className=\"xicms-contact__row\">\n <dt>Openingstijden</dt>\n <dd data-xicms-edit=\"hours\">{block.hours}</dd>\n </div>\n )}\n </dl>\n {block.jsonLd && (\n <script\n type=\"application/ld+json\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: jsonLdHtml(contactJsonLd(block)) }}\n />\n )}\n </section>\n );\n}\n/* ── Social ──────────────────────────────────────────────────────────────── */\ntype Social = z.infer<typeof SocialBlockSchema>;\n\n/**\n * Minimalistische, monochrome merk-iconen (currentColor) — geen icon-dependency nodig.\n * Onbekende platformen vallen terug op de tekstweergave, dus niets breekt.\n */\nfunction SocialIcon({ platform }: { platform: string }) {\n const p = platform.toLowerCase();\n const common = { width: 22, height: 22, viewBox: \"0 0 24 24\", \"aria-hidden\": true } as const;\n if (p.includes(\"instagram\")) {\n return (\n <svg {...common} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"4.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"3.6\" />\n <circle cx=\"16.7\" cy=\"7.3\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n }\n if (p.includes(\"facebook\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <path d=\"M13.5 20v-6.2h2.1l.4-2.6h-2.5V9.6c0-.8.3-1.3 1.3-1.3h1.3V6c-.3 0-1-.1-1.9-.1-2 0-3.3 1.2-3.3 3.4v1.9H8.7v2.6h2.2V20h2.6z\" />\n </svg>\n );\n }\n if (p.includes(\"linkedin\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <circle cx=\"6\" cy=\"6.4\" r=\"1.8\" />\n <rect x=\"4.6\" y=\"9.6\" width=\"2.8\" height=\"9.9\" />\n <path d=\"M10.4 9.6h2.7v1.4c.5-.9 1.6-1.7 3.1-1.7 2.4 0 3.7 1.5 3.7 4.3v5.9h-2.8v-5.4c0-1.5-.6-2.3-1.7-2.3-1.2 0-2.2.8-2.2 2.4v5.3h-2.8V9.6z\" />\n </svg>\n );\n }\n if (p.includes(\"twitter\") || p === \"x\" || p.startsWith(\"x \") || p.includes(\"(x)\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <path d=\"M4.5 4.5h3.6l4.1 5.6 4.7-5.6h2.6l-6.1 7.2 6.4 8.4h-3.6l-4.4-6-5 6H4.2l6.5-7.7-6.2-7.9z\" />\n </svg>\n );\n }\n if (p.includes(\"youtube\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <rect x=\"3.2\" y=\"6.2\" width=\"17.6\" height=\"11.6\" rx=\"3.2\" />\n <path d=\"M10.4 9.4v5.2l4.8-2.6z\" fill=\"var(--xicms-surface, #fff)\" />\n </svg>\n );\n }\n if (p.includes(\"whatsapp\")) {\n return (\n <svg {...common} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M12 4.2a7.8 7.8 0 0 0-6.7 11.8L4.4 19.6l3.7-.9A7.8 7.8 0 1 0 12 4.2z\" />\n <path d=\"M9.3 8.9c.7 2.4 2.6 4.4 5 5l1-1.2 2 1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n }\n if (p.includes(\"tiktok\")) {\n return (\n <svg {...common} fill=\"currentColor\">\n <path d=\"M14.5 4h2.6c.2 1.7 1.3 3 3 3.3v2.6a6.6 6.6 0 0 1-3.2-1v5.7a5.4 5.4 0 1 1-5.4-5.4c.2 0 .5 0 .7.1v2.8a2.6 2.6 0 1 0 2.3 2.6V4z\" />\n </svg>\n );\n }\n return null;\n}\n\nexport function SocialRender({ block }: BlockRenderProps<Social>) {\n const items = (block.items ?? []).filter((i) => i.href && i.platform);\n if (items.length === 0) return null;\n return (\n <section className=\"xicms-social\">\n {block.heading && <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>}\n <ul className=\"xicms-social__list\">\n {items.map((it, i) => {\n // Als functie aangeroepen (geen hooks) zodat `null` echt null is — een JSX-element\n // zou altijd truthy zijn en de tekst-fallback nooit tonen.\n const icon = SocialIcon({ platform: it.platform });\n return (\n <li key={i}>\n <a href={it.href} rel=\"noopener noreferrer\" target=\"_blank\" aria-label={it.platform} title={it.platform} className={icon ? \"xicms-social__iconlink\" : undefined}>\n {icon ?? <span data-xicms-edit={`items.${i}.platform`}>{it.platform}</span>}\n </a>\n </li>\n );\n })}\n </ul>\n </section>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,18 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export interface Remaining {
|
|
3
|
-
days: number;
|
|
4
|
-
hours: number;
|
|
5
|
-
minutes: number;
|
|
6
|
-
seconds: number;
|
|
7
|
-
done: boolean;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Tikkende afteltimer naar `target`. Client-only (start `null` om hydration-mismatch te voorkomen).
|
|
11
|
-
* Gedeeld door het volwaardige Countdown-blok en de compacte widget.
|
|
12
|
-
*/
|
|
13
|
-
export declare function useCountdown(target: string): Remaining | null;
|
|
14
|
-
export declare function CountdownDigits({ r, showLabels }: {
|
|
15
|
-
r: Remaining;
|
|
16
|
-
showLabels?: boolean;
|
|
17
|
-
}): import("react").JSX.Element;
|
|
18
|
-
export declare const countdownBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
1
|
+
export declare const countdownBlock: import("../index.js").BlockDefinition<import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,63 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
4
2
|
import { defineBlock } from "../registry.js";
|
|
5
|
-
import { Heading } from "../ui/index.js";
|
|
6
|
-
function compute(target) {
|
|
7
|
-
const t = new Date(target).getTime();
|
|
8
|
-
if (Number.isNaN(t)) return null;
|
|
9
|
-
const diff = t - Date.now();
|
|
10
|
-
if (diff <= 0) return { days: 0, hours: 0, minutes: 0, seconds: 0, done: true };
|
|
11
|
-
const s = Math.floor(diff / 1e3);
|
|
12
|
-
return {
|
|
13
|
-
days: Math.floor(s / 86400),
|
|
14
|
-
hours: Math.floor(s % 86400 / 3600),
|
|
15
|
-
minutes: Math.floor(s % 3600 / 60),
|
|
16
|
-
seconds: s % 60,
|
|
17
|
-
done: false
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function useCountdown(target) {
|
|
21
|
-
const [r, setR] = useState(null);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
if (!target) return;
|
|
24
|
-
setR(compute(target));
|
|
25
|
-
const id = setInterval(() => setR(compute(target)), 1e3);
|
|
26
|
-
return () => clearInterval(id);
|
|
27
|
-
}, [target]);
|
|
28
|
-
return r;
|
|
29
|
-
}
|
|
30
|
-
const UNITS = [
|
|
31
|
-
{ key: "days", label: "dagen" },
|
|
32
|
-
{ key: "hours", label: "uur" },
|
|
33
|
-
{ key: "minutes", label: "min" },
|
|
34
|
-
{ key: "seconds", label: "sec" }
|
|
35
|
-
];
|
|
36
|
-
function CountdownDigits({ r, showLabels = true }) {
|
|
37
|
-
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: [
|
|
38
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-countdown__value", children: String(r[u.key]).padStart(2, "0") }),
|
|
39
|
-
showLabels && /* @__PURE__ */ jsx("span", { className: "xicms-countdown__label", children: u.label })
|
|
40
|
-
] }, u.key)) });
|
|
41
|
-
}
|
|
42
|
-
function CountdownRender({ block, mode }) {
|
|
43
|
-
const r = useCountdown(block.target);
|
|
44
|
-
if (!block.target) return null;
|
|
45
|
-
if (r?.done && block.onExpire === "hide" && mode !== "preview") return null;
|
|
46
|
-
return /* @__PURE__ */ jsxs("section", { className: "xicms-countdown", children: [
|
|
47
|
-
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, className: "xicms-countdown__heading", "data-xicms-edit": "heading", children: block.heading }),
|
|
48
|
-
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 })
|
|
49
|
-
] });
|
|
50
|
-
}
|
|
51
3
|
const countdownBlock = defineBlock({
|
|
52
4
|
type: "countdown",
|
|
53
|
-
Render: CountdownRender,
|
|
5
|
+
Render: dynamic(() => import("./CountdownRender.js").then((m) => m.CountdownRender)),
|
|
54
6
|
label: "Aftelteller",
|
|
55
7
|
icon: "\u23F3",
|
|
56
8
|
defaults: () => ({ heading: "Nog even tot de start", target: "", expiredText: "Het is zover!", showLabels: true })
|
|
57
9
|
});
|
|
58
10
|
export {
|
|
59
|
-
|
|
60
|
-
countdownBlock,
|
|
61
|
-
useCountdown
|
|
11
|
+
countdownBlock
|
|
62
12
|
};
|
|
63
13
|
//# sourceMappingURL=Countdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Countdown.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Countdown.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const countdownBlock = defineBlock({\n type: \"countdown\",\n Render: dynamic(() => import(\"./CountdownRender\").then((m) => m.CountdownRender)),\n label: \"Aftelteller\",\n icon: \"⏳\",\n defaults: () => ({ heading: \"Nog even tot de start\", target: \"\", expiredText: \"Het is zover!\", showLabels: true }),\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,EAAE,SAAS,yBAAyB,QAAQ,IAAI,aAAa,iBAAiB,YAAY,KAAK;AAClH,CAAC;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { CountdownBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
export interface Remaining {
|
|
5
|
+
days: number;
|
|
6
|
+
hours: number;
|
|
7
|
+
minutes: number;
|
|
8
|
+
seconds: number;
|
|
9
|
+
done: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Tikkende afteltimer naar `target`. Client-only (start `null` om hydration-mismatch te voorkomen).
|
|
13
|
+
* Gedeeld door het volwaardige Countdown-blok en de compacte widget.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useCountdown(target: string): Remaining | null;
|
|
16
|
+
export declare function CountdownDigits({ r, showLabels }: {
|
|
17
|
+
r: Remaining;
|
|
18
|
+
showLabels?: boolean;
|
|
19
|
+
}): import("react").JSX.Element;
|
|
20
|
+
type Countdown = z.infer<typeof CountdownBlockSchema>;
|
|
21
|
+
export declare function CountdownRender({ block, mode }: BlockRenderProps<Countdown>): import("react").JSX.Element | null;
|
|
22
|
+
export {};
|
|
@@ -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>>>;
|