@frontmcp/uipack 0.12.2 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/CLAUDE.md +56 -154
  2. package/README.md +367 -62
  3. package/adapters/base-template.d.ts +30 -0
  4. package/adapters/base-template.d.ts.map +1 -0
  5. package/adapters/cdn-info.d.ts +34 -0
  6. package/adapters/cdn-info.d.ts.map +1 -0
  7. package/adapters/constants.d.ts +18 -0
  8. package/adapters/constants.d.ts.map +1 -0
  9. package/adapters/content-detector.d.ts +19 -0
  10. package/adapters/content-detector.d.ts.map +1 -0
  11. package/adapters/content-renderers.d.ts +27 -0
  12. package/adapters/content-renderers.d.ts.map +1 -0
  13. package/adapters/index.d.ts +14 -7
  14. package/adapters/index.d.ts.map +1 -1
  15. package/adapters/index.js +2343 -426
  16. package/adapters/render-failure.d.ts +18 -0
  17. package/adapters/render-failure.d.ts.map +1 -0
  18. package/adapters/response-builder.d.ts +34 -104
  19. package/adapters/response-builder.d.ts.map +1 -1
  20. package/adapters/serving-mode.d.ts +28 -91
  21. package/adapters/serving-mode.d.ts.map +1 -1
  22. package/adapters/template-renderer.d.ts +50 -0
  23. package/adapters/template-renderer.d.ts.map +1 -0
  24. package/adapters/type-detector.d.ts +18 -0
  25. package/adapters/type-detector.d.ts.map +1 -0
  26. package/bridge-runtime/index.js +1 -1
  27. package/component/index.d.ts +14 -0
  28. package/component/index.d.ts.map +1 -0
  29. package/component/index.js +2043 -0
  30. package/component/loader.d.ts +36 -0
  31. package/component/loader.d.ts.map +1 -0
  32. package/component/renderer.d.ts +30 -0
  33. package/component/renderer.d.ts.map +1 -0
  34. package/component/transpiler.d.ts +49 -0
  35. package/component/transpiler.d.ts.map +1 -0
  36. package/component/types.d.ts +82 -0
  37. package/component/types.d.ts.map +1 -0
  38. package/esm/adapters/index.mjs +2337 -422
  39. package/esm/bridge-runtime/index.mjs +1 -1
  40. package/esm/component/index.mjs +2013 -0
  41. package/esm/index.mjs +3446 -13935
  42. package/esm/package.json +3 -12
  43. package/esm/resolver/index.mjs +661 -0
  44. package/esm/shell/index.mjs +1406 -0
  45. package/esm/types/index.mjs +11 -11
  46. package/esm/utils/index.mjs +53 -8
  47. package/index.d.ts +12 -40
  48. package/index.d.ts.map +1 -1
  49. package/index.js +3579 -14218
  50. package/package.json +3 -12
  51. package/resolver/cdn-registry.d.ts +39 -0
  52. package/resolver/cdn-registry.d.ts.map +1 -0
  53. package/resolver/esm-sh.resolver.d.ts +54 -0
  54. package/resolver/esm-sh.resolver.d.ts.map +1 -0
  55. package/resolver/import-map.d.ts +47 -0
  56. package/resolver/import-map.d.ts.map +1 -0
  57. package/resolver/import-parser.d.ts +28 -0
  58. package/resolver/import-parser.d.ts.map +1 -0
  59. package/resolver/import-rewriter.d.ts +29 -0
  60. package/resolver/import-rewriter.d.ts.map +1 -0
  61. package/resolver/index.d.ts +15 -0
  62. package/resolver/index.d.ts.map +1 -0
  63. package/resolver/index.js +708 -0
  64. package/resolver/types.d.ts +191 -0
  65. package/resolver/types.d.ts.map +1 -0
  66. package/shell/builder.d.ts +31 -0
  67. package/shell/builder.d.ts.map +1 -0
  68. package/shell/csp.d.ts +37 -0
  69. package/shell/csp.d.ts.map +1 -0
  70. package/shell/custom-shell-applier.d.ts +33 -0
  71. package/shell/custom-shell-applier.d.ts.map +1 -0
  72. package/shell/custom-shell-resolver.d.ts +47 -0
  73. package/shell/custom-shell-resolver.d.ts.map +1 -0
  74. package/shell/custom-shell-types.d.ts +75 -0
  75. package/shell/custom-shell-types.d.ts.map +1 -0
  76. package/shell/custom-shell-validator.d.ts +26 -0
  77. package/shell/custom-shell-validator.d.ts.map +1 -0
  78. package/shell/data-injector.d.ts +40 -0
  79. package/shell/data-injector.d.ts.map +1 -0
  80. package/shell/index.d.ts +19 -0
  81. package/shell/index.d.ts.map +1 -0
  82. package/shell/index.js +1453 -0
  83. package/shell/types.d.ts +54 -0
  84. package/shell/types.d.ts.map +1 -0
  85. package/types/index.d.ts +1 -3
  86. package/types/index.d.ts.map +1 -1
  87. package/types/index.js +11 -11
  88. package/types/ui-config.d.ts +50 -11
  89. package/types/ui-config.d.ts.map +1 -1
  90. package/types/ui-runtime.d.ts +8 -82
  91. package/types/ui-runtime.d.ts.map +1 -1
  92. package/utils/index.d.ts +9 -3
  93. package/utils/index.d.ts.map +1 -1
  94. package/utils/index.js +59 -7
  95. package/adapters/platform-meta.constants.d.ts +0 -26
  96. package/adapters/platform-meta.constants.d.ts.map +0 -1
  97. package/adapters/platform-meta.d.ts +0 -234
  98. package/adapters/platform-meta.d.ts.map +0 -1
  99. package/base-template/bridge.d.ts +0 -90
  100. package/base-template/bridge.d.ts.map +0 -1
  101. package/base-template/default-base-template.d.ts +0 -91
  102. package/base-template/default-base-template.d.ts.map +0 -1
  103. package/base-template/index.d.ts +0 -15
  104. package/base-template/index.d.ts.map +0 -1
  105. package/base-template/index.js +0 -1393
  106. package/base-template/polyfills.d.ts +0 -31
  107. package/base-template/polyfills.d.ts.map +0 -1
  108. package/base-template/theme-styles.d.ts +0 -74
  109. package/base-template/theme-styles.d.ts.map +0 -1
  110. package/build/builders/base-builder.d.ts +0 -124
  111. package/build/builders/base-builder.d.ts.map +0 -1
  112. package/build/builders/esbuild-config.d.ts +0 -94
  113. package/build/builders/esbuild-config.d.ts.map +0 -1
  114. package/build/builders/hybrid-builder.d.ts +0 -93
  115. package/build/builders/hybrid-builder.d.ts.map +0 -1
  116. package/build/builders/index.d.ts +0 -17
  117. package/build/builders/index.d.ts.map +0 -1
  118. package/build/builders/inline-builder.d.ts +0 -83
  119. package/build/builders/inline-builder.d.ts.map +0 -1
  120. package/build/builders/static-builder.d.ts +0 -78
  121. package/build/builders/static-builder.d.ts.map +0 -1
  122. package/build/builders/types.d.ts +0 -341
  123. package/build/builders/types.d.ts.map +0 -1
  124. package/build/cdn-resources.d.ts +0 -244
  125. package/build/cdn-resources.d.ts.map +0 -1
  126. package/build/hybrid-data.d.ts +0 -127
  127. package/build/hybrid-data.d.ts.map +0 -1
  128. package/build/index.d.ts +0 -299
  129. package/build/index.d.ts.map +0 -1
  130. package/build/index.js +0 -8699
  131. package/build/ui-components-browser.d.ts +0 -64
  132. package/build/ui-components-browser.d.ts.map +0 -1
  133. package/build/widget-manifest.d.ts +0 -362
  134. package/build/widget-manifest.d.ts.map +0 -1
  135. package/bundler/cache.d.ts +0 -173
  136. package/bundler/cache.d.ts.map +0 -1
  137. package/bundler/file-cache/component-builder.d.ts +0 -167
  138. package/bundler/file-cache/component-builder.d.ts.map +0 -1
  139. package/bundler/file-cache/hash-calculator.d.ts +0 -155
  140. package/bundler/file-cache/hash-calculator.d.ts.map +0 -1
  141. package/bundler/file-cache/index.d.ts +0 -12
  142. package/bundler/file-cache/index.d.ts.map +0 -1
  143. package/bundler/file-cache/storage/filesystem.d.ts +0 -149
  144. package/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
  145. package/bundler/file-cache/storage/index.d.ts +0 -11
  146. package/bundler/file-cache/storage/index.d.ts.map +0 -1
  147. package/bundler/file-cache/storage/interface.d.ts +0 -152
  148. package/bundler/file-cache/storage/interface.d.ts.map +0 -1
  149. package/bundler/file-cache/storage/redis.d.ts +0 -139
  150. package/bundler/file-cache/storage/redis.d.ts.map +0 -1
  151. package/bundler/index.d.ts +0 -35
  152. package/bundler/index.d.ts.map +0 -1
  153. package/bundler/index.js +0 -2953
  154. package/bundler/sandbox/enclave-adapter.d.ts +0 -121
  155. package/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
  156. package/bundler/sandbox/executor.d.ts +0 -14
  157. package/bundler/sandbox/executor.d.ts.map +0 -1
  158. package/bundler/sandbox/policy.d.ts +0 -62
  159. package/bundler/sandbox/policy.d.ts.map +0 -1
  160. package/bundler/types.d.ts +0 -702
  161. package/bundler/types.d.ts.map +0 -1
  162. package/dependency/cdn-registry.d.ts +0 -98
  163. package/dependency/cdn-registry.d.ts.map +0 -1
  164. package/dependency/import-map.d.ts +0 -186
  165. package/dependency/import-map.d.ts.map +0 -1
  166. package/dependency/import-parser.d.ts +0 -82
  167. package/dependency/import-parser.d.ts.map +0 -1
  168. package/dependency/index.d.ts +0 -17
  169. package/dependency/index.d.ts.map +0 -1
  170. package/dependency/index.js +0 -3180
  171. package/dependency/resolver.d.ts +0 -164
  172. package/dependency/resolver.d.ts.map +0 -1
  173. package/dependency/schemas.d.ts +0 -486
  174. package/dependency/schemas.d.ts.map +0 -1
  175. package/dependency/template-loader.d.ts +0 -204
  176. package/dependency/template-loader.d.ts.map +0 -1
  177. package/dependency/template-processor.d.ts +0 -118
  178. package/dependency/template-processor.d.ts.map +0 -1
  179. package/dependency/types.d.ts +0 -739
  180. package/dependency/types.d.ts.map +0 -1
  181. package/esm/base-template/index.mjs +0 -1359
  182. package/esm/build/index.mjs +0 -8601
  183. package/esm/bundler/index.mjs +0 -2895
  184. package/esm/dependency/index.mjs +0 -3068
  185. package/esm/handlebars/index.mjs +0 -587
  186. package/esm/registry/index.mjs +0 -6305
  187. package/esm/renderers/index.mjs +0 -1557
  188. package/esm/runtime/index.mjs +0 -5361
  189. package/esm/styles/index.mjs +0 -171
  190. package/esm/theme/index.mjs +0 -756
  191. package/esm/tool-template/index.mjs +0 -3652
  192. package/esm/validation/index.mjs +0 -542
  193. package/handlebars/expression-extractor.d.ts +0 -147
  194. package/handlebars/expression-extractor.d.ts.map +0 -1
  195. package/handlebars/helpers.d.ts +0 -339
  196. package/handlebars/helpers.d.ts.map +0 -1
  197. package/handlebars/index.d.ts +0 -195
  198. package/handlebars/index.d.ts.map +0 -1
  199. package/handlebars/index.js +0 -659
  200. package/preview/claude-preview.d.ts +0 -67
  201. package/preview/claude-preview.d.ts.map +0 -1
  202. package/preview/generic-preview.d.ts +0 -66
  203. package/preview/generic-preview.d.ts.map +0 -1
  204. package/preview/index.d.ts +0 -36
  205. package/preview/index.d.ts.map +0 -1
  206. package/preview/openai-preview.d.ts +0 -70
  207. package/preview/openai-preview.d.ts.map +0 -1
  208. package/preview/types.d.ts +0 -199
  209. package/preview/types.d.ts.map +0 -1
  210. package/registry/index.d.ts +0 -46
  211. package/registry/index.d.ts.map +0 -1
  212. package/registry/index.js +0 -6342
  213. package/registry/render-template.d.ts +0 -91
  214. package/registry/render-template.d.ts.map +0 -1
  215. package/registry/tool-ui.registry.d.ts +0 -294
  216. package/registry/tool-ui.registry.d.ts.map +0 -1
  217. package/registry/uri-utils.d.ts +0 -56
  218. package/registry/uri-utils.d.ts.map +0 -1
  219. package/renderers/cache.d.ts +0 -145
  220. package/renderers/cache.d.ts.map +0 -1
  221. package/renderers/html.renderer.d.ts +0 -123
  222. package/renderers/html.renderer.d.ts.map +0 -1
  223. package/renderers/index.d.ts +0 -36
  224. package/renderers/index.d.ts.map +0 -1
  225. package/renderers/index.js +0 -1603
  226. package/renderers/mdx-client.renderer.d.ts +0 -124
  227. package/renderers/mdx-client.renderer.d.ts.map +0 -1
  228. package/renderers/registry.d.ts +0 -133
  229. package/renderers/registry.d.ts.map +0 -1
  230. package/renderers/types.d.ts +0 -343
  231. package/renderers/types.d.ts.map +0 -1
  232. package/renderers/utils/detect.d.ts +0 -107
  233. package/renderers/utils/detect.d.ts.map +0 -1
  234. package/renderers/utils/hash.d.ts +0 -40
  235. package/renderers/utils/hash.d.ts.map +0 -1
  236. package/renderers/utils/index.d.ts +0 -9
  237. package/renderers/utils/index.d.ts.map +0 -1
  238. package/renderers/utils/transpiler.d.ts +0 -70
  239. package/renderers/utils/transpiler.d.ts.map +0 -1
  240. package/runtime/adapters/html.adapter.d.ts +0 -59
  241. package/runtime/adapters/html.adapter.d.ts.map +0 -1
  242. package/runtime/adapters/index.d.ts +0 -26
  243. package/runtime/adapters/index.d.ts.map +0 -1
  244. package/runtime/adapters/mdx.adapter.d.ts +0 -73
  245. package/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  246. package/runtime/adapters/types.d.ts +0 -95
  247. package/runtime/adapters/types.d.ts.map +0 -1
  248. package/runtime/csp.d.ts +0 -48
  249. package/runtime/csp.d.ts.map +0 -1
  250. package/runtime/index.d.ts +0 -17
  251. package/runtime/index.d.ts.map +0 -1
  252. package/runtime/index.js +0 -5432
  253. package/runtime/mcp-bridge.d.ts +0 -101
  254. package/runtime/mcp-bridge.d.ts.map +0 -1
  255. package/runtime/renderer-runtime.d.ts +0 -133
  256. package/runtime/renderer-runtime.d.ts.map +0 -1
  257. package/runtime/sanitizer.d.ts +0 -180
  258. package/runtime/sanitizer.d.ts.map +0 -1
  259. package/runtime/types.d.ts +0 -415
  260. package/runtime/types.d.ts.map +0 -1
  261. package/runtime/wrapper.d.ts +0 -421
  262. package/runtime/wrapper.d.ts.map +0 -1
  263. package/styles/index.d.ts +0 -8
  264. package/styles/index.d.ts.map +0 -1
  265. package/styles/index.js +0 -222
  266. package/styles/variants.d.ts +0 -51
  267. package/styles/variants.d.ts.map +0 -1
  268. package/theme/cdn.d.ts +0 -195
  269. package/theme/cdn.d.ts.map +0 -1
  270. package/theme/css-to-theme.d.ts +0 -64
  271. package/theme/css-to-theme.d.ts.map +0 -1
  272. package/theme/index.d.ts +0 -19
  273. package/theme/index.d.ts.map +0 -1
  274. package/theme/index.js +0 -814
  275. package/theme/platforms.d.ts +0 -102
  276. package/theme/platforms.d.ts.map +0 -1
  277. package/theme/presets/github-openai.d.ts +0 -50
  278. package/theme/presets/github-openai.d.ts.map +0 -1
  279. package/theme/presets/index.d.ts +0 -11
  280. package/theme/presets/index.d.ts.map +0 -1
  281. package/theme/theme.d.ts +0 -396
  282. package/theme/theme.d.ts.map +0 -1
  283. package/tool-template/builder.d.ts +0 -213
  284. package/tool-template/builder.d.ts.map +0 -1
  285. package/tool-template/index.d.ts +0 -16
  286. package/tool-template/index.d.ts.map +0 -1
  287. package/tool-template/index.js +0 -3690
  288. package/validation/error-box.d.ts +0 -56
  289. package/validation/error-box.d.ts.map +0 -1
  290. package/validation/index.d.ts +0 -13
  291. package/validation/index.d.ts.map +0 -1
  292. package/validation/index.js +0 -576
  293. package/validation/schema-paths.d.ts +0 -118
  294. package/validation/schema-paths.d.ts.map +0 -1
  295. package/validation/template-validator.d.ts +0 -143
  296. package/validation/template-validator.d.ts.map +0 -1
  297. package/validation/wrapper.d.ts +0 -97
  298. package/validation/wrapper.d.ts.map +0 -1
@@ -1,127 +0,0 @@
1
- /**
2
- * Hybrid Mode Data Injection Utilities
3
- *
4
- * Provides utilities for injecting data into pre-built HTML shells
5
- * without requiring re-transpilation of the component code.
6
- *
7
- * @packageDocumentation
8
- */
9
- /**
10
- * Placeholder marker for hybrid mode.
11
- * Used as a string that callers can replace with actual JSON data.
12
- */
13
- export declare const HYBRID_DATA_PLACEHOLDER = "__FRONTMCP_OUTPUT_PLACEHOLDER__";
14
- /**
15
- * Placeholder for tool input injection.
16
- */
17
- export declare const HYBRID_INPUT_PLACEHOLDER = "__FRONTMCP_INPUT_PLACEHOLDER__";
18
- /**
19
- * Inject data into a hybrid mode HTML shell.
20
- * Replaces the placeholder with actual JSON data.
21
- *
22
- * This function is designed for high performance - it only does a string
23
- * replacement, avoiding any re-transpilation of component code.
24
- *
25
- * @param shell - HTML shell from bundleToStaticHTML with buildMode='hybrid'
26
- * @param data - Data to inject (will be JSON.stringify'd)
27
- * @param placeholder - Placeholder to replace (default: HYBRID_DATA_PLACEHOLDER)
28
- * @returns HTML with data injected
29
- *
30
- * @example
31
- * ```typescript
32
- * import { injectHybridData } from '@frontmcp/uipack/build';
33
- *
34
- * // Build shell once (cached)
35
- * const result = await bundler.bundleToStaticHTML({
36
- * source: myComponent,
37
- * toolName: 'my_tool',
38
- * buildMode: 'hybrid',
39
- * });
40
- *
41
- * // Store the shell for reuse
42
- * const cachedShell = result.html;
43
- *
44
- * // On each tool call, just inject data (no re-transpiling!)
45
- * const html1 = injectHybridData(cachedShell, { temperature: 72 });
46
- * const html2 = injectHybridData(cachedShell, { temperature: 85 });
47
- * ```
48
- */
49
- export declare function injectHybridData(shell: string, data: unknown, placeholder?: string): string;
50
- /**
51
- * Inject both input and output data into a hybrid mode HTML shell.
52
- * Replaces both input and output placeholders.
53
- *
54
- * @param shell - HTML shell with both placeholders
55
- * @param input - Input data to inject
56
- * @param output - Output data to inject
57
- * @returns HTML with both input and output injected
58
- *
59
- * @example
60
- * ```typescript
61
- * const html = injectHybridDataFull(cachedShell, { query: 'NYC' }, { temperature: 72 });
62
- * ```
63
- */
64
- export declare function injectHybridDataFull(shell: string, input: unknown, output: unknown): string;
65
- /**
66
- * Check if an HTML string is a hybrid mode shell (contains output placeholder).
67
- *
68
- * @param html - HTML string to check
69
- * @param placeholder - Placeholder to look for (default: HYBRID_DATA_PLACEHOLDER)
70
- * @returns true if the HTML contains the placeholder
71
- *
72
- * @example
73
- * ```typescript
74
- * import { isHybridShell } from '@frontmcp/uipack/build';
75
- *
76
- * if (isHybridShell(cachedHtml)) {
77
- * // Need to inject data before serving
78
- * const html = injectHybridData(cachedHtml, toolOutput);
79
- * }
80
- * ```
81
- */
82
- export declare function isHybridShell(html: string, placeholder?: string): boolean;
83
- /**
84
- * Check if an HTML string needs input injection.
85
- *
86
- * @param html - HTML string to check
87
- * @returns true if the HTML contains the input placeholder
88
- */
89
- export declare function needsInputInjection(html: string): boolean;
90
- /**
91
- * Get placeholders present in an HTML shell.
92
- *
93
- * @param html - HTML string to check
94
- * @returns Object indicating which placeholders are present
95
- */
96
- export declare function getHybridPlaceholders(html: string): {
97
- hasOutput: boolean;
98
- hasInput: boolean;
99
- };
100
- /**
101
- * Inject data into a dynamic/OpenAI shell with a trigger script for preview mode.
102
- *
103
- * This function:
104
- * 1. Replaces data placeholders (like injectHybridDataFull)
105
- * 2. Injects a script that calls window.__frontmcp.updateOutput(data) to trigger React re-renders
106
- *
107
- * Use this for preview mode when there's no actual OpenAI Canvas environment.
108
- * In production OpenAI environments, use injectHybridDataFull instead and let
109
- * the OpenAI Canvas trigger onToolResult.
110
- *
111
- * @param shell - HTML shell from bundleToStaticHTML with buildMode='dynamic'
112
- * @param input - Input data to inject
113
- * @param output - Output data to inject
114
- * @returns HTML with data injected and trigger script added
115
- *
116
- * @example
117
- * ```typescript
118
- * import { injectHybridDataWithTrigger } from '@frontmcp/uipack/build';
119
- *
120
- * // For preview mode with dynamic/OpenAI shells
121
- * const html = injectHybridDataWithTrigger(shell.html, inputData, outputData);
122
- * // The trigger script will call window.__frontmcp.updateOutput(outputData)
123
- * // which updates the store and triggers React re-renders
124
- * ```
125
- */
126
- export declare function injectHybridDataWithTrigger(shell: string, input: unknown, output: unknown): string;
127
- //# sourceMappingURL=hybrid-data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hybrid-data.d.ts","sourceRoot":"","sources":["../../src/build/hybrid-data.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;GAGG;AACH,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AAMzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,WAAW,GAAE,MAAgC,GAC5C,MAAM,CAaR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,GACd,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,MAAgC,GAC5C,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAKA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,GACd,MAAM,CAwCR"}
package/build/index.d.ts DELETED
@@ -1,299 +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' | '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, isFilePathTemplate, buildCSPForType, buildCSPMetaContent, getRendererAssets, buildToolResponseMeta, getOutputModeForClient, buildFileComponent, buildFileComponents, needsFileComponentRebuild, getCachedFileComponent, getPlatformFromClientInfo, } from './widget-manifest';
289
- export type { BatchBuildOptions, BatchBuildResult, BuildMetaOptions, FileComponentBuildOptions, FileComponentBuildResult, } 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, CLOUDFLARE_CDN, getDefaultAssets, buildCDNScriptTag, buildScriptsForUIType, buildTailwindScriptTag, hasInlineScripts, getURLsToPreFetch, getTailwindForPlatform, buildCloudflareStylesheetTag, buildCloudflareScriptTag, buildCDNInfoForUIType, } from './cdn-resources';
294
- export type { CDNInfo, CDNPlatform } from './cdn-resources';
295
- export { HYBRID_DATA_PLACEHOLDER, HYBRID_INPUT_PLACEHOLDER, injectHybridData, injectHybridDataFull, injectHybridDataWithTrigger, isHybridShell, needsInputInjection, getHybridPlaceholders, } from './hybrid-data';
296
- export { buildUIComponentsRuntime, buildStyleConstants, buildCardComponent, buildButtonComponent, buildBadgeComponent, buildAlertComponent, buildNamespaceExport, } from './ui-components-browser';
297
- export type { BrowserUIComponentsOptions } from './ui-components-browser';
298
- export { type BuildMode, type CdnMode, type BuilderOptions, type BuildToolOptions, type StaticBuildResult, type HybridBuildResult, type InlineBuildResult, type BuilderResult, type Builder, type IStaticBuilder, type IHybridBuilder, type IInlineBuilder, type TemplateType, type TemplateDetection, type TranspileOptions, type TranspileResult, BaseBuilder, StaticBuilder, HybridBuilder, InlineBuilder, DEFAULT_EXTERNALS, EXTERNAL_GLOBALS, CDN_URLS, CLOUDFLARE_CDN_URLS, createTransformConfig, createExternalizedConfig, createInlineConfig, createExternalsBanner, generateCdnScriptTags, generateGlobalsSetupScript, } from './builders';
299
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"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"}