@xiwebdesign/xicms-core 7.31.0 → 8.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/dist/XiCMSProvider.js +23 -7
  2. package/dist/XiCMSProvider.js.map +1 -1
  3. package/dist/admin/AdminApp.js +175 -93
  4. package/dist/admin/AdminApp.js.map +1 -1
  5. package/dist/admin/AdminHelp.d.ts +1 -1
  6. package/dist/admin/AdminHelp.js +44 -36
  7. package/dist/admin/AdminHelp.js.map +1 -1
  8. package/dist/admin/CoreVersion.d.ts +6 -3
  9. package/dist/admin/CoreVersion.js +60 -24
  10. package/dist/admin/CoreVersion.js.map +1 -1
  11. package/dist/admin/NewsEditor.d.ts +7 -0
  12. package/dist/admin/NewsEditor.js +117 -75
  13. package/dist/admin/NewsEditor.js.map +1 -1
  14. package/dist/admin/SuperadminPanel.js +1 -1
  15. package/dist/admin/SuperadminPanel.js.map +1 -1
  16. package/dist/admin/ZoekPalet.d.ts +15 -0
  17. package/dist/admin/ZoekPalet.js +123 -0
  18. package/dist/admin/ZoekPalet.js.map +1 -0
  19. package/dist/admin/blockEditors/GenericEditor.js +36 -18
  20. package/dist/admin/blockEditors/GenericEditor.js.map +1 -1
  21. package/dist/admin/blockEditors/StyleEditor.js +37 -3
  22. package/dist/admin/blockEditors/StyleEditor.js.map +1 -1
  23. package/dist/admin/blockEditors/SymbolRefEditor.js +44 -2
  24. package/dist/admin/blockEditors/SymbolRefEditor.js.map +1 -1
  25. package/dist/admin/blockEditors/index.js +154 -73
  26. package/dist/admin/blockEditors/index.js.map +1 -1
  27. package/dist/admin/customBlocks/CustomBlocksPanel.js +18 -7
  28. package/dist/admin/customBlocks/CustomBlocksPanel.js.map +1 -1
  29. package/dist/admin/dashboard/DashboardPanel.js +26 -16
  30. package/dist/admin/dashboard/DashboardPanel.js.map +1 -1
  31. package/dist/admin/editors/RichTextEditor.d.ts +4 -3
  32. package/dist/admin/editors/RichTextEditor.js +19 -60
  33. package/dist/admin/editors/RichTextEditor.js.map +1 -1
  34. package/dist/admin/editors/fontSizeExtension.js +7 -1
  35. package/dist/admin/editors/fontSizeExtension.js.map +1 -1
  36. package/dist/admin/editors/slashMenu.d.ts +18 -0
  37. package/dist/admin/editors/slashMenu.js +34 -0
  38. package/dist/admin/editors/slashMenu.js.map +1 -0
  39. package/dist/admin/editors/useRijkeTekst.d.ts +48 -0
  40. package/dist/admin/editors/useRijkeTekst.js +310 -0
  41. package/dist/admin/editors/useRijkeTekst.js.map +1 -0
  42. package/dist/admin/forms/FormsPanel.d.ts +11 -2
  43. package/dist/admin/forms/FormsPanel.js +218 -65
  44. package/dist/admin/forms/FormsPanel.js.map +1 -1
  45. package/dist/admin/lib/blokInfo.d.ts +17 -0
  46. package/dist/admin/lib/blokInfo.js +80 -0
  47. package/dist/admin/lib/blokInfo.js.map +1 -0
  48. package/dist/admin/lib/foutNaarMens.d.ts +1 -0
  49. package/dist/admin/lib/foutNaarMens.js +22 -0
  50. package/dist/admin/lib/foutNaarMens.js.map +1 -0
  51. package/dist/admin/lib/gewisteVelden.d.ts +13 -0
  52. package/dist/admin/lib/gewisteVelden.js +31 -0
  53. package/dist/admin/lib/gewisteVelden.js.map +1 -0
  54. package/dist/admin/lib/heroHulp.d.ts +11 -0
  55. package/dist/admin/lib/heroHulp.js +18 -0
  56. package/dist/admin/lib/heroHulp.js.map +1 -0
  57. package/dist/admin/lib/kleur.js +2 -3
  58. package/dist/admin/lib/kleur.js.map +1 -1
  59. package/dist/admin/lib/leesbaarheid.d.ts +34 -0
  60. package/dist/admin/lib/leesbaarheid.js +82 -0
  61. package/dist/admin/lib/leesbaarheid.js.map +1 -0
  62. package/dist/admin/lib/lengteAdvies.d.ts +1 -0
  63. package/dist/admin/lib/lengteAdvies.js +16 -0
  64. package/dist/admin/lib/lengteAdvies.js.map +1 -0
  65. package/dist/admin/lib/mediaLijst.d.ts +26 -0
  66. package/dist/admin/lib/mediaLijst.js +42 -0
  67. package/dist/admin/lib/mediaLijst.js.map +1 -0
  68. package/dist/admin/lib/mediaUsage.d.ts +12 -1
  69. package/dist/admin/lib/mediaUsage.js +43 -33
  70. package/dist/admin/lib/mediaUsage.js.map +1 -1
  71. package/dist/admin/lib/menuHulp.d.ts +16 -0
  72. package/dist/admin/lib/menuHulp.js +41 -0
  73. package/dist/admin/lib/menuHulp.js.map +1 -0
  74. package/dist/admin/lib/onopgeslagen.d.ts +10 -0
  75. package/dist/admin/lib/onopgeslagen.js +35 -0
  76. package/dist/admin/lib/onopgeslagen.js.map +1 -0
  77. package/dist/admin/lib/pagesClient.d.ts +55 -2
  78. package/dist/admin/lib/pagesClient.js +126 -28
  79. package/dist/admin/lib/pagesClient.js.map +1 -1
  80. package/dist/admin/lib/paginaGebruik.d.ts +56 -0
  81. package/dist/admin/lib/paginaGebruik.js +109 -0
  82. package/dist/admin/lib/paginaGebruik.js.map +1 -0
  83. package/dist/admin/lib/publicatieCheck.d.ts +25 -0
  84. package/dist/admin/lib/publicatieCheck.js +114 -0
  85. package/dist/admin/lib/publicatieCheck.js.map +1 -0
  86. package/dist/admin/lib/scrollNaarDetail.d.ts +6 -0
  87. package/dist/admin/lib/scrollNaarDetail.js +20 -0
  88. package/dist/admin/lib/scrollNaarDetail.js.map +1 -0
  89. package/dist/admin/lib/symbolsClient.d.ts +10 -0
  90. package/dist/admin/lib/symbolsClient.js +14 -1
  91. package/dist/admin/lib/symbolsClient.js.map +1 -1
  92. package/dist/admin/lib/tekstVeld.d.ts +8 -0
  93. package/dist/admin/lib/tekstVeld.js +10 -0
  94. package/dist/admin/lib/tekstVeld.js.map +1 -0
  95. package/dist/admin/lib/useIsSuperadmin.d.ts +2 -0
  96. package/dist/admin/lib/useIsSuperadmin.js +13 -0
  97. package/dist/admin/lib/useIsSuperadmin.js.map +1 -0
  98. package/dist/admin/lib/veldTaal.d.ts +14 -0
  99. package/dist/admin/lib/veldTaal.js +248 -0
  100. package/dist/admin/lib/veldTaal.js.map +1 -0
  101. package/dist/admin/lib/versieVergelijk.d.ts +17 -0
  102. package/dist/admin/lib/versieVergelijk.js +24 -0
  103. package/dist/admin/lib/versieVergelijk.js.map +1 -0
  104. package/dist/admin/lib/zodFields.js +22 -4
  105. package/dist/admin/lib/zodFields.js.map +1 -1
  106. package/dist/admin/lib/zodFout.d.ts +9 -0
  107. package/dist/admin/lib/zodFout.js +63 -0
  108. package/dist/admin/lib/zodFout.js.map +1 -0
  109. package/dist/admin/media/MediaManager.js +162 -32
  110. package/dist/admin/media/MediaManager.js.map +1 -1
  111. package/dist/admin/media/MediaPicker.d.ts +3 -0
  112. package/dist/admin/media/MediaPicker.js +84 -31
  113. package/dist/admin/media/MediaPicker.js.map +1 -1
  114. package/dist/admin/menu/MenuPanel.js +144 -83
  115. package/dist/admin/menu/MenuPanel.js.map +1 -1
  116. package/dist/admin/navContext.d.ts +3 -0
  117. package/dist/admin/navContext.js +13 -1
  118. package/dist/admin/navContext.js.map +1 -1
  119. package/dist/admin/pages/PageEditor.js +146 -30
  120. package/dist/admin/pages/PageEditor.js.map +1 -1
  121. package/dist/admin/pages/PagesPanel.js +215 -61
  122. package/dist/admin/pages/PagesPanel.js.map +1 -1
  123. package/dist/admin/pages/StarterKiezer.d.ts +12 -0
  124. package/dist/admin/pages/StarterKiezer.js +113 -0
  125. package/dist/admin/pages/StarterKiezer.js.map +1 -0
  126. package/dist/admin/panelRegistry.d.ts +1 -1
  127. package/dist/admin/panelRegistry.js +2 -1
  128. package/dist/admin/panelRegistry.js.map +1 -1
  129. package/dist/admin/patterns/PatternInserter.js +1 -1
  130. package/dist/admin/patterns/PatternInserter.js.map +1 -1
  131. package/dist/admin/settings/BedrijfInstellingen.d.ts +20 -0
  132. package/dist/admin/settings/BedrijfInstellingen.js +159 -0
  133. package/dist/admin/settings/BedrijfInstellingen.js.map +1 -0
  134. package/dist/admin/settings/MailTemplates.js +5 -4
  135. package/dist/admin/settings/MailTemplates.js.map +1 -1
  136. package/dist/admin/settings/SettingsPanel.js +120 -78
  137. package/dist/admin/settings/SettingsPanel.js.map +1 -1
  138. package/dist/admin/settings/SnapshotsCard.js +4 -4
  139. package/dist/admin/settings/SnapshotsCard.js.map +1 -1
  140. package/dist/admin/settings/VorigeTerugzetten.d.ts +15 -0
  141. package/dist/admin/settings/VorigeTerugzetten.js +89 -0
  142. package/dist/admin/settings/VorigeTerugzetten.js.map +1 -0
  143. package/dist/admin/shop/CategoriesTab.js +6 -4
  144. package/dist/admin/shop/CategoriesTab.js.map +1 -1
  145. package/dist/admin/shop/DiscountsTab.js +4 -2
  146. package/dist/admin/shop/DiscountsTab.js.map +1 -1
  147. package/dist/admin/shop/OrdersTab.js +57 -19
  148. package/dist/admin/shop/OrdersTab.js.map +1 -1
  149. package/dist/admin/shop/ProductPaneel.js +2 -1
  150. package/dist/admin/shop/ProductPaneel.js.map +1 -1
  151. package/dist/admin/shop/ProductsTab.js +40 -19
  152. package/dist/admin/shop/ProductsTab.js.map +1 -1
  153. package/dist/admin/shop/ShopPanel.js +13 -1
  154. package/dist/admin/shop/ShopPanel.js.map +1 -1
  155. package/dist/admin/shop/ShopSettingsTab.js +56 -17
  156. package/dist/admin/shop/ShopSettingsTab.js.map +1 -1
  157. package/dist/admin/shop/productClient.js +7 -3
  158. package/dist/admin/shop/productClient.js.map +1 -1
  159. package/dist/admin/stats/NietGevonden.d.ts +10 -0
  160. package/dist/admin/stats/NietGevonden.js +78 -0
  161. package/dist/admin/stats/NietGevonden.js.map +1 -0
  162. package/dist/admin/stats/StatsPanel.js +6 -1
  163. package/dist/admin/stats/StatsPanel.js.map +1 -1
  164. package/dist/admin/stats/lib.d.ts +2 -0
  165. package/dist/admin/stats/lib.js.map +1 -1
  166. package/dist/admin/ui/ConfirmDialog.js +10 -1
  167. package/dist/admin/ui/ConfirmDialog.js.map +1 -1
  168. package/dist/admin/ui/Icon.d.ts +34 -0
  169. package/dist/admin/ui/Icon.js +44 -0
  170. package/dist/admin/ui/Icon.js.map +1 -0
  171. package/dist/admin/ui/ImageField.d.ts +15 -0
  172. package/dist/admin/ui/ImageField.js +67 -0
  173. package/dist/admin/ui/ImageField.js.map +1 -0
  174. package/dist/admin/ui/KleurVeld.d.ts +25 -0
  175. package/dist/admin/ui/KleurVeld.js +76 -0
  176. package/dist/admin/ui/KleurVeld.js.map +1 -0
  177. package/dist/admin/ui/LaadStaat.d.ts +21 -0
  178. package/dist/admin/ui/LaadStaat.js +43 -0
  179. package/dist/admin/ui/LaadStaat.js.map +1 -0
  180. package/dist/admin/ui/LeesbaarheidPaneel.d.ts +10 -0
  181. package/dist/admin/ui/LeesbaarheidPaneel.js +68 -0
  182. package/dist/admin/ui/LeesbaarheidPaneel.js.map +1 -0
  183. package/dist/admin/ui/LinkDialog.d.ts +22 -0
  184. package/dist/admin/ui/LinkDialog.js +131 -0
  185. package/dist/admin/ui/LinkDialog.js.map +1 -0
  186. package/dist/admin/ui/LinkVeld.d.ts +14 -0
  187. package/dist/admin/ui/LinkVeld.js +49 -0
  188. package/dist/admin/ui/LinkVeld.js.map +1 -0
  189. package/dist/admin/ui/PreviewLinkResultaat.d.ts +14 -0
  190. package/dist/admin/ui/PreviewLinkResultaat.js +52 -0
  191. package/dist/admin/ui/PreviewLinkResultaat.js.map +1 -0
  192. package/dist/admin/ui/charts.js +5 -5
  193. package/dist/admin/ui/charts.js.map +1 -1
  194. package/dist/admin/ui/primitives.d.ts +16 -6
  195. package/dist/admin/ui/primitives.js +98 -26
  196. package/dist/admin/ui/primitives.js.map +1 -1
  197. package/dist/admin/ui/select.js +5 -2
  198. package/dist/admin/ui/select.js.map +1 -1
  199. package/dist/admin/ui/switch.d.ts +3 -1
  200. package/dist/admin/ui/switch.js +6 -3
  201. package/dist/admin/ui/switch.js.map +1 -1
  202. package/dist/admin/ui/toast.d.ts +2 -1
  203. package/dist/admin/ui/toast.js +17 -11
  204. package/dist/admin/ui/toast.js.map +1 -1
  205. package/dist/admin/visual/BlokKiezer.d.ts +34 -0
  206. package/dist/admin/visual/BlokKiezer.js +225 -0
  207. package/dist/admin/visual/BlokKiezer.js.map +1 -0
  208. package/dist/admin/visual/InlineGereedschap.d.ts +52 -0
  209. package/dist/admin/visual/InlineGereedschap.js +356 -0
  210. package/dist/admin/visual/InlineGereedschap.js.map +1 -0
  211. package/dist/admin/visual/InlineRijkeTekst.d.ts +23 -0
  212. package/dist/admin/visual/InlineRijkeTekst.js +152 -0
  213. package/dist/admin/visual/InlineRijkeTekst.js.map +1 -0
  214. package/dist/admin/visual/VisualEditor.js +273 -125
  215. package/dist/admin/visual/VisualEditor.js.map +1 -1
  216. package/dist/admin.css +1 -1
  217. package/dist/auth/AuthProvider.js +1 -0
  218. package/dist/auth/AuthProvider.js.map +1 -1
  219. package/dist/bedrijf/bedrijf.d.ts +44 -0
  220. package/dist/bedrijf/bedrijf.js +125 -0
  221. package/dist/bedrijf/bedrijf.js.map +1 -0
  222. package/dist/blocks/BlockRenderer.js +11 -1
  223. package/dist/blocks/BlockRenderer.js.map +1 -1
  224. package/dist/blocks/blockStyle.d.ts +7 -0
  225. package/dist/blocks/blockStyle.js +16 -3
  226. package/dist/blocks/blockStyle.js.map +1 -1
  227. package/dist/blocks/builtinSchemas.js +6 -0
  228. package/dist/blocks/builtinSchemas.js.map +1 -1
  229. package/dist/blocks/builtins/AgendaRender.d.ts +22 -0
  230. package/dist/blocks/builtins/AgendaRender.js +69 -9
  231. package/dist/blocks/builtins/AgendaRender.js.map +1 -1
  232. package/dist/blocks/builtins/Availability.d.ts +1 -0
  233. package/dist/blocks/builtins/Availability.js +23 -0
  234. package/dist/blocks/builtins/Availability.js.map +1 -0
  235. package/dist/blocks/builtins/AvailabilityRender.d.ts +12 -0
  236. package/dist/blocks/builtins/AvailabilityRender.js +105 -0
  237. package/dist/blocks/builtins/AvailabilityRender.js.map +1 -0
  238. package/dist/blocks/builtins/BeforeAfterRender.js +4 -3
  239. package/dist/blocks/builtins/BeforeAfterRender.js.map +1 -1
  240. package/dist/blocks/builtins/Booking.js +1 -1
  241. package/dist/blocks/builtins/Booking.js.map +1 -1
  242. package/dist/blocks/builtins/BreadcrumbsRender.d.ts +4 -3
  243. package/dist/blocks/builtins/BreadcrumbsRender.js +14 -8
  244. package/dist/blocks/builtins/BreadcrumbsRender.js.map +1 -1
  245. package/dist/blocks/builtins/ColumnsRender.d.ts +1 -1
  246. package/dist/blocks/builtins/ColumnsRender.js +3 -1
  247. package/dist/blocks/builtins/ColumnsRender.js.map +1 -1
  248. package/dist/blocks/builtins/Contact.js +1 -1
  249. package/dist/blocks/builtins/Contact.js.map +1 -1
  250. package/dist/blocks/builtins/ContactRender.d.ts +1 -1
  251. package/dist/blocks/builtins/ContactRender.js +37 -8
  252. package/dist/blocks/builtins/ContactRender.js.map +1 -1
  253. package/dist/blocks/builtins/Cta.js +1 -1
  254. package/dist/blocks/builtins/Cta.js.map +1 -1
  255. package/dist/blocks/builtins/CtaRender.d.ts +1 -1
  256. package/dist/blocks/builtins/CtaRender.js +5 -4
  257. package/dist/blocks/builtins/CtaRender.js.map +1 -1
  258. package/dist/blocks/builtins/Embed.js +1 -1
  259. package/dist/blocks/builtins/Embed.js.map +1 -1
  260. package/dist/blocks/builtins/FormBlock.js +1 -0
  261. package/dist/blocks/builtins/FormBlock.js.map +1 -1
  262. package/dist/blocks/builtins/FormBlockRender.d.ts +6 -0
  263. package/dist/blocks/builtins/FormBlockRender.js +88 -16
  264. package/dist/blocks/builtins/FormBlockRender.js.map +1 -1
  265. package/dist/blocks/builtins/GalleryRender.js +3 -2
  266. package/dist/blocks/builtins/GalleryRender.js.map +1 -1
  267. package/dist/blocks/builtins/Hero.js +1 -1
  268. package/dist/blocks/builtins/Hero.js.map +1 -1
  269. package/dist/blocks/builtins/HeroRender.js +7 -3
  270. package/dist/blocks/builtins/HeroRender.js.map +1 -1
  271. package/dist/blocks/builtins/OpenNowBadge.d.ts +4 -2
  272. package/dist/blocks/builtins/OpenNowBadge.js +6 -6
  273. package/dist/blocks/builtins/OpenNowBadge.js.map +1 -1
  274. package/dist/blocks/builtins/OpeningHoursRender.d.ts +8 -2
  275. package/dist/blocks/builtins/OpeningHoursRender.js +27 -6
  276. package/dist/blocks/builtins/OpeningHoursRender.js.map +1 -1
  277. package/dist/blocks/builtins/PriceList.d.ts +1 -0
  278. package/dist/blocks/builtins/PriceList.js +25 -0
  279. package/dist/blocks/builtins/PriceList.js.map +1 -0
  280. package/dist/blocks/builtins/PriceListRender.d.ts +17 -0
  281. package/dist/blocks/builtins/PriceListRender.js +87 -0
  282. package/dist/blocks/builtins/PriceListRender.js.map +1 -0
  283. package/dist/blocks/builtins/RichTextBlockRender.js +6 -1
  284. package/dist/blocks/builtins/RichTextBlockRender.js.map +1 -1
  285. package/dist/blocks/builtins/SectionHeading.d.ts +1 -0
  286. package/dist/blocks/builtins/SectionHeading.js +14 -0
  287. package/dist/blocks/builtins/SectionHeading.js.map +1 -0
  288. package/dist/blocks/builtins/SectionHeadingRender.d.ts +7 -0
  289. package/dist/blocks/builtins/SectionHeadingRender.js +14 -0
  290. package/dist/blocks/builtins/SectionHeadingRender.js.map +1 -0
  291. package/dist/blocks/builtins/SliderRender.js +3 -2
  292. package/dist/blocks/builtins/SliderRender.js.map +1 -1
  293. package/dist/blocks/builtins/SymbolRef.js +1 -1
  294. package/dist/blocks/builtins/SymbolRef.js.map +1 -1
  295. package/dist/blocks/builtins/TeamRender.js +6 -1
  296. package/dist/blocks/builtins/TeamRender.js.map +1 -1
  297. package/dist/blocks/builtins/Testimonials.js +3 -1
  298. package/dist/blocks/builtins/Testimonials.js.map +1 -1
  299. package/dist/blocks/builtins/TestimonialsRender.js +4 -0
  300. package/dist/blocks/builtins/TestimonialsRender.js.map +1 -1
  301. package/dist/blocks/builtins/WhatsappChatRender.d.ts +1 -1
  302. package/dist/blocks/builtins/WhatsappChatRender.js +3 -1
  303. package/dist/blocks/builtins/WhatsappChatRender.js.map +1 -1
  304. package/dist/blocks/builtins/Widgets.js +2 -2
  305. package/dist/blocks/builtins/Widgets.js.map +1 -1
  306. package/dist/blocks/builtins/WidgetsRender.js +3 -1
  307. package/dist/blocks/builtins/WidgetsRender.js.map +1 -1
  308. package/dist/blocks/builtins/consentEmbed.js +26 -9
  309. package/dist/blocks/builtins/consentEmbed.js.map +1 -1
  310. package/dist/blocks/builtins/index.d.ts +3 -0
  311. package/dist/blocks/builtins/index.js +6 -0
  312. package/dist/blocks/builtins/index.js.map +1 -1
  313. package/dist/blocks/builtins/lib/autoComplete.d.ts +7 -0
  314. package/dist/blocks/builtins/lib/autoComplete.js +20 -0
  315. package/dist/blocks/builtins/lib/autoComplete.js.map +1 -0
  316. package/dist/blocks/builtins/lib/bookingUrl.d.ts +2 -2
  317. package/dist/blocks/builtins/lib/bookingUrl.js +1 -1
  318. package/dist/blocks/builtins/lib/bookingUrl.js.map +1 -1
  319. package/dist/blocks/builtins/lib/ical.d.ts +24 -0
  320. package/dist/blocks/builtins/lib/ical.js +82 -0
  321. package/dist/blocks/builtins/lib/ical.js.map +1 -0
  322. package/dist/blocks/builtins/lib/vandaag.d.ts +8 -0
  323. package/dist/blocks/builtins/lib/vandaag.js +22 -0
  324. package/dist/blocks/builtins/lib/vandaag.js.map +1 -0
  325. package/dist/blocks/registry.d.ts +6 -0
  326. package/dist/blocks/registry.js.map +1 -1
  327. package/dist/blocks/ui/index.js +1 -0
  328. package/dist/blocks/ui/index.js.map +1 -1
  329. package/dist/components/EditBar.js +2 -4
  330. package/dist/components/EditBar.js.map +1 -1
  331. package/dist/components/News.js +26 -18
  332. package/dist/components/News.js.map +1 -1
  333. package/dist/components/PageView.d.ts +7 -1
  334. package/dist/components/PageView.js +17 -0
  335. package/dist/components/PageView.js.map +1 -1
  336. package/dist/components/ResponsiveImage.js +18 -20
  337. package/dist/components/ResponsiveImage.js.map +1 -1
  338. package/dist/components/onderOffset.d.ts +13 -0
  339. package/dist/components/onderOffset.js +74 -0
  340. package/dist/components/onderOffset.js.map +1 -0
  341. package/dist/components/site/Bedrijfsnummers.d.ts +9 -0
  342. package/dist/components/site/Bedrijfsnummers.js +12 -0
  343. package/dist/components/site/Bedrijfsnummers.js.map +1 -0
  344. package/dist/components/site/SiteFooter.d.ts +6 -1
  345. package/dist/components/site/SiteFooter.js +62 -9
  346. package/dist/components/site/SiteFooter.js.map +1 -1
  347. package/dist/components/site/SiteHeader.d.ts +15 -0
  348. package/dist/components/site/SiteHeader.js +70 -0
  349. package/dist/components/site/SiteHeader.js.map +1 -0
  350. package/dist/components/site/SiteNav.d.ts +2 -0
  351. package/dist/components/site/SiteNav.js +29 -5
  352. package/dist/components/site/SiteNav.js.map +1 -1
  353. package/dist/demo/DemoStudio.js +2 -2
  354. package/dist/demo/DemoStudio.js.map +1 -1
  355. package/dist/demo/demoStore.d.ts +13 -0
  356. package/dist/demo/demoStore.js +36 -0
  357. package/dist/demo/demoStore.js.map +1 -1
  358. package/dist/editor/EditorProvider.js +15 -4
  359. package/dist/editor/EditorProvider.js.map +1 -1
  360. package/dist/firebase/functionsClient.js +5 -1
  361. package/dist/firebase/functionsClient.js.map +1 -1
  362. package/dist/index.d.ts +5 -1
  363. package/dist/index.js +20 -1
  364. package/dist/index.js.map +1 -1
  365. package/dist/media/ImageContext.d.ts +17 -0
  366. package/dist/media/ImageContext.js +65 -20
  367. package/dist/media/ImageContext.js.map +1 -1
  368. package/dist/media/altInHtml.d.ts +9 -0
  369. package/dist/media/altInHtml.js +17 -0
  370. package/dist/media/altInHtml.js.map +1 -0
  371. package/dist/media/srcset.d.ts +12 -0
  372. package/dist/media/srcset.js +13 -0
  373. package/dist/media/srcset.js.map +1 -0
  374. package/dist/modules/builtins.d.ts +1 -0
  375. package/dist/modules/builtins.js +22 -9
  376. package/dist/modules/builtins.js.map +1 -1
  377. package/dist/modules/consent/ConsentBanner.d.ts +5 -0
  378. package/dist/modules/consent/ConsentBanner.js +8 -7
  379. package/dist/modules/consent/ConsentBanner.js.map +1 -1
  380. package/dist/modules/consent/standaard.d.ts +12 -0
  381. package/dist/modules/consent/standaard.js +10 -0
  382. package/dist/modules/consent/standaard.js.map +1 -0
  383. package/dist/modules/consent/useConsent.d.ts +4 -0
  384. package/dist/modules/consent/useConsent.js +30 -1
  385. package/dist/modules/consent/useConsent.js.map +1 -1
  386. package/dist/modules/shop/blocks/Cart.js +5 -3
  387. package/dist/modules/shop/blocks/Cart.js.map +1 -1
  388. package/dist/modules/shop/blocks/Checkout.js +56 -35
  389. package/dist/modules/shop/blocks/Checkout.js.map +1 -1
  390. package/dist/modules/shop/blocks/Donation.js +4 -4
  391. package/dist/modules/shop/blocks/Donation.js.map +1 -1
  392. package/dist/modules/shop/blocks/ProductDetail.js +19 -3
  393. package/dist/modules/shop/blocks/ProductDetail.js.map +1 -1
  394. package/dist/modules/shop/blocks/ProductGrid.d.ts +3 -1
  395. package/dist/modules/shop/blocks/ProductGrid.js +8 -4
  396. package/dist/modules/shop/blocks/ProductGrid.js.map +1 -1
  397. package/dist/modules/shop/blocks/ShopCategories.js +4 -3
  398. package/dist/modules/shop/blocks/ShopCategories.js.map +1 -1
  399. package/dist/modules/shop/lib.d.ts +4 -0
  400. package/dist/modules/shop/lib.js +14 -0
  401. package/dist/modules/shop/lib.js.map +1 -1
  402. package/dist/modules/shop/settings.d.ts +3 -0
  403. package/dist/modules/shop/settings.js +14 -0
  404. package/dist/modules/shop/settings.js.map +1 -1
  405. package/dist/modules/shop/strings.d.ts +4 -0
  406. package/dist/modules/shop/strings.js +8 -0
  407. package/dist/modules/shop/strings.js.map +1 -1
  408. package/dist/next/envCheck.d.ts +42 -0
  409. package/dist/next/envCheck.js +106 -0
  410. package/dist/next/envCheck.js.map +1 -0
  411. package/dist/next/index.cjs +185 -2
  412. package/dist/next/index.d.ts +2 -0
  413. package/dist/next/index.js +8 -1
  414. package/dist/next/index.js.map +1 -1
  415. package/dist/next/securityHeaders.d.ts +36 -0
  416. package/dist/next/securityHeaders.js +74 -0
  417. package/dist/next/securityHeaders.js.map +1 -0
  418. package/dist/patterns/builtins.d.ts +7 -0
  419. package/dist/patterns/builtins.js +138 -3
  420. package/dist/patterns/builtins.js.map +1 -1
  421. package/dist/releaseNotes.js +148 -0
  422. package/dist/releaseNotes.js.map +1 -1
  423. package/dist/render/PublishedPage.d.ts +2 -1
  424. package/dist/render/PublishedPage.js +10 -4
  425. package/dist/render/PublishedPage.js.map +1 -1
  426. package/dist/schema/blocks.d.ts +473 -0
  427. package/dist/schema/blocks.js +105 -5
  428. package/dist/schema/blocks.js.map +1 -1
  429. package/dist/schema/business.d.ts +118 -0
  430. package/dist/schema/business.js +75 -0
  431. package/dist/schema/business.js.map +1 -0
  432. package/dist/schema/fields.d.ts +2 -1
  433. package/dist/schema/fields.js.map +1 -1
  434. package/dist/schema/forms.d.ts +18 -0
  435. package/dist/schema/forms.js +18 -3
  436. package/dist/schema/forms.js.map +1 -1
  437. package/dist/schema/mail.d.ts +10 -0
  438. package/dist/schema/mail.js +7 -0
  439. package/dist/schema/mail.js.map +1 -1
  440. package/dist/schema/settings.d.ts +103 -0
  441. package/dist/schema/settings.js +24 -3
  442. package/dist/schema/settings.js.map +1 -1
  443. package/dist/schema/shop.d.ts +2 -0
  444. package/dist/schema/shop.js +4 -0
  445. package/dist/schema/shop.js.map +1 -1
  446. package/dist/schema/shopGeld.d.ts +1 -0
  447. package/dist/schema/shopGeld.js +1 -0
  448. package/dist/schema/shopGeld.js.map +1 -1
  449. package/dist/schema/siteConfig.d.ts +69 -1
  450. package/dist/schema/siteConfig.js +7 -2
  451. package/dist/schema/siteConfig.js.map +1 -1
  452. package/dist/server/blockData.d.ts +1 -1
  453. package/dist/server/blockData.js +74 -18
  454. package/dist/server/blockData.js.map +1 -1
  455. package/dist/server/cspRapport.d.ts +20 -0
  456. package/dist/server/cspRapport.js +56 -0
  457. package/dist/server/cspRapport.js.map +1 -0
  458. package/dist/server/fonts.d.ts +3 -0
  459. package/dist/server/fonts.js +39 -0
  460. package/dist/server/fonts.js.map +1 -0
  461. package/dist/server/index.d.ts +3 -0
  462. package/dist/server/index.js +8 -0
  463. package/dist/server/index.js.map +1 -1
  464. package/dist/server/sanitize.js +2 -0
  465. package/dist/server/sanitize.js.map +1 -1
  466. package/dist/settings/useSiteSettings.js +4 -1
  467. package/dist/settings/useSiteSettings.js.map +1 -1
  468. package/dist/starters/starters.d.ts +69 -0
  469. package/dist/starters/starters.js +171 -0
  470. package/dist/starters/starters.js.map +1 -0
  471. package/dist/styles.css +1181 -212
  472. package/dist/theme/color.d.ts +10 -0
  473. package/dist/theme/color.js +17 -1
  474. package/dist/theme/color.js.map +1 -1
  475. package/dist/theme/fontFallback.d.ts +23 -0
  476. package/dist/theme/fontFallback.js +58 -0
  477. package/dist/theme/fontFallback.js.map +1 -0
  478. package/dist/theme/fonts.d.ts +11 -0
  479. package/dist/theme/fonts.js +16 -0
  480. package/dist/theme/fonts.js.map +1 -0
  481. package/dist/version.js +1 -1
  482. package/package.json +5 -4
@@ -0,0 +1,225 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useRef, useState } from "react";
4
+ import { Dialog, DialogContent } from "../ui/dialog.js";
5
+ import { Button } from "../ui/primitives.js";
6
+ import { useRegistry } from "../../blocks/context.js";
7
+ import { builtinPatterns, collectPatternTypes, instantiatePattern } from "../../patterns/index.js";
8
+ import { GROEPEN, blokInfo } from "../lib/blokInfo.js";
9
+ function BlokKiezer({
10
+ open,
11
+ onOpenChange,
12
+ onBlok,
13
+ onSectie,
14
+ patterns = builtinPatterns
15
+ }) {
16
+ const registry = useRegistry();
17
+ const [zoek, setZoek] = useState("");
18
+ const [tab, setTab] = useState("blokken");
19
+ const zoekRef = useRef(null);
20
+ useEffect(() => {
21
+ if (!open) return;
22
+ setZoek("");
23
+ setTab("blokken");
24
+ const t = setTimeout(() => zoekRef.current?.focus(), 50);
25
+ return () => clearTimeout(t);
26
+ }, [open]);
27
+ const perGroep = useMemo(() => {
28
+ const q = zoek.trim().toLowerCase();
29
+ const m = /* @__PURE__ */ new Map();
30
+ for (const def of registry.values()) {
31
+ const info = blokInfo(def.type, def.category);
32
+ const item = { type: def.type, label: def.label, icon: def.icon, uitleg: info.uitleg };
33
+ if (q && !`${item.label} ${item.uitleg ?? ""}`.toLowerCase().includes(q)) continue;
34
+ m.set(info.groep, [...m.get(info.groep) ?? [], item]);
35
+ }
36
+ return GROEPEN.map((g) => ({ ...g, items: m.get(g.id) ?? [] })).filter((g) => g.items.length > 0);
37
+ }, [registry, zoek]);
38
+ const secties = useMemo(() => {
39
+ const q = zoek.trim().toLowerCase();
40
+ return patterns.filter((p) => collectPatternTypes(p).every((t) => registry.get(t))).filter((p) => !q || `${p.label} ${p.description ?? ""} ${p.category}`.toLowerCase().includes(q));
41
+ }, [patterns, registry, zoek]);
42
+ if (!open) return null;
43
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsx(DialogContent, { title: "Toevoegen", width: "min(94vw, 46rem)", children: /* @__PURE__ */ jsxs("div", { className: "grid gap-3", children: [
44
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
45
+ /* @__PURE__ */ jsx("div", { role: "tablist", "aria-label": "Wat toevoegen", className: "inline-flex rounded-lg bg-slate-100 p-0.5", children: ["blokken", "secties"].map((t) => /* @__PURE__ */ jsx(
46
+ "button",
47
+ {
48
+ type: "button",
49
+ role: "tab",
50
+ "aria-selected": tab === t,
51
+ onClick: () => setTab(t),
52
+ className: "xicms-admin-btn rounded-md px-3 py-1.5 text-sm font-medium text-slate-600 aria-[selected=true]:bg-white aria-[selected=true]:text-slate-900 aria-[selected=true]:shadow-sm",
53
+ children: t === "blokken" ? "Losse blokken" : "Kant-en-klare secties"
54
+ },
55
+ t
56
+ )) }),
57
+ /* @__PURE__ */ jsx(
58
+ "input",
59
+ {
60
+ ref: zoekRef,
61
+ type: "search",
62
+ value: zoek,
63
+ onChange: (e) => setZoek(e.target.value),
64
+ placeholder: "Zoek, bv. foto, prijzen, team\u2026",
65
+ "aria-label": "Zoek een blok",
66
+ className: "min-w-0 flex-1 rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm"
67
+ }
68
+ )
69
+ ] }),
70
+ /* @__PURE__ */ jsxs("div", { className: "grid max-h-[60vh] gap-4 overflow-y-auto pr-1", children: [
71
+ tab === "blokken" && (perGroep.length === 0 ? /* @__PURE__ */ jsxs("p", { className: "py-6 text-center text-sm text-slate-500", children: [
72
+ "Niets gevonden voor \u201C",
73
+ zoek,
74
+ "\u201D."
75
+ ] }) : perGroep.map((g) => /* @__PURE__ */ jsxs("section", { children: [
76
+ /* @__PURE__ */ jsx("h4", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-slate-500", children: g.label }),
77
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5 sm:grid-cols-2", children: g.items.map((b) => /* @__PURE__ */ jsxs(
78
+ "button",
79
+ {
80
+ type: "button",
81
+ onClick: () => {
82
+ onBlok(b.type);
83
+ onOpenChange(false);
84
+ },
85
+ className: "xicms-admin-btn flex items-start gap-3 rounded-lg border border-slate-200 bg-white p-2.5 text-left hover:border-slate-400 hover:bg-slate-50",
86
+ children: [
87
+ /* @__PURE__ */ jsx("span", { className: "grid h-9 w-9 shrink-0 place-items-center rounded-md bg-slate-100 text-lg", "aria-hidden": true, children: b.icon ?? "\u25AB" }),
88
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
89
+ /* @__PURE__ */ jsx("span", { className: "block text-sm font-medium text-slate-900", children: b.label }),
90
+ b.uitleg && /* @__PURE__ */ jsx("span", { className: "block text-xs leading-snug text-slate-500", children: b.uitleg })
91
+ ] })
92
+ ]
93
+ },
94
+ b.type
95
+ )) })
96
+ ] }, g.id))),
97
+ tab === "secties" && (secties.length === 0 ? /* @__PURE__ */ jsx("p", { className: "py-6 text-center text-sm text-slate-500", children: "Geen secties gevonden." }) : /* @__PURE__ */ jsx("div", { className: "grid gap-1.5 sm:grid-cols-2", children: secties.map((p) => /* @__PURE__ */ jsxs(
98
+ "button",
99
+ {
100
+ type: "button",
101
+ onClick: () => {
102
+ onSectie(instantiatePattern(p));
103
+ onOpenChange(false);
104
+ },
105
+ className: "xicms-admin-btn rounded-lg border border-slate-200 bg-white p-2.5 text-left hover:border-slate-400 hover:bg-slate-50",
106
+ children: [
107
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-between gap-2", children: [
108
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-slate-900", children: p.label }),
109
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm opacity-70", "aria-hidden": true, children: p.blocks.slice(0, 5).map((b, i) => /* @__PURE__ */ jsx("span", { children: registry.get(b._type)?.icon ?? "\u{1F9E9}" }, i)) })
110
+ ] }),
111
+ /* @__PURE__ */ jsx("span", { className: "block text-xs text-slate-500", children: p.description ?? p.category })
112
+ ]
113
+ },
114
+ p.id
115
+ )) }))
116
+ ] }),
117
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: () => onOpenChange(false), children: "Sluiten" }) })
118
+ ] }) }) });
119
+ }
120
+ function TussenPlus({ sleutels, onKies }) {
121
+ const [plek, setPlek] = useState(null);
122
+ useEffect(() => {
123
+ const set = new Set(sleutels);
124
+ const meet = (el) => {
125
+ let r = el.getBoundingClientRect();
126
+ if (r.width === 0 && r.height === 0) {
127
+ const kids = Array.from(el.children).map((k) => k.getBoundingClientRect()).filter((k) => k.width || k.height);
128
+ if (!kids.length) return null;
129
+ const left = Math.min(...kids.map((k) => k.left));
130
+ const right = Math.max(...kids.map((k) => k.right));
131
+ const bottom = Math.max(...kids.map((k) => k.bottom));
132
+ r = { left, right, bottom, width: right - left };
133
+ }
134
+ return { top: r.bottom, left: r.left + r.width / 2 };
135
+ };
136
+ const opOver = (e) => {
137
+ const doel = e.target;
138
+ if (doel?.closest?.(".xicms-ve-tussenplus")) return;
139
+ let blok = doel?.closest?.("[data-xicms-block]") ?? null;
140
+ while (blok && !set.has(blok.dataset.xicmsBlock ?? "")) blok = blok.parentElement?.closest("[data-xicms-block]") ?? null;
141
+ if (!blok) return setPlek(null);
142
+ const p = meet(blok);
143
+ if (!p || p.top > window.innerHeight - 70) return setPlek(null);
144
+ const key = blok.dataset.xicmsBlock;
145
+ setPlek((v) => v && v.key === key && v.top === p.top ? v : { key, ...p });
146
+ };
147
+ const opScroll = () => setPlek(null);
148
+ document.addEventListener("mouseover", opOver, true);
149
+ window.addEventListener("scroll", opScroll, { capture: true, passive: true });
150
+ return () => {
151
+ document.removeEventListener("mouseover", opOver, true);
152
+ window.removeEventListener("scroll", opScroll, { capture: true });
153
+ };
154
+ }, [sleutels]);
155
+ if (!plek) return null;
156
+ return /* @__PURE__ */ jsx(
157
+ "button",
158
+ {
159
+ type: "button",
160
+ className: "xicms-ve-tussenplus",
161
+ style: { top: plek.top, left: plek.left },
162
+ title: "Hier een blok of sectie toevoegen",
163
+ "aria-label": "Hier een blok of sectie toevoegen",
164
+ onMouseDown: (e) => e.preventDefault(),
165
+ onClick: () => onKies(plek.key),
166
+ children: /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "+" })
167
+ }
168
+ );
169
+ }
170
+ function omtrek(el) {
171
+ let r = el.getBoundingClientRect();
172
+ if (r.width === 0 && r.height === 0) {
173
+ const kids = Array.from(el.children).map((k) => k.getBoundingClientRect()).filter((k) => k.width || k.height);
174
+ if (!kids.length) return null;
175
+ const left = Math.min(...kids.map((k) => k.left));
176
+ const top = Math.min(...kids.map((k) => k.top));
177
+ r = { left, top, width: Math.max(...kids.map((k) => k.right)) - left, height: Math.max(...kids.map((k) => k.bottom)) - top };
178
+ }
179
+ return { top: r.top, left: r.left, width: r.width, height: r.height };
180
+ }
181
+ function BlokKader({ sleutels, gekozen, labelVoor }) {
182
+ const [aangewezen, setAangewezen] = useState(null);
183
+ const [, setTik] = useState(0);
184
+ useEffect(() => {
185
+ const set = new Set(sleutels);
186
+ const opOver = (e) => {
187
+ const doel = e.target;
188
+ if (doel?.closest?.("[data-xicms-tooling], .xicms-ve-snel, .xicms-ve-item, .xicms-ve-blokknoppen, .xicms-ve-pencil, .xicms-ve-tussenplus")) return;
189
+ let blok = doel?.closest?.("[data-xicms-block]") ?? null;
190
+ while (blok && !set.has(blok.dataset.xicmsBlock ?? "")) blok = blok.parentElement?.closest("[data-xicms-block]") ?? null;
191
+ setAangewezen(blok?.dataset.xicmsBlock ?? null);
192
+ };
193
+ let frame = 0;
194
+ const her = () => {
195
+ cancelAnimationFrame(frame);
196
+ frame = requestAnimationFrame(() => setTik((n) => n + 1));
197
+ };
198
+ document.addEventListener("mouseover", opOver, true);
199
+ window.addEventListener("scroll", her, { capture: true, passive: true });
200
+ window.addEventListener("resize", her);
201
+ return () => {
202
+ cancelAnimationFrame(frame);
203
+ document.removeEventListener("mouseover", opOver, true);
204
+ window.removeEventListener("scroll", her, { capture: true });
205
+ window.removeEventListener("resize", her);
206
+ };
207
+ }, [sleutels]);
208
+ const teken = (key, soort) => {
209
+ if (!key) return null;
210
+ const el = document.querySelector(`[data-xicms-block="${CSS.escape(key)}"]`);
211
+ const r = el ? omtrek(el) : null;
212
+ if (!r) return null;
213
+ return /* @__PURE__ */ jsx("div", { className: `xicms-ve-kader is-${soort}`, style: { top: r.top, left: r.left, width: r.width, height: r.height }, "aria-hidden": true, children: soort === "aangewezen" && /* @__PURE__ */ jsx("span", { className: "xicms-ve-kader__naam", children: labelVoor(key) }) });
214
+ };
215
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
216
+ aangewezen !== gekozen && teken(aangewezen, "aangewezen"),
217
+ teken(gekozen, "gekozen")
218
+ ] });
219
+ }
220
+ export {
221
+ BlokKader,
222
+ BlokKiezer,
223
+ TussenPlus
224
+ };
225
+ //# sourceMappingURL=BlokKiezer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/admin/visual/BlokKiezer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Dialog, DialogContent } from \"../ui/dialog\";\nimport { Button } from \"../ui/primitives\";\nimport { useRegistry } from \"../../blocks/context\";\nimport { builtinPatterns, collectPatternTypes, instantiatePattern, type Pattern } from \"../../patterns\";\nimport { GROEPEN, blokInfo, type BlokGroep } from \"../lib/blokInfo\";\n\n/**\n * De blokkiezer (8.11): wat wil je hier toevoegen?\n *\n * Verving een platte keuzelijst van zo'n zestig namen. Nu: een zoekveld, groepen (\"Over je bedrijf\",\n * \"Contact en afspraken\"), per blok één zin uitleg, en een tweede tabblad met kant-en-klare secties\n * (de patronen) — die zaten achter een aparte knop in de zijbalk. Opent vanaf de \"+\" tussen twee\n * blokken op de pagina én vanuit de zijbalk.\n */\nexport function BlokKiezer({\n open,\n onOpenChange,\n onBlok,\n onSectie,\n patterns = builtinPatterns,\n}: {\n open: boolean;\n onOpenChange: (v: boolean) => void;\n onBlok: (type: string) => void;\n onSectie: (blocks: Array<Record<string, unknown>>) => void;\n patterns?: Pattern[];\n}) {\n const registry = useRegistry();\n const [zoek, setZoek] = useState(\"\");\n const [tab, setTab] = useState<\"blokken\" | \"secties\">(\"blokken\");\n const zoekRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (!open) return;\n setZoek(\"\");\n setTab(\"blokken\");\n const t = setTimeout(() => zoekRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }, [open]);\n\n const perGroep = useMemo(() => {\n const q = zoek.trim().toLowerCase();\n const m = new Map<BlokGroep, { type: string; label: string; icon?: string; uitleg?: string }[]>();\n for (const def of registry.values()) {\n const info = blokInfo(def.type, def.category);\n const item = { type: def.type, label: def.label, icon: def.icon, uitleg: info.uitleg };\n if (q && !`${item.label} ${item.uitleg ?? \"\"}`.toLowerCase().includes(q)) continue;\n m.set(info.groep, [...(m.get(info.groep) ?? []), item]);\n }\n return GROEPEN.map((g) => ({ ...g, items: m.get(g.id) ?? [] })).filter((g) => g.items.length > 0);\n }, [registry, zoek]);\n\n const secties = useMemo(() => {\n const q = zoek.trim().toLowerCase();\n return patterns\n .filter((p) => collectPatternTypes(p).every((t) => registry.get(t)))\n .filter((p) => !q || `${p.label} ${p.description ?? \"\"} ${p.category}`.toLowerCase().includes(q));\n }, [patterns, registry, zoek]);\n\n if (!open) return null;\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent title=\"Toevoegen\" width=\"min(94vw, 46rem)\">\n <div className=\"grid gap-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Wat toevoegen\" className=\"inline-flex rounded-lg bg-slate-100 p-0.5\">\n {([\"blokken\", \"secties\"] as const).map((t) => (\n <button\n key={t}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab === t}\n onClick={() => setTab(t)}\n className=\"xicms-admin-btn rounded-md px-3 py-1.5 text-sm font-medium text-slate-600 aria-[selected=true]:bg-white aria-[selected=true]:text-slate-900 aria-[selected=true]:shadow-sm\"\n >\n {t === \"blokken\" ? \"Losse blokken\" : \"Kant-en-klare secties\"}\n </button>\n ))}\n </div>\n <input\n ref={zoekRef}\n type=\"search\"\n value={zoek}\n onChange={(e) => setZoek(e.target.value)}\n placeholder=\"Zoek, bv. foto, prijzen, team…\"\n aria-label=\"Zoek een blok\"\n className=\"min-w-0 flex-1 rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm\"\n />\n </div>\n\n <div className=\"grid max-h-[60vh] gap-4 overflow-y-auto pr-1\">\n {tab === \"blokken\" &&\n (perGroep.length === 0 ? (\n <p className=\"py-6 text-center text-sm text-slate-500\">Niets gevonden voor “{zoek}”.</p>\n ) : (\n perGroep.map((g) => (\n <section key={g.id}>\n <h4 className=\"mb-1.5 text-xs font-semibold uppercase tracking-wide text-slate-500\">{g.label}</h4>\n <div className=\"grid gap-1.5 sm:grid-cols-2\">\n {g.items.map((b) => (\n <button\n key={b.type}\n type=\"button\"\n onClick={() => {\n onBlok(b.type);\n onOpenChange(false);\n }}\n className=\"xicms-admin-btn flex items-start gap-3 rounded-lg border border-slate-200 bg-white p-2.5 text-left hover:border-slate-400 hover:bg-slate-50\"\n >\n <span className=\"grid h-9 w-9 shrink-0 place-items-center rounded-md bg-slate-100 text-lg\" aria-hidden>\n {b.icon ?? \"▫\"}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-slate-900\">{b.label}</span>\n {b.uitleg && <span className=\"block text-xs leading-snug text-slate-500\">{b.uitleg}</span>}\n </span>\n </button>\n ))}\n </div>\n </section>\n ))\n ))}\n {tab === \"secties\" &&\n (secties.length === 0 ? (\n <p className=\"py-6 text-center text-sm text-slate-500\">Geen secties gevonden.</p>\n ) : (\n <div className=\"grid gap-1.5 sm:grid-cols-2\">\n {secties.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => {\n onSectie(instantiatePattern(p));\n onOpenChange(false);\n }}\n className=\"xicms-admin-btn rounded-lg border border-slate-200 bg-white p-2.5 text-left hover:border-slate-400 hover:bg-slate-50\"\n >\n <span className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-medium text-slate-900\">{p.label}</span>\n <span className=\"shrink-0 text-sm opacity-70\" aria-hidden>\n {p.blocks.slice(0, 5).map((b, i) => (\n <span key={i}>{registry.get(b._type)?.icon ?? \"🧩\"}</span>\n ))}\n </span>\n </span>\n <span className=\"block text-xs text-slate-500\">{p.description ?? p.category}</span>\n </button>\n ))}\n </div>\n ))}\n </div>\n <div className=\"flex justify-end\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => onOpenChange(false)}>\n Sluiten\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\n/**\n * Een \"+\" op de naad onder het blok waar je muis is: hier iets invoegen. Alleen voor blokken op het\n * hoogste niveau van de pagina (`sleutels`), niet voor blokken in kolommen of tabbladen.\n */\nexport function TussenPlus({ sleutels, onKies }: { sleutels: string[]; onKies: (na: string) => void }) {\n const [plek, setPlek] = useState<{ key: string; top: number; left: number } | null>(null);\n useEffect(() => {\n const set = new Set(sleutels);\n const meet = (el: HTMLElement) => {\n let r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0) {\n const kids = Array.from(el.children).map((k) => k.getBoundingClientRect()).filter((k) => k.width || k.height);\n if (!kids.length) return null;\n const left = Math.min(...kids.map((k) => k.left));\n const right = Math.max(...kids.map((k) => k.right));\n const bottom = Math.max(...kids.map((k) => k.bottom));\n r = { left, right, bottom, width: right - left } as DOMRect;\n }\n return { top: r.bottom, left: r.left + r.width / 2 };\n };\n const opOver = (e: MouseEvent) => {\n const doel = e.target as HTMLElement | null;\n if (doel?.closest?.(\".xicms-ve-tussenplus\")) return;\n let blok = doel?.closest?.<HTMLElement>(\"[data-xicms-block]\") ?? null;\n // Het buitenste blok: in kolommen staan blokken in blokken.\n while (blok && !set.has(blok.dataset.xicmsBlock ?? \"\")) blok = blok.parentElement?.closest<HTMLElement>(\"[data-xicms-block]\") ?? null;\n if (!blok) return setPlek(null);\n const p = meet(blok);\n if (!p || p.top > window.innerHeight - 70) return setPlek(null);\n const key = blok.dataset.xicmsBlock!;\n setPlek((v) => (v && v.key === key && v.top === p.top ? v : { key, ...p }));\n };\n const opScroll = () => setPlek(null);\n document.addEventListener(\"mouseover\", opOver, true);\n window.addEventListener(\"scroll\", opScroll, { capture: true, passive: true });\n return () => {\n document.removeEventListener(\"mouseover\", opOver, true);\n window.removeEventListener(\"scroll\", opScroll, { capture: true });\n };\n }, [sleutels]);\n if (!plek) return null;\n return (\n <button\n type=\"button\"\n className=\"xicms-ve-tussenplus\"\n style={{ top: plek.top, left: plek.left }}\n title=\"Hier een blok of sectie toevoegen\"\n aria-label=\"Hier een blok of sectie toevoegen\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onKies(plek.key)}\n >\n <span aria-hidden>+</span>\n </button>\n );\n}\n\nfunction omtrek(el: HTMLElement): { top: number; left: number; width: number; height: number } | null {\n let r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0) {\n const kids = Array.from(el.children).map((k) => k.getBoundingClientRect()).filter((k) => k.width || k.height);\n if (!kids.length) return null;\n const left = Math.min(...kids.map((k) => k.left));\n const top = Math.min(...kids.map((k) => k.top));\n r = { left, top, width: Math.max(...kids.map((k) => k.right)) - left, height: Math.max(...kids.map((k) => k.bottom)) - top } as DOMRect;\n }\n return { top: r.top, left: r.left, width: r.width, height: r.height };\n}\n\n/**\n * Kaders (8.11): een stippellijn met de naam rond het blok onder je muis, een doorgetrokken lijn\n * rond het blok dat je bewerkt. Zonder kader was niet te zien waar een blok begon en eindigde — de\n * CSS ervoor bestond nog uit de tijd van het canvas, maar niets gebruikte hem.\n */\nexport function BlokKader({ sleutels, gekozen, labelVoor }: { sleutels: string[]; gekozen: string | null; labelVoor: (key: string) => string }) {\n const [aangewezen, setAangewezen] = useState<string | null>(null);\n const [, setTik] = useState(0);\n useEffect(() => {\n const set = new Set(sleutels);\n const opOver = (e: MouseEvent) => {\n const doel = e.target as HTMLElement | null;\n if (doel?.closest?.(\"[data-xicms-tooling], .xicms-ve-snel, .xicms-ve-item, .xicms-ve-blokknoppen, .xicms-ve-pencil, .xicms-ve-tussenplus\")) return;\n let blok = doel?.closest?.<HTMLElement>(\"[data-xicms-block]\") ?? null;\n while (blok && !set.has(blok.dataset.xicmsBlock ?? \"\")) blok = blok.parentElement?.closest<HTMLElement>(\"[data-xicms-block]\") ?? null;\n setAangewezen(blok?.dataset.xicmsBlock ?? null);\n };\n let frame = 0;\n const her = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => setTik((n) => n + 1));\n };\n document.addEventListener(\"mouseover\", opOver, true);\n window.addEventListener(\"scroll\", her, { capture: true, passive: true });\n window.addEventListener(\"resize\", her);\n return () => {\n cancelAnimationFrame(frame);\n document.removeEventListener(\"mouseover\", opOver, true);\n window.removeEventListener(\"scroll\", her, { capture: true });\n window.removeEventListener(\"resize\", her);\n };\n }, [sleutels]);\n const teken = (key: string | null, soort: \"aangewezen\" | \"gekozen\") => {\n if (!key) return null;\n const el = document.querySelector<HTMLElement>(`[data-xicms-block=\"${CSS.escape(key)}\"]`);\n const r = el ? omtrek(el) : null;\n if (!r) return null;\n return (\n <div className={`xicms-ve-kader is-${soort}`} style={{ top: r.top, left: r.left, width: r.width, height: r.height }} aria-hidden>\n {soort === \"aangewezen\" && <span className=\"xicms-ve-kader__naam\">{labelVoor(key)}</span>}\n </div>\n );\n };\n return (\n <>\n {aangewezen !== gekozen && teken(aangewezen, \"aangewezen\")}\n {teken(gekozen, \"gekozen\")}\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,52 @@
1
+ import type { BlockDefinition } from "../../blocks/registry.js";
2
+ import type { Field } from "../../schema/fields.js";
3
+ /**
4
+ * Bewerken op de pagina, voorbij de tekst (8.11): het POTLOOD.
5
+ *
6
+ * De wens: potlood = op de pagina zelf bewerken, tandwiel = de zijbalk. Tot nu toe deed het potlood
7
+ * alleen tekst; voor al het andere moest je toch naar de zijbalk — een kaart toevoegen, een knop
8
+ * naar een andere pagina laten wijzen, van drie naar vier kolommen. Dit gereedschap verschijnt bij
9
+ * het geselecteerde blok en doet precies dat, op de plek zelf:
10
+ *
11
+ * - **Lijsten** (kaarten, teamleden, reviews, stappen …): bij het onderdeel onder je muis ↑ ↓ ⧉ 🗑,
12
+ * en onder de lijst "+ Kaart". De onderdelen worden gevonden via de veldhaken die de blokken al
13
+ * zetten (`data-xicms-edit="items.2.title"`) — geen wijziging aan een Render nodig, ook niet aan
14
+ * maatwerkblokken.
15
+ * - **Links**: wie een knoptekst aanwijst of bewerkt, krijgt eronder "🔗 Contact" — klik, en kies
16
+ * een pagina of adres.
17
+ * - **Snelle keuzes**: de paar keuzes die het uiterlijk van het blok bepalen (kolommen, stijl,
18
+ * uitlijning), als een balkje boven het blok. Alles daarbuiten blijft in de zijbalk.
19
+ */
20
+ type Blok = Record<string, unknown> & {
21
+ _key: string;
22
+ _type: string;
23
+ };
24
+ export interface LijstItem {
25
+ lijst: string;
26
+ index: number;
27
+ el: HTMLElement;
28
+ }
29
+ /**
30
+ * Vind de onderdelen van de lijsten in een blok, via de veldhaken. Per onderdeel: de laagste
31
+ * voorouder die al zijn velden bevat, en dan zo ver omhoog als kan zonder een ánder onderdeel van
32
+ * dezelfde lijst te raken — dat is de kaart, de rij, het teamlid.
33
+ */
34
+ export declare function vindLijstItems(host: HTMLElement): LijstItem[];
35
+ /** "sections.0.items" → "sections.items": de vorm waarop lijst- en onderdeelnamen per blok staan. */
36
+ export declare function lijstVorm(lijst: string): string;
37
+ /** Bij een knoptekst-veld: welk veld bevat de link? `null` = geen link bij dit veld. */
38
+ export declare function linkVeldVoor(veld: string, blok: Record<string, unknown>): string | null;
39
+ /** De snelle keuzes van een blok: keuzelijsten, kleine getallen en schakelaars die het uiterlijk bepalen. */
40
+ export declare function snelleKeuzes(velden: Field[]): Field[];
41
+ export declare function InlineGereedschap({ blok, def, siteId, onWijzig, onInstellingen, onStartVeld, onVerwijderd, }: {
42
+ blok: Blok;
43
+ def: BlockDefinition | undefined;
44
+ siteId: string;
45
+ /** Nieuwe versie van het blok (één ongedaan-maak-stap). */
46
+ onWijzig: (volgend: Blok) => void;
47
+ onInstellingen: () => void;
48
+ /** Zet het bewerken van een veld aan (na het toevoegen van een onderdeel). */
49
+ onStartVeld: (veld: string) => void;
50
+ onVerwijderd: (wat: string) => void;
51
+ }): import("react").JSX.Element;
52
+ export {};