@xiwebdesign/xicms-core 6.4.7 → 7.0.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 (373) hide show
  1. package/dist/SiteChrome.d.ts +12 -0
  2. package/dist/SiteChrome.js +24 -0
  3. package/dist/SiteChrome.js.map +1 -0
  4. package/dist/XiCMSProvider.d.ts +16 -8
  5. package/dist/XiCMSProvider.js +83 -58
  6. package/dist/XiCMSProvider.js.map +1 -1
  7. package/dist/admin/AdminApp.d.ts +1 -1
  8. package/dist/admin/AdminApp.js +79 -35
  9. package/dist/admin/AdminApp.js.map +1 -1
  10. package/dist/admin/AdminHelp.d.ts +8 -1
  11. package/dist/admin/AdminHelp.js +2 -2
  12. package/dist/admin/AdminHelp.js.map +1 -1
  13. package/dist/admin/NewsEditor.js +9 -9
  14. package/dist/admin/SuperadminPanel.js +5 -5
  15. package/dist/admin/blockEditors/GenericEditor.d.ts +2 -2
  16. package/dist/admin/blockEditors/GenericEditor.js +12 -11
  17. package/dist/admin/blockEditors/GenericEditor.js.map +1 -1
  18. package/dist/admin/blockEditors/StyleEditor.d.ts +1 -1
  19. package/dist/admin/blockEditors/StyleEditor.js +2 -2
  20. package/dist/admin/blockEditors/SymbolRefEditor.d.ts +1 -1
  21. package/dist/admin/blockEditors/SymbolRefEditor.js +5 -5
  22. package/dist/admin/blockEditors/index.d.ts +1 -1
  23. package/dist/admin/blockEditors/index.js +10 -10
  24. package/dist/admin/customBlocks/CustomBlocksPanel.js +7 -7
  25. package/dist/admin/editors/RichTextEditor.js +8 -7
  26. package/dist/admin/editors/RichTextEditor.js.map +1 -1
  27. package/dist/admin/editors/fontSizeExtension.js +1 -1
  28. package/dist/admin/editors/fontSizeExtension.js.map +1 -1
  29. package/dist/admin/forms/FormsPanel.js +9 -9
  30. package/dist/admin/index.d.ts +16 -16
  31. package/dist/admin/index.js +16 -16
  32. package/dist/admin/lib/mediaUsage.js +1 -1
  33. package/dist/admin/lib/pagesClient.d.ts +1 -1
  34. package/dist/admin/lib/pagesClient.js +11 -7
  35. package/dist/admin/lib/pagesClient.js.map +1 -1
  36. package/dist/admin/lib/sanitizeDraft.d.ts +9 -0
  37. package/dist/admin/lib/sanitizeDraft.js +28 -0
  38. package/dist/admin/lib/sanitizeDraft.js.map +1 -0
  39. package/dist/admin/lib/symbolsClient.d.ts +1 -1
  40. package/dist/admin/lib/symbolsClient.js +3 -3
  41. package/dist/admin/lib/upload.js +3 -3
  42. package/dist/admin/lib/useNestedDialog.d.ts +15 -0
  43. package/dist/admin/lib/useNestedDialog.js +23 -0
  44. package/dist/admin/lib/useNestedDialog.js.map +1 -0
  45. package/dist/admin/lib/zodFields.d.ts +4 -18
  46. package/dist/admin/lib/zodFields.js +54 -35
  47. package/dist/admin/lib/zodFields.js.map +1 -1
  48. package/dist/admin/media/MediaManager.js +7 -7
  49. package/dist/admin/media/MediaPicker.js +7 -7
  50. package/dist/admin/media/MediaPicker.js.map +1 -1
  51. package/dist/admin/pages/PageEditor.d.ts +1 -1
  52. package/dist/admin/pages/PageEditor.js +13 -13
  53. package/dist/admin/pages/PagesPanel.js +30 -30
  54. package/dist/admin/pages/PagesPanel.js.map +1 -1
  55. package/dist/admin/panelRegistry.js +7 -7
  56. package/dist/admin/patterns/PatternInserter.d.ts +1 -1
  57. package/dist/admin/patterns/PatternInserter.js +5 -5
  58. package/dist/admin/patterns/PatternInserter.js.map +1 -1
  59. package/dist/admin/settings/MailSettings.js +5 -5
  60. package/dist/admin/settings/MailTemplates.d.ts +1 -1
  61. package/dist/admin/settings/MailTemplates.js +5 -5
  62. package/dist/admin/settings/SettingsPanel.js +20 -20
  63. package/dist/admin/settings/SettingsPanel.js.map +1 -1
  64. package/dist/admin/settings/SnapshotsCard.js +5 -5
  65. package/dist/admin/settings/moduleSettingsForm.d.ts +1 -1
  66. package/dist/admin/settings/moduleSettingsForm.js +4 -4
  67. package/dist/admin/settings/moduleSettingsForm.js.map +1 -1
  68. package/dist/admin/shop/CategoriesTab.js +8 -8
  69. package/dist/admin/shop/ConnectionsTab.js +3 -3
  70. package/dist/admin/shop/DiscountsTab.js +8 -8
  71. package/dist/admin/shop/OrdersTab.js +10 -10
  72. package/dist/admin/shop/OrdersTab.js.map +1 -1
  73. package/dist/admin/shop/ProductsTab.js +10 -10
  74. package/dist/admin/shop/ShopPanel.js +9 -9
  75. package/dist/admin/shop/ShopSettingsTab.js +4 -4
  76. package/dist/admin/shop/index.d.ts +2 -2
  77. package/dist/admin/shop/index.js +2 -2
  78. package/dist/admin/shop/lib.js +2 -2
  79. package/dist/admin/stats/StatsPanel.js +2 -2
  80. package/dist/admin/ui/ArrayEditor.js +1 -1
  81. package/dist/admin/ui/PanelIcon.d.ts +3 -0
  82. package/dist/admin/ui/PanelIcon.js +34 -0
  83. package/dist/admin/ui/PanelIcon.js.map +1 -0
  84. package/dist/admin/ui/dialog.d.ts +21 -6
  85. package/dist/admin/ui/dialog.js +55 -34
  86. package/dist/admin/ui/dialog.js.map +1 -1
  87. package/dist/admin/ui/index.d.ts +7 -7
  88. package/dist/admin/ui/index.js +7 -7
  89. package/dist/admin/ui/primitives.js +1 -1
  90. package/dist/admin/ui/tabs.js +1 -1
  91. package/dist/admin/visual/TranslationPanel.d.ts +1 -1
  92. package/dist/admin/visual/TranslationPanel.js +3 -3
  93. package/dist/admin/visual/VisualEditor.js +47 -25
  94. package/dist/admin/visual/VisualEditor.js.map +1 -1
  95. package/dist/admin.css +2 -1
  96. package/dist/agentFiles/catalog.d.ts +2 -2
  97. package/dist/agentFiles/catalog.js +6 -5
  98. package/dist/agentFiles/catalog.js.map +1 -1
  99. package/dist/agentFiles/files.d.ts +5 -5
  100. package/dist/agentFiles/files.js +17 -17
  101. package/dist/agentFiles/files.js.map +1 -1
  102. package/dist/all.d.ts +4 -4
  103. package/dist/all.js +6 -6
  104. package/dist/auth/AuthProvider.d.ts +2 -2
  105. package/dist/auth/AuthProvider.js +51 -28
  106. package/dist/auth/AuthProvider.js.map +1 -1
  107. package/dist/auth/LoginForm.js +1 -1
  108. package/dist/auth/roles.js +4 -1
  109. package/dist/auth/roles.js.map +1 -1
  110. package/dist/blocks/BlockRenderer.d.ts +1 -1
  111. package/dist/blocks/BlockRenderer.js +3 -3
  112. package/dist/blocks/blockStyle.d.ts +1 -1
  113. package/dist/blocks/builtins/Accordion.d.ts +1 -1
  114. package/dist/blocks/builtins/Accordion.js +13 -6
  115. package/dist/blocks/builtins/Accordion.js.map +1 -1
  116. package/dist/blocks/builtins/Agenda.d.ts +1 -1
  117. package/dist/blocks/builtins/Agenda.js +5 -5
  118. package/dist/blocks/builtins/Banner.d.ts +1 -1
  119. package/dist/blocks/builtins/Banner.js +2 -2
  120. package/dist/blocks/builtins/BeforeAfter.d.ts +1 -1
  121. package/dist/blocks/builtins/BeforeAfter.js +4 -4
  122. package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
  123. package/dist/blocks/builtins/Booking.d.ts +1 -1
  124. package/dist/blocks/builtins/Booking.js +5 -5
  125. package/dist/blocks/builtins/Breadcrumbs.d.ts +1 -1
  126. package/dist/blocks/builtins/Breadcrumbs.js +3 -3
  127. package/dist/blocks/builtins/Cards.d.ts +1 -1
  128. package/dist/blocks/builtins/Cards.js +5 -5
  129. package/dist/blocks/builtins/Cards.js.map +1 -1
  130. package/dist/blocks/builtins/Columns.d.ts +1 -1
  131. package/dist/blocks/builtins/Columns.js +4 -4
  132. package/dist/blocks/builtins/Contact.d.ts +3 -3
  133. package/dist/blocks/builtins/Contact.js +4 -4
  134. package/dist/blocks/builtins/Countdown.d.ts +1 -1
  135. package/dist/blocks/builtins/Countdown.js +4 -4
  136. package/dist/blocks/builtins/Countdown.js.map +1 -1
  137. package/dist/blocks/builtins/Cta.d.ts +1 -1
  138. package/dist/blocks/builtins/Cta.js +3 -3
  139. package/dist/blocks/builtins/Downloads.d.ts +1 -1
  140. package/dist/blocks/builtins/Downloads.js +4 -4
  141. package/dist/blocks/builtins/Elements.d.ts +3 -3
  142. package/dist/blocks/builtins/Elements.js +3 -3
  143. package/dist/blocks/builtins/Embed.d.ts +1 -1
  144. package/dist/blocks/builtins/Embed.js +3 -3
  145. package/dist/blocks/builtins/Faq.d.ts +1 -1
  146. package/dist/blocks/builtins/Faq.js +14 -6
  147. package/dist/blocks/builtins/Faq.js.map +1 -1
  148. package/dist/blocks/builtins/FormBlock.d.ts +1 -1
  149. package/dist/blocks/builtins/FormBlock.js +28 -18
  150. package/dist/blocks/builtins/FormBlock.js.map +1 -1
  151. package/dist/blocks/builtins/Gallery.d.ts +2 -2
  152. package/dist/blocks/builtins/Gallery.js +5 -5
  153. package/dist/blocks/builtins/Hero.d.ts +1 -1
  154. package/dist/blocks/builtins/Hero.js +4 -4
  155. package/dist/blocks/builtins/ImageBlock.d.ts +1 -1
  156. package/dist/blocks/builtins/ImageBlock.js +3 -3
  157. package/dist/blocks/builtins/Jobs.d.ts +2 -2
  158. package/dist/blocks/builtins/Jobs.js +5 -5
  159. package/dist/blocks/builtins/Layout.d.ts +2 -2
  160. package/dist/blocks/builtins/Layout.js +4 -4
  161. package/dist/blocks/builtins/MapBlock.d.ts +1 -1
  162. package/dist/blocks/builtins/MapBlock.js +3 -3
  163. package/dist/blocks/builtins/NewsListBlock.d.ts +1 -1
  164. package/dist/blocks/builtins/NewsListBlock.js +4 -4
  165. package/dist/blocks/builtins/Newsletter.d.ts +1 -1
  166. package/dist/blocks/builtins/Newsletter.js +7 -7
  167. package/dist/blocks/builtins/Newsletter.js.map +1 -1
  168. package/dist/blocks/builtins/OpenNowBadge.d.ts +1 -1
  169. package/dist/blocks/builtins/OpenNowBadge.js +8 -3
  170. package/dist/blocks/builtins/OpenNowBadge.js.map +1 -1
  171. package/dist/blocks/builtins/OpeningHours.d.ts +1 -1
  172. package/dist/blocks/builtins/OpeningHours.js +6 -6
  173. package/dist/blocks/builtins/PdfBlock.d.ts +1 -1
  174. package/dist/blocks/builtins/PdfBlock.js +3 -3
  175. package/dist/blocks/builtins/Portfolio.d.ts +1 -1
  176. package/dist/blocks/builtins/Portfolio.js +5 -5
  177. package/dist/blocks/builtins/Pricing.d.ts +2 -2
  178. package/dist/blocks/builtins/Pricing.js +5 -5
  179. package/dist/blocks/builtins/Pricing.js.map +1 -1
  180. package/dist/blocks/builtins/RichTextBlock.d.ts +1 -1
  181. package/dist/blocks/builtins/RichTextBlock.js +2 -2
  182. package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
  183. package/dist/blocks/builtins/Search.d.ts +1 -1
  184. package/dist/blocks/builtins/Search.js +9 -7
  185. package/dist/blocks/builtins/Search.js.map +1 -1
  186. package/dist/blocks/builtins/Sections.d.ts +4 -4
  187. package/dist/blocks/builtins/Sections.js +4 -4
  188. package/dist/blocks/builtins/Slider.d.ts +1 -1
  189. package/dist/blocks/builtins/Slider.js +3 -3
  190. package/dist/blocks/builtins/Spacer.d.ts +1 -1
  191. package/dist/blocks/builtins/Spacer.js +2 -2
  192. package/dist/blocks/builtins/SymbolRef.d.ts +1 -1
  193. package/dist/blocks/builtins/SymbolRef.js +31 -17
  194. package/dist/blocks/builtins/SymbolRef.js.map +1 -1
  195. package/dist/blocks/builtins/Team.d.ts +1 -1
  196. package/dist/blocks/builtins/Team.js +4 -4
  197. package/dist/blocks/builtins/Testimonials.d.ts +2 -2
  198. package/dist/blocks/builtins/Testimonials.js +4 -4
  199. package/dist/blocks/builtins/Video.d.ts +2 -2
  200. package/dist/blocks/builtins/Video.js +4 -4
  201. package/dist/blocks/builtins/Video.js.map +1 -1
  202. package/dist/blocks/builtins/WhatsappChat.d.ts +1 -1
  203. package/dist/blocks/builtins/WhatsappChat.js +2 -2
  204. package/dist/blocks/builtins/Widgets.d.ts +12 -12
  205. package/dist/blocks/builtins/Widgets.js +19 -19
  206. package/dist/blocks/builtins/Widgets.js.map +1 -1
  207. package/dist/blocks/builtins/consentEmbed.js +2 -2
  208. package/dist/blocks/builtins/index.d.ts +40 -40
  209. package/dist/blocks/builtins/index.js +40 -40
  210. package/dist/blocks/builtins/lib/submitForm.js +5 -3
  211. package/dist/blocks/builtins/lib/submitForm.js.map +1 -1
  212. package/dist/blocks/context.d.ts +1 -1
  213. package/dist/blocks/customTemplate/definition.d.ts +3 -3
  214. package/dist/blocks/customTemplate/definition.js +6 -6
  215. package/dist/blocks/customTemplate/definition.js.map +1 -1
  216. package/dist/blocks/customTemplate/interpret.js +1 -1
  217. package/dist/blocks/index.d.ts +5 -5
  218. package/dist/blocks/index.js +5 -5
  219. package/dist/blocks/registry.d.ts +17 -7
  220. package/dist/blocks/registry.js +2 -1
  221. package/dist/blocks/registry.js.map +1 -1
  222. package/dist/components/EditBar.js +3 -3
  223. package/dist/components/FeedbackWidget.js +4 -4
  224. package/dist/components/News.d.ts +1 -1
  225. package/dist/components/News.js +50 -37
  226. package/dist/components/News.js.map +1 -1
  227. package/dist/components/PageView.js +11 -8
  228. package/dist/components/PageView.js.map +1 -1
  229. package/dist/components/ResponsiveImage.d.ts +1 -1
  230. package/dist/components/site/SiteFooter.d.ts +1 -1
  231. package/dist/components/site/SiteFooter.js +2 -2
  232. package/dist/config.d.ts +1 -1
  233. package/dist/demo/DemoStudio.js +3 -3
  234. package/dist/demo/demoStore.d.ts +3 -3
  235. package/dist/demo/index.d.ts +2 -2
  236. package/dist/demo/index.js +2 -2
  237. package/dist/editor/EditorProvider.js +1 -1
  238. package/dist/firebase/admin.d.ts +0 -2
  239. package/dist/firebase/admin.js +0 -6
  240. package/dist/firebase/admin.js.map +1 -1
  241. package/dist/firebase/appcheck.d.ts +1 -1
  242. package/dist/firebase/appcheck.js +5 -3
  243. package/dist/firebase/appcheck.js.map +1 -1
  244. package/dist/firebase/client.d.ts +2 -1
  245. package/dist/firebase/client.js +2 -14
  246. package/dist/firebase/client.js.map +1 -1
  247. package/dist/firebase/config.d.ts +31 -0
  248. package/dist/firebase/config.js +39 -0
  249. package/dist/firebase/config.js.map +1 -0
  250. package/dist/firebase/feedback.js +5 -3
  251. package/dist/firebase/feedback.js.map +1 -1
  252. package/dist/i18n/overlay.d.ts +2 -2
  253. package/dist/i18n/overlay.js +6 -4
  254. package/dist/i18n/overlay.js.map +1 -1
  255. package/dist/index.d.ts +45 -44
  256. package/dist/index.js +35 -33
  257. package/dist/index.js.map +1 -1
  258. package/dist/lock/DemoLock.js +1 -1
  259. package/dist/modules/builtins.d.ts +1 -1
  260. package/dist/modules/builtins.js +53 -55
  261. package/dist/modules/builtins.js.map +1 -1
  262. package/dist/modules/consent/ConsentBanner.js +1 -1
  263. package/dist/modules/consent/useConsent.js +1 -1
  264. package/dist/modules/context.d.ts +1 -1
  265. package/dist/modules/contract.d.ts +1 -1
  266. package/dist/modules/defineModule.d.ts +1 -1
  267. package/dist/modules/index.d.ts +9 -9
  268. package/dist/modules/index.js +8 -8
  269. package/dist/modules/overrides.d.ts +1 -1
  270. package/dist/modules/registry.d.ts +2 -7
  271. package/dist/modules/registry.js +2 -1
  272. package/dist/modules/registry.js.map +1 -1
  273. package/dist/modules/shop/blocks/Cart.d.ts +1 -1
  274. package/dist/modules/shop/blocks/Cart.js +6 -6
  275. package/dist/modules/shop/blocks/Checkout.d.ts +1 -1
  276. package/dist/modules/shop/blocks/Checkout.js +6 -6
  277. package/dist/modules/shop/blocks/Donation.d.ts +1 -1
  278. package/dist/modules/shop/blocks/Donation.js +5 -5
  279. package/dist/modules/shop/blocks/OrderStatus.d.ts +1 -1
  280. package/dist/modules/shop/blocks/OrderStatus.js +5 -5
  281. package/dist/modules/shop/blocks/ProductDetail.d.ts +1 -1
  282. package/dist/modules/shop/blocks/ProductDetail.js +8 -8
  283. package/dist/modules/shop/blocks/ProductGrid.d.ts +3 -3
  284. package/dist/modules/shop/blocks/ProductGrid.js +7 -7
  285. package/dist/modules/shop/blocks/ShopCategories.d.ts +1 -1
  286. package/dist/modules/shop/blocks/ShopCategories.js +6 -6
  287. package/dist/modules/shop/index.d.ts +5 -5
  288. package/dist/modules/shop/index.js +5 -5
  289. package/dist/modules/shop/lib.d.ts +2 -2
  290. package/dist/modules/shop/lib.js +18 -13
  291. package/dist/modules/shop/lib.js.map +1 -1
  292. package/dist/modules/shop/module.d.ts +1 -1
  293. package/dist/modules/shop/module.js +9 -9
  294. package/dist/modules/shop/settings.d.ts +18 -50
  295. package/dist/modules/shop/settings.js +16 -16
  296. package/dist/modules/shop/settings.js.map +1 -1
  297. package/dist/modules/shop/strings.js +1 -1
  298. package/dist/modules/shop/types.d.ts +1 -1
  299. package/dist/modules/types.d.ts +2 -2
  300. package/dist/patterns/builtins.d.ts +1 -1
  301. package/dist/patterns/builtins.js +1 -1
  302. package/dist/patterns/index.d.ts +2 -2
  303. package/dist/patterns/index.js +2 -2
  304. package/dist/render/PageRenderer.d.ts +2 -2
  305. package/dist/render/PageRenderer.js +1 -1
  306. package/dist/render/PublishedPage.d.ts +1 -1
  307. package/dist/render/PublishedPage.js +2 -2
  308. package/dist/schema/blocks.d.ts +6793 -15095
  309. package/dist/schema/blocks.js +335 -355
  310. package/dist/schema/blocks.js.map +1 -1
  311. package/dist/schema/customBlocks.d.ts +10 -29
  312. package/dist/schema/customBlocks.js +14 -13
  313. package/dist/schema/customBlocks.js.map +1 -1
  314. package/dist/schema/fields.d.ts +10 -16
  315. package/dist/schema/fields.js +37 -37
  316. package/dist/schema/fields.js.map +1 -1
  317. package/dist/schema/forms.d.ts +62 -111
  318. package/dist/schema/forms.js +17 -17
  319. package/dist/schema/forms.js.map +1 -1
  320. package/dist/schema/index.d.ts +7 -7
  321. package/dist/schema/index.js +7 -7
  322. package/dist/schema/mail.d.ts +39 -87
  323. package/dist/schema/mail.js +4 -4
  324. package/dist/schema/mail.js.map +1 -1
  325. package/dist/schema/pages.d.ts +152 -674
  326. package/dist/schema/pages.js +26 -15
  327. package/dist/schema/pages.js.map +1 -1
  328. package/dist/schema/seo.d.ts +9 -27
  329. package/dist/schema/seo.js +7 -7
  330. package/dist/schema/seo.js.map +1 -1
  331. package/dist/schema/settings.d.ts +218 -1074
  332. package/dist/schema/settings.js +55 -55
  333. package/dist/schema/settings.js.map +1 -1
  334. package/dist/schema/shop.d.ts +470 -1214
  335. package/dist/schema/shop.js +124 -124
  336. package/dist/schema/shop.js.map +1 -1
  337. package/dist/schema/siteConfig.d.ts +73 -597
  338. package/dist/schema/siteConfig.js +17 -17
  339. package/dist/schema/siteConfig.js.map +1 -1
  340. package/dist/schema/symbols.d.ts +34 -191
  341. package/dist/schema/symbols.js +8 -8
  342. package/dist/schema/symbols.js.map +1 -1
  343. package/dist/server/auth.d.ts +17 -0
  344. package/dist/server/auth.js +11 -0
  345. package/dist/server/auth.js.map +1 -0
  346. package/dist/server/bundle.d.ts +15 -6
  347. package/dist/server/bundle.js +5 -1
  348. package/dist/server/bundle.js.map +1 -1
  349. package/dist/server/draft.d.ts +16 -0
  350. package/dist/server/draft.js +12 -0
  351. package/dist/server/draft.js.map +1 -0
  352. package/dist/server/env.js +8 -8
  353. package/dist/server/env.js.map +1 -1
  354. package/dist/server/index.d.ts +10 -8
  355. package/dist/server/index.js +12 -9
  356. package/dist/server/index.js.map +1 -1
  357. package/dist/server/pages.d.ts +14 -7
  358. package/dist/server/pages.js +183 -17
  359. package/dist/server/pages.js.map +1 -1
  360. package/dist/server/revalidate.d.ts +6 -0
  361. package/dist/server/revalidate.js +40 -0
  362. package/dist/server/revalidate.js.map +1 -0
  363. package/dist/server/seo.d.ts +3 -3
  364. package/dist/server/seo.js +1 -1
  365. package/dist/server/shop.d.ts +3 -3
  366. package/dist/server/shop.js +6 -3
  367. package/dist/server/shop.js.map +1 -1
  368. package/dist/settings/useSiteSettings.d.ts +2 -2
  369. package/dist/settings/useSiteSettings.js +48 -28
  370. package/dist/settings/useSiteSettings.js.map +1 -1
  371. package/dist/styles.css +4 -1
  372. package/dist/theme/presets.d.ts +1 -1
  373. package/package.json +35 -34
@@ -1,44 +1,65 @@
1
1
  "use client";
2
- import { jsx, jsxs } from "react/jsx-runtime";
3
- import * as DialogPrimitive from "@radix-ui/react-dialog";
4
- import { cn } from "./cn";
5
- const Dialog = DialogPrimitive.Root;
6
- const DialogTrigger = DialogPrimitive.Trigger;
7
- const DialogClose = DialogPrimitive.Close;
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import {
4
+ cloneElement,
5
+ createContext,
6
+ isValidElement,
7
+ useContext,
8
+ useState
9
+ } from "react";
10
+ import { Dialog as AstryxDialog, DialogHeader } from "@astryxdesign/core/Dialog";
11
+ import { cn } from "./cn.js";
12
+ const Ctx = createContext(null);
13
+ const useDialog = () => {
14
+ const ctx = useContext(Ctx);
15
+ if (!ctx) throw new Error("Dialog-onderdelen horen binnen <Dialog> te staan.");
16
+ return ctx;
17
+ };
18
+ function withClick(children, action) {
19
+ if (!isValidElement(children)) return children;
20
+ const el = children;
21
+ return cloneElement(el, {
22
+ onClick: (e) => {
23
+ el.props.onClick?.(e);
24
+ action();
25
+ }
26
+ });
27
+ }
28
+ function Dialog({
29
+ open: controlled,
30
+ onOpenChange,
31
+ children
32
+ }) {
33
+ const [uncontrolled, setUncontrolled] = useState(false);
34
+ const open = controlled ?? uncontrolled;
35
+ const setOpen = (v) => {
36
+ if (controlled === void 0) setUncontrolled(v);
37
+ onOpenChange?.(v);
38
+ };
39
+ return /* @__PURE__ */ jsx(Ctx.Provider, { value: { open, setOpen }, children });
40
+ }
41
+ function DialogTrigger({ children }) {
42
+ const { setOpen } = useDialog();
43
+ return /* @__PURE__ */ jsx(Fragment, { children: withClick(children, () => setOpen(true)) });
44
+ }
45
+ function DialogClose({ children }) {
46
+ const { setOpen } = useDialog();
47
+ return /* @__PURE__ */ jsx(Fragment, { children: withClick(children, () => setOpen(false)) });
48
+ }
8
49
  function DialogContent({
9
- className,
10
- children,
11
50
  title,
12
- ...props
51
+ width = "min(92vw, 32rem)",
52
+ className,
53
+ children
13
54
  }) {
14
- const container = typeof document !== "undefined" ? document.querySelector(".xicms-ve") ?? document.querySelector(".xicms-admin") : null;
15
- return /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { container: container ?? void 0, children: [
16
- /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { className: "fixed inset-0 z-[10010] bg-black/50" }),
17
- /* @__PURE__ */ jsxs(
18
- DialogPrimitive.Content,
19
- {
20
- style: {
21
- position: "fixed",
22
- left: "50%",
23
- top: "50%",
24
- transform: "translate(-50%, -50%)",
25
- width: "min(92vw, 32rem)",
26
- maxHeight: "85vh",
27
- overflowY: "auto",
28
- zIndex: 10011
29
- },
30
- className: cn("rounded-xl bg-white p-5 shadow-xl focus:outline-none", className),
31
- ...props,
32
- children: [
33
- /* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "mb-3 text-lg font-semibold", children: title }),
34
- children
35
- ]
36
- }
37
- )
55
+ const { open, setOpen } = useDialog();
56
+ return /* @__PURE__ */ jsxs(AstryxDialog, { isOpen: open, onOpenChange: setOpen, width, purpose: "form", className, children: [
57
+ /* @__PURE__ */ jsx(DialogHeader, { title }),
58
+ children
38
59
  ] });
39
60
  }
40
61
  function DialogDescription({ className, ...props }) {
41
- return /* @__PURE__ */ jsx(DialogPrimitive.Description, { className: cn("text-sm text-slate-600", className), ...props });
62
+ return /* @__PURE__ */ jsx("p", { className: cn("text-sm text-slate-600", className), ...props });
42
63
  }
43
64
  function DialogFooter({ className, ...props }) {
44
65
  return /* @__PURE__ */ jsx("div", { className: cn("mt-5 flex items-center justify-end gap-2", className), ...props });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cn } from \"./cn\";\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nexport function DialogContent({\n className,\n children,\n title,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & { title: string }) {\n // De admin-Tailwind is gescoped onder `.xicms-admin` (important: \".xicms-admin\"). Radix portalt\n // standaard naar <body> — buiten die scope, waardoor de dialog volledig ONGESTYLED zou renderen\n // (static, geen achtergrond, achter de editor). Daarom portalen we IN de admin-scope.\n const container =\n typeof document !== \"undefined\"\n ? document.querySelector<HTMLElement>(\".xicms-ve\") ?? document.querySelector<HTMLElement>(\".xicms-admin\")\n : null;\n return (\n <DialogPrimitive.Portal container={container ?? undefined}>\n {/* Boven de VisualEditor-overlay (z-index 10000) zodat de kiezer niet erachter verdwijnt. */}\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-[10010] bg-black/50\" />\n <DialogPrimitive.Content\n // Centreren + maat via INLINE style i.p.v. Tailwind-utilities: `-translate-x-1/2` werd in de\n // gescopete/geportalde admin-context (Tailwind v4) niet toegepast, waardoor de dialog op\n // `left:50%` bleef hangen en op smalle schermen rechts buiten beeld liep. Inline styles omzeilen\n // de scoping/laag-volgorde volledig en winnen altijd. Content blijft een directe Portal-child\n // (wrappen in een <div> brak Radix → \"Maximum update depth exceeded\"). max-height + overflow\n // houdt de kiezer op mobiel binnen het scherm.\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"min(92vw, 32rem)\",\n maxHeight: \"85vh\",\n overflowY: \"auto\",\n zIndex: 10011,\n }}\n className={cn(\"rounded-xl bg-white p-5 shadow-xl focus:outline-none\", className)}\n {...props}\n >\n <DialogPrimitive.Title className=\"mb-3 text-lg font-semibold\">{title}</DialogPrimitive.Title>\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n}\n\nexport function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return <DialogPrimitive.Description className={cn(\"text-sm text-slate-600\", className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"mt-5 flex items-center justify-end gap-2\", className)} {...props} />;\n}\n"],"mappings":";AAyBM,cACA,YADA;AAvBN,YAAY,qBAAqB;AACjC,SAAS,UAAU;AAEZ,MAAM,SAAS,gBAAgB;AAC/B,MAAM,gBAAgB,gBAAgB;AACtC,MAAM,cAAc,gBAAgB;AAEpC,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6E;AAI3E,QAAM,YACJ,OAAO,aAAa,cAChB,SAAS,cAA2B,WAAW,KAAK,SAAS,cAA2B,cAAc,IACtG;AACN,SACE,qBAAC,gBAAgB,QAAhB,EAAuB,WAAW,aAAa,QAE9C;AAAA,wBAAC,gBAAgB,SAAhB,EAAwB,WAAU,uCAAsC;AAAA,IACzE;AAAA,MAAC,gBAAgB;AAAA,MAAhB;AAAA,QAOC,OAAO;AAAA,UACL,UAAU;AAAA,UACV,MAAM;AAAA,UACN,KAAK;AAAA,UACL,WAAW;AAAA,UACX,OAAO;AAAA,UACP,WAAW;AAAA,UACX,WAAW;AAAA,UACX,QAAQ;AAAA,QACV;AAAA,QACA,WAAW,GAAG,wDAAwD,SAAS;AAAA,QAC9E,GAAG;AAAA,QAEJ;AAAA,8BAAC,gBAAgB,OAAhB,EAAsB,WAAU,8BAA8B,iBAAM;AAAA,UACpE;AAAA;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAEO,SAAS,kBAAkB,EAAE,WAAW,GAAG,MAAM,GAA6D;AACnH,SAAO,oBAAC,gBAAgB,aAAhB,EAA4B,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AACrG;AAEO,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AACjF,SAAO,oBAAC,SAAI,WAAW,GAAG,4CAA4C,SAAS,GAAI,GAAG,OAAO;AAC/F;","names":[]}
1
+ {"version":3,"sources":["../../../src/admin/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n cloneElement,\n createContext,\n isValidElement,\n useContext,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Dialog as AstryxDialog, DialogHeader } from \"@astryxdesign/core/Dialog\";\nimport { cn } from \"./cn\";\n\n/**\n * Dialogen op Astryx in plaats van Radix.\n *\n * De aanroep-API blijft ongewijzigd (Dialog/DialogTrigger/DialogContent/DialogClose), zodat de\n * mediakiezer, de bevestiging, de patroonkiezer en de factuurweergave hetzelfde blijven lezen.\n *\n * Waarom dit een vereenvoudiging is: Astryx rendert een NATIEVE `<dialog>` en opent hem met\n * `showModal()`. Daarmee staat hij in de top layer van de browser, boven alles — inclusief de\n * editor-overlay. De hele reeks workarounds die het Radix-pad nodig had, vervalt:\n *\n * - portalen ín `.xicms-ve`/`.xicms-admin` omdat Radix anders buiten de gescopete admin-CSS\n * landde en volledig ongestyled rendeerde;\n * - `z-index: 10010/10011` om boven die overlay te komen;\n * - inline centreren omdat `-translate-x-1/2` in de gescopete Tailwind-context niet aansloeg,\n * waardoor de dialoog op smalle schermen rechts buiten beeld liep.\n *\n * Astryx regelt bovendien zelf scroll-lock, focus-insluiting én focusherstel naar het element dat\n * de dialoog opende, en stemt zijn Escape-afhandeling af op een actieve focus trap.\n */\ninterface DialogCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n}\nconst Ctx = createContext<DialogCtx | null>(null);\nconst useDialog = (): DialogCtx => {\n const ctx = useContext(Ctx);\n if (!ctx) throw new Error(\"Dialog-onderdelen horen binnen <Dialog> te staan.\");\n return ctx;\n};\n\n/** Kloont het kind en hangt er een klik-actie aan (het `asChild`-patroon van de vorige API). */\nfunction withClick(children: ReactNode, action: () => void): ReactNode {\n if (!isValidElement(children)) return children;\n const el = children as ReactElement<{ onClick?: (e: MouseEvent) => void }>;\n return cloneElement(el, {\n onClick: (e: MouseEvent) => {\n el.props.onClick?.(e);\n action();\n },\n });\n}\n\nexport function Dialog({\n open: controlled,\n onOpenChange,\n children,\n}: {\n open?: boolean;\n onOpenChange?: (v: boolean) => void;\n children: ReactNode;\n}) {\n const [uncontrolled, setUncontrolled] = useState(false);\n const open = controlled ?? uncontrolled;\n const setOpen = (v: boolean) => {\n if (controlled === undefined) setUncontrolled(v);\n onOpenChange?.(v);\n };\n return <Ctx.Provider value={{ open, setOpen }}>{children}</Ctx.Provider>;\n}\n\n/** `asChild` blijft geaccepteerd voor een ongewijzigde aanroep-API; het kind wordt altijd gekloond. */\nexport function DialogTrigger({ children }: { children: ReactNode; asChild?: boolean }) {\n const { setOpen } = useDialog();\n return <>{withClick(children, () => setOpen(true))}</>;\n}\n\nexport function DialogClose({ children }: { children: ReactNode; asChild?: boolean }) {\n const { setOpen } = useDialog();\n return <>{withClick(children, () => setOpen(false))}</>;\n}\n\nexport function DialogContent({\n title,\n width = \"min(92vw, 32rem)\",\n className,\n children,\n}: {\n title: string;\n /** Breedte van de dialoog. Verving de `max-w-*`-klassen: Astryx zet de breedte inline. */\n width?: number | string;\n className?: string;\n children: ReactNode;\n}) {\n const { open, setOpen } = useDialog();\n return (\n <AstryxDialog isOpen={open} onOpenChange={setOpen} width={width} purpose=\"form\" className={className}>\n <DialogHeader title={title} />\n {children}\n </AstryxDialog>\n );\n}\n\nexport function DialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p className={cn(\"text-sm text-slate-600\", className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"mt-5 flex items-center justify-end gap-2\", className)} {...props} />;\n}\n"],"mappings":";AAwES,SAMA,UANA,KA4BL,YA5BK;AAtET;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,UAAU,cAAc,oBAAoB;AACrD,SAAS,UAAU;AAyBnB,MAAM,MAAM,cAAgC,IAAI;AAChD,MAAM,YAAY,MAAiB;AACjC,QAAM,MAAM,WAAW,GAAG;AAC1B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mDAAmD;AAC7E,SAAO;AACT;AAGA,SAAS,UAAU,UAAqB,QAA+B;AACrE,MAAI,CAAC,eAAe,QAAQ,EAAG,QAAO;AACtC,QAAM,KAAK;AACX,SAAO,aAAa,IAAI;AAAA,IACtB,SAAS,CAAC,MAAkB;AAC1B,SAAG,MAAM,UAAU,CAAC;AACpB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEO,SAAS,OAAO;AAAA,EACrB,MAAM;AAAA,EACN;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,OAAO,cAAc;AAC3B,QAAM,UAAU,CAAC,MAAe;AAC9B,QAAI,eAAe,OAAW,iBAAgB,CAAC;AAC/C,mBAAe,CAAC;AAAA,EAClB;AACA,SAAO,oBAAC,IAAI,UAAJ,EAAa,OAAO,EAAE,MAAM,QAAQ,GAAI,UAAS;AAC3D;AAGO,SAAS,cAAc,EAAE,SAAS,GAA+C;AACtF,QAAM,EAAE,QAAQ,IAAI,UAAU;AAC9B,SAAO,gCAAG,oBAAU,UAAU,MAAM,QAAQ,IAAI,CAAC,GAAE;AACrD;AAEO,SAAS,YAAY,EAAE,SAAS,GAA+C;AACpF,QAAM,EAAE,QAAQ,IAAI,UAAU;AAC9B,SAAO,gCAAG,oBAAU,UAAU,MAAM,QAAQ,KAAK,CAAC,GAAE;AACtD;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACF,GAMG;AACD,QAAM,EAAE,MAAM,QAAQ,IAAI,UAAU;AACpC,SACE,qBAAC,gBAAa,QAAQ,MAAM,cAAc,SAAS,OAAc,SAAQ,QAAO,WAC9E;AAAA,wBAAC,gBAAa,OAAc;AAAA,IAC3B;AAAA,KACH;AAEJ;AAEO,SAAS,kBAAkB,EAAE,WAAW,GAAG,MAAM,GAA8B;AACpF,SAAO,oBAAC,OAAE,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAC3E;AAEO,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AACjF,SAAO,oBAAC,SAAI,WAAW,GAAG,4CAA4C,SAAS,GAAI,GAAG,OAAO;AAC/F;","names":[]}
@@ -1,7 +1,7 @@
1
- export { cn } from "./cn";
2
- export { Button, Input, Textarea, Field, Card, Badge } from "./primitives";
3
- export { ToastProvider, useToast } from "./toast";
4
- export { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs";
5
- export { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog";
6
- export { Select } from "./select";
7
- export { Switch } from "./switch";
1
+ export { cn } from "./cn.js";
2
+ export { Button, Input, Textarea, Field, Card, Badge } from "./primitives.js";
3
+ export { ToastProvider, useToast } from "./toast.js";
4
+ export { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs.js";
5
+ export { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog.js";
6
+ export { Select } from "./select.js";
7
+ export { Switch } from "./switch.js";
@@ -1,10 +1,10 @@
1
- import { cn } from "./cn";
2
- import { Button, Input, Textarea, Field, Card, Badge } from "./primitives";
3
- import { ToastProvider, useToast } from "./toast";
4
- import { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs";
5
- import { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog";
6
- import { Select } from "./select";
7
- import { Switch } from "./switch";
1
+ import { cn } from "./cn.js";
2
+ import { Button, Input, Textarea, Field, Card, Badge } from "./primitives.js";
3
+ import { ToastProvider, useToast } from "./toast.js";
4
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs.js";
5
+ import { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog.js";
6
+ import { Select } from "./select.js";
7
+ import { Switch } from "./switch.js";
8
8
  export {
9
9
  Badge,
10
10
  Button,
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { forwardRef } from "react";
4
- import { cn } from "./cn";
4
+ import { cn } from "./cn.js";
5
5
  import { TextInput } from "@astryxdesign/core/TextInput";
6
6
  import { NumberInput } from "@astryxdesign/core/NumberInput";
7
7
  import { TextArea } from "@astryxdesign/core/TextArea";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import * as TabsPrimitive from "@radix-ui/react-tabs";
4
- import { cn } from "./cn";
4
+ import { cn } from "./cn.js";
5
5
  const Tabs = TabsPrimitive.Root;
6
6
  function TabsList({ className, ...props }) {
7
7
  return /* @__PURE__ */ jsx(
@@ -1,4 +1,4 @@
1
- import type { BlockRegistry } from "../../blocks/registry";
1
+ import type { BlockRegistry } from "../../blocks/registry.js";
2
2
  export declare function TranslationPanel({ block, siteId, registry, locale, overlay, onTranslate, }: {
3
3
  block: Record<string, unknown> & {
4
4
  _key: string;
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useMemo } from "react";
4
- import { introspectToFields } from "../lib/zodFields";
5
- import { RichTextEditor } from "../editors/RichTextEditor";
6
- import { Field as FieldRow, Input, Textarea } from "../ui/primitives";
4
+ import { introspectToFields } from "../lib/zodFields.js";
5
+ import { RichTextEditor } from "../editors/RichTextEditor.js";
6
+ import { Field as FieldRow, Input, Textarea } from "../ui/primitives.js";
7
7
  function collectEntries(fields, value, prefix = "", labelPrefix = "") {
8
8
  const out = [];
9
9
  for (const f of fields) {
@@ -2,28 +2,38 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import "@xiwebdesign/xicms-core/admin.css";
4
4
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
- import { useSiteConfig } from "../../config";
6
- import { useRegistry } from "../../blocks/context";
7
- import { introspectToFields } from "../lib/zodFields";
8
- import { BlockErrorBoundary } from "../../blocks/BlockErrorBoundary";
9
- import { InlineImageEditProvider } from "../../media/ImageContext";
10
- import { MediaPickerDialog } from "../media/MediaPicker";
5
+ import { useSiteConfig } from "../../config.js";
6
+ import { useRegistry } from "../../blocks/context.js";
7
+ import { introspectToFields } from "../lib/zodFields.js";
8
+ import { BlockErrorBoundary } from "../../blocks/BlockErrorBoundary.js";
9
+ import { InlineImageEditProvider } from "../../media/ImageContext.js";
10
+ import { MediaPickerDialog } from "../media/MediaPicker.js";
11
11
  import { EmptyState } from "@astryxdesign/core/EmptyState";
12
- import { buildBlockAddOptions } from "../../blocks/registry";
12
+ import { useFocusTrap, useScrollLock } from "@astryxdesign/core/hooks";
13
+ import { useNestedDialogOpen } from "../lib/useNestedDialog.js";
14
+ import { useThemeVars } from "../../XiCMSProvider.js";
15
+ import { buildBlockAddOptions } from "../../blocks/registry.js";
16
+ import { safeParse } from "zod/v4/core";
13
17
  import DOMPurify from "dompurify";
14
- import { createPage, getDraftByPath, saveDraft, publishPage, subscribeDraft, subscribeVersions, restoreVersion } from "../lib/pagesClient";
15
- import { isDemoActive } from "../../demo/demoStore";
16
- import { builtinBlockEditors, GenericEditor } from "../blockEditors";
17
- import { StyleEditor } from "../blockEditors/StyleEditor";
18
- import { siteLocales, parseLocaleSlugs, localizeBlocks } from "../../i18n/overlay";
19
- import { TranslationPanel } from "./TranslationPanel";
20
- import { reorderBlocks } from "./reorder";
21
- import { PatternInserter } from "../patterns/PatternInserter";
22
- import { Button, Field, Input, Textarea } from "../ui/primitives";
23
- import { Select } from "../ui/select";
24
- import { ToastProvider, useToast } from "../ui/toast";
25
- import { ConfirmHost, useConfirm } from "../ui/ConfirmDialog";
18
+ import { createPage, getDraftByPath, saveDraft, publishPage, subscribeDraft, subscribeVersions, restoreVersion } from "../lib/pagesClient.js";
19
+ import { isDemoActive } from "../../demo/demoStore.js";
20
+ import { builtinBlockEditors, GenericEditor } from "../blockEditors/index.js";
21
+ import { StyleEditor } from "../blockEditors/StyleEditor.js";
22
+ import { siteLocales, parseLocaleSlugs, localizeBlocks } from "../../i18n/overlay.js";
23
+ import { TranslationPanel } from "./TranslationPanel.js";
24
+ import { reorderBlocks } from "./reorder.js";
25
+ import { PatternInserter } from "../patterns/PatternInserter.js";
26
+ import { Button, Field, Input, Textarea } from "../ui/primitives.js";
27
+ import { Select } from "../ui/select.js";
28
+ import { ToastProvider, useToast } from "../ui/toast.js";
29
+ import { ConfirmHost, useConfirm } from "../ui/ConfirmDialog.js";
26
30
  const GLOBAL_INLINE = [
31
+ // `field: "html"` is de AANNAME, geen wet: een element mag met `data-xicms-edit` zeggen welk veld
32
+ // het werkelijk toont, en dat wint (zie de bind hieronder). Zonder die voorrang schreef élk
33
+ // `.xicms-richtext`-element naar een veld dat letterlijk "html" heet — waar de FAQ zijn antwoord
34
+ // in `items[].aHtml` bewaart en het accordeon in `items[].bodyHtml`. Inline bewerken van een
35
+ // FAQ-antwoord landde daardoor op een niet-bestaand veld: de wijziging verdween stil en het blok
36
+ // hield een zwerfveld over.
27
37
  { selector: ".xicms-richtext", field: "html", html: true },
28
38
  { selector: "[data-xicms-edit]", field: "", html: false, fromData: true }
29
39
  ];
@@ -90,6 +100,15 @@ function VisualEditorInner({ onClose }) {
90
100
  const firstSave = useRef(true);
91
101
  const canvasRef = useRef(null);
92
102
  const [conflict, setConflict] = useState(false);
103
+ const { vars: themeVars, darkAuto } = useThemeVars();
104
+ const nestedDialogOpen = useNestedDialogOpen();
105
+ const { containerRef, focusFirst } = useFocusTrap({ isActive: !nestedDialogOpen });
106
+ useScrollLock(true);
107
+ useEffect(() => {
108
+ const opener = document.activeElement;
109
+ focusFirst();
110
+ return () => opener?.focus?.();
111
+ }, [focusFirst]);
93
112
  const [dragIndex, setDragIndex] = useState(null);
94
113
  const [dropIndex, setDropIndex] = useState(null);
95
114
  const draggingRef = useRef(false);
@@ -323,7 +342,10 @@ function VisualEditorInner({ onClose }) {
323
342
  const apply = () => {
324
343
  for (const m of specs) {
325
344
  host.querySelectorAll(m.selector).forEach(
326
- (el) => bind(el, "fromData" in m && m.fromData ? el.dataset.xicmsEdit : m.field, !!m.html)
345
+ (el) => (
346
+ // Een expliciete `data-xicms-edit` wint altijd; anders het veld van de matcher.
347
+ bind(el, el.dataset.xicmsEdit ?? m.field, !!m.html)
348
+ )
327
349
  );
328
350
  }
329
351
  };
@@ -382,7 +404,7 @@ function VisualEditorInner({ onClose }) {
382
404
  if (e.key === "Escape") {
383
405
  const t2 = e.target;
384
406
  const inField2 = !!t2 && (t2.isContentEditable || t2.tagName === "INPUT" || t2.tagName === "TEXTAREA" || t2.tagName === "SELECT");
385
- const dialogOpen = document.querySelector('[role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]');
407
+ const dialogOpen = document.querySelector('dialog[open], [role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]');
386
408
  if (!inField2 && !dialogOpen) handleClose();
387
409
  return;
388
410
  }
@@ -436,7 +458,7 @@ function VisualEditorInner({ onClose }) {
436
458
  confirmLabel: "Loskoppelen"
437
459
  });
438
460
  if (!ok) return;
439
- const { getSymbolOnce } = await import("../lib/symbolsClient");
461
+ const { getSymbolOnce } = await import("../lib/symbolsClient.js");
440
462
  const sym = await getSymbolOnce(siteId, blk.symbolId);
441
463
  if (!sym) {
442
464
  toast({ title: "Symbool niet gevonden", tone: "error" });
@@ -509,7 +531,7 @@ function VisualEditorInner({ onClose }) {
509
531
  }
510
532
  setConflict(false);
511
533
  }, [siteId, path, mutateDraft]);
512
- return /* @__PURE__ */ jsxs("div", { className: "xicms-ve__shell", role: "dialog", "aria-modal": "true", "aria-label": `Pagina bewerken: ${path}`, children: [
534
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "xicms-ve__shell", role: "dialog", "aria-modal": "true", "aria-label": `Pagina bewerken: ${path}`, children: [
513
535
  /* @__PURE__ */ jsxs("header", { className: "xicms-ve__bar", children: [
514
536
  /* @__PURE__ */ jsxs("strong", { className: "xicms-ve__title", children: [
515
537
  "Bewerken \xB7 ",
@@ -542,7 +564,7 @@ function VisualEditorInner({ onClose }) {
542
564
  /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: () => setConflict(false), children: "Mijn versie behouden" })
543
565
  ] }),
544
566
  /* @__PURE__ */ jsxs("div", { className: "xicms-ve__body", children: [
545
- /* @__PURE__ */ jsxs("main", { className: "xicms-ve__canvas", children: [
567
+ /* @__PURE__ */ jsxs("main", { className: "xicms-ve__canvas xicms-root", "data-dark": darkAuto ? "auto" : void 0, style: themeVars, children: [
546
568
  status === "loading" && /* @__PURE__ */ jsx("p", { className: "xicms-ve__hint", children: "Laden\u2026" }),
547
569
  status === "none" && /* @__PURE__ */ jsxs("div", { className: "xicms-ve__empty", children: [
548
570
  /* @__PURE__ */ jsx(
@@ -561,7 +583,7 @@ function VisualEditorInner({ onClose }) {
561
583
  const def = registry.get(b._type);
562
584
  const Render = def?.Render;
563
585
  const safe = (() => {
564
- const parsed = def?.schema?.safeParse(b);
586
+ const parsed = def?.schema ? safeParse(def.schema, b) : void 0;
565
587
  return parsed?.success ? parsed.data : b;
566
588
  })();
567
589
  const dropClass = dropIndex === i ? " is-drop-before" : dropIndex === i + 1 ? " is-drop-after" : "";