@phtngyn/cms 0.2.0-beta.7 → 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 -401
  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 +1039 -162
  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 +8757 -39178
  354. package/studio/host.js.br +0 -0
  355. package/studio/host.js.gz +0 -0
  356. package/CHANGELOG.md +0 -13
  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-Da5B2PVH.js +0 -1191
  361. package/src/Configuration-Da5B2PVH.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-hh_IGPXO.js +0 -978
  372. package/src/DocumentEngine-hh_IGPXO.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-c9nLZ9H2.js +0 -21
  383. package/src/HttpPaths-c9nLZ9H2.js.map +0 -1
  384. package/src/I18n-zbqpWxki.d.ts +0 -29
  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-Dwhl2deX.js +0 -2742
  391. package/src/S3MediaObjects-Dwhl2deX.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-CjDq63Ft.js +0 -535
  399. package/src/dev-lifecycle-CjDq63Ft.js.map +0 -1
  400. package/src/installation-DYNQQBD3.js +0 -9114
  401. package/src/installation-DYNQQBD3.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 -99
  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 -51
  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-BpjBYGfI.js +0 -335
  521. package/studio/SelectMenu-KiXwx4Y_.js +0 -34032
  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,6 +0,0 @@
1
- //#region src/runtime/delivery/preview.ts
2
- const documentPreviewStoreKey = Symbol("cms-preview-store");
3
-
4
- //#endregion
5
- export { documentPreviewStoreKey };
6
- //# sourceMappingURL=preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preview.js","names":[],"sources":["../../../../../src/runtime/delivery/preview.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { DeliveryDocument } from './types'\n\nexport type PreviewDocumentRole = 'embedded' | 'primary' | 'related' | 'summary'\n\nexport interface DocumentPreviewStore {\n readonly register: (document: DeliveryDocument, role: PreviewDocumentRole) => () => void\n readonly resolve: (document: DeliveryDocument) => DeliveryDocument\n}\n\nexport const documentPreviewStoreKey: InjectionKey<DocumentPreviewStore> = Symbol('cms-preview-store')\n"],"mappings":";AAUA,MAAa,0BAA8D,OAAO,mBAAmB"}
@@ -1,2 +0,0 @@
1
- import { a as DeliveryJson, c as DeliveryMarkdownNode, i as DeliveryDocumentQuerySort, n as DeliveryDocumentPage, o as DeliveryJsonObject, r as DeliveryDocumentQuery, s as DeliveryMarkdownDocument, t as DeliveryDocument } from "../../types-DZ0IV-Ow.js";
2
- export { DeliveryDocument, DeliveryDocumentPage, DeliveryDocumentQuery, DeliveryDocumentQuerySort, DeliveryJson, DeliveryJsonObject, DeliveryMarkdownDocument, DeliveryMarkdownNode };
@@ -1 +0,0 @@
1
- export { };
@@ -1,67 +0,0 @@
1
- import { i as SiteIdentity } from "../../Seo-402YumpT.js";
2
- import { t as DeliveryDocument } from "../../types-DZ0IV-Ow.js";
3
- import { ComputedRef, MaybeRefOrGetter } from "vue";
4
- //#region src/runtime/delivery/useCmsDocumentSeo.d.ts
5
- type ReactiveMetadataValue = () => string | undefined;
6
- export interface CmsSeoMetadata {
7
- readonly title: ReactiveMetadataValue;
8
- readonly description: ReactiveMetadataValue;
9
- readonly ogTitle: ReactiveMetadataValue;
10
- readonly ogDescription: ReactiveMetadataValue;
11
- readonly ogImage: ReactiveMetadataValue;
12
- readonly ogImageAlt: ReactiveMetadataValue;
13
- readonly ogLocale: ReactiveMetadataValue;
14
- readonly ogUrl: ReactiveMetadataValue;
15
- readonly robots: ReactiveMetadataValue;
16
- }
17
- interface CmsIdentitySchemaNode {
18
- readonly '@type': SiteIdentity['type'];
19
- readonly name: string;
20
- readonly url?: string;
21
- readonly image?: string;
22
- readonly logo?: string;
23
- readonly telephone?: string;
24
- readonly address?: NonNullable<Extract<SiteIdentity, {
25
- readonly type: 'LocalBusiness';
26
- }>['address']>;
27
- }
28
- interface CmsPageSchemaNode {
29
- readonly '@type': 'Article' | 'WebPage';
30
- readonly name: string;
31
- readonly description?: string;
32
- readonly image?: string;
33
- readonly url?: string;
34
- readonly headline?: string;
35
- readonly datePublished?: string;
36
- readonly dateModified?: string;
37
- readonly inLanguage?: string;
38
- }
39
- export type CmsSeoSchemaNode = CmsIdentitySchemaNode | CmsPageSchemaNode;
40
- export interface CmsDocumentSeoAdapters {
41
- readonly head: (input: () => {
42
- htmlAttrs?: {
43
- lang: string;
44
- };
45
- link: Array<{
46
- href: string;
47
- rel: 'canonical';
48
- } | {
49
- href: string;
50
- hreflang: string;
51
- rel: 'alternate';
52
- }>;
53
- titleTemplate: null;
54
- }) => void;
55
- readonly robots: (input: ComputedRef<{
56
- readonly follow: boolean;
57
- readonly index: boolean;
58
- }>) => void;
59
- readonly schema: (input: ComputedRef<ReadonlyArray<CmsSeoSchemaNode>>) => void;
60
- readonly seoMeta: (input: CmsSeoMetadata) => void;
61
- readonly locale: (input: ComputedRef<string | undefined>) => void;
62
- }
63
- /** Installs Nuxt's composables once before document page setup. */
64
- export declare function installCmsDocumentSeoAdapters(adapters: CmsDocumentSeoAdapters): void;
65
- export declare function useCmsDocumentSeo(document: MaybeRefOrGetter<DeliveryDocument | null>): void;
66
- //#endregion
67
- //# sourceMappingURL=useCmsDocumentSeo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCmsDocumentSeo.js","names":[],"sources":["../../../../../src/runtime/delivery/useCmsDocumentSeo.ts"],"sourcesContent":["import type { ResolvedSeo, SiteIdentity } from '@internal/protocol/Seo'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\nimport type { DeliveryDocument } from './types'\nimport { computed, toValue } from 'vue'\n\ntype ReactiveMetadataValue = () => string | undefined\n\nexport interface CmsSeoMetadata {\n readonly title: ReactiveMetadataValue\n readonly description: ReactiveMetadataValue\n readonly ogTitle: ReactiveMetadataValue\n readonly ogDescription: ReactiveMetadataValue\n readonly ogImage: ReactiveMetadataValue\n readonly ogImageAlt: ReactiveMetadataValue\n readonly ogLocale: ReactiveMetadataValue\n readonly ogUrl: ReactiveMetadataValue\n readonly robots: ReactiveMetadataValue\n}\n\ninterface CmsIdentitySchemaNode {\n readonly '@type': SiteIdentity['type']\n readonly name: string\n readonly url?: string\n readonly image?: string\n readonly logo?: string\n readonly telephone?: string\n readonly address?: NonNullable<Extract<SiteIdentity, { readonly type: 'LocalBusiness' }>['address']>\n}\n\ninterface CmsPageSchemaNode {\n readonly '@type': 'Article' | 'WebPage'\n readonly name: string\n readonly description?: string\n readonly image?: string\n readonly url?: string\n readonly headline?: string\n readonly datePublished?: string\n readonly dateModified?: string\n readonly inLanguage?: string\n}\n\nexport type CmsSeoSchemaNode = CmsIdentitySchemaNode | CmsPageSchemaNode\n\ntype EffectiveSeo = Omit<ResolvedSeo, 'canonicalUrl'> & {\n readonly canonicalUrl?: ResolvedSeo['canonicalUrl']\n}\n\nexport interface CmsDocumentSeoAdapters {\n readonly head: (\n input: () => {\n htmlAttrs?: { lang: string }\n link: Array<{ href: string; rel: 'canonical' } | { href: string; hreflang: string; rel: 'alternate' }>\n titleTemplate: null\n },\n ) => void\n readonly robots: (input: ComputedRef<{ readonly follow: boolean; readonly index: boolean }>) => void\n readonly schema: (input: ComputedRef<ReadonlyArray<CmsSeoSchemaNode>>) => void\n readonly seoMeta: (input: CmsSeoMetadata) => void\n readonly locale: (input: ComputedRef<string | undefined>) => void\n}\n\nlet installedAdapters: CmsDocumentSeoAdapters | undefined\n\n/** Installs Nuxt's composables once before document page setup. */\nexport function installCmsDocumentSeoAdapters(adapters: CmsDocumentSeoAdapters): void {\n installedAdapters = adapters\n}\n\nexport function useCmsDocumentSeo(document: MaybeRefOrGetter<DeliveryDocument | null>): void {\n const adapters = installedCmsDocumentSeoAdapters()\n const current = computed(() => toValue(document))\n const seo = computed(() => resolvedSeo(current.value))\n\n adapters.seoMeta({\n title: () => seo.value?.title,\n description: () => seo.value?.description,\n ogTitle: () => seo.value?.socialTitle,\n ogDescription: () => seo.value?.socialDescription || (current.value?.draft ? seo.value?.title : undefined),\n ogImage: () => seo.value?.socialImage?.url,\n ogImageAlt: () => seo.value?.socialImage?.alt,\n ogLocale: () => current.value?.locale,\n ogUrl: () => seo.value?.canonicalUrl,\n robots: () =>\n seo.value && !current.value?.draft\n ? `${seo.value.index ? 'index' : 'noindex'}, ${seo.value.follow ? 'follow' : 'nofollow'}`\n : 'noindex, nofollow',\n })\n\n adapters.locale(computed(() => current.value?.locale))\n adapters.head(() => ({\n ...(current.value?.locale ? { htmlAttrs: { lang: current.value.locale } } : undefined),\n link: links(current.value, seo.value?.canonicalUrl),\n titleTemplate: null,\n }))\n adapters.robots(\n computed(() => ({\n follow: current.value?.draft ? false : (seo.value?.follow ?? false),\n index: current.value?.draft ? false : (seo.value?.index ?? false),\n })),\n )\n adapters.schema(computed(() => (seo.value ? schemaNodes(seo.value, current.value?.locale) : [])))\n}\n\nfunction links(document: DeliveryDocument | null, canonicalUrl?: string) {\n const canonical = canonicalUrl ? [{ href: canonicalUrl, rel: 'canonical' as const }] : []\n\n if (!canonicalUrl || !document?.alternatives) return canonical\n\n return [\n ...canonical,\n ...document.alternatives.map((alternative) => ({\n href: new URL(alternative.path, canonicalUrl).href,\n hreflang: alternative.locale,\n rel: 'alternate' as const,\n })),\n ]\n}\n\nfunction installedCmsDocumentSeoAdapters(): CmsDocumentSeoAdapters {\n if (!installedAdapters) throw new Error('The CMS document SEO adapter has not been installed.')\n\n return installedAdapters\n}\n\nfunction resolvedSeo(document: DeliveryDocument | null): EffectiveSeo | undefined {\n if (!document) return undefined\n\n if (document.resolvedSeo) return document.resolvedSeo\n\n return {\n description: document.description,\n follow: true,\n index: true,\n socialDescription: document.description,\n socialTitle: document.title,\n structuredData: { type: 'WebPage' },\n title: document.title,\n }\n}\n\nfunction schemaNodes(seo: EffectiveSeo, locale?: string): ReadonlyArray<CmsSeoSchemaNode> {\n const identity = seo.identity ? [identityNode(seo.identity)] : []\n\n if (!seo.structuredData) return identity\n\n const common = {\n name: seo.title,\n ...(seo.description ? { description: seo.description } : undefined),\n ...(seo.socialImage ? { image: seo.socialImage.url } : undefined),\n ...(seo.canonicalUrl ? { url: seo.canonicalUrl } : undefined),\n ...(locale ? { inLanguage: locale } : undefined),\n }\n\n if (seo.structuredData.type === 'Article') {\n return [\n ...identity,\n {\n '@type': 'Article',\n ...common,\n headline: seo.structuredData.headline ?? seo.title,\n ...(seo.structuredData.datePublished ? { datePublished: seo.structuredData.datePublished } : undefined),\n ...(seo.structuredData.dateModified ? { dateModified: seo.structuredData.dateModified } : undefined),\n },\n ]\n }\n\n return [...identity, { '@type': 'WebPage', ...common }]\n}\n\nfunction identityNode(identity: SiteIdentity): CmsIdentitySchemaNode {\n const common = {\n '@type': identity.type,\n name: identity.name,\n ...(identity.url ? { url: identity.url } : undefined),\n }\n\n switch (identity.type) {\n case 'Person':\n return { ...common, ...(identity.image ? { image: identity.image.url } : undefined) }\n case 'Organization':\n return { ...common, ...(identity.logo ? { logo: identity.logo.url } : undefined) }\n case 'LocalBusiness':\n return {\n ...common,\n ...(identity.address ? { address: identity.address } : undefined),\n ...(identity.image ? { image: identity.image.url } : undefined),\n ...(identity.logo ? { logo: identity.logo.url } : undefined),\n ...(identity.telephone ? { telephone: identity.telephone } : undefined),\n }\n }\n}\n"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { CmsCollection, CmsCollectionName } from "../../ApplicationTypes.js";
2
- import { MaybeRefOrGetter } from "vue";
3
- //#region src/runtime/delivery/useDocument.d.ts
4
- export declare function useDocument<Name extends CmsCollectionName = CmsCollectionName>(path: MaybeRefOrGetter<string>): import("nuxt/app").AsyncData<CmsCollection<Name> | null, import("nuxt/app").NuxtError<unknown> | undefined>;
5
- //#endregion
6
- //# sourceMappingURL=useDocument.d.ts.map
@@ -1,23 +0,0 @@
1
- import { c as CMS_PREVIEW_READ_PATH, r as CMS_DELIVERY_READ_PATH } from "../../HttpPaths-c9nLZ9H2.js";
2
- import { usePreviewDelivery } from "./context.js";
3
- import { computed, toValue } from "vue";
4
- import { useFetch } from "nuxt/app";
5
-
6
- //#region src/runtime/delivery/useDocument.ts
7
- function useDocument(path) {
8
- const preview = usePreviewDelivery();
9
- const endpoint = computed(() => preview.value ? CMS_PREVIEW_READ_PATH : CMS_DELIVERY_READ_PATH);
10
- const body = computed(() => ({
11
- kind: "path",
12
- path: toValue(path)
13
- }));
14
- return useFetch(endpoint, {
15
- body,
16
- default: () => null,
17
- method: "POST"
18
- });
19
- }
20
-
21
- //#endregion
22
- export { useDocument };
23
- //# sourceMappingURL=useDocument.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDocument.js","names":[],"sources":["../../../../../src/runtime/delivery/useDocument.ts"],"sourcesContent":["import { useFetch } from 'nuxt/app'\nimport { usePreviewDelivery } from './context'\nimport type { MaybeRefOrGetter } from 'vue'\nimport { computed, toValue } from 'vue'\nimport { CMS_DELIVERY_READ_PATH, CMS_PREVIEW_READ_PATH } from '@internal/protocol/HttpPaths'\nimport type { CmsCollection, CmsCollectionName } from '../../ApplicationTypes'\n\nexport function useDocument<Name extends CmsCollectionName = CmsCollectionName>(path: MaybeRefOrGetter<string>) {\n const preview = usePreviewDelivery()\n const endpoint = computed(() => (preview.value ? CMS_PREVIEW_READ_PATH : CMS_DELIVERY_READ_PATH))\n const body = computed(() => ({ kind: 'path' as const, path: toValue(path) }))\n\n return useFetch<CmsCollection<Name> | null>(endpoint, {\n body,\n default: () => null,\n method: 'POST',\n })\n}\n"],"mappings":";;;;;;AAOA,SAAgB,YAAgE,MAAgC;CAC9G,MAAM,UAAU,mBAAmB;CACnC,MAAM,WAAW,eAAgB,QAAQ,QAAQ,wBAAwB,sBAAuB;CAChG,MAAM,OAAO,gBAAgB;EAAE,MAAM;EAAiB,MAAM,QAAQ,IAAI;CAAE,EAAE;CAE5E,OAAO,SAAqC,UAAU;EACpD;EACA,eAAe;EACf,QAAQ;CACV,CAAC;AACH"}
@@ -1,7 +0,0 @@
1
- import { CmsCollectionName, CmsDocumentPage, CmsDocumentQuery, CmsDocumentQuerySort } from "../../ApplicationTypes.js";
2
- import { MaybeRefOrGetter } from "vue";
3
- //#region src/runtime/delivery/useDocumentQuery.d.ts
4
- export declare function useDocumentQuery<Name extends CmsCollectionName = CmsCollectionName>(query: MaybeRefOrGetter<CmsDocumentQuery<Name>>): import("nuxt/app").AsyncData<CmsDocumentPage<Name>, import("nuxt/app").NuxtError<unknown> | undefined>;
5
- //#endregion
6
- export type { CmsDocumentQuery, CmsDocumentQuerySort };
7
- //# sourceMappingURL=useDocumentQuery.d.ts.map
@@ -1,29 +0,0 @@
1
- import { n as CMS_DELIVERY_QUERY_PATH, s as CMS_PREVIEW_QUERY_PATH } from "../../HttpPaths-c9nLZ9H2.js";
2
- import { usePreviewDelivery } from "./context.js";
3
- import { computed, toValue } from "vue";
4
- import { useFetch } from "nuxt/app";
5
-
6
- //#region src/runtime/delivery/useDocumentQuery.ts
7
- function useDocumentQuery(query) {
8
- const preview = usePreviewDelivery();
9
- const endpoint = computed(() => preview.value ? CMS_PREVIEW_QUERY_PATH : CMS_DELIVERY_QUERY_PATH);
10
- const body = computed(() => {
11
- const value = toValue(query);
12
- return {
13
- ...value,
14
- sort: value.sort === void 0 ? void 0 : Array.isArray(value.sort) ? value.sort : [value.sort]
15
- };
16
- });
17
- return useFetch(endpoint, {
18
- body,
19
- default: () => ({
20
- items: [],
21
- total: 0
22
- }),
23
- method: "POST"
24
- });
25
- }
26
-
27
- //#endregion
28
- export { useDocumentQuery };
29
- //# sourceMappingURL=useDocumentQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDocumentQuery.js","names":[],"sources":["../../../../../src/runtime/delivery/useDocumentQuery.ts"],"sourcesContent":["import { useFetch } from 'nuxt/app'\nimport { usePreviewDelivery } from './context'\nimport type { MaybeRefOrGetter } from 'vue'\nimport { computed, toValue } from 'vue'\nimport { CMS_DELIVERY_QUERY_PATH, CMS_PREVIEW_QUERY_PATH } from '@internal/protocol/HttpPaths'\nimport type { CmsCollectionName, CmsDocumentPage, CmsDocumentQuery } from '../../ApplicationTypes'\n\nexport type { CmsDocumentQuery, CmsDocumentQuerySort } from '../../ApplicationTypes'\n\nexport function useDocumentQuery<Name extends CmsCollectionName = CmsCollectionName>(\n query: MaybeRefOrGetter<CmsDocumentQuery<Name>>,\n) {\n const preview = usePreviewDelivery()\n const endpoint = computed(() => (preview.value ? CMS_PREVIEW_QUERY_PATH : CMS_DELIVERY_QUERY_PATH))\n\n const body = computed(() => {\n const value = toValue(query)\n\n return {\n ...value,\n sort: value.sort === undefined ? undefined : Array.isArray(value.sort) ? value.sort : [value.sort],\n }\n })\n\n return useFetch<CmsDocumentPage<Name>>(endpoint, {\n body,\n default: () => ({ items: [], total: 0 }),\n method: 'POST',\n })\n}\n"],"mappings":";;;;;;AASA,SAAgB,iBACd,OACA;CACA,MAAM,UAAU,mBAAmB;CACnC,MAAM,WAAW,eAAgB,QAAQ,QAAQ,yBAAyB,uBAAwB;CAElG,MAAM,OAAO,eAAe;EAC1B,MAAM,QAAQ,QAAQ,KAAK;EAE3B,OAAO;GACL,GAAG;GACH,MAAM,MAAM,SAAS,SAAY,SAAY,MAAM,QAAQ,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,MAAM,IAAI;EACnG;CACF,CAAC;CAED,OAAO,SAAgC,UAAU;EAC/C;EACA,gBAAgB;GAAE,OAAO,CAAC;GAAG,OAAO;EAAE;EACtC,QAAQ;CACV,CAAC;AACH"}
@@ -1,38 +0,0 @@
1
- import { r as DocumentId } from "../../scalars-CVZqT3L0.js";
2
- import { t as documentForms } from "../../Forms-CX-hwmJF.js";
3
- import { Predicate, Result, Schema } from "effect";
4
-
5
- //#region src/runtime/forms/document.ts
6
- /** Both ordinary rendering and Comark's live preview cache receive the same derived form props. */
7
- function prepareFormDocument(value, components, preview) {
8
- if (!components.some((component) => component.authoring.form)) return value;
9
- const definitions = documentForms({
10
- id: DocumentId.make(value.id),
11
- body: value.body
12
- }, components, preview || value.draft);
13
- const visit = (nodes, parent) => nodes.map((node, index) => {
14
- if (Predicate.isString(node) || node[0] === null) return node;
15
- const [tag, attributes, ...children] = node;
16
- const path = [...parent, index];
17
- const form = definitions.find((candidate) => JSON.stringify(candidate.nodePath) === JSON.stringify(path));
18
- return [
19
- tag,
20
- {
21
- ...attributes,
22
- ...form ? { cmsForm: Result.getOrThrow(Schema.decodeUnknownResult(Schema.JsonObject)(form)) } : void 0
23
- },
24
- ...visit(children, path)
25
- ];
26
- });
27
- return {
28
- ...value,
29
- body: {
30
- ...value.body,
31
- nodes: visit(value.body.nodes, [])
32
- }
33
- };
34
- }
35
-
36
- //#endregion
37
- export { prepareFormDocument };
38
- //# sourceMappingURL=document.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document.js","names":[],"sources":["../../../../../src/runtime/forms/document.ts"],"sourcesContent":["import type { ComponentDefinition } from '@internal/protocol/Configuration'\nimport type { DeliveryDocument, DeliveryMarkdownNode } from '../delivery/types'\nimport { DocumentId } from '@internal/protocol/Documents'\nimport { documentForms } from '@internal/document/Forms'\nimport { Result, Predicate, Schema } from 'effect'\n\n/** Both ordinary rendering and Comark's live preview cache receive the same derived form props. */\nexport function prepareFormDocument(\n value: DeliveryDocument,\n components: ReadonlyArray<ComponentDefinition>,\n preview: boolean,\n): DeliveryDocument {\n if (!components.some((component) => component.authoring.form)) return value\n\n const definitions = documentForms(\n { id: DocumentId.make(value.id), body: value.body },\n components,\n preview || value.draft,\n )\n\n const visit = (nodes: ReadonlyArray<DeliveryMarkdownNode>, parent: number[]): ReadonlyArray<DeliveryMarkdownNode> =>\n nodes.map((node, index) => {\n if (Predicate.isString(node) || node[0] === null) return node\n const [tag, attributes, ...children] = node\n const path = [...parent, index]\n const form = definitions.find((candidate) => JSON.stringify(candidate.nodePath) === JSON.stringify(path))\n\n return [\n tag,\n {\n ...attributes,\n ...(form ? { cmsForm: Result.getOrThrow(Schema.decodeUnknownResult(Schema.JsonObject)(form)) } : undefined),\n },\n ...visit(children, path),\n ]\n })\n\n return { ...value, body: { ...value.body, nodes: visit(value.body.nodes, []) } }\n}\n"],"mappings":";;;;;;AAOA,SAAgB,oBACd,OACA,YACA,SACkB;CAClB,IAAI,CAAC,WAAW,MAAM,cAAc,UAAU,UAAU,IAAI,GAAG,OAAO;CAEtE,MAAM,cAAc,cAClB;EAAE,IAAI,WAAW,KAAK,MAAM,EAAE;EAAG,MAAM,MAAM;CAAK,GAClD,YACA,WAAW,MAAM,KACnB;CAEA,MAAM,SAAS,OAA4C,WACzD,MAAM,KAAK,MAAM,UAAU;EACzB,IAAI,UAAU,SAAS,IAAI,KAAK,KAAK,OAAO,MAAM,OAAO;EACzD,MAAM,CAAC,KAAK,YAAY,GAAG,YAAY;EACvC,MAAM,OAAO,CAAC,GAAG,QAAQ,KAAK;EAC9B,MAAM,OAAO,YAAY,MAAM,cAAc,KAAK,UAAU,UAAU,QAAQ,MAAM,KAAK,UAAU,IAAI,CAAC;EAExG,OAAO;GACL;GACA;IACE,GAAG;IACH,GAAI,OAAO,EAAE,SAAS,OAAO,WAAW,OAAO,oBAAoB,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI;GACnG;GACA,GAAG,MAAM,UAAU,IAAI;EACzB;CACF,CAAC;CAEH,OAAO;EAAE,GAAG;EAAO,MAAM;GAAE,GAAG,MAAM;GAAM,OAAO,MAAM,MAAM,KAAK,OAAO,CAAC,CAAC;EAAE;CAAE;AACjF"}
@@ -1,257 +0,0 @@
1
- import { a as CMS_FORM_SUBMIT_PATH } from "../../HttpPaths-c9nLZ9H2.js";
2
- import { o as FormResult } from "../../Forms-CfNPTiCr.js";
3
- import { i as validateFormValues } from "../../Forms-CX-hwmJF.js";
4
- import { Result, Schema } from "effect";
5
- import { computed, getCurrentInstance, getCurrentScope, onScopeDispose, readonly, ref, shallowRef, toValue, useId, watch } from "vue";
6
-
7
- //#region src/runtime/forms/useCmsForm.ts
8
- /** Headless, per-instance form state. Definition changes preserve answers for unchanged field types. */
9
- function useCmsForm(input, options = {}) {
10
- const fieldIdPrefix = getCurrentInstance() ? useId() : "cms-form";
11
- const definition = computed(() => toValue(input));
12
- const steps = computed(() => definition.value.steps);
13
- const fields = computed(() => steps.value.flatMap((step) => step.fields));
14
- const values = ref({});
15
- const errors = shallowRef({});
16
- const stepIndex = shallowRef(0);
17
- const currentStep = computed(() => steps.value[stepIndex.value]);
18
- const isFirstStep = computed(() => stepIndex.value === 0);
19
- const isLastStep = computed(() => stepIndex.value === steps.value.length - 1);
20
- const submitting = shallowRef(false);
21
- const isSuccess = shallowRef(false);
22
- const isPreview = computed(() => definition.value.preview);
23
- const submitError = shallowRef();
24
- const touched = shallowRef(/* @__PURE__ */ new Set());
25
- const controls = /* @__PURE__ */ new Map();
26
- let controller;
27
- let generation = 0;
28
- let previousFields = /* @__PURE__ */ new Map();
29
- const stop = watch(definition, (next, before) => {
30
- generation++;
31
- controller?.abort();
32
- submitting.value = false;
33
- const sameForm = before?.documentId === next.documentId && JSON.stringify(before.nodePath) === JSON.stringify(next.nodePath) && before.name === next.name;
34
- values.value = Object.fromEntries(next.steps.flatMap((step) => step.fields).map((field) => [field.id, sameForm && previousFields.get(field.id) === field.type ? values.value[field.id] ?? null : field.type === "checkbox" ? false : field.type === "number" ? null : ""]));
35
- previousFields = new Map(next.steps.flatMap((step) => step.fields).map((field) => [field.id, field.type]));
36
- stepIndex.value = Math.max(0, next.steps.findIndex((step) => step.id === before?.steps[stepIndex.value]?.id));
37
- errors.value = {};
38
- touched.value = /* @__PURE__ */ new Set();
39
- submitError.value = void 0;
40
- isSuccess.value = false;
41
- }, {
42
- immediate: true,
43
- deep: true,
44
- flush: "sync"
45
- });
46
- function validate() {
47
- touched.value = new Set(fields.value.map((field) => field.id));
48
- errors.value = validateFormValues(fields.value, values.value);
49
- return Object.keys(errors.value).length === 0;
50
- }
51
- function control(input) {
52
- const fieldId = Schema.is(Schema.String)(input) ? input : input.id;
53
- const existing = controls.get(fieldId);
54
- if (existing) return existing;
55
- if (!fields.value.some((candidate) => candidate.id === fieldId)) throw new Error(`Unknown CMS form field ${fieldId}.`);
56
- const current = computed(() => {
57
- const candidate = fields.value.find((field) => field.id === fieldId);
58
- if (!candidate) throw new Error(`CMS form field ${fieldId} no longer exists.`);
59
- return candidate;
60
- });
61
- const controlId = `${fieldIdPrefix}-${encodeURIComponent(fieldId)}`;
62
- const helpId = `${controlId}-help`;
63
- const errorId = `${controlId}-error`;
64
- const helpAttrs = { id: helpId };
65
- const errorAttrs = {
66
- id: errorId,
67
- role: "alert"
68
- };
69
- const refreshError = () => {
70
- const issue = validateFormValues([current.value], values.value)[fieldId];
71
- const nextErrors = { ...errors.value };
72
- if (issue) nextErrors[fieldId] = issue;
73
- else delete nextErrors[fieldId];
74
- errors.value = nextErrors;
75
- };
76
- const value = computed({
77
- get: () => values.value[fieldId] ?? emptyFormValue(current.value),
78
- set: (next) => {
79
- values.value[fieldId] = normalizeFormValue(current.value, next);
80
- if (touched.value.has(fieldId) || errors.value[fieldId]) refreshError();
81
- }
82
- });
83
- const dirty = computed(() => values.value[fieldId] !== emptyFormValue(current.value));
84
- const touchedState = computed(() => touched.value.has(fieldId));
85
- const valid = computed(() => validateFormValues([current.value], values.value)[fieldId] === void 0);
86
- const error = computed(() => errors.value[fieldId]);
87
- const attrs = computed(() => {
88
- const fieldError = errors.value[fieldId];
89
- const describedBy = [current.value.help ? helpId : void 0, fieldError ? errorId : void 0].filter((part) => part !== void 0).join(" ");
90
- return {
91
- id: controlId,
92
- name: fieldId,
93
- required: current.value.required === true,
94
- "aria-invalid": fieldError ? "true" : void 0,
95
- "aria-describedby": describedBy || void 0
96
- };
97
- });
98
- const state = {
99
- get field() {
100
- return current.value;
101
- },
102
- get value() {
103
- return value.value;
104
- },
105
- set value(next) {
106
- value.value = next;
107
- },
108
- get dirty() {
109
- return dirty.value;
110
- },
111
- get touched() {
112
- return touchedState.value;
113
- },
114
- get valid() {
115
- return valid.value;
116
- },
117
- get error() {
118
- return error.value;
119
- },
120
- get attrs() {
121
- return attrs.value;
122
- },
123
- helpAttrs,
124
- errorAttrs,
125
- touch: () => {
126
- touched.value = /* @__PURE__ */ new Set([...touched.value, fieldId]);
127
- refreshError();
128
- }
129
- };
130
- controls.set(fieldId, state);
131
- return state;
132
- }
133
- function next() {
134
- if (submitting.value || isLastStep.value) return false;
135
- const stepFields = currentStep.value?.fields ?? [];
136
- touched.value = /* @__PURE__ */ new Set([...touched.value, ...stepFields.map((field) => field.id)]);
137
- const issues = validateFormValues(stepFields, values.value);
138
- errors.value = {
139
- ...Object.fromEntries(Object.entries(errors.value).filter(([id]) => !stepFields.some((field) => field.id === id))),
140
- ...issues
141
- };
142
- if (Object.keys(issues).length) return false;
143
- stepIndex.value++;
144
- return true;
145
- }
146
- function previous() {
147
- if (!submitting.value && !isFirstStep.value) stepIndex.value--;
148
- }
149
- function reset() {
150
- generation++;
151
- controller?.abort();
152
- submitting.value = false;
153
- values.value = Object.fromEntries(fields.value.map((field) => [field.id, emptyFormValue(field)]));
154
- errors.value = {};
155
- touched.value = /* @__PURE__ */ new Set();
156
- submitError.value = void 0;
157
- isSuccess.value = false;
158
- stepIndex.value = 0;
159
- }
160
- async function submit() {
161
- if (submitting.value || isSuccess.value) return false;
162
- submitError.value = void 0;
163
- if (!validate()) {
164
- stepIndex.value = Math.max(0, steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])));
165
- return false;
166
- }
167
- if (isPreview.value) {
168
- isSuccess.value = true;
169
- return true;
170
- }
171
- const currentGeneration = ++generation;
172
- controller = new AbortController();
173
- submitting.value = true;
174
- try {
175
- const { documentId, nodePath, revision } = definition.value;
176
- const result = await (options.submit ?? send)({
177
- documentId,
178
- nodePath,
179
- revision,
180
- values: { ...values.value }
181
- }, controller.signal);
182
- if (generation !== currentGeneration) return false;
183
- errors.value = result.status === "invalid" ? { ...result.errors } : {};
184
- isSuccess.value = result.status === "accepted";
185
- if (result.status === "invalid") stepIndex.value = Math.max(0, steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])));
186
- if (result.status !== "accepted" && result.status !== "invalid") submitError.value = result.status === "stale" ? "This form has changed. Reload the page before submitting." : "Submission failed. Please try again.";
187
- return isSuccess.value;
188
- } catch {
189
- if (generation === currentGeneration) submitError.value = "Submission failed. Please try again.";
190
- return false;
191
- } finally {
192
- if (generation === currentGeneration) submitting.value = false;
193
- }
194
- }
195
- if (getCurrentScope()) onScopeDispose(() => {
196
- generation++;
197
- controller?.abort();
198
- stop();
199
- });
200
- const visibleControls = computed(() => currentStep.value?.fields.map((entry) => control(entry)) ?? []);
201
- const invalidControls = computed(() => fields.value.map((entry) => control(entry)).filter((entry) => !entry.valid));
202
- const firstInvalidControlId = computed(() => invalidControls.value[0]?.attrs.id);
203
- const canSubmit = computed(() => !submitting.value && !isSuccess.value && invalidControls.value.length === 0);
204
- return {
205
- fields,
206
- steps,
207
- values,
208
- errors: readonly(errors),
209
- currentStep,
210
- stepIndex: readonly(stepIndex),
211
- isFirstStep,
212
- isLastStep,
213
- submitting: readonly(submitting),
214
- isSuccess: readonly(isSuccess),
215
- isPreview,
216
- submitError: readonly(submitError),
217
- canSubmit,
218
- visibleControls,
219
- invalidControls,
220
- firstInvalidControlId,
221
- control,
222
- next,
223
- previous,
224
- validate,
225
- submit,
226
- reset
227
- };
228
- }
229
- function normalizeFormValue(field, input) {
230
- if (field.type === "checkbox") return input === true;
231
- if (field.type === "number") {
232
- if (input === "" || input == null) return null;
233
- const value = Schema.is(Schema.Finite)(input) || Schema.is(Schema.String)(input) ? Number(input) : NaN;
234
- if (Number.isFinite(value)) return value;
235
- return Schema.is(Schema.String)(input) ? input : null;
236
- }
237
- return Schema.is(Schema.String)(input) ? input : "";
238
- }
239
- function emptyFormValue(field) {
240
- if (field.type === "checkbox") return false;
241
- if (field.type === "number") return null;
242
- return "";
243
- }
244
- async function send(submission, signal) {
245
- const response = await fetch(CMS_FORM_SUBMIT_PATH, {
246
- method: "POST",
247
- headers: { "content-type": "application/json" },
248
- body: JSON.stringify(submission),
249
- signal
250
- });
251
- if (!response.ok) throw new Error("Submission failed.");
252
- return Result.getOrThrow(Schema.decodeUnknownResult(FormResult)(await response.json()));
253
- }
254
-
255
- //#endregion
256
- export { useCmsForm };
257
- //# sourceMappingURL=useCmsForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCmsForm.js","names":[],"sources":["../../../../../src/runtime/forms/useCmsForm.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, ComputedRef } from 'vue'\nimport type { FormDefinition, FormField, FormStep, FormSubmission, FormValues } from '@internal/protocol/Forms'\nimport { FormResult } from '@internal/protocol/Forms'\nimport { validateFormValues } from '@internal/document/Forms'\nimport { Result, Schema } from 'effect'\nimport {\n computed,\n getCurrentInstance,\n getCurrentScope,\n onScopeDispose,\n readonly,\n ref,\n shallowRef,\n toValue,\n useId,\n watch,\n} from 'vue'\nimport { CMS_FORM_SUBMIT_PATH } from '@internal/protocol/HttpPaths'\n\nexport interface UseCmsFormOptions {\n /** Replace the HTTP transport, retaining validation and submission state. */\n readonly submit?: (submission: FormSubmission, signal: AbortSignal) => Promise<FormResult>\n}\n\nexport interface CmsFormControl {\n readonly field: FormField\n value: FormValues[string]\n readonly dirty: boolean\n readonly touched: boolean\n readonly valid: boolean\n readonly error: string | undefined\n readonly attrs: {\n readonly id: string\n readonly name: string\n readonly required: boolean\n readonly 'aria-invalid': 'true' | undefined\n readonly 'aria-describedby': string | undefined\n }\n readonly helpAttrs: { readonly id: string }\n readonly errorAttrs: { readonly id: string; readonly role: 'alert' }\n readonly touch: () => void\n}\n\nexport interface UseCmsFormReturn {\n readonly fields: ComputedRef<ReadonlyArray<FormField>>\n readonly steps: ComputedRef<ReadonlyArray<FormStep>>\n readonly values: Ref<Record<string, FormValues[string]>>\n readonly errors: Readonly<Ref<Readonly<Record<string, string>>>>\n readonly currentStep: ComputedRef<FormStep | undefined>\n readonly stepIndex: Readonly<Ref<number>>\n readonly isFirstStep: ComputedRef<boolean>\n readonly isLastStep: ComputedRef<boolean>\n readonly submitting: Readonly<Ref<boolean>>\n readonly isSuccess: Readonly<Ref<boolean>>\n readonly isPreview: ComputedRef<boolean>\n readonly submitError: Readonly<Ref<string | undefined>>\n readonly canSubmit: ComputedRef<boolean>\n readonly visibleControls: ComputedRef<ReadonlyArray<CmsFormControl>>\n readonly invalidControls: ComputedRef<ReadonlyArray<CmsFormControl>>\n readonly firstInvalidControlId: ComputedRef<string | undefined>\n readonly control: (field: string | FormField) => CmsFormControl\n readonly next: () => boolean\n readonly previous: () => void\n readonly validate: () => boolean\n readonly submit: () => Promise<boolean>\n readonly reset: () => void\n}\n\n/** Headless, per-instance form state. Definition changes preserve answers for unchanged field types. */\nexport function useCmsForm(input: MaybeRefOrGetter<FormDefinition>, options: UseCmsFormOptions = {}): UseCmsFormReturn {\n const fieldIdPrefix = getCurrentInstance() ? useId() : 'cms-form'\n const definition = computed(() => toValue(input))\n const steps = computed(() => definition.value.steps)\n const fields = computed(() => steps.value.flatMap((step) => step.fields))\n const values = ref<Record<string, FormValues[string]>>({})\n const errors = shallowRef<Record<string, string>>({})\n const stepIndex = shallowRef(0)\n const currentStep = computed(() => steps.value[stepIndex.value])\n const isFirstStep = computed(() => stepIndex.value === 0)\n const isLastStep = computed(() => stepIndex.value === steps.value.length - 1)\n const submitting = shallowRef(false)\n const isSuccess = shallowRef(false)\n const isPreview = computed(() => definition.value.preview)\n const submitError = shallowRef<string>()\n const touched = shallowRef(new Set<string>())\n const controls = new Map<string, CmsFormControl>()\n let controller: AbortController | undefined\n let generation = 0\n let previousFields = new Map<string, string>()\n\n const stop = watch(\n definition,\n (next, before) => {\n generation++\n controller?.abort()\n submitting.value = false\n\n const sameForm =\n before?.documentId === next.documentId &&\n JSON.stringify(before.nodePath) === JSON.stringify(next.nodePath) &&\n before.name === next.name\n\n values.value = Object.fromEntries(\n next.steps\n .flatMap((step) => step.fields)\n .map((field) => [\n field.id,\n sameForm && previousFields.get(field.id) === field.type\n ? (values.value[field.id] ?? null)\n : field.type === 'checkbox'\n ? false\n : field.type === 'number'\n ? null\n : '',\n ]),\n )\n previousFields = new Map(next.steps.flatMap((step) => step.fields).map((field) => [field.id, field.type]))\n stepIndex.value = Math.max(\n 0,\n next.steps.findIndex((step) => step.id === before?.steps[stepIndex.value]?.id),\n )\n errors.value = {}\n touched.value = new Set()\n submitError.value = undefined\n isSuccess.value = false\n },\n { immediate: true, deep: true, flush: 'sync' },\n )\n\n function validate(): boolean {\n touched.value = new Set(fields.value.map((field) => field.id))\n errors.value = validateFormValues(fields.value, values.value)\n\n return Object.keys(errors.value).length === 0\n }\n\n function control(input: string | FormField): CmsFormControl {\n const fieldId = Schema.is(Schema.String)(input) ? input : input.id\n const existing = controls.get(fieldId)\n\n if (existing) return existing\n\n if (!fields.value.some((candidate) => candidate.id === fieldId))\n throw new Error(`Unknown CMS form field ${fieldId}.`)\n\n const current = computed(() => {\n const candidate = fields.value.find((field) => field.id === fieldId)\n\n if (!candidate) throw new Error(`CMS form field ${fieldId} no longer exists.`)\n\n return candidate\n })\n\n const controlId = `${fieldIdPrefix}-${encodeURIComponent(fieldId)}`\n const helpId = `${controlId}-help`\n const errorId = `${controlId}-error`\n const helpAttrs: CmsFormControl['helpAttrs'] = { id: helpId }\n const errorAttrs: CmsFormControl['errorAttrs'] = { id: errorId, role: 'alert' }\n\n const refreshError = () => {\n const issue = validateFormValues([current.value], values.value)[fieldId]\n const nextErrors = { ...errors.value }\n\n if (issue) nextErrors[fieldId] = issue\n else delete nextErrors[fieldId]\n errors.value = nextErrors\n }\n\n const value = computed({\n get: () => values.value[fieldId] ?? emptyFormValue(current.value),\n set: (next) => {\n values.value[fieldId] = normalizeFormValue(current.value, next)\n\n if (touched.value.has(fieldId) || errors.value[fieldId]) refreshError()\n },\n })\n\n const dirty = computed(() => values.value[fieldId] !== emptyFormValue(current.value))\n\n const touchedState = computed(() => touched.value.has(fieldId))\n\n const valid = computed(() => validateFormValues([current.value], values.value)[fieldId] === undefined)\n\n const error = computed(() => errors.value[fieldId])\n\n const attrs = computed<CmsFormControl['attrs']>(() => {\n const fieldError = errors.value[fieldId]\n\n const describedBy = [current.value.help ? helpId : undefined, fieldError ? errorId : undefined]\n .filter((part) => part !== undefined)\n .join(' ')\n\n return {\n id: controlId,\n name: fieldId,\n required: current.value.required === true,\n 'aria-invalid': fieldError ? 'true' : undefined,\n 'aria-describedby': describedBy || undefined,\n }\n })\n\n const state: CmsFormControl = {\n get field() {\n return current.value\n },\n get value() {\n return value.value\n },\n set value(next) {\n value.value = next\n },\n get dirty() {\n return dirty.value\n },\n get touched() {\n return touchedState.value\n },\n get valid() {\n return valid.value\n },\n get error() {\n return error.value\n },\n get attrs() {\n return attrs.value\n },\n helpAttrs,\n errorAttrs,\n touch: () => {\n touched.value = new Set([...touched.value, fieldId])\n refreshError()\n },\n }\n\n controls.set(fieldId, state)\n\n return state\n }\n\n function next(): boolean {\n if (submitting.value || isLastStep.value) return false\n const stepFields = currentStep.value?.fields ?? []\n touched.value = new Set([...touched.value, ...stepFields.map((field) => field.id)])\n const issues = validateFormValues(stepFields, values.value)\n errors.value = {\n ...Object.fromEntries(\n Object.entries(errors.value).filter(([id]) => !stepFields.some((field) => field.id === id)),\n ),\n ...issues,\n }\n\n if (Object.keys(issues).length) return false\n stepIndex.value++\n\n return true\n }\n\n function previous(): void {\n if (!submitting.value && !isFirstStep.value) stepIndex.value--\n }\n\n function reset(): void {\n generation++\n controller?.abort()\n submitting.value = false\n values.value = Object.fromEntries(fields.value.map((field) => [field.id, emptyFormValue(field)]))\n errors.value = {}\n touched.value = new Set()\n submitError.value = undefined\n isSuccess.value = false\n stepIndex.value = 0\n }\n\n // oxlint-disable-next-line effecttsgo/async-function -- This Vue composable exposes a Promise to component submit handlers.\n async function submit(): Promise<boolean> {\n if (submitting.value || isSuccess.value) return false\n submitError.value = undefined\n\n if (!validate()) {\n stepIndex.value = Math.max(\n 0,\n steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])),\n )\n\n return false\n }\n\n if (isPreview.value) {\n isSuccess.value = true\n\n return true\n }\n\n const currentGeneration = ++generation\n controller = new AbortController()\n submitting.value = true\n\n try {\n const { documentId, nodePath, revision } = definition.value\n\n const result = await (options.submit ?? send)(\n { documentId, nodePath, revision, values: { ...values.value } },\n controller.signal,\n )\n\n if (generation !== currentGeneration) return false\n errors.value = result.status === 'invalid' ? { ...result.errors } : {}\n isSuccess.value = result.status === 'accepted'\n\n if (result.status === 'invalid')\n stepIndex.value = Math.max(\n 0,\n steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])),\n )\n\n if (result.status !== 'accepted' && result.status !== 'invalid')\n submitError.value =\n result.status === 'stale'\n ? 'This form has changed. Reload the page before submitting.'\n : 'Submission failed. Please try again.'\n\n return isSuccess.value\n } catch {\n if (generation === currentGeneration) submitError.value = 'Submission failed. Please try again.'\n\n return false\n } finally {\n if (generation === currentGeneration) submitting.value = false\n }\n }\n\n if (getCurrentScope())\n onScopeDispose(() => {\n generation++\n controller?.abort()\n stop()\n })\n\n const visibleControls = computed(() => currentStep.value?.fields.map((entry) => control(entry)) ?? [])\n const invalidControls = computed(() => fields.value.map((entry) => control(entry)).filter((entry) => !entry.valid))\n const firstInvalidControlId = computed(() => invalidControls.value[0]?.attrs.id)\n const canSubmit = computed(() => !submitting.value && !isSuccess.value && invalidControls.value.length === 0)\n\n return {\n fields,\n steps,\n values,\n errors: readonly(errors),\n currentStep,\n stepIndex: readonly(stepIndex),\n isFirstStep,\n isLastStep,\n submitting: readonly(submitting),\n isSuccess: readonly(isSuccess),\n isPreview,\n submitError: readonly(submitError),\n canSubmit,\n visibleControls,\n invalidControls,\n firstInvalidControlId,\n control,\n next,\n previous,\n validate,\n submit,\n reset,\n }\n}\n\nfunction normalizeFormValue(field: FormField, input: FormValues[string] | undefined): FormValues[string] {\n if (field.type === 'checkbox') return input === true\n\n if (field.type === 'number') {\n if (input === '' || input == null) return null\n const value = Schema.is(Schema.Finite)(input) || Schema.is(Schema.String)(input) ? Number(input) : Number.NaN\n\n if (Number.isFinite(value)) return value\n\n return Schema.is(Schema.String)(input) ? input : null\n }\n\n return Schema.is(Schema.String)(input) ? input : ''\n}\n\nfunction emptyFormValue(field: FormField): FormValues[string] {\n if (field.type === 'checkbox') return false\n\n if (field.type === 'number') return null\n\n return ''\n}\n\n// oxlint-disable-next-line effecttsgo/async-function -- This browser transport implements the composable's Promise-based submission seam.\nasync function send(submission: FormSubmission, signal: AbortSignal): Promise<FormResult> {\n // oxlint-disable-next-line effecttsgo/global-fetch -- Visitor form submission is a small browser transport that must preserve the caller's AbortSignal.\n const response = await fetch(CMS_FORM_SUBMIT_PATH, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(submission),\n signal,\n })\n\n if (!response.ok) throw new Error('Submission failed.')\n\n return Result.getOrThrow(Schema.decodeUnknownResult(FormResult)(await response.json()))\n}\n"],"mappings":";;;;;;;;AAqEA,SAAgB,WAAW,OAAyC,UAA6B,CAAC,GAAqB;CACrH,MAAM,gBAAgB,mBAAmB,IAAI,MAAM,IAAI;CACvD,MAAM,aAAa,eAAe,QAAQ,KAAK,CAAC;CAChD,MAAM,QAAQ,eAAe,WAAW,MAAM,KAAK;CACnD,MAAM,SAAS,eAAe,MAAM,MAAM,SAAS,SAAS,KAAK,MAAM,CAAC;CACxE,MAAM,SAAS,IAAwC,CAAC,CAAC;CACzD,MAAM,SAAS,WAAmC,CAAC,CAAC;CACpD,MAAM,YAAY,WAAW,CAAC;CAC9B,MAAM,cAAc,eAAe,MAAM,MAAM,UAAU,MAAM;CAC/D,MAAM,cAAc,eAAe,UAAU,UAAU,CAAC;CACxD,MAAM,aAAa,eAAe,UAAU,UAAU,MAAM,MAAM,SAAS,CAAC;CAC5E,MAAM,aAAa,WAAW,KAAK;CACnC,MAAM,YAAY,WAAW,KAAK;CAClC,MAAM,YAAY,eAAe,WAAW,MAAM,OAAO;CACzD,MAAM,cAAc,WAAmB;CACvC,MAAM,UAAU,2BAAW,IAAI,IAAY,CAAC;CAC5C,MAAM,2BAAW,IAAI,IAA4B;CACjD,IAAI;CACJ,IAAI,aAAa;CACjB,IAAI,iCAAiB,IAAI,IAAoB;CAE7C,MAAM,OAAO,MACX,aACC,MAAM,WAAW;EAChB;EACA,YAAY,MAAM;EAClB,WAAW,QAAQ;EAEnB,MAAM,WACJ,QAAQ,eAAe,KAAK,cAC5B,KAAK,UAAU,OAAO,QAAQ,MAAM,KAAK,UAAU,KAAK,QAAQ,KAChE,OAAO,SAAS,KAAK;EAEvB,OAAO,QAAQ,OAAO,YACpB,KAAK,MACF,SAAS,SAAS,KAAK,MAAM,CAAC,CAC9B,KAAK,UAAU,CACd,MAAM,IACN,YAAY,eAAe,IAAI,MAAM,EAAE,MAAM,MAAM,OAC9C,OAAO,MAAM,MAAM,OAAO,OAC3B,MAAM,SAAS,aACb,QACA,MAAM,SAAS,WACb,OACA,EACV,CAAC,CACL;EACA,iBAAiB,IAAI,IAAI,KAAK,MAAM,SAAS,SAAS,KAAK,MAAM,CAAC,CAAC,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC;EACzG,UAAU,QAAQ,KAAK,IACrB,GACA,KAAK,MAAM,WAAW,SAAS,KAAK,OAAO,QAAQ,MAAM,UAAU,MAAM,EAAE,EAAE,CAC/E;EACA,OAAO,QAAQ,CAAC;EAChB,QAAQ,wBAAQ,IAAI,IAAI;EACxB,YAAY,QAAQ;EACpB,UAAU,QAAQ;CACpB,GACA;EAAE,WAAW;EAAM,MAAM;EAAM,OAAO;CAAO,CAC/C;CAEA,SAAS,WAAoB;EAC3B,QAAQ,QAAQ,IAAI,IAAI,OAAO,MAAM,KAAK,UAAU,MAAM,EAAE,CAAC;EAC7D,OAAO,QAAQ,mBAAmB,OAAO,OAAO,OAAO,KAAK;EAE5D,OAAO,OAAO,KAAK,OAAO,KAAK,CAAC,CAAC,WAAW;CAC9C;CAEA,SAAS,QAAQ,OAA2C;EAC1D,MAAM,UAAU,OAAO,GAAG,OAAO,MAAM,CAAC,CAAC,KAAK,IAAI,QAAQ,MAAM;EAChE,MAAM,WAAW,SAAS,IAAI,OAAO;EAErC,IAAI,UAAU,OAAO;EAErB,IAAI,CAAC,OAAO,MAAM,MAAM,cAAc,UAAU,OAAO,OAAO,GAC5D,MAAM,IAAI,MAAM,0BAA0B,QAAQ,EAAE;EAEtD,MAAM,UAAU,eAAe;GAC7B,MAAM,YAAY,OAAO,MAAM,MAAM,UAAU,MAAM,OAAO,OAAO;GAEnE,IAAI,CAAC,WAAW,MAAM,IAAI,MAAM,kBAAkB,QAAQ,mBAAmB;GAE7E,OAAO;EACT,CAAC;EAED,MAAM,YAAY,GAAG,cAAc,GAAG,mBAAmB,OAAO;EAChE,MAAM,SAAS,GAAG,UAAU;EAC5B,MAAM,UAAU,GAAG,UAAU;EAC7B,MAAM,YAAyC,EAAE,IAAI,OAAO;EAC5D,MAAM,aAA2C;GAAE,IAAI;GAAS,MAAM;EAAQ;EAE9E,MAAM,qBAAqB;GACzB,MAAM,QAAQ,mBAAmB,CAAC,QAAQ,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC;GAChE,MAAM,aAAa,EAAE,GAAG,OAAO,MAAM;GAErC,IAAI,OAAO,WAAW,WAAW;QAC5B,OAAO,WAAW;GACvB,OAAO,QAAQ;EACjB;EAEA,MAAM,QAAQ,SAAS;GACrB,WAAW,OAAO,MAAM,YAAY,eAAe,QAAQ,KAAK;GAChE,MAAM,SAAS;IACb,OAAO,MAAM,WAAW,mBAAmB,QAAQ,OAAO,IAAI;IAE9D,IAAI,QAAQ,MAAM,IAAI,OAAO,KAAK,OAAO,MAAM,UAAU,aAAa;GACxE;EACF,CAAC;EAED,MAAM,QAAQ,eAAe,OAAO,MAAM,aAAa,eAAe,QAAQ,KAAK,CAAC;EAEpF,MAAM,eAAe,eAAe,QAAQ,MAAM,IAAI,OAAO,CAAC;EAE9D,MAAM,QAAQ,eAAe,mBAAmB,CAAC,QAAQ,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,aAAa,MAAS;EAErG,MAAM,QAAQ,eAAe,OAAO,MAAM,QAAQ;EAElD,MAAM,QAAQ,eAAwC;GACpD,MAAM,aAAa,OAAO,MAAM;GAEhC,MAAM,cAAc,CAAC,QAAQ,MAAM,OAAO,SAAS,QAAW,aAAa,UAAU,MAAS,CAAC,CAC5F,QAAQ,SAAS,SAAS,MAAS,CAAC,CACpC,KAAK,GAAG;GAEX,OAAO;IACL,IAAI;IACJ,MAAM;IACN,UAAU,QAAQ,MAAM,aAAa;IACrC,gBAAgB,aAAa,SAAS;IACtC,oBAAoB,eAAe;GACrC;EACF,CAAC;EAED,MAAM,QAAwB;GAC5B,IAAI,QAAQ;IACV,OAAO,QAAQ;GACjB;GACA,IAAI,QAAQ;IACV,OAAO,MAAM;GACf;GACA,IAAI,MAAM,MAAM;IACd,MAAM,QAAQ;GAChB;GACA,IAAI,QAAQ;IACV,OAAO,MAAM;GACf;GACA,IAAI,UAAU;IACZ,OAAO,aAAa;GACtB;GACA,IAAI,QAAQ;IACV,OAAO,MAAM;GACf;GACA,IAAI,QAAQ;IACV,OAAO,MAAM;GACf;GACA,IAAI,QAAQ;IACV,OAAO,MAAM;GACf;GACA;GACA;GACA,aAAa;IACX,QAAQ,wBAAQ,IAAI,IAAI,CAAC,GAAG,QAAQ,OAAO,OAAO,CAAC;IACnD,aAAa;GACf;EACF;EAEA,SAAS,IAAI,SAAS,KAAK;EAE3B,OAAO;CACT;CAEA,SAAS,OAAgB;EACvB,IAAI,WAAW,SAAS,WAAW,OAAO,OAAO;EACjD,MAAM,aAAa,YAAY,OAAO,UAAU,CAAC;EACjD,QAAQ,wBAAQ,IAAI,IAAI,CAAC,GAAG,QAAQ,OAAO,GAAG,WAAW,KAAK,UAAU,MAAM,EAAE,CAAC,CAAC;EAClF,MAAM,SAAS,mBAAmB,YAAY,OAAO,KAAK;EAC1D,OAAO,QAAQ;GACb,GAAG,OAAO,YACR,OAAO,QAAQ,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,MAAM,UAAU,MAAM,OAAO,EAAE,CAAC,CAC5F;GACA,GAAG;EACL;EAEA,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,QAAQ,OAAO;EACvC,UAAU;EAEV,OAAO;CACT;CAEA,SAAS,WAAiB;EACxB,IAAI,CAAC,WAAW,SAAS,CAAC,YAAY,OAAO,UAAU;CACzD;CAEA,SAAS,QAAc;EACrB;EACA,YAAY,MAAM;EAClB,WAAW,QAAQ;EACnB,OAAO,QAAQ,OAAO,YAAY,OAAO,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,eAAe,KAAK,CAAC,CAAC,CAAC;EAChG,OAAO,QAAQ,CAAC;EAChB,QAAQ,wBAAQ,IAAI,IAAI;EACxB,YAAY,QAAQ;EACpB,UAAU,QAAQ;EAClB,UAAU,QAAQ;CACpB;CAGA,eAAe,SAA2B;EACxC,IAAI,WAAW,SAAS,UAAU,OAAO,OAAO;EAChD,YAAY,QAAQ;EAEpB,IAAI,CAAC,SAAS,GAAG;GACf,UAAU,QAAQ,KAAK,IACrB,GACA,MAAM,MAAM,WAAW,SAAS,KAAK,OAAO,MAAM,UAAU,OAAO,MAAM,MAAM,GAAG,CAAC,CACrF;GAEA,OAAO;EACT;EAEA,IAAI,UAAU,OAAO;GACnB,UAAU,QAAQ;GAElB,OAAO;EACT;EAEA,MAAM,oBAAoB,EAAE;EAC5B,aAAa,IAAI,gBAAgB;EACjC,WAAW,QAAQ;EAEnB,IAAI;GACF,MAAM,EAAE,YAAY,UAAU,aAAa,WAAW;GAEtD,MAAM,SAAS,OAAO,QAAQ,UAAU,KAAI,CAC1C;IAAE;IAAY;IAAU;IAAU,QAAQ,EAAE,GAAG,OAAO,MAAM;GAAE,GAC9D,WAAW,MACb;GAEA,IAAI,eAAe,mBAAmB,OAAO;GAC7C,OAAO,QAAQ,OAAO,WAAW,YAAY,EAAE,GAAG,OAAO,OAAO,IAAI,CAAC;GACrE,UAAU,QAAQ,OAAO,WAAW;GAEpC,IAAI,OAAO,WAAW,WACpB,UAAU,QAAQ,KAAK,IACrB,GACA,MAAM,MAAM,WAAW,SAAS,KAAK,OAAO,MAAM,UAAU,OAAO,MAAM,MAAM,GAAG,CAAC,CACrF;GAEF,IAAI,OAAO,WAAW,cAAc,OAAO,WAAW,WACpD,YAAY,QACV,OAAO,WAAW,UACd,8DACA;GAER,OAAO,UAAU;EACnB,QAAQ;GACN,IAAI,eAAe,mBAAmB,YAAY,QAAQ;GAE1D,OAAO;EACT,UAAU;GACR,IAAI,eAAe,mBAAmB,WAAW,QAAQ;EAC3D;CACF;CAEA,IAAI,gBAAgB,GAClB,qBAAqB;EACnB;EACA,YAAY,MAAM;EAClB,KAAK;CACP,CAAC;CAEH,MAAM,kBAAkB,eAAe,YAAY,OAAO,OAAO,KAAK,UAAU,QAAQ,KAAK,CAAC,KAAK,CAAC,CAAC;CACrG,MAAM,kBAAkB,eAAe,OAAO,MAAM,KAAK,UAAU,QAAQ,KAAK,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,MAAM,KAAK,CAAC;CAClH,MAAM,wBAAwB,eAAe,gBAAgB,MAAM,EAAE,EAAE,MAAM,EAAE;CAC/E,MAAM,YAAY,eAAe,CAAC,WAAW,SAAS,CAAC,UAAU,SAAS,gBAAgB,MAAM,WAAW,CAAC;CAE5G,OAAO;EACL;EACA;EACA;EACA,QAAQ,SAAS,MAAM;EACvB;EACA,WAAW,SAAS,SAAS;EAC7B;EACA;EACA,YAAY,SAAS,UAAU;EAC/B,WAAW,SAAS,SAAS;EAC7B;EACA,aAAa,SAAS,WAAW;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAS,mBAAmB,OAAkB,OAA2D;CACvG,IAAI,MAAM,SAAS,YAAY,OAAO,UAAU;CAEhD,IAAI,MAAM,SAAS,UAAU;EAC3B,IAAI,UAAU,MAAM,SAAS,MAAM,OAAO;EAC1C,MAAM,QAAQ,OAAO,GAAG,OAAO,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,GAAG,OAAO,MAAM,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI;EAEnG,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO;EAEnC,OAAO,OAAO,GAAG,OAAO,MAAM,CAAC,CAAC,KAAK,IAAI,QAAQ;CACnD;CAEA,OAAO,OAAO,GAAG,OAAO,MAAM,CAAC,CAAC,KAAK,IAAI,QAAQ;AACnD;AAEA,SAAS,eAAe,OAAsC;CAC5D,IAAI,MAAM,SAAS,YAAY,OAAO;CAEtC,IAAI,MAAM,SAAS,UAAU,OAAO;CAEpC,OAAO;AACT;AAGA,eAAe,KAAK,YAA4B,QAA0C;CAExF,MAAM,WAAW,MAAM,MAAM,sBAAsB;EACjD,QAAQ;EACR,SAAS,EAAE,gBAAgB,mBAAmB;EAC9C,MAAM,KAAK,UAAU,UAAU;EAC/B;CACF,CAAC;CAED,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,MAAM,oBAAoB;CAEtD,OAAO,OAAO,WAAW,OAAO,oBAAoB,UAAU,CAAC,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC;AACxF"}
@@ -1,51 +0,0 @@
1
- //#region src/runtime/i18n/translator.ts
2
- function localeFromPath(configuration, path) {
3
- return prefixedLocale(configuration, path) ?? configuration.defaultLocale;
4
- }
5
- /** Prefixes a site path according to the configured locale URL policy. */
6
- function localePath(configuration, path, locale) {
7
- const { pathname, suffix } = splitSitePath(path);
8
- if (!pathname.startsWith("/") || pathname.startsWith("//")) throw new Error("A locale path must start with one slash.");
9
- if (!configuration.defaultLocale) return path;
10
- if (!Object.hasOwn(configuration.locales, locale)) throw new Error(`Unknown locale "${locale}".`);
11
- return `${`${locale === configuration.defaultLocale && !configuration.prefixDefaultLocale ? "" : `/${locale}`}${pathname === "/" ? "" : pathname}` || "/"}${suffix}`;
12
- }
13
- /** Switches the locale prefix of a site path while preserving its query and fragment. */
14
- function switchLocalePath(configuration, path, locale) {
15
- const { pathname, suffix } = splitSitePath(path);
16
- const current = prefixedLocale(configuration, pathname);
17
- let unprefixed = pathname;
18
- if (current !== void 0) {
19
- const prefix = `/${current}`;
20
- unprefixed = pathname === prefix ? "/" : pathname.slice(prefix.length);
21
- }
22
- return `${localePath(configuration, unprefixed, locale)}${suffix}`;
23
- }
24
- function prefixedLocale(configuration, path) {
25
- const segment = path.split("/")[1] ?? "";
26
- return Object.hasOwn(configuration.locales, segment) && (segment !== configuration.defaultLocale || configuration.prefixDefaultLocale) ? segment : void 0;
27
- }
28
- function splitSitePath(path) {
29
- const suffixIndex = path.search(/[?#]/u);
30
- return {
31
- pathname: suffixIndex === -1 ? path : path.slice(0, suffixIndex),
32
- suffix: suffixIndex === -1 ? "" : path.slice(suffixIndex)
33
- };
34
- }
35
- function translate(configuration, locale, key, parameters = {}, missing) {
36
- function lookup(code) {
37
- const messages = Object.hasOwn(configuration.locales, code) ? configuration.locales[code]?.messages : void 0;
38
- return messages && Object.hasOwn(messages, key) ? messages[key] : void 0;
39
- }
40
- let message = lookup(locale);
41
- if (message === void 0) {
42
- missing?.(key, locale);
43
- message = configuration.fallbackLocale === null ? void 0 : lookup(configuration.fallbackLocale);
44
- }
45
- if (message === void 0) return key;
46
- return message.replace(/\{([\w]+)\}/gu, (placeholder, name) => Object.hasOwn(parameters, name) ? String(parameters[name]) : placeholder);
47
- }
48
-
49
- //#endregion
50
- export { localeFromPath, localePath, switchLocalePath, translate };
51
- //# sourceMappingURL=translator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"translator.js","names":[],"sources":["../../../../../src/runtime/i18n/translator.ts"],"sourcesContent":["import type { CompiledCmsI18n } from '../../internal/i18n'\n\nexport function localeFromPath(configuration: CompiledCmsI18n, path: string): string {\n return prefixedLocale(configuration, path) ?? configuration.defaultLocale\n}\n\n/** Prefixes a site path according to the configured locale URL policy. */\nexport function localePath(configuration: CompiledCmsI18n, path: string, locale: string): string {\n const { pathname, suffix } = splitSitePath(path)\n\n if (!pathname.startsWith('/') || pathname.startsWith('//'))\n throw new Error('A locale path must start with one slash.')\n\n if (!configuration.defaultLocale) return path\n\n if (!Object.hasOwn(configuration.locales, locale)) throw new Error(`Unknown locale \"${locale}\".`)\n\n const prefix = locale === configuration.defaultLocale && !configuration.prefixDefaultLocale ? '' : `/${locale}`\n const localized = `${prefix}${pathname === '/' ? '' : pathname}` || '/'\n\n return `${localized}${suffix}`\n}\n\n/** Switches the locale prefix of a site path while preserving its query and fragment. */\nexport function switchLocalePath(configuration: CompiledCmsI18n, path: string, locale: string): string {\n const { pathname, suffix } = splitSitePath(path)\n const current = prefixedLocale(configuration, pathname)\n let unprefixed = pathname\n\n if (current !== undefined) {\n const prefix = `/${current}`\n\n unprefixed = pathname === prefix ? '/' : pathname.slice(prefix.length)\n }\n\n return `${localePath(configuration, unprefixed, locale)}${suffix}`\n}\n\nfunction prefixedLocale(configuration: CompiledCmsI18n, path: string): string | undefined {\n const segment = path.split('/')[1] ?? ''\n\n return Object.hasOwn(configuration.locales, segment) &&\n (segment !== configuration.defaultLocale || configuration.prefixDefaultLocale)\n ? segment\n : undefined\n}\n\nfunction splitSitePath(path: string) {\n const suffixIndex = path.search(/[?#]/u)\n\n return {\n pathname: suffixIndex === -1 ? path : path.slice(0, suffixIndex),\n suffix: suffixIndex === -1 ? '' : path.slice(suffixIndex),\n }\n}\n\nexport function translate(\n configuration: CompiledCmsI18n,\n locale: string,\n key: string,\n parameters: Readonly<Record<string, string | number>> = {},\n missing?: (key: string, locale: string) => void,\n): string {\n function lookup(code: string): string | undefined {\n const messages = Object.hasOwn(configuration.locales, code) ? configuration.locales[code]?.messages : undefined\n\n return messages && Object.hasOwn(messages, key) ? messages[key] : undefined\n }\n\n let message = lookup(locale)\n\n if (message === undefined) {\n missing?.(key, locale)\n message = configuration.fallbackLocale === null ? undefined : lookup(configuration.fallbackLocale)\n }\n\n if (message === undefined) return key\n\n return message.replace(/\\{([\\w]+)\\}/gu, (placeholder: string, name: string) =>\n Object.hasOwn(parameters, name) ? String(parameters[name]) : placeholder,\n )\n}\n"],"mappings":";AAEA,SAAgB,eAAe,eAAgC,MAAsB;CACnF,OAAO,eAAe,eAAe,IAAI,KAAK,cAAc;AAC9D;;AAGA,SAAgB,WAAW,eAAgC,MAAc,QAAwB;CAC/F,MAAM,EAAE,UAAU,WAAW,cAAc,IAAI;CAE/C,IAAI,CAAC,SAAS,WAAW,GAAG,KAAK,SAAS,WAAW,IAAI,GACvD,MAAM,IAAI,MAAM,0CAA0C;CAE5D,IAAI,CAAC,cAAc,eAAe,OAAO;CAEzC,IAAI,CAAC,OAAO,OAAO,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,mBAAmB,OAAO,GAAG;CAKhG,OAAO,GAFW,GADH,WAAW,cAAc,iBAAiB,CAAC,cAAc,sBAAsB,KAAK,IAAI,WACzE,aAAa,MAAM,KAAK,cAAc,MAE9C;AACxB;;AAGA,SAAgB,iBAAiB,eAAgC,MAAc,QAAwB;CACrG,MAAM,EAAE,UAAU,WAAW,cAAc,IAAI;CAC/C,MAAM,UAAU,eAAe,eAAe,QAAQ;CACtD,IAAI,aAAa;CAEjB,IAAI,YAAY,QAAW;EACzB,MAAM,SAAS,IAAI;EAEnB,aAAa,aAAa,SAAS,MAAM,SAAS,MAAM,OAAO,MAAM;CACvE;CAEA,OAAO,GAAG,WAAW,eAAe,YAAY,MAAM,IAAI;AAC5D;AAEA,SAAS,eAAe,eAAgC,MAAkC;CACxF,MAAM,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM;CAEtC,OAAO,OAAO,OAAO,cAAc,SAAS,OAAO,MAChD,YAAY,cAAc,iBAAiB,cAAc,uBACxD,UACA;AACN;AAEA,SAAS,cAAc,MAAc;CACnC,MAAM,cAAc,KAAK,OAAO,OAAO;CAEvC,OAAO;EACL,UAAU,gBAAgB,KAAK,OAAO,KAAK,MAAM,GAAG,WAAW;EAC/D,QAAQ,gBAAgB,KAAK,KAAK,KAAK,MAAM,WAAW;CAC1D;AACF;AAEA,SAAgB,UACd,eACA,QACA,KACA,aAAwD,CAAC,GACzD,SACQ;CACR,SAAS,OAAO,MAAkC;EAChD,MAAM,WAAW,OAAO,OAAO,cAAc,SAAS,IAAI,IAAI,cAAc,QAAQ,KAAK,EAAE,WAAW;EAEtG,OAAO,YAAY,OAAO,OAAO,UAAU,GAAG,IAAI,SAAS,OAAO;CACpE;CAEA,IAAI,UAAU,OAAO,MAAM;CAE3B,IAAI,YAAY,QAAW;EACzB,UAAU,KAAK,MAAM;EACrB,UAAU,cAAc,mBAAmB,OAAO,SAAY,OAAO,cAAc,cAAc;CACnG;CAEA,IAAI,YAAY,QAAW,OAAO;CAElC,OAAO,QAAQ,QAAQ,kBAAkB,aAAqB,SAC5D,OAAO,OAAO,YAAY,IAAI,IAAI,OAAO,WAAW,KAAK,IAAI,WAC/D;AACF"}
@@ -1,13 +0,0 @@
1
- import { a as CmsMessageParameters, i as CmsMessageKey, r as CmsLocale } from "../../I18n-zbqpWxki.js";
2
- import { ComputedRef } from "vue";
3
- //#region src/runtime/i18n/useCmsI18n.d.ts
4
- export interface UseCmsI18nReturn {
5
- readonly locale: ComputedRef<CmsLocale>;
6
- readonly localePath: (path: string, code?: CmsLocale) => string;
7
- readonly switchLocalePath: (code: CmsLocale, destination?: string) => string;
8
- readonly t: <Key extends CmsMessageKey>(key: Key, ...arguments_: keyof CmsMessageParameters<Key> extends never ? [parameters?: undefined] : [parameters: CmsMessageParameters<Key>]) => string;
9
- }
10
- /** URL-owned locale is reactive and isolated to the current Nuxt application/request. */
11
- export declare function useCmsI18n(): UseCmsI18nReturn;
12
- //#endregion
13
- //# sourceMappingURL=useCmsI18n.d.ts.map