@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,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { forwardRef } from "react";
|
|
3
|
+
import { createContext, forwardRef, useContext } from "react";
|
|
4
4
|
import { cn } from "./cn.js";
|
|
5
5
|
import { TextInput } from "@astryxdesign/core/TextInput";
|
|
6
6
|
import { NumberInput } from "@astryxdesign/core/NumberInput";
|
|
@@ -9,7 +9,9 @@ const VARIANT_STYLE = {
|
|
|
9
9
|
primary: { background: "var(--color-accent)", color: "var(--color-on-accent, #fff)" },
|
|
10
10
|
secondary: { background: "var(--color-background-muted)", color: "var(--color-text-primary)", border: "1px solid var(--color-border)" },
|
|
11
11
|
ghost: { background: "transparent", color: "var(--color-text-primary)" },
|
|
12
|
-
danger: { background: "var(--color-error, #dc2626)", color: "#fff" }
|
|
12
|
+
danger: { background: "var(--color-error, #dc2626)", color: "#fff" },
|
|
13
|
+
/** Verwijderen binnen een lijst (8.2): rustig, maar herkenbaar rood. Eén stijl i.p.v. drie. */
|
|
14
|
+
dangerGhost: { background: "transparent", color: "var(--color-error, #b91c1c)" }
|
|
13
15
|
};
|
|
14
16
|
const SIZES = {
|
|
15
17
|
sm: "h-8 px-3 text-sm",
|
|
@@ -21,51 +23,94 @@ const controlStyle = {
|
|
|
21
23
|
background: "var(--color-background-body, #fff)",
|
|
22
24
|
color: "var(--color-text-primary)"
|
|
23
25
|
};
|
|
24
|
-
const Button = forwardRef(function Button2({ className, variant = "primary", size = "md", style, ...props }, ref) {
|
|
25
|
-
return /* @__PURE__ */
|
|
26
|
+
const Button = forwardRef(function Button2({ className, variant = "primary", size = "md", style, loading, disabled, children, ...props }, ref) {
|
|
27
|
+
return /* @__PURE__ */ jsxs(
|
|
26
28
|
"button",
|
|
27
29
|
{
|
|
28
30
|
ref,
|
|
29
31
|
className: cn(
|
|
30
|
-
"inline-flex items-center justify-center gap-2 font-medium transition-[filter] hover:brightness-95
|
|
32
|
+
"xicms-admin-btn inline-flex items-center justify-center gap-2 font-medium transition-[filter] hover:brightness-95 disabled:cursor-not-allowed disabled:opacity-50",
|
|
31
33
|
SIZES[size],
|
|
34
|
+
loading && "disabled:opacity-80",
|
|
32
35
|
className
|
|
33
36
|
),
|
|
34
37
|
style: { borderRadius: "var(--radius-element, 8px)", ...VARIANT_STYLE[variant], ...style },
|
|
35
|
-
|
|
38
|
+
disabled: disabled || loading,
|
|
39
|
+
"aria-busy": loading || void 0,
|
|
40
|
+
...props,
|
|
41
|
+
children: [
|
|
42
|
+
loading && /* @__PURE__ */ jsx("span", { className: "xicms-admin-spinner", "aria-hidden": true }),
|
|
43
|
+
children
|
|
44
|
+
]
|
|
36
45
|
}
|
|
37
46
|
);
|
|
38
47
|
});
|
|
48
|
+
function LegeStaat({ titel, tekst, actie }) {
|
|
49
|
+
return /* @__PURE__ */ jsxs("div", { className: "col-span-full grid justify-items-center gap-2 rounded-xl border border-dashed border-slate-300 px-4 py-8 text-center", children: [
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "grid h-10 w-10 place-items-center rounded-full bg-slate-100 text-slate-500", "aria-hidden": true, children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M4 7h16v12H4z M4 7l2-3h12l2 3 M9 12h6" }) }) }),
|
|
51
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-700", children: titel }),
|
|
52
|
+
tekst && /* @__PURE__ */ jsx("p", { className: "max-w-sm text-sm text-slate-500", children: tekst }),
|
|
53
|
+
actie && /* @__PURE__ */ jsx("div", { className: "mt-1", children: actie })
|
|
54
|
+
] });
|
|
55
|
+
}
|
|
39
56
|
function syntheticEvent(value) {
|
|
40
57
|
return { target: { value }, currentTarget: { value } };
|
|
41
58
|
}
|
|
59
|
+
const FieldLabelContext = createContext(null);
|
|
60
|
+
function useFieldLabel(fallback) {
|
|
61
|
+
return useContext(FieldLabelContext) ?? fallback;
|
|
62
|
+
}
|
|
63
|
+
function doorgeef(rest) {
|
|
64
|
+
const uit = {};
|
|
65
|
+
for (const [k, v] of Object.entries(rest)) {
|
|
66
|
+
if (v === void 0) continue;
|
|
67
|
+
if (["id", "onBlur", "onFocus", "onKeyDown", "onPaste", "title", "role", "tabIndex"].includes(k) || k.startsWith("aria-") || k.startsWith("data-")) {
|
|
68
|
+
uit[k] = v;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return uit;
|
|
72
|
+
}
|
|
73
|
+
const TEXT_TYPES = /* @__PURE__ */ new Set(["text", "email", "password"]);
|
|
42
74
|
const Input = forwardRef(
|
|
43
|
-
function Input2({ className, style, type = "text", value, onChange, placeholder, ...rest }, ref) {
|
|
44
|
-
const lbl = rest["aria-label"] || placeholder || "
|
|
75
|
+
function Input2({ className, style, type = "text", value, onChange, placeholder, readOnly, disabled, required, name, autoFocus, autoComplete, maxLength, min, max, step, ...rest }, ref) {
|
|
76
|
+
const lbl = useFieldLabel(rest["aria-label"] || placeholder || "Invoer");
|
|
77
|
+
const gemeen = {
|
|
78
|
+
ref,
|
|
79
|
+
label: lbl,
|
|
80
|
+
isLabelHidden: true,
|
|
81
|
+
placeholder,
|
|
82
|
+
isReadOnly: readOnly || void 0,
|
|
83
|
+
isDisabled: disabled || void 0,
|
|
84
|
+
isRequired: required || void 0,
|
|
85
|
+
htmlName: name,
|
|
86
|
+
hasAutoFocus: autoFocus || void 0,
|
|
87
|
+
autoComplete,
|
|
88
|
+
containerClassName: className,
|
|
89
|
+
containerStyle: style,
|
|
90
|
+
...doorgeef(rest)
|
|
91
|
+
};
|
|
45
92
|
if (type === "number") {
|
|
93
|
+
const getal = (x) => x === void 0 || x === "" ? void 0 : Number(x);
|
|
46
94
|
return /* @__PURE__ */ jsx(
|
|
47
95
|
NumberInput,
|
|
48
96
|
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
97
|
+
...gemeen,
|
|
98
|
+
min: getal(min),
|
|
99
|
+
max: getal(max),
|
|
100
|
+
step: getal(step),
|
|
53
101
|
value: value === "" || value == null ? void 0 : Number(value),
|
|
54
102
|
onChange: (n) => onChange?.(syntheticEvent(n == null ? "" : String(n)))
|
|
55
103
|
}
|
|
56
104
|
);
|
|
57
105
|
}
|
|
58
|
-
if (type
|
|
106
|
+
if (TEXT_TYPES.has(type)) {
|
|
59
107
|
return /* @__PURE__ */ jsx(
|
|
60
108
|
TextInput,
|
|
61
109
|
{
|
|
62
|
-
|
|
63
|
-
label: lbl,
|
|
64
|
-
isLabelHidden: true,
|
|
110
|
+
...gemeen,
|
|
65
111
|
type,
|
|
66
|
-
placeholder,
|
|
67
112
|
value: String(value ?? ""),
|
|
68
|
-
onChange: (v) => onChange?.(syntheticEvent(v))
|
|
113
|
+
onChange: (v) => onChange?.(syntheticEvent(maxLength != null && maxLength >= 0 ? v.slice(0, maxLength) : v))
|
|
69
114
|
}
|
|
70
115
|
);
|
|
71
116
|
}
|
|
@@ -77,7 +122,18 @@ const Input = forwardRef(
|
|
|
77
122
|
value,
|
|
78
123
|
onChange,
|
|
79
124
|
placeholder,
|
|
80
|
-
|
|
125
|
+
readOnly,
|
|
126
|
+
disabled,
|
|
127
|
+
required,
|
|
128
|
+
name,
|
|
129
|
+
autoFocus,
|
|
130
|
+
autoComplete,
|
|
131
|
+
maxLength,
|
|
132
|
+
min,
|
|
133
|
+
max,
|
|
134
|
+
step,
|
|
135
|
+
"aria-label": lbl,
|
|
136
|
+
className: cn("xicms-admin-native h-10 w-full px-3 text-sm", className),
|
|
81
137
|
style: { ...controlStyle, ...style },
|
|
82
138
|
...rest
|
|
83
139
|
}
|
|
@@ -85,26 +141,40 @@ const Input = forwardRef(
|
|
|
85
141
|
}
|
|
86
142
|
);
|
|
87
143
|
const Textarea = forwardRef(
|
|
88
|
-
function Textarea2({ value, onChange, placeholder, rows = 4,
|
|
89
|
-
|
|
144
|
+
function Textarea2({ value, onChange, placeholder, rows = 4, className, style, readOnly, disabled, required, name, autoFocus, autoComplete, maxLength, spellCheck, ...rest }, ref) {
|
|
145
|
+
const lbl = useFieldLabel(rest["aria-label"] || placeholder || "Tekst");
|
|
90
146
|
return /* @__PURE__ */ jsx(
|
|
91
147
|
TextArea,
|
|
92
148
|
{
|
|
93
149
|
ref,
|
|
94
|
-
label:
|
|
150
|
+
label: lbl,
|
|
95
151
|
isLabelHidden: true,
|
|
96
152
|
rows,
|
|
97
153
|
placeholder,
|
|
154
|
+
isReadOnly: readOnly || void 0,
|
|
155
|
+
isDisabled: disabled || void 0,
|
|
156
|
+
isRequired: required || void 0,
|
|
157
|
+
htmlName: name,
|
|
158
|
+
hasAutoFocus: autoFocus || void 0,
|
|
159
|
+
autoComplete,
|
|
160
|
+
maxLength,
|
|
161
|
+
hasSpellCheck: spellCheck === void 0 ? void 0 : Boolean(spellCheck),
|
|
162
|
+
containerClassName: className,
|
|
163
|
+
containerStyle: style,
|
|
164
|
+
...doorgeef(rest),
|
|
98
165
|
value: String(value ?? ""),
|
|
99
|
-
onChange: (
|
|
166
|
+
onChange: (raw) => {
|
|
167
|
+
const v = maxLength != null && maxLength >= 0 ? raw.slice(0, maxLength) : raw;
|
|
168
|
+
onChange?.({ target: { value: v }, currentTarget: { value: v } });
|
|
169
|
+
}
|
|
100
170
|
}
|
|
101
171
|
);
|
|
102
172
|
}
|
|
103
173
|
);
|
|
104
174
|
function Field({ label, children, hint }) {
|
|
105
175
|
return /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
|
|
106
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium", style: { color: "var(--color-text-primary)" }, children: label }),
|
|
107
|
-
children,
|
|
176
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium", style: { color: "var(--color-text-primary)" }, "aria-hidden": true, children: label }),
|
|
177
|
+
/* @__PURE__ */ jsx(FieldLabelContext.Provider, { value: label, children }),
|
|
108
178
|
hint && /* @__PURE__ */ jsx("span", { className: "text-xs", style: { color: "var(--color-text-secondary)" }, children: hint })
|
|
109
179
|
] });
|
|
110
180
|
}
|
|
@@ -132,6 +202,8 @@ export {
|
|
|
132
202
|
Card,
|
|
133
203
|
Field,
|
|
134
204
|
Input,
|
|
135
|
-
|
|
205
|
+
LegeStaat,
|
|
206
|
+
Textarea,
|
|
207
|
+
useFieldLabel
|
|
136
208
|
};
|
|
137
209
|
//# sourceMappingURL=primitives.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/ui/primitives.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type ButtonHTMLAttributes, type ChangeEvent, type CSSProperties, type InputHTMLAttributes, type TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"./cn\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { NumberInput } from \"@astryxdesign/core/NumberInput\";\nimport { TextArea } from \"@astryxdesign/core/TextArea\";\n\n/**\n * Admin-primitieven op het **Astryx design system**. Form-controls (Input/Textarea) renderen echte\n * Astryx-componenten; bijzondere input-types (datetime-local, file…) die Astryx niet kent vallen\n * robuust terug op een token-gestylede native input. Button/Card/Badge zijn token-gestyled (zelfde\n * Astryx-huisstijl) — bewust geen Astryx Button (die werkt op `label`/`clickAction` i.p.v. children/\n * onClick, wat de ~honderd editor-call-sites zou breken). De API blijft gelijk → robuust.\n */\n\ntype Variant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\ntype Size = \"sm\" | \"md\";\n\nconst VARIANT_STYLE: Record<Variant, CSSProperties> = {\n primary: { background: \"var(--color-accent)\", color: \"var(--color-on-accent, #fff)\" },\n secondary: { background: \"var(--color-background-muted)\", color: \"var(--color-text-primary)\", border: \"1px solid var(--color-border)\" },\n ghost: { background: \"transparent\", color: \"var(--color-text-primary)\" },\n danger: { background: \"var(--color-error, #dc2626)\", color: \"#fff\" },\n};\nconst SIZES: Record<Size, string> = {\n sm: \"h-8 px-3 text-sm\",\n md: \"h-10 px-4 text-sm\",\n};\n\nconst controlStyle: CSSProperties = {\n borderRadius: \"var(--radius-element, 8px)\",\n border: \"1px solid var(--color-border)\",\n background: \"var(--color-background-body, #fff)\",\n color: \"var(--color-text-primary)\",\n};\n\nexport const Button = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> & { variant?: Variant; size?: Size }\n>(function Button({ className, variant = \"primary\", size = \"md\", style, ...props }, ref) {\n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center gap-2 font-medium transition-[filter] hover:brightness-95 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n SIZES[size],\n className,\n )}\n style={{ borderRadius: \"var(--radius-element, 8px)\", ...VARIANT_STYLE[variant], ...style }}\n {...props}\n />\n );\n});\n\n/** Bouwt een minimale synthetische change-event zodat bestaande `onChange={(e)=>…e.target.value}` blijft werken. */\nfunction syntheticEvent(value: string) {\n return { target: { value }, currentTarget: { value } } as unknown as ChangeEvent<HTMLInputElement>;\n}\n\n/**\n * Tekstinvoer. text/email → Astryx TextInput; number → Astryx NumberInput; overige types\n * (datetime-local, search, …) → token-gestylede native input. Het label komt van het omliggende\n * `Field`; hier dus `isLabelHidden`.\n */\nexport const Input = forwardRef<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>(\n function Input({ className, style, type = \"text\", value, onChange, placeholder, ...rest }, ref) {\n const lbl = (rest[\"aria-label\"] as string) || placeholder || \"Veld\";\n if (type === \"number\") {\n return (\n <NumberInput\n ref={ref}\n label={lbl}\n isLabelHidden\n placeholder={placeholder}\n value={value === \"\" || value == null ? undefined : Number(value)}\n onChange={(n) => onChange?.(syntheticEvent(n == null ? \"\" : String(n)))}\n />\n );\n }\n if (type === \"text\" || type === \"email\" || type === \"password\") {\n return (\n <TextInput\n ref={ref}\n label={lbl}\n isLabelHidden\n type={type as \"text\" | \"email\" | \"password\"}\n placeholder={placeholder}\n value={String(value ?? \"\")}\n onChange={(v) => onChange?.(syntheticEvent(v))}\n />\n );\n }\n // datetime-local, search, url, file, … → native, in de Astryx-huisstijl getokeniseerd.\n return (\n <input\n ref={ref}\n type={type}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={cn(\"h-10 w-full px-3 text-sm outline-none focus:ring-2\", className)}\n style={{ ...controlStyle, ...style }}\n {...rest}\n />\n );\n },\n);\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaHTMLAttributes<HTMLTextAreaElement>>(\n function Textarea({ value, onChange, placeholder, rows = 4, \"aria-label\": ariaLabel, ...rest }, ref) {\n void rest;\n return (\n <TextArea\n ref={ref}\n label={(ariaLabel as string) || placeholder || \"Tekst\"}\n isLabelHidden\n rows={rows}\n placeholder={placeholder}\n value={String(value ?? \"\")}\n onChange={(v) =>\n onChange?.({ target: { value: v }, currentTarget: { value: v } } as unknown as ChangeEvent<HTMLTextAreaElement>)\n }\n />\n );\n },\n);\n\n/** Label-wrapper. Een `<div>` (geen `<label>`) zodat het geen geneste label vormt met de\n * Astryx-controls (die hun eigen, verborgen label dragen). */\nexport function Field({ label, children, hint }: { label: string; children: React.ReactNode; hint?: string }) {\n return (\n <div className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium\" style={{ color: \"var(--color-text-primary)\" }}>{label}</span>\n {children}\n {hint && <span className=\"text-xs\" style={{ color: \"var(--color-text-secondary)\" }}>{hint}</span>}\n </div>\n );\n}\n\nexport function Card({ className, children }: { className?: string; children: React.ReactNode }) {\n return (\n <div\n className={cn(\"p-5\", className)}\n style={{ borderRadius: \"var(--radius-container, 14px)\", border: \"1px solid var(--color-border)\", background: \"var(--color-background-card)\" }}\n >\n {children}\n </div>\n );\n}\n\nexport function Badge({ children, tone = \"slate\" }: { children: React.ReactNode; tone?: \"slate\" | \"green\" | \"amber\" }) {\n const tones: Record<string, CSSProperties> = {\n slate: { background: \"var(--color-background-muted)\", color: \"var(--color-text-secondary)\" },\n green: { background: \"var(--color-background-green, #dcfce7)\", color: \"var(--color-text-green, #15803d)\" },\n amber: { background: \"var(--color-background-orange, #ffedd5)\", color: \"var(--color-text-orange, #c2410c)\" },\n };\n return (\n <span className=\"rounded-full px-2 py-0.5 text-xs font-medium\" style={tones[tone]}>\n {children}\n </span>\n );\n}\n"],"mappings":"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","names":["Button","Input","Textarea"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/ui/primitives.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, forwardRef, useContext, type ButtonHTMLAttributes, type ChangeEvent, type CSSProperties, type InputHTMLAttributes, type ReactNode, type TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"./cn\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { NumberInput } from \"@astryxdesign/core/NumberInput\";\nimport { TextArea } from \"@astryxdesign/core/TextArea\";\n\n/**\n * Admin-primitieven op het **Astryx design system**. Form-controls (Input/Textarea) renderen echte\n * Astryx-componenten; bijzondere input-types (datetime-local, file…) die Astryx niet kent vallen\n * robuust terug op een token-gestylede native input. Button/Card/Badge zijn token-gestyled (zelfde\n * Astryx-huisstijl) — bewust geen Astryx Button (die werkt op `label`/`clickAction` i.p.v. children/\n * onClick, wat de ~honderd editor-call-sites zou breken). De API blijft gelijk → robuust.\n */\n\ntype Variant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"dangerGhost\";\ntype Size = \"sm\" | \"md\";\n\nconst VARIANT_STYLE: Record<Variant, CSSProperties> = {\n primary: { background: \"var(--color-accent)\", color: \"var(--color-on-accent, #fff)\" },\n secondary: { background: \"var(--color-background-muted)\", color: \"var(--color-text-primary)\", border: \"1px solid var(--color-border)\" },\n ghost: { background: \"transparent\", color: \"var(--color-text-primary)\" },\n danger: { background: \"var(--color-error, #dc2626)\", color: \"#fff\" },\n /** Verwijderen binnen een lijst (8.2): rustig, maar herkenbaar rood. Eén stijl i.p.v. drie. */\n dangerGhost: { background: \"transparent\", color: \"var(--color-error, #b91c1c)\" },\n};\nconst SIZES: Record<Size, string> = {\n sm: \"h-8 px-3 text-sm\",\n md: \"h-10 px-4 text-sm\",\n};\n\nconst controlStyle: CSSProperties = {\n borderRadius: \"var(--radius-element, 8px)\",\n border: \"1px solid var(--color-border)\",\n background: \"var(--color-background-body, #fff)\",\n color: \"var(--color-text-primary)\",\n};\n\nexport const Button = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: Variant;\n size?: Size;\n /**\n * 8.12: bezig. Toont een draaiertje vóór het label en zet de knop uit — het label blijft staan.\n * Tot nu toe werd de tekst \"Bezig…\": de knop sprong van breedte en je zag niet meer wát er bezig was.\n */\n loading?: boolean;\n }\n>(function Button({ className, variant = \"primary\", size = \"md\", style, loading, disabled, children, ...props }, ref) {\n return (\n <button\n ref={ref}\n className={cn(\n \"xicms-admin-btn inline-flex items-center justify-center gap-2 font-medium transition-[filter] hover:brightness-95 disabled:cursor-not-allowed disabled:opacity-50\",\n SIZES[size],\n loading && \"disabled:opacity-80\",\n className,\n )}\n style={{ borderRadius: \"var(--radius-element, 8px)\", ...VARIANT_STYLE[variant], ...style }}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && <span className=\"xicms-admin-spinner\" aria-hidden />}\n {children}\n </button>\n );\n});\n\n/**\n * Een lege lijst als uitnodiging (8.12): icoon, één zin en de eerste stap — in plaats van een kale\n * grijze regel \"Nog geen media.\" waar de klant niets mee kon.\n */\nexport function LegeStaat({ titel, tekst, actie }: { titel: string; tekst?: ReactNode; actie?: ReactNode }) {\n return (\n <div className=\"col-span-full grid justify-items-center gap-2 rounded-xl border border-dashed border-slate-300 px-4 py-8 text-center\">\n <span className=\"grid h-10 w-10 place-items-center rounded-full bg-slate-100 text-slate-500\" aria-hidden>\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M4 7h16v12H4z M4 7l2-3h12l2 3 M9 12h6\" />\n </svg>\n </span>\n <p className=\"text-sm font-medium text-slate-700\">{titel}</p>\n {tekst && <p className=\"max-w-sm text-sm text-slate-500\">{tekst}</p>}\n {actie && <div className=\"mt-1\">{actie}</div>}\n </div>\n );\n}\n\n/** Bouwt een minimale synthetische change-event zodat bestaande `onChange={(e)=>…e.target.value}` blijft werken. */\nfunction syntheticEvent(value: string) {\n return { target: { value }, currentTarget: { value } } as unknown as ChangeEvent<HTMLInputElement>;\n}\n\n/**\n * Het label van het omliggende `Field` (8.0). Vroeger kregen controls `aria-label = placeholder ||\n * \"Veld\"`, dus een schermlezer hoorde \"Veld\" of \"bv. Over ons\" in plaats van \"Paginatitel\". Nu\n * geeft `Field` zijn label door en draagt de Astryx-control het als (visueel verborgen) label.\n */\nconst FieldLabelContext = createContext<string | null>(null);\nexport function useFieldLabel(fallback: string): string {\n return useContext(FieldLabelContext) ?? fallback;\n}\n\n/**\n * DOM-props die Astryx' inputs gewoon doorgeven (via BaseProps). Tot 8.0 gooiden `Input` en\n * `Textarea` álles behalve value/onChange/placeholder weg: `onBlur` (alt-tekst opslaan, adres\n * normaliseren), `readOnly` (previewlink), `disabled` en `className` deden stilletjes niets.\n */\ntype Doorgeef = Pick<\n InputHTMLAttributes<HTMLElement>,\n \"id\" | \"onBlur\" | \"onFocus\" | \"onKeyDown\" | \"onPaste\" | \"title\" | \"role\" | \"tabIndex\" | \"aria-describedby\" | \"aria-invalid\"\n>;\nfunction doorgeef(rest: Record<string, unknown>): Doorgeef & Record<`data-${string}`, unknown> {\n const uit: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v === undefined) continue;\n if ([\"id\", \"onBlur\", \"onFocus\", \"onKeyDown\", \"onPaste\", \"title\", \"role\", \"tabIndex\"].includes(k) || k.startsWith(\"aria-\") || k.startsWith(\"data-\")) {\n uit[k] = v;\n }\n }\n return uit as Doorgeef & Record<`data-${string}`, unknown>;\n}\n\n/**\n * Tekstinvoer. text/email/password → Astryx TextInput (meer types kent die niet); number → Astryx NumberInput;\n * overige types (tel, url, datetime-local, date, file, …) → token-gestylede native input. Het zichtbare label\n * komt van het omliggende `Field`; hier dus `isLabelHidden`.\n */\nconst TEXT_TYPES = new Set([\"text\", \"email\", \"password\"]);\n\nexport const Input = forwardRef<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>(\n function Input(\n { className, style, type = \"text\", value, onChange, placeholder, readOnly, disabled, required, name, autoFocus, autoComplete, maxLength, min, max, step, ...rest },\n ref,\n ) {\n const lbl = useFieldLabel((rest[\"aria-label\"] as string) || placeholder || \"Invoer\");\n const gemeen = {\n ref,\n label: lbl,\n isLabelHidden: true,\n placeholder,\n isReadOnly: readOnly || undefined,\n isDisabled: disabled || undefined,\n isRequired: required || undefined,\n htmlName: name,\n hasAutoFocus: autoFocus || undefined,\n autoComplete,\n containerClassName: className,\n containerStyle: style,\n ...doorgeef(rest),\n };\n if (type === \"number\") {\n const getal = (x: unknown) => (x === undefined || x === \"\" ? undefined : Number(x));\n return (\n <NumberInput\n {...gemeen}\n min={getal(min)}\n max={getal(max)}\n step={getal(step)}\n value={value === \"\" || value == null ? undefined : Number(value)}\n onChange={(n) => onChange?.(syntheticEvent(n == null ? \"\" : String(n)))}\n />\n );\n }\n if (TEXT_TYPES.has(type)) {\n return (\n <TextInput\n {...gemeen}\n type={type as \"text\" | \"email\" | \"password\"}\n value={String(value ?? \"\")}\n // TextInput kent geen maxLength; afkappen hier houdt dezelfde belofte.\n onChange={(v) => onChange?.(syntheticEvent(maxLength != null && maxLength >= 0 ? v.slice(0, maxLength) : v))}\n />\n );\n }\n // datetime-local, date, file, … → native, in de Astryx-huisstijl getokeniseerd.\n return (\n <input\n ref={ref}\n type={type}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n required={required}\n name={name}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n maxLength={maxLength}\n min={min}\n max={max}\n step={step}\n aria-label={lbl}\n className={cn(\"xicms-admin-native h-10 w-full px-3 text-sm\", className)}\n style={{ ...controlStyle, ...style }}\n {...rest}\n />\n );\n },\n);\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaHTMLAttributes<HTMLTextAreaElement>>(\n function Textarea(\n { value, onChange, placeholder, rows = 4, className, style, readOnly, disabled, required, name, autoFocus, autoComplete, maxLength, spellCheck, ...rest },\n ref,\n ) {\n const lbl = useFieldLabel((rest[\"aria-label\"] as string) || placeholder || \"Tekst\");\n return (\n <TextArea\n ref={ref}\n label={lbl}\n isLabelHidden\n rows={rows}\n placeholder={placeholder}\n isReadOnly={readOnly || undefined}\n isDisabled={disabled || undefined}\n isRequired={required || undefined}\n htmlName={name}\n hasAutoFocus={autoFocus || undefined}\n autoComplete={autoComplete}\n maxLength={maxLength}\n hasSpellCheck={spellCheck === undefined ? undefined : Boolean(spellCheck)}\n containerClassName={className}\n containerStyle={style}\n {...doorgeef(rest)}\n value={String(value ?? \"\")}\n // Astryx toont bij maxLength een teller, maar dwingt niet af; afkappen houdt de belofte.\n onChange={(raw) => {\n const v = maxLength != null && maxLength >= 0 ? raw.slice(0, maxLength) : raw;\n onChange?.({ target: { value: v }, currentTarget: { value: v } } as unknown as ChangeEvent<HTMLTextAreaElement>);\n }}\n />\n );\n },\n);\n\n/** Label-wrapper. Een `<div>` (geen `<label>`) zodat het geen geneste label vormt met de\n * Astryx-controls; het label gaat via context naar de control zelf (toegankelijke naam). */\nexport function Field({ label, children, hint }: { label: string; children: React.ReactNode; hint?: string }) {\n return (\n <div className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium\" style={{ color: \"var(--color-text-primary)\" }} aria-hidden>\n {label}\n </span>\n <FieldLabelContext.Provider value={label}>{children}</FieldLabelContext.Provider>\n {hint && <span className=\"text-xs\" style={{ color: \"var(--color-text-secondary)\" }}>{hint}</span>}\n </div>\n );\n}\n\nexport function Card({ className, children }: { className?: string; children: React.ReactNode }) {\n return (\n <div\n className={cn(\"p-5\", className)}\n style={{ borderRadius: \"var(--radius-container, 14px)\", border: \"1px solid var(--color-border)\", background: \"var(--color-background-card)\" }}\n >\n {children}\n </div>\n );\n}\n\nexport function Badge({ children, tone = \"slate\" }: { children: React.ReactNode; tone?: \"slate\" | \"green\" | \"amber\" }) {\n const tones: Record<string, CSSProperties> = {\n slate: { background: \"var(--color-background-muted)\", color: \"var(--color-text-secondary)\" },\n green: { background: \"var(--color-background-green, #dcfce7)\", color: \"var(--color-text-green, #15803d)\" },\n amber: { background: \"var(--color-background-orange, #ffedd5)\", color: \"var(--color-text-orange, #c2410c)\" },\n };\n return (\n <span className=\"rounded-full px-2 py-0.5 text-xs font-medium\" style={tones[tone]}>\n {children}\n </span>\n );\n}\n"],"mappings":"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","names":["Button","Input","Textarea"]}
|
package/dist/admin/ui/select.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Selector } from "@astryxdesign/core/Selector";
|
|
4
|
+
import { useFieldLabel } from "./primitives.js";
|
|
4
5
|
function Select({
|
|
5
6
|
value,
|
|
6
7
|
onValueChange,
|
|
@@ -8,13 +9,15 @@ function Select({
|
|
|
8
9
|
placeholder = "Kies\u2026",
|
|
9
10
|
className
|
|
10
11
|
}) {
|
|
12
|
+
const label = useFieldLabel(placeholder);
|
|
11
13
|
return /* @__PURE__ */ jsx(
|
|
12
14
|
Selector,
|
|
13
15
|
{
|
|
14
|
-
label
|
|
16
|
+
label,
|
|
15
17
|
isLabelHidden: true,
|
|
16
18
|
placeholder,
|
|
17
|
-
className,
|
|
19
|
+
containerClassName: className,
|
|
20
|
+
presentation: "adaptive",
|
|
18
21
|
options: options.map((o) => ({ value: o.value, label: o.label })),
|
|
19
22
|
value,
|
|
20
23
|
onChange: (v) => onValueChange(v ?? "")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/ui/select.tsx"],"sourcesContent":["\"use client\";\n\nimport { Selector } from \"@astryxdesign/core/Selector\";\n\n/** Admin-select op de Astryx Selector. API ongewijzigd (value/onValueChange/options). */\nexport function Select({\n value,\n onValueChange,\n options,\n placeholder = \"Kies…\",\n className,\n}: {\n value: string;\n onValueChange: (v: string) => void;\n options: { value: string; label: string }[];\n placeholder?: string;\n className?: string;\n}) {\n return (\n <Selector\n label={
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/ui/select.tsx"],"sourcesContent":["\"use client\";\n\nimport { Selector } from \"@astryxdesign/core/Selector\";\nimport { useFieldLabel } from \"./primitives\";\n\n/** Admin-select op de Astryx Selector. API ongewijzigd (value/onValueChange/options). */\nexport function Select({\n value,\n onValueChange,\n options,\n placeholder = \"Kies…\",\n className,\n}: {\n value: string;\n onValueChange: (v: string) => void;\n options: { value: string; label: string }[];\n placeholder?: string;\n className?: string;\n}) {\n const label = useFieldLabel(placeholder);\n return (\n <Selector\n label={label}\n isLabelHidden\n placeholder={placeholder}\n containerClassName={className}\n // 0.7: op een telefoon opent de lijst als bottom sheet i.p.v. een klein dropdownmenu.\n presentation=\"adaptive\"\n options={options.map((o) => ({ value: o.value, label: o.label }))}\n value={value}\n onChange={(v) => onValueChange((v as string) ?? \"\")}\n />\n );\n}\n"],"mappings":";AAqBI;AAnBJ,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAGvB,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAMG;AACD,QAAM,QAAQ,cAAc,WAAW;AACvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA,oBAAoB;AAAA,MAEpB,cAAa;AAAA,MACb,SAAS,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,OAAO,EAAE,MAAM,EAAE;AAAA,MAChE;AAAA,MACA,UAAU,CAAC,MAAM,cAAe,KAAgB,EAAE;AAAA;AAAA,EACpD;AAEJ;","names":[]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/** Admin-switch op de Astryx Switch. API ongewijzigd (checked/onCheckedChange/label). */
|
|
2
|
-
export declare function Switch({ checked, onCheckedChange, label, }: {
|
|
2
|
+
export declare function Switch({ checked, onCheckedChange, label, labelVerborgen, }: {
|
|
3
3
|
checked: boolean;
|
|
4
4
|
onCheckedChange: (v: boolean) => void;
|
|
5
5
|
label?: string;
|
|
6
|
+
/** Label alleen voor schermlezers (bv. in een tabel waar de kolomkop het al zegt). */
|
|
7
|
+
labelVerborgen?: boolean;
|
|
6
8
|
}): import("react").JSX.Element;
|
package/dist/admin/ui/switch.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Switch as AstryxSwitch } from "@astryxdesign/core/Switch";
|
|
4
|
+
import { useFieldLabel } from "./primitives.js";
|
|
4
5
|
function Switch({
|
|
5
6
|
checked,
|
|
6
7
|
onCheckedChange,
|
|
7
|
-
label
|
|
8
|
+
label,
|
|
9
|
+
labelVerborgen
|
|
8
10
|
}) {
|
|
11
|
+
const veldLabel = useFieldLabel("Aan/uit");
|
|
9
12
|
return /* @__PURE__ */ jsx(
|
|
10
13
|
AstryxSwitch,
|
|
11
14
|
{
|
|
12
|
-
label: label ??
|
|
13
|
-
isLabelHidden: !label,
|
|
15
|
+
label: label ?? veldLabel,
|
|
16
|
+
isLabelHidden: !label || labelVerborgen,
|
|
14
17
|
value: checked,
|
|
15
18
|
onChange: (c) => onCheckedChange(c)
|
|
16
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/ui/switch.tsx"],"sourcesContent":["\"use client\";\n\nimport { Switch as AstryxSwitch } from \"@astryxdesign/core/Switch\";\n\n/** Admin-switch op de Astryx Switch. API ongewijzigd (checked/onCheckedChange/label). */\nexport function Switch({\n checked,\n onCheckedChange,\n label,\n}: {\n checked: boolean;\n onCheckedChange: (v: boolean) => void;\n label?: string;\n}) {\n return (\n <AstryxSwitch\n label={label ??
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/ui/switch.tsx"],"sourcesContent":["\"use client\";\n\nimport { Switch as AstryxSwitch } from \"@astryxdesign/core/Switch\";\nimport { useFieldLabel } from \"./primitives\";\n\n/** Admin-switch op de Astryx Switch. API ongewijzigd (checked/onCheckedChange/label). */\nexport function Switch({\n checked,\n onCheckedChange,\n label,\n labelVerborgen,\n}: {\n checked: boolean;\n onCheckedChange: (v: boolean) => void;\n label?: string;\n /** Label alleen voor schermlezers (bv. in een tabel waar de kolomkop het al zegt). */\n labelVerborgen?: boolean;\n}) {\n const veldLabel = useFieldLabel(\"Aan/uit\");\n return (\n <AstryxSwitch\n label={label ?? veldLabel}\n isLabelHidden={!label || labelVerborgen}\n value={checked}\n onChange={(c) => onCheckedChange(c)}\n />\n );\n}\n"],"mappings":";AAoBI;AAlBJ,SAAS,UAAU,oBAAoB;AACvC,SAAS,qBAAqB;AAGvB,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,YAAY,cAAc,SAAS;AACzC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,SAAS;AAAA,MAChB,eAAe,CAAC,SAAS;AAAA,MACzB,OAAO;AAAA,MACP,UAAU,CAAC,MAAM,gBAAgB,CAAC;AAAA;AAAA,EACpC;AAEJ;","names":[]}
|
package/dist/admin/ui/toast.d.ts
CHANGED
|
@@ -16,8 +16,9 @@ interface ToastApi {
|
|
|
16
16
|
* `toast({title, description, tone})` blijft, zodat de editors ongewijzigd blijven. Fouten blijven
|
|
17
17
|
* staan tot de gebruiker ze sluit (auto-hide uit); overige verdwijnen vanzelf.
|
|
18
18
|
*/
|
|
19
|
-
export declare function ToastProvider({ children }: {
|
|
19
|
+
export declare function ToastProvider({ children, positie }: {
|
|
20
20
|
children: ReactNode;
|
|
21
|
+
positie?: "bottomEnd" | "topEnd";
|
|
21
22
|
}): import("react").JSX.Element;
|
|
22
23
|
/**
|
|
23
24
|
* `toast` MOET stabiel zijn over renders heen.
|
package/dist/admin/ui/toast.js
CHANGED
|
@@ -2,24 +2,30 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useMemo, useRef } from "react";
|
|
4
4
|
import { useToast as useAstryxToast, ToastViewport } from "@astryxdesign/core/Toast";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { Icon } from "./Icon.js";
|
|
6
|
+
import { foutNaarMens } from "../lib/foutNaarMens.js";
|
|
7
|
+
function ToastProvider({ children, positie = "bottomEnd" }) {
|
|
8
|
+
return /* @__PURE__ */ jsx(ToastViewport, { position: positie, maxVisible: 4, children });
|
|
7
9
|
}
|
|
8
10
|
function useToast() {
|
|
9
11
|
const show = useAstryxToast();
|
|
10
12
|
const showRef = useRef(show);
|
|
11
13
|
showRef.current = show;
|
|
12
14
|
const toast = useCallback(({ title, description, tone = "default", action }) => {
|
|
15
|
+
const uitleg = tone === "error" ? foutNaarMens(description) : description;
|
|
13
16
|
showRef.current({
|
|
14
|
-
body: /* @__PURE__ */ jsxs("span", { children: [
|
|
15
|
-
/* @__PURE__ */ jsx("
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
body: /* @__PURE__ */ jsxs("span", { style: { display: "flex", gap: "0.6rem", alignItems: "flex-start" }, children: [
|
|
18
|
+
tone === "success" ? /* @__PURE__ */ jsx("span", { "aria-hidden": true, style: { color: "#16a34a", marginTop: 2 }, children: /* @__PURE__ */ jsx(Icon, { naam: "vink", grootte: 18 }) }) : null,
|
|
19
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
20
|
+
/* @__PURE__ */ jsx("strong", { children: title }),
|
|
21
|
+
uitleg ? /* @__PURE__ */ jsx("span", { style: { display: "block", opacity: 0.8 }, children: uitleg }) : null,
|
|
22
|
+
action ? (
|
|
23
|
+
// Eén optionele vervolg-actie in de melding zelf ("Bekijk als bezoeker →"): de melding
|
|
24
|
+
// is precies het moment waarop die vraag leeft, en een knop sluit de mentale lus die
|
|
25
|
+
// een instructie in prozavorm open laat staan.
|
|
26
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "xicms-toast__actie", onClick: action.onClick, children: action.label })
|
|
27
|
+
) : null
|
|
28
|
+
] })
|
|
23
29
|
] }),
|
|
24
30
|
type: tone === "error" ? "error" : "info",
|
|
25
31
|
isAutoHide: tone !== "error" && !action
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/ui/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useRef, type ReactNode } from \"react\";\nimport { useToast as useAstryxToast, ToastViewport } from \"@astryxdesign/core/Toast\";\n\ntype ToastTone = \"default\" | \"success\" | \"error\";\ninterface ToastApi {\n toast: (t: { title: string; description?: string; tone?: ToastTone; action?: { label: string; onClick: () => void } }) => void;\n}\n\n/**\n * Admin-toasts op de **Astryx Toast** (ToastViewport + useToast). De bestaande API\n * `toast({title, description, tone})` blijft, zodat de editors ongewijzigd blijven. Fouten blijven\n * staan tot de gebruiker ze sluit (auto-hide uit); overige verdwijnen vanzelf.\n */\nexport function ToastProvider({ children }: { children: ReactNode }) {\n return (\n <ToastViewport position
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/ui/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useRef, type ReactNode } from \"react\";\nimport { useToast as useAstryxToast, ToastViewport } from \"@astryxdesign/core/Toast\";\nimport { Icon } from \"./Icon\";\nimport { foutNaarMens } from \"../lib/foutNaarMens\";\n\ntype ToastTone = \"default\" | \"success\" | \"error\";\ninterface ToastApi {\n toast: (t: { title: string; description?: string; tone?: ToastTone; action?: { label: string; onClick: () => void } }) => void;\n}\n\n/**\n * Admin-toasts op de **Astryx Toast** (ToastViewport + useToast). De bestaande API\n * `toast({title, description, tone})` blijft, zodat de editors ongewijzigd blijven. Fouten blijven\n * staan tot de gebruiker ze sluit (auto-hide uit); overige verdwijnen vanzelf.\n */\nexport function ToastProvider({ children, positie = \"bottomEnd\" }: { children: ReactNode; positie?: \"bottomEnd\" | \"topEnd\" }) {\n return (\n <ToastViewport position={positie} maxVisible={4}>\n {children}\n </ToastViewport>\n );\n}\n\n/**\n * `toast` MOET stabiel zijn over renders heen.\n *\n * Dit gaf `{ toast: (t) => … }` terug — een nieuw object met een nieuwe functie bij ELKE render.\n * Op zichzelf onschuldig, tot je bedenkt dat drie effecten in het beheer `toast` in hun\n * afhankelijkheden hebben (de mediakiezer, de mediabeheerder en de visuele editor). Zo'n effect\n * draait dan bij elke render opnieuw, zet state, en die state veroorzaakt weer een render:\n * \"Maximum update depth exceeded\", en een pagina die niet meer laadt.\n *\n * Dat maakte de visuele editor onbruikbaar op élke pagina mét werkversie — daar hangt de\n * mediakiezer in de boom. Op een pagina zónder werkversie kwam de editor nooit zo ver, en precies\n * daarom kon dit lang onopgemerkt blijven: wie het probeerde op een lege pagina zag niets bijzonders.\n *\n * `show` komt uit Astryx en biedt geen garantie over zijn eigen stabiliteit; daarom via een ref, en\n * niet als afhankelijkheid. Anders verplaatsen we het probleem alleen maar één laag.\n */\nexport function useToast(): ToastApi {\n const show = useAstryxToast();\n const showRef = useRef(show);\n showRef.current = show;\n\n const toast = useCallback<ToastApi[\"toast\"]>(({ title, description, tone = \"default\", action }) => {\n // 8.12: technische (Firebase-)fouten in gewone woorden, op één plek voor het hele beheer.\n const uitleg = tone === \"error\" ? foutNaarMens(description) : description;\n showRef.current({\n body: (\n <span style={{ display: \"flex\", gap: \"0.6rem\", alignItems: \"flex-start\" }}>\n {/* Astryx kent alleen info/error; een geslaagde actie krijgt zijn eigen groene vinkje. */}\n {tone === \"success\" ? (\n <span aria-hidden style={{ color: \"#16a34a\", marginTop: 2 }}><Icon naam=\"vink\" grootte={18} /></span>\n ) : null}\n <span>\n <strong>{title}</strong>\n {uitleg ? <span style={{ display: \"block\", opacity: 0.8 }}>{uitleg}</span> : null}\n {action ? (\n // Eén optionele vervolg-actie in de melding zelf (\"Bekijk als bezoeker →\"): de melding\n // is precies het moment waarop die vraag leeft, en een knop sluit de mentale lus die\n // een instructie in prozavorm open laat staan.\n <button type=\"button\" className=\"xicms-toast__actie\" onClick={action.onClick}>\n {action.label}\n </button>\n ) : null}\n </span>\n </span>\n ),\n type: tone === \"error\" ? \"error\" : \"info\",\n isAutoHide: tone !== \"error\" && !action,\n });\n }, []);\n\n return useMemo(() => ({ toast }), [toast]);\n}\n"],"mappings":";AAmBI,cAqCM,YArCN;AAjBJ,SAAS,aAAa,SAAS,cAA8B;AAC7D,SAAS,YAAY,gBAAgB,qBAAqB;AAC1D,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAYtB,SAAS,cAAc,EAAE,UAAU,UAAU,YAAY,GAA8D;AAC5H,SACE,oBAAC,iBAAc,UAAU,SAAS,YAAY,GAC3C,UACH;AAEJ;AAkBO,SAAS,WAAqB;AACnC,QAAM,OAAO,eAAe;AAC5B,QAAM,UAAU,OAAO,IAAI;AAC3B,UAAQ,UAAU;AAElB,QAAM,QAAQ,YAA+B,CAAC,EAAE,OAAO,aAAa,OAAO,WAAW,OAAO,MAAM;AAEjG,UAAM,SAAS,SAAS,UAAU,aAAa,WAAW,IAAI;AAC9D,YAAQ,QAAQ;AAAA,MACd,MACE,qBAAC,UAAK,OAAO,EAAE,SAAS,QAAQ,KAAK,UAAU,YAAY,aAAa,GAErE;AAAA,iBAAS,YACR,oBAAC,UAAK,eAAW,MAAC,OAAO,EAAE,OAAO,WAAW,WAAW,EAAE,GAAG,8BAAC,QAAK,MAAK,QAAO,SAAS,IAAI,GAAE,IAC5F;AAAA,QACJ,qBAAC,UACD;AAAA,8BAAC,YAAQ,iBAAM;AAAA,UACd,SAAS,oBAAC,UAAK,OAAO,EAAE,SAAS,SAAS,SAAS,IAAI,GAAI,kBAAO,IAAU;AAAA,UAC5E;AAAA;AAAA;AAAA;AAAA,YAIC,oBAAC,YAAO,MAAK,UAAS,WAAU,sBAAqB,SAAS,OAAO,SAClE,iBAAO,OACV;AAAA,cACE;AAAA,WACJ;AAAA,SACF;AAAA,MAEF,MAAM,SAAS,UAAU,UAAU;AAAA,MACnC,YAAY,SAAS,WAAW,CAAC;AAAA,IACnC,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO,QAAQ,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AAC3C;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Pattern } from "../../patterns/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* De blokkiezer (8.11): wat wil je hier toevoegen?
|
|
4
|
+
*
|
|
5
|
+
* Verving een platte keuzelijst van zo'n zestig namen. Nu: een zoekveld, groepen ("Over je bedrijf",
|
|
6
|
+
* "Contact en afspraken"), per blok één zin uitleg, en een tweede tabblad met kant-en-klare secties
|
|
7
|
+
* (de patronen) — die zaten achter een aparte knop in de zijbalk. Opent vanaf de "+" tussen twee
|
|
8
|
+
* blokken op de pagina én vanuit de zijbalk.
|
|
9
|
+
*/
|
|
10
|
+
export declare function BlokKiezer({ open, onOpenChange, onBlok, onSectie, patterns, }: {
|
|
11
|
+
open: boolean;
|
|
12
|
+
onOpenChange: (v: boolean) => void;
|
|
13
|
+
onBlok: (type: string) => void;
|
|
14
|
+
onSectie: (blocks: Array<Record<string, unknown>>) => void;
|
|
15
|
+
patterns?: Pattern[];
|
|
16
|
+
}): import("react").JSX.Element | null;
|
|
17
|
+
/**
|
|
18
|
+
* Een "+" op de naad onder het blok waar je muis is: hier iets invoegen. Alleen voor blokken op het
|
|
19
|
+
* hoogste niveau van de pagina (`sleutels`), niet voor blokken in kolommen of tabbladen.
|
|
20
|
+
*/
|
|
21
|
+
export declare function TussenPlus({ sleutels, onKies }: {
|
|
22
|
+
sleutels: string[];
|
|
23
|
+
onKies: (na: string) => void;
|
|
24
|
+
}): import("react").JSX.Element | null;
|
|
25
|
+
/**
|
|
26
|
+
* Kaders (8.11): een stippellijn met de naam rond het blok onder je muis, een doorgetrokken lijn
|
|
27
|
+
* rond het blok dat je bewerkt. Zonder kader was niet te zien waar een blok begon en eindigde — de
|
|
28
|
+
* CSS ervoor bestond nog uit de tijd van het canvas, maar niets gebruikte hem.
|
|
29
|
+
*/
|
|
30
|
+
export declare function BlokKader({ sleutels, gekozen, labelVoor }: {
|
|
31
|
+
sleutels: string[];
|
|
32
|
+
gekozen: string | null;
|
|
33
|
+
labelVoor: (key: string) => string;
|
|
34
|
+
}): import("react").JSX.Element;
|