@xiwebdesign/xicms-core 7.12.1 → 7.14.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/admin/AdminApp.js +2 -0
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/lib/mediaUsage.d.ts +17 -0
- package/dist/admin/lib/mediaUsage.js +32 -1
- package/dist/admin/lib/mediaUsage.js.map +1 -1
- package/dist/admin/lib/zodFields.d.ts +2 -2
- package/dist/admin/lib/zodFields.js +2 -0
- package/dist/admin/lib/zodFields.js.map +1 -1
- package/dist/admin/media/MediaManager.js +74 -17
- package/dist/admin/media/MediaManager.js.map +1 -1
- package/dist/admin/ui/toast.d.ts +4 -0
- package/dist/admin/ui/toast.js +9 -3
- package/dist/admin/ui/toast.js.map +1 -1
- package/dist/admin/visual/VisualEditor.js +69 -5
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/blocks/BlockErrorBoundary.d.ts +1 -0
- package/dist/blocks/BlockErrorBoundary.js +4 -0
- package/dist/blocks/BlockErrorBoundary.js.map +1 -1
- package/dist/blocks/BlockRenderer.js +1 -1
- package/dist/blocks/BlockRenderer.js.map +1 -1
- package/dist/blocks/builtinSchemas.d.ts +23 -0
- package/dist/blocks/builtinSchemas.js +138 -0
- package/dist/blocks/builtinSchemas.js.map +1 -0
- package/dist/blocks/builtins/Accordion.js +0 -2
- package/dist/blocks/builtins/Accordion.js.map +1 -1
- package/dist/blocks/builtins/Agenda.js +0 -2
- package/dist/blocks/builtins/Agenda.js.map +1 -1
- package/dist/blocks/builtins/Banner.js +0 -2
- package/dist/blocks/builtins/Banner.js.map +1 -1
- package/dist/blocks/builtins/BeforeAfter.js +0 -2
- package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
- package/dist/blocks/builtins/Booking.js +0 -2
- package/dist/blocks/builtins/Booking.js.map +1 -1
- package/dist/blocks/builtins/Breadcrumbs.js +0 -2
- package/dist/blocks/builtins/Breadcrumbs.js.map +1 -1
- package/dist/blocks/builtins/Cards.js +0 -2
- package/dist/blocks/builtins/Cards.js.map +1 -1
- package/dist/blocks/builtins/Columns.js +0 -2
- package/dist/blocks/builtins/Columns.js.map +1 -1
- package/dist/blocks/builtins/Contact.d.ts +1 -1
- package/dist/blocks/builtins/Contact.js +0 -3
- package/dist/blocks/builtins/Contact.js.map +1 -1
- package/dist/blocks/builtins/Countdown.js +0 -2
- package/dist/blocks/builtins/Countdown.js.map +1 -1
- package/dist/blocks/builtins/Cta.js +0 -2
- package/dist/blocks/builtins/Cta.js.map +1 -1
- package/dist/blocks/builtins/Downloads.js +0 -2
- package/dist/blocks/builtins/Downloads.js.map +1 -1
- package/dist/blocks/builtins/Elements.js +0 -4
- package/dist/blocks/builtins/Elements.js.map +1 -1
- package/dist/blocks/builtins/Embed.js +0 -2
- package/dist/blocks/builtins/Embed.js.map +1 -1
- package/dist/blocks/builtins/Faq.js +0 -2
- package/dist/blocks/builtins/Faq.js.map +1 -1
- package/dist/blocks/builtins/FormBlock.js +0 -2
- package/dist/blocks/builtins/FormBlock.js.map +1 -1
- package/dist/blocks/builtins/Gallery.d.ts +1 -1
- package/dist/blocks/builtins/Gallery.js +0 -2
- package/dist/blocks/builtins/Gallery.js.map +1 -1
- package/dist/blocks/builtins/Hero.js +0 -2
- package/dist/blocks/builtins/Hero.js.map +1 -1
- package/dist/blocks/builtins/ImageBlock.js +0 -2
- package/dist/blocks/builtins/ImageBlock.js.map +1 -1
- package/dist/blocks/builtins/Jobs.d.ts +1 -1
- package/dist/blocks/builtins/Jobs.js +0 -2
- package/dist/blocks/builtins/Jobs.js.map +1 -1
- package/dist/blocks/builtins/Layout.js +0 -3
- package/dist/blocks/builtins/Layout.js.map +1 -1
- package/dist/blocks/builtins/MapBlock.js +0 -2
- package/dist/blocks/builtins/MapBlock.js.map +1 -1
- package/dist/blocks/builtins/NewsListBlock.js +0 -2
- package/dist/blocks/builtins/NewsListBlock.js.map +1 -1
- package/dist/blocks/builtins/Newsletter.js +0 -2
- package/dist/blocks/builtins/Newsletter.js.map +1 -1
- package/dist/blocks/builtins/OpeningHours.js +0 -2
- package/dist/blocks/builtins/OpeningHours.js.map +1 -1
- package/dist/blocks/builtins/PdfBlock.js +0 -2
- package/dist/blocks/builtins/PdfBlock.js.map +1 -1
- package/dist/blocks/builtins/Portfolio.js +0 -2
- package/dist/blocks/builtins/Portfolio.js.map +1 -1
- package/dist/blocks/builtins/Pricing.d.ts +1 -1
- package/dist/blocks/builtins/Pricing.js +0 -2
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/RichTextBlock.js +0 -2
- package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
- package/dist/blocks/builtins/Search.js +0 -2
- package/dist/blocks/builtins/Search.js.map +1 -1
- package/dist/blocks/builtins/Sections.js +0 -10
- package/dist/blocks/builtins/Sections.js.map +1 -1
- package/dist/blocks/builtins/Slider.js +0 -2
- package/dist/blocks/builtins/Slider.js.map +1 -1
- package/dist/blocks/builtins/Spacer.js +0 -2
- package/dist/blocks/builtins/Spacer.js.map +1 -1
- package/dist/blocks/builtins/SymbolRef.js +3 -5
- package/dist/blocks/builtins/SymbolRef.js.map +1 -1
- package/dist/blocks/builtins/Team.js +0 -2
- package/dist/blocks/builtins/Team.js.map +1 -1
- package/dist/blocks/builtins/Testimonials.d.ts +1 -1
- package/dist/blocks/builtins/Testimonials.js +0 -2
- package/dist/blocks/builtins/Testimonials.js.map +1 -1
- package/dist/blocks/builtins/Video.d.ts +1 -1
- package/dist/blocks/builtins/Video.js +0 -2
- package/dist/blocks/builtins/Video.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChat.js +0 -2
- package/dist/blocks/builtins/WhatsappChat.js.map +1 -1
- package/dist/blocks/builtins/Widgets.js +0 -26
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/customTemplate/definition.js +1 -1
- package/dist/blocks/customTemplate/definition.js.map +1 -1
- package/dist/blocks/registry.d.ts +24 -13
- package/dist/blocks/registry.js +15 -4
- package/dist/blocks/registry.js.map +1 -1
- package/dist/blocks/reportRenderFout.d.ts +13 -0
- package/dist/blocks/reportRenderFout.js +31 -0
- package/dist/blocks/reportRenderFout.js.map +1 -0
- package/dist/media/ImageContext.js +24 -1
- package/dist/media/ImageContext.js.map +1 -1
- package/dist/modules/shop/blocks/Cart.js +1 -2
- package/dist/modules/shop/blocks/Cart.js.map +1 -1
- package/dist/modules/shop/blocks/Checkout.js +1 -2
- package/dist/modules/shop/blocks/Checkout.js.map +1 -1
- package/dist/modules/shop/blocks/Donation.js +1 -2
- package/dist/modules/shop/blocks/Donation.js.map +1 -1
- package/dist/modules/shop/blocks/OrderStatus.js +0 -2
- package/dist/modules/shop/blocks/OrderStatus.js.map +1 -1
- package/dist/modules/shop/blocks/ProductDetail.js +1 -7
- package/dist/modules/shop/blocks/ProductDetail.js.map +1 -1
- package/dist/modules/shop/blocks/ProductGrid.js +1 -2
- package/dist/modules/shop/blocks/ProductGrid.js.map +1 -1
- package/dist/modules/shop/blocks/ShopCategories.js +0 -2
- package/dist/modules/shop/blocks/ShopCategories.js.map +1 -1
- package/dist/modules/shop/module.js +1 -0
- package/dist/modules/shop/module.js.map +1 -1
- package/dist/modules/shop/schemas.d.ts +1 -0
- package/dist/modules/shop/schemas.js +32 -0
- package/dist/modules/shop/schemas.js.map +1 -0
- package/dist/modules/types.d.ts +6 -0
- package/dist/schema/blockBase.d.ts +99 -0
- package/dist/schema/blockBase.js +22 -0
- package/dist/schema/blockBase.js.map +1 -0
- package/dist/schema/blocks.d.ts +1 -91
- package/dist/schema/blocks.js +64 -77
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/pages.js +1 -1
- package/dist/schema/pages.js.map +1 -1
- package/dist/schema/shop.d.ts +1 -11
- package/dist/schema/shop.js +2 -21
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/shopGeld.d.ts +18 -0
- package/dist/schema/shopGeld.js +27 -0
- package/dist/schema/shopGeld.js.map +1 -0
- package/dist/schema/symbols.js +1 -1
- package/dist/schema/symbols.js.map +1 -1
- package/dist/server/blockData.js +14 -1
- package/dist/server/blockData.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/pages.d.ts +16 -0
- package/dist/server/pages.js +9 -0
- package/dist/server/pages.js.map +1 -1
- package/dist/styles.css +62 -0
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/shop/blocks/ShopCategories.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { z } from \"zod\";\nimport { ShopCategoriesBlockSchema } from \"../../../schema/shop\";\nimport { defineBlock, type BlockRenderProps } from \"../../../blocks/registry\";\nimport { Card, Heading, Text } from \"../../../blocks/ui\";\nimport { useBlockData } from \"../../../blocks/context\";\nimport { useShopStrings } from \"../strings\";\nimport { fetchShopCategories, readQueryParam, useShopSettings, type StoredShopCategory } from \"../lib\";\nimport type { ShopPageData } from \"../types\";\n\ntype Blk = z.infer<typeof ShopCategoriesBlockSchema>;\n\n/** Categorie-tegels — linkt naar de winkelpagina met `?cat=<slug>` (productGrid filtert daarop). */\nfunction ShopCategoriesRender({ block, siteId }: BlockRenderProps<Blk>) {\n const settings = useShopSettings();\n const t = useShopStrings();\n const serverData = useBlockData<ShopPageData>(\"shop\");\n const [cats, setCats] = useState<StoredShopCategory[] | null>(serverData?.categories ?? null);\n // Actieve categorie uit de URL (client-side; op de server tonen we altijd de volle tegels).\n const [activeSlug, setActiveSlug] = useState<string | null>(null);\n\n useEffect(() => {\n setActiveSlug(readQueryParam(\"cat\"));\n if (serverData?.categories) return; // SSR-data aanwezig — geen client-fetch\n void fetchShopCategories(siteId).then(setCats).catch((e) => {\n console.warn(\"[xicms] shop-categorieën laden mislukt:\", e);\n setCats([]);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [siteId]);\n\n if (cats === null) return null;\n\n // Ingeklapt: zodra er een categorie gekozen is, tonen we geen schermvullende tegels meer maar\n // een compacte, horizontaal scrollbare chip-rij (actieve gemarkeerd). Zo staan de producten\n // meteen in beeld i.p.v. onder de tegels — vooral op mobiel. \"Alles\" schakelt het filter uit.\n const active = activeSlug ? cats.find((c) => c.slug === activeSlug) : undefined;\n if (active) {\n return (\n <nav className=\"xicms-shop-cat-chips\" aria-label=\"Categorieën\">\n <a className=\"xicms-shop-cat-chip\" href={settings.shopPath}>{t(\"allCategories\")}</a>\n {cats.map((c) => (\n <a\n key={c.id}\n className={`xicms-shop-cat-chip${c.slug === activeSlug ? \" xicms-shop-cat-chip--active\" : \"\"}`}\n href={`${settings.shopPath}?cat=${encodeURIComponent(c.slug)}`}\n aria-current={c.slug === activeSlug ? \"page\" : undefined}\n >\n {c.name}\n </a>\n ))}\n </nav>\n );\n }\n\n if (cats.length === 0) {\n return (\n <Card padding={4} variant=\"muted\">\n <Text>{t(\"noCategories\")}</Text>\n </Card>\n );\n }\n\n return (\n <div className=\"xicms-shop-categories\">\n {block.heading && (\n <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>\n )}\n <div\n className=\"xicms-shop-categories__grid\"\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(min(260px, calc(100%/${block.columns} - 1rem)), 1fr))`,\n gap: \"1rem\",\n marginTop: block.heading ? \"1rem\" : 0,\n }}\n >\n {cats.map((c) => (\n <a\n key={c.id}\n className=\"xicms-shop-categories__item\"\n href={`${settings.shopPath}?cat=${encodeURIComponent(c.slug)}`}\n style={{ textDecoration: \"none\", color: \"inherit\" }}\n >\n <Card padding={0}>\n {c.imageUrl && (\n <img\n src={c.imageUrl}\n alt={c.name}\n loading=\"lazy\"\n style={{ width: \"100%\", aspectRatio: \"4/3\", objectFit: \"cover\", display: \"block\", borderRadius: \"inherit\" }}\n />\n )}\n <div style={{ padding: \"0.9rem 1rem\" }}>\n <Text weight=\"bold\" display=\"block\">{c.name}</Text>\n {c.description && (\n <Text size=\"sm\" display=\"block\" style={{ opacity: 0.75, marginTop: 4 }}>{c.description}</Text>\n )}\n </div>\n </Card>\n </a>\n ))}\n </div>\n </div>\n );\n}\n\nexport const shopCategoriesBlock = defineBlock({\n type: \"shopCategories\",\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/shop/blocks/ShopCategories.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { z } from \"zod\";\nimport type { ShopCategoriesBlockSchema } from \"../../../schema/shop\";\nimport { defineBlock, type BlockRenderProps } from \"../../../blocks/registry\";\nimport { Card, Heading, Text } from \"../../../blocks/ui\";\nimport { useBlockData } from \"../../../blocks/context\";\nimport { useShopStrings } from \"../strings\";\nimport { fetchShopCategories, readQueryParam, useShopSettings, type StoredShopCategory } from \"../lib\";\nimport type { ShopPageData } from \"../types\";\n\ntype Blk = z.infer<typeof ShopCategoriesBlockSchema>;\n\n/** Categorie-tegels — linkt naar de winkelpagina met `?cat=<slug>` (productGrid filtert daarop). */\nfunction ShopCategoriesRender({ block, siteId }: BlockRenderProps<Blk>) {\n const settings = useShopSettings();\n const t = useShopStrings();\n const serverData = useBlockData<ShopPageData>(\"shop\");\n const [cats, setCats] = useState<StoredShopCategory[] | null>(serverData?.categories ?? null);\n // Actieve categorie uit de URL (client-side; op de server tonen we altijd de volle tegels).\n const [activeSlug, setActiveSlug] = useState<string | null>(null);\n\n useEffect(() => {\n setActiveSlug(readQueryParam(\"cat\"));\n if (serverData?.categories) return; // SSR-data aanwezig — geen client-fetch\n void fetchShopCategories(siteId).then(setCats).catch((e) => {\n console.warn(\"[xicms] shop-categorieën laden mislukt:\", e);\n setCats([]);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [siteId]);\n\n if (cats === null) return null;\n\n // Ingeklapt: zodra er een categorie gekozen is, tonen we geen schermvullende tegels meer maar\n // een compacte, horizontaal scrollbare chip-rij (actieve gemarkeerd). Zo staan de producten\n // meteen in beeld i.p.v. onder de tegels — vooral op mobiel. \"Alles\" schakelt het filter uit.\n const active = activeSlug ? cats.find((c) => c.slug === activeSlug) : undefined;\n if (active) {\n return (\n <nav className=\"xicms-shop-cat-chips\" aria-label=\"Categorieën\">\n <a className=\"xicms-shop-cat-chip\" href={settings.shopPath}>{t(\"allCategories\")}</a>\n {cats.map((c) => (\n <a\n key={c.id}\n className={`xicms-shop-cat-chip${c.slug === activeSlug ? \" xicms-shop-cat-chip--active\" : \"\"}`}\n href={`${settings.shopPath}?cat=${encodeURIComponent(c.slug)}`}\n aria-current={c.slug === activeSlug ? \"page\" : undefined}\n >\n {c.name}\n </a>\n ))}\n </nav>\n );\n }\n\n if (cats.length === 0) {\n return (\n <Card padding={4} variant=\"muted\">\n <Text>{t(\"noCategories\")}</Text>\n </Card>\n );\n }\n\n return (\n <div className=\"xicms-shop-categories\">\n {block.heading && (\n <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>\n )}\n <div\n className=\"xicms-shop-categories__grid\"\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(min(260px, calc(100%/${block.columns} - 1rem)), 1fr))`,\n gap: \"1rem\",\n marginTop: block.heading ? \"1rem\" : 0,\n }}\n >\n {cats.map((c) => (\n <a\n key={c.id}\n className=\"xicms-shop-categories__item\"\n href={`${settings.shopPath}?cat=${encodeURIComponent(c.slug)}`}\n style={{ textDecoration: \"none\", color: \"inherit\" }}\n >\n <Card padding={0}>\n {c.imageUrl && (\n <img\n src={c.imageUrl}\n alt={c.name}\n loading=\"lazy\"\n style={{ width: \"100%\", aspectRatio: \"4/3\", objectFit: \"cover\", display: \"block\", borderRadius: \"inherit\" }}\n />\n )}\n <div style={{ padding: \"0.9rem 1rem\" }}>\n <Text weight=\"bold\" display=\"block\">{c.name}</Text>\n {c.description && (\n <Text size=\"sm\" display=\"block\" style={{ opacity: 0.75, marginTop: 4 }}>{c.description}</Text>\n )}\n </div>\n </Card>\n </a>\n ))}\n </div>\n </div>\n );\n}\n\nexport const shopCategoriesBlock = defineBlock({\n type: \"shopCategories\",\n Render: ShopCategoriesRender,\n label: \"Winkel-categorieën\",\n icon: \"🗂️\",\n defaults: () => ({ columns: 3 }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -9,6 +9,7 @@ import { donationBlock } from "./blocks/Donation.js";
|
|
|
9
9
|
import { orderStatusBlock } from "./blocks/OrderStatus.js";
|
|
10
10
|
const shopModule = defineModule({
|
|
11
11
|
id: "shop",
|
|
12
|
+
loadSchemas: () => import("./schemas.js").then((m) => m.registerShopSchemas()),
|
|
12
13
|
version: "1.0.0",
|
|
13
14
|
label: "Webwinkel",
|
|
14
15
|
description: "Webwinkel + donaties: producten met varianten, winkelwagen, afrekenen via Stripe \xF3f Mollie (eigen account van de klant) en bestelbevestiging per e-mail via Resend, Postmark of de eigen SMTP-mailbox.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/modules/shop/module.ts"],"sourcesContent":["/**\n * Shop-module (5.5) — webwinkel + donaties op het eigen Stripe-account van de klant.\n *\n * - Producten/categorieën: `sites/{siteId}/products` + `shopCategories` (editor-write, rules).\n * - Checkout: `createOrder`-callable herrekent bedragen server-side en start een hosted\n * Stripe Checkout-sessie (iDEAL/kaart); de `shopStripeWebhook` zet de order op betaald en\n * verstuurt de bevestigingsmail (eigen SMTP van de klant, bv. Gmail — zie functions/lib/mail).\n * - Donaties: het donatie-block gebruikt dezelfde order-flow (kind:\"donation\", geen verzending).\n * - Beheer: het \"Webwinkel\"-paneel (producten/categorieën/bestellingen/koppelingen) hangt via\n * de paneel-registry aan deze module-id.\n *\n * Server-safe: geen \"use client\" hier — de blocks zelf zijn client components.\n */\nimport { defineModule } from \"../defineModule\";\nimport { ShopSettingsSchema, defaultShopSettings } from \"./settings\";\nimport { shopCategoriesBlock } from \"./blocks/ShopCategories\";\nimport { productGridBlock } from \"./blocks/ProductGrid\";\nimport { productDetailBlock } from \"./blocks/ProductDetail\";\nimport { cartBlock } from \"./blocks/Cart\";\nimport { checkoutBlock } from \"./blocks/Checkout\";\nimport { donationBlock } from \"./blocks/Donation\";\nimport { orderStatusBlock } from \"./blocks/OrderStatus\";\n\nexport const shopModule = defineModule({\n id: \"shop\",\n version: \"1.0.0\",\n label: \"Webwinkel\",\n description:\n \"Webwinkel + donaties: producten met varianten, winkelwagen, afrekenen via Stripe óf Mollie (eigen account van de klant) en bestelbevestiging per e-mail via Resend, Postmark of de eigen SMTP-mailbox.\",\n defaultEnabled: false,\n blocks: [\n shopCategoriesBlock,\n productGridBlock,\n productDetailBlock,\n cartBlock,\n checkoutBlock,\n donationBlock,\n orderStatusBlock,\n ],\n settingsSchema: ShopSettingsSchema,\n defaultSettings: defaultShopSettings,\n requires: [\n { kind: \"function\", name: \"createOrder\" },\n { kind: \"function\", name: \"shopStripeWebhook\" },\n { kind: \"function\", name: \"saveShopSecrets\" },\n { kind: \"function\", name: \"updateOrderStatus\" },\n { kind: \"function\", name: \"validateDiscountCode\" },\n { kind: \"function\", name: \"uploadPersonalization\" },\n { kind: \"firestore\", collection: \"products\" },\n { kind: \"firestore\", collection: \"shopCategories\" },\n { kind: \"firestore\", collection: \"orders\" },\n { kind: \"firestore\", collection: \"discountCodes\" },\n { kind: \"storage\", prefix: \"sites/\" },\n ],\n});\n"],"mappings":"AAaA,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB,2BAA2B;AACxD,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AAE1B,MAAM,aAAa,aAAa;AAAA,EACrC,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,aACE;AAAA,EACF,gBAAgB;AAAA,EAChB,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,UAAU;AAAA,IACR,EAAE,MAAM,YAAY,MAAM,cAAc;AAAA,IACxC,EAAE,MAAM,YAAY,MAAM,oBAAoB;AAAA,IAC9C,EAAE,MAAM,YAAY,MAAM,kBAAkB;AAAA,IAC5C,EAAE,MAAM,YAAY,MAAM,oBAAoB;AAAA,IAC9C,EAAE,MAAM,YAAY,MAAM,uBAAuB;AAAA,IACjD,EAAE,MAAM,YAAY,MAAM,wBAAwB;AAAA,IAClD,EAAE,MAAM,aAAa,YAAY,WAAW;AAAA,IAC5C,EAAE,MAAM,aAAa,YAAY,iBAAiB;AAAA,IAClD,EAAE,MAAM,aAAa,YAAY,SAAS;AAAA,IAC1C,EAAE,MAAM,aAAa,YAAY,gBAAgB;AAAA,IACjD,EAAE,MAAM,WAAW,QAAQ,SAAS;AAAA,EACtC;AACF,CAAC;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/shop/module.ts"],"sourcesContent":["/**\n * Shop-module (5.5) — webwinkel + donaties op het eigen Stripe-account van de klant.\n *\n * - Producten/categorieën: `sites/{siteId}/products` + `shopCategories` (editor-write, rules).\n * - Checkout: `createOrder`-callable herrekent bedragen server-side en start een hosted\n * Stripe Checkout-sessie (iDEAL/kaart); de `shopStripeWebhook` zet de order op betaald en\n * verstuurt de bevestigingsmail (eigen SMTP van de klant, bv. Gmail — zie functions/lib/mail).\n * - Donaties: het donatie-block gebruikt dezelfde order-flow (kind:\"donation\", geen verzending).\n * - Beheer: het \"Webwinkel\"-paneel (producten/categorieën/bestellingen/koppelingen) hangt via\n * de paneel-registry aan deze module-id.\n *\n * Server-safe: geen \"use client\" hier — de blocks zelf zijn client components.\n */\nimport { defineModule } from \"../defineModule\";\nimport { ShopSettingsSchema, defaultShopSettings } from \"./settings\";\nimport { shopCategoriesBlock } from \"./blocks/ShopCategories\";\nimport { productGridBlock } from \"./blocks/ProductGrid\";\nimport { productDetailBlock } from \"./blocks/ProductDetail\";\nimport { cartBlock } from \"./blocks/Cart\";\nimport { checkoutBlock } from \"./blocks/Checkout\";\nimport { donationBlock } from \"./blocks/Donation\";\nimport { orderStatusBlock } from \"./blocks/OrderStatus\";\n\nexport const shopModule = defineModule({\n id: \"shop\",\n loadSchemas: () => import(\"./schemas\").then((m) => m.registerShopSchemas()),\n version: \"1.0.0\",\n label: \"Webwinkel\",\n description:\n \"Webwinkel + donaties: producten met varianten, winkelwagen, afrekenen via Stripe óf Mollie (eigen account van de klant) en bestelbevestiging per e-mail via Resend, Postmark of de eigen SMTP-mailbox.\",\n defaultEnabled: false,\n blocks: [\n shopCategoriesBlock,\n productGridBlock,\n productDetailBlock,\n cartBlock,\n checkoutBlock,\n donationBlock,\n orderStatusBlock,\n ],\n settingsSchema: ShopSettingsSchema,\n defaultSettings: defaultShopSettings,\n requires: [\n { kind: \"function\", name: \"createOrder\" },\n { kind: \"function\", name: \"shopStripeWebhook\" },\n { kind: \"function\", name: \"saveShopSecrets\" },\n { kind: \"function\", name: \"updateOrderStatus\" },\n { kind: \"function\", name: \"validateDiscountCode\" },\n { kind: \"function\", name: \"uploadPersonalization\" },\n { kind: \"firestore\", collection: \"products\" },\n { kind: \"firestore\", collection: \"shopCategories\" },\n { kind: \"firestore\", collection: \"orders\" },\n { kind: \"firestore\", collection: \"discountCodes\" },\n { kind: \"storage\", prefix: \"sites/\" },\n ],\n});\n"],"mappings":"AAaA,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB,2BAA2B;AACxD,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AAE1B,MAAM,aAAa,aAAa;AAAA,EACrC,IAAI;AAAA,EACJ,aAAa,MAAM,OAAO,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC;AAAA,EAC1E,SAAS;AAAA,EACT,OAAO;AAAA,EACP,aACE;AAAA,EACF,gBAAgB;AAAA,EAChB,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,UAAU;AAAA,IACR,EAAE,MAAM,YAAY,MAAM,cAAc;AAAA,IACxC,EAAE,MAAM,YAAY,MAAM,oBAAoB;AAAA,IAC9C,EAAE,MAAM,YAAY,MAAM,kBAAkB;AAAA,IAC5C,EAAE,MAAM,YAAY,MAAM,oBAAoB;AAAA,IAC9C,EAAE,MAAM,YAAY,MAAM,uBAAuB;AAAA,IACjD,EAAE,MAAM,YAAY,MAAM,wBAAwB;AAAA,IAClD,EAAE,MAAM,aAAa,YAAY,WAAW;AAAA,IAC5C,EAAE,MAAM,aAAa,YAAY,iBAAiB;AAAA,IAClD,EAAE,MAAM,aAAa,YAAY,SAAS;AAAA,IAC1C,EAAE,MAAM,aAAa,YAAY,gBAAgB;AAAA,IACjD,EAAE,MAAM,WAAW,QAAQ,SAAS;AAAA,EACtC;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerShopSchemas(): void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CartBlockSchema,
|
|
3
|
+
CheckoutBlockSchema,
|
|
4
|
+
DonationBlockSchema,
|
|
5
|
+
OrderStatusBlockSchema,
|
|
6
|
+
ProductDetailBlockSchema,
|
|
7
|
+
ProductGridBlockSchema,
|
|
8
|
+
ShopCategoriesBlockSchema
|
|
9
|
+
} from "../../schema/shop.js";
|
|
10
|
+
import { cartBlock } from "./blocks/Cart.js";
|
|
11
|
+
import { checkoutBlock } from "./blocks/Checkout.js";
|
|
12
|
+
import { donationBlock } from "./blocks/Donation.js";
|
|
13
|
+
import { orderStatusBlock } from "./blocks/OrderStatus.js";
|
|
14
|
+
import { productDetailBlock } from "./blocks/ProductDetail.js";
|
|
15
|
+
import { productGridBlock } from "./blocks/ProductGrid.js";
|
|
16
|
+
import { shopCategoriesBlock } from "./blocks/ShopCategories.js";
|
|
17
|
+
function koppel(def, schema) {
|
|
18
|
+
if (!def.schema) def.schema = schema;
|
|
19
|
+
}
|
|
20
|
+
function registerShopSchemas() {
|
|
21
|
+
koppel(cartBlock, CartBlockSchema);
|
|
22
|
+
koppel(checkoutBlock, CheckoutBlockSchema);
|
|
23
|
+
koppel(donationBlock, DonationBlockSchema);
|
|
24
|
+
koppel(orderStatusBlock, OrderStatusBlockSchema);
|
|
25
|
+
koppel(productDetailBlock, ProductDetailBlockSchema);
|
|
26
|
+
koppel(productGridBlock, ProductGridBlockSchema);
|
|
27
|
+
koppel(shopCategoriesBlock, ShopCategoriesBlockSchema);
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
registerShopSchemas
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/shop/schemas.ts"],"sourcesContent":["/**\n * Lazy schema-registratie van de shop-blokken (7.14) — de module-tegenhanger van\n * `blocks/builtinSchemas`: de schema's zijn editor-kennis en horen niet in de bezoekersbundel\n * van een shop-site. Dit bestand is de enige plek die ze als waarde importeert en wordt alleen\n * geladen via `shopModule.loadSchemas` (dynamic import, aangeroepen door de editor).\n */\nimport type { $ZodType } from \"zod/v4/core\";\nimport {\n CartBlockSchema,\n CheckoutBlockSchema,\n DonationBlockSchema,\n OrderStatusBlockSchema,\n ProductDetailBlockSchema,\n ProductGridBlockSchema,\n ShopCategoriesBlockSchema,\n} from \"../../schema/shop\";\nimport { cartBlock } from \"./blocks/Cart\";\nimport { checkoutBlock } from \"./blocks/Checkout\";\nimport { donationBlock } from \"./blocks/Donation\";\nimport { orderStatusBlock } from \"./blocks/OrderStatus\";\nimport { productDetailBlock } from \"./blocks/ProductDetail\";\nimport { productGridBlock } from \"./blocks/ProductGrid\";\nimport { shopCategoriesBlock } from \"./blocks/ShopCategories\";\nimport type { BlockDefinition } from \"../../blocks/registry\";\n\nfunction koppel(def: BlockDefinition, schema: unknown): void {\n if (!def.schema) def.schema = schema as $ZodType;\n}\n\nexport function registerShopSchemas(): void {\n koppel(cartBlock, CartBlockSchema);\n koppel(checkoutBlock, CheckoutBlockSchema);\n koppel(donationBlock, DonationBlockSchema);\n koppel(orderStatusBlock, OrderStatusBlockSchema);\n koppel(productDetailBlock, ProductDetailBlockSchema);\n koppel(productGridBlock, ProductGridBlockSchema);\n koppel(shopCategoriesBlock, ShopCategoriesBlockSchema);\n}\n"],"mappings":"AAOA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AAGpC,SAAS,OAAO,KAAsB,QAAuB;AAC3D,MAAI,CAAC,IAAI,OAAQ,KAAI,SAAS;AAChC;AAEO,SAAS,sBAA4B;AAC1C,SAAO,WAAW,eAAe;AACjC,SAAO,eAAe,mBAAmB;AACzC,SAAO,eAAe,mBAAmB;AACzC,SAAO,kBAAkB,sBAAsB;AAC/C,SAAO,oBAAoB,wBAAwB;AACnD,SAAO,kBAAkB,sBAAsB;AAC/C,SAAO,qBAAqB,yBAAyB;AACvD;","names":[]}
|
package/dist/modules/types.d.ts
CHANGED
|
@@ -44,6 +44,12 @@ export interface ModuleDefinition {
|
|
|
44
44
|
featureKey?: string;
|
|
45
45
|
/** Blocks die deze module levert (worden in het registry gemerged als de module actief is). */
|
|
46
46
|
blocks?: BlockDefinition[];
|
|
47
|
+
/**
|
|
48
|
+
* Lazy schema-registratie (7.14): hangt de blok-schema's van deze module aan zijn defs — zelfde
|
|
49
|
+
* mechaniek als `blocks/builtinSchemas` voor de ingebouwde blokken. De editor roept dit aan bij
|
|
50
|
+
* openen; een publieke bezoeker betaalt zo niet voor editor-kennis. Idempotent implementeren.
|
|
51
|
+
*/
|
|
52
|
+
loadSchemas?: () => Promise<void>;
|
|
47
53
|
/** Zod-schema voor de per-site instellingen van deze module. */
|
|
48
54
|
settingsSchema?: ZodTypeAny;
|
|
49
55
|
/** Standaardinstellingen; gemerged met `SiteConfig.modules[id].config`. */
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
|
+
/**
|
|
3
|
+
* De GEDEELDE basis van elk blok (_key, _style, en de losse klant-blok-vorm) — in een eigen,
|
|
4
|
+
* lichte module (7.13). `schema/blocks.ts` her-exporteert dit ongewijzigd; het bestaansrecht van
|
|
5
|
+
* de splitsing is de bundel: code die alleen de basis nodig heeft (customTemplate bouwt zijn
|
|
6
|
+
* schema's runtime uit veld-definities) trok via schema/blocks anders ALLE 57 blok-schema's mee
|
|
7
|
+
* naar elke publieke bezoeker.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Gedeelde, optionele blokstijl die ELK block kan dragen (via `blockBase`): verticale ruimte,
|
|
11
|
+
* achtergrond, breedte, uitlijning en een anker-id. Toegepast centraal in `BlockRenderer` zodat
|
|
12
|
+
* elk block deze opties krijgt zonder zijn Render te wijzigen. Volledig update-veilig (optioneel).
|
|
13
|
+
*/
|
|
14
|
+
export declare const BlockStyleSchema: z.ZodMiniObject<{
|
|
15
|
+
paddingY: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
16
|
+
lg: "lg";
|
|
17
|
+
md: "md";
|
|
18
|
+
none: "none";
|
|
19
|
+
sm: "sm";
|
|
20
|
+
xl: "xl";
|
|
21
|
+
}>>;
|
|
22
|
+
background: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
23
|
+
width: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
24
|
+
container: "container";
|
|
25
|
+
full: "full";
|
|
26
|
+
narrow: "narrow";
|
|
27
|
+
}>>;
|
|
28
|
+
align: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
29
|
+
center: "center";
|
|
30
|
+
left: "left";
|
|
31
|
+
right: "right";
|
|
32
|
+
}>>;
|
|
33
|
+
anchorId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
34
|
+
animate: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
35
|
+
fade: "fade";
|
|
36
|
+
up: "up";
|
|
37
|
+
}>>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export type BlockStyle = z.infer<typeof BlockStyleSchema>;
|
|
40
|
+
export declare const blockBase: {
|
|
41
|
+
_key: z.ZodMiniString<string>;
|
|
42
|
+
/** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */
|
|
43
|
+
_style: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
44
|
+
paddingY: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
45
|
+
lg: "lg";
|
|
46
|
+
md: "md";
|
|
47
|
+
none: "none";
|
|
48
|
+
sm: "sm";
|
|
49
|
+
xl: "xl";
|
|
50
|
+
}>>;
|
|
51
|
+
background: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
52
|
+
width: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
53
|
+
container: "container";
|
|
54
|
+
full: "full";
|
|
55
|
+
narrow: "narrow";
|
|
56
|
+
}>>;
|
|
57
|
+
align: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
58
|
+
center: "center";
|
|
59
|
+
left: "left";
|
|
60
|
+
right: "right";
|
|
61
|
+
}>>;
|
|
62
|
+
anchorId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
63
|
+
animate: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
64
|
+
fade: "fade";
|
|
65
|
+
up: "up";
|
|
66
|
+
}>>;
|
|
67
|
+
}, z.core.$strip>>;
|
|
68
|
+
};
|
|
69
|
+
/** Losse vorm voor onbekende/klant-blokken: alleen _key + _type vereist, rest vrij. */
|
|
70
|
+
export declare const BlockBaseSchema: z.ZodMiniObject<{
|
|
71
|
+
_key: z.ZodMiniString<string>;
|
|
72
|
+
_style: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
73
|
+
paddingY: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
74
|
+
lg: "lg";
|
|
75
|
+
md: "md";
|
|
76
|
+
none: "none";
|
|
77
|
+
sm: "sm";
|
|
78
|
+
xl: "xl";
|
|
79
|
+
}>>;
|
|
80
|
+
background: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
81
|
+
width: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
82
|
+
container: "container";
|
|
83
|
+
full: "full";
|
|
84
|
+
narrow: "narrow";
|
|
85
|
+
}>>;
|
|
86
|
+
align: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
87
|
+
center: "center";
|
|
88
|
+
left: "left";
|
|
89
|
+
right: "right";
|
|
90
|
+
}>>;
|
|
91
|
+
anchorId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
92
|
+
animate: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
93
|
+
fade: "fade";
|
|
94
|
+
up: "up";
|
|
95
|
+
}>>;
|
|
96
|
+
}, z.core.$strip>>;
|
|
97
|
+
_type: z.ZodMiniString<string>;
|
|
98
|
+
}, z.core.$loose>;
|
|
99
|
+
export type BlockBase = z.infer<typeof BlockBaseSchema>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
|
+
const BlockStyleSchema = z.object({
|
|
3
|
+
paddingY: z.optional(z.enum(["none", "sm", "md", "lg", "xl"])),
|
|
4
|
+
background: z.optional(z.string().check(z.maxLength(40))),
|
|
5
|
+
width: z.optional(z.enum(["container", "full", "narrow"])),
|
|
6
|
+
align: z.optional(z.enum(["left", "center", "right"])),
|
|
7
|
+
anchorId: z.optional(z.string().check(z.maxLength(60))),
|
|
8
|
+
/** Subtiele binnenkomst-animatie bij scrollen (progressief + respecteert reduced-motion). */
|
|
9
|
+
animate: z.optional(z.enum(["fade", "up"]))
|
|
10
|
+
});
|
|
11
|
+
const blockBase = {
|
|
12
|
+
_key: z.string().check(z.minLength(1)).check(z.maxLength(64)),
|
|
13
|
+
/** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */
|
|
14
|
+
_style: z.optional(BlockStyleSchema)
|
|
15
|
+
};
|
|
16
|
+
const BlockBaseSchema = z.looseObject({ ...blockBase, _type: z.string().check(z.minLength(1)).check(z.maxLength(60)) });
|
|
17
|
+
export {
|
|
18
|
+
BlockBaseSchema,
|
|
19
|
+
BlockStyleSchema,
|
|
20
|
+
blockBase
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=blockBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/schema/blockBase.ts"],"sourcesContent":["import * as z from \"zod/mini\";\n\n/**\n * De GEDEELDE basis van elk blok (_key, _style, en de losse klant-blok-vorm) — in een eigen,\n * lichte module (7.13). `schema/blocks.ts` her-exporteert dit ongewijzigd; het bestaansrecht van\n * de splitsing is de bundel: code die alleen de basis nodig heeft (customTemplate bouwt zijn\n * schema's runtime uit veld-definities) trok via schema/blocks anders ALLE 57 blok-schema's mee\n * naar elke publieke bezoeker.\n */\n/**\n * Gedeelde, optionele blokstijl die ELK block kan dragen (via `blockBase`): verticale ruimte,\n * achtergrond, breedte, uitlijning en een anker-id. Toegepast centraal in `BlockRenderer` zodat\n * elk block deze opties krijgt zonder zijn Render te wijzigen. Volledig update-veilig (optioneel).\n */\nexport const BlockStyleSchema = z.object({\n paddingY: z.optional(z.enum([\"none\", \"sm\", \"md\", \"lg\", \"xl\"])),\n background: z.optional(z.string().check(z.maxLength(40))),\n width: z.optional(z.enum([\"container\", \"full\", \"narrow\"])),\n align: z.optional(z.enum([\"left\", \"center\", \"right\"])),\n anchorId: z.optional(z.string().check(z.maxLength(60))),\n /** Subtiele binnenkomst-animatie bij scrollen (progressief + respecteert reduced-motion). */\n animate: z.optional(z.enum([\"fade\", \"up\"])),\n});\nexport type BlockStyle = z.infer<typeof BlockStyleSchema>;\n\nexport const blockBase = {\n _key: z.string().check(z.minLength(1)).check(z.maxLength(64)),\n /** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */\n _style: z.optional(BlockStyleSchema),\n};\n\n/** Losse vorm voor onbekende/klant-blokken: alleen _key + _type vereist, rest vrij. */\nexport const BlockBaseSchema = z.looseObject({ ...blockBase, _type: z.string().check(z.minLength(1)).check(z.maxLength(60)) });\nexport type BlockBase = z.infer<typeof BlockBaseSchema>;\n\n"],"mappings":"AAAA,YAAY,OAAO;AAcZ,MAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,MAAM,MAAM,MAAM,IAAI,CAAC,CAAC;AAAA,EAC7D,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAAA,EACxD,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACzD,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,UAAU,OAAO,CAAC,CAAC;AAAA,EACrD,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAAA;AAAA,EAEtD,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC5C,CAAC;AAGM,MAAM,YAAY;AAAA,EACvB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAAA;AAAA,EAE5D,QAAQ,EAAE,SAAS,gBAAgB;AACrC;AAGO,MAAM,kBAAkB,EAAE,YAAY,EAAE,GAAG,WAAW,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;","names":[]}
|
package/dist/schema/blocks.d.ts
CHANGED
|
@@ -7,97 +7,7 @@ import * as z from "zod/mini";
|
|
|
7
7
|
* Built-ins staan hieronder; klant-blokken brengen hun eigen schema mee via `defineBlock`
|
|
8
8
|
* (de registry valideert die per type — zie blocks/registry.ts `validateBlocks`).
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
* Gedeelde, optionele blokstijl die ELK block kan dragen (via `blockBase`): verticale ruimte,
|
|
12
|
-
* achtergrond, breedte, uitlijning en een anker-id. Toegepast centraal in `BlockRenderer` zodat
|
|
13
|
-
* elk block deze opties krijgt zonder zijn Render te wijzigen. Volledig update-veilig (optioneel).
|
|
14
|
-
*/
|
|
15
|
-
export declare const BlockStyleSchema: z.ZodMiniObject<{
|
|
16
|
-
paddingY: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
17
|
-
lg: "lg";
|
|
18
|
-
md: "md";
|
|
19
|
-
none: "none";
|
|
20
|
-
sm: "sm";
|
|
21
|
-
xl: "xl";
|
|
22
|
-
}>>;
|
|
23
|
-
background: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
24
|
-
width: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
25
|
-
container: "container";
|
|
26
|
-
full: "full";
|
|
27
|
-
narrow: "narrow";
|
|
28
|
-
}>>;
|
|
29
|
-
align: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
30
|
-
center: "center";
|
|
31
|
-
left: "left";
|
|
32
|
-
right: "right";
|
|
33
|
-
}>>;
|
|
34
|
-
anchorId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
35
|
-
animate: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
36
|
-
fade: "fade";
|
|
37
|
-
up: "up";
|
|
38
|
-
}>>;
|
|
39
|
-
}, z.core.$strip>;
|
|
40
|
-
export type BlockStyle = z.infer<typeof BlockStyleSchema>;
|
|
41
|
-
export declare const blockBase: {
|
|
42
|
-
_key: z.ZodMiniString<string>;
|
|
43
|
-
/** Optionele gedeelde blokstijl (ruimte/achtergrond/breedte/uitlijning/anker). */
|
|
44
|
-
_style: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
45
|
-
paddingY: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
46
|
-
lg: "lg";
|
|
47
|
-
md: "md";
|
|
48
|
-
none: "none";
|
|
49
|
-
sm: "sm";
|
|
50
|
-
xl: "xl";
|
|
51
|
-
}>>;
|
|
52
|
-
background: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
53
|
-
width: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
54
|
-
container: "container";
|
|
55
|
-
full: "full";
|
|
56
|
-
narrow: "narrow";
|
|
57
|
-
}>>;
|
|
58
|
-
align: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
59
|
-
center: "center";
|
|
60
|
-
left: "left";
|
|
61
|
-
right: "right";
|
|
62
|
-
}>>;
|
|
63
|
-
anchorId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
64
|
-
animate: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
65
|
-
fade: "fade";
|
|
66
|
-
up: "up";
|
|
67
|
-
}>>;
|
|
68
|
-
}, z.core.$strip>>;
|
|
69
|
-
};
|
|
70
|
-
/** Losse vorm voor onbekende/klant-blokken: alleen _key + _type vereist, rest vrij. */
|
|
71
|
-
export declare const BlockBaseSchema: z.ZodMiniObject<{
|
|
72
|
-
_key: z.ZodMiniString<string>;
|
|
73
|
-
_style: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
74
|
-
paddingY: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
75
|
-
lg: "lg";
|
|
76
|
-
md: "md";
|
|
77
|
-
none: "none";
|
|
78
|
-
sm: "sm";
|
|
79
|
-
xl: "xl";
|
|
80
|
-
}>>;
|
|
81
|
-
background: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
82
|
-
width: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
83
|
-
container: "container";
|
|
84
|
-
full: "full";
|
|
85
|
-
narrow: "narrow";
|
|
86
|
-
}>>;
|
|
87
|
-
align: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
88
|
-
center: "center";
|
|
89
|
-
left: "left";
|
|
90
|
-
right: "right";
|
|
91
|
-
}>>;
|
|
92
|
-
anchorId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
93
|
-
animate: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
94
|
-
fade: "fade";
|
|
95
|
-
up: "up";
|
|
96
|
-
}>>;
|
|
97
|
-
}, z.core.$strip>>;
|
|
98
|
-
_type: z.ZodMiniString<string>;
|
|
99
|
-
}, z.core.$loose>;
|
|
100
|
-
export type BlockBase = z.infer<typeof BlockBaseSchema>;
|
|
10
|
+
export { BlockStyleSchema, blockBase, BlockBaseSchema, type BlockStyle, type BlockBase } from "./blockBase.js";
|
|
101
11
|
export declare const HeroBlockSchema: z.ZodMiniObject<{
|
|
102
12
|
_key: z.ZodMiniString<string>;
|
|
103
13
|
_style: z.ZodMiniOptional<z.ZodMiniObject<{
|