@xiwebdesign/xicms-core 7.30.0 → 8.15.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 +22 -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 -56
- 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 +247 -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 +144 -0
- package/dist/admin/settings/BedrijfInstellingen.js.map +1 -0
- package/dist/admin/settings/MailSettings.js +2 -2
- package/dist/admin/settings/MailSettings.js.map +1 -1
- 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 +27 -1
- 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/bedrijf/bedrijf.d.ts +36 -0
- package/dist/bedrijf/bedrijf.js +110 -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 +29 -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 +1 -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/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/site/SiteFooter.d.ts +6 -1
- package/dist/components/site/SiteFooter.js +61 -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/index.d.ts +4 -1
- package/dist/index.js +16 -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 +16 -3
- package/dist/modules/builtins.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 +140 -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 +470 -0
- package/dist/schema/blocks.js +102 -4
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/business.d.ts +117 -0
- package/dist/schema/business.js +73 -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 +101 -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 +68 -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 +15 -2
- 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 +1149 -208
- 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 +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/admin/AdminApp.tsx"],"sourcesContent":["\"use client\";\n\nimport { registerBuiltinSchemas } from \"../blocks/builtinSchemas\";\n// Schema's zijn lazy (7.13): dit is een editor-chunk, dus hier horen ze thuis.\nregisterBuiltinSchemas();\nimport { useState } from \"react\";\nimport { useAuth } from \"../auth/AuthProvider\";\nimport { LoginForm } from \"../auth/LoginForm\";\nimport { useSiteConfig } from \"../config\";\nimport { useModules } from \"../modules/context\";\nimport { canEdit, canManageSite, type Role } from \"../auth/roles\";\nimport { Tabs, TabsContent } from \"./ui/tabs\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { ToastProvider } from \"./ui/toast\";\nimport { ConfirmHost } from \"./ui/ConfirmDialog\";\nimport { Button } from \"./ui/primitives\";\nimport { PanelIcon } from \"./ui/PanelIcon\";\nimport { builtinPanels, type PanelDefinition } from \"./panelRegistry\";\nimport { AdminNavContext } from \"./navContext\";\nimport { AdminHelp } from \"./AdminHelp\";\nimport { CoreVersion, WatIsNieuw } from \"./CoreVersion\";\n\n/**\n * Rol-bewaakt beheer (XiCMS 3.0). De secties komen uit de paneel-registry, gefilterd op de actieve\n * modules (`SiteConfig.modules`/`features`) en de rol van de gebruiker. Een module met een eigen\n * paneel (ook klant-modules via `extraPanels`) verschijnt automatisch.\n *\n * VORM: een schermvullend werkblad met een vaste zijbalk, geen kaart in de pagina. Het beheer viel\n * hiervoor binnen de site-chrome — nav erboven, footer eronder, cookiebanner eroverheen — en las\n * daardoor als een blok ergens op de website in plaats van als gereedschap. De site-chrome leeft nu\n * in `app/(site)/layout.tsx`; /beheer valt daarbuiten.\n *\n * De zijbalk verving de horizontale tabstrip omdat die bij zeven of meer panelen al omsloeg naar een\n * tweede regel. Verticaal is er bovendien ruimte voor een icoon naast het woord, en `orientation`\n * houdt de pijltjestoetsen correct (Radix).\n *\n * Wikkel in `.xicms-admin` zodat de Tailwind-stijlen uit `@xiwebdesign/xicms-core/admin.css` scoped\n * blijven en niet naar de site lekken. Importeer die CSS alleen op de /beheer-route.\n */\nfunction roleAllows(role: Role | null, min: PanelDefinition[\"minRole\"]): boolean {\n return min === \"siteadmin\" ? canManageSite(role) : canEdit(role);\n}\n\n/** Gecentreerde boodschap voor de toestanden waarin er (nog) geen beheer te tonen is. */\nfunction Melding({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"xicms-admin__midden grid place-items-center p-6\">\n <div className=\"w-full max-w-md rounded-xl border border-slate-200 bg-white p-6 text-sm shadow-sm\">{children}</div>\n </div>\n );\n}\n\nexport function AdminApp({\n extraPanels = [],\n embedded = false,\n}: {\n extraPanels?: PanelDefinition[];\n /**\n * Draait het beheer BINNEN de site-schil (header, logo, menu, footer eromheen) in plaats van als\n * schermvullend werkblad op een kale pagina?\n *\n * Het verschil is niet cosmetisch. Los rekent het werkblad met het VENSTER: `min-h-screen`, en een\n * zijbalk die met `sticky top-0` aan de bovenkant van het scherm plakt. Zet je daar een\n * site-header boven, dan loopt de pagina 100vh + de hoogte van die header, en plakt de zijbalk\n * onder de header vast in plaats van erlangs. Ingebed laat de zijbalk daarom los van het venster\n * en wordt hij een balk over de volle breedte — dat vecht niet met de navigatie erboven.\n */\n embedded?: boolean;\n}) {\n const { user, role, loading, configured, signOut } = useAuth();\n const { name, siteId } = useSiteConfig();\n const { activeIds } = useModules();\n\n // Panelen van actieve modules waar de rol toegang toe heeft, gesorteerd op volgorde.\n const panels = [...builtinPanels, ...extraPanels]\n .filter((p) => activeIds.has(p.moduleId) && roleAllows(role, p.minRole))\n .sort((a, b) => a.order - b.order);\n /** Sleutel van een paneel in de tabbladen: eigen `id` als die er is, anders de module-id. */\n const sleutel = (p: PanelDefinition) => p.id ?? p.moduleId;\n const firstTab = panels[0] && sleutel(panels[0]);\n // Gecontroleerd i.p.v. `defaultValue`: het werkblad toont de naam van de sectie waar je in zit.\n // Zonder die kop lees je alleen aan de zijbalk-markering af waar je bent, en dat is te weinig\n // houvast op een breed scherm waar de zijbalk ver van je blik af staat.\n const [actief, setActief] = useState<string | undefined>(firstTab);\n const actievePanel = panels.find((p) => sleutel(p) === (actief ?? firstTab));\n\n return (\n <div className={embedded ? \"xicms-admin xicms-admin--ingebed\" : \"xicms-admin\"}>\n <ToastProvider>\n <ConfirmHost>\n {!configured ? (\n <Melding>\n Firebase is nog niet geconfigureerd. Vul de <code>NEXT_PUBLIC_FIREBASE_*</code>-variabelen in\n om het beheer aan te zetten.\n </Melding>\n ) : loading ? (\n <Melding>\n <span className=\"text-slate-500\">Bezig met laden…</span>\n </Melding>\n ) : !user ? (\n <div className=\"xicms-admin__midden grid place-items-center p-6\">\n <div className=\"w-full max-w-sm\">\n <p className=\"mb-4 text-center text-sm text-slate-500\">Beheer · {name}</p>\n {/*\n Na inloggen naar de HOMEPAGINA, niet naar dit scherm.\n\n Dat is een sturende keuze, geen detail. Wie op het beheer uitkomt gaat daar\n rondkijken en bewerkt zijn teksten in formulieren. Wie op zijn eigen site uitkomt\n ziet de beheerbalk over de pagina heen en past de tekst aan op de plek waar hij\n staat — en dat is waar XiCMS voor gemaakt is. Het beheer blijft één klik weg, via\n \"Beheren\" in die balk, voor het werk dat er wél thuishoort.\n\n Ook hier en niet alleen op /login: je komt op /beheer terecht via een bladwijzer of\n een oude link, en dan gold die keuze ineens niet.\n */}\n <LoginForm onSuccess={() => { window.location.replace(\"/\"); }} />\n </div>\n </div>\n ) : !canEdit(role) ? (\n <Melding>\n Je bent ingelogd als <strong>{user.email}</strong>, maar hebt geen beheerrechten voor deze site.\n <div className=\"mt-3\">\n <Button variant=\"secondary\" size=\"sm\" onClick={() => void signOut()}>Uitloggen</Button>\n </div>\n </Melding>\n ) : panels.length === 0 ? (\n <Melding>Geen actieve beheer-modules voor deze site.</Melding>\n ) : (\n <AdminNavContext.Provider value={setActief}>\n {/*\n * Ingebed vs. losstaand kiest hier al TUSSEN de Tailwind-classnamen, niet erna via CSS.\n *\n * De eerdere aanpak (7.28/7.29) probeerde deze layout via CSS te overrulen — een\n * `.xicms-admin--ingebed`-selector met `!important` tegen Tailwinds eigen, ook al\n * `!important` gemaakte utilities (de `@scope`-import bovenin admin.css). Op de echte\n * klantsite bleek dat na TWEE releases nog steeds niet te werken: `getComputedStyle`\n * liet zien dat `md:grid`/`md:sticky`/`flex-col` het bleven winnen, wat een CSS-\n * cascade-gevecht is dat theoretisch nooit betrouwbaar te winnen is (laag-volgorde\n * en @scope-proximiteit gedragen zich niet zoals de commentaren daar veronderstelden).\n * De enige robuuste oplossing: de conflicterende classnamen helemaal niet uitzenden\n * wanneer ingebed, zodat er geen cascade-gevecht kán ontstaan.\n */}\n <Tabs\n value={actief ?? firstTab}\n onValueChange={setActief}\n orientation=\"vertical\"\n className={embedded ? \"xicms-admin__raster\" : \"xicms-admin__raster md:grid md:grid-cols-[248px_1fr]\"}\n >\n {/* ── Zijbalk ─────────────────────────────────────────────────────────── */}\n <div\n className={\n embedded\n ? \"xicms-admin__rail flex flex-row flex-wrap items-center gap-4 border-b border-slate-200 p-2\"\n : \"xicms-admin__rail flex flex-col gap-4 border-b border-slate-200 p-4 md:sticky md:top-0 md:h-screen md:border-r md:border-b-0\"\n }\n style={{ background: \"var(--admin-sidebar)\" }}\n >\n <div className=\"min-w-0 px-2 pt-1\">\n <p className=\"truncate text-sm font-semibold\">{name}</p>\n <p className=\"text-xs text-slate-500\">Beheer</p>\n </div>\n\n <TabsPrimitive.List\n aria-label=\"Beheer-secties\"\n className={\n embedded\n ? \"xicms-admin__lijst -mx-1 flex flex-row gap-1 overflow-x-auto\"\n : \"xicms-admin__lijst -mx-1 flex gap-1 overflow-x-auto md:flex-col md:overflow-visible\"\n }\n >\n {panels.map((p) => (\n <TabsPrimitive.Trigger\n key={sleutel(p)}\n value={sleutel(p)}\n className=\"flex shrink-0 items-center gap-2.5 rounded-lg px-3 py-2 text-sm font-medium text-slate-600 hover:bg-slate-200 hover:text-slate-900 focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:outline-none data-[state=active]:bg-slate-100 data-[state=active]:text-slate-900 data-[state=active]:shadow-[inset_2px_0_0_0_var(--color-brand-500)]\"\n >\n {/* Op paneel-sleutel, niet module-id: Menu, Bouwstenen en Start delen de\n content-module maar zijn drie verschillende plekken met drie vormen. */}\n <PanelIcon id={sleutel(p)} />\n {p.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n\n {/* Voet van de zijbalk: wie ben ik, welke engine draait er, en eruit. Stond eerder als\n vier losse regels op elkaar gepakt — e-mail, rol, versie en een onderstreepte link\n liepen visueel in elkaar over. Nu drie duidelijke lagen met lucht ertussen, en\n Uitloggen als een echte knop in plaats van een tekstlink. */}\n <div\n className={\n embedded\n ? \"xicms-admin__voet ml-auto flex min-w-0 flex-row items-center gap-3 border-t-0 pt-0\"\n : \"xicms-admin__voet mt-auto hidden min-w-0 flex-col gap-3 border-t border-slate-200 pt-3 md:flex\"\n }\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-xs font-medium text-slate-600\" title={user.email ?? undefined}>{user.email}</p>\n <p className=\"text-xs text-slate-400\">{role}</p>\n </div>\n <CoreVersion />\n <Button variant=\"secondary\" size=\"sm\" onClick={() => void signOut()}>\n Uitloggen\n </Button>\n </div>\n </div>\n\n {/* ── Werkblad ────────────────────────────────────────────────────────── */}\n <div className=\"min-w-0\">\n <header\n className={\n embedded\n ? \"xicms-admin__kop static z-10 flex items-center justify-between gap-4 border-b border-slate-200 px-4 py-3 md:px-8\"\n : \"xicms-admin__kop sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-slate-200 px-4 py-3 md:px-8\"\n }\n style={{ background: \"var(--admin-canvas)\" }}\n >\n <h1 className=\"truncate text-base font-semibold\">{actievePanel?.label ?? \"Beheer\"}</h1>\n <a\n className=\"inline-flex h-8 shrink-0 items-center rounded-lg border border-slate-200 px-3 text-sm hover:bg-slate-100 focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:outline-none\"\n href=\"/\"\n >\n Bekijk site ↗\n </a>\n </header>\n <div className=\"grid gap-6 p-4 md:p-8\">\n <WatIsNieuw />\n {panels.map((p) => (\n <TabsContent key={sleutel(p)} value={sleutel(p)} className=\"pt-0\">\n <p.Panel siteId={siteId} />\n </TabsContent>\n ))}\n <AdminHelp />\n </div>\n </div>\n </Tabs>\n </AdminNavContext.Provider>\n )}\n </ConfirmHost>\n </ToastProvider>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/admin/AdminApp.tsx"],"sourcesContent":["\"use client\";\n\nimport { registerBuiltinSchemas } from \"../blocks/builtinSchemas\";\n// Schema's zijn lazy (7.13): dit is een editor-chunk, dus hier horen ze thuis.\nregisterBuiltinSchemas();\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAuth } from \"../auth/AuthProvider\";\nimport { LoginForm } from \"../auth/LoginForm\";\nimport { useSiteConfig } from \"../config\";\nimport { useModules } from \"../modules/context\";\nimport { canEdit, canManageSite, type Role } from \"../auth/roles\";\nimport { Tabs, TabsContent } from \"./ui/tabs\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { ToastProvider } from \"./ui/toast\";\nimport { ConfirmHost, useConfirm } from \"./ui/ConfirmDialog\";\nimport { heeftOnopgeslagen, ONOPGESLAGEN_VRAAG, vergeetOnopgeslagen } from \"./lib/onopgeslagen\";\nimport { Button } from \"./ui/primitives\";\nimport { Icon } from \"./ui/Icon\";\nimport { PanelIcon } from \"./ui/PanelIcon\";\nimport { builtinPanels, type PanelDefinition } from \"./panelRegistry\";\nimport { AdminNavContext } from \"./navContext\";\nimport { AdminHelp } from \"./AdminHelp\";\nimport { ZoekPalet } from \"./ZoekPalet\";\nimport { CoreVersion, WatIsNieuw } from \"./CoreVersion\";\n\n/**\n * Rol-bewaakt beheer (XiCMS 3.0). De secties komen uit de paneel-registry, gefilterd op de actieve\n * modules (`SiteConfig.modules`/`features`) en de rol van de gebruiker. Een module met een eigen\n * paneel (ook klant-modules via `extraPanels`) verschijnt automatisch.\n *\n * VORM: een schermvullend werkblad met een vaste zijbalk, geen kaart in de pagina. Het beheer viel\n * hiervoor binnen de site-chrome — nav erboven, footer eronder, cookiebanner eroverheen — en las\n * daardoor als een blok ergens op de website in plaats van als gereedschap. De site-chrome leeft nu\n * in `app/(site)/layout.tsx`; /beheer valt daarbuiten.\n *\n * De zijbalk verving de horizontale tabstrip omdat die bij zeven of meer panelen al omsloeg naar een\n * tweede regel. Verticaal is er bovendien ruimte voor een icoon naast het woord, en `orientation`\n * houdt de pijltjestoetsen correct (Radix).\n *\n * Wikkel in `.xicms-admin` zodat de Tailwind-stijlen uit `@xiwebdesign/xicms-core/admin.css` scoped\n * blijven en niet naar de site lekken. Importeer die CSS alleen op de /beheer-route.\n */\nfunction roleAllows(role: Role | null, min: PanelDefinition[\"minRole\"]): boolean {\n if (min === \"superadmin\") return role === \"superadmin\";\n return min === \"siteadmin\" ? canManageSite(role) : canEdit(role);\n}\n\n/** Rollen in klanttaal (8.2: de zijbalk toonde \"siteadmin\"). */\nconst ROL_NAAM: Record<string, string> = { superadmin: \"Xi Webdesign\", siteadmin: \"Beheerder\", editor: \"Redacteur\" };\n\n/** Gecentreerde boodschap voor de toestanden waarin er (nog) geen beheer te tonen is. */\nfunction Melding({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"xicms-admin__midden grid place-items-center p-6\">\n <div className=\"w-full max-w-md rounded-xl border border-slate-200 bg-white p-6 text-sm shadow-sm\">{children}</div>\n </div>\n );\n}\n\nexport function AdminApp({\n extraPanels = [],\n embedded = false,\n}: {\n extraPanels?: PanelDefinition[];\n /**\n * Draait het beheer BINNEN de site-schil (header, logo, menu, footer eromheen) in plaats van als\n * schermvullend werkblad op een kale pagina?\n *\n * Het verschil is niet cosmetisch. Los rekent het werkblad met het VENSTER: `min-h-screen`, en een\n * zijbalk die met `sticky top-0` aan de bovenkant van het scherm plakt. Zet je daar een\n * site-header boven, dan loopt de pagina 100vh + de hoogte van die header, en plakt de zijbalk\n * onder de header vast in plaats van erlangs. Ingebed laat de zijbalk daarom los van het venster\n * en wordt hij een balk over de volle breedte — dat vecht niet met de navigatie erboven.\n */\n embedded?: boolean;\n}) {\n const { user, role, loading, configured, signOut } = useAuth();\n const { name, siteId } = useSiteConfig();\n const { activeIds } = useModules();\n\n // Panelen van actieve modules waar de rol toegang toe heeft, gesorteerd op volgorde.\n const panels = [...builtinPanels, ...extraPanels]\n .filter((p) => activeIds.has(p.moduleId) && roleAllows(role, p.minRole))\n .sort((a, b) => a.order - b.order);\n /** Sleutel van een paneel in de tabbladen: eigen `id` als die er is, anders de module-id. */\n const sleutel = (p: PanelDefinition) => p.id ?? p.moduleId;\n const firstTab = panels[0] && sleutel(panels[0]);\n // Gecontroleerd i.p.v. `defaultValue`: het werkblad toont de naam van de sectie waar je in zit.\n // Zonder die kop lees je alleen aan de zijbalk-markering af waar je bent, en dat is te weinig\n // houvast op een breed scherm waar de zijbalk ver van je blik af staat.\n const [actief, setActief] = useState<string | undefined>(firstTab);\n const actievePanel = panels.find((p) => sleutel(p) === (actief ?? firstTab));\n const geldig = (tab: string | undefined) => (tab && panels.some((p) => sleutel(p) === tab) ? tab : undefined);\n const panelSleutels = panels.map(sleutel).join(\",\");\n\n /**\n * 8.2: het tabblad staat in het adres (`/beheer#instellingen`). Herladen bracht je terug naar\n * Start, \"Terug\" in de browser verliet /beheer, en naar \"Instellingen\" linken kon niet.\n */\n useEffect(() => {\n const uitHash = decodeURIComponent(window.location.hash.slice(1));\n if (geldig(uitHash)) setActief(uitHash);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [panelSleutels]);\n\n /** Bevestigen gebeurt in een kind van ConfirmHost (zie ConfirmBrug); hier alleen de referentie. */\n const bevestigRef = useRef<ReturnType<typeof useConfirm> | null>(null);\n const actiefRef = useRef(actief);\n actiefRef.current = actief;\n\n /** Naar een ander paneel — met een vraag als er onopgeslagen werk weg zou gaan. */\n const gaNaar = useCallback(async (tab: string, opties: { geschiedenis?: boolean } = {}) => {\n if (tab === actiefRef.current) return true;\n if (heeftOnopgeslagen() && bevestigRef.current) {\n if (!(await bevestigRef.current(ONOPGESLAGEN_VRAAG))) return false;\n vergeetOnopgeslagen();\n }\n setActief(tab);\n if (opties.geschiedenis !== false) window.history.pushState(null, \"\", `#${encodeURIComponent(tab)}`);\n return true;\n }, []);\n\n // 8.4: zoekpalet (Ctrl/Cmd+K).\n const [zoekOpen, setZoekOpen] = useState(false);\n useEffect(() => {\n const toets = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"k\") {\n e.preventDefault();\n setZoekOpen(true);\n }\n };\n window.addEventListener(\"keydown\", toets);\n return () => window.removeEventListener(\"keydown\", toets);\n }, []);\n // Gememoiseerd: een nieuwe array bij elke render zou het palet tijdens het typen laten herladen.\n const zoekPanelen = useMemo(\n () => panels.map((p) => ({ tab: sleutel(p), label: p.label })),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [panelSleutels],\n );\n\n useEffect(() => {\n const terug = () => {\n const tab = decodeURIComponent(window.location.hash.slice(1)) || firstTab;\n if (!tab) return;\n void gaNaar(tab, { geschiedenis: false }).then((ok) => {\n // Terug geannuleerd: het adres weer gelijk trekken met wat er getoond wordt.\n if (!ok && actiefRef.current) window.history.pushState(null, \"\", `#${encodeURIComponent(actiefRef.current)}`);\n });\n };\n window.addEventListener(\"popstate\", terug);\n return () => window.removeEventListener(\"popstate\", terug);\n }, [gaNaar, firstTab]);\n\n return (\n <div className={embedded ? \"xicms-admin xicms-admin--ingebed\" : \"xicms-admin\"}>\n <ToastProvider>\n <ConfirmHost>\n <ConfirmBrug zet={(c) => { bevestigRef.current = c; }} />\n {!configured ? (\n <Melding>\n Firebase is nog niet geconfigureerd. Vul de <code>NEXT_PUBLIC_FIREBASE_*</code>-variabelen in\n om het beheer aan te zetten.\n </Melding>\n ) : loading ? (\n <Melding>\n <span className=\"text-slate-500\">Bezig met laden…</span>\n </Melding>\n ) : !user ? (\n <div className=\"xicms-admin__midden grid place-items-center p-6\">\n <div className=\"w-full max-w-sm\">\n <p className=\"mb-4 text-center text-sm text-slate-500\">Beheer · {name}</p>\n {/*\n Na inloggen naar de HOMEPAGINA, niet naar dit scherm.\n\n Dat is een sturende keuze, geen detail. Wie op het beheer uitkomt gaat daar\n rondkijken en bewerkt zijn teksten in formulieren. Wie op zijn eigen site uitkomt\n ziet de beheerbalk over de pagina heen en past de tekst aan op de plek waar hij\n staat — en dat is waar XiCMS voor gemaakt is. Het beheer blijft één klik weg, via\n \"Beheren\" in die balk, voor het werk dat er wél thuishoort.\n\n Ook hier en niet alleen op /login: je komt op /beheer terecht via een bladwijzer of\n een oude link, en dan gold die keuze ineens niet.\n */}\n <LoginForm onSuccess={() => { window.location.replace(\"/\"); }} />\n </div>\n </div>\n ) : !canEdit(role) ? (\n <Melding>\n Je bent ingelogd als <strong>{user.email}</strong>, maar hebt geen beheerrechten voor deze site.\n <div className=\"mt-3\">\n <Button variant=\"secondary\" size=\"sm\" onClick={() => void signOut()}>Uitloggen</Button>\n </div>\n </Melding>\n ) : panels.length === 0 ? (\n <Melding>Geen actieve beheer-modules voor deze site.</Melding>\n ) : (\n <AdminNavContext.Provider value={(tab) => void gaNaar(tab)}>\n {/*\n * Ingebed vs. losstaand kiest hier al TUSSEN de Tailwind-classnamen, niet erna via CSS.\n *\n * De eerdere aanpak (7.28/7.29) probeerde deze layout via CSS te overrulen — een\n * `.xicms-admin--ingebed`-selector met `!important` tegen Tailwinds eigen, ook al\n * `!important` gemaakte utilities (de `@scope`-import bovenin admin.css). Op de echte\n * klantsite bleek dat na TWEE releases nog steeds niet te werken: `getComputedStyle`\n * liet zien dat `md:grid`/`md:sticky`/`flex-col` het bleven winnen, wat een CSS-\n * cascade-gevecht is dat theoretisch nooit betrouwbaar te winnen is (laag-volgorde\n * en @scope-proximiteit gedragen zich niet zoals de commentaren daar veronderstelden).\n * De enige robuuste oplossing: de conflicterende classnamen helemaal niet uitzenden\n * wanneer ingebed, zodat er geen cascade-gevecht kán ontstaan.\n */}\n <Tabs\n value={actief ?? firstTab}\n onValueChange={(tab) => void gaNaar(tab)}\n orientation=\"vertical\"\n className={embedded ? \"xicms-admin__raster\" : \"xicms-admin__raster md:grid md:grid-cols-[248px_1fr]\"}\n >\n {/* ── Zijbalk ─────────────────────────────────────────────────────────── */}\n <div\n className={\n embedded\n ? \"xicms-admin__rail flex flex-row flex-wrap items-center gap-4 border-b border-slate-200 p-2\"\n : \"xicms-admin__rail flex flex-col gap-4 border-b border-slate-200 p-4 md:sticky md:top-0 md:h-screen md:border-r md:border-b-0\"\n }\n style={{ background: \"var(--admin-sidebar)\" }}\n >\n {/* Ingebed (8.6): naam, zoeken én account op één regel, de tabs eronder. Eerst liep de\n voet als derde rij onder de tabs door — ruim 50px kop extra boven elk paneel. */}\n <div className={embedded ? \"flex w-full min-w-0 items-center gap-2 px-2 pt-1\" : \"flex min-w-0 items-start justify-between gap-2 px-2 pt-1\"}>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{name}</p>\n <p className=\"text-xs text-slate-500\">Beheer</p>\n </div>\n <button\n type=\"button\"\n onClick={() => setZoekOpen(true)}\n className=\"xicms-admin-btn inline-flex shrink-0 items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-2 py-1 text-xs text-slate-600 hover:bg-slate-100\"\n aria-label=\"Zoeken in het beheer (Ctrl of Cmd + K)\"\n title=\"Zoeken (Ctrl/Cmd + K)\"\n >\n <Icon naam=\"zoek\" grootte={14} />\n Zoeken\n </button>\n {embedded && (\n <div className=\"xicms-admin__voet ml-auto flex min-w-0 items-center gap-3\">\n <p className=\"hidden min-w-0 truncate text-xs text-slate-600 sm:block\" title={`${user.email ?? \"\"} · ${ROL_NAAM[role ?? \"editor\"] ?? role}`}>\n {user.email}\n </p>\n <CoreVersion compact />\n <Button variant=\"secondary\" size=\"sm\" onClick={() => void signOut()}>\n Uitloggen\n </Button>\n </div>\n )}\n </div>\n\n <TabsPrimitive.List\n aria-label=\"Beheer-secties\"\n className={\n embedded\n ? \"xicms-admin__lijst -mx-1 flex flex-row gap-1 overflow-x-auto\"\n : \"xicms-admin__lijst -mx-1 flex gap-1 overflow-x-auto md:flex-col md:overflow-visible\"\n }\n >\n {panels.map((p) => (\n <TabsPrimitive.Trigger\n key={sleutel(p)}\n value={sleutel(p)}\n className=\"flex shrink-0 items-center gap-2.5 rounded-lg px-3 py-2 text-sm font-medium text-slate-600 hover:bg-slate-100 hover:text-slate-900 focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:outline-none data-[state=active]:bg-white data-[state=active]:text-slate-900 data-[state=active]:shadow-[inset_2px_0_0_0_var(--color-brand-500),0_1px_2px_rgba(27,26,23,0.08)]\"\n >\n {/* Op paneel-sleutel, niet module-id: Menu, Bouwstenen en Start delen de\n content-module maar zijn drie verschillende plekken met drie vormen. */}\n <PanelIcon id={sleutel(p)} />\n {p.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n\n {/* Voet van de zijbalk: wie ben ik, welke engine draait er, en eruit. Stond eerder als\n vier losse regels op elkaar gepakt — e-mail, rol, versie en een onderstreepte link\n liepen visueel in elkaar over. Nu drie duidelijke lagen met lucht ertussen, en\n Uitloggen als een echte knop in plaats van een tekstlink. */}\n {!embedded && (\n <div className=\"xicms-admin__voet mt-auto flex min-w-0 flex-row flex-wrap items-center gap-3 border-t border-slate-200 pt-3 md:flex-col md:items-stretch\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-xs font-medium text-slate-600\" title={user.email ?? undefined}>{user.email}</p>\n <p className=\"text-xs text-slate-500\">{ROL_NAAM[role ?? \"editor\"] ?? role}</p>\n </div>\n <CoreVersion />\n <Button variant=\"secondary\" size=\"sm\" onClick={() => void signOut()}>\n Uitloggen\n </Button>\n </div>\n )}\n </div>\n\n {/* ── Werkblad ────────────────────────────────────────────────────────── */}\n <div className=\"min-w-0\">\n <header\n className={\n embedded\n ? \"xicms-admin__kop static z-10 flex items-center justify-between gap-4 border-b border-slate-200 px-4 py-3 md:px-8\"\n : \"xicms-admin__kop sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-slate-200 px-4 py-3 md:px-8\"\n }\n style={{ background: \"var(--admin-canvas)\" }}\n >\n <h1 className=\"truncate text-lg font-semibold tracking-tight\">{actievePanel?.label ?? \"Beheer\"}</h1>\n <a\n className=\"inline-flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3 text-sm hover:bg-slate-100 focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:outline-none\"\n href=\"/\"\n >\n Bekijk site\n <Icon naam=\"extern\" grootte={14} />\n </a>\n </header>\n {/* minmax(0,1fr): zonder dit nam een breed kind (tabel, grafiek) de kolom mee en liepen\n op een telefoon alle kaarten over de rechterrand (8.6). */}\n <div className=\"grid grid-cols-[minmax(0,1fr)] gap-6 p-4 md:p-8\">\n {/* Alleen op Start: boven elk paneel duwde hij het werk omlaag (8.6). */}\n {actievePanel?.id === \"start\" && <WatIsNieuw />}\n {panels.map((p) => (\n <TabsContent key={sleutel(p)} value={sleutel(p)} className=\"pt-0\">\n <p.Panel siteId={siteId} />\n </TabsContent>\n ))}\n {/* Start heeft zijn eigen \"Zo werkt je site\"; twee uitlegblokken op één scherm is ruis. */}\n {actievePanel?.id !== \"start\" && <AdminHelp />}\n </div>\n </div>\n </Tabs>\n <ZoekPalet siteId={siteId} panelen={zoekPanelen} gaNaar={(tab) => void gaNaar(tab)} open={zoekOpen} onOpenChange={setZoekOpen} />\n </AdminNavContext.Provider>\n )}\n </ConfirmHost>\n </ToastProvider>\n </div>\n );\n}\n\n/** Maakt `useConfirm` (alleen beschikbaar ín ConfirmHost) bruikbaar voor AdminApp zelf. */\nfunction ConfirmBrug({ zet }: { zet: (c: ReturnType<typeof useConfirm>) => void }) {\n const confirm = useConfirm();\n useEffect(() => zet(confirm), [confirm, zet]);\n return null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* waarvoor je kwam. Nu een rustige notitie in de neutrale schaal: vindbaar zolang je hem nodig
|
|
7
7
|
* hebt, wegklikbaar zodra dat niet meer zo is.
|
|
8
8
|
*/
|
|
9
|
-
export declare function AdminHelp(): import("react").JSX.Element
|
|
9
|
+
export declare function AdminHelp(): import("react").JSX.Element;
|
package/dist/admin/AdminHelp.js
CHANGED
|
@@ -1,60 +1,68 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { useState } from "react";
|
|
4
4
|
const KEY = "xicms-help-dismissed";
|
|
5
5
|
function AdminHelp() {
|
|
6
|
-
const [hidden, setHidden] = useState(
|
|
7
|
-
useEffect(() => {
|
|
6
|
+
const [hidden, setHidden] = useState(() => {
|
|
8
7
|
try {
|
|
9
|
-
|
|
8
|
+
return typeof window !== "undefined" && localStorage.getItem(KEY) === "1";
|
|
10
9
|
} catch {
|
|
11
|
-
|
|
10
|
+
return false;
|
|
12
11
|
}
|
|
13
|
-
}
|
|
14
|
-
|
|
12
|
+
});
|
|
13
|
+
const zet = (v) => {
|
|
14
|
+
try {
|
|
15
|
+
if (v) localStorage.setItem(KEY, "1");
|
|
16
|
+
else localStorage.removeItem(KEY);
|
|
17
|
+
} catch {
|
|
18
|
+
}
|
|
19
|
+
setHidden(v);
|
|
20
|
+
};
|
|
21
|
+
if (hidden) {
|
|
22
|
+
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("button", { type: "button", className: "xicms-admin-btn rounded-lg px-2 py-1 text-xs text-slate-600 hover:bg-slate-100", onClick: () => zet(false), children: "Hoe werkt het beheer?" }) });
|
|
23
|
+
}
|
|
15
24
|
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-slate-200 p-4 text-sm text-slate-600", style: { background: "var(--color-background-card)" }, children: [
|
|
16
25
|
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
|
|
17
26
|
/* @__PURE__ */ jsx("strong", { className: "text-slate-700", children: "Zo werkt het beheer" }),
|
|
18
|
-
/* @__PURE__ */ jsx(
|
|
19
|
-
"button",
|
|
20
|
-
{
|
|
21
|
-
type: "button",
|
|
22
|
-
className: "text-xs text-slate-500 hover:underline",
|
|
23
|
-
onClick: () => {
|
|
24
|
-
try {
|
|
25
|
-
localStorage.setItem(KEY, "1");
|
|
26
|
-
} catch {
|
|
27
|
-
}
|
|
28
|
-
setHidden(true);
|
|
29
|
-
},
|
|
30
|
-
children: "Verbergen"
|
|
31
|
-
}
|
|
32
|
-
)
|
|
27
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "xicms-admin-btn rounded px-2 py-1 text-xs text-slate-600 hover:bg-slate-100", onClick: () => zet(true), children: "Verbergen" })
|
|
33
28
|
] }),
|
|
34
29
|
/* @__PURE__ */ jsxs("ul", { className: "grid list-disc gap-1 pl-5", children: [
|
|
35
30
|
/* @__PURE__ */ jsxs("li", { children: [
|
|
36
|
-
/* @__PURE__ */ jsx("strong", { children: "
|
|
37
|
-
"
|
|
38
|
-
/* @__PURE__ */ jsx("strong", { children: "
|
|
39
|
-
"
|
|
31
|
+
/* @__PURE__ */ jsx("strong", { children: "Teksten en foto's" }),
|
|
32
|
+
" wijzig je op de site zelf: open de pagina, kies",
|
|
33
|
+
/* @__PURE__ */ jsx("strong", { children: " Bewerken" }),
|
|
34
|
+
" in de balk onderaan, en klik het ",
|
|
35
|
+
/* @__PURE__ */ jsx("strong", { children: "potlood" }),
|
|
36
|
+
" bij een blok (op de pagina bewerken) of het ",
|
|
37
|
+
/* @__PURE__ */ jsx("strong", { children: "tandwiel" }),
|
|
38
|
+
" (alle instellingen)."
|
|
40
39
|
] }),
|
|
41
40
|
/* @__PURE__ */ jsxs("li", { children: [
|
|
42
|
-
"
|
|
43
|
-
/* @__PURE__ */ jsx("strong", { children: "
|
|
44
|
-
"
|
|
41
|
+
"Wat je bewerkt is eerst een ",
|
|
42
|
+
/* @__PURE__ */ jsx("strong", { children: "werkversie" }),
|
|
43
|
+
"; pas met ",
|
|
44
|
+
/* @__PURE__ */ jsx("strong", { children: "Publiceren" }),
|
|
45
|
+
" ziet een bezoeker het. Experimenteren kan dus veilig, en ",
|
|
46
|
+
/* @__PURE__ */ jsx("strong", { children: "Ongedaan maken" }),
|
|
47
|
+
" werkt altijd."
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsxs("li", { children: [
|
|
50
|
+
"Onder ",
|
|
51
|
+
/* @__PURE__ */ jsx("strong", { children: "Pagina's" }),
|
|
52
|
+
" maak je een nieuwe pagina, en stel je het adres en de weergave in Google in."
|
|
45
53
|
] }),
|
|
46
54
|
/* @__PURE__ */ jsxs("li", { children: [
|
|
47
55
|
/* @__PURE__ */ jsx("strong", { children: "Nieuws" }),
|
|
48
|
-
"
|
|
56
|
+
", ",
|
|
49
57
|
/* @__PURE__ */ jsx("strong", { children: "Media" }),
|
|
50
|
-
"
|
|
58
|
+
" (foto's, met een korte beschrijving voor slechtzienden en Google) en ",
|
|
59
|
+
/* @__PURE__ */ jsx("strong", { children: "Formulieren" }),
|
|
60
|
+
" (inzendingen bekijken en exporteren) hebben elk een eigen tabblad."
|
|
51
61
|
] }),
|
|
52
62
|
/* @__PURE__ */ jsxs("li", { children: [
|
|
53
|
-
"
|
|
54
|
-
/* @__PURE__ */ jsx("strong", { children: "
|
|
55
|
-
"
|
|
56
|
-
/* @__PURE__ */ jsx("strong", { children: "Instellingen" }),
|
|
57
|
-
"; terugzetten kan altijd."
|
|
63
|
+
"Instellingen, menu en nieuws met ",
|
|
64
|
+
/* @__PURE__ */ jsx("strong", { children: "Opslaan \u2014 direct live" }),
|
|
65
|
+
" staan meteen online; daar is geen werkversie."
|
|
58
66
|
] })
|
|
59
67
|
] })
|
|
60
68
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/admin/AdminHelp.tsx"],"sourcesContent":["\"use client\";\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/admin/AdminHelp.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nconst KEY = \"xicms-help-dismissed\";\n\n/**\n * Korte, vriendelijke uitleg voor (a-technische) gebruikers die voor het eerst inloggen.\n *\n * BEWUST INGETOGEN en onder het werk geplaatst. In merkkleur bovenaan was dit het grootste en\n * felste element op het scherm — uitleg die je één keer leest, die visueel won van de pagina's\n * waarvoor je kwam. Nu een rustige notitie in de neutrale schaal: vindbaar zolang je hem nodig\n * hebt, wegklikbaar zodra dat niet meer zo is.\n */\nexport function AdminHelp() {\n // 8.12: direct bij de eerste render lezen. Eerst verborgen en na het lezen openklappen liet de\n // hele pagina verspringen. Het beheer draait pas na het inloggen, dus altijd in de browser.\n const [hidden, setHidden] = useState(() => {\n try {\n return typeof window !== \"undefined\" && localStorage.getItem(KEY) === \"1\";\n } catch {\n return false;\n }\n });\n const zet = (v: boolean) => {\n try {\n if (v) localStorage.setItem(KEY, \"1\");\n else localStorage.removeItem(KEY);\n } catch {\n /* opslag geweigerd */\n }\n setHidden(v);\n };\n // 8.2: weggeklikt was voorgoed weg. Nu blijft er een klein knopje om hem terug te halen.\n if (hidden) {\n return (\n <div>\n <button type=\"button\" className=\"xicms-admin-btn rounded-lg px-2 py-1 text-xs text-slate-600 hover:bg-slate-100\" onClick={() => zet(false)}>\n Hoe werkt het beheer?\n </button>\n </div>\n );\n }\n return (\n <div className=\"rounded-xl border border-slate-200 p-4 text-sm text-slate-600\" style={{ background: \"var(--color-background-card)\" }}>\n <div className=\"mb-2 flex items-center justify-between\">\n <strong className=\"text-slate-700\">Zo werkt het beheer</strong>\n <button type=\"button\" className=\"xicms-admin-btn rounded px-2 py-1 text-xs text-slate-600 hover:bg-slate-100\" onClick={() => zet(true)}>\n Verbergen\n </button>\n </div>\n {/* 8.2: bijgewerkt. Stond nog \"Pagina's: pas teksten en secties aan\" (kan sinds 7.24 alleen\n op de site zelf) en een knop \"Pagina bewerken\" die inmiddels \"Bewerken\" heet. */}\n <ul className=\"grid list-disc gap-1 pl-5\">\n <li>\n <strong>Teksten en foto's</strong> wijzig je op de site zelf: open de pagina, kies\n <strong> Bewerken</strong> in de balk onderaan, en klik het <strong>potlood</strong> bij een blok (op de\n pagina bewerken) of het <strong>tandwiel</strong> (alle instellingen).\n </li>\n <li>\n Wat je bewerkt is eerst een <strong>werkversie</strong>; pas met <strong>Publiceren</strong> ziet een\n bezoeker het. Experimenteren kan dus veilig, en <strong>Ongedaan maken</strong> werkt altijd.\n </li>\n <li>\n Onder <strong>Pagina's</strong> maak je een nieuwe pagina, en stel je het adres en de weergave in\n Google in.\n </li>\n <li>\n <strong>Nieuws</strong>, <strong>Media</strong> (foto's, met een korte beschrijving voor\n slechtzienden en Google) en <strong>Formulieren</strong> (inzendingen bekijken en exporteren) hebben\n elk een eigen tabblad.\n </li>\n <li>\n Instellingen, menu en nieuws met <strong>Opslaan — direct live</strong> staan meteen online; daar is\n geen werkversie.\n </li>\n </ul>\n </div>\n );\n}\n"],"mappings":";AAqCQ,cAQF,YARE;AAnCR,SAAS,gBAAgB;AAEzB,MAAM,MAAM;AAUL,SAAS,YAAY;AAG1B,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,MAAM;AACzC,QAAI;AACF,aAAO,OAAO,WAAW,eAAe,aAAa,QAAQ,GAAG,MAAM;AAAA,IACxE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACD,QAAM,MAAM,CAAC,MAAe;AAC1B,QAAI;AACF,UAAI,EAAG,cAAa,QAAQ,KAAK,GAAG;AAAA,UAC/B,cAAa,WAAW,GAAG;AAAA,IAClC,QAAQ;AAAA,IAER;AACA,cAAU,CAAC;AAAA,EACb;AAEA,MAAI,QAAQ;AACV,WACE,oBAAC,SACC,8BAAC,YAAO,MAAK,UAAS,WAAU,kFAAiF,SAAS,MAAM,IAAI,KAAK,GAAG,mCAE5I,GACF;AAAA,EAEJ;AACA,SACE,qBAAC,SAAI,WAAU,iEAAgE,OAAO,EAAE,YAAY,+BAA+B,GACjI;AAAA,yBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,YAAO,WAAU,kBAAiB,iCAAmB;AAAA,MACtD,oBAAC,YAAO,MAAK,UAAS,WAAU,+EAA8E,SAAS,MAAM,IAAI,IAAI,GAAG,uBAExI;AAAA,OACF;AAAA,IAGA,qBAAC,QAAG,WAAU,6BACZ;AAAA,2BAAC,QACC;AAAA,4BAAC,YAAO,+BAAsB;AAAA,QAAS;AAAA,QACvC,oBAAC,YAAO,uBAAS;AAAA,QAAS;AAAA,QAAkC,oBAAC,YAAO,qBAAO;AAAA,QAAS;AAAA,QAC5D,oBAAC,YAAO,sBAAQ;AAAA,QAAS;AAAA,SACnD;AAAA,MACA,qBAAC,QAAG;AAAA;AAAA,QAC0B,oBAAC,YAAO,wBAAU;AAAA,QAAS;AAAA,QAAU,oBAAC,YAAO,wBAAU;AAAA,QAAS;AAAA,QAC5C,oBAAC,YAAO,4BAAc;AAAA,QAAS;AAAA,SACjF;AAAA,MACA,qBAAC,QAAG;AAAA;AAAA,QACI,oBAAC,YAAO,sBAAa;AAAA,QAAS;AAAA,SAEtC;AAAA,MACA,qBAAC,QACC;AAAA,4BAAC,YAAO,oBAAM;AAAA,QAAS;AAAA,QAAE,oBAAC,YAAO,mBAAK;AAAA,QAAS;AAAA,QACnB,oBAAC,YAAO,yBAAW;AAAA,QAAS;AAAA,SAE1D;AAAA,MACA,qBAAC,QAAG;AAAA;AAAA,QAC+B,oBAAC,YAAO,wCAAqB;AAAA,QAAS;AAAA,SAEzE;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -12,8 +12,11 @@ export declare function CoreVersion({ compact }: {
|
|
|
12
12
|
compact?: boolean;
|
|
13
13
|
}): import("react").JSX.Element;
|
|
14
14
|
/**
|
|
15
|
-
* "Wat is nieuw" (7.24): de release-notitie van de huidige engine, één keer per minor
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* "Wat is nieuw" (7.24): de release-notitie van de huidige engine, één keer per minor.
|
|
16
|
+
* Features die je bouwt zonder dat de klant het hoort, bestaan voor die klant niet.
|
|
17
|
+
*
|
|
18
|
+
* 8.6: was een groot groen blok boven élk paneel tot je "Gelezen" vond — het duwde het werk
|
|
19
|
+
* omlaag. Nu één rustige regel, alleen op Start; openklappen toont de punten, × onthoudt de versie
|
|
20
|
+
* (localStorage), en wie hem één keer opengeklapt en weer dichtgedaan heeft, ziet hem ook niet meer.
|
|
18
21
|
*/
|
|
19
22
|
export declare function WatIsNieuw(): import("react").JSX.Element | null;
|
|
@@ -37,6 +37,7 @@ function WatIsNieuw() {
|
|
|
37
37
|
const note = releaseNoteVoor(CORE_VERSION);
|
|
38
38
|
const sleutel = `xicms-nieuw-gezien:${note?.versie ?? ""}`;
|
|
39
39
|
const [toon, setToon] = useState(false);
|
|
40
|
+
const [open, setOpen] = useState(false);
|
|
40
41
|
useEffect(() => {
|
|
41
42
|
if (!note) return;
|
|
42
43
|
try {
|
|
@@ -46,31 +47,66 @@ function WatIsNieuw() {
|
|
|
46
47
|
}
|
|
47
48
|
}, [note, sleutel]);
|
|
48
49
|
if (!note || !toon) return null;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
50
|
+
const gezien = () => {
|
|
51
|
+
try {
|
|
52
|
+
localStorage.setItem(sleutel, "1");
|
|
53
|
+
} catch {
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
return /* @__PURE__ */ jsxs(
|
|
57
|
+
"section",
|
|
58
|
+
{
|
|
59
|
+
"aria-label": `Nieuw in versie ${note.versie}`,
|
|
60
|
+
className: "rounded-lg border border-slate-200 bg-white text-sm text-slate-700",
|
|
61
|
+
style: { background: "var(--color-background-card, #fff)" },
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3 py-2", children: [
|
|
64
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-base leading-none", children: "\u2728" }),
|
|
65
|
+
/* @__PURE__ */ jsxs(
|
|
66
|
+
"button",
|
|
67
|
+
{
|
|
68
|
+
type: "button",
|
|
69
|
+
className: "xicms-admin-btn min-w-0 flex-1 truncate text-left hover:underline",
|
|
70
|
+
"aria-expanded": open,
|
|
71
|
+
onClick: () => {
|
|
72
|
+
if (open) {
|
|
73
|
+
gezien();
|
|
74
|
+
setToon(false);
|
|
75
|
+
} else setOpen(true);
|
|
76
|
+
},
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ jsxs("strong", { className: "font-semibold text-slate-800", children: [
|
|
79
|
+
"Nieuw in versie ",
|
|
80
|
+
note.versie
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsxs("span", { className: "text-slate-500", children: [
|
|
83
|
+
" \xB7 ",
|
|
84
|
+
note.punten.length,
|
|
85
|
+
" verbeteringen \u2014 ",
|
|
86
|
+
open ? "verbergen" : "bekijk"
|
|
87
|
+
] })
|
|
88
|
+
]
|
|
65
89
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
90
|
+
),
|
|
91
|
+
/* @__PURE__ */ jsx(
|
|
92
|
+
"button",
|
|
93
|
+
{
|
|
94
|
+
type: "button",
|
|
95
|
+
className: "xicms-admin-btn h-7 w-7 shrink-0 rounded text-slate-500 hover:bg-slate-100",
|
|
96
|
+
"aria-label": "Niet meer tonen",
|
|
97
|
+
title: "Niet meer tonen",
|
|
98
|
+
onClick: () => {
|
|
99
|
+
gezien();
|
|
100
|
+
setToon(false);
|
|
101
|
+
},
|
|
102
|
+
children: "\xD7"
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
] }),
|
|
106
|
+
open && /* @__PURE__ */ jsx("ul", { className: "grid list-disc gap-1 border-t border-slate-100 px-3 py-2 pl-8", children: note.punten.map((p) => /* @__PURE__ */ jsx("li", { children: p }, p)) })
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
);
|
|
74
110
|
}
|
|
75
111
|
export {
|
|
76
112
|
CoreVersion,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/admin/CoreVersion.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { CORE_VERSION, CORE_PACKAGE, isNieuwer } from \"../version\";\nimport { releaseNoteVoor } from \"../releaseNotes\";\n\n/**\n * Toont op welke engine deze site draait, en of er een nieuwere is.\n *\n * De laatste versie komt rechtstreeks van de npm-registry. Dat is een publiek, CORS-vrij endpoint\n * en het is de enige bron die niet kan verouderen — een waarde die we zelf ergens zouden bijhouden\n * loopt per definitie achter op de release die hem zou moeten bijwerken.\n *\n * Faalt stil: geen netwerk of een registry die hapert mag het beheer niet in de weg zitten. Je ziet\n * dan alleen de eigen versie, wat nog steeds het antwoord is op de vraag \"waar draai ik op\".\n */\nexport function CoreVersion({ compact = false }: { compact?: boolean }) {\n const [laatste, setLaatste] = useState<string | null>(null);\n\n useEffect(() => {\n const ctrl = new AbortController();\n fetch(`https://registry.npmjs.org/${CORE_PACKAGE}/latest`, { signal: ctrl.signal })\n .then((r) => (r.ok ? r.json() : null))\n .then((d: { version?: string } | null) => {\n if (typeof d?.version === \"string\") setLaatste(d.version);\n })\n .catch(() => {});\n return () => ctrl.abort();\n }, []);\n\n const update = laatste ? isNieuwer(laatste, CORE_VERSION) : false;\n\n if (compact) {\n return (\n <span className=\"font-mono text-[11px] text-slate-500\">\n core {CORE_VERSION}\n {update && <span className=\"ml-1 text-amber-600\">→ {laatste}</span>}\n </span>\n );\n }\n\n return (\n <div className=\"flex flex-wrap items-center gap-2 text-xs\">\n <span className=\"text-slate-500\">Engine</span>\n <span className=\"rounded px-1.5 py-0.5 font-mono text-slate-700\" style={{ background: \"var(--color-background-muted)\" }}>\n {CORE_VERSION}\n </span>\n {update ? (\n <span className=\"text-amber-700\">\n Nieuwer beschikbaar: <span className=\"font-mono\">{laatste}</span>\n </span>\n ) : laatste ? (\n <span className=\"text-slate-500\">Bijgewerkt</span>\n ) : null}\n </div>\n );\n}\n\n/**\n * \"Wat is nieuw\" (7.24): de release-notitie van de huidige engine, één keer per minor
|
|
1
|
+
{"version":3,"sources":["../../src/admin/CoreVersion.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { CORE_VERSION, CORE_PACKAGE, isNieuwer } from \"../version\";\nimport { releaseNoteVoor } from \"../releaseNotes\";\n\n/**\n * Toont op welke engine deze site draait, en of er een nieuwere is.\n *\n * De laatste versie komt rechtstreeks van de npm-registry. Dat is een publiek, CORS-vrij endpoint\n * en het is de enige bron die niet kan verouderen — een waarde die we zelf ergens zouden bijhouden\n * loopt per definitie achter op de release die hem zou moeten bijwerken.\n *\n * Faalt stil: geen netwerk of een registry die hapert mag het beheer niet in de weg zitten. Je ziet\n * dan alleen de eigen versie, wat nog steeds het antwoord is op de vraag \"waar draai ik op\".\n */\nexport function CoreVersion({ compact = false }: { compact?: boolean }) {\n const [laatste, setLaatste] = useState<string | null>(null);\n\n useEffect(() => {\n const ctrl = new AbortController();\n fetch(`https://registry.npmjs.org/${CORE_PACKAGE}/latest`, { signal: ctrl.signal })\n .then((r) => (r.ok ? r.json() : null))\n .then((d: { version?: string } | null) => {\n if (typeof d?.version === \"string\") setLaatste(d.version);\n })\n .catch(() => {});\n return () => ctrl.abort();\n }, []);\n\n const update = laatste ? isNieuwer(laatste, CORE_VERSION) : false;\n\n if (compact) {\n return (\n <span className=\"font-mono text-[11px] text-slate-500\">\n core {CORE_VERSION}\n {update && <span className=\"ml-1 text-amber-600\">→ {laatste}</span>}\n </span>\n );\n }\n\n return (\n <div className=\"flex flex-wrap items-center gap-2 text-xs\">\n <span className=\"text-slate-500\">Engine</span>\n <span className=\"rounded px-1.5 py-0.5 font-mono text-slate-700\" style={{ background: \"var(--color-background-muted)\" }}>\n {CORE_VERSION}\n </span>\n {update ? (\n <span className=\"text-amber-700\">\n Nieuwer beschikbaar: <span className=\"font-mono\">{laatste}</span>\n </span>\n ) : laatste ? (\n <span className=\"text-slate-500\">Bijgewerkt</span>\n ) : null}\n </div>\n );\n}\n\n/**\n * \"Wat is nieuw\" (7.24): de release-notitie van de huidige engine, één keer per minor.\n * Features die je bouwt zonder dat de klant het hoort, bestaan voor die klant niet.\n *\n * 8.6: was een groot groen blok boven élk paneel tot je \"Gelezen\" vond — het duwde het werk\n * omlaag. Nu één rustige regel, alleen op Start; openklappen toont de punten, × onthoudt de versie\n * (localStorage), en wie hem één keer opengeklapt en weer dichtgedaan heeft, ziet hem ook niet meer.\n */\nexport function WatIsNieuw() {\n const note = releaseNoteVoor(CORE_VERSION);\n const sleutel = `xicms-nieuw-gezien:${note?.versie ?? \"\"}`;\n const [toon, setToon] = useState(false);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (!note) return;\n try {\n setToon(localStorage.getItem(sleutel) !== \"1\");\n } catch {\n setToon(true);\n }\n }, [note, sleutel]);\n if (!note || !toon) return null;\n const gezien = () => {\n try {\n localStorage.setItem(sleutel, \"1\");\n } catch {\n /* opslag geweigerd */\n }\n };\n return (\n <section\n aria-label={`Nieuw in versie ${note.versie}`}\n className=\"rounded-lg border border-slate-200 bg-white text-sm text-slate-700\"\n style={{ background: \"var(--color-background-card, #fff)\" }}\n >\n <div className=\"flex items-center gap-2 px-3 py-2\">\n <span aria-hidden className=\"text-base leading-none\">✨</span>\n <button\n type=\"button\"\n className=\"xicms-admin-btn min-w-0 flex-1 truncate text-left hover:underline\"\n aria-expanded={open}\n onClick={() => {\n if (open) {\n gezien();\n setToon(false);\n } else setOpen(true);\n }}\n >\n <strong className=\"font-semibold text-slate-800\">Nieuw in versie {note.versie}</strong>\n <span className=\"text-slate-500\"> · {note.punten.length} verbeteringen — {open ? \"verbergen\" : \"bekijk\"}</span>\n </button>\n <button\n type=\"button\"\n className=\"xicms-admin-btn h-7 w-7 shrink-0 rounded text-slate-500 hover:bg-slate-100\"\n aria-label=\"Niet meer tonen\"\n title=\"Niet meer tonen\"\n onClick={() => {\n gezien();\n setToon(false);\n }}\n >\n ×\n </button>\n </div>\n {open && (\n <ul className=\"grid list-disc gap-1 border-t border-slate-100 px-3 py-2 pl-8\">\n {note.punten.map((p) => (\n <li key={p}>{p}</li>\n ))}\n </ul>\n )}\n </section>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/** "2026-10-18" → "18 oktober 2026" (8.2: de lijst toonde de ruwe ISO-datum). */
|
|
2
|
+
export declare function nlDatum(iso: string | undefined): string;
|
|
3
|
+
/** Zichtbaar, ingepland (gepubliceerd maar met een datum in de toekomst) of concept. */
|
|
4
|
+
export declare function nieuwsToestand(a: {
|
|
5
|
+
published: boolean;
|
|
6
|
+
date?: string;
|
|
7
|
+
}, vandaag?: string): "zichtbaar" | "ingepland" | "concept";
|
|
1
8
|
/**
|
|
2
9
|
* Beheer van nieuwsartikelen — zelfde look & feel als de rest van /beheer.
|
|
3
10
|
*
|