@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 @@
|
|
|
1
|
+
{"version":3,"file":"backend-gate.js","sourceRoot":"","sources":["../../src/components/backend-gate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The global header breadcrumb (EC-214). The shell owns the base trail —
|
|
4
|
+
* project (the switcher) › active section — and the deeper segments that reach
|
|
5
|
+
* the active *record* (a CMS collection, a document, a component) are
|
|
6
|
+
* contributed by the surface that actually has the data, since those names live
|
|
7
|
+
* below the shell (the CMS store mounts inside the section route, not the shell).
|
|
8
|
+
*
|
|
9
|
+
* A surface calls {@link useSetBreadcrumb} with the trail segments below its
|
|
10
|
+
* section; the header renders them after the section crumb. Last-writer-wins: at
|
|
11
|
+
* most one surface is active at a time, and the clear-on-unmount is guarded by an
|
|
12
|
+
* owner id so a route swap (old unmounts after new mounts) never wipes the new
|
|
13
|
+
* surface's crumbs.
|
|
14
|
+
*/
|
|
15
|
+
export interface BreadcrumbItem {
|
|
16
|
+
label: string;
|
|
17
|
+
/**
|
|
18
|
+
* Optional link target. Contributed crumbs address the single project splat
|
|
19
|
+
* (EC-223 Stage 6) — `to` is always the splat route and `params._splat` is the
|
|
20
|
+
* deep subpath (e.g. `cms/<collection>`). Only the CMS collection crumb is
|
|
21
|
+
* linkable today (the document editor's "back to the collection" step).
|
|
22
|
+
*/
|
|
23
|
+
to?: '/$projectId/$';
|
|
24
|
+
params?: {
|
|
25
|
+
projectId: string;
|
|
26
|
+
_splat: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export declare function BreadcrumbProvider({ children }: {
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
}): import("react").JSX.Element;
|
|
32
|
+
/** The contributed trail segments below the active section (header reader). */
|
|
33
|
+
export declare function useBreadcrumbTrail(): BreadcrumbItem[];
|
|
34
|
+
/**
|
|
35
|
+
* Contribute the breadcrumb segments below the active section while this surface
|
|
36
|
+
* is mounted; cleared automatically on unmount. Safe to call with a fresh array
|
|
37
|
+
* each render — the effect keys off the serialized items, not identity.
|
|
38
|
+
*/
|
|
39
|
+
export declare function useSetBreadcrumb(items: BreadcrumbItem[]): void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect, useId, useMemo, useState } from 'react';
|
|
3
|
+
const EMPTY = [];
|
|
4
|
+
// Split into a stable actions context (writers) and a value context (the header
|
|
5
|
+
// reader) so contributing a trail never re-renders the writing surface — only
|
|
6
|
+
// the header observes the value.
|
|
7
|
+
const BreadcrumbValueContext = createContext(EMPTY);
|
|
8
|
+
const BreadcrumbActionsContext = createContext(null);
|
|
9
|
+
export function BreadcrumbProvider({ children }) {
|
|
10
|
+
const [entry, setEntry] = useState(null);
|
|
11
|
+
const actions = useMemo(() => ({
|
|
12
|
+
set: (id, items) => setEntry({ id, items }),
|
|
13
|
+
// Only clear when we still own the trail — guards the route-swap race.
|
|
14
|
+
clear: (id) => setEntry((prev) => (prev?.id === id ? null : prev)),
|
|
15
|
+
}), []);
|
|
16
|
+
return (_jsx(BreadcrumbActionsContext.Provider, { value: actions, children: _jsx(BreadcrumbValueContext.Provider, { value: entry?.items ?? EMPTY, children: children }) }));
|
|
17
|
+
}
|
|
18
|
+
/** The contributed trail segments below the active section (header reader). */
|
|
19
|
+
export function useBreadcrumbTrail() {
|
|
20
|
+
return useContext(BreadcrumbValueContext);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Contribute the breadcrumb segments below the active section while this surface
|
|
24
|
+
* is mounted; cleared automatically on unmount. Safe to call with a fresh array
|
|
25
|
+
* each render — the effect keys off the serialized items, not identity.
|
|
26
|
+
*/
|
|
27
|
+
export function useSetBreadcrumb(items) {
|
|
28
|
+
const actions = useContext(BreadcrumbActionsContext);
|
|
29
|
+
const id = useId();
|
|
30
|
+
const serialized = JSON.stringify(items);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!actions)
|
|
33
|
+
return;
|
|
34
|
+
actions.set(id, JSON.parse(serialized));
|
|
35
|
+
return () => actions.clear(id);
|
|
36
|
+
}, [actions, id, serialized]);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=breadcrumb-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb-context.js","sourceRoot":"","sources":["../../src/components/breadcrumb-context.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAiCtF,MAAM,KAAK,GAAqB,EAAE,CAAA;AAElC,gFAAgF;AAChF,8EAA8E;AAC9E,iCAAiC;AACjC,MAAM,sBAAsB,GAAG,aAAa,CAAmB,KAAK,CAAC,CAAA;AACrE,MAAM,wBAAwB,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAA;AAE9E,MAAM,UAAU,kBAAkB,CAAC,EAAE,QAAQ,EAA2B;IACtE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiD,IAAI,CAAC,CAAA;IACxF,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC;QACL,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAC3C,uEAAuE;QACvE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACnE,CAAC,EACF,EAAE,CACH,CAAA;IACD,OAAO,CACL,KAAC,wBAAwB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAC/C,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,YAC1D,QAAQ,GACuB,GACA,CACrC,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAA;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAA;IACpD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAqB,CAAC,CAAA;QAC3D,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ComponentNode } from '@elytracms/project-graph';
|
|
2
|
+
import type { ComponentFixture, ComponentManifest } from '@elytracms/component-registry';
|
|
3
|
+
import type { StudioRegistry } from '@elytracms/studio/lib/registry';
|
|
4
|
+
/**
|
|
5
|
+
* Blocks panel model (EC-164) — the pure, React-free derivation behind the
|
|
6
|
+
* visual insert surface. Every registry manifest yields one tile per declared
|
|
7
|
+
* fixture (or a single default-props tile), grouped by manifest `category`
|
|
8
|
+
* and filtered by a free-text query over name / description / category — no
|
|
9
|
+
* hand-maintained panel config. Broken fixtures degrade to tiles carrying
|
|
10
|
+
* explicit `issues`, never to a missing entry or a crash.
|
|
11
|
+
*/
|
|
12
|
+
/** One insertable tile in the blocks panel. */
|
|
13
|
+
export interface BlockTile {
|
|
14
|
+
/** Stable identity (`<componentId>::<variant>` or `preset::<key>`). */
|
|
15
|
+
key: string;
|
|
16
|
+
/** Component id of the node the tile inserts. */
|
|
17
|
+
componentId: string;
|
|
18
|
+
title: string;
|
|
19
|
+
/** Variation label: the fixture name, `Default`, or a preset description. */
|
|
20
|
+
variant: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Validation problems detected while building the preview (unknown child
|
|
24
|
+
* component, undeclared slot, invalid fixture prop, missing
|
|
25
|
+
* implementation). A non-empty list marks the tile as degraded — it still
|
|
26
|
+
* renders and still inserts.
|
|
27
|
+
*/
|
|
28
|
+
issues: string[];
|
|
29
|
+
/** Deterministic-id subtree rendered live in the tile thumbnail. */
|
|
30
|
+
previewNode: ComponentNode;
|
|
31
|
+
/** Build the subtree to insert (ids are reassigned by the builder store). */
|
|
32
|
+
build: () => ComponentNode;
|
|
33
|
+
}
|
|
34
|
+
/** Tiles of one manifest `category`. */
|
|
35
|
+
export interface BlockGroup {
|
|
36
|
+
category: string;
|
|
37
|
+
tiles: BlockTile[];
|
|
38
|
+
}
|
|
39
|
+
export interface BlockFilter {
|
|
40
|
+
/** Case-insensitive match over id, title, description, and category. */
|
|
41
|
+
query?: string;
|
|
42
|
+
/** When set, only these component ids may be inserted (slot.allow). */
|
|
43
|
+
slotAllow?: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Intersect two component-id allow-lists. `undefined` means "no constraint from
|
|
47
|
+
* this source", so the result is the other list (copied); two present lists yield
|
|
48
|
+
* their set intersection, preserving the first list's order. This layers a
|
|
49
|
+
* composition field's top-level `allow` vocabulary over a slot's positional
|
|
50
|
+
* `allow` at the canvas root (EC-188): a component must satisfy BOTH leashes to be
|
|
51
|
+
* offered. An empty array stays empty ("allow nothing"); callers wanting the
|
|
52
|
+
* validator's "empty = allow any" must coalesce `[]` to `undefined` first (which
|
|
53
|
+
* `resolveInsertContext` does via its `length > 0` guard, mirroring
|
|
54
|
+
* `validateCompositionValue`).
|
|
55
|
+
*/
|
|
56
|
+
export declare function intersectAllow(slotAllow: readonly string[] | undefined, fieldAllow: readonly string[] | undefined): string[] | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Build the configured subtree a fixture describes: manifest defaults overlaid
|
|
59
|
+
* with the fixture's props, plus one default-props child node per
|
|
60
|
+
* `slotChildren` component id. Never throws — unknown components, undeclared
|
|
61
|
+
* slots, and invalid prop values become entries in `issues` while the node is
|
|
62
|
+
* still produced (the renderer shows its own visible fallbacks for them).
|
|
63
|
+
*/
|
|
64
|
+
export declare function fixtureSubtree(studio: StudioRegistry, manifest: ComponentManifest, fixture: ComponentFixture, baseId: string): {
|
|
65
|
+
node: ComponentNode;
|
|
66
|
+
issues: string[];
|
|
67
|
+
};
|
|
68
|
+
/** All tiles for one manifest: one per fixture, else a single default tile. */
|
|
69
|
+
export declare function tilesForManifest(studio: StudioRegistry, manifest: ComponentManifest): BlockTile[];
|
|
70
|
+
/**
|
|
71
|
+
* Derive the panel's category groups from the registry: filter by slot allow
|
|
72
|
+
* list and query, expand manifests into tiles, group by `category`, and sort
|
|
73
|
+
* categories alphabetically (registry order within a group). Deterministic.
|
|
74
|
+
*/
|
|
75
|
+
export declare function blockGroups(studio: StudioRegistry, filter?: BlockFilter): BlockGroup[];
|
|
76
|
+
/**
|
|
77
|
+
* Layout helper presets (EC-067) as panel tiles. Preview nodes are re-id'd
|
|
78
|
+
* deterministically so sibling React keys stay unique.
|
|
79
|
+
*/
|
|
80
|
+
export declare function presetTiles(slotAllow?: string[]): BlockTile[];
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { cloneWithNewIds } from '@elytracms/project-graph';
|
|
2
|
+
import { isCanvasEligible, propValueValidator } from '@elytracms/component-registry';
|
|
3
|
+
import { componentStatus } from '@elytracms/studio/lib/registry';
|
|
4
|
+
import { nodeFromProps, previewSpecs } from '@elytracms/studio/lib/registry/preview';
|
|
5
|
+
import { LAYOUT_PRESETS, nodeFromManifest } from './node-factory';
|
|
6
|
+
/**
|
|
7
|
+
* Intersect two component-id allow-lists. `undefined` means "no constraint from
|
|
8
|
+
* this source", so the result is the other list (copied); two present lists yield
|
|
9
|
+
* their set intersection, preserving the first list's order. This layers a
|
|
10
|
+
* composition field's top-level `allow` vocabulary over a slot's positional
|
|
11
|
+
* `allow` at the canvas root (EC-188): a component must satisfy BOTH leashes to be
|
|
12
|
+
* offered. An empty array stays empty ("allow nothing"); callers wanting the
|
|
13
|
+
* validator's "empty = allow any" must coalesce `[]` to `undefined` first (which
|
|
14
|
+
* `resolveInsertContext` does via its `length > 0` guard, mirroring
|
|
15
|
+
* `validateCompositionValue`).
|
|
16
|
+
*/
|
|
17
|
+
export function intersectAllow(slotAllow, fieldAllow) {
|
|
18
|
+
if (!slotAllow)
|
|
19
|
+
return fieldAllow ? [...fieldAllow] : undefined;
|
|
20
|
+
if (!fieldAllow)
|
|
21
|
+
return [...slotAllow];
|
|
22
|
+
const inField = new Set(fieldAllow);
|
|
23
|
+
return slotAllow.filter((id) => inField.has(id));
|
|
24
|
+
}
|
|
25
|
+
const UNCATEGORIZED = 'other';
|
|
26
|
+
function prefixedCounter(prefix) {
|
|
27
|
+
let n = 0;
|
|
28
|
+
return () => {
|
|
29
|
+
n += 1;
|
|
30
|
+
return `${prefix}-${n}`;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** A node built from a manifest's defaults with an explicit id. */
|
|
34
|
+
function defaultNode(manifest, id) {
|
|
35
|
+
return { ...nodeFromManifest(manifest), id };
|
|
36
|
+
}
|
|
37
|
+
/** Structured issues for a component that cannot render (EC-055 statuses). */
|
|
38
|
+
function manifestIssues(studio, manifest) {
|
|
39
|
+
const status = componentStatus(studio, manifest);
|
|
40
|
+
if (status === 'incompatible') {
|
|
41
|
+
return [`No implementation is registered for "${manifest.id}".`];
|
|
42
|
+
}
|
|
43
|
+
if (status === 'invalid') {
|
|
44
|
+
return studio.registry.issues
|
|
45
|
+
.filter((issue) => issue.componentId === manifest.id)
|
|
46
|
+
.map((issue) => issue.message);
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build the configured subtree a fixture describes: manifest defaults overlaid
|
|
52
|
+
* with the fixture's props, plus one default-props child node per
|
|
53
|
+
* `slotChildren` component id. Never throws — unknown components, undeclared
|
|
54
|
+
* slots, and invalid prop values become entries in `issues` while the node is
|
|
55
|
+
* still produced (the renderer shows its own visible fallbacks for them).
|
|
56
|
+
*/
|
|
57
|
+
export function fixtureSubtree(studio, manifest, fixture, baseId) {
|
|
58
|
+
const issues = [];
|
|
59
|
+
const fixtureProps = fixture.props ?? {};
|
|
60
|
+
for (const [name, value] of Object.entries(fixtureProps)) {
|
|
61
|
+
const spec = manifest.props[name];
|
|
62
|
+
if (!spec) {
|
|
63
|
+
issues.push(`Fixture "${fixture.name}" sets unknown prop "${name}".`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// EC-190: validate the fixture value with the prop's field-def validator.
|
|
67
|
+
if (!(propValueValidator(manifest, name)?.(value) ?? true)) {
|
|
68
|
+
issues.push(`Fixture "${fixture.name}" sets an invalid value for prop "${name}".`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const node = nodeFromProps(manifest, fixtureProps, baseId);
|
|
72
|
+
if (fixture.slotChildren) {
|
|
73
|
+
const declared = new Set(manifest.slots.map((slot) => slot.name));
|
|
74
|
+
const slots = {};
|
|
75
|
+
for (const [slotName, childIds] of Object.entries(fixture.slotChildren)) {
|
|
76
|
+
if (!declared.has(slotName)) {
|
|
77
|
+
issues.push(`Fixture "${fixture.name}" fills undeclared slot "${slotName}".`);
|
|
78
|
+
}
|
|
79
|
+
slots[slotName] = childIds.map((childId, index) => {
|
|
80
|
+
const id = `${baseId}-${slotName}-${index}`;
|
|
81
|
+
const childManifest = studio.registry.getManifest(childId);
|
|
82
|
+
if (!childManifest) {
|
|
83
|
+
issues.push(`Fixture "${fixture.name}" references unknown component "${childId}" in slot "${slotName}".`);
|
|
84
|
+
// Keep the reference: the renderer shows a visible missing-component fallback.
|
|
85
|
+
return { id, componentId: childId };
|
|
86
|
+
}
|
|
87
|
+
return defaultNode(childManifest, id);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (Object.keys(slots).length > 0)
|
|
91
|
+
node.slots = slots;
|
|
92
|
+
}
|
|
93
|
+
return { node, issues };
|
|
94
|
+
}
|
|
95
|
+
/** All tiles for one manifest: one per fixture, else a single default tile. */
|
|
96
|
+
export function tilesForManifest(studio, manifest) {
|
|
97
|
+
const title = manifest.title ?? manifest.id;
|
|
98
|
+
const baseIssues = manifestIssues(studio, manifest);
|
|
99
|
+
if (!manifest.fixtures || manifest.fixtures.length === 0) {
|
|
100
|
+
// No declared fixtures: preview via the shared preview specs (authored
|
|
101
|
+
// primitive previews or plain defaults), insert the bare manifest defaults.
|
|
102
|
+
const preview = previewSpecs(manifest)[0];
|
|
103
|
+
return [
|
|
104
|
+
{
|
|
105
|
+
key: `${manifest.id}::default`,
|
|
106
|
+
componentId: manifest.id,
|
|
107
|
+
title,
|
|
108
|
+
variant: 'Default',
|
|
109
|
+
description: manifest.description,
|
|
110
|
+
issues: baseIssues,
|
|
111
|
+
previewNode: preview.node,
|
|
112
|
+
build: () => nodeFromManifest(manifest),
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
}
|
|
116
|
+
return manifest.fixtures.map((fixture, index) => {
|
|
117
|
+
const { node, issues } = fixtureSubtree(studio, manifest, fixture, `preview-${manifest.id}-${index}`);
|
|
118
|
+
return {
|
|
119
|
+
key: `${manifest.id}::${fixture.name}`,
|
|
120
|
+
componentId: manifest.id,
|
|
121
|
+
title,
|
|
122
|
+
variant: fixture.name,
|
|
123
|
+
description: manifest.description,
|
|
124
|
+
issues: [...baseIssues, ...issues],
|
|
125
|
+
previewNode: node,
|
|
126
|
+
build: () => fixtureSubtree(studio, manifest, fixture, 'tmp').node,
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function matches(manifest, query) {
|
|
131
|
+
const hay = [manifest.id, manifest.title, manifest.description, manifest.category]
|
|
132
|
+
.filter(Boolean)
|
|
133
|
+
.join(' ')
|
|
134
|
+
.toLowerCase();
|
|
135
|
+
return hay.includes(query);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Derive the panel's category groups from the registry: filter by slot allow
|
|
139
|
+
* list and query, expand manifests into tiles, group by `category`, and sort
|
|
140
|
+
* categories alphabetically (registry order within a group). Deterministic.
|
|
141
|
+
*/
|
|
142
|
+
export function blockGroups(studio, filter = {}) {
|
|
143
|
+
const query = filter.query?.trim().toLowerCase();
|
|
144
|
+
const allow = filter.slotAllow;
|
|
145
|
+
const groups = new Map();
|
|
146
|
+
for (const manifest of studio.registry.list()) {
|
|
147
|
+
// EC-191: the canvas is client-rendered, so only canvas-eligible
|
|
148
|
+
// (client-renderable) components are offered for insertion; server-only / RSC
|
|
149
|
+
// components are usable in dev frames, not placed on the canvas.
|
|
150
|
+
if (!isCanvasEligible(manifest))
|
|
151
|
+
continue;
|
|
152
|
+
if (allow && !allow.includes(manifest.id))
|
|
153
|
+
continue;
|
|
154
|
+
if (query && !matches(manifest, query))
|
|
155
|
+
continue;
|
|
156
|
+
const category = manifest.category ?? UNCATEGORIZED;
|
|
157
|
+
const tiles = groups.get(category) ?? [];
|
|
158
|
+
tiles.push(...tilesForManifest(studio, manifest));
|
|
159
|
+
groups.set(category, tiles);
|
|
160
|
+
}
|
|
161
|
+
return [...groups.entries()]
|
|
162
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
163
|
+
.map(([category, tiles]) => ({ category, tiles }));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Layout helper presets (EC-067) as panel tiles. Preview nodes are re-id'd
|
|
167
|
+
* deterministically so sibling React keys stay unique.
|
|
168
|
+
*/
|
|
169
|
+
export function presetTiles(slotAllow) {
|
|
170
|
+
return LAYOUT_PRESETS.filter((preset) => !slotAllow || slotAllow.includes(preset.build().componentId)).map((preset) => ({
|
|
171
|
+
key: `preset::${preset.key}`,
|
|
172
|
+
componentId: preset.build().componentId,
|
|
173
|
+
title: preset.label,
|
|
174
|
+
variant: preset.description,
|
|
175
|
+
description: preset.description,
|
|
176
|
+
issues: [],
|
|
177
|
+
previewNode: cloneWithNewIds(preset.build(), prefixedCounter(`preview-preset-${preset.key}`)),
|
|
178
|
+
build: () => preset.build(),
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=blocks-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks-model.js","sourceRoot":"","sources":["../../../src/components/builder/blocks-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { InsertTarget } from '@elytracms/project-graph';
|
|
2
|
+
import type { ClipboardFragment } from '@elytracms/clipboard';
|
|
3
|
+
import type { StudioRegistry } from '@elytracms/studio/lib/registry';
|
|
4
|
+
import type { BlockTile } from './blocks-model';
|
|
5
|
+
/**
|
|
6
|
+
* Blocks panel (EC-164): the visual insert surface. Every registry component
|
|
7
|
+
* and each of its fixture variations is a tile with a live, scaled render —
|
|
8
|
+
* the component library *is* the insert surface. Clicking a tile inserts the
|
|
9
|
+
* fixture's configured subtree through the builder's `insert` action (one
|
|
10
|
+
* history entry, mirrored onto the `graph.insertNode` operation).
|
|
11
|
+
*/
|
|
12
|
+
export interface InsertContext {
|
|
13
|
+
target: InsertTarget;
|
|
14
|
+
/** When set, only these component ids may be inserted into the slot (slot.allow). */
|
|
15
|
+
slotAllow?: string[];
|
|
16
|
+
/** Human label of where the insert lands. */
|
|
17
|
+
destinationLabel: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* "Copy exact configuration" (EC-175, vision 3.3): the EC-174 fragment for a
|
|
21
|
+
* blocks-panel tile. Tiles backed by a declared manifest fixture go through
|
|
22
|
+
* `buildFragmentFromRegistryFixture` (the fixture's exact configuration);
|
|
23
|
+
* preset/default tiles fragment the same subtree the tile inserts. Both paths
|
|
24
|
+
* share `buildFragmentFromSubtree`, so the fragment shape — and the paste
|
|
25
|
+
* path — is identical to copying a live canvas instance.
|
|
26
|
+
*/
|
|
27
|
+
export declare function tileFragment(studio: StudioRegistry, tile: BlockTile, projectId: string): ClipboardFragment | null;
|
|
28
|
+
/**
|
|
29
|
+
* The Insert dialog never dismisses on pointer interactions outside its
|
|
30
|
+
* content. Rows scrolled below the list's fold keep their layout position
|
|
31
|
+
* directly above the modal overlay, so a coordinate-targeted click on a
|
|
32
|
+
* clipped row (agents click what the accessibility tree lists; humans can hit
|
|
33
|
+
* the boundary too) lands on the overlay — with default Radix behaviour that
|
|
34
|
+
* pointerdown dismissed the dialog and silently dropped the insert. Cancel
|
|
35
|
+
* stays explicit: Escape or the Close button.
|
|
36
|
+
*/
|
|
37
|
+
export declare function preventOutsideDismiss(event: {
|
|
38
|
+
preventDefault: () => void;
|
|
39
|
+
}): void;
|
|
40
|
+
export declare function BlocksPanel({ context, open, onOpenChange, }: {
|
|
41
|
+
context: InsertContext | null;
|
|
42
|
+
open: boolean;
|
|
43
|
+
onOpenChange: (open: boolean) => void;
|
|
44
|
+
}): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { AlertTriangle, ClipboardCopy, Search } from 'lucide-react';
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { buildFragmentFromRegistryFixture, buildFragmentFromSubtree, } from '@elytracms/clipboard';
|
|
5
|
+
import { getStudioRegistry } from '@elytracms/studio/lib/registry';
|
|
6
|
+
import { useCollab } from '../collab/collab-context';
|
|
7
|
+
import { useStudioClipboard } from './clipboard-actions';
|
|
8
|
+
import { beginDrag, endDrag, onDragSessionEnd } from './drag-session';
|
|
9
|
+
import { Code, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Input, Row, Text, } from '@elytracms/studio/ui';
|
|
10
|
+
import { cn } from '@elytracms/studio/lib/utils';
|
|
11
|
+
import { useBuilder } from './builder-store';
|
|
12
|
+
import { blockGroups, presetTiles } from './blocks-model';
|
|
13
|
+
import { ScaledFixtureThumbnail } from './fixture-thumbnail';
|
|
14
|
+
/**
|
|
15
|
+
* "Copy exact configuration" (EC-175, vision 3.3): the EC-174 fragment for a
|
|
16
|
+
* blocks-panel tile. Tiles backed by a declared manifest fixture go through
|
|
17
|
+
* `buildFragmentFromRegistryFixture` (the fixture's exact configuration);
|
|
18
|
+
* preset/default tiles fragment the same subtree the tile inserts. Both paths
|
|
19
|
+
* share `buildFragmentFromSubtree`, so the fragment shape — and the paste
|
|
20
|
+
* path — is identical to copying a live canvas instance.
|
|
21
|
+
*/
|
|
22
|
+
export function tileFragment(studio, tile, projectId) {
|
|
23
|
+
const manifest = studio.registry.getManifest(tile.componentId);
|
|
24
|
+
const fixture = manifest?.fixtures?.find((candidate) => candidate.name === tile.variant);
|
|
25
|
+
if (manifest && fixture) {
|
|
26
|
+
const built = buildFragmentFromRegistryFixture(manifest, fixture, {
|
|
27
|
+
source: { projectId },
|
|
28
|
+
});
|
|
29
|
+
return built.ok ? built.fragment : null;
|
|
30
|
+
}
|
|
31
|
+
return buildFragmentFromSubtree(tile.build(), { source: { projectId } });
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The Insert dialog never dismisses on pointer interactions outside its
|
|
35
|
+
* content. Rows scrolled below the list's fold keep their layout position
|
|
36
|
+
* directly above the modal overlay, so a coordinate-targeted click on a
|
|
37
|
+
* clipped row (agents click what the accessibility tree lists; humans can hit
|
|
38
|
+
* the boundary too) lands on the overlay — with default Radix behaviour that
|
|
39
|
+
* pointerdown dismissed the dialog and silently dropped the insert. Cancel
|
|
40
|
+
* stays explicit: Escape or the Close button.
|
|
41
|
+
*/
|
|
42
|
+
export function preventOutsideDismiss(event) {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
}
|
|
45
|
+
export function BlocksPanel({ context, open, onOpenChange, }) {
|
|
46
|
+
const builder = useBuilder();
|
|
47
|
+
const studio = getStudioRegistry();
|
|
48
|
+
const collab = useCollab();
|
|
49
|
+
const clipboard = useStudioClipboard();
|
|
50
|
+
const [query, setQuery] = useState('');
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (open)
|
|
53
|
+
setQuery('');
|
|
54
|
+
}, [open]);
|
|
55
|
+
const slotAllow = context?.slotAllow;
|
|
56
|
+
const trimmed = query.trim();
|
|
57
|
+
const groups = useMemo(() => blockGroups(studio, { query: trimmed || undefined, slotAllow }), [studio, trimmed, slotAllow]);
|
|
58
|
+
// Layout helpers keep their dedicated group while browsing (hidden once a
|
|
59
|
+
// query narrows the panel to registry matches), filtered by slot.allow.
|
|
60
|
+
const presets = useMemo(() => (trimmed ? [] : presetTiles(slotAllow)), [trimmed, slotAllow]);
|
|
61
|
+
// Drag-to-insert (EC-160): a tile is also a drag source. While the drag is
|
|
62
|
+
// live the modal (content + overlay + Radix body pointer lock) gets out of
|
|
63
|
+
// the way so the canvas and the page tree can receive the drop; the session
|
|
64
|
+
// ending restores it — and a successful drop closes the panel. The drop
|
|
65
|
+
// surfaces dispatch the single insert action; the panel only carries the
|
|
66
|
+
// payload (`tile.build`, the same fixture-subtree model click-insert uses).
|
|
67
|
+
const dragRestoreRef = useRef(null);
|
|
68
|
+
useEffect(() => onDragSessionEnd((outcome, session) => {
|
|
69
|
+
if (session.source !== 'blocks')
|
|
70
|
+
return;
|
|
71
|
+
dragRestoreRef.current?.();
|
|
72
|
+
dragRestoreRef.current = null;
|
|
73
|
+
if (outcome === 'dropped')
|
|
74
|
+
onOpenChange(false);
|
|
75
|
+
}), [onOpenChange]);
|
|
76
|
+
if (!context)
|
|
77
|
+
return null;
|
|
78
|
+
function insertTile(tile) {
|
|
79
|
+
builder.dispatch({ type: 'insert', target: context.target, node: tile.build() });
|
|
80
|
+
onOpenChange(false);
|
|
81
|
+
}
|
|
82
|
+
// "Copy exact configuration" (EC-175): same fragment + paste path as
|
|
83
|
+
// copying a live canvas instance.
|
|
84
|
+
function copyTile(tile) {
|
|
85
|
+
const fragment = tileFragment(studio, tile, collab.projectId);
|
|
86
|
+
if (fragment)
|
|
87
|
+
clipboard.copyFragment(fragment, `${tile.title} — ${tile.variant}`);
|
|
88
|
+
}
|
|
89
|
+
function handleTileDragStart(tile, e) {
|
|
90
|
+
beginDrag({
|
|
91
|
+
subject: { kind: 'component', componentId: tile.componentId },
|
|
92
|
+
source: 'blocks',
|
|
93
|
+
label: `${tile.title} — ${tile.variant}`,
|
|
94
|
+
buildNode: tile.build,
|
|
95
|
+
}, e.dataTransfer);
|
|
96
|
+
// Radix's modal layer locks pointer events on the body and the overlay
|
|
97
|
+
// sits above every drop surface. Lift both for the duration of the drag —
|
|
98
|
+
// after a tick, so the browser captures the tile as the drag image first.
|
|
99
|
+
const content = e.currentTarget.closest('[role="dialog"]');
|
|
100
|
+
const overlay = (content?.previousElementSibling ?? null);
|
|
101
|
+
const previousBodyPointerEvents = document.body.style.pointerEvents;
|
|
102
|
+
const hide = window.setTimeout(() => {
|
|
103
|
+
document.body.style.pointerEvents = 'auto';
|
|
104
|
+
for (const el of [content, overlay]) {
|
|
105
|
+
if (el) {
|
|
106
|
+
el.style.pointerEvents = 'none';
|
|
107
|
+
el.style.opacity = '0';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}, 0);
|
|
111
|
+
dragRestoreRef.current = () => {
|
|
112
|
+
window.clearTimeout(hide);
|
|
113
|
+
document.body.style.pointerEvents = previousBodyPointerEvents;
|
|
114
|
+
for (const el of [content, overlay]) {
|
|
115
|
+
if (el) {
|
|
116
|
+
el.style.pointerEvents = '';
|
|
117
|
+
el.style.opacity = '';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function handleTileDragEnd() {
|
|
123
|
+
// Trailing dragend after a handled drop is a no-op (endDrag is idempotent).
|
|
124
|
+
endDrag('cancelled');
|
|
125
|
+
}
|
|
126
|
+
const empty = groups.length === 0 && presets.length === 0;
|
|
127
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-3xl", onInteractOutside: preventOutsideDismiss, children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Insert block" }), _jsxs(DialogDescription, { children: ["Adds into ", _jsx(Code, { tone: "muted", children: context.destinationLabel }), "."] })] }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { autoFocus: true, value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search blocks\u2026", "aria-label": "Search blocks", className: "pl-8" })] }), _jsxs("div", { className: "max-h-[min(30rem,calc(100dvh-14rem))] overflow-auto pr-1", children: [presets.length > 0 ? (_jsx(TileGroup, { heading: "layout helpers", tiles: presets, onInsert: insertTile, onCopy: copyTile, onTileDragStart: handleTileDragStart, onTileDragEnd: handleTileDragEnd })) : null, groups.map((group) => (_jsx(TileGroup, { heading: group.category, tiles: group.tiles, onInsert: insertTile, onCopy: copyTile, onTileDragStart: handleTileDragStart, onTileDragEnd: handleTileDragEnd }, group.category))), empty ? (_jsx(Text, { size: "sm", tone: "muted", className: "p-3", children: slotAllow ? 'No allowed components match.' : `No components match “${query}”.` })) : null] })] }) }));
|
|
128
|
+
}
|
|
129
|
+
function TileGroup({ heading, tiles, onInsert, onCopy, onTileDragStart, onTileDragEnd, }) {
|
|
130
|
+
return (_jsxs("section", { className: "mb-3", "aria-label": heading, children: [_jsxs(Row, { gap: "2", className: "px-1 py-1.5", children: [_jsx(Code, { tone: "muted", className: "capitalize", children: heading }), _jsx(Text, { size: "xs", tone: "muted", children: tiles.length })] }), _jsx("div", { className: "grid grid-cols-3 gap-2", children: tiles.map((tile) => (_jsx(BlockTileButton, { tile: tile, onClick: () => onInsert(tile), onCopy: () => onCopy(tile), onDragStart: (e) => onTileDragStart(tile, e), onDragEnd: onTileDragEnd }, tile.key))) })] }));
|
|
131
|
+
}
|
|
132
|
+
function BlockTileButton({ tile, onClick, onCopy, onDragStart, onDragEnd, }) {
|
|
133
|
+
const degraded = tile.issues.length > 0;
|
|
134
|
+
// Not a native <button>: live thumbnails are real renders and may contain
|
|
135
|
+
// interactive elements (e.g. the Button primitive), and a nested <button>
|
|
136
|
+
// is invalid HTML. The thumbnail itself is aria-hidden and pointer-inert.
|
|
137
|
+
return (_jsxs("div", { role: "button", tabIndex: 0, draggable: true, onDragStart: onDragStart, onDragEnd: onDragEnd, onClick: onClick, onKeyDown: (event) => {
|
|
138
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
onClick();
|
|
141
|
+
}
|
|
142
|
+
}, "data-block-tile": tile.key, "data-block-degraded": degraded || undefined, "aria-label": `Insert ${tile.title} — ${tile.variant}`, title: tile.description, className: cn('group/tile relative flex cursor-pointer flex-col gap-1.5 rounded-lg border bg-card p-2 text-left outline-none transition-colors', 'hover:border-ring/60 hover:bg-muted/60 focus-visible:ring-2 focus-visible:ring-ring/60', degraded ? 'border-amber-500/50' : 'border-border'), children: [_jsx("button", { type: "button", "aria-label": `Copy exact configuration — ${tile.title} (${tile.variant})`, title: "Copy exact configuration", "data-block-copy": tile.key, onClick: (event) => {
|
|
143
|
+
event.stopPropagation();
|
|
144
|
+
onCopy();
|
|
145
|
+
}, className: cn('absolute right-1.5 top-1.5 z-10 rounded-md border border-border bg-popover/90 p-1 text-muted-foreground', 'opacity-0 transition-opacity hover:text-foreground focus-visible:opacity-100 group-hover/tile:opacity-100'), children: _jsx(ClipboardCopy, { className: "size-3.5", "aria-hidden": true }) }), _jsx(ScaledFixtureThumbnail, { node: tile.previewNode }), _jsxs(Row, { gap: "1", className: "w-full min-w-0", children: [_jsx("span", { className: "truncate text-xs font-medium", children: tile.title }), _jsx("span", { className: "ml-auto shrink-0 text-[0.7rem] text-muted-foreground", children: tile.variant })] }), degraded ? (_jsxs(Row, { gap: "1", className: "w-full min-w-0 text-amber-700 dark:text-amber-400", children: [_jsx(AlertTriangle, { "aria-hidden": true, className: "size-3 shrink-0" }), _jsx("span", { className: "truncate text-[0.7rem]", title: tile.issues.join('\n'), children: tile.issues[0] })] })) : null] }));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=blocks-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks-panel.js","sourceRoot":"","sources":["../../../src/components/builder/blocks-panel.tsx"],"names":[],"mappings":"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"}
|