@aphexcms/cms-core 9.3.0 → 9.5.0
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/dist/admin/block-previews.svelte.d.ts +46 -0
- package/dist/admin/block-previews.svelte.d.ts.map +1 -0
- package/dist/admin/block-previews.svelte.js +26 -0
- package/dist/admin/field-components.svelte.d.ts +16 -0
- package/dist/admin/field-components.svelte.d.ts.map +1 -0
- package/dist/admin/field-components.svelte.js +18 -0
- package/dist/admin/nav.svelte.d.ts +34 -0
- package/dist/admin/nav.svelte.d.ts.map +1 -0
- package/dist/admin/nav.svelte.js +78 -0
- package/dist/admin/slots.svelte.d.ts +50 -0
- package/dist/admin/slots.svelte.d.ts.map +1 -0
- package/dist/admin/slots.svelte.js +67 -0
- package/dist/admin/types.d.ts +7 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +1 -0
- package/dist/api/schemas/api-keys.d.ts +4 -37
- package/dist/api/schemas/api-keys.d.ts.map +1 -1
- package/dist/api/schemas/api-keys.js +5 -2
- package/dist/api/schemas/assets.d.ts +4 -0
- package/dist/api/schemas/assets.d.ts.map +1 -1
- package/dist/api/schemas/assets.js +3 -0
- package/dist/api/schemas/plugin-settings.d.ts +6 -0
- package/dist/api/schemas/plugin-settings.d.ts.map +1 -0
- package/dist/api/schemas/plugin-settings.js +8 -0
- package/dist/api/schemas/roles.d.ts +7 -56
- package/dist/api/schemas/roles.d.ts.map +1 -1
- package/dist/api/schemas/roles.js +11 -6
- package/dist/api/schemas/user.d.ts +2 -1
- package/dist/api/schemas/user.d.ts.map +1 -1
- package/dist/api/schemas/user.js +7 -2
- package/dist/app-augment.d.ts +11 -0
- package/dist/app-augment.d.ts.map +1 -1
- package/dist/app.d.ts +2 -0
- package/dist/auth/provider.d.ts +3 -0
- package/dist/auth/provider.d.ts.map +1 -1
- package/dist/cli/generate-types.d.ts +10 -5
- package/dist/cli/generate-types.d.ts.map +1 -1
- package/dist/cli/generate-types.js +117 -77
- package/dist/cli/generate-types.js.map +1 -1
- package/dist/cli/index.js +5 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/migrate.d.ts +1 -1
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +27 -2
- package/dist/cli/migrate.js.map +1 -1
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +9 -0
- package/dist/components/AdminApp.svelte +271 -113
- package/dist/components/AdminApp.svelte.d.ts +18 -2
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/AdminSlot.svelte +18 -0
- package/dist/components/admin/AdminSlot.svelte.d.ts +12 -0
- package/dist/components/admin/AdminSlot.svelte.d.ts.map +1 -0
- package/dist/components/admin/DocumentEditor.svelte +646 -385
- package/dist/components/admin/DocumentEditor.svelte.d.ts +13 -0
- package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
- package/dist/components/admin/MediaBrowser.svelte +13 -3
- package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
- package/dist/components/admin/PluginSettingsPanel.svelte +231 -0
- package/dist/components/admin/PluginSettingsPanel.svelte.d.ts +8 -0
- package/dist/components/admin/PluginSettingsPanel.svelte.d.ts.map +1 -0
- package/dist/components/admin/SchemaField.svelte +76 -95
- package/dist/components/admin/SchemaField.svelte.d.ts +7 -0
- package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ArrayField.svelte +24 -2
- package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/FieldInput.svelte +109 -0
- package/dist/components/admin/fields/FieldInput.svelte.d.ts +17 -0
- package/dist/components/admin/fields/FieldInput.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte +5 -12
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts +2 -9
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte +18 -17
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts +2 -9
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/RichtextField.svelte +55 -2
- package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts +7 -0
- package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/portable-text-object-node.js +4 -2
- package/dist/components/admin/fields/richtext/svelte-node-view.d.ts +16 -1
- package/dist/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/svelte-node-view.js +20 -1
- package/dist/components/layout/OrganizationSwitcher.svelte +31 -10
- package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -1
- package/dist/components/layout/Sidebar.svelte +49 -11
- package/dist/components/layout/Sidebar.svelte.d.ts +5 -1
- package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
- package/dist/components/layout/sidebar/AppSidebar.svelte +66 -3
- package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +5 -0
- package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -1
- package/dist/components/layout/sidebar/NavMain.svelte +3 -2
- package/dist/components/layout/sidebar/NavMain.svelte.d.ts +4 -3
- package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -1
- package/dist/components/layout/sidebar/NavUser.svelte +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -0
- package/dist/db/interfaces/asset.d.ts +1 -0
- package/dist/db/interfaces/asset.d.ts.map +1 -1
- package/dist/db/interfaces/index.d.ts +3 -1
- package/dist/db/interfaces/index.d.ts.map +1 -1
- package/dist/db/interfaces/plugin-settings.d.ts +23 -0
- package/dist/db/interfaces/plugin-settings.d.ts.map +1 -0
- package/dist/db/interfaces/plugin-settings.js +13 -0
- package/dist/db/interfaces/role.d.ts +14 -5
- package/dist/db/interfaces/role.d.ts.map +1 -1
- package/dist/engine.d.ts +28 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +44 -0
- package/dist/field-validation/utils.d.ts +15 -0
- package/dist/field-validation/utils.d.ts.map +1 -1
- package/dist/field-validation/utils.js +74 -0
- package/dist/graphql/resolvers.d.ts.map +1 -1
- package/dist/graphql/resolvers.js +9 -10
- package/dist/graphql/schema.d.ts.map +1 -1
- package/dist/graphql/schema.js +18 -19
- package/dist/hooks.d.ts +6 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +59 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/lib/admin/block-previews.svelte.d.ts +46 -0
- package/dist/lib/admin/block-previews.svelte.d.ts.map +1 -0
- package/dist/lib/admin/block-previews.svelte.js +27 -0
- package/dist/lib/admin/block-previews.svelte.js.map +1 -0
- package/dist/lib/admin/field-components.svelte.d.ts +16 -0
- package/dist/lib/admin/field-components.svelte.d.ts.map +1 -0
- package/dist/lib/admin/field-components.svelte.js +19 -0
- package/dist/lib/admin/field-components.svelte.js.map +1 -0
- package/dist/lib/admin/nav.svelte.d.ts +34 -0
- package/dist/lib/admin/nav.svelte.d.ts.map +1 -0
- package/dist/lib/admin/nav.svelte.js +79 -0
- package/dist/lib/admin/nav.svelte.js.map +1 -0
- package/dist/lib/admin/slots.svelte.d.ts +50 -0
- package/dist/lib/admin/slots.svelte.d.ts.map +1 -0
- package/dist/lib/admin/slots.svelte.js +68 -0
- package/dist/lib/admin/slots.svelte.js.map +1 -0
- package/dist/lib/admin/types.d.ts +7 -0
- package/dist/lib/admin/types.d.ts.map +1 -0
- package/dist/lib/admin/types.js +2 -0
- package/dist/lib/admin/types.js.map +1 -0
- package/dist/lib/api/schemas/api-keys.d.ts +4 -37
- package/dist/lib/api/schemas/api-keys.d.ts.map +1 -1
- package/dist/lib/api/schemas/api-keys.js +5 -2
- package/dist/lib/api/schemas/api-keys.js.map +1 -1
- package/dist/lib/api/schemas/assets.d.ts +4 -0
- package/dist/lib/api/schemas/assets.d.ts.map +1 -1
- package/dist/lib/api/schemas/assets.js +3 -0
- package/dist/lib/api/schemas/assets.js.map +1 -1
- package/dist/lib/api/schemas/plugin-settings.d.ts +6 -0
- package/dist/lib/api/schemas/plugin-settings.d.ts.map +1 -0
- package/dist/lib/api/schemas/plugin-settings.js +9 -0
- package/dist/lib/api/schemas/plugin-settings.js.map +1 -0
- package/dist/lib/api/schemas/roles.d.ts +7 -56
- package/dist/lib/api/schemas/roles.d.ts.map +1 -1
- package/dist/lib/api/schemas/roles.js +11 -6
- package/dist/lib/api/schemas/roles.js.map +1 -1
- package/dist/lib/api/schemas/user.d.ts +2 -1
- package/dist/lib/api/schemas/user.d.ts.map +1 -1
- package/dist/lib/api/schemas/user.js +7 -2
- package/dist/lib/api/schemas/user.js.map +1 -1
- package/dist/lib/app-augment.d.ts +11 -0
- package/dist/lib/app-augment.d.ts.map +1 -1
- package/dist/lib/auth/provider.d.ts +3 -0
- package/dist/lib/auth/provider.d.ts.map +1 -1
- package/dist/lib/client/index.d.ts +6 -0
- package/dist/lib/client/index.d.ts.map +1 -1
- package/dist/lib/client/index.js +9 -0
- package/dist/lib/client/index.js.map +1 -1
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts +7 -0
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -1
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js +4 -2
- package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js.map +1 -1
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts +16 -1
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -1
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.js +20 -1
- package/dist/lib/components/admin/fields/richtext/svelte-node-view.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +11 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/db/interfaces/asset.d.ts +1 -0
- package/dist/lib/db/interfaces/asset.d.ts.map +1 -1
- package/dist/lib/db/interfaces/index.d.ts +3 -1
- package/dist/lib/db/interfaces/index.d.ts.map +1 -1
- package/dist/lib/db/interfaces/plugin-settings.d.ts +23 -0
- package/dist/lib/db/interfaces/plugin-settings.d.ts.map +1 -0
- package/dist/lib/db/interfaces/plugin-settings.js +14 -0
- package/dist/lib/db/interfaces/plugin-settings.js.map +1 -0
- package/dist/lib/db/interfaces/role.d.ts +14 -5
- package/dist/lib/db/interfaces/role.d.ts.map +1 -1
- package/dist/lib/engine.d.ts +28 -0
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/engine.js +44 -0
- package/dist/lib/engine.js.map +1 -1
- package/dist/lib/field-validation/utils.d.ts +15 -0
- package/dist/lib/field-validation/utils.d.ts.map +1 -1
- package/dist/lib/field-validation/utils.js +74 -0
- package/dist/lib/field-validation/utils.js.map +1 -1
- package/dist/lib/graphql/resolvers.d.ts.map +1 -1
- package/dist/lib/graphql/resolvers.js +9 -10
- package/dist/lib/graphql/resolvers.js.map +1 -1
- package/dist/lib/graphql/schema.d.ts.map +1 -1
- package/dist/lib/graphql/schema.js +18 -19
- package/dist/lib/graphql/schema.js.map +1 -1
- package/dist/lib/hooks.d.ts +6 -0
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +59 -2
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/local-api/collection-api.d.ts.map +1 -1
- package/dist/lib/local-api/collection-api.js +4 -2
- package/dist/lib/local-api/collection-api.js.map +1 -1
- package/dist/lib/local-api/types.d.ts +8 -0
- package/dist/lib/local-api/types.d.ts.map +1 -1
- package/dist/lib/mcp/tools.d.ts.map +1 -1
- package/dist/lib/mcp/tools.js +110 -1
- package/dist/lib/mcp/tools.js.map +1 -1
- package/dist/lib/permissions-context.svelte.d.ts +7 -4
- package/dist/lib/permissions-context.svelte.d.ts.map +1 -1
- package/dist/lib/permissions-context.svelte.js.map +1 -1
- package/dist/lib/plugins/index.d.ts +3 -0
- package/dist/lib/plugins/index.d.ts.map +1 -0
- package/dist/lib/plugins/index.js +3 -0
- package/dist/lib/plugins/index.js.map +1 -0
- package/dist/lib/plugins/resolver.d.ts +49 -0
- package/dist/lib/plugins/resolver.d.ts.map +1 -0
- package/dist/lib/plugins/resolver.js +66 -0
- package/dist/lib/plugins/resolver.js.map +1 -0
- package/dist/lib/plugins/types.d.ts +233 -0
- package/dist/lib/plugins/types.d.ts.map +1 -0
- package/dist/lib/plugins/types.js +9 -0
- package/dist/lib/plugins/types.js.map +1 -0
- package/dist/lib/schema-utils/desugar.d.ts +27 -0
- package/dist/lib/schema-utils/desugar.d.ts.map +1 -0
- package/dist/lib/schema-utils/desugar.js +102 -0
- package/dist/lib/schema-utils/desugar.js.map +1 -0
- package/dist/lib/schema-utils/index.d.ts +2 -0
- package/dist/lib/schema-utils/index.d.ts.map +1 -1
- package/dist/lib/schema-utils/index.js +2 -0
- package/dist/lib/schema-utils/index.js.map +1 -1
- package/dist/lib/schema-utils/settings.d.ts +17 -0
- package/dist/lib/schema-utils/settings.d.ts.map +1 -0
- package/dist/lib/schema-utils/settings.js +23 -0
- package/dist/lib/schema-utils/settings.js.map +1 -0
- package/dist/lib/schema-utils/validator.d.ts.map +1 -1
- package/dist/lib/schema-utils/validator.js +11 -0
- package/dist/lib/schema-utils/validator.js.map +1 -1
- package/dist/lib/security/secret-crypto.d.ts +18 -0
- package/dist/lib/security/secret-crypto.d.ts.map +1 -0
- package/dist/lib/security/secret-crypto.js +71 -0
- package/dist/lib/security/secret-crypto.js.map +1 -0
- package/dist/lib/server/api/index.d.ts.map +1 -1
- package/dist/lib/server/api/index.js +3 -0
- package/dist/lib/server/api/index.js.map +1 -1
- package/dist/lib/server/api/routes/assets.d.ts.map +1 -1
- package/dist/lib/server/api/routes/assets.js +8 -2
- package/dist/lib/server/api/routes/assets.js.map +1 -1
- package/dist/lib/server/api/routes/organizations.d.ts.map +1 -1
- package/dist/lib/server/api/routes/organizations.js +4 -1
- package/dist/lib/server/api/routes/organizations.js.map +1 -1
- package/dist/lib/server/api/routes/plugin-settings.d.ts +4 -0
- package/dist/lib/server/api/routes/plugin-settings.d.ts.map +1 -0
- package/dist/lib/server/api/routes/plugin-settings.js +109 -0
- package/dist/lib/server/api/routes/plugin-settings.js.map +1 -0
- package/dist/lib/server/api/routes/roles.d.ts.map +1 -1
- package/dist/lib/server/api/routes/roles.js +37 -0
- package/dist/lib/server/api/routes/roles.js.map +1 -1
- package/dist/lib/server/api/routes/user.d.ts.map +1 -1
- package/dist/lib/server/api/routes/user.js +14 -3
- package/dist/lib/server/api/routes/user.js.map +1 -1
- package/dist/lib/services/asset-service.d.ts +1 -0
- package/dist/lib/services/asset-service.d.ts.map +1 -1
- package/dist/lib/services/asset-service.js.map +1 -1
- package/dist/lib/services/index.d.ts +2 -0
- package/dist/lib/services/index.d.ts.map +1 -1
- package/dist/lib/services/index.js +1 -0
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/plugin-settings-service.d.ts +76 -0
- package/dist/lib/services/plugin-settings-service.d.ts.map +1 -0
- package/dist/lib/services/plugin-settings-service.js +236 -0
- package/dist/lib/services/plugin-settings-service.js.map +1 -0
- package/dist/lib/services/roles-service.d.ts +2 -2
- package/dist/lib/services/roles-service.d.ts.map +1 -1
- package/dist/lib/services/roles-service.js.map +1 -1
- package/dist/lib/theme/css.d.ts +30 -0
- package/dist/lib/theme/css.d.ts.map +1 -0
- package/dist/lib/theme/css.js +54 -0
- package/dist/lib/theme/css.js.map +1 -0
- package/dist/lib/theme/derive.d.ts +27 -0
- package/dist/lib/theme/derive.d.ts.map +1 -0
- package/dist/lib/theme/derive.js +108 -0
- package/dist/lib/theme/derive.js.map +1 -0
- package/dist/lib/theme/index.d.ts +5 -0
- package/dist/lib/theme/index.d.ts.map +1 -0
- package/dist/lib/theme/index.js +5 -0
- package/dist/lib/theme/index.js.map +1 -0
- package/dist/lib/theme/schemes.d.ts +60 -0
- package/dist/lib/theme/schemes.d.ts.map +1 -0
- package/dist/lib/theme/schemes.js +150 -0
- package/dist/lib/theme/schemes.js.map +1 -0
- package/dist/lib/theme/tokens.d.ts +57 -0
- package/dist/lib/theme/tokens.d.ts.map +1 -0
- package/dist/lib/theme/tokens.js +11 -0
- package/dist/lib/theme/tokens.js.map +1 -0
- package/dist/lib/types/auth.d.ts +10 -10
- package/dist/lib/types/auth.d.ts.map +1 -1
- package/dist/lib/types/capabilities.d.ts +50 -9
- package/dist/lib/types/capabilities.d.ts.map +1 -1
- package/dist/lib/types/capabilities.js +147 -5
- package/dist/lib/types/capabilities.js.map +1 -1
- package/dist/lib/types/config.d.ts +30 -1
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/lib/types/schemas.d.ts +90 -2
- package/dist/lib/types/schemas.d.ts.map +1 -1
- package/dist/lib/types/schemas.js.map +1 -1
- package/dist/lib/types/sidebar.d.ts +3 -1
- package/dist/lib/types/sidebar.d.ts.map +1 -1
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js +1 -0
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/preview.d.ts +16 -5
- package/dist/lib/utils/preview.d.ts.map +1 -1
- package/dist/lib/utils/preview.js +7 -2
- package/dist/lib/utils/preview.js.map +1 -1
- package/dist/lib/utils/string-case.d.ts +21 -0
- package/dist/lib/utils/string-case.d.ts.map +1 -0
- package/dist/lib/utils/string-case.js +26 -0
- package/dist/lib/utils/string-case.js.map +1 -0
- package/dist/lib/vite/index.d.ts +7 -0
- package/dist/lib/vite/index.d.ts.map +1 -1
- package/dist/lib/vite/index.js +37 -6
- package/dist/lib/vite/index.js.map +1 -1
- package/dist/local-api/collection-api.d.ts.map +1 -1
- package/dist/local-api/collection-api.js +4 -2
- package/dist/local-api/types.d.ts +8 -0
- package/dist/local-api/types.d.ts.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +110 -1
- package/dist/permissions-context.svelte.d.ts +7 -4
- package/dist/permissions-context.svelte.d.ts.map +1 -1
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +2 -0
- package/dist/plugins/resolver.d.ts +49 -0
- package/dist/plugins/resolver.d.ts.map +1 -0
- package/dist/plugins/resolver.js +65 -0
- package/dist/plugins/types.d.ts +233 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/schema-utils/desugar.d.ts +27 -0
- package/dist/schema-utils/desugar.d.ts.map +1 -0
- package/dist/schema-utils/desugar.js +101 -0
- package/dist/schema-utils/index.d.ts +2 -0
- package/dist/schema-utils/index.d.ts.map +1 -1
- package/dist/schema-utils/index.js +2 -0
- package/dist/schema-utils/settings.d.ts +17 -0
- package/dist/schema-utils/settings.d.ts.map +1 -0
- package/dist/schema-utils/settings.js +22 -0
- package/dist/schema-utils/validator.d.ts.map +1 -1
- package/dist/schema-utils/validator.js +11 -0
- package/dist/security/secret-crypto.d.ts +18 -0
- package/dist/security/secret-crypto.d.ts.map +1 -0
- package/dist/security/secret-crypto.js +70 -0
- package/dist/server/api/index.d.ts.map +1 -1
- package/dist/server/api/index.js +3 -0
- package/dist/server/api/routes/assets.d.ts.map +1 -1
- package/dist/server/api/routes/assets.js +8 -2
- package/dist/server/api/routes/organizations.d.ts.map +1 -1
- package/dist/server/api/routes/organizations.js +4 -1
- package/dist/server/api/routes/plugin-settings.d.ts +4 -0
- package/dist/server/api/routes/plugin-settings.d.ts.map +1 -0
- package/dist/server/api/routes/plugin-settings.js +108 -0
- package/dist/server/api/routes/roles.d.ts.map +1 -1
- package/dist/server/api/routes/roles.js +37 -0
- package/dist/server/api/routes/user.d.ts.map +1 -1
- package/dist/server/api/routes/user.js +14 -3
- package/dist/services/asset-service.d.ts +1 -0
- package/dist/services/asset-service.d.ts.map +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/plugin-settings-service.d.ts +76 -0
- package/dist/services/plugin-settings-service.d.ts.map +1 -0
- package/dist/services/plugin-settings-service.js +235 -0
- package/dist/services/roles-service.d.ts +2 -2
- package/dist/services/roles-service.d.ts.map +1 -1
- package/dist/theme/css.d.ts +30 -0
- package/dist/theme/css.d.ts.map +1 -0
- package/dist/theme/css.js +53 -0
- package/dist/theme/derive.d.ts +27 -0
- package/dist/theme/derive.d.ts.map +1 -0
- package/dist/theme/derive.js +107 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +4 -0
- package/dist/theme/schemes.d.ts +60 -0
- package/dist/theme/schemes.d.ts.map +1 -0
- package/dist/theme/schemes.js +149 -0
- package/dist/theme/tokens.d.ts +57 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +10 -0
- package/dist/types/auth.d.ts +10 -10
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/capabilities.d.ts +50 -9
- package/dist/types/capabilities.d.ts.map +1 -1
- package/dist/types/capabilities.js +147 -5
- package/dist/types/config.d.ts +30 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +90 -2
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/sidebar.d.ts +3 -1
- package/dist/types/sidebar.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/preview.d.ts +16 -5
- package/dist/utils/preview.d.ts.map +1 -1
- package/dist/utils/preview.js +7 -2
- package/dist/utils/string-case.d.ts +21 -0
- package/dist/utils/string-case.d.ts.map +1 -0
- package/dist/utils/string-case.js +25 -0
- package/dist/vite/index.d.ts +7 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +37 -6
- package/package.json +6 -4
package/dist/cli/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -4,10 +4,16 @@ export * from '../field-validation/rule.js';
|
|
|
4
4
|
export * from '../field-validation/utils.js';
|
|
5
5
|
export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
|
|
6
6
|
export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
|
|
7
|
+
export { AdminSlots, setAdminSlots, useAdminSlots, type AdminSlotName, type AdminSlotEntry } from '../admin/slots.svelte.js';
|
|
8
|
+
export type { AdminArea } from '../admin/types.js';
|
|
9
|
+
export { setFieldComponents, useFieldComponents, type FieldComponentLookup } from '../admin/field-components.svelte.js';
|
|
10
|
+
export { createAdminNav, setAdminNav, useAdminNav, type AdminNav, type AdminParam, type ParamPatch } from '../admin/nav.svelte.js';
|
|
7
11
|
export { setPermissionsContext, usePermissions, type PermissionsContext } from '../permissions-context.svelte.js';
|
|
8
12
|
export * from '../schema-utils/index.js';
|
|
9
13
|
export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
|
|
10
14
|
export { default as SchemaField } from '../components/admin/SchemaField.svelte';
|
|
15
|
+
export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
|
|
16
|
+
export { setBlockPreviews, useBlockPreviews, type BlockPreviewProps, type BlockPreviewLookup } from '../admin/block-previews.svelte.js';
|
|
11
17
|
export { default as AdminApp } from '../components/AdminApp.svelte';
|
|
12
18
|
export { default as Sidebar } from '../components/layout/Sidebar.svelte';
|
|
13
19
|
export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAK3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAGhG,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAK3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -9,6 +9,12 @@ export * from '../field-validation/utils.js';
|
|
|
9
9
|
export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
|
|
10
10
|
// Schema context (for providing schemas to components)
|
|
11
11
|
export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
|
|
12
|
+
// Admin extension slots — runtime UI registration primitive (plugin seam).
|
|
13
|
+
export { AdminSlots, setAdminSlots, useAdminSlots } from '../admin/slots.svelte.js';
|
|
14
|
+
// Field-input widgets — plugins register components for a field's `input` key.
|
|
15
|
+
export { setFieldComponents, useFieldComponents } from '../admin/field-components.svelte.js';
|
|
16
|
+
// Admin URL navigation — typed intents, shareable via context (plugin tools can navigate).
|
|
17
|
+
export { createAdminNav, setAdminNav, useAdminNav } from '../admin/nav.svelte.js';
|
|
12
18
|
// Permissions context (for capability-based UI gating)
|
|
13
19
|
export { setPermissionsContext, usePermissions } from '../permissions-context.svelte.js';
|
|
14
20
|
// Schema utilities (for working with schemas)
|
|
@@ -16,6 +22,9 @@ export * from '../schema-utils/index.js';
|
|
|
16
22
|
// Components (UI components for the admin interface)
|
|
17
23
|
export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
|
|
18
24
|
export { default as SchemaField } from '../components/admin/SchemaField.svelte';
|
|
25
|
+
export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
|
|
26
|
+
// Inline editor previews for custom rich-text block types (app-owned presentation).
|
|
27
|
+
export { setBlockPreviews, useBlockPreviews } from '../admin/block-previews.svelte.js';
|
|
19
28
|
export { default as AdminApp } from '../components/AdminApp.svelte';
|
|
20
29
|
export { default as Sidebar } from '../components/layout/Sidebar.svelte';
|
|
21
30
|
// Debug helpers
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Alert, AlertDescription, AlertTitle } from '@aphexcms/ui/shadcn/alert';
|
|
7
7
|
import { Button } from '@aphexcms/ui/shadcn/button';
|
|
8
|
+
import { useSidebar } from '@aphexcms/ui/shadcn/sidebar';
|
|
8
9
|
import * as Tabs from '@aphexcms/ui/shadcn/tabs';
|
|
9
10
|
import * as Popover from '@aphexcms/ui/shadcn/popover';
|
|
10
11
|
import * as Select from '@aphexcms/ui/shadcn/select';
|
|
@@ -12,6 +13,14 @@
|
|
|
12
13
|
import { goto } from '$app/navigation';
|
|
13
14
|
import { SvelteURLSearchParams } from 'svelte/reactivity';
|
|
14
15
|
import type { SchemaType } from '../types/index';
|
|
16
|
+
import type { CMSPlugin, AdminToolProps } from '../plugins/types';
|
|
17
|
+
import { createPartResolver } from '../plugins/resolver';
|
|
18
|
+
import type { AdminArea } from '../admin/types';
|
|
19
|
+
import { setAdminNav } from '../admin/nav.svelte';
|
|
20
|
+
import type { Component } from 'svelte';
|
|
21
|
+
import { setFieldComponents } from '../admin/field-components.svelte';
|
|
22
|
+
import { setBlockPreviews, type BlockPreviewProps } from '../admin/block-previews.svelte';
|
|
23
|
+
import AdminSlot from './admin/AdminSlot.svelte';
|
|
15
24
|
import type { UserSessionPreferences } from '../types/organization';
|
|
16
25
|
import { resolvePreviewTitle, resolvePreviewSubtitle } from '../utils/preview';
|
|
17
26
|
import DocumentEditor from './admin/DocumentEditor.svelte';
|
|
@@ -53,13 +62,25 @@
|
|
|
53
62
|
capabilities?: string[];
|
|
54
63
|
/** Effective organization role name, for role-list style checks. */
|
|
55
64
|
rbacRole?: string | null;
|
|
56
|
-
activeTab?: { value:
|
|
65
|
+
activeTab?: { value: AdminArea };
|
|
57
66
|
handleTabChange: (value: string) => void;
|
|
58
67
|
userPreferences?: UserSessionPreferences | null;
|
|
68
|
+
/**
|
|
69
|
+
* Build-time plugins, imported client-side (component parts can't cross
|
|
70
|
+
* SvelteKit `load`). Their document-action parts render in the editor toolbar.
|
|
71
|
+
*/
|
|
72
|
+
plugins?: CMSPlugin[];
|
|
73
|
+
/**
|
|
74
|
+
* Inline editor previews for custom rich-text block types, keyed by `_type`.
|
|
75
|
+
* Without one, a block renders as a generic card (title/subtitle from its
|
|
76
|
+
* `preview` config); with one, the real block renders inline as you write.
|
|
77
|
+
* App-owned on purpose — the app owns presentation.
|
|
78
|
+
*/
|
|
79
|
+
blockPreviews?: Record<string, Component<BlockPreviewProps>>;
|
|
59
80
|
}
|
|
60
81
|
|
|
61
82
|
let {
|
|
62
|
-
schemas,
|
|
83
|
+
schemas: appSchemas,
|
|
63
84
|
documentTypes: documentTypesFromServer,
|
|
64
85
|
schemaError = null,
|
|
65
86
|
title = 'Aphex CMS',
|
|
@@ -67,11 +88,49 @@
|
|
|
67
88
|
isReadOnly = false,
|
|
68
89
|
capabilities = [],
|
|
69
90
|
rbacRole = null,
|
|
70
|
-
activeTab = { value: 'structure' } as { value:
|
|
91
|
+
activeTab = { value: 'structure' } as { value: AdminArea },
|
|
71
92
|
handleTabChange = () => {},
|
|
72
|
-
userPreferences = null
|
|
93
|
+
userPreferences = null,
|
|
94
|
+
plugins = [],
|
|
95
|
+
blockPreviews = {}
|
|
73
96
|
}: Props = $props();
|
|
74
97
|
|
|
98
|
+
// One resolver over the (client-side) plugins, reused for every part kind.
|
|
99
|
+
const partResolver = $derived(createPartResolver(plugins));
|
|
100
|
+
|
|
101
|
+
// Plugin-inclusive schema list: app schemas plus any `aphex/schema` parts, then
|
|
102
|
+
// any `aphex/schema/transform` parts applied — the same pipeline the server engine
|
|
103
|
+
// runs in createCMSConfig, so the editor and the engine agree. The plugins are
|
|
104
|
+
// already client-side here (we hold them for component parts), so the admin
|
|
105
|
+
// resolves this itself — no app wiring. Everything downstream references `schemas`.
|
|
106
|
+
const schemas = $derived(
|
|
107
|
+
partResolver.applySchemaTransforms([...appSchemas, ...partResolver.schemaTypes()])
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// Publish plugin field-input widgets so SchemaField can swap them in for a
|
|
111
|
+
// field's `input` key (falling back to the built-in renderer).
|
|
112
|
+
setFieldComponents((input) => partResolver.fieldComponent(input)?.component);
|
|
113
|
+
// Inline block previews come from the app (presentation is app-owned).
|
|
114
|
+
setBlockPreviews((type) => blockPreviews[type]);
|
|
115
|
+
|
|
116
|
+
// Plane-split guard: a plugin's `aphex/schema` document types must also reach the
|
|
117
|
+
// server engine (register the plugin in aphex.config). If one is present on the
|
|
118
|
+
// client but absent from the server's document-type list, the editor would render
|
|
119
|
+
// a type the engine can't validate or persist — warn loudly in dev.
|
|
120
|
+
$effect(() => {
|
|
121
|
+
const serverTypes = new Set(documentTypesFromServer.map((t) => t.name));
|
|
122
|
+
for (const s of partResolver.schemaTypes()) {
|
|
123
|
+
if (s.type === 'document' && !serverTypes.has(s.name)) {
|
|
124
|
+
cmsLogger.warn(
|
|
125
|
+
'[plugins]',
|
|
126
|
+
`Schema type "${s.name}" is contributed by a plugin on the client, but the server ` +
|
|
127
|
+
`engine doesn't know it. Register the plugin in aphex.config.ts (plugins: [...]) too, ` +
|
|
128
|
+
`or documents of this type can't be validated or saved.`
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
75
134
|
// Publish capabilities to every descendant (DocumentEditor, fields, etc)
|
|
76
135
|
// via Svelte context. Using a getter closure so prop reactivity propagates:
|
|
77
136
|
// if the parent swaps the capabilities array (e.g. role change mid-session)
|
|
@@ -81,9 +140,60 @@
|
|
|
81
140
|
() => rbacRole
|
|
82
141
|
);
|
|
83
142
|
|
|
143
|
+
// Plugin admin tools contributed by plugins. Capability-gated (privileged roles
|
|
144
|
+
// bypass). Each becomes a `plugin:<id>` area. `placement` decides where the
|
|
145
|
+
// trigger renders: `'tab'` (default) in the top tab strip, `'sidebar'` in the
|
|
146
|
+
// left sidebar nav — the latter keeps the tab strip short once several plugins
|
|
147
|
+
// are installed.
|
|
148
|
+
const adminTools = $derived(
|
|
149
|
+
partResolver.adminTools({
|
|
150
|
+
capabilities: [...capabilities],
|
|
151
|
+
overrideAccess: rbacRole === 'super_admin' || rbacRole === 'admin'
|
|
152
|
+
})
|
|
153
|
+
);
|
|
154
|
+
// Tab-placed tools render into the top strip here; sidebar-placed tools are
|
|
155
|
+
// rendered by AppSidebar from the plugin list (persistent across admin pages).
|
|
156
|
+
const tabTools = $derived(adminTools.filter((t) => (t.placement ?? 'tab') === 'tab'));
|
|
157
|
+
// Centralized admin URL navigation — intents own which params they set/clear.
|
|
158
|
+
// Published to descendants (editor, plugin tools) so they navigate the same way.
|
|
159
|
+
const nav = setAdminNav();
|
|
160
|
+
|
|
161
|
+
function openAdminTool(id: string) {
|
|
162
|
+
activeTab.value = `plugin:${id}`;
|
|
163
|
+
nav.openArea(`plugin:${id}`);
|
|
164
|
+
}
|
|
165
|
+
|
|
84
166
|
// Keep a state of the organization id
|
|
85
167
|
let currentOrgId = $state<string | null>(page.url.searchParams.get('orgId'));
|
|
86
168
|
|
|
169
|
+
// Stable context handed to every plugin admin-tool component.
|
|
170
|
+
const adminToolContext = $derived<AdminToolProps>({
|
|
171
|
+
organizationId: currentOrgId,
|
|
172
|
+
capabilities,
|
|
173
|
+
role: rbacRole,
|
|
174
|
+
can: (capability) =>
|
|
175
|
+
rbacRole === 'super_admin' || rbacRole === 'admin' || capabilities.includes(capability),
|
|
176
|
+
schemas,
|
|
177
|
+
navigate: (area) => {
|
|
178
|
+
activeTab.value = area;
|
|
179
|
+
},
|
|
180
|
+
openDocument: (documentType, documentId) => {
|
|
181
|
+
// Guard: without a type the editor can't resolve a schema ("No schema found").
|
|
182
|
+
if (!documentType || !documentId) {
|
|
183
|
+
cmsLogger.warn('[AdminApp]', 'openDocument called without type/id', {
|
|
184
|
+
documentType,
|
|
185
|
+
documentId
|
|
186
|
+
});
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// The editor lives in the structure area — switch to it first (like
|
|
190
|
+
// navigateToDocumentType does) so opening a doc from a plugin tab actually
|
|
191
|
+
// shows the editor instead of leaving state stranded on the plugin tab.
|
|
192
|
+
if (activeTab.value !== 'structure') handleTabChange('structure');
|
|
193
|
+
navigateToEditDocument(documentId, documentType);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
87
197
|
// Merge document types with schema icons (schemas have icons, server data doesn't),
|
|
88
198
|
// then filter out any schemas the caller can't read. Mirrors the server check:
|
|
89
199
|
// an `access.read` list on a schema is an allowlist of role names (built-in
|
|
@@ -166,21 +276,13 @@
|
|
|
166
276
|
|
|
167
277
|
function toggleFocusMode() {
|
|
168
278
|
focusModeOn = !focusModeOn;
|
|
169
|
-
|
|
170
|
-
if (focusModeOn) {
|
|
171
|
-
params.set('focus', '1');
|
|
172
|
-
} else {
|
|
173
|
-
params.delete('focus');
|
|
174
|
-
}
|
|
175
|
-
goto(`/admin?${params.toString()}`, { replaceState: true });
|
|
279
|
+
nav.patch({ focus: focusModeOn ? '1' : null });
|
|
176
280
|
}
|
|
177
281
|
|
|
178
282
|
function exitFocusMode() {
|
|
179
283
|
if (!focusModeOn) return;
|
|
180
284
|
focusModeOn = false;
|
|
181
|
-
|
|
182
|
-
params.delete('focus');
|
|
183
|
-
goto(`/admin?${params.toString()}`, { replaceState: true });
|
|
285
|
+
nav.patch({ focus: null });
|
|
184
286
|
}
|
|
185
287
|
|
|
186
288
|
// Sync focus state from URL — covers refresh, deep links, back button.
|
|
@@ -195,14 +297,32 @@
|
|
|
195
297
|
// live preview iframe. Independent from focus mode; Esc also exits.
|
|
196
298
|
let presentationModeOn = $state(false);
|
|
197
299
|
|
|
300
|
+
// Sidebar context (set by the SidebarProvider ancestor). Used to reclaim screen
|
|
301
|
+
// real estate for the preview canvas when presentation mode opens.
|
|
302
|
+
const sidebar = useSidebar();
|
|
303
|
+
|
|
198
304
|
function togglePresentationMode() {
|
|
199
305
|
presentationModeOn = !presentationModeOn;
|
|
306
|
+
// Entering presentation mode: collapse the nav rail so the preview gets the room.
|
|
307
|
+
if (presentationModeOn) sidebar?.setOpen(false);
|
|
200
308
|
}
|
|
201
309
|
|
|
202
310
|
function exitPresentationMode() {
|
|
203
311
|
presentationModeOn = false;
|
|
204
312
|
}
|
|
205
313
|
|
|
314
|
+
// Both modes hide the side panels and only make sense with an editor open.
|
|
315
|
+
// Leaving the editor through anything other than the back button (e.g. the
|
|
316
|
+
// sidebar "Studio" link keeps this component mounted while navigating to the
|
|
317
|
+
// structure view) must also exit them — otherwise the structure view renders
|
|
318
|
+
// with every panel hidden: a blank page.
|
|
319
|
+
$effect(() => {
|
|
320
|
+
if (currentView !== 'editor') {
|
|
321
|
+
if (presentationModeOn) presentationModeOn = false;
|
|
322
|
+
if (focusModeOn) focusModeOn = false;
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
|
|
206
326
|
// Esc to exit focus mode.
|
|
207
327
|
$effect(() => {
|
|
208
328
|
if (typeof window === 'undefined') return;
|
|
@@ -283,6 +403,18 @@
|
|
|
283
403
|
}
|
|
284
404
|
let editorStack = $state<EditorStackItem[]>([]);
|
|
285
405
|
|
|
406
|
+
// Bumped to ask the base (primary) editor's preview to re-fetch — e.g. after a
|
|
407
|
+
// referenced doc autosaves, so the base preview reflects the change.
|
|
408
|
+
let baseRefreshToken = $state(0);
|
|
409
|
+
|
|
410
|
+
// Human label for a document type: the schema's `title` (e.g. "Blog Post"),
|
|
411
|
+
// falling back to a prettified name so `blog_post` never surfaces as "Blog_post".
|
|
412
|
+
function typeLabel(name: string | null | undefined): string {
|
|
413
|
+
if (!name) return '';
|
|
414
|
+
const title = schemas.find((s) => s.name === name)?.title;
|
|
415
|
+
return title ?? name.charAt(0).toUpperCase() + name.slice(1).replace(/_/g, ' ');
|
|
416
|
+
}
|
|
417
|
+
|
|
286
418
|
// Track which editor is currently active/focused (0 = primary, 1+ = stacked)
|
|
287
419
|
let activeEditorIndex = $state<number>(0);
|
|
288
420
|
|
|
@@ -615,35 +747,17 @@
|
|
|
615
747
|
// at least sees an error surface rather than a stuck sidebar click.
|
|
616
748
|
}
|
|
617
749
|
|
|
618
|
-
|
|
619
|
-
params.set('docType', docType);
|
|
620
|
-
params.delete('docId');
|
|
621
|
-
params.delete('action');
|
|
622
|
-
params.delete('stack');
|
|
623
|
-
params.delete('history');
|
|
624
|
-
await goto(`/admin?${params.toString()}`, { replaceState: false });
|
|
750
|
+
await nav.openType(docType);
|
|
625
751
|
mobileView = 'documents';
|
|
626
752
|
}
|
|
627
753
|
|
|
628
754
|
async function navigateToCreateDocument(docType: string) {
|
|
629
|
-
|
|
630
|
-
params.set('docType', docType);
|
|
631
|
-
params.set('action', 'create');
|
|
632
|
-
params.delete('docId');
|
|
633
|
-
params.delete('stack');
|
|
634
|
-
params.delete('history');
|
|
635
|
-
await goto(`/admin?${params.toString()}`, { replaceState: false });
|
|
755
|
+
await nav.createDocument(docType);
|
|
636
756
|
mobileView = 'editor';
|
|
637
757
|
}
|
|
638
758
|
|
|
639
759
|
async function navigateToEditDocument(docId: string, docType?: string, replace: boolean = false) {
|
|
640
|
-
|
|
641
|
-
params.set('docId', docId);
|
|
642
|
-
if (docType) params.set('docType', docType);
|
|
643
|
-
params.delete('action');
|
|
644
|
-
params.delete('fromDocId');
|
|
645
|
-
params.delete('fromDocType');
|
|
646
|
-
await goto(`/admin?${params.toString()}`, { replaceState: replace });
|
|
760
|
+
await nav.openDocument(docId, docType, { replace });
|
|
647
761
|
mobileView = 'editor';
|
|
648
762
|
}
|
|
649
763
|
|
|
@@ -661,26 +775,12 @@
|
|
|
661
775
|
// Navigate back to the document we came from
|
|
662
776
|
await navigateToEditDocument(fromDocId, fromDocType, false);
|
|
663
777
|
} else if (selectedDocumentType && !currentTypeIsSingleton) {
|
|
664
|
-
//
|
|
665
|
-
|
|
666
|
-
params.set('docType', selectedDocumentType);
|
|
667
|
-
params.delete('docId');
|
|
668
|
-
params.delete('action');
|
|
669
|
-
params.delete('stack');
|
|
670
|
-
params.delete('focus');
|
|
671
|
-
params.delete('history');
|
|
672
|
-
await goto(`/admin?${params.toString()}`, { replaceState: false });
|
|
778
|
+
// Back to the document list for the current type
|
|
779
|
+
await nav.closeToType(selectedDocumentType);
|
|
673
780
|
mobileView = 'documents';
|
|
674
781
|
} else {
|
|
675
|
-
//
|
|
676
|
-
|
|
677
|
-
params.delete('docType');
|
|
678
|
-
params.delete('docId');
|
|
679
|
-
params.delete('action');
|
|
680
|
-
params.delete('stack');
|
|
681
|
-
params.delete('focus');
|
|
682
|
-
params.delete('history');
|
|
683
|
-
await goto(`/admin?${params.toString()}`, { replaceState: false });
|
|
782
|
+
// Back to the dashboard
|
|
783
|
+
await nav.goHome();
|
|
684
784
|
mobileView = 'types';
|
|
685
785
|
}
|
|
686
786
|
}
|
|
@@ -688,18 +788,14 @@
|
|
|
688
788
|
function handleOpenVersionHistory(docId: string) {
|
|
689
789
|
showVersionPanel = true;
|
|
690
790
|
versionPanelDocId = docId;
|
|
691
|
-
|
|
692
|
-
params.set('history', '1');
|
|
693
|
-
goto(`/admin?${params.toString()}`, { replaceState: true });
|
|
791
|
+
nav.patch({ history: '1' });
|
|
694
792
|
}
|
|
695
793
|
|
|
696
794
|
function handleCloseVersionPanel() {
|
|
697
795
|
showVersionPanel = false;
|
|
698
796
|
versionPanelDocId = null;
|
|
699
797
|
versionPreviewData = null;
|
|
700
|
-
|
|
701
|
-
params.delete('history');
|
|
702
|
-
goto(`/admin?${params.toString()}`, { replaceState: true });
|
|
798
|
+
nav.patch({ history: null });
|
|
703
799
|
}
|
|
704
800
|
|
|
705
801
|
// Close version panel when navigating away
|
|
@@ -815,6 +911,11 @@
|
|
|
815
911
|
if (showVersionPanel && versionPanelDocId === documentId) {
|
|
816
912
|
versionPanelRef?.refresh();
|
|
817
913
|
}
|
|
914
|
+
// A referenced doc (open in the reference panel) autosaved — nudge the base
|
|
915
|
+
// preview to re-fetch, so its server-loaded view (e.g. a list that includes
|
|
916
|
+
// this doc) reflects the edit. Not fired for the base doc itself, which already
|
|
917
|
+
// live-updates via the data push.
|
|
918
|
+
if (editorStack.some((e) => e.documentId === documentId)) baseRefreshToken++;
|
|
818
919
|
}
|
|
819
920
|
|
|
820
921
|
function handleDocumentPublished(documentId: string) {
|
|
@@ -851,6 +952,10 @@
|
|
|
851
952
|
}
|
|
852
953
|
|
|
853
954
|
async function fetchDocuments(docType: string) {
|
|
955
|
+
// No type = nothing to list (e.g. mid-navigation from a plugin tab before a
|
|
956
|
+
// type is selected). Bail quietly rather than hitting the API and toasting
|
|
957
|
+
// "Document type is required".
|
|
958
|
+
if (!docType) return;
|
|
854
959
|
cmsLogger.debug('[AdminApp]', 'FETCHING DOCUMENTS', { sort: sortString });
|
|
855
960
|
loading = true;
|
|
856
961
|
error = null;
|
|
@@ -914,6 +1019,34 @@
|
|
|
914
1019
|
}
|
|
915
1020
|
</script>
|
|
916
1021
|
|
|
1022
|
+
<!-- Plugin admin-tool tabs (placement: 'tab') — registered into the Sidebar's tab strip. -->
|
|
1023
|
+
{#if tabTools.length > 0}
|
|
1024
|
+
<AdminSlot name="admin-tabs" id="plugin-admin-tools">
|
|
1025
|
+
{#each tabTools as tool (tool.id)}
|
|
1026
|
+
<button
|
|
1027
|
+
onclick={() => openAdminTool(tool.id)}
|
|
1028
|
+
class="{activeTab.value === `plugin:${tool.id}`
|
|
1029
|
+
? 'bg-background text-foreground shadow'
|
|
1030
|
+
: 'text-muted-foreground'} ring-offset-background focus-visible:ring-ring inline-flex cursor-pointer items-center justify-center gap-1.5 rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none"
|
|
1031
|
+
>
|
|
1032
|
+
{#if tool.icon}
|
|
1033
|
+
{@const Icon = tool.icon}
|
|
1034
|
+
<Icon class="h-4 w-4" />
|
|
1035
|
+
{/if}
|
|
1036
|
+
{tool.title}
|
|
1037
|
+
</button>
|
|
1038
|
+
{/each}
|
|
1039
|
+
</AdminSlot>
|
|
1040
|
+
{/if}
|
|
1041
|
+
|
|
1042
|
+
<!--
|
|
1043
|
+
Sidebar-placed plugin tools (placement: 'sidebar') are rendered by AppSidebar
|
|
1044
|
+
directly from the plugin list, at the persistent layout level — not here — so
|
|
1045
|
+
the Tools nav survives on every admin page (settings included), where AdminApp
|
|
1046
|
+
isn't mounted. AdminApp still owns the tab-placed tools (above) and renders each
|
|
1047
|
+
tool's `plugin:<id>` content area (below).
|
|
1048
|
+
-->
|
|
1049
|
+
|
|
917
1050
|
<svelte:head>
|
|
918
1051
|
<title
|
|
919
1052
|
>{activeTab.value === 'structure'
|
|
@@ -926,7 +1059,7 @@
|
|
|
926
1059
|
|
|
927
1060
|
<div class="flex h-full flex-col overflow-hidden">
|
|
928
1061
|
<!-- Breadcrumb navigation: mobile (< 620px) or focus mode on any width -->
|
|
929
|
-
{#if (windowWidth < 620 || focusModeOn
|
|
1062
|
+
{#if (windowWidth < 620 || focusModeOn) && activeTab.value === 'structure'}
|
|
930
1063
|
<div class="border-border bg-background border-b">
|
|
931
1064
|
<div class="flex h-12 items-center px-4">
|
|
932
1065
|
{#if mobileView === 'documents' && selectedDocumentType}
|
|
@@ -1470,7 +1603,7 @@
|
|
|
1470
1603
|
<!-- Primary Editor Panel -->
|
|
1471
1604
|
{#if primaryEditorState.visible}
|
|
1472
1605
|
<div
|
|
1473
|
-
class="transition-all duration-200 {windowWidth < 620
|
|
1606
|
+
class="relative transition-all duration-200 {windowWidth < 620
|
|
1474
1607
|
? 'w-screen'
|
|
1475
1608
|
: 'flex-1'} h-full overflow-x-hidden overflow-y-auto {primaryEditorState.expanded
|
|
1476
1609
|
? ''
|
|
@@ -1479,6 +1612,7 @@
|
|
|
1479
1612
|
>
|
|
1480
1613
|
<DocumentEditor
|
|
1481
1614
|
{schemas}
|
|
1615
|
+
{plugins}
|
|
1482
1616
|
documentType={selectedDocumentType!}
|
|
1483
1617
|
documentId={editingDocumentId}
|
|
1484
1618
|
isCreating={isCreatingDocument}
|
|
@@ -1486,6 +1620,7 @@
|
|
|
1486
1620
|
onToggleFocus={toggleFocusMode}
|
|
1487
1621
|
presentationMode={presentationModeOn}
|
|
1488
1622
|
onTogglePresentation={togglePresentationMode}
|
|
1623
|
+
refreshToken={baseRefreshToken}
|
|
1489
1624
|
organizationId={currentOrgId}
|
|
1490
1625
|
onBack={navigateBack}
|
|
1491
1626
|
onOpenReference={handleOpenReference}
|
|
@@ -1559,32 +1694,44 @@
|
|
|
1559
1694
|
}}
|
|
1560
1695
|
{isReadOnly}
|
|
1561
1696
|
/>
|
|
1697
|
+
|
|
1698
|
+
<!-- Presentation-mode reference: a left-anchored panel over the fields
|
|
1699
|
+
column only (no dimming backdrop), so the base editor's live
|
|
1700
|
+
preview stays fully visible and interactive on the right. Close
|
|
1701
|
+
with the panel's Back button. -->
|
|
1702
|
+
{#if presentationModeOn && editorStack.length > 0}
|
|
1703
|
+
{@const currentRef = editorStack[editorStack.length - 1]!}
|
|
1704
|
+
<div
|
|
1705
|
+
class="border-rule bg-background absolute inset-y-0 left-0 z-40 flex w-full max-w-[520px] flex-col border-r shadow-2xl"
|
|
1706
|
+
>
|
|
1707
|
+
{@render referenceEditorBody(currentRef)}
|
|
1708
|
+
</div>
|
|
1709
|
+
{/if}
|
|
1562
1710
|
</div>
|
|
1563
1711
|
{#if !primaryEditorState.expanded && !focusModeOn && !presentationModeOn}
|
|
1564
1712
|
<!-- Collapsed Primary Editor Strip -->
|
|
1565
1713
|
<button
|
|
1566
1714
|
onclick={() => setActiveEditor(0)}
|
|
1567
1715
|
class="border-rule hover:bg-muted/50 flex h-full w-[60px] cursor-pointer flex-col border-l transition-colors"
|
|
1568
|
-
title="Click to expand {selectedDocumentType}"
|
|
1716
|
+
title="Click to expand {typeLabel(selectedDocumentType)}"
|
|
1569
1717
|
>
|
|
1570
1718
|
<div class="flex flex-1 items-start justify-center p-2 pt-8 text-left">
|
|
1571
1719
|
<div
|
|
1572
1720
|
class="text-foreground -mt-2 text-sm font-medium whitespace-nowrap [writing-mode:vertical-rl]"
|
|
1573
1721
|
>
|
|
1574
|
-
{selectedDocumentType
|
|
1575
|
-
? selectedDocumentType.charAt(0).toUpperCase() +
|
|
1576
|
-
selectedDocumentType.slice(1)
|
|
1577
|
-
: ''}
|
|
1722
|
+
{typeLabel(selectedDocumentType)}
|
|
1578
1723
|
</div>
|
|
1579
1724
|
</div>
|
|
1580
1725
|
</button>
|
|
1581
1726
|
{/if}
|
|
1582
1727
|
{/if}
|
|
1583
1728
|
|
|
1584
|
-
<!-- Stacked Reference Panel — only the last entry in the stack
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1729
|
+
<!-- Stacked Reference Panel — only the last entry in the stack is
|
|
1730
|
+
rendered. In presentation mode it opens as a modal over the
|
|
1731
|
+
current editor (so you stay anchored to the document + preview
|
|
1732
|
+
you were editing); otherwise it's a side panel. Back pops the
|
|
1733
|
+
stack (walks the ref chain); closing clears it. -->
|
|
1734
|
+
{#if editorStack.length > 0 && !presentationModeOn}
|
|
1588
1735
|
{@const currentRef = editorStack[editorStack.length - 1]!}
|
|
1589
1736
|
{@const isExpanded = focusModeOn
|
|
1590
1737
|
? activeEditorIndex === 1
|
|
@@ -1595,60 +1742,20 @@
|
|
|
1595
1742
|
class="border-rule h-full flex-1 overflow-x-hidden overflow-y-auto border-l transition-all duration-200"
|
|
1596
1743
|
style="min-width: 0;"
|
|
1597
1744
|
>
|
|
1598
|
-
|
|
1599
|
-
{schemas}
|
|
1600
|
-
documentType={currentRef.documentType}
|
|
1601
|
-
documentId={currentRef.documentId}
|
|
1602
|
-
isCreating={currentRef.isCreating}
|
|
1603
|
-
onBack={handleStackedEditorBack}
|
|
1604
|
-
onOpenReference={handleOpenReference}
|
|
1605
|
-
onOpenVersionHistory={handleOpenVersionHistory}
|
|
1606
|
-
onToggleFocus={() => {
|
|
1607
|
-
activeEditorIndex = 1;
|
|
1608
|
-
toggleFocusMode();
|
|
1609
|
-
}}
|
|
1610
|
-
externalVersionPreview={versionPanelDocId === currentRef.documentId
|
|
1611
|
-
? versionPreviewData
|
|
1612
|
-
: null}
|
|
1613
|
-
onSaved={async () => {}}
|
|
1614
|
-
onAutoSaved={handleAutoSave}
|
|
1615
|
-
onPublished={async (docId) => {
|
|
1616
|
-
handleDocumentPublished(docId);
|
|
1617
|
-
if (selectedDocumentType) {
|
|
1618
|
-
await fetchDocuments(selectedDocumentType);
|
|
1619
|
-
}
|
|
1620
|
-
}}
|
|
1621
|
-
onUnpublished={async (docId) => {
|
|
1622
|
-
handleDocumentPublished(docId);
|
|
1623
|
-
if (selectedDocumentType) {
|
|
1624
|
-
await fetchDocuments(selectedDocumentType);
|
|
1625
|
-
}
|
|
1626
|
-
}}
|
|
1627
|
-
onRestored={async (docId) => {
|
|
1628
|
-
handleDocumentPublished(docId);
|
|
1629
|
-
if (selectedDocumentType) {
|
|
1630
|
-
await fetchDocuments(selectedDocumentType);
|
|
1631
|
-
}
|
|
1632
|
-
}}
|
|
1633
|
-
onDeleted={async () => {
|
|
1634
|
-
handleCloseStackedEditor(0);
|
|
1635
|
-
}}
|
|
1636
|
-
{isReadOnly}
|
|
1637
|
-
/>
|
|
1745
|
+
{@render referenceEditorBody(currentRef)}
|
|
1638
1746
|
</div>
|
|
1639
1747
|
{:else if !focusModeOn}
|
|
1640
1748
|
<!-- Collapsed Stacked Editor Strip -->
|
|
1641
1749
|
<button
|
|
1642
1750
|
onclick={() => setActiveEditor(1)}
|
|
1643
1751
|
class="border-rule hover:bg-muted/50 flex h-full w-[60px] cursor-pointer flex-col border-l transition-colors"
|
|
1644
|
-
title="Click to expand {currentRef.documentType}"
|
|
1752
|
+
title="Click to expand {typeLabel(currentRef.documentType)}"
|
|
1645
1753
|
>
|
|
1646
1754
|
<div class="flex h-full flex-1 items-start justify-center p-2 pt-8 text-left">
|
|
1647
1755
|
<div
|
|
1648
1756
|
class="text-foreground text-sm font-medium whitespace-nowrap [writing-mode:vertical-rl]"
|
|
1649
1757
|
>
|
|
1650
|
-
{currentRef.documentType
|
|
1651
|
-
currentRef.documentType.slice(1)}
|
|
1758
|
+
{typeLabel(currentRef.documentType)}
|
|
1652
1759
|
</div>
|
|
1653
1760
|
</div>
|
|
1654
1761
|
</button>
|
|
@@ -1733,8 +1840,59 @@
|
|
|
1733
1840
|
<Tabs.Content value="media" class="m-0 h-full p-0">
|
|
1734
1841
|
<MediaBrowser active={activeTab.value === 'media'} />
|
|
1735
1842
|
</Tabs.Content>
|
|
1843
|
+
|
|
1844
|
+
<!-- Plugin admin tools — each rendered as its own top-level area. -->
|
|
1845
|
+
{#each adminTools as tool (tool.id)}
|
|
1846
|
+
{@const Tool = tool.component}
|
|
1847
|
+
<Tabs.Content value={`plugin:${tool.id}`} class="m-0 h-full overflow-auto p-0">
|
|
1848
|
+
<Tool tool={adminToolContext} />
|
|
1849
|
+
</Tabs.Content>
|
|
1850
|
+
{/each}
|
|
1736
1851
|
</Tabs.Root>
|
|
1737
1852
|
</div>
|
|
1738
1853
|
</div>
|
|
1739
1854
|
|
|
1740
1855
|
<ConfirmDialogHost />
|
|
1856
|
+
|
|
1857
|
+
<!-- Shared body for a stacked reference editor — always form-only (no nested preview
|
|
1858
|
+
iframe). In presentation mode it renders inside a modal over the base editor, whose
|
|
1859
|
+
live preview stays visible behind it; otherwise it's the side panel. -->
|
|
1860
|
+
{#snippet referenceEditorBody(currentRef: EditorStackItem)}
|
|
1861
|
+
<DocumentEditor
|
|
1862
|
+
{schemas}
|
|
1863
|
+
{plugins}
|
|
1864
|
+
documentType={currentRef.documentType}
|
|
1865
|
+
documentId={currentRef.documentId}
|
|
1866
|
+
isCreating={currentRef.isCreating}
|
|
1867
|
+
organizationId={currentOrgId}
|
|
1868
|
+
onBack={handleStackedEditorBack}
|
|
1869
|
+
backLabel="Back"
|
|
1870
|
+
onOpenReference={handleOpenReference}
|
|
1871
|
+
onOpenVersionHistory={handleOpenVersionHistory}
|
|
1872
|
+
externalVersionPreview={versionPanelDocId === currentRef.documentId ? versionPreviewData : null}
|
|
1873
|
+
onSaved={async () => {}}
|
|
1874
|
+
onAutoSaved={handleAutoSave}
|
|
1875
|
+
onPublished={async (docId) => {
|
|
1876
|
+
handleDocumentPublished(docId);
|
|
1877
|
+
if (selectedDocumentType) {
|
|
1878
|
+
await fetchDocuments(selectedDocumentType);
|
|
1879
|
+
}
|
|
1880
|
+
}}
|
|
1881
|
+
onUnpublished={async (docId) => {
|
|
1882
|
+
handleDocumentPublished(docId);
|
|
1883
|
+
if (selectedDocumentType) {
|
|
1884
|
+
await fetchDocuments(selectedDocumentType);
|
|
1885
|
+
}
|
|
1886
|
+
}}
|
|
1887
|
+
onRestored={async (docId) => {
|
|
1888
|
+
handleDocumentPublished(docId);
|
|
1889
|
+
if (selectedDocumentType) {
|
|
1890
|
+
await fetchDocuments(selectedDocumentType);
|
|
1891
|
+
}
|
|
1892
|
+
}}
|
|
1893
|
+
onDeleted={async () => {
|
|
1894
|
+
handleCloseStackedEditor(0);
|
|
1895
|
+
}}
|
|
1896
|
+
{isReadOnly}
|
|
1897
|
+
/>
|
|
1898
|
+
{/snippet}
|