@xiwebdesign/xicms-core 7.14.0 → 7.16.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/AdminApp.js +4 -3
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/dashboard/DashboardPanel.d.ts +3 -0
- package/dist/admin/dashboard/DashboardPanel.js +316 -0
- package/dist/admin/dashboard/DashboardPanel.js.map +1 -0
- package/dist/admin/navContext.d.ts +14 -0
- package/dist/admin/navContext.js +12 -0
- package/dist/admin/navContext.js.map +1 -0
- package/dist/admin/pages/PagesPanel.js +38 -12
- package/dist/admin/pages/PagesPanel.js.map +1 -1
- package/dist/admin/panelRegistry.js +4 -0
- package/dist/admin/panelRegistry.js.map +1 -1
- package/dist/admin/ui/PanelIcon.js +5 -0
- package/dist/admin/ui/PanelIcon.js.map +1 -1
- package/dist/admin/visual/VisualEditor.js +56 -20
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/admin.css +1 -1
- package/dist/auth/AuthProvider.js +8 -1
- package/dist/auth/AuthProvider.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 +61 -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/components/barOffset.js +1 -1
- package/dist/components/barOffset.js.map +1 -1
- package/dist/modules/contract.js +2 -1
- package/dist/modules/contract.js.map +1 -1
- package/dist/schema/settings.d.ts +4 -0
- package/dist/schema/settings.js +10 -1
- package/dist/schema/settings.js.map +1 -1
- package/dist/styles.css +93 -19
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,75 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
4
|
-
import { Onvoltooid } from "./lib/Onvoltooid.js";
|
|
1
|
+
import dynamic from "next/dynamic";
|
|
5
2
|
import { defineBlock } from "../registry.js";
|
|
6
|
-
import { Btn } from "../ui/index.js";
|
|
7
|
-
import { useNews } from "../../components/News.js";
|
|
8
|
-
import { selectAgendaEvents, formatEventDate } from "./Agenda.js";
|
|
9
|
-
import { parseDays } from "./lib/openingHours.js";
|
|
10
|
-
import { useCountdown, CountdownDigits } from "./Countdown.js";
|
|
11
|
-
import { TextInput } from "@astryxdesign/core/TextInput";
|
|
12
|
-
import { Button } from "@astryxdesign/core/Button";
|
|
13
|
-
function NewsWidgetRender({ block }) {
|
|
14
|
-
const { articles, loading } = useNews({ max: block.limit });
|
|
15
|
-
const shown = articles.slice(0, block.limit);
|
|
16
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--news", children: [
|
|
17
|
-
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Laatste nieuws" }),
|
|
18
|
-
loading ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", children: "Nieuws laden\u2026" }) : shown.length === 0 ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", children: "Nog geen nieuws." }) : /* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: shown.map((a) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__item", children: [
|
|
19
|
-
block.showImages && a.coverUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
20
|
-
/* @__PURE__ */ jsx("img", { className: "xicms-widget__thumb", src: a.coverUrl, alt: "", loading: "lazy" }),
|
|
21
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
22
|
-
/* @__PURE__ */ jsx("a", { className: "xicms-widget__link", href: `${block.basePath}/${a.slug}`, children: a.title }),
|
|
23
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-widget__meta", children: a.date })
|
|
24
|
-
] })
|
|
25
|
-
] }, a.id)) })
|
|
26
|
-
] });
|
|
27
|
-
}
|
|
28
3
|
const newsWidget = defineBlock({
|
|
29
4
|
type: "newsWidget",
|
|
30
|
-
Render: NewsWidgetRender,
|
|
5
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.NewsWidgetRender)),
|
|
31
6
|
label: "Laatste nieuws",
|
|
32
7
|
icon: "\u{1F5DE}\uFE0F",
|
|
33
8
|
category: "widget",
|
|
34
9
|
defaults: () => ({ heading: "Laatste nieuws", limit: 5, basePath: "/nieuws", showImages: false })
|
|
35
10
|
});
|
|
36
|
-
function AgendaWidgetRender({ block }) {
|
|
37
|
-
const events = selectAgendaEvents((block.events ?? []).map((e, i) => ({ ...e, _i: i })), { hidePast: block.hidePast, limit: block.limit });
|
|
38
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--agenda", children: [
|
|
39
|
-
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Komende evenementen" }),
|
|
40
|
-
events.length === 0 ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", children: "Geen geplande evenementen." }) : /* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: events.map((e) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__item xicms-widget__item--event", children: [
|
|
41
|
-
/* @__PURE__ */ jsx("time", { className: "xicms-widget__meta", dateTime: e.start, children: formatEventDate(e.start) }),
|
|
42
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-widget__link", children: e.url ? /* @__PURE__ */ jsx("a", { href: e.url, "data-xicms-edit": `events.${e._i}.title`, children: e.title }) : /* @__PURE__ */ jsx("span", { "data-xicms-edit": `events.${e._i}.title`, children: e.title }) }),
|
|
43
|
-
e.location && /* @__PURE__ */ jsx("span", { className: "xicms-widget__sub", "data-xicms-edit": `events.${e._i}.location`, children: e.location })
|
|
44
|
-
] }, e._i)) })
|
|
45
|
-
] });
|
|
46
|
-
}
|
|
47
11
|
const agendaWidget = defineBlock({
|
|
48
12
|
type: "agendaWidget",
|
|
49
|
-
Render: AgendaWidgetRender,
|
|
13
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.AgendaWidgetRender)),
|
|
50
14
|
label: "Komende agenda",
|
|
51
15
|
icon: "\u{1F4C5}",
|
|
52
16
|
category: "widget",
|
|
53
17
|
defaults: () => ({ heading: "Komende evenementen", limit: 5, events: [], hidePast: true })
|
|
54
18
|
});
|
|
55
|
-
function OpeningHoursWidgetRender({ block }) {
|
|
56
|
-
const [todayIdx, setTodayIdx] = useState(null);
|
|
57
|
-
useEffect(() => setTodayIdx((/* @__PURE__ */ new Date()).getDay()), []);
|
|
58
|
-
const rows = block.rows ?? [];
|
|
59
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--hours", children: [
|
|
60
|
-
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Openingstijden" }),
|
|
61
|
-
/* @__PURE__ */ jsx("table", { className: "xicms-widget__hours", children: /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => {
|
|
62
|
-
const isToday = block.highlightToday && todayIdx !== null && parseDays(r.day).includes(todayIdx);
|
|
63
|
-
return /* @__PURE__ */ jsxs("tr", { className: isToday ? "xicms-widget__hours-today" : void 0, children: [
|
|
64
|
-
/* @__PURE__ */ jsx("th", { scope: "row", "data-xicms-edit": `rows.${i}.day`, children: r.day }),
|
|
65
|
-
/* @__PURE__ */ jsx("td", { "data-xicms-edit": `rows.${i}.hours`, children: r.hours })
|
|
66
|
-
] }, i);
|
|
67
|
-
}) }) })
|
|
68
|
-
] });
|
|
69
|
-
}
|
|
70
19
|
const openingHoursWidget = defineBlock({
|
|
71
20
|
type: "openingHoursWidget",
|
|
72
|
-
Render: OpeningHoursWidgetRender,
|
|
21
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.OpeningHoursWidgetRender)),
|
|
73
22
|
label: "Openingstijden (compact)",
|
|
74
23
|
icon: "\u{1F552}",
|
|
75
24
|
category: "widget",
|
|
@@ -83,184 +32,73 @@ const openingHoursWidget = defineBlock({
|
|
|
83
32
|
]
|
|
84
33
|
})
|
|
85
34
|
});
|
|
86
|
-
function ContactWidgetRender({ block }) {
|
|
87
|
-
if (!block.address && !block.phone && !block.email) return null;
|
|
88
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--contact", children: [
|
|
89
|
-
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Contact" }),
|
|
90
|
-
/* @__PURE__ */ jsxs("ul", { className: "xicms-widget__list", children: [
|
|
91
|
-
block.address && /* @__PURE__ */ jsx("li", { className: "xicms-widget__item", "data-xicms-edit": "address", children: block.address }),
|
|
92
|
-
block.phone && /* @__PURE__ */ jsx("li", { className: "xicms-widget__item", children: /* @__PURE__ */ jsx("a", { href: `tel:${block.phone.replace(/\s+/g, "")}`, "data-xicms-edit": "phone", children: block.phone }) }),
|
|
93
|
-
block.email && /* @__PURE__ */ jsx("li", { className: "xicms-widget__item", children: /* @__PURE__ */ jsx("a", { href: `mailto:${block.email}`, "data-xicms-edit": "email", children: block.email }) })
|
|
94
|
-
] })
|
|
95
|
-
] });
|
|
96
|
-
}
|
|
97
35
|
const contactWidget = defineBlock({
|
|
98
36
|
type: "contactWidget",
|
|
99
|
-
Render: ContactWidgetRender,
|
|
37
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.ContactWidgetRender)),
|
|
100
38
|
label: "Contact (compact)",
|
|
101
39
|
icon: "\u{1F4C7}",
|
|
102
40
|
category: "widget",
|
|
103
41
|
defaults: () => ({ heading: "Contact" })
|
|
104
42
|
});
|
|
105
|
-
function SocialWidgetRender({ block }) {
|
|
106
|
-
const items = (block.items ?? []).map((it, i) => ({ ...it, _i: i })).filter((i) => i.href && i.platform);
|
|
107
|
-
if (items.length === 0) return null;
|
|
108
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--social", children: [
|
|
109
|
-
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
110
|
-
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__social", children: items.map((it) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: it.href, rel: "noopener noreferrer", target: "_blank", "data-xicms-edit": `items.${it._i}.platform`, children: it.platform }) }, it._i)) })
|
|
111
|
-
] });
|
|
112
|
-
}
|
|
113
43
|
const socialWidget = defineBlock({
|
|
114
44
|
type: "socialWidget",
|
|
115
|
-
Render: SocialWidgetRender,
|
|
45
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.SocialWidgetRender)),
|
|
116
46
|
label: "Social (compact)",
|
|
117
47
|
icon: "\u{1F517}",
|
|
118
48
|
category: "widget",
|
|
119
49
|
defaults: () => ({ heading: "Volg ons", items: [{ platform: "Instagram", href: "" }] })
|
|
120
50
|
});
|
|
121
|
-
function NewsletterWidgetRender({ block }) {
|
|
122
|
-
const [email, setEmail] = useState("");
|
|
123
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--newsletter", children: [
|
|
124
|
-
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Nieuwsbrief" }),
|
|
125
|
-
block.text && /* @__PURE__ */ jsx("p", { className: "xicms-widget__sub", "data-xicms-edit": "text", children: block.text }),
|
|
126
|
-
block.actionUrl ? /* @__PURE__ */ jsxs("form", { className: "xicms-widget__form", action: block.actionUrl, method: "post", target: "_blank", style: { display: "grid", gap: "0.6rem" }, children: [
|
|
127
|
-
/* @__PURE__ */ jsx(TextInput, { label: "E-mailadres", isLabelHidden: true, type: "email", htmlName: "EMAIL", isRequired: true, placeholder: "je@email.nl", value: email, onChange: setEmail }),
|
|
128
|
-
/* @__PURE__ */ jsx(Button, { label: block.buttonLabel, variant: "primary", type: "submit", children: /* @__PURE__ */ jsx("span", { "data-xicms-edit": "buttonLabel", children: block.buttonLabel }) })
|
|
129
|
-
] }) : /* @__PURE__ */ jsx(Onvoltooid, { children: "Deze aanmeldwidget mist nog een aanmeld-URL (tandwiel). Bezoekers zien dit blok niet." })
|
|
130
|
-
] });
|
|
131
|
-
}
|
|
132
51
|
const newsletterWidget = defineBlock({
|
|
133
52
|
type: "newsletterWidget",
|
|
134
|
-
Render: NewsletterWidgetRender,
|
|
53
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.NewsletterWidgetRender)),
|
|
135
54
|
label: "Nieuwsbrief (compact)",
|
|
136
55
|
icon: "\u2709\uFE0F",
|
|
137
56
|
category: "widget",
|
|
138
57
|
defaults: () => ({ heading: "Blijf op de hoogte", buttonLabel: "Aanmelden" })
|
|
139
58
|
});
|
|
140
|
-
function CtaWidgetRender({ block }) {
|
|
141
|
-
if (!block.title && !block.text) return null;
|
|
142
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--cta", style: block.backgroundColor ? { background: block.backgroundColor } : void 0, children: [
|
|
143
|
-
block.title && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "title", children: block.title }),
|
|
144
|
-
block.text && /* @__PURE__ */ jsx("p", { className: "xicms-widget__sub", "data-xicms-edit": "text", children: block.text }),
|
|
145
|
-
block.buttonLabel && /* @__PURE__ */ jsx(Btn, { label: block.buttonLabel, href: block.buttonHref, variant: "primary", size: "md", editField: "buttonLabel" })
|
|
146
|
-
] });
|
|
147
|
-
}
|
|
148
59
|
const ctaWidget = defineBlock({
|
|
149
60
|
type: "ctaWidget",
|
|
150
|
-
Render: CtaWidgetRender,
|
|
61
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.CtaWidgetRender)),
|
|
151
62
|
label: "Call-to-action (compact)",
|
|
152
63
|
icon: "\u{1F449}",
|
|
153
64
|
category: "widget",
|
|
154
65
|
defaults: () => ({ title: "Vragen?", text: "Neem gerust contact op.", buttonLabel: "Contact", buttonHref: "#contact" })
|
|
155
66
|
});
|
|
156
|
-
function GalleryWidgetRender({ block }) {
|
|
157
|
-
const items = (block.items ?? []).filter((i) => i.url);
|
|
158
|
-
if (items.length === 0) return null;
|
|
159
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--gallery", children: [
|
|
160
|
-
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
161
|
-
/* @__PURE__ */ jsx("div", { className: "xicms-widget__grid", "data-cols": block.columns, children: items.map((it, i) => (
|
|
162
|
-
// eslint-disable-next-line @next/next/no-img-element
|
|
163
|
-
/* @__PURE__ */ jsx("img", { className: "xicms-widget__photo", src: it.url, alt: it.alt ?? "", loading: "lazy" }, i)
|
|
164
|
-
)) })
|
|
165
|
-
] });
|
|
166
|
-
}
|
|
167
67
|
const galleryWidget = defineBlock({
|
|
168
68
|
type: "galleryWidget",
|
|
169
|
-
Render: GalleryWidgetRender,
|
|
69
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.GalleryWidgetRender)),
|
|
170
70
|
label: "Fotostrip (compact)",
|
|
171
71
|
icon: "\u{1F5BC}\uFE0F",
|
|
172
72
|
category: "widget",
|
|
173
73
|
defaults: () => ({ heading: "Foto's", columns: 3, items: [] })
|
|
174
74
|
});
|
|
175
|
-
function TestimonialsWidgetRender({ block }) {
|
|
176
|
-
const items = (block.items ?? []).map((t, i) => ({ ...t, _i: i })).filter((t) => t.quote);
|
|
177
|
-
if (items.length === 0) return null;
|
|
178
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--testimonial", children: [
|
|
179
|
-
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
180
|
-
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: items.map((t) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__quote", children: [
|
|
181
|
-
typeof t.rating === "number" && /* @__PURE__ */ jsxs("span", { className: "xicms-widget__stars", "aria-label": `${t.rating} van 5`, children: [
|
|
182
|
-
"\u2605".repeat(t.rating),
|
|
183
|
-
"\u2606".repeat(5 - t.rating)
|
|
184
|
-
] }),
|
|
185
|
-
/* @__PURE__ */ jsxs("p", { children: [
|
|
186
|
-
"\u201C",
|
|
187
|
-
/* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${t._i}.quote`, children: t.quote }),
|
|
188
|
-
"\u201D"
|
|
189
|
-
] }),
|
|
190
|
-
t.author && /* @__PURE__ */ jsxs("span", { className: "xicms-widget__meta", children: [
|
|
191
|
-
"\u2014 ",
|
|
192
|
-
/* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${t._i}.author`, children: t.author })
|
|
193
|
-
] })
|
|
194
|
-
] }, t._i)) })
|
|
195
|
-
] });
|
|
196
|
-
}
|
|
197
75
|
const testimonialsWidget = defineBlock({
|
|
198
76
|
type: "testimonialsWidget",
|
|
199
|
-
Render: TestimonialsWidgetRender,
|
|
77
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.TestimonialsWidgetRender)),
|
|
200
78
|
label: "Review (compact)",
|
|
201
79
|
icon: "\u2B50",
|
|
202
80
|
category: "widget",
|
|
203
81
|
defaults: () => ({ heading: "Wat klanten zeggen", items: [{ quote: "Echt een aanrader!", author: "Tevreden klant", rating: 5 }] })
|
|
204
82
|
});
|
|
205
|
-
function CardsWidgetRender({ block }) {
|
|
206
|
-
const items = (block.items ?? []).filter((c) => c.title);
|
|
207
|
-
if (items.length === 0) return null;
|
|
208
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--cards", children: [
|
|
209
|
-
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
210
|
-
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: items.map((c, i) => {
|
|
211
|
-
const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
212
|
-
c.icon && /* @__PURE__ */ jsx("span", { className: "xicms-widget__cardicon", "aria-hidden": "true", children: c.icon }),
|
|
213
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
|
214
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-widget__link", children: c.title }),
|
|
215
|
-
c.text && /* @__PURE__ */ jsx("span", { className: "xicms-widget__sub", children: c.text })
|
|
216
|
-
] })
|
|
217
|
-
] });
|
|
218
|
-
return /* @__PURE__ */ jsx("li", { className: "xicms-widget__item xicms-widget__item--card", children: c.href ? /* @__PURE__ */ jsx("a", { href: c.href, className: "xicms-widget__cardlink", children: inner }) : inner }, i);
|
|
219
|
-
}) })
|
|
220
|
-
] });
|
|
221
|
-
}
|
|
222
83
|
const cardsWidget = defineBlock({
|
|
223
84
|
type: "cardsWidget",
|
|
224
|
-
Render: CardsWidgetRender,
|
|
85
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.CardsWidgetRender)),
|
|
225
86
|
label: "Diensten (compact)",
|
|
226
87
|
icon: "\u{1F9E9}",
|
|
227
88
|
category: "widget",
|
|
228
89
|
defaults: () => ({ heading: "Uitgelicht", items: [{ icon: "\u2B50", title: "Dienst", text: "Korte omschrijving." }] })
|
|
229
90
|
});
|
|
230
|
-
function DownloadsWidgetRender({ block }) {
|
|
231
|
-
const items = (block.items ?? []).map((d, i) => ({ ...d, _i: i })).filter((d) => d.label && d.href).slice(0, block.limit);
|
|
232
|
-
if (items.length === 0) return null;
|
|
233
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--downloads", children: [
|
|
234
|
-
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Downloads" }),
|
|
235
|
-
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: items.map((d) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__item", children: [
|
|
236
|
-
/* @__PURE__ */ jsxs("a", { className: "xicms-widget__link", href: d.href, download: true, children: [
|
|
237
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u{1F4C4}" }),
|
|
238
|
-
" ",
|
|
239
|
-
/* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${d._i}.label`, children: d.label })
|
|
240
|
-
] }),
|
|
241
|
-
d.meta && /* @__PURE__ */ jsx("span", { className: "xicms-widget__meta", "data-xicms-edit": `items.${d._i}.meta`, children: d.meta })
|
|
242
|
-
] }, d._i)) })
|
|
243
|
-
] });
|
|
244
|
-
}
|
|
245
91
|
const downloadsWidget = defineBlock({
|
|
246
92
|
type: "downloadsWidget",
|
|
247
|
-
Render: DownloadsWidgetRender,
|
|
93
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.DownloadsWidgetRender)),
|
|
248
94
|
label: "Downloads (compact)",
|
|
249
95
|
icon: "\u{1F4E5}",
|
|
250
96
|
category: "widget",
|
|
251
97
|
defaults: () => ({ heading: "Downloads", limit: 5, items: [] })
|
|
252
98
|
});
|
|
253
|
-
function CountdownWidgetRender({ block }) {
|
|
254
|
-
const r = useCountdown(block.target);
|
|
255
|
-
if (!block.target) return null;
|
|
256
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--countdown", children: [
|
|
257
|
-
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
258
|
-
r === null ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", "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: true })
|
|
259
|
-
] });
|
|
260
|
-
}
|
|
261
99
|
const countdownWidget = defineBlock({
|
|
262
100
|
type: "countdownWidget",
|
|
263
|
-
Render: CountdownWidgetRender,
|
|
101
|
+
Render: dynamic(() => import("./WidgetsRender.js").then((m) => m.CountdownWidgetRender)),
|
|
264
102
|
label: "Aftelteller (compact)",
|
|
265
103
|
icon: "\u23F3",
|
|
266
104
|
category: "widget",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Widgets.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { z } from \"zod\";\nimport { Onvoltooid } from \"./lib/Onvoltooid\";\nimport type {\n NewsWidgetSchema,\n AgendaWidgetSchema,\n OpeningHoursWidgetSchema,\n ContactWidgetSchema,\n SocialWidgetSchema,\n NewsletterWidgetSchema,\n CtaWidgetSchema,\n GalleryWidgetSchema,\n TestimonialsWidgetSchema,\n CardsWidgetSchema,\n DownloadsWidgetSchema,\n CountdownWidgetSchema,\n} from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { Btn } from \"../ui\";\nimport { useNews } from \"../../components/News\";\nimport { selectAgendaEvents, formatEventDate } from \"./Agenda\";\nimport { parseDays } from \"./lib/openingHours\";\nimport { useCountdown, CountdownDigits } from \"./Countdown\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { Button } from \"@astryxdesign/core/Button\";\n\n/**\n * Widgets = compacte zijbalk-varianten van de modules. Elke widget hergebruikt de gegevens en\n * logica van de volwaardige versie (zelfde nieuws-collectie, zelfde agenda-selectie, zelfde\n * countdown-hook) en rendert die alleen compacter. Plaats ze in het \"Met zijbalk\"-blok of in een\n * smalle kolom naast je hoofdinhoud.\n */\n\n/* ── Laatste nieuws ────────────────────────────────────────────────────────── */\ntype NewsW = z.infer<typeof NewsWidgetSchema>;\nfunction NewsWidgetRender({ block }: BlockRenderProps<NewsW>) {\n const { articles, loading } = useNews({ max: block.limit });\n const shown = articles.slice(0, block.limit);\n return (\n <div className=\"xicms-widget xicms-widget--news\">\n <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading ?? \"Laatste nieuws\"}</h3>\n {loading ? (\n <p className=\"xicms-widget__empty\">Nieuws laden…</p>\n ) : shown.length === 0 ? (\n <p className=\"xicms-widget__empty\">Nog geen nieuws.</p>\n ) : (\n <ul className=\"xicms-widget__list\">\n {shown.map((a) => (\n <li key={a.id} className=\"xicms-widget__item\">\n {block.showImages && a.coverUrl && (\n // eslint-disable-next-line @next/next/no-img-element\n <img className=\"xicms-widget__thumb\" src={a.coverUrl} alt=\"\" loading=\"lazy\" />\n )}\n <div>\n <a className=\"xicms-widget__link\" href={`${block.basePath}/${a.slug}`}>{a.title}</a>\n <span className=\"xicms-widget__meta\">{a.date}</span>\n </div>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\nexport const newsWidget = defineBlock({\n type: \"newsWidget\",\n Render: NewsWidgetRender,\n label: \"Laatste nieuws\",\n icon: \"🗞️\",\n category: \"widget\",\n defaults: () => ({ heading: \"Laatste nieuws\", limit: 5, basePath: \"/nieuws\", showImages: false }),\n});\n\n/* ── Komende agenda ────────────────────────────────────────────────────────── */\ntype AgendaW = z.infer<typeof AgendaWidgetSchema>;\nfunction AgendaWidgetRender({ block }: BlockRenderProps<AgendaW>) {\n const events = selectAgendaEvents((block.events ?? []).map((e, i) => ({ ...e, _i: i })), { hidePast: block.hidePast, limit: block.limit });\n return (\n <div className=\"xicms-widget xicms-widget--agenda\">\n <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading ?? \"Komende evenementen\"}</h3>\n {events.length === 0 ? (\n <p className=\"xicms-widget__empty\">Geen geplande evenementen.</p>\n ) : (\n <ul className=\"xicms-widget__list\">\n {events.map((e) => (\n <li key={e._i} className=\"xicms-widget__item xicms-widget__item--event\">\n <time className=\"xicms-widget__meta\" dateTime={e.start}>{formatEventDate(e.start)}</time>\n <span className=\"xicms-widget__link\">\n {e.url\n ? <a href={e.url} data-xicms-edit={`events.${e._i}.title`}>{e.title}</a>\n : <span data-xicms-edit={`events.${e._i}.title`}>{e.title}</span>}\n </span>\n {e.location && <span className=\"xicms-widget__sub\" data-xicms-edit={`events.${e._i}.location`}>{e.location}</span>}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\nexport const agendaWidget = defineBlock({\n type: \"agendaWidget\",\n Render: AgendaWidgetRender,\n label: \"Komende agenda\",\n icon: \"📅\",\n category: \"widget\",\n defaults: () => ({ heading: \"Komende evenementen\", limit: 5, events: [], hidePast: true }),\n});\n\n/* ── Openingstijden (vandaag gemarkeerd) ───────────────────────────────────── */\ntype OpeningW = z.infer<typeof OpeningHoursWidgetSchema>;\nfunction OpeningHoursWidgetRender({ block }: BlockRenderProps<OpeningW>) {\n // \"Vandaag\" client-side bepalen (voorkomt hydration-mismatch t.o.v. de servertijd).\n const [todayIdx, setTodayIdx] = useState<number | null>(null);\n useEffect(() => setTodayIdx(new Date().getDay()), []);\n const rows = block.rows ?? [];\n return (\n <div className=\"xicms-widget xicms-widget--hours\">\n <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading ?? \"Openingstijden\"}</h3>\n <table className=\"xicms-widget__hours\">\n <tbody>\n {rows.map((r, i) => {\n // parseDays begrijpt ook bereiken (\"Ma-vr\", \"Maandag t/m vrijdag\") - een woensdag\n // hoort dan net zo goed gemarkeerd als de letterlijk genoemde dagen.\n const isToday =\n block.highlightToday && todayIdx !== null && parseDays(r.day).includes(todayIdx);\n return (\n <tr key={i} className={isToday ? \"xicms-widget__hours-today\" : undefined}>\n <th scope=\"row\" data-xicms-edit={`rows.${i}.day`}>{r.day}</th>\n <td data-xicms-edit={`rows.${i}.hours`}>{r.hours}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\nexport const openingHoursWidget = defineBlock({\n type: \"openingHoursWidget\",\n Render: OpeningHoursWidgetRender,\n label: \"Openingstijden (compact)\",\n icon: \"🕒\",\n category: \"widget\",\n defaults: () => ({\n heading: \"Openingstijden\",\n highlightToday: true,\n rows: [\n { day: \"Maandag t/m vrijdag\", hours: \"09:00 – 17:00\" },\n { day: \"Zaterdag\", hours: \"10:00 – 16:00\" },\n { day: \"Zondag\", hours: \"Gesloten\" },\n ],\n }),\n});\n\n/* ── Contact (compact) ─────────────────────────────────────────────────────── */\ntype ContactW = z.infer<typeof ContactWidgetSchema>;\nfunction ContactWidgetRender({ block }: BlockRenderProps<ContactW>) {\n if (!block.address && !block.phone && !block.email) return null;\n return (\n <div className=\"xicms-widget xicms-widget--contact\">\n <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading ?? \"Contact\"}</h3>\n <ul className=\"xicms-widget__list\">\n {block.address && <li className=\"xicms-widget__item\" data-xicms-edit=\"address\">{block.address}</li>}\n {block.phone && (\n <li className=\"xicms-widget__item\"><a href={`tel:${block.phone.replace(/\\s+/g, \"\")}`} data-xicms-edit=\"phone\">{block.phone}</a></li>\n )}\n {block.email && (\n <li className=\"xicms-widget__item\"><a href={`mailto:${block.email}`} data-xicms-edit=\"email\">{block.email}</a></li>\n )}\n </ul>\n </div>\n );\n}\nexport const contactWidget = defineBlock({\n type: \"contactWidget\",\n Render: ContactWidgetRender,\n label: \"Contact (compact)\",\n icon: \"📇\",\n category: \"widget\",\n defaults: () => ({ heading: \"Contact\" }),\n});\n\n/* ── Social (compact) ──────────────────────────────────────────────────────── */\ntype SocialW = z.infer<typeof SocialWidgetSchema>;\nfunction SocialWidgetRender({ block }: BlockRenderProps<SocialW>) {\n // _i = index in de OORSPRONKELIJKE array — de lijst wordt gefilterd op href && platform.\n const items = (block.items ?? []).map((it, i) => ({ ...it, _i: i })).filter((i) => i.href && i.platform);\n if (items.length === 0) return null;\n return (\n <div className=\"xicms-widget xicms-widget--social\">\n {block.heading && <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading}</h3>}\n <ul className=\"xicms-widget__social\">\n {items.map((it) => (\n <li key={it._i}><a href={it.href} rel=\"noopener noreferrer\" target=\"_blank\" data-xicms-edit={`items.${it._i}.platform`}>{it.platform}</a></li>\n ))}\n </ul>\n </div>\n );\n}\nexport const socialWidget = defineBlock({\n type: \"socialWidget\",\n Render: SocialWidgetRender,\n label: \"Social (compact)\",\n icon: \"🔗\",\n category: \"widget\",\n defaults: () => ({ heading: \"Volg ons\", items: [{ platform: \"Instagram\", href: \"\" }] }),\n});\n\n/* ── Nieuwsbrief (compact) ─────────────────────────────────────────────────── */\ntype NewsletterW = z.infer<typeof NewsletterWidgetSchema>;\nfunction NewsletterWidgetRender({ block }: BlockRenderProps<NewsletterW>) {\n const [email, setEmail] = useState(\"\");\n return (\n <div className=\"xicms-widget xicms-widget--newsletter\">\n <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading ?? \"Nieuwsbrief\"}</h3>\n {block.text && <p className=\"xicms-widget__sub\" data-xicms-edit=\"text\">{block.text}</p>}\n {block.actionUrl ? (\n <form className=\"xicms-widget__form\" action={block.actionUrl} method=\"post\" target=\"_blank\" style={{ display: \"grid\", gap: \"0.6rem\" }}>\n <TextInput label=\"E-mailadres\" isLabelHidden type=\"email\" htmlName=\"EMAIL\" isRequired placeholder=\"je@email.nl\" value={email} onChange={setEmail} />\n <Button label={block.buttonLabel} variant=\"primary\" type=\"submit\">\n <span data-xicms-edit=\"buttonLabel\">{block.buttonLabel}</span>\n </Button>\n </form>\n ) : (\n <Onvoltooid>Deze aanmeldwidget mist nog een aanmeld-URL (tandwiel). Bezoekers zien dit blok niet.</Onvoltooid>\n )}\n </div>\n );\n}\nexport const newsletterWidget = defineBlock({\n type: \"newsletterWidget\",\n Render: NewsletterWidgetRender,\n label: \"Nieuwsbrief (compact)\",\n icon: \"✉️\",\n category: \"widget\",\n defaults: () => ({ heading: \"Blijf op de hoogte\", buttonLabel: \"Aanmelden\" }),\n});\n\n/* ── CTA (compact) ─────────────────────────────────────────────────────────── */\ntype CtaW = z.infer<typeof CtaWidgetSchema>;\nfunction CtaWidgetRender({ block }: BlockRenderProps<CtaW>) {\n if (!block.title && !block.text) return null;\n return (\n <div className=\"xicms-widget xicms-widget--cta\" style={block.backgroundColor ? { background: block.backgroundColor } : undefined}>\n {block.title && <h3 className=\"xicms-widget__title\" data-xicms-edit=\"title\">{block.title}</h3>}\n {block.text && <p className=\"xicms-widget__sub\" data-xicms-edit=\"text\">{block.text}</p>}\n {block.buttonLabel && (\n <Btn label={block.buttonLabel} href={block.buttonHref} variant=\"primary\" size=\"md\" editField=\"buttonLabel\" />\n )}\n </div>\n );\n}\nexport const ctaWidget = defineBlock({\n type: \"ctaWidget\",\n Render: CtaWidgetRender,\n label: \"Call-to-action (compact)\",\n icon: \"👉\",\n category: \"widget\",\n defaults: () => ({ title: \"Vragen?\", text: \"Neem gerust contact op.\", buttonLabel: \"Contact\", buttonHref: \"#contact\" }),\n});\n\n/* ── Galerij (compacte strip) ──────────────────────────────────────────────── */\ntype GalleryW = z.infer<typeof GalleryWidgetSchema>;\nfunction GalleryWidgetRender({ block }: BlockRenderProps<GalleryW>) {\n const items = (block.items ?? []).filter((i) => i.url);\n if (items.length === 0) return null;\n return (\n <div className=\"xicms-widget xicms-widget--gallery\">\n {block.heading && <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading}</h3>}\n <div className=\"xicms-widget__grid\" data-cols={block.columns}>\n {items.map((it, i) => (\n // eslint-disable-next-line @next/next/no-img-element\n <img key={i} className=\"xicms-widget__photo\" src={it.url} alt={it.alt ?? \"\"} loading=\"lazy\" />\n ))}\n </div>\n </div>\n );\n}\nexport const galleryWidget = defineBlock({\n type: \"galleryWidget\",\n Render: GalleryWidgetRender,\n label: \"Fotostrip (compact)\",\n icon: \"🖼️\",\n category: \"widget\",\n defaults: () => ({ heading: \"Foto's\", columns: 3, items: [] }),\n});\n\n/* ── Review (compact) ──────────────────────────────────────────────────────── */\ntype TestimonialsW = z.infer<typeof TestimonialsWidgetSchema>;\nfunction TestimonialsWidgetRender({ block }: BlockRenderProps<TestimonialsW>) {\n // _i = index in de OORSPRONKELIJKE array — de lijst wordt gefilterd op quote.\n const items = (block.items ?? []).map((t, i) => ({ ...t, _i: i })).filter((t) => t.quote);\n if (items.length === 0) return null;\n return (\n <div className=\"xicms-widget xicms-widget--testimonial\">\n {block.heading && <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading}</h3>}\n <ul className=\"xicms-widget__list\">\n {items.map((t) => (\n <li key={t._i} className=\"xicms-widget__quote\">\n {typeof t.rating === \"number\" && (\n <span className=\"xicms-widget__stars\" aria-label={`${t.rating} van 5`}>{\"★\".repeat(t.rating)}{\"☆\".repeat(5 - t.rating)}</span>\n )}\n <p>“<span data-xicms-edit={`items.${t._i}.quote`}>{t.quote}</span>”</p>\n {t.author && <span className=\"xicms-widget__meta\">— <span data-xicms-edit={`items.${t._i}.author`}>{t.author}</span></span>}\n </li>\n ))}\n </ul>\n </div>\n );\n}\nexport const testimonialsWidget = defineBlock({\n type: \"testimonialsWidget\",\n Render: TestimonialsWidgetRender,\n label: \"Review (compact)\",\n icon: \"⭐\",\n category: \"widget\",\n defaults: () => ({ heading: \"Wat klanten zeggen\", items: [{ quote: \"Echt een aanrader!\", author: \"Tevreden klant\", rating: 5 }] }),\n});\n\n/* ── Diensten (compact) ────────────────────────────────────────────────────── */\ntype CardsW = z.infer<typeof CardsWidgetSchema>;\nfunction CardsWidgetRender({ block }: BlockRenderProps<CardsW>) {\n const items = (block.items ?? []).filter((c) => c.title);\n if (items.length === 0) return null;\n return (\n <div className=\"xicms-widget xicms-widget--cards\">\n {block.heading && <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading}</h3>}\n <ul className=\"xicms-widget__list\">\n {items.map((c, i) => {\n const inner = (\n <>\n {c.icon && <span className=\"xicms-widget__cardicon\" aria-hidden=\"true\">{c.icon}</span>}\n <span>\n <span className=\"xicms-widget__link\">{c.title}</span>\n {c.text && <span className=\"xicms-widget__sub\">{c.text}</span>}\n </span>\n </>\n );\n return (\n <li key={i} className=\"xicms-widget__item xicms-widget__item--card\">\n {c.href ? <a href={c.href} className=\"xicms-widget__cardlink\">{inner}</a> : inner}\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\nexport const cardsWidget = defineBlock({\n type: \"cardsWidget\",\n Render: CardsWidgetRender,\n label: \"Diensten (compact)\",\n icon: \"🧩\",\n category: \"widget\",\n defaults: () => ({ heading: \"Uitgelicht\", items: [{ icon: \"⭐\", title: \"Dienst\", text: \"Korte omschrijving.\" }] }),\n});\n\n/* ── Downloads (compact) ───────────────────────────────────────────────────── */\ntype DownloadsW = z.infer<typeof DownloadsWidgetSchema>;\nfunction DownloadsWidgetRender({ block }: BlockRenderProps<DownloadsW>) {\n // _i = index in de OORSPRONKELIJKE array — de lijst wordt gefilterd én afgekapt op `limit`.\n const items = (block.items ?? []).map((d, i) => ({ ...d, _i: i })).filter((d) => d.label && d.href).slice(0, block.limit);\n if (items.length === 0) return null;\n return (\n <div className=\"xicms-widget xicms-widget--downloads\">\n <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading ?? \"Downloads\"}</h3>\n <ul className=\"xicms-widget__list\">\n {items.map((d) => (\n <li key={d._i} className=\"xicms-widget__item\">\n <a className=\"xicms-widget__link\" href={d.href} download>\n <span aria-hidden=\"true\">📄</span> <span data-xicms-edit={`items.${d._i}.label`}>{d.label}</span>\n </a>\n {d.meta && <span className=\"xicms-widget__meta\" data-xicms-edit={`items.${d._i}.meta`}>{d.meta}</span>}\n </li>\n ))}\n </ul>\n </div>\n );\n}\nexport const downloadsWidget = defineBlock({\n type: \"downloadsWidget\",\n Render: DownloadsWidgetRender,\n label: \"Downloads (compact)\",\n icon: \"📥\",\n category: \"widget\",\n defaults: () => ({ heading: \"Downloads\", limit: 5, items: [] }),\n});\n\n/* ── Aftelteller (compact) ─────────────────────────────────────────────────── */\ntype CountdownW = z.infer<typeof CountdownWidgetSchema>;\nfunction CountdownWidgetRender({ block }: BlockRenderProps<CountdownW>) {\n const r = useCountdown(block.target);\n if (!block.target) return null;\n return (\n <div className=\"xicms-widget xicms-widget--countdown\">\n {block.heading && <h3 className=\"xicms-widget__title\" data-xicms-edit=\"heading\">{block.heading}</h3>}\n {r === null ? (\n <p className=\"xicms-widget__empty\" 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 />\n )}\n </div>\n );\n}\nexport const countdownWidget = defineBlock({\n type: \"countdownWidget\",\n Render: CountdownWidgetRender,\n label: \"Aftelteller (compact)\",\n icon: \"⏳\",\n category: \"widget\",\n defaults: () => ({ heading: \"Aftellen\", target: \"\", expiredText: \"Het is zover!\" }),\n});\n\n// Let op: exporteer GEEN aggregaat-array vanuit dit \"use client\"-bestand. Een array die hier\n// wordt opgebouwd is niet server-importeerbaar (de individuele block-exports wél). De volledige\n// lijst staat in blocks/builtins/index.ts.\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Widgets.tsx"],"sourcesContent":["import dynamic from \"next/dynamic\";\nimport { defineBlock } from \"../registry\";\n\nexport const newsWidget = defineBlock({\n type: \"newsWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.NewsWidgetRender)),\n label: \"Laatste nieuws\",\n icon: \"🗞️\",\n category: \"widget\",\n defaults: () => ({ heading: \"Laatste nieuws\", limit: 5, basePath: \"/nieuws\", showImages: false }),\n});\n\nexport const agendaWidget = defineBlock({\n type: \"agendaWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.AgendaWidgetRender)),\n label: \"Komende agenda\",\n icon: \"📅\",\n category: \"widget\",\n defaults: () => ({ heading: \"Komende evenementen\", limit: 5, events: [], hidePast: true }),\n});\n\nexport const openingHoursWidget = defineBlock({\n type: \"openingHoursWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.OpeningHoursWidgetRender)),\n label: \"Openingstijden (compact)\",\n icon: \"🕒\",\n category: \"widget\",\n defaults: () => ({\n heading: \"Openingstijden\",\n highlightToday: true,\n rows: [\n { day: \"Maandag t/m vrijdag\", hours: \"09:00 – 17:00\" },\n { day: \"Zaterdag\", hours: \"10:00 – 16:00\" },\n { day: \"Zondag\", hours: \"Gesloten\" },\n ],\n }),\n});\n\nexport const contactWidget = defineBlock({\n type: \"contactWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.ContactWidgetRender)),\n label: \"Contact (compact)\",\n icon: \"📇\",\n category: \"widget\",\n defaults: () => ({ heading: \"Contact\" }),\n});\n\nexport const socialWidget = defineBlock({\n type: \"socialWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.SocialWidgetRender)),\n label: \"Social (compact)\",\n icon: \"🔗\",\n category: \"widget\",\n defaults: () => ({ heading: \"Volg ons\", items: [{ platform: \"Instagram\", href: \"\" }] }),\n});\n\nexport const newsletterWidget = defineBlock({\n type: \"newsletterWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.NewsletterWidgetRender)),\n label: \"Nieuwsbrief (compact)\",\n icon: \"✉️\",\n category: \"widget\",\n defaults: () => ({ heading: \"Blijf op de hoogte\", buttonLabel: \"Aanmelden\" }),\n});\n\nexport const ctaWidget = defineBlock({\n type: \"ctaWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.CtaWidgetRender)),\n label: \"Call-to-action (compact)\",\n icon: \"👉\",\n category: \"widget\",\n defaults: () => ({ title: \"Vragen?\", text: \"Neem gerust contact op.\", buttonLabel: \"Contact\", buttonHref: \"#contact\" }),\n});\n\nexport const galleryWidget = defineBlock({\n type: \"galleryWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.GalleryWidgetRender)),\n label: \"Fotostrip (compact)\",\n icon: \"🖼️\",\n category: \"widget\",\n defaults: () => ({ heading: \"Foto's\", columns: 3, items: [] }),\n});\n\nexport const testimonialsWidget = defineBlock({\n type: \"testimonialsWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.TestimonialsWidgetRender)),\n label: \"Review (compact)\",\n icon: \"⭐\",\n category: \"widget\",\n defaults: () => ({ heading: \"Wat klanten zeggen\", items: [{ quote: \"Echt een aanrader!\", author: \"Tevreden klant\", rating: 5 }] }),\n});\n\nexport const cardsWidget = defineBlock({\n type: \"cardsWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.CardsWidgetRender)),\n label: \"Diensten (compact)\",\n icon: \"🧩\",\n category: \"widget\",\n defaults: () => ({ heading: \"Uitgelicht\", items: [{ icon: \"⭐\", title: \"Dienst\", text: \"Korte omschrijving.\" }] }),\n});\n\nexport const downloadsWidget = defineBlock({\n type: \"downloadsWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.DownloadsWidgetRender)),\n label: \"Downloads (compact)\",\n icon: \"📥\",\n category: \"widget\",\n defaults: () => ({ heading: \"Downloads\", limit: 5, items: [] }),\n});\n\nexport const countdownWidget = defineBlock({\n type: \"countdownWidget\",\n Render: dynamic(() => import(\"./WidgetsRender\").then((m) => m.CountdownWidgetRender)),\n label: \"Aftelteller (compact)\",\n icon: \"⏳\",\n category: \"widget\",\n defaults: () => ({ heading: \"Aftellen\", target: \"\", expiredText: \"Het is zover!\" }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { NewsWidgetSchema, AgendaWidgetSchema, OpeningHoursWidgetSchema, ContactWidgetSchema, SocialWidgetSchema, NewsletterWidgetSchema, CtaWidgetSchema, GalleryWidgetSchema, TestimonialsWidgetSchema, CardsWidgetSchema, DownloadsWidgetSchema, CountdownWidgetSchema } from "../../schema/blocks.js";
|
|
3
|
+
import type { BlockRenderProps } from "../registry.js";
|
|
4
|
+
/**
|
|
5
|
+
* Widgets = compacte zijbalk-varianten van de modules. Elke widget hergebruikt de gegevens en
|
|
6
|
+
* logica van de volwaardige versie (zelfde nieuws-collectie, zelfde agenda-selectie, zelfde
|
|
7
|
+
* countdown-hook) en rendert die alleen compacter. Plaats ze in het "Met zijbalk"-blok of in een
|
|
8
|
+
* smalle kolom naast je hoofdinhoud.
|
|
9
|
+
*/
|
|
10
|
+
type NewsW = z.infer<typeof NewsWidgetSchema>;
|
|
11
|
+
export declare function NewsWidgetRender({ block }: BlockRenderProps<NewsW>): import("react").JSX.Element;
|
|
12
|
+
type AgendaW = z.infer<typeof AgendaWidgetSchema>;
|
|
13
|
+
export declare function AgendaWidgetRender({ block }: BlockRenderProps<AgendaW>): import("react").JSX.Element;
|
|
14
|
+
type OpeningW = z.infer<typeof OpeningHoursWidgetSchema>;
|
|
15
|
+
export declare function OpeningHoursWidgetRender({ block }: BlockRenderProps<OpeningW>): import("react").JSX.Element;
|
|
16
|
+
type ContactW = z.infer<typeof ContactWidgetSchema>;
|
|
17
|
+
export declare function ContactWidgetRender({ block }: BlockRenderProps<ContactW>): import("react").JSX.Element | null;
|
|
18
|
+
type SocialW = z.infer<typeof SocialWidgetSchema>;
|
|
19
|
+
export declare function SocialWidgetRender({ block }: BlockRenderProps<SocialW>): import("react").JSX.Element | null;
|
|
20
|
+
type NewsletterW = z.infer<typeof NewsletterWidgetSchema>;
|
|
21
|
+
export declare function NewsletterWidgetRender({ block }: BlockRenderProps<NewsletterW>): import("react").JSX.Element;
|
|
22
|
+
type CtaW = z.infer<typeof CtaWidgetSchema>;
|
|
23
|
+
export declare function CtaWidgetRender({ block }: BlockRenderProps<CtaW>): import("react").JSX.Element | null;
|
|
24
|
+
type GalleryW = z.infer<typeof GalleryWidgetSchema>;
|
|
25
|
+
export declare function GalleryWidgetRender({ block }: BlockRenderProps<GalleryW>): import("react").JSX.Element | null;
|
|
26
|
+
type TestimonialsW = z.infer<typeof TestimonialsWidgetSchema>;
|
|
27
|
+
export declare function TestimonialsWidgetRender({ block }: BlockRenderProps<TestimonialsW>): import("react").JSX.Element | null;
|
|
28
|
+
type CardsW = z.infer<typeof CardsWidgetSchema>;
|
|
29
|
+
export declare function CardsWidgetRender({ block }: BlockRenderProps<CardsW>): import("react").JSX.Element | null;
|
|
30
|
+
type DownloadsW = z.infer<typeof DownloadsWidgetSchema>;
|
|
31
|
+
export declare function DownloadsWidgetRender({ block }: BlockRenderProps<DownloadsW>): import("react").JSX.Element | null;
|
|
32
|
+
type CountdownW = z.infer<typeof CountdownWidgetSchema>;
|
|
33
|
+
export declare function CountdownWidgetRender({ block }: BlockRenderProps<CountdownW>): import("react").JSX.Element | null;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { Onvoltooid } from "./lib/Onvoltooid.js";
|
|
5
|
+
import { Btn } from "../ui/index.js";
|
|
6
|
+
import { useNews } from "../../components/News.js";
|
|
7
|
+
import { selectAgendaEvents, formatEventDate } from "./AgendaRender.js";
|
|
8
|
+
import { parseDays } from "./lib/openingHours.js";
|
|
9
|
+
import { useCountdown, CountdownDigits } from "./CountdownRender.js";
|
|
10
|
+
import { TextInput } from "@astryxdesign/core/TextInput";
|
|
11
|
+
import { Button } from "@astryxdesign/core/Button";
|
|
12
|
+
function NewsWidgetRender({ block }) {
|
|
13
|
+
const { articles, loading } = useNews({ max: block.limit });
|
|
14
|
+
const shown = articles.slice(0, block.limit);
|
|
15
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--news", children: [
|
|
16
|
+
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Laatste nieuws" }),
|
|
17
|
+
loading ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", children: "Nieuws laden\u2026" }) : shown.length === 0 ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", children: "Nog geen nieuws." }) : /* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: shown.map((a) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__item", children: [
|
|
18
|
+
block.showImages && a.coverUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
19
|
+
/* @__PURE__ */ jsx("img", { className: "xicms-widget__thumb", src: a.coverUrl, alt: "", loading: "lazy" }),
|
|
20
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
21
|
+
/* @__PURE__ */ jsx("a", { className: "xicms-widget__link", href: `${block.basePath}/${a.slug}`, children: a.title }),
|
|
22
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-widget__meta", children: a.date })
|
|
23
|
+
] })
|
|
24
|
+
] }, a.id)) })
|
|
25
|
+
] });
|
|
26
|
+
}
|
|
27
|
+
function AgendaWidgetRender({ block }) {
|
|
28
|
+
const events = selectAgendaEvents((block.events ?? []).map((e, i) => ({ ...e, _i: i })), { hidePast: block.hidePast, limit: block.limit });
|
|
29
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--agenda", children: [
|
|
30
|
+
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Komende evenementen" }),
|
|
31
|
+
events.length === 0 ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", children: "Geen geplande evenementen." }) : /* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: events.map((e) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__item xicms-widget__item--event", children: [
|
|
32
|
+
/* @__PURE__ */ jsx("time", { className: "xicms-widget__meta", dateTime: e.start, children: formatEventDate(e.start) }),
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-widget__link", children: e.url ? /* @__PURE__ */ jsx("a", { href: e.url, "data-xicms-edit": `events.${e._i}.title`, children: e.title }) : /* @__PURE__ */ jsx("span", { "data-xicms-edit": `events.${e._i}.title`, children: e.title }) }),
|
|
34
|
+
e.location && /* @__PURE__ */ jsx("span", { className: "xicms-widget__sub", "data-xicms-edit": `events.${e._i}.location`, children: e.location })
|
|
35
|
+
] }, e._i)) })
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
function OpeningHoursWidgetRender({ block }) {
|
|
39
|
+
const [todayIdx, setTodayIdx] = useState(null);
|
|
40
|
+
useEffect(() => setTodayIdx((/* @__PURE__ */ new Date()).getDay()), []);
|
|
41
|
+
const rows = block.rows ?? [];
|
|
42
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--hours", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Openingstijden" }),
|
|
44
|
+
/* @__PURE__ */ jsx("table", { className: "xicms-widget__hours", children: /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => {
|
|
45
|
+
const isToday = block.highlightToday && todayIdx !== null && parseDays(r.day).includes(todayIdx);
|
|
46
|
+
return /* @__PURE__ */ jsxs("tr", { className: isToday ? "xicms-widget__hours-today" : void 0, children: [
|
|
47
|
+
/* @__PURE__ */ jsx("th", { scope: "row", "data-xicms-edit": `rows.${i}.day`, children: r.day }),
|
|
48
|
+
/* @__PURE__ */ jsx("td", { "data-xicms-edit": `rows.${i}.hours`, children: r.hours })
|
|
49
|
+
] }, i);
|
|
50
|
+
}) }) })
|
|
51
|
+
] });
|
|
52
|
+
}
|
|
53
|
+
function ContactWidgetRender({ block }) {
|
|
54
|
+
if (!block.address && !block.phone && !block.email) return null;
|
|
55
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--contact", children: [
|
|
56
|
+
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Contact" }),
|
|
57
|
+
/* @__PURE__ */ jsxs("ul", { className: "xicms-widget__list", children: [
|
|
58
|
+
block.address && /* @__PURE__ */ jsx("li", { className: "xicms-widget__item", "data-xicms-edit": "address", children: block.address }),
|
|
59
|
+
block.phone && /* @__PURE__ */ jsx("li", { className: "xicms-widget__item", children: /* @__PURE__ */ jsx("a", { href: `tel:${block.phone.replace(/\s+/g, "")}`, "data-xicms-edit": "phone", children: block.phone }) }),
|
|
60
|
+
block.email && /* @__PURE__ */ jsx("li", { className: "xicms-widget__item", children: /* @__PURE__ */ jsx("a", { href: `mailto:${block.email}`, "data-xicms-edit": "email", children: block.email }) })
|
|
61
|
+
] })
|
|
62
|
+
] });
|
|
63
|
+
}
|
|
64
|
+
function SocialWidgetRender({ block }) {
|
|
65
|
+
const items = (block.items ?? []).map((it, i) => ({ ...it, _i: i })).filter((i) => i.href && i.platform);
|
|
66
|
+
if (items.length === 0) return null;
|
|
67
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--social", children: [
|
|
68
|
+
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
69
|
+
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__social", children: items.map((it) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: it.href, rel: "noopener noreferrer", target: "_blank", "data-xicms-edit": `items.${it._i}.platform`, children: it.platform }) }, it._i)) })
|
|
70
|
+
] });
|
|
71
|
+
}
|
|
72
|
+
function NewsletterWidgetRender({ block }) {
|
|
73
|
+
const [email, setEmail] = useState("");
|
|
74
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--newsletter", children: [
|
|
75
|
+
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Nieuwsbrief" }),
|
|
76
|
+
block.text && /* @__PURE__ */ jsx("p", { className: "xicms-widget__sub", "data-xicms-edit": "text", children: block.text }),
|
|
77
|
+
block.actionUrl ? /* @__PURE__ */ jsxs("form", { className: "xicms-widget__form", action: block.actionUrl, method: "post", target: "_blank", style: { display: "grid", gap: "0.6rem" }, children: [
|
|
78
|
+
/* @__PURE__ */ jsx(TextInput, { label: "E-mailadres", isLabelHidden: true, type: "email", htmlName: "EMAIL", isRequired: true, placeholder: "je@email.nl", value: email, onChange: setEmail }),
|
|
79
|
+
/* @__PURE__ */ jsx(Button, { label: block.buttonLabel, variant: "primary", type: "submit", children: /* @__PURE__ */ jsx("span", { "data-xicms-edit": "buttonLabel", children: block.buttonLabel }) })
|
|
80
|
+
] }) : /* @__PURE__ */ jsx(Onvoltooid, { children: "Deze aanmeldwidget mist nog een aanmeld-URL (tandwiel). Bezoekers zien dit blok niet." })
|
|
81
|
+
] });
|
|
82
|
+
}
|
|
83
|
+
function CtaWidgetRender({ block }) {
|
|
84
|
+
if (!block.title && !block.text) return null;
|
|
85
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--cta", style: block.backgroundColor ? { background: block.backgroundColor } : void 0, children: [
|
|
86
|
+
block.title && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "title", children: block.title }),
|
|
87
|
+
block.text && /* @__PURE__ */ jsx("p", { className: "xicms-widget__sub", "data-xicms-edit": "text", children: block.text }),
|
|
88
|
+
block.buttonLabel && /* @__PURE__ */ jsx(Btn, { label: block.buttonLabel, href: block.buttonHref, variant: "primary", size: "md", editField: "buttonLabel" })
|
|
89
|
+
] });
|
|
90
|
+
}
|
|
91
|
+
function GalleryWidgetRender({ block }) {
|
|
92
|
+
const items = (block.items ?? []).filter((i) => i.url);
|
|
93
|
+
if (items.length === 0) return null;
|
|
94
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--gallery", children: [
|
|
95
|
+
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
96
|
+
/* @__PURE__ */ jsx("div", { className: "xicms-widget__grid", "data-cols": block.columns, children: items.map((it, i) => (
|
|
97
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
98
|
+
/* @__PURE__ */ jsx("img", { className: "xicms-widget__photo", src: it.url, alt: it.alt ?? "", loading: "lazy" }, i)
|
|
99
|
+
)) })
|
|
100
|
+
] });
|
|
101
|
+
}
|
|
102
|
+
function TestimonialsWidgetRender({ block }) {
|
|
103
|
+
const items = (block.items ?? []).map((t, i) => ({ ...t, _i: i })).filter((t) => t.quote);
|
|
104
|
+
if (items.length === 0) return null;
|
|
105
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--testimonial", children: [
|
|
106
|
+
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
107
|
+
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: items.map((t) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__quote", children: [
|
|
108
|
+
typeof t.rating === "number" && /* @__PURE__ */ jsxs("span", { className: "xicms-widget__stars", "aria-label": `${t.rating} van 5`, children: [
|
|
109
|
+
"\u2605".repeat(t.rating),
|
|
110
|
+
"\u2606".repeat(5 - t.rating)
|
|
111
|
+
] }),
|
|
112
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
113
|
+
"\u201C",
|
|
114
|
+
/* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${t._i}.quote`, children: t.quote }),
|
|
115
|
+
"\u201D"
|
|
116
|
+
] }),
|
|
117
|
+
t.author && /* @__PURE__ */ jsxs("span", { className: "xicms-widget__meta", children: [
|
|
118
|
+
"\u2014 ",
|
|
119
|
+
/* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${t._i}.author`, children: t.author })
|
|
120
|
+
] })
|
|
121
|
+
] }, t._i)) })
|
|
122
|
+
] });
|
|
123
|
+
}
|
|
124
|
+
function CardsWidgetRender({ block }) {
|
|
125
|
+
const items = (block.items ?? []).filter((c) => c.title);
|
|
126
|
+
if (items.length === 0) return null;
|
|
127
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--cards", children: [
|
|
128
|
+
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
129
|
+
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: items.map((c, i) => {
|
|
130
|
+
const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
131
|
+
c.icon && /* @__PURE__ */ jsx("span", { className: "xicms-widget__cardicon", "aria-hidden": "true", children: c.icon }),
|
|
132
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
133
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-widget__link", children: c.title }),
|
|
134
|
+
c.text && /* @__PURE__ */ jsx("span", { className: "xicms-widget__sub", children: c.text })
|
|
135
|
+
] })
|
|
136
|
+
] });
|
|
137
|
+
return /* @__PURE__ */ jsx("li", { className: "xicms-widget__item xicms-widget__item--card", children: c.href ? /* @__PURE__ */ jsx("a", { href: c.href, className: "xicms-widget__cardlink", children: inner }) : inner }, i);
|
|
138
|
+
}) })
|
|
139
|
+
] });
|
|
140
|
+
}
|
|
141
|
+
function DownloadsWidgetRender({ block }) {
|
|
142
|
+
const items = (block.items ?? []).map((d, i) => ({ ...d, _i: i })).filter((d) => d.label && d.href).slice(0, block.limit);
|
|
143
|
+
if (items.length === 0) return null;
|
|
144
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--downloads", children: [
|
|
145
|
+
/* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading ?? "Downloads" }),
|
|
146
|
+
/* @__PURE__ */ jsx("ul", { className: "xicms-widget__list", children: items.map((d) => /* @__PURE__ */ jsxs("li", { className: "xicms-widget__item", children: [
|
|
147
|
+
/* @__PURE__ */ jsxs("a", { className: "xicms-widget__link", href: d.href, download: true, children: [
|
|
148
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u{1F4C4}" }),
|
|
149
|
+
" ",
|
|
150
|
+
/* @__PURE__ */ jsx("span", { "data-xicms-edit": `items.${d._i}.label`, children: d.label })
|
|
151
|
+
] }),
|
|
152
|
+
d.meta && /* @__PURE__ */ jsx("span", { className: "xicms-widget__meta", "data-xicms-edit": `items.${d._i}.meta`, children: d.meta })
|
|
153
|
+
] }, d._i)) })
|
|
154
|
+
] });
|
|
155
|
+
}
|
|
156
|
+
function CountdownWidgetRender({ block }) {
|
|
157
|
+
const r = useCountdown(block.target);
|
|
158
|
+
if (!block.target) return null;
|
|
159
|
+
return /* @__PURE__ */ jsxs("div", { className: "xicms-widget xicms-widget--countdown", children: [
|
|
160
|
+
block.heading && /* @__PURE__ */ jsx("h3", { className: "xicms-widget__title", "data-xicms-edit": "heading", children: block.heading }),
|
|
161
|
+
r === null ? /* @__PURE__ */ jsx("p", { className: "xicms-widget__empty", "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: true })
|
|
162
|
+
] });
|
|
163
|
+
}
|
|
164
|
+
export {
|
|
165
|
+
AgendaWidgetRender,
|
|
166
|
+
CardsWidgetRender,
|
|
167
|
+
ContactWidgetRender,
|
|
168
|
+
CountdownWidgetRender,
|
|
169
|
+
CtaWidgetRender,
|
|
170
|
+
DownloadsWidgetRender,
|
|
171
|
+
GalleryWidgetRender,
|
|
172
|
+
NewsWidgetRender,
|
|
173
|
+
NewsletterWidgetRender,
|
|
174
|
+
OpeningHoursWidgetRender,
|
|
175
|
+
SocialWidgetRender,
|
|
176
|
+
TestimonialsWidgetRender
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=WidgetsRender.js.map
|