@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,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row-selection model for the collection table (EC-169). Pure data +
|
|
3
|
+
* functions: plain click toggles one row (and moves the range anchor),
|
|
4
|
+
* shift-click selects the whole anchor→row range, the header checkbox selects
|
|
5
|
+
* everything in the current view. The table prunes against the *visible*
|
|
6
|
+
* (filtered) row order at read time, so a selection never silently includes
|
|
7
|
+
* rows the active view filtered out.
|
|
8
|
+
*/
|
|
9
|
+
export const EMPTY_SELECTION = { ids: [], anchorId: null };
|
|
10
|
+
/**
|
|
11
|
+
* Apply one row-checkbox click. `shiftRange` (shift held, with a valid anchor)
|
|
12
|
+
* selects every row between the anchor and the clicked row inclusive; a plain
|
|
13
|
+
* click toggles the row and re-anchors on it.
|
|
14
|
+
*/
|
|
15
|
+
export function toggleRow(state, orderedIds, id, shiftRange) {
|
|
16
|
+
if (shiftRange && state.anchorId !== null) {
|
|
17
|
+
const anchorIndex = orderedIds.indexOf(state.anchorId);
|
|
18
|
+
const clickedIndex = orderedIds.indexOf(id);
|
|
19
|
+
if (anchorIndex >= 0 && clickedIndex >= 0) {
|
|
20
|
+
const [lo, hi] = anchorIndex <= clickedIndex ? [anchorIndex, clickedIndex] : [clickedIndex, anchorIndex];
|
|
21
|
+
const range = orderedIds.slice(lo, hi + 1);
|
|
22
|
+
return { ids: [...new Set([...state.ids, ...range])], anchorId: state.anchorId };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const selected = state.ids.includes(id);
|
|
26
|
+
return {
|
|
27
|
+
ids: selected ? state.ids.filter((existing) => existing !== id) : [...state.ids, id],
|
|
28
|
+
anchorId: id,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** Select every row in the current view (header checkbox). */
|
|
32
|
+
export function selectAll(orderedIds) {
|
|
33
|
+
return { ids: [...orderedIds], anchorId: null };
|
|
34
|
+
}
|
|
35
|
+
export function clearSelection() {
|
|
36
|
+
return EMPTY_SELECTION;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The selection that is actually in the current view, in view order — what
|
|
40
|
+
* the count, the header checkbox, and every bulk action operate on.
|
|
41
|
+
*/
|
|
42
|
+
export function visibleSelection(state, visibleIds) {
|
|
43
|
+
const selected = new Set(state.ids);
|
|
44
|
+
return visibleIds.filter((id) => selected.has(id));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../../src/lib/cms-views/selection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,CAAC,MAAM,eAAe,GAAmB,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AAE1E;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAAqB,EACrB,UAA6B,EAC7B,EAAU,EACV,UAAmB;IAEnB,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC3C,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GACZ,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YACzF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;YAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAA;QAClF,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvC,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;QACpF,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,UAA6B;IACrD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,CAAA;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAqB,EACrB,UAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { CmsDocument, CollectionDef, FieldDef, LocaleConfig } from '@elytracms/cms-core';
|
|
3
|
+
import type { FilterOperator, FilterScalar } from '@elytracms/content';
|
|
4
|
+
/**
|
|
5
|
+
* The pure table-view model for the CMS collection table (EC-169).
|
|
6
|
+
*
|
|
7
|
+
* A view bundles three things: filters in the closed AD-3 vocabulary
|
|
8
|
+
* (`eq`/`in`/`lt`/`lte`/`gt`/`gte`, AND-only — exactly `@elytracms/content`'s
|
|
9
|
+
* query model, evaluated with the same matching/ordering primitives), a sort
|
|
10
|
+
* (field + direction), and the visible/ordered columns. Everything here is
|
|
11
|
+
* plain data + functions so filtering, dirtiness, and column edits are
|
|
12
|
+
* testable without a DOM.
|
|
13
|
+
*
|
|
14
|
+
* Filters are offered ONLY on fields the schema declares `filterable: true`
|
|
15
|
+
* (EC-143), plus one built-in option: the document's publication state. The
|
|
16
|
+
* state is document metadata, not a schema field — it powers the
|
|
17
|
+
* "show me drafts → bulk publish" working set and still speaks only the
|
|
18
|
+
* closed vocabulary (`eq`/`in`).
|
|
19
|
+
*/
|
|
20
|
+
export declare const filterScalarSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
|
|
21
|
+
export declare const filterClauseSchema: z.ZodObject<{
|
|
22
|
+
field: z.ZodString;
|
|
23
|
+
op: z.ZodEnum<{
|
|
24
|
+
in: "in";
|
|
25
|
+
eq: "eq";
|
|
26
|
+
gt: "gt";
|
|
27
|
+
gte: "gte";
|
|
28
|
+
lt: "lt";
|
|
29
|
+
lte: "lte";
|
|
30
|
+
}>;
|
|
31
|
+
value: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type FilterClause = z.infer<typeof filterClauseSchema>;
|
|
34
|
+
export declare const viewSortSchema: z.ZodObject<{
|
|
35
|
+
field: z.ZodString;
|
|
36
|
+
dir: z.ZodEnum<{
|
|
37
|
+
asc: "asc";
|
|
38
|
+
desc: "desc";
|
|
39
|
+
}>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export type ViewSort = z.infer<typeof viewSortSchema>;
|
|
42
|
+
export declare const tableViewStateSchema: z.ZodObject<{
|
|
43
|
+
filters: z.ZodArray<z.ZodObject<{
|
|
44
|
+
field: z.ZodString;
|
|
45
|
+
op: z.ZodEnum<{
|
|
46
|
+
in: "in";
|
|
47
|
+
eq: "eq";
|
|
48
|
+
gt: "gt";
|
|
49
|
+
gte: "gte";
|
|
50
|
+
lt: "lt";
|
|
51
|
+
lte: "lte";
|
|
52
|
+
}>;
|
|
53
|
+
value: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>;
|
|
54
|
+
}, z.core.$strip>>;
|
|
55
|
+
sort: z.ZodNullable<z.ZodObject<{
|
|
56
|
+
field: z.ZodString;
|
|
57
|
+
dir: z.ZodEnum<{
|
|
58
|
+
asc: "asc";
|
|
59
|
+
desc: "desc";
|
|
60
|
+
}>;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
columns: z.ZodArray<z.ZodString>;
|
|
63
|
+
hidden: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
export type TableViewState = z.infer<typeof tableViewStateSchema>;
|
|
66
|
+
/**
|
|
67
|
+
* Sentinel field key for the publication state. `$`-prefixed so it can never
|
|
68
|
+
* collide with a schema field name (`fieldDefSchema` names are identifiers).
|
|
69
|
+
*/
|
|
70
|
+
export declare const STATE_FIELD = "$state";
|
|
71
|
+
/** One field the filter builder may offer. */
|
|
72
|
+
export interface FilterableFieldOption {
|
|
73
|
+
/** Clause field key: a schema field name, or {@link STATE_FIELD}. */
|
|
74
|
+
field: string;
|
|
75
|
+
label: string;
|
|
76
|
+
/** The schema field def, or `null` for the built-in publication state. */
|
|
77
|
+
def: FieldDef | null;
|
|
78
|
+
}
|
|
79
|
+
export declare const STATE_OPTION: FilterableFieldOption;
|
|
80
|
+
/**
|
|
81
|
+
* The closed list of fields the filter builder offers: exactly the schema's
|
|
82
|
+
* `filterable: true` fields (EC-143) plus the publication state. Nothing else
|
|
83
|
+
* is ever offered — the UI builds queries, it does not invent a language.
|
|
84
|
+
*/
|
|
85
|
+
export declare function filterableFieldOptions(collection: CollectionDef): FilterableFieldOption[];
|
|
86
|
+
export declare function filterOptionFor(collection: CollectionDef, field: string): FilterableFieldOption | undefined;
|
|
87
|
+
/** Display order + labels for the closed vocabulary. */
|
|
88
|
+
export declare const OPERATOR_LABELS: Record<FilterOperator, string>;
|
|
89
|
+
/**
|
|
90
|
+
* The vocabulary subset that makes sense for a field's type. Always a subset
|
|
91
|
+
* of the closed `FILTER_OPERATORS` — never an extension.
|
|
92
|
+
*/
|
|
93
|
+
export declare function operatorsFor(option: FilterableFieldOption): FilterOperator[];
|
|
94
|
+
/** A sensible starting clause when a field is added to the builder. */
|
|
95
|
+
export declare function defaultClause(option: FilterableFieldOption): FilterClause;
|
|
96
|
+
/** Coerce one text input into the scalar a clause compares against. */
|
|
97
|
+
export declare function scalarFromText(option: FilterableFieldOption | undefined, raw: string): FilterScalar;
|
|
98
|
+
/** Parse a comma-separated list for the `in` operator. */
|
|
99
|
+
export declare function scalarListFromText(option: FilterableFieldOption | undefined, raw: string): FilterScalar[];
|
|
100
|
+
export declare function scalarListToText(value: FilterScalar | FilterScalar[]): string;
|
|
101
|
+
/** A structured problem with one clause (by index in the filter list). */
|
|
102
|
+
export interface ClauseIssue {
|
|
103
|
+
index: number;
|
|
104
|
+
message: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate clauses against the collection schema. Schema-field clauses run
|
|
108
|
+
* through the canonical `validateWhere` (EC-143: `filterable` enforcement +
|
|
109
|
+
* operator/value shape); state clauses check the `eq`/`in` subset and the
|
|
110
|
+
* draft/published value set. Invalid clauses (e.g. a persisted view whose
|
|
111
|
+
* field is no longer filterable) are reported — never silently applied.
|
|
112
|
+
*/
|
|
113
|
+
export declare function validateClauses(collection: CollectionDef, clauses: readonly FilterClause[]): ClauseIssue[];
|
|
114
|
+
/**
|
|
115
|
+
* Published-ness source for the `$state` pseudo-field (EC-224): the version
|
|
116
|
+
* POINTER, supplied by the caller as `cms.isPublished`. Defaults to "nothing
|
|
117
|
+
* published" — a bare row carries no publish signal now that the flat `state`
|
|
118
|
+
* field is gone, so the table (which knows the pointer) passes the real
|
|
119
|
+
* predicate; fixtures/tests that don't surface `$state` get the safe default.
|
|
120
|
+
*/
|
|
121
|
+
export type IsPublished = (doc: CmsDocument) => boolean;
|
|
122
|
+
/** Does a document satisfy one clause? Same semantics as the content accessors. */
|
|
123
|
+
export declare function clauseMatches(collection: CollectionDef, doc: CmsDocument, localeConfig: LocaleConfig, clause: FilterClause, isPublished?: IsPublished): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Sort documents by one column in the canonical deterministic order
|
|
126
|
+
* (`compareListEntries`: typed value order, id-ascending tiebreak). Unlike the
|
|
127
|
+
* content accessors, the *table* may sort any rendered column — sorting is a
|
|
128
|
+
* presentation concern here; the `filterable` flag governs filters.
|
|
129
|
+
*/
|
|
130
|
+
export declare function sortViewDocuments(collection: CollectionDef, docs: readonly CmsDocument[], localeConfig: LocaleConfig, sort: ViewSort | null, isPublished?: IsPublished): CmsDocument[];
|
|
131
|
+
/** The filtered + sorted documents of a view, plus any clause issues. */
|
|
132
|
+
export interface AppliedViewState {
|
|
133
|
+
docs: CmsDocument[];
|
|
134
|
+
/** Clauses that failed validation — reported AND excluded from matching. */
|
|
135
|
+
issues: ClauseIssue[];
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Apply a view state to a document list: validate clauses, AND-match the valid
|
|
139
|
+
* ones, sort. Invalid clauses never filter silently — they come back as
|
|
140
|
+
* issues for the UI to surface.
|
|
141
|
+
*/
|
|
142
|
+
export declare function applyViewState(collection: CollectionDef, docs: readonly CmsDocument[], localeConfig: LocaleConfig, state: TableViewState, isPublished?: IsPublished): AppliedViewState;
|
|
143
|
+
/** The id of the unnamed built-in "All documents" view. */
|
|
144
|
+
export declare const ALL_VIEW_ID = "all";
|
|
145
|
+
/** The default (unnamed) view: no filters, no sort, every field visible. */
|
|
146
|
+
export declare function defaultViewState(collection: CollectionDef): TableViewState;
|
|
147
|
+
/** Deep-cloned canonical form (stable key order via the Zod shape). */
|
|
148
|
+
export declare function normalizeViewState(state: TableViewState): TableViewState;
|
|
149
|
+
/** Structural equality on normalized states — drives the "unsaved changes" affordance. */
|
|
150
|
+
export declare function viewStatesEqual(a: TableViewState, b: TableViewState): boolean;
|
|
151
|
+
/** One column of a view resolved against the current schema (EC-213). */
|
|
152
|
+
export interface ResolvedColumn {
|
|
153
|
+
/** The schema field name. */
|
|
154
|
+
field: string;
|
|
155
|
+
/** Whether the column renders (`false` ⇒ in {@link TableViewState.hidden}). */
|
|
156
|
+
visible: boolean;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Resolve a view's columns against the live schema (EC-213): every schema
|
|
160
|
+
* field exactly once, in the view's saved order, with any fields the view
|
|
161
|
+
* predates appended (visible) and any fields no longer in the schema dropped.
|
|
162
|
+
* This is the single source of truth for "which columns, in what order, shown
|
|
163
|
+
* or hidden" — order is preserved across hide/show because visibility lives in
|
|
164
|
+
* `hidden`, never in the order.
|
|
165
|
+
*/
|
|
166
|
+
export declare function resolveColumns(collection: CollectionDef, state: TableViewState): ResolvedColumn[];
|
|
167
|
+
/** The visible columns of a view, in render order (EC-213). */
|
|
168
|
+
export declare function visibleColumns(collection: CollectionDef, state: TableViewState): string[];
|
|
169
|
+
/**
|
|
170
|
+
* The title/link column: the first visible column (EC-213 — there is no
|
|
171
|
+
* separate primary-column selector). Falls back to the schema title field, then
|
|
172
|
+
* the first field, then `id`, for the degenerate "everything hidden" case.
|
|
173
|
+
*/
|
|
174
|
+
export declare function primaryColumn(collection: CollectionDef, state: TableViewState): string;
|
|
175
|
+
/**
|
|
176
|
+
* The canonical, schema-resolved form of a view state — full column order with
|
|
177
|
+
* `hidden` pruned to live fields (EC-213). Two states that render identically
|
|
178
|
+
* share one canonical form, so dirty-detection never trips on a mere column
|
|
179
|
+
* reconciliation or a stale `hidden` entry (only a real filter/sort/visibility/
|
|
180
|
+
* order change counts as "unsaved").
|
|
181
|
+
*/
|
|
182
|
+
export declare function canonicalViewState(collection: CollectionDef, state: TableViewState): TableViewState;
|
|
183
|
+
/**
|
|
184
|
+
* Toggle a column's visibility — position is preserved (EC-213): visibility
|
|
185
|
+
* lives in `hidden`, the order in `columns` is untouched. Columns the saved
|
|
186
|
+
* order predates are pinned into `columns` first so their place is stable.
|
|
187
|
+
*/
|
|
188
|
+
export declare function toggleColumn(collection: CollectionDef, state: TableViewState, field: string): TableViewState;
|
|
189
|
+
/** Move a column one position left (-1) or right (+1) in the full column order. */
|
|
190
|
+
export declare function moveColumn(collection: CollectionDef, state: TableViewState, field: string, delta: -1 | 1): TableViewState;
|
|
191
|
+
/** A fresh id for a saved view (uniqueness, not determinism, is the point). */
|
|
192
|
+
export declare function newViewId(): string;
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { documentDefaultLocale, resolveField, titleFieldOf } from '@elytracms/cms-core';
|
|
3
|
+
import { FILTER_OPERATORS, compareListEntries, filterScalarOf, filterableFields, matchesCondition, validateWhere, } from '@elytracms/content';
|
|
4
|
+
/**
|
|
5
|
+
* The pure table-view model for the CMS collection table (EC-169).
|
|
6
|
+
*
|
|
7
|
+
* A view bundles three things: filters in the closed AD-3 vocabulary
|
|
8
|
+
* (`eq`/`in`/`lt`/`lte`/`gt`/`gte`, AND-only — exactly `@elytracms/content`'s
|
|
9
|
+
* query model, evaluated with the same matching/ordering primitives), a sort
|
|
10
|
+
* (field + direction), and the visible/ordered columns. Everything here is
|
|
11
|
+
* plain data + functions so filtering, dirtiness, and column edits are
|
|
12
|
+
* testable without a DOM.
|
|
13
|
+
*
|
|
14
|
+
* Filters are offered ONLY on fields the schema declares `filterable: true`
|
|
15
|
+
* (EC-143), plus one built-in option: the document's publication state. The
|
|
16
|
+
* state is document metadata, not a schema field — it powers the
|
|
17
|
+
* "show me drafts → bulk publish" working set and still speaks only the
|
|
18
|
+
* closed vocabulary (`eq`/`in`).
|
|
19
|
+
*/
|
|
20
|
+
// --- Schemas (single source of truth — persisted view records reuse these) ----
|
|
21
|
+
export const filterScalarSchema = z.union([z.string(), z.number(), z.boolean()]);
|
|
22
|
+
export const filterClauseSchema = z.object({
|
|
23
|
+
/** A schema field name, or {@link STATE_FIELD} for the publication state. */
|
|
24
|
+
field: z.string().min(1),
|
|
25
|
+
op: z.enum(FILTER_OPERATORS),
|
|
26
|
+
/** `in` carries an array of scalars; every other operator one scalar. */
|
|
27
|
+
value: z.union([filterScalarSchema, z.array(filterScalarSchema)]),
|
|
28
|
+
});
|
|
29
|
+
export const viewSortSchema = z.object({
|
|
30
|
+
field: z.string().min(1),
|
|
31
|
+
dir: z.enum(['asc', 'desc']),
|
|
32
|
+
});
|
|
33
|
+
export const tableViewStateSchema = z.object({
|
|
34
|
+
/** AND-only list of conditions (no OR, no nesting — vision AD-3). */
|
|
35
|
+
filters: z.array(filterClauseSchema),
|
|
36
|
+
sort: viewSortSchema.nullable(),
|
|
37
|
+
/**
|
|
38
|
+
* The canonical column order (field names) — EVERY column, visible or not
|
|
39
|
+
* (EC-213). Order is independent of visibility: hiding then re-showing a
|
|
40
|
+
* column keeps its place. Schema fields absent here resolve in at the end
|
|
41
|
+
* (see {@link resolveColumns}).
|
|
42
|
+
*/
|
|
43
|
+
columns: z.array(z.string().min(1)),
|
|
44
|
+
/**
|
|
45
|
+
* The subset of {@link TableViewState.columns} that is hidden. Defaults to
|
|
46
|
+
* `[]` so views persisted before EC-213 (no `hidden` key) load unchanged.
|
|
47
|
+
*/
|
|
48
|
+
hidden: z.array(z.string().min(1)).default([]),
|
|
49
|
+
});
|
|
50
|
+
// --- The built-in publication-state filter column ------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Sentinel field key for the publication state. `$`-prefixed so it can never
|
|
53
|
+
* collide with a schema field name (`fieldDefSchema` names are identifiers).
|
|
54
|
+
*/
|
|
55
|
+
export const STATE_FIELD = '$state';
|
|
56
|
+
const STATE_VALUES = ['draft', 'published'];
|
|
57
|
+
export const STATE_OPTION = {
|
|
58
|
+
field: STATE_FIELD,
|
|
59
|
+
label: 'State',
|
|
60
|
+
def: null,
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The closed list of fields the filter builder offers: exactly the schema's
|
|
64
|
+
* `filterable: true` fields (EC-143) plus the publication state. Nothing else
|
|
65
|
+
* is ever offered — the UI builds queries, it does not invent a language.
|
|
66
|
+
*/
|
|
67
|
+
export function filterableFieldOptions(collection) {
|
|
68
|
+
const schemaOptions = filterableFields(collection).map((field) => ({
|
|
69
|
+
field: field.name,
|
|
70
|
+
label: field.form?.label ?? field.name,
|
|
71
|
+
def: field,
|
|
72
|
+
}));
|
|
73
|
+
return [...schemaOptions, STATE_OPTION];
|
|
74
|
+
}
|
|
75
|
+
export function filterOptionFor(collection, field) {
|
|
76
|
+
return filterableFieldOptions(collection).find((option) => option.field === field);
|
|
77
|
+
}
|
|
78
|
+
// --- Operators per field type ---------------------------------------------------
|
|
79
|
+
/** Display order + labels for the closed vocabulary. */
|
|
80
|
+
export const OPERATOR_LABELS = {
|
|
81
|
+
eq: 'equals',
|
|
82
|
+
in: 'is one of',
|
|
83
|
+
lt: 'less than',
|
|
84
|
+
lte: 'at most',
|
|
85
|
+
gt: 'greater than',
|
|
86
|
+
gte: 'at least',
|
|
87
|
+
};
|
|
88
|
+
const ORDERED_OPERATORS = ['eq', 'in', 'lt', 'lte', 'gt', 'gte'];
|
|
89
|
+
/**
|
|
90
|
+
* The vocabulary subset that makes sense for a field's type. Always a subset
|
|
91
|
+
* of the closed `FILTER_OPERATORS` — never an extension.
|
|
92
|
+
*/
|
|
93
|
+
export function operatorsFor(option) {
|
|
94
|
+
if (option.def === null)
|
|
95
|
+
return ['eq', 'in']; // publication state
|
|
96
|
+
switch (option.def.type) {
|
|
97
|
+
case 'boolean':
|
|
98
|
+
return ['eq'];
|
|
99
|
+
case 'select':
|
|
100
|
+
case 'relation':
|
|
101
|
+
case 'asset':
|
|
102
|
+
return ['eq', 'in'];
|
|
103
|
+
default:
|
|
104
|
+
return [...ORDERED_OPERATORS];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** A sensible starting clause when a field is added to the builder. */
|
|
108
|
+
export function defaultClause(option) {
|
|
109
|
+
if (option.def === null)
|
|
110
|
+
return { field: STATE_FIELD, op: 'eq', value: 'published' };
|
|
111
|
+
switch (option.def.type) {
|
|
112
|
+
case 'boolean':
|
|
113
|
+
return { field: option.field, op: 'eq', value: true };
|
|
114
|
+
case 'number':
|
|
115
|
+
return { field: option.field, op: 'eq', value: 0 };
|
|
116
|
+
case 'select':
|
|
117
|
+
return { field: option.field, op: 'eq', value: option.def.options[0]?.value ?? '' };
|
|
118
|
+
default:
|
|
119
|
+
return { field: option.field, op: 'eq', value: '' };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// --- Text ⇄ scalar coercion (the value inputs of the builder) -------------------
|
|
123
|
+
const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
124
|
+
/** Coerce one text input into the scalar a clause compares against. */
|
|
125
|
+
export function scalarFromText(option, raw) {
|
|
126
|
+
const type = option?.def?.type;
|
|
127
|
+
if (type === 'number') {
|
|
128
|
+
const trimmed = raw.trim();
|
|
129
|
+
if (trimmed === '')
|
|
130
|
+
return raw; // an emptied input must not become eq 0
|
|
131
|
+
const parsed = Number(trimmed);
|
|
132
|
+
return Number.isNaN(parsed) ? raw : parsed;
|
|
133
|
+
}
|
|
134
|
+
if (type === 'boolean')
|
|
135
|
+
return raw === 'true';
|
|
136
|
+
// Stored dates are full ISO strings; a date-input value compares correctly
|
|
137
|
+
// once expanded to midnight UTC (ISO strings order by code units).
|
|
138
|
+
if (type === 'date' && DATE_ONLY.test(raw))
|
|
139
|
+
return `${raw}T00:00:00.000Z`;
|
|
140
|
+
return raw;
|
|
141
|
+
}
|
|
142
|
+
/** Parse a comma-separated list for the `in` operator. */
|
|
143
|
+
export function scalarListFromText(option, raw) {
|
|
144
|
+
return raw
|
|
145
|
+
.split(',')
|
|
146
|
+
.map((part) => part.trim())
|
|
147
|
+
.filter((part) => part !== '')
|
|
148
|
+
.map((part) => scalarFromText(option, part));
|
|
149
|
+
}
|
|
150
|
+
export function scalarListToText(value) {
|
|
151
|
+
const list = Array.isArray(value) ? value : [value];
|
|
152
|
+
return list.map(String).join(', ');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Validate clauses against the collection schema. Schema-field clauses run
|
|
156
|
+
* through the canonical `validateWhere` (EC-143: `filterable` enforcement +
|
|
157
|
+
* operator/value shape); state clauses check the `eq`/`in` subset and the
|
|
158
|
+
* draft/published value set. Invalid clauses (e.g. a persisted view whose
|
|
159
|
+
* field is no longer filterable) are reported — never silently applied.
|
|
160
|
+
*/
|
|
161
|
+
export function validateClauses(collection, clauses) {
|
|
162
|
+
const issues = [];
|
|
163
|
+
clauses.forEach((clause, index) => {
|
|
164
|
+
if (clause.field === STATE_FIELD) {
|
|
165
|
+
if (clause.op !== 'eq' && clause.op !== 'in') {
|
|
166
|
+
issues.push({ index, message: 'State filters support only "eq" and "in".' });
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const values = Array.isArray(clause.value) ? clause.value : [clause.value];
|
|
170
|
+
if (!values.every((value) => STATE_VALUES.includes(value))) {
|
|
171
|
+
issues.push({ index, message: 'State must be "draft" or "published".' });
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const where = {
|
|
176
|
+
[clause.field]: { [clause.op]: clause.value },
|
|
177
|
+
};
|
|
178
|
+
const errors = validateWhere(collection, where);
|
|
179
|
+
if (errors.length > 0)
|
|
180
|
+
issues.push({ index, message: errors[0].message });
|
|
181
|
+
});
|
|
182
|
+
return issues;
|
|
183
|
+
}
|
|
184
|
+
const defaultIsPublished = () => false;
|
|
185
|
+
/** The scalar a document exposes for a clause/sort field, locale-resolved. */
|
|
186
|
+
function scalarOf(collection, doc, field, localeConfig, isPublished) {
|
|
187
|
+
if (field === STATE_FIELD)
|
|
188
|
+
return isPublished(doc) ? 'published' : 'draft';
|
|
189
|
+
if (!collection.fields.some((f) => f.name === field))
|
|
190
|
+
return null;
|
|
191
|
+
const locale = documentDefaultLocale(doc, localeConfig);
|
|
192
|
+
return filterScalarOf(resolveField(collection, doc, field, locale, localeConfig).value);
|
|
193
|
+
}
|
|
194
|
+
/** Does a document satisfy one clause? Same semantics as the content accessors. */
|
|
195
|
+
export function clauseMatches(collection, doc, localeConfig, clause, isPublished = defaultIsPublished) {
|
|
196
|
+
const value = scalarOf(collection, doc, clause.field, localeConfig, isPublished);
|
|
197
|
+
const condition = { [clause.op]: clause.value };
|
|
198
|
+
return matchesCondition(value, condition);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Sort documents by one column in the canonical deterministic order
|
|
202
|
+
* (`compareListEntries`: typed value order, id-ascending tiebreak). Unlike the
|
|
203
|
+
* content accessors, the *table* may sort any rendered column — sorting is a
|
|
204
|
+
* presentation concern here; the `filterable` flag governs filters.
|
|
205
|
+
*/
|
|
206
|
+
export function sortViewDocuments(collection, docs, localeConfig, sort, isPublished = defaultIsPublished) {
|
|
207
|
+
if (sort === null)
|
|
208
|
+
return [...docs];
|
|
209
|
+
const positions = new Map(docs.map((doc) => [doc.id, scalarOf(collection, doc, sort.field, localeConfig, isPublished)]));
|
|
210
|
+
return [...docs].sort((a, b) => compareListEntries({ id: a.id, sortValue: positions.get(a.id) ?? null }, { id: b.id, sortValue: positions.get(b.id) ?? null }, sort.dir));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Apply a view state to a document list: validate clauses, AND-match the valid
|
|
214
|
+
* ones, sort. Invalid clauses never filter silently — they come back as
|
|
215
|
+
* issues for the UI to surface.
|
|
216
|
+
*/
|
|
217
|
+
export function applyViewState(collection, docs, localeConfig, state, isPublished = defaultIsPublished) {
|
|
218
|
+
const issues = validateClauses(collection, state.filters);
|
|
219
|
+
const invalid = new Set(issues.map((issue) => issue.index));
|
|
220
|
+
const active = state.filters.filter((_, index) => !invalid.has(index));
|
|
221
|
+
const matched = docs.filter((doc) => active.every((clause) => clauseMatches(collection, doc, localeConfig, clause, isPublished)));
|
|
222
|
+
return {
|
|
223
|
+
docs: sortViewDocuments(collection, matched, localeConfig, state.sort, isPublished),
|
|
224
|
+
issues,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// --- View state construction, equality, columns ----------------------------------
|
|
228
|
+
/** The id of the unnamed built-in "All documents" view. */
|
|
229
|
+
export const ALL_VIEW_ID = 'all';
|
|
230
|
+
/** The default (unnamed) view: no filters, no sort, every field visible. */
|
|
231
|
+
export function defaultViewState(collection) {
|
|
232
|
+
return {
|
|
233
|
+
filters: [],
|
|
234
|
+
sort: null,
|
|
235
|
+
columns: orderedColumnNames(collection),
|
|
236
|
+
hidden: [],
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* The default column order: the schema's title field first (it becomes the
|
|
241
|
+
* default title/link column — EC-213 drops the separate primary-column
|
|
242
|
+
* selector, treating the first visible column as the title), then the
|
|
243
|
+
* remaining fields in schema order.
|
|
244
|
+
*/
|
|
245
|
+
function orderedColumnNames(collection) {
|
|
246
|
+
const names = collection.fields.map((field) => field.name);
|
|
247
|
+
const title = titleFieldOf(collection)?.name;
|
|
248
|
+
if (title === undefined || !names.includes(title))
|
|
249
|
+
return names;
|
|
250
|
+
return [title, ...names.filter((name) => name !== title)];
|
|
251
|
+
}
|
|
252
|
+
/** Deep-cloned canonical form (stable key order via the Zod shape). */
|
|
253
|
+
export function normalizeViewState(state) {
|
|
254
|
+
return tableViewStateSchema.parse(state);
|
|
255
|
+
}
|
|
256
|
+
/** Structural equality on normalized states — drives the "unsaved changes" affordance. */
|
|
257
|
+
export function viewStatesEqual(a, b) {
|
|
258
|
+
return JSON.stringify(normalizeViewState(a)) === JSON.stringify(normalizeViewState(b));
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Resolve a view's columns against the live schema (EC-213): every schema
|
|
262
|
+
* field exactly once, in the view's saved order, with any fields the view
|
|
263
|
+
* predates appended (visible) and any fields no longer in the schema dropped.
|
|
264
|
+
* This is the single source of truth for "which columns, in what order, shown
|
|
265
|
+
* or hidden" — order is preserved across hide/show because visibility lives in
|
|
266
|
+
* `hidden`, never in the order.
|
|
267
|
+
*/
|
|
268
|
+
export function resolveColumns(collection, state) {
|
|
269
|
+
const schemaNames = collection.fields.map((field) => field.name);
|
|
270
|
+
const schema = new Set(schemaNames);
|
|
271
|
+
const hidden = new Set(state.hidden);
|
|
272
|
+
// Keep the saved order, restricted to live fields and de-duplicated (a
|
|
273
|
+
// corrupted persisted state must never render one field as two columns).
|
|
274
|
+
const ordered = [];
|
|
275
|
+
const seen = new Set();
|
|
276
|
+
for (const name of state.columns) {
|
|
277
|
+
if (schema.has(name) && !seen.has(name)) {
|
|
278
|
+
ordered.push(name);
|
|
279
|
+
seen.add(name);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
const appended = schemaNames.filter((name) => !seen.has(name));
|
|
283
|
+
return [...ordered, ...appended].map((field) => ({ field, visible: !hidden.has(field) }));
|
|
284
|
+
}
|
|
285
|
+
/** The visible columns of a view, in render order (EC-213). */
|
|
286
|
+
export function visibleColumns(collection, state) {
|
|
287
|
+
return resolveColumns(collection, state)
|
|
288
|
+
.filter((column) => column.visible)
|
|
289
|
+
.map((column) => column.field);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* The title/link column: the first visible column (EC-213 — there is no
|
|
293
|
+
* separate primary-column selector). Falls back to the schema title field, then
|
|
294
|
+
* the first field, then `id`, for the degenerate "everything hidden" case.
|
|
295
|
+
*/
|
|
296
|
+
export function primaryColumn(collection, state) {
|
|
297
|
+
const visible = visibleColumns(collection, state);
|
|
298
|
+
return (visible[0] ?? titleFieldOf(collection)?.name ?? collection.fields[0]?.name ?? 'id');
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Reconcile `columns` to the full resolved order so column edits operate on a
|
|
302
|
+
* complete, stable order (drops removed fields, pins appended ones), and prune
|
|
303
|
+
* `hidden` to fields the live schema still has (a column removed from the schema
|
|
304
|
+
* must not leave dead `hidden` cruft that trips dirty-detection / persists).
|
|
305
|
+
*/
|
|
306
|
+
function withResolvedOrder(collection, state) {
|
|
307
|
+
const columns = resolveColumns(collection, state).map((column) => column.field);
|
|
308
|
+
const live = new Set(columns);
|
|
309
|
+
const hidden = state.hidden.filter((name) => live.has(name));
|
|
310
|
+
return { ...state, columns, hidden };
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* The canonical, schema-resolved form of a view state — full column order with
|
|
314
|
+
* `hidden` pruned to live fields (EC-213). Two states that render identically
|
|
315
|
+
* share one canonical form, so dirty-detection never trips on a mere column
|
|
316
|
+
* reconciliation or a stale `hidden` entry (only a real filter/sort/visibility/
|
|
317
|
+
* order change counts as "unsaved").
|
|
318
|
+
*/
|
|
319
|
+
export function canonicalViewState(collection, state) {
|
|
320
|
+
return normalizeViewState(withResolvedOrder(collection, state));
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Toggle a column's visibility — position is preserved (EC-213): visibility
|
|
324
|
+
* lives in `hidden`, the order in `columns` is untouched. Columns the saved
|
|
325
|
+
* order predates are pinned into `columns` first so their place is stable.
|
|
326
|
+
*/
|
|
327
|
+
export function toggleColumn(collection, state, field) {
|
|
328
|
+
const base = withResolvedOrder(collection, state);
|
|
329
|
+
const hidden = base.hidden.includes(field)
|
|
330
|
+
? base.hidden.filter((name) => name !== field)
|
|
331
|
+
: [...base.hidden, field];
|
|
332
|
+
return { ...base, hidden };
|
|
333
|
+
}
|
|
334
|
+
/** Move a column one position left (-1) or right (+1) in the full column order. */
|
|
335
|
+
export function moveColumn(collection, state, field, delta) {
|
|
336
|
+
const base = withResolvedOrder(collection, state);
|
|
337
|
+
const from = base.columns.indexOf(field);
|
|
338
|
+
const to = from + delta;
|
|
339
|
+
if (from < 0 || to < 0 || to >= base.columns.length)
|
|
340
|
+
return state;
|
|
341
|
+
const columns = [...base.columns];
|
|
342
|
+
columns.splice(from, 1);
|
|
343
|
+
columns.splice(to, 0, field);
|
|
344
|
+
return { ...base, columns };
|
|
345
|
+
}
|
|
346
|
+
/** A fresh id for a saved view (uniqueness, not determinism, is the point). */
|
|
347
|
+
export function newViewId() {
|
|
348
|
+
const random = Math.floor(Math.random() * 36 ** 6)
|
|
349
|
+
.toString(36)
|
|
350
|
+
.padStart(6, '0');
|
|
351
|
+
return `view-${Date.now().toString(36)}-${random}`;
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=view-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-model.js","sourceRoot":"","sources":["../../../src/lib/cms-views/view-model.ts"],"names":[],"mappings":"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"}
|