@elytracms/studio 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/convex/assets.ts +107 -0
- package/convex/auth.config.ts +15 -0
- package/convex/auth.ts +50 -0
- package/convex/cliTokens.ts +63 -0
- package/convex/cms.ts +174 -0
- package/convex/content.ts +316 -0
- package/convex/delivery.ts +266 -0
- package/convex/functions.ts +35 -0
- package/convex/graphs.ts +51 -0
- package/convex/guard.ts +67 -0
- package/convex/http.ts +30 -0
- package/convex/members.ts +83 -0
- package/convex/publishing.ts +102 -0
- package/convex/references.ts +168 -0
- package/convex/schema.ts +173 -0
- package/convex/sync.ts +322 -0
- package/convex/tsconfig.json +12 -0
- package/convex/users.ts +23 -0
- package/convex/webhooks.ts +85 -0
- package/dist/components/assets/asset-library.d.ts +14 -0
- package/dist/components/assets/asset-library.js +191 -0
- package/dist/components/assets/asset-library.js.map +1 -0
- package/dist/components/assets/asset-metadata.d.ts +34 -0
- package/dist/components/assets/asset-metadata.js +40 -0
- package/dist/components/assets/asset-metadata.js.map +1 -0
- package/dist/components/assets/asset-search.d.ts +7 -0
- package/dist/components/assets/asset-search.js +12 -0
- package/dist/components/assets/asset-search.js.map +1 -0
- package/dist/components/assets/asset-selection.d.ts +17 -0
- package/dist/components/assets/asset-selection.js +33 -0
- package/dist/components/assets/asset-selection.js.map +1 -0
- package/dist/components/assets/assets-store.d.ts +51 -0
- package/dist/components/assets/assets-store.js +153 -0
- package/dist/components/assets/assets-store.js.map +1 -0
- package/dist/components/auth-context.d.ts +38 -0
- package/dist/components/auth-context.js +88 -0
- package/dist/components/auth-context.js.map +1 -0
- package/dist/components/backend-gate.d.ts +19 -0
- package/dist/components/backend-gate.js +63 -0
- package/dist/components/backend-gate.js.map +1 -0
- package/dist/components/breadcrumb-context.d.ts +39 -0
- package/dist/components/breadcrumb-context.js +38 -0
- package/dist/components/breadcrumb-context.js.map +1 -0
- package/dist/components/builder/blocks-model.d.ts +80 -0
- package/dist/components/builder/blocks-model.js +181 -0
- package/dist/components/builder/blocks-model.js.map +1 -0
- package/dist/components/builder/blocks-panel.d.ts +44 -0
- package/dist/components/builder/blocks-panel.js +147 -0
- package/dist/components/builder/blocks-panel.js.map +1 -0
- package/dist/components/builder/builder-store.d.ts +69 -0
- package/dist/components/builder/builder-store.js +294 -0
- package/dist/components/builder/builder-store.js.map +1 -0
- package/dist/components/builder/canvas-stylesheet.d.ts +4 -0
- package/dist/components/builder/canvas-stylesheet.js +24 -0
- package/dist/components/builder/canvas-stylesheet.js.map +1 -0
- package/dist/components/builder/canvas.d.ts +8 -0
- package/dist/components/builder/canvas.js +723 -0
- package/dist/components/builder/canvas.js.map +1 -0
- package/dist/components/builder/clipboard-actions.d.ts +93 -0
- package/dist/components/builder/clipboard-actions.js +246 -0
- package/dist/components/builder/clipboard-actions.js.map +1 -0
- package/dist/components/builder/composition-field-editor.d.ts +11 -0
- package/dist/components/builder/composition-field-editor.js +150 -0
- package/dist/components/builder/composition-field-editor.js.map +1 -0
- package/dist/components/builder/composition-scope.d.ts +16 -0
- package/dist/components/builder/composition-scope.js +7 -0
- package/dist/components/builder/composition-scope.js.map +1 -0
- package/dist/components/builder/drag-session.d.ts +41 -0
- package/dist/components/builder/drag-session.js +51 -0
- package/dist/components/builder/drag-session.js.map +1 -0
- package/dist/components/builder/fixture-thumbnail.d.ts +18 -0
- package/dist/components/builder/fixture-thumbnail.js +97 -0
- package/dist/components/builder/fixture-thumbnail.js.map +1 -0
- package/dist/components/builder/inline-edit.d.ts +142 -0
- package/dist/components/builder/inline-edit.js +136 -0
- package/dist/components/builder/inline-edit.js.map +1 -0
- package/dist/components/builder/insert-context.d.ts +14 -0
- package/dist/components/builder/insert-context.js +65 -0
- package/dist/components/builder/insert-context.js.map +1 -0
- package/dist/components/builder/insert-menu.d.ts +9 -0
- package/dist/components/builder/insert-menu.js +9 -0
- package/dist/components/builder/insert-menu.js.map +1 -0
- package/dist/components/builder/layout-inspector.d.ts +14 -0
- package/dist/components/builder/layout-inspector.js +84 -0
- package/dist/components/builder/layout-inspector.js.map +1 -0
- package/dist/components/builder/node-factory.d.ts +17 -0
- package/dist/components/builder/node-factory.js +90 -0
- package/dist/components/builder/node-factory.js.map +1 -0
- package/dist/components/builder/page-tree.d.ts +3 -0
- package/dist/components/builder/page-tree.js +207 -0
- package/dist/components/builder/page-tree.js.map +1 -0
- package/dist/components/builder/property-inspector.d.ts +1 -0
- package/dist/components/builder/property-inspector.js +233 -0
- package/dist/components/builder/property-inspector.js.map +1 -0
- package/dist/components/builder/rich-text-toolbar.d.ts +4 -0
- package/dist/components/builder/rich-text-toolbar.js +104 -0
- package/dist/components/builder/rich-text-toolbar.js.map +1 -0
- package/dist/components/builder/spacing-handles.d.ts +22 -0
- package/dist/components/builder/spacing-handles.js +213 -0
- package/dist/components/builder/spacing-handles.js.map +1 -0
- package/dist/components/cms/asset-picker.d.ts +12 -0
- package/dist/components/cms/asset-picker.js +60 -0
- package/dist/components/cms/asset-picker.js.map +1 -0
- package/dist/components/cms/bulk-actions.d.ts +60 -0
- package/dist/components/cms/bulk-actions.js +95 -0
- package/dist/components/cms/bulk-actions.js.map +1 -0
- package/dist/components/cms/bulk-bar.d.ts +23 -0
- package/dist/components/cms/bulk-bar.js +26 -0
- package/dist/components/cms/bulk-bar.js.map +1 -0
- package/dist/components/cms/cell-edit.d.ts +91 -0
- package/dist/components/cms/cell-edit.js +144 -0
- package/dist/components/cms/cell-edit.js.map +1 -0
- package/dist/components/cms/cell.d.ts +29 -0
- package/dist/components/cms/cell.js +127 -0
- package/dist/components/cms/cell.js.map +1 -0
- package/dist/components/cms/cms-index.d.ts +8 -0
- package/dist/components/cms/cms-index.js +23 -0
- package/dist/components/cms/cms-index.js.map +1 -0
- package/dist/components/cms/cms-store.d.ts +188 -0
- package/dist/components/cms/cms-store.js +702 -0
- package/dist/components/cms/cms-store.js.map +1 -0
- package/dist/components/cms/collection-table.d.ts +6 -0
- package/dist/components/cms/collection-table.js +250 -0
- package/dist/components/cms/collection-table.js.map +1 -0
- package/dist/components/cms/collections-sidebar.d.ts +9 -0
- package/dist/components/cms/collections-sidebar.js +25 -0
- package/dist/components/cms/collections-sidebar.js.map +1 -0
- package/dist/components/cms/detail-editor.d.ts +7 -0
- package/dist/components/cms/detail-editor.js +386 -0
- package/dist/components/cms/detail-editor.js.map +1 -0
- package/dist/components/cms/doc-state.d.ts +13 -0
- package/dist/components/cms/doc-state.js +18 -0
- package/dist/components/cms/doc-state.js.map +1 -0
- package/dist/components/cms/document-editor-context.d.ts +48 -0
- package/dist/components/cms/document-editor-context.js +23 -0
- package/dist/components/cms/document-editor-context.js.map +1 -0
- package/dist/components/cms/editable-cell.d.ts +22 -0
- package/dist/components/cms/editable-cell.js +176 -0
- package/dist/components/cms/editable-cell.js.map +1 -0
- package/dist/components/cms/field-control.d.ts +8 -0
- package/dist/components/cms/field-control.js +149 -0
- package/dist/components/cms/field-control.js.map +1 -0
- package/dist/components/cms/filter-builder.d.ts +12 -0
- package/dist/components/cms/filter-builder.js +84 -0
- package/dist/components/cms/filter-builder.js.map +1 -0
- package/dist/components/cms/import-export.d.ts +6 -0
- package/dist/components/cms/import-export.js +33 -0
- package/dist/components/cms/import-export.js.map +1 -0
- package/dist/components/cms/new-page-dialog.d.ts +22 -0
- package/dist/components/cms/new-page-dialog.js +42 -0
- package/dist/components/cms/new-page-dialog.js.map +1 -0
- package/dist/components/cms/reference-confirm.d.ts +25 -0
- package/dist/components/cms/reference-confirm.js +124 -0
- package/dist/components/cms/reference-confirm.js.map +1 -0
- package/dist/components/cms/relation-picker.d.ts +16 -0
- package/dist/components/cms/relation-picker.js +47 -0
- package/dist/components/cms/relation-picker.js.map +1 -0
- package/dist/components/cms/use-cell-edit.d.ts +33 -0
- package/dist/components/cms/use-cell-edit.js +125 -0
- package/dist/components/cms/use-cell-edit.js.map +1 -0
- package/dist/components/cms/versions-model.d.ts +15 -0
- package/dist/components/cms/versions-model.js +23 -0
- package/dist/components/cms/versions-model.js.map +1 -0
- package/dist/components/cms/versions-pane.d.ts +14 -0
- package/dist/components/cms/versions-pane.js +86 -0
- package/dist/components/cms/versions-pane.js.map +1 -0
- package/dist/components/cms/view-bar.d.ts +11 -0
- package/dist/components/cms/view-bar.js +80 -0
- package/dist/components/cms/view-bar.js.map +1 -0
- package/dist/components/collab/collab-context.d.ts +34 -0
- package/dist/components/collab/collab-context.js +52 -0
- package/dist/components/collab/collab-context.js.map +1 -0
- package/dist/components/collab/collab-seed.d.ts +27 -0
- package/dist/components/collab/collab-seed.js +42 -0
- package/dist/components/collab/collab-seed.js.map +1 -0
- package/dist/components/components/component-detail.d.ts +9 -0
- package/dist/components/components/component-detail.js +30 -0
- package/dist/components/components/component-detail.js.map +1 -0
- package/dist/components/components/component-status.d.ts +10 -0
- package/dist/components/components/component-status.js +30 -0
- package/dist/components/components/component-status.js.map +1 -0
- package/dist/components/components/components-index.d.ts +8 -0
- package/dist/components/components/components-index.js +42 -0
- package/dist/components/components/components-index.js.map +1 -0
- package/dist/components/components/field-inspector.d.ts +9 -0
- package/dist/components/components/field-inspector.js +38 -0
- package/dist/components/components/field-inspector.js.map +1 -0
- package/dist/components/components/fixture-runner.d.ts +10 -0
- package/dist/components/components/fixture-runner.js +24 -0
- package/dist/components/components/fixture-runner.js.map +1 -0
- package/dist/components/components/registry-browser.d.ts +4 -0
- package/dist/components/components/registry-browser.js +64 -0
- package/dist/components/components/registry-browser.js.map +1 -0
- package/dist/components/current-user-menu.d.ts +13 -0
- package/dist/components/current-user-menu.js +31 -0
- package/dist/components/current-user-menu.js.map +1 -0
- package/dist/components/dev-login-badge.d.ts +9 -0
- package/dist/components/dev-login-badge.js +18 -0
- package/dist/components/dev-login-badge.js.map +1 -0
- package/dist/components/extensions/extensions-view.d.ts +7 -0
- package/dist/components/extensions/extensions-view.js +126 -0
- package/dist/components/extensions/extensions-view.js.map +1 -0
- package/dist/components/guards.d.ts +27 -0
- package/dist/components/guards.js +46 -0
- package/dist/components/guards.js.map +1 -0
- package/dist/components/inspector/inspector-sidebar.d.ts +26 -0
- package/dist/components/inspector/inspector-sidebar.js +17 -0
- package/dist/components/inspector/inspector-sidebar.js.map +1 -0
- package/dist/components/operation-error.d.ts +17 -0
- package/dist/components/operation-error.js +54 -0
- package/dist/components/operation-error.js.map +1 -0
- package/dist/components/playground-badge.d.ts +10 -0
- package/dist/components/playground-badge.js +19 -0
- package/dist/components/playground-badge.js.map +1 -0
- package/dist/components/project-list.d.ts +15 -0
- package/dist/components/project-list.js +52 -0
- package/dist/components/project-list.js.map +1 -0
- package/dist/components/project-session.d.ts +46 -0
- package/dist/components/project-session.js +107 -0
- package/dist/components/project-session.js.map +1 -0
- package/dist/components/project-switcher.d.ts +11 -0
- package/dist/components/project-switcher.js +44 -0
- package/dist/components/project-switcher.js.map +1 -0
- package/dist/components/references/builder-deep-link.d.ts +12 -0
- package/dist/components/references/builder-deep-link.js +53 -0
- package/dist/components/references/builder-deep-link.js.map +1 -0
- package/dist/components/references/references-panel.d.ts +17 -0
- package/dist/components/references/references-panel.js +66 -0
- package/dist/components/references/references-panel.js.map +1 -0
- package/dist/components/routes/redirect-chain.d.ts +9 -0
- package/dist/components/routes/redirect-chain.js +16 -0
- package/dist/components/routes/redirect-chain.js.map +1 -0
- package/dist/components/routes/redirect-manager.d.ts +13 -0
- package/dist/components/routes/redirect-manager.js +24 -0
- package/dist/components/routes/redirect-manager.js.map +1 -0
- package/dist/components/routes/route-list.d.ts +35 -0
- package/dist/components/routes/route-list.js +69 -0
- package/dist/components/routes/route-list.js.map +1 -0
- package/dist/components/routes/routes-shell.d.ts +14 -0
- package/dist/components/routes/routes-shell.js +68 -0
- package/dist/components/routes/routes-shell.js.map +1 -0
- package/dist/components/section-nav.d.ts +17 -0
- package/dist/components/section-nav.js +33 -0
- package/dist/components/section-nav.js.map +1 -0
- package/dist/components/section-state.d.ts +24 -0
- package/dist/components/section-state.js +78 -0
- package/dist/components/section-state.js.map +1 -0
- package/dist/components/section-surface.d.ts +31 -0
- package/dist/components/section-surface.js +46 -0
- package/dist/components/section-surface.js.map +1 -0
- package/dist/components/sections.d.ts +38 -0
- package/dist/components/sections.js +72 -0
- package/dist/components/sections.js.map +1 -0
- package/dist/components/settings-form.d.ts +10 -0
- package/dist/components/settings-form.js +17 -0
- package/dist/components/settings-form.js.map +1 -0
- package/dist/components/studio-context.d.ts +22 -0
- package/dist/components/studio-context.js +48 -0
- package/dist/components/studio-context.js.map +1 -0
- package/dist/components/studio-project-screen.d.ts +19 -0
- package/dist/components/studio-project-screen.js +195 -0
- package/dist/components/studio-project-screen.js.map +1 -0
- package/dist/components/studio-shell.d.ts +18 -0
- package/dist/components/studio-shell.js +64 -0
- package/dist/components/studio-shell.js.map +1 -0
- package/dist/components/theme-context.d.ts +17 -0
- package/dist/components/theme-context.js +26 -0
- package/dist/components/theme-context.js.map +1 -0
- package/dist/components/workspace-gate.d.ts +12 -0
- package/dist/components/workspace-gate.js +27 -0
- package/dist/components/workspace-gate.js.map +1 -0
- package/dist/components/workspace-projects.d.ts +13 -0
- package/dist/components/workspace-projects.js +18 -0
- package/dist/components/workspace-projects.js.map +1 -0
- package/dist/lib/assets/delete-asset.d.ts +34 -0
- package/dist/lib/assets/delete-asset.js +34 -0
- package/dist/lib/assets/delete-asset.js.map +1 -0
- package/dist/lib/assets/image-dimensions.d.ts +18 -0
- package/dist/lib/assets/image-dimensions.js +26 -0
- package/dist/lib/assets/image-dimensions.js.map +1 -0
- package/dist/lib/assets/index.d.ts +9 -0
- package/dist/lib/assets/index.js +10 -0
- package/dist/lib/assets/index.js.map +1 -0
- package/dist/lib/assets/upload-state.d.ts +53 -0
- package/dist/lib/assets/upload-state.js +59 -0
- package/dist/lib/assets/upload-state.js.map +1 -0
- package/dist/lib/assets/upload.d.ts +56 -0
- package/dist/lib/assets/upload.js +125 -0
- package/dist/lib/assets/upload.js.map +1 -0
- package/dist/lib/auth/auth-adapter.d.ts +57 -0
- package/dist/lib/auth/auth-adapter.js +13 -0
- package/dist/lib/auth/auth-adapter.js.map +1 -0
- package/dist/lib/auth/convex-auth-adapter.d.ts +39 -0
- package/dist/lib/auth/convex-auth-adapter.js +171 -0
- package/dist/lib/auth/convex-auth-adapter.js.map +1 -0
- package/dist/lib/auth/dev-auto-login-adapter.d.ts +25 -0
- package/dist/lib/auth/dev-auto-login-adapter.js +40 -0
- package/dist/lib/auth/dev-auto-login-adapter.js.map +1 -0
- package/dist/lib/auth/index.d.ts +28 -0
- package/dist/lib/auth/index.js +61 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/local-auth-adapter.d.ts +57 -0
- package/dist/lib/auth/local-auth-adapter.js +78 -0
- package/dist/lib/auth/local-auth-adapter.js.map +1 -0
- package/dist/lib/auth/route-guard.d.ts +33 -0
- package/dist/lib/auth/route-guard.js +51 -0
- package/dist/lib/auth/route-guard.js.map +1 -0
- package/dist/lib/auth-errors.d.ts +42 -0
- package/dist/lib/auth-errors.js +74 -0
- package/dist/lib/auth-errors.js.map +1 -0
- package/dist/lib/bindings/section-bindings.d.ts +24 -0
- package/dist/lib/bindings/section-bindings.js +9 -0
- package/dist/lib/bindings/section-bindings.js.map +1 -0
- package/dist/lib/clipboard/index.d.ts +7 -0
- package/dist/lib/clipboard/index.js +8 -0
- package/dist/lib/clipboard/index.js.map +1 -0
- package/dist/lib/clipboard/os-clipboard.d.ts +46 -0
- package/dist/lib/clipboard/os-clipboard.js +105 -0
- package/dist/lib/clipboard/os-clipboard.js.map +1 -0
- package/dist/lib/clipboard/paste-issues.d.ts +34 -0
- package/dist/lib/clipboard/paste-issues.js +67 -0
- package/dist/lib/clipboard/paste-issues.js.map +1 -0
- package/dist/lib/clipboard/paste-target.d.ts +20 -0
- package/dist/lib/clipboard/paste-target.js +28 -0
- package/dist/lib/clipboard/paste-target.js.map +1 -0
- package/dist/lib/cms/published-documents.d.ts +30 -0
- package/dist/lib/cms/published-documents.js +75 -0
- package/dist/lib/cms/published-documents.js.map +1 -0
- package/dist/lib/cms-views/index.d.ts +9 -0
- package/dist/lib/cms-views/index.js +10 -0
- package/dist/lib/cms-views/index.js.map +1 -0
- package/dist/lib/cms-views/selection.d.ts +29 -0
- package/dist/lib/cms-views/selection.js +46 -0
- package/dist/lib/cms-views/selection.js.map +1 -0
- package/dist/lib/cms-views/view-model.d.ts +192 -0
- package/dist/lib/cms-views/view-model.js +353 -0
- package/dist/lib/cms-views/view-model.js.map +1 -0
- package/dist/lib/cms-views/views-store.d.ts +70 -0
- package/dist/lib/cms-views/views-store.js +129 -0
- package/dist/lib/cms-views/views-store.js.map +1 -0
- package/dist/lib/data/collection-content.d.ts +105 -0
- package/dist/lib/data/collection-content.js +196 -0
- package/dist/lib/data/collection-content.js.map +1 -0
- package/dist/lib/data/data-store.d.ts +97 -0
- package/dist/lib/data/data-store.js +205 -0
- package/dist/lib/data/data-store.js.map +1 -0
- package/dist/lib/data/index.d.ts +4 -0
- package/dist/lib/data/index.js +8 -0
- package/dist/lib/data/index.js.map +1 -0
- package/dist/lib/data/providers.d.ts +143 -0
- package/dist/lib/data/providers.js +255 -0
- package/dist/lib/data/providers.js.map +1 -0
- package/dist/lib/data/sample-capture.d.ts +30 -0
- package/dist/lib/data/sample-capture.js +70 -0
- package/dist/lib/data/sample-capture.js.map +1 -0
- package/dist/lib/data/sources-store.d.ts +42 -0
- package/dist/lib/data/sources-store.js +120 -0
- package/dist/lib/data/sources-store.js.map +1 -0
- package/dist/lib/dnd/drop-rules.d.ts +219 -0
- package/dist/lib/dnd/drop-rules.js +257 -0
- package/dist/lib/dnd/drop-rules.js.map +1 -0
- package/dist/lib/dnd/gap-drag.d.ts +66 -0
- package/dist/lib/dnd/gap-drag.js +95 -0
- package/dist/lib/dnd/gap-drag.js.map +1 -0
- package/dist/lib/locale/binding-fallback.d.ts +28 -0
- package/dist/lib/locale/binding-fallback.js +66 -0
- package/dist/lib/locale/binding-fallback.js.map +1 -0
- package/dist/lib/locale/fallback.d.ts +43 -0
- package/dist/lib/locale/fallback.js +52 -0
- package/dist/lib/locale/fallback.js.map +1 -0
- package/dist/lib/locale/index.d.ts +6 -0
- package/dist/lib/locale/index.js +7 -0
- package/dist/lib/locale/index.js.map +1 -0
- package/dist/lib/locale/locale-store.d.ts +40 -0
- package/dist/lib/locale/locale-store.js +61 -0
- package/dist/lib/locale/locale-store.js.map +1 -0
- package/dist/lib/locale/locale-switcher.d.ts +10 -0
- package/dist/lib/locale/locale-switcher.js +24 -0
- package/dist/lib/locale/locale-switcher.js.map +1 -0
- package/dist/lib/locale/route-variant.d.ts +14 -0
- package/dist/lib/locale/route-variant.js +11 -0
- package/dist/lib/locale/route-variant.js.map +1 -0
- package/dist/lib/locale/use-studio-locale.d.ts +10 -0
- package/dist/lib/locale/use-studio-locale.js +8 -0
- package/dist/lib/locale/use-studio-locale.js.map +1 -0
- package/dist/lib/operations/asset-repository.d.ts +15 -0
- package/dist/lib/operations/asset-repository.js +56 -0
- package/dist/lib/operations/asset-repository.js.map +1 -0
- package/dist/lib/operations/cms-persistence.d.ts +35 -0
- package/dist/lib/operations/cms-persistence.js +75 -0
- package/dist/lib/operations/cms-persistence.js.map +1 -0
- package/dist/lib/operations/graph-commands.d.ts +140 -0
- package/dist/lib/operations/graph-commands.js +86 -0
- package/dist/lib/operations/graph-commands.js.map +1 -0
- package/dist/lib/operations/graph-persistence.d.ts +27 -0
- package/dist/lib/operations/graph-persistence.js +35 -0
- package/dist/lib/operations/graph-persistence.js.map +1 -0
- package/dist/lib/operations/index.d.ts +13 -0
- package/dist/lib/operations/index.js +14 -0
- package/dist/lib/operations/index.js.map +1 -0
- package/dist/lib/operations/operations-package.d.ts +6 -0
- package/dist/lib/operations/operations-package.js +7 -0
- package/dist/lib/operations/operations-package.js.map +1 -0
- package/dist/lib/operations/persist-queue.d.ts +16 -0
- package/dist/lib/operations/persist-queue.js +18 -0
- package/dist/lib/operations/persist-queue.js.map +1 -0
- package/dist/lib/operations/session-hydration.d.ts +84 -0
- package/dist/lib/operations/session-hydration.js +112 -0
- package/dist/lib/operations/session-hydration.js.map +1 -0
- package/dist/lib/operations/studio-operations.d.ts +59 -0
- package/dist/lib/operations/studio-operations.js +92 -0
- package/dist/lib/operations/studio-operations.js.map +1 -0
- package/dist/lib/persistence/backend-mode.d.ts +69 -0
- package/dist/lib/persistence/backend-mode.js +120 -0
- package/dist/lib/persistence/backend-mode.js.map +1 -0
- package/dist/lib/persistence/convex-adapter.d.ts +34 -0
- package/dist/lib/persistence/convex-adapter.js +681 -0
- package/dist/lib/persistence/convex-adapter.js.map +1 -0
- package/dist/lib/persistence/convex-blob-storage.d.ts +57 -0
- package/dist/lib/persistence/convex-blob-storage.js +97 -0
- package/dist/lib/persistence/convex-blob-storage.js.map +1 -0
- package/dist/lib/persistence/convex-client.d.ts +19 -0
- package/dist/lib/persistence/convex-client.js +40 -0
- package/dist/lib/persistence/convex-client.js.map +1 -0
- package/dist/lib/persistence/index.d.ts +30 -0
- package/dist/lib/persistence/index.js +60 -0
- package/dist/lib/persistence/index.js.map +1 -0
- package/dist/lib/persona/labels.d.ts +23 -0
- package/dist/lib/persona/labels.js +122 -0
- package/dist/lib/persona/labels.js.map +1 -0
- package/dist/lib/rail.d.ts +11 -0
- package/dist/lib/rail.js +26 -0
- package/dist/lib/rail.js.map +1 -0
- package/dist/lib/references/impact.d.ts +64 -0
- package/dist/lib/references/impact.js +62 -0
- package/dist/lib/references/impact.js.map +1 -0
- package/dist/lib/references/index.d.ts +7 -0
- package/dist/lib/references/index.js +8 -0
- package/dist/lib/references/index.js.map +1 -0
- package/dist/lib/references/reference-model.d.ts +125 -0
- package/dist/lib/references/reference-model.js +242 -0
- package/dist/lib/references/reference-model.js.map +1 -0
- package/dist/lib/references/references-store.d.ts +65 -0
- package/dist/lib/references/references-store.js +221 -0
- package/dist/lib/references/references-store.js.map +1 -0
- package/dist/lib/registry/index.d.ts +65 -0
- package/dist/lib/registry/index.js +114 -0
- package/dist/lib/registry/index.js.map +1 -0
- package/dist/lib/registry/preview.d.ts +15 -0
- package/dist/lib/registry/preview.js +110 -0
- package/dist/lib/registry/preview.js.map +1 -0
- package/dist/lib/registry/project-components.d.ts +16 -0
- package/dist/lib/registry/project-components.js +152 -0
- package/dist/lib/registry/project-components.js.map +1 -0
- package/dist/lib/routing/index.d.ts +10 -0
- package/dist/lib/routing/index.js +11 -0
- package/dist/lib/routing/index.js.map +1 -0
- package/dist/lib/routing/routing-analysis.d.ts +26 -0
- package/dist/lib/routing/routing-analysis.js +37 -0
- package/dist/lib/routing/routing-analysis.js.map +1 -0
- package/dist/lib/routing/routing-store.d.ts +50 -0
- package/dist/lib/routing/routing-store.js +72 -0
- package/dist/lib/routing/routing-store.js.map +1 -0
- package/dist/lib/starters/kit-session.d.ts +5 -0
- package/dist/lib/starters/kit-session.js +17 -0
- package/dist/lib/starters/kit-session.js.map +1 -0
- package/dist/lib/theme.d.ts +21 -0
- package/dist/lib/theme.js +32 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/utils.d.ts +11 -0
- package/dist/lib/utils.js +28 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/webhooks/config.d.ts +15 -0
- package/dist/lib/webhooks/config.js +64 -0
- package/dist/lib/webhooks/config.js.map +1 -0
- package/dist/lib/webhooks/dispatcher.d.ts +67 -0
- package/dist/lib/webhooks/dispatcher.js +61 -0
- package/dist/lib/webhooks/dispatcher.js.map +1 -0
- package/dist/lib/webhooks/index.d.ts +11 -0
- package/dist/lib/webhooks/index.js +10 -0
- package/dist/lib/webhooks/index.js.map +1 -0
- package/dist/lib/webhooks/signing.d.ts +15 -0
- package/dist/lib/webhooks/signing.js +24 -0
- package/dist/lib/webhooks/signing.js.map +1 -0
- package/dist/lib/webhooks/tags.d.ts +25 -0
- package/dist/lib/webhooks/tags.js +173 -0
- package/dist/lib/webhooks/tags.js.map +1 -0
- package/dist/lib/working-graph.d.ts +82 -0
- package/dist/lib/working-graph.js +113 -0
- package/dist/lib/working-graph.js.map +1 -0
- package/dist/lib/workspace/index.d.ts +109 -0
- package/dist/lib/workspace/index.js +206 -0
- package/dist/lib/workspace/index.js.map +1 -0
- package/dist/lib/workspace/switcher-source.d.ts +39 -0
- package/dist/lib/workspace/switcher-source.js +23 -0
- package/dist/lib/workspace/switcher-source.js.map +1 -0
- package/dist/lib/workspace/workspace-source.d.ts +47 -0
- package/dist/lib/workspace/workspace-source.js +67 -0
- package/dist/lib/workspace/workspace-source.js.map +1 -0
- package/dist/router/index.d.ts +32 -0
- package/dist/router/index.js +32 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/match.d.ts +75 -0
- package/dist/router/match.js +87 -0
- package/dist/router/match.js.map +1 -0
- package/dist/router/search.d.ts +22 -0
- package/dist/router/search.js +16 -0
- package/dist/router/search.js.map +1 -0
- package/dist/ui/avatar.d.ts +17 -0
- package/dist/ui/avatar.js +38 -0
- package/dist/ui/avatar.js.map +1 -0
- package/dist/ui/badge.d.ts +9 -0
- package/dist/ui/badge.js +23 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/button.d.ts +11 -0
- package/dist/ui/button.js +30 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/card.d.ts +11 -0
- package/dist/ui/card.js +23 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/dialog.d.ts +12 -0
- package/dist/ui/dialog.js +27 -0
- package/dist/ui/dialog.js.map +1 -0
- package/dist/ui/dropdown-menu.d.ts +15 -0
- package/dist/ui/dropdown-menu.js +24 -0
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/ui/field.d.ts +15 -0
- package/dist/ui/field.js +14 -0
- package/dist/ui/field.js.map +1 -0
- package/dist/ui/index.d.ts +14 -0
- package/dist/ui/index.js +15 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/input.d.ts +3 -0
- package/dist/ui/input.js +7 -0
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/inspector.d.ts +18 -0
- package/dist/ui/inspector.js +14 -0
- package/dist/ui/inspector.js.map +1 -0
- package/dist/ui/layout.d.ts +45 -0
- package/dist/ui/layout.js +48 -0
- package/dist/ui/layout.js.map +1 -0
- package/dist/ui/panel.d.ts +12 -0
- package/dist/ui/panel.js +20 -0
- package/dist/ui/panel.js.map +1 -0
- package/dist/ui/separator.d.ts +6 -0
- package/dist/ui/separator.js +7 -0
- package/dist/ui/separator.js.map +1 -0
- package/dist/ui/toolbar.d.ts +9 -0
- package/dist/ui/toolbar.js +16 -0
- package/dist/ui/toolbar.js.map +1 -0
- package/dist/ui/typography.d.ts +50 -0
- package/dist/ui/typography.js +43 -0
- package/dist/ui/typography.js.map +1 -0
- package/package.json +149 -0
- package/src/styles/studio.css +101 -0
- package/src/styles/tokens.css +63 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Link, STUDIO_PROJECT_ROUTE, studioPath, useNavigate } from '@elytracms/studio/router';
|
|
3
|
+
import { CircleCheck, ExternalLink, Eye, EyeOff, History, Languages, Lock, MoreHorizontal, Trash2, } from 'lucide-react';
|
|
4
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { documentKey, isBlocksField, isFieldLocalized, isSingleton, resolveField, singletonDocId, urlForDocument, } from '@elytracms/cms-core';
|
|
6
|
+
import { Badge, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Field, Heading, Panel, PanelHeader, Row, Spacer, Stack, Text, } from '@elytracms/studio/ui';
|
|
7
|
+
import { cn } from '@elytracms/studio/lib/utils';
|
|
8
|
+
import { LocaleSwitcher, displayedFieldFallback, hasLocaleVariant, localeChipLabel, setStudioLocale, } from '@elytracms/studio/lib/locale';
|
|
9
|
+
import { parseDocumentFieldPath } from '@elytracms/studio/lib/references';
|
|
10
|
+
import { FallbackChip, fallbackTitle } from './cell';
|
|
11
|
+
import { FieldControl } from './field-control';
|
|
12
|
+
import { CompositionFieldEditor } from '../builder/composition-field-editor';
|
|
13
|
+
import { fieldLabel, useCms } from './cms-store';
|
|
14
|
+
import { DocStateBadge } from './doc-state';
|
|
15
|
+
import { ReferenceConfirmDialog } from './reference-confirm';
|
|
16
|
+
import { ReferencesPanel } from '../references/references-panel';
|
|
17
|
+
import { InspectorSidebar } from '../inspector/inspector-sidebar';
|
|
18
|
+
import { DocumentEditorProvider } from './document-editor-context';
|
|
19
|
+
import { VersionsPane } from './versions-pane';
|
|
20
|
+
import { useSetBreadcrumb } from '../breadcrumb-context';
|
|
21
|
+
import { resolveDeploymentFrontendUrl, resolveDeploymentRoutes } from '@elytracms/studio/lib/workspace';
|
|
22
|
+
import { usePublishedDocuments } from '@elytracms/studio/lib/cms/published-documents';
|
|
23
|
+
export function DetailEditor({ projectId, collectionId, documentId, focusPath, }) {
|
|
24
|
+
const cms = useCms();
|
|
25
|
+
const collection = cms.getCollection(collectionId);
|
|
26
|
+
const doc = cms.getDocument({ collection: collectionId, id: documentId });
|
|
27
|
+
// EC-217: a singleton collection's one document (id === collection id) is
|
|
28
|
+
// materialized lazily on first open. Whichever path lands here — the collection
|
|
29
|
+
// index route or a direct deep link / bookmark to /cms/<id>/<id> — create it if
|
|
30
|
+
// missing so the fixed singleton address always resolves, never "not found".
|
|
31
|
+
const isSingletonDoc = collection !== undefined && isSingleton(collection) && documentId === singletonDocId(collection);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (isSingletonDoc && doc === undefined)
|
|
34
|
+
cms.ensureSingletonDocument(collectionId);
|
|
35
|
+
}, [isSingletonDoc, doc, cms, collectionId]);
|
|
36
|
+
if (!collection || !doc) {
|
|
37
|
+
if (isSingletonDoc) {
|
|
38
|
+
return (_jsx("div", { className: "grid h-full place-items-center p-8", children: _jsxs(Text, { size: "sm", tone: "muted", children: ["Opening ", collection?.form?.label ?? collectionId, "\u2026"] }) }));
|
|
39
|
+
}
|
|
40
|
+
return (_jsx("div", { className: "grid h-full place-items-center p-8", children: _jsxs(Stack, { gap: "3", align: "center", className: "text-center", children: [_jsx(Heading, { level: 2, size: "h2", children: "Document not found" }), _jsxs(Link, { to: STUDIO_PROJECT_ROUTE, params: { projectId, _splat: studioPath.cmsCollection(collectionId) }, className: "text-sm text-primary hover:underline", children: ["Back to ", collectionId] })] }) }));
|
|
41
|
+
}
|
|
42
|
+
return (_jsx(EditorBody, { projectId: projectId, collection: collection, doc: doc, focusPath: focusPath }, `${collectionId}/${documentId}`));
|
|
43
|
+
}
|
|
44
|
+
function EditorBody({ projectId, collection, doc, focusPath, }) {
|
|
45
|
+
const cms = useCms();
|
|
46
|
+
const navigate = useNavigate();
|
|
47
|
+
// EC-217: a singleton collection has no list — there is nowhere to go "back"
|
|
48
|
+
// to, and its one document is fixed (never deleted). The header drops the
|
|
49
|
+
// back-crumb/id line and the Delete action accordingly.
|
|
50
|
+
const singleton = isSingleton(collection);
|
|
51
|
+
const [draft, setDraft] = useState(() => structuredClone(doc));
|
|
52
|
+
// The studio's ambient active locale (EC-176): the form displays and edits
|
|
53
|
+
// exactly this locale — switched via the shared LocaleSwitcher, never per field.
|
|
54
|
+
const locale = cms.activeLocale;
|
|
55
|
+
// Bumped when a version restore replaces the draft out-of-band, to remount the
|
|
56
|
+
// (uncontrolled) canvas editor from the restored value (EC-224).
|
|
57
|
+
const [restoreNonce, setRestoreNonce] = useState(0);
|
|
58
|
+
// EC-173: unpublish/delete go through the reference-aware confirmation.
|
|
59
|
+
const [confirmAction, setConfirmAction] = useState(null);
|
|
60
|
+
// Stable so the document-editor context value (EC-224) doesn't churn each render.
|
|
61
|
+
const ref = useMemo(() => ({ collection: collection.id, id: doc.id }), [collection.id, doc.id]);
|
|
62
|
+
const confirmTargets = useMemo(() => [{ collection: collection.id, id: doc.id }], [collection.id, doc.id]);
|
|
63
|
+
// EC-226: the draft/published VIEW perspective. Draft = the editable working
|
|
64
|
+
// draft; Published = the pinned published snapshot, rendered read-only. Only
|
|
65
|
+
// meaningful when the document is published.
|
|
66
|
+
const published = cms.isPublished(ref);
|
|
67
|
+
const [perspective, setPerspective] = useState('draft');
|
|
68
|
+
const [publishedSnapshot, setPublishedSnapshot] = useState({ status: 'loading' });
|
|
69
|
+
// Snap back to Draft if the document is unpublished while viewing Published.
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (!published)
|
|
72
|
+
setPerspective('draft');
|
|
73
|
+
}, [published]);
|
|
74
|
+
// Load the pinned published snapshot when viewing Published (fresh each switch,
|
|
75
|
+
// so it reflects the current pin after a re-publish). `loadDocumentVersions` is
|
|
76
|
+
// a stable callback, so this only re-runs on a perspective/ref change.
|
|
77
|
+
const loadVersions = cms.loadDocumentVersions;
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (perspective !== 'published')
|
|
80
|
+
return;
|
|
81
|
+
let cancelled = false;
|
|
82
|
+
setPublishedSnapshot({ status: 'loading' });
|
|
83
|
+
void (async () => {
|
|
84
|
+
const view = await loadVersions(ref);
|
|
85
|
+
if (cancelled)
|
|
86
|
+
return;
|
|
87
|
+
const pinned = view.publishedVersion !== undefined
|
|
88
|
+
? view.versions.find((v) => v.version === view.publishedVersion)?.snapshot
|
|
89
|
+
: undefined;
|
|
90
|
+
setPublishedSnapshot(pinned ? { status: 'ready', doc: pinned } : { status: 'missing' });
|
|
91
|
+
})();
|
|
92
|
+
return () => {
|
|
93
|
+
cancelled = true;
|
|
94
|
+
};
|
|
95
|
+
}, [perspective, ref, loadVersions]);
|
|
96
|
+
// The whole fieldset is read-only when viewing Published. The form/canvas
|
|
97
|
+
// render the pinned snapshot ONLY once it has loaded — never the draft, which
|
|
98
|
+
// must not be presented as published; until then the body shows a placeholder.
|
|
99
|
+
const viewReadOnly = perspective === 'published';
|
|
100
|
+
const viewDoc = viewReadOnly && publishedSnapshot.status === 'ready' ? publishedSnapshot.doc : draft;
|
|
101
|
+
const publishedPending = viewReadOnly && publishedSnapshot.status !== 'ready';
|
|
102
|
+
const dirty = JSON.stringify(draft) !== JSON.stringify(doc);
|
|
103
|
+
const issues = useMemo(() => cms.validate(draft), [cms, draft]);
|
|
104
|
+
const errorCount = issues.filter((i) => i.severity === 'error').length;
|
|
105
|
+
const hasErrors = errorCount > 0;
|
|
106
|
+
// --- Autosave (EC-225) -----------------------------------------------------
|
|
107
|
+
// The draft persists automatically 1s after the last edit; there is no manual
|
|
108
|
+
// Save button. Refs let the unmount flush read the latest values without
|
|
109
|
+
// re-subscribing the effects.
|
|
110
|
+
const draftRef = useRef(draft);
|
|
111
|
+
draftRef.current = draft;
|
|
112
|
+
const dirtyRef = useRef(dirty);
|
|
113
|
+
dirtyRef.current = dirty;
|
|
114
|
+
const cmsRef = useRef(cms);
|
|
115
|
+
cmsRef.current = cms;
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
if (!dirty)
|
|
118
|
+
return;
|
|
119
|
+
const timer = window.setTimeout(() => cmsRef.current.saveDocument(draftRef.current), 1000);
|
|
120
|
+
return () => window.clearTimeout(timer);
|
|
121
|
+
}, [dirty, draft]);
|
|
122
|
+
// Flush a still-pending edit on unmount (navigating away inside the debounce
|
|
123
|
+
// window) so nothing is lost. Unmount-only — refs carry the latest state.
|
|
124
|
+
useEffect(() => () => {
|
|
125
|
+
if (dirtyRef.current)
|
|
126
|
+
cmsRef.current.saveDocument(draftRef.current);
|
|
127
|
+
}, []);
|
|
128
|
+
const errorsByField = useMemo(() => {
|
|
129
|
+
const map = new Map();
|
|
130
|
+
for (const issue of issues) {
|
|
131
|
+
// validateDocument populates meta.field for field-level issues (works for
|
|
132
|
+
// both `values` and `localized/<locale>` paths, unlike positional indexing).
|
|
133
|
+
const field = issue.meta?.field;
|
|
134
|
+
if (typeof field === 'string' && !map.has(field))
|
|
135
|
+
map.set(field, issue.message);
|
|
136
|
+
}
|
|
137
|
+
return map;
|
|
138
|
+
}, [issues]);
|
|
139
|
+
const tabs = collection.form?.tabs ?? ['main'];
|
|
140
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
141
|
+
const tabFields = collection.fields.filter((f) => (f.form?.tab ?? tabs[0]) === activeTab && !f.form?.hidden);
|
|
142
|
+
const groups = groupFields(tabFields, collection);
|
|
143
|
+
// EC-188 (AD-12): a composition (`blocks`) field is a special content feature,
|
|
144
|
+
// not a field-row — it takes over its tab with the full page-builder canvas.
|
|
145
|
+
// Convention: such a field lives on its own dedicated fieldset tab.
|
|
146
|
+
const canvasField = tabFields.find(isBlocksField);
|
|
147
|
+
// Reference deep links (EC-172): `?field=<index path>` pinpoints the exact
|
|
148
|
+
// field — switch to its tab (and locale for localized paths), scroll the
|
|
149
|
+
// control into view, and ring-highlight the field group.
|
|
150
|
+
const [highlightedField, setHighlightedField] = useState(null);
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
if (!focusPath)
|
|
153
|
+
return;
|
|
154
|
+
const parsed = parseDocumentFieldPath(focusPath);
|
|
155
|
+
const field = parsed ? collection.fields.find((f) => f.name === parsed.field) : undefined;
|
|
156
|
+
if (!parsed || !field)
|
|
157
|
+
return;
|
|
158
|
+
const fieldTabs = collection.form?.tabs ?? ['main'];
|
|
159
|
+
setActiveTab(field.form?.tab ?? fieldTabs[0]);
|
|
160
|
+
if (parsed.locale !== undefined && cms.localeConfig.locales.includes(parsed.locale)) {
|
|
161
|
+
setStudioLocale(parsed.locale);
|
|
162
|
+
}
|
|
163
|
+
setHighlightedField(field.name);
|
|
164
|
+
const scrollTimer = window.setTimeout(() => {
|
|
165
|
+
// Some controls (relation/asset pickers) don't render the input id —
|
|
166
|
+
// the field label (`htmlFor`) is always present.
|
|
167
|
+
const control = document.getElementById(`f-${field.name}`) ??
|
|
168
|
+
document.querySelector(`label[for="${CSS.escape(`f-${field.name}`)}"]`);
|
|
169
|
+
control?.scrollIntoView({ block: 'center', behavior: 'smooth' });
|
|
170
|
+
}, 60);
|
|
171
|
+
const clearTimer = window.setTimeout(() => setHighlightedField(null), 3200);
|
|
172
|
+
return () => {
|
|
173
|
+
window.clearTimeout(scrollTimer);
|
|
174
|
+
window.clearTimeout(clearTimer);
|
|
175
|
+
};
|
|
176
|
+
}, [focusPath, collection, cms.localeConfig]);
|
|
177
|
+
function getValue(field) {
|
|
178
|
+
// EC-226: read from the active VIEW (the draft, or the pinned published
|
|
179
|
+
// snapshot when viewing Published) — never directly from `draft`.
|
|
180
|
+
if (isFieldLocalized(collection, field.name)) {
|
|
181
|
+
// Display the explicit variant when it exists, else the EC-018 fallback
|
|
182
|
+
// value — labeled as such by the field's fallback marker (EC-176), so a
|
|
183
|
+
// German view shows the English text visibly, never an unexplained blank.
|
|
184
|
+
const explicit = viewDoc.localized?.[locale]?.[field.name];
|
|
185
|
+
if (explicit !== undefined)
|
|
186
|
+
return explicit;
|
|
187
|
+
return resolveField(collection, viewDoc, field.name, locale, cms.localeConfig).value;
|
|
188
|
+
}
|
|
189
|
+
return viewDoc.values[field.name];
|
|
190
|
+
}
|
|
191
|
+
function setValue(field, value) {
|
|
192
|
+
setDraft((d) => {
|
|
193
|
+
if (isFieldLocalized(collection, field.name)) {
|
|
194
|
+
const perLocale = { ...(d.localized?.[locale] ?? {}) };
|
|
195
|
+
if (value === undefined)
|
|
196
|
+
delete perLocale[field.name];
|
|
197
|
+
else
|
|
198
|
+
perLocale[field.name] = value;
|
|
199
|
+
return { ...d, localized: { ...d.localized, [locale]: perLocale } };
|
|
200
|
+
}
|
|
201
|
+
const values = { ...d.values };
|
|
202
|
+
if (value === undefined)
|
|
203
|
+
delete values[field.name];
|
|
204
|
+
else
|
|
205
|
+
values[field.name] = value;
|
|
206
|
+
return { ...d, values };
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
function save() {
|
|
210
|
+
cms.saveDocument(draft);
|
|
211
|
+
}
|
|
212
|
+
// EC-224: a version restore swaps the working draft for an older snapshot; the
|
|
213
|
+
// open editor adopts it so the form/canvas re-render from the restored content
|
|
214
|
+
// (the operation already persisted it, so it lands clean/non-dirty).
|
|
215
|
+
function replaceDraft(next) {
|
|
216
|
+
setDraft(next);
|
|
217
|
+
// The canvas editor is uncontrolled after mount (it builds its graph once and
|
|
218
|
+
// lifts edits OUT). A restore replaces the draft from outside, so bump the
|
|
219
|
+
// nonce to REMOUNT the canvas from the restored value — otherwise it keeps the
|
|
220
|
+
// pre-restore tree and the next edit would clobber the restore.
|
|
221
|
+
setRestoreNonce((n) => n + 1);
|
|
222
|
+
}
|
|
223
|
+
// The frame-owned `Versions` pane (EC-224) — appended after any view-supplied
|
|
224
|
+
// pane (the canvas's `Properties`). One instance feeds both the form view's
|
|
225
|
+
// sidebar and the canvas view's sidebar.
|
|
226
|
+
const versionsPane = useMemo(() => ({
|
|
227
|
+
id: 'versions',
|
|
228
|
+
label: 'Versions',
|
|
229
|
+
icon: _jsx(History, { className: "size-3.5" }),
|
|
230
|
+
render: () => _jsx(VersionsPane, {}),
|
|
231
|
+
}), []);
|
|
232
|
+
const trailingPanes = useMemo(() => [versionsPane], [versionsPane]);
|
|
233
|
+
function handlePublish() {
|
|
234
|
+
// Capture the latest edit before the snapshot in case Publish is clicked
|
|
235
|
+
// inside the autosave debounce window; the serial persister queue runs the
|
|
236
|
+
// upsert before the publish so the snapshot is the saved draft (EC-225).
|
|
237
|
+
if (dirty)
|
|
238
|
+
save();
|
|
239
|
+
// Publish snapshots the draft as a version and pins it (EC-224). The live
|
|
240
|
+
// row stays a continuous draft — published-ness is the version pointer
|
|
241
|
+
// (`cms.isPublished`). Pre-gated by `disabled={hasErrors}`; the optimistic
|
|
242
|
+
// flip reconciles against the backend (EC-225), so any rejection the gate
|
|
243
|
+
// doesn't cover (schema divergence, transport) self-corrects the badge.
|
|
244
|
+
void cms.publishDocument(ref);
|
|
245
|
+
}
|
|
246
|
+
function handleConfirmedAction() {
|
|
247
|
+
if (confirmAction === 'unpublish') {
|
|
248
|
+
setConfirmAction(null);
|
|
249
|
+
void cms.unpublishDocument(ref);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (confirmAction === 'delete') {
|
|
253
|
+
setConfirmAction(null);
|
|
254
|
+
cms.deleteDocument(ref);
|
|
255
|
+
void navigate({
|
|
256
|
+
to: STUDIO_PROJECT_ROUTE,
|
|
257
|
+
params: { projectId, _splat: studioPath.cmsCollection(collection.id) },
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// While the published snapshot is pending, don't derive the title from the
|
|
262
|
+
// draft (it must not read as the published title) — fall back to the id.
|
|
263
|
+
const title = publishedPending ? '' : primaryTitle(viewDoc, collection, locale, cms.localeConfig);
|
|
264
|
+
const titleFallback = publishedPending
|
|
265
|
+
? null
|
|
266
|
+
: displayedFieldFallback(collection, viewDoc, collection.titleField ?? 'title', locale, cms.localeConfig);
|
|
267
|
+
// EC-214: the document is the active record — contribute the collection (a
|
|
268
|
+
// link back to its list) and the document title to the global header
|
|
269
|
+
// breadcrumb, replacing the editor's own back-link + collection/id line. A
|
|
270
|
+
// singleton has no list, so it contributes a single, non-linked crumb. The
|
|
271
|
+
// title tracks the live draft so a rename updates the crumb immediately.
|
|
272
|
+
const breadcrumbItems = useMemo(() => {
|
|
273
|
+
const collectionLabel = collection.form?.label ?? collection.id;
|
|
274
|
+
if (singleton)
|
|
275
|
+
return [{ label: collectionLabel }];
|
|
276
|
+
const docTitle = primaryTitle(draft, collection, locale, cms.localeConfig) || doc.id;
|
|
277
|
+
return [
|
|
278
|
+
{
|
|
279
|
+
label: collectionLabel,
|
|
280
|
+
to: STUDIO_PROJECT_ROUTE,
|
|
281
|
+
params: { projectId, _splat: studioPath.cmsCollection(collection.id) },
|
|
282
|
+
},
|
|
283
|
+
{ label: docTitle },
|
|
284
|
+
];
|
|
285
|
+
}, [singleton, collection, draft, locale, cms.localeConfig, doc.id, projectId]);
|
|
286
|
+
useSetBreadcrumb(breadcrumbItems);
|
|
287
|
+
// EC-205/EC-216: the LIVE URL derives strictly from PUBLISHED data — the
|
|
288
|
+
// document's pinned published snapshot and its published ancestors — never the
|
|
289
|
+
// draft (an unpublished slug/parent edit must not leak into the live URL). The
|
|
290
|
+
// pool is exactly what the live site serves, so a published doc resolves to the
|
|
291
|
+
// URL visitors actually get; `undefined` until the doc is published (and the
|
|
292
|
+
// pool has loaded). The collection being routable gates the disabled hint below.
|
|
293
|
+
const publishedDocs = usePublishedDocuments(cms.projectId, collection.id);
|
|
294
|
+
const routableCollection = useMemo(() => resolveDeploymentRoutes().some((route) => route.document?.collection === collection.id), [collection.id]);
|
|
295
|
+
const liveUrl = useMemo(() => {
|
|
296
|
+
const published = publishedDocs.byId.get(doc.id);
|
|
297
|
+
if (!published)
|
|
298
|
+
return undefined;
|
|
299
|
+
return urlForDocument({
|
|
300
|
+
routes: resolveDeploymentRoutes(),
|
|
301
|
+
frontendUrl: resolveDeploymentFrontendUrl(),
|
|
302
|
+
localeConfig: cms.localeConfig,
|
|
303
|
+
}, collection, published, { siblings: [...publishedDocs.byId.values()], locale });
|
|
304
|
+
}, [publishedDocs, collection, doc.id, locale, cms.localeConfig]);
|
|
305
|
+
return (_jsx(DocumentEditorProvider, { value: {
|
|
306
|
+
projectId,
|
|
307
|
+
collection,
|
|
308
|
+
docRef: ref,
|
|
309
|
+
draft,
|
|
310
|
+
dirty,
|
|
311
|
+
hasErrors,
|
|
312
|
+
viewReadOnly,
|
|
313
|
+
save,
|
|
314
|
+
replaceDraft,
|
|
315
|
+
}, children: _jsxs("div", { className: cn('flex h-full min-h-0 flex-col', viewReadOnly && 'bg-info/[0.04]'), children: [_jsxs("div", { className: "shrink-0 border-b border-border px-4 py-3 sm:px-6", children: [_jsxs(Row, { gap: "3", children: [_jsxs(Row, { gap: "2", align: "center", className: "min-w-0", children: [_jsx(Heading, { level: 1, size: "h2", className: "truncate", children: singleton ? collection.form?.label ?? collection.id : title || doc.id }), singleton ? null : _jsx(FallbackChip, { fallback: titleFallback, testId: "doc-title-fallback" })] }), _jsx(Spacer, {}), _jsx(Text, { size: "xs", tone: "muted", className: "whitespace-nowrap", "data-testid": "autosave-status", children: cms.persistError ? 'Save failed' : dirty ? 'Saving…' : 'Saved' }), _jsx(DocStateBadge, { published: cms.isPublished(ref) }), routableCollection ? (liveUrl?.href ? (_jsx(Button, { asChild: true, variant: "outline", size: "sm", title: `Open ${liveUrl.path}`, children: _jsxs("a", { href: liveUrl.href, target: "_blank", rel: "noreferrer", "data-testid": "view-live", children: [_jsx(ExternalLink, {}), " View live"] }) })) : (_jsxs(Button, { variant: "outline", size: "sm", disabled: true, "data-testid": "view-live-disabled", title: publishedDocs.status === 'loading'
|
|
316
|
+
? 'Loading the live URL…'
|
|
317
|
+
: !cms.isPublished(ref)
|
|
318
|
+
? 'Publish to view the live page'
|
|
319
|
+
: 'Set frontendUrl in elytra.config.ts to enable', children: [_jsx(ExternalLink, {}), " View live"] }))) : null, _jsxs(Button, { size: "sm", onClick: handlePublish, disabled: hasErrors || viewReadOnly, title: viewReadOnly
|
|
320
|
+
? 'Switch to Draft to publish'
|
|
321
|
+
: hasErrors
|
|
322
|
+
? `Fix ${errorCount} ${errorCount === 1 ? 'issue' : 'issues'} to publish`
|
|
323
|
+
: undefined, children: [_jsx(Eye, {}), " Publish"] }), cms.isPublished(ref) || !singleton ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": "More actions", children: _jsx(MoreHorizontal, {}) }) }), _jsxs(DropdownMenuContent, { align: "end", children: [cms.isPublished(ref) ? (_jsxs(DropdownMenuItem, { onClick: () => setConfirmAction('unpublish'), children: [_jsx(EyeOff, {}), " Unpublish"] })) : null, singleton ? null : (_jsxs(DropdownMenuItem, { "data-testid": "doc-delete", className: "text-destructive", onClick: () => setConfirmAction('delete'), children: [_jsx(Trash2, {}), " Delete"] }))] })] })) : null] }), _jsxs(Row, { gap: "3", className: "mt-3", wrap: true, children: [_jsx(LocaleSwitcher, {}), tabs.length > 1 ? (_jsx(Row, { gap: "1", children: tabs.map((tab) => (_jsx("button", { type: "button", "aria-pressed": tab === activeTab, onClick: () => setActiveTab(tab), className: cn('rounded-md px-2.5 py-1 text-xs font-medium capitalize transition-colors', tab === activeTab ? 'bg-accent text-accent-foreground' : 'text-muted-foreground hover:bg-muted'), children: tab }, tab))) })) : null, _jsx(Spacer, {}), _jsxs(Row, { gap: "px", className: "rounded-md bg-muted/60 p-0.5", children: [_jsx(PerspectiveButton, { label: "Draft", active: perspective === 'draft', onClick: () => setPerspective('draft') }), _jsx(PerspectiveButton, { label: "Published", active: perspective === 'published', accent: "info", disabled: !published, title: published ? undefined : 'Publish this document to view its published version', onClick: () => setPerspective('published') })] })] })] }), viewReadOnly ? (_jsxs(Row, { gap: "2", className: "shrink-0 border-b border-info/30 bg-info/10 px-4 py-1.5 text-info sm:px-6", "data-testid": "published-view-banner", children: [_jsx(Lock, { className: "size-3.5 shrink-0", "aria-hidden": true }), _jsx(Text, { size: "xs", className: "text-info", children: "Viewing the published version \u2014 read-only." }), _jsx(Spacer, {}), _jsx("button", { type: "button", onClick: () => setPerspective('draft'), className: "text-xs font-medium underline-offset-2 hover:underline", children: "Switch to Draft" })] })) : null, publishedPending ? (_jsx("div", { className: "grid min-h-0 flex-1 place-items-center p-8", children: _jsx(Text, { size: "sm", tone: "muted", children: publishedSnapshot.status === 'loading'
|
|
324
|
+
? 'Loading the published version…'
|
|
325
|
+
: 'No published version found for this document.' }) })) : canvasField ? (_jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: _jsx(CompositionFieldEditor, { field: canvasField, value: getValue(canvasField), onChange: (v) => setValue(canvasField, v), readOnly: viewReadOnly || cms.isFieldReadOnly(collection.id, canvasField), trailingPanes: trailingPanes }, `${canvasField.name}:${restoreNonce}:${perspective}`) })) : (_jsxs("div", { className: "flex min-h-0 flex-1 overflow-hidden", children: [_jsx("div", { className: "min-h-0 flex-1 overflow-auto p-4 sm:p-6", children: _jsx("div", { className: "mx-auto w-full max-w-2xl", children: _jsxs(Stack, { gap: "6", children: [groups.map((group) => (_jsxs(Panel, { children: [_jsx(PanelHeader, { children: _jsx(Text, { size: "sm", weight: "semibold", className: "capitalize", children: group.name }) }), _jsx(Stack, { gap: "4", className: "p-4", children: group.fields.map((field) => {
|
|
326
|
+
// Field-level read-only (the Lock badge) vs the view-level
|
|
327
|
+
// read-only (Published perspective) — the control honors both.
|
|
328
|
+
const fieldLevelReadOnly = cms.isFieldReadOnly(collection.id, field);
|
|
329
|
+
const fieldReadOnly = viewReadOnly || fieldLevelReadOnly;
|
|
330
|
+
const localized = isFieldLocalized(collection, field.name);
|
|
331
|
+
// Fallback visibility (EC-176): the control DISPLAYS the
|
|
332
|
+
// fallback value, and this marker says so on the exact field.
|
|
333
|
+
const fallback = localized
|
|
334
|
+
? displayedFieldFallback(collection, viewDoc, field.name, locale, cms.localeConfig)
|
|
335
|
+
: null;
|
|
336
|
+
// The variant was created in this editing session (the
|
|
337
|
+
// saved document doesn't have it yet): editing a
|
|
338
|
+
// fallback-shown value is an explicit translation act. Moot
|
|
339
|
+
// (and hidden) while viewing the read-only published snapshot.
|
|
340
|
+
const newlyTranslated = !viewReadOnly &&
|
|
341
|
+
localized &&
|
|
342
|
+
hasLocaleVariant(draft, field.name, locale) &&
|
|
343
|
+
!hasLocaleVariant(doc, field.name, locale);
|
|
344
|
+
return (_jsx(Field, { className: cn('rounded-md transition-shadow', highlightedField === field.name &&
|
|
345
|
+
'bg-primary/5 p-2 ring-2 ring-primary/70'), label: _jsxs(Row, { gap: "2", children: [_jsx("span", { children: fieldLabel(field) }), field.validation?.required ? _jsx("span", { className: "text-destructive", children: "*" }) : null, localized ? _jsx(Badge, { variant: "outline", children: locale }) : null, fallback ? (_jsxs(Badge, { variant: "warning", title: fallbackTitle(fallback), "data-testid": `field-fallback-${field.name}`, children: ["showing ", localeChipLabel(fallback.sourceLocale)] })) : null, newlyTranslated ? (_jsxs(Badge, { variant: "success", "data-testid": `field-translated-${field.name}`, children: [_jsx(Languages, { className: "size-3" }), " translated to ", localeChipLabel(locale)] })) : null, fieldLevelReadOnly ? (_jsxs(Badge, { variant: "outline", children: [_jsx(Lock, { className: "size-3" }), " read-only"] })) : null, _jsx(Spacer, {})] }), htmlFor: `f-${field.name}`, hint: fallback ? (_jsxs(_Fragment, { children: ["Showing the ", localeChipLabel(fallback.sourceLocale), " (fallback) value \u2014 edit to translate to ", localeChipLabel(locale), ". Clearing the", ' ', localeChipLabel(locale), " text falls back again."] })) : (field.form?.description), error: fieldReadOnly ? undefined : errorsByField.get(field.name), children: _jsx(FieldControl, { id: `f-${field.name}`, field: field, value: getValue(field), onChange: (v) => setValue(field, v), readOnly: fieldReadOnly }) }, field.name));
|
|
346
|
+
}) })] }, group.name))), _jsx(ReferencesPanel, { projectId: projectId, source: { type: 'document', id: documentKey(ref) }, target: { type: 'document', id: documentKey(ref) } })] }) }) }), _jsx(InspectorSidebar, { panes: trailingPanes, className: "w-[320px] shrink-0 border-l border-border" })] })), _jsx("div", { className: "shrink-0 border-t border-border px-4 py-2 sm:px-6", children: _jsxs(Row, { gap: "2", children: [viewReadOnly ? (_jsxs(Badge, { variant: "outline", children: [_jsx(Lock, { className: "size-3" }), " read-only"] })) : (_jsxs(_Fragment, { children: [issues.length === 0 ? (_jsxs(Badge, { variant: "success", children: [_jsx(CircleCheck, { className: "size-3" }), " valid"] })) : (_jsxs(Badge, { variant: issues.some((i) => i.severity === 'error') ? 'error' : 'warning', children: [issues.length, " ", issues.length === 1 ? 'issue' : 'issues'] })), _jsx(Text, { size: "xs", tone: "muted", className: "min-w-0 truncate", children: issues[0]?.message ?? 'Document satisfies the collection schema.' })] })), _jsx(Spacer, {})] }) }), confirmAction !== null ? (_jsx(ReferenceConfirmDialog, { projectId: projectId, action: confirmAction, targets: confirmTargets, open: true, onOpenChange: (open) => {
|
|
347
|
+
if (!open)
|
|
348
|
+
setConfirmAction(null);
|
|
349
|
+
}, onConfirm: handleConfirmedAction })) : null] }) }));
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* A segmented-control button for the Draft/Published view toggle (EC-226). The
|
|
353
|
+
* `accent` variant (EC-214) gives the active Published segment a distinct info
|
|
354
|
+
* treatment, so the read-only mode is obvious at the control itself.
|
|
355
|
+
*/
|
|
356
|
+
function PerspectiveButton({ label, active, accent, disabled, title, onClick, }) {
|
|
357
|
+
return (_jsx("button", { type: "button", "aria-pressed": active, disabled: disabled, title: title, onClick: onClick, className: cn('rounded px-2.5 py-1 text-xs font-medium transition-colors disabled:opacity-40', active
|
|
358
|
+
? accent === 'info'
|
|
359
|
+
? 'bg-info text-info-foreground shadow-sm'
|
|
360
|
+
: 'bg-background text-foreground shadow-sm'
|
|
361
|
+
: 'text-muted-foreground hover:text-foreground'), children: label }));
|
|
362
|
+
}
|
|
363
|
+
function groupFields(fields, collection) {
|
|
364
|
+
const order = collection.form?.groups ?? [];
|
|
365
|
+
const byGroup = new Map();
|
|
366
|
+
for (const field of fields) {
|
|
367
|
+
const group = field.form?.group ?? 'fields';
|
|
368
|
+
if (!byGroup.has(group))
|
|
369
|
+
byGroup.set(group, []);
|
|
370
|
+
byGroup.get(group).push(field);
|
|
371
|
+
}
|
|
372
|
+
const names = [...byGroup.keys()].sort((a, b) => {
|
|
373
|
+
const ia = order.indexOf(a);
|
|
374
|
+
const ib = order.indexOf(b);
|
|
375
|
+
return (ia < 0 ? 99 : ia) - (ib < 0 ? 99 : ib);
|
|
376
|
+
});
|
|
377
|
+
return names.map((name) => ({
|
|
378
|
+
name,
|
|
379
|
+
fields: byGroup.get(name).sort((a, b) => (a.form?.order ?? 99) - (b.form?.order ?? 99)),
|
|
380
|
+
}));
|
|
381
|
+
}
|
|
382
|
+
function primaryTitle(doc, collection, locale, config) {
|
|
383
|
+
const { value } = resolveField(collection, doc, collection.titleField ?? 'title', locale, config);
|
|
384
|
+
return typeof value === 'string' ? value : '';
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=detail-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-editor.js","sourceRoot":"","sources":["../../../src/components/cms/detail-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DocumentRef } from '@elytracms/cms-core';
|
|
2
|
+
/**
|
|
3
|
+
* Draft vs published indicator (brief §8.4, EC-077). Published-ness is the
|
|
4
|
+
* version pointer (EC-224) — the caller passes `cms.isPublished(ref)`, not the
|
|
5
|
+
* flat `state` enum.
|
|
6
|
+
*/
|
|
7
|
+
export declare function DocStateBadge({ published }: {
|
|
8
|
+
published: boolean;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
/** Publish / unpublish actions (EC-077) over the version pointer (EC-224). */
|
|
11
|
+
export declare function PublishControls({ refTarget }: {
|
|
12
|
+
refTarget: DocumentRef;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Eye, EyeOff } from 'lucide-react';
|
|
3
|
+
import { Badge, Button } from '@elytracms/studio/ui';
|
|
4
|
+
import { useCms } from './cms-store';
|
|
5
|
+
/**
|
|
6
|
+
* Draft vs published indicator (brief §8.4, EC-077). Published-ness is the
|
|
7
|
+
* version pointer (EC-224) — the caller passes `cms.isPublished(ref)`, not the
|
|
8
|
+
* flat `state` enum.
|
|
9
|
+
*/
|
|
10
|
+
export function DocStateBadge({ published }) {
|
|
11
|
+
return published ? (_jsxs(Badge, { variant: "success", children: [_jsx(Eye, { className: "size-3" }), " published"] })) : (_jsxs(Badge, { variant: "warning", children: [_jsx(EyeOff, { className: "size-3" }), " draft"] }));
|
|
12
|
+
}
|
|
13
|
+
/** Publish / unpublish actions (EC-077) over the version pointer (EC-224). */
|
|
14
|
+
export function PublishControls({ refTarget }) {
|
|
15
|
+
const cms = useCms();
|
|
16
|
+
return cms.isPublished(refTarget) ? (_jsxs(Button, { variant: "outline", size: "sm", onClick: () => cms.unpublishDocument(refTarget), children: [_jsx(EyeOff, {}), " Unpublish"] })) : (_jsxs(Button, { size: "sm", onClick: () => cms.publishDocument(refTarget), children: [_jsx(Eye, {}), " Publish"] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=doc-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-state.js","sourceRoot":"","sources":["../../../src/components/cms/doc-state.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,SAAS,EAA0B;IACjE,OAAO,SAAS,CAAC,CAAC,CAAC,CACjB,MAAC,KAAK,IAAC,OAAO,EAAC,SAAS,aACtB,KAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,GAAG,kBACpB,CACT,CAAC,CAAC,CAAC,CACF,MAAC,KAAK,IAAC,OAAO,EAAC,SAAS,aACtB,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,GAAG,cACvB,CACT,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAA8B;IACvE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,OAAO,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAClC,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,aACjF,KAAC,MAAM,KAAG,kBACH,CACV,CAAC,CAAC,CAAC,CACF,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,aAC7D,KAAC,GAAG,KAAG,gBACA,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { CmsDocument, CollectionDef, DocumentRef } from '@elytracms/cms-core';
|
|
3
|
+
/**
|
|
4
|
+
* EC-224 — the open document's editing context, provided by the detail editor
|
|
5
|
+
* and consumed by document-level inspector panes (the `Versions` pane).
|
|
6
|
+
*
|
|
7
|
+
* It exists because the Versions pane is rendered in two places — directly in
|
|
8
|
+
* the form view's sidebar, and inside the canvas view's own sidebar (deep in the
|
|
9
|
+
* scoped `BuilderProvider` subtree). A context lets the pane reach the open
|
|
10
|
+
* document's ref + live draft + actions from either mount point, without
|
|
11
|
+
* threading props through the canvas field editor.
|
|
12
|
+
*/
|
|
13
|
+
export interface DocumentEditorContextValue {
|
|
14
|
+
/** The project being edited (undefined in fixture/playground sessions). */
|
|
15
|
+
projectId: string | undefined;
|
|
16
|
+
collection: CollectionDef;
|
|
17
|
+
docRef: DocumentRef;
|
|
18
|
+
/** The editor's live (possibly unsaved) draft buffer. */
|
|
19
|
+
draft: CmsDocument;
|
|
20
|
+
/** Does the draft buffer diverge from the saved document? */
|
|
21
|
+
dirty: boolean;
|
|
22
|
+
/** Does the draft have error-severity validation issues (blocks publish)? */
|
|
23
|
+
hasErrors: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Is the editor in the read-only Published view (EC-226)? Document-level panes
|
|
26
|
+
* must disable their mutating actions (publish/restore) while it is true.
|
|
27
|
+
*/
|
|
28
|
+
viewReadOnly: boolean;
|
|
29
|
+
/** Persist the current draft buffer (the editor's Save). */
|
|
30
|
+
save: () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Replace the editor's draft buffer — used after a version restore swaps the
|
|
33
|
+
* working draft for an older snapshot, so the open form/canvas reflect it.
|
|
34
|
+
*/
|
|
35
|
+
replaceDraft: (doc: CmsDocument) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare function DocumentEditorProvider({ value, children, }: {
|
|
38
|
+
value: DocumentEditorContextValue;
|
|
39
|
+
children: ReactNode;
|
|
40
|
+
}): import("react").JSX.Element;
|
|
41
|
+
export declare function useDocumentEditor(): DocumentEditorContextValue;
|
|
42
|
+
/**
|
|
43
|
+
* The open document's editing context, or null when there is none (e.g. a
|
|
44
|
+
* relation picker opened from a table cell rather than the detail editor). Lets a
|
|
45
|
+
* control opt into doc-aware behavior — like the EC-218 parent cycle guard —
|
|
46
|
+
* without requiring the provider.
|
|
47
|
+
*/
|
|
48
|
+
export declare function useOptionalDocumentEditor(): DocumentEditorContextValue | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
const DocumentEditorContext = createContext(null);
|
|
4
|
+
export function DocumentEditorProvider({ value, children, }) {
|
|
5
|
+
return _jsx(DocumentEditorContext.Provider, { value: value, children: children });
|
|
6
|
+
}
|
|
7
|
+
export function useDocumentEditor() {
|
|
8
|
+
const value = useContext(DocumentEditorContext);
|
|
9
|
+
if (!value) {
|
|
10
|
+
throw new Error('useDocumentEditor must be used within a <DocumentEditorProvider>.');
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The open document's editing context, or null when there is none (e.g. a
|
|
16
|
+
* relation picker opened from a table cell rather than the detail editor). Lets a
|
|
17
|
+
* control opt into doc-aware behavior — like the EC-218 parent cycle guard —
|
|
18
|
+
* without requiring the provider.
|
|
19
|
+
*/
|
|
20
|
+
export function useOptionalDocumentEditor() {
|
|
21
|
+
return useContext(DocumentEditorContext);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=document-editor-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-editor-context.js","sourceRoot":"","sources":["../../../src/components/cms/document-editor-context.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAuCjD,MAAM,qBAAqB,GAAG,aAAa,CAAoC,IAAI,CAAC,CAAA;AAEpF,MAAM,UAAU,sBAAsB,CAAC,EACrC,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAkC,CAAA;AAClG,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CmsDocument, CollectionDef, FieldDef } from '@elytracms/cms-core';
|
|
2
|
+
import type { AdvanceDirection } from './cell-edit';
|
|
3
|
+
/**
|
|
4
|
+
* One editable table cell (EC-168, the Airtable-feel wedge of vision 3.2).
|
|
5
|
+
*
|
|
6
|
+
* Renders the field's `CellValue` until activated (click / Enter / F2), then
|
|
7
|
+
* swaps to an inline editor (text, number, boolean, select, date) or opens the
|
|
8
|
+
* existing relation/asset picker from the cell. Commits flow through the
|
|
9
|
+
* table's cell-edit controller; rejections render as an error ring + message
|
|
10
|
+
* on this cell — never a toast.
|
|
11
|
+
*/
|
|
12
|
+
export declare function EditableCell({ collection, doc, field, editing, busy, errorMessage, onStartEdit, onCancel, onCommit, }: {
|
|
13
|
+
collection: CollectionDef;
|
|
14
|
+
doc: CmsDocument;
|
|
15
|
+
field: FieldDef;
|
|
16
|
+
editing: boolean;
|
|
17
|
+
busy: boolean;
|
|
18
|
+
errorMessage: string | null;
|
|
19
|
+
onStartEdit: () => void;
|
|
20
|
+
onCancel: () => void;
|
|
21
|
+
onCommit: (value: unknown, advance: AdvanceDirection | null) => void;
|
|
22
|
+
}): import("react").JSX.Element;
|