@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.
Files changed (310) hide show
  1. package/README.md +279 -72
  2. package/bridge/adapters/claude.adapter.d.ts.map +1 -1
  3. package/bridge/adapters/gemini.adapter.d.ts.map +1 -1
  4. package/bridge/index.js +2 -36
  5. package/components/Alert/Alert.d.ts +11 -0
  6. package/components/Alert/Alert.d.ts.map +1 -0
  7. package/components/Alert/index.d.ts +4 -0
  8. package/components/Alert/index.d.ts.map +1 -0
  9. package/components/Alert/index.js +61 -0
  10. package/components/Avatar/Avatar.d.ts +10 -0
  11. package/components/Avatar/Avatar.d.ts.map +1 -0
  12. package/components/Avatar/index.d.ts +4 -0
  13. package/components/Avatar/index.d.ts.map +1 -0
  14. package/components/Avatar/index.js +43 -0
  15. package/components/Badge/Badge.d.ts +13 -0
  16. package/components/Badge/Badge.d.ts.map +1 -0
  17. package/components/Badge/index.d.ts +4 -0
  18. package/components/Badge/index.d.ts.map +1 -0
  19. package/{render → components/Badge}/index.js +54 -42
  20. package/components/Button/Button.d.ts +16 -0
  21. package/components/Button/Button.d.ts.map +1 -0
  22. package/components/Button/index.d.ts +4 -0
  23. package/components/Button/index.d.ts.map +1 -0
  24. package/components/Button/index.js +91 -0
  25. package/components/Card/Card.d.ts +25 -0
  26. package/components/Card/Card.d.ts.map +1 -0
  27. package/components/Card/index.d.ts +4 -0
  28. package/components/Card/index.d.ts.map +1 -0
  29. package/components/Card/index.js +110 -0
  30. package/components/List/List.d.ts +15 -0
  31. package/components/List/List.d.ts.map +1 -0
  32. package/components/List/index.d.ts +4 -0
  33. package/components/List/index.d.ts.map +1 -0
  34. package/components/List/index.js +58 -0
  35. package/components/Loader/Loader.d.ts +28 -0
  36. package/components/Loader/Loader.d.ts.map +1 -0
  37. package/components/Loader/LoaderContext.d.ts +20 -0
  38. package/components/Loader/LoaderContext.d.ts.map +1 -0
  39. package/components/Loader/index.d.ts +6 -0
  40. package/components/Loader/index.d.ts.map +1 -0
  41. package/components/Loader/index.js +174 -0
  42. package/components/Modal/Modal.d.ts +22 -0
  43. package/components/Modal/Modal.d.ts.map +1 -0
  44. package/components/Modal/index.d.ts +4 -0
  45. package/components/Modal/index.d.ts.map +1 -0
  46. package/components/Modal/index.js +80 -0
  47. package/components/Select/Select.d.ts +21 -0
  48. package/components/Select/Select.d.ts.map +1 -0
  49. package/components/Select/index.d.ts +4 -0
  50. package/components/Select/index.d.ts.map +1 -0
  51. package/components/Select/index.js +78 -0
  52. package/components/Table/Table.d.ts +15 -0
  53. package/components/Table/Table.d.ts.map +1 -0
  54. package/components/Table/index.d.ts +4 -0
  55. package/components/Table/index.d.ts.map +1 -0
  56. package/components/Table/index.js +70 -0
  57. package/components/TextField/TextField.d.ts +19 -0
  58. package/components/TextField/TextField.d.ts.map +1 -0
  59. package/components/TextField/index.d.ts +4 -0
  60. package/components/TextField/index.d.ts.map +1 -0
  61. package/components/TextField/index.js +77 -0
  62. package/components/index.d.ts +22 -28
  63. package/components/index.d.ts.map +1 -1
  64. package/components/index.js +523 -2521
  65. package/esm/bridge/index.mjs +2 -6
  66. package/esm/components/Alert/index.mjs +28 -0
  67. package/esm/components/Avatar/index.mjs +10 -0
  68. package/esm/components/Badge/index.mjs +56 -0
  69. package/esm/components/Button/index.mjs +58 -0
  70. package/esm/components/Card/index.mjs +77 -0
  71. package/esm/components/List/index.mjs +25 -0
  72. package/esm/components/Loader/index.mjs +141 -0
  73. package/esm/components/Modal/index.mjs +47 -0
  74. package/esm/components/Select/index.mjs +45 -0
  75. package/esm/components/Table/index.mjs +37 -0
  76. package/esm/components/TextField/index.mjs +44 -0
  77. package/esm/components/index.mjs +513 -2415
  78. package/esm/index.mjs +62 -4652
  79. package/esm/package.json +372 -16
  80. package/esm/react/index.mjs +2 -285
  81. package/esm/renderer/charts/index.mjs +336 -0
  82. package/esm/renderer/common/index.mjs +135 -0
  83. package/esm/renderer/csv/index.mjs +193 -0
  84. package/esm/renderer/flow/index.mjs +259 -0
  85. package/esm/renderer/html/index.mjs +99 -0
  86. package/esm/renderer/image/index.mjs +125 -0
  87. package/esm/renderer/index.mjs +2173 -0
  88. package/esm/renderer/maps/index.mjs +217 -0
  89. package/esm/renderer/math/index.mjs +229 -0
  90. package/esm/renderer/mdx/index.mjs +261 -0
  91. package/esm/renderer/media/index.mjs +235 -0
  92. package/esm/renderer/mermaid/index.mjs +220 -0
  93. package/esm/renderer/pdf/index.mjs +229 -0
  94. package/esm/renderer/react/index.mjs +230 -0
  95. package/esm/runtime/index.mjs +194 -0
  96. package/esm/theme/index.mjs +93 -0
  97. package/index.d.ts +10 -18
  98. package/index.d.ts.map +1 -1
  99. package/index.js +63 -4806
  100. package/package.json +372 -16
  101. package/react/index.d.ts +8 -54
  102. package/react/index.d.ts.map +1 -1
  103. package/react/index.js +2 -295
  104. package/renderer/auto-detect.d.ts +39 -0
  105. package/renderer/auto-detect.d.ts.map +1 -0
  106. package/renderer/charts/index.d.ts +22 -0
  107. package/renderer/charts/index.d.ts.map +1 -0
  108. package/renderer/charts/index.js +367 -0
  109. package/renderer/common/index.d.ts +5 -0
  110. package/renderer/common/index.d.ts.map +1 -0
  111. package/renderer/common/index.js +158 -0
  112. package/renderer/common/inject-stylesheet.d.ts +9 -0
  113. package/renderer/common/inject-stylesheet.d.ts.map +1 -0
  114. package/renderer/common/lazy-import.d.ts +85 -0
  115. package/renderer/common/lazy-import.d.ts.map +1 -0
  116. package/renderer/common/use-lazy-module.d.ts +13 -0
  117. package/renderer/common/use-lazy-module.d.ts.map +1 -0
  118. package/renderer/common/use-renderer-theme.d.ts +35 -0
  119. package/renderer/common/use-renderer-theme.d.ts.map +1 -0
  120. package/renderer/csv/index.d.ts +12 -0
  121. package/renderer/csv/index.d.ts.map +1 -0
  122. package/renderer/csv/index.js +224 -0
  123. package/renderer/flow/index.d.ts +40 -0
  124. package/renderer/flow/index.d.ts.map +1 -0
  125. package/renderer/flow/index.js +290 -0
  126. package/renderer/html/index.d.ts +12 -0
  127. package/renderer/html/index.d.ts.map +1 -0
  128. package/renderer/html/index.js +130 -0
  129. package/renderer/image/index.d.ts +11 -0
  130. package/renderer/image/index.d.ts.map +1 -0
  131. package/renderer/image/index.js +156 -0
  132. package/renderer/index.d.ts +32 -0
  133. package/renderer/index.d.ts.map +1 -0
  134. package/renderer/index.js +2206 -0
  135. package/renderer/maps/index.d.ts +27 -0
  136. package/renderer/maps/index.d.ts.map +1 -0
  137. package/renderer/maps/index.js +248 -0
  138. package/renderer/math/index.d.ts +11 -0
  139. package/renderer/math/index.d.ts.map +1 -0
  140. package/renderer/math/index.js +260 -0
  141. package/renderer/mdx/index.d.ts +10 -0
  142. package/renderer/mdx/index.d.ts.map +1 -0
  143. package/renderer/mdx/index.js +292 -0
  144. package/renderer/media/index.d.ts +20 -0
  145. package/renderer/media/index.d.ts.map +1 -0
  146. package/renderer/media/index.js +266 -0
  147. package/renderer/mermaid/index.d.ts +11 -0
  148. package/renderer/mermaid/index.d.ts.map +1 -0
  149. package/renderer/mermaid/index.js +251 -0
  150. package/renderer/pdf/index.d.ts +10 -0
  151. package/renderer/pdf/index.d.ts.map +1 -0
  152. package/renderer/pdf/index.js +260 -0
  153. package/renderer/react/index.d.ts +45 -0
  154. package/renderer/react/index.d.ts.map +1 -0
  155. package/renderer/react/index.js +261 -0
  156. package/renderer/types.d.ts +24 -0
  157. package/renderer/types.d.ts.map +1 -0
  158. package/runtime/babel-runtime.d.ts +70 -0
  159. package/runtime/babel-runtime.d.ts.map +1 -0
  160. package/runtime/content-detector.d.ts +43 -0
  161. package/runtime/content-detector.d.ts.map +1 -0
  162. package/runtime/index.d.ts +10 -0
  163. package/runtime/index.d.ts.map +1 -0
  164. package/runtime/index.js +217 -0
  165. package/theme/FrontMcpThemeProvider.d.ts +4 -0
  166. package/theme/FrontMcpThemeProvider.d.ts.map +1 -0
  167. package/theme/create-theme.d.ts +9 -0
  168. package/theme/create-theme.d.ts.map +1 -0
  169. package/theme/index.d.ts +5 -0
  170. package/theme/index.d.ts.map +1 -0
  171. package/theme/index.js +126 -0
  172. package/theme/types.d.ts +28 -0
  173. package/theme/types.d.ts.map +1 -0
  174. package/theme/use-theme.d.ts +3 -0
  175. package/theme/use-theme.d.ts.map +1 -0
  176. package/bundler/browser-components.d.ts +0 -42
  177. package/bundler/browser-components.d.ts.map +0 -1
  178. package/bundler/bundler.d.ts +0 -282
  179. package/bundler/bundler.d.ts.map +0 -1
  180. package/bundler/index.d.ts +0 -43
  181. package/bundler/index.d.ts.map +0 -1
  182. package/bundler/index.js +0 -3168
  183. package/bundler/types.d.ts +0 -883
  184. package/bundler/types.d.ts.map +0 -1
  185. package/components/alert.d.ts +0 -83
  186. package/components/alert.d.ts.map +0 -1
  187. package/components/alert.schema.d.ts +0 -98
  188. package/components/alert.schema.d.ts.map +0 -1
  189. package/components/avatar.d.ts +0 -77
  190. package/components/avatar.d.ts.map +0 -1
  191. package/components/avatar.schema.d.ts +0 -170
  192. package/components/avatar.schema.d.ts.map +0 -1
  193. package/components/badge.d.ts +0 -78
  194. package/components/badge.d.ts.map +0 -1
  195. package/components/badge.schema.d.ts +0 -91
  196. package/components/badge.schema.d.ts.map +0 -1
  197. package/components/button.d.ts +0 -100
  198. package/components/button.d.ts.map +0 -1
  199. package/components/button.schema.d.ts +0 -120
  200. package/components/button.schema.d.ts.map +0 -1
  201. package/components/card.d.ts +0 -76
  202. package/components/card.d.ts.map +0 -1
  203. package/components/card.schema.d.ts +0 -93
  204. package/components/card.schema.d.ts.map +0 -1
  205. package/components/form.d.ts +0 -227
  206. package/components/form.d.ts.map +0 -1
  207. package/components/form.schema.d.ts +0 -365
  208. package/components/form.schema.d.ts.map +0 -1
  209. package/components/list.d.ts +0 -121
  210. package/components/list.d.ts.map +0 -1
  211. package/components/list.schema.d.ts +0 -129
  212. package/components/list.schema.d.ts.map +0 -1
  213. package/components/modal.d.ts +0 -100
  214. package/components/modal.d.ts.map +0 -1
  215. package/components/modal.schema.d.ts +0 -151
  216. package/components/modal.schema.d.ts.map +0 -1
  217. package/components/table.d.ts +0 -91
  218. package/components/table.d.ts.map +0 -1
  219. package/components/table.schema.d.ts +0 -123
  220. package/components/table.schema.d.ts.map +0 -1
  221. package/esm/bundler/index.mjs +0 -3136
  222. package/esm/layouts/index.mjs +0 -409
  223. package/esm/render/index.mjs +0 -45
  224. package/esm/renderers/index.mjs +0 -621
  225. package/esm/universal/index.mjs +0 -1946
  226. package/esm/web-components/index.mjs +0 -2023
  227. package/layouts/base.d.ts +0 -86
  228. package/layouts/base.d.ts.map +0 -1
  229. package/layouts/index.d.ts +0 -8
  230. package/layouts/index.d.ts.map +0 -1
  231. package/layouts/index.js +0 -437
  232. package/layouts/presets.d.ts +0 -134
  233. package/layouts/presets.d.ts.map +0 -1
  234. package/react/Alert.d.ts +0 -101
  235. package/react/Alert.d.ts.map +0 -1
  236. package/react/Badge.d.ts +0 -100
  237. package/react/Badge.d.ts.map +0 -1
  238. package/react/Button.d.ts +0 -108
  239. package/react/Button.d.ts.map +0 -1
  240. package/react/Card.d.ts +0 -103
  241. package/react/Card.d.ts.map +0 -1
  242. package/react/types.d.ts +0 -105
  243. package/react/types.d.ts.map +0 -1
  244. package/render/index.d.ts +0 -8
  245. package/render/index.d.ts.map +0 -1
  246. package/render/prerender.d.ts +0 -57
  247. package/render/prerender.d.ts.map +0 -1
  248. package/renderers/index.d.ts +0 -26
  249. package/renderers/index.d.ts.map +0 -1
  250. package/renderers/index.js +0 -666
  251. package/renderers/mdx.renderer.d.ts +0 -99
  252. package/renderers/mdx.renderer.d.ts.map +0 -1
  253. package/renderers/react.adapter.d.ts +0 -70
  254. package/renderers/react.adapter.d.ts.map +0 -1
  255. package/renderers/react.renderer.d.ts +0 -105
  256. package/renderers/react.renderer.d.ts.map +0 -1
  257. package/renderers/transpiler.d.ts +0 -49
  258. package/renderers/transpiler.d.ts.map +0 -1
  259. package/universal/UniversalApp.d.ts +0 -108
  260. package/universal/UniversalApp.d.ts.map +0 -1
  261. package/universal/cached-runtime.d.ts +0 -139
  262. package/universal/cached-runtime.d.ts.map +0 -1
  263. package/universal/context.d.ts +0 -122
  264. package/universal/context.d.ts.map +0 -1
  265. package/universal/index.d.ts +0 -57
  266. package/universal/index.d.ts.map +0 -1
  267. package/universal/index.js +0 -2032
  268. package/universal/renderers/html.renderer.d.ts +0 -36
  269. package/universal/renderers/html.renderer.d.ts.map +0 -1
  270. package/universal/renderers/index.d.ts +0 -112
  271. package/universal/renderers/index.d.ts.map +0 -1
  272. package/universal/renderers/markdown.renderer.d.ts +0 -33
  273. package/universal/renderers/markdown.renderer.d.ts.map +0 -1
  274. package/universal/renderers/mdx.renderer.d.ts +0 -38
  275. package/universal/renderers/mdx.renderer.d.ts.map +0 -1
  276. package/universal/renderers/react.renderer.d.ts +0 -46
  277. package/universal/renderers/react.renderer.d.ts.map +0 -1
  278. package/universal/runtime-builder.d.ts +0 -33
  279. package/universal/runtime-builder.d.ts.map +0 -1
  280. package/universal/store.d.ts +0 -135
  281. package/universal/store.d.ts.map +0 -1
  282. package/universal/types.d.ts +0 -199
  283. package/universal/types.d.ts.map +0 -1
  284. package/web-components/core/attribute-parser.d.ts +0 -82
  285. package/web-components/core/attribute-parser.d.ts.map +0 -1
  286. package/web-components/core/base-element.d.ts +0 -197
  287. package/web-components/core/base-element.d.ts.map +0 -1
  288. package/web-components/core/index.d.ts +0 -9
  289. package/web-components/core/index.d.ts.map +0 -1
  290. package/web-components/elements/fmcp-alert.d.ts +0 -46
  291. package/web-components/elements/fmcp-alert.d.ts.map +0 -1
  292. package/web-components/elements/fmcp-badge.d.ts +0 -47
  293. package/web-components/elements/fmcp-badge.d.ts.map +0 -1
  294. package/web-components/elements/fmcp-button.d.ts +0 -117
  295. package/web-components/elements/fmcp-button.d.ts.map +0 -1
  296. package/web-components/elements/fmcp-card.d.ts +0 -53
  297. package/web-components/elements/fmcp-card.d.ts.map +0 -1
  298. package/web-components/elements/fmcp-input.d.ts +0 -96
  299. package/web-components/elements/fmcp-input.d.ts.map +0 -1
  300. package/web-components/elements/fmcp-select.d.ts +0 -100
  301. package/web-components/elements/fmcp-select.d.ts.map +0 -1
  302. package/web-components/elements/index.d.ts +0 -13
  303. package/web-components/elements/index.d.ts.map +0 -1
  304. package/web-components/index.d.ts +0 -49
  305. package/web-components/index.d.ts.map +0 -1
  306. package/web-components/index.js +0 -2058
  307. package/web-components/register.d.ts +0 -57
  308. package/web-components/register.d.ts.map +0 -1
  309. package/web-components/types.d.ts +0 -122
  310. package/web-components/types.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,95 +1,302 @@
1
1
  # @frontmcp/ui
2
2
 
3
- Platform-aware UI toolkit for building HTML widgets, React components, and web components inside MCP transports.
3
+ MUI-based React components, content renderers, and MCP bridge for building interactive MCP widgets.
4
4
 
5
5
  [![NPM](https://img.shields.io/npm/v/@frontmcp/ui.svg)](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](https://img.shields.io/npm/l/@frontmcp/ui.svg)](../../LICENSE)
13
7
 
14
8
  ## Install
15
9
 
16
10
  ```bash
17
- npm install @frontmcp/ui @frontmcp/uipack react react-dom
11
+ npm install @frontmcp/ui react react-dom @mui/material @emotion/react @emotion/styled
18
12
  ```
19
13
 
20
- ## Features
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
- - **HTML-first components** — buttons, cards, badges, alerts, forms, tables, layouts that return ready-to-stream HTML ([docs][docs-components])
23
- - **React components** — `Button`, `Card`, `Alert`, `Badge` with TypeScript props ([docs][docs-react])
24
- - **MCP Bridge hooks** — `useMcpBridge`, `useCallTool`, `useToolInput`, `useToolOutput` ([docs][docs-hooks])
25
- - **SSR + hydration** — `ReactRenderer` for server-side rendering, `ReactRendererAdapter` for client hydration ([docs][docs-ssr])
26
- - **MDX rendering** — server-side MDX-to-HTML with component resolution ([docs][docs-mdx])
27
- - **Web components** — `<fmcp-button>`, `<fmcp-card>`, and friends as custom elements ([docs][docs-web-components])
28
- - **Universal app shell** `FrontMCPProvider` + `UniversalApp` for platform-agnostic React apps ([docs][docs-universal])
29
- - **SSR bundling** `InMemoryBundler` for component compilation ([docs][docs-bundling])
30
-
31
- ## Quick Example
32
-
33
- ```ts
34
- import { card, button } from '@frontmcp/ui/components';
35
- import { baseLayout } from '@frontmcp/ui/layouts';
36
- import { DEFAULT_THEME } from '@frontmcp/uipack/theme';
37
-
38
- const html = baseLayout(card(`<h2>Hello</h2>${button('Submit', { variant: 'primary' })}`, { variant: 'elevated' }), {
39
- title: 'My Widget',
40
- theme: DEFAULT_THEME,
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
- > Full guide: [UI Overview][docs-overview]
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 | Exports |
49
- | ----------------------------- | ------------------------------------- |
50
- | `@frontmcp/ui/components` | HTML components, helpers, error boxes |
51
- | `@frontmcp/ui/layouts` | Base layouts, consent/error templates |
52
- | `@frontmcp/ui/pages` | High-level page templates |
53
- | `@frontmcp/ui/widgets` | OpenAI App SDK-style widgets |
54
- | `@frontmcp/ui/react` | React components + hooks |
55
- | `@frontmcp/ui/renderers` | ReactRenderer, MdxRenderer, adapters |
56
- | `@frontmcp/ui/render` | React 19 static rendering utilities |
57
- | `@frontmcp/ui/web-components` | `<fmcp-*>` custom elements |
58
- | `@frontmcp/ui/bridge` | Bridge registry + adapters |
59
- | `@frontmcp/ui/bundler` | SSR/component bundler |
60
-
61
- ## Docs
62
-
63
- | Topic | Link |
64
- | ---------------- | ------------------------------------- |
65
- | Overview | [UI Overview][docs-overview] |
66
- | HTML components | [Components][docs-components] |
67
- | React components | [React][docs-react] |
68
- | MCP Bridge hooks | [Hooks][docs-hooks] |
69
- | SSR rendering | [SSR][docs-ssr] |
70
- | MDX rendering | [MDX][docs-mdx] |
71
- | Web components | [Web Components][docs-web-components] |
72
- | Universal app | [Universal App][docs-universal] |
73
- | Bundling | [Bundling][docs-bundling] |
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 themes, runtime helpers, build tooling
78
- - [`@frontmcp/sdk`](../sdk) — core framework
79
- - [`@frontmcp/testing`](../testing) — UI assertions (`toHaveRenderedHtml`, `toBeXssSafe`)
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;AAkBnE;;;;;;;;;;;;;;;;;;;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
+ {"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;AA6BnE;;;;;;;;;;;;;;;;;;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"}
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,4 @@
1
+ export { Alert } from './Alert';
2
+ export { Alert as default } from './Alert';
3
+ export type { AlertProps } from './Alert';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export { Avatar } from './Avatar';
2
+ export { Avatar as default } from './Avatar';
3
+ export type { AvatarProps } from './Avatar';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export { Badge } from './Badge';
2
+ export { Badge as default } from './Badge';
3
+ export type { BadgeProps, BadgeVariant } from './Badge';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}