@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,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { registerBuiltinSchemas } from "../../blocks/builtinSchemas.js";
|
|
4
4
|
import { useModules } from "../../modules/context.js";
|
|
5
5
|
registerBuiltinSchemas();
|
|
@@ -13,9 +13,8 @@ import { MediaPickerDialog, MediaPickerButton } from "../media/MediaPicker.js";
|
|
|
13
13
|
import { Switch } from "../ui/switch.js";
|
|
14
14
|
import { titelMeter, omschrijvingMeter } from "../lib/seoHulp.js";
|
|
15
15
|
import { useThemeVars } from "../../XiCMSProvider.js";
|
|
16
|
-
import { buildBlockAddOptions } from "../../blocks/registry.js";
|
|
17
16
|
import DOMPurify from "dompurify";
|
|
18
|
-
import { createPage, getDraftByPath, getPublishedPage, saveDraft, publishPage, subscribeDraft, subscribeVersions, restoreVersion } from "../lib/pagesClient.js";
|
|
17
|
+
import { createPage, getDraftByPath, getPublishedPage, saveDraft, publishPage, publicatieContext, subscribeDraft, subscribeVersions, restoreVersion } from "../lib/pagesClient.js";
|
|
19
18
|
import { isDemoActive } from "../../demo/demoStore.js";
|
|
20
19
|
import { setProductField } from "../shop/productClient.js";
|
|
21
20
|
import { ProductPaneel } from "../shop/ProductPaneel.js";
|
|
@@ -26,10 +25,19 @@ import { useEditor } from "../../editor/EditorProvider.js";
|
|
|
26
25
|
import { AdminModes, EditbarBrand } from "../../components/EditBar.js";
|
|
27
26
|
import { aantalWijzigingen, bepaalWijzigingen, GEEN_WIJZIGINGEN } from "./wijzigingen.js";
|
|
28
27
|
import { TranslationPanel } from "./TranslationPanel.js";
|
|
29
|
-
import { PatternInserter } from "../patterns/PatternInserter.js";
|
|
30
28
|
import { Button, Field, Input, Textarea } from "../ui/primitives.js";
|
|
31
29
|
import { Select } from "../ui/select.js";
|
|
32
30
|
import { ToastProvider, useToast } from "../ui/toast.js";
|
|
31
|
+
import { InlineRijkeTekst, RIJK_ATTR } from "./InlineRijkeTekst.js";
|
|
32
|
+
import { PreviewLinkResultaat } from "../ui/PreviewLinkResultaat.js";
|
|
33
|
+
import { controleerPagina } from "../lib/publicatieCheck.js";
|
|
34
|
+
import { heroBeeldPatch } from "../lib/heroHulp.js";
|
|
35
|
+
import { lengteAdvies } from "../lib/lengteAdvies.js";
|
|
36
|
+
import { vertaalVelden, veldLabel } from "../lib/veldTaal.js";
|
|
37
|
+
import { InlineGereedschap, snelleKeuzes, vindLijstItems } from "./InlineGereedschap.js";
|
|
38
|
+
import { BlokKader, BlokKiezer, TussenPlus } from "./BlokKiezer.js";
|
|
39
|
+
import { Icon } from "../ui/Icon.js";
|
|
40
|
+
import { isTekstVeld } from "../lib/tekstVeld.js";
|
|
33
41
|
import { ConfirmHost, useConfirm } from "../ui/ConfirmDialog.js";
|
|
34
42
|
const GLOBAL_INLINE = [
|
|
35
43
|
// `field: "html"` is de AANNAME, geen wet: een element mag met `data-xicms-edit` zeggen welk veld
|
|
@@ -83,7 +91,7 @@ function stableStringify(value) {
|
|
|
83
91
|
return JSON.stringify(value) ?? "null";
|
|
84
92
|
}
|
|
85
93
|
function VisualEditor({ onClose }) {
|
|
86
|
-
return /* @__PURE__ */ jsx("div", { className: "xicms-admin xicms-ve", children: /* @__PURE__ */ jsx(ToastProvider, { children: /* @__PURE__ */ jsx(ConfirmHost, { children: /* @__PURE__ */ jsx(VisualEditorInner, { onClose }) }) }) });
|
|
94
|
+
return /* @__PURE__ */ jsx("div", { className: "xicms-admin xicms-ve", children: /* @__PURE__ */ jsx(ToastProvider, { positie: "topEnd", children: /* @__PURE__ */ jsx(ConfirmHost, { children: /* @__PURE__ */ jsx(VisualEditorInner, { onClose }) }) }) });
|
|
87
95
|
}
|
|
88
96
|
function VisualEditorInner({ onClose }) {
|
|
89
97
|
const config = useSiteConfig();
|
|
@@ -104,6 +112,10 @@ function VisualEditorInner({ onClose }) {
|
|
|
104
112
|
const [panelOpen, setPanelOpen] = useState(false);
|
|
105
113
|
const [status, setStatus] = useState("loading");
|
|
106
114
|
const [selectedKey, setSelectedKey] = useState(null);
|
|
115
|
+
const [kiezerOpen, setKiezerOpen] = useState(false);
|
|
116
|
+
const [invoegNa, setInvoegNa] = useState(null);
|
|
117
|
+
const selectedKeyRef = useRef(null);
|
|
118
|
+
selectedKeyRef.current = selectedKey;
|
|
107
119
|
const [selectedProduct, setSelectedProduct] = useState(null);
|
|
108
120
|
const [publishing, setPublishing] = useState(false);
|
|
109
121
|
const [imgPicker, setImgPicker] = useState(null);
|
|
@@ -212,7 +224,9 @@ function VisualEditorInner({ onClose }) {
|
|
|
212
224
|
// Alleen meesturen wanneer aanwezig: `undefined` weigert de Firestore-client.
|
|
213
225
|
...d.translations ? { translations: d.translations } : {}
|
|
214
226
|
});
|
|
227
|
+
const rijkFlushRef = useRef(null);
|
|
215
228
|
const flushSave = useCallback(async () => {
|
|
229
|
+
rijkFlushRef.current?.();
|
|
216
230
|
document.activeElement?.blur();
|
|
217
231
|
const d = draftRef.current;
|
|
218
232
|
if (!d || !dirtyRef.current) return;
|
|
@@ -369,24 +383,6 @@ function VisualEditorInner({ onClose }) {
|
|
|
369
383
|
},
|
|
370
384
|
[mutateDraft, locale]
|
|
371
385
|
);
|
|
372
|
-
const [fmtBar, setFmtBar] = useState(null);
|
|
373
|
-
const fmtElRef = useRef(null);
|
|
374
|
-
const positionFmtBar = useCallback((el) => {
|
|
375
|
-
const r = el.getBoundingClientRect();
|
|
376
|
-
setFmtBar({
|
|
377
|
-
top: Math.max(56, r.top - 44),
|
|
378
|
-
left: Math.min(Math.max(8, r.left), Math.max(8, window.innerWidth - 300))
|
|
379
|
-
});
|
|
380
|
-
}, []);
|
|
381
|
-
useEffect(() => {
|
|
382
|
-
if (!fmtBar) return;
|
|
383
|
-
const onScroll = () => {
|
|
384
|
-
const el = fmtElRef.current;
|
|
385
|
-
if (el) positionFmtBar(el);
|
|
386
|
-
};
|
|
387
|
-
window.addEventListener("scroll", onScroll, { capture: true, passive: true });
|
|
388
|
-
return () => window.removeEventListener("scroll", onScroll, { capture: true });
|
|
389
|
-
}, [fmtBar !== null, positionFmtBar]);
|
|
390
386
|
const commitText = useCallback(
|
|
391
387
|
(key, field, value) => {
|
|
392
388
|
if (isTranslating) setTranslation(`${key}.${field}`, value);
|
|
@@ -579,10 +575,22 @@ function VisualEditorInner({ onClose }) {
|
|
|
579
575
|
};
|
|
580
576
|
}, [draft, wijzigingen, displayBlocks]);
|
|
581
577
|
const [spots, setSpots] = useState([]);
|
|
578
|
+
const lengteGemeld = useRef(/* @__PURE__ */ new Set());
|
|
582
579
|
const targetsRef = useRef([]);
|
|
583
580
|
const editingRef = useRef(null);
|
|
584
581
|
const wilInlineRef = useRef(false);
|
|
585
582
|
const [editingIndex, setEditingIndex] = useState(null);
|
|
583
|
+
const [rijk, setRijk] = useState(null);
|
|
584
|
+
const stopRijk = useCallback(() => {
|
|
585
|
+
setRijk(null);
|
|
586
|
+
setEditingIndex(null);
|
|
587
|
+
}, []);
|
|
588
|
+
useEffect(() => {
|
|
589
|
+
if (editingIndex !== null && toonStartHint) sluitStartHint();
|
|
590
|
+
}, [editingIndex, toonStartHint, sluitStartHint]);
|
|
591
|
+
useEffect(() => {
|
|
592
|
+
setRijk((r) => r && r.key !== selectedKey ? null : r);
|
|
593
|
+
}, [selectedKey]);
|
|
586
594
|
const stopInline = useCallback((el) => {
|
|
587
595
|
el.removeAttribute("contenteditable");
|
|
588
596
|
el.classList.remove("is-editing");
|
|
@@ -592,9 +600,20 @@ function VisualEditorInner({ onClose }) {
|
|
|
592
600
|
}
|
|
593
601
|
}, []);
|
|
594
602
|
const meldGeenTekst = useCallback(() => {
|
|
603
|
+
const key = selectedKeyRef.current;
|
|
604
|
+
const blok = blocksRef.current.find((b) => b._key === key);
|
|
605
|
+
const def = blok ? registryRef.current.get(String(blok._type)) : void 0;
|
|
606
|
+
let keuzes = 0;
|
|
607
|
+
try {
|
|
608
|
+
keuzes = def?.schema ? snelleKeuzes(vertaalVelden(introspectToFields(def.schema, def.fields), def.type)).length : 0;
|
|
609
|
+
} catch {
|
|
610
|
+
keuzes = 0;
|
|
611
|
+
}
|
|
612
|
+
const host = key ? document.querySelector(`[data-xicms-block="${CSS.escape(key)}"]`) : null;
|
|
613
|
+
if (keuzes > 0 || host && vindLijstItems(host).length > 0) return;
|
|
595
614
|
toast({
|
|
596
|
-
title: "
|
|
597
|
-
description: "Wijs een product aan voor zijn naam, of gebruik het tandwiel voor de instellingen van dit blok."
|
|
615
|
+
title: "Hier valt op de pagina niets te typen",
|
|
616
|
+
description: "Wijs een product aan voor zijn naam, of gebruik het tandwiel \u2699 voor de instellingen van dit blok."
|
|
598
617
|
});
|
|
599
618
|
}, [toast]);
|
|
600
619
|
const startInline = useCallback((index) => {
|
|
@@ -602,6 +621,14 @@ function VisualEditorInner({ onClose }) {
|
|
|
602
621
|
if (!target) return;
|
|
603
622
|
const { el } = target;
|
|
604
623
|
if (editingRef.current && editingRef.current !== el) editingRef.current.blur();
|
|
624
|
+
if (target.html) {
|
|
625
|
+
const key = el.closest("[data-xicms-block]")?.dataset.xicmsBlock;
|
|
626
|
+
if (!key) return;
|
|
627
|
+
setRijk({ el, key, field: target.field });
|
|
628
|
+
setEditingIndex(index);
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
setRijk(null);
|
|
605
632
|
el.setAttribute("contenteditable", "true");
|
|
606
633
|
el.setAttribute("spellcheck", "true");
|
|
607
634
|
el.classList.add("is-editing");
|
|
@@ -615,6 +642,17 @@ function VisualEditorInner({ onClose }) {
|
|
|
615
642
|
selection?.removeAllRanges();
|
|
616
643
|
selection?.addRange(range);
|
|
617
644
|
}, []);
|
|
645
|
+
const startVeld = useCallback((veld) => {
|
|
646
|
+
let pogingen = 0;
|
|
647
|
+
const probeer = () => {
|
|
648
|
+
const i = targetsRef.current.findIndex((t) => t.field === veld);
|
|
649
|
+
if (i >= 0) {
|
|
650
|
+
targetsRef.current[i].el.scrollIntoView({ block: "nearest", behavior: "smooth" });
|
|
651
|
+
startInline(i);
|
|
652
|
+
} else if (++pogingen < 20) requestAnimationFrame(probeer);
|
|
653
|
+
};
|
|
654
|
+
requestAnimationFrame(probeer);
|
|
655
|
+
}, [startInline]);
|
|
618
656
|
useEffect(() => {
|
|
619
657
|
if (!selectedKey) {
|
|
620
658
|
targetsRef.current = [];
|
|
@@ -630,7 +668,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
630
668
|
const labels = /* @__PURE__ */ new Map();
|
|
631
669
|
if (def) {
|
|
632
670
|
try {
|
|
633
|
-
for (const f of introspectToFields(def.schema, def.fields)) labels.set(f.key, f.label);
|
|
671
|
+
for (const f of vertaalVelden(introspectToFields(def.schema, def.fields), def.type)) labels.set(f.key, f.label);
|
|
634
672
|
} catch {
|
|
635
673
|
}
|
|
636
674
|
}
|
|
@@ -640,19 +678,16 @@ function VisualEditorInner({ onClose }) {
|
|
|
640
678
|
el.dataset.veInline = "1";
|
|
641
679
|
el.classList.add("xicms-ve-inline");
|
|
642
680
|
el.addEventListener("blur", () => {
|
|
643
|
-
|
|
681
|
+
const waarde = html ? DOMPurify.sanitize(el.innerHTML) : el.textContent ?? "";
|
|
682
|
+
commitText(selectedKey, field, waarde);
|
|
644
683
|
stopInline(el);
|
|
684
|
+
const advies = html ? null : lengteAdvies(field, waarde);
|
|
685
|
+
const sleutel = `${selectedKey}.${field}`;
|
|
686
|
+
if (advies && !lengteGemeld.current.has(sleutel)) {
|
|
687
|
+
lengteGemeld.current.add(sleutel);
|
|
688
|
+
toast({ title: "Lange tekst", description: advies });
|
|
689
|
+
}
|
|
645
690
|
});
|
|
646
|
-
if (html) {
|
|
647
|
-
el.addEventListener("focus", () => {
|
|
648
|
-
fmtElRef.current = el;
|
|
649
|
-
positionFmtBar(el);
|
|
650
|
-
});
|
|
651
|
-
el.addEventListener("blur", () => {
|
|
652
|
-
fmtElRef.current = null;
|
|
653
|
-
setFmtBar(null);
|
|
654
|
-
});
|
|
655
|
-
}
|
|
656
691
|
el.addEventListener("keydown", (e) => {
|
|
657
692
|
if (e.key === "Escape") {
|
|
658
693
|
e.stopPropagation();
|
|
@@ -666,11 +701,13 @@ function VisualEditorInner({ onClose }) {
|
|
|
666
701
|
};
|
|
667
702
|
const measure = () => {
|
|
668
703
|
const next = targetsRef.current.map(({ el, field }) => {
|
|
669
|
-
const
|
|
704
|
+
const zicht = el.style.display === "none" && el.nextElementSibling?.hasAttribute(RIJK_ATTR) ? el.nextElementSibling : el;
|
|
705
|
+
const r = zicht.getBoundingClientRect();
|
|
706
|
+
const uitBeeld = r.bottom < 56 || r.top > window.innerHeight - 8 || r.width === 0 && r.height === 0;
|
|
670
707
|
return {
|
|
671
|
-
top: Math.min(window.innerHeight - 22, Math.max(4, r.top + r.height / 2 - 9)),
|
|
708
|
+
top: uitBeeld ? -9999 : Math.min(window.innerHeight - 22, Math.max(4, r.top + r.height / 2 - 9)),
|
|
672
709
|
left: Math.min(window.innerWidth - 22, Math.max(4, r.right + 6)),
|
|
673
|
-
title: `Bewerk: ${labels.get(field) ?? field}`
|
|
710
|
+
title: `Bewerk: ${labels.get(field) ?? veldLabel(field.split(".").pop() ?? field)}`
|
|
674
711
|
};
|
|
675
712
|
});
|
|
676
713
|
setSpots(
|
|
@@ -681,7 +718,9 @@ function VisualEditorInner({ onClose }) {
|
|
|
681
718
|
const found = [];
|
|
682
719
|
for (const m of GLOBAL_INLINE) {
|
|
683
720
|
host.querySelectorAll(m.selector).forEach((el) => {
|
|
721
|
+
if (el.closest(`[${RIJK_ATTR}]`)) return;
|
|
684
722
|
const field = el.dataset.xicmsEdit ?? m.field;
|
|
723
|
+
if (!isTekstVeld(el, field)) return;
|
|
685
724
|
bind(el, field, !!m.html);
|
|
686
725
|
found.push({ el, field, html: !!m.html });
|
|
687
726
|
});
|
|
@@ -729,7 +768,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
729
768
|
targetsRef.current = [];
|
|
730
769
|
setSpots([]);
|
|
731
770
|
};
|
|
732
|
-
}, [selectedKey, commitText,
|
|
771
|
+
}, [selectedKey, commitText, stopInline, startInline, toast]);
|
|
733
772
|
const dirtySinceRef = useRef(null);
|
|
734
773
|
useEffect(() => {
|
|
735
774
|
if (!draft) return;
|
|
@@ -752,10 +791,36 @@ function VisualEditorInner({ onClose }) {
|
|
|
752
791
|
dirtyRef.current = false;
|
|
753
792
|
setStatus("saved");
|
|
754
793
|
}
|
|
755
|
-
}).catch(() =>
|
|
794
|
+
}).catch(() => {
|
|
795
|
+
setStatus("error");
|
|
796
|
+
setHerpoging((n) => n + 1);
|
|
797
|
+
});
|
|
756
798
|
}, delay);
|
|
757
799
|
return () => clearTimeout(t);
|
|
758
800
|
}, [draft, siteId, conflict]);
|
|
801
|
+
const [online, setOnline] = useState(() => typeof navigator === "undefined" ? true : navigator.onLine);
|
|
802
|
+
const [herpoging, setHerpoging] = useState(0);
|
|
803
|
+
useEffect(() => {
|
|
804
|
+
const aan = () => setOnline(true);
|
|
805
|
+
const uit = () => setOnline(false);
|
|
806
|
+
window.addEventListener("online", aan);
|
|
807
|
+
window.addEventListener("offline", uit);
|
|
808
|
+
return () => {
|
|
809
|
+
window.removeEventListener("online", aan);
|
|
810
|
+
window.removeEventListener("offline", uit);
|
|
811
|
+
};
|
|
812
|
+
}, []);
|
|
813
|
+
useEffect(() => {
|
|
814
|
+
if (status !== "error" || !online || conflict) return;
|
|
815
|
+
const wacht = Math.min(12e4, 5e3 * 3 ** Math.max(0, herpoging - 1));
|
|
816
|
+
const t = setTimeout(() => {
|
|
817
|
+
void flushSave().then(() => setHerpoging(0)).catch(() => {
|
|
818
|
+
setStatus("error");
|
|
819
|
+
setHerpoging((n) => n + 1);
|
|
820
|
+
});
|
|
821
|
+
}, wacht);
|
|
822
|
+
return () => clearTimeout(t);
|
|
823
|
+
}, [status, online, conflict, herpoging, flushSave]);
|
|
759
824
|
useEffect(() => {
|
|
760
825
|
const beforeUnload = (e) => {
|
|
761
826
|
if (dirtyRef.current || nietLiveRef.current) {
|
|
@@ -849,12 +914,50 @@ function VisualEditorInner({ onClose }) {
|
|
|
849
914
|
if (selectedKey === blk._key) setSelectedKey(null);
|
|
850
915
|
toast({ title: "Losgekoppeld", description: "Dit is nu een losse kopie.", tone: "success" });
|
|
851
916
|
}
|
|
917
|
+
function publiceerSamenvatting(pad, demo = false, waarschuwingen = []) {
|
|
918
|
+
const namen = blocks.filter((b) => wijzigingen.blokken.has(b._key) || wijzigingen.velden.has(b._key)).map((b) => registry.get(String(b._type))?.label ?? String(b._type));
|
|
919
|
+
const uniek = [...new Set(namen)];
|
|
920
|
+
return /* @__PURE__ */ jsxs("div", { className: "grid gap-1", children: [
|
|
921
|
+
!demo && /* @__PURE__ */ jsxs("p", { children: [
|
|
922
|
+
"De live site wordt bijgewerkt (",
|
|
923
|
+
pad,
|
|
924
|
+
")."
|
|
925
|
+
] }),
|
|
926
|
+
wijzigingen.iets && /* @__PURE__ */ jsxs("p", { children: [
|
|
927
|
+
aantalWijzigingen(wijzigingen),
|
|
928
|
+
uniek.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
929
|
+
" in: ",
|
|
930
|
+
uniek.slice(0, 6).join(", "),
|
|
931
|
+
uniek.length > 6 ? ` en ${uniek.length - 6} meer` : ""
|
|
932
|
+
] }),
|
|
933
|
+
wijzigingen.verwijderd > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
934
|
+
" \xB7 ",
|
|
935
|
+
wijzigingen.verwijderd === 1 ? "1 blok verwijderd" : `${wijzigingen.verwijderd} blokken verwijderd`
|
|
936
|
+
] }),
|
|
937
|
+
"."
|
|
938
|
+
] }),
|
|
939
|
+
waarschuwingen.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded-lg bg-amber-50 px-3 py-2 text-amber-900", children: [
|
|
940
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium", children: "Even nakijken (je kunt ook gewoon publiceren):" }),
|
|
941
|
+
/* @__PURE__ */ jsx("ul", { className: "mt-1 list-disc pl-5", children: waarschuwingen.map((w, i) => /* @__PURE__ */ jsx("li", { children: w.tekst }, i)) })
|
|
942
|
+
] })
|
|
943
|
+
] });
|
|
944
|
+
}
|
|
852
945
|
async function remove(i) {
|
|
853
|
-
const ok = await confirm({ title: "Blok verwijderen?", confirmLabel: "Verwijderen", tone: "danger" });
|
|
854
|
-
if (!ok) return;
|
|
855
946
|
const removed = blocks[i];
|
|
947
|
+
const def = registry.get(String(removed._type));
|
|
948
|
+
if (def?.essentieel) {
|
|
949
|
+
const ok = await confirm({
|
|
950
|
+
title: `${def.label} verwijderen?`,
|
|
951
|
+
description: def.essentieel,
|
|
952
|
+
confirmLabel: "Toch verwijderen",
|
|
953
|
+
tone: "danger"
|
|
954
|
+
});
|
|
955
|
+
if (!ok) return;
|
|
956
|
+
}
|
|
856
957
|
setBlocks(blocks.filter((_, idx) => idx !== i));
|
|
857
958
|
if (selectedKey === removed._key) setSelectedKey(null);
|
|
959
|
+
const label = def?.label ?? "Blok";
|
|
960
|
+
toast({ title: `${label} verwijderd`, action: { label: "Ongedaan maken", onClick: () => undo() } });
|
|
858
961
|
}
|
|
859
962
|
const klaarMetBlok = useCallback(() => {
|
|
860
963
|
document.activeElement?.blur();
|
|
@@ -898,14 +1001,30 @@ function VisualEditorInner({ onClose }) {
|
|
|
898
1001
|
const def = registry.get(type);
|
|
899
1002
|
const base = def?.defaults?.() ?? {};
|
|
900
1003
|
const block = { _key: newKey(), _type: type, ...base };
|
|
1004
|
+
if (type === "hero" && blocks.some((b) => b._type === "hero" && String(b.headingLevel ?? "1") === "1")) block.headingLevel = "2";
|
|
901
1005
|
insertAfterSelected([block]);
|
|
902
1006
|
setSelectedKey(block._key);
|
|
1007
|
+
toonNieuw(block._key);
|
|
903
1008
|
}
|
|
904
1009
|
function insertAfterSelected(newBlocks) {
|
|
905
|
-
const
|
|
1010
|
+
const na = invoegNa ?? selectedKey;
|
|
1011
|
+
const sel = blocks.findIndex((b) => b._key === na);
|
|
906
1012
|
const copy = [...blocks];
|
|
907
1013
|
copy.splice(sel >= 0 ? sel + 1 : blocks.length, 0, ...newBlocks);
|
|
908
1014
|
setBlocks(copy);
|
|
1015
|
+
setInvoegNa(null);
|
|
1016
|
+
const eerste = newBlocks[0]?._key;
|
|
1017
|
+
if (eerste) toonNieuw(eerste);
|
|
1018
|
+
}
|
|
1019
|
+
function toonNieuw(key) {
|
|
1020
|
+
let pogingen = 0;
|
|
1021
|
+
const probeer = () => {
|
|
1022
|
+
const el = document.querySelector(`[data-xicms-block="${CSS.escape(key)}"]`);
|
|
1023
|
+
const doel = el && (el.getBoundingClientRect().height ? el : el.firstElementChild);
|
|
1024
|
+
if (doel) doel.scrollIntoView({ block: "center", behavior: "smooth" });
|
|
1025
|
+
else if (++pogingen < 30) requestAnimationFrame(probeer);
|
|
1026
|
+
};
|
|
1027
|
+
requestAnimationFrame(probeer);
|
|
909
1028
|
}
|
|
910
1029
|
async function onPublish() {
|
|
911
1030
|
document.activeElement?.blur();
|
|
@@ -918,7 +1037,10 @@ function VisualEditorInner({ onClose }) {
|
|
|
918
1037
|
const demo = isDemoActive();
|
|
919
1038
|
const ok = await confirm({
|
|
920
1039
|
title: "Pagina publiceren?",
|
|
921
|
-
description:
|
|
1040
|
+
description: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1041
|
+
publiceerSamenvatting(d.path, demo, controleerPagina(d, await publicatieContext(siteId))),
|
|
1042
|
+
demo && /* @__PURE__ */ jsx("p", { className: "mt-1", children: "In deze demo blijft alles in je eigen browser \u2014 er gaat niets echt online." })
|
|
1043
|
+
] }),
|
|
922
1044
|
confirmLabel: "Publiceren"
|
|
923
1045
|
});
|
|
924
1046
|
if (!ok) return;
|
|
@@ -941,29 +1063,33 @@ function VisualEditorInner({ onClose }) {
|
|
|
941
1063
|
setPublishing(false);
|
|
942
1064
|
}
|
|
943
1065
|
}
|
|
944
|
-
const
|
|
1066
|
+
const blockKeys = useMemo(() => blocks.map((b) => b._key), [blocks]);
|
|
945
1067
|
const selectedIndex = blocks.findIndex((b) => b._key === selectedKey);
|
|
946
1068
|
const selected = selectedIndex >= 0 ? blocks[selectedIndex] : null;
|
|
947
1069
|
const canUndo = historyRef.current.past.length > 0;
|
|
948
1070
|
const canRedo = historyRef.current.future.length > 0;
|
|
949
1071
|
const reloadRemote = useCallback(async () => {
|
|
950
1072
|
const remote = await getDraftByPath(siteId, path).catch(() => null);
|
|
951
|
-
if (remote) {
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
dirtyRef.current = false;
|
|
955
|
-
setStatus("idle");
|
|
1073
|
+
if (!remote) {
|
|
1074
|
+
toast({ title: "Nieuwste versie laden mislukt", description: "Controleer je verbinding en probeer het opnieuw. Je wijzigingen worden zolang niet opgeslagen.", tone: "error" });
|
|
1075
|
+
return;
|
|
956
1076
|
}
|
|
1077
|
+
mutateDraft(() => remote);
|
|
1078
|
+
lastSavedRef.current = stableStringify(draftPayload(remote));
|
|
1079
|
+
dirtyRef.current = false;
|
|
1080
|
+
setStatus("idle");
|
|
957
1081
|
setConflict(false);
|
|
958
|
-
}, [siteId, path, mutateDraft]);
|
|
1082
|
+
}, [siteId, path, mutateDraft, toast]);
|
|
959
1083
|
return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "xicms-ve__shell", "data-xicms-tooling": "", role: "group", "aria-label": `Pagina bewerken: ${path}`, children: [
|
|
960
1084
|
toonStartHint && /* @__PURE__ */ jsxs("div", { className: "xicms-ve-starthint", role: "status", children: [
|
|
961
1085
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
962
|
-
"
|
|
1086
|
+
"Het ",
|
|
963
1087
|
/* @__PURE__ */ jsx("strong", { children: "potlood" }),
|
|
964
|
-
"
|
|
965
|
-
/* @__PURE__ */ jsx("strong", { children: "
|
|
966
|
-
".
|
|
1088
|
+
" bij een blok: bewerk het op de pagina zelf \u2014 tekst, knoppen, kaarten toevoegen. Het ",
|
|
1089
|
+
/* @__PURE__ */ jsx("strong", { children: "tandwiel" }),
|
|
1090
|
+
": alle instellingen in de zijbalk. Een ",
|
|
1091
|
+
/* @__PURE__ */ jsx("strong", { children: "+" }),
|
|
1092
|
+
" onder een blok voegt iets toe. Klaar? ",
|
|
967
1093
|
/* @__PURE__ */ jsx("strong", { children: "Publiceren" }),
|
|
968
1094
|
" staat rechtsonder."
|
|
969
1095
|
] }),
|
|
@@ -990,7 +1116,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
990
1116
|
/* @__PURE__ */ jsx("span", { className: "xicms-ve__sep", "aria-hidden": "true" }),
|
|
991
1117
|
/* @__PURE__ */ jsx("span", { className: "xicms-ve__path", title: `Je bewerkt ${name} \u2014 ${path}`, children: path }),
|
|
992
1118
|
localeCfg.locales.length > 1 && /* @__PURE__ */ jsxs("span", { className: "xicms-ve__locale", title: "Taal \u2014 in een andere taal dan de standaard bewerk je vertalingen", children: [
|
|
993
|
-
|
|
1119
|
+
/* @__PURE__ */ jsx(Icon, { naam: "wereld", grootte: 14 }),
|
|
994
1120
|
/* @__PURE__ */ jsx(
|
|
995
1121
|
Select,
|
|
996
1122
|
{
|
|
@@ -1019,18 +1145,18 @@ function VisualEditorInner({ onClose }) {
|
|
|
1019
1145
|
title: "Pagina-instellingen (titel, SEO, versies)",
|
|
1020
1146
|
"aria-label": "Pagina-instellingen",
|
|
1021
1147
|
"aria-pressed": panelOpen && !selectedKey,
|
|
1022
|
-
children: "
|
|
1148
|
+
children: /* @__PURE__ */ jsx(Icon, { naam: "tandwiel", grootte: 15 })
|
|
1023
1149
|
}
|
|
1024
1150
|
),
|
|
1025
|
-
/* @__PURE__ */ jsx("button", { type: "button", className: "xicms-ve__histbtn", disabled: !canUndo, onClick: undo, title: "Ongedaan maken (Ctrl+Z)", "aria-label": "Ongedaan maken (Ctrl+Z)", children: "
|
|
1026
|
-
/* @__PURE__ */ jsx("button", { type: "button", className: "xicms-ve__histbtn", disabled: !canRedo, onClick: redo, title: "Opnieuw (Ctrl+Shift+Z)", "aria-label": "Opnieuw (Ctrl+Shift+Z)", children: "
|
|
1151
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "xicms-ve__histbtn", disabled: !canUndo, onClick: undo, title: "Ongedaan maken (Ctrl+Z)", "aria-label": "Ongedaan maken (Ctrl+Z)", children: /* @__PURE__ */ jsx(Icon, { naam: "ongedaan", grootte: 15 }) }),
|
|
1152
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "xicms-ve__histbtn", disabled: !canRedo, onClick: redo, title: "Opnieuw (Ctrl+Shift+Z)", "aria-label": "Opnieuw (Ctrl+Shift+Z)", children: /* @__PURE__ */ jsx(Icon, { naam: "opnieuw", grootte: 15 }) }),
|
|
1027
1153
|
status === "none" && /* @__PURE__ */ jsxs("span", { className: "xicms-ve__balkmelding", children: [
|
|
1028
1154
|
"Nog geen werkversie",
|
|
1029
1155
|
/* @__PURE__ */ jsx(Button, { size: "sm", onClick: () => void handleCreatePage(), children: "+ Pagina aanmaken" })
|
|
1030
1156
|
] }),
|
|
1031
1157
|
/* @__PURE__ */ jsxs("span", { className: "xicms-ve__status", "aria-live": "polite", children: [
|
|
1032
1158
|
status === "loading" ? "Werkversie laden\u2026" : null,
|
|
1033
|
-
status === "saving" ? "Opslaan\u2026" : status === "saved" ? "\u2713 Bewaard als werkversie" : status === "error" ? "\u26A0 Niet opgeslagen" : ""
|
|
1159
|
+
!online && (status === "saving" || status === "error") ? "\u26A0 Geen verbinding \u2014 je werk wordt bewaard zodra je weer online bent" : status === "saving" ? "Opslaan\u2026" : status === "saved" ? "\u2713 Bewaard als werkversie" : status === "error" ? "\u26A0 Niet opgeslagen \u2014 we proberen het zo opnieuw" : ""
|
|
1034
1160
|
] }),
|
|
1035
1161
|
status === "error" && /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: () => void flushSave().catch(() => setStatus("error")), children: "Opnieuw opslaan" })
|
|
1036
1162
|
] }),
|
|
@@ -1040,15 +1166,13 @@ function VisualEditorInner({ onClose }) {
|
|
|
1040
1166
|
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: () => setConflict(false), children: "Mijn versie behouden" })
|
|
1041
1167
|
] }),
|
|
1042
1168
|
/* @__PURE__ */ jsx("div", { className: `xicms-ve__body${panelOpen ? " is-panel-open" : ""}`, children: panelOpen && /* @__PURE__ */ jsxs("aside", { className: "xicms-ve__panel", children: [
|
|
1043
|
-
/* @__PURE__ */
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
/* @__PURE__ */ jsx(PatternInserter, { onInsert: insertAfterSelected })
|
|
1051
|
-
] }),
|
|
1169
|
+
/* @__PURE__ */ jsx("div", { className: "xicms-ve__inserter", children: /* @__PURE__ */ jsxs(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => {
|
|
1170
|
+
setInvoegNa(null);
|
|
1171
|
+
setKiezerOpen(true);
|
|
1172
|
+
}, children: [
|
|
1173
|
+
"+ Blok of sectie toevoegen",
|
|
1174
|
+
selected ? " (na dit blok)" : ""
|
|
1175
|
+
] }) }),
|
|
1052
1176
|
selectedProduct ? /* @__PURE__ */ jsxs("div", { className: "grid gap-3", children: [
|
|
1053
1177
|
/* @__PURE__ */ jsxs("div", { className: "xicms-ve__panel-head", children: [
|
|
1054
1178
|
/* @__PURE__ */ jsx("span", { className: "text-sm text-slate-500", children: "Webwinkel" }),
|
|
@@ -1082,10 +1206,11 @@ function VisualEditorInner({ onClose }) {
|
|
|
1082
1206
|
/* @__PURE__ */ jsx(
|
|
1083
1207
|
Button,
|
|
1084
1208
|
{
|
|
1209
|
+
loading: status === "saving",
|
|
1085
1210
|
size: "sm",
|
|
1086
1211
|
variant: status === "saving" || status === "error" ? "primary" : "ghost",
|
|
1087
1212
|
onClick: () => void flushSave().catch(() => setStatus("error")),
|
|
1088
|
-
children: status === "saving" ? "Opslaan
|
|
1213
|
+
children: status === "saving" ? "Opslaan" : status === "error" ? "Opnieuw opslaan" : "\u2713 Opgeslagen"
|
|
1089
1214
|
}
|
|
1090
1215
|
),
|
|
1091
1216
|
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "ghost", onClick: () => setPanelOpen(false), children: "\u2715 Sluiten" })
|
|
@@ -1124,6 +1249,19 @@ function VisualEditorInner({ onClose }) {
|
|
|
1124
1249
|
},
|
|
1125
1250
|
onSelect: (m) => {
|
|
1126
1251
|
if (imgPicker) {
|
|
1252
|
+
const blok = blocksRef.current.find((b) => b._key === imgPicker.key);
|
|
1253
|
+
if (blok?._type === "hero" && imgPicker.field === "imageUrl" && m.width && m.width < 1400) {
|
|
1254
|
+
toast({ title: "Kleine foto voor een openingsbeeld", description: `Deze foto is ${m.width} pixels breed; schermvullend kan hij korrelig ogen. Liefst 1600 pixels of meer.` });
|
|
1255
|
+
}
|
|
1256
|
+
if (blok?._type === "hero" && imgPicker.field === "imageUrl") {
|
|
1257
|
+
const extra = heroBeeldPatch(blok, m.url);
|
|
1258
|
+
if (extra.overlayGradient) {
|
|
1259
|
+
mutateDraft((d) => ({
|
|
1260
|
+
...d,
|
|
1261
|
+
blocks: d.blocks.map((b) => b._key === imgPicker.key ? { ...b, overlayGradient: true } : b)
|
|
1262
|
+
}));
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1127
1265
|
commitInline(imgPicker.key, imgPicker.field, m.url);
|
|
1128
1266
|
const altField = imgPicker.field.replace(/(^|\.)((image)?[uU]rl)$/, "$1alt");
|
|
1129
1267
|
if (altField !== imgPicker.field) commitInline(imgPicker.key, altField, m.alt ?? "");
|
|
@@ -1141,7 +1279,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
1141
1279
|
{
|
|
1142
1280
|
type: "button",
|
|
1143
1281
|
className: `xicms-ve-blokknop${b.key === selectedKey ? " is-on" : ""}`,
|
|
1144
|
-
title:
|
|
1282
|
+
title: `${b.label}: op de pagina bewerken`,
|
|
1145
1283
|
"aria-label": `Tekst van ${b.label} bewerken`,
|
|
1146
1284
|
onMouseDown: (e) => e.preventDefault(),
|
|
1147
1285
|
onClick: () => {
|
|
@@ -1165,7 +1303,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
1165
1303
|
{
|
|
1166
1304
|
type: "button",
|
|
1167
1305
|
className: `xicms-ve-blokknop${b.key === selectedKey && panelOpen ? " is-on" : ""}`,
|
|
1168
|
-
title:
|
|
1306
|
+
title: `${b.label}: alle instellingen (zijbalk)`,
|
|
1169
1307
|
"aria-label": `Instellingen van ${b.label}`,
|
|
1170
1308
|
onMouseDown: (e) => e.preventDefault(),
|
|
1171
1309
|
onClick: () => {
|
|
@@ -1216,8 +1354,8 @@ function VisualEditorInner({ onClose }) {
|
|
|
1216
1354
|
onMouseDown: (e) => e.preventDefault(),
|
|
1217
1355
|
onClick: () => {
|
|
1218
1356
|
setSelectedProduct(null);
|
|
1219
|
-
|
|
1220
|
-
|
|
1357
|
+
setInvoegNa(b.key);
|
|
1358
|
+
setKiezerOpen(true);
|
|
1221
1359
|
},
|
|
1222
1360
|
children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "13", height: "13", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M12 5v14M5 12h14" }) })
|
|
1223
1361
|
}
|
|
@@ -1294,6 +1432,42 @@ function VisualEditorInner({ onClose }) {
|
|
|
1294
1432
|
] }) })
|
|
1295
1433
|
] }, b.key);
|
|
1296
1434
|
}),
|
|
1435
|
+
draft && !isTranslating && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1436
|
+
/* @__PURE__ */ jsx(BlokKader, { sleutels: blockKeys, gekozen: selectedKey, labelVoor: (k) => registry.get(String(blocks.find((b) => b._key === k)?._type ?? ""))?.label ?? "Blok" }),
|
|
1437
|
+
/* @__PURE__ */ jsx(TussenPlus, { sleutels: blockKeys, onKies: (na) => {
|
|
1438
|
+
setInvoegNa(na);
|
|
1439
|
+
setKiezerOpen(true);
|
|
1440
|
+
} })
|
|
1441
|
+
] }),
|
|
1442
|
+
/* @__PURE__ */ jsx(
|
|
1443
|
+
BlokKiezer,
|
|
1444
|
+
{
|
|
1445
|
+
open: kiezerOpen,
|
|
1446
|
+
onOpenChange: (v) => {
|
|
1447
|
+
setKiezerOpen(v);
|
|
1448
|
+
if (!v) setInvoegNa(null);
|
|
1449
|
+
},
|
|
1450
|
+
onBlok: addBlock,
|
|
1451
|
+
onSectie: insertAfterSelected
|
|
1452
|
+
}
|
|
1453
|
+
),
|
|
1454
|
+
selectedKey && !isTranslating && (() => {
|
|
1455
|
+
const blok = blocks.find((b) => b._key === selectedKey);
|
|
1456
|
+
if (!blok) return null;
|
|
1457
|
+
return /* @__PURE__ */ jsx(
|
|
1458
|
+
InlineGereedschap,
|
|
1459
|
+
{
|
|
1460
|
+
blok,
|
|
1461
|
+
def: registry.get(String(blok._type)),
|
|
1462
|
+
siteId,
|
|
1463
|
+
onWijzig: (volgend) => setBlocks(blocks.map((b) => b._key === blok._key ? { ...volgend, _key: b._key, _type: b._type } : b)),
|
|
1464
|
+
onInstellingen: () => setPanelOpen(true),
|
|
1465
|
+
onStartVeld: startVeld,
|
|
1466
|
+
onVerwijderd: (wat) => toast({ title: `${wat} weggehaald`, action: { label: "Ongedaan maken", onClick: () => undo() } })
|
|
1467
|
+
},
|
|
1468
|
+
blok._key
|
|
1469
|
+
);
|
|
1470
|
+
})(),
|
|
1297
1471
|
spots.map((s, i) => {
|
|
1298
1472
|
const actief = editingIndex === i;
|
|
1299
1473
|
return /* @__PURE__ */ jsx(
|
|
@@ -1382,50 +1556,24 @@ function VisualEditorInner({ onClose }) {
|
|
|
1382
1556
|
onClick: () => void onPublish(),
|
|
1383
1557
|
title: wijzigingen.iets ? "Zet deze wijzigingen op de live site" : "Er is niets veranderd sinds de laatste publicatie",
|
|
1384
1558
|
children: [
|
|
1385
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-ve-publiceer__label", children: publishing ? "
|
|
1559
|
+
/* @__PURE__ */ jsx("span", { className: "xicms-ve-publiceer__label", children: publishing ? "Publiceren\u2026" : "Publiceren" }),
|
|
1386
1560
|
/* @__PURE__ */ jsx("span", { className: "xicms-ve-publiceer__sub", children: wijzigingen.iets ? aantalWijzigingen(wijzigingen) : "niets gewijzigd" })
|
|
1387
1561
|
]
|
|
1388
1562
|
}
|
|
1389
1563
|
),
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
if (url === null) return;
|
|
1402
|
-
if (url === "" || url === "https://") document.execCommand("unlink");
|
|
1403
|
-
else document.execCommand("createLink", false, url);
|
|
1404
|
-
}
|
|
1405
|
-
}
|
|
1406
|
-
),
|
|
1407
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-ve-fmtbar__sep", "aria-hidden": true }),
|
|
1408
|
-
/* @__PURE__ */ jsx(FmtBtn, { label: "H2", title: "Grote kop", onRun: () => document.execCommand("formatBlock", false, "<h2>") }),
|
|
1409
|
-
/* @__PURE__ */ jsx(FmtBtn, { label: "H3", title: "Kleine kop", onRun: () => document.execCommand("formatBlock", false, "<h3>") }),
|
|
1410
|
-
/* @__PURE__ */ jsx(FmtBtn, { label: "\xB6", title: "Normale tekst", onRun: () => document.execCommand("formatBlock", false, "<p>") }),
|
|
1411
|
-
/* @__PURE__ */ jsx("span", { className: "xicms-ve-fmtbar__sep", "aria-hidden": true }),
|
|
1412
|
-
/* @__PURE__ */ jsx(FmtBtn, { label: "\u2022", title: "Opsomming", onRun: () => document.execCommand("insertUnorderedList") })
|
|
1413
|
-
] })
|
|
1564
|
+
rijk && /* @__PURE__ */ jsx(
|
|
1565
|
+
InlineRijkeTekst,
|
|
1566
|
+
{
|
|
1567
|
+
el: rijk.el,
|
|
1568
|
+
siteId,
|
|
1569
|
+
onCommit: (html) => commitText(rijk.key, rijk.field, html),
|
|
1570
|
+
onKlaar: stopRijk,
|
|
1571
|
+
flushRef: rijkFlushRef
|
|
1572
|
+
},
|
|
1573
|
+
`${rijk.key}:${rijk.field}`
|
|
1574
|
+
)
|
|
1414
1575
|
] });
|
|
1415
1576
|
}
|
|
1416
|
-
function FmtBtn({ label, title, onRun }) {
|
|
1417
|
-
return /* @__PURE__ */ jsx(
|
|
1418
|
-
"button",
|
|
1419
|
-
{
|
|
1420
|
-
type: "button",
|
|
1421
|
-
title,
|
|
1422
|
-
"aria-label": title,
|
|
1423
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
1424
|
-
onClick: onRun,
|
|
1425
|
-
children: label
|
|
1426
|
-
}
|
|
1427
|
-
);
|
|
1428
|
-
}
|
|
1429
1577
|
function MeterRegel({ m }) {
|
|
1430
1578
|
const kleur = m.toon === "goed" ? "text-emerald-700" : m.toon === "lang" || m.toon === "leeg" ? "text-amber-700" : "text-slate-500";
|
|
1431
1579
|
return /* @__PURE__ */ jsx("p", { className: `mt-1 text-xs ${kleur}`, children: m.tekst });
|
|
@@ -1437,7 +1585,7 @@ function PageSettings({
|
|
|
1437
1585
|
}) {
|
|
1438
1586
|
const seo = draft.seo ?? {};
|
|
1439
1587
|
const { toast } = useToast();
|
|
1440
|
-
const [
|
|
1588
|
+
const [previewLink, setPreviewLink] = useState(null);
|
|
1441
1589
|
const [bezig, setBezig] = useState(false);
|
|
1442
1590
|
async function maakPreviewLink() {
|
|
1443
1591
|
const { getFirebaseApp } = await import("../../firebase/client.js");
|
|
@@ -1447,15 +1595,15 @@ function PageSettings({
|
|
|
1447
1595
|
setBezig(true);
|
|
1448
1596
|
try {
|
|
1449
1597
|
const res = await callable(app, "createPreviewLink")({ siteId, path: draft.path });
|
|
1450
|
-
|
|
1598
|
+
setPreviewLink(res.data);
|
|
1451
1599
|
try {
|
|
1452
1600
|
await navigator.clipboard?.writeText(res.data.url);
|
|
1453
|
-
toast({ title: "
|
|
1601
|
+
toast({ title: "Voorbeeldlink gekopieerd", description: "Zeven dagen geldig; wie hem opent ziet de nieuwste stand, ook wat nog niet live is.", tone: "success" });
|
|
1454
1602
|
} catch {
|
|
1455
|
-
toast({ title: "
|
|
1603
|
+
toast({ title: "Voorbeeldlink gemaakt", tone: "success" });
|
|
1456
1604
|
}
|
|
1457
1605
|
} catch (e) {
|
|
1458
|
-
toast({ title: "
|
|
1606
|
+
toast({ title: "Voorbeeldlink mislukt", description: e.message, tone: "error" });
|
|
1459
1607
|
} finally {
|
|
1460
1608
|
setBezig(false);
|
|
1461
1609
|
}
|
|
@@ -1487,9 +1635,9 @@ function PageSettings({
|
|
|
1487
1635
|
}
|
|
1488
1636
|
),
|
|
1489
1637
|
!isDemoActive() && /* @__PURE__ */ jsxs("div", { className: "grid gap-1 border-t border-slate-200 pt-3", children: [
|
|
1490
|
-
/* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", disabled: bezig, onClick: () => void maakPreviewLink(), children:
|
|
1638
|
+
/* @__PURE__ */ jsx(Button, { loading: bezig, variant: "secondary", size: "sm", disabled: bezig, onClick: () => void maakPreviewLink(), children: "Voorbeeldlink delen" }),
|
|
1491
1639
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500", children: "Laat iemand zonder inlog meekijken naar de werkversie. Zeven dagen geldig, geen toegang tot het beheer." }),
|
|
1492
|
-
|
|
1640
|
+
previewLink && /* @__PURE__ */ jsx(PreviewLinkResultaat, { link: previewLink, titel: draft.title })
|
|
1493
1641
|
] })
|
|
1494
1642
|
] })
|
|
1495
1643
|
] });
|
|
@@ -1508,8 +1656,8 @@ function PageTranslationSettings({
|
|
|
1508
1656
|
] }),
|
|
1509
1657
|
/* @__PURE__ */ jsxs("div", { className: "mt-2 grid gap-3", children: [
|
|
1510
1658
|
/* @__PURE__ */ jsx(Field, { label: "Paginatitel", hint: `Origineel: ${draft.title ?? ""}`, children: /* @__PURE__ */ jsx(Input, { value: ov["title"] ?? "", placeholder: draft.title ?? "", onChange: (e) => onTranslate("title", e.target.value) }) }),
|
|
1511
|
-
/* @__PURE__ */ jsx(Field, { label: "
|
|
1512
|
-
/* @__PURE__ */ jsx(Field, { label: "
|
|
1659
|
+
/* @__PURE__ */ jsx(Field, { label: "Titel in Google", children: /* @__PURE__ */ jsx(Input, { value: ov["seo.title"] ?? "", placeholder: draft.seo?.title ?? "", onChange: (e) => onTranslate("seo.title", e.target.value) }) }),
|
|
1660
|
+
/* @__PURE__ */ jsx(Field, { label: "Omschrijving in Google", children: /* @__PURE__ */ jsx(Textarea, { rows: 3, value: ov["seo.description"] ?? "", placeholder: draft.seo?.description ?? "", onChange: (e) => onTranslate("seo.description", e.target.value) }) })
|
|
1513
1661
|
] })
|
|
1514
1662
|
] });
|
|
1515
1663
|
}
|
|
@@ -1526,7 +1674,7 @@ function VersionsPanel({
|
|
|
1526
1674
|
const restore = async (versionId) => {
|
|
1527
1675
|
const ok = await confirm({
|
|
1528
1676
|
title: "Versie herstellen?",
|
|
1529
|
-
description: "
|
|
1677
|
+
description: "Deze versie vervangt je huidige werkversie (ongedaan te maken met Ctrl+Z). De live site verandert pas bij Publiceren.",
|
|
1530
1678
|
confirmLabel: "Herstellen"
|
|
1531
1679
|
});
|
|
1532
1680
|
if (!ok) return;
|
|
@@ -1542,7 +1690,7 @@ function VersionsPanel({
|
|
|
1542
1690
|
/* @__PURE__ */ jsx("ul", { className: "mt-2 grid gap-1 text-sm", children: versions.slice(0, 10).map((v) => /* @__PURE__ */ jsxs("li", { className: "flex items-center justify-between gap-2", children: [
|
|
1543
1691
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
1544
1692
|
v.label ?? (v.kind === "publish" ? "Gepubliceerd" : v.kind ?? "Snapshot"),
|
|
1545
|
-
formatVersionDate(v.createdAt) && /* @__PURE__ */ jsxs("span", { className: "text-slate-
|
|
1693
|
+
formatVersionDate(v.createdAt) && /* @__PURE__ */ jsxs("span", { className: "text-slate-500", children: [
|
|
1546
1694
|
" \xB7 ",
|
|
1547
1695
|
formatVersionDate(v.createdAt)
|
|
1548
1696
|
] })
|