@frontmcp/ui 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (805) hide show
  1. package/README.md +140 -362
  2. package/bridge/adapters/base-adapter.d.ts +104 -0
  3. package/bridge/adapters/base-adapter.d.ts.map +1 -0
  4. package/bridge/adapters/claude.adapter.d.ts +67 -0
  5. package/bridge/adapters/claude.adapter.d.ts.map +1 -0
  6. package/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  7. package/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  8. package/bridge/adapters/gemini.adapter.d.ts +64 -0
  9. package/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  10. package/bridge/adapters/generic.adapter.d.ts +56 -0
  11. package/bridge/adapters/generic.adapter.d.ts.map +1 -0
  12. package/bridge/adapters/index.d.ts +26 -0
  13. package/bridge/adapters/index.d.ts.map +1 -0
  14. package/bridge/adapters/openai.adapter.d.ts +65 -0
  15. package/bridge/adapters/openai.adapter.d.ts.map +1 -0
  16. package/bridge/core/adapter-registry.d.ts +122 -0
  17. package/bridge/core/adapter-registry.d.ts.map +1 -0
  18. package/bridge/core/bridge-factory.d.ts +199 -0
  19. package/bridge/core/bridge-factory.d.ts.map +1 -0
  20. package/bridge/core/index.d.ts +10 -0
  21. package/bridge/core/index.d.ts.map +1 -0
  22. package/bridge/index.d.ts +62 -0
  23. package/bridge/index.d.ts.map +1 -0
  24. package/bridge/index.js +2540 -0
  25. package/bridge/runtime/iife-generator.d.ts +62 -0
  26. package/bridge/runtime/iife-generator.d.ts.map +1 -0
  27. package/bridge/runtime/index.d.ts +10 -0
  28. package/bridge/runtime/index.d.ts.map +1 -0
  29. package/bridge/types.d.ts +386 -0
  30. package/bridge/types.d.ts.map +1 -0
  31. package/bundler/bundler.d.ts +208 -0
  32. package/bundler/bundler.d.ts.map +1 -0
  33. package/bundler/cache.d.ts +173 -0
  34. package/bundler/cache.d.ts.map +1 -0
  35. package/bundler/file-cache/component-builder.d.ts +167 -0
  36. package/bundler/file-cache/component-builder.d.ts.map +1 -0
  37. package/bundler/file-cache/hash-calculator.d.ts +155 -0
  38. package/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  39. package/bundler/file-cache/index.d.ts +12 -0
  40. package/bundler/file-cache/index.d.ts.map +1 -0
  41. package/bundler/file-cache/storage/filesystem.d.ts +149 -0
  42. package/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  43. package/bundler/file-cache/storage/index.d.ts +11 -0
  44. package/bundler/file-cache/storage/index.d.ts.map +1 -0
  45. package/bundler/file-cache/storage/interface.d.ts +152 -0
  46. package/bundler/file-cache/storage/interface.d.ts.map +1 -0
  47. package/bundler/file-cache/storage/redis.d.ts +139 -0
  48. package/bundler/file-cache/storage/redis.d.ts.map +1 -0
  49. package/bundler/index.d.ts +43 -0
  50. package/bundler/index.d.ts.map +1 -0
  51. package/bundler/index.js +3707 -0
  52. package/bundler/sandbox/enclave-adapter.d.ts +121 -0
  53. package/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  54. package/bundler/sandbox/executor.d.ts +14 -0
  55. package/bundler/sandbox/executor.d.ts.map +1 -0
  56. package/bundler/sandbox/policy.d.ts +62 -0
  57. package/bundler/sandbox/policy.d.ts.map +1 -0
  58. package/bundler/types.d.ts +702 -0
  59. package/bundler/types.d.ts.map +1 -0
  60. package/components/alert.d.ts +66 -0
  61. package/components/alert.d.ts.map +1 -0
  62. package/components/alert.schema.d.ts +98 -0
  63. package/components/alert.schema.d.ts.map +1 -0
  64. package/components/avatar.d.ts +77 -0
  65. package/components/avatar.d.ts.map +1 -0
  66. package/components/avatar.schema.d.ts +170 -0
  67. package/components/avatar.schema.d.ts.map +1 -0
  68. package/components/badge.d.ts +64 -0
  69. package/components/badge.d.ts.map +1 -0
  70. package/components/badge.schema.d.ts +91 -0
  71. package/components/badge.schema.d.ts.map +1 -0
  72. package/components/button.d.ts +100 -0
  73. package/components/button.d.ts.map +1 -0
  74. package/components/button.schema.d.ts +120 -0
  75. package/components/button.schema.d.ts.map +1 -0
  76. package/components/card.d.ts +53 -0
  77. package/components/card.d.ts.map +1 -0
  78. package/components/card.schema.d.ts +93 -0
  79. package/components/card.schema.d.ts.map +1 -0
  80. package/components/form.d.ts +212 -0
  81. package/components/form.d.ts.map +1 -0
  82. package/components/form.schema.d.ts +365 -0
  83. package/components/form.schema.d.ts.map +1 -0
  84. package/components/index.d.ts +29 -0
  85. package/components/index.d.ts.map +1 -0
  86. package/components/index.js +2525 -0
  87. package/components/list.d.ts +121 -0
  88. package/components/list.d.ts.map +1 -0
  89. package/components/list.schema.d.ts +129 -0
  90. package/components/list.schema.d.ts.map +1 -0
  91. package/components/modal.d.ts +100 -0
  92. package/components/modal.d.ts.map +1 -0
  93. package/components/modal.schema.d.ts +151 -0
  94. package/components/modal.schema.d.ts.map +1 -0
  95. package/components/table.d.ts +91 -0
  96. package/components/table.d.ts.map +1 -0
  97. package/components/table.schema.d.ts +123 -0
  98. package/components/table.schema.d.ts.map +1 -0
  99. package/esm/bridge/adapters/base-adapter.d.ts +104 -0
  100. package/esm/bridge/adapters/base-adapter.d.ts.map +1 -0
  101. package/esm/bridge/adapters/claude.adapter.d.ts +67 -0
  102. package/esm/bridge/adapters/claude.adapter.d.ts.map +1 -0
  103. package/esm/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  104. package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  105. package/esm/bridge/adapters/gemini.adapter.d.ts +64 -0
  106. package/esm/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  107. package/esm/bridge/adapters/generic.adapter.d.ts +56 -0
  108. package/esm/bridge/adapters/generic.adapter.d.ts.map +1 -0
  109. package/esm/bridge/adapters/index.d.ts +26 -0
  110. package/esm/bridge/adapters/index.d.ts.map +1 -0
  111. package/esm/bridge/adapters/openai.adapter.d.ts +65 -0
  112. package/esm/bridge/adapters/openai.adapter.d.ts.map +1 -0
  113. package/esm/bridge/core/adapter-registry.d.ts +122 -0
  114. package/esm/bridge/core/adapter-registry.d.ts.map +1 -0
  115. package/esm/bridge/core/bridge-factory.d.ts +199 -0
  116. package/esm/bridge/core/bridge-factory.d.ts.map +1 -0
  117. package/esm/bridge/core/index.d.ts +10 -0
  118. package/esm/bridge/core/index.d.ts.map +1 -0
  119. package/esm/bridge/index.d.ts +62 -0
  120. package/esm/bridge/index.d.ts.map +1 -0
  121. package/esm/bridge/index.js +2487 -0
  122. package/esm/bridge/runtime/iife-generator.d.ts +62 -0
  123. package/esm/bridge/runtime/iife-generator.d.ts.map +1 -0
  124. package/esm/bridge/runtime/index.d.ts +10 -0
  125. package/esm/bridge/runtime/index.d.ts.map +1 -0
  126. package/esm/bridge/types.d.ts +386 -0
  127. package/esm/bridge/types.d.ts.map +1 -0
  128. package/esm/bundler/bundler.d.ts +208 -0
  129. package/esm/bundler/bundler.d.ts.map +1 -0
  130. package/esm/bundler/cache.d.ts +173 -0
  131. package/esm/bundler/cache.d.ts.map +1 -0
  132. package/esm/bundler/file-cache/component-builder.d.ts +167 -0
  133. package/esm/bundler/file-cache/component-builder.d.ts.map +1 -0
  134. package/esm/bundler/file-cache/hash-calculator.d.ts +155 -0
  135. package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  136. package/esm/bundler/file-cache/index.d.ts +12 -0
  137. package/esm/bundler/file-cache/index.d.ts.map +1 -0
  138. package/esm/bundler/file-cache/storage/filesystem.d.ts +149 -0
  139. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  140. package/esm/bundler/file-cache/storage/index.d.ts +11 -0
  141. package/esm/bundler/file-cache/storage/index.d.ts.map +1 -0
  142. package/esm/bundler/file-cache/storage/interface.d.ts +152 -0
  143. package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -0
  144. package/esm/bundler/file-cache/storage/redis.d.ts +139 -0
  145. package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -0
  146. package/esm/bundler/index.d.ts +43 -0
  147. package/esm/bundler/index.d.ts.map +1 -0
  148. package/esm/bundler/index.js +3640 -0
  149. package/esm/bundler/sandbox/enclave-adapter.d.ts +121 -0
  150. package/esm/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  151. package/esm/bundler/sandbox/executor.d.ts +14 -0
  152. package/esm/bundler/sandbox/executor.d.ts.map +1 -0
  153. package/esm/bundler/sandbox/policy.d.ts +62 -0
  154. package/esm/bundler/sandbox/policy.d.ts.map +1 -0
  155. package/esm/bundler/types.d.ts +702 -0
  156. package/esm/bundler/types.d.ts.map +1 -0
  157. package/esm/components/alert.d.ts +66 -0
  158. package/esm/components/alert.d.ts.map +1 -0
  159. package/esm/components/alert.schema.d.ts +98 -0
  160. package/esm/components/alert.schema.d.ts.map +1 -0
  161. package/esm/components/avatar.d.ts +77 -0
  162. package/esm/components/avatar.d.ts.map +1 -0
  163. package/esm/components/avatar.schema.d.ts +170 -0
  164. package/esm/components/avatar.schema.d.ts.map +1 -0
  165. package/esm/components/badge.d.ts +64 -0
  166. package/esm/components/badge.d.ts.map +1 -0
  167. package/esm/components/badge.schema.d.ts +91 -0
  168. package/esm/components/badge.schema.d.ts.map +1 -0
  169. package/esm/components/button.d.ts +100 -0
  170. package/esm/components/button.d.ts.map +1 -0
  171. package/esm/components/button.schema.d.ts +120 -0
  172. package/esm/components/button.schema.d.ts.map +1 -0
  173. package/esm/components/card.d.ts +53 -0
  174. package/esm/components/card.d.ts.map +1 -0
  175. package/esm/components/card.schema.d.ts +93 -0
  176. package/esm/components/card.schema.d.ts.map +1 -0
  177. package/esm/components/form.d.ts +212 -0
  178. package/esm/components/form.d.ts.map +1 -0
  179. package/esm/components/form.schema.d.ts +365 -0
  180. package/esm/components/form.schema.d.ts.map +1 -0
  181. package/esm/components/index.d.ts +29 -0
  182. package/esm/components/index.d.ts.map +1 -0
  183. package/esm/components/index.js +2396 -0
  184. package/esm/components/list.d.ts +121 -0
  185. package/esm/components/list.d.ts.map +1 -0
  186. package/esm/components/list.schema.d.ts +129 -0
  187. package/esm/components/list.schema.d.ts.map +1 -0
  188. package/esm/components/modal.d.ts +100 -0
  189. package/esm/components/modal.d.ts.map +1 -0
  190. package/esm/components/modal.schema.d.ts +151 -0
  191. package/esm/components/modal.schema.d.ts.map +1 -0
  192. package/esm/components/table.d.ts +91 -0
  193. package/esm/components/table.d.ts.map +1 -0
  194. package/esm/components/table.schema.d.ts +123 -0
  195. package/esm/components/table.schema.d.ts.map +1 -0
  196. package/esm/index.d.ts +40 -0
  197. package/esm/index.d.ts.map +1 -0
  198. package/esm/index.js +8326 -0
  199. package/esm/layouts/base.d.ts +86 -0
  200. package/esm/layouts/base.d.ts.map +1 -0
  201. package/esm/layouts/index.d.ts +8 -0
  202. package/esm/layouts/index.d.ts.map +1 -0
  203. package/esm/layouts/index.js +409 -0
  204. package/esm/layouts/presets.d.ts +134 -0
  205. package/esm/layouts/presets.d.ts.map +1 -0
  206. package/esm/package.json +72 -0
  207. package/esm/pages/consent.d.ts +117 -0
  208. package/esm/pages/consent.d.ts.map +1 -0
  209. package/esm/pages/error.d.ts +101 -0
  210. package/esm/pages/error.d.ts.map +1 -0
  211. package/esm/pages/index.d.ts +9 -0
  212. package/esm/pages/index.d.ts.map +1 -0
  213. package/esm/pages/index.js +1036 -0
  214. package/esm/react/Alert.d.ts +101 -0
  215. package/esm/react/Alert.d.ts.map +1 -0
  216. package/esm/react/Badge.d.ts +100 -0
  217. package/esm/react/Badge.d.ts.map +1 -0
  218. package/esm/react/Button.d.ts +108 -0
  219. package/esm/react/Button.d.ts.map +1 -0
  220. package/esm/react/Card.d.ts +103 -0
  221. package/esm/react/Card.d.ts.map +1 -0
  222. package/esm/react/hooks/context.d.ts +179 -0
  223. package/esm/react/hooks/context.d.ts.map +1 -0
  224. package/esm/react/hooks/index.d.ts +42 -0
  225. package/esm/react/hooks/index.d.ts.map +1 -0
  226. package/esm/react/hooks/tools.d.ts +284 -0
  227. package/esm/react/hooks/tools.d.ts.map +1 -0
  228. package/esm/react/index.d.ts +80 -0
  229. package/esm/react/index.d.ts.map +1 -0
  230. package/esm/react/index.js +3124 -0
  231. package/esm/react/types.d.ts +105 -0
  232. package/esm/react/types.d.ts.map +1 -0
  233. package/esm/react/utils.d.ts +43 -0
  234. package/esm/react/utils.d.ts.map +1 -0
  235. package/esm/render/index.d.ts +8 -0
  236. package/esm/render/index.d.ts.map +1 -0
  237. package/esm/render/index.js +45 -0
  238. package/esm/render/prerender.d.ts +57 -0
  239. package/esm/render/prerender.d.ts.map +1 -0
  240. package/esm/renderers/index.d.ts +21 -0
  241. package/esm/renderers/index.d.ts.map +1 -0
  242. package/esm/renderers/index.js +381 -0
  243. package/esm/renderers/react.adapter.d.ts +70 -0
  244. package/esm/renderers/react.adapter.d.ts.map +1 -0
  245. package/esm/renderers/react.renderer.d.ts +96 -0
  246. package/esm/renderers/react.renderer.d.ts.map +1 -0
  247. package/esm/universal/UniversalApp.d.ts +108 -0
  248. package/esm/universal/UniversalApp.d.ts.map +1 -0
  249. package/esm/universal/cached-runtime.d.ts +115 -0
  250. package/esm/universal/cached-runtime.d.ts.map +1 -0
  251. package/esm/universal/context.d.ts +122 -0
  252. package/esm/universal/context.d.ts.map +1 -0
  253. package/esm/universal/index.d.ts +57 -0
  254. package/esm/universal/index.d.ts.map +1 -0
  255. package/esm/universal/index.js +1755 -0
  256. package/esm/universal/renderers/html.renderer.d.ts +37 -0
  257. package/esm/universal/renderers/html.renderer.d.ts.map +1 -0
  258. package/esm/universal/renderers/index.d.ts +112 -0
  259. package/esm/universal/renderers/index.d.ts.map +1 -0
  260. package/esm/universal/renderers/markdown.renderer.d.ts +33 -0
  261. package/esm/universal/renderers/markdown.renderer.d.ts.map +1 -0
  262. package/esm/universal/renderers/mdx.renderer.d.ts +38 -0
  263. package/esm/universal/renderers/mdx.renderer.d.ts.map +1 -0
  264. package/esm/universal/renderers/react.renderer.d.ts +46 -0
  265. package/esm/universal/renderers/react.renderer.d.ts.map +1 -0
  266. package/esm/universal/runtime-builder.d.ts +33 -0
  267. package/esm/universal/runtime-builder.d.ts.map +1 -0
  268. package/esm/universal/store.d.ts +135 -0
  269. package/esm/universal/store.d.ts.map +1 -0
  270. package/esm/universal/types.d.ts +199 -0
  271. package/esm/universal/types.d.ts.map +1 -0
  272. package/esm/web-components/core/attribute-parser.d.ts +82 -0
  273. package/esm/web-components/core/attribute-parser.d.ts.map +1 -0
  274. package/esm/web-components/core/base-element.d.ts +197 -0
  275. package/esm/web-components/core/base-element.d.ts.map +1 -0
  276. package/esm/web-components/core/index.d.ts +9 -0
  277. package/esm/web-components/core/index.d.ts.map +1 -0
  278. package/esm/web-components/elements/fmcp-alert.d.ts +46 -0
  279. package/esm/web-components/elements/fmcp-alert.d.ts.map +1 -0
  280. package/esm/web-components/elements/fmcp-badge.d.ts +47 -0
  281. package/esm/web-components/elements/fmcp-badge.d.ts.map +1 -0
  282. package/esm/web-components/elements/fmcp-button.d.ts +117 -0
  283. package/esm/web-components/elements/fmcp-button.d.ts.map +1 -0
  284. package/esm/web-components/elements/fmcp-card.d.ts +53 -0
  285. package/esm/web-components/elements/fmcp-card.d.ts.map +1 -0
  286. package/esm/web-components/elements/fmcp-input.d.ts +96 -0
  287. package/esm/web-components/elements/fmcp-input.d.ts.map +1 -0
  288. package/esm/web-components/elements/fmcp-select.d.ts +100 -0
  289. package/esm/web-components/elements/fmcp-select.d.ts.map +1 -0
  290. package/esm/web-components/elements/index.d.ts +13 -0
  291. package/esm/web-components/elements/index.d.ts.map +1 -0
  292. package/esm/web-components/index.d.ts +50 -0
  293. package/esm/web-components/index.d.ts.map +1 -0
  294. package/esm/web-components/index.js +1993 -0
  295. package/esm/web-components/register.d.ts +57 -0
  296. package/esm/web-components/register.d.ts.map +1 -0
  297. package/esm/web-components/types.d.ts +122 -0
  298. package/esm/web-components/types.d.ts.map +1 -0
  299. package/esm/widgets/index.d.ts +8 -0
  300. package/esm/widgets/index.d.ts.map +1 -0
  301. package/esm/widgets/index.js +883 -0
  302. package/esm/widgets/progress.d.ts +133 -0
  303. package/esm/widgets/progress.d.ts.map +1 -0
  304. package/esm/widgets/resource.d.ts +163 -0
  305. package/esm/widgets/resource.d.ts.map +1 -0
  306. package/index.d.ts +40 -0
  307. package/index.d.ts.map +1 -0
  308. package/index.js +8526 -0
  309. package/layouts/base.d.ts +86 -0
  310. package/layouts/base.d.ts.map +1 -0
  311. package/layouts/index.d.ts +8 -0
  312. package/layouts/index.d.ts.map +1 -0
  313. package/layouts/index.js +437 -0
  314. package/layouts/presets.d.ts +134 -0
  315. package/layouts/presets.d.ts.map +1 -0
  316. package/package.json +33 -110
  317. package/pages/consent.d.ts +117 -0
  318. package/pages/consent.d.ts.map +1 -0
  319. package/pages/error.d.ts +101 -0
  320. package/pages/error.d.ts.map +1 -0
  321. package/pages/index.d.ts +9 -0
  322. package/pages/index.d.ts.map +1 -0
  323. package/pages/index.js +1065 -0
  324. package/react/Alert.d.ts +101 -0
  325. package/react/Alert.d.ts.map +1 -0
  326. package/react/Badge.d.ts +100 -0
  327. package/react/Badge.d.ts.map +1 -0
  328. package/react/Button.d.ts +108 -0
  329. package/react/Button.d.ts.map +1 -0
  330. package/react/Card.d.ts +103 -0
  331. package/react/Card.d.ts.map +1 -0
  332. package/react/hooks/context.d.ts +179 -0
  333. package/react/hooks/context.d.ts.map +1 -0
  334. package/react/hooks/index.d.ts +42 -0
  335. package/react/hooks/index.d.ts.map +1 -0
  336. package/react/hooks/tools.d.ts +284 -0
  337. package/react/hooks/tools.d.ts.map +1 -0
  338. package/react/index.d.ts +80 -0
  339. package/react/index.d.ts.map +1 -0
  340. package/react/index.js +3160 -0
  341. package/react/types.d.ts +105 -0
  342. package/react/types.d.ts.map +1 -0
  343. package/react/utils.d.ts +43 -0
  344. package/react/utils.d.ts.map +1 -0
  345. package/render/index.d.ts +8 -0
  346. package/render/index.d.ts.map +1 -0
  347. package/render/index.js +77 -0
  348. package/render/prerender.d.ts +57 -0
  349. package/render/prerender.d.ts.map +1 -0
  350. package/renderers/index.d.ts +21 -0
  351. package/renderers/index.d.ts.map +1 -0
  352. package/renderers/index.js +416 -0
  353. package/renderers/react.adapter.d.ts +70 -0
  354. package/renderers/react.adapter.d.ts.map +1 -0
  355. package/renderers/react.renderer.d.ts +96 -0
  356. package/renderers/react.renderer.d.ts.map +1 -0
  357. package/universal/UniversalApp.d.ts +108 -0
  358. package/universal/UniversalApp.d.ts.map +1 -0
  359. package/universal/cached-runtime.d.ts +115 -0
  360. package/universal/cached-runtime.d.ts.map +1 -0
  361. package/universal/context.d.ts +122 -0
  362. package/universal/context.d.ts.map +1 -0
  363. package/universal/index.d.ts +57 -0
  364. package/universal/index.d.ts.map +1 -0
  365. package/universal/index.js +1841 -0
  366. package/universal/renderers/html.renderer.d.ts +37 -0
  367. package/universal/renderers/html.renderer.d.ts.map +1 -0
  368. package/universal/renderers/index.d.ts +112 -0
  369. package/universal/renderers/index.d.ts.map +1 -0
  370. package/universal/renderers/markdown.renderer.d.ts +33 -0
  371. package/universal/renderers/markdown.renderer.d.ts.map +1 -0
  372. package/universal/renderers/mdx.renderer.d.ts +38 -0
  373. package/universal/renderers/mdx.renderer.d.ts.map +1 -0
  374. package/universal/renderers/react.renderer.d.ts +46 -0
  375. package/universal/renderers/react.renderer.d.ts.map +1 -0
  376. package/universal/runtime-builder.d.ts +33 -0
  377. package/universal/runtime-builder.d.ts.map +1 -0
  378. package/universal/store.d.ts +135 -0
  379. package/universal/store.d.ts.map +1 -0
  380. package/universal/types.d.ts +199 -0
  381. package/universal/types.d.ts.map +1 -0
  382. package/web-components/core/attribute-parser.d.ts +82 -0
  383. package/web-components/core/attribute-parser.d.ts.map +1 -0
  384. package/web-components/core/base-element.d.ts +197 -0
  385. package/web-components/core/base-element.d.ts.map +1 -0
  386. package/web-components/core/index.d.ts +9 -0
  387. package/web-components/core/index.d.ts.map +1 -0
  388. package/web-components/elements/fmcp-alert.d.ts +46 -0
  389. package/web-components/elements/fmcp-alert.d.ts.map +1 -0
  390. package/web-components/elements/fmcp-badge.d.ts +47 -0
  391. package/web-components/elements/fmcp-badge.d.ts.map +1 -0
  392. package/web-components/elements/fmcp-button.d.ts +117 -0
  393. package/web-components/elements/fmcp-button.d.ts.map +1 -0
  394. package/web-components/elements/fmcp-card.d.ts +53 -0
  395. package/web-components/elements/fmcp-card.d.ts.map +1 -0
  396. package/web-components/elements/fmcp-input.d.ts +96 -0
  397. package/web-components/elements/fmcp-input.d.ts.map +1 -0
  398. package/web-components/elements/fmcp-select.d.ts +100 -0
  399. package/web-components/elements/fmcp-select.d.ts.map +1 -0
  400. package/web-components/elements/index.d.ts +13 -0
  401. package/web-components/elements/index.d.ts.map +1 -0
  402. package/web-components/index.d.ts +50 -0
  403. package/web-components/index.d.ts.map +1 -0
  404. package/web-components/index.js +2028 -0
  405. package/web-components/register.d.ts +57 -0
  406. package/web-components/register.d.ts.map +1 -0
  407. package/web-components/types.d.ts +122 -0
  408. package/web-components/types.d.ts.map +1 -0
  409. package/widgets/index.d.ts +8 -0
  410. package/widgets/index.d.ts.map +1 -0
  411. package/widgets/index.js +910 -0
  412. package/widgets/progress.d.ts +133 -0
  413. package/widgets/progress.d.ts.map +1 -0
  414. package/widgets/resource.d.ts +163 -0
  415. package/widgets/resource.d.ts.map +1 -0
  416. package/src/adapters/index.d.ts +0 -10
  417. package/src/adapters/index.js +0 -18
  418. package/src/adapters/index.js.map +0 -1
  419. package/src/adapters/platform-meta.d.ts +0 -165
  420. package/src/adapters/platform-meta.js +0 -310
  421. package/src/adapters/platform-meta.js.map +0 -1
  422. package/src/base-template/bridge.d.ts +0 -89
  423. package/src/base-template/bridge.js +0 -452
  424. package/src/base-template/bridge.js.map +0 -1
  425. package/src/base-template/default-base-template.d.ts +0 -91
  426. package/src/base-template/default-base-template.js +0 -435
  427. package/src/base-template/default-base-template.js.map +0 -1
  428. package/src/base-template/index.d.ts +0 -14
  429. package/src/base-template/index.js +0 -30
  430. package/src/base-template/index.js.map +0 -1
  431. package/src/base-template/polyfills.d.ts +0 -30
  432. package/src/base-template/polyfills.js +0 -190
  433. package/src/base-template/polyfills.js.map +0 -1
  434. package/src/base-template/theme-styles.d.ts +0 -73
  435. package/src/base-template/theme-styles.js +0 -95
  436. package/src/base-template/theme-styles.js.map +0 -1
  437. package/src/bridge/adapters/base-adapter.d.ts +0 -103
  438. package/src/bridge/adapters/base-adapter.js +0 -314
  439. package/src/bridge/adapters/base-adapter.js.map +0 -1
  440. package/src/bridge/adapters/claude.adapter.d.ts +0 -66
  441. package/src/bridge/adapters/claude.adapter.js +0 -145
  442. package/src/bridge/adapters/claude.adapter.js.map +0 -1
  443. package/src/bridge/adapters/ext-apps.adapter.d.ts +0 -142
  444. package/src/bridge/adapters/ext-apps.adapter.js +0 -416
  445. package/src/bridge/adapters/ext-apps.adapter.js.map +0 -1
  446. package/src/bridge/adapters/gemini.adapter.d.ts +0 -63
  447. package/src/bridge/adapters/gemini.adapter.js +0 -160
  448. package/src/bridge/adapters/gemini.adapter.js.map +0 -1
  449. package/src/bridge/adapters/generic.adapter.d.ts +0 -55
  450. package/src/bridge/adapters/generic.adapter.js +0 -108
  451. package/src/bridge/adapters/generic.adapter.js.map +0 -1
  452. package/src/bridge/adapters/index.d.ts +0 -25
  453. package/src/bridge/adapters/index.js +0 -65
  454. package/src/bridge/adapters/index.js.map +0 -1
  455. package/src/bridge/adapters/openai.adapter.d.ts +0 -64
  456. package/src/bridge/adapters/openai.adapter.js +0 -194
  457. package/src/bridge/adapters/openai.adapter.js.map +0 -1
  458. package/src/bridge/core/adapter-registry.d.ts +0 -121
  459. package/src/bridge/core/adapter-registry.js +0 -271
  460. package/src/bridge/core/adapter-registry.js.map +0 -1
  461. package/src/bridge/core/bridge-factory.d.ts +0 -198
  462. package/src/bridge/core/bridge-factory.js +0 -428
  463. package/src/bridge/core/bridge-factory.js.map +0 -1
  464. package/src/bridge/core/index.d.ts +0 -9
  465. package/src/bridge/core/index.js +0 -22
  466. package/src/bridge/core/index.js.map +0 -1
  467. package/src/bridge/index.d.ts +0 -61
  468. package/src/bridge/index.js +0 -94
  469. package/src/bridge/index.js.map +0 -1
  470. package/src/bridge/runtime/iife-generator.d.ts +0 -61
  471. package/src/bridge/runtime/iife-generator.js +0 -940
  472. package/src/bridge/runtime/iife-generator.js.map +0 -1
  473. package/src/bridge/runtime/index.d.ts +0 -8
  474. package/src/bridge/runtime/index.js +0 -16
  475. package/src/bridge/runtime/index.js.map +0 -1
  476. package/src/bridge/types.d.ts +0 -385
  477. package/src/bridge/types.js +0 -11
  478. package/src/bridge/types.js.map +0 -1
  479. package/src/build/cdn-resources.d.ts +0 -140
  480. package/src/build/cdn-resources.js +0 -314
  481. package/src/build/cdn-resources.js.map +0 -1
  482. package/src/build/index.d.ts +0 -294
  483. package/src/build/index.js +0 -325
  484. package/src/build/index.js.map +0 -1
  485. package/src/build/widget-manifest.d.ts +0 -212
  486. package/src/build/widget-manifest.js +0 -652
  487. package/src/build/widget-manifest.js.map +0 -1
  488. package/src/bundler/bundler.d.ts +0 -110
  489. package/src/bundler/bundler.js +0 -432
  490. package/src/bundler/bundler.js.map +0 -1
  491. package/src/bundler/cache.d.ts +0 -172
  492. package/src/bundler/cache.js +0 -250
  493. package/src/bundler/cache.js.map +0 -1
  494. package/src/bundler/index.d.ts +0 -41
  495. package/src/bundler/index.js +0 -73
  496. package/src/bundler/index.js.map +0 -1
  497. package/src/bundler/sandbox/enclave-adapter.d.ts +0 -120
  498. package/src/bundler/sandbox/enclave-adapter.js +0 -339
  499. package/src/bundler/sandbox/enclave-adapter.js.map +0 -1
  500. package/src/bundler/sandbox/executor.d.ts +0 -13
  501. package/src/bundler/sandbox/executor.js +0 -22
  502. package/src/bundler/sandbox/executor.js.map +0 -1
  503. package/src/bundler/sandbox/policy.d.ts +0 -61
  504. package/src/bundler/sandbox/policy.js +0 -238
  505. package/src/bundler/sandbox/policy.js.map +0 -1
  506. package/src/bundler/types.d.ts +0 -347
  507. package/src/bundler/types.js +0 -132
  508. package/src/bundler/types.js.map +0 -1
  509. package/src/components/alert.d.ts +0 -71
  510. package/src/components/alert.js +0 -189
  511. package/src/components/alert.js.map +0 -1
  512. package/src/components/alert.schema.d.ts +0 -114
  513. package/src/components/alert.schema.js +0 -105
  514. package/src/components/alert.schema.js.map +0 -1
  515. package/src/components/avatar.d.ts +0 -76
  516. package/src/components/avatar.js +0 -176
  517. package/src/components/avatar.js.map +0 -1
  518. package/src/components/avatar.schema.d.ts +0 -169
  519. package/src/components/avatar.schema.js +0 -103
  520. package/src/components/avatar.schema.js.map +0 -1
  521. package/src/components/badge.d.ts +0 -70
  522. package/src/components/badge.js +0 -149
  523. package/src/components/badge.js.map +0 -1
  524. package/src/components/badge.schema.d.ts +0 -109
  525. package/src/components/badge.schema.js +0 -96
  526. package/src/components/badge.schema.js.map +0 -1
  527. package/src/components/button.d.ts +0 -111
  528. package/src/components/button.js +0 -336
  529. package/src/components/button.js.map +0 -1
  530. package/src/components/button.schema.d.ts +0 -148
  531. package/src/components/button.schema.js +0 -121
  532. package/src/components/button.schema.js.map +0 -1
  533. package/src/components/card.d.ts +0 -60
  534. package/src/components/card.js +0 -117
  535. package/src/components/card.js.map +0 -1
  536. package/src/components/card.schema.d.ts +0 -113
  537. package/src/components/card.schema.js +0 -98
  538. package/src/components/card.schema.js.map +0 -1
  539. package/src/components/form.d.ts +0 -239
  540. package/src/components/form.js +0 -420
  541. package/src/components/form.js.map +0 -1
  542. package/src/components/form.schema.d.ts +0 -441
  543. package/src/components/form.schema.js +0 -406
  544. package/src/components/form.schema.js.map +0 -1
  545. package/src/components/index.d.ts +0 -29
  546. package/src/components/index.js +0 -98
  547. package/src/components/index.js.map +0 -1
  548. package/src/components/list.d.ts +0 -127
  549. package/src/components/list.js +0 -279
  550. package/src/components/list.js.map +0 -1
  551. package/src/components/list.schema.d.ts +0 -134
  552. package/src/components/list.schema.js +0 -168
  553. package/src/components/list.schema.js.map +0 -1
  554. package/src/components/modal.d.ts +0 -111
  555. package/src/components/modal.js +0 -260
  556. package/src/components/modal.js.map +0 -1
  557. package/src/components/modal.schema.d.ts +0 -186
  558. package/src/components/modal.schema.js +0 -167
  559. package/src/components/modal.schema.js.map +0 -1
  560. package/src/components/table.d.ts +0 -105
  561. package/src/components/table.js +0 -283
  562. package/src/components/table.js.map +0 -1
  563. package/src/components/table.schema.d.ts +0 -159
  564. package/src/components/table.schema.js +0 -173
  565. package/src/components/table.schema.js.map +0 -1
  566. package/src/handlebars/helpers.d.ts +0 -348
  567. package/src/handlebars/helpers.js +0 -605
  568. package/src/handlebars/helpers.js.map +0 -1
  569. package/src/handlebars/index.d.ts +0 -193
  570. package/src/handlebars/index.js +0 -350
  571. package/src/handlebars/index.js.map +0 -1
  572. package/src/index.d.ts +0 -50
  573. package/src/index.js +0 -192
  574. package/src/index.js.map +0 -1
  575. package/src/layouts/base.d.ts +0 -88
  576. package/src/layouts/base.js +0 -227
  577. package/src/layouts/base.js.map +0 -1
  578. package/src/layouts/index.d.ts +0 -7
  579. package/src/layouts/index.js +0 -25
  580. package/src/layouts/index.js.map +0 -1
  581. package/src/layouts/presets.d.ts +0 -133
  582. package/src/layouts/presets.js +0 -277
  583. package/src/layouts/presets.js.map +0 -1
  584. package/src/pages/consent.d.ts +0 -116
  585. package/src/pages/consent.js +0 -218
  586. package/src/pages/consent.js.map +0 -1
  587. package/src/pages/error.d.ts +0 -100
  588. package/src/pages/error.js +0 -263
  589. package/src/pages/error.js.map +0 -1
  590. package/src/pages/index.d.ts +0 -8
  591. package/src/pages/index.js +0 -27
  592. package/src/pages/index.js.map +0 -1
  593. package/src/react/Alert.d.ts +0 -101
  594. package/src/react/Alert.js +0 -51
  595. package/src/react/Alert.js.map +0 -1
  596. package/src/react/Badge.d.ts +0 -100
  597. package/src/react/Badge.js +0 -55
  598. package/src/react/Badge.js.map +0 -1
  599. package/src/react/Button.d.ts +0 -108
  600. package/src/react/Button.js +0 -52
  601. package/src/react/Button.js.map +0 -1
  602. package/src/react/Card.d.ts +0 -103
  603. package/src/react/Card.js +0 -55
  604. package/src/react/Card.js.map +0 -1
  605. package/src/react/hooks/context.d.ts +0 -178
  606. package/src/react/hooks/context.js +0 -287
  607. package/src/react/hooks/context.js.map +0 -1
  608. package/src/react/hooks/index.d.ts +0 -41
  609. package/src/react/hooks/index.js +0 -61
  610. package/src/react/hooks/index.js.map +0 -1
  611. package/src/react/hooks/tools.d.ts +0 -283
  612. package/src/react/hooks/tools.js +0 -465
  613. package/src/react/hooks/tools.js.map +0 -1
  614. package/src/react/index.d.ts +0 -80
  615. package/src/react/index.js +0 -113
  616. package/src/react/index.js.map +0 -1
  617. package/src/react/types.d.ts +0 -105
  618. package/src/react/types.js +0 -12
  619. package/src/react/types.js.map +0 -1
  620. package/src/react/utils.d.ts +0 -42
  621. package/src/react/utils.js +0 -99
  622. package/src/react/utils.js.map +0 -1
  623. package/src/registry/index.d.ts +0 -45
  624. package/src/registry/index.js +0 -67
  625. package/src/registry/index.js.map +0 -1
  626. package/src/registry/render-template.d.ts +0 -86
  627. package/src/registry/render-template.js +0 -239
  628. package/src/registry/render-template.js.map +0 -1
  629. package/src/registry/tool-ui.registry.d.ts +0 -260
  630. package/src/registry/tool-ui.registry.js +0 -438
  631. package/src/registry/tool-ui.registry.js.map +0 -1
  632. package/src/registry/uri-utils.d.ts +0 -55
  633. package/src/registry/uri-utils.js +0 -97
  634. package/src/registry/uri-utils.js.map +0 -1
  635. package/src/render/index.d.ts +0 -7
  636. package/src/render/index.js +0 -14
  637. package/src/render/index.js.map +0 -1
  638. package/src/render/prerender.d.ts +0 -56
  639. package/src/render/prerender.js +0 -98
  640. package/src/render/prerender.js.map +0 -1
  641. package/src/renderers/cache.d.ts +0 -144
  642. package/src/renderers/cache.js +0 -240
  643. package/src/renderers/cache.js.map +0 -1
  644. package/src/renderers/html.renderer.d.ts +0 -122
  645. package/src/renderers/html.renderer.js +0 -204
  646. package/src/renderers/html.renderer.js.map +0 -1
  647. package/src/renderers/index.d.ts +0 -35
  648. package/src/renderers/index.js +0 -70
  649. package/src/renderers/index.js.map +0 -1
  650. package/src/renderers/mdx.renderer.d.ts +0 -119
  651. package/src/renderers/mdx.renderer.js +0 -305
  652. package/src/renderers/mdx.renderer.js.map +0 -1
  653. package/src/renderers/react.renderer.d.ts +0 -95
  654. package/src/renderers/react.renderer.js +0 -260
  655. package/src/renderers/react.renderer.js.map +0 -1
  656. package/src/renderers/registry.d.ts +0 -133
  657. package/src/renderers/registry.js +0 -232
  658. package/src/renderers/registry.js.map +0 -1
  659. package/src/renderers/types.d.ts +0 -341
  660. package/src/renderers/types.js +0 -9
  661. package/src/renderers/types.js.map +0 -1
  662. package/src/renderers/utils/detect.d.ts +0 -106
  663. package/src/renderers/utils/detect.js +0 -267
  664. package/src/renderers/utils/detect.js.map +0 -1
  665. package/src/renderers/utils/hash.d.ts +0 -39
  666. package/src/renderers/utils/hash.js +0 -75
  667. package/src/renderers/utils/hash.js.map +0 -1
  668. package/src/renderers/utils/index.d.ts +0 -8
  669. package/src/renderers/utils/index.js +0 -28
  670. package/src/renderers/utils/index.js.map +0 -1
  671. package/src/renderers/utils/transpiler.d.ts +0 -88
  672. package/src/renderers/utils/transpiler.js +0 -215
  673. package/src/renderers/utils/transpiler.js.map +0 -1
  674. package/src/runtime/adapters/html.adapter.d.ts +0 -58
  675. package/src/runtime/adapters/html.adapter.js +0 -131
  676. package/src/runtime/adapters/html.adapter.js.map +0 -1
  677. package/src/runtime/adapters/index.d.ts +0 -25
  678. package/src/runtime/adapters/index.js +0 -54
  679. package/src/runtime/adapters/index.js.map +0 -1
  680. package/src/runtime/adapters/mdx.adapter.d.ts +0 -72
  681. package/src/runtime/adapters/mdx.adapter.js +0 -241
  682. package/src/runtime/adapters/mdx.adapter.js.map +0 -1
  683. package/src/runtime/adapters/react.adapter.d.ts +0 -69
  684. package/src/runtime/adapters/react.adapter.js +0 -245
  685. package/src/runtime/adapters/react.adapter.js.map +0 -1
  686. package/src/runtime/adapters/types.d.ts +0 -94
  687. package/src/runtime/adapters/types.js +0 -11
  688. package/src/runtime/adapters/types.js.map +0 -1
  689. package/src/runtime/csp.d.ts +0 -37
  690. package/src/runtime/csp.js +0 -140
  691. package/src/runtime/csp.js.map +0 -1
  692. package/src/runtime/index.d.ts +0 -16
  693. package/src/runtime/index.js +0 -72
  694. package/src/runtime/index.js.map +0 -1
  695. package/src/runtime/mcp-bridge.d.ts +0 -100
  696. package/src/runtime/mcp-bridge.js +0 -581
  697. package/src/runtime/mcp-bridge.js.map +0 -1
  698. package/src/runtime/renderer-runtime.d.ts +0 -132
  699. package/src/runtime/renderer-runtime.js +0 -389
  700. package/src/runtime/renderer-runtime.js.map +0 -1
  701. package/src/runtime/sanitizer.d.ts +0 -171
  702. package/src/runtime/sanitizer.js +0 -318
  703. package/src/runtime/sanitizer.js.map +0 -1
  704. package/src/runtime/types.d.ts +0 -414
  705. package/src/runtime/types.js +0 -12
  706. package/src/runtime/types.js.map +0 -1
  707. package/src/runtime/wrapper.d.ts +0 -375
  708. package/src/runtime/wrapper.js +0 -1793
  709. package/src/runtime/wrapper.js.map +0 -1
  710. package/src/styles/index.d.ts +0 -7
  711. package/src/styles/index.js +0 -11
  712. package/src/styles/index.js.map +0 -1
  713. package/src/styles/variants.d.ts +0 -50
  714. package/src/styles/variants.js +0 -175
  715. package/src/styles/variants.js.map +0 -1
  716. package/src/theme/cdn.d.ts +0 -194
  717. package/src/theme/cdn.js +0 -375
  718. package/src/theme/cdn.js.map +0 -1
  719. package/src/theme/index.d.ts +0 -17
  720. package/src/theme/index.js +0 -57
  721. package/src/theme/index.js.map +0 -1
  722. package/src/theme/platforms.d.ts +0 -106
  723. package/src/theme/platforms.js +0 -161
  724. package/src/theme/platforms.js.map +0 -1
  725. package/src/theme/presets/github-openai.d.ts +0 -49
  726. package/src/theme/presets/github-openai.js +0 -189
  727. package/src/theme/presets/github-openai.js.map +0 -1
  728. package/src/theme/presets/index.d.ts +0 -10
  729. package/src/theme/presets/index.js +0 -17
  730. package/src/theme/presets/index.js.map +0 -1
  731. package/src/theme/theme.d.ts +0 -395
  732. package/src/theme/theme.js +0 -332
  733. package/src/theme/theme.js.map +0 -1
  734. package/src/tool-template/builder.d.ts +0 -212
  735. package/src/tool-template/builder.js +0 -397
  736. package/src/tool-template/builder.js.map +0 -1
  737. package/src/tool-template/index.d.ts +0 -15
  738. package/src/tool-template/index.js +0 -38
  739. package/src/tool-template/index.js.map +0 -1
  740. package/src/types/index.d.ts +0 -13
  741. package/src/types/index.js +0 -26
  742. package/src/types/index.js.map +0 -1
  743. package/src/types/ui-config.d.ts +0 -357
  744. package/src/types/ui-config.js +0 -12
  745. package/src/types/ui-config.js.map +0 -1
  746. package/src/types/ui-runtime.d.ts +0 -965
  747. package/src/types/ui-runtime.js +0 -117
  748. package/src/types/ui-runtime.js.map +0 -1
  749. package/src/validation/error-box.d.ts +0 -55
  750. package/src/validation/error-box.js +0 -75
  751. package/src/validation/error-box.js.map +0 -1
  752. package/src/validation/index.d.ts +0 -12
  753. package/src/validation/index.js +0 -21
  754. package/src/validation/index.js.map +0 -1
  755. package/src/validation/wrapper.d.ts +0 -96
  756. package/src/validation/wrapper.js +0 -117
  757. package/src/validation/wrapper.js.map +0 -1
  758. package/src/web-components/core/attribute-parser.d.ts +0 -85
  759. package/src/web-components/core/attribute-parser.js +0 -189
  760. package/src/web-components/core/attribute-parser.js.map +0 -1
  761. package/src/web-components/core/base-element.d.ts +0 -197
  762. package/src/web-components/core/base-element.js +0 -289
  763. package/src/web-components/core/base-element.js.map +0 -1
  764. package/src/web-components/core/index.d.ts +0 -8
  765. package/src/web-components/core/index.js +0 -18
  766. package/src/web-components/core/index.js.map +0 -1
  767. package/src/web-components/elements/fmcp-alert.d.ts +0 -45
  768. package/src/web-components/elements/fmcp-alert.js +0 -93
  769. package/src/web-components/elements/fmcp-alert.js.map +0 -1
  770. package/src/web-components/elements/fmcp-badge.d.ts +0 -46
  771. package/src/web-components/elements/fmcp-badge.js +0 -99
  772. package/src/web-components/elements/fmcp-badge.js.map +0 -1
  773. package/src/web-components/elements/fmcp-button.d.ts +0 -124
  774. package/src/web-components/elements/fmcp-button.js +0 -233
  775. package/src/web-components/elements/fmcp-button.js.map +0 -1
  776. package/src/web-components/elements/fmcp-card.d.ts +0 -52
  777. package/src/web-components/elements/fmcp-card.js +0 -115
  778. package/src/web-components/elements/fmcp-card.js.map +0 -1
  779. package/src/web-components/elements/fmcp-input.d.ts +0 -95
  780. package/src/web-components/elements/fmcp-input.js +0 -248
  781. package/src/web-components/elements/fmcp-input.js.map +0 -1
  782. package/src/web-components/elements/fmcp-select.d.ts +0 -99
  783. package/src/web-components/elements/fmcp-select.js +0 -243
  784. package/src/web-components/elements/fmcp-select.js.map +0 -1
  785. package/src/web-components/elements/index.d.ts +0 -12
  786. package/src/web-components/elements/index.js +0 -34
  787. package/src/web-components/elements/index.js.map +0 -1
  788. package/src/web-components/index.d.ts +0 -49
  789. package/src/web-components/index.js +0 -75
  790. package/src/web-components/index.js.map +0 -1
  791. package/src/web-components/register.d.ts +0 -56
  792. package/src/web-components/register.js +0 -80
  793. package/src/web-components/register.js.map +0 -1
  794. package/src/web-components/types.d.ts +0 -121
  795. package/src/web-components/types.js +0 -25
  796. package/src/web-components/types.js.map +0 -1
  797. package/src/widgets/index.d.ts +0 -7
  798. package/src/widgets/index.js +0 -24
  799. package/src/widgets/index.js.map +0 -1
  800. package/src/widgets/progress.d.ts +0 -132
  801. package/src/widgets/progress.js +0 -303
  802. package/src/widgets/progress.js.map +0 -1
  803. package/src/widgets/resource.d.ts +0 -162
  804. package/src/widgets/resource.js +0 -340
  805. package/src/widgets/resource.js.map +0 -1
@@ -1,294 +0,0 @@
1
- /**
2
- * Build-Time API for Tool UI
3
- *
4
- * Provides pre-compilation capabilities for tool UI templates.
5
- * Produces a **universal HTML document** that works across all platforms:
6
- * - OpenAI ChatGPT (Apps SDK)
7
- * - Anthropic Claude
8
- * - MCP Apps (ext-apps / SEP-1865)
9
- * - Google Gemini
10
- * - Any MCP-compatible host
11
- *
12
- * The build embeds the FrontMCP Bridge which auto-detects the host
13
- * at runtime and adapts its communication protocol accordingly.
14
- *
15
- * @packageDocumentation
16
- */
17
- import type { UITemplateConfig } from '../types';
18
- import type { ThemeConfig, DeepPartial } from '../theme';
19
- /**
20
- * Network access mode for the target environment.
21
- *
22
- * - `'open'`: Can fetch external resources (CDN scripts, fonts)
23
- * - `'blocked'`: Network is sandboxed, must inline everything
24
- */
25
- export type NetworkMode = 'open' | 'blocked';
26
- /**
27
- * Script loading strategy.
28
- *
29
- * - `'cdn'`: Load scripts from CDN (smaller HTML, requires network)
30
- * - `'inline'`: Embed scripts in HTML (larger, works offline)
31
- * - `'auto'`: Choose based on network mode
32
- */
33
- export type ScriptStrategy = 'cdn' | 'inline' | 'auto';
34
- /**
35
- * Build configuration options.
36
- * Capability-based rather than platform-specific.
37
- */
38
- export interface BuildConfig {
39
- /**
40
- * Network access mode.
41
- * @default 'open'
42
- */
43
- network?: NetworkMode;
44
- /**
45
- * Script loading strategy.
46
- * @default 'auto' (uses 'inline' if network is 'blocked')
47
- */
48
- scripts?: ScriptStrategy;
49
- /**
50
- * Whether to include the FrontMCP Bridge runtime.
51
- * The bridge auto-detects the host platform at runtime.
52
- * @default true
53
- */
54
- includeBridge?: boolean;
55
- /**
56
- * Whether to minify the output HTML.
57
- * @default false
58
- */
59
- minify?: boolean;
60
- }
61
- /**
62
- * Options for building a tool UI template.
63
- *
64
- * @example
65
- * ```typescript
66
- * const result = await buildToolUI({
67
- * template: {
68
- * template: (ctx) => `<div>${ctx.output.value}</div>`,
69
- * widgetAccessible: true,
70
- * },
71
- * toolName: 'my_tool',
72
- * input: { query: 'hello' },
73
- * output: { value: 'world' },
74
- * });
75
- *
76
- * // Universal HTML that works on any platform
77
- * console.log(result.html);
78
- * ```
79
- */
80
- export interface BuildOptions<In = unknown, Out = unknown> {
81
- /**
82
- * UI template configuration.
83
- */
84
- template: UITemplateConfig<In, Out>;
85
- /**
86
- * Name of the tool this UI is for.
87
- */
88
- toolName: string;
89
- /**
90
- * Tool input arguments.
91
- */
92
- input?: In;
93
- /**
94
- * Tool output/result data.
95
- */
96
- output?: Out;
97
- /**
98
- * Theme configuration override.
99
- */
100
- theme?: DeepPartial<ThemeConfig>;
101
- /**
102
- * Build configuration.
103
- * Controls network mode, script strategy, etc.
104
- */
105
- config?: BuildConfig;
106
- /**
107
- * Title for the HTML document.
108
- */
109
- title?: string;
110
- /** @deprecated Use `input` instead */
111
- sampleInput?: In;
112
- /** @deprecated Use `output` instead */
113
- sampleOutput?: Out;
114
- /** @deprecated Use `config.includeBridge` instead */
115
- injectAdapters?: boolean;
116
- /** @deprecated Use `config.minify` instead */
117
- minify?: boolean;
118
- /** @deprecated Platform is now auto-detected at runtime */
119
- platform?: string;
120
- }
121
- /**
122
- * MIME types for different host platforms.
123
- * Returned as suggestions - the MCP server response layer decides which to use.
124
- */
125
- export interface MimeTypes {
126
- /** For OpenAI ChatGPT Apps SDK */
127
- openai: 'text/html+skybridge';
128
- /** For Claude, MCP Apps, and standard MCP hosts */
129
- mcp: 'text/html+mcp';
130
- /** Generic HTML (fallback) */
131
- html: 'text/html';
132
- }
133
- /**
134
- * Result of building a tool UI template.
135
- */
136
- export interface BuildResult {
137
- /**
138
- * Complete HTML document string.
139
- * This is universal - works on all platforms.
140
- */
141
- html: string;
142
- /**
143
- * Size of the HTML in bytes.
144
- */
145
- size: number;
146
- /**
147
- * Size of the gzipped HTML in bytes (estimated).
148
- */
149
- gzipSize: number;
150
- /**
151
- * SHA-256 hash of the HTML content.
152
- */
153
- hash: string;
154
- /**
155
- * Suggested MIME types for different hosts.
156
- * The MCP server response layer should select based on detected client.
157
- */
158
- mimeTypes: MimeTypes;
159
- /**
160
- * Renderer type used (html, react, mdx).
161
- */
162
- rendererType: string;
163
- /**
164
- * Build timestamp (ISO 8601).
165
- */
166
- buildTime: string;
167
- /**
168
- * Build configuration used.
169
- */
170
- config: Required<BuildConfig>;
171
- }
172
- /**
173
- * Build a tool UI template into a universal HTML document.
174
- *
175
- * The output HTML:
176
- * - Works on ALL platforms (OpenAI, Claude, MCP Apps, Gemini, etc.)
177
- * - Includes FrontMCP Bridge that auto-detects the host at runtime
178
- * - Adapts communication protocol based on detected platform
179
- *
180
- * @example Basic usage
181
- * ```typescript
182
- * import { buildToolUI } from '@frontmcp/ui/build';
183
- *
184
- * const result = await buildToolUI({
185
- * template: { template: WeatherWidget },
186
- * toolName: 'get_weather',
187
- * output: { temperature: 72, conditions: 'sunny' },
188
- * });
189
- *
190
- * // Upload to CDN - works everywhere
191
- * await uploadToCDN('widgets/get_weather.html', result.html);
192
- * ```
193
- *
194
- * @example With blocked network (for Claude Artifacts)
195
- * ```typescript
196
- * const result = await buildToolUI({
197
- * template: { template: WeatherWidget },
198
- * toolName: 'get_weather',
199
- * config: { network: 'blocked' }, // Inlines all scripts
200
- * });
201
- * ```
202
- *
203
- * @example MCP server response
204
- * ```typescript
205
- * const result = await buildToolUI({ template, toolName, output });
206
- *
207
- * // In MCP server - choose MIME type based on client
208
- * const mimeType = isOpenAIClient(clientInfo)
209
- * ? result.mimeTypes.openai // 'text/html+skybridge'
210
- * : result.mimeTypes.mcp; // 'text/html+mcp'
211
- *
212
- * return { content: [{ type: mimeType, data: result.html }] };
213
- * ```
214
- */
215
- export declare function buildToolUI<In = unknown, Out = unknown>(options: BuildOptions<In, Out>): Promise<BuildResult>;
216
- /**
217
- * Options for building a static widget that reads from host at runtime.
218
- */
219
- export interface StaticWidgetOptions<In = unknown, Out = unknown> {
220
- /**
221
- * UI template configuration.
222
- */
223
- template: UITemplateConfig<In, Out>;
224
- /**
225
- * Name of the tool this UI is for.
226
- */
227
- toolName: string;
228
- /**
229
- * Theme configuration override.
230
- */
231
- theme?: DeepPartial<ThemeConfig>;
232
- /**
233
- * Build configuration.
234
- */
235
- config?: BuildConfig;
236
- /**
237
- * Title for the HTML document.
238
- */
239
- title?: string;
240
- }
241
- /**
242
- * Build a static widget that reads data from the host platform at runtime.
243
- *
244
- * Unlike buildToolUI which pre-renders with data, this creates a widget
245
- * that waits for data from the host platform via the FrontMCP Bridge.
246
- *
247
- * @example
248
- * ```typescript
249
- * import { buildStaticWidget } from '@frontmcp/ui/build';
250
- *
251
- * const widget = await buildStaticWidget({
252
- * template: {
253
- * template: (ctx) => `<div id="weather">${ctx.output?.temperature || 'Loading...'}</div>`,
254
- * },
255
- * toolName: 'get_weather',
256
- * });
257
- *
258
- * // This widget will receive data via FrontMCP Bridge
259
- * await uploadToCDN('widgets/get_weather.html', widget.html);
260
- * ```
261
- */
262
- export declare function buildStaticWidget<In = unknown, Out = unknown>(options: StaticWidgetOptions<In, Out>): Promise<BuildResult>;
263
- /**
264
- * @deprecated Use BuildConfig instead
265
- */
266
- export type BuildTargetPlatform = 'chatgpt' | 'claude' | 'mcp-apps' | 'universal';
267
- /**
268
- * @deprecated Use BuildOptions with config instead
269
- */
270
- export interface MultiBuildOptions<In = unknown, Out = unknown> extends Omit<BuildOptions<In, Out>, 'platform'> {
271
- platforms?: BuildTargetPlatform[];
272
- }
273
- /**
274
- * @deprecated Use BuildResult instead (same result for all platforms now)
275
- */
276
- export interface MultiBuildResult {
277
- bundles: Record<string, BuildResult>;
278
- totalTime: number;
279
- }
280
- /**
281
- * @deprecated Use buildToolUI with config.network instead
282
- */
283
- export declare function buildToolUIMulti<In = unknown, Out = unknown>(options: MultiBuildOptions<In, Out>): Promise<MultiBuildResult>;
284
- export { createTemplateHelpers } from '../runtime/wrapper';
285
- export type { UITemplateConfig, UITemplate, TemplateContext, TemplateHelpers, TemplateBuilderFn, UIContentSecurityPolicy, WidgetServingMode, WidgetDisplayMode, } from '../types';
286
- export type { ThemeConfig, PlatformCapabilities, DeepPartial } from '../theme';
287
- export { DEFAULT_THEME, OPENAI_PLATFORM, CLAUDE_PLATFORM } from '../theme';
288
- export { buildToolWidgetManifest, batchBuildWidgets, detectUIType, buildCSPForType, buildCSPMetaContent, getRendererAssets, buildToolResponseMeta, getOutputModeForClient, } from './widget-manifest';
289
- export type { BatchBuildOptions, BatchBuildResult, BuildMetaOptions } from './widget-manifest';
290
- export type { UIType, BundlingMode, DisplayMode, OutputMode, CSPDirectives, RendererAssets, WidgetManifest, WidgetConfig, BuildManifestResult, BuildManifestOptions, UIMetaFields, OpenAIMetaFields, ToolResponseMeta, RuntimePayload, } from '../types/ui-runtime';
291
- export { DEFAULT_CSP_BY_TYPE, DEFAULT_RENDERER_ASSETS, isUIType, isBundlingMode, isDisplayMode, isResourceMode, isOutputMode, } from '../types/ui-runtime';
292
- export type { ResourceMode, CDNResource } from '../types/ui-runtime';
293
- export { REACT_CDN, REACT_DOM_CDN, MARKED_CDN, HANDLEBARS_CDN, MDX_RUNTIME_CDN, TAILWIND_CDN, getDefaultAssets, buildCDNScriptTag, buildScriptsForUIType, buildTailwindScriptTag, hasInlineScripts, getURLsToPreFetch, buildCDNInfoForUIType, } from './cdn-resources';
294
- export type { CDNInfo } from './cdn-resources';
@@ -1,325 +0,0 @@
1
- "use strict";
2
- /**
3
- * Build-Time API for Tool UI
4
- *
5
- * Provides pre-compilation capabilities for tool UI templates.
6
- * Produces a **universal HTML document** that works across all platforms:
7
- * - OpenAI ChatGPT (Apps SDK)
8
- * - Anthropic Claude
9
- * - MCP Apps (ext-apps / SEP-1865)
10
- * - Google Gemini
11
- * - Any MCP-compatible host
12
- *
13
- * The build embeds the FrontMCP Bridge which auto-detects the host
14
- * at runtime and adapts its communication protocol accordingly.
15
- *
16
- * @packageDocumentation
17
- */
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.buildCDNInfoForUIType = exports.getURLsToPreFetch = exports.hasInlineScripts = exports.buildTailwindScriptTag = exports.buildScriptsForUIType = exports.buildCDNScriptTag = exports.getDefaultAssets = exports.TAILWIND_CDN = exports.MDX_RUNTIME_CDN = exports.HANDLEBARS_CDN = exports.MARKED_CDN = exports.REACT_DOM_CDN = exports.REACT_CDN = exports.isOutputMode = exports.isResourceMode = exports.isDisplayMode = exports.isBundlingMode = exports.isUIType = exports.DEFAULT_RENDERER_ASSETS = exports.DEFAULT_CSP_BY_TYPE = exports.getOutputModeForClient = exports.buildToolResponseMeta = exports.getRendererAssets = exports.buildCSPMetaContent = exports.buildCSPForType = exports.detectUIType = exports.batchBuildWidgets = exports.buildToolWidgetManifest = exports.CLAUDE_PLATFORM = exports.OPENAI_PLATFORM = exports.DEFAULT_THEME = exports.createTemplateHelpers = void 0;
20
- exports.buildToolUI = buildToolUI;
21
- exports.buildStaticWidget = buildStaticWidget;
22
- exports.buildToolUIMulti = buildToolUIMulti;
23
- const wrapper_1 = require("../runtime/wrapper");
24
- const registry_1 = require("../renderers/registry");
25
- const renderers_1 = require("../renderers");
26
- // ============================================
27
- // Build Functions
28
- // ============================================
29
- /**
30
- * Build a tool UI template into a universal HTML document.
31
- *
32
- * The output HTML:
33
- * - Works on ALL platforms (OpenAI, Claude, MCP Apps, Gemini, etc.)
34
- * - Includes FrontMCP Bridge that auto-detects the host at runtime
35
- * - Adapts communication protocol based on detected platform
36
- *
37
- * @example Basic usage
38
- * ```typescript
39
- * import { buildToolUI } from '@frontmcp/ui/build';
40
- *
41
- * const result = await buildToolUI({
42
- * template: { template: WeatherWidget },
43
- * toolName: 'get_weather',
44
- * output: { temperature: 72, conditions: 'sunny' },
45
- * });
46
- *
47
- * // Upload to CDN - works everywhere
48
- * await uploadToCDN('widgets/get_weather.html', result.html);
49
- * ```
50
- *
51
- * @example With blocked network (for Claude Artifacts)
52
- * ```typescript
53
- * const result = await buildToolUI({
54
- * template: { template: WeatherWidget },
55
- * toolName: 'get_weather',
56
- * config: { network: 'blocked' }, // Inlines all scripts
57
- * });
58
- * ```
59
- *
60
- * @example MCP server response
61
- * ```typescript
62
- * const result = await buildToolUI({ template, toolName, output });
63
- *
64
- * // In MCP server - choose MIME type based on client
65
- * const mimeType = isOpenAIClient(clientInfo)
66
- * ? result.mimeTypes.openai // 'text/html+skybridge'
67
- * : result.mimeTypes.mcp; // 'text/html+mcp'
68
- *
69
- * return { content: [{ type: mimeType, data: result.html }] };
70
- * ```
71
- */
72
- async function buildToolUI(options) {
73
- const startTime = Date.now();
74
- // Normalize options (handle legacy aliases)
75
- const { template: uiConfig, toolName, input = options.sampleInput ?? {}, output = options.sampleOutput ?? {}, theme, title, config: userConfig = {}, injectAdapters, minify: legacyMinify, } = options;
76
- // Build final config with defaults
77
- const config = {
78
- network: userConfig.network ?? 'open',
79
- scripts: userConfig.scripts ?? 'auto',
80
- includeBridge: userConfig.includeBridge ?? injectAdapters ?? true,
81
- minify: userConfig.minify ?? legacyMinify ?? false,
82
- };
83
- // Resolve script strategy
84
- const useInlineScripts = config.scripts === 'inline' || (config.scripts === 'auto' && config.network === 'blocked');
85
- // Build template context
86
- const ctx = buildTemplateContext(input, output);
87
- // Render the template content
88
- const { html: content, rendererType } = await renderTemplate(uiConfig.template, ctx, {
89
- mdxComponents: uiConfig.mdxComponents,
90
- });
91
- // Wrap in universal HTML document
92
- const html = (0, wrapper_1.wrapToolUIUniversal)({
93
- content,
94
- toolName,
95
- input: input,
96
- output,
97
- csp: uiConfig.csp,
98
- widgetAccessible: uiConfig.widgetAccessible,
99
- title: title || `${toolName} Widget`,
100
- theme,
101
- includeBridge: config.includeBridge,
102
- inlineScripts: useInlineScripts,
103
- rendererType,
104
- });
105
- // Optionally minify
106
- const finalHtml = config.minify ? minifyHtml(html) : html;
107
- // Calculate size and hash
108
- const size = Buffer.byteLength(finalHtml, 'utf8');
109
- const gzipSize = estimateGzipSize(finalHtml);
110
- const hash = await calculateHash(finalHtml);
111
- return {
112
- html: finalHtml,
113
- size,
114
- gzipSize,
115
- hash,
116
- mimeTypes: {
117
- openai: 'text/html+skybridge',
118
- mcp: 'text/html+mcp',
119
- html: 'text/html',
120
- },
121
- rendererType,
122
- buildTime: new Date(startTime).toISOString(),
123
- config,
124
- };
125
- }
126
- // ============================================
127
- // Helper Functions
128
- // ============================================
129
- /**
130
- * Build template context from input/output.
131
- */
132
- function buildTemplateContext(input, output, structuredContent) {
133
- return {
134
- input,
135
- output,
136
- structuredContent,
137
- helpers: (0, wrapper_1.createTemplateHelpers)(),
138
- };
139
- }
140
- /**
141
- * Render a template using the appropriate renderer.
142
- */
143
- async function renderTemplate(template, ctx, options) {
144
- // Detect template type
145
- const detection = (0, renderers_1.detectTemplateType)(template);
146
- // For simple HTML templates, use direct execution (sync, faster)
147
- if (detection.type === 'html-function' || detection.type === 'html-string') {
148
- const html = typeof template === 'function'
149
- ? template(ctx)
150
- : template;
151
- return { html, rendererType: 'html' };
152
- }
153
- // For React/MDX, use the renderer registry
154
- try {
155
- const result = await registry_1.rendererRegistry.render(template, ctx, {
156
- mdxComponents: options?.mdxComponents,
157
- });
158
- return { html: result.html, rendererType: result.rendererType };
159
- }
160
- catch (error) {
161
- // Fallback to HTML if renderer fails
162
- console.warn(`[@frontmcp/ui/build] Renderer failed for ${detection.type}, falling back to HTML:`, error instanceof Error ? error.message : error);
163
- if (typeof template === 'function') {
164
- try {
165
- const html = template(ctx);
166
- return { html, rendererType: 'html-fallback' };
167
- }
168
- catch {
169
- return {
170
- html: `<div class="error">Template rendering failed</div>`,
171
- rendererType: 'error',
172
- };
173
- }
174
- }
175
- return { html: String(template), rendererType: 'html-fallback' };
176
- }
177
- }
178
- /**
179
- * Simple HTML minification (remove whitespace between tags).
180
- */
181
- function minifyHtml(html) {
182
- return html
183
- .replace(/>\s+</g, '><') // Remove whitespace between tags
184
- .replace(/\s{2,}/g, ' ') // Collapse multiple spaces
185
- .trim();
186
- }
187
- /**
188
- * Estimate gzipped size (rough approximation).
189
- */
190
- function estimateGzipSize(content) {
191
- // Rough estimate: gzip typically achieves 70-90% compression on HTML
192
- // We use 75% as a middle ground
193
- return Math.round(Buffer.byteLength(content, 'utf8') * 0.25);
194
- }
195
- /**
196
- * Calculate SHA-256 hash of content.
197
- */
198
- async function calculateHash(content) {
199
- // Use Web Crypto API if available, otherwise fallback to simple hash
200
- if (typeof crypto !== 'undefined' && crypto.subtle) {
201
- const encoder = new TextEncoder();
202
- const data = encoder.encode(content);
203
- const hashBuffer = await crypto.subtle.digest('SHA-256', data);
204
- const hashArray = Array.from(new Uint8Array(hashBuffer));
205
- return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
206
- }
207
- // Simple fallback hash (not cryptographically secure, but good enough for cache keys)
208
- let hash = 0;
209
- for (let i = 0; i < content.length; i++) {
210
- const char = content.charCodeAt(i);
211
- hash = (hash << 5) - hash + char;
212
- hash = hash & hash; // Convert to 32-bit integer
213
- }
214
- return Math.abs(hash).toString(16).padStart(8, '0');
215
- }
216
- /**
217
- * Build a static widget that reads data from the host platform at runtime.
218
- *
219
- * Unlike buildToolUI which pre-renders with data, this creates a widget
220
- * that waits for data from the host platform via the FrontMCP Bridge.
221
- *
222
- * @example
223
- * ```typescript
224
- * import { buildStaticWidget } from '@frontmcp/ui/build';
225
- *
226
- * const widget = await buildStaticWidget({
227
- * template: {
228
- * template: (ctx) => `<div id="weather">${ctx.output?.temperature || 'Loading...'}</div>`,
229
- * },
230
- * toolName: 'get_weather',
231
- * });
232
- *
233
- * // This widget will receive data via FrontMCP Bridge
234
- * await uploadToCDN('widgets/get_weather.html', widget.html);
235
- * ```
236
- */
237
- async function buildStaticWidget(options) {
238
- const { template, toolName, theme, config, title } = options;
239
- // Build with empty data - the widget will receive data from host at runtime
240
- return buildToolUI({
241
- template,
242
- toolName,
243
- input: {},
244
- output: {},
245
- theme,
246
- config,
247
- title: title || `${toolName} Widget`,
248
- });
249
- }
250
- /**
251
- * @deprecated Use buildToolUI with config.network instead
252
- */
253
- async function buildToolUIMulti(options) {
254
- const startTime = Date.now();
255
- const { platforms = ['chatgpt', 'claude'], ...buildOptions } = options;
256
- // For backwards compatibility, build once and return same result for all platforms
257
- const result = await buildToolUI(buildOptions);
258
- const bundles = {};
259
- for (const platform of platforms) {
260
- bundles[platform] = {
261
- ...result,
262
- // Add legacy mimeType field for compatibility
263
- mimeType: platform === 'chatgpt' ? 'text/html+skybridge' : 'text/html+mcp',
264
- };
265
- }
266
- return {
267
- bundles,
268
- totalTime: Date.now() - startTime,
269
- };
270
- }
271
- // ============================================
272
- // Re-exports for Convenience
273
- // ============================================
274
- var wrapper_2 = require("../runtime/wrapper");
275
- Object.defineProperty(exports, "createTemplateHelpers", { enumerable: true, get: function () { return wrapper_2.createTemplateHelpers; } });
276
- var theme_1 = require("../theme");
277
- Object.defineProperty(exports, "DEFAULT_THEME", { enumerable: true, get: function () { return theme_1.DEFAULT_THEME; } });
278
- Object.defineProperty(exports, "OPENAI_PLATFORM", { enumerable: true, get: function () { return theme_1.OPENAI_PLATFORM; } });
279
- Object.defineProperty(exports, "CLAUDE_PLATFORM", { enumerable: true, get: function () { return theme_1.CLAUDE_PLATFORM; } });
280
- // ============================================
281
- // Widget Manifest Builder (New API)
282
- // ============================================
283
- var widget_manifest_1 = require("./widget-manifest");
284
- // Main builder
285
- Object.defineProperty(exports, "buildToolWidgetManifest", { enumerable: true, get: function () { return widget_manifest_1.buildToolWidgetManifest; } });
286
- Object.defineProperty(exports, "batchBuildWidgets", { enumerable: true, get: function () { return widget_manifest_1.batchBuildWidgets; } });
287
- // Detection utilities
288
- Object.defineProperty(exports, "detectUIType", { enumerable: true, get: function () { return widget_manifest_1.detectUIType; } });
289
- // CSP utilities
290
- Object.defineProperty(exports, "buildCSPForType", { enumerable: true, get: function () { return widget_manifest_1.buildCSPForType; } });
291
- Object.defineProperty(exports, "buildCSPMetaContent", { enumerable: true, get: function () { return widget_manifest_1.buildCSPMetaContent; } });
292
- // Asset utilities
293
- Object.defineProperty(exports, "getRendererAssets", { enumerable: true, get: function () { return widget_manifest_1.getRendererAssets; } });
294
- // _meta field builders (NEW)
295
- Object.defineProperty(exports, "buildToolResponseMeta", { enumerable: true, get: function () { return widget_manifest_1.buildToolResponseMeta; } });
296
- Object.defineProperty(exports, "getOutputModeForClient", { enumerable: true, get: function () { return widget_manifest_1.getOutputModeForClient; } });
297
- var ui_runtime_1 = require("../types/ui-runtime");
298
- Object.defineProperty(exports, "DEFAULT_CSP_BY_TYPE", { enumerable: true, get: function () { return ui_runtime_1.DEFAULT_CSP_BY_TYPE; } });
299
- Object.defineProperty(exports, "DEFAULT_RENDERER_ASSETS", { enumerable: true, get: function () { return ui_runtime_1.DEFAULT_RENDERER_ASSETS; } });
300
- Object.defineProperty(exports, "isUIType", { enumerable: true, get: function () { return ui_runtime_1.isUIType; } });
301
- Object.defineProperty(exports, "isBundlingMode", { enumerable: true, get: function () { return ui_runtime_1.isBundlingMode; } });
302
- Object.defineProperty(exports, "isDisplayMode", { enumerable: true, get: function () { return ui_runtime_1.isDisplayMode; } });
303
- Object.defineProperty(exports, "isResourceMode", { enumerable: true, get: function () { return ui_runtime_1.isResourceMode; } });
304
- Object.defineProperty(exports, "isOutputMode", { enumerable: true, get: function () { return ui_runtime_1.isOutputMode; } });
305
- // ============================================
306
- // CDN Resource Utilities
307
- // ============================================
308
- var cdn_resources_1 = require("./cdn-resources");
309
- // CDN URL Constants
310
- Object.defineProperty(exports, "REACT_CDN", { enumerable: true, get: function () { return cdn_resources_1.REACT_CDN; } });
311
- Object.defineProperty(exports, "REACT_DOM_CDN", { enumerable: true, get: function () { return cdn_resources_1.REACT_DOM_CDN; } });
312
- Object.defineProperty(exports, "MARKED_CDN", { enumerable: true, get: function () { return cdn_resources_1.MARKED_CDN; } });
313
- Object.defineProperty(exports, "HANDLEBARS_CDN", { enumerable: true, get: function () { return cdn_resources_1.HANDLEBARS_CDN; } });
314
- Object.defineProperty(exports, "MDX_RUNTIME_CDN", { enumerable: true, get: function () { return cdn_resources_1.MDX_RUNTIME_CDN; } });
315
- Object.defineProperty(exports, "TAILWIND_CDN", { enumerable: true, get: function () { return cdn_resources_1.TAILWIND_CDN; } });
316
- // Helper Functions
317
- Object.defineProperty(exports, "getDefaultAssets", { enumerable: true, get: function () { return cdn_resources_1.getDefaultAssets; } });
318
- Object.defineProperty(exports, "buildCDNScriptTag", { enumerable: true, get: function () { return cdn_resources_1.buildCDNScriptTag; } });
319
- Object.defineProperty(exports, "buildScriptsForUIType", { enumerable: true, get: function () { return cdn_resources_1.buildScriptsForUIType; } });
320
- Object.defineProperty(exports, "buildTailwindScriptTag", { enumerable: true, get: function () { return cdn_resources_1.buildTailwindScriptTag; } });
321
- Object.defineProperty(exports, "hasInlineScripts", { enumerable: true, get: function () { return cdn_resources_1.hasInlineScripts; } });
322
- Object.defineProperty(exports, "getURLsToPreFetch", { enumerable: true, get: function () { return cdn_resources_1.getURLsToPreFetch; } });
323
- // CDN Info for tools/list _meta
324
- Object.defineProperty(exports, "buildCDNInfoForUIType", { enumerable: true, get: function () { return cdn_resources_1.buildCDNInfoForUIType; } });
325
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/build/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Build-Time API for Tool UI\n *\n * Provides pre-compilation capabilities for tool UI templates.\n * Produces a **universal HTML document** that works across all platforms:\n * - OpenAI ChatGPT (Apps SDK)\n * - Anthropic Claude\n * - MCP Apps (ext-apps / SEP-1865)\n * - Google Gemini\n * - Any MCP-compatible host\n *\n * The build embeds the FrontMCP Bridge which auto-detects the host\n * at runtime and adapts its communication protocol accordingly.\n *\n * @packageDocumentation\n */\n\nimport type { UITemplateConfig, TemplateContext } from '../types';\nimport type { ThemeConfig, DeepPartial } from '../theme';\nimport { wrapToolUIUniversal, createTemplateHelpers } from '../runtime/wrapper';\nimport { rendererRegistry } from '../renderers/registry';\nimport { detectTemplateType } from '../renderers';\nimport type { TemplateBuilderFn } from '../types';\n\n// ============================================\n// Build Types\n// ============================================\n\n/**\n * Network access mode for the target environment.\n *\n * - `'open'`: Can fetch external resources (CDN scripts, fonts)\n * - `'blocked'`: Network is sandboxed, must inline everything\n */\nexport type NetworkMode = 'open' | 'blocked';\n\n/**\n * Script loading strategy.\n *\n * - `'cdn'`: Load scripts from CDN (smaller HTML, requires network)\n * - `'inline'`: Embed scripts in HTML (larger, works offline)\n * - `'auto'`: Choose based on network mode\n */\nexport type ScriptStrategy = 'cdn' | 'inline' | 'auto';\n\n/**\n * Build configuration options.\n * Capability-based rather than platform-specific.\n */\nexport interface BuildConfig {\n /**\n * Network access mode.\n * @default 'open'\n */\n network?: NetworkMode;\n\n /**\n * Script loading strategy.\n * @default 'auto' (uses 'inline' if network is 'blocked')\n */\n scripts?: ScriptStrategy;\n\n /**\n * Whether to include the FrontMCP Bridge runtime.\n * The bridge auto-detects the host platform at runtime.\n * @default true\n */\n includeBridge?: boolean;\n\n /**\n * Whether to minify the output HTML.\n * @default false\n */\n minify?: boolean;\n}\n\n/**\n * Options for building a tool UI template.\n *\n * @example\n * ```typescript\n * const result = await buildToolUI({\n * template: {\n * template: (ctx) => `<div>${ctx.output.value}</div>`,\n * widgetAccessible: true,\n * },\n * toolName: 'my_tool',\n * input: { query: 'hello' },\n * output: { value: 'world' },\n * });\n *\n * // Universal HTML that works on any platform\n * console.log(result.html);\n * ```\n */\nexport interface BuildOptions<In = unknown, Out = unknown> {\n /**\n * UI template configuration.\n */\n template: UITemplateConfig<In, Out>;\n\n /**\n * Name of the tool this UI is for.\n */\n toolName: string;\n\n /**\n * Tool input arguments.\n */\n input?: In;\n\n /**\n * Tool output/result data.\n */\n output?: Out;\n\n /**\n * Theme configuration override.\n */\n theme?: DeepPartial<ThemeConfig>;\n\n /**\n * Build configuration.\n * Controls network mode, script strategy, etc.\n */\n config?: BuildConfig;\n\n /**\n * Title for the HTML document.\n */\n title?: string;\n\n // Legacy aliases for backwards compatibility\n /** @deprecated Use `input` instead */\n sampleInput?: In;\n /** @deprecated Use `output` instead */\n sampleOutput?: Out;\n /** @deprecated Use `config.includeBridge` instead */\n injectAdapters?: boolean;\n /** @deprecated Use `config.minify` instead */\n minify?: boolean;\n /** @deprecated Platform is now auto-detected at runtime */\n platform?: string;\n}\n\n/**\n * MIME types for different host platforms.\n * Returned as suggestions - the MCP server response layer decides which to use.\n */\nexport interface MimeTypes {\n /** For OpenAI ChatGPT Apps SDK */\n openai: 'text/html+skybridge';\n /** For Claude, MCP Apps, and standard MCP hosts */\n mcp: 'text/html+mcp';\n /** Generic HTML (fallback) */\n html: 'text/html';\n}\n\n/**\n * Result of building a tool UI template.\n */\nexport interface BuildResult {\n /**\n * Complete HTML document string.\n * This is universal - works on all platforms.\n */\n html: string;\n\n /**\n * Size of the HTML in bytes.\n */\n size: number;\n\n /**\n * Size of the gzipped HTML in bytes (estimated).\n */\n gzipSize: number;\n\n /**\n * SHA-256 hash of the HTML content.\n */\n hash: string;\n\n /**\n * Suggested MIME types for different hosts.\n * The MCP server response layer should select based on detected client.\n */\n mimeTypes: MimeTypes;\n\n /**\n * Renderer type used (html, react, mdx).\n */\n rendererType: string;\n\n /**\n * Build timestamp (ISO 8601).\n */\n buildTime: string;\n\n /**\n * Build configuration used.\n */\n config: Required<BuildConfig>;\n}\n\n// ============================================\n// Build Functions\n// ============================================\n\n/**\n * Build a tool UI template into a universal HTML document.\n *\n * The output HTML:\n * - Works on ALL platforms (OpenAI, Claude, MCP Apps, Gemini, etc.)\n * - Includes FrontMCP Bridge that auto-detects the host at runtime\n * - Adapts communication protocol based on detected platform\n *\n * @example Basic usage\n * ```typescript\n * import { buildToolUI } from '@frontmcp/ui/build';\n *\n * const result = await buildToolUI({\n * template: { template: WeatherWidget },\n * toolName: 'get_weather',\n * output: { temperature: 72, conditions: 'sunny' },\n * });\n *\n * // Upload to CDN - works everywhere\n * await uploadToCDN('widgets/get_weather.html', result.html);\n * ```\n *\n * @example With blocked network (for Claude Artifacts)\n * ```typescript\n * const result = await buildToolUI({\n * template: { template: WeatherWidget },\n * toolName: 'get_weather',\n * config: { network: 'blocked' }, // Inlines all scripts\n * });\n * ```\n *\n * @example MCP server response\n * ```typescript\n * const result = await buildToolUI({ template, toolName, output });\n *\n * // In MCP server - choose MIME type based on client\n * const mimeType = isOpenAIClient(clientInfo)\n * ? result.mimeTypes.openai // 'text/html+skybridge'\n * : result.mimeTypes.mcp; // 'text/html+mcp'\n *\n * return { content: [{ type: mimeType, data: result.html }] };\n * ```\n */\nexport async function buildToolUI<In = unknown, Out = unknown>(\n options: BuildOptions<In, Out>\n): Promise<BuildResult> {\n const startTime = Date.now();\n\n // Normalize options (handle legacy aliases)\n const {\n template: uiConfig,\n toolName,\n input = options.sampleInput ?? ({} as In),\n output = options.sampleOutput ?? ({} as Out),\n theme,\n title,\n config: userConfig = {},\n injectAdapters,\n minify: legacyMinify,\n } = options;\n\n // Build final config with defaults\n const config: Required<BuildConfig> = {\n network: userConfig.network ?? 'open',\n scripts: userConfig.scripts ?? 'auto',\n includeBridge: userConfig.includeBridge ?? injectAdapters ?? true,\n minify: userConfig.minify ?? legacyMinify ?? false,\n };\n\n // Resolve script strategy\n const useInlineScripts =\n config.scripts === 'inline' || (config.scripts === 'auto' && config.network === 'blocked');\n\n // Build template context\n const ctx = buildTemplateContext(input, output);\n\n // Render the template content\n const { html: content, rendererType } = await renderTemplate(uiConfig.template, ctx, {\n mdxComponents: uiConfig.mdxComponents,\n });\n\n // Wrap in universal HTML document\n const html = wrapToolUIUniversal({\n content,\n toolName,\n input: input as Record<string, unknown>,\n output,\n csp: uiConfig.csp,\n widgetAccessible: uiConfig.widgetAccessible,\n title: title || `${toolName} Widget`,\n theme,\n includeBridge: config.includeBridge,\n inlineScripts: useInlineScripts,\n rendererType,\n });\n\n // Optionally minify\n const finalHtml = config.minify ? minifyHtml(html) : html;\n\n // Calculate size and hash\n const size = Buffer.byteLength(finalHtml, 'utf8');\n const gzipSize = estimateGzipSize(finalHtml);\n const hash = await calculateHash(finalHtml);\n\n return {\n html: finalHtml,\n size,\n gzipSize,\n hash,\n mimeTypes: {\n openai: 'text/html+skybridge',\n mcp: 'text/html+mcp',\n html: 'text/html',\n },\n rendererType,\n buildTime: new Date(startTime).toISOString(),\n config,\n };\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Build template context from input/output.\n */\nfunction buildTemplateContext<In = unknown, Out = unknown>(\n input: In,\n output: Out,\n structuredContent?: unknown\n): TemplateContext<In, Out> {\n return {\n input,\n output,\n structuredContent,\n helpers: createTemplateHelpers(),\n };\n}\n\n/**\n * Render a template using the appropriate renderer.\n */\nasync function renderTemplate<In = unknown, Out = unknown>(\n template: UITemplateConfig<In, Out>['template'],\n ctx: TemplateContext<In, Out>,\n options?: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mdxComponents?: Record<string, any>;\n }\n): Promise<{ html: string; rendererType: string }> {\n // Detect template type\n const detection = detectTemplateType(template);\n\n // For simple HTML templates, use direct execution (sync, faster)\n if (detection.type === 'html-function' || detection.type === 'html-string') {\n const html =\n typeof template === 'function'\n ? (template as TemplateBuilderFn<In, Out>)(ctx)\n : (template as string);\n\n return { html, rendererType: 'html' };\n }\n\n // For React/MDX, use the renderer registry\n try {\n const result = await rendererRegistry.render(template, ctx, {\n mdxComponents: options?.mdxComponents,\n });\n\n return { html: result.html, rendererType: result.rendererType };\n } catch (error) {\n // Fallback to HTML if renderer fails\n console.warn(\n `[@frontmcp/ui/build] Renderer failed for ${detection.type}, falling back to HTML:`,\n error instanceof Error ? error.message : error\n );\n\n if (typeof template === 'function') {\n try {\n const html = (template as TemplateBuilderFn<In, Out>)(ctx);\n return { html, rendererType: 'html-fallback' };\n } catch {\n return {\n html: `<div class=\"error\">Template rendering failed</div>`,\n rendererType: 'error',\n };\n }\n }\n\n return { html: String(template), rendererType: 'html-fallback' };\n }\n}\n\n/**\n * Simple HTML minification (remove whitespace between tags).\n */\nfunction minifyHtml(html: string): string {\n return html\n .replace(/>\\s+</g, '><') // Remove whitespace between tags\n .replace(/\\s{2,}/g, ' ') // Collapse multiple spaces\n .trim();\n}\n\n/**\n * Estimate gzipped size (rough approximation).\n */\nfunction estimateGzipSize(content: string): number {\n // Rough estimate: gzip typically achieves 70-90% compression on HTML\n // We use 75% as a middle ground\n return Math.round(Buffer.byteLength(content, 'utf8') * 0.25);\n}\n\n/**\n * Calculate SHA-256 hash of content.\n */\nasync function calculateHash(content: string): Promise<string> {\n // Use Web Crypto API if available, otherwise fallback to simple hash\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n }\n\n // Simple fallback hash (not cryptographically secure, but good enough for cache keys)\n let hash = 0;\n for (let i = 0; i < content.length; i++) {\n const char = content.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(16).padStart(8, '0');\n}\n\n// ============================================\n// Static Widget Builder\n// ============================================\n\n/**\n * Options for building a static widget that reads from host at runtime.\n */\nexport interface StaticWidgetOptions<In = unknown, Out = unknown> {\n /**\n * UI template configuration.\n */\n template: UITemplateConfig<In, Out>;\n\n /**\n * Name of the tool this UI is for.\n */\n toolName: string;\n\n /**\n * Theme configuration override.\n */\n theme?: DeepPartial<ThemeConfig>;\n\n /**\n * Build configuration.\n */\n config?: BuildConfig;\n\n /**\n * Title for the HTML document.\n */\n title?: string;\n}\n\n/**\n * Build a static widget that reads data from the host platform at runtime.\n *\n * Unlike buildToolUI which pre-renders with data, this creates a widget\n * that waits for data from the host platform via the FrontMCP Bridge.\n *\n * @example\n * ```typescript\n * import { buildStaticWidget } from '@frontmcp/ui/build';\n *\n * const widget = await buildStaticWidget({\n * template: {\n * template: (ctx) => `<div id=\"weather\">${ctx.output?.temperature || 'Loading...'}</div>`,\n * },\n * toolName: 'get_weather',\n * });\n *\n * // This widget will receive data via FrontMCP Bridge\n * await uploadToCDN('widgets/get_weather.html', widget.html);\n * ```\n */\nexport async function buildStaticWidget<In = unknown, Out = unknown>(\n options: StaticWidgetOptions<In, Out>\n): Promise<BuildResult> {\n const { template, toolName, theme, config, title } = options;\n\n // Build with empty data - the widget will receive data from host at runtime\n return buildToolUI({\n template,\n toolName,\n input: {} as In,\n output: {} as Out,\n theme,\n config,\n title: title || `${toolName} Widget`,\n });\n}\n\n// ============================================\n// Legacy Compatibility\n// ============================================\n\n/**\n * @deprecated Use BuildConfig instead\n */\nexport type BuildTargetPlatform = 'chatgpt' | 'claude' | 'mcp-apps' | 'universal';\n\n/**\n * @deprecated Use BuildOptions with config instead\n */\nexport interface MultiBuildOptions<In = unknown, Out = unknown>\n extends Omit<BuildOptions<In, Out>, 'platform'> {\n platforms?: BuildTargetPlatform[];\n}\n\n/**\n * @deprecated Use BuildResult instead (same result for all platforms now)\n */\nexport interface MultiBuildResult {\n bundles: Record<string, BuildResult>;\n totalTime: number;\n}\n\n/**\n * @deprecated Use buildToolUI with config.network instead\n */\nexport async function buildToolUIMulti<In = unknown, Out = unknown>(\n options: MultiBuildOptions<In, Out>\n): Promise<MultiBuildResult> {\n const startTime = Date.now();\n const { platforms = ['chatgpt', 'claude'], ...buildOptions } = options;\n\n // For backwards compatibility, build once and return same result for all platforms\n const result = await buildToolUI(buildOptions);\n\n const bundles: Record<string, BuildResult> = {};\n for (const platform of platforms) {\n bundles[platform] = {\n ...result,\n // Add legacy mimeType field for compatibility\n mimeType: platform === 'chatgpt' ? 'text/html+skybridge' : 'text/html+mcp',\n } as BuildResult & { mimeType: string };\n }\n\n return {\n bundles,\n totalTime: Date.now() - startTime,\n };\n}\n\n// ============================================\n// Re-exports for Convenience\n// ============================================\n\nexport { createTemplateHelpers } from '../runtime/wrapper';\nexport type {\n UITemplateConfig,\n UITemplate,\n TemplateContext,\n TemplateHelpers,\n TemplateBuilderFn,\n UIContentSecurityPolicy,\n WidgetServingMode,\n WidgetDisplayMode,\n} from '../types';\nexport type { ThemeConfig, PlatformCapabilities, DeepPartial } from '../theme';\nexport { DEFAULT_THEME, OPENAI_PLATFORM, CLAUDE_PLATFORM } from '../theme';\n\n// ============================================\n// Widget Manifest Builder (New API)\n// ============================================\n\nexport {\n // Main builder\n buildToolWidgetManifest,\n batchBuildWidgets,\n // Detection utilities\n detectUIType,\n // CSP utilities\n buildCSPForType,\n buildCSPMetaContent,\n // Asset utilities\n getRendererAssets,\n // _meta field builders (NEW)\n buildToolResponseMeta,\n getOutputModeForClient,\n} from './widget-manifest';\n\nexport type { BatchBuildOptions, BatchBuildResult, BuildMetaOptions } from './widget-manifest';\n\n// Re-export runtime types for convenience\nexport type {\n UIType,\n BundlingMode,\n DisplayMode,\n OutputMode,\n CSPDirectives,\n RendererAssets,\n WidgetManifest,\n WidgetConfig,\n BuildManifestResult,\n BuildManifestOptions,\n // _meta field types (NEW)\n UIMetaFields,\n OpenAIMetaFields,\n ToolResponseMeta,\n // Deprecated\n RuntimePayload,\n} from '../types/ui-runtime';\n\nexport {\n DEFAULT_CSP_BY_TYPE,\n DEFAULT_RENDERER_ASSETS,\n isUIType,\n isBundlingMode,\n isDisplayMode,\n isResourceMode,\n isOutputMode,\n} from '../types/ui-runtime';\n\nexport type { ResourceMode, CDNResource } from '../types/ui-runtime';\n\n// ============================================\n// CDN Resource Utilities\n// ============================================\n\nexport {\n // CDN URL Constants\n REACT_CDN,\n REACT_DOM_CDN,\n MARKED_CDN,\n HANDLEBARS_CDN,\n MDX_RUNTIME_CDN,\n TAILWIND_CDN,\n // Helper Functions\n getDefaultAssets,\n buildCDNScriptTag,\n buildScriptsForUIType,\n buildTailwindScriptTag,\n hasInlineScripts,\n getURLsToPreFetch,\n // CDN Info for tools/list _meta\n buildCDNInfoForUIType,\n} from './cdn-resources';\n\nexport type { CDNInfo } from './cdn-resources';\n"]}