@xiwebdesign/xicms-core 7.12.1 → 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.
Files changed (127) hide show
  1. package/dist/admin/AdminApp.js +2 -0
  2. package/dist/admin/AdminApp.js.map +1 -1
  3. package/dist/admin/lib/zodFields.d.ts +2 -2
  4. package/dist/admin/lib/zodFields.js +2 -0
  5. package/dist/admin/lib/zodFields.js.map +1 -1
  6. package/dist/admin/ui/toast.d.ts +4 -0
  7. package/dist/admin/ui/toast.js +9 -3
  8. package/dist/admin/ui/toast.js.map +1 -1
  9. package/dist/admin/visual/VisualEditor.js +32 -2
  10. package/dist/admin/visual/VisualEditor.js.map +1 -1
  11. package/dist/blocks/builtinSchemas.d.ts +23 -0
  12. package/dist/blocks/builtinSchemas.js +138 -0
  13. package/dist/blocks/builtinSchemas.js.map +1 -0
  14. package/dist/blocks/builtins/Accordion.js +0 -2
  15. package/dist/blocks/builtins/Accordion.js.map +1 -1
  16. package/dist/blocks/builtins/Agenda.js +0 -2
  17. package/dist/blocks/builtins/Agenda.js.map +1 -1
  18. package/dist/blocks/builtins/Banner.js +0 -2
  19. package/dist/blocks/builtins/Banner.js.map +1 -1
  20. package/dist/blocks/builtins/BeforeAfter.js +0 -2
  21. package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
  22. package/dist/blocks/builtins/Booking.js +0 -2
  23. package/dist/blocks/builtins/Booking.js.map +1 -1
  24. package/dist/blocks/builtins/Breadcrumbs.js +0 -2
  25. package/dist/blocks/builtins/Breadcrumbs.js.map +1 -1
  26. package/dist/blocks/builtins/Cards.js +0 -2
  27. package/dist/blocks/builtins/Cards.js.map +1 -1
  28. package/dist/blocks/builtins/Columns.js +0 -2
  29. package/dist/blocks/builtins/Columns.js.map +1 -1
  30. package/dist/blocks/builtins/Contact.d.ts +1 -1
  31. package/dist/blocks/builtins/Contact.js +0 -3
  32. package/dist/blocks/builtins/Contact.js.map +1 -1
  33. package/dist/blocks/builtins/Countdown.js +0 -2
  34. package/dist/blocks/builtins/Countdown.js.map +1 -1
  35. package/dist/blocks/builtins/Cta.js +0 -2
  36. package/dist/blocks/builtins/Cta.js.map +1 -1
  37. package/dist/blocks/builtins/Downloads.js +0 -2
  38. package/dist/blocks/builtins/Downloads.js.map +1 -1
  39. package/dist/blocks/builtins/Elements.js +0 -4
  40. package/dist/blocks/builtins/Elements.js.map +1 -1
  41. package/dist/blocks/builtins/Embed.js +0 -2
  42. package/dist/blocks/builtins/Embed.js.map +1 -1
  43. package/dist/blocks/builtins/Faq.js +0 -2
  44. package/dist/blocks/builtins/Faq.js.map +1 -1
  45. package/dist/blocks/builtins/FormBlock.js +0 -2
  46. package/dist/blocks/builtins/FormBlock.js.map +1 -1
  47. package/dist/blocks/builtins/Gallery.d.ts +1 -1
  48. package/dist/blocks/builtins/Gallery.js +0 -2
  49. package/dist/blocks/builtins/Gallery.js.map +1 -1
  50. package/dist/blocks/builtins/Hero.js +0 -2
  51. package/dist/blocks/builtins/Hero.js.map +1 -1
  52. package/dist/blocks/builtins/ImageBlock.js +0 -2
  53. package/dist/blocks/builtins/ImageBlock.js.map +1 -1
  54. package/dist/blocks/builtins/Jobs.d.ts +1 -1
  55. package/dist/blocks/builtins/Jobs.js +0 -2
  56. package/dist/blocks/builtins/Jobs.js.map +1 -1
  57. package/dist/blocks/builtins/Layout.js +0 -3
  58. package/dist/blocks/builtins/Layout.js.map +1 -1
  59. package/dist/blocks/builtins/MapBlock.js +0 -2
  60. package/dist/blocks/builtins/MapBlock.js.map +1 -1
  61. package/dist/blocks/builtins/NewsListBlock.js +0 -2
  62. package/dist/blocks/builtins/NewsListBlock.js.map +1 -1
  63. package/dist/blocks/builtins/Newsletter.js +0 -2
  64. package/dist/blocks/builtins/Newsletter.js.map +1 -1
  65. package/dist/blocks/builtins/OpeningHours.js +0 -2
  66. package/dist/blocks/builtins/OpeningHours.js.map +1 -1
  67. package/dist/blocks/builtins/PdfBlock.js +0 -2
  68. package/dist/blocks/builtins/PdfBlock.js.map +1 -1
  69. package/dist/blocks/builtins/Portfolio.js +0 -2
  70. package/dist/blocks/builtins/Portfolio.js.map +1 -1
  71. package/dist/blocks/builtins/Pricing.d.ts +1 -1
  72. package/dist/blocks/builtins/Pricing.js +0 -2
  73. package/dist/blocks/builtins/Pricing.js.map +1 -1
  74. package/dist/blocks/builtins/RichTextBlock.js +0 -2
  75. package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
  76. package/dist/blocks/builtins/Search.js +0 -2
  77. package/dist/blocks/builtins/Search.js.map +1 -1
  78. package/dist/blocks/builtins/Sections.js +0 -10
  79. package/dist/blocks/builtins/Sections.js.map +1 -1
  80. package/dist/blocks/builtins/Slider.js +0 -2
  81. package/dist/blocks/builtins/Slider.js.map +1 -1
  82. package/dist/blocks/builtins/Spacer.js +0 -2
  83. package/dist/blocks/builtins/Spacer.js.map +1 -1
  84. package/dist/blocks/builtins/SymbolRef.js +3 -5
  85. package/dist/blocks/builtins/SymbolRef.js.map +1 -1
  86. package/dist/blocks/builtins/Team.js +0 -2
  87. package/dist/blocks/builtins/Team.js.map +1 -1
  88. package/dist/blocks/builtins/Testimonials.d.ts +1 -1
  89. package/dist/blocks/builtins/Testimonials.js +0 -2
  90. package/dist/blocks/builtins/Testimonials.js.map +1 -1
  91. package/dist/blocks/builtins/Video.d.ts +1 -1
  92. package/dist/blocks/builtins/Video.js +0 -2
  93. package/dist/blocks/builtins/Video.js.map +1 -1
  94. package/dist/blocks/builtins/WhatsappChat.js +0 -2
  95. package/dist/blocks/builtins/WhatsappChat.js.map +1 -1
  96. package/dist/blocks/builtins/Widgets.js +0 -26
  97. package/dist/blocks/builtins/Widgets.js.map +1 -1
  98. package/dist/blocks/customTemplate/definition.js +1 -1
  99. package/dist/blocks/customTemplate/definition.js.map +1 -1
  100. package/dist/blocks/registry.d.ts +24 -13
  101. package/dist/blocks/registry.js +15 -4
  102. package/dist/blocks/registry.js.map +1 -1
  103. package/dist/media/ImageContext.js +24 -1
  104. package/dist/media/ImageContext.js.map +1 -1
  105. package/dist/schema/blockBase.d.ts +99 -0
  106. package/dist/schema/blockBase.js +22 -0
  107. package/dist/schema/blockBase.js.map +1 -0
  108. package/dist/schema/blocks.d.ts +1 -91
  109. package/dist/schema/blocks.js +64 -77
  110. package/dist/schema/blocks.js.map +1 -1
  111. package/dist/schema/pages.js +1 -1
  112. package/dist/schema/pages.js.map +1 -1
  113. package/dist/schema/shop.js +1 -1
  114. package/dist/schema/shop.js.map +1 -1
  115. package/dist/schema/symbols.js +1 -1
  116. package/dist/schema/symbols.js.map +1 -1
  117. package/dist/server/blockData.js +14 -1
  118. package/dist/server/blockData.js.map +1 -1
  119. package/dist/server/index.d.ts +1 -1
  120. package/dist/server/index.js +2 -1
  121. package/dist/server/index.js.map +1 -1
  122. package/dist/server/pages.d.ts +16 -0
  123. package/dist/server/pages.js +9 -0
  124. package/dist/server/pages.js.map +1 -1
  125. package/dist/styles.css +45 -0
  126. package/dist/version.js +1 -1
  127. package/package.json +1 -1
@@ -1,19 +1,6 @@
1
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)) });
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
- ...blockBase,
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
- ...blockBase,
39
+ ...blockBase2,
53
40
  _type: z.literal("richText"),
54
41
  html: z._default(richText, "")
55
42
  });
56
43
  const ImageBlockSchema = z.object({
57
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
400
+ ...blockBase2,
414
401
  _type: z.literal("columns"),
415
- columns: z._default(z.array(z.object({ blocks: z._default(z.array(BlockBaseSchema).check(z.maxLength(50)), []) })).check(z.minLength(1)).check(z.maxLength(4)), [])
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
- ...blockBase,
405
+ ...blockBase2,
419
406
  _type: z.literal("withSidebar"),
420
- main: z._default(z.array(BlockBaseSchema).check(z.maxLength(50)), []),
421
- aside: z._default(z.array(BlockBaseSchema).check(z.maxLength(30)), []),
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
- ...blockBase,
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(BlockBaseSchema).check(z.maxLength(30)), []) })).check(z.minLength(1)).check(z.maxLength(10)), [])
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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
- ...blockBase,
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, BlockBaseSchema]);
704
+ const AnyBlockSchema = z.union([BuiltinBlockSchema, BlockBaseSchema2]);
718
705
  export {
719
706
  AccordionBlockSchema,
720
707
  AgendaBlockSchema,