@phtngyn/cms 0.2.0-beta.8 → 0.3.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 (524) hide show
  1. package/LICENSE +18 -10
  2. package/README.md +59 -404
  3. package/drizzle/20261003215543_initial/migration.sql +251 -0
  4. package/drizzle/20261003215543_initial/snapshot.json +1941 -0
  5. package/package.json +75 -71
  6. package/src/Authoring.d.ts +41 -49
  7. package/src/Authoring.js +1 -1
  8. package/src/Blocks-BrxSemnd.js +40 -0
  9. package/src/Client.d.ts +8186 -0
  10. package/src/Client.js +41 -0
  11. package/src/Collections.d.ts +142 -0
  12. package/src/Collections.js +142 -0
  13. package/src/Config-CMiwciub.js +130 -0
  14. package/src/Config.d.ts +172 -0
  15. package/src/Config.js +2 -0
  16. package/src/Configuration-Dk2k3OIc.js +73 -0
  17. package/src/DataTransfer-BmECvPHB.js +488 -0
  18. package/src/Database-DSsNCGft.d.ts +3 -0
  19. package/src/Delivery.d.ts +28 -0
  20. package/src/Delivery.js +7 -0
  21. package/src/Document-CKXMSEf1.js +293 -0
  22. package/src/Document-TgwYKJZM.d.ts +220 -0
  23. package/src/DocumentRenderer-Wz2xaNyf.js +394 -0
  24. package/src/EditorSchema-wrDv-id6.js +296 -0
  25. package/src/Fields-BegSgYhj.d.ts +166 -0
  26. package/src/Fields-ioGaMEh9.js +130 -0
  27. package/src/Forms-BuKAXQxr.d.ts +203 -0
  28. package/src/Forms.d.ts +48 -11
  29. package/src/Forms.js +342 -7
  30. package/src/I18n-Ckf9h0rC.js +154 -0
  31. package/src/I18n.d.ts +45 -2
  32. package/src/I18n.js +2 -1
  33. package/src/Image-CJWPLnhP.js +110 -0
  34. package/src/Links-CJYyy7rC.js +28 -0
  35. package/src/Links-Dx1yOni8.d.ts +28 -0
  36. package/src/Locales-Ch7a5xuA.js +67 -0
  37. package/src/Locales-jwbmJaOp.d.ts +43 -0
  38. package/src/Locales.d.ts +3 -0
  39. package/src/Locales.js +3 -0
  40. package/src/Media-BQ0uL4w7.d.ts +15 -0
  41. package/src/Media-DSyvd14o.js +87 -0
  42. package/src/Module.d.ts +2 -10
  43. package/src/Module.js +1040 -152
  44. package/src/Operations.d.ts +57 -0
  45. package/src/Operations.js +263 -0
  46. package/src/People-DvNZauWw.js +69 -0
  47. package/src/PreviewFocus-C_EelZO5.js +104 -0
  48. package/src/Query-C0kGJF5_.d.ts +261 -0
  49. package/src/RevisionPreview-IVwbJ9Wy.js +133 -0
  50. package/src/Routes-BaZvm2LE.js +126 -0
  51. package/src/Routes-DM1rRp3r.d.ts +15 -0
  52. package/src/S3MediaObjects-y-WacEi9.js +193 -0
  53. package/src/Seo-BcpqxoAs.d.ts +57 -0
  54. package/src/Seo-CjNUtUkj.js +254 -0
  55. package/src/StudioApi-CXLwwocX.js +833 -0
  56. package/src/StudioErrors-T5zLGQ1M.js +117 -0
  57. package/src/StudioErrors-kq-E44lQ.d.ts +104 -0
  58. package/src/StudioServer.d.ts +20 -0
  59. package/src/StudioServer.js +34 -0
  60. package/src/answers-DcTg0Xv2.js +41 -0
  61. package/src/cli.js +681 -187
  62. package/src/contracts-rprW3ZOB.js +130 -0
  63. package/src/forms-3xuf0Ym7.d.ts +206 -0
  64. package/src/localeConfiguration-BPbkLi7-.js +32 -0
  65. package/src/localeContext-DhF3SPvM.js +59 -0
  66. package/src/locales-6OD4XGIZ.js +12 -0
  67. package/src/nuxtDelivery-BYX_Cddb.js +466 -0
  68. package/src/plugin-DTYuDaQu.js +7171 -0
  69. package/src/previewContext-dt3ZUh-w.js +4 -0
  70. package/src/previewRegions-CXjk5cbP.js +145 -0
  71. package/src/previewSource-fb-q3ESM.js +144 -0
  72. package/src/rendering-D9LVeEKX.js +47 -0
  73. package/src/rolldown-runtime-8H4AJuhK.js +14 -0
  74. package/src/runtime/CmsImage.js +38 -0
  75. package/src/runtime/DocumentPage.vue +10 -0
  76. package/src/runtime/DocumentPageContent.js +48 -0
  77. package/src/runtime/DocumentRenderer.d.ts +129 -0
  78. package/src/runtime/DocumentRenderer.js +2 -0
  79. package/src/runtime/api.js +48 -6
  80. package/src/runtime/delivery/useCmsDocument.js +2 -0
  81. package/src/runtime/delivery/useCmsDocumentQuery.js +2 -0
  82. package/src/runtime/delivery/useCmsDocumentSeo.js +2 -114
  83. package/src/runtime/delivery/useCmsLocale.js +10 -0
  84. package/src/runtime/plugin.js +2 -40
  85. package/src/runtime/preview.css +85 -0
  86. package/src/runtime/preview.js +277 -0
  87. package/src/runtime/previewSource.js +82 -0
  88. package/src/runtime/revisionPrivacy.js +13 -0
  89. package/src/runtime/studio.js +10 -0
  90. package/src/runtime/studioIcons.js +36 -0
  91. package/src/validation-3pggwcnm.js +396 -0
  92. package/src/validation-DpUwPC8Y.js +224 -0
  93. package/studio/THIRD-PARTY-LICENSES.md +2406 -0
  94. package/studio/chunks/AccountPage-DL3DitDM.js +288 -0
  95. package/studio/chunks/AccountPage-DL3DitDM.js.br +0 -0
  96. package/studio/chunks/AccountPage-DL3DitDM.js.gz +0 -0
  97. package/studio/chunks/ActivityPage-CLqVUqTh.js +584 -0
  98. package/studio/chunks/ActivityPage-CLqVUqTh.js.br +0 -0
  99. package/studio/chunks/ActivityPage-CLqVUqTh.js.gz +0 -0
  100. package/studio/chunks/Alert-D0D24z_a.js +335 -0
  101. package/studio/chunks/Alert-D0D24z_a.js.br +0 -0
  102. package/studio/chunks/Alert-D0D24z_a.js.gz +0 -0
  103. package/studio/chunks/Badge-BBFs88TI.js +346 -0
  104. package/studio/chunks/Badge-BBFs88TI.js.br +0 -0
  105. package/studio/chunks/Badge-BBFs88TI.js.gz +0 -0
  106. package/studio/chunks/Button-BT3ztSPx.js +14319 -0
  107. package/studio/chunks/Button-BT3ztSPx.js.br +0 -0
  108. package/studio/chunks/Button-BT3ztSPx.js.gz +0 -0
  109. package/studio/chunks/Collapsible-CKnEYIlp.js +246 -0
  110. package/studio/chunks/Collapsible-CKnEYIlp.js.br +0 -0
  111. package/studio/chunks/Collapsible-CKnEYIlp.js.gz +0 -0
  112. package/studio/chunks/ContentInventory-D7nsFA6U.js +1745 -0
  113. package/studio/chunks/ContentInventory-D7nsFA6U.js.br +0 -0
  114. package/studio/chunks/ContentInventory-D7nsFA6U.js.gz +0 -0
  115. package/studio/chunks/ContentPage-DCxt6BeD.js +18 -0
  116. package/studio/chunks/ContentPage-DCxt6BeD.js.br +0 -0
  117. package/studio/chunks/ContentPage-DCxt6BeD.js.gz +0 -0
  118. package/studio/chunks/DashboardSearch-DjyMjJwF.js +2413 -0
  119. package/studio/chunks/DashboardSearch-DjyMjJwF.js.br +0 -0
  120. package/studio/chunks/DashboardSearch-DjyMjJwF.js.gz +0 -0
  121. package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js +26063 -0
  122. package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.br +0 -0
  123. package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.gz +0 -0
  124. package/studio/chunks/DropdownMenu-CA9fB0uZ.js +4400 -0
  125. package/studio/chunks/DropdownMenu-CA9fB0uZ.js.br +0 -0
  126. package/studio/chunks/DropdownMenu-CA9fB0uZ.js.gz +0 -0
  127. package/studio/chunks/EditorPage-D_PAYEE4.js +7799 -0
  128. package/studio/chunks/EditorPage-D_PAYEE4.js.br +0 -0
  129. package/studio/chunks/EditorPage-D_PAYEE4.js.gz +0 -0
  130. package/studio/chunks/FormField-CgM6l2Yn.js +198 -0
  131. package/studio/chunks/FormField-CgM6l2Yn.js.br +0 -0
  132. package/studio/chunks/FormField-CgM6l2Yn.js.gz +0 -0
  133. package/studio/chunks/HelpPage-C-vrFcT_.js +552 -0
  134. package/studio/chunks/HelpPage-C-vrFcT_.js.br +0 -0
  135. package/studio/chunks/HelpPage-C-vrFcT_.js.gz +0 -0
  136. package/studio/chunks/Kbd-Ot7TIhVZ.js +271 -0
  137. package/studio/chunks/Kbd-Ot7TIhVZ.js.br +0 -0
  138. package/studio/chunks/Kbd-Ot7TIhVZ.js.gz +0 -0
  139. package/studio/chunks/MediaFolderDialog-DYu-eu-q.js +101 -0
  140. package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.br +0 -0
  141. package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.gz +0 -0
  142. package/studio/chunks/MediaPage-D-jaWtdl.js +923 -0
  143. package/studio/chunks/MediaPage-D-jaWtdl.js.br +0 -0
  144. package/studio/chunks/MediaPage-D-jaWtdl.js.gz +0 -0
  145. package/studio/chunks/MediaPicker-BZs2wUFz.js +837 -0
  146. package/studio/chunks/MediaPicker-BZs2wUFz.js.br +0 -0
  147. package/studio/chunks/MediaPicker-BZs2wUFz.js.gz +0 -0
  148. package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js +1173 -0
  149. package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.br +0 -0
  150. package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.gz +0 -0
  151. package/studio/chunks/Modal-D6hSvxHd.js +265 -0
  152. package/studio/chunks/Modal-D6hSvxHd.js.br +0 -0
  153. package/studio/chunks/Modal-D6hSvxHd.js.gz +0 -0
  154. package/studio/chunks/NewDocumentDialog-C8B6_r3J.js +277 -0
  155. package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.br +0 -0
  156. package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.gz +0 -0
  157. package/studio/chunks/Pagination-D9BSo5H2.js +573 -0
  158. package/studio/chunks/Pagination-D9BSo5H2.js.br +0 -0
  159. package/studio/chunks/Pagination-D9BSo5H2.js.gz +0 -0
  160. package/studio/chunks/PeoplePage-CWIXitBD.js +783 -0
  161. package/studio/chunks/PeoplePage-CWIXitBD.js.br +0 -0
  162. package/studio/chunks/PeoplePage-CWIXitBD.js.gz +0 -0
  163. package/studio/chunks/Popover-B63bkTMS.js +128 -0
  164. package/studio/chunks/Popover-B63bkTMS.js.br +0 -0
  165. package/studio/chunks/Popover-B63bkTMS.js.gz +0 -0
  166. package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js +255 -0
  167. package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.br +0 -0
  168. package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.gz +0 -0
  169. package/studio/chunks/Routes-DLYHmulE.js +102 -0
  170. package/studio/chunks/Routes-DLYHmulE.js.br +0 -0
  171. package/studio/chunks/Routes-DLYHmulE.js.gz +0 -0
  172. package/studio/chunks/RovingFocusItem-QZNg-wWF.js +95 -0
  173. package/studio/chunks/RovingFocusItem-QZNg-wWF.js.br +0 -0
  174. package/studio/chunks/RovingFocusItem-QZNg-wWF.js.gz +0 -0
  175. package/studio/chunks/ScheduledPage-C0hqrkr5.js +332 -0
  176. package/studio/chunks/ScheduledPage-C0hqrkr5.js.br +0 -0
  177. package/studio/chunks/ScheduledPage-C0hqrkr5.js.gz +0 -0
  178. package/studio/chunks/Search-BEgCe9Aj.js +14646 -0
  179. package/studio/chunks/Search-BEgCe9Aj.js.br +0 -0
  180. package/studio/chunks/Search-BEgCe9Aj.js.gz +0 -0
  181. package/studio/chunks/Select-B50WZMW-.js +2145 -0
  182. package/studio/chunks/Select-B50WZMW-.js.br +0 -0
  183. package/studio/chunks/Select-B50WZMW-.js.gz +0 -0
  184. package/studio/chunks/SelectMenu-DSweWGMz.js +2109 -0
  185. package/studio/chunks/SelectMenu-DSweWGMz.js.br +0 -0
  186. package/studio/chunks/SelectMenu-DSweWGMz.js.gz +0 -0
  187. package/studio/chunks/SeoPage-CNNxGe4h.js +846 -0
  188. package/studio/chunks/SeoPage-CNNxGe4h.js.br +0 -0
  189. package/studio/chunks/SeoPage-CNNxGe4h.js.gz +0 -0
  190. package/studio/chunks/Skeleton-COz8dcrw.js +39 -0
  191. package/studio/chunks/Skeleton-COz8dcrw.js.br +2 -0
  192. package/studio/chunks/Skeleton-COz8dcrw.js.gz +0 -0
  193. package/studio/chunks/Slideover-QMMHAAys.js +289 -0
  194. package/studio/chunks/Slideover-QMMHAAys.js.br +0 -0
  195. package/studio/chunks/Slideover-QMMHAAys.js.gz +0 -0
  196. package/studio/chunks/StudioPage-ngEIDr5d.js +80 -0
  197. package/studio/chunks/StudioPage-ngEIDr5d.js.br +0 -0
  198. package/studio/chunks/StudioPage-ngEIDr5d.js.gz +0 -0
  199. package/studio/chunks/StudioPageToolbar-BwHnqyr6.js +2524 -0
  200. package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.br +0 -0
  201. package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.gz +0 -0
  202. package/studio/chunks/Switch-qKl1aDn7.js +484 -0
  203. package/studio/chunks/Switch-qKl1aDn7.js.br +0 -0
  204. package/studio/chunks/Switch-qKl1aDn7.js.gz +0 -0
  205. package/studio/chunks/ToolPage-DxoVAJVk.js +29 -0
  206. package/studio/chunks/ToolPage-DxoVAJVk.js.br +0 -0
  207. package/studio/chunks/ToolPage-DxoVAJVk.js.gz +0 -0
  208. package/studio/chunks/Tooltip-Bu15m_DB.js +693 -0
  209. package/studio/chunks/Tooltip-Bu15m_DB.js.br +0 -0
  210. package/studio/chunks/Tooltip-Bu15m_DB.js.gz +0 -0
  211. package/studio/chunks/TrashPage-lhqLLdoG.js +12 -0
  212. package/studio/chunks/TrashPage-lhqLLdoG.js.br +0 -0
  213. package/studio/chunks/TrashPage-lhqLLdoG.js.gz +0 -0
  214. package/studio/chunks/VersionsPage-Cqy6UAp9.js +2349 -0
  215. package/studio/chunks/VersionsPage-Cqy6UAp9.js.br +0 -0
  216. package/studio/chunks/VersionsPage-Cqy6UAp9.js.gz +0 -0
  217. package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js +113 -0
  218. package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.br +0 -0
  219. package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.gz +0 -0
  220. package/studio/chunks/arrays-CUJkmV4I.js +10 -0
  221. package/studio/chunks/arrays-CUJkmV4I.js.br +0 -0
  222. package/studio/chunks/arrays-CUJkmV4I.js.gz +0 -0
  223. package/studio/chunks/base-DkTekJe8.js +213 -0
  224. package/studio/chunks/base-DkTekJe8.js.br +0 -0
  225. package/studio/chunks/base-DkTekJe8.js.gz +0 -0
  226. package/studio/chunks/content-DUGl3N4d.js +6012 -0
  227. package/studio/chunks/content-DUGl3N4d.js.br +0 -0
  228. package/studio/chunks/content-DUGl3N4d.js.gz +0 -0
  229. package/studio/chunks/destinations-DPIQVQa6.js +227 -0
  230. package/studio/chunks/destinations-DPIQVQa6.js.br +0 -0
  231. package/studio/chunks/destinations-DPIQVQa6.js.gz +0 -0
  232. package/studio/chunks/en-073cjKW4.js +152 -0
  233. package/studio/chunks/en-073cjKW4.js.br +0 -0
  234. package/studio/chunks/en-073cjKW4.js.gz +0 -0
  235. package/studio/chunks/en-Bn8mxPuf.js +134 -0
  236. package/studio/chunks/en-Bn8mxPuf.js.br +0 -0
  237. package/studio/chunks/en-Bn8mxPuf.js.gz +0 -0
  238. package/studio/chunks/en-C9OiaUDZ.js +251 -0
  239. package/studio/chunks/en-C9OiaUDZ.js.br +0 -0
  240. package/studio/chunks/en-C9OiaUDZ.js.gz +0 -0
  241. package/studio/chunks/en-CHAR6jzx.js +147 -0
  242. package/studio/chunks/en-CHAR6jzx.js.br +0 -0
  243. package/studio/chunks/en-CHAR6jzx.js.gz +0 -0
  244. package/studio/chunks/en-Cq4N1vEF.js +93 -0
  245. package/studio/chunks/en-Cq4N1vEF.js.br +2 -0
  246. package/studio/chunks/en-Cq4N1vEF.js.gz +0 -0
  247. package/studio/chunks/en-D2hRqlse.js +140 -0
  248. package/studio/chunks/en-D2hRqlse.js.br +0 -0
  249. package/studio/chunks/en-D2hRqlse.js.gz +0 -0
  250. package/studio/chunks/en-DiUC3-j6.js +144 -0
  251. package/studio/chunks/en-DiUC3-j6.js.br +0 -0
  252. package/studio/chunks/en-DiUC3-j6.js.gz +0 -0
  253. package/studio/chunks/english-Cs_Adu-u.js +8 -0
  254. package/studio/chunks/english-Cs_Adu-u.js.br +0 -0
  255. package/studio/chunks/english-Cs_Adu-u.js.gz +0 -0
  256. package/studio/chunks/esm-D6DqSiL1.js +752 -0
  257. package/studio/chunks/esm-D6DqSiL1.js.br +0 -0
  258. package/studio/chunks/esm-D6DqSiL1.js.gz +0 -0
  259. package/studio/chunks/externalRequest-CTzr2nDq.js +23 -0
  260. package/studio/chunks/externalRequest-CTzr2nDq.js.br +0 -0
  261. package/studio/chunks/externalRequest-CTzr2nDq.js.gz +0 -0
  262. package/studio/chunks/iconify-DR9ryCPv.js +1007 -0
  263. package/studio/chunks/iconify-DR9ryCPv.js.br +0 -0
  264. package/studio/chunks/iconify-DR9ryCPv.js.gz +0 -0
  265. package/studio/chunks/icons-D2MsAaXq.js +183 -0
  266. package/studio/chunks/icons-D2MsAaXq.js.br +0 -0
  267. package/studio/chunks/icons-D2MsAaXq.js.gz +0 -0
  268. package/studio/chunks/leaveGuards-D22fTGgr.js +26 -0
  269. package/studio/chunks/leaveGuards-D22fTGgr.js.br +0 -0
  270. package/studio/chunks/leaveGuards-D22fTGgr.js.gz +0 -0
  271. package/studio/chunks/lucideIcons-EyqyPBsX.js +238 -0
  272. package/studio/chunks/lucideIcons-EyqyPBsX.js.br +0 -0
  273. package/studio/chunks/lucideIcons-EyqyPBsX.js.gz +0 -0
  274. package/studio/chunks/mediaRoute--8cY8rUe.js +17 -0
  275. package/studio/chunks/mediaRoute--8cY8rUe.js.br +0 -0
  276. package/studio/chunks/mediaRoute--8cY8rUe.js.gz +0 -0
  277. package/studio/chunks/newDocumentPlanning-C26DHpvh.js +77 -0
  278. package/studio/chunks/newDocumentPlanning-C26DHpvh.js.br +0 -0
  279. package/studio/chunks/newDocumentPlanning-C26DHpvh.js.gz +0 -0
  280. package/studio/chunks/notifications-OKOLc40v.js +110 -0
  281. package/studio/chunks/notifications-OKOLc40v.js.br +0 -0
  282. package/studio/chunks/notifications-OKOLc40v.js.gz +0 -0
  283. package/studio/chunks/operations-CjNHyrEX.js +57 -0
  284. package/studio/chunks/operations-CjNHyrEX.js.br +0 -0
  285. package/studio/chunks/operations-CjNHyrEX.js.gz +0 -0
  286. package/studio/chunks/overlay-DnqFLZTc.js +1733 -0
  287. package/studio/chunks/overlay-DnqFLZTc.js.br +0 -0
  288. package/studio/chunks/overlay-DnqFLZTc.js.gz +0 -0
  289. package/studio/chunks/presentation-DF83w0hE.js +57 -0
  290. package/studio/chunks/presentation-DF83w0hE.js.br +0 -0
  291. package/studio/chunks/presentation-DF83w0hE.js.gz +0 -0
  292. package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js +4557 -0
  293. package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.br +0 -0
  294. package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.gz +0 -0
  295. package/studio/chunks/searchPresentation-DFwxQkt3.js +76 -0
  296. package/studio/chunks/searchPresentation-DFwxQkt3.js.br +0 -0
  297. package/studio/chunks/searchPresentation-DFwxQkt3.js.gz +0 -0
  298. package/studio/chunks/status-DQv6ihkU.js +38 -0
  299. package/studio/chunks/status-DQv6ihkU.js.br +0 -0
  300. package/studio/chunks/status-DQv6ihkU.js.gz +0 -0
  301. package/studio/chunks/studioContext-I8HozGU1.js +4953 -0
  302. package/studio/chunks/studioContext-I8HozGU1.js.br +0 -0
  303. package/studio/chunks/studioContext-I8HozGU1.js.gz +0 -0
  304. package/studio/chunks/studioQueries-BR-9NT5F.js +73 -0
  305. package/studio/chunks/studioQueries-BR-9NT5F.js.br +0 -0
  306. package/studio/chunks/studioQueries-BR-9NT5F.js.gz +0 -0
  307. package/studio/chunks/studioSearch-ByaL-QpM.js +1095 -0
  308. package/studio/chunks/studioSearch-ByaL-QpM.js.br +0 -0
  309. package/studio/chunks/studioSearch-ByaL-QpM.js.gz +0 -0
  310. package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js +62 -0
  311. package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.br +0 -0
  312. package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.gz +0 -0
  313. package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js +189 -0
  314. package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.br +0 -0
  315. package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.gz +0 -0
  316. package/studio/chunks/useDocumentMessage-BAWvc38w.js +16 -0
  317. package/studio/chunks/useDocumentMessage-BAWvc38w.js.br +3 -0
  318. package/studio/chunks/useDocumentMessage-BAWvc38w.js.gz +0 -0
  319. package/studio/chunks/useFilter-DzyiTR7f.js +87 -0
  320. package/studio/chunks/useFilter-DzyiTR7f.js.br +0 -0
  321. package/studio/chunks/useFilter-DzyiTR7f.js.gz +0 -0
  322. package/studio/chunks/useFormControl-CL7sSCUo.js +8 -0
  323. package/studio/chunks/useFormControl-CL7sSCUo.js.br +0 -0
  324. package/studio/chunks/useFormControl-CL7sSCUo.js.gz +0 -0
  325. package/studio/chunks/useGraceArea-Chcy25IQ.js +154 -0
  326. package/studio/chunks/useGraceArea-Chcy25IQ.js.br +0 -0
  327. package/studio/chunks/useGraceArea-Chcy25IQ.js.gz +0 -0
  328. package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js +44 -0
  329. package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.br +8 -0
  330. package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.gz +0 -0
  331. package/studio/chunks/useLinkCopy-CMjQteCy.js +35 -0
  332. package/studio/chunks/useLinkCopy-CMjQteCy.js.br +0 -0
  333. package/studio/chunks/useLinkCopy-CMjQteCy.js.gz +0 -0
  334. package/studio/chunks/usePointerMotion-DwRcwBNQ.js +16 -0
  335. package/studio/chunks/usePointerMotion-DwRcwBNQ.js.br +0 -0
  336. package/studio/chunks/usePointerMotion-DwRcwBNQ.js.gz +0 -0
  337. package/studio/chunks/useStudioNavigation-CLwtSYpb.js +298 -0
  338. package/studio/chunks/useStudioNavigation-CLwtSYpb.js.br +0 -0
  339. package/studio/chunks/useStudioNavigation-CLwtSYpb.js.gz +0 -0
  340. package/studio/chunks/useStudioPages-DR9qmYLg.js +79 -0
  341. package/studio/chunks/useStudioPages-DR9qmYLg.js.br +0 -0
  342. package/studio/chunks/useStudioPages-DR9qmYLg.js.gz +0 -0
  343. package/studio/chunks/utils-mdScC0v0.js +59 -0
  344. package/studio/chunks/utils-mdScC0v0.js.br +0 -0
  345. package/studio/chunks/utils-mdScC0v0.js.gz +0 -0
  346. package/studio/chunks/virtualizer-D1S0bZ4t.js +781 -0
  347. package/studio/chunks/virtualizer-D1S0bZ4t.js.br +0 -0
  348. package/studio/chunks/virtualizer-D1S0bZ4t.js.gz +0 -0
  349. package/studio/help/64f767fe29c2-save-and-publish.svg +7 -0
  350. package/studio/host.css +1 -1
  351. package/studio/host.css.br +0 -0
  352. package/studio/host.css.gz +0 -0
  353. package/studio/host.js +8793 -39395
  354. package/studio/host.js.br +0 -0
  355. package/studio/host.js.gz +0 -0
  356. package/CHANGELOG.md +0 -14
  357. package/bin/cms.mjs +0 -2
  358. package/src/ApplicationTypes.d.ts +0 -84
  359. package/src/ApplicationTypes.js +0 -1
  360. package/src/Configuration-CMweD9bn.js +0 -1191
  361. package/src/Configuration-CMweD9bn.js.map +0 -1
  362. package/src/Configuration.d.ts +0 -82
  363. package/src/Configuration.js +0 -8
  364. package/src/Configuration.js.map +0 -1
  365. package/src/Content.d.ts +0 -68
  366. package/src/Content.js +0 -373
  367. package/src/Content.js.map +0 -1
  368. package/src/ContentTransfer-BxwswWn3.js +0 -86
  369. package/src/ContentTransfer-BxwswWn3.js.map +0 -1
  370. package/src/ContentTransfer-Z9FHyLez.d.ts +0 -72
  371. package/src/DocumentEngine-tYtwbBjr.js +0 -978
  372. package/src/DocumentEngine-tYtwbBjr.js.map +0 -1
  373. package/src/DocumentModel.d.ts +0 -52
  374. package/src/DocumentModel.js +0 -66
  375. package/src/DocumentModel.js.map +0 -1
  376. package/src/Forms-CX-hwmJF.js +0 -391
  377. package/src/Forms-CX-hwmJF.js.map +0 -1
  378. package/src/Forms-CfNPTiCr.js +0 -110
  379. package/src/Forms-CfNPTiCr.js.map +0 -1
  380. package/src/Forms-R0HoTR-o.d.ts +0 -92
  381. package/src/Forms.js.map +0 -1
  382. package/src/HttpPaths-Be3vshPJ.js +0 -20
  383. package/src/HttpPaths-Be3vshPJ.js.map +0 -1
  384. package/src/I18n-wxswIRyY.d.ts +0 -30
  385. package/src/Media-j1bTritO.js +0 -112
  386. package/src/Media-j1bTritO.js.map +0 -1
  387. package/src/Module.js.map +0 -1
  388. package/src/References-CCPDAPve.js +0 -45
  389. package/src/References-CCPDAPve.js.map +0 -1
  390. package/src/S3MediaObjects-BXfjaZOu.js +0 -2756
  391. package/src/S3MediaObjects-BXfjaZOu.js.map +0 -1
  392. package/src/Seo-402YumpT.d.ts +0 -198
  393. package/src/cli/content.js +0 -101
  394. package/src/cli/content.js.map +0 -1
  395. package/src/cli.js.map +0 -1
  396. package/src/connection-BP80q4d-.js +0 -92
  397. package/src/connection-BP80q4d-.js.map +0 -1
  398. package/src/dev-lifecycle-3I_pozUl.js +0 -535
  399. package/src/dev-lifecycle-3I_pozUl.js.map +0 -1
  400. package/src/installation-DxqSSVbH.js +0 -9105
  401. package/src/installation-DxqSSVbH.js.map +0 -1
  402. package/src/internal/application-types.js +0 -43
  403. package/src/internal/application-types.js.map +0 -1
  404. package/src/internal/authoring-catalog.js +0 -158
  405. package/src/internal/authoring-catalog.js.map +0 -1
  406. package/src/internal/authoring-compiler.js +0 -146
  407. package/src/internal/authoring-compiler.js.map +0 -1
  408. package/src/internal/authoring-metadata.js +0 -191
  409. package/src/internal/authoring-metadata.js.map +0 -1
  410. package/src/internal/cms-config.js +0 -45
  411. package/src/internal/cms-config.js.map +0 -1
  412. package/src/internal/configuration.js +0 -228
  413. package/src/internal/configuration.js.map +0 -1
  414. package/src/internal/dev-lifecycle.js +0 -3
  415. package/src/internal/diagnostics.js +0 -47
  416. package/src/internal/diagnostics.js.map +0 -1
  417. package/src/internal/document-model.js +0 -376
  418. package/src/internal/document-model.js.map +0 -1
  419. package/src/internal/field-metadata.js +0 -7
  420. package/src/internal/field-metadata.js.map +0 -1
  421. package/src/internal/form-capabilities.js +0 -12
  422. package/src/internal/form-capabilities.js.map +0 -1
  423. package/src/internal/i18n.js +0 -73
  424. package/src/internal/i18n.js.map +0 -1
  425. package/src/internal/studio-app.js +0 -68
  426. package/src/internal/studio-app.js.map +0 -1
  427. package/src/location-CMNGO3lU.js +0 -35
  428. package/src/location-CMNGO3lU.js.map +0 -1
  429. package/src/metadata-DN9_K6Yl.js +0 -201
  430. package/src/metadata-DN9_K6Yl.js.map +0 -1
  431. package/src/models-5j67LMqW.js +0 -131
  432. package/src/models-5j67LMqW.js.map +0 -1
  433. package/src/models-VmGmG19-.js +0 -628
  434. package/src/models-VmGmG19-.js.map +0 -1
  435. package/src/runtime/api.js.map +0 -1
  436. package/src/runtime/blocks.js +0 -30
  437. package/src/runtime/blocks.js.map +0 -1
  438. package/src/runtime/collaboration.js +0 -45
  439. package/src/runtime/collaboration.js.map +0 -1
  440. package/src/runtime/delivery/DocumentField.js +0 -23
  441. package/src/runtime/delivery/DocumentField.js.map +0 -1
  442. package/src/runtime/delivery/DocumentRenderer.js +0 -61
  443. package/src/runtime/delivery/DocumentRenderer.js.map +0 -1
  444. package/src/runtime/delivery/DocumentScope.js +0 -41
  445. package/src/runtime/delivery/DocumentScope.js.map +0 -1
  446. package/src/runtime/delivery/blocks.js +0 -8
  447. package/src/runtime/delivery/blocks.js.map +0 -1
  448. package/src/runtime/delivery/context.js +0 -12
  449. package/src/runtime/delivery/context.js.map +0 -1
  450. package/src/runtime/delivery/document-page.js +0 -21
  451. package/src/runtime/delivery/document-page.js.map +0 -1
  452. package/src/runtime/delivery/document.js +0 -43
  453. package/src/runtime/delivery/document.js.map +0 -1
  454. package/src/runtime/delivery/error.js +0 -11
  455. package/src/runtime/delivery/error.js.map +0 -1
  456. package/src/runtime/delivery/plugin.js +0 -104
  457. package/src/runtime/delivery/plugin.js.map +0 -1
  458. package/src/runtime/delivery/preview.d.ts +0 -11
  459. package/src/runtime/delivery/preview.js +0 -6
  460. package/src/runtime/delivery/preview.js.map +0 -1
  461. package/src/runtime/delivery/types.d.ts +0 -2
  462. package/src/runtime/delivery/types.js +0 -1
  463. package/src/runtime/delivery/useCmsDocumentSeo.d.ts +0 -67
  464. package/src/runtime/delivery/useCmsDocumentSeo.js.map +0 -1
  465. package/src/runtime/delivery/useDocument.d.ts +0 -6
  466. package/src/runtime/delivery/useDocument.js +0 -23
  467. package/src/runtime/delivery/useDocument.js.map +0 -1
  468. package/src/runtime/delivery/useDocumentQuery.d.ts +0 -7
  469. package/src/runtime/delivery/useDocumentQuery.js +0 -29
  470. package/src/runtime/delivery/useDocumentQuery.js.map +0 -1
  471. package/src/runtime/forms/document.js +0 -38
  472. package/src/runtime/forms/document.js.map +0 -1
  473. package/src/runtime/forms/useCmsForm.js +0 -257
  474. package/src/runtime/forms/useCmsForm.js.map +0 -1
  475. package/src/runtime/i18n/translator.js +0 -58
  476. package/src/runtime/i18n/translator.js.map +0 -1
  477. package/src/runtime/i18n/useCmsI18n.d.ts +0 -13
  478. package/src/runtime/i18n/useCmsI18n.js +0 -38
  479. package/src/runtime/i18n/useCmsI18n.js.map +0 -1
  480. package/src/runtime/installation.js +0 -3
  481. package/src/runtime/plugin.js.map +0 -1
  482. package/src/runtime/preview/CmsStudioPreviewMarker.js +0 -29
  483. package/src/runtime/preview/CmsStudioPreviewMarker.js.map +0 -1
  484. package/src/runtime/preview/comark-document.js +0 -37
  485. package/src/runtime/preview/comark-document.js.map +0 -1
  486. package/src/runtime/preview/connection.js +0 -3
  487. package/src/runtime/preview/controller.js +0 -265
  488. package/src/runtime/preview/controller.js.map +0 -1
  489. package/src/runtime/preview/crypto.js +0 -16
  490. package/src/runtime/preview/crypto.js.map +0 -1
  491. package/src/runtime/preview/overlay.js +0 -122
  492. package/src/runtime/preview/overlay.js.map +0 -1
  493. package/src/runtime/preview/plugin.client.js +0 -68
  494. package/src/runtime/preview/plugin.client.js.map +0 -1
  495. package/src/runtime/preview/preview.css +0 -91
  496. package/src/runtime/preview/protocol.d.ts +0 -16
  497. package/src/runtime/preview/protocol.js +0 -23
  498. package/src/runtime/preview/protocol.js.map +0 -1
  499. package/src/runtime/preview/regions.js +0 -142
  500. package/src/runtime/preview/regions.js.map +0 -1
  501. package/src/runtime/preview/store.js +0 -4
  502. package/src/runtime/sitemap-entries.js +0 -17
  503. package/src/runtime/sitemap-entries.js.map +0 -1
  504. package/src/runtime/sitemap.js +0 -23
  505. package/src/runtime/sitemap.js.map +0 -1
  506. package/src/runtime/studio-app.js +0 -17
  507. package/src/runtime/studio-app.js.map +0 -1
  508. package/src/runtime/studio-document.js +0 -46
  509. package/src/runtime/studio-document.js.map +0 -1
  510. package/src/runtime/studio-entry.js +0 -19
  511. package/src/runtime/studio-entry.js.map +0 -1
  512. package/src/runtime/studio-navigation.js +0 -11
  513. package/src/runtime/studio-navigation.js.map +0 -1
  514. package/src/scalars-CA6kyipS.d.ts +0 -7
  515. package/src/scalars-CVZqT3L0.js +0 -22
  516. package/src/scalars-CVZqT3L0.js.map +0 -1
  517. package/src/store-X1e1o_MF.js +0 -209
  518. package/src/store-X1e1o_MF.js.map +0 -1
  519. package/src/types-DZ0IV-Ow.d.ts +0 -101
  520. package/studio/CreateDocumentDialog-C4_JBo1w.js +0 -335
  521. package/studio/SelectMenu-wXqxymUw.js +0 -34045
  522. package/studio/collaboration-DcK2F6v9.js +0 -4566
  523. package/studio/editor-P2rB7Csp.js +0 -30128
  524. package/studio/rolldown-runtime-Dy4uBu1J.js +0 -11
@@ -1,391 +0,0 @@
1
- import { n as CmsMarkdownDocument } from "./models-VmGmG19-.js";
2
- import { a as FormOption, i as FormFieldType, s as FormSteps, t as FORM_REVISION_MAX_BYTES } from "./Forms-CfNPTiCr.js";
3
- import { Option, Predicate, Result, Schema } from "effect";
4
- import { resolveAttributes, textContent } from "comark/utils";
5
-
6
- //#region ../document/src/internal/comark/document-adapter.ts
7
- const isJsonObject$1 = Schema.is(Schema.JsonObject);
8
- function toComarkDocument(document) {
9
- return {
10
- frontmatter: mutableJsonObject(document.frontmatter),
11
- meta: mutableJsonObject(document.meta),
12
- nodes: document.nodes.map(toComarkNode)
13
- };
14
- }
15
- function createCmsComarkRenderData(document) {
16
- return {
17
- data: {},
18
- frontmatter: mutableJsonObject(document.frontmatter),
19
- meta: mutableJsonObject(document.meta),
20
- props: {}
21
- };
22
- }
23
- /** Extracts inline text with Comark semantics, preserving punctuation between nested inline nodes. */
24
- function cmsComarkTextContent(node) {
25
- return textContent(toComarkNode(node), { decodeUnicodeEntities: true });
26
- }
27
- function toMutableComarkAttributes(attributes) {
28
- const result = {};
29
- for (const [name, value] of Object.entries(attributes)) if (name !== "$") result[name] = mutableJson(value);
30
- const internal = jsonObject$1(attributes.$);
31
- const line = internal.line;
32
- const html = binaryFlag(internal.html);
33
- const block = binaryFlag(internal.block);
34
- if (Predicate.isNumber(line) || html !== void 0 || block !== void 0) {
35
- const metadata = {};
36
- if (Predicate.isNumber(line)) metadata.line = line;
37
- if (html !== void 0) metadata.html = html;
38
- if (block !== void 0) metadata.block = block;
39
- result.$ = metadata;
40
- }
41
- return result;
42
- }
43
- function mutableJson(value) {
44
- if (Array.isArray(value)) return value.map(mutableJson);
45
- if (isJsonObject$1(value)) return mutableJsonObject(value);
46
- return value;
47
- }
48
- function toComarkNode(node) {
49
- if (Predicate.isString(node)) return node;
50
- if (node[0] === null) return [
51
- null,
52
- toMutableComarkAttributes(node[1]),
53
- node[2]
54
- ];
55
- const [tag, attributes, ...children] = node;
56
- return [
57
- tag,
58
- toMutableComarkAttributes(attributes),
59
- ...children.map(toComarkNode)
60
- ];
61
- }
62
- function mutableJsonObject(value) {
63
- return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, mutableJson(child)]));
64
- }
65
- function binaryFlag(value) {
66
- return value === 0 || value === 1 ? value : void 0;
67
- }
68
- function jsonObject$1(value) {
69
- return isJsonObject$1(value) ? value : {};
70
- }
71
-
72
- //#endregion
73
- //#region ../document/src/internal/comark/bindings.ts
74
- const isJsonObject = Schema.is(Schema.JsonObject);
75
- const decodeJson = Schema.decodeUnknownOption(Schema.Json);
76
- /** Normalizes bindings exactly as Comark's framework renderers do before passing props to a component. */
77
- function resolveCmsComarkAttributes(attributes, renderData) {
78
- const resolved = /* @__PURE__ */ new Map();
79
- for (const [name, value] of Object.entries(resolveAttributes(toMutableComarkAttributes(attributes), renderData, { parseJson: true }))) {
80
- if (Predicate.isUndefined(value)) {
81
- resolved.set(name, void 0);
82
- continue;
83
- }
84
- const decoded = decodeJson(value);
85
- if (Option.isNone(decoded)) throw new Error(`Comark resolved non-JSON attribute "${name}".`);
86
- resolved.set(name, decoded.value);
87
- }
88
- return resolved;
89
- }
90
- /** Projects bindings to editable values while retaining enough metadata to reconstruct their authored form. */
91
- function projectCmsEditorComponentAttributes(attributes, renderData) {
92
- const resolved = resolveCmsComarkAttributes(attributes, renderData);
93
- const props = {};
94
- for (const [name, value] of resolved) if (!Predicate.isUndefined(value)) props[name] = mutableJson(value);
95
- const bindings = {};
96
- for (const [authoredName, authoredValue] of Object.entries(attributes)) {
97
- if (!authoredName.startsWith(":") || authoredName.length === 1) continue;
98
- const name = authoredName.slice(1);
99
- if (!resolved.has(name)) continue;
100
- const literal = jsonLiteral(authoredValue);
101
- if (!Predicate.isString(authoredValue) || literal !== authoredValue) {
102
- bindings[name] = { kind: "literal" };
103
- continue;
104
- }
105
- const resolvedValue = resolved.get(name);
106
- bindings[name] = Object.assign({
107
- expression: authoredValue,
108
- kind: "expression"
109
- }, Predicate.isUndefined(resolvedValue) ? void 0 : { resolved: mutableJson(resolvedValue) });
110
- }
111
- return {
112
- bindings,
113
- props,
114
- renderData: withCmsComarkProps(renderData, resolved)
115
- };
116
- }
117
- /** Reconstructs authored bindings, keeping expressions until a user replaces their resolved value. */
118
- function encodeCmsEditorComponentAttributes(props, bindings) {
119
- const attributes = mutableJsonObject(props);
120
- for (const [name, encodedBinding] of Object.entries(bindings)) {
121
- const binding = jsonObject(encodedBinding);
122
- const kind = binding.kind;
123
- if (kind !== "literal" && kind !== "expression") continue;
124
- const current = props[name];
125
- if (Predicate.isUndefined(current)) {
126
- const expression = binding.expression;
127
- if (kind === "expression" && Predicate.isString(expression)) attributes[`:${name}`] = expression;
128
- continue;
129
- }
130
- delete attributes[name];
131
- const expression = binding.expression;
132
- const resolved = binding.resolved;
133
- attributes[`:${name}`] = kind === "expression" && Predicate.isString(expression) && Object.hasOwn(binding, "resolved") && sameJson(current, resolved) ? expression : mutableJson(current);
134
- }
135
- return attributes;
136
- }
137
- function withCmsComarkProps(renderData, attributes) {
138
- return attributes.size > 0 ? {
139
- ...renderData,
140
- props: Object.fromEntries(attributes)
141
- } : renderData;
142
- }
143
- /** Restores typed component bindings that Comark's block-YAML roundtrip can emit as plain attributes. */
144
- function normalizeCmsComponentBindings(document, components) {
145
- if (!components) return document;
146
- return CmsMarkdownDocument.make({
147
- frontmatter: document.frontmatter,
148
- meta: document.meta,
149
- nodes: document.nodes.map((node) => normalizeComponentNode(node, components))
150
- });
151
- }
152
- function matchesCmsComponentPropType(value, type) {
153
- switch (type) {
154
- case "object": return isJsonObject(value);
155
- case "array": return Array.isArray(value);
156
- case "boolean": return Predicate.isBoolean(value);
157
- case "number": return Predicate.isNumber(value);
158
- case "string":
159
- case "date": return Predicate.isString(value);
160
- case "string[]": return Array.isArray(value) && value.every(Predicate.isString);
161
- }
162
- }
163
- function normalizeComponentNode(node, components) {
164
- if (Predicate.isString(node) || node[0] === null) return node;
165
- const [tag, originalAttributes, ...originalChildren] = node;
166
- const attributes = mutableJsonObject(originalAttributes);
167
- const definition = components.get(tag.toLocaleLowerCase());
168
- if (definition) for (const prop of definition.authoring.props) {
169
- if (prop.type === "string" || `:${prop.name}` in attributes || !(prop.name in attributes)) continue;
170
- const value = attributes[prop.name];
171
- if (Predicate.isUndefined(value)) continue;
172
- if (!matchesCmsComponentPropType(jsonLiteral(value), prop.type)) continue;
173
- delete attributes[prop.name];
174
- attributes[`:${prop.name}`] = value;
175
- }
176
- return [
177
- tag,
178
- attributes,
179
- ...originalChildren.map((child) => normalizeComponentNode(child, components))
180
- ];
181
- }
182
- function jsonLiteral(value) {
183
- if (!Predicate.isString(value)) return value;
184
- try {
185
- const decoded = decodeJson(JSON.parse(value));
186
- return Option.isSome(decoded) ? decoded.value : value;
187
- } catch {
188
- return value;
189
- }
190
- }
191
- function jsonObject(value) {
192
- return isJsonObject(value) ? value : {};
193
- }
194
- function sameJson(left, right) {
195
- return !Predicate.isUndefined(right) && JSON.stringify(left) === JSON.stringify(right);
196
- }
197
-
198
- //#endregion
199
- //#region ../document/src/Forms.ts
200
- function formStructureIssues(input, capabilities, name) {
201
- const parsed = parseFormSteps(input, capabilities, name);
202
- return Result.isFailure(parsed) ? parsed.failure : [];
203
- }
204
- function parseFormSteps(input, capabilities, name) {
205
- const decoded = Schema.decodeUnknownResult(DraftFormSteps)(input, { onExcessProperty: "error" });
206
- if (Result.isFailure(decoded)) return Result.fail(["Each form needs steps with a title and at least one valid question."]);
207
- const issues = [];
208
- if (new TextEncoder().encode(JSON.stringify(formRevision(name, capabilities, decoded.success))).byteLength > 6e4) issues.push("This form is too large. Reduce the number or size of questions.");
209
- const ids = /* @__PURE__ */ new Set();
210
- for (const step of decoded.success) {
211
- if (ids.has(step.id)) issues.push("Steps and questions must have unique identities.");
212
- ids.add(step.id);
213
- for (const field of step.fields) {
214
- if (ids.has(field.id)) issues.push("Steps and questions must have unique identities.");
215
- ids.add(field.id);
216
- if ([
217
- "_form",
218
- "__proto__",
219
- "constructor",
220
- "prototype"
221
- ].includes(field.id)) issues.push("This question identity is reserved.");
222
- if (!capabilities.fieldTypes.includes(field.type)) issues.push(`${field.label}: this question type is unavailable.`);
223
- for (const rule of [
224
- "required",
225
- "minLength",
226
- "maxLength",
227
- "min",
228
- "max"
229
- ]) if (field[rule] !== void 0 && !capabilities.rules.includes(rule)) issues.push(`${field.label}: ${rule} is unavailable.`);
230
- if (![
231
- "text",
232
- "email",
233
- "textarea"
234
- ].includes(field.type) && (field.minLength !== void 0 || field.maxLength !== void 0)) issues.push(`${field.label}: length limits require a text question.`);
235
- if (field.type !== "number" && (field.min !== void 0 || field.max !== void 0)) issues.push(`${field.label}: numeric limits require a number question.`);
236
- if (field.min !== void 0 && field.max !== void 0 && field.min > field.max) issues.push(`${field.label}: minimum exceeds maximum.`);
237
- if (field.minLength !== void 0 && field.maxLength !== void 0 && field.minLength > field.maxLength) issues.push(`${field.label}: minimum length exceeds maximum length.`);
238
- const options = field.options ?? [];
239
- if (field.type === "select" && (!options.length || new Set(options.map((option) => option.id)).size !== options.length)) issues.push(`${field.label}: choices need unique identities and at least one option.`);
240
- if (field.type !== "select" && options.length) issues.push(`${field.label}: choices require a select question.`);
241
- }
242
- }
243
- if (issues.length) return Result.fail(issues);
244
- return Schema.decodeUnknownResult(FormSteps)(decoded.success).pipe(Result.mapError(() => ["Each form needs steps with a title and at least one valid question."]));
245
- }
246
- function validateFormValues(fields, values) {
247
- return Object.fromEntries(fields.flatMap((field) => {
248
- const issue = fieldIssue(field, Object.hasOwn(values, field.id) ? values[field.id] : void 0);
249
- return issue ? [[field.id, issue]] : [];
250
- }));
251
- }
252
- function fieldIssue(field, value) {
253
- if (value === void 0 || value === null || value === "" || Predicate.isString(value) && !value.trim()) return field.required ? `${field.label} is required.` : void 0;
254
- if (field.type === "checkbox") return !Predicate.isBoolean(value) ? "Choose yes or no." : field.required && !value ? `${field.label} must be checked.` : void 0;
255
- if (field.type === "number") {
256
- if (!Predicate.isNumber(value) || !Number.isFinite(value)) return "Enter a number.";
257
- if (field.min !== void 0 && value < field.min) return `Enter at least ${field.min}.`;
258
- if (field.max !== void 0 && value > field.max) return `Enter at most ${field.max}.`;
259
- return;
260
- }
261
- if (!Predicate.isString(value)) return "Enter text.";
262
- if (field.type === "select" && !field.options.some((option) => option.id === value)) return "Choose an available option.";
263
- if (field.type === "email" && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/u.test(value)) return "Enter a valid email address.";
264
- if ((field.type === "text" || field.type === "email" || field.type === "textarea") && field.minLength !== void 0 && value.length < field.minLength) return `Enter at least ${field.minLength} characters.`;
265
- if ((field.type === "text" || field.type === "email" || field.type === "textarea") && field.maxLength !== void 0 && value.length > field.maxLength) return `Enter at most ${field.maxLength} characters.`;
266
- }
267
- const DraftFormField = Schema.Struct({
268
- id: Schema.NonEmptyString,
269
- label: Schema.NonEmptyString,
270
- type: FormFieldType,
271
- help: Schema.optionalKey(Schema.String),
272
- required: Schema.optionalKey(Schema.Boolean),
273
- minLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),
274
- maxLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),
275
- min: Schema.optionalKey(Schema.Finite),
276
- max: Schema.optionalKey(Schema.Finite),
277
- options: Schema.optionalKey(Schema.Array(FormOption))
278
- });
279
- const DraftFormSteps = Schema.Array(Schema.Struct({
280
- id: Schema.NonEmptyString,
281
- title: Schema.NonEmptyString,
282
- fields: Schema.Array(DraftFormField).check(Schema.isMinLength(1), Schema.isMaxLength(100))
283
- })).check(Schema.isMinLength(1), Schema.isMaxLength(20));
284
- /** Paths refer to authored nodes, never rendered Vue children. Revision comparison is exact. */
285
- function documentForms(document, components, preview = false) {
286
- const forms = [];
287
- const visit = (nodes, parent, renderData) => {
288
- nodes.forEach((node, index) => {
289
- if (Predicate.isString(node) || node[0] === null) return;
290
- const nodePath = [...parent, index];
291
- const projection = projectCmsEditorComponentAttributes(node[1], renderData);
292
- const capabilities = components.find((component) => component.name === node[0])?.authoring.form;
293
- if (capabilities) {
294
- const parsed = parseFormSteps(projection.props.steps, capabilities, node[0]);
295
- if (Result.isSuccess(parsed)) forms.push({
296
- name: node[0],
297
- documentId: document.id,
298
- nodePath,
299
- steps: parsed.success,
300
- preview,
301
- revision: formRevision(node[0], capabilities, parsed.success)
302
- });
303
- }
304
- visit(node.slice(2).filter(isNode), nodePath, projection.renderData);
305
- });
306
- };
307
- visit(document.body.nodes, [], createCmsComarkRenderData(document.body));
308
- return forms;
309
- }
310
- function formRevision(name, capabilities, steps) {
311
- return JSON.stringify([
312
- name,
313
- capabilities,
314
- steps
315
- ]);
316
- }
317
- function isNode(value) {
318
- return Predicate.isString(value) || Array.isArray(value);
319
- }
320
- function formAuthoring(capabilities) {
321
- const prop = (name, label, type, input, extra = {}) => ({
322
- name,
323
- label,
324
- type,
325
- input,
326
- required: false,
327
- nullable: false,
328
- options: [],
329
- ...extra
330
- });
331
- const question = [
332
- prop("label", "Question", "string", "text", {
333
- required: true,
334
- defaultValue: "New question"
335
- }),
336
- prop("type", "Answer type", "string", "select", {
337
- required: true,
338
- defaultValue: capabilities.fieldTypes[0],
339
- options: capabilities.fieldTypes.map((value) => ({
340
- value,
341
- label: value
342
- }))
343
- }),
344
- prop("help", "Help text", "string", "textarea"),
345
- ...capabilities.rules.map((rule) => prop(rule, {
346
- required: "Required",
347
- minLength: "Minimum characters",
348
- maxLength: "Maximum characters",
349
- min: "Minimum value",
350
- max: "Maximum value"
351
- }[rule], rule === "required" ? "boolean" : "number", rule === "required" ? "toggle" : "number")),
352
- prop("options", "Choices", "array", "list", { fields: [prop("label", "Choice", "string", "text", {
353
- required: true,
354
- defaultValue: "New choice"
355
- })] })
356
- ];
357
- return {
358
- version: 1,
359
- label: capabilities.label,
360
- group: "Forms",
361
- form: capabilities,
362
- props: [prop("steps", "Steps", "array", "list", {
363
- required: true,
364
- fields: [prop("title", "Step title", "string", "text", {
365
- required: true,
366
- defaultValue: "New step"
367
- }), prop("fields", "Questions", "array", "list", {
368
- required: true,
369
- fields: question
370
- })]
371
- })],
372
- slots: [],
373
- initialProps: { steps: [{
374
- id: "first-step",
375
- title: "Your details",
376
- fields: [{
377
- id: "first-question",
378
- label: "Your answer",
379
- type: capabilities.fieldTypes[0] ?? "text",
380
- ...capabilities.fieldTypes[0] === "select" ? { options: [{
381
- id: "first-choice",
382
- label: "First choice"
383
- }] } : void 0
384
- }]
385
- }] }
386
- };
387
- }
388
-
389
- //#endregion
390
- export { encodeCmsEditorComponentAttributes as a, resolveCmsComarkAttributes as c, createCmsComarkRenderData as d, mutableJson as f, validateFormValues as i, withCmsComarkProps as l, toComarkDocument as m, formAuthoring as n, normalizeCmsComponentBindings as o, mutableJsonObject as p, formStructureIssues as r, projectCmsEditorComponentAttributes as s, documentForms as t, cmsComarkTextContent as u };
391
- //# sourceMappingURL=Forms-CX-hwmJF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Forms-CX-hwmJF.js","names":["isJsonObject","jsonObject","CmsMarkdownDocumentSchema","FormFieldTypeSchema","FormOptionSchema"],"sources":["../../../../document/src/internal/comark/document-adapter.ts","../../../../document/src/internal/comark/bindings.ts","../../../../document/src/Forms.ts"],"sourcesContent":["import type { CmsMarkdownDocument, MarkdownNode } from '@internal/protocol/Documents'\nimport type {\n ElementNodeAttributes,\n MarkdownDocument as ComarkMarkdownDocument,\n Node as ComarkNode,\n NodeRenderData,\n} from 'comark'\nimport { textContent } from 'comark/utils'\nimport { Predicate, Schema } from 'effect'\n\nconst isJsonObject = Schema.is(Schema.JsonObject)\n\nexport function toComarkDocument(document: CmsMarkdownDocument): ComarkMarkdownDocument {\n return {\n frontmatter: mutableJsonObject(document.frontmatter),\n meta: mutableJsonObject(document.meta),\n nodes: document.nodes.map(toComarkNode),\n }\n}\n\nexport function createCmsComarkRenderData(document: CmsMarkdownDocument): NodeRenderData {\n return {\n data: {},\n frontmatter: mutableJsonObject(document.frontmatter),\n meta: mutableJsonObject(document.meta),\n props: {},\n }\n}\n\n/** Extracts inline text with Comark semantics, preserving punctuation between nested inline nodes. */\nexport function cmsComarkTextContent(node: MarkdownNode): string {\n return textContent(toComarkNode(node), { decodeUnicodeEntities: true })\n}\n\nexport function toMutableComarkAttributes(attributes: Schema.JsonObject): ElementNodeAttributes {\n const result: ElementNodeAttributes = {}\n\n for (const [name, value] of Object.entries(attributes)) {\n if (name !== '$') result[name] = mutableJson(value)\n }\n\n const internal = jsonObject(attributes.$)\n const line = internal.line\n const html = binaryFlag(internal.html)\n const block = binaryFlag(internal.block)\n\n if (Predicate.isNumber(line) || html !== undefined || block !== undefined) {\n const metadata: Record<string, number> = {}\n\n if (Predicate.isNumber(line)) metadata.line = line\n\n if (html !== undefined) metadata.html = html\n\n if (block !== undefined) metadata.block = block\n result.$ = metadata\n }\n\n return result\n}\n\nexport function mutableJson(value: Schema.Json): Schema.Json {\n if (Array.isArray(value)) return value.map(mutableJson)\n\n if (isJsonObject(value)) return mutableJsonObject(value)\n\n return value\n}\n\nfunction toComarkNode(node: MarkdownNode): ComarkNode {\n if (Predicate.isString(node)) return node\n\n if (node[0] === null) return [null, toMutableComarkAttributes(node[1]), node[2]]\n const [tag, attributes, ...children] = node\n\n return [tag, toMutableComarkAttributes(attributes), ...children.map(toComarkNode)]\n}\n\nexport function mutableJsonObject(value: Schema.JsonObject): Record<string, Schema.Json> {\n return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, mutableJson(child)]))\n}\n\nfunction binaryFlag(value: Schema.Json | undefined): 0 | 1 | undefined {\n return value === 0 || value === 1 ? value : undefined\n}\n\nfunction jsonObject(value: Schema.Json | undefined): Schema.JsonObject {\n return isJsonObject(value) ? value : {}\n}\n","import type { ComponentDefinition } from '@internal/protocol/Configuration'\nimport type { CmsMarkdownDocument, MarkdownNode } from '@internal/protocol/Documents'\nimport type { NodeRenderData } from 'comark'\nimport { CmsMarkdownDocument as CmsMarkdownDocumentSchema } from '@internal/protocol/Documents'\nimport { resolveAttributes } from 'comark/utils'\nimport { Option, Predicate, Schema } from 'effect'\nimport { mutableJson, mutableJsonObject, toMutableComarkAttributes } from './document-adapter'\n\nconst isJsonObject = Schema.is(Schema.JsonObject)\n\nconst decodeJson = Schema.decodeUnknownOption(Schema.Json)\n\nexport type CmsComarkAttributeValue = Schema.Json | undefined\n\nexport type CmsComarkAttributes = ReadonlyMap<string, CmsComarkAttributeValue>\n\ninterface CmsEditorComponentProjection {\n readonly bindings: Schema.JsonObject\n readonly props: Schema.JsonObject\n readonly renderData: NodeRenderData\n}\n\n/** Normalizes bindings exactly as Comark's framework renderers do before passing props to a component. */\nexport function resolveCmsComarkAttributes(\n attributes: Schema.JsonObject,\n renderData: NodeRenderData,\n): CmsComarkAttributes {\n const resolved = new Map<string, CmsComarkAttributeValue>()\n\n for (const [name, value] of Object.entries(\n resolveAttributes(toMutableComarkAttributes(attributes), renderData, { parseJson: true }),\n )) {\n if (Predicate.isUndefined(value)) {\n resolved.set(name, undefined)\n continue\n }\n\n const decoded = decodeJson(value)\n\n if (Option.isNone(decoded)) throw new Error(`Comark resolved non-JSON attribute \"${name}\".`)\n resolved.set(name, decoded.value)\n }\n\n return resolved\n}\n\n/** Projects bindings to editable values while retaining enough metadata to reconstruct their authored form. */\nexport function projectCmsEditorComponentAttributes(\n attributes: Schema.JsonObject,\n renderData: NodeRenderData,\n): CmsEditorComponentProjection {\n const resolved = resolveCmsComarkAttributes(attributes, renderData)\n const props: Record<string, Schema.Json> = {}\n\n for (const [name, value] of resolved) {\n if (!Predicate.isUndefined(value)) props[name] = mutableJson(value)\n }\n\n const bindings: Record<string, Schema.Json> = {}\n\n for (const [authoredName, authoredValue] of Object.entries(attributes)) {\n if (!authoredName.startsWith(':') || authoredName.length === 1) continue\n const name = authoredName.slice(1)\n\n if (!resolved.has(name)) continue\n const literal = jsonLiteral(authoredValue)\n\n if (!Predicate.isString(authoredValue) || literal !== authoredValue) {\n bindings[name] = { kind: 'literal' }\n continue\n }\n\n const resolvedValue = resolved.get(name)\n bindings[name] = Object.assign(\n { expression: authoredValue, kind: 'expression' },\n Predicate.isUndefined(resolvedValue) ? undefined : { resolved: mutableJson(resolvedValue) },\n )\n }\n\n return { bindings, props, renderData: withCmsComarkProps(renderData, resolved) }\n}\n\n/** Reconstructs authored bindings, keeping expressions until a user replaces their resolved value. */\nexport function encodeCmsEditorComponentAttributes(\n props: Schema.JsonObject,\n bindings: Schema.JsonObject,\n): Schema.JsonObject {\n const attributes = mutableJsonObject(props)\n\n for (const [name, encodedBinding] of Object.entries(bindings)) {\n const binding = jsonObject(encodedBinding)\n const kind = binding.kind\n\n if (kind !== 'literal' && kind !== 'expression') continue\n const current = props[name]\n\n if (Predicate.isUndefined(current)) {\n const expression = binding.expression\n\n if (kind === 'expression' && Predicate.isString(expression)) attributes[`:${name}`] = expression\n continue\n }\n\n delete attributes[name]\n const expression = binding.expression\n const resolved = binding.resolved\n attributes[`:${name}`] =\n kind === 'expression' &&\n Predicate.isString(expression) &&\n Object.hasOwn(binding, 'resolved') &&\n sameJson(current, resolved)\n ? expression\n : mutableJson(current)\n }\n\n return attributes\n}\n\nexport function withCmsComarkProps(renderData: NodeRenderData, attributes: CmsComarkAttributes): NodeRenderData {\n return attributes.size > 0 ? { ...renderData, props: Object.fromEntries(attributes) } : renderData\n}\n\n/** Restores typed component bindings that Comark's block-YAML roundtrip can emit as plain attributes. */\nexport function normalizeCmsComponentBindings(\n document: CmsMarkdownDocument,\n components: ReadonlyMap<string, ComponentDefinition> | undefined,\n): CmsMarkdownDocument {\n if (!components) return document\n\n return CmsMarkdownDocumentSchema.make({\n frontmatter: document.frontmatter,\n meta: document.meta,\n nodes: document.nodes.map((node) => normalizeComponentNode(node, components)),\n })\n}\n\nexport function matchesCmsComponentPropType(\n value: CmsComarkAttributeValue,\n type: ComponentDefinition['authoring']['props'][number]['type'],\n): boolean {\n switch (type) {\n case 'object':\n return isJsonObject(value)\n case 'array':\n return Array.isArray(value)\n case 'boolean':\n return Predicate.isBoolean(value)\n case 'number':\n return Predicate.isNumber(value)\n case 'string':\n case 'date':\n return Predicate.isString(value)\n case 'string[]':\n return Array.isArray(value) && value.every(Predicate.isString)\n }\n}\n\nfunction normalizeComponentNode(\n node: MarkdownNode,\n components: ReadonlyMap<string, ComponentDefinition>,\n): MarkdownNode {\n if (Predicate.isString(node) || node[0] === null) return node\n const [tag, originalAttributes, ...originalChildren] = node\n const attributes = mutableJsonObject(originalAttributes)\n const definition = components.get(tag.toLocaleLowerCase())\n\n if (definition) {\n for (const prop of definition.authoring.props) {\n if (prop.type === 'string' || `:${prop.name}` in attributes || !(prop.name in attributes)) continue\n const value = attributes[prop.name]\n\n if (Predicate.isUndefined(value)) continue\n const resolved = jsonLiteral(value)\n\n if (!matchesCmsComponentPropType(resolved, prop.type)) continue\n delete attributes[prop.name]\n attributes[`:${prop.name}`] = value\n }\n }\n\n return [tag, attributes, ...originalChildren.map((child) => normalizeComponentNode(child, components))]\n}\n\nfunction jsonLiteral(value: Schema.Json | undefined): CmsComarkAttributeValue {\n if (!Predicate.isString(value)) return value\n\n try {\n const decoded = decodeJson(JSON.parse(value))\n\n return Option.isSome(decoded) ? decoded.value : value\n } catch {\n return value\n }\n}\n\nfunction jsonObject(value: Schema.Json | undefined): Schema.JsonObject {\n return isJsonObject(value) ? value : {}\n}\n\nfunction sameJson(left: Schema.Json, right: Schema.Json | undefined): boolean {\n return !Predicate.isUndefined(right) && JSON.stringify(left) === JSON.stringify(right)\n}\n","import { createCmsComarkRenderData } from './internal/comark/document-adapter'\nimport { projectCmsEditorComponentAttributes } from './internal/comark/bindings'\nimport type { NodeRenderData } from 'comark'\nimport type { BlockAuthoring } from '@internal/protocol/Authoring'\nimport type { StructuredField } from '@internal/protocol/StructuredFields'\nimport type { ComponentDefinition } from '@internal/protocol/Configuration'\nimport type { CmsMarkdownDocument } from '@internal/protocol/Documents'\nimport type {\n FormCapabilities,\n FormDefinition,\n FormField,\n FormFieldType,\n FormOption,\n FormStep,\n FormValues,\n} from '@internal/protocol/Forms'\nimport {\n FORM_REVISION_MAX_BYTES,\n FormFieldType as FormFieldTypeSchema,\n FormOption as FormOptionSchema,\n FormSteps,\n} from '@internal/protocol/Forms'\nimport { Predicate, Result, Schema } from 'effect'\n\nexport function formStructureIssues(\n input: Schema.Json | undefined,\n capabilities: FormCapabilities,\n name: string,\n): string[] {\n const parsed = parseFormSteps(input, capabilities, name)\n\n return Result.isFailure(parsed) ? parsed.failure : []\n}\n\nfunction parseFormSteps(\n input: Schema.Json | undefined,\n capabilities: FormCapabilities,\n name: string,\n): Result.Result<ReadonlyArray<FormStep>, string[]> {\n const decoded = Schema.decodeUnknownResult(DraftFormSteps)(input, { onExcessProperty: 'error' })\n\n if (Result.isFailure(decoded))\n return Result.fail(['Each form needs steps with a title and at least one valid question.'])\n const issues: string[] = []\n const revisionBytes = new TextEncoder().encode(JSON.stringify(formRevision(name, capabilities, decoded.success)))\n\n if (revisionBytes.byteLength > FORM_REVISION_MAX_BYTES)\n issues.push('This form is too large. Reduce the number or size of questions.')\n const ids = new Set<string>()\n\n for (const step of decoded.success) {\n if (ids.has(step.id)) issues.push('Steps and questions must have unique identities.')\n ids.add(step.id)\n\n for (const field of step.fields) {\n if (ids.has(field.id)) issues.push('Steps and questions must have unique identities.')\n ids.add(field.id)\n\n if (['_form', '__proto__', 'constructor', 'prototype'].includes(field.id))\n issues.push('This question identity is reserved.')\n\n if (!capabilities.fieldTypes.includes(field.type))\n issues.push(`${field.label}: this question type is unavailable.`)\n\n for (const rule of ['required', 'minLength', 'maxLength', 'min', 'max'] as const) {\n if (field[rule] !== undefined && !capabilities.rules.includes(rule))\n issues.push(`${field.label}: ${rule} is unavailable.`)\n }\n\n const text = ['text', 'email', 'textarea'].includes(field.type)\n\n if (!text && (field.minLength !== undefined || field.maxLength !== undefined))\n issues.push(`${field.label}: length limits require a text question.`)\n\n if (field.type !== 'number' && (field.min !== undefined || field.max !== undefined))\n issues.push(`${field.label}: numeric limits require a number question.`)\n\n if (field.min !== undefined && field.max !== undefined && field.min > field.max)\n issues.push(`${field.label}: minimum exceeds maximum.`)\n\n if (field.minLength !== undefined && field.maxLength !== undefined && field.minLength > field.maxLength)\n issues.push(`${field.label}: minimum length exceeds maximum length.`)\n const options = field.options ?? []\n\n if (\n field.type === 'select' &&\n (!options.length || new Set(options.map((option) => option.id)).size !== options.length)\n )\n issues.push(`${field.label}: choices need unique identities and at least one option.`)\n\n if (field.type !== 'select' && options.length) issues.push(`${field.label}: choices require a select question.`)\n }\n }\n\n if (issues.length) return Result.fail(issues)\n\n return Schema.decodeUnknownResult(FormSteps)(decoded.success).pipe(\n Result.mapError(() => ['Each form needs steps with a title and at least one valid question.']),\n )\n}\n\nexport function validateFormValues(fields: ReadonlyArray<FormField>, values: FormValues): Record<string, string> {\n return Object.fromEntries(\n fields.flatMap((field) => {\n const issue = fieldIssue(field, Object.hasOwn(values, field.id) ? values[field.id] : undefined)\n\n return issue ? [[field.id, issue]] : []\n }),\n )\n}\n\nfunction fieldIssue(field: FormField, value: FormValues[string] | undefined): string | undefined {\n const empty = value === undefined || value === null || value === '' || (Predicate.isString(value) && !value.trim())\n\n if (empty) return field.required ? `${field.label} is required.` : undefined\n\n if (field.type === 'checkbox')\n return !Predicate.isBoolean(value)\n ? 'Choose yes or no.'\n : field.required && !value\n ? `${field.label} must be checked.`\n : undefined\n\n if (field.type === 'number') {\n if (!Predicate.isNumber(value) || !Number.isFinite(value)) return 'Enter a number.'\n\n if (field.min !== undefined && value < field.min) return `Enter at least ${field.min}.`\n\n if (field.max !== undefined && value > field.max) return `Enter at most ${field.max}.`\n\n return undefined\n }\n\n if (!Predicate.isString(value)) return 'Enter text.'\n\n if (field.type === 'select' && !field.options.some((option) => option.id === value))\n return 'Choose an available option.'\n\n if (field.type === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u.test(value)) return 'Enter a valid email address.'\n\n if (\n (field.type === 'text' || field.type === 'email' || field.type === 'textarea') &&\n field.minLength !== undefined &&\n value.length < field.minLength\n )\n return `Enter at least ${field.minLength} characters.`\n\n if (\n (field.type === 'text' || field.type === 'email' || field.type === 'textarea') &&\n field.maxLength !== undefined &&\n value.length > field.maxLength\n )\n return `Enter at most ${field.maxLength} characters.`\n\n return undefined\n}\n\ninterface DraftFormField {\n readonly id: string\n readonly label: string\n readonly type: FormFieldType\n readonly help?: string\n readonly required?: boolean\n readonly minLength?: number\n readonly maxLength?: number\n readonly min?: number\n readonly max?: number\n readonly options?: ReadonlyArray<FormOption>\n}\n\nconst DraftFormField: Schema.Codec<DraftFormField> = Schema.Struct({\n id: Schema.NonEmptyString,\n label: Schema.NonEmptyString,\n type: FormFieldTypeSchema,\n help: Schema.optionalKey(Schema.String),\n required: Schema.optionalKey(Schema.Boolean),\n minLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),\n maxLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),\n min: Schema.optionalKey(Schema.Finite),\n max: Schema.optionalKey(Schema.Finite),\n options: Schema.optionalKey(Schema.Array(FormOptionSchema)),\n})\n\nconst DraftFormSteps = Schema.Array(\n Schema.Struct({\n id: Schema.NonEmptyString,\n title: Schema.NonEmptyString,\n fields: Schema.Array(DraftFormField).check(Schema.isMinLength(1), Schema.isMaxLength(100)),\n }),\n).check(Schema.isMinLength(1), Schema.isMaxLength(20))\n\n/** Paths refer to authored nodes, never rendered Vue children. Revision comparison is exact. */\nexport function documentForms(\n document: { readonly id: FormDefinition['documentId']; readonly body: CmsMarkdownDocument },\n components: ReadonlyArray<ComponentDefinition>,\n preview = false,\n): FormDefinition[] {\n const forms: FormDefinition[] = []\n\n const visit = (nodes: CmsMarkdownDocument['nodes'], parent: number[], renderData: NodeRenderData) => {\n nodes.forEach((node, index) => {\n if (Predicate.isString(node) || node[0] === null) return\n const nodePath = [...parent, index]\n const projection = projectCmsEditorComponentAttributes(node[1], renderData)\n const capabilities = components.find((component) => component.name === node[0])?.authoring.form\n\n if (capabilities) {\n const parsed = parseFormSteps(projection.props.steps, capabilities, node[0])\n\n if (Result.isSuccess(parsed))\n forms.push({\n name: node[0],\n documentId: document.id,\n nodePath,\n steps: parsed.success,\n preview,\n revision: formRevision(node[0], capabilities, parsed.success),\n })\n }\n\n visit(node.slice(2).filter(isNode), nodePath, projection.renderData)\n })\n }\n\n visit(document.body.nodes, [], createCmsComarkRenderData(document.body))\n\n return forms\n}\n\nfunction formRevision(\n name: string,\n capabilities: FormCapabilities,\n steps: Schema.Schema.Type<typeof DraftFormSteps>,\n): string {\n return JSON.stringify([name, capabilities, steps])\n}\n\nfunction isNode(value: Schema.Json | undefined): value is CmsMarkdownDocument['nodes'][number] {\n return Predicate.isString(value) || Array.isArray(value)\n}\n\nexport function formAuthoring(capabilities: FormCapabilities): BlockAuthoring {\n const prop = (\n name: string,\n label: string,\n type: StructuredField['type'],\n input: StructuredField['input'],\n extra: Partial<StructuredField> = {},\n ): StructuredField => ({ name, label, type, input, required: false, nullable: false, options: [], ...extra })\n\n const question = [\n prop('label', 'Question', 'string', 'text', { required: true, defaultValue: 'New question' }),\n prop('type', 'Answer type', 'string', 'select', {\n required: true,\n defaultValue: capabilities.fieldTypes[0],\n options: capabilities.fieldTypes.map((value) => ({ value, label: value })),\n }),\n prop('help', 'Help text', 'string', 'textarea'),\n ...capabilities.rules.map((rule) =>\n prop(\n rule,\n {\n required: 'Required',\n minLength: 'Minimum characters',\n maxLength: 'Maximum characters',\n min: 'Minimum value',\n max: 'Maximum value',\n }[rule],\n rule === 'required' ? 'boolean' : 'number',\n rule === 'required' ? 'toggle' : 'number',\n ),\n ),\n prop('options', 'Choices', 'array', 'list', {\n fields: [prop('label', 'Choice', 'string', 'text', { required: true, defaultValue: 'New choice' })],\n }),\n ]\n\n return {\n version: 1,\n label: capabilities.label,\n group: 'Forms',\n form: capabilities,\n props: [\n prop('steps', 'Steps', 'array', 'list', {\n required: true,\n fields: [\n prop('title', 'Step title', 'string', 'text', { required: true, defaultValue: 'New step' }),\n prop('fields', 'Questions', 'array', 'list', { required: true, fields: question }),\n ],\n }),\n ],\n slots: [],\n initialProps: {\n steps: [\n {\n id: 'first-step',\n title: 'Your details',\n fields: [\n {\n id: 'first-question',\n label: 'Your answer',\n type: capabilities.fieldTypes[0] ?? 'text',\n ...(capabilities.fieldTypes[0] === 'select'\n ? { options: [{ id: 'first-choice', label: 'First choice' }] }\n : undefined),\n },\n ],\n },\n ],\n },\n }\n}\n"],"mappings":"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"}
@@ -1,110 +0,0 @@
1
- import { r as DocumentId } from "./scalars-CVZqT3L0.js";
2
- import { Schema } from "effect";
3
-
4
- //#region ../protocol/src/Forms.ts
5
- const FORM_SUBMISSION_MAX_BYTES = 131072;
6
- /** Budget for the JSON-escaped revision, leaving space for the envelope and answers. */
7
- const FORM_REVISION_MAX_BYTES = 6e4;
8
- const FormFieldType = Schema.Literals([
9
- "text",
10
- "email",
11
- "textarea",
12
- "number",
13
- "checkbox",
14
- "select"
15
- ]);
16
- const FormRule = Schema.Literals([
17
- "required",
18
- "minLength",
19
- "maxLength",
20
- "min",
21
- "max"
22
- ]);
23
- const FormCapabilities = Schema.Struct({
24
- label: Schema.NonEmptyString,
25
- fieldTypes: Schema.Array(FormFieldType).check(Schema.isMinLength(1)),
26
- rules: Schema.Array(FormRule)
27
- });
28
- const FormOption = Schema.Struct({
29
- id: Schema.NonEmptyString,
30
- label: Schema.NonEmptyString
31
- });
32
- const formFieldBase = {
33
- id: Schema.NonEmptyString,
34
- label: Schema.NonEmptyString,
35
- help: Schema.optionalKey(Schema.String),
36
- required: Schema.optionalKey(Schema.Boolean)
37
- };
38
- const formTextField = (type) => Schema.Struct({
39
- ...formFieldBase,
40
- type: Schema.Literals([type]),
41
- minLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),
42
- maxLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)))
43
- });
44
- const FormNumberField = Schema.Struct({
45
- ...formFieldBase,
46
- type: Schema.Literals(["number"]),
47
- min: Schema.optionalKey(Schema.Finite),
48
- max: Schema.optionalKey(Schema.Finite)
49
- });
50
- const FormCheckboxField = Schema.Struct({
51
- ...formFieldBase,
52
- type: Schema.Literals(["checkbox"])
53
- });
54
- const FormSelectField = Schema.Struct({
55
- ...formFieldBase,
56
- type: Schema.Literals(["select"]),
57
- options: Schema.NonEmptyArray(FormOption)
58
- });
59
- const FormField = Schema.Union([
60
- formTextField("text"),
61
- formTextField("email"),
62
- formTextField("textarea"),
63
- FormNumberField,
64
- FormCheckboxField,
65
- FormSelectField
66
- ]);
67
- const FormStep = Schema.Struct({
68
- id: Schema.NonEmptyString,
69
- title: Schema.NonEmptyString,
70
- fields: Schema.Array(FormField).check(Schema.isMinLength(1), Schema.isMaxLength(100))
71
- });
72
- const FormSteps = Schema.Array(FormStep).check(Schema.isMinLength(1), Schema.isMaxLength(20));
73
- const referenceFields = {
74
- documentId: DocumentId,
75
- nodePath: Schema.Array(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))).check(Schema.isMinLength(1), Schema.isMaxLength(64)),
76
- revision: Schema.String.check(Schema.isMaxLength(FORM_REVISION_MAX_BYTES))
77
- };
78
- const FormReference = Schema.Struct(referenceFields);
79
- const FormValues = Schema.Record(Schema.String, Schema.Union([
80
- Schema.String,
81
- Schema.Finite,
82
- Schema.Boolean,
83
- Schema.Null
84
- ]));
85
- const FormSubmission = Schema.Struct({
86
- ...referenceFields,
87
- values: FormValues
88
- });
89
- const AcceptedFormResult = Schema.Struct({
90
- status: Schema.Literals(["accepted"]),
91
- reference: Schema.optionalKey(Schema.NonEmptyString)
92
- });
93
- const InvalidFormResult = Schema.Struct({
94
- status: Schema.Literals(["invalid"]),
95
- errors: Schema.Record(Schema.String, Schema.String)
96
- });
97
- const StaleFormResult = Schema.Struct({ status: Schema.Literals(["stale"]) });
98
- const UnavailableFormResult = Schema.Struct({ status: Schema.Literals(["unavailable"]) });
99
- const FailedFormResult = Schema.Struct({ status: Schema.Literals(["failed"]) });
100
- const FormResult = Schema.Union([
101
- AcceptedFormResult,
102
- InvalidFormResult,
103
- StaleFormResult,
104
- UnavailableFormResult,
105
- FailedFormResult
106
- ]);
107
-
108
- //#endregion
109
- export { FormOption as a, FormSubmission as c, FormFieldType as i, FORM_SUBMISSION_MAX_BYTES as n, FormResult as o, FormCapabilities as r, FormSteps as s, FORM_REVISION_MAX_BYTES as t };
110
- //# sourceMappingURL=Forms-CfNPTiCr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Forms-CfNPTiCr.js","names":[],"sources":["../../../../protocol/src/Forms.ts"],"sourcesContent":["import { Schema } from 'effect'\nimport { DocumentId } from './internal/documents/scalars'\n\nexport const FORM_SUBMISSION_MAX_BYTES = 128 * 1024\n\n/** Budget for the JSON-escaped revision, leaving space for the envelope and answers. */\nexport const FORM_REVISION_MAX_BYTES = 60000\n\nexport type FormFieldType = 'text' | 'email' | 'textarea' | 'number' | 'checkbox' | 'select'\n\nexport const FormFieldType: Schema.Codec<FormFieldType> = Schema.Literals([\n 'text',\n 'email',\n 'textarea',\n 'number',\n 'checkbox',\n 'select',\n])\n\nexport type FormRule = 'required' | 'minLength' | 'maxLength' | 'min' | 'max'\n\nexport const FormRule: Schema.Codec<FormRule> = Schema.Literals(['required', 'minLength', 'maxLength', 'min', 'max'])\n\nexport interface FormCapabilities {\n readonly label: string\n readonly fieldTypes: ReadonlyArray<FormFieldType>\n readonly rules: ReadonlyArray<FormRule>\n}\n\nexport const FormCapabilities: Schema.Codec<FormCapabilities> = Schema.Struct({\n label: Schema.NonEmptyString,\n fieldTypes: Schema.Array(FormFieldType).check(Schema.isMinLength(1)),\n rules: Schema.Array(FormRule),\n})\n\nexport interface FormOption {\n readonly id: string\n readonly label: string\n}\n\nexport const FormOption: Schema.Codec<FormOption> = Schema.Struct({\n id: Schema.NonEmptyString,\n label: Schema.NonEmptyString,\n})\n\ninterface FormFieldBase {\n readonly id: string\n readonly label: string\n readonly help?: string\n readonly required?: boolean\n}\n\ninterface FormTextField<Type extends 'text' | 'email' | 'textarea'> extends FormFieldBase {\n readonly type: Type\n readonly minLength?: number\n readonly maxLength?: number\n}\n\nexport interface FormNumberField extends FormFieldBase {\n readonly type: 'number'\n readonly min?: number\n readonly max?: number\n}\n\nexport interface FormCheckboxField extends FormFieldBase {\n readonly type: 'checkbox'\n}\n\nexport interface FormSelectField extends FormFieldBase {\n readonly type: 'select'\n readonly options: readonly [FormOption, ...FormOption[]]\n}\n\nexport type FormField =\n | FormTextField<'text'>\n | FormTextField<'email'>\n | FormTextField<'textarea'>\n | FormNumberField\n | FormCheckboxField\n | FormSelectField\n\nconst formFieldBase = {\n id: Schema.NonEmptyString,\n label: Schema.NonEmptyString,\n help: Schema.optionalKey(Schema.String),\n required: Schema.optionalKey(Schema.Boolean),\n}\n\nconst formTextField = <Type extends 'text' | 'email' | 'textarea'>(type: Type) =>\n Schema.Struct({\n ...formFieldBase,\n type: Schema.Literals([type]),\n minLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),\n maxLength: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))),\n })\n\nconst FormNumberField = Schema.Struct({\n ...formFieldBase,\n type: Schema.Literals(['number']),\n min: Schema.optionalKey(Schema.Finite),\n max: Schema.optionalKey(Schema.Finite),\n})\n\nconst FormCheckboxField = Schema.Struct({ ...formFieldBase, type: Schema.Literals(['checkbox']) })\n\nconst FormSelectField = Schema.Struct({\n ...formFieldBase,\n type: Schema.Literals(['select']),\n options: Schema.NonEmptyArray(FormOption),\n})\n\nexport const FormField: Schema.Codec<FormField> = Schema.Union([\n formTextField('text'),\n formTextField('email'),\n formTextField('textarea'),\n FormNumberField,\n FormCheckboxField,\n FormSelectField,\n])\n\nexport interface FormStep {\n readonly id: string\n readonly title: string\n readonly fields: ReadonlyArray<FormField>\n}\n\nexport const FormStep: Schema.Codec<FormStep> = Schema.Struct({\n id: Schema.NonEmptyString,\n title: Schema.NonEmptyString,\n fields: Schema.Array(FormField).check(Schema.isMinLength(1), Schema.isMaxLength(100)),\n})\n\nexport const FormSteps: Schema.Codec<ReadonlyArray<FormStep>> = Schema.Array(FormStep).check(\n Schema.isMinLength(1),\n Schema.isMaxLength(20),\n)\n\nexport interface FormReference {\n readonly documentId: DocumentId\n readonly nodePath: ReadonlyArray<number>\n readonly revision: string\n}\n\nconst referenceFields = {\n documentId: DocumentId,\n nodePath: Schema.Array(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))).check(\n Schema.isMinLength(1),\n Schema.isMaxLength(64),\n ),\n revision: Schema.String.check(Schema.isMaxLength(FORM_REVISION_MAX_BYTES)),\n}\n\nexport const FormReference: Schema.Codec<\n FormReference,\n { readonly documentId: string; readonly nodePath: ReadonlyArray<number>; readonly revision: string }\n> = Schema.Struct(referenceFields)\n\nexport interface FormDefinition extends FormReference {\n readonly name: string\n readonly steps: ReadonlyArray<FormStep>\n readonly preview: boolean\n}\n\nexport type FormValues = Readonly<Record<string, string | number | boolean | null>>\n\nexport const FormValues: Schema.Codec<FormValues> = Schema.Record(\n Schema.String,\n Schema.Union([Schema.String, Schema.Finite, Schema.Boolean, Schema.Null]),\n)\n\nexport interface FormSubmission extends FormReference {\n readonly values: FormValues\n}\n\nexport const FormSubmission: Schema.Codec<\n FormSubmission,\n {\n readonly documentId: string\n readonly nodePath: ReadonlyArray<number>\n readonly revision: string\n readonly values: FormValues\n }\n> = Schema.Struct({ ...referenceFields, values: FormValues })\n\nconst AcceptedFormResult = Schema.Struct({\n status: Schema.Literals(['accepted']),\n reference: Schema.optionalKey(Schema.NonEmptyString),\n})\n\nconst InvalidFormResult = Schema.Struct({\n status: Schema.Literals(['invalid']),\n errors: Schema.Record(Schema.String, Schema.String),\n})\n\nconst StaleFormResult = Schema.Struct({ status: Schema.Literals(['stale']) })\n\nconst UnavailableFormResult = Schema.Struct({ status: Schema.Literals(['unavailable']) })\n\nconst FailedFormResult = Schema.Struct({ status: Schema.Literals(['failed']) })\n\nexport const FormResult = Schema.Union([\n AcceptedFormResult,\n InvalidFormResult,\n StaleFormResult,\n UnavailableFormResult,\n FailedFormResult,\n])\n\nexport type FormResult = typeof FormResult.Type\n"],"mappings":"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"}