@xiwebdesign/xicms-core 7.12.0 → 7.13.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/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/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 +32 -2
- package/dist/admin/visual/VisualEditor.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/media/ImageContext.js +24 -1
- package/dist/media/ImageContext.js.map +1 -1
- 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.js +1 -1
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/symbols.js +1 -1
- package/dist/schema/symbols.js.map +1 -1
- package/dist/server/blockData.js +29 -9
- 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 +10 -1
- package/dist/server/pages.js.map +1 -1
- package/dist/server/shop.js +6 -10
- package/dist/server/shop.js.map +1 -1
- package/dist/styles.css +45 -0
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/schema/blocks.js
CHANGED
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
import * as z from "zod/mini";
|
|
2
|
-
|
|
3
|
-
|
|
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)) });
|
|
2
|
+
import { BlockStyleSchema, blockBase, BlockBaseSchema } from "./blockBase.js";
|
|
3
|
+
import { blockBase as blockBase2, BlockBaseSchema as BlockBaseSchema2 } from "./blockBase.js";
|
|
17
4
|
const ref = z.string().check(z.maxLength(256));
|
|
18
5
|
const richText = z.string().check(z.maxLength(1e5));
|
|
19
6
|
const shortText = z.string().check(z.maxLength(2e3));
|
|
@@ -23,7 +10,7 @@ const ButtonSchema = z.object({
|
|
|
23
10
|
variant: z._default(z.enum(["primary", "secondary", "outline"]), "primary")
|
|
24
11
|
});
|
|
25
12
|
const HeroBlockSchema = z.object({
|
|
26
|
-
...
|
|
13
|
+
...blockBase2,
|
|
27
14
|
_type: z.literal("hero"),
|
|
28
15
|
/** Kicker/eyebrow: klein regeltje bóven de titel (bv. "Hoveniers sinds 2001"). */
|
|
29
16
|
eyebrow: z.optional(shortText).register(z.globalRegistry, { description: "Regeltje boven de titel" }),
|
|
@@ -49,12 +36,12 @@ const HeroBlockSchema = z.object({
|
|
|
49
36
|
buttons: z._default(z.array(ButtonSchema).check(z.maxLength(3)), [])
|
|
50
37
|
});
|
|
51
38
|
const RichTextBlockSchema = z.object({
|
|
52
|
-
...
|
|
39
|
+
...blockBase2,
|
|
53
40
|
_type: z.literal("richText"),
|
|
54
41
|
html: z._default(richText, "")
|
|
55
42
|
});
|
|
56
43
|
const ImageBlockSchema = z.object({
|
|
57
|
-
...
|
|
44
|
+
...blockBase2,
|
|
58
45
|
_type: z.literal("image"),
|
|
59
46
|
url: z.optional(z.string().check(z.maxLength(2e3))),
|
|
60
47
|
alt: z._default(shortText, ""),
|
|
@@ -67,7 +54,7 @@ const ImageBlockSchema = z.object({
|
|
|
67
54
|
aspectRatio: z._default(z.enum(["auto", "16/9", "4/3", "1/1", "3/2"]), "auto")
|
|
68
55
|
});
|
|
69
56
|
const GalleryBlockSchema = z.object({
|
|
70
|
-
...
|
|
57
|
+
...blockBase2,
|
|
71
58
|
_type: z.literal("gallery"),
|
|
72
59
|
items: z._default(z.array(z.object({
|
|
73
60
|
url: z.optional(z.string().check(z.maxLength(2e3))),
|
|
@@ -87,7 +74,7 @@ const GalleryBlockSchema = z.object({
|
|
|
87
74
|
aspectRatio: z._default(z.enum(["1/1", "4/3", "3/2", "16/9", "auto"]), "1/1")
|
|
88
75
|
});
|
|
89
76
|
const CtaBlockSchema = z.object({
|
|
90
|
-
...
|
|
77
|
+
...blockBase2,
|
|
91
78
|
_type: z.literal("cta"),
|
|
92
79
|
title: z._default(shortText, ""),
|
|
93
80
|
text: z.optional(shortText),
|
|
@@ -104,7 +91,7 @@ const CtaBlockSchema = z.object({
|
|
|
104
91
|
sticky: z._default(z.boolean(), false)
|
|
105
92
|
});
|
|
106
93
|
const FaqBlockSchema = z.object({
|
|
107
|
-
...
|
|
94
|
+
...blockBase2,
|
|
108
95
|
_type: z.literal("faq"),
|
|
109
96
|
heading: z.optional(shortText),
|
|
110
97
|
items: z._default(z.array(z.object({
|
|
@@ -121,7 +108,7 @@ const FaqBlockSchema = z.object({
|
|
|
121
108
|
defaultOpen: z._default(z.boolean(), false)
|
|
122
109
|
});
|
|
123
110
|
const OpeningHoursBlockSchema = z.object({
|
|
124
|
-
...
|
|
111
|
+
...blockBase2,
|
|
125
112
|
_type: z.literal("openingHours"),
|
|
126
113
|
heading: z.optional(shortText),
|
|
127
114
|
rows: z._default(z.array(z.object({ day: z._default(shortText, ""), hours: z._default(shortText, "") })).check(z.maxLength(14)), []),
|
|
@@ -131,7 +118,7 @@ const OpeningHoursBlockSchema = z.object({
|
|
|
131
118
|
jsonLd: z._default(z.boolean(), false).register(z.globalRegistry, { description: "JSON-LD (openingstijden)" })
|
|
132
119
|
});
|
|
133
120
|
const PricingBlockSchema = z.object({
|
|
134
|
-
...
|
|
121
|
+
...blockBase2,
|
|
135
122
|
_type: z.literal("pricing"),
|
|
136
123
|
heading: z.optional(shortText),
|
|
137
124
|
items: z._default(z.array(z.object({
|
|
@@ -155,7 +142,7 @@ const PricingBlockSchema = z.object({
|
|
|
155
142
|
jsonLd: z._default(z.boolean(), false)
|
|
156
143
|
});
|
|
157
144
|
const NewsListBlockSchema = z.object({
|
|
158
|
-
...
|
|
145
|
+
...blockBase2,
|
|
159
146
|
_type: z.literal("newsList"),
|
|
160
147
|
heading: z.optional(shortText),
|
|
161
148
|
limit: z._default(z.int().check(z.minimum(1)).check(z.maximum(50)), 6),
|
|
@@ -164,18 +151,18 @@ const NewsListBlockSchema = z.object({
|
|
|
164
151
|
basePath: z._default(z.string().check(z.maxLength(200)), "/nieuws")
|
|
165
152
|
});
|
|
166
153
|
const FormBlockSchema = z.object({
|
|
167
|
-
...
|
|
154
|
+
...blockBase2,
|
|
168
155
|
_type: z.literal("form"),
|
|
169
156
|
formId: ref,
|
|
170
157
|
heading: z.optional(shortText)
|
|
171
158
|
});
|
|
172
159
|
const SpacerBlockSchema = z.object({
|
|
173
|
-
...
|
|
160
|
+
...blockBase2,
|
|
174
161
|
_type: z.literal("spacer"),
|
|
175
162
|
size: z._default(z.enum(["sm", "md", "lg", "xl"]), "md")
|
|
176
163
|
});
|
|
177
164
|
const TestimonialsBlockSchema = z.object({
|
|
178
|
-
...
|
|
165
|
+
...blockBase2,
|
|
179
166
|
_type: z.literal("testimonials"),
|
|
180
167
|
heading: z.optional(shortText),
|
|
181
168
|
items: z._default(z.array(z.object({
|
|
@@ -191,7 +178,7 @@ const TestimonialsBlockSchema = z.object({
|
|
|
191
178
|
jsonLd: z._default(z.boolean(), false)
|
|
192
179
|
});
|
|
193
180
|
const TeamBlockSchema = z.object({
|
|
194
|
-
...
|
|
181
|
+
...blockBase2,
|
|
195
182
|
_type: z.literal("team"),
|
|
196
183
|
heading: z.optional(shortText),
|
|
197
184
|
members: z._default(z.array(z.object({
|
|
@@ -211,7 +198,7 @@ const TeamBlockSchema = z.object({
|
|
|
211
198
|
groupByDepartment: z._default(z.boolean(), false).register(z.globalRegistry, { description: "Groeperen per afdeling" })
|
|
212
199
|
});
|
|
213
200
|
const AgendaBlockSchema = z.object({
|
|
214
|
-
...
|
|
201
|
+
...blockBase2,
|
|
215
202
|
_type: z.literal("agenda"),
|
|
216
203
|
heading: z.optional(shortText),
|
|
217
204
|
events: z._default(z.array(z.object({
|
|
@@ -229,14 +216,14 @@ const AgendaBlockSchema = z.object({
|
|
|
229
216
|
jsonLd: z._default(z.boolean(), false)
|
|
230
217
|
});
|
|
231
218
|
const SearchBlockSchema = z.object({
|
|
232
|
-
...
|
|
219
|
+
...blockBase2,
|
|
233
220
|
_type: z.literal("search"),
|
|
234
221
|
placeholder: z._default(shortText, "Zoeken\u2026"),
|
|
235
222
|
/** Ook nieuwsartikelen doorzoeken (naast pagina's). */
|
|
236
223
|
includeNews: z._default(z.boolean(), true)
|
|
237
224
|
});
|
|
238
225
|
const VideoBlockSchema = z.object({
|
|
239
|
-
...
|
|
226
|
+
...blockBase2,
|
|
240
227
|
_type: z.literal("video"),
|
|
241
228
|
provider: z._default(z.enum(["youtube", "vimeo", "file"]), "youtube"),
|
|
242
229
|
/** YouTube/Vimeo-id of -URL, of een mp4/webm-URL bij "file". */
|
|
@@ -252,7 +239,7 @@ const VideoBlockSchema = z.object({
|
|
|
252
239
|
consentGated: z._default(z.boolean(), true)
|
|
253
240
|
});
|
|
254
241
|
const FeatureBlockSchema = z.object({
|
|
255
|
-
...
|
|
242
|
+
...blockBase2,
|
|
256
243
|
_type: z.literal("feature"),
|
|
257
244
|
heading: z.optional(shortText),
|
|
258
245
|
/** Rich text (veldnaam "html" zodat het server-side gesanitized wordt bij publiceren). */
|
|
@@ -263,7 +250,7 @@ const FeatureBlockSchema = z.object({
|
|
|
263
250
|
buttonHref: z.optional(z.string().check(z.maxLength(2e3)))
|
|
264
251
|
});
|
|
265
252
|
const BannerBlockSchema = z.object({
|
|
266
|
-
...
|
|
253
|
+
...blockBase2,
|
|
267
254
|
_type: z.literal("banner"),
|
|
268
255
|
text: z._default(shortText, ""),
|
|
269
256
|
href: z.optional(z.string().check(z.maxLength(2e3))),
|
|
@@ -274,7 +261,7 @@ const BannerBlockSchema = z.object({
|
|
|
274
261
|
dismissVersion: z.optional(shortText).register(z.globalRegistry, { description: "Versie (wijzig om balk opnieuw te tonen)" })
|
|
275
262
|
});
|
|
276
263
|
const CountersBlockSchema = z.object({
|
|
277
|
-
...
|
|
264
|
+
...blockBase2,
|
|
278
265
|
_type: z.literal("counters"),
|
|
279
266
|
heading: z.optional(shortText),
|
|
280
267
|
items: z._default(z.array(z.object({ value: z._default(shortText, ""), label: z._default(shortText, ""), prefix: z.optional(shortText), suffix: z.optional(shortText) })).check(z.maxLength(8)), []),
|
|
@@ -282,7 +269,7 @@ const CountersBlockSchema = z.object({
|
|
|
282
269
|
animate: z._default(z.boolean(), true).register(z.globalRegistry, { description: "Tel-animatie" })
|
|
283
270
|
});
|
|
284
271
|
const LogosBlockSchema = z.object({
|
|
285
|
-
...
|
|
272
|
+
...blockBase2,
|
|
286
273
|
_type: z.literal("logos"),
|
|
287
274
|
heading: z.optional(shortText),
|
|
288
275
|
items: z._default(z.array(z.object({ src: z._default(z.string().check(z.maxLength(2e3)), ""), alt: z._default(shortText, ""), href: z.optional(z.string().check(z.maxLength(2e3))) })).check(z.maxLength(40)), []),
|
|
@@ -291,7 +278,7 @@ const LogosBlockSchema = z.object({
|
|
|
291
278
|
marquee: z._default(z.boolean(), false).register(z.globalRegistry, { description: "Doorlopende band" })
|
|
292
279
|
});
|
|
293
280
|
const TimelineBlockSchema = z.object({
|
|
294
|
-
...
|
|
281
|
+
...blockBase2,
|
|
295
282
|
_type: z.literal("timeline"),
|
|
296
283
|
heading: z.optional(shortText),
|
|
297
284
|
items: z._default(z.array(z.object({ title: z._default(shortText, ""), date: z.optional(shortText), text: z.optional(shortText), icon: z.optional(shortText) })).check(z.maxLength(40)), []),
|
|
@@ -299,7 +286,7 @@ const TimelineBlockSchema = z.object({
|
|
|
299
286
|
alternate: z._default(z.boolean(), false).register(z.globalRegistry, { description: "Alternerende layout" })
|
|
300
287
|
});
|
|
301
288
|
const ContactBlockSchema = z.object({
|
|
302
|
-
...
|
|
289
|
+
...blockBase2,
|
|
303
290
|
_type: z.literal("contact"),
|
|
304
291
|
heading: z.optional(shortText),
|
|
305
292
|
address: z.optional(shortText),
|
|
@@ -312,7 +299,7 @@ const ContactBlockSchema = z.object({
|
|
|
312
299
|
jsonLd: z._default(z.boolean(), false)
|
|
313
300
|
});
|
|
314
301
|
const MapBlockSchema = z.object({
|
|
315
|
-
...
|
|
302
|
+
...blockBase2,
|
|
316
303
|
_type: z.literal("map"),
|
|
317
304
|
provider: z._default(z.enum(["osm", "google"]), "osm"),
|
|
318
305
|
/** Adres/zoekterm (osm, legacy-fallback) of volledige embed-URL (google). */
|
|
@@ -325,13 +312,13 @@ const MapBlockSchema = z.object({
|
|
|
325
312
|
consentGated: z._default(z.boolean(), true)
|
|
326
313
|
});
|
|
327
314
|
const SocialBlockSchema = z.object({
|
|
328
|
-
...
|
|
315
|
+
...blockBase2,
|
|
329
316
|
_type: z.literal("social"),
|
|
330
317
|
heading: z.optional(shortText),
|
|
331
318
|
items: z._default(z.array(z.object({ platform: z._default(shortText, ""), href: z._default(z.string().check(z.maxLength(2e3)), "") })).check(z.maxLength(12)), [])
|
|
332
319
|
});
|
|
333
320
|
const NewsletterBlockSchema = z.object({
|
|
334
|
-
...
|
|
321
|
+
...blockBase2,
|
|
335
322
|
_type: z.literal("newsletter"),
|
|
336
323
|
heading: z.optional(shortText),
|
|
337
324
|
text: z.optional(shortText),
|
|
@@ -356,7 +343,7 @@ const BookingProviderSchema = z.enum([
|
|
|
356
343
|
"bookingkit"
|
|
357
344
|
]);
|
|
358
345
|
const BookingBlockSchema = z.object({
|
|
359
|
-
...
|
|
346
|
+
...blockBase2,
|
|
360
347
|
_type: z.literal("booking"),
|
|
361
348
|
heading: z.optional(shortText),
|
|
362
349
|
/** Welk reserveersysteem; bepaalt de embed-helper en uitleg in de editor. */
|
|
@@ -367,26 +354,26 @@ const BookingBlockSchema = z.object({
|
|
|
367
354
|
consentGated: z._default(z.boolean(), true)
|
|
368
355
|
});
|
|
369
356
|
const ButtonsBlockSchema = z.object({
|
|
370
|
-
...
|
|
357
|
+
...blockBase2,
|
|
371
358
|
_type: z.literal("buttons"),
|
|
372
359
|
align: z._default(z.enum(["left", "center", "right"]), "left"),
|
|
373
360
|
items: z._default(z.array(z.object({ label: z._default(shortText, ""), href: z._default(z.string().check(z.maxLength(2e3)), "#"), variant: z._default(z.enum(["primary", "secondary", "outline"]), "primary") })).check(z.maxLength(6)), [])
|
|
374
361
|
});
|
|
375
362
|
const QuoteBlockSchema = z.object({
|
|
376
|
-
...
|
|
363
|
+
...blockBase2,
|
|
377
364
|
_type: z.literal("quote"),
|
|
378
365
|
text: z._default(shortText, ""),
|
|
379
366
|
author: z.optional(shortText),
|
|
380
367
|
role: z.optional(shortText)
|
|
381
368
|
});
|
|
382
369
|
const DividerBlockSchema = z.object({
|
|
383
|
-
...
|
|
370
|
+
...blockBase2,
|
|
384
371
|
_type: z.literal("divider"),
|
|
385
372
|
variant: z._default(z.enum(["line", "dots", "space"]), "line"),
|
|
386
373
|
spacing: z._default(z.enum(["sm", "md", "lg"]), "md")
|
|
387
374
|
});
|
|
388
375
|
const AccordionBlockSchema = z.object({
|
|
389
|
-
...
|
|
376
|
+
...blockBase2,
|
|
390
377
|
_type: z.literal("accordion"),
|
|
391
378
|
heading: z.optional(shortText),
|
|
392
379
|
items: z._default(z.array(z.object({
|
|
@@ -399,7 +386,7 @@ const AccordionBlockSchema = z.object({
|
|
|
399
386
|
multiple: z._default(z.boolean(), false)
|
|
400
387
|
});
|
|
401
388
|
const EmbedBlockSchema = z.object({
|
|
402
|
-
...
|
|
389
|
+
...blockBase2,
|
|
403
390
|
_type: z.literal("embed"),
|
|
404
391
|
url: z._default(z.string().check(z.maxLength(2e3)), ""),
|
|
405
392
|
title: z.optional(shortText),
|
|
@@ -410,26 +397,26 @@ const EmbedBlockSchema = z.object({
|
|
|
410
397
|
consentGated: z._default(z.boolean(), true)
|
|
411
398
|
});
|
|
412
399
|
const ColumnsBlockSchema = z.object({
|
|
413
|
-
...
|
|
400
|
+
...blockBase2,
|
|
414
401
|
_type: z.literal("columns"),
|
|
415
|
-
columns: z._default(z.array(z.object({ blocks: z._default(z.array(
|
|
402
|
+
columns: z._default(z.array(z.object({ blocks: z._default(z.array(BlockBaseSchema2).check(z.maxLength(50)), []) })).check(z.minLength(1)).check(z.maxLength(4)), [])
|
|
416
403
|
});
|
|
417
404
|
const WithSidebarBlockSchema = z.object({
|
|
418
|
-
...
|
|
405
|
+
...blockBase2,
|
|
419
406
|
_type: z.literal("withSidebar"),
|
|
420
|
-
main: z._default(z.array(
|
|
421
|
-
aside: z._default(z.array(
|
|
407
|
+
main: z._default(z.array(BlockBaseSchema2).check(z.maxLength(50)), []),
|
|
408
|
+
aside: z._default(z.array(BlockBaseSchema2).check(z.maxLength(30)), []),
|
|
422
409
|
side: z._default(z.enum(["left", "right"]), "right"),
|
|
423
410
|
sidebarWidth: z._default(z.enum(["sm", "md", "lg"]), "md"),
|
|
424
411
|
sticky: z._default(z.boolean(), true)
|
|
425
412
|
});
|
|
426
413
|
const TabsBlockSchema = z.object({
|
|
427
|
-
...
|
|
414
|
+
...blockBase2,
|
|
428
415
|
_type: z.literal("tabs"),
|
|
429
|
-
tabs: z._default(z.array(z.object({ label: z._default(shortText, "Tab"), blocks: z._default(z.array(
|
|
416
|
+
tabs: z._default(z.array(z.object({ label: z._default(shortText, "Tab"), blocks: z._default(z.array(BlockBaseSchema2).check(z.maxLength(30)), []) })).check(z.minLength(1)).check(z.maxLength(10)), [])
|
|
430
417
|
});
|
|
431
418
|
const CardsBlockSchema = z.object({
|
|
432
|
-
...
|
|
419
|
+
...blockBase2,
|
|
433
420
|
_type: z.literal("cards"),
|
|
434
421
|
heading: z.optional(shortText),
|
|
435
422
|
intro: z.optional(shortText),
|
|
@@ -448,13 +435,13 @@ const CardsBlockSchema = z.object({
|
|
|
448
435
|
})).check(z.maxLength(24)), [])
|
|
449
436
|
});
|
|
450
437
|
const DownloadsBlockSchema = z.object({
|
|
451
|
-
...
|
|
438
|
+
...blockBase2,
|
|
452
439
|
_type: z.literal("downloads"),
|
|
453
440
|
heading: z.optional(shortText),
|
|
454
441
|
items: z._default(z.array(z.object({ label: z._default(shortText, ""), href: z._default(z.string().check(z.maxLength(2e3)), ""), meta: z.optional(shortText) })).check(z.maxLength(60)), [])
|
|
455
442
|
});
|
|
456
443
|
const PdfBlockSchema = z.object({
|
|
457
|
-
...
|
|
444
|
+
...blockBase2,
|
|
458
445
|
_type: z.literal("pdf"),
|
|
459
446
|
heading: z.optional(shortText),
|
|
460
447
|
/** Eén of meer PDF's; bij meerdere verschijnen tabs (label) om te wisselen. */
|
|
@@ -464,7 +451,7 @@ const PdfBlockSchema = z.object({
|
|
|
464
451
|
showDownload: z._default(z.boolean(), true)
|
|
465
452
|
});
|
|
466
453
|
const CountdownBlockSchema = z.object({
|
|
467
|
-
...
|
|
454
|
+
...blockBase2,
|
|
468
455
|
_type: z.literal("countdown"),
|
|
469
456
|
heading: z.optional(shortText),
|
|
470
457
|
/** ISO-datetime, bv. "2026-12-31T23:59". */
|
|
@@ -475,7 +462,7 @@ const CountdownBlockSchema = z.object({
|
|
|
475
462
|
onExpire: z._default(z.enum(["message", "hide"]), "message").register(z.globalRegistry, { description: "Na afloop" })
|
|
476
463
|
});
|
|
477
464
|
const SliderBlockSchema = z.object({
|
|
478
|
-
...
|
|
465
|
+
...blockBase2,
|
|
479
466
|
_type: z.literal("slider"),
|
|
480
467
|
slides: z._default(z.array(z.object({
|
|
481
468
|
imageUrl: z.optional(z.string().check(z.maxLength(2e3))),
|
|
@@ -491,7 +478,7 @@ const SliderBlockSchema = z.object({
|
|
|
491
478
|
aspectRatio: z._default(z.enum(["16/9", "4/3", "3/2", "1/1", "21/9"]), "16/9")
|
|
492
479
|
});
|
|
493
480
|
const WhatsappChatBlockSchema = z.object({
|
|
494
|
-
...
|
|
481
|
+
...blockBase2,
|
|
495
482
|
_type: z.literal("whatsappChat"),
|
|
496
483
|
/** Telefoonnummer, internationaal (bv. "31612345678" of "+31 6 12345678"). */
|
|
497
484
|
phone: z._default(shortText, "").register(z.globalRegistry, { description: "Telefoonnummer (internationaal)" }),
|
|
@@ -502,7 +489,7 @@ const WhatsappChatBlockSchema = z.object({
|
|
|
502
489
|
position: z._default(z.enum(["br", "bl"]), "br").register(z.globalRegistry, { description: "Positie (rechts-/linksonder)" })
|
|
503
490
|
});
|
|
504
491
|
const BeforeAfterBlockSchema = z.object({
|
|
505
|
-
...
|
|
492
|
+
...blockBase2,
|
|
506
493
|
_type: z.literal("beforeAfter"),
|
|
507
494
|
heading: z.optional(shortText),
|
|
508
495
|
beforeUrl: z._default(z.string().check(z.maxLength(2e3)), ""),
|
|
@@ -513,7 +500,7 @@ const BeforeAfterBlockSchema = z.object({
|
|
|
513
500
|
aspectRatio: z._default(z.enum(["16/9", "4/3", "3/2", "1/1"]), "4/3")
|
|
514
501
|
});
|
|
515
502
|
const PortfolioBlockSchema = z.object({
|
|
516
|
-
...
|
|
503
|
+
...blockBase2,
|
|
517
504
|
_type: z.literal("portfolio"),
|
|
518
505
|
heading: z.optional(shortText),
|
|
519
506
|
intro: z.optional(shortText),
|
|
@@ -530,7 +517,7 @@ const PortfolioBlockSchema = z.object({
|
|
|
530
517
|
lightbox: z._default(z.boolean(), true).register(z.globalRegistry, { description: "Lightbox bij klikken" })
|
|
531
518
|
});
|
|
532
519
|
const JobsBlockSchema = z.object({
|
|
533
|
-
...
|
|
520
|
+
...blockBase2,
|
|
534
521
|
_type: z.literal("jobs"),
|
|
535
522
|
heading: z.optional(shortText),
|
|
536
523
|
intro: z.optional(shortText),
|
|
@@ -548,13 +535,13 @@ const JobsBlockSchema = z.object({
|
|
|
548
535
|
jsonLd: z._default(z.boolean(), true).register(z.globalRegistry, { description: "JSON-LD (Google Jobs)" })
|
|
549
536
|
});
|
|
550
537
|
const BreadcrumbsBlockSchema = z.object({
|
|
551
|
-
...
|
|
538
|
+
...blockBase2,
|
|
552
539
|
_type: z.literal("breadcrumbs"),
|
|
553
540
|
homeLabel: z._default(shortText, "Home"),
|
|
554
541
|
jsonLd: z._default(z.boolean(), true).register(z.globalRegistry, { description: "JSON-LD (BreadcrumbList)" })
|
|
555
542
|
});
|
|
556
543
|
const NewsWidgetSchema = z.object({
|
|
557
|
-
...
|
|
544
|
+
...blockBase2,
|
|
558
545
|
_type: z.literal("newsWidget"),
|
|
559
546
|
heading: z.optional(shortText),
|
|
560
547
|
limit: z._default(z.int().check(z.minimum(1)).check(z.maximum(12)), 5),
|
|
@@ -562,7 +549,7 @@ const NewsWidgetSchema = z.object({
|
|
|
562
549
|
showImages: z._default(z.boolean(), false)
|
|
563
550
|
});
|
|
564
551
|
const AgendaWidgetSchema = z.object({
|
|
565
|
-
...
|
|
552
|
+
...blockBase2,
|
|
566
553
|
_type: z.literal("agendaWidget"),
|
|
567
554
|
heading: z.optional(shortText),
|
|
568
555
|
limit: z._default(z.int().check(z.minimum(1)).check(z.maximum(12)), 5),
|
|
@@ -576,14 +563,14 @@ const AgendaWidgetSchema = z.object({
|
|
|
576
563
|
hidePast: z._default(z.boolean(), true)
|
|
577
564
|
});
|
|
578
565
|
const OpeningHoursWidgetSchema = z.object({
|
|
579
|
-
...
|
|
566
|
+
...blockBase2,
|
|
580
567
|
_type: z.literal("openingHoursWidget"),
|
|
581
568
|
heading: z.optional(shortText),
|
|
582
569
|
rows: z._default(z.array(z.object({ day: z._default(shortText, ""), hours: z._default(shortText, "") })).check(z.maxLength(14)), []),
|
|
583
570
|
highlightToday: z._default(z.boolean(), true)
|
|
584
571
|
});
|
|
585
572
|
const ContactWidgetSchema = z.object({
|
|
586
|
-
...
|
|
573
|
+
...blockBase2,
|
|
587
574
|
_type: z.literal("contactWidget"),
|
|
588
575
|
heading: z.optional(shortText),
|
|
589
576
|
address: z.optional(shortText),
|
|
@@ -591,13 +578,13 @@ const ContactWidgetSchema = z.object({
|
|
|
591
578
|
email: z.optional(z.string().check(z.maxLength(320)))
|
|
592
579
|
});
|
|
593
580
|
const SocialWidgetSchema = z.object({
|
|
594
|
-
...
|
|
581
|
+
...blockBase2,
|
|
595
582
|
_type: z.literal("socialWidget"),
|
|
596
583
|
heading: z.optional(shortText),
|
|
597
584
|
items: z._default(z.array(z.object({ platform: z._default(shortText, ""), href: z._default(z.string().check(z.maxLength(2e3)), "") })).check(z.maxLength(12)), [])
|
|
598
585
|
});
|
|
599
586
|
const NewsletterWidgetSchema = z.object({
|
|
600
|
-
...
|
|
587
|
+
...blockBase2,
|
|
601
588
|
_type: z.literal("newsletterWidget"),
|
|
602
589
|
heading: z.optional(shortText),
|
|
603
590
|
text: z.optional(shortText),
|
|
@@ -605,7 +592,7 @@ const NewsletterWidgetSchema = z.object({
|
|
|
605
592
|
actionUrl: z.optional(z.string().check(z.maxLength(2e3)))
|
|
606
593
|
});
|
|
607
594
|
const CtaWidgetSchema = z.object({
|
|
608
|
-
...
|
|
595
|
+
...blockBase2,
|
|
609
596
|
_type: z.literal("ctaWidget"),
|
|
610
597
|
title: z._default(shortText, ""),
|
|
611
598
|
text: z.optional(shortText),
|
|
@@ -614,40 +601,40 @@ const CtaWidgetSchema = z.object({
|
|
|
614
601
|
backgroundColor: z.optional(z.string().check(z.maxLength(40)))
|
|
615
602
|
});
|
|
616
603
|
const GalleryWidgetSchema = z.object({
|
|
617
|
-
...
|
|
604
|
+
...blockBase2,
|
|
618
605
|
_type: z.literal("galleryWidget"),
|
|
619
606
|
heading: z.optional(shortText),
|
|
620
607
|
items: z._default(z.array(z.object({ url: z.optional(z.string().check(z.maxLength(2e3))), alt: z._default(shortText, "") })).check(z.maxLength(24)), []),
|
|
621
608
|
columns: z._default(z.int().check(z.minimum(2)).check(z.maximum(4)), 3)
|
|
622
609
|
});
|
|
623
610
|
const TestimonialsWidgetSchema = z.object({
|
|
624
|
-
...
|
|
611
|
+
...blockBase2,
|
|
625
612
|
_type: z.literal("testimonialsWidget"),
|
|
626
613
|
heading: z.optional(shortText),
|
|
627
614
|
items: z._default(z.array(z.object({ quote: z._default(shortText, ""), author: z._default(shortText, ""), rating: z.optional(z.int().check(z.minimum(1)).check(z.maximum(5))) })).check(z.maxLength(20)), [])
|
|
628
615
|
});
|
|
629
616
|
const CardsWidgetSchema = z.object({
|
|
630
|
-
...
|
|
617
|
+
...blockBase2,
|
|
631
618
|
_type: z.literal("cardsWidget"),
|
|
632
619
|
heading: z.optional(shortText),
|
|
633
620
|
items: z._default(z.array(z.object({ icon: z.optional(shortText), title: z._default(shortText, ""), text: z.optional(shortText), href: z.optional(z.string().check(z.maxLength(2e3))) })).check(z.maxLength(10)), [])
|
|
634
621
|
});
|
|
635
622
|
const DownloadsWidgetSchema = z.object({
|
|
636
|
-
...
|
|
623
|
+
...blockBase2,
|
|
637
624
|
_type: z.literal("downloadsWidget"),
|
|
638
625
|
heading: z.optional(shortText),
|
|
639
626
|
limit: z._default(z.int().check(z.minimum(1)).check(z.maximum(12)), 5),
|
|
640
627
|
items: z._default(z.array(z.object({ label: z._default(shortText, ""), href: z._default(z.string().check(z.maxLength(2e3)), ""), meta: z.optional(shortText) })).check(z.maxLength(60)), [])
|
|
641
628
|
});
|
|
642
629
|
const CountdownWidgetSchema = z.object({
|
|
643
|
-
...
|
|
630
|
+
...blockBase2,
|
|
644
631
|
_type: z.literal("countdownWidget"),
|
|
645
632
|
heading: z.optional(shortText),
|
|
646
633
|
target: z._default(z.string().check(z.maxLength(40)), ""),
|
|
647
634
|
expiredText: z._default(shortText, "Het is zover!")
|
|
648
635
|
});
|
|
649
636
|
const SymbolRefBlockSchema = z.object({
|
|
650
|
-
...
|
|
637
|
+
...blockBase2,
|
|
651
638
|
_type: z.literal("symbolRef"),
|
|
652
639
|
// Leeg = nog geen symbool gekozen (vers blok); render en server-expansie slaan dat stil over.
|
|
653
640
|
symbolId: z._default(z.string().check(z.maxLength(120)), "").register(z.globalRegistry, { description: "Symbool" })
|
|
@@ -714,7 +701,7 @@ const BuiltinBlockSchema = z.discriminatedUnion("_type", [
|
|
|
714
701
|
DownloadsWidgetSchema,
|
|
715
702
|
CountdownWidgetSchema
|
|
716
703
|
]);
|
|
717
|
-
const AnyBlockSchema = z.union([BuiltinBlockSchema,
|
|
704
|
+
const AnyBlockSchema = z.union([BuiltinBlockSchema, BlockBaseSchema2]);
|
|
718
705
|
export {
|
|
719
706
|
AccordionBlockSchema,
|
|
720
707
|
AgendaBlockSchema,
|