@xiwebdesign/xicms-core 4.17.1

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 (436) hide show
  1. package/dist/XiCMSProvider.d.ts +58 -0
  2. package/dist/XiCMSProvider.js +165 -0
  3. package/dist/XiCMSProvider.js.map +1 -0
  4. package/dist/admin/AdminApp.d.ts +4 -0
  5. package/dist/admin/AdminApp.js +62 -0
  6. package/dist/admin/AdminApp.js.map +1 -0
  7. package/dist/admin/AdminHelp.d.ts +2 -0
  8. package/dist/admin/AdminHelp.js +65 -0
  9. package/dist/admin/AdminHelp.js.map +1 -0
  10. package/dist/admin/NewsEditor.d.ts +2 -0
  11. package/dist/admin/NewsEditor.js +171 -0
  12. package/dist/admin/NewsEditor.js.map +1 -0
  13. package/dist/admin/SuperadminPanel.d.ts +4 -0
  14. package/dist/admin/SuperadminPanel.js +101 -0
  15. package/dist/admin/SuperadminPanel.js.map +1 -0
  16. package/dist/admin/blockEditors/StyleEditor.d.ts +10 -0
  17. package/dist/admin/blockEditors/StyleEditor.js +78 -0
  18. package/dist/admin/blockEditors/StyleEditor.js.map +1 -0
  19. package/dist/admin/blockEditors/index.d.ts +16 -0
  20. package/dist/admin/blockEditors/index.js +1602 -0
  21. package/dist/admin/blockEditors/index.js.map +1 -0
  22. package/dist/admin/editors/RichTextEditor.d.ts +10 -0
  23. package/dist/admin/editors/RichTextEditor.js +86 -0
  24. package/dist/admin/editors/RichTextEditor.js.map +1 -0
  25. package/dist/admin/forms/FormsPanel.d.ts +3 -0
  26. package/dist/admin/forms/FormsPanel.js +203 -0
  27. package/dist/admin/forms/FormsPanel.js.map +1 -0
  28. package/dist/admin/index.d.ts +21 -0
  29. package/dist/admin/index.js +38 -0
  30. package/dist/admin/index.js.map +1 -0
  31. package/dist/admin/lib/compressImage.d.ts +12 -0
  32. package/dist/admin/lib/compressImage.js +53 -0
  33. package/dist/admin/lib/compressImage.js.map +1 -0
  34. package/dist/admin/lib/mediaUsage.d.ts +9 -0
  35. package/dist/admin/lib/mediaUsage.js +25 -0
  36. package/dist/admin/lib/mediaUsage.js.map +1 -0
  37. package/dist/admin/lib/pagesClient.d.ts +38 -0
  38. package/dist/admin/lib/pagesClient.js +143 -0
  39. package/dist/admin/lib/pagesClient.js.map +1 -0
  40. package/dist/admin/lib/slugify.d.ts +2 -0
  41. package/dist/admin/lib/slugify.js +7 -0
  42. package/dist/admin/lib/slugify.js.map +1 -0
  43. package/dist/admin/lib/upload.d.ts +13 -0
  44. package/dist/admin/lib/upload.js +40 -0
  45. package/dist/admin/lib/upload.js.map +1 -0
  46. package/dist/admin/lib/zodFields.d.ts +27 -0
  47. package/dist/admin/lib/zodFields.js +48 -0
  48. package/dist/admin/lib/zodFields.js.map +1 -0
  49. package/dist/admin/media/MediaManager.d.ts +3 -0
  50. package/dist/admin/media/MediaManager.js +132 -0
  51. package/dist/admin/media/MediaManager.js.map +1 -0
  52. package/dist/admin/media/MediaPicker.d.ts +24 -0
  53. package/dist/admin/media/MediaPicker.js +93 -0
  54. package/dist/admin/media/MediaPicker.js.map +1 -0
  55. package/dist/admin/pages/PageEditor.d.ts +5 -0
  56. package/dist/admin/pages/PageEditor.js +239 -0
  57. package/dist/admin/pages/PageEditor.js.map +1 -0
  58. package/dist/admin/pages/PagesPanel.d.ts +3 -0
  59. package/dist/admin/pages/PagesPanel.js +92 -0
  60. package/dist/admin/pages/PagesPanel.js.map +1 -0
  61. package/dist/admin/panelRegistry.d.ts +20 -0
  62. package/dist/admin/panelRegistry.js +23 -0
  63. package/dist/admin/panelRegistry.js.map +1 -0
  64. package/dist/admin/patterns/PatternInserter.d.ts +10 -0
  65. package/dist/admin/patterns/PatternInserter.js +58 -0
  66. package/dist/admin/patterns/PatternInserter.js.map +1 -0
  67. package/dist/admin/settings/SettingsPanel.d.ts +3 -0
  68. package/dist/admin/settings/SettingsPanel.js +304 -0
  69. package/dist/admin/settings/SettingsPanel.js.map +1 -0
  70. package/dist/admin/settings/moduleSettingsForm.d.ts +12 -0
  71. package/dist/admin/settings/moduleSettingsForm.js +45 -0
  72. package/dist/admin/settings/moduleSettingsForm.js.map +1 -0
  73. package/dist/admin/stats/StatsPanel.d.ts +4 -0
  74. package/dist/admin/stats/StatsPanel.js +80 -0
  75. package/dist/admin/stats/StatsPanel.js.map +1 -0
  76. package/dist/admin/ui/ArrayEditor.d.ts +16 -0
  77. package/dist/admin/ui/ArrayEditor.js +38 -0
  78. package/dist/admin/ui/ArrayEditor.js.map +1 -0
  79. package/dist/admin/ui/ConfirmDialog.d.ts +22 -0
  80. package/dist/admin/ui/ConfirmDialog.js +47 -0
  81. package/dist/admin/ui/ConfirmDialog.js.map +1 -0
  82. package/dist/admin/ui/cn.d.ts +3 -0
  83. package/dist/admin/ui/cn.js +9 -0
  84. package/dist/admin/ui/cn.js.map +1 -0
  85. package/dist/admin/ui/dialog.d.ts +9 -0
  86. package/dist/admin/ui/dialog.js +47 -0
  87. package/dist/admin/ui/dialog.js.map +1 -0
  88. package/dist/admin/ui/index.d.ts +7 -0
  89. package/dist/admin/ui/index.js +29 -0
  90. package/dist/admin/ui/index.js.map +1 -0
  91. package/dist/admin/ui/primitives.d.ts +37 -0
  92. package/dist/admin/ui/primitives.js +137 -0
  93. package/dist/admin/ui/primitives.js.map +1 -0
  94. package/dist/admin/ui/select.d.ts +11 -0
  95. package/dist/admin/ui/select.js +27 -0
  96. package/dist/admin/ui/select.js.map +1 -0
  97. package/dist/admin/ui/switch.d.ts +6 -0
  98. package/dist/admin/ui/switch.js +22 -0
  99. package/dist/admin/ui/switch.js.map +1 -0
  100. package/dist/admin/ui/tabs.d.ts +5 -0
  101. package/dist/admin/ui/tabs.js +36 -0
  102. package/dist/admin/ui/tabs.js.map +1 -0
  103. package/dist/admin/ui/toast.d.ts +19 -0
  104. package/dist/admin/ui/toast.js +24 -0
  105. package/dist/admin/ui/toast.js.map +1 -0
  106. package/dist/admin/visual/VisualEditor.d.ts +10 -0
  107. package/dist/admin/visual/VisualEditor.js +597 -0
  108. package/dist/admin/visual/VisualEditor.js.map +1 -0
  109. package/dist/admin/visual/reorder.d.ts +6 -0
  110. package/dist/admin/visual/reorder.js +12 -0
  111. package/dist/admin/visual/reorder.js.map +1 -0
  112. package/dist/admin.css +1 -0
  113. package/dist/auth/AuthProvider.d.ts +30 -0
  114. package/dist/auth/AuthProvider.js +110 -0
  115. package/dist/auth/AuthProvider.js.map +1 -0
  116. package/dist/auth/LoginForm.d.ts +4 -0
  117. package/dist/auth/LoginForm.js +122 -0
  118. package/dist/auth/LoginForm.js.map +1 -0
  119. package/dist/auth/roles.d.ts +15 -0
  120. package/dist/auth/roles.js +21 -0
  121. package/dist/auth/roles.js.map +1 -0
  122. package/dist/blocks/BlockErrorBoundary.d.ts +32 -0
  123. package/dist/blocks/BlockErrorBoundary.js +39 -0
  124. package/dist/blocks/BlockErrorBoundary.js.map +1 -0
  125. package/dist/blocks/BlockRenderer.d.ts +15 -0
  126. package/dist/blocks/BlockRenderer.js +24 -0
  127. package/dist/blocks/BlockRenderer.js.map +1 -0
  128. package/dist/blocks/blockStyle.d.ts +14 -0
  129. package/dist/blocks/blockStyle.js +14 -0
  130. package/dist/blocks/blockStyle.js.map +1 -0
  131. package/dist/blocks/builtins/Accordion.d.ts +2 -0
  132. package/dist/blocks/builtins/Accordion.js +45 -0
  133. package/dist/blocks/builtins/Accordion.js.map +1 -0
  134. package/dist/blocks/builtins/Agenda.d.ts +23 -0
  135. package/dist/blocks/builtins/Agenda.js +102 -0
  136. package/dist/blocks/builtins/Agenda.js.map +1 -0
  137. package/dist/blocks/builtins/Banner.d.ts +2 -0
  138. package/dist/blocks/builtins/Banner.js +45 -0
  139. package/dist/blocks/builtins/Banner.js.map +1 -0
  140. package/dist/blocks/builtins/BeforeAfter.d.ts +2 -0
  141. package/dist/blocks/builtins/BeforeAfter.js +44 -0
  142. package/dist/blocks/builtins/BeforeAfter.js.map +1 -0
  143. package/dist/blocks/builtins/Booking.d.ts +2 -0
  144. package/dist/blocks/builtins/Booking.js +27 -0
  145. package/dist/blocks/builtins/Booking.js.map +1 -0
  146. package/dist/blocks/builtins/Breadcrumbs.d.ts +10 -0
  147. package/dist/blocks/builtins/Breadcrumbs.js +73 -0
  148. package/dist/blocks/builtins/Breadcrumbs.js.map +1 -0
  149. package/dist/blocks/builtins/Cards.d.ts +2 -0
  150. package/dist/blocks/builtins/Cards.js +94 -0
  151. package/dist/blocks/builtins/Cards.js.map +1 -0
  152. package/dist/blocks/builtins/Columns.d.ts +2 -0
  153. package/dist/blocks/builtins/Columns.js +22 -0
  154. package/dist/blocks/builtins/Columns.js.map +1 -0
  155. package/dist/blocks/builtins/Contact.d.ts +7 -0
  156. package/dist/blocks/builtins/Contact.js +121 -0
  157. package/dist/blocks/builtins/Contact.js.map +1 -0
  158. package/dist/blocks/builtins/Countdown.d.ts +18 -0
  159. package/dist/blocks/builtins/Countdown.js +65 -0
  160. package/dist/blocks/builtins/Countdown.js.map +1 -0
  161. package/dist/blocks/builtins/Cta.d.ts +2 -0
  162. package/dist/blocks/builtins/Cta.js +52 -0
  163. package/dist/blocks/builtins/Cta.js.map +1 -0
  164. package/dist/blocks/builtins/Downloads.d.ts +2 -0
  165. package/dist/blocks/builtins/Downloads.js +32 -0
  166. package/dist/blocks/builtins/Downloads.js.map +1 -0
  167. package/dist/blocks/builtins/Elements.d.ts +4 -0
  168. package/dist/blocks/builtins/Elements.js +64 -0
  169. package/dist/blocks/builtins/Elements.js.map +1 -0
  170. package/dist/blocks/builtins/Embed.d.ts +2 -0
  171. package/dist/blocks/builtins/Embed.js +30 -0
  172. package/dist/blocks/builtins/Embed.js.map +1 -0
  173. package/dist/blocks/builtins/Faq.d.ts +6 -0
  174. package/dist/blocks/builtins/Faq.js +110 -0
  175. package/dist/blocks/builtins/Faq.js.map +1 -0
  176. package/dist/blocks/builtins/FormBlock.d.ts +2 -0
  177. package/dist/blocks/builtins/FormBlock.js +221 -0
  178. package/dist/blocks/builtins/FormBlock.js.map +1 -0
  179. package/dist/blocks/builtins/Gallery.d.ts +23 -0
  180. package/dist/blocks/builtins/Gallery.js +177 -0
  181. package/dist/blocks/builtins/Gallery.js.map +1 -0
  182. package/dist/blocks/builtins/Hero.d.ts +2 -0
  183. package/dist/blocks/builtins/Hero.js +47 -0
  184. package/dist/blocks/builtins/Hero.js.map +1 -0
  185. package/dist/blocks/builtins/ImageBlock.d.ts +2 -0
  186. package/dist/blocks/builtins/ImageBlock.js +24 -0
  187. package/dist/blocks/builtins/ImageBlock.js.map +1 -0
  188. package/dist/blocks/builtins/Jobs.d.ts +8 -0
  189. package/dist/blocks/builtins/Jobs.js +65 -0
  190. package/dist/blocks/builtins/Jobs.js.map +1 -0
  191. package/dist/blocks/builtins/Layout.d.ts +3 -0
  192. package/dist/blocks/builtins/Layout.js +67 -0
  193. package/dist/blocks/builtins/Layout.js.map +1 -0
  194. package/dist/blocks/builtins/MapBlock.d.ts +2 -0
  195. package/dist/blocks/builtins/MapBlock.js +31 -0
  196. package/dist/blocks/builtins/MapBlock.js.map +1 -0
  197. package/dist/blocks/builtins/NewsListBlock.d.ts +2 -0
  198. package/dist/blocks/builtins/NewsListBlock.js +24 -0
  199. package/dist/blocks/builtins/NewsListBlock.js.map +1 -0
  200. package/dist/blocks/builtins/Newsletter.d.ts +2 -0
  201. package/dist/blocks/builtins/Newsletter.js +84 -0
  202. package/dist/blocks/builtins/Newsletter.js.map +1 -0
  203. package/dist/blocks/builtins/OpenNowBadge.d.ts +9 -0
  204. package/dist/blocks/builtins/OpenNowBadge.js +20 -0
  205. package/dist/blocks/builtins/OpenNowBadge.js.map +1 -0
  206. package/dist/blocks/builtins/OpeningHours.d.ts +2 -0
  207. package/dist/blocks/builtins/OpeningHours.js +47 -0
  208. package/dist/blocks/builtins/OpeningHours.js.map +1 -0
  209. package/dist/blocks/builtins/PdfBlock.d.ts +2 -0
  210. package/dist/blocks/builtins/PdfBlock.js +97 -0
  211. package/dist/blocks/builtins/PdfBlock.js.map +1 -0
  212. package/dist/blocks/builtins/Portfolio.d.ts +2 -0
  213. package/dist/blocks/builtins/Portfolio.js +94 -0
  214. package/dist/blocks/builtins/Portfolio.js.map +1 -0
  215. package/dist/blocks/builtins/Pricing.d.ts +6 -0
  216. package/dist/blocks/builtins/Pricing.js +77 -0
  217. package/dist/blocks/builtins/Pricing.js.map +1 -0
  218. package/dist/blocks/builtins/RichTextBlock.d.ts +2 -0
  219. package/dist/blocks/builtins/RichTextBlock.js +18 -0
  220. package/dist/blocks/builtins/RichTextBlock.js.map +1 -0
  221. package/dist/blocks/builtins/Search.d.ts +2 -0
  222. package/dist/blocks/builtins/Search.js +99 -0
  223. package/dist/blocks/builtins/Search.js.map +1 -0
  224. package/dist/blocks/builtins/Sections.d.ts +5 -0
  225. package/dist/blocks/builtins/Sections.js +183 -0
  226. package/dist/blocks/builtins/Sections.js.map +1 -0
  227. package/dist/blocks/builtins/Slider.d.ts +2 -0
  228. package/dist/blocks/builtins/Slider.js +131 -0
  229. package/dist/blocks/builtins/Slider.js.map +1 -0
  230. package/dist/blocks/builtins/Spacer.d.ts +2 -0
  231. package/dist/blocks/builtins/Spacer.js +19 -0
  232. package/dist/blocks/builtins/Spacer.js.map +1 -0
  233. package/dist/blocks/builtins/Team.d.ts +2 -0
  234. package/dist/blocks/builtins/Team.js +70 -0
  235. package/dist/blocks/builtins/Team.js.map +1 -0
  236. package/dist/blocks/builtins/Testimonials.d.ts +8 -0
  237. package/dist/blocks/builtins/Testimonials.js +82 -0
  238. package/dist/blocks/builtins/Testimonials.js.map +1 -0
  239. package/dist/blocks/builtins/Video.d.ts +9 -0
  240. package/dist/blocks/builtins/Video.js +77 -0
  241. package/dist/blocks/builtins/Video.js.map +1 -0
  242. package/dist/blocks/builtins/WhatsappChat.d.ts +8 -0
  243. package/dist/blocks/builtins/WhatsappChat.js +51 -0
  244. package/dist/blocks/builtins/WhatsappChat.js.map +1 -0
  245. package/dist/blocks/builtins/Widgets.d.ts +13 -0
  246. package/dist/blocks/builtins/Widgets.js +308 -0
  247. package/dist/blocks/builtins/Widgets.js.map +1 -0
  248. package/dist/blocks/builtins/consentEmbed.d.ts +17 -0
  249. package/dist/blocks/builtins/consentEmbed.js +31 -0
  250. package/dist/blocks/builtins/consentEmbed.js.map +1 -0
  251. package/dist/blocks/builtins/index.d.ts +46 -0
  252. package/dist/blocks/builtins/index.js +121 -0
  253. package/dist/blocks/builtins/index.js.map +1 -0
  254. package/dist/blocks/builtins/lib/bookingUrl.d.ts +8 -0
  255. package/dist/blocks/builtins/lib/bookingUrl.js +50 -0
  256. package/dist/blocks/builtins/lib/bookingUrl.js.map +1 -0
  257. package/dist/blocks/builtins/lib/fileIcon.d.ts +2 -0
  258. package/dist/blocks/builtins/lib/fileIcon.js +45 -0
  259. package/dist/blocks/builtins/lib/fileIcon.js.map +1 -0
  260. package/dist/blocks/builtins/lib/ics.d.ts +17 -0
  261. package/dist/blocks/builtins/lib/ics.js +50 -0
  262. package/dist/blocks/builtins/lib/ics.js.map +1 -0
  263. package/dist/blocks/builtins/lib/openingHours.d.ts +20 -0
  264. package/dist/blocks/builtins/lib/openingHours.js +79 -0
  265. package/dist/blocks/builtins/lib/openingHours.js.map +1 -0
  266. package/dist/blocks/builtins/lib/searchRank.d.ts +22 -0
  267. package/dist/blocks/builtins/lib/searchRank.js +45 -0
  268. package/dist/blocks/builtins/lib/searchRank.js.map +1 -0
  269. package/dist/blocks/builtins/lib/submitForm.d.ts +6 -0
  270. package/dist/blocks/builtins/lib/submitForm.js +14 -0
  271. package/dist/blocks/builtins/lib/submitForm.js.map +1 -0
  272. package/dist/blocks/context.d.ts +8 -0
  273. package/dist/blocks/context.js +20 -0
  274. package/dist/blocks/context.js.map +1 -0
  275. package/dist/blocks/index.d.ts +9 -0
  276. package/dist/blocks/index.js +21 -0
  277. package/dist/blocks/index.js.map +1 -0
  278. package/dist/blocks/registry.d.ts +75 -0
  279. package/dist/blocks/registry.js +71 -0
  280. package/dist/blocks/registry.js.map +1 -0
  281. package/dist/blocks/ui/index.d.ts +35 -0
  282. package/dist/blocks/ui/index.js +48 -0
  283. package/dist/blocks/ui/index.js.map +1 -0
  284. package/dist/components/EditBar.d.ts +2 -0
  285. package/dist/components/EditBar.js +20 -0
  286. package/dist/components/EditBar.js.map +1 -0
  287. package/dist/components/EditableImage.d.ts +18 -0
  288. package/dist/components/EditableImage.js +62 -0
  289. package/dist/components/EditableImage.js.map +1 -0
  290. package/dist/components/EditableRichText.d.ts +14 -0
  291. package/dist/components/EditableRichText.js +26 -0
  292. package/dist/components/EditableRichText.js.map +1 -0
  293. package/dist/components/EditableText.d.ts +21 -0
  294. package/dist/components/EditableText.js +25 -0
  295. package/dist/components/EditableText.js.map +1 -0
  296. package/dist/components/News.d.ts +38 -0
  297. package/dist/components/News.js +128 -0
  298. package/dist/components/News.js.map +1 -0
  299. package/dist/components/PageView.d.ts +8 -0
  300. package/dist/components/PageView.js +28 -0
  301. package/dist/components/PageView.js.map +1 -0
  302. package/dist/components/ResponsiveImage.d.ts +16 -0
  303. package/dist/components/ResponsiveImage.js +39 -0
  304. package/dist/components/ResponsiveImage.js.map +1 -0
  305. package/dist/components/site/SiteFooter.d.ts +12 -0
  306. package/dist/components/site/SiteFooter.js +34 -0
  307. package/dist/components/site/SiteFooter.js.map +1 -0
  308. package/dist/config.d.ts +8 -0
  309. package/dist/config.js +17 -0
  310. package/dist/config.js.map +1 -0
  311. package/dist/content/ContentProvider.d.ts +23 -0
  312. package/dist/content/ContentProvider.js +86 -0
  313. package/dist/content/ContentProvider.js.map +1 -0
  314. package/dist/content/types.d.ts +41 -0
  315. package/dist/content/types.js +1 -0
  316. package/dist/content/types.js.map +1 -0
  317. package/dist/demo/DemoStudio.d.ts +7 -0
  318. package/dist/demo/DemoStudio.js +54 -0
  319. package/dist/demo/DemoStudio.js.map +1 -0
  320. package/dist/demo/demoStore.d.ts +26 -0
  321. package/dist/demo/demoStore.js +115 -0
  322. package/dist/demo/demoStore.js.map +1 -0
  323. package/dist/editor/EditorProvider.d.ts +12 -0
  324. package/dist/editor/EditorProvider.js +22 -0
  325. package/dist/editor/EditorProvider.js.map +1 -0
  326. package/dist/firebase/admin.d.ts +7 -0
  327. package/dist/firebase/admin.js +31 -0
  328. package/dist/firebase/admin.js.map +1 -0
  329. package/dist/firebase/appcheck.d.ts +6 -0
  330. package/dist/firebase/appcheck.js +23 -0
  331. package/dist/firebase/appcheck.js.map +1 -0
  332. package/dist/firebase/client.d.ts +9 -0
  333. package/dist/firebase/client.js +44 -0
  334. package/dist/firebase/client.js.map +1 -0
  335. package/dist/firebase/region.d.ts +5 -0
  336. package/dist/firebase/region.js +7 -0
  337. package/dist/firebase/region.js.map +1 -0
  338. package/dist/index.d.ts +54 -0
  339. package/dist/index.js +172 -0
  340. package/dist/index.js.map +1 -0
  341. package/dist/layers.css +13 -0
  342. package/dist/lock/DemoLock.d.ts +5 -0
  343. package/dist/lock/DemoLock.js +35 -0
  344. package/dist/lock/DemoLock.js.map +1 -0
  345. package/dist/media/ImageContext.d.ts +41 -0
  346. package/dist/media/ImageContext.js +74 -0
  347. package/dist/media/ImageContext.js.map +1 -0
  348. package/dist/modules/builtins.d.ts +46 -0
  349. package/dist/modules/builtins.js +462 -0
  350. package/dist/modules/builtins.js.map +1 -0
  351. package/dist/modules/consent/ConsentBanner.d.ts +42 -0
  352. package/dist/modules/consent/ConsentBanner.js +119 -0
  353. package/dist/modules/consent/ConsentBanner.js.map +1 -0
  354. package/dist/modules/consent/useConsent.d.ts +28 -0
  355. package/dist/modules/consent/useConsent.js +52 -0
  356. package/dist/modules/consent/useConsent.js.map +1 -0
  357. package/dist/modules/context.d.ts +20 -0
  358. package/dist/modules/context.js +31 -0
  359. package/dist/modules/context.js.map +1 -0
  360. package/dist/modules/contract.d.ts +9 -0
  361. package/dist/modules/contract.js +38 -0
  362. package/dist/modules/contract.js.map +1 -0
  363. package/dist/modules/defineModule.d.ts +11 -0
  364. package/dist/modules/defineModule.js +7 -0
  365. package/dist/modules/defineModule.js.map +1 -0
  366. package/dist/modules/index.d.ts +13 -0
  367. package/dist/modules/index.js +44 -0
  368. package/dist/modules/index.js.map +1 -0
  369. package/dist/modules/overrides.d.ts +17 -0
  370. package/dist/modules/overrides.js +25 -0
  371. package/dist/modules/overrides.js.map +1 -0
  372. package/dist/modules/registry.d.ts +40 -0
  373. package/dist/modules/registry.js +79 -0
  374. package/dist/modules/registry.js.map +1 -0
  375. package/dist/modules/types.d.ts +66 -0
  376. package/dist/modules/types.js +1 -0
  377. package/dist/modules/types.js.map +1 -0
  378. package/dist/patterns/builtins.d.ts +31 -0
  379. package/dist/patterns/builtins.js +415 -0
  380. package/dist/patterns/builtins.js.map +1 -0
  381. package/dist/patterns/index.d.ts +6 -0
  382. package/dist/patterns/index.js +9 -0
  383. package/dist/patterns/index.js.map +1 -0
  384. package/dist/patterns/patterns.d.ts +28 -0
  385. package/dist/patterns/patterns.js +53 -0
  386. package/dist/patterns/patterns.js.map +1 -0
  387. package/dist/render/PageRenderer.d.ts +13 -0
  388. package/dist/render/PageRenderer.js +14 -0
  389. package/dist/render/PageRenderer.js.map +1 -0
  390. package/dist/render/PublishedPage.d.ts +13 -0
  391. package/dist/render/PublishedPage.js +16 -0
  392. package/dist/render/PublishedPage.js.map +1 -0
  393. package/dist/schema/blocks.d.ts +15052 -0
  394. package/dist/schema/blocks.js +794 -0
  395. package/dist/schema/blocks.js.map +1 -0
  396. package/dist/schema/forms.d.ts +111 -0
  397. package/dist/schema/forms.js +47 -0
  398. package/dist/schema/forms.js.map +1 -0
  399. package/dist/schema/index.d.ts +11 -0
  400. package/dist/schema/index.js +16 -0
  401. package/dist/schema/index.js.map +1 -0
  402. package/dist/schema/pages.d.ts +674 -0
  403. package/dist/schema/pages.js +37 -0
  404. package/dist/schema/pages.js.map +1 -0
  405. package/dist/schema/seo.d.ts +29 -0
  406. package/dist/schema/seo.js +17 -0
  407. package/dist/schema/seo.js.map +1 -0
  408. package/dist/schema/settings.d.ts +1126 -0
  409. package/dist/schema/settings.js +128 -0
  410. package/dist/schema/settings.js.map +1 -0
  411. package/dist/schema/siteConfig.d.ts +722 -0
  412. package/dist/schema/siteConfig.js +39 -0
  413. package/dist/schema/siteConfig.js.map +1 -0
  414. package/dist/server/env.d.ts +10 -0
  415. package/dist/server/env.js +36 -0
  416. package/dist/server/env.js.map +1 -0
  417. package/dist/server/index.d.ts +10 -0
  418. package/dist/server/index.js +51 -0
  419. package/dist/server/index.js.map +1 -0
  420. package/dist/server/pages.d.ts +15 -0
  421. package/dist/server/pages.js +99 -0
  422. package/dist/server/pages.js.map +1 -0
  423. package/dist/server/sanitize.d.ts +2 -0
  424. package/dist/server/sanitize.js +55 -0
  425. package/dist/server/sanitize.js.map +1 -0
  426. package/dist/server/seo.d.ts +116 -0
  427. package/dist/server/seo.js +179 -0
  428. package/dist/server/seo.js.map +1 -0
  429. package/dist/settings/useSiteSettings.d.ts +25 -0
  430. package/dist/settings/useSiteSettings.js +68 -0
  431. package/dist/settings/useSiteSettings.js.map +1 -0
  432. package/dist/styles.css +2495 -0
  433. package/dist/theme/presets.d.ts +12 -0
  434. package/dist/theme/presets.js +147 -0
  435. package/dist/theme/presets.js.map +1 -0
  436. package/package.json +112 -0
@@ -0,0 +1,26 @@
1
+ import type { Page } from "../schema/pages";
2
+ import type { NewsArticle } from "../content/types";
3
+ import type { FormDefinition } from "../schema/forms";
4
+ export declare const DEMO_EVENT = "xicms:demo";
5
+ /** Zet de demo-bewerkmodus aan/uit (door de provider, op basis van config.demoEditing). */
6
+ export declare function setDemoActive(on: boolean): void;
7
+ export declare function isDemoActive(): boolean;
8
+ /** Stabiel, deterministisch draft-id per pad, zodat pagina + editor naar dezelfde opslag wijzen. */
9
+ export declare function demoIdForPath(path: string): string;
10
+ export declare function isDemoLoggedIn(): boolean;
11
+ export declare function setDemoLoggedIn(on: boolean): void;
12
+ export declare function registerSeed(siteId: string, path: string, page: Page): void;
13
+ export declare function getSeed(siteId: string, path: string): Page | null;
14
+ export declare function registerDemoNews(siteId: string, articles: NewsArticle[]): void;
15
+ export declare function getDemoNews(siteId: string): NewsArticle[];
16
+ export declare function registerDemoForm(siteId: string, formId: string, def: FormDefinition): void;
17
+ export declare function getDemoForm(siteId: string, formId: string): FormDefinition | null;
18
+ export declare function loadDemoDraft(siteId: string, id: string): Partial<Page> | null;
19
+ export declare function saveDemoDraft(siteId: string, id: string, patch: Partial<Page>): void;
20
+ /** Verwijdert alle lokale demo-bewerkingen + login voor deze site (de "Reset"-knop). */
21
+ export declare function resetDemo(siteId: string): void;
22
+ /**
23
+ * De effectieve demo-pagina = seed met lokale bewerkingen eroverheen. Gebruikt door de demo-pagina
24
+ * om de wijzigingen van de bezoeker direct te tonen (ook na sluiten van de editor).
25
+ */
26
+ export declare function resolveDemoPage(siteId: string, path: string): Page | null;
@@ -0,0 +1,115 @@
1
+ "use client";
2
+ const DRAFT_PREFIX = "xicms-demo-draft";
3
+ const SESSION_KEY = "xicms-demo-session";
4
+ const DEMO_EVENT = "xicms:demo";
5
+ let active = false;
6
+ const seeds = /* @__PURE__ */ new Map();
7
+ const newsSeeds = /* @__PURE__ */ new Map();
8
+ const formSeeds = /* @__PURE__ */ new Map();
9
+ function setDemoActive(on) {
10
+ active = on;
11
+ }
12
+ function isDemoActive() {
13
+ return active;
14
+ }
15
+ function demoIdForPath(path) {
16
+ return `demo:${path || "/"}`;
17
+ }
18
+ function emit() {
19
+ if (typeof window !== "undefined") window.dispatchEvent(new Event(DEMO_EVENT));
20
+ }
21
+ function isDemoLoggedIn() {
22
+ if (typeof window === "undefined") return false;
23
+ try {
24
+ return window.sessionStorage.getItem(SESSION_KEY) === "1";
25
+ } catch {
26
+ return false;
27
+ }
28
+ }
29
+ function setDemoLoggedIn(on) {
30
+ if (typeof window === "undefined") return;
31
+ try {
32
+ if (on) window.sessionStorage.setItem(SESSION_KEY, "1");
33
+ else window.sessionStorage.removeItem(SESSION_KEY);
34
+ } catch {
35
+ }
36
+ emit();
37
+ }
38
+ function registerSeed(siteId, path, page) {
39
+ seeds.set(`${siteId}::${path}`, page);
40
+ }
41
+ function getSeed(siteId, path) {
42
+ return seeds.get(`${siteId}::${path}`) ?? null;
43
+ }
44
+ function registerDemoNews(siteId, articles) {
45
+ newsSeeds.set(siteId, articles);
46
+ }
47
+ function getDemoNews(siteId) {
48
+ return newsSeeds.get(siteId) ?? [];
49
+ }
50
+ function registerDemoForm(siteId, formId, def) {
51
+ formSeeds.set(`${siteId}::${formId}`, def);
52
+ }
53
+ function getDemoForm(siteId, formId) {
54
+ return formSeeds.get(`${siteId}::${formId}`) ?? null;
55
+ }
56
+ function draftKey(siteId, id) {
57
+ return `${DRAFT_PREFIX}:${siteId}:${id}`;
58
+ }
59
+ function loadDemoDraft(siteId, id) {
60
+ if (typeof window === "undefined") return null;
61
+ try {
62
+ const raw = window.localStorage.getItem(draftKey(siteId, id));
63
+ return raw ? JSON.parse(raw) : null;
64
+ } catch {
65
+ return null;
66
+ }
67
+ }
68
+ function saveDemoDraft(siteId, id, patch) {
69
+ if (typeof window === "undefined") return;
70
+ try {
71
+ const current = loadDemoDraft(siteId, id) ?? {};
72
+ window.localStorage.setItem(draftKey(siteId, id), JSON.stringify({ ...current, ...patch }));
73
+ } catch {
74
+ }
75
+ emit();
76
+ }
77
+ function resetDemo(siteId) {
78
+ if (typeof window === "undefined") return;
79
+ try {
80
+ const toRemove = [];
81
+ for (let i = 0; i < window.localStorage.length; i++) {
82
+ const k = window.localStorage.key(i);
83
+ if (k && k.startsWith(`${DRAFT_PREFIX}:${siteId}:`)) toRemove.push(k);
84
+ }
85
+ toRemove.forEach((k) => window.localStorage.removeItem(k));
86
+ window.sessionStorage.removeItem(SESSION_KEY);
87
+ } catch {
88
+ }
89
+ emit();
90
+ }
91
+ function resolveDemoPage(siteId, path) {
92
+ const seed = getSeed(siteId, path);
93
+ if (!seed) return null;
94
+ const draft = loadDemoDraft(siteId, demoIdForPath(path));
95
+ return draft ? { ...seed, ...draft } : seed;
96
+ }
97
+ export {
98
+ DEMO_EVENT,
99
+ demoIdForPath,
100
+ getDemoForm,
101
+ getDemoNews,
102
+ getSeed,
103
+ isDemoActive,
104
+ isDemoLoggedIn,
105
+ loadDemoDraft,
106
+ registerDemoForm,
107
+ registerDemoNews,
108
+ registerSeed,
109
+ resetDemo,
110
+ resolveDemoPage,
111
+ saveDemoDraft,
112
+ setDemoActive,
113
+ setDemoLoggedIn
114
+ };
115
+ //# sourceMappingURL=demoStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/demo/demoStore.ts"],"sourcesContent":["\"use client\";\n\nimport type { Page } from \"../schema/pages\";\nimport type { NewsArticle } from \"../content/types\";\nimport type { FormDefinition } from \"../schema/forms\";\n\n/**\n * Lokale opslag voor de DEMO-bewerkmodus (`config.demoEditing`). Alle \"bewerkingen\" van een\n * bezoeker (teksten, blokken, publiceren) blijven UITSLUITEND in de browser van die bezoeker\n * (localStorage) — er gaat niets naar Firebase. Zo kunnen eindgebruikers het beheer veilig\n * uitproberen zonder dat er echt iets verandert. Een \"Reset\" wist alles weer.\n *\n * Bewust GEEN onderdeel van de echte (Firebase-)opslag: pagesClient en AuthProvider takken hier\n * alleen naartoe als de demo-modus actief is, en die staat alleen aan op een demo-site.\n */\n\nconst DRAFT_PREFIX = \"xicms-demo-draft\";\nconst SESSION_KEY = \"xicms-demo-session\";\nexport const DEMO_EVENT = \"xicms:demo\";\n\nlet active = false;\nconst seeds = new Map<string, Page>();\nconst newsSeeds = new Map<string, NewsArticle[]>();\nconst formSeeds = new Map<string, FormDefinition>();\n\n/** Zet de demo-bewerkmodus aan/uit (door de provider, op basis van config.demoEditing). */\nexport function setDemoActive(on: boolean) {\n active = on;\n}\nexport function isDemoActive(): boolean {\n return active;\n}\n\n/** Stabiel, deterministisch draft-id per pad, zodat pagina + editor naar dezelfde opslag wijzen. */\nexport function demoIdForPath(path: string): string {\n return `demo:${path || \"/\"}`;\n}\n\nfunction emit() {\n if (typeof window !== \"undefined\") window.dispatchEvent(new Event(DEMO_EVENT));\n}\n\n// ── Pseudo-login (sessie) ──────────────────────────────────────────────────\n// In sessionStorage: verdwijnt als het tabblad sluit — benadrukt het tijdelijke karakter.\nexport function isDemoLoggedIn(): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return window.sessionStorage.getItem(SESSION_KEY) === \"1\";\n } catch {\n return false;\n }\n}\nexport function setDemoLoggedIn(on: boolean) {\n if (typeof window === \"undefined\") return;\n try {\n if (on) window.sessionStorage.setItem(SESSION_KEY, \"1\");\n else window.sessionStorage.removeItem(SESSION_KEY);\n } catch {\n /* opslag geweigerd — login geldt dan alleen voor deze render */\n }\n emit();\n}\n\n// ── Seed-pagina's (de oorspronkelijke inhoud waar een bezoeker op verder bewerkt) ──\nexport function registerSeed(siteId: string, path: string, page: Page) {\n seeds.set(`${siteId}::${path}`, page);\n}\nexport function getSeed(siteId: string, path: string): Page | null {\n return seeds.get(`${siteId}::${path}`) ?? null;\n}\n\n// ── Demo-nieuws (zodat nieuws-blokken/widgets ook in de demo gevuld zijn, zonder Firebase) ──\nexport function registerDemoNews(siteId: string, articles: NewsArticle[]) {\n newsSeeds.set(siteId, articles);\n}\nexport function getDemoNews(siteId: string): NewsArticle[] {\n return newsSeeds.get(siteId) ?? [];\n}\n\n// ── Demo-formulieren (zodat het form-blok werkt zonder Firebase; inzenden doet lokaal niets) ──\nexport function registerDemoForm(siteId: string, formId: string, def: FormDefinition) {\n formSeeds.set(`${siteId}::${formId}`, def);\n}\nexport function getDemoForm(siteId: string, formId: string): FormDefinition | null {\n return formSeeds.get(`${siteId}::${formId}`) ?? null;\n}\n\n// ── Lokale drafts (de bewerkingen) ─────────────────────────────────────────\nfunction draftKey(siteId: string, id: string) {\n return `${DRAFT_PREFIX}:${siteId}:${id}`;\n}\n\nexport function loadDemoDraft(siteId: string, id: string): Partial<Page> | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.localStorage.getItem(draftKey(siteId, id));\n return raw ? (JSON.parse(raw) as Partial<Page>) : null;\n } catch {\n return null;\n }\n}\n\nexport function saveDemoDraft(siteId: string, id: string, patch: Partial<Page>) {\n if (typeof window === \"undefined\") return;\n try {\n const current = loadDemoDraft(siteId, id) ?? {};\n window.localStorage.setItem(draftKey(siteId, id), JSON.stringify({ ...current, ...patch }));\n } catch {\n /* opslag vol/geweigerd — bewerking geldt dan alleen voor deze sessie in het geheugen */\n }\n emit();\n}\n\n/** Verwijdert alle lokale demo-bewerkingen + login voor deze site (de \"Reset\"-knop). */\nexport function resetDemo(siteId: string) {\n if (typeof window === \"undefined\") return;\n try {\n const toRemove: string[] = [];\n for (let i = 0; i < window.localStorage.length; i++) {\n const k = window.localStorage.key(i);\n if (k && k.startsWith(`${DRAFT_PREFIX}:${siteId}:`)) toRemove.push(k);\n }\n toRemove.forEach((k) => window.localStorage.removeItem(k));\n window.sessionStorage.removeItem(SESSION_KEY);\n } catch {\n /* negeren */\n }\n emit();\n}\n\n/**\n * De effectieve demo-pagina = seed met lokale bewerkingen eroverheen. Gebruikt door de demo-pagina\n * om de wijzigingen van de bezoeker direct te tonen (ook na sluiten van de editor).\n */\nexport function resolveDemoPage(siteId: string, path: string): Page | null {\n const seed = getSeed(siteId, path);\n if (!seed) return null;\n const draft = loadDemoDraft(siteId, demoIdForPath(path));\n return draft ? ({ ...seed, ...draft } as Page) : seed;\n}\n"],"mappings":";AAgBA,MAAM,eAAe;AACrB,MAAM,cAAc;AACb,MAAM,aAAa;AAE1B,IAAI,SAAS;AACb,MAAM,QAAQ,oBAAI,IAAkB;AACpC,MAAM,YAAY,oBAAI,IAA2B;AACjD,MAAM,YAAY,oBAAI,IAA4B;AAG3C,SAAS,cAAc,IAAa;AACzC,WAAS;AACX;AACO,SAAS,eAAwB;AACtC,SAAO;AACT;AAGO,SAAS,cAAc,MAAsB;AAClD,SAAO,QAAQ,QAAQ,GAAG;AAC5B;AAEA,SAAS,OAAO;AACd,MAAI,OAAO,WAAW,YAAa,QAAO,cAAc,IAAI,MAAM,UAAU,CAAC;AAC/E;AAIO,SAAS,iBAA0B;AACxC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI;AACF,WAAO,OAAO,eAAe,QAAQ,WAAW,MAAM;AAAA,EACxD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AACO,SAAS,gBAAgB,IAAa;AAC3C,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACF,QAAI,GAAI,QAAO,eAAe,QAAQ,aAAa,GAAG;AAAA,QACjD,QAAO,eAAe,WAAW,WAAW;AAAA,EACnD,QAAQ;AAAA,EAER;AACA,OAAK;AACP;AAGO,SAAS,aAAa,QAAgB,MAAc,MAAY;AACrE,QAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,IAAI;AACtC;AACO,SAAS,QAAQ,QAAgB,MAA2B;AACjE,SAAO,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,EAAE,KAAK;AAC5C;AAGO,SAAS,iBAAiB,QAAgB,UAAyB;AACxE,YAAU,IAAI,QAAQ,QAAQ;AAChC;AACO,SAAS,YAAY,QAA+B;AACzD,SAAO,UAAU,IAAI,MAAM,KAAK,CAAC;AACnC;AAGO,SAAS,iBAAiB,QAAgB,QAAgB,KAAqB;AACpF,YAAU,IAAI,GAAG,MAAM,KAAK,MAAM,IAAI,GAAG;AAC3C;AACO,SAAS,YAAY,QAAgB,QAAuC;AACjF,SAAO,UAAU,IAAI,GAAG,MAAM,KAAK,MAAM,EAAE,KAAK;AAClD;AAGA,SAAS,SAAS,QAAgB,IAAY;AAC5C,SAAO,GAAG,YAAY,IAAI,MAAM,IAAI,EAAE;AACxC;AAEO,SAAS,cAAc,QAAgB,IAAkC;AAC9E,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI;AACF,UAAM,MAAM,OAAO,aAAa,QAAQ,SAAS,QAAQ,EAAE,CAAC;AAC5D,WAAO,MAAO,KAAK,MAAM,GAAG,IAAsB;AAAA,EACpD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,cAAc,QAAgB,IAAY,OAAsB;AAC9E,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACF,UAAM,UAAU,cAAc,QAAQ,EAAE,KAAK,CAAC;AAC9C,WAAO,aAAa,QAAQ,SAAS,QAAQ,EAAE,GAAG,KAAK,UAAU,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,EAC5F,QAAQ;AAAA,EAER;AACA,OAAK;AACP;AAGO,SAAS,UAAU,QAAgB;AACxC,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACF,UAAM,WAAqB,CAAC;AAC5B,aAAS,IAAI,GAAG,IAAI,OAAO,aAAa,QAAQ,KAAK;AACnD,YAAM,IAAI,OAAO,aAAa,IAAI,CAAC;AACnC,UAAI,KAAK,EAAE,WAAW,GAAG,YAAY,IAAI,MAAM,GAAG,EAAG,UAAS,KAAK,CAAC;AAAA,IACtE;AACA,aAAS,QAAQ,CAAC,MAAM,OAAO,aAAa,WAAW,CAAC,CAAC;AACzD,WAAO,eAAe,WAAW,WAAW;AAAA,EAC9C,QAAQ;AAAA,EAER;AACA,OAAK;AACP;AAMO,SAAS,gBAAgB,QAAgB,MAA2B;AACzE,QAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,cAAc,QAAQ,cAAc,IAAI,CAAC;AACvD,SAAO,QAAS,EAAE,GAAG,MAAM,GAAG,MAAM,IAAa;AACnD;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { type ReactNode } from "react";
2
+ interface EditorCtx {
3
+ open: boolean;
4
+ openEditor: () => void;
5
+ closeEditor: () => void;
6
+ }
7
+ export declare function EditorProvider({ children }: {
8
+ children: ReactNode;
9
+ }): import("react").JSX.Element;
10
+ /** Open/sluit de visuele pagina-editor. */
11
+ export declare function useEditor(): EditorCtx;
12
+ export {};
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { createContext, useContext, useState, lazy, Suspense } from "react";
4
+ const VisualEditor = lazy(() => import("../admin/visual/VisualEditor"));
5
+ const Ctx = createContext({ open: false, openEditor: () => {
6
+ }, closeEditor: () => {
7
+ } });
8
+ function EditorProvider({ children }) {
9
+ const [open, setOpen] = useState(false);
10
+ return /* @__PURE__ */ jsxs(Ctx.Provider, { value: { open, openEditor: () => setOpen(true), closeEditor: () => setOpen(false) }, children: [
11
+ children,
12
+ open && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(VisualEditor, { onClose: () => setOpen(false) }) })
13
+ ] });
14
+ }
15
+ function useEditor() {
16
+ return useContext(Ctx);
17
+ }
18
+ export {
19
+ EditorProvider,
20
+ useEditor
21
+ };
22
+ //# sourceMappingURL=EditorProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/EditorProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, useState, lazy, Suspense, type ReactNode } from \"react\";\n\n/**\n * Lichte runtime-context voor het inline (visuele) bewerken op de live pagina. De echte editor\n * (TipTap/Radix, zwaar) wordt PAS geladen als een editor hem opent — publieke bezoekers downloaden\n * hem nooit. De editor leeft in de admin-entry; we laden 'm via een dynamische import (eigen chunk).\n */\nconst VisualEditor = lazy(() => import(\"../admin/visual/VisualEditor\"));\n\ninterface EditorCtx {\n open: boolean;\n openEditor: () => void;\n closeEditor: () => void;\n}\n\nconst Ctx = createContext<EditorCtx>({ open: false, openEditor: () => {}, closeEditor: () => {} });\n\nexport function EditorProvider({ children }: { children: ReactNode }) {\n const [open, setOpen] = useState(false);\n return (\n <Ctx.Provider value={{ open, openEditor: () => setOpen(true), closeEditor: () => setOpen(false) }}>\n {children}\n {open && (\n <Suspense fallback={null}>\n <VisualEditor onClose={() => setOpen(false)} />\n </Suspense>\n )}\n </Ctx.Provider>\n );\n}\n\n/** Open/sluit de visuele pagina-editor. */\nexport function useEditor(): EditorCtx {\n return useContext(Ctx);\n}\n"],"mappings":";AAsBI,SAIM,KAJN;AApBJ,SAAS,eAAe,YAAY,UAAU,MAAM,gBAAgC;AAOpF,MAAM,eAAe,KAAK,MAAM,OAAO,8BAA8B,CAAC;AAQtE,MAAM,MAAM,cAAyB,EAAE,MAAM,OAAO,YAAY,MAAM;AAAC,GAAG,aAAa,MAAM;AAAC,EAAE,CAAC;AAE1F,SAAS,eAAe,EAAE,SAAS,GAA4B;AACpE,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,SACE,qBAAC,IAAI,UAAJ,EAAa,OAAO,EAAE,MAAM,YAAY,MAAM,QAAQ,IAAI,GAAG,aAAa,MAAM,QAAQ,KAAK,EAAE,GAC7F;AAAA;AAAA,IACA,QACC,oBAAC,YAAS,UAAU,MAClB,8BAAC,gBAAa,SAAS,MAAM,QAAQ,KAAK,GAAG,GAC/C;AAAA,KAEJ;AAEJ;AAGO,SAAS,YAAuB;AACrC,SAAO,WAAW,GAAG;AACvB;","names":[]}
@@ -0,0 +1,7 @@
1
+ import "server-only";
2
+ import { type App } from "firebase-admin/app";
3
+ import { type Auth } from "firebase-admin/auth";
4
+ import { type Firestore } from "firebase-admin/firestore";
5
+ export declare function getAdminApp(): App | null;
6
+ export declare function getAdminAuth(): Auth | null;
7
+ export declare function getAdminDb(): Firestore | null;
@@ -0,0 +1,31 @@
1
+ import "server-only";
2
+ import { cert, getApp, getApps, initializeApp } from "firebase-admin/app";
3
+ import { getAuth } from "firebase-admin/auth";
4
+ import { getFirestore } from "firebase-admin/firestore";
5
+ function readServiceAccount() {
6
+ const projectId = process.env.FIREBASE_PROJECT_ID;
7
+ const clientEmail = process.env.FIREBASE_CLIENT_EMAIL;
8
+ const privateKey = process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, "\n");
9
+ if (!projectId || !clientEmail || !privateKey) return null;
10
+ return { projectId, clientEmail, privateKey };
11
+ }
12
+ function getAdminApp() {
13
+ if (getApps().length) return getApp();
14
+ const sa = readServiceAccount();
15
+ if (!sa) return null;
16
+ return initializeApp({ credential: cert(sa) });
17
+ }
18
+ function getAdminAuth() {
19
+ const app = getAdminApp();
20
+ return app ? getAuth(app) : null;
21
+ }
22
+ function getAdminDb() {
23
+ const app = getAdminApp();
24
+ return app ? getFirestore(app) : null;
25
+ }
26
+ export {
27
+ getAdminApp,
28
+ getAdminAuth,
29
+ getAdminDb
30
+ };
31
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/firebase/admin.ts"],"sourcesContent":["import \"server-only\";\n\nimport { cert, getApp, getApps, initializeApp, type App } from \"firebase-admin/app\";\nimport { getAuth, type Auth } from \"firebase-admin/auth\";\nimport { getFirestore, type Firestore } from \"firebase-admin/firestore\";\n\n/**\n * Server-side Firebase Admin (alleen voor server actions / route handlers).\n * NOOIT importeren in client-componenten — importeer dit via \"@xiwebdesign/xicms-core/server\".\n *\n * Credentials komen uit env:\n * FIREBASE_PROJECT_ID\n * FIREBASE_CLIENT_EMAIL\n * FIREBASE_PRIVATE_KEY (met letterlijke \\n; die vervangen we hieronder)\n */\nfunction readServiceAccount() {\n const projectId = process.env.FIREBASE_PROJECT_ID;\n const clientEmail = process.env.FIREBASE_CLIENT_EMAIL;\n const privateKey = process.env.FIREBASE_PRIVATE_KEY?.replace(/\\\\n/g, \"\\n\");\n if (!projectId || !clientEmail || !privateKey) return null;\n return { projectId, clientEmail, privateKey };\n}\n\nexport function getAdminApp(): App | null {\n if (getApps().length) return getApp();\n const sa = readServiceAccount();\n if (!sa) return null;\n return initializeApp({ credential: cert(sa) });\n}\n\nexport function getAdminAuth(): Auth | null {\n const app = getAdminApp();\n return app ? getAuth(app) : null;\n}\n\nexport function getAdminDb(): Firestore | null {\n const app = getAdminApp();\n return app ? getFirestore(app) : null;\n}\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,MAAM,QAAQ,SAAS,qBAA+B;AAC/D,SAAS,eAA0B;AACnC,SAAS,oBAAoC;AAW7C,SAAS,qBAAqB;AAC5B,QAAM,YAAY,QAAQ,IAAI;AAC9B,QAAM,cAAc,QAAQ,IAAI;AAChC,QAAM,aAAa,QAAQ,IAAI,sBAAsB,QAAQ,QAAQ,IAAI;AACzE,MAAI,CAAC,aAAa,CAAC,eAAe,CAAC,WAAY,QAAO;AACtD,SAAO,EAAE,WAAW,aAAa,WAAW;AAC9C;AAEO,SAAS,cAA0B;AACxC,MAAI,QAAQ,EAAE,OAAQ,QAAO,OAAO;AACpC,QAAM,KAAK,mBAAmB;AAC9B,MAAI,CAAC,GAAI,QAAO;AAChB,SAAO,cAAc,EAAE,YAAY,KAAK,EAAE,EAAE,CAAC;AAC/C;AAEO,SAAS,eAA4B;AAC1C,QAAM,MAAM,YAAY;AACxB,SAAO,MAAM,QAAQ,GAAG,IAAI;AAC9B;AAEO,SAAS,aAA+B;AAC7C,QAAM,MAAM,YAAY;AACxB,SAAO,MAAM,aAAa,GAAG,IAAI;AACnC;","names":[]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Initialiseert Firebase App Check — alleen als `NEXT_PUBLIC_FIREBASE_APPCHECK_KEY` is gezet.
3
+ * Zo blijven lokaal draaien en de demo zonder App Check werken (env-gated, net als de rest
4
+ * van de Firebase-config). Roep dit één keer aan vanuit de client (XiCMSProvider doet dit).
5
+ */
6
+ export declare function initAppCheck(): void;
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { initializeAppCheck, ReCaptchaV3Provider } from "firebase/app-check";
3
+ import { getFirebaseApp } from "./client";
4
+ let inited = false;
5
+ function initAppCheck() {
6
+ if (inited || typeof window === "undefined") return;
7
+ const key = process.env.NEXT_PUBLIC_FIREBASE_APPCHECK_KEY;
8
+ if (!key) return;
9
+ const app = getFirebaseApp();
10
+ if (!app) return;
11
+ if (process.env.NEXT_PUBLIC_FIREBASE_APPCHECK_DEBUG === "true") {
12
+ globalThis.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
13
+ }
14
+ initializeAppCheck(app, {
15
+ provider: new ReCaptchaV3Provider(key),
16
+ isTokenAutoRefreshEnabled: true
17
+ });
18
+ inited = true;
19
+ }
20
+ export {
21
+ initAppCheck
22
+ };
23
+ //# sourceMappingURL=appcheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/firebase/appcheck.ts"],"sourcesContent":["\"use client\";\n\nimport { initializeAppCheck, ReCaptchaV3Provider } from \"firebase/app-check\";\nimport { getFirebaseApp } from \"./client\";\n\nlet inited = false;\n\n/**\n * Initialiseert Firebase App Check — alleen als `NEXT_PUBLIC_FIREBASE_APPCHECK_KEY` is gezet.\n * Zo blijven lokaal draaien en de demo zonder App Check werken (env-gated, net als de rest\n * van de Firebase-config). Roep dit één keer aan vanuit de client (XiCMSProvider doet dit).\n */\nexport function initAppCheck(): void {\n if (inited || typeof window === \"undefined\") return;\n const key = process.env.NEXT_PUBLIC_FIREBASE_APPCHECK_KEY;\n if (!key) return;\n const app = getFirebaseApp();\n if (!app) return;\n\n // Debug-token voor lokaal/emulator (zet NEXT_PUBLIC_FIREBASE_APPCHECK_DEBUG=true).\n if (process.env.NEXT_PUBLIC_FIREBASE_APPCHECK_DEBUG === \"true\") {\n (globalThis as unknown as { FIREBASE_APPCHECK_DEBUG_TOKEN?: boolean }).FIREBASE_APPCHECK_DEBUG_TOKEN = true;\n }\n\n initializeAppCheck(app, {\n provider: new ReCaptchaV3Provider(key),\n isTokenAutoRefreshEnabled: true,\n });\n inited = true;\n}\n"],"mappings":";AAEA,SAAS,oBAAoB,2BAA2B;AACxD,SAAS,sBAAsB;AAE/B,IAAI,SAAS;AAON,SAAS,eAAqB;AACnC,MAAI,UAAU,OAAO,WAAW,YAAa;AAC7C,QAAM,MAAM,QAAQ,IAAI;AACxB,MAAI,CAAC,IAAK;AACV,QAAM,MAAM,eAAe;AAC3B,MAAI,CAAC,IAAK;AAGV,MAAI,QAAQ,IAAI,wCAAwC,QAAQ;AAC9D,IAAC,WAAsE,gCAAgC;AAAA,EACzG;AAEA,qBAAmB,KAAK;AAAA,IACtB,UAAU,IAAI,oBAAoB,GAAG;AAAA,IACrC,2BAA2B;AAAA,EAC7B,CAAC;AACD,WAAS;AACX;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { type FirebaseApp } from "firebase/app";
2
+ import { type Auth } from "firebase/auth";
3
+ import { type Firestore } from "firebase/firestore";
4
+ import { type FirebaseStorage } from "firebase/storage";
5
+ export declare function isFirebaseConfigured(): boolean;
6
+ export declare function getFirebaseApp(): FirebaseApp | null;
7
+ export declare function getFirebaseAuth(): Auth | null;
8
+ export declare function getDb(): Firestore | null;
9
+ export declare function getBucket(): FirebaseStorage | null;
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { initializeApp, getApps, getApp } from "firebase/app";
3
+ import { getAuth } from "firebase/auth";
4
+ import { getFirestore } from "firebase/firestore";
5
+ import { getStorage } from "firebase/storage";
6
+ function readConfig() {
7
+ return {
8
+ apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
9
+ authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
10
+ projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
11
+ storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
12
+ messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
13
+ appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID
14
+ };
15
+ }
16
+ function isFirebaseConfigured() {
17
+ const cfg = readConfig();
18
+ return Boolean(cfg.apiKey && cfg.projectId);
19
+ }
20
+ function getFirebaseApp() {
21
+ if (!isFirebaseConfigured()) return null;
22
+ if (getApps().length) return getApp();
23
+ return initializeApp(readConfig());
24
+ }
25
+ function getFirebaseAuth() {
26
+ const app = getFirebaseApp();
27
+ return app ? getAuth(app) : null;
28
+ }
29
+ function getDb() {
30
+ const app = getFirebaseApp();
31
+ return app ? getFirestore(app) : null;
32
+ }
33
+ function getBucket() {
34
+ const app = getFirebaseApp();
35
+ return app ? getStorage(app) : null;
36
+ }
37
+ export {
38
+ getBucket,
39
+ getDb,
40
+ getFirebaseApp,
41
+ getFirebaseAuth,
42
+ isFirebaseConfigured
43
+ };
44
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/firebase/client.ts"],"sourcesContent":["\"use client\";\n\nimport { initializeApp, getApps, getApp, type FirebaseApp } from \"firebase/app\";\nimport { getAuth, type Auth } from \"firebase/auth\";\nimport { getFirestore, type Firestore } from \"firebase/firestore\";\nimport { getStorage, type FirebaseStorage } from \"firebase/storage\";\n\n/**\n * Client-side Firebase, volledig env-gedreven (NEXT_PUBLIC_*). Als de env niet is ingevuld\n * geven alle helpers `null` terug, zodat een site ook zónder Firebase blijft werken (dan\n * toont hij alleen de standaardteksten en is bewerken uitgeschakeld).\n */\nfunction readConfig() {\n return {\n apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,\n authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,\n projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,\n storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,\n messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,\n appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,\n };\n}\n\nexport function isFirebaseConfigured(): boolean {\n const cfg = readConfig();\n return Boolean(cfg.apiKey && cfg.projectId);\n}\n\nexport function getFirebaseApp(): FirebaseApp | null {\n if (!isFirebaseConfigured()) return null;\n if (getApps().length) return getApp();\n return initializeApp(readConfig() as Record<string, string>);\n}\n\nexport function getFirebaseAuth(): Auth | null {\n const app = getFirebaseApp();\n return app ? getAuth(app) : null;\n}\n\nexport function getDb(): Firestore | null {\n const app = getFirebaseApp();\n return app ? getFirestore(app) : null;\n}\n\nexport function getBucket(): FirebaseStorage | null {\n const app = getFirebaseApp();\n return app ? getStorage(app) : null;\n}\n"],"mappings":";AAEA,SAAS,eAAe,SAAS,cAAgC;AACjE,SAAS,eAA0B;AACnC,SAAS,oBAAoC;AAC7C,SAAS,kBAAwC;AAOjD,SAAS,aAAa;AACpB,SAAO;AAAA,IACL,QAAQ,QAAQ,IAAI;AAAA,IACpB,YAAY,QAAQ,IAAI;AAAA,IACxB,WAAW,QAAQ,IAAI;AAAA,IACvB,eAAe,QAAQ,IAAI;AAAA,IAC3B,mBAAmB,QAAQ,IAAI;AAAA,IAC/B,OAAO,QAAQ,IAAI;AAAA,EACrB;AACF;AAEO,SAAS,uBAAgC;AAC9C,QAAM,MAAM,WAAW;AACvB,SAAO,QAAQ,IAAI,UAAU,IAAI,SAAS;AAC5C;AAEO,SAAS,iBAAqC;AACnD,MAAI,CAAC,qBAAqB,EAAG,QAAO;AACpC,MAAI,QAAQ,EAAE,OAAQ,QAAO,OAAO;AACpC,SAAO,cAAc,WAAW,CAA2B;AAC7D;AAEO,SAAS,kBAA+B;AAC7C,QAAM,MAAM,eAAe;AAC3B,SAAO,MAAM,QAAQ,GAAG,IAAI;AAC9B;AAEO,SAAS,QAA0B;AACxC,QAAM,MAAM,eAAe;AAC3B,SAAO,MAAM,aAAa,GAAG,IAAI;AACnC;AAEO,SAAS,YAAoC;AAClD,QAAM,MAAM,eAAe;AAC3B,SAAO,MAAM,WAAW,GAAG,IAAI;AACjC;","names":[]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Regio van de Cloud Functions. Standaard "europe-west1" (waar de functions deployen), maar
3
+ * configureerbaar via env zodat een klantsite in een andere regio kan draaien zonder code te forken.
4
+ */
5
+ export declare function functionsRegion(): string;
@@ -0,0 +1,7 @@
1
+ function functionsRegion() {
2
+ return process.env.NEXT_PUBLIC_FIREBASE_FUNCTIONS_REGION || "europe-west1";
3
+ }
4
+ export {
5
+ functionsRegion
6
+ };
7
+ //# sourceMappingURL=region.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/firebase/region.ts"],"sourcesContent":["/**\n * Regio van de Cloud Functions. Standaard \"europe-west1\" (waar de functions deployen), maar\n * configureerbaar via env zodat een klantsite in een andere regio kan draaien zonder code te forken.\n */\nexport function functionsRegion(): string {\n return process.env.NEXT_PUBLIC_FIREBASE_FUNCTIONS_REGION || \"europe-west1\";\n}\n"],"mappings":"AAIO,SAAS,kBAA0B;AACxC,SAAO,QAAQ,IAAI,yCAAyC;AAC9D;","names":[]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Publieke runtime-API van @xiwebdesign/xicms-core (lichte client/runtime laag).
3
+ * - Admin (TipTap/Radix) zit in "@xiwebdesign/xicms-core/admin".
4
+ * - Server-only code (firebase-admin, sanitize, SEO) zit in "@xiwebdesign/xicms-core/server".
5
+ * - Pure schema's in "@xiwebdesign/xicms-core/schema".
6
+ */
7
+ export { XiCMSProvider } from "./XiCMSProvider";
8
+ export { useSiteConfig } from "./config";
9
+ export { defineTheme, useTheme } from "@astryxdesign/core/theme";
10
+ export type { DefinedTheme } from "@astryxdesign/core/theme";
11
+ export { LinkProvider, useLinkComponent } from "@astryxdesign/core/Link";
12
+ export type { LinkComponentType } from "@astryxdesign/core/Link";
13
+ export { Img, ImageProvider, useImageComponent, InlineImageEditProvider } from "./media/ImageContext";
14
+ export type { ImageComponentType, ImgProps } from "./media/ImageContext";
15
+ export * from "./blocks/ui";
16
+ export { SiteSettingsProvider, useSiteSettings, useMergedSiteConfig, } from "./settings/useSiteSettings";
17
+ export { SiteFooter } from "./components/site/SiteFooter";
18
+ export { EditorProvider, useEditor } from "./editor/EditorProvider";
19
+ export { definePattern, instantiatePattern, collectPatternTypes, builtinPatterns, type Pattern, type PatternBlock, } from "./patterns";
20
+ export { builtinThemePresets, type ThemePreset } from "./theme/presets";
21
+ export { defineSiteConfig } from "./schema/siteConfig";
22
+ export type { SiteConfig, SiteMode } from "./schema/siteConfig";
23
+ export type { ThemeTokens, NavItem, SiteSettings, FormsSender } from "./schema/settings";
24
+ export type { Seo } from "./schema/seo";
25
+ export type { Page, PageStatus } from "./schema/pages";
26
+ export type { FormDefinition, FormField } from "./schema/forms";
27
+ export { AuthProvider, useAuth } from "./auth/AuthProvider";
28
+ export { LoginForm } from "./auth/LoginForm";
29
+ export { roleForSite, canEdit, canManageSite, isSuperadmin, type Role, type XiClaims, } from "./auth/roles";
30
+ /** @deprecated Gebruik het block-model (pagina's/drafts) + de visuele editor i.p.v. `cms/content`. */
31
+ export { ContentProvider, useContent } from "./content/ContentProvider";
32
+ export type { NewsArticle, MediaItem, MediaVariant } from "./content/types";
33
+ /** @deprecated Gebruik een block met `data-xicms-edit` — inline bewerken loopt via de visuele editor. */
34
+ export { EditableText } from "./components/EditableText";
35
+ /** @deprecated Gebruik een richText-block — inline bewerken loopt via de visuele editor. */
36
+ export { EditableRichText } from "./components/EditableRichText";
37
+ /** @deprecated Gebruik een image-block (inline vervangen via de mediakiezer in de visuele editor). */
38
+ export { EditableImage } from "./components/EditableImage";
39
+ export { EditBar } from "./components/EditBar";
40
+ export { ResponsiveImage } from "./components/ResponsiveImage";
41
+ export { PageView } from "./components/PageView";
42
+ export { NewsList, NewsArticleView, useNews } from "./components/News";
43
+ export { defineBlock, createRegistry, mergeRegistry, validateBlocks, buildBlockAddOptions, type BlockDefinition, type BlockRegistry, type BlockRenderProps, type BlockEditorProps, type BlockCategory, } from "./blocks/registry";
44
+ export { BlockRenderer } from "./blocks/BlockRenderer";
45
+ export { RegistryProvider, useRegistry } from "./blocks/context";
46
+ export { builtinBlocks, ConsentEmbed } from "./blocks/builtins";
47
+ export { PageRenderer } from "./render/PageRenderer";
48
+ export { PublishedPage } from "./render/PublishedPage";
49
+ export { defineModule, resolveModules, isModuleActive, ModulesProvider, useModules, useModuleActive, useModuleSettings, applyBlockOverrides, moduleIdForBlockType, builtinModules, validateModuleContract, assertModuleContract, useConsent, ConsentBanner, ConsentGate, ConsentReopenLink, type ConsentState, type ConsentSettings, type ConsentCategory, type ModuleDefinition, type ModuleSiteSetting, type ModulesSiteConfig, type Capability, type ResolvedModules, type BlockOverride, type BlockOverrides, } from "./modules";
50
+ export { DemoLock } from "./lock/DemoLock";
51
+ export { registerSeed, resolveDemoPage, loadDemoDraft, demoIdForPath, registerDemoNews, registerDemoForm, DEMO_EVENT, } from "./demo/demoStore";
52
+ export { DemoStudio } from "./demo/DemoStudio";
53
+ export { getFirebaseApp, getFirebaseAuth, getDb, getBucket, isFirebaseConfigured, } from "./firebase/client";
54
+ export { initAppCheck } from "./firebase/appcheck";
package/dist/index.js ADDED
@@ -0,0 +1,172 @@
1
+ import { XiCMSProvider } from "./XiCMSProvider";
2
+ import { useSiteConfig } from "./config";
3
+ import { defineTheme, useTheme } from "@astryxdesign/core/theme";
4
+ import { LinkProvider, useLinkComponent } from "@astryxdesign/core/Link";
5
+ import { Img, ImageProvider, useImageComponent, InlineImageEditProvider } from "./media/ImageContext";
6
+ export * from "./blocks/ui";
7
+ import {
8
+ SiteSettingsProvider,
9
+ useSiteSettings,
10
+ useMergedSiteConfig
11
+ } from "./settings/useSiteSettings";
12
+ import { SiteFooter } from "./components/site/SiteFooter";
13
+ import { EditorProvider, useEditor } from "./editor/EditorProvider";
14
+ import {
15
+ definePattern,
16
+ instantiatePattern,
17
+ collectPatternTypes,
18
+ builtinPatterns
19
+ } from "./patterns";
20
+ import { builtinThemePresets } from "./theme/presets";
21
+ import { defineSiteConfig } from "./schema/siteConfig";
22
+ import { AuthProvider, useAuth } from "./auth/AuthProvider";
23
+ import { LoginForm } from "./auth/LoginForm";
24
+ import {
25
+ roleForSite,
26
+ canEdit,
27
+ canManageSite,
28
+ isSuperadmin
29
+ } from "./auth/roles";
30
+ import { ContentProvider, useContent } from "./content/ContentProvider";
31
+ import { EditableText } from "./components/EditableText";
32
+ import { EditableRichText } from "./components/EditableRichText";
33
+ import { EditableImage } from "./components/EditableImage";
34
+ import { EditBar } from "./components/EditBar";
35
+ import { ResponsiveImage } from "./components/ResponsiveImage";
36
+ import { PageView } from "./components/PageView";
37
+ import { NewsList, NewsArticleView, useNews } from "./components/News";
38
+ import {
39
+ defineBlock,
40
+ createRegistry,
41
+ mergeRegistry,
42
+ validateBlocks,
43
+ buildBlockAddOptions
44
+ } from "./blocks/registry";
45
+ import { BlockRenderer } from "./blocks/BlockRenderer";
46
+ import { RegistryProvider, useRegistry } from "./blocks/context";
47
+ import { builtinBlocks, ConsentEmbed } from "./blocks/builtins";
48
+ import { PageRenderer } from "./render/PageRenderer";
49
+ import { PublishedPage } from "./render/PublishedPage";
50
+ import {
51
+ defineModule,
52
+ resolveModules,
53
+ isModuleActive,
54
+ ModulesProvider,
55
+ useModules,
56
+ useModuleActive,
57
+ useModuleSettings,
58
+ applyBlockOverrides,
59
+ moduleIdForBlockType,
60
+ builtinModules,
61
+ validateModuleContract,
62
+ assertModuleContract,
63
+ useConsent,
64
+ ConsentBanner,
65
+ ConsentGate,
66
+ ConsentReopenLink
67
+ } from "./modules";
68
+ import { DemoLock } from "./lock/DemoLock";
69
+ import {
70
+ registerSeed,
71
+ resolveDemoPage,
72
+ loadDemoDraft,
73
+ demoIdForPath,
74
+ registerDemoNews,
75
+ registerDemoForm,
76
+ DEMO_EVENT
77
+ } from "./demo/demoStore";
78
+ import { DemoStudio } from "./demo/DemoStudio";
79
+ import {
80
+ getFirebaseApp,
81
+ getFirebaseAuth,
82
+ getDb,
83
+ getBucket,
84
+ isFirebaseConfigured
85
+ } from "./firebase/client";
86
+ import { initAppCheck } from "./firebase/appcheck";
87
+ export {
88
+ AuthProvider,
89
+ BlockRenderer,
90
+ ConsentBanner,
91
+ ConsentEmbed,
92
+ ConsentGate,
93
+ ConsentReopenLink,
94
+ ContentProvider,
95
+ DEMO_EVENT,
96
+ DemoLock,
97
+ DemoStudio,
98
+ EditBar,
99
+ EditableImage,
100
+ EditableRichText,
101
+ EditableText,
102
+ EditorProvider,
103
+ ImageProvider,
104
+ Img,
105
+ InlineImageEditProvider,
106
+ LinkProvider,
107
+ LoginForm,
108
+ ModulesProvider,
109
+ NewsArticleView,
110
+ NewsList,
111
+ PageRenderer,
112
+ PageView,
113
+ PublishedPage,
114
+ RegistryProvider,
115
+ ResponsiveImage,
116
+ SiteFooter,
117
+ SiteSettingsProvider,
118
+ XiCMSProvider,
119
+ applyBlockOverrides,
120
+ assertModuleContract,
121
+ buildBlockAddOptions,
122
+ builtinBlocks,
123
+ builtinModules,
124
+ builtinPatterns,
125
+ builtinThemePresets,
126
+ canEdit,
127
+ canManageSite,
128
+ collectPatternTypes,
129
+ createRegistry,
130
+ defineBlock,
131
+ defineModule,
132
+ definePattern,
133
+ defineSiteConfig,
134
+ defineTheme,
135
+ demoIdForPath,
136
+ getBucket,
137
+ getDb,
138
+ getFirebaseApp,
139
+ getFirebaseAuth,
140
+ initAppCheck,
141
+ instantiatePattern,
142
+ isFirebaseConfigured,
143
+ isModuleActive,
144
+ isSuperadmin,
145
+ loadDemoDraft,
146
+ mergeRegistry,
147
+ moduleIdForBlockType,
148
+ registerDemoForm,
149
+ registerDemoNews,
150
+ registerSeed,
151
+ resolveDemoPage,
152
+ resolveModules,
153
+ roleForSite,
154
+ useAuth,
155
+ useConsent,
156
+ useContent,
157
+ useEditor,
158
+ useImageComponent,
159
+ useLinkComponent,
160
+ useMergedSiteConfig,
161
+ useModuleActive,
162
+ useModuleSettings,
163
+ useModules,
164
+ useNews,
165
+ useRegistry,
166
+ useSiteConfig,
167
+ useSiteSettings,
168
+ useTheme,
169
+ validateBlocks,
170
+ validateModuleContract
171
+ };
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Publieke runtime-API van @xiwebdesign/xicms-core (lichte client/runtime laag).\n * - Admin (TipTap/Radix) zit in \"@xiwebdesign/xicms-core/admin\".\n * - Server-only code (firebase-admin, sanitize, SEO) zit in \"@xiwebdesign/xicms-core/server\".\n * - Pure schema's in \"@xiwebdesign/xicms-core/schema\".\n */\n\n// Provider & config\nexport { XiCMSProvider } from \"./XiCMSProvider\";\nexport { useSiteConfig } from \"./config\";\n\n// Theming & design-primitieven (maatwerk zonder core te forken).\n// - `defineTheme` maakt een eigen Astryx-thema (tokens + component-overrides) → geef door als\n// XiCMSProvider `astryxTheme`-prop.\n// - De `ui`-primitieven (Card/Stack/Grid/Heading/Text/Btn…) zijn de bouwstenen waarop de ingebouwde\n// blokken draaien; gebruik ze in eigen blokken voor een consistent maar te herstijlen uiterlijk.\nexport { defineTheme, useTheme } from \"@astryxdesign/core/theme\";\nexport type { DefinedTheme } from \"@astryxdesign/core/theme\";\n// Framework-router-integratie: geef `next/link` door als XiCMSProvider `linkComponent`-prop\n// (soepele client-nav + prefetch op alle Astryx-knoppen/links). `useLinkComponent` voor eigen blokken.\nexport { LinkProvider, useLinkComponent } from \"@astryxdesign/core/Link\";\nexport type { LinkComponentType } from \"@astryxdesign/core/Link\";\n// Beeldoptimalisatie: geef `next/image` door als XiCMSProvider `imageComponent`-prop. `Img` is de\n// wrapper die de blokken gebruiken; `useImageComponent` voor eigen blokken.\nexport { Img, ImageProvider, useImageComponent, InlineImageEditProvider } from \"./media/ImageContext\";\nexport type { ImageComponentType, ImgProps } from \"./media/ImageContext\";\nexport * from \"./blocks/ui\";\nexport {\n SiteSettingsProvider,\n useSiteSettings,\n useMergedSiteConfig,\n} from \"./settings/useSiteSettings\";\nexport { SiteFooter } from \"./components/site/SiteFooter\";\nexport { EditorProvider, useEditor } from \"./editor/EditorProvider\";\nexport {\n definePattern,\n instantiatePattern,\n collectPatternTypes,\n builtinPatterns,\n type Pattern,\n type PatternBlock,\n} from \"./patterns\";\nexport { builtinThemePresets, type ThemePreset } from \"./theme/presets\";\nexport { defineSiteConfig } from \"./schema/siteConfig\";\nexport type { SiteConfig, SiteMode } from \"./schema/siteConfig\";\nexport type { ThemeTokens, NavItem, SiteSettings, FormsSender } from \"./schema/settings\";\nexport type { Seo } from \"./schema/seo\";\nexport type { Page, PageStatus } from \"./schema/pages\";\nexport type { FormDefinition, FormField } from \"./schema/forms\";\n\n// Auth\nexport { AuthProvider, useAuth } from \"./auth/AuthProvider\";\nexport { LoginForm } from \"./auth/LoginForm\";\nexport {\n roleForSite,\n canEdit,\n canManageSite,\n isSuperadmin,\n type Role,\n type XiClaims,\n} from \"./auth/roles\";\n\n// Content (LEGACY inline editing, v1 plat model — vervangen door het block-model + de visuele\n// editor). Blijft werken en geëxporteerd voor bestaande sites; verwijdering volgt op z'n vroegst\n// in de eerstvolgende major. Nieuw werk: gebruik blocks + data-xicms-edit voor inline bewerken.\n/** @deprecated Gebruik het block-model (pagina's/drafts) + de visuele editor i.p.v. `cms/content`. */\nexport { ContentProvider, useContent } from \"./content/ContentProvider\";\nexport type { NewsArticle, MediaItem, MediaVariant } from \"./content/types\";\n\n// Bewerkbare componenten (legacy inline)\n/** @deprecated Gebruik een block met `data-xicms-edit` — inline bewerken loopt via de visuele editor. */\nexport { EditableText } from \"./components/EditableText\";\n/** @deprecated Gebruik een richText-block — inline bewerken loopt via de visuele editor. */\nexport { EditableRichText } from \"./components/EditableRichText\";\n/** @deprecated Gebruik een image-block (inline vervangen via de mediakiezer in de visuele editor). */\nexport { EditableImage } from \"./components/EditableImage\";\nexport { EditBar } from \"./components/EditBar\";\nexport { ResponsiveImage } from \"./components/ResponsiveImage\";\nexport { PageView } from \"./components/PageView\";\nexport { NewsList, NewsArticleView, useNews } from \"./components/News\";\n\n// Block-systeem (runtime: registry + renderer; editors zitten in /admin)\nexport {\n defineBlock,\n createRegistry,\n mergeRegistry,\n validateBlocks,\n buildBlockAddOptions,\n type BlockDefinition,\n type BlockRegistry,\n type BlockRenderProps,\n type BlockEditorProps,\n type BlockCategory,\n} from \"./blocks/registry\";\nexport { BlockRenderer } from \"./blocks/BlockRenderer\";\nexport { RegistryProvider, useRegistry } from \"./blocks/context\";\nexport { builtinBlocks, ConsentEmbed } from \"./blocks/builtins\";\nexport { PageRenderer } from \"./render/PageRenderer\";\nexport { PublishedPage } from \"./render/PublishedPage\";\n\n// Module-systeem (XiCMS 3.0): modules bundelen blocks + instellingen; per site aan/uit + te stylen.\nexport {\n defineModule,\n resolveModules,\n isModuleActive,\n ModulesProvider,\n useModules,\n useModuleActive,\n useModuleSettings,\n applyBlockOverrides,\n moduleIdForBlockType,\n builtinModules,\n validateModuleContract,\n assertModuleContract,\n useConsent,\n ConsentBanner,\n ConsentGate,\n ConsentReopenLink,\n type ConsentState,\n type ConsentSettings,\n type ConsentCategory,\n type ModuleDefinition,\n type ModuleSiteSetting,\n type ModulesSiteConfig,\n type Capability,\n type ResolvedModules,\n type BlockOverride,\n type BlockOverrides,\n} from \"./modules\";\n\n// Demo-lock\nexport { DemoLock } from \"./lock/DemoLock\";\n\n// Demo-bewerkmodus (lokaal-only): seed registreren + de live (lokaal-bewerkte) pagina ophalen\nexport {\n registerSeed,\n resolveDemoPage,\n loadDemoDraft,\n demoIdForPath,\n registerDemoNews,\n registerDemoForm,\n DEMO_EVENT,\n} from \"./demo/demoStore\";\nexport { DemoStudio } from \"./demo/DemoStudio\";\n\n// Firebase (client)\nexport {\n getFirebaseApp,\n getFirebaseAuth,\n getDb,\n getBucket,\n isFirebaseConfigured,\n} from \"./firebase/client\";\nexport { initAppCheck } from \"./firebase/appcheck\";\n"],"mappings":"AAQA,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAO9B,SAAS,aAAa,gBAAgB;AAItC,SAAS,cAAc,wBAAwB;AAI/C,SAAS,KAAK,eAAe,mBAAmB,+BAA+B;AAE/E,cAAc;AACd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB,iBAAiB;AAC1C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,2BAA6C;AACtD,SAAS,wBAAwB;AAQjC,SAAS,cAAc,eAAe;AACtC,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAMP,SAAS,iBAAiB,kBAAkB;AAK5C,SAAS,oBAAoB;AAE7B,SAAS,wBAAwB;AAEjC,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,UAAU,iBAAiB,eAAe;AAGnD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AACP,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB,mBAAmB;AAC9C,SAAS,eAAe,oBAAoB;AAC5C,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAG9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAWK;AAGP,SAAS,gBAAgB;AAGzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAG3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * XiCMS + Astryx cascade-laagvolgorde. Importeer dit als ALLEReerste in je globale CSS — vóór de
3
+ * Astryx-CSS en je eigen stijlen:
4
+ *
5
+ * @import "@xiwebdesign/xicms-core/layers.css";
6
+ * @import "@astryxdesign/core/reset.css";
7
+ * @import "@astryxdesign/core/astryx.css";
8
+ * @import "@astryxdesign/theme-neutral/theme.css";
9
+ *
10
+ * Zonder deze vaste volgorde kan reset.css' `:where(h1-h6){font-size:inherit}` de heading-tokens
11
+ * verslaan (een latere @layer wint, ongeacht specificiteit) → álle koppen vallen terug op 16px.
12
+ */
13
+ @layer reset, theme, base, astryx-base, astryx-theme, components, utilities;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Demo-markering die wordt getoond zolang `mode: "demo"`. Niet-blokkerend (de demo blijft
3
+ * bekijkbaar), maar duidelijk gemarkeerd met een CTA om de site live te laten zetten.
4
+ */
5
+ export declare function DemoLock(): import("react").JSX.Element | null;