@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
|
@@ -6,18 +6,24 @@ import {
|
|
|
6
6
|
collection,
|
|
7
7
|
deleteDoc,
|
|
8
8
|
doc,
|
|
9
|
+
getDoc,
|
|
9
10
|
onSnapshot,
|
|
10
11
|
orderBy,
|
|
11
12
|
query,
|
|
12
13
|
setDoc
|
|
13
14
|
} from "firebase/firestore";
|
|
14
15
|
import { getDb } from "../../firebase/client.js";
|
|
15
|
-
import { FormSchema } from "../../schema/forms.js";
|
|
16
|
-
import { Button, Card, Field, Input, Badge } from "../ui/primitives.js";
|
|
16
|
+
import { FormMailSchema, FormSchema } from "../../schema/forms.js";
|
|
17
|
+
import { Button, Card, Field, Input, Badge, LegeStaat } from "../ui/primitives.js";
|
|
17
18
|
import { Select } from "../ui/select.js";
|
|
18
19
|
import { Switch } from "../ui/switch.js";
|
|
19
20
|
import { useToast } from "../ui/toast.js";
|
|
20
21
|
import { useConfirm } from "../ui/ConfirmDialog.js";
|
|
22
|
+
import { LaadStaat } from "../ui/LaadStaat.js";
|
|
23
|
+
import { isDemoActive } from "../../demo/demoStore.js";
|
|
24
|
+
import { neemOpenVerzoek } from "../navContext.js";
|
|
25
|
+
import { useScrollNaarDetail } from "../lib/scrollNaarDetail.js";
|
|
26
|
+
import { heeftOnopgeslagen, ONOPGESLAGEN_VRAAG, useOnopgeslagen, vergeetOnopgeslagen } from "../lib/onopgeslagen.js";
|
|
21
27
|
import { MailTemplates } from "../settings/MailTemplates.js";
|
|
22
28
|
import { FORM_TEMPLATE_KEYS } from "../../schema/mail.js";
|
|
23
29
|
import { callable } from "../../firebase/functionsClient.js";
|
|
@@ -25,6 +31,8 @@ import { getFirebaseApp } from "../../firebase/client.js";
|
|
|
25
31
|
import { useAuth } from "../../auth/AuthProvider.js";
|
|
26
32
|
import { canManageSite } from "../../auth/roles.js";
|
|
27
33
|
import { formulierenGezienSinds, markeerFormulierGezien } from "./gezien.js";
|
|
34
|
+
import { zodFoutTekst } from "../lib/zodFout.js";
|
|
35
|
+
import { laadFormulierGebruik } from "../lib/paginaGebruik.js";
|
|
28
36
|
const FIELD_TYPES = [
|
|
29
37
|
{ value: "text", label: "Tekst" },
|
|
30
38
|
{ value: "email", label: "E-mail" },
|
|
@@ -34,21 +42,50 @@ const FIELD_TYPES = [
|
|
|
34
42
|
{ value: "radio", label: "Keuzerondjes" },
|
|
35
43
|
{ value: "checkbox", label: "Vinkje" },
|
|
36
44
|
{ value: "date", label: "Datum" },
|
|
37
|
-
{ value: "number", label: "Getal" }
|
|
45
|
+
{ value: "number", label: "Getal" },
|
|
46
|
+
{ value: "dateRange", label: "Periode (van \u2013 tot)" },
|
|
47
|
+
{ value: "hidden", label: "Verborgen (vaste waarde of uit de link)" }
|
|
38
48
|
];
|
|
39
49
|
function FormsPanel({ siteId }) {
|
|
40
50
|
const { toast } = useToast();
|
|
41
51
|
const [forms, setForms] = useState([]);
|
|
42
|
-
const [selected, setSelected] = useState(
|
|
52
|
+
const [selected, setSelected] = useState(() => neemOpenVerzoek("forms"));
|
|
53
|
+
const [geladen, setGeladen] = useState(false);
|
|
54
|
+
const [laadFout, setLaadFout] = useState(null);
|
|
55
|
+
const [poging, setPoging] = useState(0);
|
|
43
56
|
useEffect(() => {
|
|
44
57
|
const db = getDb();
|
|
45
|
-
if (!db)
|
|
58
|
+
if (!db) {
|
|
59
|
+
setGeladen(true);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
46
62
|
return onSnapshot(
|
|
47
63
|
collection(db, "sites", siteId, "forms"),
|
|
48
|
-
(snap) =>
|
|
64
|
+
(snap) => {
|
|
65
|
+
setForms(snap.docs.map((d) => ({ id: d.id, ...d.data() })));
|
|
66
|
+
setGeladen(true);
|
|
67
|
+
setLaadFout(null);
|
|
68
|
+
},
|
|
69
|
+
(e) => {
|
|
70
|
+
if (isDemoActive()) {
|
|
71
|
+
setGeladen(true);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setLaadFout(e.message);
|
|
75
|
+
}
|
|
49
76
|
);
|
|
50
|
-
}, [siteId]);
|
|
77
|
+
}, [siteId, poging]);
|
|
51
78
|
const current = forms.find((f) => f.id === selected) ?? null;
|
|
79
|
+
const detailRef = useScrollNaarDetail(selected);
|
|
80
|
+
const confirmLijst = useConfirm();
|
|
81
|
+
async function kies(id) {
|
|
82
|
+
if (id === selected) return;
|
|
83
|
+
if (heeftOnopgeslagen()) {
|
|
84
|
+
if (!await confirmLijst(ONOPGESLAGEN_VRAAG)) return;
|
|
85
|
+
vergeetOnopgeslagen();
|
|
86
|
+
}
|
|
87
|
+
setSelected(id);
|
|
88
|
+
}
|
|
52
89
|
async function createForm() {
|
|
53
90
|
const db = getDb();
|
|
54
91
|
if (!db) return;
|
|
@@ -67,25 +104,22 @@ function FormsPanel({ siteId }) {
|
|
|
67
104
|
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold", children: "Formulieren" }),
|
|
68
105
|
/* @__PURE__ */ jsx(Button, { size: "sm", onClick: createForm, children: "+ Nieuw" })
|
|
69
106
|
] }),
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
-
|
|
107
|
+
/* @__PURE__ */ jsx(LaadStaat, { laden: !geladen, fout: laadFout, wat: "formulieren", opnieuw: () => {
|
|
108
|
+
setLaadFout(null);
|
|
109
|
+
setPoging((n) => n + 1);
|
|
110
|
+
}, children: /* @__PURE__ */ jsxs("ul", { className: "grid gap-1", children: [
|
|
111
|
+
forms.map((f) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
72
112
|
"button",
|
|
73
113
|
{
|
|
74
|
-
onClick: () =>
|
|
114
|
+
onClick: () => void kies(f.id),
|
|
75
115
|
className: `w-full truncate rounded-lg px-3 py-2 text-left text-sm ${f.id === selected ? "bg-brand-50 text-brand-700" : "hover:bg-slate-100"}`,
|
|
76
|
-
children:
|
|
77
|
-
f.name,
|
|
78
|
-
/* @__PURE__ */ jsxs("span", { className: "ml-1 text-xs text-slate-400", children: [
|
|
79
|
-
"#",
|
|
80
|
-
f.id.slice(0, 5)
|
|
81
|
-
] })
|
|
82
|
-
]
|
|
116
|
+
children: f.name
|
|
83
117
|
}
|
|
84
118
|
) }, f.id)),
|
|
85
119
|
forms.length === 0 && /* @__PURE__ */ jsx("li", { className: "px-3 py-2 text-sm text-slate-500", children: "Nog geen formulieren." })
|
|
86
|
-
] })
|
|
120
|
+
] }) })
|
|
87
121
|
] }),
|
|
88
|
-
current ? /* @__PURE__ */ jsx(FormDetail, { siteId, form: current, onDeleted: () => setSelected(null), onToast: toast }, current.id) : /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx("p", { className: "text-sm text-slate-500", children: "Selecteer of maak een formulier." }) })
|
|
122
|
+
/* @__PURE__ */ jsx("div", { ref: detailRef, className: "scroll-mt-24 min-w-0", children: current ? /* @__PURE__ */ jsx(FormDetail, { siteId, form: current, onDeleted: () => setSelected(null), onToast: toast }, current.id) : /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx("p", { className: "text-sm text-slate-500", children: "Selecteer of maak een formulier." }) }) })
|
|
89
123
|
] }),
|
|
90
124
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
91
125
|
/* @__PURE__ */ jsx("h3", { className: "mb-1 text-base font-semibold", children: "E-mailteksten voor formulieren" }),
|
|
@@ -98,6 +132,26 @@ function FormsPanel({ siteId }) {
|
|
|
98
132
|
] })
|
|
99
133
|
] });
|
|
100
134
|
}
|
|
135
|
+
function sleutelUitLabel(label, bezet) {
|
|
136
|
+
const basis = label.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "").slice(0, 40);
|
|
137
|
+
const start = /^[a-z]/.test(basis) ? basis : `veld_${basis}`.replace(/_+$/, "") || "veld";
|
|
138
|
+
if (!bezet.has(start)) return start;
|
|
139
|
+
for (let n = 2; ; n++) if (!bezet.has(`${start}_${n}`)) return `${start}_${n}`;
|
|
140
|
+
}
|
|
141
|
+
function OptiesEditor({ opties, onChange }) {
|
|
142
|
+
return /* @__PURE__ */ jsx(Field, { label: "Keuzes", hint: "Elke keuze op een eigen regel; volgorde = volgorde op de site.", children: /* @__PURE__ */ jsxs("div", { className: "grid gap-2", children: [
|
|
143
|
+
opties.map((o, j) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
144
|
+
/* @__PURE__ */ jsx(Input, { "aria-label": `Keuze ${j + 1}`, value: o, onChange: (e) => onChange(opties.map((x, k) => k === j ? e.target.value : x)) }),
|
|
145
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "sm", "aria-label": "Keuze omhoog", disabled: j === 0, onClick: () => {
|
|
146
|
+
const n = [...opties];
|
|
147
|
+
[n[j - 1], n[j]] = [n[j], n[j - 1]];
|
|
148
|
+
onChange(n);
|
|
149
|
+
}, children: "\u2191" }),
|
|
150
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "dangerGhost", size: "sm", "aria-label": `Keuze "${o}" verwijderen`, onClick: () => onChange(opties.filter((_, k) => k !== j)), children: "\u{1F5D1}" })
|
|
151
|
+
] }, j)),
|
|
152
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => onChange([...opties, `Keuze ${opties.length + 1}`]), children: "+ Keuze" }) })
|
|
153
|
+
] }) });
|
|
154
|
+
}
|
|
101
155
|
let veldTeller = 0;
|
|
102
156
|
const nieuweVeldId = () => `v${Date.now().toString(36)}${(veldTeller++).toString(36)}`;
|
|
103
157
|
function FormDetail({
|
|
@@ -107,7 +161,27 @@ function FormDetail({
|
|
|
107
161
|
onToast
|
|
108
162
|
}) {
|
|
109
163
|
const [def, setDef] = useState(form);
|
|
164
|
+
const [basis, setBasis] = useState(form);
|
|
165
|
+
const [busy, setBusy] = useState(false);
|
|
166
|
+
const vuil = JSON.stringify(def) !== JSON.stringify(basis);
|
|
167
|
+
useOnopgeslagen(vuil);
|
|
110
168
|
const confirm = useConfirm();
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
const db = getDb();
|
|
171
|
+
if (!db) return;
|
|
172
|
+
let actief = true;
|
|
173
|
+
void getDoc(doc(db, "sites", siteId, "forms", form.id, "private", "mail")).then((snap) => {
|
|
174
|
+
if (!actief || !snap.exists()) return;
|
|
175
|
+
const mail = FormMailSchema.safeParse(snap.data());
|
|
176
|
+
if (!mail.success) return;
|
|
177
|
+
const metMail = (d) => ({ ...d, notifyTo: mail.data.notifyTo, confirmSubmitter: mail.data.confirmSubmitter });
|
|
178
|
+
setDef(metMail);
|
|
179
|
+
setBasis(metMail);
|
|
180
|
+
}).catch((e) => console.warn("[xicms] mailinstellingen formulier niet geladen:", e));
|
|
181
|
+
return () => {
|
|
182
|
+
actief = false;
|
|
183
|
+
};
|
|
184
|
+
}, [siteId, form.id]);
|
|
111
185
|
const [veldIds, setVeldIds] = useState(() => form.fields.map(() => nieuweVeldId()));
|
|
112
186
|
function zetVelden(fields, ids) {
|
|
113
187
|
setDef((d) => ({ ...d, fields }));
|
|
@@ -127,19 +201,68 @@ function FormDetail({
|
|
|
127
201
|
if (!db) return;
|
|
128
202
|
const parsed = FormSchema.safeParse(def);
|
|
129
203
|
if (!parsed.success) {
|
|
130
|
-
onToast({ title: "Ongeldig formulier", description: parsed.error.issues[0]
|
|
204
|
+
onToast({ title: "Ongeldig formulier", description: zodFoutTekst(parsed.error.issues[0]), tone: "error" });
|
|
131
205
|
return;
|
|
132
206
|
}
|
|
133
|
-
|
|
134
|
-
|
|
207
|
+
const { notifyTo, confirmSubmitter, ...publiek } = parsed.data;
|
|
208
|
+
const mail = Object.fromEntries(
|
|
209
|
+
Object.entries({ notifyTo: notifyTo?.trim() || void 0, confirmSubmitter: confirmSubmitter || void 0 }).filter(([, v]) => v !== void 0)
|
|
210
|
+
);
|
|
211
|
+
setBusy(true);
|
|
212
|
+
try {
|
|
213
|
+
await setDoc(doc(db, "sites", siteId, "forms", form.id), publiek);
|
|
214
|
+
await setDoc(doc(db, "sites", siteId, "forms", form.id, "private", "mail"), mail);
|
|
215
|
+
setBasis(def);
|
|
216
|
+
onToast({ title: "Opgeslagen", tone: "success" });
|
|
217
|
+
} catch (e) {
|
|
218
|
+
onToast({ title: "Opslaan mislukt", description: e instanceof Error ? e.message : void 0, tone: "error" });
|
|
219
|
+
} finally {
|
|
220
|
+
setBusy(false);
|
|
221
|
+
}
|
|
135
222
|
}
|
|
136
223
|
async function remove() {
|
|
137
224
|
const db = getDb();
|
|
138
225
|
if (!db) return;
|
|
139
|
-
const
|
|
226
|
+
const gebruik = await laadFormulierGebruik(siteId, form.id);
|
|
227
|
+
const opPaginas = gebruik && gebruik.length > 0 ? ` Let op: het staat op ${gebruik.length === 1 ? `de pagina \u201C${gebruik[0]}\u201D` : `${gebruik.length} pagina's (${gebruik.slice(0, 3).map((t) => `\u201C${t}\u201D`).join(", ")})`}. Daar verschijnt dan \u201Cformulier niet beschikbaar\u201D \u2014 haal het blok eerst weg of kies er een ander formulier.` : "";
|
|
228
|
+
const ok = await confirm({
|
|
229
|
+
title: "Formulier verwijderen?",
|
|
230
|
+
description: `Het formulier wordt verwijderd. Inzendingen blijven bewaard.${opPaginas}`,
|
|
231
|
+
confirmLabel: gebruik && gebruik.length > 0 ? "Toch verwijderen" : "Verwijderen",
|
|
232
|
+
tone: "danger"
|
|
233
|
+
});
|
|
140
234
|
if (!ok) return;
|
|
141
|
-
|
|
142
|
-
|
|
235
|
+
setBusy(true);
|
|
236
|
+
try {
|
|
237
|
+
await deleteDoc(doc(db, "sites", siteId, "forms", form.id));
|
|
238
|
+
await deleteDoc(doc(db, "sites", siteId, "forms", form.id, "private", "mail")).catch(() => void 0);
|
|
239
|
+
onToast({ title: "Formulier verwijderd", tone: "success" });
|
|
240
|
+
onDeleted();
|
|
241
|
+
} catch (e) {
|
|
242
|
+
onToast({ title: "Verwijderen mislukt", description: e instanceof Error ? e.message : void 0, tone: "error" });
|
|
243
|
+
} finally {
|
|
244
|
+
setBusy(false);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const [bestaandeSleutels] = useState(() => new Set(form.fields.map((f) => f.name)));
|
|
248
|
+
function zetLabel(i, label) {
|
|
249
|
+
const veld = def.fields[i];
|
|
250
|
+
if (bestaandeSleutels.has(veld.name)) return setField(i, { label });
|
|
251
|
+
const anderen = new Set(def.fields.filter((_, j) => j !== i).map((f) => f.name));
|
|
252
|
+
setField(i, { label, name: sleutelUitLabel(label, anderen) });
|
|
253
|
+
}
|
|
254
|
+
async function verwijderVeld(i) {
|
|
255
|
+
const veld = def.fields[i];
|
|
256
|
+
if (bestaandeSleutels.has(veld.name)) {
|
|
257
|
+
const ok = await confirm({
|
|
258
|
+
title: `Veld "${veld.label}" verwijderen?`,
|
|
259
|
+
description: "Oude inzendingen behouden hun antwoord, maar nieuwe bezoekers zien dit veld niet meer.",
|
|
260
|
+
confirmLabel: "Verwijderen",
|
|
261
|
+
tone: "danger"
|
|
262
|
+
});
|
|
263
|
+
if (!ok) return;
|
|
264
|
+
}
|
|
265
|
+
zetVelden(def.fields.filter((_, idx) => idx !== i), veldIds.filter((_, idx) => idx !== i));
|
|
143
266
|
}
|
|
144
267
|
function setField(i, part) {
|
|
145
268
|
const fields = [...def.fields];
|
|
@@ -151,8 +274,9 @@ function FormDetail({
|
|
|
151
274
|
/* @__PURE__ */ jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
|
|
152
275
|
/* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children: "Formulier bewerken" }),
|
|
153
276
|
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
154
|
-
/* @__PURE__ */ jsx(Button, { variant: "danger", size: "sm", onClick: remove, children: "Verwijderen" }),
|
|
155
|
-
/* @__PURE__ */ jsx(
|
|
277
|
+
/* @__PURE__ */ jsx(Button, { variant: "danger", size: "sm", onClick: remove, disabled: busy, children: "Verwijderen" }),
|
|
278
|
+
vuil && /* @__PURE__ */ jsx("span", { className: "self-center text-sm text-amber-700", role: "status", children: "\u2022 Niet opgeslagen" }),
|
|
279
|
+
/* @__PURE__ */ jsx(Button, { loading: busy, size: "sm", onClick: save, disabled: busy, children: "Opslaan \u2014 direct live" })
|
|
156
280
|
] })
|
|
157
281
|
] }),
|
|
158
282
|
/* @__PURE__ */ jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [
|
|
@@ -171,74 +295,88 @@ function FormDetail({
|
|
|
171
295
|
"."
|
|
172
296
|
] }),
|
|
173
297
|
/* @__PURE__ */ jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [
|
|
174
|
-
/* @__PURE__ */ jsx(Field, { label: "Kopie van inzending naar", hint: "Leeg = het notificatie-adres uit Instellingen \u2192 E-mail.", children: /* @__PURE__ */ jsx(
|
|
298
|
+
/* @__PURE__ */ jsx(Field, { label: "Kopie van inzending naar", hint: "Meerdere adressen mag, met een komma ertussen. Leeg = het notificatie-adres uit Instellingen \u2192 E-mail.", children: /* @__PURE__ */ jsx(
|
|
175
299
|
Input,
|
|
176
300
|
{
|
|
177
|
-
type: "email",
|
|
178
301
|
value: def.notifyTo ?? "",
|
|
179
302
|
onChange: (e) => setDef({ ...def, notifyTo: e.target.value || void 0 }),
|
|
180
303
|
placeholder: "jij@voorbeeld.nl"
|
|
181
304
|
}
|
|
182
305
|
) }),
|
|
183
|
-
/* @__PURE__ */
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
),
|
|
192
|
-
"Stuur de invuller ook een bevestiging (naar het eerste e-mailveld)"
|
|
193
|
-
] })
|
|
306
|
+
/* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(
|
|
307
|
+
Switch,
|
|
308
|
+
{
|
|
309
|
+
checked: Boolean(def.confirmSubmitter),
|
|
310
|
+
onCheckedChange: (v) => setDef({ ...def, confirmSubmitter: v }),
|
|
311
|
+
label: "Stuur de invuller een bevestiging (naar het eerste e-mailveld)"
|
|
312
|
+
}
|
|
313
|
+
) })
|
|
194
314
|
] })
|
|
195
315
|
] }),
|
|
196
316
|
/* @__PURE__ */ jsxs("p", { className: "mt-3 text-xs text-slate-500", children: [
|
|
197
|
-
"
|
|
198
|
-
/* @__PURE__ */ jsx("
|
|
317
|
+
"Op een pagina zet je dit formulier met het blok ",
|
|
318
|
+
/* @__PURE__ */ jsx("strong", { children: "Formulier" }),
|
|
319
|
+
'; kies daar "',
|
|
320
|
+
def.name,
|
|
321
|
+
'".'
|
|
199
322
|
] })
|
|
200
323
|
] }),
|
|
201
324
|
/* @__PURE__ */ jsxs(Card, { children: [
|
|
202
325
|
/* @__PURE__ */ jsx("h4", { className: "mb-3 text-sm font-semibold", children: "Velden" }),
|
|
203
|
-
/* @__PURE__ */ jsx("div", { className: "grid gap-3", children: def.fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "grid items-end gap-2 rounded-lg border border-slate-200 p-3 md:grid-cols-[
|
|
204
|
-
/* @__PURE__ */ jsx(Field, { label: "
|
|
205
|
-
/* @__PURE__ */ jsx(Field, { label: "Label", children: /* @__PURE__ */ jsx(Input, { value: f.label, onChange: (e) => setField(i, { label: e.target.value }) }) }),
|
|
326
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-3", children: def.fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "grid items-end gap-2 rounded-lg border border-slate-200 p-3 md:grid-cols-[1fr_160px_auto_auto]", children: [
|
|
327
|
+
/* @__PURE__ */ jsx(Field, { label: "Vraag / label", children: /* @__PURE__ */ jsx(Input, { value: f.label, onChange: (e) => zetLabel(i, e.target.value) }) }),
|
|
206
328
|
/* @__PURE__ */ jsx(Field, { label: "Type", children: /* @__PURE__ */ jsx(Select, { value: f.type, onValueChange: (v) => setField(i, { type: v }), options: FIELD_TYPES }) }),
|
|
207
329
|
/* @__PURE__ */ jsx(Switch, { checked: f.required, onCheckedChange: (v) => setField(i, { required: v }), label: "Verplicht" }),
|
|
208
330
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
209
331
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Veld omhoog", disabled: i === 0, onClick: () => verplaatsVeld(i, -1), children: "\u2191" }),
|
|
210
332
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": "Veld omlaag", disabled: i === def.fields.length - 1, onClick: () => verplaatsVeld(i, 1), children: "\u2193" }),
|
|
211
|
-
/* @__PURE__ */ jsx(Button, { variant: "
|
|
333
|
+
/* @__PURE__ */ jsx(Button, { variant: "dangerGhost", size: "sm", "aria-label": `Veld "${f.label}" verwijderen`, onClick: () => verwijderVeld(i), children: "\u{1F5D1}" })
|
|
212
334
|
] }),
|
|
213
|
-
(f.type === "select" || f.type === "radio") && /* @__PURE__ */ jsx("div", { className: "md:col-span-
|
|
214
|
-
|
|
335
|
+
(f.type === "select" || f.type === "radio") && /* @__PURE__ */ jsx("div", { className: "md:col-span-4", children: /* @__PURE__ */ jsx(OptiesEditor, { opties: f.options ?? [], onChange: (options) => setField(i, { options }) }) }),
|
|
336
|
+
f.type === "hidden" && /* @__PURE__ */ jsx("div", { className: "md:col-span-4", children: /* @__PURE__ */ jsx(
|
|
337
|
+
Field,
|
|
215
338
|
{
|
|
216
|
-
|
|
217
|
-
|
|
339
|
+
label: "Vaste waarde (optioneel)",
|
|
340
|
+
hint: `Wordt meegestuurd zonder dat de bezoeker het ziet. Een link als /contact?${f.name}=Huisje%20A vult dit veld met \u2018Huisje A\u2019.`,
|
|
341
|
+
children: /* @__PURE__ */ jsx(Input, { value: f.placeholder ?? "", onChange: (e) => setField(i, { placeholder: e.target.value || void 0 }) })
|
|
218
342
|
}
|
|
219
|
-
) })
|
|
343
|
+
) }),
|
|
344
|
+
/* @__PURE__ */ jsxs("details", { className: "text-xs text-slate-500 md:col-span-4", children: [
|
|
345
|
+
/* @__PURE__ */ jsxs("summary", { className: "cursor-pointer select-none", children: [
|
|
346
|
+
"Technische naam: ",
|
|
347
|
+
f.name
|
|
348
|
+
] }),
|
|
349
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2 max-w-xs", children: /* @__PURE__ */ jsx(Input, { "aria-label": "Technische naam van het veld", value: f.name, onChange: (e) => setField(i, { name: e.target.value }) }) })
|
|
350
|
+
] })
|
|
220
351
|
] }, veldIds[i] ?? i)) }),
|
|
221
352
|
/* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsx(
|
|
222
353
|
Button,
|
|
223
354
|
{
|
|
224
355
|
variant: "secondary",
|
|
225
356
|
size: "sm",
|
|
226
|
-
onClick: () => zetVelden([...def.fields, { name:
|
|
357
|
+
onClick: () => zetVelden([...def.fields, { name: sleutelUitLabel("Nieuw veld", new Set(def.fields.map((f) => f.name))), label: "Nieuw veld", type: "text", required: false }], [...veldIds, nieuweVeldId()]),
|
|
227
358
|
children: "+ Veld toevoegen"
|
|
228
359
|
}
|
|
229
360
|
) })
|
|
230
361
|
] }),
|
|
231
|
-
/* @__PURE__ */ jsx(Submissions, { siteId, formId: form.id, velden: def.fields.map((f) => f.name) })
|
|
362
|
+
/* @__PURE__ */ jsx(Submissions, { siteId, formId: form.id, velden: def.fields.map((f) => ({ name: f.name, label: f.label })) })
|
|
232
363
|
] });
|
|
233
364
|
}
|
|
234
365
|
function datumVan(s) {
|
|
235
366
|
const d = s.createdAt && typeof s.createdAt.toDate === "function" ? s.createdAt.toDate() : null;
|
|
236
367
|
return d ? d.toLocaleString("nl-NL", { dateStyle: "short", timeStyle: "short" }) : "";
|
|
237
368
|
}
|
|
369
|
+
const kolomNaam = (k) => typeof k === "string" ? k : k.name;
|
|
370
|
+
const kolomLabel = (k) => typeof k === "string" ? k : k.label || k.name;
|
|
371
|
+
function waardeTekst(v) {
|
|
372
|
+
if (v === true) return "ja";
|
|
373
|
+
if (v === false) return "nee";
|
|
374
|
+
return String(v ?? "");
|
|
375
|
+
}
|
|
238
376
|
function inzendingenCsv(velden, subs) {
|
|
239
377
|
const cel = (v) => `"${String(v ?? "").replace(/"/g, '""')}"`;
|
|
240
|
-
const kop = ["
|
|
241
|
-
const rijen = subs.map((s) => [datumVan(s), ...velden.map((k) => s.values?.[k])].map(cel).join(";"));
|
|
378
|
+
const kop = ["Datum", ...velden.map(kolomLabel)].map(cel).join(";");
|
|
379
|
+
const rijen = subs.map((s) => [datumVan(s), ...velden.map((k) => waardeTekst(s.values?.[kolomNaam(k)]))].map(cel).join(";"));
|
|
242
380
|
return "\uFEFF" + [kop, ...rijen].join("\r\n");
|
|
243
381
|
}
|
|
244
382
|
function Submissions({ siteId, formId, velden }) {
|
|
@@ -248,13 +386,24 @@ function Submissions({ siteId, formId, velden }) {
|
|
|
248
386
|
const { role } = useAuth();
|
|
249
387
|
const magVerwijderen = canManageSite(role);
|
|
250
388
|
const [sinds] = useState(() => formulierenGezienSinds(siteId, formId));
|
|
389
|
+
const [subsGeladen, setSubsGeladen] = useState(false);
|
|
390
|
+
const [subsFout, setSubsFout] = useState(null);
|
|
391
|
+
const [subsPoging, setSubsPoging] = useState(0);
|
|
251
392
|
useEffect(() => () => markeerFormulierGezien(siteId, formId), [siteId, formId]);
|
|
252
393
|
useEffect(() => {
|
|
253
394
|
const db = getDb();
|
|
254
395
|
if (!db) return;
|
|
255
396
|
const q = query(collection(db, "sites", siteId, "forms", formId, "submissions"), orderBy("createdAt", "desc"));
|
|
256
|
-
return onSnapshot(
|
|
257
|
-
|
|
397
|
+
return onSnapshot(
|
|
398
|
+
q,
|
|
399
|
+
(snap) => {
|
|
400
|
+
setSubs(snap.docs.map((d) => ({ id: d.id, ...d.data() })));
|
|
401
|
+
setSubsGeladen(true);
|
|
402
|
+
setSubsFout(null);
|
|
403
|
+
},
|
|
404
|
+
(e) => setSubsFout(e.message)
|
|
405
|
+
);
|
|
406
|
+
}, [siteId, formId, subsPoging]);
|
|
258
407
|
const isNieuw = (s) => Boolean(sinds && s.createdAt && s.createdAt.toMillis() > sinds.toMillis());
|
|
259
408
|
const nieuw = subs.filter(isNieuw).length;
|
|
260
409
|
function exporteer() {
|
|
@@ -295,27 +444,31 @@ function Submissions({ siteId, formId, velden }) {
|
|
|
295
444
|
] }),
|
|
296
445
|
subs.length > 0 && /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", onClick: exporteer, children: "Exporteer CSV" })
|
|
297
446
|
] }),
|
|
298
|
-
|
|
299
|
-
|
|
447
|
+
subsFout || !subsGeladen ? /* @__PURE__ */ jsx(LaadStaat, { laden: !subsGeladen, fout: subsFout, wat: "inzendingen", opnieuw: () => {
|
|
448
|
+
setSubsFout(null);
|
|
449
|
+
setSubsPoging((n) => n + 1);
|
|
450
|
+
}, children: null }) : subs.length === 0 ? /* @__PURE__ */ jsx(LegeStaat, { titel: "Nog geen inzendingen", tekst: "Zodra iemand dit formulier invult, staat het bericht hier \u2014 en krijg je een e-mail." }) : /* @__PURE__ */ jsx("div", { className: "grid gap-2", children: subs.map((s) => /* @__PURE__ */ jsxs("div", { className: `rounded-lg border p-3 text-sm ${isNieuw(s) ? "border-amber-300 bg-amber-50/40" : "border-slate-200"}`, children: [
|
|
451
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-1 flex items-center justify-between gap-2 text-xs text-slate-500", children: [
|
|
300
452
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
301
453
|
datumVan(s),
|
|
302
454
|
isNieuw(s) ? " \xB7 nieuw" : ""
|
|
303
455
|
] }),
|
|
304
|
-
magVerwijderen && /* @__PURE__ */ jsx(
|
|
456
|
+
magVerwijderen && /* @__PURE__ */ jsx(Button, { variant: "dangerGhost", size: "sm", onClick: () => void verwijder(s), children: "Verwijderen" })
|
|
305
457
|
] }),
|
|
306
|
-
Object.
|
|
458
|
+
[...velden.filter((f) => f.name in (s.values ?? {})), ...Object.keys(s.values ?? {}).filter((k) => !velden.some((f) => f.name === k)).map((k) => ({ name: k, label: k }))].map((f) => /* @__PURE__ */ jsxs("div", { children: [
|
|
307
459
|
/* @__PURE__ */ jsxs("span", { className: "font-medium text-slate-600", children: [
|
|
308
|
-
|
|
460
|
+
f.label,
|
|
309
461
|
":"
|
|
310
462
|
] }),
|
|
311
463
|
" ",
|
|
312
|
-
|
|
313
|
-
] },
|
|
464
|
+
/* @__PURE__ */ jsx("span", { className: "whitespace-pre-wrap", children: waardeTekst(s.values?.[f.name]) })
|
|
465
|
+
] }, f.name))
|
|
314
466
|
] }, s.id)) })
|
|
315
467
|
] });
|
|
316
468
|
}
|
|
317
469
|
export {
|
|
318
470
|
FormsPanel,
|
|
319
|
-
inzendingenCsv
|
|
471
|
+
inzendingenCsv,
|
|
472
|
+
sleutelUitLabel
|
|
320
473
|
};
|
|
321
474
|
//# sourceMappingURL=FormsPanel.js.map
|