@frontmcp/ui 0.12.2 → 1.0.0-beta.2

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
@@ -0,0 +1,261 @@
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/renderer/react/index.ts
31
+ var react_exports = {};
32
+ __export(react_exports, {
33
+ ReactJsxRenderer: () => ReactJsxRenderer,
34
+ isReactJsx: () => isReactJsx,
35
+ parseImports: () => parseImports,
36
+ reactJsxRenderer: () => reactJsxRenderer,
37
+ rewriteExportDefault: () => rewriteExportDefault,
38
+ stripImports: () => stripImports
39
+ });
40
+ module.exports = __toCommonJS(react_exports);
41
+ var import_react = __toESM(require("react"));
42
+ var import_Box = __toESM(require("@mui/material/Box"));
43
+ var import_Alert = __toESM(require("@mui/material/Alert"));
44
+
45
+ // libs/ui/src/renderer/common/lazy-import.ts
46
+ function runtimeImport(specifier) {
47
+ const dynamicImport = new Function("s", "return import(s)");
48
+ return dynamicImport(specifier);
49
+ }
50
+
51
+ // libs/ui/src/runtime/babel-runtime.ts
52
+ var BABEL_STANDALONE_CDN = "https://esm.sh/@babel/standalone@7";
53
+ var BABEL_STANDALONE_FALLBACK_CDN = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.10/babel.min.js";
54
+ var babelState = { status: "idle" };
55
+ async function loadBabel() {
56
+ if (babelState.status === "loaded") {
57
+ return babelState.babel;
58
+ }
59
+ if (babelState.status === "loading") {
60
+ return babelState.promise;
61
+ }
62
+ if (babelState.status === "error") {
63
+ throw babelState.error;
64
+ }
65
+ const promise = doLoadBabel();
66
+ babelState = { status: "loading", promise };
67
+ try {
68
+ const babel = await promise;
69
+ babelState = { status: "loaded", babel };
70
+ return babel;
71
+ } catch (error) {
72
+ const err = error instanceof Error ? error : new Error(String(error));
73
+ babelState = { status: "error", error: err };
74
+ throw err;
75
+ }
76
+ }
77
+ async function doLoadBabel() {
78
+ const globalBabel = globalThis["Babel"];
79
+ if (globalBabel && typeof globalBabel.transform === "function") {
80
+ return globalBabel;
81
+ }
82
+ try {
83
+ const module2 = await import(
84
+ /* @vite-ignore */
85
+ /* webpackIgnore: true */
86
+ BABEL_STANDALONE_CDN
87
+ );
88
+ if (module2 && typeof module2.transform === "function") {
89
+ return module2;
90
+ }
91
+ if (module2.default && typeof module2.default.transform === "function") {
92
+ return module2.default;
93
+ }
94
+ } catch {
95
+ }
96
+ return new Promise((resolve, reject) => {
97
+ if (typeof document === "undefined") {
98
+ reject(new Error("Babel Standalone requires a browser environment"));
99
+ return;
100
+ }
101
+ const script = document.createElement("script");
102
+ script.src = BABEL_STANDALONE_FALLBACK_CDN;
103
+ script.crossOrigin = "anonymous";
104
+ script.onload = () => {
105
+ const babel = globalThis["Babel"];
106
+ if (babel && typeof babel.transform === "function") {
107
+ resolve(babel);
108
+ } else {
109
+ reject(new Error("Babel Standalone loaded but transform function not found"));
110
+ }
111
+ };
112
+ script.onerror = () => {
113
+ reject(new Error(`Failed to load Babel Standalone from ${BABEL_STANDALONE_FALLBACK_CDN}`));
114
+ };
115
+ document.head.appendChild(script);
116
+ });
117
+ }
118
+ async function transpileJsx(source, filename = "component.jsx") {
119
+ const babel = await loadBabel();
120
+ const result = babel.transform(source, {
121
+ presets: ["react"],
122
+ filename
123
+ });
124
+ return result.code;
125
+ }
126
+
127
+ // libs/ui/src/renderer/react/index.ts
128
+ function isReactJsx(content) {
129
+ if (/^#{1,6}\s+\S/m.test(content)) return false;
130
+ return /(?:function|const|class)\s+\w+/.test(content) && /(?:return|=>)[\s(]*</.test(content);
131
+ }
132
+ function parseImports(source) {
133
+ const results = [];
134
+ const defaultRe = /^import\s+(\w+)\s+from\s+['"]([^'"]+)['"][\s;]*$/gm;
135
+ let m;
136
+ while ((m = defaultRe.exec(source)) !== null) {
137
+ results.push({ line: m[0], localName: m[1], specifier: m[2], named: false });
138
+ }
139
+ const namedRe = /^import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"][\s;]*$/gm;
140
+ while ((m = namedRe.exec(source)) !== null) {
141
+ const names = m[1].split(",").map((n) => n.trim()).filter(Boolean);
142
+ for (const name of names) {
143
+ results.push({ line: m[0], localName: name, specifier: m[2], named: true });
144
+ }
145
+ }
146
+ return results;
147
+ }
148
+ function stripImports(source) {
149
+ return source.replace(/^import\s+\w+\s+from\s+['"][^'"]+['"][\s;]*$/gm, "").replace(/^import\s+\{[^}]+\}\s+from\s+['"][^'"]+['"][\s;]*$/gm, "");
150
+ }
151
+ function rewriteExportDefault(source) {
152
+ let result = source.replace(/^export\s+default\s+(function|class)\b/gm, "var __default__ = $1");
153
+ result = result.replace(/^export\s+default\s+(\([^)]*\)\s*=>)/gm, "var __default__ = $1");
154
+ result = result.replace(/^export\s+default\s+(\w+)\s*;?\s*$/gm, "var __default__ = $1;");
155
+ return result;
156
+ }
157
+ function isReactSpecifier(specifier) {
158
+ return specifier === "react" || /^https?:\/\/esm\.sh\/react(?:@[\d.]+)?$/.test(specifier);
159
+ }
160
+ async function resolveModules(imports) {
161
+ const modules = {};
162
+ const specifierMap = /* @__PURE__ */ new Map();
163
+ for (const imp of imports) {
164
+ const existing = specifierMap.get(imp.specifier) ?? [];
165
+ existing.push(imp);
166
+ specifierMap.set(imp.specifier, existing);
167
+ }
168
+ for (const [specifier, specImports] of specifierMap) {
169
+ let mod;
170
+ if (isReactSpecifier(specifier)) {
171
+ mod = import_react.default;
172
+ } else {
173
+ mod = await runtimeImport(specifier);
174
+ }
175
+ for (const imp of specImports) {
176
+ if (imp.named) {
177
+ modules[imp.localName] = mod[imp.localName] ?? mod["default"]?.[imp.localName];
178
+ } else {
179
+ modules[imp.localName] = mod["default"] ?? mod;
180
+ }
181
+ }
182
+ }
183
+ return modules;
184
+ }
185
+ function ReactJsxView({ source, className }) {
186
+ const [Component, setComponent] = (0, import_react.useState)(null);
187
+ const [error, setError] = (0, import_react.useState)(null);
188
+ const [loading, setLoading] = (0, import_react.useState)(true);
189
+ (0, import_react.useEffect)(() => {
190
+ let cancelled = false;
191
+ async function transpileAndRender() {
192
+ try {
193
+ const imports = parseImports(source);
194
+ const modules = await resolveModules(imports);
195
+ let code = stripImports(source);
196
+ code = rewriteExportDefault(code);
197
+ code = await transpileJsx(code, "component.jsx");
198
+ code += "\nreturn __default__;";
199
+ const argNames = Object.keys(modules);
200
+ const argValues = argNames.map((n) => modules[n]);
201
+ const factory = new Function(...argNames, code);
202
+ const Comp = factory(...argValues);
203
+ if (!cancelled) {
204
+ setComponent(() => Comp);
205
+ setError(null);
206
+ setLoading(false);
207
+ }
208
+ } catch (err) {
209
+ if (!cancelled) {
210
+ setError(err instanceof Error ? err.message : String(err));
211
+ setComponent(null);
212
+ setLoading(false);
213
+ }
214
+ }
215
+ }
216
+ setLoading(true);
217
+ setError(null);
218
+ setComponent(null);
219
+ transpileAndRender();
220
+ return () => {
221
+ cancelled = true;
222
+ };
223
+ }, [source]);
224
+ if (loading) {
225
+ return import_react.default.createElement(import_Box.default, { className, sx: { p: 2, color: "text.secondary" } }, "Transpiling JSX...");
226
+ }
227
+ if (error) {
228
+ return import_react.default.createElement(
229
+ import_Box.default,
230
+ { className },
231
+ import_react.default.createElement(import_Alert.default, { severity: "error", sx: { mb: 1 } }, `JSX render error: ${error}`),
232
+ import_react.default.createElement(
233
+ "pre",
234
+ { style: { fontFamily: "monospace", whiteSpace: "pre-wrap", fontSize: "0.85em" } },
235
+ source
236
+ )
237
+ );
238
+ }
239
+ if (!Component) {
240
+ return import_react.default.createElement(
241
+ import_Box.default,
242
+ { className },
243
+ import_react.default.createElement(import_Alert.default, { severity: "warning" }, "No component exported. Use `export default MyComponent`.")
244
+ );
245
+ }
246
+ return import_react.default.createElement(import_Box.default, { className }, import_react.default.createElement(Component, {}));
247
+ }
248
+ var ReactJsxRenderer = class {
249
+ type = "jsx";
250
+ priority = 10;
251
+ canHandle(content) {
252
+ return isReactJsx(content);
253
+ }
254
+ render(content, options) {
255
+ return import_react.default.createElement(ReactJsxView, {
256
+ source: content,
257
+ className: options?.className ?? "fmcp-jsx-content"
258
+ });
259
+ }
260
+ };
261
+ var reactJsxRenderer = new ReactJsxRenderer();
@@ -0,0 +1,24 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { Theme } from '@mui/material/styles';
3
+ /**
4
+ * All content types supported by the renderer system.
5
+ */
6
+ export type ContentType = 'jsx' | 'mdx' | 'markdown' | 'html' | 'pdf' | 'csv' | 'chart' | 'mermaid' | 'flow' | 'math' | 'map' | 'image' | 'video' | 'audio';
7
+ export interface RenderOptions {
8
+ input?: Record<string, unknown>;
9
+ output?: unknown;
10
+ toolName?: string;
11
+ className?: string;
12
+ /** Per-renderer configuration options. */
13
+ rendererOptions?: Record<string, unknown>;
14
+ /** MUI theme instance for renderers that need it. */
15
+ theme?: Theme;
16
+ }
17
+ export interface ContentRenderer {
18
+ readonly type: string;
19
+ /** Higher priority renderers are checked first (default: 0). */
20
+ readonly priority?: number;
21
+ canHandle(content: string): boolean;
22
+ render(content: string, options?: RenderOptions): ReactElement;
23
+ }
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,KAAK,GACL,KAAK,GACL,UAAU,GACV,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,SAAS,GACT,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,qDAAqD;IACrD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;CAChE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Babel Standalone Runtime
3
+ *
4
+ * Loads Babel Standalone from CDN for in-browser JSX transpilation.
5
+ * Lazy-loaded on first JSX content to avoid unnecessary network requests.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ /**
10
+ * CDN URL for Babel Standalone.
11
+ * Uses esm.sh for ES module compatibility.
12
+ */
13
+ export declare const BABEL_STANDALONE_CDN = "https://esm.sh/@babel/standalone@7";
14
+ /**
15
+ * Fallback CDN for environments that block esm.sh.
16
+ */
17
+ export declare const BABEL_STANDALONE_FALLBACK_CDN = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.10/babel.min.js";
18
+ /**
19
+ * Babel Standalone API shape (subset we use).
20
+ */
21
+ interface BabelStandalone {
22
+ transform(code: string, options: {
23
+ presets?: string[];
24
+ plugins?: string[];
25
+ filename?: string;
26
+ }): {
27
+ code: string;
28
+ };
29
+ }
30
+ /**
31
+ * Load Babel Standalone from CDN.
32
+ *
33
+ * Lazy-loads on first call and caches the result.
34
+ * Subsequent calls return the cached instance.
35
+ *
36
+ * @returns Promise resolving to Babel Standalone instance
37
+ * @throws Error if Babel cannot be loaded from any CDN
38
+ */
39
+ export declare function loadBabel(): Promise<BabelStandalone>;
40
+ /**
41
+ * Transpile JSX source code using Babel Standalone.
42
+ *
43
+ * Loads Babel lazily on first call.
44
+ *
45
+ * @param source - JSX/TSX source code
46
+ * @param filename - Optional filename for error messages
47
+ * @returns Transpiled JavaScript code
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const code = await transpileJsx(`
52
+ * function App() {
53
+ * return <div>Hello</div>;
54
+ * }
55
+ * `);
56
+ * ```
57
+ */
58
+ export declare function transpileJsx(source: string, filename?: string): Promise<string>;
59
+ /**
60
+ * Check if Babel is currently loaded and ready.
61
+ *
62
+ * @returns true if Babel is loaded and available
63
+ */
64
+ export declare function isBabelLoaded(): boolean;
65
+ /**
66
+ * Reset Babel loading state (for testing).
67
+ */
68
+ export declare function resetBabelState(): void;
69
+ export {};
70
+ //# sourceMappingURL=babel-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"babel-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/babel-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,uCAAuC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,6BAA6B,iFACsC,CAAC;AAMjF;;GAEG;AACH,UAAU,eAAe;IACvB,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACrB;AAqBD;;;;;;;;GAQG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC,CAyB1D;AAyDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAS9F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Content Type Detection
3
+ *
4
+ * Detects whether content is JSX, MDX/Markdown, or plain HTML
5
+ * based on heuristics. Used by the browser runtime to select
6
+ * the appropriate rendering pipeline.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ /**
11
+ * Content types supported by the browser runtime.
12
+ */
13
+ export type RuntimeContentType = 'jsx' | 'mdx' | 'html' | 'chart' | 'mermaid' | 'flow' | 'math' | 'map' | 'image' | 'video' | 'audio';
14
+ /**
15
+ * Detect the content type of a source string.
16
+ *
17
+ * Priority:
18
+ * 1. Chart JSON
19
+ * 2. Flow JSON
20
+ * 3. Map/GeoJSON
21
+ * 4. Mermaid diagram syntax
22
+ * 5. Math/LaTeX
23
+ * 6. Image URL/data URI
24
+ * 7. Video URL
25
+ * 8. Audio URL
26
+ * 9. JSX
27
+ * 10. MDX/Markdown
28
+ * 11. HTML (fallback)
29
+ *
30
+ * @param content - Source content to analyze
31
+ * @returns Detected content type
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * detectContentType('<Card title="Hello" />'); // 'jsx'
36
+ * detectContentType('# Hello World\n\nSome text'); // 'mdx'
37
+ * detectContentType('<div class="foo">bar</div>'); // 'html'
38
+ * detectContentType('graph TD; A-->B'); // 'mermaid'
39
+ * detectContentType('$$E = mc^2$$'); // 'math'
40
+ * ```
41
+ */
42
+ export declare function detectContentType(content: string): RuntimeContentType;
43
+ //# sourceMappingURL=content-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-detector.d.ts","sourceRoot":"","sources":["../../src/runtime/content-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAsHZ;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CA0CrE"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @frontmcp/ui Runtime Module
3
+ *
4
+ * Client-side utilities for content detection and JSX transpilation.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { detectContentType, type RuntimeContentType } from './content-detector';
9
+ export { transpileJsx, loadBabel, isBabelLoaded, resetBabelState, BABEL_STANDALONE_CDN, BABEL_STANDALONE_FALLBACK_CDN, } from './babel-runtime';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMhF,OAAO,EACL,YAAY,EACZ,SAAS,EACT,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // libs/ui/src/runtime/index.ts
21
+ var runtime_exports = {};
22
+ __export(runtime_exports, {
23
+ BABEL_STANDALONE_CDN: () => BABEL_STANDALONE_CDN,
24
+ BABEL_STANDALONE_FALLBACK_CDN: () => BABEL_STANDALONE_FALLBACK_CDN,
25
+ detectContentType: () => detectContentType,
26
+ isBabelLoaded: () => isBabelLoaded,
27
+ loadBabel: () => loadBabel,
28
+ resetBabelState: () => resetBabelState,
29
+ transpileJsx: () => transpileJsx
30
+ });
31
+ module.exports = __toCommonJS(runtime_exports);
32
+
33
+ // libs/ui/src/runtime/content-detector.ts
34
+ var JSX_PATTERNS = [
35
+ // JSX-specific syntax: self-closing tags with capitalized names
36
+ /<[A-Z][a-zA-Z0-9]*[\s/>]/,
37
+ // JSX expressions: {someVar} or {() => ...}
38
+ /\{[a-zA-Z_$][\w$.]*\}/,
39
+ // React hooks: useState, useEffect, etc.
40
+ /\buse[A-Z]\w+\s*\(/,
41
+ // Arrow function components or function declarations: const Foo = / function Foo(
42
+ /(?:const|let|var|function)\s+[A-Z]\w*\s*[=(]/,
43
+ // Import from react
44
+ /import\s[^\n]{1,200}from\s+['"]react['"]/,
45
+ // JSX pragma or import
46
+ /\/\*\*?\s*@jsx\b/,
47
+ // export default function/const (component pattern)
48
+ /export\s+default\s+function\s+[A-Z]/
49
+ ];
50
+ var MDX_PATTERNS = [
51
+ // MDX frontmatter
52
+ /^---\s*\n/,
53
+ // Markdown headings
54
+ /^#{1,6}\s+\S/m,
55
+ // MDX import statements followed by markdown
56
+ /^import\s[^\n]*\n+#/m,
57
+ // MDX export default (layout pattern)
58
+ /^export\s+default\s+/m,
59
+ // Markdown bullet lists
60
+ /^\s*[-*+]\s+\S/m,
61
+ // Markdown links
62
+ /\[[^\]]+\]\([^)]+\)/,
63
+ // Markdown code blocks
64
+ /^```\w*/m,
65
+ // Markdown emphasis
66
+ /(?:\*\*|__)(?:(?!\*\*|__).)+(?:\*\*|__)/
67
+ ];
68
+ var CHART_TYPE_RE = /"type"\s*:\s*"(?:bar|line|area|pie|scatter|radar|composed)"/;
69
+ var MERMAID_PATTERN = /^\s*(?:graph|sequenceDiagram|classDiagram|stateDiagram|flowchart|erDiagram|gantt|pie|journey|gitGraph)\b/;
70
+ function looksLikeChart(s) {
71
+ return s.charCodeAt(0) === 123 && CHART_TYPE_RE.test(s) && s.includes('"data"');
72
+ }
73
+ function looksLikeFlow(s) {
74
+ return s.charCodeAt(0) === 123 && s.includes('"nodes"') && s.includes('"edges"');
75
+ }
76
+ var MATH_PATTERNS = [
77
+ /\$\$(?:[^$]|\$(?!\$))+\$\$/s,
78
+ /\$[^$\n]+?\$/,
79
+ /\\\[(?:[^\\]|\\.)*\\\]/s,
80
+ /\\\((?:[^\\]|\\.)*\\\)/s,
81
+ /\\begin\{(?:equation|align|gather|matrix|pmatrix|bmatrix|cases)\}/
82
+ ];
83
+ var GEOJSON_TYPE_RE = /"type"\s*:\s*"(?:FeatureCollection|Feature|Point|LineString|Polygon|MultiPoint|MultiLineString|MultiPolygon|GeometryCollection)"/;
84
+ function looksLikeMap(s) {
85
+ return s.charCodeAt(0) === 123 && GEOJSON_TYPE_RE.test(s);
86
+ }
87
+ var IMAGE_PATTERNS = [
88
+ /^data:image\/(?:png|jpeg|jpg|gif|webp|svg\+xml)[;,]/,
89
+ /^https?:\/\/[^?#\s]+\.(?:png|jpe?g|gif|webp|svg|avif|ico)(?:\?[^#\s]*)?$/i
90
+ ];
91
+ var VIDEO_PATTERNS = [
92
+ /^https?:\/\/[^?#\s]+\.(?:mp4|webm|ogg|mov)(?:\?[^#\s]*)?$/i,
93
+ /^https?:\/\/(?:www\.)?(?:youtube\.com|youtu\.be|vimeo\.com)\//i,
94
+ /^data:video\//
95
+ ];
96
+ var AUDIO_PATTERNS = [
97
+ /^https?:\/\/[^?#\s]+\.(?:mp3|wav|ogg|aac|flac|m4a)(?:\?[^#\s]*)?$/i,
98
+ /^https?:\/\/(?:www\.)?soundcloud\.com\//i,
99
+ /^data:audio\//
100
+ ];
101
+ function detectContentType(content) {
102
+ if (!content || typeof content !== "string") {
103
+ return "html";
104
+ }
105
+ const trimmed = content.trim();
106
+ if (looksLikeChart(trimmed)) return "chart";
107
+ if (looksLikeFlow(trimmed)) return "flow";
108
+ if (looksLikeMap(trimmed)) return "map";
109
+ if (MERMAID_PATTERN.test(trimmed)) return "mermaid";
110
+ if (MATH_PATTERNS.some((p) => p.test(trimmed))) return "math";
111
+ if (IMAGE_PATTERNS.some((p) => p.test(trimmed))) return "image";
112
+ if (VIDEO_PATTERNS.some((p) => p.test(trimmed))) return "video";
113
+ if (AUDIO_PATTERNS.some((p) => p.test(trimmed))) return "audio";
114
+ const jsxScore = countMatches(trimmed, JSX_PATTERNS);
115
+ const mdxScore = countMatches(trimmed, MDX_PATTERNS);
116
+ if (jsxScore > 0 && jsxScore >= mdxScore) {
117
+ return "jsx";
118
+ }
119
+ if (mdxScore >= 2) {
120
+ return "mdx";
121
+ }
122
+ if (mdxScore === 1 && /^import\s+/m.test(trimmed)) {
123
+ return "mdx";
124
+ }
125
+ return "html";
126
+ }
127
+ function countMatches(content, patterns) {
128
+ let count = 0;
129
+ for (const pattern of patterns) {
130
+ if (pattern.test(content)) {
131
+ count++;
132
+ }
133
+ }
134
+ return count;
135
+ }
136
+
137
+ // libs/ui/src/runtime/babel-runtime.ts
138
+ var BABEL_STANDALONE_CDN = "https://esm.sh/@babel/standalone@7";
139
+ var BABEL_STANDALONE_FALLBACK_CDN = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.10/babel.min.js";
140
+ var babelState = { status: "idle" };
141
+ async function loadBabel() {
142
+ if (babelState.status === "loaded") {
143
+ return babelState.babel;
144
+ }
145
+ if (babelState.status === "loading") {
146
+ return babelState.promise;
147
+ }
148
+ if (babelState.status === "error") {
149
+ throw babelState.error;
150
+ }
151
+ const promise = doLoadBabel();
152
+ babelState = { status: "loading", promise };
153
+ try {
154
+ const babel = await promise;
155
+ babelState = { status: "loaded", babel };
156
+ return babel;
157
+ } catch (error) {
158
+ const err = error instanceof Error ? error : new Error(String(error));
159
+ babelState = { status: "error", error: err };
160
+ throw err;
161
+ }
162
+ }
163
+ async function doLoadBabel() {
164
+ const globalBabel = globalThis["Babel"];
165
+ if (globalBabel && typeof globalBabel.transform === "function") {
166
+ return globalBabel;
167
+ }
168
+ try {
169
+ const module2 = await import(
170
+ /* @vite-ignore */
171
+ /* webpackIgnore: true */
172
+ BABEL_STANDALONE_CDN
173
+ );
174
+ if (module2 && typeof module2.transform === "function") {
175
+ return module2;
176
+ }
177
+ if (module2.default && typeof module2.default.transform === "function") {
178
+ return module2.default;
179
+ }
180
+ } catch {
181
+ }
182
+ return new Promise((resolve, reject) => {
183
+ if (typeof document === "undefined") {
184
+ reject(new Error("Babel Standalone requires a browser environment"));
185
+ return;
186
+ }
187
+ const script = document.createElement("script");
188
+ script.src = BABEL_STANDALONE_FALLBACK_CDN;
189
+ script.crossOrigin = "anonymous";
190
+ script.onload = () => {
191
+ const babel = globalThis["Babel"];
192
+ if (babel && typeof babel.transform === "function") {
193
+ resolve(babel);
194
+ } else {
195
+ reject(new Error("Babel Standalone loaded but transform function not found"));
196
+ }
197
+ };
198
+ script.onerror = () => {
199
+ reject(new Error(`Failed to load Babel Standalone from ${BABEL_STANDALONE_FALLBACK_CDN}`));
200
+ };
201
+ document.head.appendChild(script);
202
+ });
203
+ }
204
+ async function transpileJsx(source, filename = "component.jsx") {
205
+ const babel = await loadBabel();
206
+ const result = babel.transform(source, {
207
+ presets: ["react"],
208
+ filename
209
+ });
210
+ return result.code;
211
+ }
212
+ function isBabelLoaded() {
213
+ return babelState.status === "loaded";
214
+ }
215
+ function resetBabelState() {
216
+ babelState = { status: "idle" };
217
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { FrontMcpThemeProviderProps } from './types';
3
+ export declare function FrontMcpThemeProvider({ theme: themeConfig, children, }: FrontMcpThemeProviderProps): React.ReactElement;
4
+ //# sourceMappingURL=FrontMcpThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrontMcpThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/FrontMcpThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAG1D,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EAAE,WAAW,EAClB,QAAQ,GACT,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CASjD"}
@@ -0,0 +1,9 @@
1
+ import { type Theme } from '@mui/material/styles';
2
+ import type { FrontMcpThemeConfig } from './types';
3
+ declare const SYSTEM_FONT_STACK: string;
4
+ declare const MONO_FONT_STACK: string;
5
+ export declare function createFrontMcpTheme(config?: FrontMcpThemeConfig): Theme;
6
+ export declare const defaultTheme: Theme;
7
+ export declare const darkTheme: Theme;
8
+ export { SYSTEM_FONT_STACK, MONO_FONT_STACK };
9
+ //# sourceMappingURL=create-theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-theme.d.ts","sourceRoot":"","sources":["../../src/theme/create-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,iBAAiB,QAQZ,CAAC;AAEZ,QAAA,MAAM,eAAe,QAQV,CAAC;AAEZ,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,KAAK,CA2CvE;AAED,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAC;AAEzD,eAAO,MAAM,SAAS,EAAE,KAA6C,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { FrontMcpThemeConfig, FrontMcpThemeProviderProps } from './types';
2
+ export { createFrontMcpTheme, defaultTheme, darkTheme, SYSTEM_FONT_STACK, MONO_FONT_STACK } from './create-theme';
3
+ export { FrontMcpThemeProvider } from './FrontMcpThemeProvider';
4
+ export { useFrontMcpTheme } from './use-theme';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}