@frontmcp/ui 0.6.0 → 0.6.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/README.md +140 -362
- package/bridge/runtime/index.d.ts +2 -1
- package/bridge/runtime/index.d.ts.map +1 -1
- package/bundler/file-cache/component-builder.d.ts +1 -1
- package/bundler/file-cache/component-builder.d.ts.map +1 -1
- package/bundler/file-cache/hash-calculator.d.ts +1 -1
- package/bundler/file-cache/hash-calculator.d.ts.map +1 -1
- package/bundler/file-cache/storage/filesystem.d.ts +1 -1
- package/bundler/file-cache/storage/filesystem.d.ts.map +1 -1
- package/bundler/file-cache/storage/interface.d.ts +1 -1
- package/bundler/file-cache/storage/interface.d.ts.map +1 -1
- package/bundler/file-cache/storage/redis.d.ts +1 -1
- package/bundler/file-cache/storage/redis.d.ts.map +1 -1
- package/bundler/index.js +10 -1057
- package/components/alert.schema.d.ts +6 -6
- package/components/avatar.schema.d.ts +9 -9
- package/components/badge.schema.d.ts +9 -9
- package/components/button.schema.d.ts +9 -9
- package/components/card.schema.d.ts +7 -7
- package/components/form.schema.d.ts +24 -24
- package/components/index.js +128 -198
- package/components/modal.schema.d.ts +8 -8
- package/components/table.schema.d.ts +6 -6
- package/esm/bridge/runtime/index.d.ts +2 -1
- package/esm/bridge/runtime/index.d.ts.map +1 -1
- package/esm/bundler/file-cache/component-builder.d.ts +1 -1
- package/esm/bundler/file-cache/component-builder.d.ts.map +1 -1
- package/esm/bundler/file-cache/hash-calculator.d.ts +1 -1
- package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -1
- package/esm/bundler/file-cache/storage/filesystem.d.ts +1 -1
- package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -1
- package/esm/bundler/file-cache/storage/interface.d.ts +1 -1
- package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -1
- package/esm/bundler/file-cache/storage/redis.d.ts +1 -1
- package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -1
- package/esm/bundler/index.js +3 -1050
- package/esm/components/alert.schema.d.ts +6 -6
- package/esm/components/avatar.schema.d.ts +9 -9
- package/esm/components/badge.schema.d.ts +9 -9
- package/esm/components/button.schema.d.ts +9 -9
- package/esm/components/card.schema.d.ts +7 -7
- package/esm/components/form.schema.d.ts +24 -24
- package/esm/components/index.js +136 -196
- package/esm/components/modal.schema.d.ts +8 -8
- package/esm/components/table.schema.d.ts +6 -6
- package/esm/index.d.ts +23 -39
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4256 -16441
- package/esm/layouts/base.d.ts +2 -2
- package/esm/layouts/base.d.ts.map +1 -1
- package/esm/layouts/index.js +33 -516
- package/esm/package.json +8 -26
- package/esm/pages/index.js +100 -627
- package/esm/react/Alert.d.ts +1 -2
- package/esm/react/Alert.d.ts.map +1 -1
- package/esm/react/Badge.d.ts +1 -2
- package/esm/react/Badge.d.ts.map +1 -1
- package/esm/react/Button.d.ts +1 -2
- package/esm/react/Button.d.ts.map +1 -1
- package/esm/react/Card.d.ts +1 -2
- package/esm/react/Card.d.ts.map +1 -1
- package/esm/react/hooks/context.d.ts +1 -1
- package/esm/react/hooks/context.d.ts.map +1 -1
- package/esm/react/index.d.ts +5 -6
- package/esm/react/index.d.ts.map +1 -1
- package/esm/react/index.js +2074 -322
- package/esm/react/types.d.ts +1 -2
- package/esm/react/types.d.ts.map +1 -1
- package/esm/renderers/index.d.ts +10 -25
- package/esm/renderers/index.d.ts.map +1 -1
- package/esm/renderers/index.js +171 -1617
- package/esm/{runtime/adapters → renderers}/react.adapter.d.ts +2 -2
- package/esm/renderers/react.adapter.d.ts.map +1 -0
- package/esm/renderers/react.renderer.d.ts +3 -3
- package/esm/renderers/react.renderer.d.ts.map +1 -1
- package/esm/universal/index.js +1755 -0
- package/esm/web-components/index.js +232 -287
- package/esm/widgets/index.js +89 -147
- package/index.d.ts +23 -39
- package/index.d.ts.map +1 -1
- package/index.js +6123 -18539
- package/layouts/base.d.ts +2 -2
- package/layouts/base.d.ts.map +1 -1
- package/layouts/index.js +43 -536
- package/package.json +8 -26
- package/pages/index.js +111 -648
- package/react/Alert.d.ts +1 -2
- package/react/Alert.d.ts.map +1 -1
- package/react/Badge.d.ts +1 -2
- package/react/Badge.d.ts.map +1 -1
- package/react/Button.d.ts +1 -2
- package/react/Button.d.ts.map +1 -1
- package/react/Card.d.ts +1 -2
- package/react/Card.d.ts.map +1 -1
- package/react/hooks/context.d.ts +1 -1
- package/react/hooks/context.d.ts.map +1 -1
- package/react/index.d.ts +5 -6
- package/react/index.d.ts.map +1 -1
- package/react/index.js +2065 -335
- package/react/types.d.ts +1 -2
- package/react/types.d.ts.map +1 -1
- package/renderers/index.d.ts +10 -25
- package/renderers/index.d.ts.map +1 -1
- package/renderers/index.js +175 -1641
- package/{runtime/adapters → renderers}/react.adapter.d.ts +2 -2
- package/renderers/react.adapter.d.ts.map +1 -0
- package/renderers/react.renderer.d.ts +3 -3
- package/renderers/react.renderer.d.ts.map +1 -1
- package/universal/index.js +1841 -0
- package/web-components/index.js +224 -289
- package/widgets/index.js +80 -148
- package/adapters/index.d.ts +0 -13
- package/adapters/index.d.ts.map +0 -1
- package/adapters/index.js +0 -462
- package/adapters/platform-meta.d.ts +0 -166
- package/adapters/platform-meta.d.ts.map +0 -1
- package/adapters/response-builder.d.ts +0 -108
- package/adapters/response-builder.d.ts.map +0 -1
- package/adapters/serving-mode.d.ts +0 -107
- package/adapters/serving-mode.d.ts.map +0 -1
- package/base-template/bridge.d.ts +0 -90
- package/base-template/bridge.d.ts.map +0 -1
- package/base-template/default-base-template.d.ts +0 -92
- package/base-template/default-base-template.d.ts.map +0 -1
- package/base-template/index.d.ts +0 -15
- package/base-template/index.d.ts.map +0 -1
- package/base-template/index.js +0 -1398
- package/base-template/polyfills.d.ts +0 -31
- package/base-template/polyfills.d.ts.map +0 -1
- package/base-template/theme-styles.d.ts +0 -74
- package/base-template/theme-styles.d.ts.map +0 -1
- package/build/cdn-resources.d.ts +0 -243
- package/build/cdn-resources.d.ts.map +0 -1
- package/build/index.d.ts +0 -295
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -7096
- package/build/widget-manifest.d.ts +0 -362
- package/build/widget-manifest.d.ts.map +0 -1
- package/dependency/cdn-registry.d.ts +0 -98
- package/dependency/cdn-registry.d.ts.map +0 -1
- package/dependency/import-map.d.ts +0 -186
- package/dependency/import-map.d.ts.map +0 -1
- package/dependency/import-parser.d.ts +0 -82
- package/dependency/import-parser.d.ts.map +0 -1
- package/dependency/index.d.ts +0 -17
- package/dependency/index.d.ts.map +0 -1
- package/dependency/resolver.d.ts +0 -164
- package/dependency/resolver.d.ts.map +0 -1
- package/dependency/schemas.d.ts +0 -486
- package/dependency/schemas.d.ts.map +0 -1
- package/dependency/template-loader.d.ts +0 -204
- package/dependency/template-loader.d.ts.map +0 -1
- package/dependency/template-processor.d.ts +0 -118
- package/dependency/template-processor.d.ts.map +0 -1
- package/dependency/types.d.ts +0 -739
- package/dependency/types.d.ts.map +0 -1
- package/esm/adapters/index.d.ts +0 -13
- package/esm/adapters/index.d.ts.map +0 -1
- package/esm/adapters/index.js +0 -427
- package/esm/adapters/platform-meta.d.ts +0 -166
- package/esm/adapters/platform-meta.d.ts.map +0 -1
- package/esm/adapters/response-builder.d.ts +0 -108
- package/esm/adapters/response-builder.d.ts.map +0 -1
- package/esm/adapters/serving-mode.d.ts +0 -107
- package/esm/adapters/serving-mode.d.ts.map +0 -1
- package/esm/base-template/bridge.d.ts +0 -90
- package/esm/base-template/bridge.d.ts.map +0 -1
- package/esm/base-template/default-base-template.d.ts +0 -92
- package/esm/base-template/default-base-template.d.ts.map +0 -1
- package/esm/base-template/index.d.ts +0 -15
- package/esm/base-template/index.d.ts.map +0 -1
- package/esm/base-template/index.js +0 -1364
- package/esm/base-template/polyfills.d.ts +0 -31
- package/esm/base-template/polyfills.d.ts.map +0 -1
- package/esm/base-template/theme-styles.d.ts +0 -74
- package/esm/base-template/theme-styles.d.ts.map +0 -1
- package/esm/build/cdn-resources.d.ts +0 -243
- package/esm/build/cdn-resources.d.ts.map +0 -1
- package/esm/build/index.d.ts +0 -295
- package/esm/build/index.d.ts.map +0 -1
- package/esm/build/index.js +0 -7021
- package/esm/build/widget-manifest.d.ts +0 -362
- package/esm/build/widget-manifest.d.ts.map +0 -1
- package/esm/dependency/cdn-registry.d.ts +0 -98
- package/esm/dependency/cdn-registry.d.ts.map +0 -1
- package/esm/dependency/import-map.d.ts +0 -186
- package/esm/dependency/import-map.d.ts.map +0 -1
- package/esm/dependency/import-parser.d.ts +0 -82
- package/esm/dependency/import-parser.d.ts.map +0 -1
- package/esm/dependency/index.d.ts +0 -17
- package/esm/dependency/index.d.ts.map +0 -1
- package/esm/dependency/resolver.d.ts +0 -164
- package/esm/dependency/resolver.d.ts.map +0 -1
- package/esm/dependency/schemas.d.ts +0 -486
- package/esm/dependency/schemas.d.ts.map +0 -1
- package/esm/dependency/template-loader.d.ts +0 -204
- package/esm/dependency/template-loader.d.ts.map +0 -1
- package/esm/dependency/template-processor.d.ts +0 -118
- package/esm/dependency/template-processor.d.ts.map +0 -1
- package/esm/dependency/types.d.ts +0 -739
- package/esm/dependency/types.d.ts.map +0 -1
- package/esm/handlebars/expression-extractor.d.ts +0 -147
- package/esm/handlebars/expression-extractor.d.ts.map +0 -1
- package/esm/handlebars/helpers.d.ts +0 -339
- package/esm/handlebars/helpers.d.ts.map +0 -1
- package/esm/handlebars/index.d.ts +0 -195
- package/esm/handlebars/index.d.ts.map +0 -1
- package/esm/handlebars/index.js +0 -587
- package/esm/registry/index.d.ts +0 -46
- package/esm/registry/index.d.ts.map +0 -1
- package/esm/registry/index.js +0 -6422
- package/esm/registry/render-template.d.ts +0 -91
- package/esm/registry/render-template.d.ts.map +0 -1
- package/esm/registry/tool-ui.registry.d.ts +0 -294
- package/esm/registry/tool-ui.registry.d.ts.map +0 -1
- package/esm/registry/uri-utils.d.ts +0 -56
- package/esm/registry/uri-utils.d.ts.map +0 -1
- package/esm/renderers/cache.d.ts +0 -145
- package/esm/renderers/cache.d.ts.map +0 -1
- package/esm/renderers/html.renderer.d.ts +0 -123
- package/esm/renderers/html.renderer.d.ts.map +0 -1
- package/esm/renderers/mdx.renderer.d.ts +0 -120
- package/esm/renderers/mdx.renderer.d.ts.map +0 -1
- package/esm/renderers/registry.d.ts +0 -134
- package/esm/renderers/registry.d.ts.map +0 -1
- package/esm/renderers/types.d.ts +0 -342
- package/esm/renderers/types.d.ts.map +0 -1
- package/esm/renderers/utils/detect.d.ts +0 -107
- package/esm/renderers/utils/detect.d.ts.map +0 -1
- package/esm/renderers/utils/hash.d.ts +0 -40
- package/esm/renderers/utils/hash.d.ts.map +0 -1
- package/esm/renderers/utils/index.d.ts +0 -9
- package/esm/renderers/utils/index.d.ts.map +0 -1
- package/esm/renderers/utils/transpiler.d.ts +0 -89
- package/esm/renderers/utils/transpiler.d.ts.map +0 -1
- package/esm/runtime/adapters/html.adapter.d.ts +0 -59
- package/esm/runtime/adapters/html.adapter.d.ts.map +0 -1
- package/esm/runtime/adapters/index.d.ts +0 -26
- package/esm/runtime/adapters/index.d.ts.map +0 -1
- package/esm/runtime/adapters/mdx.adapter.d.ts +0 -73
- package/esm/runtime/adapters/mdx.adapter.d.ts.map +0 -1
- package/esm/runtime/adapters/react.adapter.d.ts.map +0 -1
- package/esm/runtime/adapters/types.d.ts +0 -95
- package/esm/runtime/adapters/types.d.ts.map +0 -1
- package/esm/runtime/csp.d.ts +0 -48
- package/esm/runtime/csp.d.ts.map +0 -1
- package/esm/runtime/index.d.ts +0 -17
- package/esm/runtime/index.d.ts.map +0 -1
- package/esm/runtime/index.js +0 -5186
- package/esm/runtime/mcp-bridge.d.ts +0 -101
- package/esm/runtime/mcp-bridge.d.ts.map +0 -1
- package/esm/runtime/renderer-runtime.d.ts +0 -133
- package/esm/runtime/renderer-runtime.d.ts.map +0 -1
- package/esm/runtime/sanitizer.d.ts +0 -172
- package/esm/runtime/sanitizer.d.ts.map +0 -1
- package/esm/runtime/types.d.ts +0 -415
- package/esm/runtime/types.d.ts.map +0 -1
- package/esm/runtime/wrapper.d.ts +0 -421
- package/esm/runtime/wrapper.d.ts.map +0 -1
- package/esm/styles/index.d.ts +0 -8
- package/esm/styles/index.d.ts.map +0 -1
- package/esm/styles/index.js +0 -171
- package/esm/styles/variants.d.ts +0 -51
- package/esm/styles/variants.d.ts.map +0 -1
- package/esm/theme/cdn.d.ts +0 -195
- package/esm/theme/cdn.d.ts.map +0 -1
- package/esm/theme/index.d.ts +0 -18
- package/esm/theme/index.d.ts.map +0 -1
- package/esm/theme/index.js +0 -700
- package/esm/theme/platforms.d.ts +0 -107
- package/esm/theme/platforms.d.ts.map +0 -1
- package/esm/theme/presets/github-openai.d.ts +0 -50
- package/esm/theme/presets/github-openai.d.ts.map +0 -1
- package/esm/theme/presets/index.d.ts +0 -11
- package/esm/theme/presets/index.d.ts.map +0 -1
- package/esm/theme/theme.d.ts +0 -396
- package/esm/theme/theme.d.ts.map +0 -1
- package/esm/tool-template/builder.d.ts +0 -213
- package/esm/tool-template/builder.d.ts.map +0 -1
- package/esm/tool-template/index.d.ts +0 -16
- package/esm/tool-template/index.d.ts.map +0 -1
- package/esm/tool-template/index.js +0 -3515
- package/esm/types/index.d.ts +0 -14
- package/esm/types/index.d.ts.map +0 -1
- package/esm/types/index.js +0 -75
- package/esm/types/ui-config.d.ts +0 -639
- package/esm/types/ui-config.d.ts.map +0 -1
- package/esm/types/ui-runtime.d.ts +0 -1007
- package/esm/types/ui-runtime.d.ts.map +0 -1
- package/esm/typings/cache/cache-adapter.d.ts +0 -125
- package/esm/typings/cache/cache-adapter.d.ts.map +0 -1
- package/esm/typings/cache/index.d.ts +0 -10
- package/esm/typings/cache/index.d.ts.map +0 -1
- package/esm/typings/cache/memory-cache.d.ts +0 -92
- package/esm/typings/cache/memory-cache.d.ts.map +0 -1
- package/esm/typings/dts-parser.d.ts +0 -90
- package/esm/typings/dts-parser.d.ts.map +0 -1
- package/esm/typings/index.d.ts +0 -48
- package/esm/typings/index.d.ts.map +0 -1
- package/esm/typings/schemas.d.ts +0 -232
- package/esm/typings/schemas.d.ts.map +0 -1
- package/esm/typings/type-fetcher.d.ts +0 -89
- package/esm/typings/type-fetcher.d.ts.map +0 -1
- package/esm/typings/types.d.ts +0 -320
- package/esm/typings/types.d.ts.map +0 -1
- package/esm/utils/escape-html.d.ts +0 -58
- package/esm/utils/escape-html.d.ts.map +0 -1
- package/esm/utils/index.d.ts +0 -10
- package/esm/utils/index.d.ts.map +0 -1
- package/esm/utils/index.js +0 -40
- package/esm/utils/safe-stringify.d.ts +0 -30
- package/esm/utils/safe-stringify.d.ts.map +0 -1
- package/esm/validation/error-box.d.ts +0 -56
- package/esm/validation/error-box.d.ts.map +0 -1
- package/esm/validation/index.d.ts +0 -13
- package/esm/validation/index.d.ts.map +0 -1
- package/esm/validation/index.js +0 -562
- package/esm/validation/schema-paths.d.ts +0 -118
- package/esm/validation/schema-paths.d.ts.map +0 -1
- package/esm/validation/template-validator.d.ts +0 -143
- package/esm/validation/template-validator.d.ts.map +0 -1
- package/esm/validation/wrapper.d.ts +0 -97
- package/esm/validation/wrapper.d.ts.map +0 -1
- package/handlebars/expression-extractor.d.ts +0 -147
- package/handlebars/expression-extractor.d.ts.map +0 -1
- package/handlebars/helpers.d.ts +0 -339
- package/handlebars/helpers.d.ts.map +0 -1
- package/handlebars/index.d.ts +0 -195
- package/handlebars/index.d.ts.map +0 -1
- package/handlebars/index.js +0 -666
- package/registry/index.d.ts +0 -46
- package/registry/index.d.ts.map +0 -1
- package/registry/index.js +0 -6465
- package/registry/render-template.d.ts +0 -91
- package/registry/render-template.d.ts.map +0 -1
- package/registry/tool-ui.registry.d.ts +0 -294
- package/registry/tool-ui.registry.d.ts.map +0 -1
- package/registry/uri-utils.d.ts +0 -56
- package/registry/uri-utils.d.ts.map +0 -1
- package/renderers/cache.d.ts +0 -145
- package/renderers/cache.d.ts.map +0 -1
- package/renderers/html.renderer.d.ts +0 -123
- package/renderers/html.renderer.d.ts.map +0 -1
- package/renderers/mdx.renderer.d.ts +0 -120
- package/renderers/mdx.renderer.d.ts.map +0 -1
- package/renderers/registry.d.ts +0 -134
- package/renderers/registry.d.ts.map +0 -1
- package/renderers/types.d.ts +0 -342
- package/renderers/types.d.ts.map +0 -1
- package/renderers/utils/detect.d.ts +0 -107
- package/renderers/utils/detect.d.ts.map +0 -1
- package/renderers/utils/hash.d.ts +0 -40
- package/renderers/utils/hash.d.ts.map +0 -1
- package/renderers/utils/index.d.ts +0 -9
- package/renderers/utils/index.d.ts.map +0 -1
- package/renderers/utils/transpiler.d.ts +0 -89
- package/renderers/utils/transpiler.d.ts.map +0 -1
- package/runtime/adapters/html.adapter.d.ts +0 -59
- package/runtime/adapters/html.adapter.d.ts.map +0 -1
- package/runtime/adapters/index.d.ts +0 -26
- package/runtime/adapters/index.d.ts.map +0 -1
- package/runtime/adapters/mdx.adapter.d.ts +0 -73
- package/runtime/adapters/mdx.adapter.d.ts.map +0 -1
- package/runtime/adapters/react.adapter.d.ts.map +0 -1
- package/runtime/adapters/types.d.ts +0 -95
- package/runtime/adapters/types.d.ts.map +0 -1
- package/runtime/csp.d.ts +0 -48
- package/runtime/csp.d.ts.map +0 -1
- package/runtime/index.d.ts +0 -17
- package/runtime/index.d.ts.map +0 -1
- package/runtime/index.js +0 -5264
- package/runtime/mcp-bridge.d.ts +0 -101
- package/runtime/mcp-bridge.d.ts.map +0 -1
- package/runtime/renderer-runtime.d.ts +0 -133
- package/runtime/renderer-runtime.d.ts.map +0 -1
- package/runtime/sanitizer.d.ts +0 -172
- package/runtime/sanitizer.d.ts.map +0 -1
- package/runtime/types.d.ts +0 -415
- package/runtime/types.d.ts.map +0 -1
- package/runtime/wrapper.d.ts +0 -421
- package/runtime/wrapper.d.ts.map +0 -1
- package/styles/index.d.ts +0 -8
- package/styles/index.d.ts.map +0 -1
- package/styles/index.js +0 -222
- package/styles/variants.d.ts +0 -51
- package/styles/variants.d.ts.map +0 -1
- package/theme/cdn.d.ts +0 -195
- package/theme/cdn.d.ts.map +0 -1
- package/theme/index.d.ts +0 -18
- package/theme/index.d.ts.map +0 -1
- package/theme/index.js +0 -757
- package/theme/platforms.d.ts +0 -107
- package/theme/platforms.d.ts.map +0 -1
- package/theme/presets/github-openai.d.ts +0 -50
- package/theme/presets/github-openai.d.ts.map +0 -1
- package/theme/presets/index.d.ts +0 -11
- package/theme/presets/index.d.ts.map +0 -1
- package/theme/theme.d.ts +0 -396
- package/theme/theme.d.ts.map +0 -1
- package/tool-template/builder.d.ts +0 -213
- package/tool-template/builder.d.ts.map +0 -1
- package/tool-template/index.d.ts +0 -16
- package/tool-template/index.d.ts.map +0 -1
- package/tool-template/index.js +0 -3559
- package/types/index.d.ts +0 -14
- package/types/index.d.ts.map +0 -1
- package/types/index.js +0 -108
- package/types/ui-config.d.ts +0 -639
- package/types/ui-config.d.ts.map +0 -1
- package/types/ui-runtime.d.ts +0 -1007
- package/types/ui-runtime.d.ts.map +0 -1
- package/typings/cache/cache-adapter.d.ts +0 -125
- package/typings/cache/cache-adapter.d.ts.map +0 -1
- package/typings/cache/index.d.ts +0 -10
- package/typings/cache/index.d.ts.map +0 -1
- package/typings/cache/memory-cache.d.ts +0 -92
- package/typings/cache/memory-cache.d.ts.map +0 -1
- package/typings/dts-parser.d.ts +0 -90
- package/typings/dts-parser.d.ts.map +0 -1
- package/typings/index.d.ts +0 -48
- package/typings/index.d.ts.map +0 -1
- package/typings/schemas.d.ts +0 -232
- package/typings/schemas.d.ts.map +0 -1
- package/typings/type-fetcher.d.ts +0 -89
- package/typings/type-fetcher.d.ts.map +0 -1
- package/typings/types.d.ts +0 -320
- package/typings/types.d.ts.map +0 -1
- package/utils/escape-html.d.ts +0 -58
- package/utils/escape-html.d.ts.map +0 -1
- package/utils/index.d.ts +0 -10
- package/utils/index.d.ts.map +0 -1
- package/utils/index.js +0 -70
- package/utils/safe-stringify.d.ts +0 -30
- package/utils/safe-stringify.d.ts.map +0 -1
- package/validation/error-box.d.ts +0 -56
- package/validation/error-box.d.ts.map +0 -1
- package/validation/index.d.ts +0 -13
- package/validation/index.d.ts.map +0 -1
- package/validation/index.js +0 -603
- package/validation/schema-paths.d.ts +0 -118
- package/validation/schema-paths.d.ts.map +0 -1
- package/validation/template-validator.d.ts +0 -143
- package/validation/template-validator.d.ts.map +0 -1
- package/validation/wrapper.d.ts +0 -97
- package/validation/wrapper.d.ts.map +0 -1
package/esm/widgets/index.js
CHANGED
|
@@ -1,31 +1,17 @@
|
|
|
1
|
-
// libs/ui/src/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
mode: "artifacts",
|
|
16
|
-
framework: "react"
|
|
17
|
-
// Claude artifacts prefer React
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// libs/ui/src/utils/escape-html.ts
|
|
22
|
-
function escapeHtml(str) {
|
|
23
|
-
if (str === null || str === void 0) {
|
|
24
|
-
return "";
|
|
25
|
-
}
|
|
26
|
-
const s = String(str);
|
|
27
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
28
|
-
}
|
|
1
|
+
// libs/ui/src/layouts/base.ts
|
|
2
|
+
import {
|
|
3
|
+
OPENAI_PLATFORM,
|
|
4
|
+
canUseCdn,
|
|
5
|
+
needsInlineScripts,
|
|
6
|
+
DEFAULT_THEME,
|
|
7
|
+
buildThemeCss,
|
|
8
|
+
mergeThemes,
|
|
9
|
+
buildFontPreconnect,
|
|
10
|
+
buildFontStylesheets,
|
|
11
|
+
buildCdnScripts
|
|
12
|
+
} from "@frontmcp/uipack/theme";
|
|
13
|
+
import { escapeHtml } from "@frontmcp/uipack/utils";
|
|
14
|
+
import { escapeHtml as escapeHtml2 } from "@frontmcp/uipack/utils";
|
|
29
15
|
|
|
30
16
|
// libs/ui/src/components/card.ts
|
|
31
17
|
function getVariantClasses(variant) {
|
|
@@ -48,7 +34,7 @@ function getSizeClasses(size) {
|
|
|
48
34
|
}
|
|
49
35
|
function buildDataAttrs(data) {
|
|
50
36
|
if (!data) return "";
|
|
51
|
-
return Object.entries(data).map(([key, value]) => `data-${key}="${
|
|
37
|
+
return Object.entries(data).map(([key, value]) => `data-${key}="${escapeHtml2(value)}"`).join(" ");
|
|
52
38
|
}
|
|
53
39
|
function card(content, options = {}) {
|
|
54
40
|
const {
|
|
@@ -69,18 +55,18 @@ function card(content, options = {}) {
|
|
|
69
55
|
const clickableClasses = clickable ? "cursor-pointer hover:shadow-md transition-shadow" : "";
|
|
70
56
|
const allClasses = [variantClasses, sizeClasses, clickableClasses, className].filter(Boolean).join(" ");
|
|
71
57
|
const dataAttrs = buildDataAttrs(data);
|
|
72
|
-
const idAttr = id ? `id="${
|
|
58
|
+
const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
|
|
73
59
|
const hasHeader = title || subtitle || headerActions;
|
|
74
60
|
const headerHtml = hasHeader ? `<div class="flex items-start justify-between mb-4">
|
|
75
61
|
<div>
|
|
76
|
-
${title ? `<h3 class="text-lg font-semibold text-text-primary">${
|
|
77
|
-
${subtitle ? `<p class="text-sm text-text-secondary mt-1">${
|
|
62
|
+
${title ? `<h3 class="text-lg font-semibold text-text-primary">${escapeHtml2(title)}</h3>` : ""}
|
|
63
|
+
${subtitle ? `<p class="text-sm text-text-secondary mt-1">${escapeHtml2(subtitle)}</p>` : ""}
|
|
78
64
|
</div>
|
|
79
65
|
${headerActions ? `<div class="flex items-center gap-2">${headerActions}</div>` : ""}
|
|
80
66
|
</div>` : "";
|
|
81
67
|
const footerHtml = footer ? `<div class="mt-4 pt-4 border-t border-divider">${footer}</div>` : "";
|
|
82
68
|
if (href) {
|
|
83
|
-
return `<a href="${
|
|
69
|
+
return `<a href="${escapeHtml2(href)}" class="${allClasses}" ${idAttr} ${dataAttrs}>
|
|
84
70
|
${headerHtml}
|
|
85
71
|
${content}
|
|
86
72
|
${footerHtml}
|
|
@@ -145,7 +131,7 @@ function badge(text, options = {}) {
|
|
|
145
131
|
outline: "border border-current"
|
|
146
132
|
};
|
|
147
133
|
const dotClasses = ["inline-block rounded-full", getSizeClasses2(size, true), dotVariants[variant], className].filter(Boolean).join(" ");
|
|
148
|
-
return `<span class="${dotClasses}" aria-label="${
|
|
134
|
+
return `<span class="${dotClasses}" aria-label="${escapeHtml2(text)}" title="${escapeHtml2(text)}"></span>`;
|
|
149
135
|
}
|
|
150
136
|
const variantClasses = getVariantClasses2(variant);
|
|
151
137
|
const sizeClasses = getSizeClasses2(size, false);
|
|
@@ -168,106 +154,62 @@ function badge(text, options = {}) {
|
|
|
168
154
|
</svg>
|
|
169
155
|
</button>` : "";
|
|
170
156
|
return `<span class="${baseClasses}">
|
|
171
|
-
${iconHtml}${
|
|
157
|
+
${iconHtml}${escapeHtml2(text)}${removeHtml}
|
|
172
158
|
</span>`;
|
|
173
159
|
}
|
|
174
160
|
|
|
175
|
-
// libs/ui/src/
|
|
176
|
-
|
|
177
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
|
178
|
-
</svg>`;
|
|
179
|
-
function validationErrorBox(options) {
|
|
180
|
-
const { componentName, invalidParam } = options;
|
|
181
|
-
return `<div
|
|
182
|
-
class="validation-error flex items-start gap-3 p-4 bg-red-50 border border-red-200 text-red-800 rounded-lg"
|
|
183
|
-
role="alert"
|
|
184
|
-
data-testid="validation-error"
|
|
185
|
-
data-component="${escapeHtml(componentName)}"
|
|
186
|
-
data-param="${escapeHtml(invalidParam)}"
|
|
187
|
-
>
|
|
188
|
-
${errorIcon}
|
|
189
|
-
<div class="min-w-0">
|
|
190
|
-
<p class="font-semibold text-sm">${escapeHtml(componentName)}: Invalid Configuration</p>
|
|
191
|
-
<p class="text-sm opacity-90 mt-0.5">The "${escapeHtml(invalidParam)}" parameter is invalid.</p>
|
|
192
|
-
</div>
|
|
193
|
-
</div>`;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// libs/ui/src/validation/wrapper.ts
|
|
197
|
-
function getFirstInvalidPath(error) {
|
|
198
|
-
const firstError = error.issues[0];
|
|
199
|
-
if (!firstError || firstError.path.length === 0) {
|
|
200
|
-
return "options";
|
|
201
|
-
}
|
|
202
|
-
return firstError.path.map(String).join(".");
|
|
203
|
-
}
|
|
204
|
-
function validateOptions(options, config) {
|
|
205
|
-
const result = config.schema.safeParse(options);
|
|
206
|
-
if (result.success) {
|
|
207
|
-
return { success: true, data: result.data };
|
|
208
|
-
}
|
|
209
|
-
const invalidParam = getFirstInvalidPath(result.error);
|
|
210
|
-
return {
|
|
211
|
-
success: false,
|
|
212
|
-
error: validationErrorBox({
|
|
213
|
-
componentName: config.componentName,
|
|
214
|
-
invalidParam
|
|
215
|
-
})
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// libs/ui/src/validation/schema-paths.ts
|
|
220
|
-
import { z } from "zod";
|
|
161
|
+
// libs/ui/src/components/button.ts
|
|
162
|
+
import { validateOptions } from "@frontmcp/uipack/validation";
|
|
221
163
|
|
|
222
164
|
// libs/ui/src/components/button.schema.ts
|
|
223
|
-
import { z
|
|
224
|
-
var ButtonVariantSchema =
|
|
225
|
-
var ButtonSizeSchema =
|
|
226
|
-
var ButtonOptionsSchema =
|
|
165
|
+
import { z } from "zod";
|
|
166
|
+
var ButtonVariantSchema = z.enum(["primary", "secondary", "outline", "ghost", "danger", "success", "link"]);
|
|
167
|
+
var ButtonSizeSchema = z.enum(["xs", "sm", "md", "lg", "xl"]);
|
|
168
|
+
var ButtonOptionsSchema = z.object({
|
|
227
169
|
/** Button variant */
|
|
228
170
|
variant: ButtonVariantSchema.optional(),
|
|
229
171
|
/** Button size */
|
|
230
172
|
size: ButtonSizeSchema.optional(),
|
|
231
173
|
/** Button type attribute */
|
|
232
|
-
type:
|
|
174
|
+
type: z.enum(["button", "submit", "reset"]).optional(),
|
|
233
175
|
/** Disabled state */
|
|
234
|
-
disabled:
|
|
176
|
+
disabled: z.boolean().optional(),
|
|
235
177
|
/** Loading state */
|
|
236
|
-
loading:
|
|
178
|
+
loading: z.boolean().optional(),
|
|
237
179
|
/** Full width */
|
|
238
|
-
fullWidth:
|
|
180
|
+
fullWidth: z.boolean().optional(),
|
|
239
181
|
/** Icon before text (HTML string) */
|
|
240
|
-
iconBefore:
|
|
182
|
+
iconBefore: z.string().optional(),
|
|
241
183
|
/** Icon after text (HTML string) */
|
|
242
|
-
iconAfter:
|
|
184
|
+
iconAfter: z.string().optional(),
|
|
243
185
|
/** Icon only (no text) */
|
|
244
|
-
iconOnly:
|
|
186
|
+
iconOnly: z.boolean().optional(),
|
|
245
187
|
/** Additional CSS classes */
|
|
246
|
-
className:
|
|
188
|
+
className: z.string().optional(),
|
|
247
189
|
/** Button ID */
|
|
248
|
-
id:
|
|
190
|
+
id: z.string().optional(),
|
|
249
191
|
/** Name attribute */
|
|
250
|
-
name:
|
|
192
|
+
name: z.string().optional(),
|
|
251
193
|
/** Value attribute */
|
|
252
|
-
value:
|
|
194
|
+
value: z.string().optional(),
|
|
253
195
|
/** Click handler (URL for links) */
|
|
254
|
-
href:
|
|
196
|
+
href: z.string().optional(),
|
|
255
197
|
/** Open in new tab */
|
|
256
|
-
target:
|
|
198
|
+
target: z.enum(["_blank", "_self"]).optional(),
|
|
257
199
|
/** Data attributes */
|
|
258
|
-
data:
|
|
200
|
+
data: z.record(z.string(), z.string()).optional(),
|
|
259
201
|
/** ARIA label */
|
|
260
|
-
ariaLabel:
|
|
202
|
+
ariaLabel: z.string().optional()
|
|
261
203
|
}).strict();
|
|
262
|
-
var ButtonGroupOptionsSchema =
|
|
204
|
+
var ButtonGroupOptionsSchema = z.object({
|
|
263
205
|
/** Attach buttons visually */
|
|
264
|
-
attached:
|
|
206
|
+
attached: z.boolean().optional(),
|
|
265
207
|
/** Direction */
|
|
266
|
-
direction:
|
|
208
|
+
direction: z.enum(["horizontal", "vertical"]).optional(),
|
|
267
209
|
/** Gap between buttons */
|
|
268
|
-
gap:
|
|
210
|
+
gap: z.enum(["sm", "md", "lg"]).optional(),
|
|
269
211
|
/** Additional CSS classes */
|
|
270
|
-
className:
|
|
212
|
+
className: z.string().optional()
|
|
271
213
|
}).strict();
|
|
272
214
|
|
|
273
215
|
// libs/ui/src/components/button.ts
|
|
@@ -360,7 +302,7 @@ function button(text, options = {}) {
|
|
|
360
302
|
}
|
|
361
303
|
const variantClasses = getVariantClasses3(variant);
|
|
362
304
|
const sizeClasses = getSizeClasses3(size, iconOnly);
|
|
363
|
-
const safeClassName = className ?
|
|
305
|
+
const safeClassName = className ? escapeHtml2(className) : "";
|
|
364
306
|
const baseClasses = [
|
|
365
307
|
"inline-flex items-center justify-center",
|
|
366
308
|
"font-medium",
|
|
@@ -375,24 +317,24 @@ function button(text, options = {}) {
|
|
|
375
317
|
].filter(Boolean).join(" ");
|
|
376
318
|
const dataAttrs = data ? Object.entries(data).map(([key, val]) => {
|
|
377
319
|
const safeKey = sanitizeDataKey(key);
|
|
378
|
-
return safeKey ? `data-${safeKey}="${
|
|
320
|
+
return safeKey ? `data-${safeKey}="${escapeHtml2(val)}"` : "";
|
|
379
321
|
}).filter(Boolean).join(" ") : "";
|
|
380
|
-
const idAttr = id ? `id="${
|
|
381
|
-
const nameAttr = name ? `name="${
|
|
382
|
-
const valueAttr = value ? `value="${
|
|
322
|
+
const idAttr = id ? `id="${escapeHtml2(id)}"` : "";
|
|
323
|
+
const nameAttr = name ? `name="${escapeHtml2(name)}"` : "";
|
|
324
|
+
const valueAttr = value ? `value="${escapeHtml2(value)}"` : "";
|
|
383
325
|
const disabledAttr = disabled || loading ? "disabled" : "";
|
|
384
|
-
const targetAttr = target ? `target="${
|
|
326
|
+
const targetAttr = target ? `target="${escapeHtml2(target)}"` : "";
|
|
385
327
|
const relAttr = target === "_blank" ? 'rel="noopener noreferrer"' : "";
|
|
386
328
|
const trimmedText = text.trim();
|
|
387
329
|
const effectiveAriaLabel = ariaLabel ?? (iconOnly && trimmedText ? trimmedText : void 0);
|
|
388
|
-
const ariaLabelAttr = effectiveAriaLabel ? `aria-label="${
|
|
330
|
+
const ariaLabelAttr = effectiveAriaLabel ? `aria-label="${escapeHtml2(effectiveAriaLabel)}"` : "";
|
|
389
331
|
const iconBeforeHtml = iconBefore && !loading ? `<span class="${iconOnly ? "" : "mr-2"}">${iconBefore}</span>` : "";
|
|
390
332
|
const iconAfterHtml = iconAfter && !loading ? `<span class="${iconOnly ? "" : "ml-2"}">${iconAfter}</span>` : "";
|
|
391
333
|
const loadingHtml = loading ? loadingSpinner : "";
|
|
392
|
-
const textHtml = iconOnly ? "" :
|
|
334
|
+
const textHtml = iconOnly ? "" : escapeHtml2(text);
|
|
393
335
|
const contentHtml = `${loadingHtml}${iconBeforeHtml}${textHtml}${iconAfterHtml}`;
|
|
394
336
|
if (href && !disabled && !loading && isValidHrefProtocol(href)) {
|
|
395
|
-
return `<a href="${
|
|
337
|
+
return `<a href="${escapeHtml2(
|
|
396
338
|
href
|
|
397
339
|
)}" class="${baseClasses}" ${idAttr} ${dataAttrs} ${ariaLabelAttr} ${targetAttr} ${relAttr}>
|
|
398
340
|
${contentHtml}
|
|
@@ -469,7 +411,7 @@ function resourceWidget(options) {
|
|
|
469
411
|
cardOptions = {}
|
|
470
412
|
} = options;
|
|
471
413
|
const iconHtml = thumbnail ? `<div class="w-16 h-16 rounded-lg overflow-hidden bg-gray-100 flex-shrink-0">
|
|
472
|
-
<img src="${
|
|
414
|
+
<img src="${escapeHtml2(thumbnail)}" alt="${escapeHtml2(title)}" class="w-full h-full object-cover">
|
|
473
415
|
</div>` : `<div class="w-16 h-16 rounded-lg bg-gray-100 flex items-center justify-center flex-shrink-0 text-gray-400">
|
|
474
416
|
${icon || resourceIcons[type]}
|
|
475
417
|
</div>`;
|
|
@@ -504,12 +446,12 @@ function resourceWidget(options) {
|
|
|
504
446
|
const variant = action.variant ? variantMap[action.variant] : "ghost";
|
|
505
447
|
const htmxAttrs = [];
|
|
506
448
|
if (action.htmx) {
|
|
507
|
-
if (action.htmx.get) htmxAttrs.push(`hx-get="${
|
|
508
|
-
if (action.htmx.post) htmxAttrs.push(`hx-post="${
|
|
509
|
-
if (action.htmx.delete) htmxAttrs.push(`hx-delete="${
|
|
510
|
-
if (action.htmx.target) htmxAttrs.push(`hx-target="${
|
|
511
|
-
if (action.htmx.swap) htmxAttrs.push(`hx-swap="${
|
|
512
|
-
if (action.htmx.confirm) htmxAttrs.push(`hx-confirm="${
|
|
449
|
+
if (action.htmx.get) htmxAttrs.push(`hx-get="${escapeHtml2(action.htmx.get)}"`);
|
|
450
|
+
if (action.htmx.post) htmxAttrs.push(`hx-post="${escapeHtml2(action.htmx.post)}"`);
|
|
451
|
+
if (action.htmx.delete) htmxAttrs.push(`hx-delete="${escapeHtml2(action.htmx.delete)}"`);
|
|
452
|
+
if (action.htmx.target) htmxAttrs.push(`hx-target="${escapeHtml2(action.htmx.target)}"`);
|
|
453
|
+
if (action.htmx.swap) htmxAttrs.push(`hx-swap="${escapeHtml2(action.htmx.swap)}"`);
|
|
454
|
+
if (action.htmx.confirm) htmxAttrs.push(`hx-confirm="${escapeHtml2(action.htmx.confirm)}"`);
|
|
513
455
|
}
|
|
514
456
|
return button(action.label, {
|
|
515
457
|
variant,
|
|
@@ -526,12 +468,12 @@ function resourceWidget(options) {
|
|
|
526
468
|
<div class="flex-1 min-w-0">
|
|
527
469
|
<div class="flex items-start justify-between gap-2">
|
|
528
470
|
<div class="min-w-0">
|
|
529
|
-
${url ? `<a href="${
|
|
471
|
+
${url ? `<a href="${escapeHtml2(
|
|
530
472
|
url
|
|
531
|
-
)}" class="font-semibold text-text-primary hover:text-primary truncate block">${
|
|
473
|
+
)}" class="font-semibold text-text-primary hover:text-primary truncate block">${escapeHtml2(
|
|
532
474
|
title
|
|
533
|
-
)}</a>` : `<h3 class="font-semibold text-text-primary truncate">${
|
|
534
|
-
${description ? `<p class="text-sm text-text-secondary mt-0.5 line-clamp-2">${
|
|
475
|
+
)}</a>` : `<h3 class="font-semibold text-text-primary truncate">${escapeHtml2(title)}</h3>`}
|
|
476
|
+
${description ? `<p class="text-sm text-text-secondary mt-0.5 line-clamp-2">${escapeHtml2(description)}</p>` : ""}
|
|
535
477
|
${metaHtml}
|
|
536
478
|
${tagsHtml}
|
|
537
479
|
</div>
|
|
@@ -559,7 +501,7 @@ function resourceList(options) {
|
|
|
559
501
|
showLoadMore = false,
|
|
560
502
|
loadMoreUrl
|
|
561
503
|
} = options;
|
|
562
|
-
const titleHtml = title ? `<h2 class="text-lg font-semibold text-text-primary mb-4">${
|
|
504
|
+
const titleHtml = title ? `<h2 class="text-lg font-semibold text-text-primary mb-4">${escapeHtml2(title)}</h2>` : "";
|
|
563
505
|
if (resources.length === 0) {
|
|
564
506
|
return `<div class="${className}">
|
|
565
507
|
${titleHtml}
|
|
@@ -567,7 +509,7 @@ function resourceList(options) {
|
|
|
567
509
|
<svg class="w-12 h-12 mx-auto mb-4 text-gray-300" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
568
510
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"/>
|
|
569
511
|
</svg>
|
|
570
|
-
<p>${
|
|
512
|
+
<p>${escapeHtml2(emptyMessage)}</p>
|
|
571
513
|
</div>
|
|
572
514
|
</div>`;
|
|
573
515
|
}
|
|
@@ -594,7 +536,7 @@ function resourceItem(options) {
|
|
|
594
536
|
</div>`;
|
|
595
537
|
const statusHtml = status ? badge(status.label, { variant: status.variant, size: "sm" }) : "";
|
|
596
538
|
const metaText = meta?.size ? formatFileSize(meta.size) : "";
|
|
597
|
-
const titleElement = url ? `<a href="${
|
|
539
|
+
const titleElement = url ? `<a href="${escapeHtml2(url)}" class="font-medium text-text-primary hover:text-primary">${escapeHtml2(title)}</a>` : `<span class="font-medium text-text-primary">${escapeHtml2(title)}</span>`;
|
|
598
540
|
return `<div class="flex items-center gap-3 p-3 rounded-lg hover:bg-gray-50 transition-colors">
|
|
599
541
|
${iconHtml}
|
|
600
542
|
<div class="flex-1 min-w-0">
|
|
@@ -602,7 +544,7 @@ function resourceItem(options) {
|
|
|
602
544
|
${titleElement}
|
|
603
545
|
${statusHtml}
|
|
604
546
|
</div>
|
|
605
|
-
${description || metaText ? `<p class="text-sm text-text-secondary truncate">${
|
|
547
|
+
${description || metaText ? `<p class="text-sm text-text-secondary truncate">${escapeHtml2(description || metaText)}</p>` : ""}
|
|
606
548
|
</div>
|
|
607
549
|
</div>`;
|
|
608
550
|
}
|
|
@@ -631,7 +573,7 @@ function codePreview(options) {
|
|
|
631
573
|
</script>` : "";
|
|
632
574
|
const copyButton = showCopy ? `<button
|
|
633
575
|
type="button"
|
|
634
|
-
onclick="copyCode(this, ${
|
|
576
|
+
onclick="copyCode(this, ${escapeHtml2(JSON.stringify(code))})"
|
|
635
577
|
class="p-1.5 rounded hover:bg-gray-700 transition-colors"
|
|
636
578
|
title="Copy code"
|
|
637
579
|
>
|
|
@@ -642,9 +584,9 @@ function codePreview(options) {
|
|
|
642
584
|
return `<div class="code-preview rounded-lg overflow-hidden ${className}">
|
|
643
585
|
${filename || showCopy ? `
|
|
644
586
|
<div class="flex items-center justify-between px-4 py-2 bg-gray-800 border-b border-gray-700">
|
|
645
|
-
${filename ? `<span class="text-sm text-gray-300">${
|
|
587
|
+
${filename ? `<span class="text-sm text-gray-300">${escapeHtml2(filename)}</span>` : "<span></span>"}
|
|
646
588
|
<div class="flex items-center gap-2">
|
|
647
|
-
${language ? `<span class="text-xs text-gray-500">${
|
|
589
|
+
${language ? `<span class="text-xs text-gray-500">${escapeHtml2(language)}</span>` : ""}
|
|
648
590
|
${copyButton}
|
|
649
591
|
</div>
|
|
650
592
|
</div>
|
|
@@ -652,7 +594,7 @@ function codePreview(options) {
|
|
|
652
594
|
<div class="bg-gray-900 p-4 overflow-auto" style="max-height: ${maxHeight}">
|
|
653
595
|
<div class="flex text-sm font-mono">
|
|
654
596
|
${lineNumbersHtml}
|
|
655
|
-
<pre class="flex-1 text-gray-100"><code>${
|
|
597
|
+
<pre class="flex-1 text-gray-100"><code>${escapeHtml2(code)}</code></pre>
|
|
656
598
|
</div>
|
|
657
599
|
</div>
|
|
658
600
|
${copyScript}
|
|
@@ -661,13 +603,13 @@ function codePreview(options) {
|
|
|
661
603
|
function imagePreview(options) {
|
|
662
604
|
const { src, alt, caption, maxHeight = "400px", clickable = true, className = "" } = options;
|
|
663
605
|
const imageHtml = `<img
|
|
664
|
-
src="${
|
|
665
|
-
alt="${
|
|
606
|
+
src="${escapeHtml2(src)}"
|
|
607
|
+
alt="${escapeHtml2(alt)}"
|
|
666
608
|
class="max-w-full h-auto rounded-lg"
|
|
667
609
|
style="max-height: ${maxHeight}"
|
|
668
610
|
>`;
|
|
669
|
-
const captionHtml = caption ? `<p class="text-sm text-text-secondary mt-2 text-center">${
|
|
670
|
-
const content = clickable ? `<a href="${
|
|
611
|
+
const captionHtml = caption ? `<p class="text-sm text-text-secondary mt-2 text-center">${escapeHtml2(caption)}</p>` : "";
|
|
612
|
+
const content = clickable ? `<a href="${escapeHtml2(src)}" target="_blank" rel="noopener" class="block">${imageHtml}</a>` : imageHtml;
|
|
671
613
|
return `<div class="image-preview ${className}">
|
|
672
614
|
${content}
|
|
673
615
|
${captionHtml}
|
|
@@ -701,11 +643,11 @@ function progressBar(options) {
|
|
|
701
643
|
};
|
|
702
644
|
const animatedClass = animated ? "bg-stripes animate-stripes" : "";
|
|
703
645
|
const displayLabel = label || `${Math.round(clampedValue)}%`;
|
|
704
|
-
const insideLabel = labelPosition === "inside" && size === "lg" && clampedValue > 10 ? `<span class="absolute inset-0 flex items-center justify-center text-xs font-medium text-white">${
|
|
646
|
+
const insideLabel = labelPosition === "inside" && size === "lg" && clampedValue > 10 ? `<span class="absolute inset-0 flex items-center justify-center text-xs font-medium text-white">${escapeHtml2(
|
|
705
647
|
displayLabel
|
|
706
648
|
)}</span>` : "";
|
|
707
649
|
const outsideLabel = showLabel && labelPosition === "outside" ? `<div class="flex justify-between mb-1">
|
|
708
|
-
<span class="text-sm font-medium text-text-primary">${label ?
|
|
650
|
+
<span class="text-sm font-medium text-text-primary">${label ? escapeHtml2(label) : "Progress"}</span>
|
|
709
651
|
<span class="text-sm text-text-secondary">${Math.round(clampedValue)}%</span>
|
|
710
652
|
</div>` : "";
|
|
711
653
|
return `<div class="progress-bar ${className}">
|
|
@@ -787,13 +729,13 @@ function stepProgress(options) {
|
|
|
787
729
|
${getStepIcon(step, index)}
|
|
788
730
|
</div>
|
|
789
731
|
<div class="pt-2">
|
|
790
|
-
<div class="${classes.text}">${
|
|
791
|
-
${step.description ? `<p class="text-sm text-text-secondary mt-0.5">${
|
|
732
|
+
<div class="${classes.text}">${escapeHtml2(step.label)}</div>
|
|
733
|
+
${step.description ? `<p class="text-sm text-text-secondary mt-0.5">${escapeHtml2(step.description)}</p>` : ""}
|
|
792
734
|
</div>
|
|
793
735
|
</div>
|
|
794
736
|
${connectorHtml}
|
|
795
737
|
`;
|
|
796
|
-
return step.href && step.status === "completed" ? `<a href="${
|
|
738
|
+
return step.href && step.status === "completed" ? `<a href="${escapeHtml2(step.href)}" class="block hover:opacity-80">${stepContent}</a>` : `<div>${stepContent}</div>`;
|
|
797
739
|
}).join("\n");
|
|
798
740
|
return `<div class="step-progress ${className}">${stepsHtml2}</div>`;
|
|
799
741
|
}
|
|
@@ -807,12 +749,12 @@ function stepProgress(options) {
|
|
|
807
749
|
${getStepIcon(step, index)}
|
|
808
750
|
</div>
|
|
809
751
|
<div class="mt-2 text-center">
|
|
810
|
-
<div class="${classes.text} text-sm">${
|
|
811
|
-
${step.description ? `<p class="text-xs text-text-secondary mt-0.5 max-w-[120px]">${
|
|
752
|
+
<div class="${classes.text} text-sm">${escapeHtml2(step.label)}</div>
|
|
753
|
+
${step.description ? `<p class="text-xs text-text-secondary mt-0.5 max-w-[120px]">${escapeHtml2(step.description)}</p>` : ""}
|
|
812
754
|
</div>
|
|
813
755
|
</div>
|
|
814
756
|
`;
|
|
815
|
-
const clickableStep = step.href && step.status === "completed" ? `<a href="${
|
|
757
|
+
const clickableStep = step.href && step.status === "completed" ? `<a href="${escapeHtml2(step.href)}" class="hover:opacity-80">${stepHtml}</a>` : stepHtml;
|
|
816
758
|
return `${clickableStep}${connectorHtml}`;
|
|
817
759
|
}).join("\n");
|
|
818
760
|
return `<div class="step-progress flex items-start ${className}">${stepsHtml}</div>`;
|
|
@@ -855,7 +797,7 @@ function circularProgress(options) {
|
|
|
855
797
|
style="stroke-dasharray: ${circumference}; stroke-dashoffset: ${offset}; transition: stroke-dashoffset 0.3s ease;"
|
|
856
798
|
/>
|
|
857
799
|
</svg>
|
|
858
|
-
${showLabel ? `<span class="absolute text-sm font-semibold text-text-primary">${
|
|
800
|
+
${showLabel ? `<span class="absolute text-sm font-semibold text-text-primary">${escapeHtml2(displayLabel)}</span>` : ""}
|
|
859
801
|
</div>`;
|
|
860
802
|
}
|
|
861
803
|
function statusIndicator(options) {
|
|
@@ -883,7 +825,7 @@ function statusIndicator(options) {
|
|
|
883
825
|
${pulseHtml}
|
|
884
826
|
<span class="relative ${sizeInfo.dot} ${statusInfo.color} rounded-full"></span>
|
|
885
827
|
</span>
|
|
886
|
-
${displayLabel ? `<span class="${sizeInfo.text} text-text-secondary">${
|
|
828
|
+
${displayLabel ? `<span class="${sizeInfo.text} text-text-secondary">${escapeHtml2(displayLabel)}</span>` : ""}
|
|
887
829
|
</div>`;
|
|
888
830
|
}
|
|
889
831
|
function skeleton(options = {}) {
|
package/index.d.ts
CHANGED
|
@@ -1,56 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @frontmcp/ui
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Provides
|
|
6
|
-
* for building authentication and authorization UIs across multiple LLM platforms.
|
|
4
|
+
* UI component library for FrontMCP applications.
|
|
5
|
+
* Provides HTML components, React components, and rendering utilities.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
* - Multi-framework renderer support (HTML, React, MDX)
|
|
10
|
-
* - Platform-aware theming (OpenAI, Claude, etc.)
|
|
11
|
-
* - Runtime JSX/TSX transpilation with SWC
|
|
12
|
-
* - MCP Bridge integration for cross-platform widgets
|
|
13
|
-
* - Standalone types and adapters for external consumers (AgentLink)
|
|
14
|
-
* - Build-time API for pre-compiling UI templates
|
|
15
|
-
*
|
|
16
|
-
* ## Standalone Usage (without @frontmcp/sdk)
|
|
17
|
-
*
|
|
18
|
-
* For external systems like AgentLink that want to use the UI components
|
|
19
|
-
* without the full SDK:
|
|
7
|
+
* For build tools, bundling, platform adapters, and theming, use @frontmcp/uipack.
|
|
20
8
|
*
|
|
9
|
+
* @example HTML components
|
|
21
10
|
* ```typescript
|
|
22
|
-
*
|
|
23
|
-
* import
|
|
11
|
+
* import { button, card, alert, badge } from '@frontmcp/ui/components';
|
|
12
|
+
* import { baseLayout } from '@frontmcp/ui/layouts';
|
|
13
|
+
* ```
|
|
24
14
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
15
|
+
* @example Theme (from uipack)
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { DEFAULT_THEME, createTheme } from '@frontmcp/uipack/theme';
|
|
18
|
+
* ```
|
|
27
19
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
20
|
+
* @example React components
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { Button, Card, Alert, Badge } from '@frontmcp/ui/react';
|
|
23
|
+
* import { useMcpBridge, useCallTool } from '@frontmcp/ui/react/hooks';
|
|
24
|
+
* ```
|
|
30
25
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
26
|
+
* @example Universal renderer
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { UniversalApp, FrontMCPProvider } from '@frontmcp/ui/universal';
|
|
33
29
|
* ```
|
|
34
30
|
*/
|
|
35
|
-
export * from './types';
|
|
36
|
-
export { safeStringify } from './utils';
|
|
37
|
-
export { type AIPlatformType, type UIMetadata, type BuildUIMetaOptions, type BuildToolDiscoveryMetaOptions, buildUIMeta, buildToolDiscoveryMeta, buildOpenAICSP, type ResolvedServingMode, type ResolveServingModeOptions, resolveServingMode, isPlatformModeSupported, getDefaultServingMode, platformUsesStructuredContent, platformSupportsWidgets, type TextContentBlock, type BuildToolResponseOptions, type ToolResponseContent, buildToolResponseContent, } from './adapters';
|
|
38
|
-
export { type BuildTargetPlatform, type BuildOptions, type BuildResult, type MultiBuildOptions, type MultiBuildResult, type StaticWidgetOptions, buildToolUI, buildToolUIMulti, buildStaticWidget, } from './build';
|
|
39
|
-
export * from './validation';
|
|
40
|
-
export * from './theme';
|
|
41
|
-
export * from './layouts';
|
|
42
31
|
export * from './components';
|
|
32
|
+
export * from './layouts';
|
|
43
33
|
export * from './pages';
|
|
44
34
|
export * from './widgets';
|
|
45
|
-
export { type ProviderType, type DisplayMode, type ThemeMode, type HostContext, type MCPBridge, type MCPBridgeExtended, type WrapToolUIOptions, type OpenAIRuntime, type OpenAIUserAgent, type SafeAreaInsets, MCP_BRIDGE_RUNTIME, getMCPBridgeScript, isMCPBridgeSupported, DEFAULT_CDN_DOMAINS, DEFAULT_CSP_DIRECTIVES, RESTRICTIVE_CSP_DIRECTIVES, buildCSPDirectives, buildCSPMetaTag, validateCSPDomain, sanitizeCSPDomains, type WrapToolUIFullOptions, wrapToolUI, wrapToolUIMinimal, createTemplateHelpers, getToolUIMimeType, type SanitizerFn, type SanitizeOptions, REDACTION_TOKENS, PII_PATTERNS, sanitizeInput, createSanitizer, detectPII, isEmail, isPhone, isCreditCard, isSSN, isIPv4, detectPIIType, redactPIIFromText, } from './runtime';
|
|
46
|
-
export * from './tool-template';
|
|
47
|
-
export * from './base-template';
|
|
48
|
-
export * from './renderers';
|
|
49
35
|
export { type PlatformAdapter, type AdapterCapabilities, type BridgeConfig, FrontMcpBridge, createBridge, AdapterRegistry, defaultRegistry, registerAdapter, generateBridgeIIFE, generatePlatformBundle, UNIVERSAL_BRIDGE_SCRIPT, BRIDGE_SCRIPT_TAGS, } from './bridge';
|
|
50
36
|
export { registerAllComponents, registerFmcpButton, registerFmcpCard, registerFmcpAlert, registerFmcpBadge, registerFmcpInput, registerFmcpSelect, FmcpButton, FmcpCard, FmcpAlert, FmcpBadge, FmcpInput, FmcpSelect, FmcpElement, } from './web-components';
|
|
51
|
-
export
|
|
52
|
-
export
|
|
53
|
-
export {
|
|
54
|
-
export { type ContentType, type UniversalContent, type FrontMCPState, type FrontMCPStore, type RenderContext, type ClientRenderer, type UniversalAppProps, type FrontMCPProviderProps, type CDNType, type UniversalRuntimeOptions, type UniversalRuntimeResult, createFrontMCPStore, getGlobalStore, setGlobalStore, resetGlobalStore, useFrontMCPStore, useToolOutput as useUniversalToolOutput, useToolInput as useUniversalToolInput, useContent, useToolName, useLoadingState, initializeStoreFromWindow, FrontMCPProvider, ComponentsProvider, UniversalProvider, useFrontMCPContext, useComponents, withFrontMCP, RendererRegistry, rendererRegistry, detectRenderer, renderContent, createContent, htmlRenderer, safeHtmlRenderer, markdownRenderer, reactRenderer, mdxRenderer, UniversalApp, UniversalAppWithProvider, LoadingSpinner, ErrorDisplay, EmptyState, buildUniversalRuntime, buildMinimalRuntime, getCachedRuntime, clearRuntimeCache, getRuntimeCacheStats, buildAppScript, buildDataInjectionCode, buildComponentCode, RUNTIME_PLACEHOLDERS, type CachedRuntimeOptions, type CachedRuntimeResult, DEFAULT_FRONTMCP_STATE, UNIVERSAL_CDN, detectContentType, } from './universal';
|
|
55
|
-
export { type TypeFetchResult, type TypeFetchError, type TypeFetchErrorCode, type TypeFetchBatchRequest, type TypeFetchBatchResult, type TypeCacheEntry, type TypeCacheStats, type DtsImport, type DtsParseResult, type TypeFetcherOptions, type PackageResolution, DEFAULT_TYPE_FETCHER_OPTIONS, TYPE_CACHE_PREFIX, DEFAULT_TYPE_CACHE_TTL, type TypeCacheAdapter, type TypeCacheOptions, DEFAULT_CACHE_OPTIONS as DEFAULT_TYPE_CACHE_OPTIONS, MemoryTypeCache, globalTypeCache, parseDtsImports, isRelativeImport, getPackageFromSpecifier, getSubpathFromSpecifier, parseImportStatement, combineDtsContents, TypeFetcher, createTypeFetcher, } from './typings';
|
|
37
|
+
export * from './react';
|
|
38
|
+
export * from './render';
|
|
39
|
+
export { ReactRenderer, reactRenderer, buildHydrationScript, ReactRendererAdapter, createReactAdapter, loadReactAdapter, } from './renderers';
|
|
56
40
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,cAAc,cAAc,CAAC;AAK7B,cAAc,WAAW,CAAC;AAK1B,cAAc,SAAS,CAAC;AAKxB,cAAc,WAAW,CAAC;AAK1B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAEjB,cAAc,EACd,YAAY,EAEZ,eAAe,EACf,eAAe,EACf,eAAe,EAEf,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAKlB,OAAO,EAEL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAElB,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EAEV,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAK1B,cAAc,SAAS,CAAC;AAKxB,cAAc,UAAU,CAAC;AAKzB,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|