@frontmcp/ui 0.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/LICENSE +201 -0
- package/README.md +438 -0
- package/package.json +147 -0
- package/src/adapters/index.d.ts +10 -0
- package/src/adapters/index.js +18 -0
- package/src/adapters/index.js.map +1 -0
- package/src/adapters/platform-meta.d.ts +165 -0
- package/src/adapters/platform-meta.js +310 -0
- package/src/adapters/platform-meta.js.map +1 -0
- package/src/base-template/bridge.d.ts +89 -0
- package/src/base-template/bridge.js +452 -0
- package/src/base-template/bridge.js.map +1 -0
- package/src/base-template/default-base-template.d.ts +91 -0
- package/src/base-template/default-base-template.js +435 -0
- package/src/base-template/default-base-template.js.map +1 -0
- package/src/base-template/index.d.ts +14 -0
- package/src/base-template/index.js +30 -0
- package/src/base-template/index.js.map +1 -0
- package/src/base-template/polyfills.d.ts +30 -0
- package/src/base-template/polyfills.js +190 -0
- package/src/base-template/polyfills.js.map +1 -0
- package/src/base-template/theme-styles.d.ts +73 -0
- package/src/base-template/theme-styles.js +95 -0
- package/src/base-template/theme-styles.js.map +1 -0
- package/src/bridge/adapters/base-adapter.d.ts +103 -0
- package/src/bridge/adapters/base-adapter.js +314 -0
- package/src/bridge/adapters/base-adapter.js.map +1 -0
- package/src/bridge/adapters/claude.adapter.d.ts +66 -0
- package/src/bridge/adapters/claude.adapter.js +145 -0
- package/src/bridge/adapters/claude.adapter.js.map +1 -0
- package/src/bridge/adapters/ext-apps.adapter.d.ts +142 -0
- package/src/bridge/adapters/ext-apps.adapter.js +416 -0
- package/src/bridge/adapters/ext-apps.adapter.js.map +1 -0
- package/src/bridge/adapters/gemini.adapter.d.ts +63 -0
- package/src/bridge/adapters/gemini.adapter.js +160 -0
- package/src/bridge/adapters/gemini.adapter.js.map +1 -0
- package/src/bridge/adapters/generic.adapter.d.ts +55 -0
- package/src/bridge/adapters/generic.adapter.js +108 -0
- package/src/bridge/adapters/generic.adapter.js.map +1 -0
- package/src/bridge/adapters/index.d.ts +25 -0
- package/src/bridge/adapters/index.js +65 -0
- package/src/bridge/adapters/index.js.map +1 -0
- package/src/bridge/adapters/openai.adapter.d.ts +64 -0
- package/src/bridge/adapters/openai.adapter.js +194 -0
- package/src/bridge/adapters/openai.adapter.js.map +1 -0
- package/src/bridge/core/adapter-registry.d.ts +121 -0
- package/src/bridge/core/adapter-registry.js +271 -0
- package/src/bridge/core/adapter-registry.js.map +1 -0
- package/src/bridge/core/bridge-factory.d.ts +198 -0
- package/src/bridge/core/bridge-factory.js +428 -0
- package/src/bridge/core/bridge-factory.js.map +1 -0
- package/src/bridge/core/index.d.ts +9 -0
- package/src/bridge/core/index.js +22 -0
- package/src/bridge/core/index.js.map +1 -0
- package/src/bridge/index.d.ts +61 -0
- package/src/bridge/index.js +94 -0
- package/src/bridge/index.js.map +1 -0
- package/src/bridge/runtime/iife-generator.d.ts +61 -0
- package/src/bridge/runtime/iife-generator.js +940 -0
- package/src/bridge/runtime/iife-generator.js.map +1 -0
- package/src/bridge/runtime/index.d.ts +8 -0
- package/src/bridge/runtime/index.js +16 -0
- package/src/bridge/runtime/index.js.map +1 -0
- package/src/bridge/types.d.ts +385 -0
- package/src/bridge/types.js +11 -0
- package/src/bridge/types.js.map +1 -0
- package/src/build/cdn-resources.d.ts +140 -0
- package/src/build/cdn-resources.js +314 -0
- package/src/build/cdn-resources.js.map +1 -0
- package/src/build/index.d.ts +294 -0
- package/src/build/index.js +325 -0
- package/src/build/index.js.map +1 -0
- package/src/build/widget-manifest.d.ts +212 -0
- package/src/build/widget-manifest.js +652 -0
- package/src/build/widget-manifest.js.map +1 -0
- package/src/bundler/bundler.d.ts +110 -0
- package/src/bundler/bundler.js +432 -0
- package/src/bundler/bundler.js.map +1 -0
- package/src/bundler/cache.d.ts +172 -0
- package/src/bundler/cache.js +250 -0
- package/src/bundler/cache.js.map +1 -0
- package/src/bundler/index.d.ts +41 -0
- package/src/bundler/index.js +73 -0
- package/src/bundler/index.js.map +1 -0
- package/src/bundler/sandbox/enclave-adapter.d.ts +120 -0
- package/src/bundler/sandbox/enclave-adapter.js +339 -0
- package/src/bundler/sandbox/enclave-adapter.js.map +1 -0
- package/src/bundler/sandbox/executor.d.ts +13 -0
- package/src/bundler/sandbox/executor.js +22 -0
- package/src/bundler/sandbox/executor.js.map +1 -0
- package/src/bundler/sandbox/policy.d.ts +61 -0
- package/src/bundler/sandbox/policy.js +238 -0
- package/src/bundler/sandbox/policy.js.map +1 -0
- package/src/bundler/types.d.ts +347 -0
- package/src/bundler/types.js +132 -0
- package/src/bundler/types.js.map +1 -0
- package/src/components/alert.d.ts +71 -0
- package/src/components/alert.js +189 -0
- package/src/components/alert.js.map +1 -0
- package/src/components/alert.schema.d.ts +114 -0
- package/src/components/alert.schema.js +105 -0
- package/src/components/alert.schema.js.map +1 -0
- package/src/components/avatar.d.ts +76 -0
- package/src/components/avatar.js +176 -0
- package/src/components/avatar.js.map +1 -0
- package/src/components/avatar.schema.d.ts +169 -0
- package/src/components/avatar.schema.js +103 -0
- package/src/components/avatar.schema.js.map +1 -0
- package/src/components/badge.d.ts +70 -0
- package/src/components/badge.js +149 -0
- package/src/components/badge.js.map +1 -0
- package/src/components/badge.schema.d.ts +109 -0
- package/src/components/badge.schema.js +96 -0
- package/src/components/badge.schema.js.map +1 -0
- package/src/components/button.d.ts +111 -0
- package/src/components/button.js +336 -0
- package/src/components/button.js.map +1 -0
- package/src/components/button.schema.d.ts +148 -0
- package/src/components/button.schema.js +121 -0
- package/src/components/button.schema.js.map +1 -0
- package/src/components/card.d.ts +60 -0
- package/src/components/card.js +117 -0
- package/src/components/card.js.map +1 -0
- package/src/components/card.schema.d.ts +113 -0
- package/src/components/card.schema.js +98 -0
- package/src/components/card.schema.js.map +1 -0
- package/src/components/form.d.ts +239 -0
- package/src/components/form.js +420 -0
- package/src/components/form.js.map +1 -0
- package/src/components/form.schema.d.ts +441 -0
- package/src/components/form.schema.js +406 -0
- package/src/components/form.schema.js.map +1 -0
- package/src/components/index.d.ts +29 -0
- package/src/components/index.js +98 -0
- package/src/components/index.js.map +1 -0
- package/src/components/list.d.ts +127 -0
- package/src/components/list.js +279 -0
- package/src/components/list.js.map +1 -0
- package/src/components/list.schema.d.ts +134 -0
- package/src/components/list.schema.js +168 -0
- package/src/components/list.schema.js.map +1 -0
- package/src/components/modal.d.ts +111 -0
- package/src/components/modal.js +260 -0
- package/src/components/modal.js.map +1 -0
- package/src/components/modal.schema.d.ts +186 -0
- package/src/components/modal.schema.js +167 -0
- package/src/components/modal.schema.js.map +1 -0
- package/src/components/table.d.ts +105 -0
- package/src/components/table.js +283 -0
- package/src/components/table.js.map +1 -0
- package/src/components/table.schema.d.ts +159 -0
- package/src/components/table.schema.js +173 -0
- package/src/components/table.schema.js.map +1 -0
- package/src/handlebars/helpers.d.ts +348 -0
- package/src/handlebars/helpers.js +605 -0
- package/src/handlebars/helpers.js.map +1 -0
- package/src/handlebars/index.d.ts +193 -0
- package/src/handlebars/index.js +350 -0
- package/src/handlebars/index.js.map +1 -0
- package/src/index.d.ts +50 -0
- package/src/index.js +192 -0
- package/src/index.js.map +1 -0
- package/src/layouts/base.d.ts +88 -0
- package/src/layouts/base.js +227 -0
- package/src/layouts/base.js.map +1 -0
- package/src/layouts/index.d.ts +7 -0
- package/src/layouts/index.js +25 -0
- package/src/layouts/index.js.map +1 -0
- package/src/layouts/presets.d.ts +133 -0
- package/src/layouts/presets.js +277 -0
- package/src/layouts/presets.js.map +1 -0
- package/src/pages/consent.d.ts +116 -0
- package/src/pages/consent.js +218 -0
- package/src/pages/consent.js.map +1 -0
- package/src/pages/error.d.ts +100 -0
- package/src/pages/error.js +263 -0
- package/src/pages/error.js.map +1 -0
- package/src/pages/index.d.ts +8 -0
- package/src/pages/index.js +27 -0
- package/src/pages/index.js.map +1 -0
- package/src/react/Alert.d.ts +101 -0
- package/src/react/Alert.js +51 -0
- package/src/react/Alert.js.map +1 -0
- package/src/react/Badge.d.ts +100 -0
- package/src/react/Badge.js +55 -0
- package/src/react/Badge.js.map +1 -0
- package/src/react/Button.d.ts +108 -0
- package/src/react/Button.js +52 -0
- package/src/react/Button.js.map +1 -0
- package/src/react/Card.d.ts +103 -0
- package/src/react/Card.js +55 -0
- package/src/react/Card.js.map +1 -0
- package/src/react/hooks/context.d.ts +178 -0
- package/src/react/hooks/context.js +287 -0
- package/src/react/hooks/context.js.map +1 -0
- package/src/react/hooks/index.d.ts +41 -0
- package/src/react/hooks/index.js +61 -0
- package/src/react/hooks/index.js.map +1 -0
- package/src/react/hooks/tools.d.ts +283 -0
- package/src/react/hooks/tools.js +465 -0
- package/src/react/hooks/tools.js.map +1 -0
- package/src/react/index.d.ts +80 -0
- package/src/react/index.js +113 -0
- package/src/react/index.js.map +1 -0
- package/src/react/types.d.ts +105 -0
- package/src/react/types.js +12 -0
- package/src/react/types.js.map +1 -0
- package/src/react/utils.d.ts +42 -0
- package/src/react/utils.js +99 -0
- package/src/react/utils.js.map +1 -0
- package/src/registry/index.d.ts +45 -0
- package/src/registry/index.js +67 -0
- package/src/registry/index.js.map +1 -0
- package/src/registry/render-template.d.ts +86 -0
- package/src/registry/render-template.js +239 -0
- package/src/registry/render-template.js.map +1 -0
- package/src/registry/tool-ui.registry.d.ts +260 -0
- package/src/registry/tool-ui.registry.js +438 -0
- package/src/registry/tool-ui.registry.js.map +1 -0
- package/src/registry/uri-utils.d.ts +55 -0
- package/src/registry/uri-utils.js +97 -0
- package/src/registry/uri-utils.js.map +1 -0
- package/src/render/index.d.ts +7 -0
- package/src/render/index.js +14 -0
- package/src/render/index.js.map +1 -0
- package/src/render/prerender.d.ts +56 -0
- package/src/render/prerender.js +98 -0
- package/src/render/prerender.js.map +1 -0
- package/src/renderers/cache.d.ts +144 -0
- package/src/renderers/cache.js +240 -0
- package/src/renderers/cache.js.map +1 -0
- package/src/renderers/html.renderer.d.ts +122 -0
- package/src/renderers/html.renderer.js +204 -0
- package/src/renderers/html.renderer.js.map +1 -0
- package/src/renderers/index.d.ts +35 -0
- package/src/renderers/index.js +70 -0
- package/src/renderers/index.js.map +1 -0
- package/src/renderers/mdx.renderer.d.ts +119 -0
- package/src/renderers/mdx.renderer.js +305 -0
- package/src/renderers/mdx.renderer.js.map +1 -0
- package/src/renderers/react.renderer.d.ts +95 -0
- package/src/renderers/react.renderer.js +260 -0
- package/src/renderers/react.renderer.js.map +1 -0
- package/src/renderers/registry.d.ts +133 -0
- package/src/renderers/registry.js +232 -0
- package/src/renderers/registry.js.map +1 -0
- package/src/renderers/types.d.ts +341 -0
- package/src/renderers/types.js +9 -0
- package/src/renderers/types.js.map +1 -0
- package/src/renderers/utils/detect.d.ts +106 -0
- package/src/renderers/utils/detect.js +267 -0
- package/src/renderers/utils/detect.js.map +1 -0
- package/src/renderers/utils/hash.d.ts +39 -0
- package/src/renderers/utils/hash.js +75 -0
- package/src/renderers/utils/hash.js.map +1 -0
- package/src/renderers/utils/index.d.ts +8 -0
- package/src/renderers/utils/index.js +28 -0
- package/src/renderers/utils/index.js.map +1 -0
- package/src/renderers/utils/transpiler.d.ts +88 -0
- package/src/renderers/utils/transpiler.js +215 -0
- package/src/renderers/utils/transpiler.js.map +1 -0
- package/src/runtime/adapters/html.adapter.d.ts +58 -0
- package/src/runtime/adapters/html.adapter.js +131 -0
- package/src/runtime/adapters/html.adapter.js.map +1 -0
- package/src/runtime/adapters/index.d.ts +25 -0
- package/src/runtime/adapters/index.js +54 -0
- package/src/runtime/adapters/index.js.map +1 -0
- package/src/runtime/adapters/mdx.adapter.d.ts +72 -0
- package/src/runtime/adapters/mdx.adapter.js +241 -0
- package/src/runtime/adapters/mdx.adapter.js.map +1 -0
- package/src/runtime/adapters/react.adapter.d.ts +69 -0
- package/src/runtime/adapters/react.adapter.js +245 -0
- package/src/runtime/adapters/react.adapter.js.map +1 -0
- package/src/runtime/adapters/types.d.ts +94 -0
- package/src/runtime/adapters/types.js +11 -0
- package/src/runtime/adapters/types.js.map +1 -0
- package/src/runtime/csp.d.ts +37 -0
- package/src/runtime/csp.js +140 -0
- package/src/runtime/csp.js.map +1 -0
- package/src/runtime/index.d.ts +16 -0
- package/src/runtime/index.js +72 -0
- package/src/runtime/index.js.map +1 -0
- package/src/runtime/mcp-bridge.d.ts +100 -0
- package/src/runtime/mcp-bridge.js +581 -0
- package/src/runtime/mcp-bridge.js.map +1 -0
- package/src/runtime/renderer-runtime.d.ts +132 -0
- package/src/runtime/renderer-runtime.js +389 -0
- package/src/runtime/renderer-runtime.js.map +1 -0
- package/src/runtime/sanitizer.d.ts +171 -0
- package/src/runtime/sanitizer.js +318 -0
- package/src/runtime/sanitizer.js.map +1 -0
- package/src/runtime/types.d.ts +414 -0
- package/src/runtime/types.js +12 -0
- package/src/runtime/types.js.map +1 -0
- package/src/runtime/wrapper.d.ts +375 -0
- package/src/runtime/wrapper.js +1793 -0
- package/src/runtime/wrapper.js.map +1 -0
- package/src/styles/index.d.ts +7 -0
- package/src/styles/index.js +11 -0
- package/src/styles/index.js.map +1 -0
- package/src/styles/variants.d.ts +50 -0
- package/src/styles/variants.js +175 -0
- package/src/styles/variants.js.map +1 -0
- package/src/theme/cdn.d.ts +194 -0
- package/src/theme/cdn.js +375 -0
- package/src/theme/cdn.js.map +1 -0
- package/src/theme/index.d.ts +17 -0
- package/src/theme/index.js +57 -0
- package/src/theme/index.js.map +1 -0
- package/src/theme/platforms.d.ts +106 -0
- package/src/theme/platforms.js +161 -0
- package/src/theme/platforms.js.map +1 -0
- package/src/theme/presets/github-openai.d.ts +49 -0
- package/src/theme/presets/github-openai.js +189 -0
- package/src/theme/presets/github-openai.js.map +1 -0
- package/src/theme/presets/index.d.ts +10 -0
- package/src/theme/presets/index.js +17 -0
- package/src/theme/presets/index.js.map +1 -0
- package/src/theme/theme.d.ts +395 -0
- package/src/theme/theme.js +332 -0
- package/src/theme/theme.js.map +1 -0
- package/src/tool-template/builder.d.ts +212 -0
- package/src/tool-template/builder.js +397 -0
- package/src/tool-template/builder.js.map +1 -0
- package/src/tool-template/index.d.ts +15 -0
- package/src/tool-template/index.js +38 -0
- package/src/tool-template/index.js.map +1 -0
- package/src/types/index.d.ts +13 -0
- package/src/types/index.js +26 -0
- package/src/types/index.js.map +1 -0
- package/src/types/ui-config.d.ts +357 -0
- package/src/types/ui-config.js +12 -0
- package/src/types/ui-config.js.map +1 -0
- package/src/types/ui-runtime.d.ts +965 -0
- package/src/types/ui-runtime.js +117 -0
- package/src/types/ui-runtime.js.map +1 -0
- package/src/validation/error-box.d.ts +55 -0
- package/src/validation/error-box.js +75 -0
- package/src/validation/error-box.js.map +1 -0
- package/src/validation/index.d.ts +12 -0
- package/src/validation/index.js +21 -0
- package/src/validation/index.js.map +1 -0
- package/src/validation/wrapper.d.ts +96 -0
- package/src/validation/wrapper.js +117 -0
- package/src/validation/wrapper.js.map +1 -0
- package/src/web-components/core/attribute-parser.d.ts +85 -0
- package/src/web-components/core/attribute-parser.js +189 -0
- package/src/web-components/core/attribute-parser.js.map +1 -0
- package/src/web-components/core/base-element.d.ts +197 -0
- package/src/web-components/core/base-element.js +289 -0
- package/src/web-components/core/base-element.js.map +1 -0
- package/src/web-components/core/index.d.ts +8 -0
- package/src/web-components/core/index.js +18 -0
- package/src/web-components/core/index.js.map +1 -0
- package/src/web-components/elements/fmcp-alert.d.ts +45 -0
- package/src/web-components/elements/fmcp-alert.js +93 -0
- package/src/web-components/elements/fmcp-alert.js.map +1 -0
- package/src/web-components/elements/fmcp-badge.d.ts +46 -0
- package/src/web-components/elements/fmcp-badge.js +99 -0
- package/src/web-components/elements/fmcp-badge.js.map +1 -0
- package/src/web-components/elements/fmcp-button.d.ts +124 -0
- package/src/web-components/elements/fmcp-button.js +233 -0
- package/src/web-components/elements/fmcp-button.js.map +1 -0
- package/src/web-components/elements/fmcp-card.d.ts +52 -0
- package/src/web-components/elements/fmcp-card.js +115 -0
- package/src/web-components/elements/fmcp-card.js.map +1 -0
- package/src/web-components/elements/fmcp-input.d.ts +95 -0
- package/src/web-components/elements/fmcp-input.js +248 -0
- package/src/web-components/elements/fmcp-input.js.map +1 -0
- package/src/web-components/elements/fmcp-select.d.ts +99 -0
- package/src/web-components/elements/fmcp-select.js +243 -0
- package/src/web-components/elements/fmcp-select.js.map +1 -0
- package/src/web-components/elements/index.d.ts +12 -0
- package/src/web-components/elements/index.js +34 -0
- package/src/web-components/elements/index.js.map +1 -0
- package/src/web-components/index.d.ts +49 -0
- package/src/web-components/index.js +75 -0
- package/src/web-components/index.js.map +1 -0
- package/src/web-components/register.d.ts +56 -0
- package/src/web-components/register.js +80 -0
- package/src/web-components/register.js.map +1 -0
- package/src/web-components/types.d.ts +121 -0
- package/src/web-components/types.js +25 -0
- package/src/web-components/types.js.map +1 -0
- package/src/widgets/index.d.ts +7 -0
- package/src/widgets/index.js +24 -0
- package/src/widgets/index.js.map +1 -0
- package/src/widgets/progress.d.ts +132 -0
- package/src/widgets/progress.js +303 -0
- package/src/widgets/progress.js.map +1 -0
- package/src/widgets/resource.d.ts +162 -0
- package/src/widgets/resource.js +340 -0
- package/src/widgets/resource.js.map +1 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file theme.ts
|
|
3
|
+
* @description Theme Configuration System for FrontMCP UI.
|
|
4
|
+
*
|
|
5
|
+
* Provides a comprehensive theming system with:
|
|
6
|
+
* - Color palettes with semantic naming
|
|
7
|
+
* - Typography configuration
|
|
8
|
+
* - Spacing and sizing
|
|
9
|
+
* - Component-specific tokens
|
|
10
|
+
* - Customizable CDN URLs for fonts, icons, and scripts
|
|
11
|
+
* - Dark mode support
|
|
12
|
+
* - Tailwind CSS v4 @theme integration
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { createTheme, DEFAULT_THEME } from '@frontmcp/ui';
|
|
17
|
+
*
|
|
18
|
+
* // Use the default GitHub/OpenAI theme
|
|
19
|
+
* const theme = DEFAULT_THEME;
|
|
20
|
+
*
|
|
21
|
+
* // Or create a custom theme
|
|
22
|
+
* const customTheme = createTheme({
|
|
23
|
+
* colors: {
|
|
24
|
+
* semantic: { primary: '#0969da' },
|
|
25
|
+
* },
|
|
26
|
+
* cdn: {
|
|
27
|
+
* fonts: {
|
|
28
|
+
* preconnect: ['https://fonts.googleapis.com'],
|
|
29
|
+
* stylesheets: ['https://fonts.googleapis.com/css2?family=Roboto&display=swap'],
|
|
30
|
+
* },
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @module @frontmcp/ui/theme
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Deep partial type - makes all properties and nested properties optional
|
|
39
|
+
*/
|
|
40
|
+
export type DeepPartial<T> = T extends object ? {
|
|
41
|
+
[P in keyof T]?: DeepPartial<T[P]>;
|
|
42
|
+
} : T;
|
|
43
|
+
/**
|
|
44
|
+
* Semantic color scale (50-950)
|
|
45
|
+
*/
|
|
46
|
+
export interface ColorScale {
|
|
47
|
+
50?: string;
|
|
48
|
+
100?: string;
|
|
49
|
+
200?: string;
|
|
50
|
+
300?: string;
|
|
51
|
+
400?: string;
|
|
52
|
+
500?: string;
|
|
53
|
+
600?: string;
|
|
54
|
+
700?: string;
|
|
55
|
+
800?: string;
|
|
56
|
+
900?: string;
|
|
57
|
+
950?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Semantic color tokens
|
|
61
|
+
*/
|
|
62
|
+
export interface SemanticColors {
|
|
63
|
+
/** Primary brand color */
|
|
64
|
+
primary: string | ColorScale;
|
|
65
|
+
/** Secondary brand color */
|
|
66
|
+
secondary?: string | ColorScale;
|
|
67
|
+
/** Accent/highlight color */
|
|
68
|
+
accent?: string | ColorScale;
|
|
69
|
+
/** Neutral/gray tones */
|
|
70
|
+
neutral?: string | ColorScale;
|
|
71
|
+
/** Success state */
|
|
72
|
+
success?: string;
|
|
73
|
+
/** Warning state */
|
|
74
|
+
warning?: string;
|
|
75
|
+
/** Error/danger state */
|
|
76
|
+
danger?: string;
|
|
77
|
+
/** Info state */
|
|
78
|
+
info?: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Surface colors for backgrounds
|
|
82
|
+
*/
|
|
83
|
+
export interface SurfaceColors {
|
|
84
|
+
/** Page background */
|
|
85
|
+
background?: string;
|
|
86
|
+
/** Card/panel background */
|
|
87
|
+
surface?: string;
|
|
88
|
+
/** Elevated surface (modal, dropdown) */
|
|
89
|
+
elevated?: string;
|
|
90
|
+
/** Overlay/backdrop */
|
|
91
|
+
overlay?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Text colors
|
|
95
|
+
*/
|
|
96
|
+
export interface TextColors {
|
|
97
|
+
/** Primary text */
|
|
98
|
+
primary?: string;
|
|
99
|
+
/** Secondary/muted text */
|
|
100
|
+
secondary?: string;
|
|
101
|
+
/** Disabled text */
|
|
102
|
+
disabled?: string;
|
|
103
|
+
/** Inverse text (on dark backgrounds) */
|
|
104
|
+
inverse?: string;
|
|
105
|
+
/** Link text */
|
|
106
|
+
link?: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Border colors
|
|
110
|
+
*/
|
|
111
|
+
export interface BorderColors {
|
|
112
|
+
/** Default border */
|
|
113
|
+
default?: string;
|
|
114
|
+
/** Hover border */
|
|
115
|
+
hover?: string;
|
|
116
|
+
/** Focus border */
|
|
117
|
+
focus?: string;
|
|
118
|
+
/** Divider lines */
|
|
119
|
+
divider?: string;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Complete color configuration
|
|
123
|
+
*/
|
|
124
|
+
export interface ThemeColors {
|
|
125
|
+
/** Semantic colors */
|
|
126
|
+
semantic: SemanticColors;
|
|
127
|
+
/** Surface/background colors */
|
|
128
|
+
surface?: SurfaceColors;
|
|
129
|
+
/** Text colors */
|
|
130
|
+
text?: TextColors;
|
|
131
|
+
/** Border colors */
|
|
132
|
+
border?: BorderColors;
|
|
133
|
+
/** Additional custom colors */
|
|
134
|
+
custom?: Record<string, string>;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Font family configuration
|
|
138
|
+
*/
|
|
139
|
+
export interface FontFamilies {
|
|
140
|
+
/** Sans-serif (default) */
|
|
141
|
+
sans?: string;
|
|
142
|
+
/** Serif */
|
|
143
|
+
serif?: string;
|
|
144
|
+
/** Monospace */
|
|
145
|
+
mono?: string;
|
|
146
|
+
/** Display/heading */
|
|
147
|
+
display?: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Font size configuration
|
|
151
|
+
*/
|
|
152
|
+
export interface FontSizes {
|
|
153
|
+
xs?: string;
|
|
154
|
+
sm?: string;
|
|
155
|
+
base?: string;
|
|
156
|
+
lg?: string;
|
|
157
|
+
xl?: string;
|
|
158
|
+
'2xl'?: string;
|
|
159
|
+
'3xl'?: string;
|
|
160
|
+
'4xl'?: string;
|
|
161
|
+
'5xl'?: string;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Font weight configuration
|
|
165
|
+
*/
|
|
166
|
+
export interface FontWeights {
|
|
167
|
+
normal?: string;
|
|
168
|
+
medium?: string;
|
|
169
|
+
semibold?: string;
|
|
170
|
+
bold?: string;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Complete typography configuration
|
|
174
|
+
*/
|
|
175
|
+
export interface ThemeTypography {
|
|
176
|
+
families?: FontFamilies;
|
|
177
|
+
sizes?: FontSizes;
|
|
178
|
+
weights?: FontWeights;
|
|
179
|
+
lineHeight?: {
|
|
180
|
+
tight?: string;
|
|
181
|
+
normal?: string;
|
|
182
|
+
relaxed?: string;
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Spacing scale
|
|
187
|
+
*/
|
|
188
|
+
export interface ThemeSpacing {
|
|
189
|
+
px?: string;
|
|
190
|
+
0?: string;
|
|
191
|
+
1?: string;
|
|
192
|
+
2?: string;
|
|
193
|
+
3?: string;
|
|
194
|
+
4?: string;
|
|
195
|
+
5?: string;
|
|
196
|
+
6?: string;
|
|
197
|
+
8?: string;
|
|
198
|
+
10?: string;
|
|
199
|
+
12?: string;
|
|
200
|
+
16?: string;
|
|
201
|
+
20?: string;
|
|
202
|
+
24?: string;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Border radius
|
|
206
|
+
*/
|
|
207
|
+
export interface ThemeRadius {
|
|
208
|
+
none?: string;
|
|
209
|
+
sm?: string;
|
|
210
|
+
md?: string;
|
|
211
|
+
lg?: string;
|
|
212
|
+
xl?: string;
|
|
213
|
+
'2xl'?: string;
|
|
214
|
+
full?: string;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Shadow configuration
|
|
218
|
+
*/
|
|
219
|
+
export interface ThemeShadows {
|
|
220
|
+
sm?: string;
|
|
221
|
+
md?: string;
|
|
222
|
+
lg?: string;
|
|
223
|
+
xl?: string;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Button component tokens
|
|
227
|
+
*/
|
|
228
|
+
export interface ButtonTokens {
|
|
229
|
+
radius?: string;
|
|
230
|
+
paddingX?: string;
|
|
231
|
+
paddingY?: string;
|
|
232
|
+
fontSize?: string;
|
|
233
|
+
fontWeight?: string;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Card component tokens
|
|
237
|
+
*/
|
|
238
|
+
export interface CardTokens {
|
|
239
|
+
radius?: string;
|
|
240
|
+
padding?: string;
|
|
241
|
+
shadow?: string;
|
|
242
|
+
borderWidth?: string;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Input component tokens
|
|
246
|
+
*/
|
|
247
|
+
export interface InputTokens {
|
|
248
|
+
radius?: string;
|
|
249
|
+
paddingX?: string;
|
|
250
|
+
paddingY?: string;
|
|
251
|
+
borderWidth?: string;
|
|
252
|
+
focusRingWidth?: string;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Component-specific tokens
|
|
256
|
+
*/
|
|
257
|
+
export interface ComponentTokens {
|
|
258
|
+
button?: ButtonTokens;
|
|
259
|
+
card?: CardTokens;
|
|
260
|
+
input?: InputTokens;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Script resource with optional integrity hash
|
|
264
|
+
*/
|
|
265
|
+
export interface CdnScriptResource {
|
|
266
|
+
/** URL to the script */
|
|
267
|
+
url: string;
|
|
268
|
+
/** Subresource integrity hash */
|
|
269
|
+
integrity?: string;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Font CDN configuration
|
|
273
|
+
*/
|
|
274
|
+
export interface ThemeCdnFonts {
|
|
275
|
+
/** Preconnect URLs for font providers */
|
|
276
|
+
preconnect?: string[];
|
|
277
|
+
/** Font stylesheet URLs */
|
|
278
|
+
stylesheets?: string[];
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Icon CDN configuration
|
|
282
|
+
*/
|
|
283
|
+
export interface ThemeCdnIcons {
|
|
284
|
+
/** Icon library script */
|
|
285
|
+
script?: CdnScriptResource;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Scripts CDN configuration
|
|
289
|
+
*/
|
|
290
|
+
export interface ThemeCdnScripts {
|
|
291
|
+
/** Tailwind CSS Browser CDN URL */
|
|
292
|
+
tailwind?: string;
|
|
293
|
+
/** HTMX script resource */
|
|
294
|
+
htmx?: CdnScriptResource;
|
|
295
|
+
/** Alpine.js script resource */
|
|
296
|
+
alpine?: CdnScriptResource;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Complete CDN configuration for theme
|
|
300
|
+
*
|
|
301
|
+
* Allows customizing all external resource URLs used by the theme.
|
|
302
|
+
* Useful for:
|
|
303
|
+
* - Using private CDN mirrors
|
|
304
|
+
* - Self-hosting resources
|
|
305
|
+
* - Compliance with CSP policies
|
|
306
|
+
* - Using different font families
|
|
307
|
+
*/
|
|
308
|
+
export interface ThemeCdnConfig {
|
|
309
|
+
/** Font configuration */
|
|
310
|
+
fonts?: ThemeCdnFonts;
|
|
311
|
+
/** Icon library configuration */
|
|
312
|
+
icons?: ThemeCdnIcons;
|
|
313
|
+
/** Script CDN configuration */
|
|
314
|
+
scripts?: ThemeCdnScripts;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Complete theme configuration
|
|
318
|
+
*/
|
|
319
|
+
export interface ThemeConfig {
|
|
320
|
+
/** Theme name/identifier */
|
|
321
|
+
name?: string;
|
|
322
|
+
/** Color configuration */
|
|
323
|
+
colors: ThemeColors;
|
|
324
|
+
/** Typography configuration */
|
|
325
|
+
typography?: ThemeTypography;
|
|
326
|
+
/** Spacing scale */
|
|
327
|
+
spacing?: ThemeSpacing;
|
|
328
|
+
/** Border radius */
|
|
329
|
+
radius?: ThemeRadius;
|
|
330
|
+
/** Shadows */
|
|
331
|
+
shadows?: ThemeShadows;
|
|
332
|
+
/** Component-specific tokens */
|
|
333
|
+
components?: ComponentTokens;
|
|
334
|
+
/** CDN resource configuration */
|
|
335
|
+
cdn?: ThemeCdnConfig;
|
|
336
|
+
/** Dark mode variant */
|
|
337
|
+
dark?: Partial<ThemeConfig>;
|
|
338
|
+
/** Additional CSS custom properties */
|
|
339
|
+
customVars?: Record<string, string>;
|
|
340
|
+
/** Additional CSS (outside @theme) */
|
|
341
|
+
customCss?: string;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Default FrontMCP theme - GitHub/OpenAI inspired gray-black aesthetic
|
|
345
|
+
*
|
|
346
|
+
* Re-exported from presets for convenience. The default theme features:
|
|
347
|
+
* - Monochromatic gray-black color palette
|
|
348
|
+
* - System UI font stack
|
|
349
|
+
* - Smaller border radii (GitHub style)
|
|
350
|
+
* - Subtle shadows with gray tones
|
|
351
|
+
*
|
|
352
|
+
* @see ./presets/github-openai.ts for full theme definition
|
|
353
|
+
*/
|
|
354
|
+
export declare const GITHUB_OPENAI_THEME: ThemeConfig;
|
|
355
|
+
export declare const DEFAULT_THEME: ThemeConfig;
|
|
356
|
+
/**
|
|
357
|
+
* Deep merge two theme configurations
|
|
358
|
+
*
|
|
359
|
+
* @remarks
|
|
360
|
+
* Dark variant handling:
|
|
361
|
+
* - When override.dark is provided, it's merged on top of base.dark (if present) or base
|
|
362
|
+
* - The resulting dark variant never contains a nested .dark property
|
|
363
|
+
* - This prevents infinite recursion and ensures clean dark theme composition
|
|
364
|
+
*/
|
|
365
|
+
export declare function mergeThemes(base: ThemeConfig, override: DeepPartial<ThemeConfig>): ThemeConfig;
|
|
366
|
+
/**
|
|
367
|
+
* Create a theme by extending the default theme
|
|
368
|
+
*/
|
|
369
|
+
export declare function createTheme(overrides: Partial<ThemeConfig>): ThemeConfig;
|
|
370
|
+
/**
|
|
371
|
+
* Build Tailwind @theme CSS from theme configuration
|
|
372
|
+
*/
|
|
373
|
+
export declare function buildThemeCss(theme: ThemeConfig): string;
|
|
374
|
+
/**
|
|
375
|
+
* Build complete style block with @theme and custom CSS
|
|
376
|
+
*
|
|
377
|
+
* @remarks
|
|
378
|
+
* **Security/Trust Model:**
|
|
379
|
+
* The `theme.customCss` property is injected directly into a `<style>` tag without
|
|
380
|
+
* sanitization. This is intentional - CSS customization requires full CSS syntax support.
|
|
381
|
+
*
|
|
382
|
+
* **Trust assumptions:**
|
|
383
|
+
* - Theme configurations should only come from trusted sources (developer-defined themes)
|
|
384
|
+
* - Never pass user-provided input directly to `customCss`
|
|
385
|
+
* - If you need user-customizable styles, validate/sanitize them before including in a theme
|
|
386
|
+
*
|
|
387
|
+
* **Why no sanitization:**
|
|
388
|
+
* - CSS sanitization is complex and often breaks legitimate styles
|
|
389
|
+
* - The theme system is designed for developer use, not end-user customization
|
|
390
|
+
* - Developers creating themes are trusted to provide safe CSS
|
|
391
|
+
*
|
|
392
|
+
* @param theme - Theme configuration with optional customCss
|
|
393
|
+
* @returns HTML style block with Tailwind @theme directive
|
|
394
|
+
*/
|
|
395
|
+
export declare function buildStyleBlock(theme: ThemeConfig): string;
|