@xiwebdesign/xicms-core 7.31.0 → 8.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/XiCMSProvider.js +23 -7
- package/dist/XiCMSProvider.js.map +1 -1
- package/dist/admin/AdminApp.js +175 -93
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/AdminHelp.d.ts +1 -1
- package/dist/admin/AdminHelp.js +44 -36
- package/dist/admin/AdminHelp.js.map +1 -1
- package/dist/admin/CoreVersion.d.ts +6 -3
- package/dist/admin/CoreVersion.js +60 -24
- package/dist/admin/CoreVersion.js.map +1 -1
- package/dist/admin/NewsEditor.d.ts +7 -0
- package/dist/admin/NewsEditor.js +117 -75
- package/dist/admin/NewsEditor.js.map +1 -1
- package/dist/admin/SuperadminPanel.js +1 -1
- package/dist/admin/SuperadminPanel.js.map +1 -1
- package/dist/admin/ZoekPalet.d.ts +15 -0
- package/dist/admin/ZoekPalet.js +123 -0
- package/dist/admin/ZoekPalet.js.map +1 -0
- package/dist/admin/blockEditors/GenericEditor.js +36 -18
- package/dist/admin/blockEditors/GenericEditor.js.map +1 -1
- package/dist/admin/blockEditors/StyleEditor.js +37 -3
- package/dist/admin/blockEditors/StyleEditor.js.map +1 -1
- package/dist/admin/blockEditors/SymbolRefEditor.js +44 -2
- package/dist/admin/blockEditors/SymbolRefEditor.js.map +1 -1
- package/dist/admin/blockEditors/index.js +154 -73
- package/dist/admin/blockEditors/index.js.map +1 -1
- package/dist/admin/customBlocks/CustomBlocksPanel.js +18 -7
- package/dist/admin/customBlocks/CustomBlocksPanel.js.map +1 -1
- package/dist/admin/dashboard/DashboardPanel.js +26 -16
- package/dist/admin/dashboard/DashboardPanel.js.map +1 -1
- package/dist/admin/editors/RichTextEditor.d.ts +4 -3
- package/dist/admin/editors/RichTextEditor.js +19 -60
- package/dist/admin/editors/RichTextEditor.js.map +1 -1
- package/dist/admin/editors/fontSizeExtension.js +7 -1
- package/dist/admin/editors/fontSizeExtension.js.map +1 -1
- package/dist/admin/editors/slashMenu.d.ts +18 -0
- package/dist/admin/editors/slashMenu.js +34 -0
- package/dist/admin/editors/slashMenu.js.map +1 -0
- package/dist/admin/editors/useRijkeTekst.d.ts +48 -0
- package/dist/admin/editors/useRijkeTekst.js +310 -0
- package/dist/admin/editors/useRijkeTekst.js.map +1 -0
- package/dist/admin/forms/FormsPanel.d.ts +11 -2
- package/dist/admin/forms/FormsPanel.js +218 -65
- package/dist/admin/forms/FormsPanel.js.map +1 -1
- package/dist/admin/lib/blokInfo.d.ts +17 -0
- package/dist/admin/lib/blokInfo.js +80 -0
- package/dist/admin/lib/blokInfo.js.map +1 -0
- package/dist/admin/lib/foutNaarMens.d.ts +1 -0
- package/dist/admin/lib/foutNaarMens.js +22 -0
- package/dist/admin/lib/foutNaarMens.js.map +1 -0
- package/dist/admin/lib/gewisteVelden.d.ts +13 -0
- package/dist/admin/lib/gewisteVelden.js +31 -0
- package/dist/admin/lib/gewisteVelden.js.map +1 -0
- package/dist/admin/lib/heroHulp.d.ts +11 -0
- package/dist/admin/lib/heroHulp.js +18 -0
- package/dist/admin/lib/heroHulp.js.map +1 -0
- package/dist/admin/lib/kleur.js +2 -3
- package/dist/admin/lib/kleur.js.map +1 -1
- package/dist/admin/lib/leesbaarheid.d.ts +34 -0
- package/dist/admin/lib/leesbaarheid.js +82 -0
- package/dist/admin/lib/leesbaarheid.js.map +1 -0
- package/dist/admin/lib/lengteAdvies.d.ts +1 -0
- package/dist/admin/lib/lengteAdvies.js +16 -0
- package/dist/admin/lib/lengteAdvies.js.map +1 -0
- package/dist/admin/lib/mediaLijst.d.ts +26 -0
- package/dist/admin/lib/mediaLijst.js +42 -0
- package/dist/admin/lib/mediaLijst.js.map +1 -0
- package/dist/admin/lib/mediaUsage.d.ts +12 -1
- package/dist/admin/lib/mediaUsage.js +43 -33
- package/dist/admin/lib/mediaUsage.js.map +1 -1
- package/dist/admin/lib/menuHulp.d.ts +16 -0
- package/dist/admin/lib/menuHulp.js +41 -0
- package/dist/admin/lib/menuHulp.js.map +1 -0
- package/dist/admin/lib/onopgeslagen.d.ts +10 -0
- package/dist/admin/lib/onopgeslagen.js +35 -0
- package/dist/admin/lib/onopgeslagen.js.map +1 -0
- package/dist/admin/lib/pagesClient.d.ts +55 -2
- package/dist/admin/lib/pagesClient.js +126 -28
- package/dist/admin/lib/pagesClient.js.map +1 -1
- package/dist/admin/lib/paginaGebruik.d.ts +56 -0
- package/dist/admin/lib/paginaGebruik.js +109 -0
- package/dist/admin/lib/paginaGebruik.js.map +1 -0
- package/dist/admin/lib/publicatieCheck.d.ts +25 -0
- package/dist/admin/lib/publicatieCheck.js +114 -0
- package/dist/admin/lib/publicatieCheck.js.map +1 -0
- package/dist/admin/lib/scrollNaarDetail.d.ts +6 -0
- package/dist/admin/lib/scrollNaarDetail.js +20 -0
- package/dist/admin/lib/scrollNaarDetail.js.map +1 -0
- package/dist/admin/lib/symbolsClient.d.ts +10 -0
- package/dist/admin/lib/symbolsClient.js +14 -1
- package/dist/admin/lib/symbolsClient.js.map +1 -1
- package/dist/admin/lib/tekstVeld.d.ts +8 -0
- package/dist/admin/lib/tekstVeld.js +10 -0
- package/dist/admin/lib/tekstVeld.js.map +1 -0
- package/dist/admin/lib/useIsSuperadmin.d.ts +2 -0
- package/dist/admin/lib/useIsSuperadmin.js +13 -0
- package/dist/admin/lib/useIsSuperadmin.js.map +1 -0
- package/dist/admin/lib/veldTaal.d.ts +14 -0
- package/dist/admin/lib/veldTaal.js +248 -0
- package/dist/admin/lib/veldTaal.js.map +1 -0
- package/dist/admin/lib/versieVergelijk.d.ts +17 -0
- package/dist/admin/lib/versieVergelijk.js +24 -0
- package/dist/admin/lib/versieVergelijk.js.map +1 -0
- package/dist/admin/lib/zodFields.js +22 -4
- package/dist/admin/lib/zodFields.js.map +1 -1
- package/dist/admin/lib/zodFout.d.ts +9 -0
- package/dist/admin/lib/zodFout.js +63 -0
- package/dist/admin/lib/zodFout.js.map +1 -0
- package/dist/admin/media/MediaManager.js +162 -32
- package/dist/admin/media/MediaManager.js.map +1 -1
- package/dist/admin/media/MediaPicker.d.ts +3 -0
- package/dist/admin/media/MediaPicker.js +84 -31
- package/dist/admin/media/MediaPicker.js.map +1 -1
- package/dist/admin/menu/MenuPanel.js +144 -83
- package/dist/admin/menu/MenuPanel.js.map +1 -1
- package/dist/admin/navContext.d.ts +3 -0
- package/dist/admin/navContext.js +13 -1
- package/dist/admin/navContext.js.map +1 -1
- package/dist/admin/pages/PageEditor.js +146 -30
- package/dist/admin/pages/PageEditor.js.map +1 -1
- package/dist/admin/pages/PagesPanel.js +215 -61
- package/dist/admin/pages/PagesPanel.js.map +1 -1
- package/dist/admin/pages/StarterKiezer.d.ts +12 -0
- package/dist/admin/pages/StarterKiezer.js +113 -0
- package/dist/admin/pages/StarterKiezer.js.map +1 -0
- package/dist/admin/panelRegistry.d.ts +1 -1
- package/dist/admin/panelRegistry.js +2 -1
- package/dist/admin/panelRegistry.js.map +1 -1
- package/dist/admin/patterns/PatternInserter.js +1 -1
- package/dist/admin/patterns/PatternInserter.js.map +1 -1
- package/dist/admin/settings/BedrijfInstellingen.d.ts +20 -0
- package/dist/admin/settings/BedrijfInstellingen.js +159 -0
- package/dist/admin/settings/BedrijfInstellingen.js.map +1 -0
- package/dist/admin/settings/MailTemplates.js +5 -4
- package/dist/admin/settings/MailTemplates.js.map +1 -1
- package/dist/admin/settings/SettingsPanel.js +120 -78
- package/dist/admin/settings/SettingsPanel.js.map +1 -1
- package/dist/admin/settings/SnapshotsCard.js +4 -4
- package/dist/admin/settings/SnapshotsCard.js.map +1 -1
- package/dist/admin/settings/VorigeTerugzetten.d.ts +15 -0
- package/dist/admin/settings/VorigeTerugzetten.js +89 -0
- package/dist/admin/settings/VorigeTerugzetten.js.map +1 -0
- package/dist/admin/shop/CategoriesTab.js +6 -4
- package/dist/admin/shop/CategoriesTab.js.map +1 -1
- package/dist/admin/shop/DiscountsTab.js +4 -2
- package/dist/admin/shop/DiscountsTab.js.map +1 -1
- package/dist/admin/shop/OrdersTab.js +57 -19
- package/dist/admin/shop/OrdersTab.js.map +1 -1
- package/dist/admin/shop/ProductPaneel.js +2 -1
- package/dist/admin/shop/ProductPaneel.js.map +1 -1
- package/dist/admin/shop/ProductsTab.js +40 -19
- package/dist/admin/shop/ProductsTab.js.map +1 -1
- package/dist/admin/shop/ShopPanel.js +13 -1
- package/dist/admin/shop/ShopPanel.js.map +1 -1
- package/dist/admin/shop/ShopSettingsTab.js +56 -17
- package/dist/admin/shop/ShopSettingsTab.js.map +1 -1
- package/dist/admin/shop/productClient.js +7 -3
- package/dist/admin/shop/productClient.js.map +1 -1
- package/dist/admin/stats/NietGevonden.d.ts +10 -0
- package/dist/admin/stats/NietGevonden.js +78 -0
- package/dist/admin/stats/NietGevonden.js.map +1 -0
- package/dist/admin/stats/StatsPanel.js +6 -1
- package/dist/admin/stats/StatsPanel.js.map +1 -1
- package/dist/admin/stats/lib.d.ts +2 -0
- package/dist/admin/stats/lib.js.map +1 -1
- package/dist/admin/ui/ConfirmDialog.js +10 -1
- package/dist/admin/ui/ConfirmDialog.js.map +1 -1
- package/dist/admin/ui/Icon.d.ts +34 -0
- package/dist/admin/ui/Icon.js +44 -0
- package/dist/admin/ui/Icon.js.map +1 -0
- package/dist/admin/ui/ImageField.d.ts +15 -0
- package/dist/admin/ui/ImageField.js +67 -0
- package/dist/admin/ui/ImageField.js.map +1 -0
- package/dist/admin/ui/KleurVeld.d.ts +25 -0
- package/dist/admin/ui/KleurVeld.js +76 -0
- package/dist/admin/ui/KleurVeld.js.map +1 -0
- package/dist/admin/ui/LaadStaat.d.ts +21 -0
- package/dist/admin/ui/LaadStaat.js +43 -0
- package/dist/admin/ui/LaadStaat.js.map +1 -0
- package/dist/admin/ui/LeesbaarheidPaneel.d.ts +10 -0
- package/dist/admin/ui/LeesbaarheidPaneel.js +68 -0
- package/dist/admin/ui/LeesbaarheidPaneel.js.map +1 -0
- package/dist/admin/ui/LinkDialog.d.ts +22 -0
- package/dist/admin/ui/LinkDialog.js +131 -0
- package/dist/admin/ui/LinkDialog.js.map +1 -0
- package/dist/admin/ui/LinkVeld.d.ts +14 -0
- package/dist/admin/ui/LinkVeld.js +49 -0
- package/dist/admin/ui/LinkVeld.js.map +1 -0
- package/dist/admin/ui/PreviewLinkResultaat.d.ts +14 -0
- package/dist/admin/ui/PreviewLinkResultaat.js +52 -0
- package/dist/admin/ui/PreviewLinkResultaat.js.map +1 -0
- package/dist/admin/ui/charts.js +5 -5
- package/dist/admin/ui/charts.js.map +1 -1
- package/dist/admin/ui/primitives.d.ts +16 -6
- package/dist/admin/ui/primitives.js +98 -26
- package/dist/admin/ui/primitives.js.map +1 -1
- package/dist/admin/ui/select.js +5 -2
- package/dist/admin/ui/select.js.map +1 -1
- package/dist/admin/ui/switch.d.ts +3 -1
- package/dist/admin/ui/switch.js +6 -3
- package/dist/admin/ui/switch.js.map +1 -1
- package/dist/admin/ui/toast.d.ts +2 -1
- package/dist/admin/ui/toast.js +17 -11
- package/dist/admin/ui/toast.js.map +1 -1
- package/dist/admin/visual/BlokKiezer.d.ts +34 -0
- package/dist/admin/visual/BlokKiezer.js +225 -0
- package/dist/admin/visual/BlokKiezer.js.map +1 -0
- package/dist/admin/visual/InlineGereedschap.d.ts +52 -0
- package/dist/admin/visual/InlineGereedschap.js +356 -0
- package/dist/admin/visual/InlineGereedschap.js.map +1 -0
- package/dist/admin/visual/InlineRijkeTekst.d.ts +23 -0
- package/dist/admin/visual/InlineRijkeTekst.js +152 -0
- package/dist/admin/visual/InlineRijkeTekst.js.map +1 -0
- package/dist/admin/visual/VisualEditor.js +273 -125
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/admin.css +1 -1
- package/dist/auth/AuthProvider.js +1 -0
- package/dist/auth/AuthProvider.js.map +1 -1
- package/dist/bedrijf/bedrijf.d.ts +44 -0
- package/dist/bedrijf/bedrijf.js +125 -0
- package/dist/bedrijf/bedrijf.js.map +1 -0
- package/dist/blocks/BlockRenderer.js +11 -1
- package/dist/blocks/BlockRenderer.js.map +1 -1
- package/dist/blocks/blockStyle.d.ts +7 -0
- package/dist/blocks/blockStyle.js +16 -3
- package/dist/blocks/blockStyle.js.map +1 -1
- package/dist/blocks/builtinSchemas.js +6 -0
- package/dist/blocks/builtinSchemas.js.map +1 -1
- package/dist/blocks/builtins/AgendaRender.d.ts +22 -0
- package/dist/blocks/builtins/AgendaRender.js +69 -9
- package/dist/blocks/builtins/AgendaRender.js.map +1 -1
- package/dist/blocks/builtins/Availability.d.ts +1 -0
- package/dist/blocks/builtins/Availability.js +23 -0
- package/dist/blocks/builtins/Availability.js.map +1 -0
- package/dist/blocks/builtins/AvailabilityRender.d.ts +12 -0
- package/dist/blocks/builtins/AvailabilityRender.js +105 -0
- package/dist/blocks/builtins/AvailabilityRender.js.map +1 -0
- package/dist/blocks/builtins/BeforeAfterRender.js +4 -3
- package/dist/blocks/builtins/BeforeAfterRender.js.map +1 -1
- package/dist/blocks/builtins/Booking.js +1 -1
- package/dist/blocks/builtins/Booking.js.map +1 -1
- package/dist/blocks/builtins/BreadcrumbsRender.d.ts +4 -3
- package/dist/blocks/builtins/BreadcrumbsRender.js +14 -8
- package/dist/blocks/builtins/BreadcrumbsRender.js.map +1 -1
- package/dist/blocks/builtins/ColumnsRender.d.ts +1 -1
- package/dist/blocks/builtins/ColumnsRender.js +3 -1
- package/dist/blocks/builtins/ColumnsRender.js.map +1 -1
- package/dist/blocks/builtins/Contact.js +1 -1
- package/dist/blocks/builtins/Contact.js.map +1 -1
- package/dist/blocks/builtins/ContactRender.d.ts +1 -1
- package/dist/blocks/builtins/ContactRender.js +37 -8
- package/dist/blocks/builtins/ContactRender.js.map +1 -1
- package/dist/blocks/builtins/Cta.js +1 -1
- package/dist/blocks/builtins/Cta.js.map +1 -1
- package/dist/blocks/builtins/CtaRender.d.ts +1 -1
- package/dist/blocks/builtins/CtaRender.js +5 -4
- package/dist/blocks/builtins/CtaRender.js.map +1 -1
- package/dist/blocks/builtins/Embed.js +1 -1
- package/dist/blocks/builtins/Embed.js.map +1 -1
- package/dist/blocks/builtins/FormBlock.js +1 -0
- package/dist/blocks/builtins/FormBlock.js.map +1 -1
- package/dist/blocks/builtins/FormBlockRender.d.ts +6 -0
- package/dist/blocks/builtins/FormBlockRender.js +88 -16
- package/dist/blocks/builtins/FormBlockRender.js.map +1 -1
- package/dist/blocks/builtins/GalleryRender.js +3 -2
- package/dist/blocks/builtins/GalleryRender.js.map +1 -1
- package/dist/blocks/builtins/Hero.js +1 -1
- package/dist/blocks/builtins/Hero.js.map +1 -1
- package/dist/blocks/builtins/HeroRender.js +7 -3
- package/dist/blocks/builtins/HeroRender.js.map +1 -1
- package/dist/blocks/builtins/OpenNowBadge.d.ts +4 -2
- package/dist/blocks/builtins/OpenNowBadge.js +6 -6
- package/dist/blocks/builtins/OpenNowBadge.js.map +1 -1
- package/dist/blocks/builtins/OpeningHoursRender.d.ts +8 -2
- package/dist/blocks/builtins/OpeningHoursRender.js +27 -6
- package/dist/blocks/builtins/OpeningHoursRender.js.map +1 -1
- package/dist/blocks/builtins/PriceList.d.ts +1 -0
- package/dist/blocks/builtins/PriceList.js +25 -0
- package/dist/blocks/builtins/PriceList.js.map +1 -0
- package/dist/blocks/builtins/PriceListRender.d.ts +17 -0
- package/dist/blocks/builtins/PriceListRender.js +87 -0
- package/dist/blocks/builtins/PriceListRender.js.map +1 -0
- package/dist/blocks/builtins/RichTextBlockRender.js +6 -1
- package/dist/blocks/builtins/RichTextBlockRender.js.map +1 -1
- package/dist/blocks/builtins/SectionHeading.d.ts +1 -0
- package/dist/blocks/builtins/SectionHeading.js +14 -0
- package/dist/blocks/builtins/SectionHeading.js.map +1 -0
- package/dist/blocks/builtins/SectionHeadingRender.d.ts +7 -0
- package/dist/blocks/builtins/SectionHeadingRender.js +14 -0
- package/dist/blocks/builtins/SectionHeadingRender.js.map +1 -0
- package/dist/blocks/builtins/SliderRender.js +3 -2
- package/dist/blocks/builtins/SliderRender.js.map +1 -1
- package/dist/blocks/builtins/SymbolRef.js +1 -1
- package/dist/blocks/builtins/SymbolRef.js.map +1 -1
- package/dist/blocks/builtins/TeamRender.js +6 -1
- package/dist/blocks/builtins/TeamRender.js.map +1 -1
- package/dist/blocks/builtins/Testimonials.js +3 -1
- package/dist/blocks/builtins/Testimonials.js.map +1 -1
- package/dist/blocks/builtins/TestimonialsRender.js +4 -0
- package/dist/blocks/builtins/TestimonialsRender.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChatRender.d.ts +1 -1
- package/dist/blocks/builtins/WhatsappChatRender.js +3 -1
- package/dist/blocks/builtins/WhatsappChatRender.js.map +1 -1
- package/dist/blocks/builtins/Widgets.js +2 -2
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/builtins/WidgetsRender.js +3 -1
- package/dist/blocks/builtins/WidgetsRender.js.map +1 -1
- package/dist/blocks/builtins/consentEmbed.js +26 -9
- package/dist/blocks/builtins/consentEmbed.js.map +1 -1
- package/dist/blocks/builtins/index.d.ts +3 -0
- package/dist/blocks/builtins/index.js +6 -0
- package/dist/blocks/builtins/index.js.map +1 -1
- package/dist/blocks/builtins/lib/autoComplete.d.ts +7 -0
- package/dist/blocks/builtins/lib/autoComplete.js +20 -0
- package/dist/blocks/builtins/lib/autoComplete.js.map +1 -0
- package/dist/blocks/builtins/lib/bookingUrl.d.ts +2 -2
- package/dist/blocks/builtins/lib/bookingUrl.js +1 -1
- package/dist/blocks/builtins/lib/bookingUrl.js.map +1 -1
- package/dist/blocks/builtins/lib/ical.d.ts +24 -0
- package/dist/blocks/builtins/lib/ical.js +82 -0
- package/dist/blocks/builtins/lib/ical.js.map +1 -0
- package/dist/blocks/builtins/lib/vandaag.d.ts +8 -0
- package/dist/blocks/builtins/lib/vandaag.js +22 -0
- package/dist/blocks/builtins/lib/vandaag.js.map +1 -0
- package/dist/blocks/registry.d.ts +6 -0
- package/dist/blocks/registry.js.map +1 -1
- package/dist/blocks/ui/index.js +1 -0
- package/dist/blocks/ui/index.js.map +1 -1
- package/dist/components/EditBar.js +2 -4
- package/dist/components/EditBar.js.map +1 -1
- package/dist/components/News.js +26 -18
- package/dist/components/News.js.map +1 -1
- package/dist/components/PageView.d.ts +7 -1
- package/dist/components/PageView.js +17 -0
- package/dist/components/PageView.js.map +1 -1
- package/dist/components/ResponsiveImage.js +18 -20
- package/dist/components/ResponsiveImage.js.map +1 -1
- package/dist/components/onderOffset.d.ts +13 -0
- package/dist/components/onderOffset.js +74 -0
- package/dist/components/onderOffset.js.map +1 -0
- package/dist/components/site/Bedrijfsnummers.d.ts +9 -0
- package/dist/components/site/Bedrijfsnummers.js +12 -0
- package/dist/components/site/Bedrijfsnummers.js.map +1 -0
- package/dist/components/site/SiteFooter.d.ts +6 -1
- package/dist/components/site/SiteFooter.js +62 -9
- package/dist/components/site/SiteFooter.js.map +1 -1
- package/dist/components/site/SiteHeader.d.ts +15 -0
- package/dist/components/site/SiteHeader.js +70 -0
- package/dist/components/site/SiteHeader.js.map +1 -0
- package/dist/components/site/SiteNav.d.ts +2 -0
- package/dist/components/site/SiteNav.js +29 -5
- package/dist/components/site/SiteNav.js.map +1 -1
- package/dist/demo/DemoStudio.js +2 -2
- package/dist/demo/DemoStudio.js.map +1 -1
- package/dist/demo/demoStore.d.ts +13 -0
- package/dist/demo/demoStore.js +36 -0
- package/dist/demo/demoStore.js.map +1 -1
- package/dist/editor/EditorProvider.js +15 -4
- package/dist/editor/EditorProvider.js.map +1 -1
- package/dist/firebase/functionsClient.js +5 -1
- package/dist/firebase/functionsClient.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/media/ImageContext.d.ts +17 -0
- package/dist/media/ImageContext.js +65 -20
- package/dist/media/ImageContext.js.map +1 -1
- package/dist/media/altInHtml.d.ts +9 -0
- package/dist/media/altInHtml.js +17 -0
- package/dist/media/altInHtml.js.map +1 -0
- package/dist/media/srcset.d.ts +12 -0
- package/dist/media/srcset.js +13 -0
- package/dist/media/srcset.js.map +1 -0
- package/dist/modules/builtins.d.ts +1 -0
- package/dist/modules/builtins.js +22 -9
- package/dist/modules/builtins.js.map +1 -1
- package/dist/modules/consent/ConsentBanner.d.ts +5 -0
- package/dist/modules/consent/ConsentBanner.js +8 -7
- package/dist/modules/consent/ConsentBanner.js.map +1 -1
- package/dist/modules/consent/standaard.d.ts +12 -0
- package/dist/modules/consent/standaard.js +10 -0
- package/dist/modules/consent/standaard.js.map +1 -0
- package/dist/modules/consent/useConsent.d.ts +4 -0
- package/dist/modules/consent/useConsent.js +30 -1
- package/dist/modules/consent/useConsent.js.map +1 -1
- package/dist/modules/shop/blocks/Cart.js +5 -3
- package/dist/modules/shop/blocks/Cart.js.map +1 -1
- package/dist/modules/shop/blocks/Checkout.js +56 -35
- package/dist/modules/shop/blocks/Checkout.js.map +1 -1
- package/dist/modules/shop/blocks/Donation.js +4 -4
- package/dist/modules/shop/blocks/Donation.js.map +1 -1
- package/dist/modules/shop/blocks/ProductDetail.js +19 -3
- package/dist/modules/shop/blocks/ProductDetail.js.map +1 -1
- package/dist/modules/shop/blocks/ProductGrid.d.ts +3 -1
- package/dist/modules/shop/blocks/ProductGrid.js +8 -4
- package/dist/modules/shop/blocks/ProductGrid.js.map +1 -1
- package/dist/modules/shop/blocks/ShopCategories.js +4 -3
- package/dist/modules/shop/blocks/ShopCategories.js.map +1 -1
- package/dist/modules/shop/lib.d.ts +4 -0
- package/dist/modules/shop/lib.js +14 -0
- package/dist/modules/shop/lib.js.map +1 -1
- package/dist/modules/shop/settings.d.ts +3 -0
- package/dist/modules/shop/settings.js +14 -0
- package/dist/modules/shop/settings.js.map +1 -1
- package/dist/modules/shop/strings.d.ts +4 -0
- package/dist/modules/shop/strings.js +8 -0
- package/dist/modules/shop/strings.js.map +1 -1
- package/dist/next/envCheck.d.ts +42 -0
- package/dist/next/envCheck.js +106 -0
- package/dist/next/envCheck.js.map +1 -0
- package/dist/next/index.cjs +185 -2
- package/dist/next/index.d.ts +2 -0
- package/dist/next/index.js +8 -1
- package/dist/next/index.js.map +1 -1
- package/dist/next/securityHeaders.d.ts +36 -0
- package/dist/next/securityHeaders.js +74 -0
- package/dist/next/securityHeaders.js.map +1 -0
- package/dist/patterns/builtins.d.ts +7 -0
- package/dist/patterns/builtins.js +138 -3
- package/dist/patterns/builtins.js.map +1 -1
- package/dist/releaseNotes.js +148 -0
- package/dist/releaseNotes.js.map +1 -1
- package/dist/render/PublishedPage.d.ts +2 -1
- package/dist/render/PublishedPage.js +10 -4
- package/dist/render/PublishedPage.js.map +1 -1
- package/dist/schema/blocks.d.ts +473 -0
- package/dist/schema/blocks.js +105 -5
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/business.d.ts +118 -0
- package/dist/schema/business.js +75 -0
- package/dist/schema/business.js.map +1 -0
- package/dist/schema/fields.d.ts +2 -1
- package/dist/schema/fields.js.map +1 -1
- package/dist/schema/forms.d.ts +18 -0
- package/dist/schema/forms.js +18 -3
- package/dist/schema/forms.js.map +1 -1
- package/dist/schema/mail.d.ts +10 -0
- package/dist/schema/mail.js +7 -0
- package/dist/schema/mail.js.map +1 -1
- package/dist/schema/settings.d.ts +103 -0
- package/dist/schema/settings.js +24 -3
- package/dist/schema/settings.js.map +1 -1
- package/dist/schema/shop.d.ts +2 -0
- package/dist/schema/shop.js +4 -0
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/shopGeld.d.ts +1 -0
- package/dist/schema/shopGeld.js +1 -0
- package/dist/schema/shopGeld.js.map +1 -1
- package/dist/schema/siteConfig.d.ts +69 -1
- package/dist/schema/siteConfig.js +7 -2
- package/dist/schema/siteConfig.js.map +1 -1
- package/dist/server/blockData.d.ts +1 -1
- package/dist/server/blockData.js +74 -18
- package/dist/server/blockData.js.map +1 -1
- package/dist/server/cspRapport.d.ts +20 -0
- package/dist/server/cspRapport.js +56 -0
- package/dist/server/cspRapport.js.map +1 -0
- package/dist/server/fonts.d.ts +3 -0
- package/dist/server/fonts.js +39 -0
- package/dist/server/fonts.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/sanitize.js +2 -0
- package/dist/server/sanitize.js.map +1 -1
- package/dist/settings/useSiteSettings.js +4 -1
- package/dist/settings/useSiteSettings.js.map +1 -1
- package/dist/starters/starters.d.ts +69 -0
- package/dist/starters/starters.js +171 -0
- package/dist/starters/starters.js.map +1 -0
- package/dist/styles.css +1181 -212
- package/dist/theme/color.d.ts +10 -0
- package/dist/theme/color.js +17 -1
- package/dist/theme/color.js.map +1 -1
- package/dist/theme/fontFallback.d.ts +23 -0
- package/dist/theme/fontFallback.js +58 -0
- package/dist/theme/fontFallback.js.map +1 -0
- package/dist/theme/fonts.d.ts +11 -0
- package/dist/theme/fonts.js +16 -0
- package/dist/theme/fonts.js.map +1 -0
- package/dist/version.js +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/blockEditors/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ComponentType, useEffect, useState } from \"react\";\nimport { collection, getDocs } from \"firebase/firestore\";\nimport { getDb } from \"../../firebase/client\";\nimport { Button, Field, Input, Textarea } from \"../ui/primitives\";\nimport { Select } from \"../ui/select\";\nimport { Switch } from \"../ui/switch\";\nimport { ArrayEditor } from \"../ui/ArrayEditor\";\nimport { RichTextEditor } from \"../editors/RichTextEditor\";\nimport { MediaPickerButton } from \"../media/MediaPicker\";\nimport { useRegistry } from \"../../blocks/context\";\nimport { GenericEditor } from \"./GenericEditor\";\nimport { SymbolRefEditor } from \"./SymbolRefEditor\";\n\nconst VARIANT_OPTIONS = [\n { value: \"primary\", label: \"Primair\" },\n { value: \"secondary\", label: \"Secundair\" },\n { value: \"outline\", label: \"Outline\" },\n];\n\nexport interface BlockEditorProps {\n block: Record<string, unknown>;\n siteId: string;\n onChange: (next: Record<string, unknown>) => void;\n}\n\nfunction patch(block: Record<string, unknown>, onChange: BlockEditorProps[\"onChange\"], part: Record<string, unknown>) {\n onChange({ ...block, ...part });\n}\n\n/**\n * Beeldveld-knop: opent de mediabibliotheek-kiezer (zoek + klik om te kiezen, of upload nieuw).\n * Behoudt de `onUploaded(url, mediaId)`-signatuur zodat alle bestaande beeldvelden 'm meteen krijgen.\n */\nfunction ImageUploadButton({ siteId, onUploaded }: { siteId: string; onUploaded: (url: string, mediaId: string, alt?: string) => void }) {\n return <MediaPickerButton siteId={siteId} onSelect={(m) => onUploaded(m.url, m.mediaId, m.alt)} />;\n}\n\ntype FaqItem = { q: string; a: string; aHtml?: string };\ntype PricingItem = {\n label: string;\n price: string;\n detail?: string;\n features?: string[];\n ctaLabel?: string;\n ctaHref?: string;\n highlighted?: boolean;\n billingPeriod?: string;\n};\ntype DownloadItem = { label: string; href: string; meta?: string };\n\nfunction HeroEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Regeltje boven de titel (optioneel)\" hint=\"bv. 'Hoveniers sinds 2001'\">\n <Input value={(block.eyebrow as string) ?? \"\"} onChange={(e) => patch(block, onChange, { eyebrow: e.target.value || undefined })} />\n </Field>\n <Field label=\"Titel\">\n <Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} />\n </Field>\n <Field label=\"Ondertitel\">\n <Input value={(block.subtitle as string) ?? \"\"} onChange={(e) => patch(block, onChange, { subtitle: e.target.value })} />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"left\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Gecentreerd\" },\n ]}\n />\n </Field>\n <Field label=\"Achtergrondafbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.imageUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { imageUrl: url })} />\n </div>\n </Field>\n <Field label=\"Video-achtergrond (mp4/webm, optioneel)\" hint=\"Overschrijft de afbeelding.\">\n <Input value={(block.videoUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { videoUrl: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Verticale uitlijning\">\n <Select\n value={(block.vAlign as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { vAlign: v })}\n options={[\n { value: \"top\", label: \"Boven\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"bottom\", label: \"Onder\" },\n ]}\n />\n </Field>\n <Field label=\"Hoogte\">\n <Select\n value={(block.minHeight as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { minHeight: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"sm\", label: \"Klein\" },\n { value: \"md\", label: \"Normaal\" },\n { value: \"lg\", label: \"Groot\" },\n { value: \"full\", label: \"Volledig scherm\" },\n ]}\n />\n </Field>\n <Field label=\"Overlay-kleur (optioneel)\">\n <Input value={(block.overlayColor as string) ?? \"\"} onChange={(e) => patch(block, onChange, { overlayColor: e.target.value })} placeholder=\"#000000\" />\n </Field>\n <Field label=\"Overlay-dekking (%)\">\n <Input type=\"number\" value={String((block.overlayOpacity as number) ?? 0)} onChange={(e) => patch(block, onChange, { overlayOpacity: Math.max(0, Math.min(100, Number(e.target.value) || 0)) })} />\n </Field>\n <ToggleField label=\"Gradient-overlay (donker onderaan — leesbare tekst op foto's)\" checked={Boolean(block.overlayGradient)} onChange={(v) => patch(block, onChange, { overlayGradient: v })} />\n </div>\n <div>\n <span className=\"text-sm font-medium\">Knoppen</span>\n <ArrayEditor\n items={(block.buttons as { label: string; href: string; variant: string }[]) ?? []}\n onChange={(buttons) => patch(block, onChange, { buttons })}\n newItem={() => ({ label: \"\", href: \"#\", variant: \"primary\" })}\n addLabel=\"+ Knop\"\n renderRow={(b, update) => (\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={b.label} placeholder=\"Label\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={b.href} placeholder=\"/pad of https://…\" onChange={(e) => update({ href: e.target.value })} />\n <Select value={b.variant} onValueChange={(v) => update({ variant: v })} options={VARIANT_OPTIONS} />\n </div>\n )}\n />\n </div>\n </div>\n );\n}\n\nfunction RichTextBlockEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n );\n}\n\nfunction ImageEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Afbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { url })} />\n </div>\n </Field>\n <Field label=\"Alt-tekst (toegankelijkheid)\" hint=\"Beschrijf de afbeelding kort.\">\n <Input value={(block.alt as string) ?? \"\"} onChange={(e) => patch(block, onChange, { alt: e.target.value })} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Link (klikbaar)\">\n <Input value={(block.href as string) ?? \"\"} onChange={(e) => patch(block, onChange, { href: e.target.value })} />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"right\", label: \"Rechts\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"1:1\" },\n { value: \"3/2\", label: \"3:2\" },\n ]}\n />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FaqEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as FaqItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ToggleField label=\"Items standaard open tonen\" checked={block.defaultOpen === true} onChange={(v) => patch(block, onChange, { defaultOpen: v })} />\n {/* ArrayEditor levert toevoegen + verwijderen + herorden (↑/↓) — zo kun je de volgorde van\n vragen aanpassen, consistent met pricing/cards/team. */}\n <ArrayEditor<FaqItem>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ q: \"\", a: \"\" })}\n addLabel=\"+ Vraag toevoegen\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Field label=\"Vraag\">\n <Input value={it.q ?? \"\"} onChange={(e) => update({ q: e.target.value })} />\n </Field>\n {it.aHtml !== undefined ? (\n <Field label=\"Antwoord (met opmaak)\">\n <RichTextEditor siteId={siteId} value={it.aHtml} onChange={(html) => update({ aHtml: html })} />\n </Field>\n ) : (\n <Field label=\"Antwoord\">\n <Textarea rows={2} value={it.a ?? \"\"} onChange={(e) => update({ a: e.target.value })} />\n </Field>\n )}\n {it.aHtml === undefined ? (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: it.a ? `<p>${it.a}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n </div>\n ) : (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n </div>\n )}\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction PricingEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as PricingItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", price: \"\", features: [], highlighted: false })}\n addLabel=\"+ Pakket\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={it.price} placeholder=\"€ 00\" onChange={(e) => update({ price: e.target.value })} />\n <Input value={it.billingPeriod ?? \"\"} placeholder=\"/maand\" onChange={(e) => update({ billingPeriod: e.target.value })} />\n </div>\n <Input value={it.detail ?? \"\"} placeholder=\"Korte omschrijving\" onChange={(e) => update({ detail: e.target.value })} />\n <Field label=\"Features (één per regel)\">\n <Textarea\n rows={3}\n value={(it.features ?? []).join(\"\\n\")}\n onChange={(e) => update({ features: e.target.value.split(\"\\n\").map((s) => s.trim()).filter(Boolean) })}\n />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.ctaLabel ?? \"\"} placeholder=\"Knoptekst\" onChange={(e) => update({ ctaLabel: e.target.value })} />\n <Input value={it.ctaHref ?? \"\"} placeholder=\"Knoplink\" onChange={(e) => update({ ctaHref: e.target.value })} />\n </div>\n <label className=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={Boolean(it.highlighted)} onChange={(e) => update({ highlighted: e.target.checked })} />\n Uitgelicht pakket\n </label>\n </div>\n )}\n />\n <Field label=\"Voetnoot (optioneel)\">\n <Input value={(block.note as string) ?? \"\"} onChange={(e) => patch(block, onChange, { note: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 items-end gap-2\">\n <Field label=\"Valuta\" hint=\"ISO-code voor zoekmachines, bv. EUR\">\n <Input value={(block.currency as string) ?? \"EUR\"} onChange={(e) => patch(block, onChange, { currency: e.target.value || \"EUR\" })} />\n </Field>\n <ToggleField label=\"JSON-LD (Product/Offer)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n </div>\n );\n}\n\nfunction NewsListEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-3\">\n <Field label=\"Per pagina\" hint=\"0 = alles ineens; anders 'Meer laden'-knop\">\n <Input\n type=\"number\"\n value={String((block.pageSize as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { pageSize: Math.max(0, Math.min(24, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Aantal\">\n <Input\n type=\"number\"\n value={String((block.limit as number) ?? 6)}\n onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(50, Number(e.target.value) || 6)) })}\n />\n </Field>\n <Field label=\"Basispad\">\n <Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FormEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n });\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n\n const current = (block.formId as string) ?? \"\";\n const missing = current && forms.length > 0 && !forms.some((f) => f.id === current);\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <Field label=\"Formulier\" hint=\"Maak een formulier aan onder het tabblad Formulieren.\">\n {forms.length > 0 ? (\n <Select\n value={current}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={current} onChange={(e) => patch(block, onChange, { formId: e.target.value })} placeholder=\"Formulier-id\" />\n )}\n </Field>\n {missing && (\n <p className=\"text-xs text-red-600\">Dit formulier-id bestaat niet (meer). Kies een bestaand formulier.</p>\n )}\n </div>\n );\n}\n\nfunction GalleryEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { url?: string; alt?: string; caption?: string; tag?: string }[]) ?? [];\n const set = (next: typeof items) => patch(block, onChange, { items: next });\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Kolommen\" hint=\"0 = volg module-instelling\">\n <Input\n type=\"number\"\n value={String((block.columns as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { columns: Math.max(0, Math.min(6, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Lightbox\">\n <Select\n value={(block.lightbox as string) ?? \"inherit\"}\n onValueChange={(v) => patch(block, onChange, { lightbox: v })}\n options={[\n { value: \"inherit\", label: \"Volg module-instelling\" },\n { value: \"on\", label: \"Aan\" },\n { value: \"off\", label: \"Uit\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"1/1\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"1/1\", label: \"Vierkant (1:1)\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"auto\", label: \"Eigen verhouding\" },\n ]}\n />\n </Field>\n </div>\n {items.map((it, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label={`Foto ${i + 1}`}>\n <div className=\"flex items-center gap-2\">\n <Input value={it.url ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, url: e.target.value } : x)))} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => set(items.map((x, j) => (j === i ? { ...x, url } : x)))} />\n </div>\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Alt-tekst\">\n <Input value={it.alt ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, alt: e.target.value } : x)))} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={it.caption ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, caption: e.target.value } : x)))} />\n </Field>\n <Field label=\"Tag\" hint=\"Voor de filterbalk\">\n <Input value={it.tag ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, tag: e.target.value || undefined } : x)))} />\n </Field>\n </div>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(items.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...items, { url: \"\", alt: \"\" }])}>+ Foto toevoegen</Button>\n </div>\n <ToggleField label=\"Filterbalk op tags\" checked={Boolean(block.showFilter)} onChange={(v) => patch(block, onChange, { showFilter: v })} />\n </div>\n );\n}\n\nfunction AgendaEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as { title: string; start: string; end?: string; location?: string; description?: string; url?: string }[]) ?? [];\n const set = (next: typeof events) => patch(block, onChange, { events: next });\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n {events.map((ev, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label=\"Titel\">\n <Input value={ev.title ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, title: e.target.value } : x)))} />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Start\" hint=\"bv. 2026-07-01 of 2026-07-01T19:30\">\n <Input value={ev.start ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, start: e.target.value } : x)))} />\n </Field>\n <Field label=\"Einde (optioneel)\">\n <Input value={ev.end ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, end: e.target.value } : x)))} />\n </Field>\n </div>\n <Field label=\"Locatie (optioneel)\">\n <Input value={ev.location ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, location: e.target.value } : x)))} />\n </Field>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(events.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...events, { title: \"\", start: \"\" }])}>+ Evenement toevoegen</Button>\n </div>\n </div>\n );\n}\n\nfunction HeadingField({ block, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n );\n}\nfunction ToggleField({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch checked={checked} onCheckedChange={onChange} />\n {label}\n </label>\n );\n}\n\nfunction FeatureEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n <Field label=\"Afbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.imageUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { imageUrl: url })} />\n </div>\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Beeldpositie\">\n <Select value={(block.imagePosition as string) ?? \"left\"} onValueChange={(v) => patch(block, onChange, { imagePosition: v })} options={[{ value: \"left\", label: \"Links\" }, { value: \"right\", label: \"Rechts\" }]} />\n </Field>\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><Input value={(block.buttonHref as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonHref: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction VideoEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Bron\">\n <Select value={(block.provider as string) ?? \"youtube\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"youtube\", label: \"YouTube\" }, { value: \"vimeo\", label: \"Vimeo\" }, { value: \"file\", label: \"MP4/WebM-URL\" }]} />\n </Field>\n <Field label=\"Id of URL\"><Input value={(block.src as string) ?? \"\"} onChange={(e) => patch(block, onChange, { src: e.target.value })} /></Field>\n </div>\n <Field label=\"Bijschrift (optioneel)\"><Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} /></Field>\n <Field label=\"Voorvertoningsbeeld (optioneel)\">\n <div className=\"flex gap-2\">\n <Input value={(block.posterUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { posterUrl: e.target.value || undefined })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { posterUrl: url })} />\n </div>\n </Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n <ToggleField label=\"Click-to-play (speler laadt pas na klik — sneller & privacyvriendelijker)\" checked={Boolean(block.facade)} onChange={(v) => patch(block, onChange, { facade: v })} />\n </div>\n );\n}\n\n/** Coördinaten als één \"lat, lng\"-veld: pas bij een compleet geldig paar wordt het blok bijgewerkt\n * (een half ingevuld paar zou het blok anders schema-ongeldig maken). */\nfunction GeoField({ value, onChange }: { value?: { lat: number; lng: number }; onChange: (geo?: { lat: number; lng: number }) => void }) {\n const [text, setText] = useState(value ? `${value.lat}, ${value.lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 52.0907, 5.1214 — toont het bedrijf op de juiste plek in Google\">\n <Input\n value={text}\n placeholder=\"52.0907, 5.1214\"\n onChange={(e) => {\n setText(e.target.value);\n const m = e.target.value.trim().match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) {\n if (e.target.value.trim() === \"\") onChange(undefined);\n return;\n }\n const lat = Number(m[1]);\n const lng = Number(m[2]);\n if (Math.abs(lat) <= 90 && Math.abs(lng) <= 180) onChange({ lat, lng });\n }}\n />\n </Field>\n );\n}\n\nfunction ContactEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n <Field label=\"Openingstijden\"><Input value={(block.hours as string) ?? \"\"} onChange={(e) => patch(block, onChange, { hours: e.target.value })} /></Field>\n <GeoField\n value={block.geo as { lat: number; lng: number } | undefined}\n onChange={(geo) => patch(block, onChange, { geo })}\n />\n <ToggleField label=\"JSON-LD (LocalBusiness)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n );\n}\n\n/** Coördinaten-veld voor de kaart: zet `lat`/`lng` (los, want het map-schema gebruikt geen geo-object).\n * Pas bij een geldig paar wordt het blok bijgewerkt; leegmaken wist de coördinaten (terug naar de\n * adres/query-fallback). */\nfunction MapCoordField({ block, onChange }: BlockEditorProps) {\n const lat = block.lat as number | undefined;\n const lng = block.lng as number | undefined;\n const [text, setText] = useState(lat != null && lng != null ? `${lat}, ${lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 51.9958, 5.0924 — toont een echte kaart i.p.v. de wereldkaart. Coördinaten vind je door in openstreetmap.org rechts te klikken → 'Toon adres'.\">\n <Input\n value={text}\n placeholder=\"51.9958, 5.0924\"\n onChange={(e) => {\n setText(e.target.value);\n const t = e.target.value.trim();\n if (t === \"\") { patch(block, onChange, { lat: undefined, lng: undefined }); return; }\n const m = t.match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) return;\n const la = Number(m[1]);\n const ln = Number(m[2]);\n if (Math.abs(la) <= 90 && Math.abs(ln) <= 180) patch(block, onChange, { lat: la, lng: ln });\n }}\n />\n </Field>\n );\n}\n\nfunction MapEditor({ block, siteId, onChange }: BlockEditorProps) {\n const isGoogle = (block.provider as string) === \"google\";\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aanbieder\">\n <Select value={(block.provider as string) ?? \"osm\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"osm\", label: \"OpenStreetMap (coördinaten)\" }, { value: \"google\", label: \"Google (embed-URL)\" }]} />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 360)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(800, Number(e.target.value) || 360)) })} /></Field>\n </div>\n {isGoogle ? (\n <Field label=\"Embed-URL\">\n <Input value={(block.query as string) ?? \"\"} onChange={(e) => patch(block, onChange, { query: e.target.value })} />\n </Field>\n ) : (\n <>\n <MapCoordField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Zoom (1–20)\"><Input type=\"number\" value={String((block.zoom as number) ?? 14)} onChange={(e) => patch(block, onChange, { zoom: Math.max(1, Math.min(20, Number(e.target.value) || 14)) })} /></Field>\n </>\n )}\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\nfunction NewsletterEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n });\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL (provider)\" hint=\"bv. Mailchimp form-action\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n {!block.actionUrl && (\n <Field label=\"Of: opslaan in XiCMS-formulier\" hint=\"Maak onder Formulieren een formulier met een 'email'-veld; aanmeldingen verschijnen daar.\">\n {forms.length > 0 ? (\n <Select\n value={(block.formId as string) ?? \"\"}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v || undefined })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={(block.formId as string) ?? \"\"} onChange={(e) => patch(block, onChange, { formId: e.target.value || undefined })} placeholder=\"formulier-id\" />\n )}\n </Field>\n )}\n <Field label=\"AVG-akkoordtekst\" hint=\"Leeg = geen checkbox; bv. 'Ik ga akkoord met de privacyverklaring'\">\n <Input value={(block.consentText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { consentText: e.target.value || undefined })} />\n </Field>\n </div>\n );\n}\n\nfunction BookingEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <p className=\"rounded-md bg-slate-50 p-2 text-xs text-slate-600\">\n Dit blok <strong>toont een bestaand afsprakensysteem</strong> in je pagina (een embed). XiCMS heeft\n geen eigen agenda. Maak een account bij een boekingsdienst — bv.{\" \"}\n <strong>Calendly</strong>, <strong>Salonized</strong>, <strong>Treatwell</strong>,{\" \"}\n <strong>Acuity</strong> of <strong>SimplyBook</strong> — kopieer daar de “embed/insluiten”-link\n en plak die hieronder.\n </p>\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Reserveersysteem\" hint=\"Kies je aanbieder of 'Eigen embed' voor een vrije link.\">\n <Select\n value={(block.provider as string) ?? \"custom\"}\n onValueChange={(v) => patch(block, onChange, { provider: v })}\n options={[\n { value: \"custom\", label: \"Eigen embed (vrije URL)\" },\n { value: \"calendly\", label: \"Calendly\" },\n { value: \"cal\", label: \"Cal.com\" },\n { value: \"formitable\", label: \"Formitable\" },\n { value: \"resengo\", label: \"Resengo\" },\n { value: \"thefork\", label: \"TheFork\" },\n { value: \"treatwell\", label: \"Treatwell\" },\n { value: \"salonized\", label: \"Salonized\" },\n { value: \"tablebooker\", label: \"Tablebooker\" },\n { value: \"bookingkit\", label: \"bookingkit\" },\n ]}\n />\n </Field>\n <Field label=\"Embed-URL of account-naam\" hint=\"Volledige link óf alleen je slug/id — de provider-keuze bouwt er de juiste embed van.\">\n <Input value={(block.embedUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { embedUrl: e.target.value })} placeholder=\"https://calendly.com/jouw-naam/intake — of: jouw-naam/intake\" />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 630)} onChange={(e) => patch(block, onChange, { height: Math.max(300, Math.min(1200, Number(e.target.value) || 630)) })} /></Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\nfunction AccordionEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { title: string; body: string; bodyHtml?: string }[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <ArrayEditor<{ title: string; body: string; bodyHtml?: string }>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ title: \"\", body: \"\" })}\n addLabel=\"+ Paneel\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n {it.bodyHtml !== undefined ? (\n <RichTextEditor siteId={siteId} value={it.bodyHtml} onChange={(html) => update({ bodyHtml: html })} />\n ) : (\n <Textarea rows={2} value={it.body} placeholder=\"Inhoud\" onChange={(e) => update({ body: e.target.value })} />\n )}\n <div>\n {it.bodyHtml === undefined ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: it.body ? `<p>${it.body}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n ) : (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n )}\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Meerdere tegelijk open\" checked={Boolean(block.multiple)} onChange={(v) => patch(block, onChange, { multiple: v })} />\n </div>\n );\n}\n\nfunction EmbedEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"URL (iframe)\"><Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Titel (toegankelijkheid)\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 420)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(1200, Number(e.target.value) || 420)) })} /></Field>\n </div>\n <Field label=\"Beeldverhouding\" hint=\"'Vaste hoogte' gebruikt het hoogte-veld\">\n <Select\n value={(block.aspectRatio as string) ?? \"fixed\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"fixed\", label: \"Vaste hoogte\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"Vierkant\" },\n ]}\n />\n </Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\n/* ════════════════════ Indeling: geneste blok-lijsten ════════════════════ */\n\nfunction nestKey() {\n return (globalThis.crypto?.randomUUID?.() ?? `b${Date.now()}${Math.random()}`).slice(0, 12);\n}\n\n/**\n * Beheert een geneste blok-lijst (kolommen / zijbalk / tab): blok toevoegen, sorteren, verwijderen,\n * en per blok zijn eigen velden bewerken (recursief via dezelfde editor-registry). Zo kun je ook in\n * een zijbalk gewoon widgets plaatsen en instellen, zonder JSON.\n */\nexport function NestedBlocksEditor({\n blocks,\n siteId,\n onChange,\n addLabel = \"+ Blok toevoegen…\",\n}: {\n blocks: Record<string, unknown>[];\n siteId: string;\n onChange: (next: Record<string, unknown>[]) => void;\n addLabel?: string;\n}) {\n const registry = useRegistry();\n const [openKey, setOpenKey] = useState<string | null>(null);\n const list = blocks ?? [];\n const addOptions = [...registry.values()].map((d) => ({ value: d.type, label: `${d.icon ?? \"▫\"} ${d.label}` }));\n\n function add(type: string) {\n const def = registry.get(type);\n const base = def?.defaults?.() ?? {};\n const b = { _key: nestKey(), _type: type, ...base } as Record<string, unknown>;\n onChange([...list, b]);\n setOpenKey(b._key as string);\n }\n function move(i: number, dir: -1 | 1) {\n const j = i + dir;\n if (j < 0 || j >= list.length) return;\n const copy = [...list];\n [copy[i], copy[j]] = [copy[j], copy[i]];\n onChange(copy);\n }\n\n return (\n <div className=\"grid gap-2\">\n {list.map((b, i) => {\n const type = b._type as string;\n const def = registry.get(type);\n const Editor = (def?.Editor as ComponentType<BlockEditorProps> | undefined) ?? builtinBlockEditors[type] ?? GenericEditor;\n const open = openKey === (b._key as string);\n return (\n <div key={(b._key as string) ?? i} className=\"rounded-lg border border-slate-200 bg-white\">\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <button\n type=\"button\"\n className=\"flex-1 truncate text-left text-sm\"\n onClick={() => setOpenKey(open ? null : (b._key as string))}\n >\n <span className=\"mr-1\">{def?.icon ?? \"▫\"}</span>\n {def?.label ?? type}\n </button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, -1)} aria-label=\"Omhoog\">↑</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, 1)} aria-label=\"Omlaag\">↓</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => onChange(list.filter((_, j) => j !== i))} aria-label=\"Verwijderen\">🗑</Button>\n </div>\n {open && (\n <div className=\"border-t border-slate-100 p-2\">\n <Editor block={b} siteId={siteId} onChange={(next) => onChange(list.map((x, j) => (j === i ? next : x)))} />\n </div>\n )}\n </div>\n );\n })}\n {list.length === 0 && <p className=\"text-xs text-slate-400\">Nog geen blokken.</p>}\n <Select value=\"\" placeholder={addLabel} onValueChange={(v) => v && add(v)} options={addOptions} />\n </div>\n );\n}\n\nfunction ColumnsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const cols = (block.columns as { blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof cols) => patch(block, onChange, { columns: next });\n return (\n <div className=\"grid gap-3\">\n {cols.map((c, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium text-slate-500\">Kolom {i + 1}</span>\n {cols.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(cols.filter((_, j) => j !== i))}>Kolom weg</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={c.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(cols.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {cols.length < 4 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...cols, { blocks: [] }])}>+ Kolom toevoegen</Button>\n )}\n </div>\n );\n}\n\nfunction WithSidebarEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Zijbalk\">\n <Select\n value={(block.side as string) ?? \"right\"}\n onValueChange={(v) => patch(block, onChange, { side: v })}\n options={[{ value: \"right\", label: \"Rechts\" }, { value: \"left\", label: \"Links\" }]}\n />\n </Field>\n <Field label=\"Breedte\">\n <Select\n value={(block.sidebarWidth as string) ?? \"md\"}\n onValueChange={(v) => patch(block, onChange, { sidebarWidth: v })}\n options={[{ value: \"sm\", label: \"Smal\" }, { value: \"md\", label: \"Normaal\" }, { value: \"lg\", label: \"Breed\" }]}\n />\n </Field>\n <Field label=\"Meescrollen\">\n <Select\n value={block.sticky === false ? \"no\" : \"yes\"}\n onValueChange={(v) => patch(block, onChange, { sticky: v === \"yes\" })}\n options={[{ value: \"yes\", label: \"Sticky\" }, { value: \"no\", label: \"Nee\" }]}\n />\n </Field>\n </div>\n <Field label=\"Hoofdinhoud\">\n <NestedBlocksEditor\n blocks={(block.main as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { main: next })}\n />\n </Field>\n <Field label=\"Zijbalk (widgets)\" hint=\"Plaats hier compacte widgets: laatste nieuws, agenda, contact…\">\n <NestedBlocksEditor\n blocks={(block.aside as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { aside: next })}\n addLabel=\"+ Widget/blok toevoegen…\"\n />\n </Field>\n </div>\n );\n}\n\nfunction TabsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const tabs = (block.tabs as { label: string; blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof tabs) => patch(block, onChange, { tabs: next });\n return (\n <div className=\"grid gap-3\">\n {tabs.map((t, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={t.label} placeholder={`Tab ${i + 1}`} onChange={(e) => set(tabs.map((x, j) => (j === i ? { ...x, label: e.target.value } : x)))} />\n {tabs.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(tabs.filter((_, j) => j !== i))}>🗑</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={t.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(tabs.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {tabs.length < 10 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...tabs, { label: `Tab ${tabs.length + 1}`, blocks: [] }])}>+ Tab toevoegen</Button>\n )}\n </div>\n );\n}\n\n/* ════════════════════ Nieuwe modules ════════════════════ */\n\ntype CardItem = { icon?: string; imageUrl?: string; title: string; text?: string; href?: string; linkLabel?: string; featured?: boolean };\nfunction CountdownEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n <ToggleField label=\"Labels tonen (dagen/uur/min/sec)\" checked={block.showLabels !== false} onChange={(v) => patch(block, onChange, { showLabels: v })} />\n <Field label=\"Na afloop\">\n <Select\n value={(block.onExpire as string) ?? \"message\"}\n onValueChange={(v) => patch(block, onChange, { onExpire: v })}\n options={[\n { value: \"message\", label: \"Melding tonen\" },\n { value: \"hide\", label: \"Blok verbergen\" },\n ]}\n />\n </Field>\n </div>\n );\n}\n\ntype Slide = { imageUrl?: string; alt?: string; caption?: string; href?: string };\nfunction SliderEditor({ block, siteId, onChange }: BlockEditorProps) {\n const slides = (block.slides as Slide[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"16/9\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"1/1\", label: \"Vierkant\" },\n { value: \"21/9\", label: \"Breedbeeld\" },\n ]}\n />\n </Field>\n <Field label=\"Interval (sec)\">\n <Input type=\"number\" value={String((block.interval as number) ?? 5)} onChange={(e) => patch(block, onChange, { interval: Math.max(2, Math.min(20, Number(e.target.value) || 5)) })} />\n </Field>\n </div>\n <div className=\"flex flex-wrap gap-4\">\n <ToggleField label=\"Automatisch afspelen\" checked={Boolean(block.autoplay)} onChange={(v) => patch(block, onChange, { autoplay: v })} />\n <ToggleField label=\"Stippen\" checked={block.showDots !== false} onChange={(v) => patch(block, onChange, { showDots: v })} />\n <ToggleField label=\"Pijlen\" checked={block.showArrows !== false} onChange={(v) => patch(block, onChange, { showArrows: v })} />\n </div>\n <ArrayEditor\n items={slides}\n onChange={(next) => patch(block, onChange, { slides: next })}\n newItem={() => ({ imageUrl: \"\", alt: \"\", caption: \"\" })}\n addLabel=\"+ Slide\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <Field label={`Afbeelding ${i + 1}`}>\n <div className=\"flex items-center gap-2\">\n <Input value={it.imageUrl ?? \"\"} onChange={(e) => update({ imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton key={i} siteId={siteId} onUploaded={(url) => update({ imageUrl: url })} />\n </div>\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n <Input value={it.href ?? \"\"} placeholder=\"Link (optioneel)\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n <Input value={it.caption ?? \"\"} placeholder=\"Bijschrift (optioneel)\" onChange={(e) => update({ caption: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\n/* ════════════════════ Widget-editors ════════════════════ */\n\nfunction NewsWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <Field label=\"Basispad\"><Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} /></Field>\n </div>\n <ToggleField label=\"Miniaturen tonen\" checked={Boolean(block.showImages)} onChange={(v) => patch(block, onChange, { showImages: v })} />\n </div>\n );\n}\n\ntype WEvent = { title: string; start: string; end?: string; location?: string; url?: string };\nfunction AgendaWidgetEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as WEvent[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={events}\n onChange={(next) => patch(block, onChange, { events: next })}\n newItem={(): WEvent => ({ title: \"\", start: \"\" })}\n addLabel=\"+ Evenement\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.start} placeholder=\"2026-07-01T19:30\" onChange={(e) => update({ start: e.target.value })} />\n <Input value={it.location ?? \"\"} placeholder=\"Locatie\" onChange={(e) => update({ location: e.target.value })} />\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Verlopen evenementen verbergen\" checked={block.hidePast !== false} onChange={(v) => patch(block, onChange, { hidePast: v })} />\n </div>\n );\n}\n\ntype Row = { day: string; hours: string };\nfunction OpeningHoursWidgetEditor({ block, onChange }: BlockEditorProps) {\n const rows = (block.rows as Row[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={rows}\n onChange={(next) => patch(block, onChange, { rows: next })}\n newItem={() => ({ day: \"\", hours: \"\" })}\n addLabel=\"+ Regel\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.day} placeholder=\"Maandag\" onChange={(e) => update({ day: e.target.value })} />\n <Input value={it.hours} placeholder=\"09:00 – 17:00\" onChange={(e) => update({ hours: e.target.value })} />\n </div>\n )}\n />\n <ToggleField label=\"Vandaag markeren\" checked={block.highlightToday !== false} onChange={(v) => patch(block, onChange, { highlightToday: v })} />\n </div>\n );\n}\n\nfunction ContactWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\ntype SocialItem = { platform: string; href: string };\nfunction SocialWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as SocialItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ platform: \"\", href: \"\" })}\n addLabel=\"+ Link\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.platform} placeholder=\"Instagram\" onChange={(e) => update({ platform: e.target.value })} />\n <Input value={it.href} placeholder=\"https://…\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction NewsletterWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"Aanmelden\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction CtaWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Titel\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><Input value={(block.buttonHref as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonHref: e.target.value })} /></Field>\n </div>\n <Field label=\"Achtergrondkleur (optioneel)\"><Input value={(block.backgroundColor as string) ?? \"\"} onChange={(e) => patch(block, onChange, { backgroundColor: e.target.value })} placeholder=\"#f5f5f5\" /></Field>\n </div>\n );\n}\n\ntype GalleryWItem = { url?: string; alt?: string };\nfunction GalleryWidgetEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as GalleryWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Kolommen\"><Input type=\"number\" value={String((block.columns as number) ?? 3)} onChange={(e) => patch(block, onChange, { columns: Math.max(2, Math.min(4, Number(e.target.value) || 3)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ url: \"\", alt: \"\" })}\n addLabel=\"+ Foto\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={it.url ?? \"\"} onChange={(e) => update({ url: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton key={i} siteId={siteId} onUploaded={(url) => update({ url })} />\n </div>\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\ntype TWItem = { quote: string; author: string; rating?: number };\nfunction TestimonialsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as TWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={(): TWItem => ({ quote: \"\", author: \"\" })}\n addLabel=\"+ Review\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Textarea rows={2} value={it.quote} placeholder=\"Citaat\" onChange={(e) => update({ quote: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.author} placeholder=\"Naam\" onChange={(e) => update({ author: e.target.value })} />\n <Input type=\"number\" value={String(it.rating ?? \"\")} placeholder=\"Sterren 1-5\" onChange={(e) => update({ rating: e.target.value ? Math.max(1, Math.min(5, Number(e.target.value))) : undefined })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\ntype CardWItem = { icon?: string; title: string; text?: string; href?: string };\nfunction CardsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as CardWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ icon: \"\", title: \"\", text: \"\" })}\n addLabel=\"+ Item\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.icon ?? \"\"} placeholder=\"Icoon (emoji)\" onChange={(e) => update({ icon: e.target.value })} />\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n </div>\n <Input value={it.text ?? \"\"} placeholder=\"Korte tekst\" onChange={(e) => update({ text: e.target.value })} />\n <Input value={it.href ?? \"\"} placeholder=\"Link (optioneel)\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction DownloadsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as DownloadItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", href: \"\", meta: \"\" })}\n addLabel=\"+ Document\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.href} placeholder=\"URL\" onChange={(e) => update({ href: e.target.value })} />\n <Input value={it.meta ?? \"\"} placeholder=\"PDF · 1,2 MB\" onChange={(e) => update({ meta: e.target.value })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction CountdownWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n </div>\n );\n}\n\n// Fallback-editor voor bloktypes zonder eigen `Editor` — sinds 5.0 aangedreven door de Field-IR\n// (repeaters/groepen/conditionele velden als echte UI). Zie ./GenericEditor.tsx (import bovenaan).\n\n/** Ingebouwde editors per blocktype. Klant-blokken kunnen hun eigen `Editor` meegeven. */\nexport const builtinBlockEditors: Record<string, ComponentType<BlockEditorProps>> = {\n hero: HeroEditor,\n richText: RichTextBlockEditor,\n image: ImageEditor,\n faq: FaqEditor,\n pricing: PricingEditor,\n newsList: NewsListEditor,\n form: FormEditor,\n gallery: GalleryEditor,\n agenda: AgendaEditor,\n feature: FeatureEditor,\n video: VideoEditor,\n contact: ContactEditor,\n map: MapEditor,\n newsletter: NewsletterEditor,\n booking: BookingEditor,\n accordion: AccordionEditor,\n embed: EmbedEditor,\n symbolRef: SymbolRefEditor,\n // Indeling\n columns: ColumnsEditor,\n withSidebar: WithSidebarEditor,\n tabs: TabsEditor,\n // Nieuwe modules\n countdown: CountdownEditor,\n slider: SliderEditor,\n // Widgets\n newsWidget: NewsWidgetEditor,\n agendaWidget: AgendaWidgetEditor,\n openingHoursWidget: OpeningHoursWidgetEditor,\n contactWidget: ContactWidgetEditor,\n socialWidget: SocialWidgetEditor,\n newsletterWidget: NewsletterWidgetEditor,\n ctaWidget: CtaWidgetEditor,\n galleryWidget: GalleryWidgetEditor,\n testimonialsWidget: TestimonialsWidgetEditor,\n cardsWidget: CardsWidgetEditor,\n downloadsWidget: DownloadsWidgetEditor,\n countdownWidget: CountdownWidgetEditor,\n};\n\nexport { GenericEditor };\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/blockEditors/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { heroBeeldPatch, videoAdresProbleem } from \"../lib/heroHulp\";\nimport { useIsSuperadmin } from \"../lib/useIsSuperadmin\";\nimport { LinkVeld } from \"../ui/LinkVeld\";\nimport { KleurVeld } from \"../ui/KleurVeld\";\nimport { type ComponentType, useEffect, useState } from \"react\";\nimport { collection, getDocs } from \"firebase/firestore\";\nimport { getDb } from \"../../firebase/client\";\nimport { Button, Field, Input, Textarea } from \"../ui/primitives\";\nimport { Select } from \"../ui/select\";\nimport { Switch } from \"../ui/switch\";\nimport { ArrayEditor } from \"../ui/ArrayEditor\";\nimport { RichTextEditor } from \"../editors/RichTextEditor\";\nimport { ImageField } from \"../ui/ImageField\";\nimport { useRegistry } from \"../../blocks/context\";\nimport { GenericEditor } from \"./GenericEditor\";\nimport { SymbolRefEditor } from \"./SymbolRefEditor\";\n\nconst VARIANT_OPTIONS = [\n { value: \"primary\", label: \"Primair\" },\n { value: \"secondary\", label: \"Secundair\" },\n { value: \"outline\", label: \"Omlijnd\" },\n];\n\nexport interface BlockEditorProps {\n block: Record<string, unknown>;\n siteId: string;\n onChange: (next: Record<string, unknown>) => void;\n}\n\nfunction patch(block: Record<string, unknown>, onChange: BlockEditorProps[\"onChange\"], part: Record<string, unknown>) {\n onChange({ ...block, ...part });\n}\n\n/**\n * Beeldveld-knop: opent de mediabibliotheek-kiezer (zoek + klik om te kiezen, of upload nieuw).\n * Behoudt de `onUploaded(url, mediaId)`-signatuur zodat alle bestaande beeldvelden 'm meteen krijgen.\n */\ntype FaqItem = { q: string; a: string; aHtml?: string };\ntype PricingItem = {\n label: string;\n price: string;\n detail?: string;\n features?: string[];\n ctaLabel?: string;\n ctaHref?: string;\n highlighted?: boolean;\n billingPeriod?: string;\n};\ntype DownloadItem = { label: string; href: string; meta?: string };\n\nfunction HeroEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Regeltje boven de titel (optioneel)\" hint=\"bv. 'Hoveniers sinds 2001'\">\n <Input value={(block.eyebrow as string) ?? \"\"} onChange={(e) => patch(block, onChange, { eyebrow: e.target.value || undefined })} />\n </Field>\n <Field label=\"Titel\">\n <Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} />\n </Field>\n <Field label=\"Ondertitel\">\n <Input value={(block.subtitle as string) ?? \"\"} onChange={(e) => patch(block, onChange, { subtitle: e.target.value })} />\n </Field>\n <Field label=\"Weergave\" hint=\"Naast de foto is rustiger en altijd leesbaar; op de foto is groots.\">\n <Select\n value={(block.layout as string) ?? \"overlay\"}\n onValueChange={(v) => patch(block, onChange, { layout: v })}\n options={[\n { value: \"overlay\", label: \"Tekst op de foto\" },\n { value: \"naast\", label: \"Tekst naast de foto\" },\n ]}\n />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"left\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Gecentreerd\" },\n ]}\n />\n </Field>\n <Field label=\"Achtergrondafbeelding\">\n <ImageField siteId={siteId} value={(block.imageUrl as string)} onChange={(url) => patch(block, onChange, heroBeeldPatch(block, url))} />\n </Field>\n <Field label=\"Video-achtergrond (mp4/webm, optioneel)\" hint=\"Overschrijft de afbeelding. Houd hem kort en klein (onder 10 MB).\">\n <Input value={(block.videoUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { videoUrl: e.target.value })} />\n {videoAdresProbleem(block.videoUrl as string) && <p className=\"mt-1 text-xs text-amber-700\">{videoAdresProbleem(block.videoUrl as string)}</p>}\n </Field>\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Verticale uitlijning\">\n <Select\n value={(block.vAlign as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { vAlign: v })}\n options={[\n { value: \"top\", label: \"Boven\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"bottom\", label: \"Onder\" },\n ]}\n />\n </Field>\n <Field label=\"Hoogte\">\n <Select\n value={(block.minHeight as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { minHeight: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"sm\", label: \"Klein\" },\n { value: \"md\", label: \"Normaal\" },\n { value: \"lg\", label: \"Groot\" },\n { value: \"full\", label: \"Volledig scherm\" },\n ]}\n />\n </Field>\n <KleurVeld label=\"Overlay-kleur (optioneel)\" value={(block.overlayColor as string) ?? \"\"} placeholder=\"#000000\" onChange={(overlayColor) => patch(block, onChange, { overlayColor })} />\n <Field label=\"Overlay-dekking (%)\">\n <Input type=\"number\" value={String((block.overlayOpacity as number) ?? 0)} onChange={(e) => patch(block, onChange, { overlayOpacity: Math.max(0, Math.min(100, Number(e.target.value) || 0)) })} />\n </Field>\n <ToggleField label=\"Gradient-overlay (donker onderaan — leesbare tekst op foto's)\" checked={Boolean(block.overlayGradient)} onChange={(v) => patch(block, onChange, { overlayGradient: v })} />\n </div>\n <div>\n <span className=\"text-sm font-medium\">Vertrouwenspunten (optioneel)</span>\n <p className=\"mb-1 text-xs text-slate-500\">Korte punten met een vinkje onder de knoppen, bv. “Gratis offerte” of “Groenkeur-erkend”.</p>\n <ArrayEditor\n items={(block.trust as string[]) ?? []}\n onChange={(trust) => patch(block, onChange, { trust })}\n newItem={() => \"\"}\n addLabel=\"+ Punt\"\n // Een lijst van losse teksten: `update` voegt objecten samen, dus hier per index vervangen.\n renderRow={(t, _update, i) => (\n <Input\n value={t}\n maxLength={60}\n onChange={(e) => patch(block, onChange, { trust: ((block.trust as string[]) ?? []).map((x, j) => (j === i ? e.target.value : x)) })}\n />\n )}\n />\n </div>\n <div>\n <span className=\"text-sm font-medium\">Knoppen</span>\n <ArrayEditor\n items={(block.buttons as { label: string; href: string; variant: string }[]) ?? []}\n onChange={(buttons) => patch(block, onChange, { buttons })}\n newItem={() => ({ label: \"\", href: \"#\", variant: \"primary\" })}\n addLabel=\"+ Knop\"\n renderRow={(b, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-[1fr_auto] gap-2\">\n <Input value={b.label} placeholder=\"Tekst op de knop\" onChange={(e) => update({ label: e.target.value })} />\n <Select value={b.variant} onValueChange={(v) => update({ variant: v })} options={VARIANT_OPTIONS} />\n </div>\n <LinkVeld siteId={siteId} value={b.href} onChange={(href) => update({ href })} />\n </div>\n )}\n />\n </div>\n </div>\n );\n}\n\nfunction RichTextBlockEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n );\n}\n\nfunction ImageEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Afbeelding\">\n <ImageField siteId={siteId} value={(block.url as string)} onChange={(url) => patch(block, onChange, { url })} />\n </Field>\n <Field label=\"Alt-tekst (toegankelijkheid)\" hint=\"Beschrijf de afbeelding kort.\">\n <Input value={(block.alt as string) ?? \"\"} onChange={(e) => patch(block, onChange, { alt: e.target.value })} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Link (klikbaar)\">\n <LinkVeld siteId={siteId} value={(block.href as string) ?? \"\"} onChange={(href) => patch(block, onChange, { href })} leegTekst=\"Geen link (optioneel)\" />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"right\", label: \"Rechts\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"1:1\" },\n { value: \"3/2\", label: \"3:2\" },\n ]}\n />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FaqEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as FaqItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ToggleField label=\"Items standaard open tonen\" checked={block.defaultOpen === true} onChange={(v) => patch(block, onChange, { defaultOpen: v })} />\n {/* ArrayEditor levert toevoegen + verwijderen + herorden (↑/↓) — zo kun je de volgorde van\n vragen aanpassen, consistent met pricing/cards/team. */}\n <ArrayEditor<FaqItem>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ q: \"\", a: \"\" })}\n addLabel=\"+ Vraag toevoegen\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Field label=\"Vraag\">\n <Input value={it.q ?? \"\"} onChange={(e) => update({ q: e.target.value })} />\n </Field>\n {it.aHtml !== undefined ? (\n <Field label=\"Antwoord (met opmaak)\">\n <RichTextEditor siteId={siteId} value={it.aHtml} onChange={(html) => update({ aHtml: html })} />\n </Field>\n ) : (\n <Field label=\"Antwoord\">\n <Textarea rows={2} value={it.a ?? \"\"} onChange={(e) => update({ a: e.target.value })} />\n </Field>\n )}\n {it.aHtml === undefined ? (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: it.a ? `<p>${it.a}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n </div>\n ) : (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n </div>\n )}\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction PricingEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as PricingItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", price: \"\", features: [], highlighted: false })}\n addLabel=\"+ Pakket\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={it.price} placeholder=\"€ 00\" onChange={(e) => update({ price: e.target.value })} />\n <Input value={it.billingPeriod ?? \"\"} placeholder=\"/maand\" onChange={(e) => update({ billingPeriod: e.target.value })} />\n </div>\n <Input value={it.detail ?? \"\"} placeholder=\"Korte omschrijving\" onChange={(e) => update({ detail: e.target.value })} />\n <Field label=\"Features (één per regel)\">\n <Textarea\n rows={3}\n value={(it.features ?? []).join(\"\\n\")}\n onChange={(e) => update({ features: e.target.value.split(\"\\n\").map((s) => s.trim()).filter(Boolean) })}\n />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.ctaLabel ?? \"\"} placeholder=\"Knoptekst\" onChange={(e) => update({ ctaLabel: e.target.value })} />\n <LinkVeld siteId={siteId} value={it.ctaHref ?? \"\"} onChange={(ctaHref) => update({ ctaHref })} leegTekst=\"Knop zonder link\" />\n </div>\n <label className=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={Boolean(it.highlighted)} onChange={(e) => update({ highlighted: e.target.checked })} />\n Uitgelicht pakket\n </label>\n </div>\n )}\n />\n <Field label=\"Voetnoot (optioneel)\">\n <Input value={(block.note as string) ?? \"\"} onChange={(e) => patch(block, onChange, { note: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 items-end gap-2\">\n <Field label=\"Valuta\" hint=\"ISO-code voor zoekmachines, bv. EUR\">\n <Input value={(block.currency as string) ?? \"EUR\"} onChange={(e) => patch(block, onChange, { currency: e.target.value || \"EUR\" })} />\n </Field>\n <ToggleField label=\"Extra gegevens voor Google (aanbevolen)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n </div>\n );\n}\n\nfunction NewsListEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-3\">\n <Field label=\"Per pagina\" hint=\"0 = alles ineens; anders 'Meer laden'-knop\">\n <Input\n type=\"number\"\n value={String((block.pageSize as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { pageSize: Math.max(0, Math.min(24, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Aantal\">\n <Input\n type=\"number\"\n value={String((block.limit as number) ?? 6)}\n onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(50, Number(e.target.value) || 6)) })}\n />\n </Field>\n <Field label=\"Basispad\">\n <Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FormEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n }).catch((e) => console.warn(\"[xicms] lezen mislukt:\", (e as Error).message));\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n\n const current = (block.formId as string) ?? \"\";\n const missing = current && forms.length > 0 && !forms.some((f) => f.id === current);\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <Field label=\"Formulier\" hint=\"Maak een formulier aan onder het tabblad Formulieren.\">\n {forms.length > 0 ? (\n <Select\n value={current}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={current} onChange={(e) => patch(block, onChange, { formId: e.target.value })} placeholder=\"Formulier-id\" />\n )}\n </Field>\n {missing && (\n <p className=\"text-xs text-red-600\">Dit formulier-id bestaat niet (meer). Kies een bestaand formulier.</p>\n )}\n </div>\n );\n}\n\nfunction GalleryEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { url?: string; alt?: string; caption?: string; tag?: string }[]) ?? [];\n const set = (next: typeof items) => patch(block, onChange, { items: next });\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Kolommen\" hint=\"0 = volg module-instelling\">\n <Input\n type=\"number\"\n value={String((block.columns as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { columns: Math.max(0, Math.min(6, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Lightbox\">\n <Select\n value={(block.lightbox as string) ?? \"inherit\"}\n onValueChange={(v) => patch(block, onChange, { lightbox: v })}\n options={[\n { value: \"inherit\", label: \"Volg module-instelling\" },\n { value: \"on\", label: \"Aan\" },\n { value: \"off\", label: \"Uit\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"1/1\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"1/1\", label: \"Vierkant (1:1)\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"auto\", label: \"Eigen verhouding\" },\n ]}\n />\n </Field>\n </div>\n {items.map((it, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label={`Foto ${i + 1}`}>\n <ImageField siteId={siteId} value={it.url} onChange={(url) => set(items.map((x, j) => (j === i ? { ...x, url } : x)))} />\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Alt-tekst\">\n <Input value={it.alt ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, alt: e.target.value } : x)))} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={it.caption ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, caption: e.target.value } : x)))} />\n </Field>\n <Field label=\"Tag\" hint=\"Voor de filterbalk\">\n <Input value={it.tag ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, tag: e.target.value || undefined } : x)))} />\n </Field>\n </div>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(items.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...items, { url: \"\", alt: \"\" }])}>+ Foto toevoegen</Button>\n </div>\n <ToggleField label=\"Filterbalk op tags\" checked={Boolean(block.showFilter)} onChange={(v) => patch(block, onChange, { showFilter: v })} />\n </div>\n );\n}\n\ntype AgendaItem = { title: string; start: string; end?: string; location?: string; description?: string; url?: string; address?: string; imageUrl?: string; price?: string; status?: \"afgelast\" | \"verplaatst\" | \"online\"; herhaal?: \"wekelijks\" | \"tweewekelijks\" | \"maandelijks\"; herhaalTot?: string };\nfunction AgendaEditor({ block, siteId, onChange }: BlockEditorProps) {\n const events = (block.events as AgendaItem[]) ?? [];\n const set = (next: AgendaItem[]) => patch(block, onChange, { events: next });\n const zet = (i: number, p: Partial<AgendaItem>) => set(events.map((x, j) => (j === i ? { ...x, ...p } : x)));\n // 8.14: echte datum-tijdkiezers (de opslag blijft \"2026-07-01T19:30\"); een ISO-datum zonder tijd blijft werken.\n const naarInvoer = (v?: string) => (v ? (v.length === 10 ? `${v}T00:00` : v.slice(0, 16)) : \"\");\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ArrayEditor<AgendaItem>\n items={events}\n onChange={set}\n newItem={() => ({ title: \"\", start: \"\" })}\n addLabel=\"+ Activiteit\"\n emptyLabel=\"Nog geen activiteiten.\"\n renderRow={(ev, _u, i) => (\n <div className=\"grid gap-2\">\n <Field label=\"Titel\"><Input value={ev.title ?? \"\"} onChange={(e) => zet(i, { title: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Begint op\"><Input type=\"datetime-local\" value={naarInvoer(ev.start)} onChange={(e) => zet(i, { start: e.target.value })} /></Field>\n <Field label=\"Eindigt op (optioneel)\"><Input type=\"datetime-local\" value={naarInvoer(ev.end)} onChange={(e) => zet(i, { end: e.target.value || undefined })} /></Field>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Plaats\" hint=\"Nodig om in Google te verschijnen.\"><Input value={ev.location ?? \"\"} onChange={(e) => zet(i, { location: e.target.value || undefined })} /></Field>\n <Field label=\"Prijs (optioneel)\" hint=\"bv. Gratis of € 12,50\"><Input value={ev.price ?? \"\"} onChange={(e) => zet(i, { price: e.target.value || undefined })} /></Field>\n </div>\n <Field label=\"Omschrijving (optioneel)\"><Textarea rows={2} value={ev.description ?? \"\"} onChange={(e) => zet(i, { description: e.target.value || undefined })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Herhaalt\">\n <Select\n value={ev.herhaal ?? \"\"}\n onValueChange={(v) => zet(i, { herhaal: (v || undefined) as AgendaItem[\"herhaal\"] })}\n options={[\n { value: \"\", label: \"Eenmalig\" },\n { value: \"wekelijks\", label: \"Elke week\" },\n { value: \"tweewekelijks\", label: \"Om de week\" },\n { value: \"maandelijks\", label: \"Elke maand\" },\n ]}\n />\n </Field>\n {ev.herhaal && (\n <Field label=\"Tot en met (optioneel)\" hint=\"Leeg = een jaar vooruit.\">\n <Input type=\"date\" value={ev.herhaalTot ?? \"\"} onChange={(e) => zet(i, { herhaalTot: e.target.value || undefined })} />\n </Field>\n )}\n </div>\n <details className=\"rounded-md border border-slate-200 p-2 text-sm\">\n <summary className=\"cursor-pointer text-slate-600\">Meer: adres, foto, link, status</summary>\n <div className=\"mt-2 grid gap-2\">\n <Field label=\"Adres\" hint=\"Alleen als het niet op je eigen adres is (dat komt uit Instellingen → Bedrijf).\">\n <Input value={ev.address ?? \"\"} onChange={(e) => zet(i, { address: e.target.value || undefined })} />\n </Field>\n <Field label=\"Foto\"><ImageField siteId={siteId} value={ev.imageUrl} onChange={(imageUrl) => zet(i, { imageUrl })} /></Field>\n <Field label=\"Link (aanmelden, tickets, meer info)\"><LinkVeld siteId={siteId} value={ev.url} onChange={(url) => zet(i, { url: url || undefined })} leegTekst=\"Geen link (optioneel)\" /></Field>\n <Field label=\"Status\">\n <Select\n value={ev.status ?? \"\"}\n onValueChange={(v) => zet(i, { status: (v || undefined) as AgendaItem[\"status\"] })}\n options={[\n { value: \"\", label: \"Gaat gewoon door\" },\n { value: \"afgelast\", label: \"Afgelast\" },\n { value: \"verplaatst\", label: \"Verplaatst\" },\n { value: \"online\", label: \"Online\" },\n ]}\n />\n </Field>\n </div>\n </details>\n </div>\n )}\n />\n <ToggleField label=\"Voorbije activiteiten verbergen\" checked={block.hidePast !== false} onChange={(v) => patch(block, onChange, { hidePast: v })} />\n <ToggleField label=\"Laat Google de activiteiten herkennen\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n );\n}\n\nfunction HeadingField({ block, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n );\n}\nfunction ToggleField({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch checked={checked} onCheckedChange={onChange} />\n {label}\n </label>\n );\n}\n\nfunction FeatureEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n <Field label=\"Afbeelding\">\n <ImageField siteId={siteId} value={(block.imageUrl as string)} onChange={(url) => patch(block, onChange, { imageUrl: url })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Beeldpositie\">\n <Select value={(block.imagePosition as string) ?? \"left\"} onValueChange={(v) => patch(block, onChange, { imagePosition: v })} options={[{ value: \"left\", label: \"Links\" }, { value: \"right\", label: \"Rechts\" }]} />\n </Field>\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><LinkVeld siteId={siteId} value={(block.buttonHref as string) ?? \"\"} onChange={(buttonHref) => patch(block, onChange, { buttonHref })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction VideoEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Bron\">\n <Select value={(block.provider as string) ?? \"youtube\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"youtube\", label: \"YouTube\" }, { value: \"vimeo\", label: \"Vimeo\" }, { value: \"file\", label: \"MP4/WebM-URL\" }]} />\n </Field>\n <Field label=\"Link naar de video\" hint=\"Plak het adres van de video (YouTube of Vimeo).\"><Input value={(block.src as string) ?? \"\"} onChange={(e) => patch(block, onChange, { src: e.target.value })} /></Field>\n </div>\n <Field label=\"Bijschrift (optioneel)\"><Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} /></Field>\n <Field label=\"Voorvertoningsbeeld (optioneel)\">\n <ImageField siteId={siteId} value={(block.posterUrl as string)} onChange={(url) => patch(block, onChange, { posterUrl: url })} />\n </Field>\n <ToestemmingSchakelaar block={block} onChange={onChange} />\n <ToggleField label=\"Click-to-play (speler laadt pas na klik — sneller & privacyvriendelijker)\" checked={Boolean(block.facade)} onChange={(v) => patch(block, onChange, { facade: v })} />\n </div>\n );\n}\n\n/** Coördinaten als één \"lat, lng\"-veld: pas bij een compleet geldig paar wordt het blok bijgewerkt\n * (een half ingevuld paar zou het blok anders schema-ongeldig maken). */\nfunction GeoField({ value, onChange }: { value?: { lat: number; lng: number }; onChange: (geo?: { lat: number; lng: number }) => void }) {\n const [text, setText] = useState(value ? `${value.lat}, ${value.lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 52.0907, 5.1214 — toont het bedrijf op de juiste plek in Google\">\n <Input\n value={text}\n placeholder=\"52.0907, 5.1214\"\n onChange={(e) => {\n setText(e.target.value);\n const m = e.target.value.trim().match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) {\n if (e.target.value.trim() === \"\") onChange(undefined);\n return;\n }\n const lat = Number(m[1]);\n const lng = Number(m[2]);\n if (Math.abs(lat) <= 90 && Math.abs(lng) <= 180) onChange({ lat, lng });\n }}\n />\n </Field>\n );\n}\n\nfunction ContactEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n <Field label=\"Openingstijden\"><Input value={(block.hours as string) ?? \"\"} onChange={(e) => patch(block, onChange, { hours: e.target.value })} /></Field>\n <GeoField\n value={block.geo as { lat: number; lng: number } | undefined}\n onChange={(geo) => patch(block, onChange, { geo })}\n />\n <ToggleField label=\"Bedrijfsgegevens doorgeven aan Google (aanbevolen)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n );\n}\n\n/** Coördinaten-veld voor de kaart: zet `lat`/`lng` (los, want het map-schema gebruikt geen geo-object).\n * Pas bij een geldig paar wordt het blok bijgewerkt; leegmaken wist de coördinaten (terug naar de\n * adres/query-fallback). */\nfunction MapCoordField({ block, onChange }: BlockEditorProps) {\n const lat = block.lat as number | undefined;\n const lng = block.lng as number | undefined;\n const [text, setText] = useState(lat != null && lng != null ? `${lat}, ${lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 51.9958, 5.0924 — toont een echte kaart i.p.v. de wereldkaart. Coördinaten vind je door in openstreetmap.org rechts te klikken → 'Toon adres'.\">\n <Input\n value={text}\n placeholder=\"51.9958, 5.0924\"\n onChange={(e) => {\n setText(e.target.value);\n const t = e.target.value.trim();\n if (t === \"\") { patch(block, onChange, { lat: undefined, lng: undefined }); return; }\n const m = t.match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) return;\n const la = Number(m[1]);\n const ln = Number(m[2]);\n if (Math.abs(la) <= 90 && Math.abs(ln) <= 180) patch(block, onChange, { lat: la, lng: ln });\n }}\n />\n </Field>\n );\n}\n\nfunction MapEditor({ block, siteId, onChange }: BlockEditorProps) {\n const isGoogle = (block.provider as string) === \"google\";\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aanbieder\">\n <Select value={(block.provider as string) ?? \"osm\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"osm\", label: \"OpenStreetMap (coördinaten)\" }, { value: \"google\", label: \"Google (embed-URL)\" }]} />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 360)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(800, Number(e.target.value) || 360)) })} /></Field>\n </div>\n {isGoogle ? (\n <Field label=\"Link (om in te sluiten)\">\n <Input value={(block.query as string) ?? \"\"} onChange={(e) => patch(block, onChange, { query: e.target.value })} />\n </Field>\n ) : (\n <>\n <MapCoordField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Zoom (1–20)\"><Input type=\"number\" value={String((block.zoom as number) ?? 14)} onChange={(e) => patch(block, onChange, { zoom: Math.max(1, Math.min(20, Number(e.target.value) || 14)) })} /></Field>\n </>\n )}\n <ToestemmingSchakelaar block={block} onChange={onChange} />\n </div>\n );\n}\n\nfunction NewsletterEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n }).catch((e) => console.warn(\"[xicms] lezen mislukt:\", (e as Error).message));\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL (provider)\" hint=\"bv. Mailchimp form-action\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n {!block.actionUrl && (\n <Field label=\"Of: opslaan in XiCMS-formulier\" hint=\"Maak onder Formulieren een formulier met een 'email'-veld; aanmeldingen verschijnen daar.\">\n {forms.length > 0 ? (\n <Select\n value={(block.formId as string) ?? \"\"}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v || undefined })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={(block.formId as string) ?? \"\"} onChange={(e) => patch(block, onChange, { formId: e.target.value || undefined })} placeholder=\"formulier-id\" />\n )}\n </Field>\n )}\n <Field label=\"AVG-akkoordtekst\" hint=\"Leeg = geen checkbox; bv. 'Ik ga akkoord met de privacyverklaring'\">\n <Input value={(block.consentText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { consentText: e.target.value || undefined })} />\n </Field>\n </div>\n );\n}\n\nfunction BookingEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <p className=\"rounded-md bg-slate-50 p-2 text-xs text-slate-600\">\n Dit blok <strong>toont een bestaand afsprakensysteem</strong> in je pagina (een embed). XiCMS heeft\n geen eigen agenda. Maak een account bij een boekingsdienst — bv.{\" \"}\n <strong>Calendly</strong>, <strong>Salonized</strong>, <strong>Treatwell</strong>,{\" \"}\n <strong>Acuity</strong> of <strong>SimplyBook</strong> — kopieer daar de “embed/insluiten”-link\n en plak die hieronder.\n </p>\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Reserveersysteem\" hint=\"Kies je aanbieder of 'Eigen embed' voor een vrije link.\">\n <Select\n value={(block.provider as string) ?? \"custom\"}\n onValueChange={(v) => patch(block, onChange, { provider: v })}\n options={[\n { value: \"custom\", label: \"Eigen embed (vrije URL)\" },\n { value: \"calendly\", label: \"Calendly\" },\n { value: \"cal\", label: \"Cal.com\" },\n { value: \"formitable\", label: \"Formitable\" },\n { value: \"resengo\", label: \"Resengo\" },\n { value: \"thefork\", label: \"TheFork\" },\n { value: \"treatwell\", label: \"Treatwell\" },\n { value: \"salonized\", label: \"Salonized\" },\n { value: \"tablebooker\", label: \"Tablebooker\" },\n { value: \"bookingkit\", label: \"bookingkit\" },\n { value: \"lodgify\", label: \"Lodgify (verhuur)\" },\n { value: \"bookingexperts\", label: \"Booking Experts (verhuur)\" },\n { value: \"tommy\", label: \"Tommy (verhuur)\" },\n { value: \"bookingmotor\", label: \"Bookingmotor (verhuur)\" },\n ]}\n />\n </Field>\n <Field label=\"Link of accountnaam\" hint=\"De volledige link naar je boekingspagina, of alleen je accountnaam.\">\n <Input value={(block.embedUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { embedUrl: e.target.value })} placeholder=\"https://calendly.com/jouw-naam/intake — of: jouw-naam/intake\" />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 630)} onChange={(e) => patch(block, onChange, { height: Math.max(300, Math.min(1200, Number(e.target.value) || 630)) })} /></Field>\n <ToestemmingSchakelaar block={block} onChange={onChange} />\n </div>\n );\n}\n\nfunction AccordionEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { title: string; body: string; bodyHtml?: string }[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <ArrayEditor<{ title: string; body: string; bodyHtml?: string }>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ title: \"\", body: \"\" })}\n addLabel=\"+ Paneel\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n {it.bodyHtml !== undefined ? (\n <RichTextEditor siteId={siteId} value={it.bodyHtml} onChange={(html) => update({ bodyHtml: html })} />\n ) : (\n <Textarea rows={2} value={it.body} placeholder=\"Inhoud\" onChange={(e) => update({ body: e.target.value })} />\n )}\n <div>\n {it.bodyHtml === undefined ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: it.body ? `<p>${it.body}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n ) : (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n )}\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Meerdere tegelijk open\" checked={Boolean(block.multiple)} onChange={(v) => patch(block, onChange, { multiple: v })} />\n </div>\n );\n}\n\nfunction EmbedEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"URL (iframe)\"><Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Titel (toegankelijkheid)\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 420)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(1200, Number(e.target.value) || 420)) })} /></Field>\n </div>\n <Field label=\"Beeldverhouding\" hint=\"'Vaste hoogte' gebruikt het hoogte-veld\">\n <Select\n value={(block.aspectRatio as string) ?? \"fixed\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"fixed\", label: \"Vaste hoogte\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"Vierkant\" },\n ]}\n />\n </Field>\n <ToestemmingSchakelaar block={block} onChange={onChange} />\n </div>\n );\n}\n\n/* ════════════════════ Indeling: geneste blok-lijsten ════════════════════ */\n\nfunction nestKey() {\n return (globalThis.crypto?.randomUUID?.() ?? `b${Date.now()}${Math.random()}`).slice(0, 12);\n}\n\n/**\n * Beheert een geneste blok-lijst (kolommen / zijbalk / tab): blok toevoegen, sorteren, verwijderen,\n * en per blok zijn eigen velden bewerken (recursief via dezelfde editor-registry). Zo kun je ook in\n * een zijbalk gewoon widgets plaatsen en instellen, zonder JSON.\n */\nexport function NestedBlocksEditor({\n blocks,\n siteId,\n onChange,\n addLabel = \"+ Blok toevoegen…\",\n}: {\n blocks: Record<string, unknown>[];\n siteId: string;\n onChange: (next: Record<string, unknown>[]) => void;\n addLabel?: string;\n}) {\n const registry = useRegistry();\n const [openKey, setOpenKey] = useState<string | null>(null);\n const list = blocks ?? [];\n const addOptions = [...registry.values()].map((d) => ({ value: d.type, label: `${d.icon ?? \"▫\"} ${d.label}` }));\n\n function add(type: string) {\n const def = registry.get(type);\n const base = def?.defaults?.() ?? {};\n const b = { _key: nestKey(), _type: type, ...base } as Record<string, unknown>;\n onChange([...list, b]);\n setOpenKey(b._key as string);\n }\n function move(i: number, dir: -1 | 1) {\n const j = i + dir;\n if (j < 0 || j >= list.length) return;\n const copy = [...list];\n [copy[i], copy[j]] = [copy[j], copy[i]];\n onChange(copy);\n }\n\n return (\n <div className=\"grid gap-2\">\n {list.map((b, i) => {\n const type = b._type as string;\n const def = registry.get(type);\n const Editor = (def?.Editor as ComponentType<BlockEditorProps> | undefined) ?? builtinBlockEditors[type] ?? GenericEditor;\n const open = openKey === (b._key as string);\n return (\n <div key={(b._key as string) ?? i} className=\"rounded-lg border border-slate-200 bg-white\">\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <button\n type=\"button\"\n className=\"flex-1 truncate text-left text-sm\"\n onClick={() => setOpenKey(open ? null : (b._key as string))}\n >\n <span className=\"mr-1\">{def?.icon ?? \"▫\"}</span>\n {def?.label ?? type}\n </button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, -1)} aria-label=\"Omhoog\">↑</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, 1)} aria-label=\"Omlaag\">↓</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => onChange(list.filter((_, j) => j !== i))} aria-label=\"Verwijderen\">🗑</Button>\n </div>\n {open && (\n <div className=\"border-t border-slate-100 p-2\">\n <Editor block={b} siteId={siteId} onChange={(next) => onChange(list.map((x, j) => (j === i ? next : x)))} />\n </div>\n )}\n </div>\n );\n })}\n {list.length === 0 && <p className=\"text-xs text-slate-500\">Nog geen blokken.</p>}\n <Select value=\"\" placeholder={addLabel} onValueChange={(v) => v && add(v)} options={addOptions} />\n </div>\n );\n}\n\nfunction ColumnsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const cols = (block.columns as { blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof cols) => patch(block, onChange, { columns: next });\n return (\n <div className=\"grid gap-3\">\n {cols.map((c, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium text-slate-500\">Kolom {i + 1}</span>\n {cols.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(cols.filter((_, j) => j !== i))}>Kolom weg</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={c.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(cols.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {cols.length < 4 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...cols, { blocks: [] }])}>+ Kolom toevoegen</Button>\n )}\n </div>\n );\n}\n\nfunction WithSidebarEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Zijbalk\">\n <Select\n value={(block.side as string) ?? \"right\"}\n onValueChange={(v) => patch(block, onChange, { side: v })}\n options={[{ value: \"right\", label: \"Rechts\" }, { value: \"left\", label: \"Links\" }]}\n />\n </Field>\n <Field label=\"Breedte\">\n <Select\n value={(block.sidebarWidth as string) ?? \"md\"}\n onValueChange={(v) => patch(block, onChange, { sidebarWidth: v })}\n options={[{ value: \"sm\", label: \"Smal\" }, { value: \"md\", label: \"Normaal\" }, { value: \"lg\", label: \"Breed\" }]}\n />\n </Field>\n <Field label=\"Meescrollen\">\n <Select\n value={block.sticky === false ? \"no\" : \"yes\"}\n onValueChange={(v) => patch(block, onChange, { sticky: v === \"yes\" })}\n options={[{ value: \"yes\", label: \"Sticky\" }, { value: \"no\", label: \"Nee\" }]}\n />\n </Field>\n </div>\n <Field label=\"Hoofdinhoud\">\n <NestedBlocksEditor\n blocks={(block.main as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { main: next })}\n />\n </Field>\n <Field label=\"Zijbalk (widgets)\" hint=\"Plaats hier compacte widgets: laatste nieuws, agenda, contact…\">\n <NestedBlocksEditor\n blocks={(block.aside as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { aside: next })}\n addLabel=\"+ Widget/blok toevoegen…\"\n />\n </Field>\n </div>\n );\n}\n\nfunction TabsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const tabs = (block.tabs as { label: string; blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof tabs) => patch(block, onChange, { tabs: next });\n return (\n <div className=\"grid gap-3\">\n {tabs.map((t, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={t.label} placeholder={`Tab ${i + 1}`} onChange={(e) => set(tabs.map((x, j) => (j === i ? { ...x, label: e.target.value } : x)))} />\n {tabs.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(tabs.filter((_, j) => j !== i))}>🗑</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={t.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(tabs.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {tabs.length < 10 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...tabs, { label: `Tab ${tabs.length + 1}`, blocks: [] }])}>+ Tab toevoegen</Button>\n )}\n </div>\n );\n}\n\n/* ════════════════════ Nieuwe modules ════════════════════ */\n\ntype CardItem = { icon?: string; imageUrl?: string; title: string; text?: string; href?: string; linkLabel?: string; featured?: boolean };\nfunction CountdownEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n <ToggleField label=\"Labels tonen (dagen/uur/min/sec)\" checked={block.showLabels !== false} onChange={(v) => patch(block, onChange, { showLabels: v })} />\n <Field label=\"Na afloop\">\n <Select\n value={(block.onExpire as string) ?? \"message\"}\n onValueChange={(v) => patch(block, onChange, { onExpire: v })}\n options={[\n { value: \"message\", label: \"Melding tonen\" },\n { value: \"hide\", label: \"Blok verbergen\" },\n ]}\n />\n </Field>\n </div>\n );\n}\n\ntype Slide = { imageUrl?: string; alt?: string; caption?: string; href?: string };\nfunction SliderEditor({ block, siteId, onChange }: BlockEditorProps) {\n const slides = (block.slides as Slide[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"16/9\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"1/1\", label: \"Vierkant\" },\n { value: \"21/9\", label: \"Breedbeeld\" },\n ]}\n />\n </Field>\n <Field label=\"Interval (sec)\">\n <Input type=\"number\" value={String((block.interval as number) ?? 5)} onChange={(e) => patch(block, onChange, { interval: Math.max(2, Math.min(20, Number(e.target.value) || 5)) })} />\n </Field>\n </div>\n <div className=\"flex flex-wrap gap-4\">\n <ToggleField label=\"Automatisch afspelen\" checked={Boolean(block.autoplay)} onChange={(v) => patch(block, onChange, { autoplay: v })} />\n <ToggleField label=\"Stippen\" checked={block.showDots !== false} onChange={(v) => patch(block, onChange, { showDots: v })} />\n <ToggleField label=\"Pijlen\" checked={block.showArrows !== false} onChange={(v) => patch(block, onChange, { showArrows: v })} />\n </div>\n <ArrayEditor\n items={slides}\n onChange={(next) => patch(block, onChange, { slides: next })}\n newItem={() => ({ imageUrl: \"\", alt: \"\", caption: \"\" })}\n addLabel=\"+ Slide\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <Field label={`Afbeelding ${i + 1}`}>\n <ImageField siteId={siteId} value={it.imageUrl} onChange={(url) => update({ imageUrl: url })} />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n <LinkVeld siteId={siteId} value={it.href ?? \"\"} onChange={(href) => update({ href })} leegTekst=\"Geen link (optioneel)\" />\n </div>\n <Input value={it.caption ?? \"\"} placeholder=\"Bijschrift (optioneel)\" onChange={(e) => update({ caption: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\n/* ════════════════════ Widget-editors ════════════════════ */\n\nfunction NewsWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <Field label=\"Basispad\"><Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} /></Field>\n </div>\n <ToggleField label=\"Miniaturen tonen\" checked={Boolean(block.showImages)} onChange={(v) => patch(block, onChange, { showImages: v })} />\n </div>\n );\n}\n\ntype WEvent = { title: string; start: string; end?: string; location?: string; url?: string };\nfunction AgendaWidgetEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as WEvent[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={events}\n onChange={(next) => patch(block, onChange, { events: next })}\n newItem={(): WEvent => ({ title: \"\", start: \"\" })}\n addLabel=\"+ Evenement\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.start} placeholder=\"2026-07-01T19:30\" onChange={(e) => update({ start: e.target.value })} />\n <Input value={it.location ?? \"\"} placeholder=\"Locatie\" onChange={(e) => update({ location: e.target.value })} />\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Verlopen evenementen verbergen\" checked={block.hidePast !== false} onChange={(v) => patch(block, onChange, { hidePast: v })} />\n </div>\n );\n}\n\ntype Row = { day: string; hours: string };\nfunction OpeningHoursWidgetEditor({ block, onChange }: BlockEditorProps) {\n const rows = (block.rows as Row[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={rows}\n onChange={(next) => patch(block, onChange, { rows: next })}\n newItem={() => ({ day: \"\", hours: \"\" })}\n addLabel=\"+ Regel\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.day} placeholder=\"Maandag\" onChange={(e) => update({ day: e.target.value })} />\n <Input value={it.hours} placeholder=\"09:00 – 17:00\" onChange={(e) => update({ hours: e.target.value })} />\n </div>\n )}\n />\n <ToggleField label=\"Vandaag markeren\" checked={block.highlightToday !== false} onChange={(v) => patch(block, onChange, { highlightToday: v })} />\n </div>\n );\n}\n\nfunction ContactWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\ntype SocialItem = { platform: string; href: string };\nfunction SocialWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as SocialItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ platform: \"\", href: \"\" })}\n addLabel=\"+ Link\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.platform} placeholder=\"Instagram\" onChange={(e) => update({ platform: e.target.value })} />\n <Input value={it.href} placeholder=\"https://…\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction NewsletterWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"Aanmelden\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction CtaWidgetEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Titel\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><LinkVeld siteId={siteId} value={(block.buttonHref as string) ?? \"\"} onChange={(buttonHref) => patch(block, onChange, { buttonHref })} /></Field>\n </div>\n <KleurVeld label=\"Achtergrondkleur (optioneel)\" value={(block.backgroundColor as string) ?? \"\"} placeholder=\"#f5f5f5\" onChange={(backgroundColor) => patch(block, onChange, { backgroundColor })} />\n </div>\n );\n}\n\ntype GalleryWItem = { url?: string; alt?: string };\nfunction GalleryWidgetEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as GalleryWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Kolommen\"><Input type=\"number\" value={String((block.columns as number) ?? 3)} onChange={(e) => patch(block, onChange, { columns: Math.max(2, Math.min(4, Number(e.target.value) || 3)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ url: \"\", alt: \"\" })}\n addLabel=\"+ Foto\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <ImageField siteId={siteId} value={it.url} onChange={(url) => update({ url })} />\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\ntype TWItem = { quote: string; author: string; rating?: number };\nfunction TestimonialsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as TWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={(): TWItem => ({ quote: \"\", author: \"\" })}\n addLabel=\"+ Review\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Textarea rows={2} value={it.quote} placeholder=\"Citaat\" onChange={(e) => update({ quote: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.author} placeholder=\"Naam\" onChange={(e) => update({ author: e.target.value })} />\n <Input type=\"number\" value={String(it.rating ?? \"\")} placeholder=\"Sterren 1-5\" onChange={(e) => update({ rating: e.target.value ? Math.max(1, Math.min(5, Number(e.target.value))) : undefined })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\ntype CardWItem = { icon?: string; title: string; text?: string; href?: string };\nfunction CardsWidgetEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as CardWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ icon: \"\", title: \"\", text: \"\" })}\n addLabel=\"+ Item\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.icon ?? \"\"} placeholder=\"Icoon (emoji)\" onChange={(e) => update({ icon: e.target.value })} />\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n </div>\n <Input value={it.text ?? \"\"} placeholder=\"Korte tekst\" onChange={(e) => update({ text: e.target.value })} />\n <LinkVeld siteId={siteId} value={it.href ?? \"\"} onChange={(href) => update({ href })} leegTekst=\"Geen link (optioneel)\" />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction DownloadsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as DownloadItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", href: \"\", meta: \"\" })}\n addLabel=\"+ Document\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.href} placeholder=\"URL\" onChange={(e) => update({ href: e.target.value })} />\n <Input value={it.meta ?? \"\"} placeholder=\"PDF · 1,2 MB\" onChange={(e) => update({ meta: e.target.value })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction CountdownWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n </div>\n );\n}\n\n// Fallback-editor voor bloktypes zonder eigen `Editor` — sinds 5.0 aangedreven door de Field-IR\n// (repeaters/groepen/conditionele velden als echte UI). Zie ./GenericEditor.tsx (import bovenaan).\n\n/** Ingebouwde editors per blocktype. Klant-blokken kunnen hun eigen `Editor` meegeven. */\nexport const builtinBlockEditors: Record<string, ComponentType<BlockEditorProps>> = {\n hero: HeroEditor,\n richText: RichTextBlockEditor,\n image: ImageEditor,\n faq: FaqEditor,\n pricing: PricingEditor,\n newsList: NewsListEditor,\n form: FormEditor,\n gallery: GalleryEditor,\n agenda: AgendaEditor,\n feature: FeatureEditor,\n video: VideoEditor,\n contact: ContactEditor,\n map: MapEditor,\n newsletter: NewsletterEditor,\n booking: BookingEditor,\n accordion: AccordionEditor,\n embed: EmbedEditor,\n symbolRef: SymbolRefEditor,\n // Indeling\n columns: ColumnsEditor,\n withSidebar: WithSidebarEditor,\n tabs: TabsEditor,\n // Nieuwe modules\n countdown: CountdownEditor,\n slider: SliderEditor,\n // Widgets\n newsWidget: NewsWidgetEditor,\n agendaWidget: AgendaWidgetEditor,\n openingHoursWidget: OpeningHoursWidgetEditor,\n contactWidget: ContactWidgetEditor,\n socialWidget: SocialWidgetEditor,\n newsletterWidget: NewsletterWidgetEditor,\n ctaWidget: CtaWidgetEditor,\n galleryWidget: GalleryWidgetEditor,\n testimonialsWidget: TestimonialsWidgetEditor,\n cardsWidget: CardsWidgetEditor,\n downloadsWidget: DownloadsWidgetEditor,\n countdownWidget: CountdownWidgetEditor,\n};\n\nexport { GenericEditor };\n\n/**\n * \"Pas tonen na cookie-toestemming\" (8.10): alleen voor de superadmin. Uitzetten laadt YouTube,\n * Google Maps of een boekingswidget zonder toestemming — een AVG-overtreding waarvan een klant niet\n * weet dat hij hem maakt. Voor de klant is het geen keuze maar een gegeven; daarom tonen we de\n * stand wel, als uitleg, maar niet de schakelaar.\n */\nfunction ToestemmingSchakelaar({ block, onChange }: { block: Record<string, unknown>; onChange: (b: Record<string, unknown>) => void }) {\n const superadmin = useIsSuperadmin();\n if (!superadmin) {\n return block.consentGated === false ? (\n <p className=\"text-xs text-amber-700\">Dit blok laadt zonder cookie-toestemming (ingesteld door Xi Webdesign).</p>\n ) : (\n <p className=\"text-xs text-slate-500\">Bezoekers zien dit pas na hun cookie-toestemming — zo blijft de site AVG-proof.</p>\n );\n }\n return <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />;\n}\n"],"mappings":"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","names":[]}
|