@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,221 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { documentKey } from '@elytracms/cms-core';
|
|
3
|
+
import { getStudioOperations } from '../operations';
|
|
4
|
+
import { getStudioRegistry } from '../registry';
|
|
5
|
+
import { buildReferenceEntryViews } from './reference-model';
|
|
6
|
+
// --- Index bootstrap -----------------------------------------------------------
|
|
7
|
+
/**
|
|
8
|
+
* The EC-155 index is maintained on write, but seeded/imported projects start
|
|
9
|
+
* with an empty index. Run the idempotent `references.backfill` command once
|
|
10
|
+
* per project per operations client; failures (e.g. a viewer's command
|
|
11
|
+
* denial) degrade to whatever the maintained-on-write index already holds.
|
|
12
|
+
*/
|
|
13
|
+
const backfillsByClient = new WeakMap();
|
|
14
|
+
export function ensureReferenceIndex(studio, projectId) {
|
|
15
|
+
let byProject = backfillsByClient.get(studio);
|
|
16
|
+
if (!byProject) {
|
|
17
|
+
byProject = new Map();
|
|
18
|
+
backfillsByClient.set(studio, byProject);
|
|
19
|
+
}
|
|
20
|
+
let pending = byProject.get(projectId);
|
|
21
|
+
if (!pending) {
|
|
22
|
+
pending = studio.operations.references.backfill({ projectId }).then(() => undefined, () => undefined);
|
|
23
|
+
byProject.set(projectId, pending);
|
|
24
|
+
}
|
|
25
|
+
return pending;
|
|
26
|
+
}
|
|
27
|
+
// --- Label context loading -------------------------------------------------------
|
|
28
|
+
async function loadLabelContext(operations, projectId) {
|
|
29
|
+
const [schemaResult, documentsResult, graphResult, assetsResult] = await Promise.all([
|
|
30
|
+
operations.schema.get({ projectId }),
|
|
31
|
+
operations.documents.list({ projectId }),
|
|
32
|
+
operations.graph.getLatest({ projectId }),
|
|
33
|
+
operations.assets.list({ projectId }),
|
|
34
|
+
]);
|
|
35
|
+
const collections = schemaResult.ok ? schemaResult.value.collections : [];
|
|
36
|
+
const documents = new Map();
|
|
37
|
+
if (documentsResult.ok) {
|
|
38
|
+
for (const record of documentsResult.value) {
|
|
39
|
+
documents.set(documentKey({ collection: record.document.collection, id: record.document.id }), record.document);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const graph = graphResult.ok ? graphResult.value.graph : null;
|
|
43
|
+
const assets = new Map();
|
|
44
|
+
if (assetsResult.ok) {
|
|
45
|
+
for (const asset of assetsResult.value) {
|
|
46
|
+
assets.set(asset.id, { filename: asset.filename, title: asset.title });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const registry = getStudioRegistry().registry;
|
|
50
|
+
return {
|
|
51
|
+
collections,
|
|
52
|
+
documents,
|
|
53
|
+
graph,
|
|
54
|
+
assets,
|
|
55
|
+
componentTitle: (componentId) => registry.getManifest(componentId)?.title,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// --- Panel data loading -----------------------------------------------------------
|
|
59
|
+
/** Load both directions + labels for one panel (operations queries only). */
|
|
60
|
+
export async function loadReferencePanelData(query) {
|
|
61
|
+
const studio = await getStudioOperations();
|
|
62
|
+
await ensureReferenceIndex(studio, query.projectId);
|
|
63
|
+
// Observe a settled index: maintained-on-write updates run async after events.
|
|
64
|
+
await studio.references.flush();
|
|
65
|
+
const operations = studio.operations;
|
|
66
|
+
// EC-205: load each direction INDEPENDENTLY. A structured non-ok from one
|
|
67
|
+
// direction is a degradable operation result (it carries an OperationError —
|
|
68
|
+
// the documented contract), not an exception: degrade that direction to empty
|
|
69
|
+
// and surface its error per-section (references-panel) while the other still
|
|
70
|
+
// renders, instead of throwing the whole panel into its hard-error state. A
|
|
71
|
+
// genuinely broken backend still throws from getStudioOperations/flush above.
|
|
72
|
+
const [outbound, inbound] = await Promise.all([
|
|
73
|
+
query.source
|
|
74
|
+
? operations.references.outbound({ projectId: query.projectId, source: query.source })
|
|
75
|
+
: null,
|
|
76
|
+
query.target
|
|
77
|
+
? operations.references.inbound({ projectId: query.projectId, target: query.target })
|
|
78
|
+
: null,
|
|
79
|
+
]);
|
|
80
|
+
const settle = (result) => result === null
|
|
81
|
+
? { records: [], error: null }
|
|
82
|
+
: result.ok
|
|
83
|
+
? { records: result.value, error: null }
|
|
84
|
+
: { records: [], error: result.error.message };
|
|
85
|
+
const out = settle(outbound);
|
|
86
|
+
const inb = settle(inbound);
|
|
87
|
+
const context = await loadLabelContext(operations, query.projectId);
|
|
88
|
+
return {
|
|
89
|
+
outbound: buildReferenceEntryViews(out.records, context),
|
|
90
|
+
inbound: buildReferenceEntryViews(inb.records, context),
|
|
91
|
+
outboundError: out.error,
|
|
92
|
+
inboundError: inb.error,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// --- Impact loading (EC-173 safe unpublish/delete) -------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Load the labelled inbound entry views for a set of target documents in ONE
|
|
98
|
+
* pass (one index flush, one label-context load) — the pre-flight data of the
|
|
99
|
+
* EC-173 confirmation dialogs, including the bulk flows. Returns entries in
|
|
100
|
+
* `targets` order; pair with `buildReferenceImpact` for break/block semantics.
|
|
101
|
+
*/
|
|
102
|
+
export async function loadInboundReferenceViews(projectId, targets) {
|
|
103
|
+
const studio = await getStudioOperations();
|
|
104
|
+
await ensureReferenceIndex(studio, projectId);
|
|
105
|
+
// Observe a settled index: maintained-on-write updates run async after events.
|
|
106
|
+
await studio.references.flush();
|
|
107
|
+
const operations = studio.operations;
|
|
108
|
+
const recordsPerTarget = await Promise.all(targets.map((ref) => operations.references
|
|
109
|
+
.inbound({ projectId, target: { type: 'document', id: documentKey(ref) } })
|
|
110
|
+
.then((result) => {
|
|
111
|
+
if (!result.ok)
|
|
112
|
+
throw new Error(result.error.message);
|
|
113
|
+
return result.value;
|
|
114
|
+
})));
|
|
115
|
+
const context = await loadLabelContext(operations, projectId);
|
|
116
|
+
return targets.map((ref, index) => ({
|
|
117
|
+
ref,
|
|
118
|
+
inbound: buildReferenceEntryViews(recordsPerTarget[index] ?? [], context),
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Inbound reference views for ONE asset (EC-202): the "what uses this asset"
|
|
123
|
+
* pre-flight of the asset-delete dialog, index-accurate (the EC-155 reference
|
|
124
|
+
* index, not the retired `find-asset-usages` string scan). Mirrors
|
|
125
|
+
* {@link loadInboundReferenceViews} for a single `{ type: 'asset' }` target —
|
|
126
|
+
* the source labels resolve the referencing documents/graph-nodes identically.
|
|
127
|
+
*/
|
|
128
|
+
export async function loadInboundAssetReferenceViews(projectId, assetId) {
|
|
129
|
+
const studio = await getStudioOperations();
|
|
130
|
+
await ensureReferenceIndex(studio, projectId);
|
|
131
|
+
// Observe a settled index: maintained-on-write updates run async after events.
|
|
132
|
+
await studio.references.flush();
|
|
133
|
+
const operations = studio.operations;
|
|
134
|
+
const result = await operations.references.inbound({
|
|
135
|
+
projectId,
|
|
136
|
+
target: { type: 'asset', id: assetId },
|
|
137
|
+
});
|
|
138
|
+
if (!result.ok)
|
|
139
|
+
throw new Error(result.error.message);
|
|
140
|
+
const context = await loadLabelContext(operations, projectId);
|
|
141
|
+
return buildReferenceEntryViews(result.value, context);
|
|
142
|
+
}
|
|
143
|
+
// --- React hook ----------------------------------------------------------------
|
|
144
|
+
/** Domains whose successful commands can change the reference index or labels. */
|
|
145
|
+
const REFRESH_DOMAINS = new Set([
|
|
146
|
+
'documents',
|
|
147
|
+
'graph',
|
|
148
|
+
'publishing',
|
|
149
|
+
'references',
|
|
150
|
+
'assets',
|
|
151
|
+
'schema',
|
|
152
|
+
]);
|
|
153
|
+
/**
|
|
154
|
+
* Live panel state for one entity: loads on mount, exposes explicit
|
|
155
|
+
* loading/error states, and re-queries whenever a content-bearing command
|
|
156
|
+
* succeeds anywhere in the studio (the index is maintained on write).
|
|
157
|
+
*/
|
|
158
|
+
export function useReferencePanel(query) {
|
|
159
|
+
const { projectId } = query;
|
|
160
|
+
const sourceType = query.source?.type;
|
|
161
|
+
const sourceId = query.source?.id;
|
|
162
|
+
const targetType = query.target?.type;
|
|
163
|
+
const targetId = query.target?.id;
|
|
164
|
+
const stableQuery = useMemo(() => ({
|
|
165
|
+
projectId,
|
|
166
|
+
...(sourceType && sourceId ? { source: { type: sourceType, id: sourceId } } : {}),
|
|
167
|
+
...(targetType && targetId ? { target: { type: targetType, id: targetId } } : {}),
|
|
168
|
+
}), [projectId, sourceType, sourceId, targetType, targetId]);
|
|
169
|
+
const [state, setState] = useState({
|
|
170
|
+
status: 'loading',
|
|
171
|
+
data: null,
|
|
172
|
+
errorMessage: null,
|
|
173
|
+
});
|
|
174
|
+
const epochRef = useRef(0);
|
|
175
|
+
const load = useCallback(async () => {
|
|
176
|
+
const epoch = ++epochRef.current;
|
|
177
|
+
try {
|
|
178
|
+
const data = await loadReferencePanelData(stableQuery);
|
|
179
|
+
if (epochRef.current === epoch) {
|
|
180
|
+
setState({ status: 'ready', data, errorMessage: null });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (cause) {
|
|
184
|
+
if (epochRef.current === epoch) {
|
|
185
|
+
setState({
|
|
186
|
+
status: 'error',
|
|
187
|
+
data: null,
|
|
188
|
+
errorMessage: cause instanceof Error ? cause.message : String(cause),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}, [stableQuery]);
|
|
193
|
+
useEffect(() => {
|
|
194
|
+
setState({ status: 'loading', data: null, errorMessage: null });
|
|
195
|
+
void load();
|
|
196
|
+
let disposed = false;
|
|
197
|
+
let unsubscribe;
|
|
198
|
+
void getStudioOperations().then((studio) => {
|
|
199
|
+
if (disposed)
|
|
200
|
+
return;
|
|
201
|
+
unsubscribe = studio.operations.events.subscribe((event) => {
|
|
202
|
+
if (event.kind !== 'command' || event.status !== 'succeeded')
|
|
203
|
+
return;
|
|
204
|
+
if (!REFRESH_DOMAINS.has(event.domain))
|
|
205
|
+
return;
|
|
206
|
+
void load();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
return () => {
|
|
210
|
+
disposed = true;
|
|
211
|
+
epochRef.current += 1;
|
|
212
|
+
unsubscribe?.();
|
|
213
|
+
};
|
|
214
|
+
}, [load]);
|
|
215
|
+
const refresh = useCallback(() => {
|
|
216
|
+
setState((previous) => ({ ...previous, status: 'loading' }));
|
|
217
|
+
void load();
|
|
218
|
+
}, [load]);
|
|
219
|
+
return { ...state, refresh };
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=references-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references-store.js","sourceRoot":"","sources":["../../../src/lib/references/references-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ComponentRegistry } from '@elytracms/component-registry';
|
|
2
|
+
import type { ComponentManifest } from '@elytracms/component-registry';
|
|
3
|
+
import type { ManifestLookup } from '@elytracms/persistence';
|
|
4
|
+
import type { ComponentImplementations, RenderContext } from '@elytracms/runtime-renderer';
|
|
5
|
+
/**
|
|
6
|
+
* The Studio's view of a project's component registry (brief §7.2, §8.3): the
|
|
7
|
+
* platform primitives plus the project's own components, with their
|
|
8
|
+
* implementations for live previews. Deterministic singleton, built in-process
|
|
9
|
+
* from code-owned manifests — component manifests live in TS next to the
|
|
10
|
+
* components, so local/CI/browser runs need no backend.
|
|
11
|
+
*/
|
|
12
|
+
export interface StudioRegistry {
|
|
13
|
+
registry: ComponentRegistry;
|
|
14
|
+
implementations: ComponentImplementations;
|
|
15
|
+
}
|
|
16
|
+
export declare function getStudioRegistry(): StudioRegistry;
|
|
17
|
+
/**
|
|
18
|
+
* The built-in demo fixtures as a StudioRegistry, independent of the active
|
|
19
|
+
* project's `components` config ref. This is the golden-path component set
|
|
20
|
+
* (`project.MarketingHero`, `FeatureCard`, `PricingCallout`, `LegacyBanner`) used
|
|
21
|
+
* when a project declares no ref — and the deterministic registry that blocks /
|
|
22
|
+
* clipboard / thumbnail tests pin to, so they assert against a known component set
|
|
23
|
+
* regardless of which library `elytra.config.ts` happens to select (EC-194).
|
|
24
|
+
*/
|
|
25
|
+
export declare function fixtureStudioRegistry(): StudioRegistry;
|
|
26
|
+
/**
|
|
27
|
+
* Adapt the live registry to the reference-index `ManifestLookup` contract
|
|
28
|
+
* (EC-190): a component id → its prop field-defs, name-injected. Threaded into
|
|
29
|
+
* `attachReferenceIndex` so relation/asset props inside compositions index
|
|
30
|
+
* field-type-driven, with no persistence-layer dependency on the registry.
|
|
31
|
+
*/
|
|
32
|
+
export declare function studioManifestLookup(): ManifestLookup;
|
|
33
|
+
/** A RenderContext for fixture previews (bindings resolve to undefined). */
|
|
34
|
+
export declare function previewContext(studio: StudioRegistry): RenderContext;
|
|
35
|
+
/**
|
|
36
|
+
* Per-component status (brief §4.11, §8.3, EC-055):
|
|
37
|
+
* - `invalid`: the registry reported a structured issue for this id.
|
|
38
|
+
* - `incompatible`: a manifest exists but no implementation is wired up.
|
|
39
|
+
* - `valid`: healthy.
|
|
40
|
+
*/
|
|
41
|
+
export type ComponentStatus = 'valid' | 'incompatible' | 'invalid';
|
|
42
|
+
export declare function componentStatus(studio: StudioRegistry, manifest: ComponentManifest): ComponentStatus;
|
|
43
|
+
export interface RegistryHealth {
|
|
44
|
+
total: number;
|
|
45
|
+
valid: number;
|
|
46
|
+
incompatible: number;
|
|
47
|
+
invalid: number;
|
|
48
|
+
}
|
|
49
|
+
export declare function registryHealth(studio: StudioRegistry): RegistryHealth;
|
|
50
|
+
export interface ComponentDraft {
|
|
51
|
+
id: string;
|
|
52
|
+
status: 'draft';
|
|
53
|
+
source: 'ai';
|
|
54
|
+
title: string;
|
|
55
|
+
/** The natural-language intent that would drive Phase 8 generation. */
|
|
56
|
+
prompt: string;
|
|
57
|
+
/** A preview of the manifest the generator would produce. */
|
|
58
|
+
manifestPreview: {
|
|
59
|
+
id: string;
|
|
60
|
+
namespace: 'project';
|
|
61
|
+
props: string[];
|
|
62
|
+
slots: string[];
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export declare const componentDrafts: readonly ComponentDraft[];
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { ComponentRegistry, manifestPropFields } from '@elytracms/component-registry';
|
|
2
|
+
import { basePrimitives, getImplementation } from '@elytracms/runtime-renderer';
|
|
3
|
+
import { getActiveProjectSlug, resolveDeploymentComponents } from '../workspace';
|
|
4
|
+
import { projectComponentImplementations, projectComponentManifests } from './project-components';
|
|
5
|
+
/**
|
|
6
|
+
* EC-194/EC-208/EC-223: the consuming repo's OWN real components, INJECTED through
|
|
7
|
+
* config-as-code (the mount contract). The active project's `components` field holds
|
|
8
|
+
* the live (manifest + implementation) pairs the consumer's `elytra.config.ts` handed
|
|
9
|
+
* in by dependency injection — for Aurora these live in
|
|
10
|
+
* `apps/example-site/components/marketing` (Next-free, so they render identically in
|
|
11
|
+
* the studio canvas and the host). No `@site` alias and no static codegen seam: the
|
|
12
|
+
* registry reads the live set off the resolved config. Absent any, the studio falls
|
|
13
|
+
* back to the built-in demo fixtures (golden path).
|
|
14
|
+
*/
|
|
15
|
+
function projectComponents() {
|
|
16
|
+
const components = resolveDeploymentComponents();
|
|
17
|
+
if (components && components.length > 0) {
|
|
18
|
+
return {
|
|
19
|
+
manifests: components.map((c) => c.manifest),
|
|
20
|
+
implementations: Object.fromEntries(components.map((c) => [c.manifest.id, c.implementation])),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return { manifests: projectComponentManifests, implementations: projectComponentImplementations };
|
|
24
|
+
}
|
|
25
|
+
/** Compose a StudioRegistry from the base primitives plus a project component set. */
|
|
26
|
+
function buildStudioRegistry(project) {
|
|
27
|
+
const base = basePrimitives();
|
|
28
|
+
// Inline-editable opt-ins (EC-158) live directly on the base-primitive
|
|
29
|
+
// manifests (`Heading.text`, `Text.value`) in `@elytracms/runtime-renderer`.
|
|
30
|
+
return {
|
|
31
|
+
registry: new ComponentRegistry([...base.manifests, ...project.manifests]),
|
|
32
|
+
implementations: { ...base.implementations, ...project.implementations },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
let cached = null;
|
|
36
|
+
let cachedSlug = null;
|
|
37
|
+
export function getStudioRegistry() {
|
|
38
|
+
// Re-derive when the active project changes — different projects may register
|
|
39
|
+
// different component libraries (per-project registry, AD-8).
|
|
40
|
+
const slug = getActiveProjectSlug();
|
|
41
|
+
if (cached && cachedSlug === slug)
|
|
42
|
+
return cached;
|
|
43
|
+
cached = buildStudioRegistry(projectComponents());
|
|
44
|
+
cachedSlug = slug;
|
|
45
|
+
return cached;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The built-in demo fixtures as a StudioRegistry, independent of the active
|
|
49
|
+
* project's `components` config ref. This is the golden-path component set
|
|
50
|
+
* (`project.MarketingHero`, `FeatureCard`, `PricingCallout`, `LegacyBanner`) used
|
|
51
|
+
* when a project declares no ref — and the deterministic registry that blocks /
|
|
52
|
+
* clipboard / thumbnail tests pin to, so they assert against a known component set
|
|
53
|
+
* regardless of which library `elytra.config.ts` happens to select (EC-194).
|
|
54
|
+
*/
|
|
55
|
+
export function fixtureStudioRegistry() {
|
|
56
|
+
return buildStudioRegistry({
|
|
57
|
+
manifests: projectComponentManifests,
|
|
58
|
+
implementations: projectComponentImplementations,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Adapt the live registry to the reference-index `ManifestLookup` contract
|
|
63
|
+
* (EC-190): a component id → its prop field-defs, name-injected. Threaded into
|
|
64
|
+
* `attachReferenceIndex` so relation/asset props inside compositions index
|
|
65
|
+
* field-type-driven, with no persistence-layer dependency on the registry.
|
|
66
|
+
*/
|
|
67
|
+
export function studioManifestLookup() {
|
|
68
|
+
const { registry } = getStudioRegistry();
|
|
69
|
+
return (componentId) => {
|
|
70
|
+
const manifest = registry.getManifest(componentId);
|
|
71
|
+
if (!manifest)
|
|
72
|
+
return undefined;
|
|
73
|
+
const props = Object.fromEntries(manifestPropFields(manifest).map((field) => [field.name, field]));
|
|
74
|
+
return { props };
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** A RenderContext for fixture previews (bindings resolve to undefined). */
|
|
78
|
+
export function previewContext(studio) {
|
|
79
|
+
return {
|
|
80
|
+
registry: studio.registry,
|
|
81
|
+
implementations: studio.implementations,
|
|
82
|
+
resolveBinding: () => undefined,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function componentStatus(studio, manifest) {
|
|
86
|
+
if (studio.registry.issues.some((i) => i.componentId === manifest.id))
|
|
87
|
+
return 'invalid';
|
|
88
|
+
if (!getImplementation(studio.implementations, manifest.id))
|
|
89
|
+
return 'incompatible';
|
|
90
|
+
return 'valid';
|
|
91
|
+
}
|
|
92
|
+
export function registryHealth(studio) {
|
|
93
|
+
const all = studio.registry.list();
|
|
94
|
+
const health = { total: all.length, valid: 0, incompatible: 0, invalid: 0 };
|
|
95
|
+
for (const m of all)
|
|
96
|
+
health[componentStatus(studio, m)] += 1;
|
|
97
|
+
return health;
|
|
98
|
+
}
|
|
99
|
+
export const componentDrafts = [
|
|
100
|
+
{
|
|
101
|
+
id: 'draft_testimonial',
|
|
102
|
+
status: 'draft',
|
|
103
|
+
source: 'ai',
|
|
104
|
+
title: 'Testimonial',
|
|
105
|
+
prompt: 'A customer testimonial card with a quote, author name, and avatar.',
|
|
106
|
+
manifestPreview: {
|
|
107
|
+
id: 'project.Testimonial',
|
|
108
|
+
namespace: 'project',
|
|
109
|
+
props: ['quote', 'authorName', 'avatar'],
|
|
110
|
+
slots: [],
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/registry/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ComponentNode, JsonValue } from '@elytracms/project-graph';
|
|
2
|
+
import type { ComponentManifest } from '@elytracms/component-registry';
|
|
3
|
+
/** A named, renderable preview state for a component. */
|
|
4
|
+
export interface PreviewSpec {
|
|
5
|
+
name: string;
|
|
6
|
+
node: ComponentNode;
|
|
7
|
+
}
|
|
8
|
+
/** Build a node from a manifest's defaults, overlaying any provided prop values. */
|
|
9
|
+
export declare function nodeFromProps(manifest: ComponentManifest, overrides: Record<string, JsonValue>, id: string): ComponentNode;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the preview states for a component (brief §7.2, §8.3, EC-054):
|
|
12
|
+
* declared manifest fixtures first; otherwise authored primitive previews;
|
|
13
|
+
* otherwise a single default-props preview. Deterministic ids throughout.
|
|
14
|
+
*/
|
|
15
|
+
export declare function previewSpecs(manifest: ComponentManifest): PreviewSpec[];
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { staticProp } from '@elytracms/project-graph';
|
|
2
|
+
/**
|
|
3
|
+
* Node ids are derived deterministically from a stable base (manifest id +
|
|
4
|
+
* fixture index) so previews are byte-identical across SSR and client hydration
|
|
5
|
+
* and reproducible across runs — no module-level counter, no time/random.
|
|
6
|
+
*/
|
|
7
|
+
function text(value, id) {
|
|
8
|
+
return { id, componentId: 'base.primitives.Text', props: { value: staticProp(value) } };
|
|
9
|
+
}
|
|
10
|
+
/** Build a node from a manifest's defaults, overlaying any provided prop values. */
|
|
11
|
+
export function nodeFromProps(manifest, overrides, id) {
|
|
12
|
+
const props = {};
|
|
13
|
+
for (const [name, spec] of Object.entries(manifest.props)) {
|
|
14
|
+
const value = name in overrides ? overrides[name] : spec.default;
|
|
15
|
+
if (value !== undefined)
|
|
16
|
+
props[name] = staticProp(value);
|
|
17
|
+
}
|
|
18
|
+
return { id, componentId: manifest.id, props };
|
|
19
|
+
}
|
|
20
|
+
function nodeFromPropsRaw(componentId, props, id) {
|
|
21
|
+
const out = {};
|
|
22
|
+
for (const [k, v] of Object.entries(props))
|
|
23
|
+
out[k] = staticProp(v);
|
|
24
|
+
return { id, componentId, props: out };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Authored preview nodes for the base primitives (which ship no fixtures of their
|
|
28
|
+
* own). Slot-bearing primitives get sample children so previews aren't blank.
|
|
29
|
+
* Each builder receives a deterministic `base` id prefix.
|
|
30
|
+
*/
|
|
31
|
+
const PRIMITIVE_PREVIEWS = {
|
|
32
|
+
'base.primitives.Container': (base) => [
|
|
33
|
+
{
|
|
34
|
+
name: 'With content',
|
|
35
|
+
node: {
|
|
36
|
+
id: base,
|
|
37
|
+
componentId: 'base.primitives.Container',
|
|
38
|
+
slots: { children: [text('Container content', `${base}-c0`)] },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
'base.primitives.Stack': (base) => [
|
|
43
|
+
{
|
|
44
|
+
name: 'Gap 4',
|
|
45
|
+
node: {
|
|
46
|
+
id: base,
|
|
47
|
+
componentId: 'base.primitives.Stack',
|
|
48
|
+
props: { gap: staticProp(4) },
|
|
49
|
+
slots: {
|
|
50
|
+
children: [
|
|
51
|
+
text('Item one', `${base}-c0`),
|
|
52
|
+
text('Item two', `${base}-c1`),
|
|
53
|
+
text('Item three', `${base}-c2`),
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
'base.primitives.Grid': (base) => [
|
|
60
|
+
{
|
|
61
|
+
name: '2 columns',
|
|
62
|
+
node: {
|
|
63
|
+
id: base,
|
|
64
|
+
componentId: 'base.primitives.Grid',
|
|
65
|
+
props: { columns: staticProp(2), gap: staticProp(3) },
|
|
66
|
+
slots: {
|
|
67
|
+
children: [
|
|
68
|
+
text('Cell A', `${base}-c0`),
|
|
69
|
+
text('Cell B', `${base}-c1`),
|
|
70
|
+
text('Cell C', `${base}-c2`),
|
|
71
|
+
text('Cell D', `${base}-c3`),
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
'base.primitives.Text': (base) => [
|
|
78
|
+
{ name: 'Sample', node: nodeFromPropsRaw('base.primitives.Text', { value: 'The quick brown fox.' }, base) },
|
|
79
|
+
],
|
|
80
|
+
'base.primitives.Heading': (base) => [
|
|
81
|
+
{ name: 'Sample', node: nodeFromPropsRaw('base.primitives.Heading', { value: 'A section heading' }, base) },
|
|
82
|
+
],
|
|
83
|
+
'base.primitives.Image': (base) => [
|
|
84
|
+
{
|
|
85
|
+
name: 'Placeholder',
|
|
86
|
+
node: nodeFromPropsRaw('base.primitives.Image', { src: 'https://placehold.co/320x180', alt: 'Placeholder image' }, base),
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
'base.primitives.Button': (base) => [
|
|
90
|
+
{ name: 'Sample', node: nodeFromPropsRaw('base.primitives.Button', { label: 'Click me' }, base) },
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Resolve the preview states for a component (brief §7.2, §8.3, EC-054):
|
|
95
|
+
* declared manifest fixtures first; otherwise authored primitive previews;
|
|
96
|
+
* otherwise a single default-props preview. Deterministic ids throughout.
|
|
97
|
+
*/
|
|
98
|
+
export function previewSpecs(manifest) {
|
|
99
|
+
if (manifest.fixtures && manifest.fixtures.length > 0) {
|
|
100
|
+
return manifest.fixtures.map((fixture, i) => ({
|
|
101
|
+
name: fixture.name,
|
|
102
|
+
node: nodeFromProps(manifest, fixture.props ?? {}, `preview-${manifest.id}-${i}`),
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
const authored = PRIMITIVE_PREVIEWS[manifest.id];
|
|
106
|
+
if (authored)
|
|
107
|
+
return authored(`preview-${manifest.id}-0`);
|
|
108
|
+
return [{ name: 'Default', node: nodeFromProps(manifest, {}, `preview-${manifest.id}-0`) }];
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/lib/registry/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ComponentManifest } from '@elytracms/component-registry';
|
|
2
|
+
import type { ComponentType } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Sample `project.*` components for the Studio Components surface (brief §4.2,
|
|
5
|
+
* §8.3). These stand in for the project-specific components that are the center
|
|
6
|
+
* of the product: each declares a full manifest (prop schema metadata, defaults,
|
|
7
|
+
* inspector controls, binding permissions, slot rules, design-token hints, and
|
|
8
|
+
* preview fixtures) and ships a self-contained implementation the fixture runner
|
|
9
|
+
* renders. Deterministic — no time/random.
|
|
10
|
+
*/
|
|
11
|
+
type Props = Record<string, unknown>;
|
|
12
|
+
/** Project component manifests (including the deliberately-unimplemented one). */
|
|
13
|
+
export declare const projectComponentManifests: ComponentManifest[];
|
|
14
|
+
/** Implementations for the project components — note `LegacyBanner` is absent. */
|
|
15
|
+
export declare const projectComponentImplementations: Record<string, ComponentType<Props>>;
|
|
16
|
+
export {};
|