@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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emit theme tokens as a scoped `<style>` body.
|
|
3
|
+
*
|
|
4
|
+
* Two hard rules, both learned the expensive way:
|
|
5
|
+
* 1. NEVER emit site tokens at `:root` — they'd bleed into the admin chrome.
|
|
6
|
+
* Always scope to the site shell selector.
|
|
7
|
+
* 2. Theme values are user-authored, so sanitize before interpolating. Any value
|
|
8
|
+
* that could break out of the `--var: value;` declaration (contains `;`, `{`,
|
|
9
|
+
* `}`, `<`, `>`, or a CSS `url(`/`expression(`) is dropped, and the token's
|
|
10
|
+
* CSS fallback in the layout applies instead.
|
|
11
|
+
*/
|
|
12
|
+
const UNSAFE = /[;{}<>]|url\s*\(|expression\s*\(/i;
|
|
13
|
+
/** Return the value if safe to interpolate into a CSS declaration, else null. */
|
|
14
|
+
export function sanitizeTokenValue(value) {
|
|
15
|
+
const trimmed = value.trim();
|
|
16
|
+
if (trimmed === '')
|
|
17
|
+
return null;
|
|
18
|
+
if (UNSAFE.test(trimmed))
|
|
19
|
+
return null;
|
|
20
|
+
return trimmed;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build a sanitized `--var: value; …` declaration list from a `cssVar → value`
|
|
24
|
+
* map (see deriveThemeVars). Suitable for an inline `style` attribute on the site
|
|
25
|
+
* shell element — the simplest way to scope tokens to the site subtree while
|
|
26
|
+
* beating component-CSS specificity, with no `<style>` injection to guard. Returns
|
|
27
|
+
* `''` when nothing survives sanitization.
|
|
28
|
+
*/
|
|
29
|
+
export function emitThemeVars(vars) {
|
|
30
|
+
const declarations = [];
|
|
31
|
+
for (const [cssVar, rawValue] of Object.entries(vars)) {
|
|
32
|
+
if (!cssVar.startsWith('--'))
|
|
33
|
+
continue;
|
|
34
|
+
const value = sanitizeTokenValue(rawValue);
|
|
35
|
+
if (value === null)
|
|
36
|
+
continue;
|
|
37
|
+
declarations.push(`${cssVar}: ${value};`);
|
|
38
|
+
}
|
|
39
|
+
return declarations.join(' ');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build a scoped style *rule* from a `cssVar → value` map, for callers that
|
|
43
|
+
* prefer injecting a `<style>` block over an inline attribute. Returns `''` when
|
|
44
|
+
* nothing survives sanitization, so callers can skip rendering an empty `<style>`.
|
|
45
|
+
*
|
|
46
|
+
* @param selector CSS selector to scope the custom properties to, e.g. `.blog-shell`.
|
|
47
|
+
*/
|
|
48
|
+
export function emitThemeStyle(selector, vars) {
|
|
49
|
+
const body = emitThemeVars(vars);
|
|
50
|
+
if (body === '')
|
|
51
|
+
return '';
|
|
52
|
+
return `${selector} { ${body} }`;
|
|
53
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive the admin schema and the runtime CSS-var map from a token list.
|
|
3
|
+
*
|
|
4
|
+
* `deriveThemeFields()` feeds the `theme` singleton schema; `deriveThemeVars()`
|
|
5
|
+
* turns a saved theme document into `{ '--accent': '#…', … }`. Both walk the same
|
|
6
|
+
* token list, so the form and the rendered CSS can never drift. The app supplies
|
|
7
|
+
* the tokens (see the app's `theme/tokens.ts`).
|
|
8
|
+
*/
|
|
9
|
+
import type { Field, FieldGroup } from '../types/schemas.js';
|
|
10
|
+
import type { ThemeToken } from './tokens.js';
|
|
11
|
+
/**
|
|
12
|
+
* Build the field-group list for a theme singleton, one group per distinct
|
|
13
|
+
* `token.group` in first-seen order. The first group is marked `default`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deriveThemeFieldGroups(tokens: ThemeToken[]): FieldGroup[];
|
|
16
|
+
/** Build the field list for the `theme` singleton schema from the token set. */
|
|
17
|
+
export declare function deriveThemeFields(tokens: ThemeToken[]): Field[];
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a theme document into a `cssVar → value` map, falling back to each
|
|
20
|
+
* token's default when the document omits or blanks a value. Font values are
|
|
21
|
+
* resolved to their full CSS stack; colors pass through (sanitized in ./css.ts).
|
|
22
|
+
*
|
|
23
|
+
* Accepts `unknown` so callers can pass a concrete generated document type (which
|
|
24
|
+
* lacks a string index signature) without casting; keys are read dynamically.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deriveThemeVars(values: unknown, tokens: ThemeToken[]): Record<string, string>;
|
|
27
|
+
//# sourceMappingURL=derive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../src/lib/theme/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAWzE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CA0C/D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuC7F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the field-group list for a theme singleton, one group per distinct
|
|
3
|
+
* `token.group` in first-seen order. The first group is marked `default`.
|
|
4
|
+
*/
|
|
5
|
+
export function deriveThemeFieldGroups(tokens) {
|
|
6
|
+
const seen = new Map();
|
|
7
|
+
for (const token of tokens) {
|
|
8
|
+
if (seen.has(token.group))
|
|
9
|
+
continue;
|
|
10
|
+
seen.set(token.group, {
|
|
11
|
+
name: token.group,
|
|
12
|
+
title: token.group.charAt(0).toUpperCase() + token.group.slice(1),
|
|
13
|
+
default: seen.size === 0
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return [...seen.values()];
|
|
17
|
+
}
|
|
18
|
+
/** Build the field list for the `theme` singleton schema from the token set. */
|
|
19
|
+
export function deriveThemeFields(tokens) {
|
|
20
|
+
return tokens.map((token) => {
|
|
21
|
+
const base = {
|
|
22
|
+
name: token.name,
|
|
23
|
+
title: token.title,
|
|
24
|
+
description: token.description,
|
|
25
|
+
group: token.group
|
|
26
|
+
};
|
|
27
|
+
switch (token.kind) {
|
|
28
|
+
case 'color':
|
|
29
|
+
// Color is a plugin field widget, not a built-in type. Emit a string
|
|
30
|
+
// field wired to the color-picker input; without the plugin installed it
|
|
31
|
+
// degrades to a plain text input (still a valid CSS color string).
|
|
32
|
+
return { ...base, type: 'string', input: 'color', initialValue: token.default };
|
|
33
|
+
case 'range':
|
|
34
|
+
return {
|
|
35
|
+
...base,
|
|
36
|
+
type: 'number',
|
|
37
|
+
min: token.min,
|
|
38
|
+
max: token.max,
|
|
39
|
+
step: token.step,
|
|
40
|
+
initialValue: token.default,
|
|
41
|
+
options: { layout: 'slider', unit: token.unit }
|
|
42
|
+
};
|
|
43
|
+
case 'select':
|
|
44
|
+
return {
|
|
45
|
+
...base,
|
|
46
|
+
type: 'string',
|
|
47
|
+
initialValue: token.default,
|
|
48
|
+
list: token.options.map((o) => ({ title: o.title, value: o.value })),
|
|
49
|
+
options: { layout: 'dropdown' }
|
|
50
|
+
};
|
|
51
|
+
case 'font':
|
|
52
|
+
return {
|
|
53
|
+
...base,
|
|
54
|
+
type: 'string',
|
|
55
|
+
initialValue: token.default,
|
|
56
|
+
list: token.options.map((o) => ({ title: o.title, value: o.value })),
|
|
57
|
+
options: { layout: 'dropdown' }
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve a theme document into a `cssVar → value` map, falling back to each
|
|
64
|
+
* token's default when the document omits or blanks a value. Font values are
|
|
65
|
+
* resolved to their full CSS stack; colors pass through (sanitized in ./css.ts).
|
|
66
|
+
*
|
|
67
|
+
* Accepts `unknown` so callers can pass a concrete generated document type (which
|
|
68
|
+
* lacks a string index signature) without casting; keys are read dynamically.
|
|
69
|
+
*/
|
|
70
|
+
export function deriveThemeVars(values, tokens) {
|
|
71
|
+
const vars = {};
|
|
72
|
+
const doc = {};
|
|
73
|
+
if (values && typeof values === 'object')
|
|
74
|
+
Object.assign(doc, values);
|
|
75
|
+
for (const token of tokens) {
|
|
76
|
+
const raw = doc[token.name];
|
|
77
|
+
switch (token.kind) {
|
|
78
|
+
case 'color': {
|
|
79
|
+
vars[token.cssVar] =
|
|
80
|
+
typeof raw === 'string' && raw.trim() !== '' ? raw.trim() : token.default;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case 'select': {
|
|
84
|
+
const selected = typeof raw === 'string' && raw.trim() !== '' ? raw.trim() : token.default;
|
|
85
|
+
const known = token.options.some((o) => o.value === selected);
|
|
86
|
+
vars[token.cssVar] = known ? selected : token.default;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'range': {
|
|
90
|
+
const n = typeof raw === 'number' && Number.isFinite(raw) ? raw : token.default;
|
|
91
|
+
vars[token.cssVar] = `${n}${token.unit ?? ''}`;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'font': {
|
|
95
|
+
// Map the stored value to its stack; unknown/blank → default option.
|
|
96
|
+
const selected = typeof raw === 'string' && raw.trim() !== '' ? raw.trim() : token.default;
|
|
97
|
+
const option = token.options.find((o) => o.value === selected) ??
|
|
98
|
+
token.options.find((o) => o.value === token.default) ??
|
|
99
|
+
token.options[0];
|
|
100
|
+
if (option)
|
|
101
|
+
vars[token.cssVar] = option.stack;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return vars;
|
|
107
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color schemes — the reusable palette unit.
|
|
3
|
+
*
|
|
4
|
+
* A scheme is seeded with THREE colors (surface, text, primary). Everything else —
|
|
5
|
+
* the on-primary contrast color, muted/faint text, hairline borders, raised
|
|
6
|
+
* surfaces, the hover-ink of the accent — is DERIVED, so every scheme is
|
|
7
|
+
* internally consistent and the editor tunes three dials instead of eight.
|
|
8
|
+
*
|
|
9
|
+
* Each scheme is emitted as a scoped class (`.scheme-<name>`) that remaps the same
|
|
10
|
+
* CSS custom properties the site components already consume (`--paper`, `--ink`,
|
|
11
|
+
* `--accent`, …). The site shell wears the default scheme; any section can wear a
|
|
12
|
+
* different one by adding its class — that's the page-builder primitive.
|
|
13
|
+
*
|
|
14
|
+
* Typography and layout are deliberately NOT part of a scheme: they're global,
|
|
15
|
+
* the same way Shopify keeps type/layout out of its color schemes.
|
|
16
|
+
*/
|
|
17
|
+
import type { ArrayField } from '../types/schemas.js';
|
|
18
|
+
/** The three seed colors an editor sets per scheme. */
|
|
19
|
+
export interface ColorScheme {
|
|
20
|
+
/** Human label; also slugified into the scheme's CSS class. */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Background. */
|
|
23
|
+
surface: string;
|
|
24
|
+
/** Foreground text. */
|
|
25
|
+
text: string;
|
|
26
|
+
/** Accent — links, buttons, highlights. */
|
|
27
|
+
primary: string;
|
|
28
|
+
}
|
|
29
|
+
/** Slugify a scheme name into a stable, safe CSS class fragment. */
|
|
30
|
+
export declare function schemeSlug(name: string): string;
|
|
31
|
+
/** The CSS class that carries a scheme's tokens, e.g. `scheme-dark`. */
|
|
32
|
+
export declare function schemeClass(name: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Pick a readable on-color (near-black or white) for text/icons that sit on top
|
|
35
|
+
* of `background`. Falls back to white when the color can't be parsed.
|
|
36
|
+
*/
|
|
37
|
+
export declare function contrastColor(background: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve a scheme's three seeds into the full CSS-var role map. Seeds are
|
|
40
|
+
* sanitized; anything invalid falls back to a sensible default so a scheme always
|
|
41
|
+
* emits a complete, coherent palette. The derived roles are `color-mix`
|
|
42
|
+
* expressions over `var(--ink)`/`var(--paper)`, so they recompute correctly for
|
|
43
|
+
* whichever scheme is in scope — no per-shade user input, no drift.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveSchemeVars(scheme: ColorScheme): Record<string, string>;
|
|
46
|
+
/**
|
|
47
|
+
* Emit one scoped rule per scheme, prefixed so it only styles the site subtree
|
|
48
|
+
* (never `:root`/admin chrome). Returns `''` when there are no schemes.
|
|
49
|
+
*
|
|
50
|
+
* @param scopeSelector Ancestor selector the scheme classes live under, e.g. `.blog-shell`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function emitSchemeStyles(schemes: ColorScheme[], scopeSelector: string): string;
|
|
53
|
+
/** Read a theme document's `schemes` array, falling back to `defaults` when absent. */
|
|
54
|
+
export declare function readSchemes(values: unknown, defaults: ColorScheme[]): ColorScheme[];
|
|
55
|
+
/**
|
|
56
|
+
* Build the `schemes` array field for the theme singleton — a repeatable object
|
|
57
|
+
* of { name, surface, text, primary }. The first scheme is the site default.
|
|
58
|
+
*/
|
|
59
|
+
export declare function deriveSchemesField(defaults: ColorScheme[], group: string): ArrayField;
|
|
60
|
+
//# sourceMappingURL=schemes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemes.d.ts","sourceRoot":"","sources":["../../src/lib/theme/schemes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC3B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CAChB;AAQD,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AA0BD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB7E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAYtF;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAmBnF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAwBrF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { sanitizeTokenValue } from './css.js';
|
|
2
|
+
const FALLBACK = {
|
|
3
|
+
surface: '#ffffff',
|
|
4
|
+
text: '#15171a',
|
|
5
|
+
primary: '#3eb0ef'
|
|
6
|
+
};
|
|
7
|
+
/** Slugify a scheme name into a stable, safe CSS class fragment. */
|
|
8
|
+
export function schemeSlug(name) {
|
|
9
|
+
const slug = name
|
|
10
|
+
.toLowerCase()
|
|
11
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
12
|
+
.replace(/^-+|-+$/g, '');
|
|
13
|
+
return slug || 'scheme';
|
|
14
|
+
}
|
|
15
|
+
/** The CSS class that carries a scheme's tokens, e.g. `scheme-dark`. */
|
|
16
|
+
export function schemeClass(name) {
|
|
17
|
+
return `scheme-${schemeSlug(name)}`;
|
|
18
|
+
}
|
|
19
|
+
/** Parse a 3/6-digit hex to [r,g,b] in 0–255, or null if not a plain hex. */
|
|
20
|
+
function parseHex(hex) {
|
|
21
|
+
const m = hex.trim().match(/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
|
|
22
|
+
const group = m?.[1];
|
|
23
|
+
if (!group)
|
|
24
|
+
return null;
|
|
25
|
+
const h = group.length === 3
|
|
26
|
+
? group
|
|
27
|
+
.split('')
|
|
28
|
+
.map((c) => c + c)
|
|
29
|
+
.join('')
|
|
30
|
+
: group;
|
|
31
|
+
return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
|
|
32
|
+
}
|
|
33
|
+
/** WCAG relative luminance (0 black → 1 white) of an sRGB triple. */
|
|
34
|
+
function luminance([r, g, b]) {
|
|
35
|
+
const lin = (c) => {
|
|
36
|
+
const s = c / 255;
|
|
37
|
+
return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
|
|
38
|
+
};
|
|
39
|
+
return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pick a readable on-color (near-black or white) for text/icons that sit on top
|
|
43
|
+
* of `background`. Falls back to white when the color can't be parsed.
|
|
44
|
+
*/
|
|
45
|
+
export function contrastColor(background) {
|
|
46
|
+
const rgb = parseHex(background);
|
|
47
|
+
if (!rgb)
|
|
48
|
+
return '#ffffff';
|
|
49
|
+
// Compare contrast against white vs near-black; whichever is higher wins.
|
|
50
|
+
const L = luminance(rgb);
|
|
51
|
+
const contrastWhite = 1.05 / (L + 0.05);
|
|
52
|
+
const contrastBlack = (L + 0.05) / 0.05;
|
|
53
|
+
return contrastWhite >= contrastBlack ? '#ffffff' : '#0b0b0c';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a scheme's three seeds into the full CSS-var role map. Seeds are
|
|
57
|
+
* sanitized; anything invalid falls back to a sensible default so a scheme always
|
|
58
|
+
* emits a complete, coherent palette. The derived roles are `color-mix`
|
|
59
|
+
* expressions over `var(--ink)`/`var(--paper)`, so they recompute correctly for
|
|
60
|
+
* whichever scheme is in scope — no per-shade user input, no drift.
|
|
61
|
+
*/
|
|
62
|
+
export function resolveSchemeVars(scheme) {
|
|
63
|
+
const surface = sanitizeTokenValue(scheme.surface) ?? FALLBACK.surface;
|
|
64
|
+
const text = sanitizeTokenValue(scheme.text) ?? FALLBACK.text;
|
|
65
|
+
const primary = sanitizeTokenValue(scheme.primary) ?? FALLBACK.primary;
|
|
66
|
+
return {
|
|
67
|
+
'--paper': surface,
|
|
68
|
+
'--ink': text,
|
|
69
|
+
'--accent': primary,
|
|
70
|
+
'--accent-contrast': contrastColor(primary),
|
|
71
|
+
// Derived — relative to this scheme's ink/paper.
|
|
72
|
+
'--paper-raised': 'color-mix(in srgb, var(--ink) 2%, var(--paper))',
|
|
73
|
+
'--ink-soft': 'color-mix(in srgb, var(--ink) 58%, var(--paper))',
|
|
74
|
+
'--ink-faint': 'color-mix(in srgb, var(--ink) 38%, var(--paper))',
|
|
75
|
+
'--rule': 'color-mix(in srgb, var(--ink) 12%, transparent)',
|
|
76
|
+
'--rule-soft': 'color-mix(in srgb, var(--ink) 7%, transparent)',
|
|
77
|
+
'--accent-ink': 'color-mix(in srgb, var(--accent) 82%, var(--ink))'
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Emit one scoped rule per scheme, prefixed so it only styles the site subtree
|
|
82
|
+
* (never `:root`/admin chrome). Returns `''` when there are no schemes.
|
|
83
|
+
*
|
|
84
|
+
* @param scopeSelector Ancestor selector the scheme classes live under, e.g. `.blog-shell`.
|
|
85
|
+
*/
|
|
86
|
+
export function emitSchemeStyles(schemes, scopeSelector) {
|
|
87
|
+
const rules = [];
|
|
88
|
+
for (const scheme of schemes) {
|
|
89
|
+
const vars = resolveSchemeVars(scheme);
|
|
90
|
+
const decls = Object.entries(vars)
|
|
91
|
+
.map(([k, v]) => `${k}: ${v};`)
|
|
92
|
+
.join(' ');
|
|
93
|
+
const cls = schemeClass(scheme.name);
|
|
94
|
+
// Match the shell itself when it wears the scheme, and any descendant that does.
|
|
95
|
+
rules.push(`${scopeSelector}.${cls}, ${scopeSelector} .${cls} { ${decls} }`);
|
|
96
|
+
}
|
|
97
|
+
return rules.join('\n');
|
|
98
|
+
}
|
|
99
|
+
/** Read a theme document's `schemes` array, falling back to `defaults` when absent. */
|
|
100
|
+
export function readSchemes(values, defaults) {
|
|
101
|
+
const doc = {};
|
|
102
|
+
if (values && typeof values === 'object')
|
|
103
|
+
Object.assign(doc, values);
|
|
104
|
+
const raw = doc.schemes;
|
|
105
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
106
|
+
return defaults;
|
|
107
|
+
const parsed = [];
|
|
108
|
+
for (const item of raw) {
|
|
109
|
+
if (!item || typeof item !== 'object')
|
|
110
|
+
continue;
|
|
111
|
+
const rec = item;
|
|
112
|
+
const name = typeof rec.name === 'string' && rec.name.trim() !== '' ? rec.name : 'Scheme';
|
|
113
|
+
parsed.push({
|
|
114
|
+
name,
|
|
115
|
+
surface: typeof rec.surface === 'string' ? rec.surface : FALLBACK.surface,
|
|
116
|
+
text: typeof rec.text === 'string' ? rec.text : FALLBACK.text,
|
|
117
|
+
primary: typeof rec.primary === 'string' ? rec.primary : FALLBACK.primary
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return parsed.length > 0 ? parsed : defaults;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build the `schemes` array field for the theme singleton — a repeatable object
|
|
124
|
+
* of { name, surface, text, primary }. The first scheme is the site default.
|
|
125
|
+
*/
|
|
126
|
+
export function deriveSchemesField(defaults, group) {
|
|
127
|
+
return {
|
|
128
|
+
name: 'schemes',
|
|
129
|
+
type: 'array',
|
|
130
|
+
title: 'Color schemes',
|
|
131
|
+
description: 'Reusable palettes. The first is the site default; sections can opt into any other. Set the background, text, and accent — the rest is derived.',
|
|
132
|
+
group,
|
|
133
|
+
initialValue: defaults,
|
|
134
|
+
of: [
|
|
135
|
+
{
|
|
136
|
+
type: 'object',
|
|
137
|
+
name: 'colorScheme',
|
|
138
|
+
title: 'Scheme',
|
|
139
|
+
preview: { select: { title: 'name', subtitle: 'primary' } },
|
|
140
|
+
fields: [
|
|
141
|
+
{ name: 'name', type: 'string', title: 'Name' },
|
|
142
|
+
{ name: 'surface', type: 'string', input: 'color', title: 'Background' },
|
|
143
|
+
{ name: 'text', type: 'string', input: 'color', title: 'Text' },
|
|
144
|
+
{ name: 'primary', type: 'string', input: 'color', title: 'Accent' }
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
};
|
|
149
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme token *types* — the shape of a design-system token.
|
|
3
|
+
*
|
|
4
|
+
* cms-core owns the machinery (turn a token list into a schema + scoped CSS); the
|
|
5
|
+
* consuming app owns the concrete token list, its default colors, and font choices
|
|
6
|
+
* (that's design opinion, not engine concern). See ./derive.ts and ./css.ts for
|
|
7
|
+
* the functions that operate on these, and the app's own `theme/tokens.ts` for a
|
|
8
|
+
* concrete set.
|
|
9
|
+
*/
|
|
10
|
+
/** A curated font choice — the stored `value` resolves to a full CSS `stack`. */
|
|
11
|
+
export interface FontOption {
|
|
12
|
+
title: string;
|
|
13
|
+
value: string;
|
|
14
|
+
stack: string;
|
|
15
|
+
}
|
|
16
|
+
interface BaseToken {
|
|
17
|
+
/** Field name in the theme schema and the token's identity. */
|
|
18
|
+
name: string;
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
/** The CSS custom property this token drives, e.g. `--accent`. */
|
|
22
|
+
cssVar: string;
|
|
23
|
+
/** Field group in the admin form. */
|
|
24
|
+
group: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ColorToken extends BaseToken {
|
|
27
|
+
kind: 'color';
|
|
28
|
+
default: string;
|
|
29
|
+
}
|
|
30
|
+
export interface FontToken extends BaseToken {
|
|
31
|
+
kind: 'font';
|
|
32
|
+
/** The stored `value` of the default option. */
|
|
33
|
+
default: string;
|
|
34
|
+
options: FontOption[];
|
|
35
|
+
}
|
|
36
|
+
/** A numeric slider — widths, radii, sizes. Emitted as `${value}${unit}`. */
|
|
37
|
+
export interface RangeToken extends BaseToken {
|
|
38
|
+
kind: 'range';
|
|
39
|
+
default: number;
|
|
40
|
+
min: number;
|
|
41
|
+
max: number;
|
|
42
|
+
step?: number;
|
|
43
|
+
/** CSS unit appended to the value, e.g. `'px'`, `'rem'`. Defaults to `''`. */
|
|
44
|
+
unit?: string;
|
|
45
|
+
}
|
|
46
|
+
/** A fixed-choice dropdown — weights, styles. The stored value is emitted verbatim. */
|
|
47
|
+
export interface SelectToken extends BaseToken {
|
|
48
|
+
kind: 'select';
|
|
49
|
+
default: string;
|
|
50
|
+
options: Array<{
|
|
51
|
+
title: string;
|
|
52
|
+
value: string;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
export type ThemeToken = ColorToken | FontToken | RangeToken | SelectToken;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/lib/theme/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED,UAAU,SAAS;IAClB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,6EAA6E;AAC7E,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,uFAAuF;AACvF,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme token *types* — the shape of a design-system token.
|
|
3
|
+
*
|
|
4
|
+
* cms-core owns the machinery (turn a token list into a schema + scoped CSS); the
|
|
5
|
+
* consuming app owns the concrete token list, its default colors, and font choices
|
|
6
|
+
* (that's design opinion, not engine concern). See ./derive.ts and ./css.ts for
|
|
7
|
+
* the functions that operate on these, and the app's own `theme/tokens.ts` for a
|
|
8
|
+
* concrete set.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
package/dist/types/auth.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { CMSUser } from './user.js';
|
|
2
2
|
import type { OrganizationRole } from './organization.js';
|
|
3
|
-
import type { Capability } from './capabilities.js';
|
|
4
3
|
export interface SessionAuth {
|
|
5
4
|
type: 'session';
|
|
6
5
|
user: CMSUser;
|
|
@@ -19,11 +18,13 @@ export interface SessionAuth {
|
|
|
19
18
|
*/
|
|
20
19
|
organizationRole: OrganizationRole | string;
|
|
21
20
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* Capability ids granted to this session, resolved by the auth hook (RolesService).
|
|
22
|
+
* `string[]`, not `Capability[]`: a role can grant plugin-declared capabilities that
|
|
23
|
+
* aren't in the built-in `Capability` union. Present for fully-authenticated
|
|
24
|
+
* sessions; when absent, callers fall back to built-in seed values — see
|
|
25
|
+
* `resolveCapabilities`.
|
|
25
26
|
*/
|
|
26
|
-
capabilities?:
|
|
27
|
+
capabilities?: string[];
|
|
27
28
|
organizations?: Array<{
|
|
28
29
|
id: string;
|
|
29
30
|
name: string;
|
|
@@ -57,12 +58,11 @@ export interface ApiKeyAuth {
|
|
|
57
58
|
*/
|
|
58
59
|
permissions: ('read' | 'write')[];
|
|
59
60
|
/**
|
|
60
|
-
* Fine-grained capability allowlist for this API key. When present,
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* matches the Capability union.
|
|
61
|
+
* Fine-grained capability-id allowlist for this API key. When present, overrides
|
|
62
|
+
* the coarse `permissions` mapping — the key can do exactly what's listed and
|
|
63
|
+
* nothing else. `string[]` so keys can be scoped to plugin capabilities too.
|
|
64
64
|
*/
|
|
65
|
-
capabilities?:
|
|
65
|
+
capabilities?: string[];
|
|
66
66
|
organizationId: string;
|
|
67
67
|
environment?: string;
|
|
68
68
|
lastUsedAt?: Date;
|
package/dist/types/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/types/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/types/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,IAAI,CAAC;KAChB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,gBAAgB,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAC5C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAAC;QAChC,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,IAAI,CAAC;KAChB,CAAC;CACF;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CAAC;AAYjE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAO5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAMpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE5C"}
|