@xiwebdesign/xicms-core 4.17.1 → 5.0.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/XiCMSProvider.d.ts +7 -0
- package/dist/XiCMSProvider.js +32 -7
- package/dist/XiCMSProvider.js.map +1 -1
- package/dist/admin/blockEditors/GenericEditor.d.ts +22 -0
- package/dist/admin/blockEditors/GenericEditor.js +201 -0
- package/dist/admin/blockEditors/GenericEditor.js.map +1 -0
- package/dist/admin/blockEditors/SymbolRefEditor.d.ts +2 -0
- package/dist/admin/blockEditors/SymbolRefEditor.js +55 -0
- package/dist/admin/blockEditors/SymbolRefEditor.js.map +1 -0
- package/dist/admin/blockEditors/index.d.ts +11 -6
- package/dist/admin/blockEditors/index.js +49 -620
- package/dist/admin/blockEditors/index.js.map +1 -1
- package/dist/admin/customBlocks/CustomBlocksPanel.d.ts +3 -0
- package/dist/admin/customBlocks/CustomBlocksPanel.js +145 -0
- package/dist/admin/customBlocks/CustomBlocksPanel.js.map +1 -0
- package/dist/admin/lib/compressImage.d.ts +4 -2
- package/dist/admin/lib/compressImage.js +7 -5
- package/dist/admin/lib/compressImage.js.map +1 -1
- package/dist/admin/lib/mediaUsage.d.ts +4 -3
- package/dist/admin/lib/mediaUsage.js +21 -10
- package/dist/admin/lib/mediaUsage.js.map +1 -1
- package/dist/admin/lib/symbolsClient.d.ts +13 -0
- package/dist/admin/lib/symbolsClient.js +51 -0
- package/dist/admin/lib/symbolsClient.js.map +1 -0
- package/dist/admin/lib/upload.d.ts +4 -0
- package/dist/admin/lib/upload.js +26 -6
- package/dist/admin/lib/upload.js.map +1 -1
- package/dist/admin/lib/zodFields.d.ts +18 -0
- package/dist/admin/lib/zodFields.js +65 -2
- package/dist/admin/lib/zodFields.js.map +1 -1
- package/dist/admin/media/MediaManager.js +23 -7
- package/dist/admin/media/MediaManager.js.map +1 -1
- package/dist/admin/media/MediaPicker.js +12 -2
- package/dist/admin/media/MediaPicker.js.map +1 -1
- package/dist/admin/panelRegistry.js +3 -0
- package/dist/admin/panelRegistry.js.map +1 -1
- package/dist/admin/settings/SettingsPanel.js +6 -1
- package/dist/admin/settings/SettingsPanel.js.map +1 -1
- package/dist/admin/settings/SnapshotsCard.d.ts +3 -0
- package/dist/admin/settings/SnapshotsCard.js +98 -0
- package/dist/admin/settings/SnapshotsCard.js.map +1 -0
- package/dist/admin/visual/TranslationPanel.d.ts +13 -0
- package/dist/admin/visual/TranslationPanel.js +73 -0
- package/dist/admin/visual/TranslationPanel.js.map +1 -0
- package/dist/admin/visual/VisualEditor.js +146 -18
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/admin.css +1 -1
- package/dist/agentFiles/catalog.d.ts +21 -0
- package/dist/agentFiles/catalog.js +78 -0
- package/dist/agentFiles/catalog.js.map +1 -0
- package/dist/agentFiles/files.d.ts +59 -0
- package/dist/agentFiles/files.js +109 -0
- package/dist/agentFiles/files.js.map +1 -0
- package/dist/blocks/builtins/Agenda.d.ts +6 -0
- package/dist/blocks/builtins/Agenda.js +14 -6
- package/dist/blocks/builtins/Agenda.js.map +1 -1
- package/dist/blocks/builtins/BeforeAfter.js +1 -0
- package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
- package/dist/blocks/builtins/Breadcrumbs.js +5 -1
- package/dist/blocks/builtins/Breadcrumbs.js.map +1 -1
- package/dist/blocks/builtins/Cards.js +4 -2
- package/dist/blocks/builtins/Cards.js.map +1 -1
- package/dist/blocks/builtins/Contact.js +2 -1
- package/dist/blocks/builtins/Contact.js.map +1 -1
- package/dist/blocks/builtins/Cta.js +1 -0
- package/dist/blocks/builtins/Cta.js.map +1 -1
- package/dist/blocks/builtins/Elements.js +1 -0
- package/dist/blocks/builtins/Elements.js.map +1 -1
- package/dist/blocks/builtins/Faq.js +5 -4
- package/dist/blocks/builtins/Faq.js.map +1 -1
- package/dist/blocks/builtins/Gallery.js +2 -2
- package/dist/blocks/builtins/Gallery.js.map +1 -1
- package/dist/blocks/builtins/Hero.js +2 -2
- package/dist/blocks/builtins/Hero.js.map +1 -1
- package/dist/blocks/builtins/Jobs.d.ts +8 -1
- package/dist/blocks/builtins/Jobs.js +38 -21
- package/dist/blocks/builtins/Jobs.js.map +1 -1
- package/dist/blocks/builtins/MapBlock.js +31 -4
- package/dist/blocks/builtins/MapBlock.js.map +1 -1
- package/dist/blocks/builtins/PdfBlock.js +2 -3
- package/dist/blocks/builtins/PdfBlock.js.map +1 -1
- package/dist/blocks/builtins/Portfolio.js +2 -2
- package/dist/blocks/builtins/Portfolio.js.map +1 -1
- package/dist/blocks/builtins/Pricing.d.ts +2 -0
- package/dist/blocks/builtins/Pricing.js +18 -10
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/Sections.js +4 -2
- package/dist/blocks/builtins/Sections.js.map +1 -1
- package/dist/blocks/builtins/Slider.js +21 -3
- package/dist/blocks/builtins/Slider.js.map +1 -1
- package/dist/blocks/builtins/SymbolRef.d.ts +2 -0
- package/dist/blocks/builtins/SymbolRef.js +61 -0
- package/dist/blocks/builtins/SymbolRef.js.map +1 -0
- package/dist/blocks/builtins/Testimonials.js +21 -18
- package/dist/blocks/builtins/Testimonials.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChat.js +1 -1
- package/dist/blocks/builtins/WhatsappChat.js.map +1 -1
- package/dist/blocks/builtins/Widgets.js +2 -3
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/builtins/lib/ics.js +1 -1
- package/dist/blocks/builtins/lib/ics.js.map +1 -1
- package/dist/blocks/builtins/lib/openingHours.d.ts +4 -1
- package/dist/blocks/builtins/lib/openingHours.js +11 -5
- package/dist/blocks/builtins/lib/openingHours.js.map +1 -1
- package/dist/blocks/customTemplate/definition.d.ts +7 -0
- package/dist/blocks/customTemplate/definition.js +34 -0
- package/dist/blocks/customTemplate/definition.js.map +1 -0
- package/dist/blocks/customTemplate/interpret.d.ts +10 -0
- package/dist/blocks/customTemplate/interpret.js +136 -0
- package/dist/blocks/customTemplate/interpret.js.map +1 -0
- package/dist/blocks/registry.d.ts +8 -0
- package/dist/blocks/registry.js.map +1 -1
- package/dist/demo/demoStore.d.ts +11 -1
- package/dist/demo/demoStore.js +50 -0
- package/dist/demo/demoStore.js.map +1 -1
- package/dist/firebase/client.js +2 -1
- package/dist/firebase/client.js.map +1 -1
- package/dist/i18n/overlay.d.ts +61 -0
- package/dist/i18n/overlay.js +90 -0
- package/dist/i18n/overlay.js.map +1 -0
- package/dist/index.d.ts +11 -9
- package/dist/index.js +34 -9
- package/dist/index.js.map +1 -1
- package/dist/modules/builtins.js +3 -2
- package/dist/modules/builtins.js.map +1 -1
- package/dist/modules/consent/useConsent.js +15 -3
- package/dist/modules/consent/useConsent.js.map +1 -1
- package/dist/schema/blocks.d.ts +183 -3
- package/dist/schema/blocks.js +12 -1
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/customBlocks.d.ts +47 -0
- package/dist/schema/customBlocks.js +32 -0
- package/dist/schema/customBlocks.js.map +1 -0
- package/dist/schema/fields.d.ts +122 -0
- package/dist/schema/fields.js +120 -0
- package/dist/schema/fields.js.map +1 -0
- package/dist/schema/forms.d.ts +6 -6
- package/dist/schema/pages.d.ts +15 -1
- package/dist/schema/pages.js +6 -2
- package/dist/schema/pages.js.map +1 -1
- package/dist/schema/siteConfig.d.ts +14 -8
- package/dist/schema/siteConfig.js +2 -1
- package/dist/schema/siteConfig.js.map +1 -1
- package/dist/schema/symbols.d.ts +205 -0
- package/dist/schema/symbols.js +18 -0
- package/dist/schema/symbols.js.map +1 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +24 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/pages.d.ts +21 -0
- package/dist/server/pages.js +77 -0
- package/dist/server/pages.js.map +1 -1
- package/dist/server/seo.d.ts +12 -3
- package/dist/server/seo.js +23 -11
- package/dist/server/seo.js.map +1 -1
- package/dist/styles.css +62 -6
- package/package.json +1 -1
- package/dist/components/EditableImage.d.ts +0 -18
- package/dist/components/EditableImage.js +0 -62
- package/dist/components/EditableImage.js.map +0 -1
- package/dist/components/EditableRichText.d.ts +0 -14
- package/dist/components/EditableRichText.js +0 -26
- package/dist/components/EditableRichText.js.map +0 -1
- package/dist/components/EditableText.d.ts +0 -21
- package/dist/components/EditableText.js +0 -25
- package/dist/components/EditableText.js.map +0 -1
- package/dist/content/ContentProvider.d.ts +0 -23
- package/dist/content/ContentProvider.js +0 -86
- package/dist/content/ContentProvider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/modules/builtins.ts"],"sourcesContent":["/**\n * Ingebouwde modules (XiCMS 3.0). Elke \"feature\" van 2.x is hier een first-class module geworden,\n * zodat hij per site aan/uit kan en los te verbeteren is. De bijbehorende admin-panelen staan in\n * `@xiwebdesign/xicms-core/admin` (paneel-registry), gekoppeld via dezelfde `id`/`featureKey`.\n *\n * Backward compatible: zonder `SiteConfig.modules`/`features` zijn alle modules actief — identiek\n * aan 2.x. De `content`-module is `core: true` en kan niet uitgezet worden (de basis-bouwstenen).\n */\nimport { z } from \"zod\";\nimport { defineModule } from \"./defineModule\";\nimport type { ModuleDefinition } from \"./types\";\n\nimport { heroBlock } from \"../blocks/builtins/Hero\";\nimport { richTextBlock } from \"../blocks/builtins/RichTextBlock\";\nimport { imageBlock } from \"../blocks/builtins/ImageBlock\";\nimport { ctaBlock } from \"../blocks/builtins/Cta\";\nimport { columnsBlock } from \"../blocks/builtins/Columns\";\nimport { spacerBlock } from \"../blocks/builtins/Spacer\";\nimport { galleryBlock } from \"../blocks/builtins/Gallery\";\nimport { faqBlock } from \"../blocks/builtins/Faq\";\nimport { openingHoursBlock } from \"../blocks/builtins/OpeningHours\";\nimport { pricingBlock } from \"../blocks/builtins/Pricing\";\nimport { newsListBlock } from \"../blocks/builtins/NewsListBlock\";\nimport { formBlock } from \"../blocks/builtins/FormBlock\";\nimport { testimonialsBlock } from \"../blocks/builtins/Testimonials\";\nimport { teamBlock } from \"../blocks/builtins/Team\";\nimport { agendaBlock } from \"../blocks/builtins/Agenda\";\nimport { searchBlock } from \"../blocks/builtins/Search\";\nimport { featureBlock, countersBlock, logosBlock, timelineBlock } from \"../blocks/builtins/Sections\";\nimport { videoBlock } from \"../blocks/builtins/Video\";\nimport { bannerBlock } from \"../blocks/builtins/Banner\";\nimport { contactBlock, socialBlock } from \"../blocks/builtins/Contact\";\nimport { mapBlock } from \"../blocks/builtins/MapBlock\";\nimport { newsletterBlock } from \"../blocks/builtins/Newsletter\";\nimport { bookingBlock } from \"../blocks/builtins/Booking\";\nimport { buttonsBlock, quoteBlock, dividerBlock } from \"../blocks/builtins/Elements\";\nimport { accordionBlock } from \"../blocks/builtins/Accordion\";\nimport { embedBlock } from \"../blocks/builtins/Embed\";\nimport { withSidebarBlock, tabsBlock } from \"../blocks/builtins/Layout\";\nimport { cardsBlock } from \"../blocks/builtins/Cards\";\nimport { downloadsBlock } from \"../blocks/builtins/Downloads\";\nimport { pdfBlock } from \"../blocks/builtins/PdfBlock\";\nimport { countdownBlock } from \"../blocks/builtins/Countdown\";\nimport { sliderBlock } from \"../blocks/builtins/Slider\";\nimport { whatsappChatBlock } from \"../blocks/builtins/WhatsappChat\";\nimport { beforeAfterBlock } from \"../blocks/builtins/BeforeAfter\";\nimport { portfolioBlock } from \"../blocks/builtins/Portfolio\";\nimport { jobsBlock } from \"../blocks/builtins/Jobs\";\nimport { breadcrumbsBlock } from \"../blocks/builtins/Breadcrumbs\";\nimport {\n newsWidget,\n agendaWidget,\n openingHoursWidget,\n contactWidget,\n socialWidget as socialWidgetBlock,\n newsletterWidget,\n ctaWidget,\n galleryWidget,\n testimonialsWidget,\n cardsWidget,\n downloadsWidget,\n countdownWidget,\n} from \"../blocks/builtins/Widgets\";\n\nconst CORE_VERSION = \"4.17.1\";\n\n/**\n * Basis-bouwstenen — altijd aanwezig (niet uit te zetten). Bevat ook de indelingsblokken\n * (kolommen, \"Met zijbalk\") waarmee je widgets naast je hoofdinhoud plaatst, plus de\n * compacte CTA-widget.\n */\nexport const contentModule = defineModule({\n id: \"content\",\n version: CORE_VERSION,\n label: \"Basisinhoud\",\n description: \"Kern-bouwstenen: hero, tekst, afbeelding, CTA, kolommen, zijbalk, witruimte.\",\n core: true,\n blocks: [heroBlock, richTextBlock, imageBlock, ctaBlock, columnsBlock, withSidebarBlock, spacerBlock, buttonsBlock, quoteBlock, dividerBlock, ctaWidget],\n});\n\nexport const galleryModule = defineModule({\n id: \"gallery\",\n version: CORE_VERSION,\n label: \"Fotogalerij\",\n description: \"Galerij-block met grid en (optioneel) lightbox + compacte fotostrip-widget.\",\n blocks: [galleryBlock, galleryWidget],\n // Per-site instelbaar door de agent/klant (modules.gallery.config) zonder core te forken.\n // `.describe()` = het label dat de klant in /beheer ziet.\n settingsSchema: z.object({\n columns: z.number().int().min(1).max(6).default(3).describe(\"Kolommen\"),\n lightbox: z.boolean().default(true).describe(\"Lightbox bij klikken\"),\n }),\n defaultSettings: { columns: 3, lightbox: true },\n});\n\nexport const faqModule = defineModule({\n id: \"faq\",\n version: CORE_VERSION,\n label: \"FAQ\",\n description: \"Veelgestelde vragen (accordeon) met optionele zoek + FAQ-JSON-LD.\",\n blocks: [faqBlock],\n});\n\nexport const openingHoursModule = defineModule({\n id: \"openingHours\",\n version: CORE_VERSION,\n label: \"Openingstijden\",\n description: \"Openingstijden-tabel + compacte widget met 'vandaag' gemarkeerd.\",\n blocks: [openingHoursBlock, openingHoursWidget],\n});\n\nexport const pricingModule = defineModule({\n id: \"pricing\",\n version: CORE_VERSION,\n label: \"Prijzen\",\n blocks: [pricingBlock],\n});\n\nexport const pagesModule = defineModule({\n id: \"pages\",\n version: CORE_VERSION,\n label: \"Pagina's\",\n featureKey: \"pages\",\n description: \"Paginabouwer (draft → publish + versiegeschiedenis).\",\n});\n\nexport const newsModule = defineModule({\n id: \"news\",\n version: CORE_VERSION,\n label: \"Nieuws\",\n featureKey: \"news\",\n description: \"Nieuwsartikelen + nieuwslijst-block + 'laatste nieuws'-widget voor de zijbalk.\",\n blocks: [newsListBlock, newsWidget],\n});\n\nexport const mediaModule = defineModule({\n id: \"media\",\n version: CORE_VERSION,\n label: \"Media\",\n featureKey: \"media\",\n description: \"Mediabeheer met compressie + webp/srcset-varianten.\",\n requires: [{ kind: \"function\", name: \"onMediaUpload\" }, { kind: \"storage\", prefix: \"sites/\" }],\n});\n\nexport const formsModule = defineModule({\n id: \"forms\",\n version: CORE_VERSION,\n label: \"Formulieren\",\n featureKey: \"forms\",\n description: \"Formulierbouwer + inzendingen + e-mailnotificatie.\",\n blocks: [formBlock],\n requires: [\n { kind: \"function\", name: \"submitForm\" },\n { kind: \"firestore\", collection: \"forms\" },\n ],\n});\n\nexport const statsModule = defineModule({\n id: \"stats\",\n version: CORE_VERSION,\n label: \"Statistieken\",\n featureKey: \"stats\",\n description: \"Privacy-vriendelijke bezoekersstatistieken (geen cookies).\",\n requires: [{ kind: \"function\", name: \"trackView\" }],\n});\n\nexport const settingsModule = defineModule({\n id: \"settings\",\n version: CORE_VERSION,\n label: \"Instellingen\",\n core: true,\n description: \"Site-instellingen (nav, thema, SEO, formulier-afzender) — alleen siteadmin.\",\n});\n\n// Opt-in modules (defaultEnabled: false): worden bij installatie of later aangezet via\n// `modules: { <id>: true }`. Geen extra backend nodig — data leeft in de page-blocks.\nexport const testimonialsModule = defineModule({\n id: \"testimonials\",\n version: CORE_VERSION,\n label: \"Reviews\",\n description: \"Klantquotes/reviews met sterren, optionele Review-JSON-LD + compacte review-widget.\",\n defaultEnabled: false,\n blocks: [testimonialsBlock, testimonialsWidget],\n});\n\nexport const teamModule = defineModule({\n id: \"team\",\n version: CORE_VERSION,\n label: \"Team\",\n description: \"Team-/medewerkersoverzicht met foto, functie en bio.\",\n defaultEnabled: false,\n blocks: [teamBlock],\n});\n\nexport const agendaModule = defineModule({\n id: \"agenda\",\n version: CORE_VERSION,\n label: \"Agenda\",\n description: \"Evenementen/agenda (chronologisch) met Event-JSON-LD + 'komende agenda'-widget.\",\n defaultEnabled: false,\n blocks: [agendaBlock, agendaWidget],\n});\n\nexport const searchModule = defineModule({\n id: \"search\",\n version: CORE_VERSION,\n label: \"Zoeken\",\n description: \"Site-zoekblok dat gepubliceerde pagina's (en nieuws) client-side doorzoekt.\",\n defaultEnabled: false,\n blocks: [searchBlock],\n});\n\nexport const featureModule = defineModule({\n id: \"feature\",\n version: CORE_VERSION,\n label: \"Beeld + tekst\",\n description: \"Feature-sectie met afbeelding links/rechts en tekst.\",\n defaultEnabled: false,\n blocks: [featureBlock],\n});\n\nexport const countersModule = defineModule({\n id: \"counters\",\n version: CORE_VERSION,\n label: \"Tellers\",\n description: \"Statistiek-tellers (bv. “100+ klanten”).\",\n defaultEnabled: false,\n blocks: [countersBlock],\n});\n\nexport const logosModule = defineModule({\n id: \"logos\",\n version: CORE_VERSION,\n label: \"Logo's\",\n description: \"Partner-/klantlogo-strip.\",\n defaultEnabled: false,\n blocks: [logosBlock],\n});\n\nexport const timelineModule = defineModule({\n id: \"timeline\",\n version: CORE_VERSION,\n label: \"Tijdlijn\",\n description: \"Stappen/proces als tijdlijn.\",\n defaultEnabled: false,\n blocks: [timelineBlock],\n});\n\nexport const videoModule = defineModule({\n id: \"video\",\n version: CORE_VERSION,\n label: \"Video\",\n description: \"YouTube/Vimeo/MP4-embed (consent-gated).\",\n defaultEnabled: false,\n blocks: [videoBlock],\n});\n\nexport const bannerModule = defineModule({\n id: \"banner\",\n version: CORE_VERSION,\n label: \"Aankondiging\",\n description: \"Aankondigingsbalk, optioneel sluitbaar.\",\n defaultEnabled: false,\n blocks: [bannerBlock],\n});\n\nexport const contactModule = defineModule({\n id: \"contact\",\n version: CORE_VERSION,\n label: \"Contact + kaart + social\",\n description: \"Contactgegevens (JSON-LD), kaart (consent-gated), social-links + compacte widgets.\",\n defaultEnabled: false,\n blocks: [contactBlock, mapBlock, socialBlock, contactWidget, socialWidgetBlock],\n});\n\nexport const newsletterModule = defineModule({\n id: \"newsletter\",\n version: CORE_VERSION,\n label: \"Nieuwsbrief\",\n description: \"Aanmeldformulier via een externe provider-URL + compacte nieuwsbrief-widget.\",\n defaultEnabled: false,\n blocks: [newsletterBlock, newsletterWidget],\n});\n\nexport const bookingModule = defineModule({\n id: \"booking\",\n version: CORE_VERSION,\n label: \"Afspraak/booking\",\n description: \"Boekings-embed (bv. Calendly), consent-gated.\",\n defaultEnabled: false,\n blocks: [bookingBlock],\n});\n\nexport const accordionModule = defineModule({\n id: \"accordion\",\n version: CORE_VERSION,\n label: \"Accordeon\",\n description: \"Generieke in-/uitklapbare panelen.\",\n defaultEnabled: false,\n blocks: [accordionBlock],\n});\n\nexport const embedModule = defineModule({\n id: \"embed\",\n version: CORE_VERSION,\n label: \"Embed\",\n description: \"Generieke responsive iframe-embed (consent-gated).\",\n defaultEnabled: false,\n blocks: [embedBlock],\n});\n\n/* ── Nieuwe modules (3.1) — veelgebruikt op websites, volwaardig + widget waar zinvol ── */\n\nexport const cardsModule = defineModule({\n id: \"cards\",\n version: CORE_VERSION,\n label: \"Diensten / kaarten\",\n description: \"Diensten-/featurekaarten in een grid (icoon of beeld) + compacte 'uitgelicht'-widget.\",\n defaultEnabled: false,\n blocks: [cardsBlock, cardsWidget],\n});\n\nexport const tabsModule = defineModule({\n id: \"tabs\",\n version: CORE_VERSION,\n label: \"Tabbladen\",\n description: \"Tabblad-indeling: per tab een eigen set blokken (bv. beschrijving / specificaties).\",\n defaultEnabled: false,\n blocks: [tabsBlock],\n});\n\nexport const downloadsModule = defineModule({\n id: \"downloads\",\n version: CORE_VERSION,\n label: \"Downloads\",\n description: \"Lijst met downloadbare documenten (brochures, prijslijsten) + compacte widget.\",\n defaultEnabled: false,\n blocks: [downloadsBlock, downloadsWidget],\n});\n\nexport const pdfModule = defineModule({\n id: \"pdf\",\n version: CORE_VERSION,\n label: \"PDF-lezer\",\n description: \"Inline PDF-lezer voor menukaarten/documenten; meerdere PDF's met tabs, zelf te vervangen.\",\n defaultEnabled: false,\n blocks: [pdfBlock],\n});\n\nexport const countdownModule = defineModule({\n id: \"countdown\",\n version: CORE_VERSION,\n label: \"Aftelteller\",\n description: \"Tikkende countdown naar een datum (lancering, evenement, aanbieding) + widget.\",\n defaultEnabled: false,\n blocks: [countdownBlock, countdownWidget],\n});\n\nexport const sliderModule = defineModule({\n id: \"slider\",\n version: CORE_VERSION,\n label: \"Carrousel / slider\",\n description: \"Beeld-/contentcarrousel met dots, pijlen en optioneel autoplay (reduced-motion-veilig).\",\n defaultEnabled: false,\n blocks: [sliderBlock],\n});\n\n/* ── 4.16: nieuwe modules (allemaal opt-in) ──────────────────────────────── */\n\nexport const whatsappModule = defineModule({\n id: \"whatsapp\",\n version: CORE_VERSION,\n label: \"WhatsApp-knop\",\n description: \"Zwevende WhatsApp-/chatknop — laagdrempelig contact (wa.me-link, geen consent nodig).\",\n defaultEnabled: false,\n blocks: [whatsappChatBlock],\n});\n\nexport const beforeAfterModule = defineModule({\n id: \"beforeAfter\",\n version: CORE_VERSION,\n label: \"Voor / na\",\n description: \"Voor/na-vergelijker met sleepbare scheiding — sterk voor hoveniers, schilders, salons.\",\n defaultEnabled: false,\n blocks: [beforeAfterBlock],\n});\n\nexport const portfolioModule = defineModule({\n id: \"portfolio\",\n version: CORE_VERSION,\n label: \"Portfolio / projecten\",\n description: \"Projecten/cases-grid met categorie-filter en lightbox.\",\n defaultEnabled: false,\n blocks: [portfolioBlock],\n});\n\nexport const jobsModule = defineModule({\n id: \"jobs\",\n version: CORE_VERSION,\n label: \"Vacatures\",\n description: \"Vacature-overzicht met JobPosting-JSON-LD (vindbaar via Google Jobs).\",\n defaultEnabled: false,\n blocks: [jobsBlock],\n});\n\nexport const breadcrumbsModule = defineModule({\n id: \"breadcrumbs\",\n version: CORE_VERSION,\n label: \"Kruimelpad\",\n description: \"Kruimelpad afgeleid van de URL, met BreadcrumbList-JSON-LD (SEO).\",\n defaultEnabled: false,\n blocks: [breadcrumbsBlock],\n});\n\nexport const consentModule = defineModule({\n id: \"consent\",\n version: CORE_VERSION,\n label: \"Cookie-consent (AVG)\",\n description: \"Toestemmingsbanner + consent-opslag; stelt niet-essentiële scripts uit.\",\n defaultEnabled: false,\n settingsSchema: z.object({\n message: z\n .string()\n .default(\"We gebruiken cookies om de site te verbeteren. Kies hieronder je voorkeuren.\")\n .describe(\"Bannertekst\"),\n privacyUrl: z.string().optional().describe(\"Link naar privacyverklaring\"),\n version: z.string().optional().describe(\"Beleidsversie (wijzig → banner opnieuw tonen)\"),\n showReopen: z.boolean().default(true).describe(\"Zwevend cookie-knopje om keuze te wijzigen\"),\n categories: z\n .array(\n z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n required: z.boolean().default(false),\n }),\n )\n .default([\n { id: \"necessary\", label: \"Noodzakelijk\", description: \"Nodig om de site te laten werken.\", required: true },\n { id: \"analytics\", label: \"Statistieken\", description: \"Anonieme statistieken om de site te verbeteren.\", required: false },\n { id: \"marketing\", label: \"Marketing\", description: \"Externe embeds zoals video's en kaarten.\", required: false },\n ]),\n }),\n defaultSettings: {},\n});\n\n/** Alle ingebouwde modules (volgorde bepaalt block- en tab-volgorde). */\nexport const builtinModules: ModuleDefinition[] = [\n contentModule,\n pagesModule,\n newsModule,\n mediaModule,\n galleryModule,\n faqModule,\n openingHoursModule,\n pricingModule,\n formsModule,\n statsModule,\n settingsModule,\n testimonialsModule,\n teamModule,\n agendaModule,\n searchModule,\n featureModule,\n countersModule,\n logosModule,\n timelineModule,\n videoModule,\n bannerModule,\n contactModule,\n newsletterModule,\n bookingModule,\n accordionModule,\n embedModule,\n cardsModule,\n tabsModule,\n downloadsModule,\n pdfModule,\n countdownModule,\n sliderModule,\n whatsappModule,\n beforeAfterModule,\n portfolioModule,\n jobsModule,\n breadcrumbsModule,\n consentModule,\n];\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/modules/builtins.ts"],"sourcesContent":["/**\n * Ingebouwde modules (XiCMS 3.0). Elke \"feature\" van 2.x is hier een first-class module geworden,\n * zodat hij per site aan/uit kan en los te verbeteren is. De bijbehorende admin-panelen staan in\n * `@xiwebdesign/xicms-core/admin` (paneel-registry), gekoppeld via dezelfde `id`/`featureKey`.\n *\n * Backward compatible: zonder `SiteConfig.modules`/`features` zijn alle modules actief — identiek\n * aan 2.x. De `content`-module is `core: true` en kan niet uitgezet worden (de basis-bouwstenen).\n */\nimport { z } from \"zod\";\nimport { defineModule } from \"./defineModule\";\nimport type { ModuleDefinition } from \"./types\";\n\nimport { heroBlock } from \"../blocks/builtins/Hero\";\nimport { richTextBlock } from \"../blocks/builtins/RichTextBlock\";\nimport { imageBlock } from \"../blocks/builtins/ImageBlock\";\nimport { ctaBlock } from \"../blocks/builtins/Cta\";\nimport { columnsBlock } from \"../blocks/builtins/Columns\";\nimport { spacerBlock } from \"../blocks/builtins/Spacer\";\nimport { galleryBlock } from \"../blocks/builtins/Gallery\";\nimport { faqBlock } from \"../blocks/builtins/Faq\";\nimport { openingHoursBlock } from \"../blocks/builtins/OpeningHours\";\nimport { pricingBlock } from \"../blocks/builtins/Pricing\";\nimport { newsListBlock } from \"../blocks/builtins/NewsListBlock\";\nimport { formBlock } from \"../blocks/builtins/FormBlock\";\nimport { testimonialsBlock } from \"../blocks/builtins/Testimonials\";\nimport { teamBlock } from \"../blocks/builtins/Team\";\nimport { agendaBlock } from \"../blocks/builtins/Agenda\";\nimport { searchBlock } from \"../blocks/builtins/Search\";\nimport { featureBlock, countersBlock, logosBlock, timelineBlock } from \"../blocks/builtins/Sections\";\nimport { symbolRefBlock } from \"../blocks/builtins/SymbolRef\";\nimport { videoBlock } from \"../blocks/builtins/Video\";\nimport { bannerBlock } from \"../blocks/builtins/Banner\";\nimport { contactBlock, socialBlock } from \"../blocks/builtins/Contact\";\nimport { mapBlock } from \"../blocks/builtins/MapBlock\";\nimport { newsletterBlock } from \"../blocks/builtins/Newsletter\";\nimport { bookingBlock } from \"../blocks/builtins/Booking\";\nimport { buttonsBlock, quoteBlock, dividerBlock } from \"../blocks/builtins/Elements\";\nimport { accordionBlock } from \"../blocks/builtins/Accordion\";\nimport { embedBlock } from \"../blocks/builtins/Embed\";\nimport { withSidebarBlock, tabsBlock } from \"../blocks/builtins/Layout\";\nimport { cardsBlock } from \"../blocks/builtins/Cards\";\nimport { downloadsBlock } from \"../blocks/builtins/Downloads\";\nimport { pdfBlock } from \"../blocks/builtins/PdfBlock\";\nimport { countdownBlock } from \"../blocks/builtins/Countdown\";\nimport { sliderBlock } from \"../blocks/builtins/Slider\";\nimport { whatsappChatBlock } from \"../blocks/builtins/WhatsappChat\";\nimport { beforeAfterBlock } from \"../blocks/builtins/BeforeAfter\";\nimport { portfolioBlock } from \"../blocks/builtins/Portfolio\";\nimport { jobsBlock } from \"../blocks/builtins/Jobs\";\nimport { breadcrumbsBlock } from \"../blocks/builtins/Breadcrumbs\";\nimport {\n newsWidget,\n agendaWidget,\n openingHoursWidget,\n contactWidget,\n socialWidget as socialWidgetBlock,\n newsletterWidget,\n ctaWidget,\n galleryWidget,\n testimonialsWidget,\n cardsWidget,\n downloadsWidget,\n countdownWidget,\n} from \"../blocks/builtins/Widgets\";\n\nconst CORE_VERSION = \"5.0.0\";\n\n/**\n * Basis-bouwstenen — altijd aanwezig (niet uit te zetten). Bevat ook de indelingsblokken\n * (kolommen, \"Met zijbalk\") waarmee je widgets naast je hoofdinhoud plaatst, plus de\n * compacte CTA-widget.\n */\nexport const contentModule = defineModule({\n id: \"content\",\n version: CORE_VERSION,\n label: \"Basisinhoud\",\n description: \"Kern-bouwstenen: hero, tekst, afbeelding, CTA, kolommen, zijbalk, witruimte.\",\n core: true,\n blocks: [heroBlock, richTextBlock, imageBlock, ctaBlock, columnsBlock, withSidebarBlock, spacerBlock, buttonsBlock, quoteBlock, dividerBlock, ctaWidget, symbolRefBlock],\n});\n\nexport const galleryModule = defineModule({\n id: \"gallery\",\n version: CORE_VERSION,\n label: \"Fotogalerij\",\n description: \"Galerij-block met grid en (optioneel) lightbox + compacte fotostrip-widget.\",\n blocks: [galleryBlock, galleryWidget],\n // Per-site instelbaar door de agent/klant (modules.gallery.config) zonder core te forken.\n // `.describe()` = het label dat de klant in /beheer ziet.\n settingsSchema: z.object({\n columns: z.number().int().min(1).max(6).default(3).describe(\"Kolommen\"),\n lightbox: z.boolean().default(true).describe(\"Lightbox bij klikken\"),\n }),\n defaultSettings: { columns: 3, lightbox: true },\n});\n\nexport const faqModule = defineModule({\n id: \"faq\",\n version: CORE_VERSION,\n label: \"FAQ\",\n description: \"Veelgestelde vragen (accordeon) met optionele zoek + FAQ-JSON-LD.\",\n blocks: [faqBlock],\n});\n\nexport const openingHoursModule = defineModule({\n id: \"openingHours\",\n version: CORE_VERSION,\n label: \"Openingstijden\",\n description: \"Openingstijden-tabel + compacte widget met 'vandaag' gemarkeerd.\",\n blocks: [openingHoursBlock, openingHoursWidget],\n});\n\nexport const pricingModule = defineModule({\n id: \"pricing\",\n version: CORE_VERSION,\n label: \"Prijzen\",\n blocks: [pricingBlock],\n});\n\nexport const pagesModule = defineModule({\n id: \"pages\",\n version: CORE_VERSION,\n label: \"Pagina's\",\n featureKey: \"pages\",\n description: \"Paginabouwer (draft → publish + versiegeschiedenis).\",\n});\n\nexport const newsModule = defineModule({\n id: \"news\",\n version: CORE_VERSION,\n label: \"Nieuws\",\n featureKey: \"news\",\n description: \"Nieuwsartikelen + nieuwslijst-block + 'laatste nieuws'-widget voor de zijbalk.\",\n blocks: [newsListBlock, newsWidget],\n});\n\nexport const mediaModule = defineModule({\n id: \"media\",\n version: CORE_VERSION,\n label: \"Media\",\n featureKey: \"media\",\n description: \"Mediabeheer met compressie + webp/srcset-varianten.\",\n requires: [{ kind: \"function\", name: \"onMediaUpload\" }, { kind: \"storage\", prefix: \"sites/\" }],\n});\n\nexport const formsModule = defineModule({\n id: \"forms\",\n version: CORE_VERSION,\n label: \"Formulieren\",\n featureKey: \"forms\",\n description: \"Formulierbouwer + inzendingen + e-mailnotificatie.\",\n blocks: [formBlock],\n requires: [\n { kind: \"function\", name: \"submitForm\" },\n { kind: \"firestore\", collection: \"forms\" },\n ],\n});\n\nexport const statsModule = defineModule({\n id: \"stats\",\n version: CORE_VERSION,\n label: \"Statistieken\",\n featureKey: \"stats\",\n description: \"Privacy-vriendelijke bezoekersstatistieken (geen cookies).\",\n requires: [{ kind: \"function\", name: \"trackView\" }],\n});\n\nexport const settingsModule = defineModule({\n id: \"settings\",\n version: CORE_VERSION,\n label: \"Instellingen\",\n core: true,\n description: \"Site-instellingen (nav, thema, SEO, formulier-afzender) — alleen siteadmin.\",\n});\n\n// Opt-in modules (defaultEnabled: false): worden bij installatie of later aangezet via\n// `modules: { <id>: true }`. Geen extra backend nodig — data leeft in de page-blocks.\nexport const testimonialsModule = defineModule({\n id: \"testimonials\",\n version: CORE_VERSION,\n label: \"Reviews\",\n description: \"Klantquotes/reviews met sterren, optionele Review-JSON-LD + compacte review-widget.\",\n defaultEnabled: false,\n blocks: [testimonialsBlock, testimonialsWidget],\n});\n\nexport const teamModule = defineModule({\n id: \"team\",\n version: CORE_VERSION,\n label: \"Team\",\n description: \"Team-/medewerkersoverzicht met foto, functie en bio.\",\n defaultEnabled: false,\n blocks: [teamBlock],\n});\n\nexport const agendaModule = defineModule({\n id: \"agenda\",\n version: CORE_VERSION,\n label: \"Agenda\",\n description: \"Evenementen/agenda (chronologisch) met Event-JSON-LD + 'komende agenda'-widget.\",\n defaultEnabled: false,\n blocks: [agendaBlock, agendaWidget],\n});\n\nexport const searchModule = defineModule({\n id: \"search\",\n version: CORE_VERSION,\n label: \"Zoeken\",\n description: \"Site-zoekblok dat gepubliceerde pagina's (en nieuws) client-side doorzoekt.\",\n defaultEnabled: false,\n blocks: [searchBlock],\n});\n\nexport const featureModule = defineModule({\n id: \"feature\",\n version: CORE_VERSION,\n label: \"Beeld + tekst\",\n description: \"Feature-sectie met afbeelding links/rechts en tekst.\",\n defaultEnabled: false,\n blocks: [featureBlock],\n});\n\nexport const countersModule = defineModule({\n id: \"counters\",\n version: CORE_VERSION,\n label: \"Tellers\",\n description: \"Statistiek-tellers (bv. “100+ klanten”).\",\n defaultEnabled: false,\n blocks: [countersBlock],\n});\n\nexport const logosModule = defineModule({\n id: \"logos\",\n version: CORE_VERSION,\n label: \"Logo's\",\n description: \"Partner-/klantlogo-strip.\",\n defaultEnabled: false,\n blocks: [logosBlock],\n});\n\nexport const timelineModule = defineModule({\n id: \"timeline\",\n version: CORE_VERSION,\n label: \"Tijdlijn\",\n description: \"Stappen/proces als tijdlijn.\",\n defaultEnabled: false,\n blocks: [timelineBlock],\n});\n\nexport const videoModule = defineModule({\n id: \"video\",\n version: CORE_VERSION,\n label: \"Video\",\n description: \"YouTube/Vimeo/MP4-embed (consent-gated).\",\n defaultEnabled: false,\n blocks: [videoBlock],\n});\n\nexport const bannerModule = defineModule({\n id: \"banner\",\n version: CORE_VERSION,\n label: \"Aankondiging\",\n description: \"Aankondigingsbalk, optioneel sluitbaar.\",\n defaultEnabled: false,\n blocks: [bannerBlock],\n});\n\nexport const contactModule = defineModule({\n id: \"contact\",\n version: CORE_VERSION,\n label: \"Contact + kaart + social\",\n description: \"Contactgegevens (JSON-LD), kaart (consent-gated), social-links + compacte widgets.\",\n defaultEnabled: false,\n blocks: [contactBlock, mapBlock, socialBlock, contactWidget, socialWidgetBlock],\n});\n\nexport const newsletterModule = defineModule({\n id: \"newsletter\",\n version: CORE_VERSION,\n label: \"Nieuwsbrief\",\n description: \"Aanmeldformulier via een externe provider-URL + compacte nieuwsbrief-widget.\",\n defaultEnabled: false,\n blocks: [newsletterBlock, newsletterWidget],\n});\n\nexport const bookingModule = defineModule({\n id: \"booking\",\n version: CORE_VERSION,\n label: \"Afspraak/booking\",\n description: \"Boekings-embed (bv. Calendly), consent-gated.\",\n defaultEnabled: false,\n blocks: [bookingBlock],\n});\n\nexport const accordionModule = defineModule({\n id: \"accordion\",\n version: CORE_VERSION,\n label: \"Accordeon\",\n description: \"Generieke in-/uitklapbare panelen.\",\n defaultEnabled: false,\n blocks: [accordionBlock],\n});\n\nexport const embedModule = defineModule({\n id: \"embed\",\n version: CORE_VERSION,\n label: \"Embed\",\n description: \"Generieke responsive iframe-embed (consent-gated).\",\n defaultEnabled: false,\n blocks: [embedBlock],\n});\n\n/* ── Nieuwe modules (3.1) — veelgebruikt op websites, volwaardig + widget waar zinvol ── */\n\nexport const cardsModule = defineModule({\n id: \"cards\",\n version: CORE_VERSION,\n label: \"Diensten / kaarten\",\n description: \"Diensten-/featurekaarten in een grid (icoon of beeld) + compacte 'uitgelicht'-widget.\",\n defaultEnabled: false,\n blocks: [cardsBlock, cardsWidget],\n});\n\nexport const tabsModule = defineModule({\n id: \"tabs\",\n version: CORE_VERSION,\n label: \"Tabbladen\",\n description: \"Tabblad-indeling: per tab een eigen set blokken (bv. beschrijving / specificaties).\",\n defaultEnabled: false,\n blocks: [tabsBlock],\n});\n\nexport const downloadsModule = defineModule({\n id: \"downloads\",\n version: CORE_VERSION,\n label: \"Downloads\",\n description: \"Lijst met downloadbare documenten (brochures, prijslijsten) + compacte widget.\",\n defaultEnabled: false,\n blocks: [downloadsBlock, downloadsWidget],\n});\n\nexport const pdfModule = defineModule({\n id: \"pdf\",\n version: CORE_VERSION,\n label: \"PDF-lezer\",\n description: \"Inline PDF-lezer voor menukaarten/documenten; meerdere PDF's met tabs, zelf te vervangen.\",\n defaultEnabled: false,\n blocks: [pdfBlock],\n});\n\nexport const countdownModule = defineModule({\n id: \"countdown\",\n version: CORE_VERSION,\n label: \"Aftelteller\",\n description: \"Tikkende countdown naar een datum (lancering, evenement, aanbieding) + widget.\",\n defaultEnabled: false,\n blocks: [countdownBlock, countdownWidget],\n});\n\nexport const sliderModule = defineModule({\n id: \"slider\",\n version: CORE_VERSION,\n label: \"Carrousel / slider\",\n description: \"Beeld-/contentcarrousel met dots, pijlen en optioneel autoplay (reduced-motion-veilig).\",\n defaultEnabled: false,\n blocks: [sliderBlock],\n});\n\n/* ── 4.16: nieuwe modules (allemaal opt-in) ──────────────────────────────── */\n\nexport const whatsappModule = defineModule({\n id: \"whatsapp\",\n version: CORE_VERSION,\n label: \"WhatsApp-knop\",\n description: \"Zwevende WhatsApp-/chatknop — laagdrempelig contact (wa.me-link, geen consent nodig).\",\n defaultEnabled: false,\n blocks: [whatsappChatBlock],\n});\n\nexport const beforeAfterModule = defineModule({\n id: \"beforeAfter\",\n version: CORE_VERSION,\n label: \"Voor / na\",\n description: \"Voor/na-vergelijker met sleepbare scheiding — sterk voor hoveniers, schilders, salons.\",\n defaultEnabled: false,\n blocks: [beforeAfterBlock],\n});\n\nexport const portfolioModule = defineModule({\n id: \"portfolio\",\n version: CORE_VERSION,\n label: \"Portfolio / projecten\",\n description: \"Projecten/cases-grid met categorie-filter en lightbox.\",\n defaultEnabled: false,\n blocks: [portfolioBlock],\n});\n\nexport const jobsModule = defineModule({\n id: \"jobs\",\n version: CORE_VERSION,\n label: \"Vacatures\",\n description: \"Vacature-overzicht met JobPosting-JSON-LD (vindbaar via Google Jobs).\",\n defaultEnabled: false,\n blocks: [jobsBlock],\n});\n\nexport const breadcrumbsModule = defineModule({\n id: \"breadcrumbs\",\n version: CORE_VERSION,\n label: \"Kruimelpad\",\n description: \"Kruimelpad afgeleid van de URL, met BreadcrumbList-JSON-LD (SEO).\",\n defaultEnabled: false,\n blocks: [breadcrumbsBlock],\n});\n\nexport const consentModule = defineModule({\n id: \"consent\",\n version: CORE_VERSION,\n label: \"Cookie-consent (AVG)\",\n description: \"Toestemmingsbanner + consent-opslag; stelt niet-essentiële scripts uit.\",\n defaultEnabled: false,\n settingsSchema: z.object({\n message: z\n .string()\n .default(\"We gebruiken cookies om de site te verbeteren. Kies hieronder je voorkeuren.\")\n .describe(\"Bannertekst\"),\n privacyUrl: z.string().optional().describe(\"Link naar privacyverklaring\"),\n version: z.string().optional().describe(\"Beleidsversie (wijzig → banner opnieuw tonen)\"),\n showReopen: z.boolean().default(true).describe(\"Zwevend cookie-knopje om keuze te wijzigen\"),\n categories: z\n .array(\n z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n required: z.boolean().default(false),\n }),\n )\n .default([\n { id: \"necessary\", label: \"Noodzakelijk\", description: \"Nodig om de site te laten werken.\", required: true },\n { id: \"analytics\", label: \"Statistieken\", description: \"Anonieme statistieken om de site te verbeteren.\", required: false },\n { id: \"marketing\", label: \"Marketing\", description: \"Externe embeds zoals video's en kaarten.\", required: false },\n ]),\n }),\n defaultSettings: {},\n});\n\n/** Alle ingebouwde modules (volgorde bepaalt block- en tab-volgorde). */\nexport const builtinModules: ModuleDefinition[] = [\n contentModule,\n pagesModule,\n newsModule,\n mediaModule,\n galleryModule,\n faqModule,\n openingHoursModule,\n pricingModule,\n formsModule,\n statsModule,\n settingsModule,\n testimonialsModule,\n teamModule,\n agendaModule,\n searchModule,\n featureModule,\n countersModule,\n logosModule,\n timelineModule,\n videoModule,\n bannerModule,\n contactModule,\n newsletterModule,\n bookingModule,\n accordionModule,\n embedModule,\n cardsModule,\n tabsModule,\n downloadsModule,\n pdfModule,\n countdownModule,\n sliderModule,\n whatsappModule,\n beforeAfterModule,\n portfolioModule,\n jobsModule,\n breadcrumbsModule,\n consentModule,\n];\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { useModuleSettings } from "../context";
|
|
3
4
|
const STORAGE_KEY = "xicms-consent";
|
|
4
5
|
const EMPTY = { categories: {}, decidedAt: null };
|
|
5
6
|
function normalizeConsentState(value) {
|
|
@@ -15,6 +16,7 @@ function consentDecided(state, requiredVersion) {
|
|
|
15
16
|
if (!requiredVersion) return true;
|
|
16
17
|
return state.version === requiredVersion;
|
|
17
18
|
}
|
|
19
|
+
let memoryFallback = null;
|
|
18
20
|
function read() {
|
|
19
21
|
if (typeof window === "undefined") return EMPTY;
|
|
20
22
|
try {
|
|
@@ -22,10 +24,11 @@ function read() {
|
|
|
22
24
|
if (raw) return normalizeConsentState(JSON.parse(raw));
|
|
23
25
|
} catch {
|
|
24
26
|
}
|
|
25
|
-
return EMPTY;
|
|
27
|
+
return memoryFallback ?? EMPTY;
|
|
26
28
|
}
|
|
27
29
|
function useConsent() {
|
|
28
30
|
const [state, setState] = useState({ categories: {}, decidedAt: null });
|
|
31
|
+
const settings = useModuleSettings("consent");
|
|
29
32
|
useEffect(() => {
|
|
30
33
|
setState(read());
|
|
31
34
|
const onChange = () => setState(read());
|
|
@@ -37,12 +40,21 @@ function useConsent() {
|
|
|
37
40
|
try {
|
|
38
41
|
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));
|
|
39
42
|
} catch {
|
|
43
|
+
memoryFallback = next;
|
|
40
44
|
}
|
|
41
45
|
setState(next);
|
|
42
46
|
window.dispatchEvent(new Event("xicms:consent"));
|
|
43
47
|
}, []);
|
|
44
|
-
const
|
|
45
|
-
|
|
48
|
+
const decided = consentDecided(state, settings.version);
|
|
49
|
+
const has = useCallback(
|
|
50
|
+
(category) => {
|
|
51
|
+
if (!decided) return false;
|
|
52
|
+
if (state.categories[category] === true) return true;
|
|
53
|
+
return settings.categories !== void 0 && !settings.categories.some((c) => c.id === category);
|
|
54
|
+
},
|
|
55
|
+
[decided, state, settings.categories]
|
|
56
|
+
);
|
|
57
|
+
return { state, decided, has, save };
|
|
46
58
|
}
|
|
47
59
|
export {
|
|
48
60
|
consentDecided,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/modules/consent/useConsent.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nconst STORAGE_KEY = \"xicms-consent\";\n\nexport interface ConsentState {\n /** Per categorie-id of de bezoeker toestemming gaf. */\n categories: Record<string, boolean>;\n /** Tijdstip (ms) waarop de keuze is gemaakt; null = nog niet gekozen. */\n decidedAt: number | null;\n /** Versie van het cookiebeleid waarvoor de keuze gold — wijzigt de site zijn beleid\n * (nieuwe `version` in de instellingen), dan telt een oude keuze niet meer. */\n version?: string;\n}\n\nconst EMPTY: ConsentState = { categories: {}, decidedAt: null };\n\n/** Normaliseer willekeurige opgeslagen JSON naar een geldige ConsentState (defensief tegen\n * corrupte/oude vormen — `has()` mag nooit crashen op een afwijkende localStorage-waarde). */\nexport function normalizeConsentState(value: unknown): ConsentState {\n if (!value || typeof value !== \"object\") return EMPTY;\n const v = value as Record<string, unknown>;\n const categories =\n v.categories && typeof v.categories === \"object\" ? (v.categories as Record<string, boolean>) : {};\n const decidedAt = typeof v.decidedAt === \"number\" ? v.decidedAt : null;\n const version = typeof v.version === \"string\" ? v.version : undefined;\n return version === undefined ? { categories, decidedAt } : { categories, decidedAt, version };\n}\n\n/**\n * Geldt de opgeslagen keuze nog? Alleen als er beslist is én de keuze bij de huidige\n * beleidsversie hoort (geen `requiredVersion` = elke keuze telt — het pre-versie-gedrag).\n */\nexport function consentDecided(state: ConsentState, requiredVersion?: string): boolean {\n if (state.decidedAt === null) return false;\n if (!requiredVersion) return true;\n return state.version === requiredVersion;\n}\n\nfunction read(): ConsentState {\n if (typeof window === \"undefined\") return EMPTY;\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (raw) return normalizeConsentState(JSON.parse(raw));\n } catch {\n /* corrupt/onbeschikbaar: behandel als nog-niet-gekozen */\n }\n return EMPTY;\n}\n\n/**\n * Leest/zet cookie-consent (client-side, geen backend). Andere code gebruikt `has(\"analytics\")`\n * om niet-essentiële scripts pas te laden na toestemming. De `xicms:consent`-event laat losse\n * luisteraars reageren zonder re-render.\n */\nexport function useConsent() {\n const [state, setState] = useState<ConsentState>({ categories: {}, decidedAt: null });\n\n useEffect(() => {\n setState(read());\n const onChange = () => setState(read());\n window.addEventListener(\"xicms:consent\", onChange);\n return () => window.removeEventListener(\"xicms:consent\", onChange);\n }, []);\n\n const save = useCallback((categories: Record<string, boolean>, version?: string) => {\n const next: ConsentState = { categories, decidedAt: Date.now(), ...(version ? { version } : {}) };\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n } catch {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/consent/useConsent.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useModuleSettings } from \"../context\";\n\nconst STORAGE_KEY = \"xicms-consent\";\n\nexport interface ConsentState {\n /** Per categorie-id of de bezoeker toestemming gaf. */\n categories: Record<string, boolean>;\n /** Tijdstip (ms) waarop de keuze is gemaakt; null = nog niet gekozen. */\n decidedAt: number | null;\n /** Versie van het cookiebeleid waarvoor de keuze gold — wijzigt de site zijn beleid\n * (nieuwe `version` in de instellingen), dan telt een oude keuze niet meer. */\n version?: string;\n}\n\nconst EMPTY: ConsentState = { categories: {}, decidedAt: null };\n\n/** Normaliseer willekeurige opgeslagen JSON naar een geldige ConsentState (defensief tegen\n * corrupte/oude vormen — `has()` mag nooit crashen op een afwijkende localStorage-waarde). */\nexport function normalizeConsentState(value: unknown): ConsentState {\n if (!value || typeof value !== \"object\") return EMPTY;\n const v = value as Record<string, unknown>;\n const categories =\n v.categories && typeof v.categories === \"object\" ? (v.categories as Record<string, boolean>) : {};\n const decidedAt = typeof v.decidedAt === \"number\" ? v.decidedAt : null;\n const version = typeof v.version === \"string\" ? v.version : undefined;\n return version === undefined ? { categories, decidedAt } : { categories, decidedAt, version };\n}\n\n/**\n * Geldt de opgeslagen keuze nog? Alleen als er beslist is én de keuze bij de huidige\n * beleidsversie hoort (geen `requiredVersion` = elke keuze telt — het pre-versie-gedrag).\n */\nexport function consentDecided(state: ConsentState, requiredVersion?: string): boolean {\n if (state.decidedAt === null) return false;\n if (!requiredVersion) return true;\n return state.version === requiredVersion;\n}\n\n// Vangnet als localStorage weigert (privémodus/vol): de keuze geldt dan alleen voor deze\n// paginasessie, maar wél consistent voor álle componenten (read() geeft hetzelfde terug).\nlet memoryFallback: ConsentState | null = null;\n\nfunction read(): ConsentState {\n if (typeof window === \"undefined\") return EMPTY;\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (raw) return normalizeConsentState(JSON.parse(raw));\n } catch {\n /* corrupt/onbeschikbaar: behandel als nog-niet-gekozen */\n }\n return memoryFallback ?? EMPTY;\n}\n\n/**\n * Leest/zet cookie-consent (client-side, geen backend). Andere code gebruikt `has(\"analytics\")`\n * om niet-essentiële scripts pas te laden na toestemming. De `xicms:consent`-event laat losse\n * luisteraars reageren zonder re-render.\n */\nexport function useConsent() {\n const [state, setState] = useState<ConsentState>({ categories: {}, decidedAt: null });\n // Beleidsversie + categorie-configuratie van de site: een keuze van een oude versie telt niet\n // meer (AVG), en dat moet ook voor `has()` gelden — niet alleen voor het hertonen van de banner.\n const settings = useModuleSettings<{ version?: string; categories?: Array<{ id: string }> }>(\"consent\");\n\n useEffect(() => {\n setState(read());\n const onChange = () => setState(read());\n window.addEventListener(\"xicms:consent\", onChange);\n return () => window.removeEventListener(\"xicms:consent\", onChange);\n }, []);\n\n const save = useCallback((categories: Record<string, boolean>, version?: string) => {\n const next: ConsentState = { categories, decidedAt: Date.now(), ...(version ? { version } : {}) };\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n } catch {\n memoryFallback = next; // opslag geweigerd: keuze geldt alleen voor deze paginasessie\n }\n setState(next);\n window.dispatchEvent(new Event(\"xicms:consent\"));\n }, []);\n\n const decided = consentDecided(state, settings.version);\n const has = useCallback(\n (category: string) => {\n if (!decided) return false;\n if (state.categories[category] === true) return true;\n // Een categorie die niet in de banner voorkomt kan een bezoeker nooit aanvinken; na een\n // geldige keuze vallen we dan open i.p.v. de inhoud eeuwig achter een onbereikbare gate\n // te zetten (maatwerk-categorieën vs. de standaard-gates van video/kaart/embed).\n return settings.categories !== undefined && !settings.categories.some((c) => c.id === category);\n },\n [decided, state, settings.categories],\n );\n\n return { state, decided, has, save };\n}\n"],"mappings":";AAEA,SAAS,aAAa,WAAW,gBAAgB;AACjD,SAAS,yBAAyB;AAElC,MAAM,cAAc;AAYpB,MAAM,QAAsB,EAAE,YAAY,CAAC,GAAG,WAAW,KAAK;AAIvD,SAAS,sBAAsB,OAA8B;AAClE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,IAAI;AACV,QAAM,aACJ,EAAE,cAAc,OAAO,EAAE,eAAe,WAAY,EAAE,aAAyC,CAAC;AAClG,QAAM,YAAY,OAAO,EAAE,cAAc,WAAW,EAAE,YAAY;AAClE,QAAM,UAAU,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AAC5D,SAAO,YAAY,SAAY,EAAE,YAAY,UAAU,IAAI,EAAE,YAAY,WAAW,QAAQ;AAC9F;AAMO,SAAS,eAAe,OAAqB,iBAAmC;AACrF,MAAI,MAAM,cAAc,KAAM,QAAO;AACrC,MAAI,CAAC,gBAAiB,QAAO;AAC7B,SAAO,MAAM,YAAY;AAC3B;AAIA,IAAI,iBAAsC;AAE1C,SAAS,OAAqB;AAC5B,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI;AACF,UAAM,MAAM,OAAO,aAAa,QAAQ,WAAW;AACnD,QAAI,IAAK,QAAO,sBAAsB,KAAK,MAAM,GAAG,CAAC;AAAA,EACvD,QAAQ;AAAA,EAER;AACA,SAAO,kBAAkB;AAC3B;AAOO,SAAS,aAAa;AAC3B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,EAAE,YAAY,CAAC,GAAG,WAAW,KAAK,CAAC;AAGpF,QAAM,WAAW,kBAA4E,SAAS;AAEtG,YAAU,MAAM;AACd,aAAS,KAAK,CAAC;AACf,UAAM,WAAW,MAAM,SAAS,KAAK,CAAC;AACtC,WAAO,iBAAiB,iBAAiB,QAAQ;AACjD,WAAO,MAAM,OAAO,oBAAoB,iBAAiB,QAAQ;AAAA,EACnE,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO,YAAY,CAAC,YAAqC,YAAqB;AAClF,UAAM,OAAqB,EAAE,YAAY,WAAW,KAAK,IAAI,GAAG,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,EAAG;AAChG,QAAI;AACF,aAAO,aAAa,QAAQ,aAAa,KAAK,UAAU,IAAI,CAAC;AAAA,IAC/D,QAAQ;AACN,uBAAiB;AAAA,IACnB;AACA,aAAS,IAAI;AACb,WAAO,cAAc,IAAI,MAAM,eAAe,CAAC;AAAA,EACjD,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU,eAAe,OAAO,SAAS,OAAO;AACtD,QAAM,MAAM;AAAA,IACV,CAAC,aAAqB;AACpB,UAAI,CAAC,QAAS,QAAO;AACrB,UAAI,MAAM,WAAW,QAAQ,MAAM,KAAM,QAAO;AAIhD,aAAO,SAAS,eAAe,UAAa,CAAC,SAAS,WAAW,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ;AAAA,IAChG;AAAA,IACA,CAAC,SAAS,OAAO,SAAS,UAAU;AAAA,EACtC;AAEA,SAAO,EAAE,OAAO,SAAS,KAAK,KAAK;AACrC;","names":[]}
|
package/dist/schema/blocks.d.ts
CHANGED
|
@@ -1967,8 +1967,11 @@ export declare const ContactBlockSchema: z.ZodObject<{
|
|
|
1967
1967
|
export declare const MapBlockSchema: z.ZodObject<{
|
|
1968
1968
|
_type: z.ZodLiteral<"map">;
|
|
1969
1969
|
provider: z.ZodDefault<z.ZodEnum<["osm", "google"]>>;
|
|
1970
|
-
/** Adres/zoekterm (osm) of volledige embed-URL (google). */
|
|
1970
|
+
/** Adres/zoekterm (osm, legacy-fallback) of volledige embed-URL (google). */
|
|
1971
1971
|
query: z.ZodDefault<z.ZodString>;
|
|
1972
|
+
/** OSM-coördinaten; hieruit + zoom bouwt de render een echte bbox (geen wereldkaart meer). */
|
|
1973
|
+
lat: z.ZodOptional<z.ZodNumber>;
|
|
1974
|
+
lng: z.ZodOptional<z.ZodNumber>;
|
|
1972
1975
|
zoom: z.ZodDefault<z.ZodNumber>;
|
|
1973
1976
|
height: z.ZodDefault<z.ZodNumber>;
|
|
1974
1977
|
consentGated: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -2013,6 +2016,8 @@ export declare const MapBlockSchema: z.ZodObject<{
|
|
|
2013
2016
|
anchorId?: string | undefined;
|
|
2014
2017
|
animate?: "fade" | "up" | undefined;
|
|
2015
2018
|
} | undefined;
|
|
2019
|
+
lat?: number | undefined;
|
|
2020
|
+
lng?: number | undefined;
|
|
2016
2021
|
}, {
|
|
2017
2022
|
_type: "map";
|
|
2018
2023
|
_key: string;
|
|
@@ -2026,6 +2031,8 @@ export declare const MapBlockSchema: z.ZodObject<{
|
|
|
2026
2031
|
} | undefined;
|
|
2027
2032
|
provider?: "osm" | "google" | undefined;
|
|
2028
2033
|
consentGated?: boolean | undefined;
|
|
2034
|
+
lat?: number | undefined;
|
|
2035
|
+
lng?: number | undefined;
|
|
2029
2036
|
query?: string | undefined;
|
|
2030
2037
|
zoom?: number | undefined;
|
|
2031
2038
|
height?: number | undefined;
|
|
@@ -5145,6 +5152,61 @@ export declare const CountdownWidgetSchema: z.ZodObject<{
|
|
|
5145
5152
|
target?: string | undefined;
|
|
5146
5153
|
expiredText?: string | undefined;
|
|
5147
5154
|
}>;
|
|
5155
|
+
/** Verwijzing naar een gedeeld symbool (5.0): de sectie leeft in sites/{siteId}/symbols en
|
|
5156
|
+
* propageert naar élke pagina die ernaar verwijst. Loskoppelen (editor) maakt er een kloon van. */
|
|
5157
|
+
export declare const SymbolRefBlockSchema: z.ZodObject<{
|
|
5158
|
+
_type: z.ZodLiteral<"symbolRef">;
|
|
5159
|
+
symbolId: z.ZodDefault<z.ZodString>;
|
|
5160
|
+
_key: z.ZodString;
|
|
5161
|
+
/** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */
|
|
5162
|
+
_style: z.ZodOptional<z.ZodObject<{
|
|
5163
|
+
paddingY: z.ZodOptional<z.ZodEnum<["none", "sm", "md", "lg", "xl"]>>;
|
|
5164
|
+
background: z.ZodOptional<z.ZodString>;
|
|
5165
|
+
width: z.ZodOptional<z.ZodEnum<["container", "full", "narrow"]>>;
|
|
5166
|
+
align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
|
|
5167
|
+
anchorId: z.ZodOptional<z.ZodString>;
|
|
5168
|
+
/** Subtiele binnenkomst-animatie bij scrollen (progressief + respecteert reduced-motion). */
|
|
5169
|
+
animate: z.ZodOptional<z.ZodEnum<["fade", "up"]>>;
|
|
5170
|
+
}, "strip", z.ZodTypeAny, {
|
|
5171
|
+
background?: string | undefined;
|
|
5172
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
5173
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
5174
|
+
align?: "left" | "center" | "right" | undefined;
|
|
5175
|
+
anchorId?: string | undefined;
|
|
5176
|
+
animate?: "fade" | "up" | undefined;
|
|
5177
|
+
}, {
|
|
5178
|
+
background?: string | undefined;
|
|
5179
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
5180
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
5181
|
+
align?: "left" | "center" | "right" | undefined;
|
|
5182
|
+
anchorId?: string | undefined;
|
|
5183
|
+
animate?: "fade" | "up" | undefined;
|
|
5184
|
+
}>>;
|
|
5185
|
+
}, "strip", z.ZodTypeAny, {
|
|
5186
|
+
_type: "symbolRef";
|
|
5187
|
+
_key: string;
|
|
5188
|
+
symbolId: string;
|
|
5189
|
+
_style?: {
|
|
5190
|
+
background?: string | undefined;
|
|
5191
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
5192
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
5193
|
+
align?: "left" | "center" | "right" | undefined;
|
|
5194
|
+
anchorId?: string | undefined;
|
|
5195
|
+
animate?: "fade" | "up" | undefined;
|
|
5196
|
+
} | undefined;
|
|
5197
|
+
}, {
|
|
5198
|
+
_type: "symbolRef";
|
|
5199
|
+
_key: string;
|
|
5200
|
+
_style?: {
|
|
5201
|
+
background?: string | undefined;
|
|
5202
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
5203
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
5204
|
+
align?: "left" | "center" | "right" | undefined;
|
|
5205
|
+
anchorId?: string | undefined;
|
|
5206
|
+
animate?: "fade" | "up" | undefined;
|
|
5207
|
+
} | undefined;
|
|
5208
|
+
symbolId?: string | undefined;
|
|
5209
|
+
}>;
|
|
5148
5210
|
/** Discriminated union over alle ingebouwde block-types. */
|
|
5149
5211
|
export declare const BuiltinBlockSchema: z.ZodDiscriminatedUnion<"_type", [z.ZodObject<{
|
|
5150
5212
|
_type: z.ZodLiteral<"hero">;
|
|
@@ -7195,8 +7257,11 @@ export declare const BuiltinBlockSchema: z.ZodDiscriminatedUnion<"_type", [z.Zod
|
|
|
7195
7257
|
}>, z.ZodObject<{
|
|
7196
7258
|
_type: z.ZodLiteral<"map">;
|
|
7197
7259
|
provider: z.ZodDefault<z.ZodEnum<["osm", "google"]>>;
|
|
7198
|
-
/** Adres/zoekterm (osm) of volledige embed-URL (google). */
|
|
7260
|
+
/** Adres/zoekterm (osm, legacy-fallback) of volledige embed-URL (google). */
|
|
7199
7261
|
query: z.ZodDefault<z.ZodString>;
|
|
7262
|
+
/** OSM-coördinaten; hieruit + zoom bouwt de render een echte bbox (geen wereldkaart meer). */
|
|
7263
|
+
lat: z.ZodOptional<z.ZodNumber>;
|
|
7264
|
+
lng: z.ZodOptional<z.ZodNumber>;
|
|
7200
7265
|
zoom: z.ZodDefault<z.ZodNumber>;
|
|
7201
7266
|
height: z.ZodDefault<z.ZodNumber>;
|
|
7202
7267
|
consentGated: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -7241,6 +7306,8 @@ export declare const BuiltinBlockSchema: z.ZodDiscriminatedUnion<"_type", [z.Zod
|
|
|
7241
7306
|
anchorId?: string | undefined;
|
|
7242
7307
|
animate?: "fade" | "up" | undefined;
|
|
7243
7308
|
} | undefined;
|
|
7309
|
+
lat?: number | undefined;
|
|
7310
|
+
lng?: number | undefined;
|
|
7244
7311
|
}, {
|
|
7245
7312
|
_type: "map";
|
|
7246
7313
|
_key: string;
|
|
@@ -7254,6 +7321,8 @@ export declare const BuiltinBlockSchema: z.ZodDiscriminatedUnion<"_type", [z.Zod
|
|
|
7254
7321
|
} | undefined;
|
|
7255
7322
|
provider?: "osm" | "google" | undefined;
|
|
7256
7323
|
consentGated?: boolean | undefined;
|
|
7324
|
+
lat?: number | undefined;
|
|
7325
|
+
lng?: number | undefined;
|
|
7257
7326
|
query?: string | undefined;
|
|
7258
7327
|
zoom?: number | undefined;
|
|
7259
7328
|
height?: number | undefined;
|
|
@@ -8131,6 +8200,58 @@ export declare const BuiltinBlockSchema: z.ZodDiscriminatedUnion<"_type", [z.Zod
|
|
|
8131
8200
|
}, z.ZodTypeAny, "passthrough">[] | undefined;
|
|
8132
8201
|
side?: "left" | "right" | undefined;
|
|
8133
8202
|
sidebarWidth?: "sm" | "md" | "lg" | undefined;
|
|
8203
|
+
}>, z.ZodObject<{
|
|
8204
|
+
_type: z.ZodLiteral<"symbolRef">;
|
|
8205
|
+
symbolId: z.ZodDefault<z.ZodString>;
|
|
8206
|
+
_key: z.ZodString;
|
|
8207
|
+
/** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */
|
|
8208
|
+
_style: z.ZodOptional<z.ZodObject<{
|
|
8209
|
+
paddingY: z.ZodOptional<z.ZodEnum<["none", "sm", "md", "lg", "xl"]>>;
|
|
8210
|
+
background: z.ZodOptional<z.ZodString>;
|
|
8211
|
+
width: z.ZodOptional<z.ZodEnum<["container", "full", "narrow"]>>;
|
|
8212
|
+
align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
|
|
8213
|
+
anchorId: z.ZodOptional<z.ZodString>;
|
|
8214
|
+
/** Subtiele binnenkomst-animatie bij scrollen (progressief + respecteert reduced-motion). */
|
|
8215
|
+
animate: z.ZodOptional<z.ZodEnum<["fade", "up"]>>;
|
|
8216
|
+
}, "strip", z.ZodTypeAny, {
|
|
8217
|
+
background?: string | undefined;
|
|
8218
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
8219
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
8220
|
+
align?: "left" | "center" | "right" | undefined;
|
|
8221
|
+
anchorId?: string | undefined;
|
|
8222
|
+
animate?: "fade" | "up" | undefined;
|
|
8223
|
+
}, {
|
|
8224
|
+
background?: string | undefined;
|
|
8225
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
8226
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
8227
|
+
align?: "left" | "center" | "right" | undefined;
|
|
8228
|
+
anchorId?: string | undefined;
|
|
8229
|
+
animate?: "fade" | "up" | undefined;
|
|
8230
|
+
}>>;
|
|
8231
|
+
}, "strip", z.ZodTypeAny, {
|
|
8232
|
+
_type: "symbolRef";
|
|
8233
|
+
_key: string;
|
|
8234
|
+
symbolId: string;
|
|
8235
|
+
_style?: {
|
|
8236
|
+
background?: string | undefined;
|
|
8237
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
8238
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
8239
|
+
align?: "left" | "center" | "right" | undefined;
|
|
8240
|
+
anchorId?: string | undefined;
|
|
8241
|
+
animate?: "fade" | "up" | undefined;
|
|
8242
|
+
} | undefined;
|
|
8243
|
+
}, {
|
|
8244
|
+
_type: "symbolRef";
|
|
8245
|
+
_key: string;
|
|
8246
|
+
_style?: {
|
|
8247
|
+
background?: string | undefined;
|
|
8248
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
8249
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
8250
|
+
align?: "left" | "center" | "right" | undefined;
|
|
8251
|
+
anchorId?: string | undefined;
|
|
8252
|
+
animate?: "fade" | "up" | undefined;
|
|
8253
|
+
} | undefined;
|
|
8254
|
+
symbolId?: string | undefined;
|
|
8134
8255
|
}>, z.ZodObject<{
|
|
8135
8256
|
_type: z.ZodLiteral<"tabs">;
|
|
8136
8257
|
tabs: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
@@ -12107,8 +12228,11 @@ export declare const AnyBlockSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"_type"
|
|
|
12107
12228
|
}>, z.ZodObject<{
|
|
12108
12229
|
_type: z.ZodLiteral<"map">;
|
|
12109
12230
|
provider: z.ZodDefault<z.ZodEnum<["osm", "google"]>>;
|
|
12110
|
-
/** Adres/zoekterm (osm) of volledige embed-URL (google). */
|
|
12231
|
+
/** Adres/zoekterm (osm, legacy-fallback) of volledige embed-URL (google). */
|
|
12111
12232
|
query: z.ZodDefault<z.ZodString>;
|
|
12233
|
+
/** OSM-coördinaten; hieruit + zoom bouwt de render een echte bbox (geen wereldkaart meer). */
|
|
12234
|
+
lat: z.ZodOptional<z.ZodNumber>;
|
|
12235
|
+
lng: z.ZodOptional<z.ZodNumber>;
|
|
12112
12236
|
zoom: z.ZodDefault<z.ZodNumber>;
|
|
12113
12237
|
height: z.ZodDefault<z.ZodNumber>;
|
|
12114
12238
|
consentGated: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -12153,6 +12277,8 @@ export declare const AnyBlockSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"_type"
|
|
|
12153
12277
|
anchorId?: string | undefined;
|
|
12154
12278
|
animate?: "fade" | "up" | undefined;
|
|
12155
12279
|
} | undefined;
|
|
12280
|
+
lat?: number | undefined;
|
|
12281
|
+
lng?: number | undefined;
|
|
12156
12282
|
}, {
|
|
12157
12283
|
_type: "map";
|
|
12158
12284
|
_key: string;
|
|
@@ -12166,6 +12292,8 @@ export declare const AnyBlockSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"_type"
|
|
|
12166
12292
|
} | undefined;
|
|
12167
12293
|
provider?: "osm" | "google" | undefined;
|
|
12168
12294
|
consentGated?: boolean | undefined;
|
|
12295
|
+
lat?: number | undefined;
|
|
12296
|
+
lng?: number | undefined;
|
|
12169
12297
|
query?: string | undefined;
|
|
12170
12298
|
zoom?: number | undefined;
|
|
12171
12299
|
height?: number | undefined;
|
|
@@ -13043,6 +13171,58 @@ export declare const AnyBlockSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"_type"
|
|
|
13043
13171
|
}, z.ZodTypeAny, "passthrough">[] | undefined;
|
|
13044
13172
|
side?: "left" | "right" | undefined;
|
|
13045
13173
|
sidebarWidth?: "sm" | "md" | "lg" | undefined;
|
|
13174
|
+
}>, z.ZodObject<{
|
|
13175
|
+
_type: z.ZodLiteral<"symbolRef">;
|
|
13176
|
+
symbolId: z.ZodDefault<z.ZodString>;
|
|
13177
|
+
_key: z.ZodString;
|
|
13178
|
+
/** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */
|
|
13179
|
+
_style: z.ZodOptional<z.ZodObject<{
|
|
13180
|
+
paddingY: z.ZodOptional<z.ZodEnum<["none", "sm", "md", "lg", "xl"]>>;
|
|
13181
|
+
background: z.ZodOptional<z.ZodString>;
|
|
13182
|
+
width: z.ZodOptional<z.ZodEnum<["container", "full", "narrow"]>>;
|
|
13183
|
+
align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
|
|
13184
|
+
anchorId: z.ZodOptional<z.ZodString>;
|
|
13185
|
+
/** Subtiele binnenkomst-animatie bij scrollen (progressief + respecteert reduced-motion). */
|
|
13186
|
+
animate: z.ZodOptional<z.ZodEnum<["fade", "up"]>>;
|
|
13187
|
+
}, "strip", z.ZodTypeAny, {
|
|
13188
|
+
background?: string | undefined;
|
|
13189
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
13190
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
13191
|
+
align?: "left" | "center" | "right" | undefined;
|
|
13192
|
+
anchorId?: string | undefined;
|
|
13193
|
+
animate?: "fade" | "up" | undefined;
|
|
13194
|
+
}, {
|
|
13195
|
+
background?: string | undefined;
|
|
13196
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
13197
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
13198
|
+
align?: "left" | "center" | "right" | undefined;
|
|
13199
|
+
anchorId?: string | undefined;
|
|
13200
|
+
animate?: "fade" | "up" | undefined;
|
|
13201
|
+
}>>;
|
|
13202
|
+
}, "strip", z.ZodTypeAny, {
|
|
13203
|
+
_type: "symbolRef";
|
|
13204
|
+
_key: string;
|
|
13205
|
+
symbolId: string;
|
|
13206
|
+
_style?: {
|
|
13207
|
+
background?: string | undefined;
|
|
13208
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
13209
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
13210
|
+
align?: "left" | "center" | "right" | undefined;
|
|
13211
|
+
anchorId?: string | undefined;
|
|
13212
|
+
animate?: "fade" | "up" | undefined;
|
|
13213
|
+
} | undefined;
|
|
13214
|
+
}, {
|
|
13215
|
+
_type: "symbolRef";
|
|
13216
|
+
_key: string;
|
|
13217
|
+
_style?: {
|
|
13218
|
+
background?: string | undefined;
|
|
13219
|
+
paddingY?: "sm" | "md" | "lg" | "xl" | "none" | undefined;
|
|
13220
|
+
width?: "container" | "full" | "narrow" | undefined;
|
|
13221
|
+
align?: "left" | "center" | "right" | undefined;
|
|
13222
|
+
anchorId?: string | undefined;
|
|
13223
|
+
animate?: "fade" | "up" | undefined;
|
|
13224
|
+
} | undefined;
|
|
13225
|
+
symbolId?: string | undefined;
|
|
13046
13226
|
}>, z.ZodObject<{
|
|
13047
13227
|
_type: z.ZodLiteral<"tabs">;
|
|
13048
13228
|
tabs: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
package/dist/schema/blocks.js
CHANGED
|
@@ -325,8 +325,11 @@ const MapBlockSchema = z.object({
|
|
|
325
325
|
...blockBase,
|
|
326
326
|
_type: z.literal("map"),
|
|
327
327
|
provider: z.enum(["osm", "google"]).default("osm"),
|
|
328
|
-
/** Adres/zoekterm (osm) of volledige embed-URL (google). */
|
|
328
|
+
/** Adres/zoekterm (osm, legacy-fallback) of volledige embed-URL (google). */
|
|
329
329
|
query: shortText.default(""),
|
|
330
|
+
/** OSM-coördinaten; hieruit + zoom bouwt de render een echte bbox (geen wereldkaart meer). */
|
|
331
|
+
lat: z.number().min(-90).max(90).optional().describe("Breedtegraad (lat)"),
|
|
332
|
+
lng: z.number().min(-180).max(180).optional().describe("Lengtegraad (lng)"),
|
|
330
333
|
zoom: z.number().int().min(1).max(20).default(14),
|
|
331
334
|
height: z.number().int().min(150).max(800).default(360),
|
|
332
335
|
consentGated: z.boolean().default(true)
|
|
@@ -665,6 +668,12 @@ const CountdownWidgetSchema = z.object({
|
|
|
665
668
|
target: z.string().max(40).default(""),
|
|
666
669
|
expiredText: shortText.default("Het is zover!")
|
|
667
670
|
});
|
|
671
|
+
const SymbolRefBlockSchema = z.object({
|
|
672
|
+
...blockBase,
|
|
673
|
+
_type: z.literal("symbolRef"),
|
|
674
|
+
// Leeg = nog geen symbool gekozen (vers blok); render en server-expansie slaan dat stil over.
|
|
675
|
+
symbolId: z.string().max(120).default("").describe("Symbool")
|
|
676
|
+
});
|
|
668
677
|
const BuiltinBlockSchema = z.discriminatedUnion("_type", [
|
|
669
678
|
HeroBlockSchema,
|
|
670
679
|
RichTextBlockSchema,
|
|
@@ -700,6 +709,7 @@ const BuiltinBlockSchema = z.discriminatedUnion("_type", [
|
|
|
700
709
|
EmbedBlockSchema,
|
|
701
710
|
// Indeling
|
|
702
711
|
WithSidebarBlockSchema,
|
|
712
|
+
SymbolRefBlockSchema,
|
|
703
713
|
TabsBlockSchema,
|
|
704
714
|
// Nieuwe modules
|
|
705
715
|
CardsBlockSchema,
|
|
@@ -781,6 +791,7 @@ export {
|
|
|
781
791
|
SocialBlockSchema,
|
|
782
792
|
SocialWidgetSchema,
|
|
783
793
|
SpacerBlockSchema,
|
|
794
|
+
SymbolRefBlockSchema,
|
|
784
795
|
TabsBlockSchema,
|
|
785
796
|
TeamBlockSchema,
|
|
786
797
|
TestimonialsBlockSchema,
|