@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,69 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ComponentNode, ProjectGraph } from '@elytracms/project-graph';
|
|
3
|
+
import type { BuilderAction, OperationError } from '@elytracms/studio/lib/operations';
|
|
4
|
+
import type { WorkingGraph } from '@elytracms/studio/lib/working-graph';
|
|
5
|
+
export type Viewport = 'desktop' | 'tablet' | 'mobile';
|
|
6
|
+
export interface BuilderState {
|
|
7
|
+
past: WorkingGraph[];
|
|
8
|
+
present: WorkingGraph;
|
|
9
|
+
future: WorkingGraph[];
|
|
10
|
+
pageId: string;
|
|
11
|
+
selectedId: string | null;
|
|
12
|
+
hoveredId: string | null;
|
|
13
|
+
viewport: Viewport;
|
|
14
|
+
/** Monotonic counter feeding fresh node ids. */
|
|
15
|
+
nodeSeq: number;
|
|
16
|
+
/** Coalescing key of the last edit (consecutive same-key edits don't stack history). */
|
|
17
|
+
lastCoalesceKey: string | null;
|
|
18
|
+
}
|
|
19
|
+
type Action = BuilderAction;
|
|
20
|
+
/**
|
|
21
|
+
* The pure state transition. Exported (with `initialBuilderState`) for unit
|
|
22
|
+
* tests — gesture determinism and normalization lockstep are reducer-level
|
|
23
|
+
* properties, not render behavior.
|
|
24
|
+
*/
|
|
25
|
+
export declare function builderReducer(state: BuilderState, action: Action): BuilderState;
|
|
26
|
+
export interface BuilderStore extends BuilderState {
|
|
27
|
+
canUndo: boolean;
|
|
28
|
+
canRedo: boolean;
|
|
29
|
+
selectedNode: ComponentNode | null;
|
|
30
|
+
dispatch: (action: Action) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Most recent failed/denied persisted mutation (structured, from the
|
|
33
|
+
* operation result). Rendered by the shell — never a silent failure.
|
|
34
|
+
*/
|
|
35
|
+
persistError: OperationError | null;
|
|
36
|
+
clearPersistError: () => void;
|
|
37
|
+
/** Await all queued persisted mutations (publish flows, tests). */
|
|
38
|
+
flushPersistence: () => Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare function initialBuilderState(graph: ProjectGraph | WorkingGraph): BuilderState;
|
|
41
|
+
/**
|
|
42
|
+
* Undo/redo design (EC-141): the history stack stays *UI state* — an
|
|
43
|
+
* in-memory stack of working-graph snapshots, exactly as before. The graph
|
|
44
|
+
* domain is append-only (load-latest → edit → save-revision), so a persisted
|
|
45
|
+
* "undo" cannot rewind the timeline; instead every committed edit is mirrored
|
|
46
|
+
* onto the operations layer as the matching `graph.*` command, and an
|
|
47
|
+
* undo/redo persists the restored snapshot as a *new* revision
|
|
48
|
+
* (`graph.save`, message "Undo"/"Redo"). This is the honest mapping of a
|
|
49
|
+
* linear session history onto an append-only revision log: the session and
|
|
50
|
+
* the persisted latest revision always agree, and the persisted timeline
|
|
51
|
+
* records that an undo happened rather than pretending it didn't.
|
|
52
|
+
*
|
|
53
|
+
* Without a `projectId` (styleguide, isolated tests) the store is a pure
|
|
54
|
+
* in-memory editor and persists nothing.
|
|
55
|
+
*/
|
|
56
|
+
export declare function BuilderProvider({ graph, workingGraph, projectId, children, }: {
|
|
57
|
+
/** Canonical (layouts-only) project graph; lifted into a working graph. */
|
|
58
|
+
graph?: ProjectGraph;
|
|
59
|
+
/**
|
|
60
|
+
* A pre-built working graph (the composition-field editor's synthetic page);
|
|
61
|
+
* used as-is when present, overriding `graph`.
|
|
62
|
+
*/
|
|
63
|
+
workingGraph?: WorkingGraph;
|
|
64
|
+
/** Enables persistence through the shared operations client. */
|
|
65
|
+
projectId?: string;
|
|
66
|
+
children: ReactNode;
|
|
67
|
+
}): import("react").JSX.Element;
|
|
68
|
+
export declare function useBuilder(): BuilderStore;
|
|
69
|
+
export {};
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { cloneWithNewIds, duplicateNode, getNode, getParentInfo, insertNode, maxNodeIdSeq, moveNode, normalizeContainers, removeNode, removeNodeProp, reorderNode, setNodeCondition, setNodeProp, validSampleGraph, } from '@elytracms/project-graph';
|
|
4
|
+
import { applyWrap } from '@elytracms/studio/lib/dnd/drop-rules';
|
|
5
|
+
import { createGraphPersister, getStudioOperations } from '@elytracms/studio/lib/operations';
|
|
6
|
+
import { normalizeWorkingGraph, setWorkingPageSeo, toWorkingGraph } from '@elytracms/studio/lib/working-graph';
|
|
7
|
+
const HISTORY_LIMIT = 100;
|
|
8
|
+
function activeRoot(state) {
|
|
9
|
+
const page = state.present.pages.find((p) => p.id === state.pageId);
|
|
10
|
+
return page.root;
|
|
11
|
+
}
|
|
12
|
+
function withRoot(graph, pageId, root) {
|
|
13
|
+
return { ...graph, pages: graph.pages.map((p) => (p.id === pageId ? { ...p, root } : p)) };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The highest minted-id sequence already present in the working graph (EC-203).
|
|
17
|
+
* `nodeSeq` is a single session-wide counter feeding inserts on every page, so it
|
|
18
|
+
* must clear the max across ALL pages' roots — never just the active one — or
|
|
19
|
+
* switching pages and inserting would re-mint a collision on another page.
|
|
20
|
+
*/
|
|
21
|
+
function maxGraphNodeSeq(graph) {
|
|
22
|
+
return graph.pages.reduce((max, page) => Math.max(max, maxNodeIdSeq(page.root)), 0);
|
|
23
|
+
}
|
|
24
|
+
function counter(start) {
|
|
25
|
+
const c = {
|
|
26
|
+
count: start,
|
|
27
|
+
genId: () => {
|
|
28
|
+
c.count += 1;
|
|
29
|
+
return `node-${c.count}`;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
return c;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Push a new graph onto history, coalescing consecutive edits with the same key.
|
|
36
|
+
*
|
|
37
|
+
* Every commit normalizes layout containers (EC-162 ledger fix): the
|
|
38
|
+
* operations layer normalizes every persisted `graph.*` write (EC-161), so
|
|
39
|
+
* the optimistic working graph must apply the same `normalizeContainers` pass
|
|
40
|
+
* or the UI state diverges from the persisted revision after
|
|
41
|
+
* container-emptying moves/removes. The mirrored command stays un-normalized
|
|
42
|
+
* (`graphInvocationFor` sees the raw action); both sides normalize
|
|
43
|
+
* identically, so they land on the same graph.
|
|
44
|
+
*/
|
|
45
|
+
function commit(state, root, opts = {}) {
|
|
46
|
+
const normalized = normalizeContainers(root);
|
|
47
|
+
const present = withRoot(state.present, state.pageId, normalized);
|
|
48
|
+
const coalesce = opts.coalesceKey != null && opts.coalesceKey === state.lastCoalesceKey;
|
|
49
|
+
// Normalization can dissolve the node a caller wanted selected (e.g. the
|
|
50
|
+
// parent container of a removed child) — selection never points at a ghost.
|
|
51
|
+
const desired = opts.selectedId !== undefined ? opts.selectedId : state.selectedId;
|
|
52
|
+
const selectedId = desired !== null && getNode(normalized, desired) ? desired : null;
|
|
53
|
+
return {
|
|
54
|
+
...state,
|
|
55
|
+
past: coalesce ? state.past : [...state.past, state.present].slice(-HISTORY_LIMIT),
|
|
56
|
+
present,
|
|
57
|
+
future: [],
|
|
58
|
+
nodeSeq: opts.nodeSeq ?? state.nodeSeq,
|
|
59
|
+
lastCoalesceKey: opts.coalesceKey ?? null,
|
|
60
|
+
selectedId,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The pure state transition. Exported (with `initialBuilderState`) for unit
|
|
65
|
+
* tests — gesture determinism and normalization lockstep are reducer-level
|
|
66
|
+
* properties, not render behavior.
|
|
67
|
+
*/
|
|
68
|
+
export function builderReducer(state, action) {
|
|
69
|
+
const root = activeRoot(state);
|
|
70
|
+
switch (action.type) {
|
|
71
|
+
case 'select': {
|
|
72
|
+
// Optional page switch (reference deep links, EC-172): only onto pages
|
|
73
|
+
// that exist in the working graph; selection stays a pure-UI action.
|
|
74
|
+
const pageId = action.pageId !== undefined && state.present.pages.some((p) => p.id === action.pageId)
|
|
75
|
+
? action.pageId
|
|
76
|
+
: state.pageId;
|
|
77
|
+
return { ...state, selectedId: action.id, pageId };
|
|
78
|
+
}
|
|
79
|
+
case 'hover':
|
|
80
|
+
return state.hoveredId === action.id ? state : { ...state, hoveredId: action.id };
|
|
81
|
+
case 'viewport':
|
|
82
|
+
return { ...state, viewport: action.viewport };
|
|
83
|
+
case 'undo': {
|
|
84
|
+
const prev = state.past.at(-1);
|
|
85
|
+
if (!prev)
|
|
86
|
+
return state;
|
|
87
|
+
return {
|
|
88
|
+
...state,
|
|
89
|
+
past: state.past.slice(0, -1),
|
|
90
|
+
present: prev,
|
|
91
|
+
future: [state.present, ...state.future],
|
|
92
|
+
lastCoalesceKey: null,
|
|
93
|
+
selectedId: getNode(prev.pages.find((p) => p.id === state.pageId).root, state.selectedId ?? '')
|
|
94
|
+
? state.selectedId
|
|
95
|
+
: null,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
case 'redo': {
|
|
99
|
+
const next = state.future[0];
|
|
100
|
+
if (!next)
|
|
101
|
+
return state;
|
|
102
|
+
return {
|
|
103
|
+
...state,
|
|
104
|
+
past: [...state.past, state.present],
|
|
105
|
+
present: next,
|
|
106
|
+
future: state.future.slice(1),
|
|
107
|
+
lastCoalesceKey: null,
|
|
108
|
+
selectedId: getNode(next.pages.find((p) => p.id === state.pageId).root, state.selectedId ?? '')
|
|
109
|
+
? state.selectedId
|
|
110
|
+
: null,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
case 'insert': {
|
|
114
|
+
const c = counter(state.nodeSeq);
|
|
115
|
+
const node = cloneWithNewIds(action.node, c.genId);
|
|
116
|
+
const next = insertNode(root, action.target, node);
|
|
117
|
+
return commit(state, next, {
|
|
118
|
+
nodeSeq: c.count,
|
|
119
|
+
selectedId: action.select === false ? state.selectedId : node.id,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
case 'remove': {
|
|
123
|
+
const parent = getParentInfo(root, action.id);
|
|
124
|
+
const next = removeNode(root, action.id);
|
|
125
|
+
const selectedId = state.selectedId === action.id ? (parent?.parent.id ?? null) : state.selectedId;
|
|
126
|
+
return commit(state, next, { selectedId });
|
|
127
|
+
}
|
|
128
|
+
case 'duplicate': {
|
|
129
|
+
const c = counter(state.nodeSeq);
|
|
130
|
+
const { root: next, newId } = duplicateNode(root, action.id, c.genId);
|
|
131
|
+
return commit(state, next, { nodeSeq: c.count, selectedId: newId ?? state.selectedId });
|
|
132
|
+
}
|
|
133
|
+
case 'reorder':
|
|
134
|
+
return commit(state, reorderNode(root, action.id, action.delta));
|
|
135
|
+
case 'move':
|
|
136
|
+
return commit(state, moveNode(root, action.id, action.target));
|
|
137
|
+
case 'wrap': {
|
|
138
|
+
// Layout gesture (EC-162): the reference and the dragged subject become
|
|
139
|
+
// the two columns of a new Grid container — ONE structural edit, one
|
|
140
|
+
// history entry, one mirrored command, so a single undo dissolves the
|
|
141
|
+
// whole gesture.
|
|
142
|
+
const c = counter(state.nodeSeq);
|
|
143
|
+
const partner = action.subject.kind === 'node'
|
|
144
|
+
? { kind: 'node', nodeId: action.subject.nodeId }
|
|
145
|
+
: { kind: 'subtree', node: cloneWithNewIds(action.subject.node, c.genId) };
|
|
146
|
+
const containerId = c.genId();
|
|
147
|
+
const wrapped = applyWrap({
|
|
148
|
+
root,
|
|
149
|
+
referenceId: action.referenceId,
|
|
150
|
+
side: action.side,
|
|
151
|
+
partner,
|
|
152
|
+
containerId,
|
|
153
|
+
});
|
|
154
|
+
if (!wrapped)
|
|
155
|
+
return state;
|
|
156
|
+
return commit(state, wrapped.root, { nodeSeq: c.count, selectedId: containerId });
|
|
157
|
+
}
|
|
158
|
+
case 'setProp':
|
|
159
|
+
return commit(state, setNodeProp(root, action.id, action.name, action.value), {
|
|
160
|
+
coalesceKey: action.coalesceKey,
|
|
161
|
+
});
|
|
162
|
+
case 'removeProp':
|
|
163
|
+
return commit(state, removeNodeProp(root, action.id, action.name));
|
|
164
|
+
case 'setCondition':
|
|
165
|
+
return commit(state, setNodeCondition(root, action.id, action.condition));
|
|
166
|
+
case 'setPageSeo': {
|
|
167
|
+
// Legacy page SEO (EC-171), in-memory only: update the working page's
|
|
168
|
+
// `seo` block. Undoable; selection unchanged; never persisted as a node
|
|
169
|
+
// op (page SEO lives on the page CMS document now).
|
|
170
|
+
const next = setWorkingPageSeo(state.present, action.pageId, action.seo);
|
|
171
|
+
if (next === state.present)
|
|
172
|
+
return state;
|
|
173
|
+
return {
|
|
174
|
+
...state,
|
|
175
|
+
past: [...state.past, state.present].slice(-HISTORY_LIMIT),
|
|
176
|
+
present: next,
|
|
177
|
+
future: [],
|
|
178
|
+
lastCoalesceKey: null,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
case 'loadGraph': {
|
|
182
|
+
// Replace the whole working graph (e.g. restoring a saved revision).
|
|
183
|
+
// `action.graph` is a CANONICAL layouts-only ProjectGraph (a restore from
|
|
184
|
+
// the append-only revision log); lift it into a WorkingGraph so the
|
|
185
|
+
// root-bearing editor has an editable page. Undoable, selection
|
|
186
|
+
// re-validated, normalized like the persisted graph.save it mirrors.
|
|
187
|
+
const graph = normalizeWorkingGraph(toWorkingGraph(action.graph));
|
|
188
|
+
const pageId = graph.pages.find((p) => p.id === state.pageId)
|
|
189
|
+
? state.pageId
|
|
190
|
+
: graph.pages[0].id;
|
|
191
|
+
const nextRoot = graph.pages.find((p) => p.id === pageId).root;
|
|
192
|
+
return {
|
|
193
|
+
...state,
|
|
194
|
+
past: [...state.past, state.present].slice(-HISTORY_LIMIT),
|
|
195
|
+
present: graph,
|
|
196
|
+
future: [],
|
|
197
|
+
pageId,
|
|
198
|
+
// Advance past the restored graph's ids too (EC-203), never backwards:
|
|
199
|
+
// a restore swaps in a fresh node namespace under the same counter.
|
|
200
|
+
nodeSeq: Math.max(state.nodeSeq, maxGraphNodeSeq(graph)),
|
|
201
|
+
lastCoalesceKey: null,
|
|
202
|
+
selectedId: getNode(nextRoot, state.selectedId ?? '') ? state.selectedId : nextRoot.id,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
default:
|
|
206
|
+
return state;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const BuilderContext = createContext(null);
|
|
210
|
+
export function initialBuilderState(graph) {
|
|
211
|
+
// Lift a canonical (layouts-only) ProjectGraph into a root-bearing
|
|
212
|
+
// WorkingGraph; a WorkingGraph (synthetic composition surface) is used as-is.
|
|
213
|
+
// Start container-normal (idempotent on healthy graphs) so the session and
|
|
214
|
+
// the persisted baseline agree from the first edit.
|
|
215
|
+
const working = 'pages' in graph ? graph : toWorkingGraph(graph);
|
|
216
|
+
const present = normalizeWorkingGraph(working);
|
|
217
|
+
return {
|
|
218
|
+
past: [],
|
|
219
|
+
present,
|
|
220
|
+
future: [],
|
|
221
|
+
pageId: present.pages[0].id,
|
|
222
|
+
selectedId: present.pages[0].root.id,
|
|
223
|
+
hoveredId: null,
|
|
224
|
+
viewport: 'desktop',
|
|
225
|
+
// Seed past the ids the hydrated graph already carries (EC-203): a restored
|
|
226
|
+
// page holds minted `node-<n>` ids, so starting at 0 would re-mint `node-1`
|
|
227
|
+
// on the first insert and produce a duplicate-node-id.
|
|
228
|
+
nodeSeq: maxGraphNodeSeq(present),
|
|
229
|
+
lastCoalesceKey: null,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Undo/redo design (EC-141): the history stack stays *UI state* — an
|
|
234
|
+
* in-memory stack of working-graph snapshots, exactly as before. The graph
|
|
235
|
+
* domain is append-only (load-latest → edit → save-revision), so a persisted
|
|
236
|
+
* "undo" cannot rewind the timeline; instead every committed edit is mirrored
|
|
237
|
+
* onto the operations layer as the matching `graph.*` command, and an
|
|
238
|
+
* undo/redo persists the restored snapshot as a *new* revision
|
|
239
|
+
* (`graph.save`, message "Undo"/"Redo"). This is the honest mapping of a
|
|
240
|
+
* linear session history onto an append-only revision log: the session and
|
|
241
|
+
* the persisted latest revision always agree, and the persisted timeline
|
|
242
|
+
* records that an undo happened rather than pretending it didn't.
|
|
243
|
+
*
|
|
244
|
+
* Without a `projectId` (styleguide, isolated tests) the store is a pure
|
|
245
|
+
* in-memory editor and persists nothing.
|
|
246
|
+
*/
|
|
247
|
+
export function BuilderProvider({ graph = validSampleGraph, workingGraph, projectId, children, }) {
|
|
248
|
+
const [state, setState] = useState(() => initialBuilderState(workingGraph ?? graph));
|
|
249
|
+
const [persistError, setPersistError] = useState(null);
|
|
250
|
+
const stateRef = useRef(state);
|
|
251
|
+
const persisterRef = useRef(null);
|
|
252
|
+
if (persisterRef.current === null && projectId !== undefined) {
|
|
253
|
+
persisterRef.current = createGraphPersister({
|
|
254
|
+
projectId,
|
|
255
|
+
getOperations: async () => (await getStudioOperations()).operations,
|
|
256
|
+
onError: setPersistError,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
// Plain-function dispatch (not `useReducer`) so each action sees the
|
|
260
|
+
// pre/post state synchronously — the persister derives the mirrored
|
|
261
|
+
// `graph.*` command from exactly that transition.
|
|
262
|
+
const dispatch = useCallback((action) => {
|
|
263
|
+
const prev = stateRef.current;
|
|
264
|
+
const next = builderReducer(prev, action);
|
|
265
|
+
stateRef.current = next;
|
|
266
|
+
setState(next);
|
|
267
|
+
persisterRef.current?.enqueue(action, { present: prev.present, pageId: prev.pageId, nodeSeq: prev.nodeSeq }, { present: next.present });
|
|
268
|
+
}, []);
|
|
269
|
+
const flushPersistence = useCallback(async () => persisterRef.current?.flush() ?? Promise.resolve(), []);
|
|
270
|
+
const clearPersistError = useCallback(() => setPersistError(null), []);
|
|
271
|
+
const store = useMemo(() => {
|
|
272
|
+
const selectedNode = state.selectedId
|
|
273
|
+
? (getNode(activeRoot(state), state.selectedId) ?? null)
|
|
274
|
+
: null;
|
|
275
|
+
return {
|
|
276
|
+
...state,
|
|
277
|
+
canUndo: state.past.length > 0,
|
|
278
|
+
canRedo: state.future.length > 0,
|
|
279
|
+
selectedNode,
|
|
280
|
+
dispatch,
|
|
281
|
+
persistError,
|
|
282
|
+
clearPersistError,
|
|
283
|
+
flushPersistence,
|
|
284
|
+
};
|
|
285
|
+
}, [state, dispatch, persistError, clearPersistError, flushPersistence]);
|
|
286
|
+
return _jsx(BuilderContext.Provider, { value: store, children: children });
|
|
287
|
+
}
|
|
288
|
+
export function useBuilder() {
|
|
289
|
+
const store = useContext(BuilderContext);
|
|
290
|
+
if (!store)
|
|
291
|
+
throw new Error('useBuilder must be used within a <BuilderProvider>.');
|
|
292
|
+
return store;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=builder-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder-store.js","sourceRoot":"","sources":["../../../src/components/builder/builder-store.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The consuming app supplies its compiled studio CSS URL at mount. */
|
|
2
|
+
export declare function setCanvasStylesheetUrl(url: string): void;
|
|
3
|
+
/** The injected stylesheet URL, or `null` when the app has not supplied one. */
|
|
4
|
+
export declare function getCanvasStylesheetUrl(): string | null;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The PREVIEW stylesheet URL, injected into the canvas iframe (EC-117 / EC-223 Stage 4).
|
|
3
|
+
* The canvas renders the project graph inside an ISOLATED iframe, so this stylesheet is
|
|
4
|
+
* scoped to that document alone — it is NOT the studio chrome stylesheet, and reusing the
|
|
5
|
+
* chrome's stylesheet here is a mistake (it makes the consuming app's delivery CSS and the
|
|
6
|
+
* studio UI share one file, the only way a leak between them becomes possible). The preview
|
|
7
|
+
* stylesheet should carry: (1) the consuming app's DELIVERY CSS, since the rendered blocks
|
|
8
|
+
* are the consuming app's own components styled by its delivery theme; and (2) the studio
|
|
9
|
+
* CSS, since the inline editing controls (RichTextToolbar, SpacingHandles) are portaled
|
|
10
|
+
* INTO this iframe. Both are BUILD artifacts of the consuming app (its Tailwind build picks
|
|
11
|
+
* up the package's `@source`), so the package cannot import them — the app injects its own
|
|
12
|
+
* compiled URL once at mount via {@link setCanvasStylesheetUrl}, and the canvas reads it
|
|
13
|
+
* here. Unset (e.g. tests / SSR) → the canvas simply skips the stylesheet link.
|
|
14
|
+
*/
|
|
15
|
+
let stylesheetUrl = null;
|
|
16
|
+
/** The consuming app supplies its compiled studio CSS URL at mount. */
|
|
17
|
+
export function setCanvasStylesheetUrl(url) {
|
|
18
|
+
stylesheetUrl = url;
|
|
19
|
+
}
|
|
20
|
+
/** The injected stylesheet URL, or `null` when the app has not supplied one. */
|
|
21
|
+
export function getCanvasStylesheetUrl() {
|
|
22
|
+
return stylesheetUrl;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=canvas-stylesheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-stylesheet.js","sourceRoot":"","sources":["../../../src/components/builder/canvas-stylesheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,IAAI,aAAa,GAAkB,IAAI,CAAA;AAEvC,uEAAuE;AACvE,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,aAAa,GAAG,GAAG,CAAA;AACrB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iframe-isolated page preview (brief §8.2, EC-061, EC-064). The graph renders
|
|
3
|
+
* into a same-origin iframe via a React portal — true style isolation + true
|
|
4
|
+
* responsive widths. Each node is wrapped with an editable marker so clicks
|
|
5
|
+
* select and hover/selection draw outlines. Native listeners bridge the iframe
|
|
6
|
+
* boundary (React's synthetic events don't cross frames).
|
|
7
|
+
*/
|
|
8
|
+
export declare function BuilderCanvas(): import("react").JSX.Element;
|