@xiwebdesign/xicms-core 6.5.0 → 7.1.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/SiteChrome.d.ts +12 -0
- package/dist/SiteChrome.js +24 -0
- package/dist/SiteChrome.js.map +1 -0
- package/dist/XiCMSProvider.d.ts +16 -8
- package/dist/XiCMSProvider.js +90 -61
- package/dist/XiCMSProvider.js.map +1 -1
- package/dist/admin/AdminApp.d.ts +1 -1
- package/dist/admin/AdminApp.js +81 -35
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/AdminHelp.d.ts +8 -1
- package/dist/admin/AdminHelp.js +2 -2
- package/dist/admin/AdminHelp.js.map +1 -1
- package/dist/admin/CoreVersion.d.ts +13 -0
- package/dist/admin/CoreVersion.js +38 -0
- package/dist/admin/CoreVersion.js.map +1 -0
- package/dist/admin/NewsEditor.js +9 -9
- package/dist/admin/SuperadminPanel.js +5 -5
- package/dist/admin/blockEditors/GenericEditor.d.ts +2 -2
- package/dist/admin/blockEditors/GenericEditor.js +12 -11
- package/dist/admin/blockEditors/GenericEditor.js.map +1 -1
- package/dist/admin/blockEditors/StyleEditor.d.ts +1 -1
- package/dist/admin/blockEditors/StyleEditor.js +2 -2
- package/dist/admin/blockEditors/SymbolRefEditor.d.ts +1 -1
- package/dist/admin/blockEditors/SymbolRefEditor.js +5 -5
- package/dist/admin/blockEditors/index.d.ts +1 -1
- package/dist/admin/blockEditors/index.js +10 -10
- package/dist/admin/customBlocks/CustomBlocksPanel.js +7 -7
- package/dist/admin/editors/RichTextEditor.js +8 -7
- package/dist/admin/editors/RichTextEditor.js.map +1 -1
- package/dist/admin/editors/fontSizeExtension.js +1 -1
- package/dist/admin/editors/fontSizeExtension.js.map +1 -1
- package/dist/admin/forms/FormsPanel.js +9 -9
- package/dist/admin/index.d.ts +16 -16
- package/dist/admin/index.js +16 -16
- package/dist/admin/lib/mediaUsage.js +1 -1
- package/dist/admin/lib/pagesClient.d.ts +1 -1
- package/dist/admin/lib/pagesClient.js +11 -7
- package/dist/admin/lib/pagesClient.js.map +1 -1
- package/dist/admin/lib/sanitizeDraft.d.ts +9 -0
- package/dist/admin/lib/sanitizeDraft.js +28 -0
- package/dist/admin/lib/sanitizeDraft.js.map +1 -0
- package/dist/admin/lib/symbolsClient.d.ts +1 -1
- package/dist/admin/lib/symbolsClient.js +3 -3
- package/dist/admin/lib/upload.js +3 -3
- package/dist/admin/lib/useNestedDialog.d.ts +15 -0
- package/dist/admin/lib/useNestedDialog.js +23 -0
- package/dist/admin/lib/useNestedDialog.js.map +1 -0
- package/dist/admin/lib/zodFields.d.ts +4 -18
- package/dist/admin/lib/zodFields.js +54 -35
- package/dist/admin/lib/zodFields.js.map +1 -1
- package/dist/admin/media/MediaManager.js +7 -7
- package/dist/admin/media/MediaPicker.js +7 -7
- package/dist/admin/media/MediaPicker.js.map +1 -1
- package/dist/admin/pages/PageEditor.d.ts +1 -1
- package/dist/admin/pages/PageEditor.js +13 -13
- package/dist/admin/pages/PagesPanel.js +30 -30
- package/dist/admin/pages/PagesPanel.js.map +1 -1
- package/dist/admin/panelRegistry.js +7 -7
- package/dist/admin/patterns/PatternInserter.d.ts +1 -1
- package/dist/admin/patterns/PatternInserter.js +5 -5
- package/dist/admin/patterns/PatternInserter.js.map +1 -1
- package/dist/admin/settings/MailSettings.js +5 -5
- package/dist/admin/settings/MailTemplates.d.ts +1 -1
- package/dist/admin/settings/MailTemplates.js +5 -5
- package/dist/admin/settings/SettingsPanel.js +66 -20
- package/dist/admin/settings/SettingsPanel.js.map +1 -1
- package/dist/admin/settings/SnapshotsCard.js +5 -5
- package/dist/admin/settings/moduleSettingsForm.d.ts +1 -1
- package/dist/admin/settings/moduleSettingsForm.js +4 -4
- package/dist/admin/settings/moduleSettingsForm.js.map +1 -1
- package/dist/admin/shop/CategoriesTab.js +8 -8
- package/dist/admin/shop/ConnectionsTab.js +3 -3
- package/dist/admin/shop/DiscountsTab.js +8 -8
- package/dist/admin/shop/OrdersTab.js +10 -10
- package/dist/admin/shop/OrdersTab.js.map +1 -1
- package/dist/admin/shop/ProductsTab.js +10 -10
- package/dist/admin/shop/ShopPanel.js +9 -9
- package/dist/admin/shop/ShopSettingsTab.js +4 -4
- package/dist/admin/shop/index.d.ts +2 -2
- package/dist/admin/shop/index.js +2 -2
- package/dist/admin/shop/lib.js +2 -2
- package/dist/admin/stats/StatsPanel.js +2 -2
- package/dist/admin/ui/ArrayEditor.js +1 -1
- package/dist/admin/ui/PanelIcon.d.ts +3 -0
- package/dist/admin/ui/PanelIcon.js +34 -0
- package/dist/admin/ui/PanelIcon.js.map +1 -0
- package/dist/admin/ui/dialog.d.ts +21 -6
- package/dist/admin/ui/dialog.js +55 -34
- package/dist/admin/ui/dialog.js.map +1 -1
- package/dist/admin/ui/index.d.ts +7 -7
- package/dist/admin/ui/index.js +7 -7
- package/dist/admin/ui/primitives.js +1 -1
- package/dist/admin/ui/tabs.js +1 -1
- package/dist/admin/visual/TranslationPanel.d.ts +1 -1
- package/dist/admin/visual/TranslationPanel.js +3 -3
- package/dist/admin/visual/VisualEditor.js +47 -25
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/admin.css +2 -1
- package/dist/agentFiles/catalog.d.ts +2 -2
- package/dist/agentFiles/catalog.js +6 -5
- package/dist/agentFiles/catalog.js.map +1 -1
- package/dist/agentFiles/files.d.ts +5 -5
- package/dist/agentFiles/files.js +17 -17
- package/dist/agentFiles/files.js.map +1 -1
- package/dist/all.d.ts +4 -4
- package/dist/all.js +6 -6
- package/dist/auth/AuthProvider.d.ts +2 -2
- package/dist/auth/AuthProvider.js +51 -28
- package/dist/auth/AuthProvider.js.map +1 -1
- package/dist/auth/LoginForm.js +1 -1
- package/dist/auth/roles.js +4 -1
- package/dist/auth/roles.js.map +1 -1
- package/dist/blocks/BlockRenderer.d.ts +1 -1
- package/dist/blocks/BlockRenderer.js +3 -3
- package/dist/blocks/blockStyle.d.ts +1 -1
- package/dist/blocks/builtins/Accordion.d.ts +1 -1
- package/dist/blocks/builtins/Accordion.js +13 -6
- package/dist/blocks/builtins/Accordion.js.map +1 -1
- package/dist/blocks/builtins/Agenda.d.ts +1 -1
- package/dist/blocks/builtins/Agenda.js +5 -5
- package/dist/blocks/builtins/Banner.d.ts +1 -1
- package/dist/blocks/builtins/Banner.js +2 -2
- package/dist/blocks/builtins/BeforeAfter.d.ts +1 -1
- package/dist/blocks/builtins/BeforeAfter.js +4 -4
- package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
- package/dist/blocks/builtins/Booking.d.ts +1 -1
- package/dist/blocks/builtins/Booking.js +5 -5
- package/dist/blocks/builtins/Breadcrumbs.d.ts +1 -1
- package/dist/blocks/builtins/Breadcrumbs.js +3 -3
- package/dist/blocks/builtins/Cards.d.ts +1 -1
- package/dist/blocks/builtins/Cards.js +5 -5
- package/dist/blocks/builtins/Cards.js.map +1 -1
- package/dist/blocks/builtins/Columns.d.ts +1 -1
- package/dist/blocks/builtins/Columns.js +4 -4
- package/dist/blocks/builtins/Contact.d.ts +3 -3
- package/dist/blocks/builtins/Contact.js +4 -4
- package/dist/blocks/builtins/Countdown.d.ts +1 -1
- package/dist/blocks/builtins/Countdown.js +4 -4
- package/dist/blocks/builtins/Countdown.js.map +1 -1
- package/dist/blocks/builtins/Cta.d.ts +1 -1
- package/dist/blocks/builtins/Cta.js +3 -3
- package/dist/blocks/builtins/Downloads.d.ts +1 -1
- package/dist/blocks/builtins/Downloads.js +4 -4
- package/dist/blocks/builtins/Elements.d.ts +3 -3
- package/dist/blocks/builtins/Elements.js +3 -3
- package/dist/blocks/builtins/Embed.d.ts +1 -1
- package/dist/blocks/builtins/Embed.js +3 -3
- package/dist/blocks/builtins/Faq.d.ts +1 -1
- package/dist/blocks/builtins/Faq.js +14 -6
- package/dist/blocks/builtins/Faq.js.map +1 -1
- package/dist/blocks/builtins/FormBlock.d.ts +1 -1
- package/dist/blocks/builtins/FormBlock.js +28 -18
- package/dist/blocks/builtins/FormBlock.js.map +1 -1
- package/dist/blocks/builtins/Gallery.d.ts +2 -2
- package/dist/blocks/builtins/Gallery.js +5 -5
- package/dist/blocks/builtins/Hero.d.ts +1 -1
- package/dist/blocks/builtins/Hero.js +4 -4
- package/dist/blocks/builtins/ImageBlock.d.ts +1 -1
- package/dist/blocks/builtins/ImageBlock.js +3 -3
- package/dist/blocks/builtins/Jobs.d.ts +2 -2
- package/dist/blocks/builtins/Jobs.js +5 -5
- package/dist/blocks/builtins/Layout.d.ts +2 -2
- package/dist/blocks/builtins/Layout.js +4 -4
- package/dist/blocks/builtins/MapBlock.d.ts +1 -1
- package/dist/blocks/builtins/MapBlock.js +3 -3
- package/dist/blocks/builtins/NewsListBlock.d.ts +1 -1
- package/dist/blocks/builtins/NewsListBlock.js +4 -4
- package/dist/blocks/builtins/Newsletter.d.ts +1 -1
- package/dist/blocks/builtins/Newsletter.js +7 -7
- package/dist/blocks/builtins/Newsletter.js.map +1 -1
- package/dist/blocks/builtins/OpenNowBadge.d.ts +1 -1
- package/dist/blocks/builtins/OpenNowBadge.js +8 -3
- package/dist/blocks/builtins/OpenNowBadge.js.map +1 -1
- package/dist/blocks/builtins/OpeningHours.d.ts +1 -1
- package/dist/blocks/builtins/OpeningHours.js +6 -6
- package/dist/blocks/builtins/PdfBlock.d.ts +1 -1
- package/dist/blocks/builtins/PdfBlock.js +3 -3
- package/dist/blocks/builtins/Portfolio.d.ts +1 -1
- package/dist/blocks/builtins/Portfolio.js +5 -5
- package/dist/blocks/builtins/Pricing.d.ts +2 -2
- package/dist/blocks/builtins/Pricing.js +5 -5
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/RichTextBlock.d.ts +1 -1
- package/dist/blocks/builtins/RichTextBlock.js +2 -2
- package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
- package/dist/blocks/builtins/Search.d.ts +1 -1
- package/dist/blocks/builtins/Search.js +9 -7
- package/dist/blocks/builtins/Search.js.map +1 -1
- package/dist/blocks/builtins/Sections.d.ts +4 -4
- package/dist/blocks/builtins/Sections.js +4 -4
- package/dist/blocks/builtins/Slider.d.ts +1 -1
- package/dist/blocks/builtins/Slider.js +3 -3
- package/dist/blocks/builtins/Spacer.d.ts +1 -1
- package/dist/blocks/builtins/Spacer.js +2 -2
- package/dist/blocks/builtins/SymbolRef.d.ts +1 -1
- package/dist/blocks/builtins/SymbolRef.js +31 -17
- package/dist/blocks/builtins/SymbolRef.js.map +1 -1
- package/dist/blocks/builtins/Team.d.ts +1 -1
- package/dist/blocks/builtins/Team.js +4 -4
- package/dist/blocks/builtins/Testimonials.d.ts +2 -2
- package/dist/blocks/builtins/Testimonials.js +4 -4
- package/dist/blocks/builtins/Video.d.ts +2 -2
- package/dist/blocks/builtins/Video.js +4 -4
- package/dist/blocks/builtins/Video.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChat.d.ts +1 -1
- package/dist/blocks/builtins/WhatsappChat.js +2 -2
- package/dist/blocks/builtins/Widgets.d.ts +12 -12
- package/dist/blocks/builtins/Widgets.js +19 -19
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/builtins/consentEmbed.js +2 -2
- package/dist/blocks/builtins/index.d.ts +40 -40
- package/dist/blocks/builtins/index.js +40 -40
- package/dist/blocks/builtins/lib/submitForm.js +5 -3
- package/dist/blocks/builtins/lib/submitForm.js.map +1 -1
- package/dist/blocks/context.d.ts +1 -1
- package/dist/blocks/customTemplate/definition.d.ts +3 -3
- package/dist/blocks/customTemplate/definition.js +6 -6
- package/dist/blocks/customTemplate/definition.js.map +1 -1
- package/dist/blocks/customTemplate/interpret.js +1 -1
- package/dist/blocks/index.d.ts +5 -5
- package/dist/blocks/index.js +5 -5
- package/dist/blocks/registry.d.ts +17 -7
- package/dist/blocks/registry.js +2 -1
- package/dist/blocks/registry.js.map +1 -1
- package/dist/components/EditBar.js +3 -3
- package/dist/components/FeedbackWidget.js +4 -4
- package/dist/components/News.d.ts +1 -1
- package/dist/components/News.js +50 -37
- package/dist/components/News.js.map +1 -1
- package/dist/components/PageView.js +11 -8
- package/dist/components/PageView.js.map +1 -1
- package/dist/components/ResponsiveImage.d.ts +1 -1
- package/dist/components/site/SiteFooter.d.ts +1 -1
- package/dist/components/site/SiteFooter.js +2 -2
- package/dist/config.d.ts +1 -1
- package/dist/demo/DemoStudio.js +3 -3
- package/dist/demo/demoStore.d.ts +3 -3
- package/dist/demo/index.d.ts +2 -2
- package/dist/demo/index.js +2 -2
- package/dist/editor/EditorProvider.js +1 -1
- package/dist/firebase/admin.d.ts +0 -2
- package/dist/firebase/admin.js +0 -6
- package/dist/firebase/admin.js.map +1 -1
- package/dist/firebase/appcheck.d.ts +1 -1
- package/dist/firebase/appcheck.js +5 -3
- package/dist/firebase/appcheck.js.map +1 -1
- package/dist/firebase/client.d.ts +2 -1
- package/dist/firebase/client.js +2 -14
- package/dist/firebase/client.js.map +1 -1
- package/dist/firebase/config.d.ts +31 -0
- package/dist/firebase/config.js +39 -0
- package/dist/firebase/config.js.map +1 -0
- package/dist/firebase/feedback.js +5 -3
- package/dist/firebase/feedback.js.map +1 -1
- package/dist/i18n/overlay.d.ts +2 -2
- package/dist/i18n/overlay.js +6 -4
- package/dist/i18n/overlay.js.map +1 -1
- package/dist/index.d.ts +46 -44
- package/dist/index.js +39 -33
- package/dist/index.js.map +1 -1
- package/dist/lock/DemoLock.js +1 -1
- package/dist/modules/builtins.d.ts +1 -1
- package/dist/modules/builtins.js +53 -55
- package/dist/modules/builtins.js.map +1 -1
- package/dist/modules/consent/ConsentBanner.js +1 -1
- package/dist/modules/consent/useConsent.js +1 -1
- package/dist/modules/context.d.ts +1 -1
- package/dist/modules/contract.d.ts +1 -1
- package/dist/modules/defineModule.d.ts +1 -1
- package/dist/modules/index.d.ts +9 -9
- package/dist/modules/index.js +8 -8
- package/dist/modules/overrides.d.ts +1 -1
- package/dist/modules/registry.d.ts +2 -7
- package/dist/modules/registry.js +2 -1
- package/dist/modules/registry.js.map +1 -1
- package/dist/modules/shop/blocks/Cart.d.ts +1 -1
- package/dist/modules/shop/blocks/Cart.js +6 -6
- package/dist/modules/shop/blocks/Checkout.d.ts +1 -1
- package/dist/modules/shop/blocks/Checkout.js +6 -6
- package/dist/modules/shop/blocks/Donation.d.ts +1 -1
- package/dist/modules/shop/blocks/Donation.js +5 -5
- package/dist/modules/shop/blocks/OrderStatus.d.ts +1 -1
- package/dist/modules/shop/blocks/OrderStatus.js +5 -5
- package/dist/modules/shop/blocks/ProductDetail.d.ts +1 -1
- package/dist/modules/shop/blocks/ProductDetail.js +8 -8
- package/dist/modules/shop/blocks/ProductGrid.d.ts +3 -3
- package/dist/modules/shop/blocks/ProductGrid.js +7 -7
- package/dist/modules/shop/blocks/ShopCategories.d.ts +1 -1
- package/dist/modules/shop/blocks/ShopCategories.js +6 -6
- package/dist/modules/shop/index.d.ts +5 -5
- package/dist/modules/shop/index.js +5 -5
- package/dist/modules/shop/lib.d.ts +2 -2
- package/dist/modules/shop/lib.js +18 -13
- package/dist/modules/shop/lib.js.map +1 -1
- package/dist/modules/shop/module.d.ts +1 -1
- package/dist/modules/shop/module.js +9 -9
- package/dist/modules/shop/settings.d.ts +18 -50
- package/dist/modules/shop/settings.js +16 -16
- package/dist/modules/shop/settings.js.map +1 -1
- package/dist/modules/shop/strings.js +1 -1
- package/dist/modules/shop/types.d.ts +1 -1
- package/dist/modules/types.d.ts +2 -2
- package/dist/patterns/builtins.d.ts +1 -1
- package/dist/patterns/builtins.js +1 -1
- package/dist/patterns/index.d.ts +2 -2
- package/dist/patterns/index.js +2 -2
- package/dist/render/PageRenderer.d.ts +2 -2
- package/dist/render/PageRenderer.js +1 -1
- package/dist/render/PublishedPage.d.ts +1 -1
- package/dist/render/PublishedPage.js +2 -2
- package/dist/schema/blocks.d.ts +6793 -15095
- package/dist/schema/blocks.js +335 -355
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/customBlocks.d.ts +10 -29
- package/dist/schema/customBlocks.js +14 -13
- package/dist/schema/customBlocks.js.map +1 -1
- package/dist/schema/fields.d.ts +10 -16
- package/dist/schema/fields.js +37 -37
- package/dist/schema/fields.js.map +1 -1
- package/dist/schema/forms.d.ts +62 -111
- package/dist/schema/forms.js +17 -17
- package/dist/schema/forms.js.map +1 -1
- package/dist/schema/index.d.ts +7 -7
- package/dist/schema/index.js +7 -7
- package/dist/schema/mail.d.ts +39 -87
- package/dist/schema/mail.js +4 -4
- package/dist/schema/mail.js.map +1 -1
- package/dist/schema/pages.d.ts +152 -674
- package/dist/schema/pages.js +26 -15
- package/dist/schema/pages.js.map +1 -1
- package/dist/schema/seo.d.ts +9 -27
- package/dist/schema/seo.js +7 -7
- package/dist/schema/seo.js.map +1 -1
- package/dist/schema/settings.d.ts +233 -1074
- package/dist/schema/settings.js +71 -56
- package/dist/schema/settings.js.map +1 -1
- package/dist/schema/shop.d.ts +470 -1214
- package/dist/schema/shop.js +124 -124
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/siteConfig.d.ts +78 -597
- package/dist/schema/siteConfig.js +17 -17
- package/dist/schema/siteConfig.js.map +1 -1
- package/dist/schema/symbols.d.ts +34 -191
- package/dist/schema/symbols.js +8 -8
- package/dist/schema/symbols.js.map +1 -1
- package/dist/server/auth.d.ts +17 -0
- package/dist/server/auth.js +11 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/bundle.d.ts +15 -6
- package/dist/server/bundle.js +5 -1
- package/dist/server/bundle.js.map +1 -1
- package/dist/server/draft.d.ts +16 -0
- package/dist/server/draft.js +12 -0
- package/dist/server/draft.js.map +1 -0
- package/dist/server/env.js +8 -8
- package/dist/server/env.js.map +1 -1
- package/dist/server/index.d.ts +11 -9
- package/dist/server/index.js +13 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/pages.d.ts +11 -4
- package/dist/server/pages.js +43 -15
- package/dist/server/pages.js.map +1 -1
- package/dist/server/revalidate.js +11 -2
- package/dist/server/revalidate.js.map +1 -1
- package/dist/server/seo.d.ts +3 -3
- package/dist/server/seo.js +1 -1
- package/dist/server/shop.d.ts +3 -3
- package/dist/server/shop.js +6 -3
- package/dist/server/shop.js.map +1 -1
- package/dist/server/version.d.ts +16 -0
- package/dist/server/version.js +17 -0
- package/dist/server/version.js.map +1 -0
- package/dist/settings/useSiteSettings.d.ts +2 -2
- package/dist/settings/useSiteSettings.js +48 -28
- package/dist/settings/useSiteSettings.js.map +1 -1
- package/dist/styles.css +30 -4
- package/dist/theme/presets.d.ts +1 -1
- package/dist/version.d.ts +8 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +35 -34
package/dist/schema/fields.js
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
2
|
const ShowIfSchema = z.object({
|
|
3
3
|
/** Sleutel van het veld (zelfde niveau) waarvan de waarde bepaalt of dit veld toont. */
|
|
4
|
-
field: z.string().
|
|
4
|
+
field: z.string().check(z.minLength(1)),
|
|
5
5
|
/** Toon alléén bij exact deze waarde. Weggelaten → toon bij een truthy waarde. */
|
|
6
|
-
equals: z.union([z.string(), z.number(), z.boolean()])
|
|
6
|
+
equals: z.optional(z.union([z.string(), z.number(), z.boolean()]))
|
|
7
7
|
});
|
|
8
8
|
const base = {
|
|
9
9
|
/** Sleutel in het waarden-object (dotted paths niet toegestaan; nesting via group/repeater). */
|
|
10
|
-
key: z.string().
|
|
10
|
+
key: z.string().check(z.minLength(1)).check(z.regex(/^[a-zA-Z][a-zA-Z0-9]*$/, "veldsleutel: letters/cijfers, begint met letter")),
|
|
11
11
|
/** Leesbaar label (NL). */
|
|
12
|
-
label: z.string()
|
|
12
|
+
label: z._default(z.string(), ""),
|
|
13
13
|
/** Optionele hint onder het veld. */
|
|
14
|
-
hint: z.
|
|
14
|
+
hint: z.optional(z.string()),
|
|
15
15
|
/** Conditioneel tonen (primo's Condition). */
|
|
16
|
-
showIf:
|
|
16
|
+
showIf: z.optional(ShowIfSchema)
|
|
17
17
|
};
|
|
18
|
-
const selectOption = z.object({ value: z.string(), label: z.string()
|
|
18
|
+
const selectOption = z.object({ value: z.string(), label: z._default(z.string(), "") });
|
|
19
19
|
const FieldSchema = z.lazy(
|
|
20
20
|
() => z.discriminatedUnion("type", [
|
|
21
|
-
z.object({ ...base, type: z.literal("text"), maxLength: z.
|
|
22
|
-
z.object({ ...base, type: z.literal("textarea"), maxLength: z.
|
|
21
|
+
z.object({ ...base, type: z.literal("text"), maxLength: z.optional(z.int().check(z.positive())), placeholder: z.optional(z.string()) }),
|
|
22
|
+
z.object({ ...base, type: z.literal("textarea"), maxLength: z.optional(z.int().check(z.positive())), rows: z.optional(z.int().check(z.positive())) }),
|
|
23
23
|
z.object({ ...base, type: z.literal("richtext") }),
|
|
24
|
-
z.object({ ...base, type: z.literal("number"), min: z.
|
|
25
|
-
z.object({ ...base, type: z.literal("slider"), min: z.number(), max: z.number(), step: z.
|
|
24
|
+
z.object({ ...base, type: z.literal("number"), min: z.optional(z.number()), max: z.optional(z.number()), step: z.optional(z.number()) }),
|
|
25
|
+
z.object({ ...base, type: z.literal("slider"), min: z.number(), max: z.number(), step: z.optional(z.number()) }),
|
|
26
26
|
z.object({ ...base, type: z.literal("switch") }),
|
|
27
|
-
z.object({ ...base, type: z.literal("select"), options: z.array(selectOption).
|
|
27
|
+
z.object({ ...base, type: z.literal("select"), options: z.array(selectOption).check(z.minLength(1)).check(z.maxLength(50)) }),
|
|
28
28
|
z.object({ ...base, type: z.literal("date") }),
|
|
29
29
|
z.object({ ...base, type: z.literal("icon") }),
|
|
30
30
|
z.object({ ...base, type: z.literal("image") }),
|
|
31
31
|
z.object({ ...base, type: z.literal("url") }),
|
|
32
32
|
z.object({ ...base, type: z.literal("link") }),
|
|
33
|
-
z.object({ ...base, type: z.literal("group"), fields: z.array(FieldSchema).
|
|
34
|
-
z.object({ ...base, type: z.literal("repeater"), fields: z.array(FieldSchema).
|
|
33
|
+
z.object({ ...base, type: z.literal("group"), fields: z.array(FieldSchema).check(z.maxLength(30)) }),
|
|
34
|
+
z.object({ ...base, type: z.literal("repeater"), fields: z.array(FieldSchema).check(z.maxLength(30)), max: z.optional(z.int().check(z.positive())), itemLabel: z.optional(z.string()) }),
|
|
35
35
|
z.object({ ...base, type: z.literal("pageRef") }),
|
|
36
36
|
z.object({ ...base, type: z.literal("info"), text: z.string() }),
|
|
37
37
|
z.object({ ...base, type: z.literal("json") })
|
|
38
38
|
])
|
|
39
39
|
);
|
|
40
|
-
const FieldsSchema = z.array(FieldSchema).
|
|
40
|
+
const FieldsSchema = z.array(FieldSchema).check(z.maxLength(40)).check((ctx) => {
|
|
41
41
|
const seen = /* @__PURE__ */ new Set();
|
|
42
|
-
for (const f of
|
|
43
|
-
if (seen.has(f.key)) ctx.
|
|
42
|
+
for (const f of ctx.value) {
|
|
43
|
+
if (seen.has(f.key)) ctx.issues.push({ code: "custom", input: ctx.value, message: `dubbele veldsleutel "${f.key}"` });
|
|
44
44
|
seen.add(f.key);
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
47
|
function isRichTextKey(key) {
|
|
48
48
|
return key === "html" || key.endsWith("Html");
|
|
49
49
|
}
|
|
50
|
-
const linkValue = z.object({ label: z.string().
|
|
50
|
+
const linkValue = z.object({ label: z._default(z.string().check(z.maxLength(200)), ""), href: z._default(z.string().check(z.maxLength(2e3)), "") });
|
|
51
51
|
function fieldsToZod(fields) {
|
|
52
52
|
const shape = {};
|
|
53
53
|
for (const f of fields) {
|
|
54
54
|
const s = fieldToZod(f);
|
|
55
|
-
if (s) shape[f.key] = f.label ? s.
|
|
55
|
+
if (s) shape[f.key] = f.label ? s.register(z.globalRegistry, { description: f.label }) : s;
|
|
56
56
|
}
|
|
57
57
|
return z.object(shape);
|
|
58
58
|
}
|
|
59
59
|
function fieldToZod(f) {
|
|
60
60
|
switch (f.type) {
|
|
61
61
|
case "text":
|
|
62
|
-
return z.string().
|
|
62
|
+
return z._default(z.string().check(z.maxLength(f.maxLength ?? 500)), "");
|
|
63
63
|
case "textarea":
|
|
64
|
-
return z.string().
|
|
64
|
+
return z._default(z.string().check(z.maxLength(f.maxLength ?? 5e3)), "");
|
|
65
65
|
case "richtext":
|
|
66
|
-
return z.string().
|
|
66
|
+
return z._default(z.string().check(z.maxLength(5e4)), "");
|
|
67
67
|
case "number": {
|
|
68
68
|
let n = z.number();
|
|
69
|
-
if (f.min != null) n = n.
|
|
70
|
-
if (f.max != null) n = n.
|
|
71
|
-
return
|
|
69
|
+
if (f.min != null) n = n.check(z.minimum(f.min));
|
|
70
|
+
if (f.max != null) n = n.check(z.maximum(f.max));
|
|
71
|
+
return z.optional(n);
|
|
72
72
|
}
|
|
73
73
|
case "slider":
|
|
74
|
-
return z.number().
|
|
74
|
+
return z._default(z.number().check(z.minimum(f.min)).check(z.maximum(f.max)), f.min);
|
|
75
75
|
case "switch":
|
|
76
|
-
return z.boolean()
|
|
76
|
+
return z._default(z.boolean(), false);
|
|
77
77
|
case "select": {
|
|
78
78
|
const values = f.options.map((o) => o.value);
|
|
79
|
-
return values.length > 0 ? z.enum([values[0], ...values.slice(1)])
|
|
79
|
+
return values.length > 0 ? z._default(z.enum([values[0], ...values.slice(1)]), values[0]) : z._default(z.string(), "");
|
|
80
80
|
}
|
|
81
81
|
case "date":
|
|
82
|
-
return z.string().regex(/^(\d{4}-\d{2}-\d{2})?$/, "datum als jjjj-mm-dd")
|
|
82
|
+
return z._default(z.string().check(z.regex(/^(\d{4}-\d{2}-\d{2})?$/, "datum als jjjj-mm-dd")), "");
|
|
83
83
|
case "icon":
|
|
84
|
-
return z.string().
|
|
84
|
+
return z._default(z.string().check(z.maxLength(16)), "");
|
|
85
85
|
case "image":
|
|
86
86
|
case "url":
|
|
87
|
-
return z.string().
|
|
87
|
+
return z._default(z.string().check(z.maxLength(2e3)), "");
|
|
88
88
|
case "link":
|
|
89
|
-
return
|
|
89
|
+
return z._default(linkValue, { label: "", href: "" });
|
|
90
90
|
case "group":
|
|
91
|
-
return fieldsToZod(f.fields)
|
|
91
|
+
return z._default(fieldsToZod(f.fields), {});
|
|
92
92
|
case "repeater":
|
|
93
|
-
return z.array(fieldsToZod(f.fields)).
|
|
93
|
+
return z._default(z.array(fieldsToZod(f.fields)).check(z.maxLength(f.max ?? 100)), []);
|
|
94
94
|
case "pageRef":
|
|
95
|
-
return z.string().
|
|
95
|
+
return z._default(z.string().check(z.maxLength(500)), "");
|
|
96
96
|
case "info":
|
|
97
97
|
return null;
|
|
98
98
|
case "json":
|
|
99
|
-
return z.
|
|
99
|
+
return z.optional(z.unknown());
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
function fieldsDefaults(fields) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/fields.ts"],"sourcesContent":["/**\n * Field-IR (\"intermediate representation\") — het declaratieve veldmodel dat formulieren aandrijft.\n *\n * Geport concept + modelvorm uit primo (github.com/primocms/primo, MIT © Matthew Morris) — zie\n * THIRD_PARTY_LICENSES.md. Primo definieert velden als een Zod discriminated union met een\n * `config`-blob per type, nesting zonder recursieve schema's en conditionele velden (`Condition`).\n * XiCMS gebruikt dit model op twee plekken:\n *\n * 1. **Afgeleid**: `introspectToFields()` (admin/lib/zodFields.ts) leidt een Field-IR af uit de\n * bestaande Zod-block-schema's — de GenericEditor rendert die IR. De Zod-schema's blijven de\n * bron van waarheid; dit is puur de formulier-beschrijving.\n * 2. **Als data**: custom blocks (sites/{siteId}/customBlocks) slaan hun velddefinities als\n * Field-IR op in Firestore. `fieldsToZod()` genereert daaruit een echt Zod-schema zodat ook\n * runtime-gedefinieerde blokken de harde XiCMS-validatie houden.\n *\n * Server-safe (geen React). Nesting gaat via een `fields`-array in group/repeater — documentvorm,\n * geen aparte rows (Firestore-vriendelijk, en `z.lazy` dekt de recursie).\n */\nimport { z, type ZodTypeAny } from \"zod\";\n\n/** Conditioneel tonen: veld is zichtbaar als `field` (sibling-sleutel) matcht. */\nexport const ShowIfSchema = z.object({\n /** Sleutel van het veld (zelfde niveau) waarvan de waarde bepaalt of dit veld toont. */\n field: z.string().min(1),\n /** Toon alléén bij exact deze waarde. Weggelaten → toon bij een truthy waarde. */\n equals: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\nexport type ShowIf = z.infer<typeof ShowIfSchema>;\n\nconst base = {\n /** Sleutel in het waarden-object (dotted paths niet toegestaan; nesting via group/repeater). */\n key: z.string().min(1).regex(/^[a-zA-Z][a-zA-Z0-9]*$/, \"veldsleutel: letters/cijfers, begint met letter\"),\n /** Leesbaar label (NL). */\n label: z.string().default(\"\"),\n /** Optionele hint onder het veld. */\n hint: z.string().optional(),\n /** Conditioneel tonen (primo's Condition). */\n showIf: ShowIfSchema.optional(),\n};\n\n/** Selectie-optie voor `select`. */\nconst selectOption = z.object({ value: z.string(), label: z.string().default(\"\") });\n\n// ── Veldtypes (primo: Text, RichText, Number, Slider, Switch, Select, Date, Icon, Image, Url,\n// Link, Group, Repeater, Page, Info — hier op XiCMS-conventies gebracht) ──────────────────────\n\nexport type Field =\n | ({ type: \"text\"; maxLength?: number; placeholder?: string } & BaseShape)\n | ({ type: \"textarea\"; maxLength?: number; rows?: number } & BaseShape)\n | ({ type: \"richtext\" } & BaseShape)\n | ({ type: \"number\"; min?: number; max?: number; step?: number } & BaseShape)\n | ({ type: \"slider\"; min: number; max: number; step?: number } & BaseShape)\n | ({ type: \"switch\" } & BaseShape)\n | ({ type: \"select\"; options: { value: string; label: string }[] } & BaseShape)\n | ({ type: \"date\" } & BaseShape)\n | ({ type: \"icon\" } & BaseShape)\n | ({ type: \"image\" } & BaseShape)\n | ({ type: \"url\" } & BaseShape)\n | ({ type: \"link\" } & BaseShape)\n | ({ type: \"group\"; fields: Field[] } & BaseShape)\n | ({ type: \"repeater\"; fields: Field[]; max?: number; itemLabel?: string } & BaseShape)\n | ({ type: \"pageRef\" } & BaseShape)\n | ({ type: \"info\"; text: string } & BaseShape)\n | ({ type: \"json\" } & BaseShape);\n\ntype BaseShape = { key: string; label: string; hint?: string; showIf?: ShowIf };\n\n/** Zod-schema voor één veld-definitie (recursief via z.lazy voor group/repeater). */\nexport const FieldSchema: z.ZodType<Field> = z.lazy(() =>\n z.discriminatedUnion(\"type\", [\n z.object({ ...base, type: z.literal(\"text\"), maxLength: z.number().int().positive().optional(), placeholder: z.string().optional() }),\n z.object({ ...base, type: z.literal(\"textarea\"), maxLength: z.number().int().positive().optional(), rows: z.number().int().positive().optional() }),\n z.object({ ...base, type: z.literal(\"richtext\") }),\n z.object({ ...base, type: z.literal(\"number\"), min: z.number().optional(), max: z.number().optional(), step: z.number().optional() }),\n z.object({ ...base, type: z.literal(\"slider\"), min: z.number(), max: z.number(), step: z.number().optional() }),\n z.object({ ...base, type: z.literal(\"switch\") }),\n z.object({ ...base, type: z.literal(\"select\"), options: z.array(selectOption).min(1).max(50) }),\n z.object({ ...base, type: z.literal(\"date\") }),\n z.object({ ...base, type: z.literal(\"icon\") }),\n z.object({ ...base, type: z.literal(\"image\") }),\n z.object({ ...base, type: z.literal(\"url\") }),\n z.object({ ...base, type: z.literal(\"link\") }),\n z.object({ ...base, type: z.literal(\"group\"), fields: z.array(FieldSchema).max(30) }),\n z.object({ ...base, type: z.literal(\"repeater\"), fields: z.array(FieldSchema).max(30), max: z.number().int().positive().optional(), itemLabel: z.string().optional() }),\n z.object({ ...base, type: z.literal(\"pageRef\") }),\n z.object({ ...base, type: z.literal(\"info\"), text: z.string() }),\n z.object({ ...base, type: z.literal(\"json\") }),\n ]),\n) as z.ZodType<Field>;\n\n/** Een lijst velddefinities (bv. van een custom block). Unieke sleutels afgedwongen. */\nexport const FieldsSchema = z\n .array(FieldSchema)\n .max(40)\n .superRefine((fields, ctx) => {\n const seen = new Set<string>();\n for (const f of fields) {\n if (seen.has(f.key)) ctx.addIssue({ code: z.ZodIssueCode.custom, message: `dubbele veldsleutel \"${f.key}\"` });\n seen.add(f.key);\n }\n });\n\n/**\n * Rich-text-conventie (security): de sanitizer saneert alleen velden die `html` heten of op\n * `Html` eindigen. Een `richtext`-veld MOET dus zo'n sleutel hebben — afgedwongen waar Field-IR\n * als data binnenkomt (custom blocks), zodat er geen stored-XSS-gat ontstaat.\n */\nexport function isRichTextKey(key: string): boolean {\n return key === \"html\" || key.endsWith(\"Html\");\n}\n\n/** Waarde-sleutel van een link-veld: `{ label, href }`. */\nconst linkValue = z.object({ label: z.string().max(200).default(\"\"), href: z.string().max(2000).default(\"\") });\n\n/**\n * Genereert een Zod-waardenschema uit een Field-IR — de brug die runtime-gedefinieerde blokken\n * (custom blocks) dezelfde harde validatie geeft als code-gedefinieerde blokken. Alle velden\n * krijgen `.default()`/`.optional()` (update-veilig: bestaande content blijft geldig als er\n * velden bijkomen). `info`-velden zijn display-only en krijgen geen waarde.\n */\nexport function fieldsToZod(fields: Field[]): z.ZodObject<Record<string, ZodTypeAny>> {\n const shape: Record<string, ZodTypeAny> = {};\n for (const f of fields) {\n const s = fieldToZod(f);\n if (s) shape[f.key] = f.label ? s.describe(f.label) : s;\n }\n return z.object(shape);\n}\n\nfunction fieldToZod(f: Field): ZodTypeAny | null {\n switch (f.type) {\n case \"text\":\n return z.string().max(f.maxLength ?? 500).default(\"\");\n case \"textarea\":\n return z.string().max(f.maxLength ?? 5000).default(\"\");\n case \"richtext\":\n return z.string().max(50_000).default(\"\");\n case \"number\": {\n let n = z.number();\n if (f.min != null) n = n.min(f.min);\n if (f.max != null) n = n.max(f.max);\n return n.optional();\n }\n case \"slider\":\n return z.number().min(f.min).max(f.max).default(f.min);\n case \"switch\":\n return z.boolean().default(false);\n case \"select\": {\n const values = f.options.map((o) => o.value);\n return values.length > 0\n ? z.enum([values[0], ...values.slice(1)] as [string, ...string[]]).default(values[0])\n : z.string().default(\"\");\n }\n case \"date\":\n // ISO-datum (yyyy-mm-dd) of leeg.\n return z.string().regex(/^(\\d{4}-\\d{2}-\\d{2})?$/, \"datum als jjjj-mm-dd\").default(\"\");\n case \"icon\":\n return z.string().max(16).default(\"\");\n case \"image\":\n case \"url\":\n return z.string().max(2000).default(\"\");\n case \"link\":\n return linkValue.default({ label: \"\", href: \"\" });\n case \"group\":\n return fieldsToZod(f.fields).default({});\n case \"repeater\":\n return z.array(fieldsToZod(f.fields)).max(f.max ?? 100).default([]);\n case \"pageRef\":\n // Pad van een pagina binnen de site (\"/\", \"/contact\", …).\n return z.string().max(500).default(\"\");\n case \"info\":\n return null;\n case \"json\":\n return z.unknown().optional();\n }\n}\n\n/** Default-waarden voor een Field-IR (bv. een nieuw repeater-item). */\nexport function fieldsDefaults(fields: Field[]): Record<string, unknown> {\n return fieldsToZod(fields).parse({});\n}\n\n/**\n * Hints per veldsleutel (dotted path voor geneste velden, bv. \"items.date\") — verfijnt de uit een\n * Zod-schema afgeleide Field-IR. Gebruikt door `defineBlock({ fields })` + `introspectToFields`.\n */\nexport type FieldHints = Record<string, Partial<Field> & { type?: Field[\"type\"] }>;\n\n/** Evalueert `showIf` tegen de huidige waarden (zelfde niveau). Zonder showIf → altijd tonen. */\nexport function isFieldVisible(f: Field, values: Record<string, unknown>): boolean {\n if (!f.showIf) return true;\n const v = values[f.showIf.field];\n if (f.showIf.equals !== undefined) return v === f.showIf.equals;\n return Boolean(v);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/fields.ts"],"sourcesContent":["/**\n * Field-IR (\"intermediate representation\") — het declaratieve veldmodel dat formulieren aandrijft.\n *\n * Geport concept + modelvorm uit primo (github.com/primocms/primo, MIT © Matthew Morris) — zie\n * THIRD_PARTY_LICENSES.md. Primo definieert velden als een Zod discriminated union met een\n * `config`-blob per type, nesting zonder recursieve schema's en conditionele velden (`Condition`).\n * XiCMS gebruikt dit model op twee plekken:\n *\n * 1. **Afgeleid**: `introspectToFields()` (admin/lib/zodFields.ts) leidt een Field-IR af uit de\n * bestaande Zod-block-schema's — de GenericEditor rendert die IR. De Zod-schema's blijven de\n * bron van waarheid; dit is puur de formulier-beschrijving.\n * 2. **Als data**: custom blocks (sites/{siteId}/customBlocks) slaan hun velddefinities als\n * Field-IR op in Firestore. `fieldsToZod()` genereert daaruit een echt Zod-schema zodat ook\n * runtime-gedefinieerde blokken de harde XiCMS-validatie houden.\n *\n * Server-safe (geen React). Nesting gaat via een `fields`-array in group/repeater — documentvorm,\n * geen aparte rows (Firestore-vriendelijk, en `z.lazy` dekt de recursie).\n */\nimport * as z from \"zod/mini\";\n\n/** Zod 4 heeft `ZodTypeAny` afgeschaft; in mini is `z.ZodType` de losse bovengrens. */\ntype ZodTypeAny = z.ZodMiniType;\n\n/** Conditioneel tonen: veld is zichtbaar als `field` (sibling-sleutel) matcht. */\nexport const ShowIfSchema = z.object({\n /** Sleutel van het veld (zelfde niveau) waarvan de waarde bepaalt of dit veld toont. */\n field: z.string().check(z.minLength(1)),\n /** Toon alléén bij exact deze waarde. Weggelaten → toon bij een truthy waarde. */\n equals: z.optional(z.union([z.string(), z.number(), z.boolean()])),\n});\nexport type ShowIf = z.infer<typeof ShowIfSchema>;\n\nconst base = {\n /** Sleutel in het waarden-object (dotted paths niet toegestaan; nesting via group/repeater). */\n key: z.string().check(z.minLength(1)).check(z.regex(/^[a-zA-Z][a-zA-Z0-9]*$/, \"veldsleutel: letters/cijfers, begint met letter\")),\n /** Leesbaar label (NL). */\n label: z._default(z.string(), \"\"),\n /** Optionele hint onder het veld. */\n hint: z.optional(z.string()),\n /** Conditioneel tonen (primo's Condition). */\n showIf: z.optional(ShowIfSchema),\n};\n\n/** Selectie-optie voor `select`. */\nconst selectOption = z.object({ value: z.string(), label: z._default(z.string(), \"\") });\n\n// ── Veldtypes (primo: Text, RichText, Number, Slider, Switch, Select, Date, Icon, Image, Url,\n// Link, Group, Repeater, Page, Info — hier op XiCMS-conventies gebracht) ──────────────────────\n\nexport type Field =\n | ({ type: \"text\"; maxLength?: number; placeholder?: string } & BaseShape)\n | ({ type: \"textarea\"; maxLength?: number; rows?: number } & BaseShape)\n | ({ type: \"richtext\" } & BaseShape)\n | ({ type: \"number\"; min?: number; max?: number; step?: number } & BaseShape)\n | ({ type: \"slider\"; min: number; max: number; step?: number } & BaseShape)\n | ({ type: \"switch\" } & BaseShape)\n | ({ type: \"select\"; options: { value: string; label: string }[] } & BaseShape)\n | ({ type: \"date\" } & BaseShape)\n | ({ type: \"icon\" } & BaseShape)\n | ({ type: \"image\" } & BaseShape)\n | ({ type: \"url\" } & BaseShape)\n | ({ type: \"link\" } & BaseShape)\n | ({ type: \"group\"; fields: Field[] } & BaseShape)\n | ({ type: \"repeater\"; fields: Field[]; max?: number; itemLabel?: string } & BaseShape)\n | ({ type: \"pageRef\" } & BaseShape)\n | ({ type: \"info\"; text: string } & BaseShape)\n | ({ type: \"json\" } & BaseShape);\n\ntype BaseShape = { key: string; label: string; hint?: string; showIf?: ShowIf };\n\n/** Zod-schema voor één veld-definitie (recursief via z.lazy voor group/repeater). */\nexport const FieldSchema: z.ZodMiniType<Field> = z.lazy(() =>\n z.discriminatedUnion(\"type\", [\n z.object({ ...base, type: z.literal(\"text\"), maxLength: z.optional(z.int().check(z.positive())), placeholder: z.optional(z.string()) }),\n z.object({ ...base, type: z.literal(\"textarea\"), maxLength: z.optional(z.int().check(z.positive())), rows: z.optional(z.int().check(z.positive())) }),\n z.object({ ...base, type: z.literal(\"richtext\") }),\n z.object({ ...base, type: z.literal(\"number\"), min: z.optional(z.number()), max: z.optional(z.number()), step: z.optional(z.number()) }),\n z.object({ ...base, type: z.literal(\"slider\"), min: z.number(), max: z.number(), step: z.optional(z.number()) }),\n z.object({ ...base, type: z.literal(\"switch\") }),\n z.object({ ...base, type: z.literal(\"select\"), options: z.array(selectOption).check(z.minLength(1)).check(z.maxLength(50)) }),\n z.object({ ...base, type: z.literal(\"date\") }),\n z.object({ ...base, type: z.literal(\"icon\") }),\n z.object({ ...base, type: z.literal(\"image\") }),\n z.object({ ...base, type: z.literal(\"url\") }),\n z.object({ ...base, type: z.literal(\"link\") }),\n z.object({ ...base, type: z.literal(\"group\"), fields: z.array(FieldSchema).check(z.maxLength(30)) }),\n z.object({ ...base, type: z.literal(\"repeater\"), fields: z.array(FieldSchema).check(z.maxLength(30)), max: z.optional(z.int().check(z.positive())), itemLabel: z.optional(z.string()) }),\n z.object({ ...base, type: z.literal(\"pageRef\") }),\n z.object({ ...base, type: z.literal(\"info\"), text: z.string() }),\n z.object({ ...base, type: z.literal(\"json\") }),\n ]),\n) as z.ZodMiniType<Field>;\n\n/** Een lijst velddefinities (bv. van een custom block). Unieke sleutels afgedwongen. */\nexport const FieldsSchema = z.array(FieldSchema).check(z.maxLength(40)).check((ctx) => {\n const seen = new Set<string>();\n for (const f of ctx.value) {\n if (seen.has(f.key)) ctx.issues.push({ code: \"custom\", input: ctx.value, message: `dubbele veldsleutel \"${f.key}\"` });\n seen.add(f.key);\n }\n });\n\n/**\n * Rich-text-conventie (security): de sanitizer saneert alleen velden die `html` heten of op\n * `Html` eindigen. Een `richtext`-veld MOET dus zo'n sleutel hebben — afgedwongen waar Field-IR\n * als data binnenkomt (custom blocks), zodat er geen stored-XSS-gat ontstaat.\n */\nexport function isRichTextKey(key: string): boolean {\n return key === \"html\" || key.endsWith(\"Html\");\n}\n\n/** Waarde-sleutel van een link-veld: `{ label, href }`. */\nconst linkValue = z.object({ label: z._default(z.string().check(z.maxLength(200)), \"\"), href: z._default(z.string().check(z.maxLength(2000)), \"\") });\n\n/**\n * Genereert een Zod-waardenschema uit een Field-IR — de brug die runtime-gedefinieerde blokken\n * (custom blocks) dezelfde harde validatie geeft als code-gedefinieerde blokken. Alle velden\n * krijgen `.default()`/`.optional()` (update-veilig: bestaande content blijft geldig als er\n * velden bijkomen). `info`-velden zijn display-only en krijgen geen waarde.\n */\nexport function fieldsToZod(fields: Field[]): z.ZodMiniObject<Record<string, ZodTypeAny>> {\n const shape: Record<string, ZodTypeAny> = {};\n for (const f of fields) {\n const s = fieldToZod(f);\n if (s) shape[f.key] = f.label ? s.register(z.globalRegistry, { description: f.label }) : s;\n }\n return z.object(shape);\n}\n\nfunction fieldToZod(f: Field): ZodTypeAny | null {\n switch (f.type) {\n case \"text\":\n return z._default(z.string().check(z.maxLength(f.maxLength ?? 500)), \"\");\n case \"textarea\":\n return z._default(z.string().check(z.maxLength(f.maxLength ?? 5000)), \"\");\n case \"richtext\":\n return z._default(z.string().check(z.maxLength(50_000)), \"\");\n case \"number\": {\n let n = z.number();\n if (f.min != null) n = n.check(z.minimum(f.min));\n if (f.max != null) n = n.check(z.maximum(f.max));\n return z.optional(n);\n }\n case \"slider\":\n return z._default(z.number().check(z.minimum(f.min)).check(z.maximum(f.max)), f.min);\n case \"switch\":\n return z._default(z.boolean(), false);\n case \"select\": {\n const values = f.options.map((o) => o.value);\n return values.length > 0\n ? z._default(z.enum([values[0], ...values.slice(1)] as [string, ...string[]]), values[0])\n : z._default(z.string(), \"\");\n }\n case \"date\":\n // ISO-datum (yyyy-mm-dd) of leeg.\n return z._default(z.string().check(z.regex(/^(\\d{4}-\\d{2}-\\d{2})?$/, \"datum als jjjj-mm-dd\")), \"\");\n case \"icon\":\n return z._default(z.string().check(z.maxLength(16)), \"\");\n case \"image\":\n case \"url\":\n return z._default(z.string().check(z.maxLength(2000)), \"\");\n case \"link\":\n return z._default(linkValue, { label: \"\", href: \"\" });\n case \"group\":\n return z._default(fieldsToZod(f.fields), {});\n case \"repeater\":\n return z._default(z.array(fieldsToZod(f.fields)).check(z.maxLength(f.max ?? 100)), []);\n case \"pageRef\":\n // Pad van een pagina binnen de site (\"/\", \"/contact\", …).\n return z._default(z.string().check(z.maxLength(500)), \"\");\n case \"info\":\n return null;\n case \"json\":\n return z.optional(z.unknown());\n }\n}\n\n/** Default-waarden voor een Field-IR (bv. een nieuw repeater-item). */\nexport function fieldsDefaults(fields: Field[]): Record<string, unknown> {\n return fieldsToZod(fields).parse({});\n}\n\n/**\n * Hints per veldsleutel (dotted path voor geneste velden, bv. \"items.date\") — verfijnt de uit een\n * Zod-schema afgeleide Field-IR. Gebruikt door `defineBlock({ fields })` + `introspectToFields`.\n */\nexport type FieldHints = Record<string, Partial<Field> & { type?: Field[\"type\"] }>;\n\n/** Evalueert `showIf` tegen de huidige waarden (zelfde niveau). Zonder showIf → altijd tonen. */\nexport function isFieldVisible(f: Field, values: Record<string, unknown>): boolean {\n if (!f.showIf) return true;\n const v = values[f.showIf.field];\n if (f.showIf.equals !== undefined) return v === f.showIf.equals;\n return Boolean(v);\n}\n"],"mappings":"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","names":[]}
|
package/dist/schema/forms.d.ts
CHANGED
|
@@ -1,118 +1,69 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare const FieldTypeSchema: z.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
13
|
-
}, "strip", z.ZodTypeAny, {
|
|
14
|
-
type: "number" | "date" | "text" | "email" | "textarea" | "select" | "checkbox" | "radio" | "tel";
|
|
15
|
-
label: string;
|
|
16
|
-
name: string;
|
|
17
|
-
required: boolean;
|
|
18
|
-
options?: string[] | undefined;
|
|
19
|
-
placeholder?: string | undefined;
|
|
20
|
-
}, {
|
|
21
|
-
type: "number" | "date" | "text" | "email" | "textarea" | "select" | "checkbox" | "radio" | "tel";
|
|
22
|
-
label: string;
|
|
23
|
-
name: string;
|
|
24
|
-
options?: string[] | undefined;
|
|
25
|
-
placeholder?: string | undefined;
|
|
26
|
-
required?: boolean | undefined;
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
|
+
export declare const FieldTypeSchema: z.ZodMiniEnum<{
|
|
3
|
+
checkbox: "checkbox";
|
|
4
|
+
date: "date";
|
|
5
|
+
email: "email";
|
|
6
|
+
number: "number";
|
|
7
|
+
radio: "radio";
|
|
8
|
+
select: "select";
|
|
9
|
+
tel: "tel";
|
|
10
|
+
text: "text";
|
|
11
|
+
textarea: "textarea";
|
|
27
12
|
}>;
|
|
13
|
+
export type FieldType = z.infer<typeof FieldTypeSchema>;
|
|
14
|
+
export declare const FormFieldSchema: z.ZodMiniObject<{
|
|
15
|
+
name: z.ZodMiniString<string>;
|
|
16
|
+
label: z.ZodMiniString<string>;
|
|
17
|
+
type: z.ZodMiniEnum<{
|
|
18
|
+
checkbox: "checkbox";
|
|
19
|
+
date: "date";
|
|
20
|
+
email: "email";
|
|
21
|
+
number: "number";
|
|
22
|
+
radio: "radio";
|
|
23
|
+
select: "select";
|
|
24
|
+
tel: "tel";
|
|
25
|
+
text: "text";
|
|
26
|
+
textarea: "textarea";
|
|
27
|
+
}>;
|
|
28
|
+
required: z.ZodMiniDefault<z.ZodMiniBoolean<boolean>>;
|
|
29
|
+
placeholder: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
30
|
+
options: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>;
|
|
31
|
+
}, z.core.$strip>;
|
|
28
32
|
export type FormField = z.infer<typeof FormFieldSchema>;
|
|
29
33
|
/** Een formulierdefinitie: `sites/{siteId}/forms/{formId}`. */
|
|
30
|
-
export declare const FormSchema: z.
|
|
31
|
-
name: z.
|
|
32
|
-
fields: z.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
placeholder
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
submitLabel: z.ZodDefault<z.ZodString>;
|
|
57
|
-
successMessage: z.ZodDefault<z.ZodString>;
|
|
58
|
-
/** Stuur na een geslaagde inzending door naar deze pagina (bv. een bedankt-pagina). */
|
|
59
|
-
successRedirect: z.ZodOptional<z.ZodString>;
|
|
60
|
-
/** Stuur de inzender een bevestigingsmail/kopie (naar het eerste e-mailveld van het formulier). */
|
|
61
|
-
confirmSubmitter: z.ZodOptional<z.ZodBoolean>;
|
|
62
|
-
/**
|
|
63
|
-
* Kopie van elke inzending naar dit e-mailadres. Leeg = de site-brede notificatie-instelling
|
|
64
|
-
* (Instellingen → E-mail → notificatie-adres, anders het contact-e-mailadres van de site).
|
|
65
|
-
*/
|
|
66
|
-
notifyTo: z.ZodOptional<z.ZodString>;
|
|
67
|
-
}, "strip", z.ZodTypeAny, {
|
|
68
|
-
name: string;
|
|
69
|
-
fields: {
|
|
70
|
-
type: "number" | "date" | "text" | "email" | "textarea" | "select" | "checkbox" | "radio" | "tel";
|
|
71
|
-
label: string;
|
|
72
|
-
name: string;
|
|
73
|
-
required: boolean;
|
|
74
|
-
options?: string[] | undefined;
|
|
75
|
-
placeholder?: string | undefined;
|
|
76
|
-
}[];
|
|
77
|
-
submitLabel: string;
|
|
78
|
-
successMessage: string;
|
|
79
|
-
notifyTo?: string | undefined;
|
|
80
|
-
successRedirect?: string | undefined;
|
|
81
|
-
confirmSubmitter?: boolean | undefined;
|
|
82
|
-
}, {
|
|
83
|
-
name: string;
|
|
84
|
-
fields: {
|
|
85
|
-
type: "number" | "date" | "text" | "email" | "textarea" | "select" | "checkbox" | "radio" | "tel";
|
|
86
|
-
label: string;
|
|
87
|
-
name: string;
|
|
88
|
-
options?: string[] | undefined;
|
|
89
|
-
placeholder?: string | undefined;
|
|
90
|
-
required?: boolean | undefined;
|
|
91
|
-
}[];
|
|
92
|
-
notifyTo?: string | undefined;
|
|
93
|
-
submitLabel?: string | undefined;
|
|
94
|
-
successMessage?: string | undefined;
|
|
95
|
-
successRedirect?: string | undefined;
|
|
96
|
-
confirmSubmitter?: boolean | undefined;
|
|
97
|
-
}>;
|
|
34
|
+
export declare const FormSchema: z.ZodMiniObject<{
|
|
35
|
+
name: z.ZodMiniString<string>;
|
|
36
|
+
fields: z.ZodMiniArray<z.ZodMiniObject<{
|
|
37
|
+
name: z.ZodMiniString<string>;
|
|
38
|
+
label: z.ZodMiniString<string>;
|
|
39
|
+
type: z.ZodMiniEnum<{
|
|
40
|
+
checkbox: "checkbox";
|
|
41
|
+
date: "date";
|
|
42
|
+
email: "email";
|
|
43
|
+
number: "number";
|
|
44
|
+
radio: "radio";
|
|
45
|
+
select: "select";
|
|
46
|
+
tel: "tel";
|
|
47
|
+
text: "text";
|
|
48
|
+
textarea: "textarea";
|
|
49
|
+
}>;
|
|
50
|
+
required: z.ZodMiniDefault<z.ZodMiniBoolean<boolean>>;
|
|
51
|
+
placeholder: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
52
|
+
options: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
54
|
+
submitLabel: z.ZodMiniDefault<z.ZodMiniString<string>>;
|
|
55
|
+
successMessage: z.ZodMiniDefault<z.ZodMiniString<string>>;
|
|
56
|
+
successRedirect: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
57
|
+
confirmSubmitter: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
58
|
+
notifyTo: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
59
|
+
}, z.core.$strip>;
|
|
98
60
|
export type FormDefinition = z.infer<typeof FormSchema>;
|
|
99
61
|
/** Payload van een inzending (callable input). Per-veld-validatie gebeurt server-side
|
|
100
62
|
* tegen de opgeslagen formulierdefinitie. */
|
|
101
|
-
export declare const SubmissionInputSchema: z.
|
|
102
|
-
siteId: z.
|
|
103
|
-
formId: z.
|
|
104
|
-
values: z.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}, "strip", z.ZodTypeAny, {
|
|
108
|
-
values: Record<string, string | boolean>;
|
|
109
|
-
formId: string;
|
|
110
|
-
siteId: string;
|
|
111
|
-
_hp?: string | undefined;
|
|
112
|
-
}, {
|
|
113
|
-
values: Record<string, string | boolean>;
|
|
114
|
-
formId: string;
|
|
115
|
-
siteId: string;
|
|
116
|
-
_hp?: string | undefined;
|
|
117
|
-
}>;
|
|
63
|
+
export declare const SubmissionInputSchema: z.ZodMiniObject<{
|
|
64
|
+
siteId: z.ZodMiniString<string>;
|
|
65
|
+
formId: z.ZodMiniString<string>;
|
|
66
|
+
values: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniBoolean<boolean>]>>;
|
|
67
|
+
_hp: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
68
|
+
}, z.core.$strip>;
|
|
118
69
|
export type SubmissionInput = z.infer<typeof SubmissionInputSchema>;
|
package/dist/schema/forms.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
2
|
const FieldTypeSchema = z.enum([
|
|
3
3
|
"text",
|
|
4
4
|
"email",
|
|
@@ -13,35 +13,35 @@ const FieldTypeSchema = z.enum([
|
|
|
13
13
|
]);
|
|
14
14
|
const FormFieldSchema = z.object({
|
|
15
15
|
/** Stabiele sleutel; wordt de key in de inzending. */
|
|
16
|
-
name: z.string().
|
|
17
|
-
label: z.string().
|
|
16
|
+
name: z.string().check(z.minLength(1)).check(z.maxLength(60)).check(z.regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, "veldnaam moet met een letter beginnen en alleen letters/cijfers/_ bevatten")),
|
|
17
|
+
label: z.string().check(z.minLength(1)).check(z.maxLength(160)),
|
|
18
18
|
type: FieldTypeSchema,
|
|
19
|
-
required: z.boolean()
|
|
20
|
-
placeholder: z.string().
|
|
19
|
+
required: z._default(z.boolean(), false),
|
|
20
|
+
placeholder: z.optional(z.string().check(z.maxLength(200))),
|
|
21
21
|
/** Opties voor type "select" en "radio". */
|
|
22
|
-
options: z.array(z.string().
|
|
22
|
+
options: z.optional(z.array(z.string().check(z.maxLength(200))).check(z.maxLength(50)))
|
|
23
23
|
});
|
|
24
24
|
const FormSchema = z.object({
|
|
25
|
-
name: z.string().
|
|
26
|
-
fields: z.array(FormFieldSchema).
|
|
27
|
-
submitLabel: z.string().
|
|
28
|
-
successMessage: z.string().
|
|
25
|
+
name: z.string().check(z.minLength(1)).check(z.maxLength(160)),
|
|
26
|
+
fields: z.array(FormFieldSchema).check(z.minLength(1)).check(z.maxLength(40)),
|
|
27
|
+
submitLabel: z._default(z.string().check(z.maxLength(80)), "Versturen"),
|
|
28
|
+
successMessage: z._default(z.string().check(z.maxLength(500)), "Bedankt! We nemen snel contact op."),
|
|
29
29
|
/** Stuur na een geslaagde inzending door naar deze pagina (bv. een bedankt-pagina). */
|
|
30
|
-
successRedirect: z.string().
|
|
30
|
+
successRedirect: z.optional(z.string().check(z.maxLength(400))),
|
|
31
31
|
/** Stuur de inzender een bevestigingsmail/kopie (naar het eerste e-mailveld van het formulier). */
|
|
32
|
-
confirmSubmitter: z.
|
|
32
|
+
confirmSubmitter: z.optional(z.boolean()),
|
|
33
33
|
/**
|
|
34
34
|
* Kopie van elke inzending naar dit e-mailadres. Leeg = de site-brede notificatie-instelling
|
|
35
35
|
* (Instellingen → E-mail → notificatie-adres, anders het contact-e-mailadres van de site).
|
|
36
36
|
*/
|
|
37
|
-
notifyTo: z.string().
|
|
37
|
+
notifyTo: z.optional(z.string().check(z.maxLength(200)))
|
|
38
38
|
});
|
|
39
39
|
const SubmissionInputSchema = z.object({
|
|
40
|
-
siteId: z.string().
|
|
41
|
-
formId: z.string().
|
|
42
|
-
values: z.record(z.string(), z.union([z.string().
|
|
40
|
+
siteId: z.string().check(z.minLength(1)).check(z.maxLength(80)),
|
|
41
|
+
formId: z.string().check(z.minLength(1)).check(z.maxLength(80)),
|
|
42
|
+
values: z.record(z.string(), z.union([z.string().check(z.maxLength(5e3)), z.boolean()])),
|
|
43
43
|
/** Honeypot — moet leeg zijn (bot-detectie). */
|
|
44
|
-
_hp: z.string().
|
|
44
|
+
_hp: z.optional(z.string().check(z.maxLength(0)))
|
|
45
45
|
});
|
|
46
46
|
export {
|
|
47
47
|
FieldTypeSchema,
|
package/dist/schema/forms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/forms.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/schema/forms.ts"],"sourcesContent":["import * as z from \"zod/mini\";\n\nexport const FieldTypeSchema = z.enum([\n \"text\",\n \"email\",\n \"tel\",\n \"textarea\",\n \"select\",\n \"checkbox\",\n // 4.16: update-veilig toegevoegd (oude definities blijven geldig).\n \"radio\",\n \"date\",\n \"number\",\n]);\nexport type FieldType = z.infer<typeof FieldTypeSchema>;\n\nexport const FormFieldSchema = z.object({\n /** Stabiele sleutel; wordt de key in de inzending. */\n name: z.string().check(z.minLength(1)).check(z.maxLength(60)).check(z.regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, \"veldnaam moet met een letter beginnen en alleen letters/cijfers/_ bevatten\")),\n label: z.string().check(z.minLength(1)).check(z.maxLength(160)),\n type: FieldTypeSchema,\n required: z._default(z.boolean(), false),\n placeholder: z.optional(z.string().check(z.maxLength(200))),\n /** Opties voor type \"select\" en \"radio\". */\n options: z.optional(z.array(z.string().check(z.maxLength(200))).check(z.maxLength(50))),\n});\nexport type FormField = z.infer<typeof FormFieldSchema>;\n\n/** Een formulierdefinitie: `sites/{siteId}/forms/{formId}`. */\nexport const FormSchema = z.object({\n name: z.string().check(z.minLength(1)).check(z.maxLength(160)),\n fields: z.array(FormFieldSchema).check(z.minLength(1)).check(z.maxLength(40)),\n submitLabel: z._default(z.string().check(z.maxLength(80)), \"Versturen\"),\n successMessage: z._default(z.string().check(z.maxLength(500)), \"Bedankt! We nemen snel contact op.\"),\n /** Stuur na een geslaagde inzending door naar deze pagina (bv. een bedankt-pagina). */\n successRedirect: z.optional(z.string().check(z.maxLength(400))),\n /** Stuur de inzender een bevestigingsmail/kopie (naar het eerste e-mailveld van het formulier). */\n confirmSubmitter: z.optional(z.boolean()),\n /**\n * Kopie van elke inzending naar dit e-mailadres. Leeg = de site-brede notificatie-instelling\n * (Instellingen → E-mail → notificatie-adres, anders het contact-e-mailadres van de site).\n */\n notifyTo: z.optional(z.string().check(z.maxLength(200))),\n});\nexport type FormDefinition = z.infer<typeof FormSchema>;\n\n/** Payload van een inzending (callable input). Per-veld-validatie gebeurt server-side\n * tegen de opgeslagen formulierdefinitie. */\nexport const SubmissionInputSchema = z.object({\n siteId: z.string().check(z.minLength(1)).check(z.maxLength(80)),\n formId: z.string().check(z.minLength(1)).check(z.maxLength(80)),\n values: z.record(z.string(), z.union([z.string().check(z.maxLength(5000)), z.boolean()])),\n /** Honeypot — moet leeg zijn (bot-detectie). */\n _hp: z.optional(z.string().check(z.maxLength(0))),\n});\nexport type SubmissionInput = z.infer<typeof SubmissionInputSchema>;\n"],"mappings":"AAAA,YAAY,OAAO;AAEZ,MAAM,kBAAkB,EAAE,KAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,MAAM,kBAAkB,EAAE,OAAO;AAAA;AAAA,EAEtC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,2BAA2B,4EAA4E,CAAC;AAAA,EACpL,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;AAAA,EACvC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC;AAAA;AAAA,EAE1D,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AACxF,CAAC;AAIM,MAAM,aAAa,EAAE,OAAO;AAAA,EACjC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC;AAAA,EAC7D,QAAQ,EAAE,MAAM,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,EAC5E,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW;AAAA,EACtE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,GAAG,oCAAoC;AAAA;AAAA,EAEnG,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC;AAAA;AAAA,EAE9D,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC;AACzD,CAAC;AAKM,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,EAC9D,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA,EAC9D,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA;AAAA,EAExF,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAClD,CAAC;","names":[]}
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Geen React, geen Firebase: importeerbaar in server-componenten, de sitemap-route én
|
|
4
4
|
* de Cloud Functions, zodat content-validatie overal dezelfde bron gebruikt.
|
|
5
5
|
*/
|
|
6
|
-
export * from "./seo";
|
|
7
|
-
export * from "./settings";
|
|
8
|
-
export * from "./blocks";
|
|
9
|
-
export * from "./pages";
|
|
10
|
-
export * from "./forms";
|
|
11
|
-
export * from "./mail";
|
|
12
|
-
export { defineSiteConfig, SiteConfigSchema, validateSiteConfig, type SiteConfig, type SiteMode, } from "./siteConfig";
|
|
6
|
+
export * from "./seo.js";
|
|
7
|
+
export * from "./settings.js";
|
|
8
|
+
export * from "./blocks.js";
|
|
9
|
+
export * from "./pages.js";
|
|
10
|
+
export * from "./forms.js";
|
|
11
|
+
export * from "./mail.js";
|
|
12
|
+
export { defineSiteConfig, SiteConfigSchema, validateSiteConfig, type SiteConfig, type SiteMode, } from "./siteConfig.js";
|
package/dist/schema/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export * from "./seo";
|
|
2
|
-
export * from "./settings";
|
|
3
|
-
export * from "./blocks";
|
|
4
|
-
export * from "./pages";
|
|
5
|
-
export * from "./forms";
|
|
6
|
-
export * from "./mail";
|
|
1
|
+
export * from "./seo.js";
|
|
2
|
+
export * from "./settings.js";
|
|
3
|
+
export * from "./blocks.js";
|
|
4
|
+
export * from "./pages.js";
|
|
5
|
+
export * from "./forms.js";
|
|
6
|
+
export * from "./mail.js";
|
|
7
7
|
import {
|
|
8
8
|
defineSiteConfig,
|
|
9
9
|
SiteConfigSchema,
|
|
10
10
|
validateSiteConfig
|
|
11
|
-
} from "./siteConfig";
|
|
11
|
+
} from "./siteConfig.js";
|
|
12
12
|
export {
|
|
13
13
|
SiteConfigSchema,
|
|
14
14
|
defineSiteConfig,
|