@frontmcp/ui 0.6.0 → 0.6.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 (650) hide show
  1. package/README.md +140 -362
  2. package/bridge/core/bridge-factory.d.ts +1 -0
  3. package/bridge/core/bridge-factory.d.ts.map +1 -1
  4. package/bridge/index.d.ts +1 -1
  5. package/bridge/index.d.ts.map +1 -1
  6. package/bridge/index.js +39 -881
  7. package/bridge/runtime/index.d.ts +2 -1
  8. package/bridge/runtime/index.d.ts.map +1 -1
  9. package/bundler/browser-components.d.ts +42 -0
  10. package/bundler/browser-components.d.ts.map +1 -0
  11. package/bundler/bundler.d.ts +78 -4
  12. package/bundler/bundler.d.ts.map +1 -1
  13. package/bundler/index.d.ts +8 -8
  14. package/bundler/index.d.ts.map +1 -1
  15. package/bundler/index.js +1411 -2997
  16. package/bundler/types.d.ts +188 -7
  17. package/bundler/types.d.ts.map +1 -1
  18. package/components/alert.schema.d.ts +6 -6
  19. package/components/avatar.schema.d.ts +9 -9
  20. package/components/badge.schema.d.ts +9 -9
  21. package/components/button.schema.d.ts +9 -9
  22. package/components/card.schema.d.ts +7 -7
  23. package/components/form.schema.d.ts +24 -24
  24. package/components/index.js +128 -198
  25. package/components/modal.schema.d.ts +8 -8
  26. package/components/table.schema.d.ts +6 -6
  27. package/esm/bridge/{index.js → index.mjs} +40 -877
  28. package/esm/bundler/index.mjs +3136 -0
  29. package/esm/components/{index.js → index.mjs} +136 -196
  30. package/esm/index.mjs +5450 -0
  31. package/esm/layouts/index.mjs +409 -0
  32. package/esm/package.json +15 -32
  33. package/esm/react/{index.js → index.mjs} +71 -260
  34. package/esm/renderers/index.mjs +611 -0
  35. package/esm/universal/index.mjs +1951 -0
  36. package/esm/web-components/{index.js → index.mjs} +232 -287
  37. package/index.d.ts +22 -41
  38. package/index.d.ts.map +1 -1
  39. package/index.js +4286 -19607
  40. package/layouts/base.d.ts +2 -2
  41. package/layouts/base.d.ts.map +1 -1
  42. package/layouts/index.js +46 -539
  43. package/layouts/presets.d.ts.map +1 -1
  44. package/package.json +15 -32
  45. package/react/Alert.d.ts +1 -2
  46. package/react/Alert.d.ts.map +1 -1
  47. package/react/Badge.d.ts +1 -2
  48. package/react/Badge.d.ts.map +1 -1
  49. package/react/Button.d.ts +1 -2
  50. package/react/Button.d.ts.map +1 -1
  51. package/react/Card.d.ts +1 -2
  52. package/react/Card.d.ts.map +1 -1
  53. package/react/hooks/context.d.ts +1 -1
  54. package/react/hooks/context.d.ts.map +1 -1
  55. package/react/index.d.ts +5 -7
  56. package/react/index.d.ts.map +1 -1
  57. package/react/index.js +55 -269
  58. package/react/types.d.ts +1 -2
  59. package/react/types.d.ts.map +1 -1
  60. package/renderers/index.d.ts +15 -25
  61. package/renderers/index.d.ts.map +1 -1
  62. package/renderers/index.js +393 -1619
  63. package/renderers/mdx.renderer.d.ts +13 -34
  64. package/renderers/mdx.renderer.d.ts.map +1 -1
  65. package/{esm/runtime/adapters → renderers}/react.adapter.d.ts +2 -2
  66. package/renderers/react.adapter.d.ts.map +1 -0
  67. package/renderers/react.renderer.d.ts +25 -16
  68. package/renderers/react.renderer.d.ts.map +1 -1
  69. package/renderers/transpiler.d.ts +49 -0
  70. package/renderers/transpiler.d.ts.map +1 -0
  71. package/universal/cached-runtime.d.ts +25 -1
  72. package/universal/cached-runtime.d.ts.map +1 -1
  73. package/universal/index.js +2037 -0
  74. package/universal/runtime-builder.d.ts.map +1 -1
  75. package/universal/types.d.ts.map +1 -1
  76. package/web-components/elements/fmcp-input.d.ts.map +1 -1
  77. package/web-components/elements/fmcp-select.d.ts.map +1 -1
  78. package/web-components/index.d.ts +0 -1
  79. package/web-components/index.d.ts.map +1 -1
  80. package/web-components/index.js +224 -289
  81. package/adapters/index.d.ts +0 -13
  82. package/adapters/index.d.ts.map +0 -1
  83. package/adapters/index.js +0 -462
  84. package/adapters/platform-meta.d.ts +0 -166
  85. package/adapters/platform-meta.d.ts.map +0 -1
  86. package/adapters/response-builder.d.ts +0 -108
  87. package/adapters/response-builder.d.ts.map +0 -1
  88. package/adapters/serving-mode.d.ts +0 -107
  89. package/adapters/serving-mode.d.ts.map +0 -1
  90. package/base-template/bridge.d.ts +0 -90
  91. package/base-template/bridge.d.ts.map +0 -1
  92. package/base-template/default-base-template.d.ts +0 -92
  93. package/base-template/default-base-template.d.ts.map +0 -1
  94. package/base-template/index.d.ts +0 -15
  95. package/base-template/index.d.ts.map +0 -1
  96. package/base-template/index.js +0 -1398
  97. package/base-template/polyfills.d.ts +0 -31
  98. package/base-template/polyfills.d.ts.map +0 -1
  99. package/base-template/theme-styles.d.ts +0 -74
  100. package/base-template/theme-styles.d.ts.map +0 -1
  101. package/build/cdn-resources.d.ts +0 -243
  102. package/build/cdn-resources.d.ts.map +0 -1
  103. package/build/index.d.ts +0 -295
  104. package/build/index.d.ts.map +0 -1
  105. package/build/index.js +0 -7096
  106. package/build/widget-manifest.d.ts +0 -362
  107. package/build/widget-manifest.d.ts.map +0 -1
  108. package/bundler/cache.d.ts +0 -173
  109. package/bundler/cache.d.ts.map +0 -1
  110. package/bundler/file-cache/component-builder.d.ts +0 -167
  111. package/bundler/file-cache/component-builder.d.ts.map +0 -1
  112. package/bundler/file-cache/hash-calculator.d.ts +0 -155
  113. package/bundler/file-cache/hash-calculator.d.ts.map +0 -1
  114. package/bundler/file-cache/index.d.ts +0 -12
  115. package/bundler/file-cache/index.d.ts.map +0 -1
  116. package/bundler/file-cache/storage/filesystem.d.ts +0 -149
  117. package/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
  118. package/bundler/file-cache/storage/index.d.ts +0 -11
  119. package/bundler/file-cache/storage/index.d.ts.map +0 -1
  120. package/bundler/file-cache/storage/interface.d.ts +0 -152
  121. package/bundler/file-cache/storage/interface.d.ts.map +0 -1
  122. package/bundler/file-cache/storage/redis.d.ts +0 -139
  123. package/bundler/file-cache/storage/redis.d.ts.map +0 -1
  124. package/bundler/sandbox/enclave-adapter.d.ts +0 -121
  125. package/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
  126. package/bundler/sandbox/executor.d.ts +0 -14
  127. package/bundler/sandbox/executor.d.ts.map +0 -1
  128. package/bundler/sandbox/policy.d.ts +0 -62
  129. package/bundler/sandbox/policy.d.ts.map +0 -1
  130. package/dependency/cdn-registry.d.ts +0 -98
  131. package/dependency/cdn-registry.d.ts.map +0 -1
  132. package/dependency/import-map.d.ts +0 -186
  133. package/dependency/import-map.d.ts.map +0 -1
  134. package/dependency/import-parser.d.ts +0 -82
  135. package/dependency/import-parser.d.ts.map +0 -1
  136. package/dependency/index.d.ts +0 -17
  137. package/dependency/index.d.ts.map +0 -1
  138. package/dependency/resolver.d.ts +0 -164
  139. package/dependency/resolver.d.ts.map +0 -1
  140. package/dependency/schemas.d.ts +0 -486
  141. package/dependency/schemas.d.ts.map +0 -1
  142. package/dependency/template-loader.d.ts +0 -204
  143. package/dependency/template-loader.d.ts.map +0 -1
  144. package/dependency/template-processor.d.ts +0 -118
  145. package/dependency/template-processor.d.ts.map +0 -1
  146. package/dependency/types.d.ts +0 -739
  147. package/dependency/types.d.ts.map +0 -1
  148. package/esm/adapters/index.d.ts +0 -13
  149. package/esm/adapters/index.d.ts.map +0 -1
  150. package/esm/adapters/index.js +0 -427
  151. package/esm/adapters/platform-meta.d.ts +0 -166
  152. package/esm/adapters/platform-meta.d.ts.map +0 -1
  153. package/esm/adapters/response-builder.d.ts +0 -108
  154. package/esm/adapters/response-builder.d.ts.map +0 -1
  155. package/esm/adapters/serving-mode.d.ts +0 -107
  156. package/esm/adapters/serving-mode.d.ts.map +0 -1
  157. package/esm/base-template/bridge.d.ts +0 -90
  158. package/esm/base-template/bridge.d.ts.map +0 -1
  159. package/esm/base-template/default-base-template.d.ts +0 -92
  160. package/esm/base-template/default-base-template.d.ts.map +0 -1
  161. package/esm/base-template/index.d.ts +0 -15
  162. package/esm/base-template/index.d.ts.map +0 -1
  163. package/esm/base-template/index.js +0 -1364
  164. package/esm/base-template/polyfills.d.ts +0 -31
  165. package/esm/base-template/polyfills.d.ts.map +0 -1
  166. package/esm/base-template/theme-styles.d.ts +0 -74
  167. package/esm/base-template/theme-styles.d.ts.map +0 -1
  168. package/esm/bridge/adapters/base-adapter.d.ts +0 -104
  169. package/esm/bridge/adapters/base-adapter.d.ts.map +0 -1
  170. package/esm/bridge/adapters/claude.adapter.d.ts +0 -67
  171. package/esm/bridge/adapters/claude.adapter.d.ts.map +0 -1
  172. package/esm/bridge/adapters/ext-apps.adapter.d.ts +0 -143
  173. package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +0 -1
  174. package/esm/bridge/adapters/gemini.adapter.d.ts +0 -64
  175. package/esm/bridge/adapters/gemini.adapter.d.ts.map +0 -1
  176. package/esm/bridge/adapters/generic.adapter.d.ts +0 -56
  177. package/esm/bridge/adapters/generic.adapter.d.ts.map +0 -1
  178. package/esm/bridge/adapters/index.d.ts +0 -26
  179. package/esm/bridge/adapters/index.d.ts.map +0 -1
  180. package/esm/bridge/adapters/openai.adapter.d.ts +0 -65
  181. package/esm/bridge/adapters/openai.adapter.d.ts.map +0 -1
  182. package/esm/bridge/core/adapter-registry.d.ts +0 -122
  183. package/esm/bridge/core/adapter-registry.d.ts.map +0 -1
  184. package/esm/bridge/core/bridge-factory.d.ts +0 -199
  185. package/esm/bridge/core/bridge-factory.d.ts.map +0 -1
  186. package/esm/bridge/core/index.d.ts +0 -10
  187. package/esm/bridge/core/index.d.ts.map +0 -1
  188. package/esm/bridge/index.d.ts +0 -62
  189. package/esm/bridge/index.d.ts.map +0 -1
  190. package/esm/bridge/runtime/iife-generator.d.ts +0 -62
  191. package/esm/bridge/runtime/iife-generator.d.ts.map +0 -1
  192. package/esm/bridge/runtime/index.d.ts +0 -9
  193. package/esm/bridge/runtime/index.d.ts.map +0 -1
  194. package/esm/bridge/types.d.ts +0 -386
  195. package/esm/bridge/types.d.ts.map +0 -1
  196. package/esm/build/cdn-resources.d.ts +0 -243
  197. package/esm/build/cdn-resources.d.ts.map +0 -1
  198. package/esm/build/index.d.ts +0 -295
  199. package/esm/build/index.d.ts.map +0 -1
  200. package/esm/build/index.js +0 -7021
  201. package/esm/build/widget-manifest.d.ts +0 -362
  202. package/esm/build/widget-manifest.d.ts.map +0 -1
  203. package/esm/bundler/bundler.d.ts +0 -208
  204. package/esm/bundler/bundler.d.ts.map +0 -1
  205. package/esm/bundler/cache.d.ts +0 -173
  206. package/esm/bundler/cache.d.ts.map +0 -1
  207. package/esm/bundler/file-cache/component-builder.d.ts +0 -167
  208. package/esm/bundler/file-cache/component-builder.d.ts.map +0 -1
  209. package/esm/bundler/file-cache/hash-calculator.d.ts +0 -155
  210. package/esm/bundler/file-cache/hash-calculator.d.ts.map +0 -1
  211. package/esm/bundler/file-cache/index.d.ts +0 -12
  212. package/esm/bundler/file-cache/index.d.ts.map +0 -1
  213. package/esm/bundler/file-cache/storage/filesystem.d.ts +0 -149
  214. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
  215. package/esm/bundler/file-cache/storage/index.d.ts +0 -11
  216. package/esm/bundler/file-cache/storage/index.d.ts.map +0 -1
  217. package/esm/bundler/file-cache/storage/interface.d.ts +0 -152
  218. package/esm/bundler/file-cache/storage/interface.d.ts.map +0 -1
  219. package/esm/bundler/file-cache/storage/redis.d.ts +0 -139
  220. package/esm/bundler/file-cache/storage/redis.d.ts.map +0 -1
  221. package/esm/bundler/index.d.ts +0 -43
  222. package/esm/bundler/index.d.ts.map +0 -1
  223. package/esm/bundler/index.js +0 -4687
  224. package/esm/bundler/sandbox/enclave-adapter.d.ts +0 -121
  225. package/esm/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
  226. package/esm/bundler/sandbox/executor.d.ts +0 -14
  227. package/esm/bundler/sandbox/executor.d.ts.map +0 -1
  228. package/esm/bundler/sandbox/policy.d.ts +0 -62
  229. package/esm/bundler/sandbox/policy.d.ts.map +0 -1
  230. package/esm/bundler/types.d.ts +0 -702
  231. package/esm/bundler/types.d.ts.map +0 -1
  232. package/esm/components/alert.d.ts +0 -66
  233. package/esm/components/alert.d.ts.map +0 -1
  234. package/esm/components/alert.schema.d.ts +0 -98
  235. package/esm/components/alert.schema.d.ts.map +0 -1
  236. package/esm/components/avatar.d.ts +0 -77
  237. package/esm/components/avatar.d.ts.map +0 -1
  238. package/esm/components/avatar.schema.d.ts +0 -170
  239. package/esm/components/avatar.schema.d.ts.map +0 -1
  240. package/esm/components/badge.d.ts +0 -64
  241. package/esm/components/badge.d.ts.map +0 -1
  242. package/esm/components/badge.schema.d.ts +0 -91
  243. package/esm/components/badge.schema.d.ts.map +0 -1
  244. package/esm/components/button.d.ts +0 -100
  245. package/esm/components/button.d.ts.map +0 -1
  246. package/esm/components/button.schema.d.ts +0 -120
  247. package/esm/components/button.schema.d.ts.map +0 -1
  248. package/esm/components/card.d.ts +0 -53
  249. package/esm/components/card.d.ts.map +0 -1
  250. package/esm/components/card.schema.d.ts +0 -93
  251. package/esm/components/card.schema.d.ts.map +0 -1
  252. package/esm/components/form.d.ts +0 -212
  253. package/esm/components/form.d.ts.map +0 -1
  254. package/esm/components/form.schema.d.ts +0 -365
  255. package/esm/components/form.schema.d.ts.map +0 -1
  256. package/esm/components/index.d.ts +0 -29
  257. package/esm/components/index.d.ts.map +0 -1
  258. package/esm/components/list.d.ts +0 -121
  259. package/esm/components/list.d.ts.map +0 -1
  260. package/esm/components/list.schema.d.ts +0 -129
  261. package/esm/components/list.schema.d.ts.map +0 -1
  262. package/esm/components/modal.d.ts +0 -100
  263. package/esm/components/modal.d.ts.map +0 -1
  264. package/esm/components/modal.schema.d.ts +0 -151
  265. package/esm/components/modal.schema.d.ts.map +0 -1
  266. package/esm/components/table.d.ts +0 -91
  267. package/esm/components/table.d.ts.map +0 -1
  268. package/esm/components/table.schema.d.ts +0 -123
  269. package/esm/components/table.schema.d.ts.map +0 -1
  270. package/esm/dependency/cdn-registry.d.ts +0 -98
  271. package/esm/dependency/cdn-registry.d.ts.map +0 -1
  272. package/esm/dependency/import-map.d.ts +0 -186
  273. package/esm/dependency/import-map.d.ts.map +0 -1
  274. package/esm/dependency/import-parser.d.ts +0 -82
  275. package/esm/dependency/import-parser.d.ts.map +0 -1
  276. package/esm/dependency/index.d.ts +0 -17
  277. package/esm/dependency/index.d.ts.map +0 -1
  278. package/esm/dependency/resolver.d.ts +0 -164
  279. package/esm/dependency/resolver.d.ts.map +0 -1
  280. package/esm/dependency/schemas.d.ts +0 -486
  281. package/esm/dependency/schemas.d.ts.map +0 -1
  282. package/esm/dependency/template-loader.d.ts +0 -204
  283. package/esm/dependency/template-loader.d.ts.map +0 -1
  284. package/esm/dependency/template-processor.d.ts +0 -118
  285. package/esm/dependency/template-processor.d.ts.map +0 -1
  286. package/esm/dependency/types.d.ts +0 -739
  287. package/esm/dependency/types.d.ts.map +0 -1
  288. package/esm/handlebars/expression-extractor.d.ts +0 -147
  289. package/esm/handlebars/expression-extractor.d.ts.map +0 -1
  290. package/esm/handlebars/helpers.d.ts +0 -339
  291. package/esm/handlebars/helpers.d.ts.map +0 -1
  292. package/esm/handlebars/index.d.ts +0 -195
  293. package/esm/handlebars/index.d.ts.map +0 -1
  294. package/esm/handlebars/index.js +0 -587
  295. package/esm/index.d.ts +0 -56
  296. package/esm/index.d.ts.map +0 -1
  297. package/esm/index.js +0 -20511
  298. package/esm/layouts/base.d.ts +0 -86
  299. package/esm/layouts/base.d.ts.map +0 -1
  300. package/esm/layouts/index.d.ts +0 -8
  301. package/esm/layouts/index.d.ts.map +0 -1
  302. package/esm/layouts/index.js +0 -892
  303. package/esm/layouts/presets.d.ts +0 -134
  304. package/esm/layouts/presets.d.ts.map +0 -1
  305. package/esm/pages/consent.d.ts +0 -117
  306. package/esm/pages/consent.d.ts.map +0 -1
  307. package/esm/pages/error.d.ts +0 -101
  308. package/esm/pages/error.d.ts.map +0 -1
  309. package/esm/pages/index.d.ts +0 -9
  310. package/esm/pages/index.d.ts.map +0 -1
  311. package/esm/pages/index.js +0 -1563
  312. package/esm/react/Alert.d.ts +0 -102
  313. package/esm/react/Alert.d.ts.map +0 -1
  314. package/esm/react/Badge.d.ts +0 -101
  315. package/esm/react/Badge.d.ts.map +0 -1
  316. package/esm/react/Button.d.ts +0 -109
  317. package/esm/react/Button.d.ts.map +0 -1
  318. package/esm/react/Card.d.ts +0 -104
  319. package/esm/react/Card.d.ts.map +0 -1
  320. package/esm/react/hooks/context.d.ts +0 -179
  321. package/esm/react/hooks/context.d.ts.map +0 -1
  322. package/esm/react/hooks/index.d.ts +0 -42
  323. package/esm/react/hooks/index.d.ts.map +0 -1
  324. package/esm/react/hooks/tools.d.ts +0 -284
  325. package/esm/react/hooks/tools.d.ts.map +0 -1
  326. package/esm/react/index.d.ts +0 -81
  327. package/esm/react/index.d.ts.map +0 -1
  328. package/esm/react/types.d.ts +0 -106
  329. package/esm/react/types.d.ts.map +0 -1
  330. package/esm/react/utils.d.ts +0 -43
  331. package/esm/react/utils.d.ts.map +0 -1
  332. package/esm/registry/index.d.ts +0 -46
  333. package/esm/registry/index.d.ts.map +0 -1
  334. package/esm/registry/index.js +0 -6422
  335. package/esm/registry/render-template.d.ts +0 -91
  336. package/esm/registry/render-template.d.ts.map +0 -1
  337. package/esm/registry/tool-ui.registry.d.ts +0 -294
  338. package/esm/registry/tool-ui.registry.d.ts.map +0 -1
  339. package/esm/registry/uri-utils.d.ts +0 -56
  340. package/esm/registry/uri-utils.d.ts.map +0 -1
  341. package/esm/render/index.d.ts +0 -8
  342. package/esm/render/index.d.ts.map +0 -1
  343. package/esm/render/prerender.d.ts +0 -57
  344. package/esm/render/prerender.d.ts.map +0 -1
  345. package/esm/renderers/cache.d.ts +0 -145
  346. package/esm/renderers/cache.d.ts.map +0 -1
  347. package/esm/renderers/html.renderer.d.ts +0 -123
  348. package/esm/renderers/html.renderer.d.ts.map +0 -1
  349. package/esm/renderers/index.d.ts +0 -36
  350. package/esm/renderers/index.d.ts.map +0 -1
  351. package/esm/renderers/index.js +0 -1827
  352. package/esm/renderers/mdx.renderer.d.ts +0 -120
  353. package/esm/renderers/mdx.renderer.d.ts.map +0 -1
  354. package/esm/renderers/react.renderer.d.ts +0 -96
  355. package/esm/renderers/react.renderer.d.ts.map +0 -1
  356. package/esm/renderers/registry.d.ts +0 -134
  357. package/esm/renderers/registry.d.ts.map +0 -1
  358. package/esm/renderers/types.d.ts +0 -342
  359. package/esm/renderers/types.d.ts.map +0 -1
  360. package/esm/renderers/utils/detect.d.ts +0 -107
  361. package/esm/renderers/utils/detect.d.ts.map +0 -1
  362. package/esm/renderers/utils/hash.d.ts +0 -40
  363. package/esm/renderers/utils/hash.d.ts.map +0 -1
  364. package/esm/renderers/utils/index.d.ts +0 -9
  365. package/esm/renderers/utils/index.d.ts.map +0 -1
  366. package/esm/renderers/utils/transpiler.d.ts +0 -89
  367. package/esm/renderers/utils/transpiler.d.ts.map +0 -1
  368. package/esm/runtime/adapters/html.adapter.d.ts +0 -59
  369. package/esm/runtime/adapters/html.adapter.d.ts.map +0 -1
  370. package/esm/runtime/adapters/index.d.ts +0 -26
  371. package/esm/runtime/adapters/index.d.ts.map +0 -1
  372. package/esm/runtime/adapters/mdx.adapter.d.ts +0 -73
  373. package/esm/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  374. package/esm/runtime/adapters/react.adapter.d.ts.map +0 -1
  375. package/esm/runtime/adapters/types.d.ts +0 -95
  376. package/esm/runtime/adapters/types.d.ts.map +0 -1
  377. package/esm/runtime/csp.d.ts +0 -48
  378. package/esm/runtime/csp.d.ts.map +0 -1
  379. package/esm/runtime/index.d.ts +0 -17
  380. package/esm/runtime/index.d.ts.map +0 -1
  381. package/esm/runtime/index.js +0 -5186
  382. package/esm/runtime/mcp-bridge.d.ts +0 -101
  383. package/esm/runtime/mcp-bridge.d.ts.map +0 -1
  384. package/esm/runtime/renderer-runtime.d.ts +0 -133
  385. package/esm/runtime/renderer-runtime.d.ts.map +0 -1
  386. package/esm/runtime/sanitizer.d.ts +0 -172
  387. package/esm/runtime/sanitizer.d.ts.map +0 -1
  388. package/esm/runtime/types.d.ts +0 -415
  389. package/esm/runtime/types.d.ts.map +0 -1
  390. package/esm/runtime/wrapper.d.ts +0 -421
  391. package/esm/runtime/wrapper.d.ts.map +0 -1
  392. package/esm/styles/index.d.ts +0 -8
  393. package/esm/styles/index.d.ts.map +0 -1
  394. package/esm/styles/index.js +0 -171
  395. package/esm/styles/variants.d.ts +0 -51
  396. package/esm/styles/variants.d.ts.map +0 -1
  397. package/esm/theme/cdn.d.ts +0 -195
  398. package/esm/theme/cdn.d.ts.map +0 -1
  399. package/esm/theme/index.d.ts +0 -18
  400. package/esm/theme/index.d.ts.map +0 -1
  401. package/esm/theme/index.js +0 -700
  402. package/esm/theme/platforms.d.ts +0 -107
  403. package/esm/theme/platforms.d.ts.map +0 -1
  404. package/esm/theme/presets/github-openai.d.ts +0 -50
  405. package/esm/theme/presets/github-openai.d.ts.map +0 -1
  406. package/esm/theme/presets/index.d.ts +0 -11
  407. package/esm/theme/presets/index.d.ts.map +0 -1
  408. package/esm/theme/theme.d.ts +0 -396
  409. package/esm/theme/theme.d.ts.map +0 -1
  410. package/esm/tool-template/builder.d.ts +0 -213
  411. package/esm/tool-template/builder.d.ts.map +0 -1
  412. package/esm/tool-template/index.d.ts +0 -16
  413. package/esm/tool-template/index.d.ts.map +0 -1
  414. package/esm/tool-template/index.js +0 -3515
  415. package/esm/types/index.d.ts +0 -14
  416. package/esm/types/index.d.ts.map +0 -1
  417. package/esm/types/index.js +0 -75
  418. package/esm/types/ui-config.d.ts +0 -639
  419. package/esm/types/ui-config.d.ts.map +0 -1
  420. package/esm/types/ui-runtime.d.ts +0 -1007
  421. package/esm/types/ui-runtime.d.ts.map +0 -1
  422. package/esm/typings/cache/cache-adapter.d.ts +0 -125
  423. package/esm/typings/cache/cache-adapter.d.ts.map +0 -1
  424. package/esm/typings/cache/index.d.ts +0 -10
  425. package/esm/typings/cache/index.d.ts.map +0 -1
  426. package/esm/typings/cache/memory-cache.d.ts +0 -92
  427. package/esm/typings/cache/memory-cache.d.ts.map +0 -1
  428. package/esm/typings/dts-parser.d.ts +0 -90
  429. package/esm/typings/dts-parser.d.ts.map +0 -1
  430. package/esm/typings/index.d.ts +0 -48
  431. package/esm/typings/index.d.ts.map +0 -1
  432. package/esm/typings/schemas.d.ts +0 -232
  433. package/esm/typings/schemas.d.ts.map +0 -1
  434. package/esm/typings/type-fetcher.d.ts +0 -89
  435. package/esm/typings/type-fetcher.d.ts.map +0 -1
  436. package/esm/typings/types.d.ts +0 -320
  437. package/esm/typings/types.d.ts.map +0 -1
  438. package/esm/universal/UniversalApp.d.ts +0 -108
  439. package/esm/universal/UniversalApp.d.ts.map +0 -1
  440. package/esm/universal/cached-runtime.d.ts +0 -115
  441. package/esm/universal/cached-runtime.d.ts.map +0 -1
  442. package/esm/universal/context.d.ts +0 -122
  443. package/esm/universal/context.d.ts.map +0 -1
  444. package/esm/universal/index.d.ts +0 -57
  445. package/esm/universal/index.d.ts.map +0 -1
  446. package/esm/universal/renderers/html.renderer.d.ts +0 -37
  447. package/esm/universal/renderers/html.renderer.d.ts.map +0 -1
  448. package/esm/universal/renderers/index.d.ts +0 -112
  449. package/esm/universal/renderers/index.d.ts.map +0 -1
  450. package/esm/universal/renderers/markdown.renderer.d.ts +0 -33
  451. package/esm/universal/renderers/markdown.renderer.d.ts.map +0 -1
  452. package/esm/universal/renderers/mdx.renderer.d.ts +0 -38
  453. package/esm/universal/renderers/mdx.renderer.d.ts.map +0 -1
  454. package/esm/universal/renderers/react.renderer.d.ts +0 -46
  455. package/esm/universal/renderers/react.renderer.d.ts.map +0 -1
  456. package/esm/universal/runtime-builder.d.ts +0 -33
  457. package/esm/universal/runtime-builder.d.ts.map +0 -1
  458. package/esm/universal/store.d.ts +0 -135
  459. package/esm/universal/store.d.ts.map +0 -1
  460. package/esm/universal/types.d.ts +0 -199
  461. package/esm/universal/types.d.ts.map +0 -1
  462. package/esm/utils/escape-html.d.ts +0 -58
  463. package/esm/utils/escape-html.d.ts.map +0 -1
  464. package/esm/utils/index.d.ts +0 -10
  465. package/esm/utils/index.d.ts.map +0 -1
  466. package/esm/utils/index.js +0 -40
  467. package/esm/utils/safe-stringify.d.ts +0 -30
  468. package/esm/utils/safe-stringify.d.ts.map +0 -1
  469. package/esm/validation/error-box.d.ts +0 -56
  470. package/esm/validation/error-box.d.ts.map +0 -1
  471. package/esm/validation/index.d.ts +0 -13
  472. package/esm/validation/index.d.ts.map +0 -1
  473. package/esm/validation/index.js +0 -562
  474. package/esm/validation/schema-paths.d.ts +0 -118
  475. package/esm/validation/schema-paths.d.ts.map +0 -1
  476. package/esm/validation/template-validator.d.ts +0 -143
  477. package/esm/validation/template-validator.d.ts.map +0 -1
  478. package/esm/validation/wrapper.d.ts +0 -97
  479. package/esm/validation/wrapper.d.ts.map +0 -1
  480. package/esm/web-components/core/attribute-parser.d.ts +0 -82
  481. package/esm/web-components/core/attribute-parser.d.ts.map +0 -1
  482. package/esm/web-components/core/base-element.d.ts +0 -197
  483. package/esm/web-components/core/base-element.d.ts.map +0 -1
  484. package/esm/web-components/core/index.d.ts +0 -9
  485. package/esm/web-components/core/index.d.ts.map +0 -1
  486. package/esm/web-components/elements/fmcp-alert.d.ts +0 -46
  487. package/esm/web-components/elements/fmcp-alert.d.ts.map +0 -1
  488. package/esm/web-components/elements/fmcp-badge.d.ts +0 -47
  489. package/esm/web-components/elements/fmcp-badge.d.ts.map +0 -1
  490. package/esm/web-components/elements/fmcp-button.d.ts +0 -117
  491. package/esm/web-components/elements/fmcp-button.d.ts.map +0 -1
  492. package/esm/web-components/elements/fmcp-card.d.ts +0 -53
  493. package/esm/web-components/elements/fmcp-card.d.ts.map +0 -1
  494. package/esm/web-components/elements/fmcp-input.d.ts +0 -96
  495. package/esm/web-components/elements/fmcp-input.d.ts.map +0 -1
  496. package/esm/web-components/elements/fmcp-select.d.ts +0 -100
  497. package/esm/web-components/elements/fmcp-select.d.ts.map +0 -1
  498. package/esm/web-components/elements/index.d.ts +0 -13
  499. package/esm/web-components/elements/index.d.ts.map +0 -1
  500. package/esm/web-components/index.d.ts +0 -50
  501. package/esm/web-components/index.d.ts.map +0 -1
  502. package/esm/web-components/register.d.ts +0 -57
  503. package/esm/web-components/register.d.ts.map +0 -1
  504. package/esm/web-components/types.d.ts +0 -122
  505. package/esm/web-components/types.d.ts.map +0 -1
  506. package/esm/widgets/index.d.ts +0 -8
  507. package/esm/widgets/index.d.ts.map +0 -1
  508. package/esm/widgets/index.js +0 -941
  509. package/esm/widgets/progress.d.ts +0 -133
  510. package/esm/widgets/progress.d.ts.map +0 -1
  511. package/esm/widgets/resource.d.ts +0 -163
  512. package/esm/widgets/resource.d.ts.map +0 -1
  513. package/handlebars/expression-extractor.d.ts +0 -147
  514. package/handlebars/expression-extractor.d.ts.map +0 -1
  515. package/handlebars/helpers.d.ts +0 -339
  516. package/handlebars/helpers.d.ts.map +0 -1
  517. package/handlebars/index.d.ts +0 -195
  518. package/handlebars/index.d.ts.map +0 -1
  519. package/handlebars/index.js +0 -666
  520. package/pages/consent.d.ts +0 -117
  521. package/pages/consent.d.ts.map +0 -1
  522. package/pages/error.d.ts +0 -101
  523. package/pages/error.d.ts.map +0 -1
  524. package/pages/index.d.ts +0 -9
  525. package/pages/index.d.ts.map +0 -1
  526. package/pages/index.js +0 -1602
  527. package/react/utils.d.ts +0 -43
  528. package/react/utils.d.ts.map +0 -1
  529. package/registry/index.d.ts +0 -46
  530. package/registry/index.d.ts.map +0 -1
  531. package/registry/index.js +0 -6465
  532. package/registry/render-template.d.ts +0 -91
  533. package/registry/render-template.d.ts.map +0 -1
  534. package/registry/tool-ui.registry.d.ts +0 -294
  535. package/registry/tool-ui.registry.d.ts.map +0 -1
  536. package/registry/uri-utils.d.ts +0 -56
  537. package/registry/uri-utils.d.ts.map +0 -1
  538. package/renderers/cache.d.ts +0 -145
  539. package/renderers/cache.d.ts.map +0 -1
  540. package/renderers/html.renderer.d.ts +0 -123
  541. package/renderers/html.renderer.d.ts.map +0 -1
  542. package/renderers/registry.d.ts +0 -134
  543. package/renderers/registry.d.ts.map +0 -1
  544. package/renderers/types.d.ts +0 -342
  545. package/renderers/types.d.ts.map +0 -1
  546. package/renderers/utils/detect.d.ts +0 -107
  547. package/renderers/utils/detect.d.ts.map +0 -1
  548. package/renderers/utils/hash.d.ts +0 -40
  549. package/renderers/utils/hash.d.ts.map +0 -1
  550. package/renderers/utils/index.d.ts +0 -9
  551. package/renderers/utils/index.d.ts.map +0 -1
  552. package/renderers/utils/transpiler.d.ts +0 -89
  553. package/renderers/utils/transpiler.d.ts.map +0 -1
  554. package/runtime/adapters/html.adapter.d.ts +0 -59
  555. package/runtime/adapters/html.adapter.d.ts.map +0 -1
  556. package/runtime/adapters/index.d.ts +0 -26
  557. package/runtime/adapters/index.d.ts.map +0 -1
  558. package/runtime/adapters/mdx.adapter.d.ts +0 -73
  559. package/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  560. package/runtime/adapters/react.adapter.d.ts +0 -70
  561. package/runtime/adapters/react.adapter.d.ts.map +0 -1
  562. package/runtime/adapters/types.d.ts +0 -95
  563. package/runtime/adapters/types.d.ts.map +0 -1
  564. package/runtime/csp.d.ts +0 -48
  565. package/runtime/csp.d.ts.map +0 -1
  566. package/runtime/index.d.ts +0 -17
  567. package/runtime/index.d.ts.map +0 -1
  568. package/runtime/index.js +0 -5264
  569. package/runtime/mcp-bridge.d.ts +0 -101
  570. package/runtime/mcp-bridge.d.ts.map +0 -1
  571. package/runtime/renderer-runtime.d.ts +0 -133
  572. package/runtime/renderer-runtime.d.ts.map +0 -1
  573. package/runtime/sanitizer.d.ts +0 -172
  574. package/runtime/sanitizer.d.ts.map +0 -1
  575. package/runtime/types.d.ts +0 -415
  576. package/runtime/types.d.ts.map +0 -1
  577. package/runtime/wrapper.d.ts +0 -421
  578. package/runtime/wrapper.d.ts.map +0 -1
  579. package/styles/index.d.ts +0 -8
  580. package/styles/index.d.ts.map +0 -1
  581. package/styles/index.js +0 -222
  582. package/styles/variants.d.ts +0 -51
  583. package/styles/variants.d.ts.map +0 -1
  584. package/theme/cdn.d.ts +0 -195
  585. package/theme/cdn.d.ts.map +0 -1
  586. package/theme/index.d.ts +0 -18
  587. package/theme/index.d.ts.map +0 -1
  588. package/theme/index.js +0 -757
  589. package/theme/platforms.d.ts +0 -107
  590. package/theme/platforms.d.ts.map +0 -1
  591. package/theme/presets/github-openai.d.ts +0 -50
  592. package/theme/presets/github-openai.d.ts.map +0 -1
  593. package/theme/presets/index.d.ts +0 -11
  594. package/theme/presets/index.d.ts.map +0 -1
  595. package/theme/theme.d.ts +0 -396
  596. package/theme/theme.d.ts.map +0 -1
  597. package/tool-template/builder.d.ts +0 -213
  598. package/tool-template/builder.d.ts.map +0 -1
  599. package/tool-template/index.d.ts +0 -16
  600. package/tool-template/index.d.ts.map +0 -1
  601. package/tool-template/index.js +0 -3559
  602. package/types/index.d.ts +0 -14
  603. package/types/index.d.ts.map +0 -1
  604. package/types/index.js +0 -108
  605. package/types/ui-config.d.ts +0 -639
  606. package/types/ui-config.d.ts.map +0 -1
  607. package/types/ui-runtime.d.ts +0 -1007
  608. package/types/ui-runtime.d.ts.map +0 -1
  609. package/typings/cache/cache-adapter.d.ts +0 -125
  610. package/typings/cache/cache-adapter.d.ts.map +0 -1
  611. package/typings/cache/index.d.ts +0 -10
  612. package/typings/cache/index.d.ts.map +0 -1
  613. package/typings/cache/memory-cache.d.ts +0 -92
  614. package/typings/cache/memory-cache.d.ts.map +0 -1
  615. package/typings/dts-parser.d.ts +0 -90
  616. package/typings/dts-parser.d.ts.map +0 -1
  617. package/typings/index.d.ts +0 -48
  618. package/typings/index.d.ts.map +0 -1
  619. package/typings/schemas.d.ts +0 -232
  620. package/typings/schemas.d.ts.map +0 -1
  621. package/typings/type-fetcher.d.ts +0 -89
  622. package/typings/type-fetcher.d.ts.map +0 -1
  623. package/typings/types.d.ts +0 -320
  624. package/typings/types.d.ts.map +0 -1
  625. package/utils/escape-html.d.ts +0 -58
  626. package/utils/escape-html.d.ts.map +0 -1
  627. package/utils/index.d.ts +0 -10
  628. package/utils/index.d.ts.map +0 -1
  629. package/utils/index.js +0 -70
  630. package/utils/safe-stringify.d.ts +0 -30
  631. package/utils/safe-stringify.d.ts.map +0 -1
  632. package/validation/error-box.d.ts +0 -56
  633. package/validation/error-box.d.ts.map +0 -1
  634. package/validation/index.d.ts +0 -13
  635. package/validation/index.d.ts.map +0 -1
  636. package/validation/index.js +0 -603
  637. package/validation/schema-paths.d.ts +0 -118
  638. package/validation/schema-paths.d.ts.map +0 -1
  639. package/validation/template-validator.d.ts +0 -143
  640. package/validation/template-validator.d.ts.map +0 -1
  641. package/validation/wrapper.d.ts +0 -97
  642. package/validation/wrapper.d.ts.map +0 -1
  643. package/widgets/index.d.ts +0 -8
  644. package/widgets/index.d.ts.map +0 -1
  645. package/widgets/index.js +0 -978
  646. package/widgets/progress.d.ts +0 -133
  647. package/widgets/progress.d.ts.map +0 -1
  648. package/widgets/resource.d.ts +0 -163
  649. package/widgets/resource.d.ts.map +0 -1
  650. /package/esm/render/{index.js → index.mjs} +0 -0
@@ -0,0 +1,611 @@
1
+ // libs/ui/src/renderers/react.renderer.ts
2
+ import { isReactComponent, containsJsx, hashString, transpileJsx } from "@frontmcp/uipack/renderers";
3
+ var VALID_JS_IDENTIFIER = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
4
+ function isValidComponentName(name) {
5
+ return VALID_JS_IDENTIFIER.test(name);
6
+ }
7
+ function sanitizeComponentName(name) {
8
+ if (isValidComponentName(name)) {
9
+ return name;
10
+ }
11
+ const sanitized = name.replace(/[^a-zA-Z0-9_$]/g, "_").replace(/^[0-9]/, "_$&");
12
+ return sanitized || "Component";
13
+ }
14
+ var REACT_CDN = {
15
+ react: "https://esm.sh/react@19",
16
+ reactDom: "https://esm.sh/react-dom@19/client"
17
+ };
18
+ var INLINE_REACT_PLACEHOLDER = `
19
+ // React runtime not available inline yet.
20
+ // For blocked-network platforms, use pre-rendered HTML templates.
21
+ console.warn('[FrontMCP] React hydration not available on this platform.');
22
+ `;
23
+ var ReactRenderer = class {
24
+ type = "react";
25
+ priority = 20;
26
+ // Higher priority than HTML
27
+ /**
28
+ * Check if this renderer can handle the given template.
29
+ *
30
+ * Accepts:
31
+ * - React component functions (imported, already transpiled)
32
+ * - Strings containing JSX syntax
33
+ */
34
+ canHandle(template) {
35
+ if (typeof template === "function" && isReactComponent(template)) {
36
+ return true;
37
+ }
38
+ if (typeof template === "string" && containsJsx(template)) {
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+ /**
44
+ * Transpile the template if needed.
45
+ *
46
+ * For imported React components, no transpilation is needed.
47
+ * For JSX strings, SWC transpilation is performed.
48
+ */
49
+ async transpile(template, options) {
50
+ if (typeof template === "function") {
51
+ const hash = hashString(template.toString());
52
+ return {
53
+ code: "",
54
+ // No transpiled code for already-compiled components
55
+ hash,
56
+ cached: true
57
+ };
58
+ }
59
+ if (typeof template === "string") {
60
+ return transpileJsx(template, {
61
+ development: options?.sourceMaps ?? false
62
+ });
63
+ }
64
+ throw new Error("Invalid template type for ReactRenderer");
65
+ }
66
+ /**
67
+ * Render the template to HTML for client-side rendering.
68
+ *
69
+ * Unlike SSR, this method generates HTML that will be rendered
70
+ * client-side by React in the browser. No server-side React required.
71
+ *
72
+ * The generated HTML includes:
73
+ * - A container div for the React root
74
+ * - The component code (transpiled if needed)
75
+ * - Props embedded as a data attribute
76
+ * - A render script that initializes the component
77
+ */
78
+ async render(template, context, _options) {
79
+ const props = {
80
+ input: context.input,
81
+ output: context.output,
82
+ structuredContent: context.structuredContent,
83
+ helpers: context.helpers
84
+ };
85
+ const escapedProps = JSON.stringify(props).replace(/&/g, "&amp;").replace(/'/g, "&#39;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
86
+ const rootId = `frontmcp-react-${hashString(Date.now().toString()).slice(0, 8)}`;
87
+ let componentCode;
88
+ let componentName;
89
+ if (typeof template === "function") {
90
+ const rawName = template.name || "Component";
91
+ componentName = sanitizeComponentName(rawName);
92
+ componentCode = `
93
+ // Component should be registered via window.__frontmcp_components['${componentName}']
94
+ (function() {
95
+ if (!window.__frontmcp_components || !window.__frontmcp_components['${componentName}']) {
96
+ console.error('[FrontMCP] Component "${componentName}" not registered. Use buildHydrationScript() to register components.');
97
+ }
98
+ })();
99
+ `;
100
+ } else if (typeof template === "string") {
101
+ const transpiled = await this.transpile(template);
102
+ const match = transpiled.code.match(/function\s+(\w+)/);
103
+ const rawName = match?.[1] || "Widget";
104
+ componentName = sanitizeComponentName(rawName);
105
+ componentCode = transpiled.code;
106
+ } else {
107
+ throw new Error("Invalid template type for ReactRenderer");
108
+ }
109
+ const html = `
110
+ <div id="${rootId}" data-frontmcp-react data-component="${componentName}" data-props='${escapedProps}'>
111
+ <div class="flex items-center justify-center p-4 text-gray-500">
112
+ <svg class="animate-spin h-5 w-5 mr-2" viewBox="0 0 24 24">
113
+ <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" fill="none"></circle>
114
+ <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
115
+ </svg>
116
+ Loading...
117
+ </div>
118
+ </div>
119
+ <script type="module">
120
+ (function() {
121
+ ${componentCode}
122
+
123
+ // Wait for React to be available
124
+ function waitForReact(callback, maxAttempts) {
125
+ var attempts = 0;
126
+ var check = function() {
127
+ if (typeof React !== 'undefined' && typeof ReactDOM !== 'undefined') {
128
+ callback();
129
+ } else if (attempts < maxAttempts) {
130
+ attempts++;
131
+ setTimeout(check, 50);
132
+ } else {
133
+ console.error('[FrontMCP] React not loaded after ' + maxAttempts + ' attempts');
134
+ }
135
+ };
136
+ check();
137
+ }
138
+
139
+ waitForReact(function() {
140
+ try {
141
+ var root = document.getElementById('${rootId}');
142
+ if (!root) return;
143
+
144
+ var propsJson = root.getAttribute('data-props');
145
+ var props = propsJson ? JSON.parse(propsJson.replace(/&amp;/g, '&').replace(/&#39;/g, "'").replace(/&lt;/g, '<').replace(/&gt;/g, '>')) : {};
146
+
147
+ // Get the component
148
+ var Component = ${componentName};
149
+
150
+ // Check if it's registered globally
151
+ if (typeof Component === 'undefined' && window.__frontmcp_components) {
152
+ Component = window.__frontmcp_components['${componentName}'];
153
+ }
154
+
155
+ if (typeof Component === 'function') {
156
+ var element = React.createElement(Component, props);
157
+ var reactRoot = ReactDOM.createRoot(root);
158
+ reactRoot.render(element);
159
+ } else {
160
+ console.error('[FrontMCP] Component "${componentName}" not found');
161
+ }
162
+ } catch (err) {
163
+ console.error('[FrontMCP] React render error:', err);
164
+ }
165
+ }, 100);
166
+ })();
167
+ </script>
168
+ `;
169
+ return html.trim();
170
+ }
171
+ /**
172
+ * Get runtime scripts for client-side functionality.
173
+ */
174
+ getRuntimeScripts(platform) {
175
+ if (platform.networkMode === "blocked") {
176
+ return {
177
+ headScripts: "",
178
+ inlineScripts: INLINE_REACT_PLACEHOLDER,
179
+ isInline: true
180
+ };
181
+ }
182
+ return {
183
+ headScripts: `
184
+ <script crossorigin src="${REACT_CDN.react}"></script>
185
+ <script crossorigin src="${REACT_CDN.reactDom}"></script>
186
+ `,
187
+ isInline: false
188
+ };
189
+ }
190
+ };
191
+ var reactRenderer = new ReactRenderer();
192
+
193
+ // libs/ui/src/renderers/react.adapter.ts
194
+ var mountedRoots = /* @__PURE__ */ new WeakMap();
195
+ var ReactRendererAdapter = class {
196
+ type = "react";
197
+ // Lazy-loaded React runtime
198
+ react = null;
199
+ reactDOM = null;
200
+ loadPromise = null;
201
+ /**
202
+ * Check if this adapter can handle the given content.
203
+ */
204
+ canHandle(content) {
205
+ if (typeof content === "function") {
206
+ return true;
207
+ }
208
+ if (typeof content === "string") {
209
+ return content.includes("React.createElement") || content.includes("jsx(") || content.includes("jsxs(") || /function\s+\w+\s*\([^)]*\)\s*\{[\s\S]*return\s*[\s\S]*</.test(content);
210
+ }
211
+ return false;
212
+ }
213
+ /**
214
+ * Render React component to a string.
215
+ * This is a client-side fallback - SSR should be done at build time.
216
+ */
217
+ async render(content, context, _options) {
218
+ return `<div data-frontmcp-react data-tool="${context.toolName}">${content}</div>`;
219
+ }
220
+ /**
221
+ * Render React component directly to the DOM.
222
+ */
223
+ async renderToDOM(content, target, context, options) {
224
+ try {
225
+ await this.ensureReactLoaded();
226
+ if (!this.react || !this.reactDOM) {
227
+ throw new Error("React runtime not available");
228
+ }
229
+ const componentName = target.getAttribute("data-component");
230
+ const component = this.getComponent(componentName, content);
231
+ if (!component) {
232
+ target.innerHTML = content;
233
+ return { success: true };
234
+ }
235
+ const element = this.react.createElement(component, {
236
+ input: context.input,
237
+ output: context.output,
238
+ structuredContent: context.structuredContent,
239
+ toolName: context.toolName
240
+ });
241
+ if (options?.hydrate && this.reactDOM.hydrateRoot) {
242
+ const root = this.reactDOM.hydrateRoot(target, element);
243
+ mountedRoots.set(target, root);
244
+ } else if (this.reactDOM.createRoot) {
245
+ const root = this.reactDOM.createRoot(target);
246
+ root.render(element);
247
+ mountedRoots.set(target, root);
248
+ } else if (this.reactDOM.render) {
249
+ this.reactDOM.render(element, target);
250
+ mountedRoots.set(target, {
251
+ unmount: () => this.reactDOM?.unmountComponentAtNode?.(target)
252
+ });
253
+ } else {
254
+ throw new Error("No suitable React render method available");
255
+ }
256
+ target.dispatchEvent(
257
+ new CustomEvent("frontmcp:rendered", {
258
+ bubbles: true,
259
+ detail: { type: "react", toolName: context.toolName }
260
+ })
261
+ );
262
+ return { success: true };
263
+ } catch (error) {
264
+ const message = error instanceof Error ? error.message : String(error);
265
+ console.error("[FrontMCP] React render failed:", message);
266
+ return { success: false, error: message };
267
+ }
268
+ }
269
+ /**
270
+ * Hydrate existing SSR content with React.
271
+ */
272
+ async hydrate(target, context, options) {
273
+ return this.renderToDOM("", target, context, { ...options, hydrate: true });
274
+ }
275
+ /**
276
+ * Update rendered React component with new data.
277
+ */
278
+ async update(target, context) {
279
+ try {
280
+ await this.ensureReactLoaded();
281
+ if (!this.react) {
282
+ throw new Error("React runtime not available");
283
+ }
284
+ const existingRoot = mountedRoots.get(target);
285
+ const componentName = target.getAttribute("data-component");
286
+ const component = this.getComponent(componentName, "");
287
+ if (!component) {
288
+ return { success: false, error: "No component found for update" };
289
+ }
290
+ const element = this.react.createElement(component, {
291
+ input: context.input,
292
+ output: context.output,
293
+ structuredContent: context.structuredContent,
294
+ toolName: context.toolName
295
+ });
296
+ if (existingRoot && "render" in existingRoot) {
297
+ existingRoot.render(element);
298
+ return { success: true };
299
+ }
300
+ return this.renderToDOM("", target, context);
301
+ } catch (error) {
302
+ const message = error instanceof Error ? error.message : String(error);
303
+ console.error("[FrontMCP] React update failed:", message);
304
+ return { success: false, error: message };
305
+ }
306
+ }
307
+ /**
308
+ * Clean up React root.
309
+ */
310
+ destroy(target) {
311
+ const root = mountedRoots.get(target);
312
+ if (root) {
313
+ root.unmount();
314
+ mountedRoots.delete(target);
315
+ }
316
+ }
317
+ /**
318
+ * Ensure React is loaded.
319
+ */
320
+ async ensureReactLoaded() {
321
+ if (this.react && this.reactDOM) {
322
+ return;
323
+ }
324
+ if (this.loadPromise) {
325
+ return this.loadPromise;
326
+ }
327
+ this.loadPromise = this.loadReact();
328
+ return this.loadPromise;
329
+ }
330
+ /**
331
+ * Load React runtime.
332
+ */
333
+ async loadReact() {
334
+ const win = typeof window !== "undefined" ? window : globalThis;
335
+ if (win.React) {
336
+ this.react = win.React;
337
+ }
338
+ if (win.ReactDOM) {
339
+ this.reactDOM = win.ReactDOM;
340
+ }
341
+ if (this.react && this.reactDOM) {
342
+ return;
343
+ }
344
+ try {
345
+ if (!this.react) {
346
+ const reactModule = await import(
347
+ /* webpackIgnore: true */
348
+ "react"
349
+ );
350
+ this.react = reactModule.default || reactModule;
351
+ }
352
+ if (!this.reactDOM) {
353
+ const reactDOMModule = await import(
354
+ /* webpackIgnore: true */
355
+ "react-dom/client"
356
+ );
357
+ this.reactDOM = reactDOMModule.default || reactDOMModule;
358
+ }
359
+ } catch {
360
+ if (!this.react || !this.reactDOM) {
361
+ console.warn("[FrontMCP] React runtime not available. Ensure React is loaded via CDN or bundled.");
362
+ }
363
+ }
364
+ }
365
+ /**
366
+ * Get a React component by name or from content.
367
+ */
368
+ getComponent(componentName, content) {
369
+ const win = typeof window !== "undefined" ? window : globalThis;
370
+ if (componentName && win.__frontmcp_components) {
371
+ const registered = win.__frontmcp_components?.[componentName];
372
+ if (registered) {
373
+ return registered;
374
+ }
375
+ }
376
+ if (content && typeof content === "function") {
377
+ return content;
378
+ }
379
+ return null;
380
+ }
381
+ };
382
+ function createReactAdapter() {
383
+ return new ReactRendererAdapter();
384
+ }
385
+ async function loadReactAdapter() {
386
+ return createReactAdapter();
387
+ }
388
+
389
+ // libs/ui/src/renderers/mdx.renderer.ts
390
+ import { containsMdxSyntax, hashString as hashString2, transpileCache, componentCache } from "@frontmcp/uipack/renderers";
391
+ function buildReactCdnUrls(version = "19") {
392
+ return {
393
+ react: `https://esm.sh/react@${version}`,
394
+ reactDom: `https://esm.sh/react-dom@${version}/client`
395
+ };
396
+ }
397
+ var REACT_CDN2 = buildReactCdnUrls("19");
398
+ var INLINE_MDX_PLACEHOLDER = `
399
+ // MDX runtime not available inline yet.
400
+ // For blocked-network platforms, use pre-rendered HTML templates.
401
+ console.warn('[FrontMCP] MDX hydration not available on this platform.');
402
+ `;
403
+ var MdxRenderer = class {
404
+ type = "mdx";
405
+ priority = 10;
406
+ // Between HTML (0) and React (20)
407
+ /**
408
+ * Lazy-loaded modules.
409
+ */
410
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
411
+ React = null;
412
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
413
+ ReactDOMServer = null;
414
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
415
+ jsxRuntime = null;
416
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
417
+ mdxEvaluate = null;
418
+ /**
419
+ * Check if this renderer can handle the given template.
420
+ *
421
+ * Accepts strings containing MDX syntax (Markdown + JSX).
422
+ */
423
+ canHandle(template) {
424
+ if (typeof template !== "string") {
425
+ return false;
426
+ }
427
+ return containsMdxSyntax(template);
428
+ }
429
+ /**
430
+ * Prepare MDX template for rendering.
431
+ * Caches the template hash for deduplication. Actual MDX compilation
432
+ * happens during render() via @mdx-js/mdx evaluate().
433
+ */
434
+ async transpile(template, _options) {
435
+ const hash = hashString2(template);
436
+ const cached = transpileCache.getByKey(hash);
437
+ if (cached) {
438
+ return { ...cached, cached: true };
439
+ }
440
+ const transpileResult = {
441
+ code: template,
442
+ hash,
443
+ cached: false
444
+ };
445
+ transpileCache.setByKey(hash, transpileResult);
446
+ return transpileResult;
447
+ }
448
+ /**
449
+ * Render MDX template to HTML string.
450
+ *
451
+ * Uses @mdx-js/mdx's evaluate() for clean compilation + execution,
452
+ * then renders the resulting React component to HTML via SSR.
453
+ */
454
+ async render(template, context, options) {
455
+ await this.loadReact();
456
+ await this.loadMdx();
457
+ if (!this.mdxEvaluate) {
458
+ throw new Error("MDX compilation requires @mdx-js/mdx. Install it: npm install @mdx-js/mdx");
459
+ }
460
+ const templateHash = hashString2(template);
461
+ const cacheKey = `mdx-component:${templateHash}`;
462
+ let Content = componentCache.get(cacheKey);
463
+ if (!Content) {
464
+ const result = await this.mdxEvaluate(template, {
465
+ ...this.jsxRuntime,
466
+ Fragment: this.React.Fragment,
467
+ development: false
468
+ });
469
+ Content = result.default;
470
+ componentCache.set(cacheKey, Content);
471
+ }
472
+ const mdxComponents = {
473
+ ...options?.mdxComponents,
474
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
475
+ wrapper: ({ children }) => {
476
+ return this.React.createElement("div", { className: "mdx-content" }, children);
477
+ }
478
+ };
479
+ const props = {
480
+ input: context.input,
481
+ output: context.output,
482
+ structuredContent: context.structuredContent,
483
+ helpers: context.helpers
484
+ };
485
+ const reservedProps = /* @__PURE__ */ new Set(["input", "output", "structuredContent", "helpers", "components"]);
486
+ const outputProps = typeof context.output === "object" && context.output !== null ? Object.fromEntries(Object.entries(context.output).filter(([key]) => !reservedProps.has(key))) : {};
487
+ const spreadProps = {
488
+ ...outputProps,
489
+ ...props
490
+ };
491
+ const element = this.React.createElement(Content, {
492
+ components: mdxComponents,
493
+ ...spreadProps
494
+ });
495
+ const html = this.ReactDOMServer.renderToString(element);
496
+ if (options?.hydrate) {
497
+ const escapedProps = JSON.stringify(props).replace(/&/g, "&amp;").replace(/'/g, "&#39;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
498
+ return `<div data-mdx-hydrate="true" data-props='${escapedProps}'>${html}</div>`;
499
+ }
500
+ return html;
501
+ }
502
+ /**
503
+ * Get runtime scripts for client-side functionality.
504
+ */
505
+ getRuntimeScripts(platform) {
506
+ if (platform.networkMode === "blocked") {
507
+ return {
508
+ headScripts: "",
509
+ inlineScripts: INLINE_MDX_PLACEHOLDER,
510
+ isInline: true
511
+ };
512
+ }
513
+ return {
514
+ headScripts: `
515
+ <script crossorigin src="${REACT_CDN2.react}"></script>
516
+ <script crossorigin src="${REACT_CDN2.reactDom}"></script>
517
+ `,
518
+ isInline: false
519
+ };
520
+ }
521
+ /**
522
+ * Load React and ReactDOMServer modules.
523
+ */
524
+ async loadReact() {
525
+ if (this.React && this.ReactDOMServer && this.jsxRuntime) {
526
+ return;
527
+ }
528
+ try {
529
+ const [react, reactDomServer, jsxRuntime] = await Promise.all([
530
+ import("react"),
531
+ import("react-dom/server"),
532
+ import("react/jsx-runtime")
533
+ ]);
534
+ this.React = react;
535
+ this.ReactDOMServer = reactDomServer;
536
+ this.jsxRuntime = jsxRuntime;
537
+ } catch {
538
+ throw new Error("React is required for MdxRenderer. Install react and react-dom: npm install react react-dom");
539
+ }
540
+ }
541
+ /**
542
+ * Load @mdx-js/mdx evaluate function.
543
+ */
544
+ async loadMdx() {
545
+ if (this.mdxEvaluate) {
546
+ return;
547
+ }
548
+ try {
549
+ const mdx = await import("@mdx-js/mdx");
550
+ this.mdxEvaluate = mdx.evaluate;
551
+ } catch {
552
+ console.warn(
553
+ "[@frontmcp/ui] @mdx-js/mdx not available. MDX rendering disabled. Install @mdx-js/mdx to enable: npm install @mdx-js/mdx"
554
+ );
555
+ }
556
+ }
557
+ };
558
+ var mdxRenderer = new MdxRenderer();
559
+
560
+ // libs/ui/src/renderers/transpiler.ts
561
+ import { transpileJsx as transpileJsx2 } from "@frontmcp/uipack/renderers";
562
+ async function executeTranspiledCode(code, context = {}) {
563
+ let React;
564
+ let jsxRuntime;
565
+ try {
566
+ React = await import("react");
567
+ jsxRuntime = await import("react/jsx-runtime");
568
+ } catch {
569
+ throw new Error("React is required for JSX templates. Install react: npm install react react-dom");
570
+ }
571
+ const exports = {};
572
+ const module = { exports };
573
+ const require2 = (id) => {
574
+ switch (id) {
575
+ case "react":
576
+ return React;
577
+ case "react/jsx-runtime":
578
+ return jsxRuntime;
579
+ case "react/jsx-dev-runtime":
580
+ return jsxRuntime;
581
+ default:
582
+ if (context[id]) {
583
+ return context[id];
584
+ }
585
+ throw new Error(`Module '${id}' not available in JSX template context`);
586
+ }
587
+ };
588
+ try {
589
+ const fn = new Function("exports", "require", "module", "__filename", "__dirname", "React", "context", code);
590
+ fn(exports, require2, module, "template.js", "/", React, context);
591
+ const exportKeys = Object.keys(module.exports);
592
+ return module.exports["default"] || (exportKeys.length > 0 ? module.exports[exportKeys[0]] : null) || module.exports;
593
+ } catch (error) {
594
+ throw new Error(`Failed to execute transpiled JSX: ${error instanceof Error ? error.message : String(error)}`);
595
+ }
596
+ }
597
+ async function transpileAndExecute(source, context = {}) {
598
+ const result = await transpileJsx2(source);
599
+ return executeTranspiledCode(result.code, context);
600
+ }
601
+ export {
602
+ MdxRenderer,
603
+ ReactRenderer,
604
+ ReactRendererAdapter,
605
+ createReactAdapter,
606
+ executeTranspiledCode,
607
+ loadReactAdapter,
608
+ mdxRenderer,
609
+ reactRenderer,
610
+ transpileAndExecute
611
+ };