@aphexcms/cms-core 9.4.0 → 9.5.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/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/index.js +4 -4
- package/dist/cli/index.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 +259 -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/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/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 +69 -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/{cli/generate-types.d.ts → lib/type-gen.d.ts} +3 -6
- package/dist/lib/type-gen.d.ts.map +1 -0
- package/dist/lib/type-gen.js +658 -0
- package/dist/lib/type-gen.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/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 +69 -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/type-gen.d.ts +19 -0
- package/dist/type-gen.d.ts.map +1 -0
- package/dist/{cli/generate-types.js → type-gen.js} +101 -68
- 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/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/generate-types.d.ts.map +0 -1
- package/dist/cli/generate-types.js.map +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The shared input resolver: given a field, pick the right control — a plugin
|
|
3
|
+
// widget (field.input → aphex/field/component) first, else the built-in renderer
|
|
4
|
+
// for the field type. Used by SchemaField (for leaf/reference fields) AND by
|
|
5
|
+
// ArrayField (per primitive/reference item), so a custom or rich input resolves
|
|
6
|
+
// uniformly everywhere, the way Sanity's form builder does — no array-item gap.
|
|
7
|
+
//
|
|
8
|
+
// Object and array containers are NOT handled here; those recurse through
|
|
9
|
+
// SchemaField / ArrayField, which fall back to this component for their leaves.
|
|
10
|
+
import type { Field } from '../../../types/schemas';
|
|
11
|
+
import { useFieldComponents } from '../../../admin/field-components.svelte';
|
|
12
|
+
import StringField from './StringField.svelte';
|
|
13
|
+
import TextareaField from './TextareaField.svelte';
|
|
14
|
+
import NumberField from './NumberField.svelte';
|
|
15
|
+
import BooleanField from './BooleanField.svelte';
|
|
16
|
+
import SlugField from './SlugField.svelte';
|
|
17
|
+
import URLField from './URLField.svelte';
|
|
18
|
+
import DateField from './DateField.svelte';
|
|
19
|
+
import DateTimeField from './DateTimeField.svelte';
|
|
20
|
+
import ImageField from './ImageField.svelte';
|
|
21
|
+
import FileField from './FileField.svelte';
|
|
22
|
+
import ReferenceField from './ReferenceField.svelte';
|
|
23
|
+
|
|
24
|
+
interface Props {
|
|
25
|
+
field: Field;
|
|
26
|
+
value: any;
|
|
27
|
+
onUpdate: (value: any) => void;
|
|
28
|
+
readonly?: boolean;
|
|
29
|
+
validationClasses?: string;
|
|
30
|
+
documentData?: Record<string, any>;
|
|
31
|
+
schemaType?: string;
|
|
32
|
+
fieldPath?: string;
|
|
33
|
+
organizationId?: string;
|
|
34
|
+
onOpenReference?: (documentId: string, documentType: string) => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let {
|
|
38
|
+
field,
|
|
39
|
+
value,
|
|
40
|
+
onUpdate,
|
|
41
|
+
readonly = false,
|
|
42
|
+
validationClasses,
|
|
43
|
+
documentData,
|
|
44
|
+
schemaType,
|
|
45
|
+
fieldPath,
|
|
46
|
+
organizationId,
|
|
47
|
+
onOpenReference
|
|
48
|
+
}: Props = $props();
|
|
49
|
+
|
|
50
|
+
const fieldComponents = useFieldComponents();
|
|
51
|
+
const CustomInput = $derived(field.input ? fieldComponents(field.input) : undefined);
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
{#if CustomInput}
|
|
55
|
+
<CustomInput
|
|
56
|
+
{field}
|
|
57
|
+
{value}
|
|
58
|
+
{onUpdate}
|
|
59
|
+
{validationClasses}
|
|
60
|
+
{readonly}
|
|
61
|
+
{documentData}
|
|
62
|
+
{schemaType}
|
|
63
|
+
/>
|
|
64
|
+
{:else if field.type === 'string'}
|
|
65
|
+
<StringField {field} {value} {documentData} {onUpdate} {validationClasses} {readonly} />
|
|
66
|
+
{:else if field.type === 'text'}
|
|
67
|
+
<TextareaField {field} {value} {onUpdate} {validationClasses} {readonly} />
|
|
68
|
+
{:else if field.type === 'slug'}
|
|
69
|
+
<SlugField {field} {value} {documentData} {onUpdate} {validationClasses} {readonly} />
|
|
70
|
+
{:else if field.type === 'url'}
|
|
71
|
+
<URLField {field} {value} {onUpdate} {validationClasses} {readonly} />
|
|
72
|
+
{:else if field.type === 'number'}
|
|
73
|
+
<NumberField {field} {value} {onUpdate} {validationClasses} {readonly} />
|
|
74
|
+
{:else if field.type === 'boolean'}
|
|
75
|
+
<BooleanField {field} {value} {onUpdate} {validationClasses} {readonly} />
|
|
76
|
+
{:else if field.type === 'date'}
|
|
77
|
+
<DateField {field} {value} {onUpdate} {validationClasses} {readonly} />
|
|
78
|
+
{:else if field.type === 'datetime'}
|
|
79
|
+
<DateTimeField {field} {value} {onUpdate} {validationClasses} {readonly} />
|
|
80
|
+
{:else if field.type === 'image'}
|
|
81
|
+
<ImageField
|
|
82
|
+
{field}
|
|
83
|
+
{value}
|
|
84
|
+
{onUpdate}
|
|
85
|
+
{validationClasses}
|
|
86
|
+
{schemaType}
|
|
87
|
+
{fieldPath}
|
|
88
|
+
{readonly}
|
|
89
|
+
{organizationId}
|
|
90
|
+
/>
|
|
91
|
+
{:else if field.type === 'file'}
|
|
92
|
+
<FileField
|
|
93
|
+
{field}
|
|
94
|
+
{value}
|
|
95
|
+
{onUpdate}
|
|
96
|
+
{validationClasses}
|
|
97
|
+
{schemaType}
|
|
98
|
+
{fieldPath}
|
|
99
|
+
{readonly}
|
|
100
|
+
{organizationId}
|
|
101
|
+
/>
|
|
102
|
+
{:else if field.type === 'reference' && field.to}
|
|
103
|
+
<ReferenceField {field} {value} {onUpdate} {onOpenReference} {readonly} />
|
|
104
|
+
{:else}
|
|
105
|
+
<div class="border-muted-foreground/30 rounded-md border border-dashed p-4 text-center">
|
|
106
|
+
<p class="text-muted-foreground text-sm">Field type "{field.type}" not yet supported</p>
|
|
107
|
+
<p class="text-muted-foreground mt-1 text-xs">Raw value: {JSON.stringify(value)}</p>
|
|
108
|
+
</div>
|
|
109
|
+
{/if}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Field } from '../../../types/schemas.js';
|
|
2
|
+
interface Props {
|
|
3
|
+
field: Field;
|
|
4
|
+
value: any;
|
|
5
|
+
onUpdate: (value: any) => void;
|
|
6
|
+
readonly?: boolean;
|
|
7
|
+
validationClasses?: string;
|
|
8
|
+
documentData?: Record<string, any>;
|
|
9
|
+
schemaType?: string;
|
|
10
|
+
fieldPath?: string;
|
|
11
|
+
organizationId?: string;
|
|
12
|
+
onOpenReference?: (documentId: string, documentType: string) => void;
|
|
13
|
+
}
|
|
14
|
+
declare const FieldInput: import("svelte").Component<Props, {}, "">;
|
|
15
|
+
type FieldInput = ReturnType<typeof FieldInput>;
|
|
16
|
+
export default FieldInput;
|
|
17
|
+
//# sourceMappingURL=FieldInput.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldInput.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/FieldInput.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAenD,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE;AA2EF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { Trash2, Image as ImageIcon } from '@lucide/svelte';
|
|
3
3
|
import { assets } from '../../../../api/assets';
|
|
4
|
+
import type { BlockPreviewProps } from '../../../../admin/block-previews.svelte';
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
data: Record<string, unknown>;
|
|
9
|
-
selected?: boolean;
|
|
10
|
-
onEdit: () => void;
|
|
11
|
-
onDelete: () => void;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// `type`/`nodeKey` are passed by the ProseMirror node view (svelte-node-view.ts) for
|
|
15
|
-
// contract parity across block views; this image view doesn't render them.
|
|
6
|
+
// Shares the block-preview contract with app-registered previews, so the node view
|
|
7
|
+
// can mount either through one type. `type`/`nodeKey`/`schema` are passed for parity
|
|
8
|
+
// but this image view doesn't render them.
|
|
16
9
|
// eslint-disable-next-line svelte/no-unused-props
|
|
17
|
-
let { data, selected = false, onEdit, onDelete }:
|
|
10
|
+
let { data, selected = false, onEdit, onDelete }: BlockPreviewProps = $props();
|
|
18
11
|
|
|
19
12
|
const assetRef = $derived((data?.asset as any)?._ref as string | undefined);
|
|
20
13
|
const assetPromise = $derived(assetRef ? assets.getById(assetRef) : null);
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
nodeKey: string;
|
|
4
|
-
data: Record<string, unknown>;
|
|
5
|
-
selected?: boolean;
|
|
6
|
-
onEdit: () => void;
|
|
7
|
-
onDelete: () => void;
|
|
8
|
-
}
|
|
9
|
-
declare const PortableTextImageView: import("svelte").Component<Props, {}, "">;
|
|
1
|
+
import type { BlockPreviewProps } from '../../../../admin/block-previews.svelte.js';
|
|
2
|
+
declare const PortableTextImageView: import("svelte").Component<BlockPreviewProps, {}, "">;
|
|
10
3
|
type PortableTextImageView = ReturnType<typeof PortableTextImageView>;
|
|
11
4
|
export default PortableTextImageView;
|
|
12
5
|
//# sourceMappingURL=PortableTextImageView.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortableTextImageView.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/PortableTextImageView.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PortableTextImageView.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/PortableTextImageView.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AA6DjF,QAAA,MAAM,qBAAqB,uDAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { Pencil, Trash2 } from '@lucide/svelte';
|
|
3
|
+
import { resolvePreviewTitle, resolvePreviewSubtitle } from '../../../../utils/preview';
|
|
4
|
+
import type { BlockPreviewProps } from '../../../../admin/block-previews.svelte';
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
nodeKey: string;
|
|
7
|
-
data: Record<string, unknown>;
|
|
8
|
-
selected?: boolean;
|
|
9
|
-
onEdit: () => void;
|
|
10
|
-
onDelete: () => void;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// `nodeKey` is passed by the ProseMirror node view (svelte-node-view.ts) for contract
|
|
14
|
-
// parity across block views but isn't needed here.
|
|
6
|
+
// Shares the block-preview contract with app-registered previews, so the node view
|
|
7
|
+
// can mount either through one type. `nodeKey` is passed for parity but unused here.
|
|
15
8
|
// eslint-disable-next-line svelte/no-unused-props
|
|
16
|
-
let { type, data, selected = false, onEdit, onDelete }:
|
|
9
|
+
let { type, data, schema, selected = false, onEdit, onDelete }: BlockPreviewProps = $props();
|
|
17
10
|
|
|
18
|
-
|
|
11
|
+
// Honour the block type's `preview` config (the same resolver array rows and
|
|
12
|
+
// document lists use), so a schema can say what its card reads. `resolvePreviewTitle`
|
|
13
|
+
// already falls back to conventional field names (title/heading/name/label) → the
|
|
14
|
+
// schema's title → the type name.
|
|
15
|
+
const title = $derived(resolvePreviewTitle(data, schema, type));
|
|
19
16
|
|
|
20
17
|
const subtitle = $derived.by(() => {
|
|
21
|
-
const
|
|
18
|
+
const configured = resolvePreviewSubtitle(data, schema);
|
|
19
|
+
if (configured) return configured;
|
|
20
|
+
// No `preview.select.subtitle` — fall back to scraping the first couple of
|
|
21
|
+
// non-empty string fields so an unconfigured block still says something.
|
|
22
|
+
const parts: string[] = [];
|
|
22
23
|
for (const [key, val] of Object.entries(data)) {
|
|
23
24
|
if (key.startsWith('_') || key === 'title' || key === 'name') continue;
|
|
24
25
|
if (typeof val === 'string' && val.length > 0) {
|
|
25
|
-
|
|
26
|
-
if (
|
|
26
|
+
parts.push(val.length > 40 ? val.slice(0, 40) + '...' : val);
|
|
27
|
+
if (parts.length >= 2) break;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
return
|
|
30
|
+
return parts.join(' - ');
|
|
30
31
|
});
|
|
31
32
|
</script>
|
|
32
33
|
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
nodeKey: string;
|
|
4
|
-
data: Record<string, unknown>;
|
|
5
|
-
selected?: boolean;
|
|
6
|
-
onEdit: () => void;
|
|
7
|
-
onDelete: () => void;
|
|
8
|
-
}
|
|
9
|
-
declare const PortableTextObjectView: import("svelte").Component<Props, {}, "">;
|
|
1
|
+
import type { BlockPreviewProps } from '../../../../admin/block-previews.svelte.js';
|
|
2
|
+
declare const PortableTextObjectView: import("svelte").Component<BlockPreviewProps, {}, "">;
|
|
10
3
|
type PortableTextObjectView = ReturnType<typeof PortableTextObjectView>;
|
|
11
4
|
export default PortableTextObjectView;
|
|
12
5
|
//# sourceMappingURL=PortableTextObjectView.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortableTextObjectView.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/PortableTextObjectView.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PortableTextObjectView.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/PortableTextObjectView.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AA4DjF,QAAA,MAAM,sBAAsB,uDAAwC,CAAC;AACrE,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACxE,eAAe,sBAAsB,CAAC"}
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
import type { ArrayField as ArrayFieldType, SchemaType } from '../../../../types/schemas';
|
|
41
41
|
import { getSchemaContext } from '../../../../schema-context.svelte';
|
|
42
42
|
import { getSchemaByName } from '../../../../schema-utils/utils';
|
|
43
|
+
import { useBlockPreviews } from '../../../../admin/block-previews.svelte';
|
|
43
44
|
import { getRichtextEditorRegistry } from '../../../../richtext-context.svelte.js';
|
|
44
45
|
import ObjectModal from '../../ObjectModal.svelte';
|
|
45
46
|
import ImageBlockModal from './ImageBlockModal.svelte';
|
|
@@ -86,6 +87,9 @@
|
|
|
86
87
|
let editingNodeKey = $state<string | null>(null);
|
|
87
88
|
let editingIsInline = $state(false);
|
|
88
89
|
|
|
90
|
+
// App-registered inline previews for custom block types (see setBlockPreviews).
|
|
91
|
+
const blockPreviews = useBlockPreviews();
|
|
92
|
+
|
|
89
93
|
const blockDef = $derived(field.of.find((ref) => ref.type === 'block'));
|
|
90
94
|
const styles = $derived(blockDef?.styles?.map((s) => s.value) ?? DEFAULT_BLOCK_STYLES);
|
|
91
95
|
const decorators = $derived(
|
|
@@ -429,6 +433,40 @@
|
|
|
429
433
|
return found;
|
|
430
434
|
}
|
|
431
435
|
|
|
436
|
+
/**
|
|
437
|
+
* Clean externally-pasted HTML before ProseMirror parses it. Word and Google
|
|
438
|
+
* Docs inject heavy inline `style`/`class` bloat and wrapper spans; we keep the
|
|
439
|
+
* structural tags (headings, lists, bold/italic, links) and drop everything the
|
|
440
|
+
* editor doesn't model, so paste produces clean Portable Text instead of noise.
|
|
441
|
+
*/
|
|
442
|
+
function sanitizePastedHTML(html: string): string {
|
|
443
|
+
if (typeof window === 'undefined' || !html) return html;
|
|
444
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
445
|
+
|
|
446
|
+
// Google Docs wraps an entire copied selection in <b style="font-weight:normal">,
|
|
447
|
+
// which would otherwise make every pasted word bold. Unwrap those.
|
|
448
|
+
doc.body.querySelectorAll('b, strong').forEach((el) => {
|
|
449
|
+
if (/font-weight:\s*(normal|400)/i.test(el.getAttribute('style') ?? '')) {
|
|
450
|
+
el.replaceWith(...el.childNodes);
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
// Elements that never carry editorial content.
|
|
455
|
+
doc.querySelectorAll('script, style, link, meta, title, noscript').forEach((el) => el.remove());
|
|
456
|
+
|
|
457
|
+
// Strip presentational and unsafe attributes everywhere, keeping only the few
|
|
458
|
+
// the editor actually reads (href on links, src/alt on images).
|
|
459
|
+
const KEEP: Record<string, string[]> = { A: ['href'], IMG: ['src', 'alt'] };
|
|
460
|
+
doc.body.querySelectorAll('*').forEach((el) => {
|
|
461
|
+
const keep = KEEP[el.tagName] ?? [];
|
|
462
|
+
for (const attr of [...el.attributes]) {
|
|
463
|
+
if (!keep.includes(attr.name.toLowerCase())) el.removeAttribute(attr.name);
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
return doc.body.innerHTML;
|
|
468
|
+
}
|
|
469
|
+
|
|
432
470
|
function createEditor() {
|
|
433
471
|
editor?.destroy();
|
|
434
472
|
if (!element) return;
|
|
@@ -464,7 +502,13 @@
|
|
|
464
502
|
? [
|
|
465
503
|
PortableTextObject.configure({
|
|
466
504
|
onEdit: handleEditBlock,
|
|
467
|
-
onDelete: handleDeleteBlock
|
|
505
|
+
onDelete: handleDeleteBlock,
|
|
506
|
+
// Let each block's card read its own type's `preview` config
|
|
507
|
+
// (falls back to the registered schema's, for named object types).
|
|
508
|
+
resolveSchema: (type: string) =>
|
|
509
|
+
field.of.find((ref) => ref.type === type) ?? getSchemaByName(schemas, type),
|
|
510
|
+
// An app-registered preview renders the real block inline instead.
|
|
511
|
+
resolveComponent: (type: string) => blockPreviews(type)
|
|
468
512
|
})
|
|
469
513
|
]
|
|
470
514
|
: []),
|
|
@@ -487,6 +531,9 @@
|
|
|
487
531
|
editable: !readonly,
|
|
488
532
|
extensions,
|
|
489
533
|
content: tiptapDoc,
|
|
534
|
+
editorProps: {
|
|
535
|
+
transformPastedHTML: sanitizePastedHTML
|
|
536
|
+
},
|
|
490
537
|
onUpdate: ({ editor: e }) => {
|
|
491
538
|
if (isSyncingFromParent) return;
|
|
492
539
|
internalVersion++;
|
|
@@ -907,8 +954,14 @@
|
|
|
907
954
|
{#if editor && !readonly}
|
|
908
955
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
909
956
|
<Tooltip.Provider>
|
|
957
|
+
<!--
|
|
958
|
+
Sticky within `.richtext-editor` (which is `overflow: visible`), so the toolbar
|
|
959
|
+
follows you down a long document but releases at the field's bottom edge — it
|
|
960
|
+
never floats over the next field. Opaque background: a translucent one would let
|
|
961
|
+
the scrolling text bleed through once it's pinned.
|
|
962
|
+
-->
|
|
910
963
|
<div
|
|
911
|
-
class="border-rule bg-muted
|
|
964
|
+
class="border-rule bg-muted sticky top-0 z-10 flex flex-wrap items-center gap-0.5 border-b px-2 py-1.5"
|
|
912
965
|
onmousedown={(e) => e.preventDefault()}
|
|
913
966
|
>
|
|
914
967
|
{#if styles.length > 1}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichtextField.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/RichtextField.svelte.ts"],"names":[],"mappings":"AA4BA,OAAO,EAGL,KAAK,iBAAiB,EACtB,MAAM,4BAA4B,CAAC;AASrC,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"RichtextField.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/RichtextField.svelte.ts"],"names":[],"mappings":"AA4BA,OAAO,EAGL,KAAK,iBAAiB,EACtB,MAAM,4BAA4B,CAAC;AASrC,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,2BAA2B,CAAC;AAYzF,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AA+oCF,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { Node } from '@tiptap/core';
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import type { PreviewSource } from '../../../../utils/preview.js';
|
|
4
|
+
import type { BlockPreviewProps } from '../../../../admin/block-previews.svelte.js';
|
|
2
5
|
export interface PortableTextObjectOptions {
|
|
3
6
|
onEdit: (attrs: {
|
|
4
7
|
_type: string;
|
|
@@ -6,6 +9,10 @@ export interface PortableTextObjectOptions {
|
|
|
6
9
|
data: Record<string, unknown>;
|
|
7
10
|
}) => void;
|
|
8
11
|
onDelete: (key: string) => void;
|
|
12
|
+
/** Resolve a block type's schema so its card can honour the type's `preview` config. */
|
|
13
|
+
resolveSchema?: (type: string) => PreviewSource;
|
|
14
|
+
/** Resolve a custom preview component, rendered inline instead of the generic card. */
|
|
15
|
+
resolveComponent?: (type: string) => Component<BlockPreviewProps> | undefined;
|
|
9
16
|
}
|
|
10
17
|
export declare const PortableTextObject: Node<PortableTextObjectOptions, any>;
|
|
11
18
|
//# sourceMappingURL=portable-text-object-node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable-text-object-node.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/portable-text-object-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"portable-text-object-node.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/portable-text-object-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IACxF,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,wFAAwF;IACxF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,CAAC;IAChD,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;CAC9E;AAED,eAAO,MAAM,kBAAkB,sCAwC7B,CAAC"}
|
|
@@ -9,7 +9,9 @@ export const PortableTextObject = Node.create({
|
|
|
9
9
|
addOptions() {
|
|
10
10
|
return {
|
|
11
11
|
onEdit: () => { },
|
|
12
|
-
onDelete: () => { }
|
|
12
|
+
onDelete: () => { },
|
|
13
|
+
resolveSchema: undefined,
|
|
14
|
+
resolveComponent: undefined
|
|
13
15
|
};
|
|
14
16
|
},
|
|
15
17
|
addAttributes() {
|
|
@@ -26,6 +28,6 @@ export const PortableTextObject = Node.create({
|
|
|
26
28
|
return ['div', mergeAttributes(HTMLAttributes, { 'data-portable-text-object': '' }), 0];
|
|
27
29
|
},
|
|
28
30
|
addNodeView() {
|
|
29
|
-
return SvelteNodeViewRenderer(this.options.onEdit, this.options.onDelete);
|
|
31
|
+
return SvelteNodeViewRenderer(this.options.onEdit, this.options.onDelete, this.options.resolveSchema, this.options.resolveComponent);
|
|
30
32
|
}
|
|
31
33
|
});
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import type { NodeViewRendererProps } from '@tiptap/core';
|
|
2
2
|
import type { NodeView as ProseMirrorNodeView } from '@tiptap/pm/view';
|
|
3
|
+
import type { Component } from 'svelte';
|
|
4
|
+
import type { PreviewSource } from '../../../../utils/preview.js';
|
|
5
|
+
import type { BlockPreviewProps } from '../../../../admin/block-previews.svelte.js';
|
|
3
6
|
export declare function SvelteNodeViewRenderer(onEdit: (attrs: {
|
|
4
7
|
_type: string;
|
|
5
8
|
_key: string;
|
|
6
9
|
data: Record<string, unknown>;
|
|
7
|
-
}) => void, onDelete: (key: string) => void
|
|
10
|
+
}) => void, onDelete: (key: string) => void,
|
|
11
|
+
/**
|
|
12
|
+
* Look up a block type's schema (its entry in the field's `of`) so the card can
|
|
13
|
+
* honour that type's `preview` config instead of guessing a title/subtitle from
|
|
14
|
+
* the raw data. Optional — without it the card falls back to the old heuristic.
|
|
15
|
+
*/
|
|
16
|
+
resolveSchema?: (type: string) => PreviewSource,
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a custom preview component for a block type. When one exists it's mounted
|
|
19
|
+
* instead of the generic card, so the author sees the real block inline. It receives
|
|
20
|
+
* the same props (including `onEdit`/`onDelete`), so editing still works.
|
|
21
|
+
*/
|
|
22
|
+
resolveComponent?: (type: string) => Component<BlockPreviewProps> | undefined): (props: NodeViewRendererProps) => ProseMirrorNodeView;
|
|
8
23
|
//# sourceMappingURL=svelte-node-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte-node-view.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/svelte-node-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"svelte-node-view.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/admin/fields/richtext/svelte-node-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,KAAK,IAAI,EACvF,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;AAC/B;;;;GAIG;AACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa;AAC/C;;;;GAIG;AACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,iBAAiB,CAAC,GAAG,SAAS,IAErE,OAAO,qBAAqB,KAAG,mBAAmB,CA+E1D"}
|
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
import { mount, unmount } from 'svelte';
|
|
2
2
|
import PortableTextObjectView from './PortableTextObjectView.svelte';
|
|
3
3
|
import PortableTextImageView from './PortableTextImageView.svelte';
|
|
4
|
-
export function SvelteNodeViewRenderer(onEdit, onDelete
|
|
4
|
+
export function SvelteNodeViewRenderer(onEdit, onDelete,
|
|
5
|
+
/**
|
|
6
|
+
* Look up a block type's schema (its entry in the field's `of`) so the card can
|
|
7
|
+
* honour that type's `preview` config instead of guessing a title/subtitle from
|
|
8
|
+
* the raw data. Optional — without it the card falls back to the old heuristic.
|
|
9
|
+
*/
|
|
10
|
+
resolveSchema,
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a custom preview component for a block type. When one exists it's mounted
|
|
13
|
+
* instead of the generic card, so the author sees the real block inline. It receives
|
|
14
|
+
* the same props (including `onEdit`/`onDelete`), so editing still works.
|
|
15
|
+
*/
|
|
16
|
+
resolveComponent) {
|
|
5
17
|
return (props) => {
|
|
6
18
|
const wrapper = document.createElement('div');
|
|
7
19
|
wrapper.setAttribute('data-portable-text-object', '');
|
|
8
20
|
wrapper.setAttribute('data-node-view-wrapper', '');
|
|
9
21
|
wrapper.contentEditable = 'false';
|
|
10
22
|
let nodeAttrs = props.node.attrs;
|
|
23
|
+
// Built-ins and app-registered previews share BlockPreviewProps, so all three
|
|
24
|
+
// mount through one call site.
|
|
11
25
|
function getViewComponent() {
|
|
26
|
+
// An app-registered preview wins — it renders the real block inline.
|
|
27
|
+
const custom = resolveComponent?.(nodeAttrs._type);
|
|
28
|
+
if (custom)
|
|
29
|
+
return custom;
|
|
12
30
|
return nodeAttrs._type === 'image' ? PortableTextImageView : PortableTextObjectView;
|
|
13
31
|
}
|
|
14
32
|
function mountView() {
|
|
@@ -18,6 +36,7 @@ export function SvelteNodeViewRenderer(onEdit, onDelete) {
|
|
|
18
36
|
type: nodeAttrs._type,
|
|
19
37
|
nodeKey: nodeAttrs._key,
|
|
20
38
|
data: nodeAttrs.data,
|
|
39
|
+
schema: resolveSchema?.(nodeAttrs._type),
|
|
21
40
|
selected: false,
|
|
22
41
|
onEdit: () => {
|
|
23
42
|
onEdit({
|
|
@@ -90,6 +90,11 @@
|
|
|
90
90
|
function getRoleLabel(role: string): string {
|
|
91
91
|
return role.charAt(0).toUpperCase() + role.slice(1);
|
|
92
92
|
}
|
|
93
|
+
|
|
94
|
+
function getOrganizationLogo(org: SidebarOrganization | undefined): string | null {
|
|
95
|
+
const logo = org?.metadata?.logo;
|
|
96
|
+
return typeof logo === 'string' && logo.length > 0 ? logo : null;
|
|
97
|
+
}
|
|
93
98
|
</script>
|
|
94
99
|
|
|
95
100
|
<SidebarMenu>
|
|
@@ -110,11 +115,19 @@
|
|
|
110
115
|
disabled={isSwitching}
|
|
111
116
|
>
|
|
112
117
|
{#if activeOrganization}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
{#if getOrganizationLogo(activeOrganization)}
|
|
119
|
+
<img
|
|
120
|
+
src={getOrganizationLogo(activeOrganization)!}
|
|
121
|
+
alt={activeOrganization.name}
|
|
122
|
+
class="aspect-square size-8 rounded-lg object-cover"
|
|
123
|
+
/>
|
|
124
|
+
{:else}
|
|
125
|
+
<div
|
|
126
|
+
class="bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg text-sm font-semibold"
|
|
127
|
+
>
|
|
128
|
+
{getOrganizationInitials(activeOrganization.name)}
|
|
129
|
+
</div>
|
|
130
|
+
{/if}
|
|
118
131
|
<div class="grid flex-1 text-left text-sm leading-tight">
|
|
119
132
|
<span class="truncate font-medium">
|
|
120
133
|
{activeOrganization.name}
|
|
@@ -164,11 +177,19 @@
|
|
|
164
177
|
onclick={() => handleSwitchOrganization(org)}
|
|
165
178
|
disabled={isSwitching}
|
|
166
179
|
>
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
180
|
+
{#if getOrganizationLogo(org)}
|
|
181
|
+
<img
|
|
182
|
+
src={getOrganizationLogo(org)!}
|
|
183
|
+
alt={org.name}
|
|
184
|
+
class="size-8 shrink-0 rounded-md object-cover"
|
|
185
|
+
/>
|
|
186
|
+
{:else}
|
|
187
|
+
<div
|
|
188
|
+
class="bg-primary text-primary-foreground flex size-8 shrink-0 items-center justify-center rounded-md text-xs font-semibold"
|
|
189
|
+
>
|
|
190
|
+
{getOrganizationInitials(org.name)}
|
|
191
|
+
</div>
|
|
192
|
+
{/if}
|
|
172
193
|
<div class="min-w-0 flex-1">
|
|
173
194
|
<div class="flex items-center justify-between">
|
|
174
195
|
<p class="truncate font-medium">{org.name}</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganizationSwitcher.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/OrganizationSwitcher.svelte.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACZ,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"OrganizationSwitcher.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/OrganizationSwitcher.svelte.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACZ,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,CAAC;AAsLH,QAAA,MAAM,oBAAoB,2CAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
|