@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.
- package/LICENSE +18 -10
- package/README.md +59 -404
- package/drizzle/20261003215543_initial/migration.sql +251 -0
- package/drizzle/20261003215543_initial/snapshot.json +1941 -0
- package/package.json +75 -71
- package/src/Authoring.d.ts +41 -49
- package/src/Authoring.js +1 -1
- package/src/Blocks-BrxSemnd.js +40 -0
- package/src/Client.d.ts +8186 -0
- package/src/Client.js +41 -0
- package/src/Collections.d.ts +142 -0
- package/src/Collections.js +142 -0
- package/src/Config-CMiwciub.js +130 -0
- package/src/Config.d.ts +172 -0
- package/src/Config.js +2 -0
- package/src/Configuration-Dk2k3OIc.js +73 -0
- package/src/DataTransfer-BmECvPHB.js +488 -0
- package/src/Database-DSsNCGft.d.ts +3 -0
- package/src/Delivery.d.ts +28 -0
- package/src/Delivery.js +7 -0
- package/src/Document-CKXMSEf1.js +293 -0
- package/src/Document-TgwYKJZM.d.ts +220 -0
- package/src/DocumentRenderer-Wz2xaNyf.js +394 -0
- package/src/EditorSchema-wrDv-id6.js +296 -0
- package/src/Fields-BegSgYhj.d.ts +166 -0
- package/src/Fields-ioGaMEh9.js +130 -0
- package/src/Forms-BuKAXQxr.d.ts +203 -0
- package/src/Forms.d.ts +48 -11
- package/src/Forms.js +342 -7
- package/src/I18n-Ckf9h0rC.js +154 -0
- package/src/I18n.d.ts +45 -2
- package/src/I18n.js +2 -1
- package/src/Image-CJWPLnhP.js +110 -0
- package/src/Links-CJYyy7rC.js +28 -0
- package/src/Links-Dx1yOni8.d.ts +28 -0
- package/src/Locales-Ch7a5xuA.js +67 -0
- package/src/Locales-jwbmJaOp.d.ts +43 -0
- package/src/Locales.d.ts +3 -0
- package/src/Locales.js +3 -0
- package/src/Media-BQ0uL4w7.d.ts +15 -0
- package/src/Media-DSyvd14o.js +87 -0
- package/src/Module.d.ts +2 -10
- package/src/Module.js +1040 -152
- package/src/Operations.d.ts +57 -0
- package/src/Operations.js +263 -0
- package/src/People-DvNZauWw.js +69 -0
- package/src/PreviewFocus-C_EelZO5.js +104 -0
- package/src/Query-C0kGJF5_.d.ts +261 -0
- package/src/RevisionPreview-IVwbJ9Wy.js +133 -0
- package/src/Routes-BaZvm2LE.js +126 -0
- package/src/Routes-DM1rRp3r.d.ts +15 -0
- package/src/S3MediaObjects-y-WacEi9.js +193 -0
- package/src/Seo-BcpqxoAs.d.ts +57 -0
- package/src/Seo-CjNUtUkj.js +254 -0
- package/src/StudioApi-CXLwwocX.js +833 -0
- package/src/StudioErrors-T5zLGQ1M.js +117 -0
- package/src/StudioErrors-kq-E44lQ.d.ts +104 -0
- package/src/StudioServer.d.ts +20 -0
- package/src/StudioServer.js +34 -0
- package/src/answers-DcTg0Xv2.js +41 -0
- package/src/cli.js +681 -187
- package/src/contracts-rprW3ZOB.js +130 -0
- package/src/forms-3xuf0Ym7.d.ts +206 -0
- package/src/localeConfiguration-BPbkLi7-.js +32 -0
- package/src/localeContext-DhF3SPvM.js +59 -0
- package/src/locales-6OD4XGIZ.js +12 -0
- package/src/nuxtDelivery-BYX_Cddb.js +466 -0
- package/src/plugin-DTYuDaQu.js +7171 -0
- package/src/previewContext-dt3ZUh-w.js +4 -0
- package/src/previewRegions-CXjk5cbP.js +145 -0
- package/src/previewSource-fb-q3ESM.js +144 -0
- package/src/rendering-D9LVeEKX.js +47 -0
- package/src/rolldown-runtime-8H4AJuhK.js +14 -0
- package/src/runtime/CmsImage.js +38 -0
- package/src/runtime/DocumentPage.vue +10 -0
- package/src/runtime/DocumentPageContent.js +48 -0
- package/src/runtime/DocumentRenderer.d.ts +129 -0
- package/src/runtime/DocumentRenderer.js +2 -0
- package/src/runtime/api.js +48 -6
- package/src/runtime/delivery/useCmsDocument.js +2 -0
- package/src/runtime/delivery/useCmsDocumentQuery.js +2 -0
- package/src/runtime/delivery/useCmsDocumentSeo.js +2 -114
- package/src/runtime/delivery/useCmsLocale.js +10 -0
- package/src/runtime/plugin.js +2 -40
- package/src/runtime/preview.css +85 -0
- package/src/runtime/preview.js +277 -0
- package/src/runtime/previewSource.js +82 -0
- package/src/runtime/revisionPrivacy.js +13 -0
- package/src/runtime/studio.js +10 -0
- package/src/runtime/studioIcons.js +36 -0
- package/src/validation-3pggwcnm.js +396 -0
- package/src/validation-DpUwPC8Y.js +224 -0
- package/studio/THIRD-PARTY-LICENSES.md +2406 -0
- package/studio/chunks/AccountPage-DL3DitDM.js +288 -0
- package/studio/chunks/AccountPage-DL3DitDM.js.br +0 -0
- package/studio/chunks/AccountPage-DL3DitDM.js.gz +0 -0
- package/studio/chunks/ActivityPage-CLqVUqTh.js +584 -0
- package/studio/chunks/ActivityPage-CLqVUqTh.js.br +0 -0
- package/studio/chunks/ActivityPage-CLqVUqTh.js.gz +0 -0
- package/studio/chunks/Alert-D0D24z_a.js +335 -0
- package/studio/chunks/Alert-D0D24z_a.js.br +0 -0
- package/studio/chunks/Alert-D0D24z_a.js.gz +0 -0
- package/studio/chunks/Badge-BBFs88TI.js +346 -0
- package/studio/chunks/Badge-BBFs88TI.js.br +0 -0
- package/studio/chunks/Badge-BBFs88TI.js.gz +0 -0
- package/studio/chunks/Button-BT3ztSPx.js +14319 -0
- package/studio/chunks/Button-BT3ztSPx.js.br +0 -0
- package/studio/chunks/Button-BT3ztSPx.js.gz +0 -0
- package/studio/chunks/Collapsible-CKnEYIlp.js +246 -0
- package/studio/chunks/Collapsible-CKnEYIlp.js.br +0 -0
- package/studio/chunks/Collapsible-CKnEYIlp.js.gz +0 -0
- package/studio/chunks/ContentInventory-D7nsFA6U.js +1745 -0
- package/studio/chunks/ContentInventory-D7nsFA6U.js.br +0 -0
- package/studio/chunks/ContentInventory-D7nsFA6U.js.gz +0 -0
- package/studio/chunks/ContentPage-DCxt6BeD.js +18 -0
- package/studio/chunks/ContentPage-DCxt6BeD.js.br +0 -0
- package/studio/chunks/ContentPage-DCxt6BeD.js.gz +0 -0
- package/studio/chunks/DashboardSearch-DjyMjJwF.js +2413 -0
- package/studio/chunks/DashboardSearch-DjyMjJwF.js.br +0 -0
- package/studio/chunks/DashboardSearch-DjyMjJwF.js.gz +0 -0
- package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js +26063 -0
- package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.br +0 -0
- package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.gz +0 -0
- package/studio/chunks/DropdownMenu-CA9fB0uZ.js +4400 -0
- package/studio/chunks/DropdownMenu-CA9fB0uZ.js.br +0 -0
- package/studio/chunks/DropdownMenu-CA9fB0uZ.js.gz +0 -0
- package/studio/chunks/EditorPage-D_PAYEE4.js +7799 -0
- package/studio/chunks/EditorPage-D_PAYEE4.js.br +0 -0
- package/studio/chunks/EditorPage-D_PAYEE4.js.gz +0 -0
- package/studio/chunks/FormField-CgM6l2Yn.js +198 -0
- package/studio/chunks/FormField-CgM6l2Yn.js.br +0 -0
- package/studio/chunks/FormField-CgM6l2Yn.js.gz +0 -0
- package/studio/chunks/HelpPage-C-vrFcT_.js +552 -0
- package/studio/chunks/HelpPage-C-vrFcT_.js.br +0 -0
- package/studio/chunks/HelpPage-C-vrFcT_.js.gz +0 -0
- package/studio/chunks/Kbd-Ot7TIhVZ.js +271 -0
- package/studio/chunks/Kbd-Ot7TIhVZ.js.br +0 -0
- package/studio/chunks/Kbd-Ot7TIhVZ.js.gz +0 -0
- package/studio/chunks/MediaFolderDialog-DYu-eu-q.js +101 -0
- package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.br +0 -0
- package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.gz +0 -0
- package/studio/chunks/MediaPage-D-jaWtdl.js +923 -0
- package/studio/chunks/MediaPage-D-jaWtdl.js.br +0 -0
- package/studio/chunks/MediaPage-D-jaWtdl.js.gz +0 -0
- package/studio/chunks/MediaPicker-BZs2wUFz.js +837 -0
- package/studio/chunks/MediaPicker-BZs2wUFz.js.br +0 -0
- package/studio/chunks/MediaPicker-BZs2wUFz.js.gz +0 -0
- package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js +1173 -0
- package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.br +0 -0
- package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.gz +0 -0
- package/studio/chunks/Modal-D6hSvxHd.js +265 -0
- package/studio/chunks/Modal-D6hSvxHd.js.br +0 -0
- package/studio/chunks/Modal-D6hSvxHd.js.gz +0 -0
- package/studio/chunks/NewDocumentDialog-C8B6_r3J.js +277 -0
- package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.br +0 -0
- package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.gz +0 -0
- package/studio/chunks/Pagination-D9BSo5H2.js +573 -0
- package/studio/chunks/Pagination-D9BSo5H2.js.br +0 -0
- package/studio/chunks/Pagination-D9BSo5H2.js.gz +0 -0
- package/studio/chunks/PeoplePage-CWIXitBD.js +783 -0
- package/studio/chunks/PeoplePage-CWIXitBD.js.br +0 -0
- package/studio/chunks/PeoplePage-CWIXitBD.js.gz +0 -0
- package/studio/chunks/Popover-B63bkTMS.js +128 -0
- package/studio/chunks/Popover-B63bkTMS.js.br +0 -0
- package/studio/chunks/Popover-B63bkTMS.js.gz +0 -0
- package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js +255 -0
- package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.br +0 -0
- package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.gz +0 -0
- package/studio/chunks/Routes-DLYHmulE.js +102 -0
- package/studio/chunks/Routes-DLYHmulE.js.br +0 -0
- package/studio/chunks/Routes-DLYHmulE.js.gz +0 -0
- package/studio/chunks/RovingFocusItem-QZNg-wWF.js +95 -0
- package/studio/chunks/RovingFocusItem-QZNg-wWF.js.br +0 -0
- package/studio/chunks/RovingFocusItem-QZNg-wWF.js.gz +0 -0
- package/studio/chunks/ScheduledPage-C0hqrkr5.js +332 -0
- package/studio/chunks/ScheduledPage-C0hqrkr5.js.br +0 -0
- package/studio/chunks/ScheduledPage-C0hqrkr5.js.gz +0 -0
- package/studio/chunks/Search-BEgCe9Aj.js +14646 -0
- package/studio/chunks/Search-BEgCe9Aj.js.br +0 -0
- package/studio/chunks/Search-BEgCe9Aj.js.gz +0 -0
- package/studio/chunks/Select-B50WZMW-.js +2145 -0
- package/studio/chunks/Select-B50WZMW-.js.br +0 -0
- package/studio/chunks/Select-B50WZMW-.js.gz +0 -0
- package/studio/chunks/SelectMenu-DSweWGMz.js +2109 -0
- package/studio/chunks/SelectMenu-DSweWGMz.js.br +0 -0
- package/studio/chunks/SelectMenu-DSweWGMz.js.gz +0 -0
- package/studio/chunks/SeoPage-CNNxGe4h.js +846 -0
- package/studio/chunks/SeoPage-CNNxGe4h.js.br +0 -0
- package/studio/chunks/SeoPage-CNNxGe4h.js.gz +0 -0
- package/studio/chunks/Skeleton-COz8dcrw.js +39 -0
- package/studio/chunks/Skeleton-COz8dcrw.js.br +2 -0
- package/studio/chunks/Skeleton-COz8dcrw.js.gz +0 -0
- package/studio/chunks/Slideover-QMMHAAys.js +289 -0
- package/studio/chunks/Slideover-QMMHAAys.js.br +0 -0
- package/studio/chunks/Slideover-QMMHAAys.js.gz +0 -0
- package/studio/chunks/StudioPage-ngEIDr5d.js +80 -0
- package/studio/chunks/StudioPage-ngEIDr5d.js.br +0 -0
- package/studio/chunks/StudioPage-ngEIDr5d.js.gz +0 -0
- package/studio/chunks/StudioPageToolbar-BwHnqyr6.js +2524 -0
- package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.br +0 -0
- package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.gz +0 -0
- package/studio/chunks/Switch-qKl1aDn7.js +484 -0
- package/studio/chunks/Switch-qKl1aDn7.js.br +0 -0
- package/studio/chunks/Switch-qKl1aDn7.js.gz +0 -0
- package/studio/chunks/ToolPage-DxoVAJVk.js +29 -0
- package/studio/chunks/ToolPage-DxoVAJVk.js.br +0 -0
- package/studio/chunks/ToolPage-DxoVAJVk.js.gz +0 -0
- package/studio/chunks/Tooltip-Bu15m_DB.js +693 -0
- package/studio/chunks/Tooltip-Bu15m_DB.js.br +0 -0
- package/studio/chunks/Tooltip-Bu15m_DB.js.gz +0 -0
- package/studio/chunks/TrashPage-lhqLLdoG.js +12 -0
- package/studio/chunks/TrashPage-lhqLLdoG.js.br +0 -0
- package/studio/chunks/TrashPage-lhqLLdoG.js.gz +0 -0
- package/studio/chunks/VersionsPage-Cqy6UAp9.js +2349 -0
- package/studio/chunks/VersionsPage-Cqy6UAp9.js.br +0 -0
- package/studio/chunks/VersionsPage-Cqy6UAp9.js.gz +0 -0
- package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js +113 -0
- package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.br +0 -0
- package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.gz +0 -0
- package/studio/chunks/arrays-CUJkmV4I.js +10 -0
- package/studio/chunks/arrays-CUJkmV4I.js.br +0 -0
- package/studio/chunks/arrays-CUJkmV4I.js.gz +0 -0
- package/studio/chunks/base-DkTekJe8.js +213 -0
- package/studio/chunks/base-DkTekJe8.js.br +0 -0
- package/studio/chunks/base-DkTekJe8.js.gz +0 -0
- package/studio/chunks/content-DUGl3N4d.js +6012 -0
- package/studio/chunks/content-DUGl3N4d.js.br +0 -0
- package/studio/chunks/content-DUGl3N4d.js.gz +0 -0
- package/studio/chunks/destinations-DPIQVQa6.js +227 -0
- package/studio/chunks/destinations-DPIQVQa6.js.br +0 -0
- package/studio/chunks/destinations-DPIQVQa6.js.gz +0 -0
- package/studio/chunks/en-073cjKW4.js +152 -0
- package/studio/chunks/en-073cjKW4.js.br +0 -0
- package/studio/chunks/en-073cjKW4.js.gz +0 -0
- package/studio/chunks/en-Bn8mxPuf.js +134 -0
- package/studio/chunks/en-Bn8mxPuf.js.br +0 -0
- package/studio/chunks/en-Bn8mxPuf.js.gz +0 -0
- package/studio/chunks/en-C9OiaUDZ.js +251 -0
- package/studio/chunks/en-C9OiaUDZ.js.br +0 -0
- package/studio/chunks/en-C9OiaUDZ.js.gz +0 -0
- package/studio/chunks/en-CHAR6jzx.js +147 -0
- package/studio/chunks/en-CHAR6jzx.js.br +0 -0
- package/studio/chunks/en-CHAR6jzx.js.gz +0 -0
- package/studio/chunks/en-Cq4N1vEF.js +93 -0
- package/studio/chunks/en-Cq4N1vEF.js.br +2 -0
- package/studio/chunks/en-Cq4N1vEF.js.gz +0 -0
- package/studio/chunks/en-D2hRqlse.js +140 -0
- package/studio/chunks/en-D2hRqlse.js.br +0 -0
- package/studio/chunks/en-D2hRqlse.js.gz +0 -0
- package/studio/chunks/en-DiUC3-j6.js +144 -0
- package/studio/chunks/en-DiUC3-j6.js.br +0 -0
- package/studio/chunks/en-DiUC3-j6.js.gz +0 -0
- package/studio/chunks/english-Cs_Adu-u.js +8 -0
- package/studio/chunks/english-Cs_Adu-u.js.br +0 -0
- package/studio/chunks/english-Cs_Adu-u.js.gz +0 -0
- package/studio/chunks/esm-D6DqSiL1.js +752 -0
- package/studio/chunks/esm-D6DqSiL1.js.br +0 -0
- package/studio/chunks/esm-D6DqSiL1.js.gz +0 -0
- package/studio/chunks/externalRequest-CTzr2nDq.js +23 -0
- package/studio/chunks/externalRequest-CTzr2nDq.js.br +0 -0
- package/studio/chunks/externalRequest-CTzr2nDq.js.gz +0 -0
- package/studio/chunks/iconify-DR9ryCPv.js +1007 -0
- package/studio/chunks/iconify-DR9ryCPv.js.br +0 -0
- package/studio/chunks/iconify-DR9ryCPv.js.gz +0 -0
- package/studio/chunks/icons-D2MsAaXq.js +183 -0
- package/studio/chunks/icons-D2MsAaXq.js.br +0 -0
- package/studio/chunks/icons-D2MsAaXq.js.gz +0 -0
- package/studio/chunks/leaveGuards-D22fTGgr.js +26 -0
- package/studio/chunks/leaveGuards-D22fTGgr.js.br +0 -0
- package/studio/chunks/leaveGuards-D22fTGgr.js.gz +0 -0
- package/studio/chunks/lucideIcons-EyqyPBsX.js +238 -0
- package/studio/chunks/lucideIcons-EyqyPBsX.js.br +0 -0
- package/studio/chunks/lucideIcons-EyqyPBsX.js.gz +0 -0
- package/studio/chunks/mediaRoute--8cY8rUe.js +17 -0
- package/studio/chunks/mediaRoute--8cY8rUe.js.br +0 -0
- package/studio/chunks/mediaRoute--8cY8rUe.js.gz +0 -0
- package/studio/chunks/newDocumentPlanning-C26DHpvh.js +77 -0
- package/studio/chunks/newDocumentPlanning-C26DHpvh.js.br +0 -0
- package/studio/chunks/newDocumentPlanning-C26DHpvh.js.gz +0 -0
- package/studio/chunks/notifications-OKOLc40v.js +110 -0
- package/studio/chunks/notifications-OKOLc40v.js.br +0 -0
- package/studio/chunks/notifications-OKOLc40v.js.gz +0 -0
- package/studio/chunks/operations-CjNHyrEX.js +57 -0
- package/studio/chunks/operations-CjNHyrEX.js.br +0 -0
- package/studio/chunks/operations-CjNHyrEX.js.gz +0 -0
- package/studio/chunks/overlay-DnqFLZTc.js +1733 -0
- package/studio/chunks/overlay-DnqFLZTc.js.br +0 -0
- package/studio/chunks/overlay-DnqFLZTc.js.gz +0 -0
- package/studio/chunks/presentation-DF83w0hE.js +57 -0
- package/studio/chunks/presentation-DF83w0hE.js.br +0 -0
- package/studio/chunks/presentation-DF83w0hE.js.gz +0 -0
- package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js +4557 -0
- package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.br +0 -0
- package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.gz +0 -0
- package/studio/chunks/searchPresentation-DFwxQkt3.js +76 -0
- package/studio/chunks/searchPresentation-DFwxQkt3.js.br +0 -0
- package/studio/chunks/searchPresentation-DFwxQkt3.js.gz +0 -0
- package/studio/chunks/status-DQv6ihkU.js +38 -0
- package/studio/chunks/status-DQv6ihkU.js.br +0 -0
- package/studio/chunks/status-DQv6ihkU.js.gz +0 -0
- package/studio/chunks/studioContext-I8HozGU1.js +4953 -0
- package/studio/chunks/studioContext-I8HozGU1.js.br +0 -0
- package/studio/chunks/studioContext-I8HozGU1.js.gz +0 -0
- package/studio/chunks/studioQueries-BR-9NT5F.js +73 -0
- package/studio/chunks/studioQueries-BR-9NT5F.js.br +0 -0
- package/studio/chunks/studioQueries-BR-9NT5F.js.gz +0 -0
- package/studio/chunks/studioSearch-ByaL-QpM.js +1095 -0
- package/studio/chunks/studioSearch-ByaL-QpM.js.br +0 -0
- package/studio/chunks/studioSearch-ByaL-QpM.js.gz +0 -0
- package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js +62 -0
- package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.br +0 -0
- package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.gz +0 -0
- package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js +189 -0
- package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.br +0 -0
- package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.gz +0 -0
- package/studio/chunks/useDocumentMessage-BAWvc38w.js +16 -0
- package/studio/chunks/useDocumentMessage-BAWvc38w.js.br +3 -0
- package/studio/chunks/useDocumentMessage-BAWvc38w.js.gz +0 -0
- package/studio/chunks/useFilter-DzyiTR7f.js +87 -0
- package/studio/chunks/useFilter-DzyiTR7f.js.br +0 -0
- package/studio/chunks/useFilter-DzyiTR7f.js.gz +0 -0
- package/studio/chunks/useFormControl-CL7sSCUo.js +8 -0
- package/studio/chunks/useFormControl-CL7sSCUo.js.br +0 -0
- package/studio/chunks/useFormControl-CL7sSCUo.js.gz +0 -0
- package/studio/chunks/useGraceArea-Chcy25IQ.js +154 -0
- package/studio/chunks/useGraceArea-Chcy25IQ.js.br +0 -0
- package/studio/chunks/useGraceArea-Chcy25IQ.js.gz +0 -0
- package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js +44 -0
- package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.br +8 -0
- package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.gz +0 -0
- package/studio/chunks/useLinkCopy-CMjQteCy.js +35 -0
- package/studio/chunks/useLinkCopy-CMjQteCy.js.br +0 -0
- package/studio/chunks/useLinkCopy-CMjQteCy.js.gz +0 -0
- package/studio/chunks/usePointerMotion-DwRcwBNQ.js +16 -0
- package/studio/chunks/usePointerMotion-DwRcwBNQ.js.br +0 -0
- package/studio/chunks/usePointerMotion-DwRcwBNQ.js.gz +0 -0
- package/studio/chunks/useStudioNavigation-CLwtSYpb.js +298 -0
- package/studio/chunks/useStudioNavigation-CLwtSYpb.js.br +0 -0
- package/studio/chunks/useStudioNavigation-CLwtSYpb.js.gz +0 -0
- package/studio/chunks/useStudioPages-DR9qmYLg.js +79 -0
- package/studio/chunks/useStudioPages-DR9qmYLg.js.br +0 -0
- package/studio/chunks/useStudioPages-DR9qmYLg.js.gz +0 -0
- package/studio/chunks/utils-mdScC0v0.js +59 -0
- package/studio/chunks/utils-mdScC0v0.js.br +0 -0
- package/studio/chunks/utils-mdScC0v0.js.gz +0 -0
- package/studio/chunks/virtualizer-D1S0bZ4t.js +781 -0
- package/studio/chunks/virtualizer-D1S0bZ4t.js.br +0 -0
- package/studio/chunks/virtualizer-D1S0bZ4t.js.gz +0 -0
- package/studio/help/64f767fe29c2-save-and-publish.svg +7 -0
- package/studio/host.css +1 -1
- package/studio/host.css.br +0 -0
- package/studio/host.css.gz +0 -0
- package/studio/host.js +8793 -39395
- package/studio/host.js.br +0 -0
- package/studio/host.js.gz +0 -0
- package/CHANGELOG.md +0 -14
- package/bin/cms.mjs +0 -2
- package/src/ApplicationTypes.d.ts +0 -84
- package/src/ApplicationTypes.js +0 -1
- package/src/Configuration-CMweD9bn.js +0 -1191
- package/src/Configuration-CMweD9bn.js.map +0 -1
- package/src/Configuration.d.ts +0 -82
- package/src/Configuration.js +0 -8
- package/src/Configuration.js.map +0 -1
- package/src/Content.d.ts +0 -68
- package/src/Content.js +0 -373
- package/src/Content.js.map +0 -1
- package/src/ContentTransfer-BxwswWn3.js +0 -86
- package/src/ContentTransfer-BxwswWn3.js.map +0 -1
- package/src/ContentTransfer-Z9FHyLez.d.ts +0 -72
- package/src/DocumentEngine-tYtwbBjr.js +0 -978
- package/src/DocumentEngine-tYtwbBjr.js.map +0 -1
- package/src/DocumentModel.d.ts +0 -52
- package/src/DocumentModel.js +0 -66
- package/src/DocumentModel.js.map +0 -1
- package/src/Forms-CX-hwmJF.js +0 -391
- package/src/Forms-CX-hwmJF.js.map +0 -1
- package/src/Forms-CfNPTiCr.js +0 -110
- package/src/Forms-CfNPTiCr.js.map +0 -1
- package/src/Forms-R0HoTR-o.d.ts +0 -92
- package/src/Forms.js.map +0 -1
- package/src/HttpPaths-Be3vshPJ.js +0 -20
- package/src/HttpPaths-Be3vshPJ.js.map +0 -1
- package/src/I18n-wxswIRyY.d.ts +0 -30
- package/src/Media-j1bTritO.js +0 -112
- package/src/Media-j1bTritO.js.map +0 -1
- package/src/Module.js.map +0 -1
- package/src/References-CCPDAPve.js +0 -45
- package/src/References-CCPDAPve.js.map +0 -1
- package/src/S3MediaObjects-BXfjaZOu.js +0 -2756
- package/src/S3MediaObjects-BXfjaZOu.js.map +0 -1
- package/src/Seo-402YumpT.d.ts +0 -198
- package/src/cli/content.js +0 -101
- package/src/cli/content.js.map +0 -1
- package/src/cli.js.map +0 -1
- package/src/connection-BP80q4d-.js +0 -92
- package/src/connection-BP80q4d-.js.map +0 -1
- package/src/dev-lifecycle-3I_pozUl.js +0 -535
- package/src/dev-lifecycle-3I_pozUl.js.map +0 -1
- package/src/installation-DxqSSVbH.js +0 -9105
- package/src/installation-DxqSSVbH.js.map +0 -1
- package/src/internal/application-types.js +0 -43
- package/src/internal/application-types.js.map +0 -1
- package/src/internal/authoring-catalog.js +0 -158
- package/src/internal/authoring-catalog.js.map +0 -1
- package/src/internal/authoring-compiler.js +0 -146
- package/src/internal/authoring-compiler.js.map +0 -1
- package/src/internal/authoring-metadata.js +0 -191
- package/src/internal/authoring-metadata.js.map +0 -1
- package/src/internal/cms-config.js +0 -45
- package/src/internal/cms-config.js.map +0 -1
- package/src/internal/configuration.js +0 -228
- package/src/internal/configuration.js.map +0 -1
- package/src/internal/dev-lifecycle.js +0 -3
- package/src/internal/diagnostics.js +0 -47
- package/src/internal/diagnostics.js.map +0 -1
- package/src/internal/document-model.js +0 -376
- package/src/internal/document-model.js.map +0 -1
- package/src/internal/field-metadata.js +0 -7
- package/src/internal/field-metadata.js.map +0 -1
- package/src/internal/form-capabilities.js +0 -12
- package/src/internal/form-capabilities.js.map +0 -1
- package/src/internal/i18n.js +0 -73
- package/src/internal/i18n.js.map +0 -1
- package/src/internal/studio-app.js +0 -68
- package/src/internal/studio-app.js.map +0 -1
- package/src/location-CMNGO3lU.js +0 -35
- package/src/location-CMNGO3lU.js.map +0 -1
- package/src/metadata-DN9_K6Yl.js +0 -201
- package/src/metadata-DN9_K6Yl.js.map +0 -1
- package/src/models-5j67LMqW.js +0 -131
- package/src/models-5j67LMqW.js.map +0 -1
- package/src/models-VmGmG19-.js +0 -628
- package/src/models-VmGmG19-.js.map +0 -1
- package/src/runtime/api.js.map +0 -1
- package/src/runtime/blocks.js +0 -30
- package/src/runtime/blocks.js.map +0 -1
- package/src/runtime/collaboration.js +0 -45
- package/src/runtime/collaboration.js.map +0 -1
- package/src/runtime/delivery/DocumentField.js +0 -23
- package/src/runtime/delivery/DocumentField.js.map +0 -1
- package/src/runtime/delivery/DocumentRenderer.js +0 -61
- package/src/runtime/delivery/DocumentRenderer.js.map +0 -1
- package/src/runtime/delivery/DocumentScope.js +0 -41
- package/src/runtime/delivery/DocumentScope.js.map +0 -1
- package/src/runtime/delivery/blocks.js +0 -8
- package/src/runtime/delivery/blocks.js.map +0 -1
- package/src/runtime/delivery/context.js +0 -12
- package/src/runtime/delivery/context.js.map +0 -1
- package/src/runtime/delivery/document-page.js +0 -21
- package/src/runtime/delivery/document-page.js.map +0 -1
- package/src/runtime/delivery/document.js +0 -43
- package/src/runtime/delivery/document.js.map +0 -1
- package/src/runtime/delivery/error.js +0 -11
- package/src/runtime/delivery/error.js.map +0 -1
- package/src/runtime/delivery/plugin.js +0 -104
- package/src/runtime/delivery/plugin.js.map +0 -1
- package/src/runtime/delivery/preview.d.ts +0 -11
- package/src/runtime/delivery/preview.js +0 -6
- package/src/runtime/delivery/preview.js.map +0 -1
- package/src/runtime/delivery/types.d.ts +0 -2
- package/src/runtime/delivery/types.js +0 -1
- package/src/runtime/delivery/useCmsDocumentSeo.d.ts +0 -67
- package/src/runtime/delivery/useCmsDocumentSeo.js.map +0 -1
- package/src/runtime/delivery/useDocument.d.ts +0 -6
- package/src/runtime/delivery/useDocument.js +0 -23
- package/src/runtime/delivery/useDocument.js.map +0 -1
- package/src/runtime/delivery/useDocumentQuery.d.ts +0 -7
- package/src/runtime/delivery/useDocumentQuery.js +0 -29
- package/src/runtime/delivery/useDocumentQuery.js.map +0 -1
- package/src/runtime/forms/document.js +0 -38
- package/src/runtime/forms/document.js.map +0 -1
- package/src/runtime/forms/useCmsForm.js +0 -257
- package/src/runtime/forms/useCmsForm.js.map +0 -1
- package/src/runtime/i18n/translator.js +0 -58
- package/src/runtime/i18n/translator.js.map +0 -1
- package/src/runtime/i18n/useCmsI18n.d.ts +0 -13
- package/src/runtime/i18n/useCmsI18n.js +0 -38
- package/src/runtime/i18n/useCmsI18n.js.map +0 -1
- package/src/runtime/installation.js +0 -3
- package/src/runtime/plugin.js.map +0 -1
- package/src/runtime/preview/CmsStudioPreviewMarker.js +0 -29
- package/src/runtime/preview/CmsStudioPreviewMarker.js.map +0 -1
- package/src/runtime/preview/comark-document.js +0 -37
- package/src/runtime/preview/comark-document.js.map +0 -1
- package/src/runtime/preview/connection.js +0 -3
- package/src/runtime/preview/controller.js +0 -265
- package/src/runtime/preview/controller.js.map +0 -1
- package/src/runtime/preview/crypto.js +0 -16
- package/src/runtime/preview/crypto.js.map +0 -1
- package/src/runtime/preview/overlay.js +0 -122
- package/src/runtime/preview/overlay.js.map +0 -1
- package/src/runtime/preview/plugin.client.js +0 -68
- package/src/runtime/preview/plugin.client.js.map +0 -1
- package/src/runtime/preview/preview.css +0 -91
- package/src/runtime/preview/protocol.d.ts +0 -16
- package/src/runtime/preview/protocol.js +0 -23
- package/src/runtime/preview/protocol.js.map +0 -1
- package/src/runtime/preview/regions.js +0 -142
- package/src/runtime/preview/regions.js.map +0 -1
- package/src/runtime/preview/store.js +0 -4
- package/src/runtime/sitemap-entries.js +0 -17
- package/src/runtime/sitemap-entries.js.map +0 -1
- package/src/runtime/sitemap.js +0 -23
- package/src/runtime/sitemap.js.map +0 -1
- package/src/runtime/studio-app.js +0 -17
- package/src/runtime/studio-app.js.map +0 -1
- package/src/runtime/studio-document.js +0 -46
- package/src/runtime/studio-document.js.map +0 -1
- package/src/runtime/studio-entry.js +0 -19
- package/src/runtime/studio-entry.js.map +0 -1
- package/src/runtime/studio-navigation.js +0 -11
- package/src/runtime/studio-navigation.js.map +0 -1
- package/src/scalars-CA6kyipS.d.ts +0 -7
- package/src/scalars-CVZqT3L0.js +0 -22
- package/src/scalars-CVZqT3L0.js.map +0 -1
- package/src/store-X1e1o_MF.js +0 -209
- package/src/store-X1e1o_MF.js.map +0 -1
- package/src/types-DZ0IV-Ow.d.ts +0 -101
- package/studio/CreateDocumentDialog-C4_JBo1w.js +0 -335
- package/studio/SelectMenu-wXqxymUw.js +0 -34045
- package/studio/collaboration-DcK2F6v9.js +0 -4566
- package/studio/editor-P2rB7Csp.js +0 -30128
- package/studio/rolldown-runtime-Dy4uBu1J.js +0 -11
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { localeFromPath, localePath, switchLocalePath, translate } from "./translator.js";
|
|
2
|
-
import { computed } from "vue";
|
|
3
|
-
import { useRoute, useState } from "nuxt/app";
|
|
4
|
-
import configuration from "#cms/i18n";
|
|
5
|
-
|
|
6
|
-
//#region src/runtime/i18n/useCmsI18n.ts
|
|
7
|
-
/** URL-owned locale is reactive and isolated to the current Nuxt application/request. */
|
|
8
|
-
function useCmsI18n() {
|
|
9
|
-
const route = useRoute();
|
|
10
|
-
const documentLocale = useState("cms-document-locale", () => void 0);
|
|
11
|
-
const locale = computed(() => documentLocale.value ?? localeFromPath(configuration, route.path));
|
|
12
|
-
const warned = /* @__PURE__ */ new Set();
|
|
13
|
-
function missing(key, code) {
|
|
14
|
-
const id = `${code}:${key}`;
|
|
15
|
-
if (!import.meta.dev || warned.has(id)) return;
|
|
16
|
-
warned.add(id);
|
|
17
|
-
console.warn(`[cms i18n] Missing message "${key}" for locale "${code}".`);
|
|
18
|
-
}
|
|
19
|
-
function t(key, ...arguments_) {
|
|
20
|
-
return translate(configuration, locale.value, key, arguments_[0], missing);
|
|
21
|
-
}
|
|
22
|
-
function localePath$1(path, code = locale.value) {
|
|
23
|
-
return localePath(configuration, path, code);
|
|
24
|
-
}
|
|
25
|
-
function switchLocalePath$1(code, destination) {
|
|
26
|
-
return destination === void 0 ? switchLocalePath(configuration, route.fullPath, code) : localePath(configuration, destination, code);
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
locale,
|
|
30
|
-
localePath: localePath$1,
|
|
31
|
-
switchLocalePath: switchLocalePath$1,
|
|
32
|
-
t
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
//#endregion
|
|
37
|
-
export { useCmsI18n };
|
|
38
|
-
//# sourceMappingURL=useCmsI18n.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCmsI18n.js","names":["localePath","resolveLocalePath","switchLocalePath","resolveSwitchLocalePath"],"sources":["../../../../../src/runtime/i18n/useCmsI18n.ts"],"sourcesContent":["import configuration from '#cms/i18n'\nimport { useRoute, useState } from 'nuxt/app'\nimport { computed, type ComputedRef } from 'vue'\nimport type { CmsLocale, CmsMessageKey, CmsMessageParameters } from '../../I18n'\nimport {\n localeFromPath,\n localePath as resolveLocalePath,\n switchLocalePath as resolveSwitchLocalePath,\n translate,\n} from './translator'\n\nexport interface UseCmsI18nReturn {\n readonly locale: ComputedRef<CmsLocale>\n readonly localePath: (path: string, code?: CmsLocale) => string\n readonly switchLocalePath: (code: CmsLocale, destination?: string) => string\n readonly t: <Key extends CmsMessageKey>(\n key: Key,\n ...arguments_: keyof CmsMessageParameters<Key> extends never\n ? [parameters?: undefined]\n : [parameters: CmsMessageParameters<Key>]\n ) => string\n}\n\n/** URL-owned locale is reactive and isolated to the current Nuxt application/request. */\nexport function useCmsI18n(): UseCmsI18nReturn {\n const route = useRoute()\n const documentLocale = useState<string | undefined>('cms-document-locale', () => undefined)\n\n // SAFETY: compileCmsI18n generated CmsLocale from these exact runtime locale keys.\n const locale = computed<CmsLocale>(\n () => (documentLocale.value ?? localeFromPath(configuration, route.path)) as CmsLocale,\n )\n\n const warned = new Set<string>()\n\n function missing(key: string, code: string): void {\n const id = `${code}:${key}`\n\n if (!import.meta.dev || warned.has(id)) return\n warned.add(id)\n // oxlint-disable-next-line effecttsgo/global-console -- Browser diagnostics should not add an Effect runtime to the website translation bundle.\n console.warn(`[cms i18n] Missing message \"${key}\" for locale \"${code}\".`)\n }\n\n function t<Key extends CmsMessageKey>(\n key: Key,\n ...arguments_: keyof CmsMessageParameters<Key> extends never\n ? [parameters?: undefined]\n : [parameters: CmsMessageParameters<Key>]\n ): string {\n return translate(configuration, locale.value, key, arguments_[0], missing)\n }\n\n function localePath(path: string, code: CmsLocale = locale.value): string {\n return resolveLocalePath(configuration, path, code)\n }\n\n function switchLocalePath(code: CmsLocale, destination?: string): string {\n return destination === undefined\n ? resolveSwitchLocalePath(configuration, route.fullPath, code)\n : resolveLocalePath(configuration, destination, code)\n }\n\n return { locale, localePath, switchLocalePath, t }\n}\n"],"mappings":";;;;;;;AAwBA,SAAgB,aAA+B;CAC7C,MAAM,QAAQ,SAAS;CACvB,MAAM,iBAAiB,SAA6B,6BAA6B,MAAS;CAG1F,MAAM,SAAS,eACN,eAAe,SAAS,eAAe,eAAe,MAAM,IAAI,CACzE;CAEA,MAAM,yBAAS,IAAI,IAAY;CAE/B,SAAS,QAAQ,KAAa,MAAoB;EAChD,MAAM,KAAK,GAAG,KAAK,GAAG;EAEtB,IAAI,CAAC,YAAY,OAAO,OAAO,IAAI,EAAE,GAAG;EACxC,OAAO,IAAI,EAAE;EAEb,QAAQ,KAAK,+BAA+B,IAAI,gBAAgB,KAAK,GAAG;CAC1E;CAEA,SAAS,EACP,KACA,GAAG,YAGK;EACR,OAAO,UAAU,eAAe,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO;CAC3E;CAEA,SAASA,aAAW,MAAc,OAAkB,OAAO,OAAe;EACxE,OAAOC,WAAkB,eAAe,MAAM,IAAI;CACpD;CAEA,SAASC,mBAAiB,MAAiB,aAA8B;EACvE,OAAO,gBAAgB,SACnBC,iBAAwB,eAAe,MAAM,UAAU,IAAI,IAC3DF,WAAkB,eAAe,aAAa,IAAI;CACxD;CAEA,OAAO;EAAE;EAAQ;EAAY;EAAkB;CAAE;AACnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","names":[],"sources":["../../../../src/runtime/plugin.ts"],"sourcesContent":["import type { CmsInstallation } from '@internal/platform-node/Installation'\nimport type { AuthoringCatalog } from '@internal/protocol/Configuration'\nimport type { CmsConfiguration } from '../Configuration'\nimport { Effect } from 'effect'\nimport { defineNitroPlugin, useNitroApp, useRuntimeConfig } from 'nitropack/runtime'\nimport { resolveCmsInstallation } from '../internal/configuration'\nimport { diagnosticFromCause, renderDiagnostic } from '../internal/diagnostics'\nimport { installCms } from './installation'\n\ndeclare module 'nitropack/types' {\n interface NitroApp {\n cmsInstallation?: Promise<CmsInstallation>\n }\n}\n\nexport function createInstallationPlugin(authored: CmsConfiguration, authoring: AuthoringCatalog) {\n return defineNitroPlugin((nitro) => {\n if (nitro.cmsInstallation) throw new Error('The CMS installation is already registered with Nitro.')\n let configuration\n\n try {\n configuration = resolveCmsInstallation(authored, useRuntimeConfig().cms, authoring)\n } catch (cause) {\n throw new Error(renderDiagnostic(diagnosticFromCause('startup.configuration', cause), false), { cause })\n }\n\n const installation = Effect.runPromise(installCms(configuration)).catch((cause: unknown) => {\n throw new Error(renderDiagnostic(diagnosticFromCause('startup.installation', cause), false), { cause })\n })\n\n nitro.cmsInstallation = installation\n\n void installation.catch((cause: unknown) => {\n nitro.captureError(cause instanceof Error ? cause : new Error(String(cause)), {\n fatal: true,\n tags: ['cms'],\n })\n })\n nitro.hooks.hook('close', () =>\n installation\n .then(\n (current) => current.close(),\n () => undefined,\n )\n .finally(() => {\n if (nitro.cmsInstallation === installation) nitro.cmsInstallation = undefined\n }),\n )\n })\n}\n\nexport function useCmsInstallation(): Promise<CmsInstallation> {\n const installation = useNitroApp().cmsInstallation\n\n if (!installation) throw new Error('The CMS installation has not been registered with Nitro.')\n\n return installation\n}\n"],"mappings":";;;;;;;AAeA,SAAgB,yBAAyB,UAA4B,WAA6B;CAChG,OAAO,mBAAmB,UAAU;EAClC,IAAI,MAAM,iBAAiB,MAAM,IAAI,MAAM,wDAAwD;EACnG,IAAI;EAEJ,IAAI;GACF,gBAAgB,uBAAuB,UAAU,iBAAiB,CAAC,CAAC,KAAK,SAAS;EACpF,SAAS,OAAO;GACd,MAAM,IAAI,MAAM,iBAAiB,oBAAoB,yBAAyB,KAAK,GAAG,KAAK,GAAG,EAAE,MAAM,CAAC;EACzG;EAEA,MAAM,eAAe,OAAO,WAAW,WAAW,aAAa,CAAC,CAAC,CAAC,OAAO,UAAmB;GAC1F,MAAM,IAAI,MAAM,iBAAiB,oBAAoB,wBAAwB,KAAK,GAAG,KAAK,GAAG,EAAE,MAAM,CAAC;EACxG,CAAC;EAED,MAAM,kBAAkB;EAExB,AAAK,aAAa,OAAO,UAAmB;GAC1C,MAAM,aAAa,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,GAAG;IAC5E,OAAO;IACP,MAAM,CAAC,KAAK;GACd,CAAC;EACH,CAAC;EACD,MAAM,MAAM,KAAK,eACf,aACG,MACE,YAAY,QAAQ,MAAM,SACrB,MACR,CAAC,CACA,cAAc;GACb,IAAI,MAAM,oBAAoB,cAAc,MAAM,kBAAkB;EACtE,CAAC,CACL;CACF,CAAC;AACH;AAEA,SAAgB,qBAA+C;CAC7D,MAAM,eAAe,YAAY,CAAC,CAAC;CAEnC,IAAI,CAAC,cAAc,MAAM,IAAI,MAAM,0DAA0D;CAE7F,OAAO;AACT"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { previewMarkerComment } from "./protocol.js";
|
|
2
|
-
import { createCommentVNode, defineComponent } from "vue";
|
|
3
|
-
|
|
4
|
-
//#region src/runtime/preview/CmsStudioPreviewMarker.ts
|
|
5
|
-
var CmsStudioPreviewMarker_default = defineComponent({
|
|
6
|
-
inheritAttrs: false,
|
|
7
|
-
name: "CmsStudioPreviewMarker",
|
|
8
|
-
props: {
|
|
9
|
-
edge: {
|
|
10
|
-
required: true,
|
|
11
|
-
type: String
|
|
12
|
-
},
|
|
13
|
-
kind: {
|
|
14
|
-
required: true,
|
|
15
|
-
type: String
|
|
16
|
-
},
|
|
17
|
-
node: {
|
|
18
|
-
required: true,
|
|
19
|
-
type: String
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
setup(props) {
|
|
23
|
-
return () => createCommentVNode(previewMarkerComment(props.node, props.kind, props.edge));
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
//#endregion
|
|
28
|
-
export { CmsStudioPreviewMarker_default as default };
|
|
29
|
-
//# sourceMappingURL=CmsStudioPreviewMarker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CmsStudioPreviewMarker.js","names":[],"sources":["../../../../../src/runtime/preview/CmsStudioPreviewMarker.ts"],"sourcesContent":["import { createCommentVNode, defineComponent } from 'vue'\nimport type { PropType } from 'vue'\nimport { previewMarkerComment } from './protocol'\nimport type { CmsPreviewMarkerEdge, CmsPreviewTargetKind } from './protocol'\n\nexport default defineComponent({\n inheritAttrs: false,\n name: 'CmsStudioPreviewMarker',\n props: {\n // SAFETY: Vue validates this prop as a string; projection is the sole caller and emits only marker edges.\n edge: { required: true, type: String as PropType<CmsPreviewMarkerEdge> },\n // SAFETY: Vue validates this prop as a string; projection is the sole caller and emits only target kinds.\n kind: { required: true, type: String as PropType<CmsPreviewTargetKind> },\n node: { required: true, type: String },\n },\n setup(props) {\n return () => createCommentVNode(previewMarkerComment(props.node, props.kind, props.edge))\n },\n})\n"],"mappings":";;;;AAKA,qCAAe,gBAAgB;CAC7B,cAAc;CACd,MAAM;CACN,OAAO;EAEL,MAAM;GAAE,UAAU;GAAM,MAAM;EAAyC;EAEvE,MAAM;GAAE,UAAU;GAAM,MAAM;EAAyC;EACvE,MAAM;GAAE,UAAU;GAAM,MAAM;EAAO;CACvC;CACA,MAAM,OAAO;EACX,aAAa,mBAAmB,qBAAqB,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,CAAC;CAC1F;AACF,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Predicate, Schema } from "effect";
|
|
2
|
-
|
|
3
|
-
//#region src/runtime/preview/comark-document.ts
|
|
4
|
-
const isJsonObject = Schema.is(Schema.JsonObject);
|
|
5
|
-
function toPreviewRenderDocument(document) {
|
|
6
|
-
return {
|
|
7
|
-
frontmatter: mutableJsonObject(document.frontmatter),
|
|
8
|
-
meta: mutableJsonObject(document.meta),
|
|
9
|
-
nodes: document.nodes.map(toRenderNode)
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function toRenderNode(node) {
|
|
13
|
-
if (Predicate.isString(node)) return node;
|
|
14
|
-
if (node[0] === null) return [
|
|
15
|
-
null,
|
|
16
|
-
mutableJsonObject(node[1]),
|
|
17
|
-
node[2]
|
|
18
|
-
];
|
|
19
|
-
const [tag, attributes, ...children] = node;
|
|
20
|
-
return [
|
|
21
|
-
tag,
|
|
22
|
-
mutableJsonObject(attributes),
|
|
23
|
-
...children.map(toRenderNode)
|
|
24
|
-
];
|
|
25
|
-
}
|
|
26
|
-
function mutableJsonObject(value) {
|
|
27
|
-
return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, mutableJson(child)]));
|
|
28
|
-
}
|
|
29
|
-
function mutableJson(value) {
|
|
30
|
-
if (Array.isArray(value)) return value.map(mutableJson);
|
|
31
|
-
if (isJsonObject(value)) return mutableJsonObject(value);
|
|
32
|
-
return value;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
//#endregion
|
|
36
|
-
export { toPreviewRenderDocument };
|
|
37
|
-
//# sourceMappingURL=comark-document.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"comark-document.js","names":[],"sources":["../../../../../src/runtime/preview/comark-document.ts"],"sourcesContent":["import type { CmsMarkdownDocument, MarkdownNode } from '@internal/protocol/Documents'\nimport type { MarkdownDocument, Node } from 'comark'\nimport { Predicate, Schema } from 'effect'\n\nconst isJsonObject = Schema.is(Schema.JsonObject)\n\nexport function toPreviewRenderDocument(document: CmsMarkdownDocument): MarkdownDocument {\n return {\n frontmatter: mutableJsonObject(document.frontmatter),\n meta: mutableJsonObject(document.meta),\n nodes: document.nodes.map(toRenderNode),\n }\n}\n\nfunction toRenderNode(node: MarkdownNode): Node {\n if (Predicate.isString(node)) return node\n\n if (node[0] === null) return [null, mutableJsonObject(node[1]), node[2]]\n const [tag, attributes, ...children] = node\n\n return [tag, mutableJsonObject(attributes), ...children.map(toRenderNode)]\n}\n\nfunction mutableJsonObject(value: Schema.JsonObject): Record<string, Schema.Json> {\n return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, mutableJson(child)]))\n}\n\nfunction 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"],"mappings":";;;AAIA,MAAM,eAAe,OAAO,GAAG,OAAO,UAAU;AAEhD,SAAgB,wBAAwB,UAAiD;CACvF,OAAO;EACL,aAAa,kBAAkB,SAAS,WAAW;EACnD,MAAM,kBAAkB,SAAS,IAAI;EACrC,OAAO,SAAS,MAAM,IAAI,YAAY;CACxC;AACF;AAEA,SAAS,aAAa,MAA0B;CAC9C,IAAI,UAAU,SAAS,IAAI,GAAG,OAAO;CAErC,IAAI,KAAK,OAAO,MAAM,OAAO;EAAC;EAAM,kBAAkB,KAAK,EAAE;EAAG,KAAK;CAAE;CACvE,MAAM,CAAC,KAAK,YAAY,GAAG,YAAY;CAEvC,OAAO;EAAC;EAAK,kBAAkB,UAAU;EAAG,GAAG,SAAS,IAAI,YAAY;CAAC;AAC3E;AAEA,SAAS,kBAAkB,OAAuD;CAChF,OAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC;AAClG;AAEA,SAAS,YAAY,OAAiC;CACpD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,IAAI,WAAW;CAEtD,IAAI,aAAa,KAAK,GAAG,OAAO,kBAAkB,KAAK;CAEvD,OAAO;AACT"}
|
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import { a as EditorNodeId, c as RevisionNumber, r as DocumentId } from "../../scalars-CVZqT3L0.js";
|
|
2
|
-
import { st as RequestId } from "../../models-VmGmG19-.js";
|
|
3
|
-
import { r as PreviewIntentId } from "../../models-5j67LMqW.js";
|
|
4
|
-
import { randomUUIDv4 } from "./crypto.js";
|
|
5
|
-
import { mountPreviewOverlay } from "./overlay.js";
|
|
6
|
-
import { mountPreviewRegions } from "./regions.js";
|
|
7
|
-
import { Schema } from "effect";
|
|
8
|
-
|
|
9
|
-
//#region src/runtime/preview/controller.ts
|
|
10
|
-
function mountPreviewController(options) {
|
|
11
|
-
const { bridge, root, store, view } = options;
|
|
12
|
-
const selection = mountPreviewOverlay(root, view);
|
|
13
|
-
const hover = mountPreviewOverlay(root, view, "hover");
|
|
14
|
-
const regions = mountPreviewRegions(root, view);
|
|
15
|
-
let active = false;
|
|
16
|
-
let desiredFocus;
|
|
17
|
-
let fallbacks = {};
|
|
18
|
-
let mode = "edit";
|
|
19
|
-
let renderSequence = 0;
|
|
20
|
-
let revision = RevisionNumber.make(0);
|
|
21
|
-
let lastApplied = "";
|
|
22
|
-
let revealedIntentId = "";
|
|
23
|
-
const sendManifest = () => {
|
|
24
|
-
bridge.send({
|
|
25
|
-
manifest: store.manifest(),
|
|
26
|
-
revision,
|
|
27
|
-
type: "preview:manifest"
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
const stopManifest = store.subscribe(sendManifest);
|
|
31
|
-
const sendApplied = (result) => {
|
|
32
|
-
if (!desiredFocus) return;
|
|
33
|
-
const signature = `${desiredFocus.id}:${result}`;
|
|
34
|
-
if (signature === lastApplied) return;
|
|
35
|
-
lastApplied = signature;
|
|
36
|
-
const applied = {
|
|
37
|
-
intentId: desiredFocus.id,
|
|
38
|
-
result,
|
|
39
|
-
revision,
|
|
40
|
-
type: "preview:applied"
|
|
41
|
-
};
|
|
42
|
-
bridge.send(desiredFocus.nodeId ? {
|
|
43
|
-
...applied,
|
|
44
|
-
nodeId: desiredFocus.nodeId
|
|
45
|
-
} : applied);
|
|
46
|
-
};
|
|
47
|
-
const documentRoot = (documentId) => [...root.querySelectorAll("[data-cms-document]")].find((element) => element.getAttribute("data-cms-document") === documentId) ?? root;
|
|
48
|
-
const applyFocus = (reveal = false) => {
|
|
49
|
-
if (!active && mode === "edit") {
|
|
50
|
-
selection.setPending(true);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
selection.setPending(false);
|
|
54
|
-
if (mode !== "edit") {
|
|
55
|
-
selection.show([]);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const intent = desiredFocus;
|
|
59
|
-
const nodeId = intent?.nodeId;
|
|
60
|
-
if (!intent || !nodeId) {
|
|
61
|
-
selection.show([]);
|
|
62
|
-
sendApplied("exact");
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const scope = documentRoot(intent.documentId);
|
|
66
|
-
const target = regions.locate(nodeId, fallbacks, scope);
|
|
67
|
-
const result = !target.nodeId ? "missing" : target.nodeId === nodeId ? "exact" : "fallback";
|
|
68
|
-
selection.show(target.geometries, {
|
|
69
|
-
label: intent.label,
|
|
70
|
-
match: result === "missing" ? void 0 : result,
|
|
71
|
-
reveal
|
|
72
|
-
});
|
|
73
|
-
if (reveal && result !== "missing" && revealedIntentId !== intent.id) {
|
|
74
|
-
revealedIntentId = intent.id;
|
|
75
|
-
revealElement(regions.nearest(target.geometries), view);
|
|
76
|
-
}
|
|
77
|
-
sendApplied(result);
|
|
78
|
-
};
|
|
79
|
-
const hoverElements = (target, x, y) => {
|
|
80
|
-
if (!active || mode !== "edit" || !target || x === void 0 || y === void 0) {
|
|
81
|
-
hover.show([]);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const scope = target.closest("[data-cms-document]") ?? root;
|
|
85
|
-
const nodeId = regions.hitTest(x, y, scope);
|
|
86
|
-
if (!nodeId) {
|
|
87
|
-
hover.show([]);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
hover.show(regions.locate(nodeId, fallbacks, scope).geometries);
|
|
91
|
-
};
|
|
92
|
-
const settleRender = (sequence) => {
|
|
93
|
-
view.requestAnimationFrame(() => view.requestAnimationFrame(() => {
|
|
94
|
-
if (sequence !== renderSequence) return;
|
|
95
|
-
active = true;
|
|
96
|
-
regions.decorate();
|
|
97
|
-
bridge.send({
|
|
98
|
-
revision,
|
|
99
|
-
type: "preview:rendered"
|
|
100
|
-
});
|
|
101
|
-
applyFocus(desiredFocus?.reveal);
|
|
102
|
-
}));
|
|
103
|
-
};
|
|
104
|
-
const stopBridge = bridge.subscribe((message) => {
|
|
105
|
-
if (message.type === "studio:connect") {
|
|
106
|
-
active = true;
|
|
107
|
-
regions.clear();
|
|
108
|
-
regions.decorate();
|
|
109
|
-
sendManifest();
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (message.type === "studio:mode") {
|
|
113
|
-
mode = message.mode;
|
|
114
|
-
if (mode === "browse") {
|
|
115
|
-
hoverElements();
|
|
116
|
-
selection.setPending(false);
|
|
117
|
-
selection.show([]);
|
|
118
|
-
regions.clear();
|
|
119
|
-
} else {
|
|
120
|
-
regions.decorate();
|
|
121
|
-
applyFocus();
|
|
122
|
-
}
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
if (message.type === "studio:navigate") {
|
|
126
|
-
options.navigate(message.path);
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
if (message.type === "studio:focus") {
|
|
130
|
-
if (message.focus.revision !== revision) return;
|
|
131
|
-
desiredFocus = message.focus;
|
|
132
|
-
applyFocus(desiredFocus.reveal);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (message.type !== "studio:patch" || message.revision < revision) return;
|
|
136
|
-
revision = message.revision;
|
|
137
|
-
active = false;
|
|
138
|
-
selection.setPending(true);
|
|
139
|
-
desiredFocus = message.focus;
|
|
140
|
-
lastApplied = "";
|
|
141
|
-
const sequence = ++renderSequence;
|
|
142
|
-
store.patch(message.document).then((localFallbacks) => {
|
|
143
|
-
if (sequence !== renderSequence) return;
|
|
144
|
-
options.onPatchError(null);
|
|
145
|
-
fallbacks = Object.assign({}, message.fallbacks, localFallbacks);
|
|
146
|
-
settleRender(sequence);
|
|
147
|
-
}, () => {
|
|
148
|
-
if (sequence !== renderSequence) return;
|
|
149
|
-
options.onPatchError("Preview could not apply this update.");
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
const handleClick = (event) => {
|
|
153
|
-
if (!active) return;
|
|
154
|
-
const target = event.target instanceof Element ? event.target : null;
|
|
155
|
-
if (mode === "browse") {
|
|
156
|
-
const link = target?.closest("a[href]");
|
|
157
|
-
if (!(link instanceof HTMLAnchorElement) || link.target || link.hasAttribute("download") || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
|
|
158
|
-
const destination = new URL(link.href, view.location.href);
|
|
159
|
-
if (destination.origin !== view.location.origin) return;
|
|
160
|
-
event.preventDefault();
|
|
161
|
-
event.stopPropagation();
|
|
162
|
-
options.navigate(`${destination.pathname}${destination.search}${destination.hash}`);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
const scope = target?.closest("[data-cms-document]");
|
|
166
|
-
const documentIdValue = scope?.getAttribute("data-cms-document");
|
|
167
|
-
if (!target || !scope || !Schema.is(DocumentId)(documentIdValue)) return;
|
|
168
|
-
event.preventDefault();
|
|
169
|
-
event.stopPropagation();
|
|
170
|
-
const nodeIdValue = regions.hitTest(event.clientX, event.clientY, scope);
|
|
171
|
-
const nodeId = Schema.is(EditorNodeId)(nodeIdValue) ? nodeIdValue : void 0;
|
|
172
|
-
const activationFocus = {
|
|
173
|
-
documentId: documentIdValue,
|
|
174
|
-
id: PreviewIntentId.make(randomUUIDv4(view.crypto)),
|
|
175
|
-
origin: "preview",
|
|
176
|
-
reveal: false,
|
|
177
|
-
revision
|
|
178
|
-
};
|
|
179
|
-
desiredFocus = nodeId ? {
|
|
180
|
-
...activationFocus,
|
|
181
|
-
nodeId
|
|
182
|
-
} : activationFocus;
|
|
183
|
-
lastApplied = "";
|
|
184
|
-
const activation = {
|
|
185
|
-
documentId: desiredFocus.documentId,
|
|
186
|
-
requestId: RequestId.make(randomUUIDv4(view.crypto)),
|
|
187
|
-
revision,
|
|
188
|
-
type: "preview:activate"
|
|
189
|
-
};
|
|
190
|
-
if (nodeId) bridge.send({
|
|
191
|
-
...activation,
|
|
192
|
-
nodeId
|
|
193
|
-
});
|
|
194
|
-
else bridge.send(activation);
|
|
195
|
-
applyFocus();
|
|
196
|
-
};
|
|
197
|
-
let hoverFrame = 0;
|
|
198
|
-
let hoverPointer;
|
|
199
|
-
const handlePointerMove = (event) => {
|
|
200
|
-
if (!(event.target instanceof Element)) return;
|
|
201
|
-
hoverPointer = {
|
|
202
|
-
target: event.target,
|
|
203
|
-
x: event.clientX,
|
|
204
|
-
y: event.clientY
|
|
205
|
-
};
|
|
206
|
-
if (hoverFrame) return;
|
|
207
|
-
hoverFrame = view.requestAnimationFrame(() => {
|
|
208
|
-
hoverFrame = 0;
|
|
209
|
-
const pointer = hoverPointer;
|
|
210
|
-
if (pointer) hoverElements(pointer.target, pointer.x, pointer.y);
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
const handlePointerOut = (event) => {
|
|
214
|
-
if (!(event.relatedTarget instanceof Element)) {
|
|
215
|
-
hoverPointer = void 0;
|
|
216
|
-
hoverElements();
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
let mutationQueued = false;
|
|
220
|
-
const observer = new MutationObserver((records) => {
|
|
221
|
-
if (records.every((record) => record.target instanceof Element && record.target.closest("[data-cms-preview-overlay]"))) return;
|
|
222
|
-
if (mutationQueued) return;
|
|
223
|
-
mutationQueued = true;
|
|
224
|
-
queueMicrotask(() => {
|
|
225
|
-
mutationQueued = false;
|
|
226
|
-
if (!active) return;
|
|
227
|
-
hoverElements();
|
|
228
|
-
regions.decorate();
|
|
229
|
-
if (desiredFocus) applyFocus(false);
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
root.addEventListener("click", handleClick, true);
|
|
233
|
-
root.addEventListener("pointermove", handlePointerMove, true);
|
|
234
|
-
root.addEventListener("pointerout", handlePointerOut, true);
|
|
235
|
-
observer.observe(root.documentElement, {
|
|
236
|
-
childList: true,
|
|
237
|
-
subtree: true
|
|
238
|
-
});
|
|
239
|
-
return () => {
|
|
240
|
-
stopBridge();
|
|
241
|
-
stopManifest();
|
|
242
|
-
observer.disconnect();
|
|
243
|
-
if (hoverFrame) view.cancelAnimationFrame(hoverFrame);
|
|
244
|
-
selection.destroy();
|
|
245
|
-
hover.destroy();
|
|
246
|
-
root.removeEventListener("click", handleClick, true);
|
|
247
|
-
root.removeEventListener("pointermove", handlePointerMove, true);
|
|
248
|
-
root.removeEventListener("pointerout", handlePointerOut, true);
|
|
249
|
-
regions.clear();
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
function revealElement(element, view) {
|
|
253
|
-
if (!element) return;
|
|
254
|
-
const rect = element.getBoundingClientRect();
|
|
255
|
-
if (rect.bottom > 0 && rect.top < view.innerHeight && rect.right > 0 && rect.left < view.innerWidth) return;
|
|
256
|
-
element.scrollIntoView({
|
|
257
|
-
behavior: "instant",
|
|
258
|
-
block: "center",
|
|
259
|
-
inline: "nearest"
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
//#endregion
|
|
264
|
-
export { mountPreviewController };
|
|
265
|
-
//# sourceMappingURL=controller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","names":[],"sources":["../../../../../src/runtime/preview/controller.ts"],"sourcesContent":["import type { DocumentPreviewFocusIntent, PreviewSiteBridge, StudioPreviewPayload } from '@internal/protocol/Preview'\nimport type { StudioPreviewStore } from './store'\nimport { DocumentId, EditorNodeId, RevisionNumber } from '@internal/protocol/Documents'\nimport { RequestId } from '@internal/protocol/Identity'\nimport { PreviewIntentId } from '@internal/protocol/Preview'\nimport { Schema } from 'effect'\nimport { randomUUIDv4 } from './crypto'\nimport { mountPreviewOverlay } from './overlay'\nimport { mountPreviewRegions } from './regions'\n\nexport function mountPreviewController(options: {\n readonly bridge: PreviewSiteBridge\n readonly navigate: (path: string) => Promise<void> | void\n readonly onPatchError: (message: string | null) => void\n readonly root: Document\n readonly store: StudioPreviewStore\n readonly view: Window\n}): () => void {\n type PreviewFallbacks = Extract<StudioPreviewPayload, { readonly type: 'studio:patch' }>['fallbacks']\n\n const { bridge, root, store, view } = options\n const selection = mountPreviewOverlay(root, view)\n const hover = mountPreviewOverlay(root, view, 'hover')\n const regions = mountPreviewRegions(root, view)\n let active = false\n let desiredFocus: DocumentPreviewFocusIntent | undefined\n let fallbacks: PreviewFallbacks = {}\n let mode: 'browse' | 'edit' = 'edit'\n let renderSequence = 0\n let revision = RevisionNumber.make(0)\n let lastApplied = ''\n let revealedIntentId = ''\n\n const sendManifest = (): void => {\n bridge.send({ manifest: store.manifest(), revision, type: 'preview:manifest' })\n }\n\n const stopManifest = store.subscribe(sendManifest)\n\n const sendApplied = (result: 'exact' | 'fallback' | 'missing'): void => {\n if (!desiredFocus) return\n const signature = `${desiredFocus.id}:${result}`\n\n if (signature === lastApplied) return\n lastApplied = signature\n\n const applied = {\n intentId: desiredFocus.id,\n result,\n revision,\n type: 'preview:applied',\n } as const\n\n bridge.send(desiredFocus.nodeId ? { ...applied, nodeId: desiredFocus.nodeId } : applied)\n }\n\n const documentRoot = (documentId: string): ParentNode =>\n [...root.querySelectorAll('[data-cms-document]')].find(\n (element) => element.getAttribute('data-cms-document') === documentId,\n ) ?? root\n\n const applyFocus = (reveal = false): void => {\n if (!active && mode === 'edit') {\n selection.setPending(true)\n\n return\n }\n\n selection.setPending(false)\n\n if (mode !== 'edit') {\n selection.show([])\n\n return\n }\n\n const intent = desiredFocus\n const nodeId = intent?.nodeId\n\n if (!intent || !nodeId) {\n selection.show([])\n sendApplied('exact')\n\n return\n }\n\n const scope = documentRoot(intent.documentId)\n const target = regions.locate(nodeId, fallbacks, scope)\n const result = !target.nodeId ? 'missing' : target.nodeId === nodeId ? 'exact' : 'fallback'\n\n selection.show(target.geometries, {\n label: intent.label,\n match: result === 'missing' ? undefined : result,\n reveal,\n })\n\n if (reveal && result !== 'missing' && revealedIntentId !== intent.id) {\n revealedIntentId = intent.id\n revealElement(regions.nearest(target.geometries), view)\n }\n\n sendApplied(result)\n }\n\n const hoverElements = (target?: Element, x?: number, y?: number): void => {\n if (!active || mode !== 'edit' || !target || x === undefined || y === undefined) {\n hover.show([])\n\n return\n }\n\n const scope = target.closest('[data-cms-document]') ?? root\n const nodeId = regions.hitTest(x, y, scope)\n\n if (!nodeId) {\n hover.show([])\n\n return\n }\n\n hover.show(regions.locate(nodeId, fallbacks, scope).geometries)\n }\n\n const settleRender = (sequence: number): void => {\n view.requestAnimationFrame(() =>\n view.requestAnimationFrame(() => {\n if (sequence !== renderSequence) return\n active = true\n regions.decorate()\n bridge.send({ revision, type: 'preview:rendered' })\n applyFocus(desiredFocus?.reveal)\n }),\n )\n }\n\n const stopBridge = bridge.subscribe((message) => {\n if (message.type === 'studio:connect') {\n active = true\n regions.clear()\n regions.decorate()\n sendManifest()\n\n return\n }\n\n if (message.type === 'studio:mode') {\n mode = message.mode\n\n if (mode === 'browse') {\n hoverElements()\n selection.setPending(false)\n selection.show([])\n regions.clear()\n } else {\n regions.decorate()\n applyFocus()\n }\n\n return\n }\n\n if (message.type === 'studio:navigate') {\n void options.navigate(message.path)\n\n return\n }\n\n if (message.type === 'studio:focus') {\n if (message.focus.revision !== revision) return\n desiredFocus = message.focus\n applyFocus(desiredFocus.reveal)\n\n return\n }\n\n if (message.type !== 'studio:patch' || message.revision < revision) return\n revision = message.revision\n active = false\n selection.setPending(true)\n desiredFocus = message.focus\n lastApplied = ''\n const sequence = ++renderSequence\n void store.patch(message.document).then(\n (localFallbacks) => {\n if (sequence !== renderSequence) return\n options.onPatchError(null)\n fallbacks = Object.assign({}, message.fallbacks, localFallbacks)\n settleRender(sequence)\n },\n () => {\n if (sequence !== renderSequence) return\n options.onPatchError('Preview could not apply this update.')\n },\n )\n })\n\n const handleClick = (event: MouseEvent) => {\n if (!active) return\n const target = event.target instanceof Element ? event.target : null\n\n if (mode === 'browse') {\n const link = target?.closest('a[href]')\n\n if (\n !(link instanceof HTMLAnchorElement) ||\n link.target ||\n link.hasAttribute('download') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n )\n return\n const destination = new URL(link.href, view.location.href)\n\n if (destination.origin !== view.location.origin) return\n event.preventDefault()\n event.stopPropagation()\n void options.navigate(`${destination.pathname}${destination.search}${destination.hash}`)\n\n return\n }\n\n const scope = target?.closest('[data-cms-document]')\n const documentIdValue = scope?.getAttribute('data-cms-document')\n\n if (!target || !scope || !Schema.is(DocumentId)(documentIdValue)) return\n event.preventDefault()\n event.stopPropagation()\n const nodeIdValue = regions.hitTest(event.clientX, event.clientY, scope)\n const nodeId = Schema.is(EditorNodeId)(nodeIdValue) ? nodeIdValue : undefined\n\n const activationFocus = {\n documentId: documentIdValue,\n id: PreviewIntentId.make(randomUUIDv4(view.crypto)),\n origin: 'preview',\n reveal: false,\n revision,\n } as const\n\n desiredFocus = nodeId ? { ...activationFocus, nodeId } : activationFocus\n lastApplied = ''\n\n const activation = {\n documentId: desiredFocus.documentId,\n requestId: RequestId.make(randomUUIDv4(view.crypto)),\n revision,\n type: 'preview:activate',\n } as const\n\n if (nodeId) bridge.send({ ...activation, nodeId })\n else bridge.send(activation)\n applyFocus()\n }\n\n let hoverFrame = 0\n let hoverPointer: { readonly target: Element; readonly x: number; readonly y: number } | undefined\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!(event.target instanceof Element)) return\n hoverPointer = { target: event.target, x: event.clientX, y: event.clientY }\n\n if (hoverFrame) return\n hoverFrame = view.requestAnimationFrame(() => {\n hoverFrame = 0\n const pointer = hoverPointer\n\n if (pointer) hoverElements(pointer.target, pointer.x, pointer.y)\n })\n }\n\n const handlePointerOut = (event: PointerEvent) => {\n if (!(event.relatedTarget instanceof Element)) {\n hoverPointer = undefined\n hoverElements()\n }\n }\n\n let mutationQueued = false\n\n const observer = new MutationObserver((records) => {\n if (\n records.every((record) => record.target instanceof Element && record.target.closest('[data-cms-preview-overlay]'))\n )\n return\n\n if (mutationQueued) return\n mutationQueued = true\n queueMicrotask(() => {\n mutationQueued = false\n\n if (!active) return\n hoverElements()\n regions.decorate()\n\n if (desiredFocus) applyFocus(false)\n })\n })\n\n root.addEventListener('click', handleClick, true)\n root.addEventListener('pointermove', handlePointerMove, true)\n root.addEventListener('pointerout', handlePointerOut, true)\n observer.observe(root.documentElement, { childList: true, subtree: true })\n\n return () => {\n stopBridge()\n stopManifest()\n observer.disconnect()\n\n if (hoverFrame) view.cancelAnimationFrame(hoverFrame)\n selection.destroy()\n hover.destroy()\n root.removeEventListener('click', handleClick, true)\n root.removeEventListener('pointermove', handlePointerMove, true)\n root.removeEventListener('pointerout', handlePointerOut, true)\n regions.clear()\n }\n}\n\nfunction revealElement(element: Element | undefined, view: Window): void {\n if (!element) return\n const rect = element.getBoundingClientRect()\n\n if (rect.bottom > 0 && rect.top < view.innerHeight && rect.right > 0 && rect.left < view.innerWidth) return\n element.scrollIntoView({\n behavior: 'instant',\n block: 'center',\n inline: 'nearest',\n })\n}\n"],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Crypto, Effect } from "effect";
|
|
2
|
-
|
|
3
|
-
//#region src/runtime/preview/crypto.ts
|
|
4
|
-
function browserCrypto(host) {
|
|
5
|
-
return Crypto.make({
|
|
6
|
-
digest: (algorithm, data) => Effect.promise(() => host.subtle.digest(algorithm, new Uint8Array(data)).then((digest) => new Uint8Array(digest))),
|
|
7
|
-
randomBytes: (size) => host.getRandomValues(new Uint8Array(size))
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
function randomUUIDv4(host) {
|
|
11
|
-
return Effect.runSync(browserCrypto(host).randomUUIDv4.pipe(Effect.orDie));
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
//#endregion
|
|
15
|
-
export { randomUUIDv4 };
|
|
16
|
-
//# sourceMappingURL=crypto.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","names":["EffectCrypto"],"sources":["../../../../../src/runtime/preview/crypto.ts"],"sourcesContent":["import { Crypto as EffectCrypto, Effect } from 'effect'\n\nfunction browserCrypto(host: Crypto): EffectCrypto.Crypto {\n return EffectCrypto.make({\n digest: (algorithm, data) =>\n Effect.promise(() =>\n host.subtle.digest(algorithm, new Uint8Array(data)).then((digest) => new Uint8Array(digest)),\n ),\n randomBytes: (size) => host.getRandomValues(new Uint8Array(size)),\n })\n}\n\nexport function randomUUIDv4(host: Crypto): string {\n return Effect.runSync(browserCrypto(host).randomUUIDv4.pipe(Effect.orDie))\n}\n"],"mappings":";;;AAEA,SAAS,cAAc,MAAmC;CACxD,OAAOA,OAAa,KAAK;EACvB,SAAS,WAAW,SAClB,OAAO,cACL,KAAK,OAAO,OAAO,WAAW,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC,MAAM,WAAW,IAAI,WAAW,MAAM,CAAC,CAC7F;EACF,cAAc,SAAS,KAAK,gBAAgB,IAAI,WAAW,IAAI,CAAC;CAClE,CAAC;AACH;AAEA,SAAgB,aAAa,MAAsB;CACjD,OAAO,OAAO,QAAQ,cAAc,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,KAAK,CAAC;AAC3E"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
//#region src/runtime/preview/overlay.ts
|
|
2
|
-
/** Preview-only chrome stays separate from the website's layout and element styles. */
|
|
3
|
-
function mountPreviewOverlay(root, view, kind = "selection") {
|
|
4
|
-
const host = root.createElement("div");
|
|
5
|
-
const targetAttribute = kind === "selection" ? "data-cms-selected" : "data-cms-hovered";
|
|
6
|
-
host.setAttribute("data-cms-preview-overlay", "");
|
|
7
|
-
host.setAttribute("aria-hidden", "true");
|
|
8
|
-
root.documentElement.append(host);
|
|
9
|
-
let markedElements = /* @__PURE__ */ new Set();
|
|
10
|
-
let targets = [];
|
|
11
|
-
let outlines = [];
|
|
12
|
-
let frame = 0;
|
|
13
|
-
let isPending = false;
|
|
14
|
-
let revealFrame = 0;
|
|
15
|
-
const markTargets = (geometries) => {
|
|
16
|
-
for (const element of markedElements) element.removeAttribute(targetAttribute);
|
|
17
|
-
markedElements = new Set(geometries.flatMap((geometry) => geometry.element() ?? []));
|
|
18
|
-
for (const element of markedElements) element.setAttribute(targetAttribute, "");
|
|
19
|
-
};
|
|
20
|
-
const setLabelVisibility = (outline, visible, labelled) => {
|
|
21
|
-
const showLabel = kind === "selection" && visible && !labelled;
|
|
22
|
-
outline.toggleAttribute("data-cms-selection-label", showLabel);
|
|
23
|
-
return labelled || showLabel;
|
|
24
|
-
};
|
|
25
|
-
const position = () => {
|
|
26
|
-
let labelled = false;
|
|
27
|
-
for (const [index, target] of targets.entries()) {
|
|
28
|
-
const outline = outlines[index];
|
|
29
|
-
if (!outline) continue;
|
|
30
|
-
const element = target.element();
|
|
31
|
-
const rect = geometryBounds(target);
|
|
32
|
-
if (!(rect !== void 0 && (kind !== "hover" || !element?.hasAttribute("data-cms-selected")) && rect.width > 0 && rect.height > 0 && rect.bottom > 0 && rect.top < view.innerHeight && rect.right > 0 && rect.left < view.innerWidth)) {
|
|
33
|
-
const retainPosition = isPending && outline.hasAttribute("data-cms-positioned");
|
|
34
|
-
outline.hidden = !retainPosition;
|
|
35
|
-
labelled = setLabelVisibility(outline, retainPosition, labelled);
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
outline.hidden = false;
|
|
39
|
-
outline.setAttribute("data-cms-positioned", "");
|
|
40
|
-
labelled = setLabelVisibility(outline, true, labelled);
|
|
41
|
-
const left = Math.max(2, rect.left - 3);
|
|
42
|
-
const right = Math.min(view.innerWidth - 2, rect.right + 3);
|
|
43
|
-
outline.style.left = `${left}px`;
|
|
44
|
-
outline.style.top = `${rect.top - 3}px`;
|
|
45
|
-
outline.style.width = `${Math.max(0, right - left)}px`;
|
|
46
|
-
outline.style.height = `${rect.height + 6}px`;
|
|
47
|
-
const labelWidth = outline.querySelector("[data-cms-selection-label-content]")?.offsetWidth ?? 0;
|
|
48
|
-
const labelLeft = Math.max(4 - left, Math.min(0, view.innerWidth - 4 - labelWidth - left));
|
|
49
|
-
outline.style.setProperty("--cms-label-left", `${labelLeft}px`);
|
|
50
|
-
outline.style.setProperty("--cms-label-top", `${Math.max(4 - rect.top, rect.top >= 30 ? -26 : 4)}px`);
|
|
51
|
-
}
|
|
52
|
-
frame = targets.length ? view.requestAnimationFrame(position) : 0;
|
|
53
|
-
};
|
|
54
|
-
return {
|
|
55
|
-
setPending(value) {
|
|
56
|
-
isPending = value;
|
|
57
|
-
host.toggleAttribute("data-cms-pending", value);
|
|
58
|
-
},
|
|
59
|
-
show(geometries, presentation = {}) {
|
|
60
|
-
const targetsChanged = geometries.length !== targets.length || geometries.some((geometry, index) => geometry !== targets[index]);
|
|
61
|
-
const labelText = presentation.match === "fallback" ? `Nearest · ${presentation.label ?? "selected content"}` : presentation.label ?? "Selected";
|
|
62
|
-
if (targetsChanged) {
|
|
63
|
-
if (frame) view.cancelAnimationFrame(frame);
|
|
64
|
-
targets = geometries;
|
|
65
|
-
outlines = geometries.map(() => {
|
|
66
|
-
const outline = root.createElement("div");
|
|
67
|
-
outline.setAttribute(kind === "selection" ? "data-cms-selection-outline" : "data-cms-hover-outline", "");
|
|
68
|
-
if (kind === "selection") {
|
|
69
|
-
const label = root.createElement("span");
|
|
70
|
-
label.setAttribute("data-cms-selection-label-content", "");
|
|
71
|
-
outline.append(label);
|
|
72
|
-
}
|
|
73
|
-
return outline;
|
|
74
|
-
});
|
|
75
|
-
host.replaceChildren(...outlines);
|
|
76
|
-
position();
|
|
77
|
-
}
|
|
78
|
-
markTargets(targets);
|
|
79
|
-
for (const outline of outlines) {
|
|
80
|
-
const label = outline.querySelector("[data-cms-selection-label-content]");
|
|
81
|
-
if (label) label.textContent = labelText;
|
|
82
|
-
if (presentation.match) outline.setAttribute("data-cms-match", presentation.match);
|
|
83
|
-
else outline.removeAttribute("data-cms-match");
|
|
84
|
-
outline.toggleAttribute("data-cms-reveal", presentation.reveal === true);
|
|
85
|
-
}
|
|
86
|
-
if (!presentation.reveal || !outlines.length) return;
|
|
87
|
-
if (revealFrame) view.cancelAnimationFrame(revealFrame);
|
|
88
|
-
revealFrame = view.requestAnimationFrame(() => {
|
|
89
|
-
revealFrame = view.requestAnimationFrame(() => {
|
|
90
|
-
for (const outline of outlines) outline.removeAttribute("data-cms-reveal");
|
|
91
|
-
revealFrame = 0;
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
},
|
|
95
|
-
destroy() {
|
|
96
|
-
if (frame) view.cancelAnimationFrame(frame);
|
|
97
|
-
if (revealFrame) view.cancelAnimationFrame(revealFrame);
|
|
98
|
-
markTargets([]);
|
|
99
|
-
host.remove();
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
function geometryBounds(geometry) {
|
|
104
|
-
const rectangles = geometry.rects();
|
|
105
|
-
if (!rectangles.length) return void 0;
|
|
106
|
-
const left = Math.min(...rectangles.map((rectangle) => rectangle.left));
|
|
107
|
-
const top = Math.min(...rectangles.map((rectangle) => rectangle.top));
|
|
108
|
-
const right = Math.max(...rectangles.map((rectangle) => rectangle.right));
|
|
109
|
-
const bottom = Math.max(...rectangles.map((rectangle) => rectangle.bottom));
|
|
110
|
-
return {
|
|
111
|
-
bottom,
|
|
112
|
-
height: bottom - top,
|
|
113
|
-
left,
|
|
114
|
-
right,
|
|
115
|
-
top,
|
|
116
|
-
width: right - left
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
//#endregion
|
|
121
|
-
export { mountPreviewOverlay };
|
|
122
|
-
//# sourceMappingURL=overlay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.js","names":[],"sources":["../../../../../src/runtime/preview/overlay.ts"],"sourcesContent":["import type { PreviewRegionGeometry } from './regions'\n\ninterface PreviewOverlayPresentation {\n readonly label?: string\n readonly match?: 'exact' | 'fallback'\n readonly reveal?: boolean\n}\n\n/** Preview-only chrome stays separate from the website's layout and element styles. */\nexport function mountPreviewOverlay(root: Document, view: Window, kind: 'selection' | 'hover' = 'selection') {\n const host = root.createElement('div')\n const targetAttribute = kind === 'selection' ? 'data-cms-selected' : 'data-cms-hovered'\n host.setAttribute('data-cms-preview-overlay', '')\n host.setAttribute('aria-hidden', 'true')\n root.documentElement.append(host)\n let markedElements = new Set<Element>()\n let targets: ReadonlyArray<PreviewRegionGeometry> = []\n let outlines: Array<HTMLElement> = []\n let frame = 0\n let isPending = false\n let revealFrame = 0\n\n const markTargets = (geometries: ReadonlyArray<PreviewRegionGeometry>): void => {\n for (const element of markedElements) element.removeAttribute(targetAttribute)\n markedElements = new Set(geometries.flatMap((geometry) => geometry.element() ?? []))\n\n for (const element of markedElements) element.setAttribute(targetAttribute, '')\n }\n\n const setLabelVisibility = (outline: HTMLElement, visible: boolean, labelled: boolean): boolean => {\n const showLabel = kind === 'selection' && visible && !labelled\n\n outline.toggleAttribute('data-cms-selection-label', showLabel)\n\n return labelled || showLabel\n }\n\n const position = (): void => {\n let labelled = false\n\n for (const [index, target] of targets.entries()) {\n const outline = outlines[index]\n\n if (!outline) continue\n const element = target.element()\n const rect = geometryBounds(target)\n\n const visible =\n rect !== undefined &&\n (kind !== 'hover' || !element?.hasAttribute('data-cms-selected')) &&\n rect.width > 0 &&\n rect.height > 0 &&\n rect.bottom > 0 &&\n rect.top < view.innerHeight &&\n rect.right > 0 &&\n rect.left < view.innerWidth\n\n if (!visible) {\n const retainPosition = isPending && outline.hasAttribute('data-cms-positioned')\n\n outline.hidden = !retainPosition\n labelled = setLabelVisibility(outline, retainPosition, labelled)\n\n continue\n }\n\n outline.hidden = false\n outline.setAttribute('data-cms-positioned', '')\n labelled = setLabelVisibility(outline, true, labelled)\n const left = Math.max(2, rect.left - 3)\n const right = Math.min(view.innerWidth - 2, rect.right + 3)\n outline.style.left = `${left}px`\n outline.style.top = `${rect.top - 3}px`\n outline.style.width = `${Math.max(0, right - left)}px`\n outline.style.height = `${rect.height + 6}px`\n const labelWidth = outline.querySelector<HTMLElement>('[data-cms-selection-label-content]')?.offsetWidth ?? 0\n const labelLeft = Math.max(4 - left, Math.min(0, view.innerWidth - 4 - labelWidth - left))\n\n outline.style.setProperty('--cms-label-left', `${labelLeft}px`)\n outline.style.setProperty('--cms-label-top', `${Math.max(4 - rect.top, rect.top >= 30 ? -26 : 4)}px`)\n }\n\n frame = targets.length ? view.requestAnimationFrame(position) : 0\n }\n\n return {\n setPending(value: boolean): void {\n isPending = value\n host.toggleAttribute('data-cms-pending', value)\n },\n show(geometries: ReadonlyArray<PreviewRegionGeometry>, presentation: PreviewOverlayPresentation = {}): void {\n const targetsChanged =\n geometries.length !== targets.length || geometries.some((geometry, index) => geometry !== targets[index])\n\n const labelText =\n presentation.match === 'fallback'\n ? `Nearest · ${presentation.label ?? 'selected content'}`\n : (presentation.label ?? 'Selected')\n\n if (targetsChanged) {\n if (frame) view.cancelAnimationFrame(frame)\n targets = geometries\n outlines = geometries.map(() => {\n const outline = root.createElement('div')\n outline.setAttribute(kind === 'selection' ? 'data-cms-selection-outline' : 'data-cms-hover-outline', '')\n\n if (kind === 'selection') {\n const label = root.createElement('span')\n label.setAttribute('data-cms-selection-label-content', '')\n outline.append(label)\n }\n\n return outline\n })\n host.replaceChildren(...outlines)\n position()\n }\n\n markTargets(targets)\n\n for (const outline of outlines) {\n const label = outline.querySelector<HTMLElement>('[data-cms-selection-label-content]')\n\n if (label) label.textContent = labelText\n\n if (presentation.match) outline.setAttribute('data-cms-match', presentation.match)\n else outline.removeAttribute('data-cms-match')\n\n outline.toggleAttribute('data-cms-reveal', presentation.reveal === true)\n }\n\n if (!presentation.reveal || !outlines.length) return\n\n if (revealFrame) view.cancelAnimationFrame(revealFrame)\n revealFrame = view.requestAnimationFrame(() => {\n revealFrame = view.requestAnimationFrame(() => {\n for (const outline of outlines) outline.removeAttribute('data-cms-reveal')\n revealFrame = 0\n })\n })\n },\n destroy(): void {\n if (frame) view.cancelAnimationFrame(frame)\n\n if (revealFrame) view.cancelAnimationFrame(revealFrame)\n markTargets([])\n host.remove()\n },\n }\n}\n\nfunction geometryBounds(geometry: PreviewRegionGeometry):\n | {\n readonly bottom: number\n readonly height: number\n readonly left: number\n readonly right: number\n readonly top: number\n readonly width: number\n }\n | undefined {\n const rectangles = geometry.rects()\n\n if (!rectangles.length) return undefined\n const left = Math.min(...rectangles.map((rectangle) => rectangle.left))\n const top = Math.min(...rectangles.map((rectangle) => rectangle.top))\n const right = Math.max(...rectangles.map((rectangle) => rectangle.right))\n const bottom = Math.max(...rectangles.map((rectangle) => rectangle.bottom))\n\n return { bottom, height: bottom - top, left, right, top, width: right - left }\n}\n"],"mappings":"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"}
|