@frontmcp/ui 0.12.1 → 1.0.0-beta.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 +279 -72
- package/bridge/adapters/claude.adapter.d.ts.map +1 -1
- package/bridge/adapters/gemini.adapter.d.ts.map +1 -1
- package/bridge/index.js +2 -36
- package/components/Alert/Alert.d.ts +11 -0
- package/components/Alert/Alert.d.ts.map +1 -0
- package/components/Alert/index.d.ts +4 -0
- package/components/Alert/index.d.ts.map +1 -0
- package/components/Alert/index.js +61 -0
- package/components/Avatar/Avatar.d.ts +10 -0
- package/components/Avatar/Avatar.d.ts.map +1 -0
- package/components/Avatar/index.d.ts +4 -0
- package/components/Avatar/index.d.ts.map +1 -0
- package/components/Avatar/index.js +43 -0
- package/components/Badge/Badge.d.ts +13 -0
- package/components/Badge/Badge.d.ts.map +1 -0
- package/components/Badge/index.d.ts +4 -0
- package/components/Badge/index.d.ts.map +1 -0
- package/{render → components/Badge}/index.js +54 -42
- package/components/Button/Button.d.ts +16 -0
- package/components/Button/Button.d.ts.map +1 -0
- package/components/Button/index.d.ts +4 -0
- package/components/Button/index.d.ts.map +1 -0
- package/components/Button/index.js +91 -0
- package/components/Card/Card.d.ts +25 -0
- package/components/Card/Card.d.ts.map +1 -0
- package/components/Card/index.d.ts +4 -0
- package/components/Card/index.d.ts.map +1 -0
- package/components/Card/index.js +110 -0
- package/components/List/List.d.ts +15 -0
- package/components/List/List.d.ts.map +1 -0
- package/components/List/index.d.ts +4 -0
- package/components/List/index.d.ts.map +1 -0
- package/components/List/index.js +58 -0
- package/components/Loader/Loader.d.ts +28 -0
- package/components/Loader/Loader.d.ts.map +1 -0
- package/components/Loader/LoaderContext.d.ts +20 -0
- package/components/Loader/LoaderContext.d.ts.map +1 -0
- package/components/Loader/index.d.ts +6 -0
- package/components/Loader/index.d.ts.map +1 -0
- package/components/Loader/index.js +174 -0
- package/components/Modal/Modal.d.ts +22 -0
- package/components/Modal/Modal.d.ts.map +1 -0
- package/components/Modal/index.d.ts +4 -0
- package/components/Modal/index.d.ts.map +1 -0
- package/components/Modal/index.js +80 -0
- package/components/Select/Select.d.ts +21 -0
- package/components/Select/Select.d.ts.map +1 -0
- package/components/Select/index.d.ts +4 -0
- package/components/Select/index.d.ts.map +1 -0
- package/components/Select/index.js +78 -0
- package/components/Table/Table.d.ts +15 -0
- package/components/Table/Table.d.ts.map +1 -0
- package/components/Table/index.d.ts +4 -0
- package/components/Table/index.d.ts.map +1 -0
- package/components/Table/index.js +70 -0
- package/components/TextField/TextField.d.ts +19 -0
- package/components/TextField/TextField.d.ts.map +1 -0
- package/components/TextField/index.d.ts +4 -0
- package/components/TextField/index.d.ts.map +1 -0
- package/components/TextField/index.js +77 -0
- package/components/index.d.ts +22 -28
- package/components/index.d.ts.map +1 -1
- package/components/index.js +523 -2521
- package/esm/bridge/index.mjs +2 -6
- package/esm/components/Alert/index.mjs +28 -0
- package/esm/components/Avatar/index.mjs +10 -0
- package/esm/components/Badge/index.mjs +56 -0
- package/esm/components/Button/index.mjs +58 -0
- package/esm/components/Card/index.mjs +77 -0
- package/esm/components/List/index.mjs +25 -0
- package/esm/components/Loader/index.mjs +141 -0
- package/esm/components/Modal/index.mjs +47 -0
- package/esm/components/Select/index.mjs +45 -0
- package/esm/components/Table/index.mjs +37 -0
- package/esm/components/TextField/index.mjs +44 -0
- package/esm/components/index.mjs +513 -2415
- package/esm/index.mjs +62 -4652
- package/esm/package.json +372 -16
- package/esm/react/index.mjs +2 -285
- package/esm/renderer/charts/index.mjs +336 -0
- package/esm/renderer/common/index.mjs +135 -0
- package/esm/renderer/csv/index.mjs +193 -0
- package/esm/renderer/flow/index.mjs +259 -0
- package/esm/renderer/html/index.mjs +99 -0
- package/esm/renderer/image/index.mjs +125 -0
- package/esm/renderer/index.mjs +2173 -0
- package/esm/renderer/maps/index.mjs +217 -0
- package/esm/renderer/math/index.mjs +229 -0
- package/esm/renderer/mdx/index.mjs +261 -0
- package/esm/renderer/media/index.mjs +235 -0
- package/esm/renderer/mermaid/index.mjs +220 -0
- package/esm/renderer/pdf/index.mjs +229 -0
- package/esm/renderer/react/index.mjs +230 -0
- package/esm/runtime/index.mjs +194 -0
- package/esm/theme/index.mjs +93 -0
- package/index.d.ts +10 -18
- package/index.d.ts.map +1 -1
- package/index.js +63 -4806
- package/package.json +372 -16
- package/react/index.d.ts +8 -54
- package/react/index.d.ts.map +1 -1
- package/react/index.js +2 -295
- package/renderer/auto-detect.d.ts +39 -0
- package/renderer/auto-detect.d.ts.map +1 -0
- package/renderer/charts/index.d.ts +22 -0
- package/renderer/charts/index.d.ts.map +1 -0
- package/renderer/charts/index.js +367 -0
- package/renderer/common/index.d.ts +5 -0
- package/renderer/common/index.d.ts.map +1 -0
- package/renderer/common/index.js +158 -0
- package/renderer/common/inject-stylesheet.d.ts +9 -0
- package/renderer/common/inject-stylesheet.d.ts.map +1 -0
- package/renderer/common/lazy-import.d.ts +85 -0
- package/renderer/common/lazy-import.d.ts.map +1 -0
- package/renderer/common/use-lazy-module.d.ts +13 -0
- package/renderer/common/use-lazy-module.d.ts.map +1 -0
- package/renderer/common/use-renderer-theme.d.ts +35 -0
- package/renderer/common/use-renderer-theme.d.ts.map +1 -0
- package/renderer/csv/index.d.ts +12 -0
- package/renderer/csv/index.d.ts.map +1 -0
- package/renderer/csv/index.js +224 -0
- package/renderer/flow/index.d.ts +40 -0
- package/renderer/flow/index.d.ts.map +1 -0
- package/renderer/flow/index.js +290 -0
- package/renderer/html/index.d.ts +12 -0
- package/renderer/html/index.d.ts.map +1 -0
- package/renderer/html/index.js +130 -0
- package/renderer/image/index.d.ts +11 -0
- package/renderer/image/index.d.ts.map +1 -0
- package/renderer/image/index.js +156 -0
- package/renderer/index.d.ts +32 -0
- package/renderer/index.d.ts.map +1 -0
- package/renderer/index.js +2206 -0
- package/renderer/maps/index.d.ts +27 -0
- package/renderer/maps/index.d.ts.map +1 -0
- package/renderer/maps/index.js +248 -0
- package/renderer/math/index.d.ts +11 -0
- package/renderer/math/index.d.ts.map +1 -0
- package/renderer/math/index.js +260 -0
- package/renderer/mdx/index.d.ts +10 -0
- package/renderer/mdx/index.d.ts.map +1 -0
- package/renderer/mdx/index.js +292 -0
- package/renderer/media/index.d.ts +20 -0
- package/renderer/media/index.d.ts.map +1 -0
- package/renderer/media/index.js +266 -0
- package/renderer/mermaid/index.d.ts +11 -0
- package/renderer/mermaid/index.d.ts.map +1 -0
- package/renderer/mermaid/index.js +251 -0
- package/renderer/pdf/index.d.ts +10 -0
- package/renderer/pdf/index.d.ts.map +1 -0
- package/renderer/pdf/index.js +260 -0
- package/renderer/react/index.d.ts +45 -0
- package/renderer/react/index.d.ts.map +1 -0
- package/renderer/react/index.js +261 -0
- package/renderer/types.d.ts +24 -0
- package/renderer/types.d.ts.map +1 -0
- package/runtime/babel-runtime.d.ts +70 -0
- package/runtime/babel-runtime.d.ts.map +1 -0
- package/runtime/content-detector.d.ts +43 -0
- package/runtime/content-detector.d.ts.map +1 -0
- package/runtime/index.d.ts +10 -0
- package/runtime/index.d.ts.map +1 -0
- package/runtime/index.js +217 -0
- package/theme/FrontMcpThemeProvider.d.ts +4 -0
- package/theme/FrontMcpThemeProvider.d.ts.map +1 -0
- package/theme/create-theme.d.ts +9 -0
- package/theme/create-theme.d.ts.map +1 -0
- package/theme/index.d.ts +5 -0
- package/theme/index.d.ts.map +1 -0
- package/theme/index.js +126 -0
- package/theme/types.d.ts +28 -0
- package/theme/types.d.ts.map +1 -0
- package/theme/use-theme.d.ts +3 -0
- package/theme/use-theme.d.ts.map +1 -0
- package/bundler/browser-components.d.ts +0 -42
- package/bundler/browser-components.d.ts.map +0 -1
- package/bundler/bundler.d.ts +0 -282
- package/bundler/bundler.d.ts.map +0 -1
- package/bundler/index.d.ts +0 -43
- package/bundler/index.d.ts.map +0 -1
- package/bundler/index.js +0 -3168
- package/bundler/types.d.ts +0 -883
- package/bundler/types.d.ts.map +0 -1
- package/components/alert.d.ts +0 -83
- package/components/alert.d.ts.map +0 -1
- package/components/alert.schema.d.ts +0 -98
- package/components/alert.schema.d.ts.map +0 -1
- package/components/avatar.d.ts +0 -77
- package/components/avatar.d.ts.map +0 -1
- package/components/avatar.schema.d.ts +0 -170
- package/components/avatar.schema.d.ts.map +0 -1
- package/components/badge.d.ts +0 -78
- package/components/badge.d.ts.map +0 -1
- package/components/badge.schema.d.ts +0 -91
- package/components/badge.schema.d.ts.map +0 -1
- package/components/button.d.ts +0 -100
- package/components/button.d.ts.map +0 -1
- package/components/button.schema.d.ts +0 -120
- package/components/button.schema.d.ts.map +0 -1
- package/components/card.d.ts +0 -76
- package/components/card.d.ts.map +0 -1
- package/components/card.schema.d.ts +0 -93
- package/components/card.schema.d.ts.map +0 -1
- package/components/form.d.ts +0 -227
- package/components/form.d.ts.map +0 -1
- package/components/form.schema.d.ts +0 -365
- package/components/form.schema.d.ts.map +0 -1
- package/components/list.d.ts +0 -121
- package/components/list.d.ts.map +0 -1
- package/components/list.schema.d.ts +0 -129
- package/components/list.schema.d.ts.map +0 -1
- package/components/modal.d.ts +0 -100
- package/components/modal.d.ts.map +0 -1
- package/components/modal.schema.d.ts +0 -151
- package/components/modal.schema.d.ts.map +0 -1
- package/components/table.d.ts +0 -91
- package/components/table.d.ts.map +0 -1
- package/components/table.schema.d.ts +0 -123
- package/components/table.schema.d.ts.map +0 -1
- package/esm/bundler/index.mjs +0 -3136
- package/esm/layouts/index.mjs +0 -409
- package/esm/render/index.mjs +0 -45
- package/esm/renderers/index.mjs +0 -621
- package/esm/universal/index.mjs +0 -1946
- package/esm/web-components/index.mjs +0 -2023
- package/layouts/base.d.ts +0 -86
- package/layouts/base.d.ts.map +0 -1
- package/layouts/index.d.ts +0 -8
- package/layouts/index.d.ts.map +0 -1
- package/layouts/index.js +0 -437
- package/layouts/presets.d.ts +0 -134
- package/layouts/presets.d.ts.map +0 -1
- package/react/Alert.d.ts +0 -101
- package/react/Alert.d.ts.map +0 -1
- package/react/Badge.d.ts +0 -100
- package/react/Badge.d.ts.map +0 -1
- package/react/Button.d.ts +0 -108
- package/react/Button.d.ts.map +0 -1
- package/react/Card.d.ts +0 -103
- package/react/Card.d.ts.map +0 -1
- package/react/types.d.ts +0 -105
- package/react/types.d.ts.map +0 -1
- package/render/index.d.ts +0 -8
- package/render/index.d.ts.map +0 -1
- package/render/prerender.d.ts +0 -57
- package/render/prerender.d.ts.map +0 -1
- package/renderers/index.d.ts +0 -26
- package/renderers/index.d.ts.map +0 -1
- package/renderers/index.js +0 -666
- package/renderers/mdx.renderer.d.ts +0 -99
- package/renderers/mdx.renderer.d.ts.map +0 -1
- package/renderers/react.adapter.d.ts +0 -70
- package/renderers/react.adapter.d.ts.map +0 -1
- package/renderers/react.renderer.d.ts +0 -105
- package/renderers/react.renderer.d.ts.map +0 -1
- package/renderers/transpiler.d.ts +0 -49
- package/renderers/transpiler.d.ts.map +0 -1
- package/universal/UniversalApp.d.ts +0 -108
- package/universal/UniversalApp.d.ts.map +0 -1
- package/universal/cached-runtime.d.ts +0 -139
- package/universal/cached-runtime.d.ts.map +0 -1
- package/universal/context.d.ts +0 -122
- package/universal/context.d.ts.map +0 -1
- package/universal/index.d.ts +0 -57
- package/universal/index.d.ts.map +0 -1
- package/universal/index.js +0 -2032
- package/universal/renderers/html.renderer.d.ts +0 -36
- package/universal/renderers/html.renderer.d.ts.map +0 -1
- package/universal/renderers/index.d.ts +0 -112
- package/universal/renderers/index.d.ts.map +0 -1
- package/universal/renderers/markdown.renderer.d.ts +0 -33
- package/universal/renderers/markdown.renderer.d.ts.map +0 -1
- package/universal/renderers/mdx.renderer.d.ts +0 -38
- package/universal/renderers/mdx.renderer.d.ts.map +0 -1
- package/universal/renderers/react.renderer.d.ts +0 -46
- package/universal/renderers/react.renderer.d.ts.map +0 -1
- package/universal/runtime-builder.d.ts +0 -33
- package/universal/runtime-builder.d.ts.map +0 -1
- package/universal/store.d.ts +0 -135
- package/universal/store.d.ts.map +0 -1
- package/universal/types.d.ts +0 -199
- package/universal/types.d.ts.map +0 -1
- package/web-components/core/attribute-parser.d.ts +0 -82
- package/web-components/core/attribute-parser.d.ts.map +0 -1
- package/web-components/core/base-element.d.ts +0 -197
- package/web-components/core/base-element.d.ts.map +0 -1
- package/web-components/core/index.d.ts +0 -9
- package/web-components/core/index.d.ts.map +0 -1
- package/web-components/elements/fmcp-alert.d.ts +0 -46
- package/web-components/elements/fmcp-alert.d.ts.map +0 -1
- package/web-components/elements/fmcp-badge.d.ts +0 -47
- package/web-components/elements/fmcp-badge.d.ts.map +0 -1
- package/web-components/elements/fmcp-button.d.ts +0 -117
- package/web-components/elements/fmcp-button.d.ts.map +0 -1
- package/web-components/elements/fmcp-card.d.ts +0 -53
- package/web-components/elements/fmcp-card.d.ts.map +0 -1
- package/web-components/elements/fmcp-input.d.ts +0 -96
- package/web-components/elements/fmcp-input.d.ts.map +0 -1
- package/web-components/elements/fmcp-select.d.ts +0 -100
- package/web-components/elements/fmcp-select.d.ts.map +0 -1
- package/web-components/elements/index.d.ts +0 -13
- package/web-components/elements/index.d.ts.map +0 -1
- package/web-components/index.d.ts +0 -49
- package/web-components/index.d.ts.map +0 -1
- package/web-components/index.js +0 -2058
- package/web-components/register.d.ts +0 -57
- package/web-components/register.d.ts.map +0 -1
- package/web-components/types.d.ts +0 -122
- package/web-components/types.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,95 +1,302 @@
|
|
|
1
1
|
# @frontmcp/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
MUI-based React components, content renderers, and MCP bridge for building interactive MCP widgets.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@frontmcp/ui)
|
|
6
|
-
|
|
7
|
-
## Package Split
|
|
8
|
-
|
|
9
|
-
| Package | Purpose | React Required |
|
|
10
|
-
| ------------------ | --------------------------------------------------------------- | -------------- |
|
|
11
|
-
| `@frontmcp/ui` | HTML components, React components/hooks, SSR renderers | Yes (peer dep) |
|
|
12
|
-
| `@frontmcp/uipack` | Themes, build/render pipelines, runtime helpers, template types | No |
|
|
6
|
+
[](../../LICENSE)
|
|
13
7
|
|
|
14
8
|
## Install
|
|
15
9
|
|
|
16
10
|
```bash
|
|
17
|
-
npm install @frontmcp/ui @
|
|
11
|
+
npm install @frontmcp/ui react react-dom @mui/material @emotion/react @emotion/styled
|
|
18
12
|
```
|
|
19
13
|
|
|
20
|
-
|
|
14
|
+
> **Note:** Renderer libraries (recharts, react-pdf, mermaid, katex, etc.) are **not** installed locally. They are automatically lazy-loaded from [esm.sh](https://esm.sh) in the browser at runtime.
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### Theme + Components
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { FrontMcpThemeProvider } from '@frontmcp/ui/theme';
|
|
22
|
+
import { Card, Button, Badge } from '@frontmcp/ui/components';
|
|
23
|
+
|
|
24
|
+
function App() {
|
|
25
|
+
return (
|
|
26
|
+
<FrontMcpThemeProvider>
|
|
27
|
+
<Card title="Weather" elevation={2}>
|
|
28
|
+
<Badge label="Live" variant="success" />
|
|
29
|
+
<p>Temperature: 18C</p>
|
|
30
|
+
<Button variant="primary" onClick={() => {}}>
|
|
31
|
+
Refresh
|
|
32
|
+
</Button>
|
|
33
|
+
</Card>
|
|
34
|
+
</FrontMcpThemeProvider>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
21
38
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
### MCP Bridge Hooks
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { McpBridgeProvider, useCallTool, useToolOutput } from '@frontmcp/ui/react';
|
|
43
|
+
|
|
44
|
+
function WeatherWidget() {
|
|
45
|
+
const output = useToolOutput<{ temp: number }>();
|
|
46
|
+
const { call, loading } = useCallTool('get_weather');
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div>
|
|
50
|
+
<p>{output?.temp}C</p>
|
|
51
|
+
<button onClick={() => call({ city: 'London' })} disabled={loading}>
|
|
52
|
+
Refresh
|
|
53
|
+
</button>
|
|
54
|
+
</div>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Wrap with provider
|
|
59
|
+
<McpBridgeProvider>
|
|
60
|
+
<WeatherWidget />
|
|
61
|
+
</McpBridgeProvider>;
|
|
42
62
|
```
|
|
43
63
|
|
|
44
|
-
|
|
64
|
+
### Content Rendering
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { renderContent, detectContentType } from '@frontmcp/ui/renderer';
|
|
68
|
+
|
|
69
|
+
// Auto-detects content type and renders with the appropriate renderer
|
|
70
|
+
const type = detectContentType(data); // 'chart' | 'csv' | 'pdf' | 'mermaid' | ...
|
|
71
|
+
const element = renderContent(data, { type });
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Features
|
|
75
|
+
|
|
76
|
+
- **11 MUI components** — Button, Card, Alert, Badge, Avatar, Modal, Table, TextField, Select, List, Loader
|
|
77
|
+
- **13 content renderers** — Charts, CSV, Flow, HTML, Image, Maps, Math, MDX, Media (video + audio), Mermaid, PDF, React JSX
|
|
78
|
+
- **MCP bridge hooks** — `useCallTool`, `useToolInput`, `useToolOutput`, `useSendMessage`, `useOpenLink`, and more
|
|
79
|
+
- **5 platform adapters** — OpenAI, ExtApps, Claude, Gemini, Generic (auto-detected)
|
|
80
|
+
- **MUI theme system** — `FrontMcpThemeProvider` with light/dark presets and custom theme support
|
|
81
|
+
- **Runtime utilities** — Content type auto-detection, Babel JSX transpilation
|
|
82
|
+
- **Tree-shakeable** — Import individual components and renderers to minimize bundle size
|
|
45
83
|
|
|
46
84
|
## Entry Points
|
|
47
85
|
|
|
48
|
-
| Path
|
|
49
|
-
|
|
|
50
|
-
| `@frontmcp/ui
|
|
51
|
-
| `@frontmcp/ui/
|
|
52
|
-
| `@frontmcp/ui/
|
|
53
|
-
| `@frontmcp/ui/
|
|
54
|
-
| `@frontmcp/ui/
|
|
55
|
-
| `@frontmcp/ui/
|
|
56
|
-
| `@frontmcp/ui/
|
|
57
|
-
| `@frontmcp/ui/
|
|
58
|
-
| `@frontmcp/ui/bridge`
|
|
59
|
-
| `@frontmcp/ui/
|
|
60
|
-
|
|
61
|
-
##
|
|
62
|
-
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
86
|
+
| Path | Exports |
|
|
87
|
+
| ------------------------------ | --------------------------------------------------------------------------- |
|
|
88
|
+
| `@frontmcp/ui` | Bridge core, hooks (main barrel) |
|
|
89
|
+
| `@frontmcp/ui/theme` | `FrontMcpThemeProvider`, `createFrontMcpTheme`, `defaultTheme`, `darkTheme` |
|
|
90
|
+
| `@frontmcp/ui/components` | All 11 React components |
|
|
91
|
+
| `@frontmcp/ui/components/*` | Individual components (`/Button`, `/Card`, `/Alert`, etc.) |
|
|
92
|
+
| `@frontmcp/ui/renderer` | `renderContent`, `detectContentType`, `registerAllRenderers` |
|
|
93
|
+
| `@frontmcp/ui/renderer/*` | Individual renderers (`/charts`, `/csv`, `/pdf`, `/mdx`, etc.) |
|
|
94
|
+
| `@frontmcp/ui/renderer/common` | Shared renderer utilities (`useLazyModule`, `useRendererTheme`) |
|
|
95
|
+
| `@frontmcp/ui/react` | `McpBridgeProvider`, all hooks |
|
|
96
|
+
| `@frontmcp/ui/bridge` | `FrontMcpBridge`, `createBridge`, `AdapterRegistry`, adapters |
|
|
97
|
+
| `@frontmcp/ui/runtime` | `detectContentType`, `transpileJsx`, Babel loader |
|
|
98
|
+
|
|
99
|
+
## Components
|
|
100
|
+
|
|
101
|
+
| Component | Key Props | Description |
|
|
102
|
+
| ----------- | ----------------------------------- | --------------------------------------- |
|
|
103
|
+
| `Button` | `variant`, `onClick`, `disabled` | MUI button with FrontMCP variants |
|
|
104
|
+
| `Card` | `title`, `elevation`, `slots` | Content card with customizable slots |
|
|
105
|
+
| `Alert` | `severity`, `title`, `onClose` | Status alert banner |
|
|
106
|
+
| `Badge` | `label`, `variant` | Status/label badge |
|
|
107
|
+
| `Avatar` | `src`, `alt`, `size` | User avatar |
|
|
108
|
+
| `Modal` | `open`, `onClose`, `title`, `slots` | Dialog modal |
|
|
109
|
+
| `Table` | `columns`, `rows`, `sortable` | Data table |
|
|
110
|
+
| `TextField` | `label`, `value`, `onChange` | Text input field |
|
|
111
|
+
| `Select` | `options`, `value`, `onChange` | Dropdown select |
|
|
112
|
+
| `List` | `items`, `onItemClick` | List with item definitions |
|
|
113
|
+
| `Loader` | `variant`, context provider | Loading indicator with `LoaderProvider` |
|
|
114
|
+
|
|
115
|
+
## Renderers
|
|
116
|
+
|
|
117
|
+
| Renderer | Type | Priority |
|
|
118
|
+
| --------- | ----------------- | -------- |
|
|
119
|
+
| PDF | `pdf` | 90 |
|
|
120
|
+
| Charts | `chart` | 80 |
|
|
121
|
+
| Flow | `flow` | 70 |
|
|
122
|
+
| Maps | `map` | 60 |
|
|
123
|
+
| Mermaid | `mermaid` | 50 |
|
|
124
|
+
| Math | `math` | 40 |
|
|
125
|
+
| Image | `image` | 30 |
|
|
126
|
+
| Media | `video` / `audio` | 20 |
|
|
127
|
+
| CSV | `csv` | 10 |
|
|
128
|
+
| React JSX | `jsx` | 10 |
|
|
129
|
+
| MDX | `mdx` | 5 |
|
|
130
|
+
| HTML | `html` | 0 |
|
|
131
|
+
|
|
132
|
+
All renderer libraries are lazy-loaded from [esm.sh](https://esm.sh) in the browser at runtime — no local installation is needed. Priority determines which renderer wins when multiple match.
|
|
133
|
+
|
|
134
|
+
## Bridge Adapters
|
|
135
|
+
|
|
136
|
+
| Adapter | Detects Via | Priority | Key Capabilities |
|
|
137
|
+
| ------- | ------------------------------------- | -------- | ----------------------------------------------- |
|
|
138
|
+
| OpenAI | `window.openai.callTool` | 100 | `callTool`, `sendMessage`, `requestDisplayMode` |
|
|
139
|
+
| ExtApps | `window.__mcpPlatform === 'ext-apps'` | 80 | Negotiated via `postMessage` handshake |
|
|
140
|
+
| Claude | `window.claude`, hostname `claude.ai` | 60 | `openLink` |
|
|
141
|
+
| Gemini | `window.__mcpPlatform === 'gemini'` | 40 | `openLink`, `networkAccess` |
|
|
142
|
+
| Generic | Always matches (fallback) | 0 | `openLink`, `networkAccess` |
|
|
143
|
+
|
|
144
|
+
## Contributing
|
|
145
|
+
|
|
146
|
+
### Architecture
|
|
147
|
+
|
|
148
|
+
```mermaid
|
|
149
|
+
graph TD
|
|
150
|
+
subgraph "@frontmcp/ui"
|
|
151
|
+
IDX["index.ts<br/><i>Main barrel exports</i>"]
|
|
152
|
+
|
|
153
|
+
subgraph bridge["bridge/"]
|
|
154
|
+
B_CORE["core/<br/>AdapterRegistry, bridge factory"]
|
|
155
|
+
B_ADAPT["adapters/<br/>OpenAI, ExtApps, Claude,<br/>Gemini, Generic + base"]
|
|
156
|
+
B_RT["runtime/<br/>Script generation<br/><i>re-exports from uipack</i>"]
|
|
157
|
+
B_TYPES["types/<br/>TypeScript interfaces"]
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
subgraph theme["theme/"]
|
|
161
|
+
TH_CREATE["create-theme.ts"]
|
|
162
|
+
TH_PROV["FrontMcpThemeProvider.tsx"]
|
|
163
|
+
TH_HOOK["use-theme.ts"]
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
subgraph components["components/ (11)"]
|
|
167
|
+
C_BTN["Button"] --- C_CARD["Card"] --- C_ALERT["Alert"]
|
|
168
|
+
C_BADGE["Badge"] --- C_AVATAR["Avatar"] --- C_MODAL["Modal"]
|
|
169
|
+
C_TABLE["Table"] --- C_TF["TextField"] --- C_SEL["Select"]
|
|
170
|
+
C_LIST["List"] --- C_LOADER["Loader<br/><i>+ LoaderProvider</i>"]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
subgraph renderer["renderer/ (13)"]
|
|
174
|
+
R_CHARTS["charts<br/><i>recharts</i>"]
|
|
175
|
+
R_CSV["csv"]
|
|
176
|
+
R_FLOW["flow<br/><i>@xyflow/react</i>"]
|
|
177
|
+
R_HTML["html<br/><i>dompurify</i>"]
|
|
178
|
+
R_IMG["image"]
|
|
179
|
+
R_MAPS["maps<br/><i>leaflet</i>"]
|
|
180
|
+
R_MATH["math<br/><i>katex</i>"]
|
|
181
|
+
R_MDX["mdx<br/><i>react-markdown</i>"]
|
|
182
|
+
R_MEDIA["media<br/><i>react-player</i>"]
|
|
183
|
+
R_MERM["mermaid"]
|
|
184
|
+
R_PDF["pdf<br/><i>react-pdf</i>"]
|
|
185
|
+
R_REACT["react/jsx"]
|
|
186
|
+
R_COMMON["common/<br/>useLazyModule,<br/>useRendererTheme"]
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
subgraph react["react/hooks/"]
|
|
190
|
+
H_CTX["context.ts<br/>McpBridgeProvider,<br/>useMcpBridge, useTheme"]
|
|
191
|
+
H_TOOLS["tools.ts<br/>useCallTool, useToolInput,<br/>useToolOutput"]
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
subgraph runtime["runtime/"]
|
|
195
|
+
RT_DETECT["content-detector.ts<br/>detectContentType()"]
|
|
196
|
+
RT_BABEL["babel-runtime.ts<br/>transpileJsx(), loadBabel()"]
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
IDX --> bridge
|
|
201
|
+
IDX --> react
|
|
202
|
+
bridge --> B_CORE
|
|
203
|
+
bridge --> B_ADAPT
|
|
204
|
+
bridge --> B_RT
|
|
205
|
+
react --> H_CTX
|
|
206
|
+
react --> H_TOOLS
|
|
207
|
+
H_CTX --> bridge
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### How @frontmcp/ui works with @frontmcp/uipack
|
|
211
|
+
|
|
212
|
+
These two packages split concerns between server-side (uipack) and browser-side (ui):
|
|
213
|
+
|
|
214
|
+
| Concern | @frontmcp/ui (browser) | @frontmcp/uipack (server) |
|
|
215
|
+
| ----------------- | --------------------------- | ------------------------------- |
|
|
216
|
+
| React dependency | Yes (peer dep) | No |
|
|
217
|
+
| Bridge | Runtime class + React hooks | IIFE generator (vanilla JS) |
|
|
218
|
+
| Components | MUI React components | -- |
|
|
219
|
+
| Shell building | -- | HTML shell, CSP, data injection |
|
|
220
|
+
| Rendering | 13 content renderers | -- |
|
|
221
|
+
| Import resolution | -- | esm.sh resolver, import maps |
|
|
222
|
+
| Theme | MUI ThemeProvider | -- |
|
|
223
|
+
|
|
224
|
+
**End-to-end data flow:**
|
|
225
|
+
|
|
226
|
+
```mermaid
|
|
227
|
+
sequenceDiagram
|
|
228
|
+
participant Dev as Developer
|
|
229
|
+
participant SDK as @frontmcp/sdk
|
|
230
|
+
participant UP as @frontmcp/uipack
|
|
231
|
+
participant Browser
|
|
232
|
+
participant UI as @frontmcp/ui
|
|
233
|
+
|
|
234
|
+
Dev->>SDK: @Tool({ ui: { npm: '...' } })
|
|
235
|
+
SDK->>UP: renderComponent(config, shellConfig)
|
|
236
|
+
UP->>UP: resolve deps (esm.sh)
|
|
237
|
+
UP->>UP: build shell (CSP + data injection)
|
|
238
|
+
UP->>UP: inject bridge IIFE
|
|
239
|
+
UP-->>SDK: ShellResult { html, hash, size }
|
|
240
|
+
|
|
241
|
+
Browser->>SDK: readResource("ui://widget/tool.html")
|
|
242
|
+
SDK-->>Browser: cached HTML
|
|
243
|
+
|
|
244
|
+
Browser->>Browser: Load @frontmcp/ui via esm.sh
|
|
245
|
+
Browser->>UI: Mount React components
|
|
246
|
+
UI->>UI: Bridge hooks read window.__mcp* globals
|
|
247
|
+
UI->>Browser: Interactive widget rendered
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
1. **Server-side** (`@frontmcp/uipack`): Resolves component dependencies, builds HTML shell with CSP and bridge IIFE, injects tool data as `window.__mcp*` globals
|
|
251
|
+
2. **Browser-side** (`@frontmcp/ui`): Loaded via esm.sh in the browser, provides React components, hooks to read injected data, and the bridge runtime for host communication
|
|
252
|
+
|
|
253
|
+
### Renderer System
|
|
254
|
+
|
|
255
|
+
Each renderer implements the `ContentRenderer` interface:
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
interface ContentRenderer {
|
|
259
|
+
type: string; // e.g. 'chart', 'csv', 'pdf'
|
|
260
|
+
priority: number; // Higher wins when multiple match
|
|
261
|
+
canHandle(content: string): boolean;
|
|
262
|
+
render(content: string, options?: RenderOptions): ReactElement;
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Renderers are registered via `registerAllRenderers()` and auto-detected at runtime. Each renderer lazy-loads its peer dependencies using `useLazyModule()` — if a peer dep is missing, the renderer gracefully skips.
|
|
267
|
+
|
|
268
|
+
### Development
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Build
|
|
272
|
+
nx build ui
|
|
273
|
+
|
|
274
|
+
# Test
|
|
275
|
+
nx test ui
|
|
276
|
+
|
|
277
|
+
# Lint
|
|
278
|
+
nx lint ui
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Testing
|
|
282
|
+
|
|
283
|
+
- 95%+ coverage required across statements, branches, functions, lines
|
|
284
|
+
- Test all component variants and edge cases
|
|
285
|
+
- Test renderer content detection logic
|
|
286
|
+
- Test bridge adapter detection and capability checks
|
|
287
|
+
|
|
288
|
+
## Requirements
|
|
289
|
+
|
|
290
|
+
- Node.js >= 22.0.0
|
|
291
|
+
- React ^18.0.0 || ^19.0.0
|
|
292
|
+
- MUI >= 7.0.0
|
|
74
293
|
|
|
75
294
|
## Related Packages
|
|
76
295
|
|
|
77
|
-
- [`@frontmcp/uipack`](../uipack) — React-free
|
|
78
|
-
- [`@frontmcp/sdk`](../sdk) —
|
|
79
|
-
- [`@frontmcp/testing`](../testing) — UI assertions
|
|
296
|
+
- [`@frontmcp/uipack`](../uipack) — React-free server-side shell builder, import resolver, component loader
|
|
297
|
+
- [`@frontmcp/sdk`](../sdk) — Core FrontMCP SDK
|
|
298
|
+
- [`@frontmcp/testing`](../testing) — UI test assertions
|
|
80
299
|
|
|
81
300
|
## License
|
|
82
301
|
|
|
83
302
|
Apache-2.0 — see [LICENSE](../../LICENSE).
|
|
84
|
-
|
|
85
|
-
<!-- links -->
|
|
86
|
-
|
|
87
|
-
[docs-overview]: https://docs.agentfront.dev/frontmcp/ui/overview
|
|
88
|
-
[docs-components]: https://docs.agentfront.dev/frontmcp/ui/components
|
|
89
|
-
[docs-react]: https://docs.agentfront.dev/frontmcp/ui/react
|
|
90
|
-
[docs-hooks]: https://docs.agentfront.dev/frontmcp/ui/hooks
|
|
91
|
-
[docs-ssr]: https://docs.agentfront.dev/frontmcp/ui/ssr
|
|
92
|
-
[docs-mdx]: https://docs.agentfront.dev/frontmcp/ui/mdx
|
|
93
|
-
[docs-web-components]: https://docs.agentfront.dev/frontmcp/ui/web-components
|
|
94
|
-
[docs-universal]: https://docs.agentfront.dev/frontmcp/ui/universal
|
|
95
|
-
[docs-bundling]: https://docs.agentfront.dev/frontmcp/ui/bundling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.adapter.d.ts","sourceRoot":"","sources":["../../../src/bridge/adapters/claude.adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.adapter.d.ts","sourceRoot":"","sources":["../../../src/bridge/adapters/claude.adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAgBnE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,CAAC,EAAE,YAAY;IACvB,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,QAAQ,MAAM;;IAgBvB;;;;;OAKG;IACH,SAAS,IAAI,OAAO;IAgCpB;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAU1C;;;OAGG;IACY,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD;;OAEG;IACY,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;OAEG;IACY,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5C;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAoB5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.adapter.d.ts","sourceRoot":"","sources":["../../../src/bridge/adapters/gemini.adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.adapter.d.ts","sourceRoot":"","sources":["../../../src/bridge/adapters/gemini.adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AA2BnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,CAAC,EAAE,YAAY;IACvB,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,OAAO,CAAwB;;IAgBvC;;OAEG;IACH,SAAS,IAAI,OAAO;IAuBpB;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB1C;;OAEG;IACM,QAAQ,IAAI,OAAO,GAAG,MAAM;IAQrC;;OAEG;IACY,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;OAEG;IACY,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanD;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAqB5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
package/bridge/index.js
CHANGED
|
@@ -1510,9 +1510,7 @@ var ExtAppsNotSupportedError = class extends Error {
|
|
|
1510
1510
|
var CLAUDE_DOMAINS = ["claude.ai", "anthropic.com"];
|
|
1511
1511
|
function isValidClaudeDomain(hostname) {
|
|
1512
1512
|
const lowerHost = hostname.toLowerCase();
|
|
1513
|
-
return CLAUDE_DOMAINS.some(
|
|
1514
|
-
(domain) => lowerHost === domain || lowerHost.endsWith("." + domain)
|
|
1515
|
-
);
|
|
1513
|
+
return CLAUDE_DOMAINS.some((domain) => lowerHost === domain || lowerHost.endsWith("." + domain));
|
|
1516
1514
|
}
|
|
1517
1515
|
var ClaudeAdapter = class extends BaseAdapter {
|
|
1518
1516
|
id = "claude";
|
|
@@ -1617,9 +1615,7 @@ function createClaudeAdapter() {
|
|
|
1617
1615
|
var GEMINI_DOMAINS = ["gemini.google.com", "bard.google.com"];
|
|
1618
1616
|
function isValidGeminiDomain(hostname) {
|
|
1619
1617
|
const lowerHost = hostname.toLowerCase();
|
|
1620
|
-
return GEMINI_DOMAINS.some(
|
|
1621
|
-
(domain) => lowerHost === domain || lowerHost.endsWith("." + domain)
|
|
1622
|
-
);
|
|
1618
|
+
return GEMINI_DOMAINS.some((domain) => lowerHost === domain || lowerHost.endsWith("." + domain));
|
|
1623
1619
|
}
|
|
1624
1620
|
var GeminiAdapter = class extends BaseAdapter {
|
|
1625
1621
|
id = "gemini";
|
|
@@ -1813,33 +1809,3 @@ registerBuiltInAdapters();
|
|
|
1813
1809
|
|
|
1814
1810
|
// libs/ui/src/bridge/runtime/index.ts
|
|
1815
1811
|
var import_uipack = require("@frontmcp/uipack");
|
|
1816
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
1817
|
-
0 && (module.exports = {
|
|
1818
|
-
AdapterRegistry,
|
|
1819
|
-
BRIDGE_SCRIPT_TAGS,
|
|
1820
|
-
BaseAdapter,
|
|
1821
|
-
ClaudeAdapter,
|
|
1822
|
-
DEFAULT_CAPABILITIES,
|
|
1823
|
-
DEFAULT_SAFE_AREA,
|
|
1824
|
-
ExtAppsAdapter,
|
|
1825
|
-
FrontMcpBridge,
|
|
1826
|
-
GeminiAdapter,
|
|
1827
|
-
GenericAdapter,
|
|
1828
|
-
OpenAIAdapter,
|
|
1829
|
-
UNIVERSAL_BRIDGE_SCRIPT,
|
|
1830
|
-
createBridge,
|
|
1831
|
-
createClaudeAdapter,
|
|
1832
|
-
createExtAppsAdapter,
|
|
1833
|
-
createGeminiAdapter,
|
|
1834
|
-
createGenericAdapter,
|
|
1835
|
-
createOpenAIAdapter,
|
|
1836
|
-
defaultRegistry,
|
|
1837
|
-
detectAdapter,
|
|
1838
|
-
generateBridgeIIFE,
|
|
1839
|
-
generatePlatformBundle,
|
|
1840
|
-
getAdapter,
|
|
1841
|
-
getGlobalBridge,
|
|
1842
|
-
registerAdapter,
|
|
1843
|
-
registerBuiltInAdapters,
|
|
1844
|
-
resetGlobalBridge
|
|
1845
|
-
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface AlertProps {
|
|
3
|
+
severity?: 'success' | 'info' | 'warning' | 'error';
|
|
4
|
+
title?: string;
|
|
5
|
+
dismissible?: boolean;
|
|
6
|
+
onDismiss?: () => void;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare function Alert({ severity, title, dismissible, onDismiss, icon, children, }: AlertProps): React.ReactElement | null;
|
|
11
|
+
//# sourceMappingURL=Alert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAiB,EACjB,KAAK,EACL,WAAmB,EACnB,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkBxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// libs/ui/src/components/Alert/index.ts
|
|
31
|
+
var Alert_exports = {};
|
|
32
|
+
__export(Alert_exports, {
|
|
33
|
+
Alert: () => Alert,
|
|
34
|
+
default: () => Alert
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(Alert_exports);
|
|
37
|
+
|
|
38
|
+
// libs/ui/src/components/Alert/Alert.tsx
|
|
39
|
+
var import_react = require("react");
|
|
40
|
+
var import_Alert = __toESM(require("@mui/material/Alert"));
|
|
41
|
+
var import_AlertTitle = __toESM(require("@mui/material/AlertTitle"));
|
|
42
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
43
|
+
function Alert({
|
|
44
|
+
severity = "info",
|
|
45
|
+
title,
|
|
46
|
+
dismissible = false,
|
|
47
|
+
onDismiss,
|
|
48
|
+
icon,
|
|
49
|
+
children
|
|
50
|
+
}) {
|
|
51
|
+
const [dismissed, setDismissed] = (0, import_react.useState)(false);
|
|
52
|
+
if (dismissed) return null;
|
|
53
|
+
const handleClose = dismissible ? () => {
|
|
54
|
+
setDismissed(true);
|
|
55
|
+
onDismiss?.();
|
|
56
|
+
} : void 0;
|
|
57
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Alert.default, { severity, onClose: handleClose, icon, children: [
|
|
58
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_AlertTitle.default, { children: title }),
|
|
59
|
+
children
|
|
60
|
+
] });
|
|
61
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface AvatarProps {
|
|
3
|
+
src?: string;
|
|
4
|
+
alt?: string;
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
size?: number;
|
|
7
|
+
variant?: 'circular' | 'rounded' | 'square';
|
|
8
|
+
}
|
|
9
|
+
export declare function Avatar({ src, alt, children, size, variant }: AvatarProps): React.ReactElement;
|
|
10
|
+
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC7C;AAED,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAS,EAAE,OAAoB,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAM/G"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// libs/ui/src/components/Avatar/index.ts
|
|
31
|
+
var Avatar_exports = {};
|
|
32
|
+
__export(Avatar_exports, {
|
|
33
|
+
Avatar: () => Avatar,
|
|
34
|
+
default: () => Avatar
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(Avatar_exports);
|
|
37
|
+
|
|
38
|
+
// libs/ui/src/components/Avatar/Avatar.tsx
|
|
39
|
+
var import_Avatar = __toESM(require("@mui/material/Avatar"));
|
|
40
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
41
|
+
function Avatar({ src, alt, children, size = 40, variant = "circular" }) {
|
|
42
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Avatar.default, { src, alt, variant, sx: { width: size, height: size }, children });
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
3
|
+
export interface BadgeProps {
|
|
4
|
+
variant?: BadgeVariant;
|
|
5
|
+
label: string;
|
|
6
|
+
dot?: boolean;
|
|
7
|
+
removable?: boolean;
|
|
8
|
+
onRemove?: () => void;
|
|
9
|
+
size?: 'small' | 'medium';
|
|
10
|
+
icon?: React.ReactElement;
|
|
11
|
+
}
|
|
12
|
+
export declare function Badge({ variant, label, dot, removable, onRemove, size, icon, }: BadgeProps): React.ReactElement;
|
|
13
|
+
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5F,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAC3B;AA6BD,wBAAgB,KAAK,CAAC,EACpB,OAAmB,EACnB,KAAK,EACL,GAAW,EACX,SAAiB,EACjB,QAAQ,EACR,IAAc,EACd,IAAI,GACL,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,CAajC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|