@seed-ship/mcp-ui-solid 6.19.0 → 6.20.0

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 (262) hide show
  1. package/CHANGELOG.md +532 -0
  2. package/README.md +798 -1
  3. package/dist/adapters/connector.cjs +15 -4
  4. package/dist/adapters/connector.cjs.map +1 -1
  5. package/dist/adapters/connector.d.ts +38 -0
  6. package/dist/adapters/connector.d.ts.map +1 -1
  7. package/dist/adapters/connector.js +15 -4
  8. package/dist/adapters/connector.js.map +1 -1
  9. package/dist/adapters/index.d.ts +4 -3
  10. package/dist/adapters/index.d.ts.map +1 -1
  11. package/dist/adapters/macro-run.cjs +25 -13
  12. package/dist/adapters/macro-run.cjs.map +1 -1
  13. package/dist/adapters/macro-run.d.ts +37 -2
  14. package/dist/adapters/macro-run.d.ts.map +1 -1
  15. package/dist/adapters/macro-run.js +25 -13
  16. package/dist/adapters/macro-run.js.map +1 -1
  17. package/dist/adapters.cjs +2 -0
  18. package/dist/adapters.cjs.map +1 -1
  19. package/dist/adapters.js +4 -2
  20. package/dist/components/ActionGroupRenderer.cjs +3 -1
  21. package/dist/components/ActionGroupRenderer.cjs.map +1 -1
  22. package/dist/components/ActionGroupRenderer.d.ts.map +1 -1
  23. package/dist/components/ActionGroupRenderer.js +3 -1
  24. package/dist/components/ActionGroupRenderer.js.map +1 -1
  25. package/dist/components/AgentCard.cjs +11 -8
  26. package/dist/components/AgentCard.cjs.map +1 -1
  27. package/dist/components/AgentCard.d.ts.map +1 -1
  28. package/dist/components/AgentCard.js +11 -8
  29. package/dist/components/AgentCard.js.map +1 -1
  30. package/dist/components/AgentHandoff.cjs +6 -1
  31. package/dist/components/AgentHandoff.cjs.map +1 -1
  32. package/dist/components/AgentHandoff.d.ts.map +1 -1
  33. package/dist/components/AgentHandoff.js +6 -1
  34. package/dist/components/AgentHandoff.js.map +1 -1
  35. package/dist/components/ArtifactRenderer.cjs +25 -6
  36. package/dist/components/ArtifactRenderer.cjs.map +1 -1
  37. package/dist/components/ArtifactRenderer.d.ts.map +1 -1
  38. package/dist/components/ArtifactRenderer.js +25 -6
  39. package/dist/components/ArtifactRenderer.js.map +1 -1
  40. package/dist/components/AutocompleteDropdown.cjs +30 -24
  41. package/dist/components/AutocompleteDropdown.cjs.map +1 -1
  42. package/dist/components/AutocompleteDropdown.d.ts.map +1 -1
  43. package/dist/components/AutocompleteDropdown.js +30 -24
  44. package/dist/components/AutocompleteDropdown.js.map +1 -1
  45. package/dist/components/AutocompleteFormField.cjs +3 -1
  46. package/dist/components/AutocompleteFormField.cjs.map +1 -1
  47. package/dist/components/AutocompleteFormField.d.ts.map +1 -1
  48. package/dist/components/AutocompleteFormField.js +4 -2
  49. package/dist/components/AutocompleteFormField.js.map +1 -1
  50. package/dist/components/BriefingDiff.cjs +45 -39
  51. package/dist/components/BriefingDiff.cjs.map +1 -1
  52. package/dist/components/BriefingDiff.d.ts.map +1 -1
  53. package/dist/components/BriefingDiff.js +45 -39
  54. package/dist/components/BriefingDiff.js.map +1 -1
  55. package/dist/components/CarouselRenderer.cjs +8 -2
  56. package/dist/components/CarouselRenderer.cjs.map +1 -1
  57. package/dist/components/CarouselRenderer.d.ts.map +1 -1
  58. package/dist/components/CarouselRenderer.js +8 -2
  59. package/dist/components/CarouselRenderer.js.map +1 -1
  60. package/dist/components/ChartJSRenderer.cjs +60 -36
  61. package/dist/components/ChartJSRenderer.cjs.map +1 -1
  62. package/dist/components/ChartJSRenderer.d.ts.map +1 -1
  63. package/dist/components/ChartJSRenderer.js +61 -37
  64. package/dist/components/ChartJSRenderer.js.map +1 -1
  65. package/dist/components/ChatPrompt.cjs +15 -9
  66. package/dist/components/ChatPrompt.cjs.map +1 -1
  67. package/dist/components/ChatPrompt.d.ts.map +1 -1
  68. package/dist/components/ChatPrompt.js +15 -9
  69. package/dist/components/ChatPrompt.js.map +1 -1
  70. package/dist/components/CodeBlockRenderer.cjs +34 -16
  71. package/dist/components/CodeBlockRenderer.cjs.map +1 -1
  72. package/dist/components/CodeBlockRenderer.d.ts.map +1 -1
  73. package/dist/components/CodeBlockRenderer.js +34 -16
  74. package/dist/components/CodeBlockRenderer.js.map +1 -1
  75. package/dist/components/DataPreviewSection.cjs +91 -44
  76. package/dist/components/DataPreviewSection.cjs.map +1 -1
  77. package/dist/components/DataPreviewSection.d.ts.map +1 -1
  78. package/dist/components/DataPreviewSection.js +92 -45
  79. package/dist/components/DataPreviewSection.js.map +1 -1
  80. package/dist/components/DegradedFallback.cjs +20 -16
  81. package/dist/components/DegradedFallback.cjs.map +1 -1
  82. package/dist/components/DegradedFallback.d.ts.map +1 -1
  83. package/dist/components/DegradedFallback.js +20 -16
  84. package/dist/components/DegradedFallback.js.map +1 -1
  85. package/dist/components/FeedbackInline.cjs +19 -3
  86. package/dist/components/FeedbackInline.cjs.map +1 -1
  87. package/dist/components/FeedbackInline.js +19 -3
  88. package/dist/components/FeedbackInline.js.map +1 -1
  89. package/dist/components/FooterRenderer.cjs +21 -17
  90. package/dist/components/FooterRenderer.cjs.map +1 -1
  91. package/dist/components/FooterRenderer.d.ts.map +1 -1
  92. package/dist/components/FooterRenderer.js +21 -17
  93. package/dist/components/FooterRenderer.js.map +1 -1
  94. package/dist/components/FormFieldRenderer.cjs +116 -93
  95. package/dist/components/FormFieldRenderer.cjs.map +1 -1
  96. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  97. package/dist/components/FormFieldRenderer.js +116 -93
  98. package/dist/components/FormFieldRenderer.js.map +1 -1
  99. package/dist/components/FormRenderer.cjs +55 -31
  100. package/dist/components/FormRenderer.cjs.map +1 -1
  101. package/dist/components/FormRenderer.d.ts.map +1 -1
  102. package/dist/components/FormRenderer.js +55 -31
  103. package/dist/components/FormRenderer.js.map +1 -1
  104. package/dist/components/GenerativeUIErrorBoundary.cjs +20 -15
  105. package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
  106. package/dist/components/GenerativeUIErrorBoundary.d.ts.map +1 -1
  107. package/dist/components/GenerativeUIErrorBoundary.js +20 -15
  108. package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
  109. package/dist/components/GraphRenderer.cjs +56 -33
  110. package/dist/components/GraphRenderer.cjs.map +1 -1
  111. package/dist/components/GraphRenderer.d.ts.map +1 -1
  112. package/dist/components/GraphRenderer.js +56 -33
  113. package/dist/components/GraphRenderer.js.map +1 -1
  114. package/dist/components/ImageGalleryRenderer.cjs +13 -4
  115. package/dist/components/ImageGalleryRenderer.cjs.map +1 -1
  116. package/dist/components/ImageGalleryRenderer.d.ts.map +1 -1
  117. package/dist/components/ImageGalleryRenderer.js +13 -4
  118. package/dist/components/ImageGalleryRenderer.js.map +1 -1
  119. package/dist/components/LightboxOverlay.cjs +16 -8
  120. package/dist/components/LightboxOverlay.cjs.map +1 -1
  121. package/dist/components/LightboxOverlay.d.ts.map +1 -1
  122. package/dist/components/LightboxOverlay.js +17 -9
  123. package/dist/components/LightboxOverlay.js.map +1 -1
  124. package/dist/components/MapRenderer.cjs +59 -29
  125. package/dist/components/MapRenderer.cjs.map +1 -1
  126. package/dist/components/MapRenderer.d.ts +10 -2
  127. package/dist/components/MapRenderer.d.ts.map +1 -1
  128. package/dist/components/MapRenderer.js +60 -30
  129. package/dist/components/MapRenderer.js.map +1 -1
  130. package/dist/components/ModalRenderer.cjs +4 -1
  131. package/dist/components/ModalRenderer.cjs.map +1 -1
  132. package/dist/components/ModalRenderer.d.ts.map +1 -1
  133. package/dist/components/ModalRenderer.js +5 -2
  134. package/dist/components/ModalRenderer.js.map +1 -1
  135. package/dist/components/ScratchpadPanel.cjs +578 -535
  136. package/dist/components/ScratchpadPanel.cjs.map +1 -1
  137. package/dist/components/ScratchpadPanel.d.ts.map +1 -1
  138. package/dist/components/ScratchpadPanel.js +578 -535
  139. package/dist/components/ScratchpadPanel.js.map +1 -1
  140. package/dist/components/StreamingUIRenderer.cjs +92 -28
  141. package/dist/components/StreamingUIRenderer.cjs.map +1 -1
  142. package/dist/components/StreamingUIRenderer.d.ts.map +1 -1
  143. package/dist/components/StreamingUIRenderer.js +92 -28
  144. package/dist/components/StreamingUIRenderer.js.map +1 -1
  145. package/dist/components/UIResourceRenderer.cjs +456 -363
  146. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  147. package/dist/components/UIResourceRenderer.d.ts +21 -0
  148. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  149. package/dist/components/UIResourceRenderer.js +458 -365
  150. package/dist/components/UIResourceRenderer.js.map +1 -1
  151. package/dist/components/VerifiedText.cjs +39 -20
  152. package/dist/components/VerifiedText.cjs.map +1 -1
  153. package/dist/components/VerifiedText.d.ts +2 -1
  154. package/dist/components/VerifiedText.d.ts.map +1 -1
  155. package/dist/components/VerifiedText.js +39 -20
  156. package/dist/components/VerifiedText.js.map +1 -1
  157. package/dist/components/VideoRenderer.cjs +10 -5
  158. package/dist/components/VideoRenderer.cjs.map +1 -1
  159. package/dist/components/VideoRenderer.d.ts.map +1 -1
  160. package/dist/components/VideoRenderer.js +10 -5
  161. package/dist/components/VideoRenderer.js.map +1 -1
  162. package/dist/components/chart-data-table.cjs +38 -17
  163. package/dist/components/chart-data-table.cjs.map +1 -1
  164. package/dist/components/chart-data-table.d.ts +30 -1
  165. package/dist/components/chart-data-table.d.ts.map +1 -1
  166. package/dist/components/chart-data-table.js +38 -17
  167. package/dist/components/chart-data-table.js.map +1 -1
  168. package/dist/context/MCPActionContext.cjs +3 -1
  169. package/dist/context/MCPActionContext.cjs.map +1 -1
  170. package/dist/context/MCPActionContext.d.ts.map +1 -1
  171. package/dist/context/MCPActionContext.js +3 -1
  172. package/dist/context/MCPActionContext.js.map +1 -1
  173. package/dist/context/MCPUIStringsContext.cjs +285 -2
  174. package/dist/context/MCPUIStringsContext.cjs.map +1 -1
  175. package/dist/context/MCPUIStringsContext.d.ts +600 -3
  176. package/dist/context/MCPUIStringsContext.d.ts.map +1 -1
  177. package/dist/context/MCPUIStringsContext.js +285 -2
  178. package/dist/context/MCPUIStringsContext.js.map +1 -1
  179. package/dist/hooks/index.d.ts +2 -2
  180. package/dist/hooks/index.d.ts.map +1 -1
  181. package/dist/hooks/useStreamingUI.cjs +28 -10
  182. package/dist/hooks/useStreamingUI.cjs.map +1 -1
  183. package/dist/hooks/useStreamingUI.d.ts +37 -0
  184. package/dist/hooks/useStreamingUI.d.ts.map +1 -1
  185. package/dist/hooks/useStreamingUI.js +28 -10
  186. package/dist/hooks/useStreamingUI.js.map +1 -1
  187. package/dist/hooks.cjs +1 -0
  188. package/dist/hooks.cjs.map +1 -1
  189. package/dist/hooks.js +2 -1
  190. package/dist/index.cjs +23 -8
  191. package/dist/index.cjs.map +1 -1
  192. package/dist/index.d.cts +9 -3
  193. package/dist/index.d.ts +9 -3
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +18 -3
  196. package/dist/index.js.map +1 -1
  197. package/dist/services/validation.cjs +41 -16
  198. package/dist/services/validation.cjs.map +1 -1
  199. package/dist/services/validation.d.ts +47 -2
  200. package/dist/services/validation.d.ts.map +1 -1
  201. package/dist/services/validation.js +41 -16
  202. package/dist/services/validation.js.map +1 -1
  203. package/dist/utils/degraded-projections.cjs +37 -12
  204. package/dist/utils/degraded-projections.cjs.map +1 -1
  205. package/dist/utils/degraded-projections.d.ts +39 -3
  206. package/dist/utils/degraded-projections.d.ts.map +1 -1
  207. package/dist/utils/degraded-projections.js +37 -12
  208. package/dist/utils/degraded-projections.js.map +1 -1
  209. package/dist/utils/format-string.cjs +10 -0
  210. package/dist/utils/format-string.cjs.map +1 -0
  211. package/dist/utils/format-string.d.ts +26 -0
  212. package/dist/utils/format-string.d.ts.map +1 -0
  213. package/dist/utils/format-string.js +10 -0
  214. package/dist/utils/format-string.js.map +1 -0
  215. package/dist/validation.cjs +3 -0
  216. package/dist/validation.cjs.map +1 -1
  217. package/dist/validation.d.cts +2 -1
  218. package/dist/validation.d.ts +2 -1
  219. package/dist/validation.d.ts.map +1 -1
  220. package/dist/validation.js +4 -1
  221. package/package.json +1 -1
  222. package/src/adapters/connector.ts +58 -4
  223. package/src/adapters/index.ts +12 -2
  224. package/src/adapters/macro-run.ts +71 -11
  225. package/src/components/ActionGroupRenderer.tsx +3 -1
  226. package/src/components/AgentCard.tsx +27 -9
  227. package/src/components/AgentHandoff.tsx +4 -1
  228. package/src/components/ArtifactRenderer.tsx +17 -5
  229. package/src/components/AutocompleteDropdown.tsx +8 -6
  230. package/src/components/AutocompleteFormField.tsx +5 -1
  231. package/src/components/BriefingDiff.tsx +11 -3
  232. package/src/components/CarouselRenderer.tsx +4 -2
  233. package/src/components/ChartJSRenderer.tsx +18 -9
  234. package/src/components/ChatPrompt.tsx +13 -8
  235. package/src/components/CodeBlockRenderer.tsx +12 -10
  236. package/src/components/DataPreviewSection.tsx +92 -26
  237. package/src/components/DegradedFallback.tsx +4 -2
  238. package/src/components/FeedbackInline.tsx +2 -2
  239. package/src/components/FooterRenderer.tsx +3 -1
  240. package/src/components/FormFieldRenderer.tsx +34 -19
  241. package/src/components/FormRenderer.tsx +38 -10
  242. package/src/components/GenerativeUIErrorBoundary.tsx +8 -3
  243. package/src/components/GraphRenderer.tsx +31 -16
  244. package/src/components/ImageGalleryRenderer.tsx +8 -4
  245. package/src/components/LightboxOverlay.tsx +6 -4
  246. package/src/components/MapRenderer.tsx +57 -20
  247. package/src/components/ModalRenderer.tsx +3 -1
  248. package/src/components/ScratchpadPanel.tsx +95 -44
  249. package/src/components/StreamingUIRenderer.tsx +41 -11
  250. package/src/components/UIResourceRenderer.tsx +145 -63
  251. package/src/components/VerifiedText.tsx +19 -9
  252. package/src/components/VideoRenderer.tsx +6 -4
  253. package/src/components/chart-data-table.ts +68 -14
  254. package/src/context/MCPActionContext.tsx +4 -1
  255. package/src/context/MCPUIStringsContext.tsx +1004 -1
  256. package/src/hooks/index.ts +2 -1
  257. package/src/hooks/useStreamingUI.ts +64 -10
  258. package/src/index.ts +23 -0
  259. package/src/services/validation.ts +93 -16
  260. package/src/utils/degraded-projections.ts +75 -12
  261. package/src/utils/format-string.ts +33 -0
  262. package/src/validation.ts +5 -0
@@ -5,7 +5,7 @@ const solidJs = require("solid-js");
5
5
  const useStreamingUI = require("../hooks/useStreamingUI.cjs");
6
6
  const UIResourceRenderer = require("./UIResourceRenderer.cjs");
7
7
  const MCPUIStringsContext = require("../context/MCPUIStringsContext.cjs");
8
- var _tmpl$ = /* @__PURE__ */ web.template(`<span class="text-sm text-text-secondary"><!$><!/> / <!$><!/>`), _tmpl$2 = /* @__PURE__ */ web.template(`<div class=mt-2><div class="h-1 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="animate-progress-indeterminate h-full w-1/3 bg-brand-primary">`), _tmpl$3 = /* @__PURE__ */ web.template(`<div class="mb-4 rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-2 flex items-center justify-between"><span class="text-sm font-medium text-text-primary"></span><!$><!/></div><div class="h-2 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="h-full bg-brand-primary transition-all duration-300 ease-out"></div></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ web.template(`<button type=button class="mt-3 rounded-md bg-error-primary px-3 py-1.5 text-sm font-medium text-white hover:bg-error-hover">`), _tmpl$5 = /* @__PURE__ */ web.template(`<div class="mb-4 rounded-lg border border-border-error bg-error-subtle p-4"><div class="mb-2 flex items-center gap-2"><svg class="h-5 w-5 text-error-primary"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><span class="font-medium text-error-primary"></span></div><p class="text-sm text-text-secondary"></p><!$><!/>`), _tmpl$6 = /* @__PURE__ */ web.template(`<div><div class="font-medium text-text-primary">Cost</div><div>$<!$><!/>`), _tmpl$7 = /* @__PURE__ */ web.template(`<div><div class="font-medium text-text-primary">Cached</div><div class=text-success-primary>Yes`), _tmpl$8 = /* @__PURE__ */ web.template(`<div class="mt-6 rounded-lg border border-border-subtle bg-surface-secondary p-4 text-sm text-text-secondary"><div class="grid grid-cols-2 gap-4 md:grid-cols-4"><div><div class="font-medium text-text-primary">Provider</div><div></div></div><div><div class="font-medium text-text-primary">Model</div><div></div></div><div><div class="font-medium text-text-primary">Execution Time</div><div><!$><!/>ms</div></div><!$><!/><div><div class="font-medium text-text-primary">TTFB</div><div><!$><!/>ms</div></div><!$><!/>`), _tmpl$9 = /* @__PURE__ */ web.template(`<div><!$><!/><!$><!/><div class="grid grid-cols-12 gap-4"><!$><!/><!$><!/></div><!$><!/>`), _tmpl$0 = /* @__PURE__ */ web.template(`<div>`), _tmpl$1 = /* @__PURE__ */ web.template(`<div class="col-span-12 md:col-span-6 lg:col-span-4"><div class="animate-pulse rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-4 h-6 w-1/2 rounded bg-surface-tertiary"></div><div class=space-y-3><div class="h-4 rounded bg-surface-tertiary"></div><div class="h-4 w-5/6 rounded bg-surface-tertiary"></div><div class="h-4 w-4/6 rounded bg-surface-tertiary"></div></div><div class="mt-4 h-32 rounded bg-surface-tertiary">`);
8
+ var _tmpl$ = /* @__PURE__ */ web.template(`<span class="text-sm text-text-secondary"><!$><!/> / <!$><!/>`), _tmpl$2 = /* @__PURE__ */ web.template(`<div class=mt-2><div class="h-1 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="animate-progress-indeterminate h-full w-1/3 bg-brand-primary">`), _tmpl$3 = /* @__PURE__ */ web.template(`<div class="mb-4 rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-2 flex items-center justify-between"><span class="text-sm font-medium text-text-primary"></span><!$><!/></div><div class="h-2 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="h-full bg-brand-primary transition-all duration-300 ease-out"></div></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ web.template(`<button type=button class="mt-3 rounded-md bg-error-primary px-3 py-1.5 text-sm font-medium text-white hover:bg-error-hover">`), _tmpl$5 = /* @__PURE__ */ web.template(`<div class="mb-4 rounded-lg border border-border-error bg-error-subtle p-4"><div class="mb-2 flex items-center gap-2"><svg class="h-5 w-5 text-error-primary"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><span class="font-medium text-error-primary"></span></div><p class="text-sm text-text-secondary"></p><!$><!/>`), _tmpl$6 = /* @__PURE__ */ web.template(`<div><div class="font-medium text-text-primary"></div><div>`), _tmpl$7 = /* @__PURE__ */ web.template(`<div><div class="font-medium text-text-primary"></div><div class=text-success-primary>`), _tmpl$8 = /* @__PURE__ */ web.template(`<div class="mt-6 rounded-lg border border-border-subtle bg-surface-secondary p-4 text-sm text-text-secondary"><div class="grid grid-cols-2 gap-4 md:grid-cols-4"><div><div class="font-medium text-text-primary"></div><div></div></div><div><div class="font-medium text-text-primary"></div><div></div></div><div><div class="font-medium text-text-primary"></div><div><!$><!/>ms</div></div><!$><!/><div><div class="font-medium text-text-primary"></div><div><!$><!/>ms</div></div><!$><!/>`), _tmpl$9 = /* @__PURE__ */ web.template(`<div><!$><!/><!$><!/><div class="grid grid-cols-12 gap-4"><!$><!/><!$><!/></div><!$><!/>`), _tmpl$0 = /* @__PURE__ */ web.template(`<div>`), _tmpl$1 = /* @__PURE__ */ web.template(`<div class="col-span-12 md:col-span-6 lg:col-span-4"><div class="animate-pulse rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-4 h-6 w-1/2 rounded bg-surface-tertiary"></div><div class=space-y-3><div class="h-4 rounded bg-surface-tertiary"></div><div class="h-4 w-5/6 rounded bg-surface-tertiary"></div><div class="h-4 w-4/6 rounded bg-surface-tertiary"></div></div><div class="mt-4 h-32 rounded bg-surface-tertiary">`);
9
9
  function asFullWidth(component) {
10
10
  return {
11
11
  ...component,
@@ -16,6 +16,49 @@ function asFullWidth(component) {
16
16
  };
17
17
  }
18
18
  function StreamingUIRenderer(props) {
19
+ const strings = MCPUIStringsContext.useMCPUIStrings();
20
+ const messages = {
21
+ get initializing() {
22
+ var _a;
23
+ return ((_a = props.messages) == null ? void 0 : _a.initializing) ?? strings.streamInitializing;
24
+ },
25
+ get connecting() {
26
+ var _a;
27
+ return ((_a = props.messages) == null ? void 0 : _a.connecting) ?? strings.streamConnecting;
28
+ },
29
+ get loadingComponent() {
30
+ var _a;
31
+ return ((_a = props.messages) == null ? void 0 : _a.loadingComponent) ?? strings.streamLoadingComponent;
32
+ },
33
+ get dashboardLoaded() {
34
+ var _a;
35
+ return ((_a = props.messages) == null ? void 0 : _a.dashboardLoaded) ?? strings.streamDashboardLoaded;
36
+ },
37
+ get errorProgress() {
38
+ var _a;
39
+ return ((_a = props.messages) == null ? void 0 : _a.errorProgress) ?? strings.streamErrorProgress;
40
+ },
41
+ get connectionFailed() {
42
+ var _a;
43
+ return ((_a = props.messages) == null ? void 0 : _a.connectionFailed) ?? strings.streamConnectionFailed;
44
+ },
45
+ get requestFailed() {
46
+ var _a;
47
+ return ((_a = props.messages) == null ? void 0 : _a.requestFailed) ?? strings.streamRequestFailed;
48
+ },
49
+ get emptyResponse() {
50
+ var _a;
51
+ return ((_a = props.messages) == null ? void 0 : _a.emptyResponse) ?? strings.streamEmptyResponse;
52
+ },
53
+ get serverSide() {
54
+ var _a;
55
+ return ((_a = props.messages) == null ? void 0 : _a.serverSide) ?? strings.streamServerSide;
56
+ },
57
+ get unknownError() {
58
+ var _a;
59
+ return ((_a = props.messages) == null ? void 0 : _a.unknownError) ?? strings.streamUnknownError;
60
+ }
61
+ };
19
62
  const {
20
63
  components,
21
64
  isLoading,
@@ -31,9 +74,9 @@ function StreamingUIRenderer(props) {
31
74
  options: props.options,
32
75
  onComplete: props.onComplete,
33
76
  onError: props.onError,
34
- onComponentReceived: props.onComponentReceived
77
+ onComponentReceived: props.onComponentReceived,
78
+ messages
35
79
  });
36
- const strings = MCPUIStringsContext.useMCPUIStrings();
37
80
  const [animatingComponents, setAnimatingComponents] = solidJs.createSignal(/* @__PURE__ */ new Set());
38
81
  const handleComponentRender = (componentId) => {
39
82
  setAnimatingComponents((prev) => /* @__PURE__ */ new Set([...prev, componentId]));
@@ -46,7 +89,7 @@ function StreamingUIRenderer(props) {
46
89
  }, 500);
47
90
  };
48
91
  return (() => {
49
- var _el$ = web.getNextElement(_tmpl$9), _el$60 = _el$.firstChild, [_el$61, _co$11] = web.getNextMarker(_el$60.nextSibling), _el$62 = _el$61.nextSibling, [_el$63, _co$12] = web.getNextMarker(_el$62.nextSibling), _el$24 = _el$63.nextSibling, _el$25 = _el$24.firstChild, [_el$26, _co$6] = web.getNextMarker(_el$25.nextSibling), _el$27 = _el$26.nextSibling, [_el$28, _co$7] = web.getNextMarker(_el$27.nextSibling), _el$64 = _el$24.nextSibling, [_el$65, _co$13] = web.getNextMarker(_el$64.nextSibling);
92
+ var _el$ = web.getNextElement(_tmpl$9), _el$59 = _el$.firstChild, [_el$60, _co$10] = web.getNextMarker(_el$59.nextSibling), _el$61 = _el$60.nextSibling, [_el$62, _co$11] = web.getNextMarker(_el$61.nextSibling), _el$24 = _el$62.nextSibling, _el$25 = _el$24.firstChild, [_el$26, _co$6] = web.getNextMarker(_el$25.nextSibling), _el$27 = _el$26.nextSibling, [_el$28, _co$7] = web.getNextMarker(_el$27.nextSibling), _el$63 = _el$24.nextSibling, [_el$64, _co$12] = web.getNextMarker(_el$63.nextSibling);
50
93
  web.insert(_el$, web.createComponent(solidJs.Show, {
51
94
  get when() {
52
95
  return web.memo(() => props.showProgress !== false)() && (isLoading() || isStreaming());
@@ -76,17 +119,23 @@ function StreamingUIRenderer(props) {
76
119
  web.effect((_$p) => web.style(_el$12, progress().totalCount !== null ? `width: ${progress().receivedCount / progress().totalCount * 100}%` : "width: 0%", _$p));
77
120
  return _el$2;
78
121
  }
79
- }), _el$61, _co$11);
122
+ }), _el$60, _co$10);
80
123
  web.insert(_el$, web.createComponent(solidJs.Show, {
81
124
  get when() {
82
125
  return error();
83
126
  },
84
127
  get children() {
85
128
  var _el$16 = web.getNextElement(_tmpl$5), _el$17 = _el$16.firstChild, _el$18 = _el$17.firstChild, _el$19 = _el$18.nextSibling, _el$20 = _el$17.nextSibling, _el$22 = _el$20.nextSibling, [_el$23, _co$5] = web.getNextMarker(_el$22.nextSibling);
86
- web.insert(_el$19, () => {
87
- var _a;
88
- return (_a = error()) == null ? void 0 : _a.error;
89
- });
129
+ web.insert(_el$19, (() => {
130
+ var _c$ = web.memo(() => {
131
+ var _a;
132
+ return ((_a = error()) == null ? void 0 : _a.error) === "ssr";
133
+ });
134
+ return () => {
135
+ var _a;
136
+ return _c$() ? strings.streamServerSideTitle : (_a = error()) == null ? void 0 : _a.error;
137
+ };
138
+ })());
90
139
  web.insert(_el$20, () => {
91
140
  var _a;
92
141
  return (_a = error()) == null ? void 0 : _a.message;
@@ -106,7 +155,7 @@ function StreamingUIRenderer(props) {
106
155
  }), _el$23, _co$5);
107
156
  return _el$16;
108
157
  }
109
- }), _el$63, _co$12);
158
+ }), _el$62, _co$11);
110
159
  web.insert(_el$24, web.createComponent(solidJs.For, {
111
160
  get each() {
112
161
  return components();
@@ -114,8 +163,8 @@ function StreamingUIRenderer(props) {
114
163
  children: (component) => {
115
164
  solidJs.onMount(() => handleComponentRender(component.id));
116
165
  return (() => {
117
- var _el$66 = web.getNextElement(_tmpl$0);
118
- web.insert(_el$66, web.createComponent(UIResourceRenderer.UIResourceRenderer, {
166
+ var _el$65 = web.getNextElement(_tmpl$0);
167
+ web.insert(_el$65, web.createComponent(UIResourceRenderer.UIResourceRenderer, {
119
168
  get content() {
120
169
  return asFullWidth(component);
121
170
  },
@@ -134,14 +183,14 @@ function StreamingUIRenderer(props) {
134
183
  col-span-${component.position.colSpan}
135
184
  ${animatingComponents().has(component.id) ? "animate-fade-in-up" : ""}
136
185
  `, _v$2 = `grid-column-start: ${component.position.colStart}; grid-column-end: ${component.position.colStart + component.position.colSpan}`;
137
- _v$ !== _p$.e && web.className(_el$66, _p$.e = _v$);
138
- _p$.t = web.style(_el$66, _v$2, _p$.t);
186
+ _v$ !== _p$.e && web.className(_el$65, _p$.e = _v$);
187
+ _p$.t = web.style(_el$65, _v$2, _p$.t);
139
188
  return _p$;
140
189
  }, {
141
190
  e: void 0,
142
191
  t: void 0
143
192
  });
144
- return _el$66;
193
+ return _el$65;
145
194
  })();
146
195
  }
147
196
  }), _el$26, _co$6);
@@ -167,17 +216,20 @@ function StreamingUIRenderer(props) {
167
216
  get children() {
168
217
  var _el$29 = web.getNextElement(_tmpl$8), _el$30 = _el$29.firstChild, _el$31 = _el$30.firstChild, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$31.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.nextSibling, _el$37 = _el$34.nextSibling, _el$38 = _el$37.firstChild, _el$39 = _el$38.nextSibling, _el$41 = _el$39.firstChild, [_el$42, _co$8] = web.getNextMarker(_el$41.nextSibling);
169
218
  _el$42.nextSibling;
170
- var _el$56 = _el$37.nextSibling, [_el$57, _co$1] = web.getNextMarker(_el$56.nextSibling), _el$49 = _el$57.nextSibling, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$53 = _el$51.firstChild, [_el$54, _co$0] = web.getNextMarker(_el$53.nextSibling);
171
- _el$54.nextSibling;
172
- var _el$58 = _el$49.nextSibling, [_el$59, _co$10] = web.getNextMarker(_el$58.nextSibling);
219
+ var _el$55 = _el$37.nextSibling, [_el$56, _co$0] = web.getNextMarker(_el$55.nextSibling), _el$46 = _el$56.nextSibling, _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling, _el$50 = _el$48.firstChild, [_el$51, _co$9] = web.getNextMarker(_el$50.nextSibling);
220
+ _el$51.nextSibling;
221
+ var _el$57 = _el$46.nextSibling, [_el$58, _co$1] = web.getNextMarker(_el$57.nextSibling);
222
+ web.insert(_el$32, () => strings.metaProvider);
173
223
  web.insert(_el$33, () => {
174
224
  var _a;
175
225
  return (_a = metadata()) == null ? void 0 : _a.provider;
176
226
  });
227
+ web.insert(_el$35, () => strings.metaModel);
177
228
  web.insert(_el$36, () => {
178
229
  var _a;
179
230
  return (_a = metadata()) == null ? void 0 : _a.model;
180
231
  });
232
+ web.insert(_el$38, () => strings.metaExecutionTime);
181
233
  web.insert(_el$39, () => {
182
234
  var _a;
183
235
  return (_a = metadata()) == null ? void 0 : _a.executionTimeMs;
@@ -188,30 +240,42 @@ function StreamingUIRenderer(props) {
188
240
  return ((_a = metadata()) == null ? void 0 : _a.costUSD) !== void 0;
189
241
  },
190
242
  get children() {
191
- var _el$43 = web.getNextElement(_tmpl$6), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling, [_el$48, _co$9] = web.getNextMarker(_el$47.nextSibling);
243
+ var _el$43 = web.getNextElement(_tmpl$6), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
244
+ web.insert(_el$44, () => strings.metaCost);
192
245
  web.insert(_el$45, () => {
193
- var _a, _b;
194
- return (_b = (_a = metadata()) == null ? void 0 : _a.costUSD) == null ? void 0 : _b.toFixed(4);
195
- }, _el$48, _co$9);
246
+ var _a;
247
+ return new Intl.NumberFormat(strings.locale, {
248
+ style: "currency",
249
+ currency: "USD",
250
+ currencyDisplay: "narrowSymbol",
251
+ minimumFractionDigits: 4,
252
+ maximumFractionDigits: 4,
253
+ useGrouping: false
254
+ }).format(((_a = metadata()) == null ? void 0 : _a.costUSD) ?? 0);
255
+ });
196
256
  return _el$43;
197
257
  }
198
- }), _el$57, _co$1);
199
- web.insert(_el$51, () => {
258
+ }), _el$56, _co$0);
259
+ web.insert(_el$47, () => strings.metaTtfb);
260
+ web.insert(_el$48, () => {
200
261
  var _a;
201
262
  return (_a = metadata()) == null ? void 0 : _a.firstTokenMs;
202
- }, _el$54, _co$0);
263
+ }, _el$51, _co$9);
203
264
  web.insert(_el$30, web.createComponent(solidJs.Show, {
204
265
  get when() {
205
266
  var _a;
206
267
  return (_a = metadata()) == null ? void 0 : _a.cached;
207
268
  },
208
269
  get children() {
209
- return web.getNextElement(_tmpl$7);
270
+ var _el$52 = web.getNextElement(_tmpl$7), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
271
+ web.insert(_el$53, () => strings.metaCached);
272
+ web.insert(_el$54, () => strings.yes);
273
+ return _el$52;
210
274
  }
211
- }), _el$59, _co$10);
275
+ }), _el$58, _co$1);
212
276
  return _el$29;
213
277
  }
214
- }), _el$65, _co$13);
278
+ }), _el$64, _co$12);
215
279
  web.effect(() => web.className(_el$, `streaming-ui-renderer ${props.class || ""}`));
216
280
  return _el$;
217
281
  })();
@@ -1 +1 @@
1
- {"version":3,"file":"StreamingUIRenderer.cjs","sources":["../../src/components/StreamingUIRenderer.tsx"],"sourcesContent":["/**\n * StreamingUIRenderer Component\n *\n * Renders streaming dashboard components with skeleton states and progress\n * indicators. Uses the `useStreamingUI` hook for SSE connection and state.\n *\n * ## Rendering parity (v6.6.0 — closes Gap 1 of ROADMAP-opendata-macro-mcpui)\n *\n * Each component received over SSE is delegated to the real\n * `<UIResourceRenderer>`. Streamed `table` / `chart` / `map` / `action-group`\n * therefore render with the SAME fidelity as a static layout — no more\n * simplified \"type + title\" placeholder. Validation, telemetry, the error\n * boundary and `errorMode` all come from `<UIResourceRenderer>`, so the two\n * paths cannot drift.\n *\n * Delegation is a one-way value import (`UIResourceRenderer` never imports\n * this file — no cycle). The streamed component's `position` is normalized\n * to full-width before delegation : this component owns the 12-column grid,\n * `<UIResourceRenderer>` only owns the component's own rendering.\n *\n * Features:\n * - Skeleton loading states while components stream\n * - Progress bar and status messages\n * - Smooth component animations on arrival\n * - Error handling with retry capability\n * - Responsive 12-column grid layout\n *\n * Usage:\n * ```tsx\n * <StreamingUIRenderer\n * query=\"Show me revenue trends\"\n * spaceIds={['uuid1', 'uuid2']}\n * onComplete={(metadata) => console.log('Done!', metadata)}\n * />\n * ```\n */\n\nimport { Show, For, createSignal, onMount } from 'solid-js'\nimport { useStreamingUI, type UseStreamingUIOptions } from '../hooks/useStreamingUI'\nimport type { UIComponent, RendererError } from '../types'\nimport { UIResourceRenderer, type ValidationErrorMode } from './UIResourceRenderer'\nimport { useMCPUIStrings } from '../context/MCPUIStringsContext'\n\nexport interface StreamingUIRendererProps extends UseStreamingUIOptions {\n class?: string\n showProgress?: boolean\n showMetadata?: boolean\n onRenderError?: (error: RendererError) => void\n /**\n * How to react when a streamed component fails `validateComponent()`\n * (v5.4.0). Defaults to `'block'` (full red error card — pre-v5.4.0\n * behavior). Forwarded to the delegated `<UIResourceRenderer>`.\n */\n errorMode?: ValidationErrorMode\n /**\n * Visibility behavior of the inline expand button on streamed components\n * wrapped in `<ExpandableWrapper>` (v6.6.0 — parity with the static\n * `<UIResourceRenderer toolbarVariant>` prop). Forwarded as-is.\n */\n toolbarVariant?: 'hover' | 'always-visible'\n}\n\n/**\n * The 12-column placement of a streamed component is owned by this\n * component's outer grid (the cell `<div>` below). Delegating the component\n * verbatim to `<UIResourceRenderer>` would re-apply that placement inside a\n * fresh nested 12-column grid and visually misplace it. We hand\n * `<UIResourceRenderer>` a full-width copy so it only renders the component,\n * not a competing layout.\n */\nfunction asFullWidth(component: UIComponent): UIComponent {\n return { ...component, position: { colStart: 1, colSpan: 12 } }\n}\n\nexport function StreamingUIRenderer(props: StreamingUIRendererProps) {\n const { components, isLoading, isStreaming, error, progress, metadata, startStreaming } =\n useStreamingUI({\n query: props.query,\n spaceIds: props.spaceIds,\n sessionId: props.sessionId,\n options: props.options,\n onComplete: props.onComplete,\n onError: props.onError,\n onComponentReceived: props.onComponentReceived,\n })\n\n const strings = useMCPUIStrings()\n const [animatingComponents, setAnimatingComponents] = createSignal<Set<string>>(new Set())\n\n // Track new components for animation\n const handleComponentRender = (componentId: string) => {\n setAnimatingComponents((prev) => new Set([...prev, componentId]))\n\n // Remove from animating set after animation completes\n setTimeout(() => {\n setAnimatingComponents((prev) => {\n const next = new Set(prev)\n next.delete(componentId)\n return next\n })\n }, 500)\n }\n\n return (\n <div class={`streaming-ui-renderer ${props.class || ''}`}>\n {/* Progress Bar */}\n <Show when={props.showProgress !== false && (isLoading() || isStreaming())}>\n <div class=\"mb-4 rounded-lg border border-border-subtle bg-surface-secondary p-4\">\n {/* Status Message */}\n <div class=\"mb-2 flex items-center justify-between\">\n <span class=\"text-sm font-medium text-text-primary\">{progress().message}</span>\n <Show when={progress().totalCount !== null}>\n <span class=\"text-sm text-text-secondary\">\n {progress().receivedCount} / {progress().totalCount}\n </span>\n </Show>\n </div>\n\n {/* Progress Bar */}\n <div class=\"h-2 w-full overflow-hidden rounded-full bg-surface-tertiary\">\n <div\n class=\"h-full bg-brand-primary transition-all duration-300 ease-out\"\n style={\n progress().totalCount !== null\n ? `width: ${(progress().receivedCount / progress().totalCount!) * 100}%`\n : 'width: 0%'\n }\n />\n </div>\n\n {/* Indeterminate Progress (when totalCount unknown) */}\n <Show when={progress().totalCount === null && isStreaming()}>\n <div class=\"mt-2\">\n <div class=\"h-1 w-full overflow-hidden rounded-full bg-surface-tertiary\">\n <div class=\"animate-progress-indeterminate h-full w-1/3 bg-brand-primary\" />\n </div>\n </div>\n </Show>\n </div>\n </Show>\n\n {/* Error State */}\n <Show when={error()}>\n <div class=\"mb-4 rounded-lg border border-border-error bg-error-subtle p-4\">\n <div class=\"mb-2 flex items-center gap-2\">\n <svg\n class=\"h-5 w-5 text-error-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span class=\"font-medium text-error-primary\">{error()?.error}</span>\n </div>\n <p class=\"text-sm text-text-secondary\">{error()?.message}</p>\n\n {/* Retry Button (if recoverable) */}\n <Show when={error()?.recoverable}>\n <button\n type=\"button\"\n class=\"mt-3 rounded-md bg-error-primary px-3 py-1.5 text-sm font-medium text-white hover:bg-error-hover\"\n onClick={() => startStreaming()}\n >\n {strings.retry}\n </button>\n </Show>\n </div>\n </Show>\n\n {/* Components Grid */}\n <div class=\"grid grid-cols-12 gap-4\">\n {/* Render received components — delegated to the real UIResourceRenderer */}\n <For each={components()}>\n {(component) => {\n // Trigger animation on mount (SSR-safe, no 'use' directive needed)\n onMount(() => handleComponentRender(component.id))\n\n return (\n <div\n class={`\n col-span-${component.position.colSpan}\n ${animatingComponents().has(component.id) ? 'animate-fade-in-up' : ''}\n `}\n style={`grid-column-start: ${component.position.colStart}; grid-column-end: ${component.position.colStart + component.position.colSpan}`}\n >\n <UIResourceRenderer\n content={asFullWidth(component)}\n errorMode={props.errorMode}\n onError={props.onRenderError}\n toolbarVariant={props.toolbarVariant}\n />\n </div>\n )\n }}\n </For>\n\n {/* Skeleton placeholders (if streaming and expecting more) */}\n <Show when={isStreaming() && progress().totalCount !== null}>\n <For\n each={Array.from({\n length: progress().totalCount! - progress().receivedCount,\n })}\n >\n {() => <SkeletonComponent />}\n </For>\n </Show>\n </div>\n\n {/* Metadata Display */}\n <Show when={props.showMetadata !== false && metadata()}>\n <div class=\"mt-6 rounded-lg border border-border-subtle bg-surface-secondary p-4 text-sm text-text-secondary\">\n <div class=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n <div>\n <div class=\"font-medium text-text-primary\">Provider</div>\n <div>{metadata()?.provider}</div>\n </div>\n <div>\n <div class=\"font-medium text-text-primary\">Model</div>\n <div>{metadata()?.model}</div>\n </div>\n <div>\n <div class=\"font-medium text-text-primary\">Execution Time</div>\n <div>{metadata()?.executionTimeMs}ms</div>\n </div>\n <Show when={metadata()?.costUSD !== undefined}>\n <div>\n <div class=\"font-medium text-text-primary\">Cost</div>\n <div>${metadata()?.costUSD?.toFixed(4)}</div>\n </div>\n </Show>\n <div>\n <div class=\"font-medium text-text-primary\">TTFB</div>\n <div>{metadata()?.firstTokenMs}ms</div>\n </div>\n <Show when={metadata()?.cached}>\n <div>\n <div class=\"font-medium text-text-primary\">Cached</div>\n <div class=\"text-success-primary\">Yes</div>\n </div>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Skeleton Component - Placeholder while components load\n */\nfunction SkeletonComponent() {\n return (\n <div class=\"col-span-12 md:col-span-6 lg:col-span-4\">\n <div class=\"animate-pulse rounded-lg border border-border-subtle bg-surface-secondary p-4\">\n {/* Header skeleton */}\n <div class=\"mb-4 h-6 w-1/2 rounded bg-surface-tertiary\" />\n\n {/* Content skeleton */}\n <div class=\"space-y-3\">\n <div class=\"h-4 rounded bg-surface-tertiary\" />\n <div class=\"h-4 w-5/6 rounded bg-surface-tertiary\" />\n <div class=\"h-4 w-4/6 rounded bg-surface-tertiary\" />\n </div>\n\n {/* Chart/visual skeleton */}\n <div class=\"mt-4 h-32 rounded bg-surface-tertiary\" />\n </div>\n </div>\n )\n}\n\n// CSS Animations (add to global styles or Tailwind config)\n/*\n@keyframes fade-in-up {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes progress-indeterminate {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n}\n\n.animate-fade-in-up {\n animation: fade-in-up 0.5s ease-out;\n}\n\n.animate-progress-indeterminate {\n animation: progress-indeterminate 1.5s infinite ease-in-out;\n}\n*/\n"],"names":["asFullWidth","component","position","colStart","colSpan","StreamingUIRenderer","props","components","isLoading","isStreaming","error","progress","metadata","startStreaming","useStreamingUI","query","spaceIds","sessionId","options","onComplete","onError","onComponentReceived","strings","useMCPUIStrings","animatingComponents","setAnimatingComponents","createSignal","Set","handleComponentRender","componentId","prev","setTimeout","next","delete","_el$","_$getNextElement","_tmpl$9","_el$60","firstChild","_el$61","_co$11","_$getNextMarker","nextSibling","_el$62","_el$63","_co$12","_el$24","_el$25","_el$26","_co$6","_el$27","_el$28","_co$7","_el$64","_el$65","_co$13","_$insert","_$createComponent","Show","when","_$memo","showProgress","children","_el$2","_tmpl$3","_el$3","_el$4","_el$1","_el$10","_co$3","_el$11","_el$12","_el$14","_el$15","_co$4","message","totalCount","_el$5","_tmpl$","_el$7","_el$8","_co$","_el$6","_el$9","_el$0","_co$2","receivedCount","_tmpl$2","_$effect","_$p","_$style","_el$16","_tmpl$5","_el$17","_el$18","_el$19","_el$20","_el$22","_el$23","_co$5","recoverable","_el$21","_tmpl$4","$$click","retry","_$runHydrationEvents","For","each","onMount","id","_el$66","_tmpl$0","UIResourceRenderer","content","errorMode","onRenderError","toolbarVariant","_p$","_v$","has","_v$2","e","_$className","t","undefined","Array","from","length","SkeletonComponent","showMetadata","_el$29","_tmpl$8","_el$30","_el$31","_el$32","_el$33","_el$34","_el$35","_el$36","_el$37","_el$38","_el$39","_el$41","_el$42","_co$8","_el$56","_el$57","_co$1","_el$49","_el$50","_el$51","_el$53","_el$54","_co$0","_el$58","_el$59","_co$10","provider","model","executionTimeMs","costUSD","_el$43","_tmpl$6","_el$44","_el$45","_el$46","_el$47","_el$48","_co$9","toFixed","firstTokenMs","cached","_tmpl$7","class","_tmpl$1","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"StreamingUIRenderer.cjs","sources":["../../src/components/StreamingUIRenderer.tsx"],"sourcesContent":["/**\n * StreamingUIRenderer Component\n *\n * Renders streaming dashboard components with skeleton states and progress\n * indicators. Uses the `useStreamingUI` hook for SSE connection and state.\n *\n * ## Rendering parity (v6.6.0 — closes Gap 1 of ROADMAP-opendata-macro-mcpui)\n *\n * Each component received over SSE is delegated to the real\n * `<UIResourceRenderer>`. Streamed `table` / `chart` / `map` / `action-group`\n * therefore render with the SAME fidelity as a static layout — no more\n * simplified \"type + title\" placeholder. Validation, telemetry, the error\n * boundary and `errorMode` all come from `<UIResourceRenderer>`, so the two\n * paths cannot drift.\n *\n * Delegation is a one-way value import (`UIResourceRenderer` never imports\n * this file — no cycle). The streamed component's `position` is normalized\n * to full-width before delegation : this component owns the 12-column grid,\n * `<UIResourceRenderer>` only owns the component's own rendering.\n *\n * Features:\n * - Skeleton loading states while components stream\n * - Progress bar and status messages\n * - Smooth component animations on arrival\n * - Error handling with retry capability\n * - Responsive 12-column grid layout\n *\n * Usage:\n * ```tsx\n * <StreamingUIRenderer\n * query=\"Show me revenue trends\"\n * spaceIds={['uuid1', 'uuid2']}\n * onComplete={(metadata) => console.log('Done!', metadata)}\n * />\n * ```\n */\n\nimport { Show, For, createSignal, onMount } from 'solid-js'\nimport {\n useStreamingUI,\n type StreamingUIMessages,\n type UseStreamingUIOptions,\n} from '../hooks/useStreamingUI'\nimport type { UIComponent, RendererError } from '../types'\nimport { UIResourceRenderer, type ValidationErrorMode } from './UIResourceRenderer'\nimport { useMCPUIStrings } from '../context/MCPUIStringsContext'\n\nexport interface StreamingUIRendererProps extends UseStreamingUIOptions {\n class?: string\n showProgress?: boolean\n showMetadata?: boolean\n onRenderError?: (error: RendererError) => void\n /**\n * How to react when a streamed component fails `validateComponent()`\n * (v5.4.0). Defaults to `'block'` (full red error card — pre-v5.4.0\n * behavior). Forwarded to the delegated `<UIResourceRenderer>`.\n */\n errorMode?: ValidationErrorMode\n /**\n * Visibility behavior of the inline expand button on streamed components\n * wrapped in `<ExpandableWrapper>` (v6.6.0 — parity with the static\n * `<UIResourceRenderer toolbarVariant>` prop). Forwarded as-is.\n */\n toolbarVariant?: 'hover' | 'always-visible'\n}\n\n/**\n * The 12-column placement of a streamed component is owned by this\n * component's outer grid (the cell `<div>` below). Delegating the component\n * verbatim to `<UIResourceRenderer>` would re-apply that placement inside a\n * fresh nested 12-column grid and visually misplace it. We hand\n * `<UIResourceRenderer>` a full-width copy so it only renders the component,\n * not a competing layout.\n */\nfunction asFullWidth(component: UIComponent): UIComponent {\n return { ...component, position: { colStart: 1, colSpan: 12 } }\n}\n\nexport function StreamingUIRenderer(props: StreamingUIRendererProps) {\n const strings = useMCPUIStrings()\n // Getters: each message is read from the context when the hook produces it.\n // An explicit `props.messages` entry wins over the context.\n const messages: StreamingUIMessages = {\n get initializing() { return props.messages?.initializing ?? strings.streamInitializing },\n get connecting() { return props.messages?.connecting ?? strings.streamConnecting },\n get loadingComponent() { return props.messages?.loadingComponent ?? strings.streamLoadingComponent },\n get dashboardLoaded() { return props.messages?.dashboardLoaded ?? strings.streamDashboardLoaded },\n get errorProgress() { return props.messages?.errorProgress ?? strings.streamErrorProgress },\n get connectionFailed() { return props.messages?.connectionFailed ?? strings.streamConnectionFailed },\n get requestFailed() { return props.messages?.requestFailed ?? strings.streamRequestFailed },\n get emptyResponse() { return props.messages?.emptyResponse ?? strings.streamEmptyResponse },\n get serverSide() { return props.messages?.serverSide ?? strings.streamServerSide },\n get unknownError() { return props.messages?.unknownError ?? strings.streamUnknownError },\n }\n const { components, isLoading, isStreaming, error, progress, metadata, startStreaming } =\n useStreamingUI({\n query: props.query,\n spaceIds: props.spaceIds,\n sessionId: props.sessionId,\n options: props.options,\n onComplete: props.onComplete,\n onError: props.onError,\n onComponentReceived: props.onComponentReceived,\n messages,\n })\n\n const [animatingComponents, setAnimatingComponents] = createSignal<Set<string>>(new Set())\n\n // Track new components for animation\n const handleComponentRender = (componentId: string) => {\n setAnimatingComponents((prev) => new Set([...prev, componentId]))\n\n // Remove from animating set after animation completes\n setTimeout(() => {\n setAnimatingComponents((prev) => {\n const next = new Set(prev)\n next.delete(componentId)\n return next\n })\n }, 500)\n }\n\n return (\n <div class={`streaming-ui-renderer ${props.class || ''}`}>\n {/* Progress Bar */}\n <Show when={props.showProgress !== false && (isLoading() || isStreaming())}>\n <div class=\"mb-4 rounded-lg border border-border-subtle bg-surface-secondary p-4\">\n {/* Status Message */}\n <div class=\"mb-2 flex items-center justify-between\">\n <span class=\"text-sm font-medium text-text-primary\">{progress().message}</span>\n <Show when={progress().totalCount !== null}>\n <span class=\"text-sm text-text-secondary\">\n {progress().receivedCount} / {progress().totalCount}\n </span>\n </Show>\n </div>\n\n {/* Progress Bar */}\n <div class=\"h-2 w-full overflow-hidden rounded-full bg-surface-tertiary\">\n <div\n class=\"h-full bg-brand-primary transition-all duration-300 ease-out\"\n style={\n progress().totalCount !== null\n ? `width: ${(progress().receivedCount / progress().totalCount!) * 100}%`\n : 'width: 0%'\n }\n />\n </div>\n\n {/* Indeterminate Progress (when totalCount unknown) */}\n <Show when={progress().totalCount === null && isStreaming()}>\n <div class=\"mt-2\">\n <div class=\"h-1 w-full overflow-hidden rounded-full bg-surface-tertiary\">\n <div class=\"animate-progress-indeterminate h-full w-1/3 bg-brand-primary\" />\n </div>\n </div>\n </Show>\n </div>\n </Show>\n\n {/* Error State */}\n <Show when={error()}>\n <div class=\"mb-4 rounded-lg border border-border-error bg-error-subtle p-4\">\n <div class=\"mb-2 flex items-center gap-2\">\n <svg\n class=\"h-5 w-5 text-error-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span class=\"font-medium text-error-primary\">\n {error()?.error === 'ssr' ? strings.streamServerSideTitle : error()?.error}\n </span>\n </div>\n <p class=\"text-sm text-text-secondary\">{error()?.message}</p>\n\n {/* Retry Button (if recoverable) */}\n <Show when={error()?.recoverable}>\n <button\n type=\"button\"\n class=\"mt-3 rounded-md bg-error-primary px-3 py-1.5 text-sm font-medium text-white hover:bg-error-hover\"\n onClick={() => startStreaming()}\n >\n {strings.retry}\n </button>\n </Show>\n </div>\n </Show>\n\n {/* Components Grid */}\n <div class=\"grid grid-cols-12 gap-4\">\n {/* Render received components — delegated to the real UIResourceRenderer */}\n <For each={components()}>\n {(component) => {\n // Trigger animation on mount (SSR-safe, no 'use' directive needed)\n onMount(() => handleComponentRender(component.id))\n\n return (\n <div\n class={`\n col-span-${component.position.colSpan}\n ${animatingComponents().has(component.id) ? 'animate-fade-in-up' : ''}\n `}\n style={`grid-column-start: ${component.position.colStart}; grid-column-end: ${component.position.colStart + component.position.colSpan}`}\n >\n <UIResourceRenderer\n content={asFullWidth(component)}\n errorMode={props.errorMode}\n onError={props.onRenderError}\n toolbarVariant={props.toolbarVariant}\n />\n </div>\n )\n }}\n </For>\n\n {/* Skeleton placeholders (if streaming and expecting more) */}\n <Show when={isStreaming() && progress().totalCount !== null}>\n <For\n each={Array.from({\n length: progress().totalCount! - progress().receivedCount,\n })}\n >\n {() => <SkeletonComponent />}\n </For>\n </Show>\n </div>\n\n {/* Metadata Display */}\n <Show when={props.showMetadata !== false && metadata()}>\n <div class=\"mt-6 rounded-lg border border-border-subtle bg-surface-secondary p-4 text-sm text-text-secondary\">\n <div class=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n <div>\n <div class=\"font-medium text-text-primary\">{strings.metaProvider}</div>\n <div>{metadata()?.provider}</div>\n </div>\n <div>\n <div class=\"font-medium text-text-primary\">{strings.metaModel}</div>\n <div>{metadata()?.model}</div>\n </div>\n <div>\n <div class=\"font-medium text-text-primary\">{strings.metaExecutionTime}</div>\n <div>{metadata()?.executionTimeMs}ms</div>\n </div>\n <Show when={metadata()?.costUSD !== undefined}>\n <div>\n <div class=\"font-medium text-text-primary\">{strings.metaCost}</div>\n <div>\n {new Intl.NumberFormat(strings.locale, {\n style: 'currency',\n currency: 'USD',\n currencyDisplay: 'narrowSymbol',\n minimumFractionDigits: 4,\n maximumFractionDigits: 4,\n useGrouping: false,\n }).format(metadata()?.costUSD ?? 0)}\n </div>\n </div>\n </Show>\n <div>\n <div class=\"font-medium text-text-primary\">{strings.metaTtfb}</div>\n <div>{metadata()?.firstTokenMs}ms</div>\n </div>\n <Show when={metadata()?.cached}>\n <div>\n <div class=\"font-medium text-text-primary\">{strings.metaCached}</div>\n <div class=\"text-success-primary\">{strings.yes}</div>\n </div>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Skeleton Component - Placeholder while components load\n */\nfunction SkeletonComponent() {\n return (\n <div class=\"col-span-12 md:col-span-6 lg:col-span-4\">\n <div class=\"animate-pulse rounded-lg border border-border-subtle bg-surface-secondary p-4\">\n {/* Header skeleton */}\n <div class=\"mb-4 h-6 w-1/2 rounded bg-surface-tertiary\" />\n\n {/* Content skeleton */}\n <div class=\"space-y-3\">\n <div class=\"h-4 rounded bg-surface-tertiary\" />\n <div class=\"h-4 w-5/6 rounded bg-surface-tertiary\" />\n <div class=\"h-4 w-4/6 rounded bg-surface-tertiary\" />\n </div>\n\n {/* Chart/visual skeleton */}\n <div class=\"mt-4 h-32 rounded bg-surface-tertiary\" />\n </div>\n </div>\n )\n}\n\n// CSS Animations (add to global styles or Tailwind config)\n/*\n@keyframes fade-in-up {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes progress-indeterminate {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n}\n\n.animate-fade-in-up {\n animation: fade-in-up 0.5s ease-out;\n}\n\n.animate-progress-indeterminate {\n animation: progress-indeterminate 1.5s infinite ease-in-out;\n}\n*/\n"],"names":["asFullWidth","component","position","colStart","colSpan","StreamingUIRenderer","props","strings","useMCPUIStrings","messages","initializing","streamInitializing","connecting","streamConnecting","loadingComponent","streamLoadingComponent","dashboardLoaded","streamDashboardLoaded","errorProgress","streamErrorProgress","connectionFailed","streamConnectionFailed","requestFailed","streamRequestFailed","emptyResponse","streamEmptyResponse","serverSide","streamServerSide","unknownError","streamUnknownError","components","isLoading","isStreaming","error","progress","metadata","startStreaming","useStreamingUI","query","spaceIds","sessionId","options","onComplete","onError","onComponentReceived","animatingComponents","setAnimatingComponents","createSignal","Set","handleComponentRender","componentId","prev","setTimeout","next","delete","_el$","_$getNextElement","_tmpl$9","_el$59","firstChild","_el$60","_co$10","_$getNextMarker","nextSibling","_el$61","_el$62","_co$11","_el$24","_el$25","_el$26","_co$6","_el$27","_el$28","_co$7","_el$63","_el$64","_co$12","_$insert","_$createComponent","Show","when","_$memo","showProgress","children","_el$2","_tmpl$3","_el$3","_el$4","_el$1","_el$10","_co$3","_el$11","_el$12","_el$14","_el$15","_co$4","message","totalCount","_el$5","_tmpl$","_el$7","_el$8","_co$","_el$6","_el$9","_el$0","_co$2","receivedCount","_tmpl$2","_$effect","_$p","_$style","_el$16","_tmpl$5","_el$17","_el$18","_el$19","_el$20","_el$22","_el$23","_co$5","_c$","streamServerSideTitle","recoverable","_el$21","_tmpl$4","$$click","retry","_$runHydrationEvents","For","each","onMount","id","_el$65","_tmpl$0","UIResourceRenderer","content","errorMode","onRenderError","toolbarVariant","_p$","_v$","has","_v$2","e","_$className","t","undefined","Array","from","length","SkeletonComponent","showMetadata","_el$29","_tmpl$8","_el$30","_el$31","_el$32","_el$33","_el$34","_el$35","_el$36","_el$37","_el$38","_el$39","_el$41","_el$42","_co$8","_el$55","_el$56","_co$0","_el$46","_el$47","_el$48","_el$50","_el$51","_co$9","_el$57","_el$58","_co$1","metaProvider","provider","metaModel","model","metaExecutionTime","executionTimeMs","costUSD","_el$43","_tmpl$6","_el$44","_el$45","metaCost","Intl","NumberFormat","locale","style","currency","currencyDisplay","minimumFractionDigits","maximumFractionDigits","useGrouping","format","metaTtfb","firstTokenMs","cached","_el$52","_tmpl$7","_el$53","_el$54","metaCached","yes","class","_tmpl$1","_$delegateEvents"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StreamingUIRenderer.d.ts","sourceRoot":"","sources":["../../src/components/StreamingUIRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAC9C;;;;OAIG;IACH,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAA;CAC5C;AAcD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,kCAiLlE"}
1
+ {"version":3,"file":"StreamingUIRenderer.d.ts","sourceRoot":"","sources":["../../src/components/StreamingUIRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAC9C;;;;OAIG;IACH,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAA;CAC5C;AAcD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,kCA2MlE"}
@@ -3,7 +3,7 @@ import { createSignal, Show, For, onMount } from "solid-js";
3
3
  import { useStreamingUI } from "../hooks/useStreamingUI.js";
4
4
  import { UIResourceRenderer } from "./UIResourceRenderer.js";
5
5
  import { useMCPUIStrings } from "../context/MCPUIStringsContext.js";
6
- var _tmpl$ = /* @__PURE__ */ template(`<span class="text-sm text-text-secondary"><!$><!/> / <!$><!/>`), _tmpl$2 = /* @__PURE__ */ template(`<div class=mt-2><div class="h-1 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="animate-progress-indeterminate h-full w-1/3 bg-brand-primary">`), _tmpl$3 = /* @__PURE__ */ template(`<div class="mb-4 rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-2 flex items-center justify-between"><span class="text-sm font-medium text-text-primary"></span><!$><!/></div><div class="h-2 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="h-full bg-brand-primary transition-all duration-300 ease-out"></div></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ template(`<button type=button class="mt-3 rounded-md bg-error-primary px-3 py-1.5 text-sm font-medium text-white hover:bg-error-hover">`), _tmpl$5 = /* @__PURE__ */ template(`<div class="mb-4 rounded-lg border border-border-error bg-error-subtle p-4"><div class="mb-2 flex items-center gap-2"><svg class="h-5 w-5 text-error-primary"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><span class="font-medium text-error-primary"></span></div><p class="text-sm text-text-secondary"></p><!$><!/>`), _tmpl$6 = /* @__PURE__ */ template(`<div><div class="font-medium text-text-primary">Cost</div><div>$<!$><!/>`), _tmpl$7 = /* @__PURE__ */ template(`<div><div class="font-medium text-text-primary">Cached</div><div class=text-success-primary>Yes`), _tmpl$8 = /* @__PURE__ */ template(`<div class="mt-6 rounded-lg border border-border-subtle bg-surface-secondary p-4 text-sm text-text-secondary"><div class="grid grid-cols-2 gap-4 md:grid-cols-4"><div><div class="font-medium text-text-primary">Provider</div><div></div></div><div><div class="font-medium text-text-primary">Model</div><div></div></div><div><div class="font-medium text-text-primary">Execution Time</div><div><!$><!/>ms</div></div><!$><!/><div><div class="font-medium text-text-primary">TTFB</div><div><!$><!/>ms</div></div><!$><!/>`), _tmpl$9 = /* @__PURE__ */ template(`<div><!$><!/><!$><!/><div class="grid grid-cols-12 gap-4"><!$><!/><!$><!/></div><!$><!/>`), _tmpl$0 = /* @__PURE__ */ template(`<div>`), _tmpl$1 = /* @__PURE__ */ template(`<div class="col-span-12 md:col-span-6 lg:col-span-4"><div class="animate-pulse rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-4 h-6 w-1/2 rounded bg-surface-tertiary"></div><div class=space-y-3><div class="h-4 rounded bg-surface-tertiary"></div><div class="h-4 w-5/6 rounded bg-surface-tertiary"></div><div class="h-4 w-4/6 rounded bg-surface-tertiary"></div></div><div class="mt-4 h-32 rounded bg-surface-tertiary">`);
6
+ var _tmpl$ = /* @__PURE__ */ template(`<span class="text-sm text-text-secondary"><!$><!/> / <!$><!/>`), _tmpl$2 = /* @__PURE__ */ template(`<div class=mt-2><div class="h-1 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="animate-progress-indeterminate h-full w-1/3 bg-brand-primary">`), _tmpl$3 = /* @__PURE__ */ template(`<div class="mb-4 rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-2 flex items-center justify-between"><span class="text-sm font-medium text-text-primary"></span><!$><!/></div><div class="h-2 w-full overflow-hidden rounded-full bg-surface-tertiary"><div class="h-full bg-brand-primary transition-all duration-300 ease-out"></div></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ template(`<button type=button class="mt-3 rounded-md bg-error-primary px-3 py-1.5 text-sm font-medium text-white hover:bg-error-hover">`), _tmpl$5 = /* @__PURE__ */ template(`<div class="mb-4 rounded-lg border border-border-error bg-error-subtle p-4"><div class="mb-2 flex items-center gap-2"><svg class="h-5 w-5 text-error-primary"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><span class="font-medium text-error-primary"></span></div><p class="text-sm text-text-secondary"></p><!$><!/>`), _tmpl$6 = /* @__PURE__ */ template(`<div><div class="font-medium text-text-primary"></div><div>`), _tmpl$7 = /* @__PURE__ */ template(`<div><div class="font-medium text-text-primary"></div><div class=text-success-primary>`), _tmpl$8 = /* @__PURE__ */ template(`<div class="mt-6 rounded-lg border border-border-subtle bg-surface-secondary p-4 text-sm text-text-secondary"><div class="grid grid-cols-2 gap-4 md:grid-cols-4"><div><div class="font-medium text-text-primary"></div><div></div></div><div><div class="font-medium text-text-primary"></div><div></div></div><div><div class="font-medium text-text-primary"></div><div><!$><!/>ms</div></div><!$><!/><div><div class="font-medium text-text-primary"></div><div><!$><!/>ms</div></div><!$><!/>`), _tmpl$9 = /* @__PURE__ */ template(`<div><!$><!/><!$><!/><div class="grid grid-cols-12 gap-4"><!$><!/><!$><!/></div><!$><!/>`), _tmpl$0 = /* @__PURE__ */ template(`<div>`), _tmpl$1 = /* @__PURE__ */ template(`<div class="col-span-12 md:col-span-6 lg:col-span-4"><div class="animate-pulse rounded-lg border border-border-subtle bg-surface-secondary p-4"><div class="mb-4 h-6 w-1/2 rounded bg-surface-tertiary"></div><div class=space-y-3><div class="h-4 rounded bg-surface-tertiary"></div><div class="h-4 w-5/6 rounded bg-surface-tertiary"></div><div class="h-4 w-4/6 rounded bg-surface-tertiary"></div></div><div class="mt-4 h-32 rounded bg-surface-tertiary">`);
7
7
  function asFullWidth(component) {
8
8
  return {
9
9
  ...component,
@@ -14,6 +14,49 @@ function asFullWidth(component) {
14
14
  };
15
15
  }
16
16
  function StreamingUIRenderer(props) {
17
+ const strings = useMCPUIStrings();
18
+ const messages = {
19
+ get initializing() {
20
+ var _a;
21
+ return ((_a = props.messages) == null ? void 0 : _a.initializing) ?? strings.streamInitializing;
22
+ },
23
+ get connecting() {
24
+ var _a;
25
+ return ((_a = props.messages) == null ? void 0 : _a.connecting) ?? strings.streamConnecting;
26
+ },
27
+ get loadingComponent() {
28
+ var _a;
29
+ return ((_a = props.messages) == null ? void 0 : _a.loadingComponent) ?? strings.streamLoadingComponent;
30
+ },
31
+ get dashboardLoaded() {
32
+ var _a;
33
+ return ((_a = props.messages) == null ? void 0 : _a.dashboardLoaded) ?? strings.streamDashboardLoaded;
34
+ },
35
+ get errorProgress() {
36
+ var _a;
37
+ return ((_a = props.messages) == null ? void 0 : _a.errorProgress) ?? strings.streamErrorProgress;
38
+ },
39
+ get connectionFailed() {
40
+ var _a;
41
+ return ((_a = props.messages) == null ? void 0 : _a.connectionFailed) ?? strings.streamConnectionFailed;
42
+ },
43
+ get requestFailed() {
44
+ var _a;
45
+ return ((_a = props.messages) == null ? void 0 : _a.requestFailed) ?? strings.streamRequestFailed;
46
+ },
47
+ get emptyResponse() {
48
+ var _a;
49
+ return ((_a = props.messages) == null ? void 0 : _a.emptyResponse) ?? strings.streamEmptyResponse;
50
+ },
51
+ get serverSide() {
52
+ var _a;
53
+ return ((_a = props.messages) == null ? void 0 : _a.serverSide) ?? strings.streamServerSide;
54
+ },
55
+ get unknownError() {
56
+ var _a;
57
+ return ((_a = props.messages) == null ? void 0 : _a.unknownError) ?? strings.streamUnknownError;
58
+ }
59
+ };
17
60
  const {
18
61
  components,
19
62
  isLoading,
@@ -29,9 +72,9 @@ function StreamingUIRenderer(props) {
29
72
  options: props.options,
30
73
  onComplete: props.onComplete,
31
74
  onError: props.onError,
32
- onComponentReceived: props.onComponentReceived
75
+ onComponentReceived: props.onComponentReceived,
76
+ messages
33
77
  });
34
- const strings = useMCPUIStrings();
35
78
  const [animatingComponents, setAnimatingComponents] = createSignal(/* @__PURE__ */ new Set());
36
79
  const handleComponentRender = (componentId) => {
37
80
  setAnimatingComponents((prev) => /* @__PURE__ */ new Set([...prev, componentId]));
@@ -44,7 +87,7 @@ function StreamingUIRenderer(props) {
44
87
  }, 500);
45
88
  };
46
89
  return (() => {
47
- var _el$ = getNextElement(_tmpl$9), _el$60 = _el$.firstChild, [_el$61, _co$11] = getNextMarker(_el$60.nextSibling), _el$62 = _el$61.nextSibling, [_el$63, _co$12] = getNextMarker(_el$62.nextSibling), _el$24 = _el$63.nextSibling, _el$25 = _el$24.firstChild, [_el$26, _co$6] = getNextMarker(_el$25.nextSibling), _el$27 = _el$26.nextSibling, [_el$28, _co$7] = getNextMarker(_el$27.nextSibling), _el$64 = _el$24.nextSibling, [_el$65, _co$13] = getNextMarker(_el$64.nextSibling);
90
+ var _el$ = getNextElement(_tmpl$9), _el$59 = _el$.firstChild, [_el$60, _co$10] = getNextMarker(_el$59.nextSibling), _el$61 = _el$60.nextSibling, [_el$62, _co$11] = getNextMarker(_el$61.nextSibling), _el$24 = _el$62.nextSibling, _el$25 = _el$24.firstChild, [_el$26, _co$6] = getNextMarker(_el$25.nextSibling), _el$27 = _el$26.nextSibling, [_el$28, _co$7] = getNextMarker(_el$27.nextSibling), _el$63 = _el$24.nextSibling, [_el$64, _co$12] = getNextMarker(_el$63.nextSibling);
48
91
  insert(_el$, createComponent(Show, {
49
92
  get when() {
50
93
  return memo(() => props.showProgress !== false)() && (isLoading() || isStreaming());
@@ -74,17 +117,23 @@ function StreamingUIRenderer(props) {
74
117
  effect((_$p) => style(_el$12, progress().totalCount !== null ? `width: ${progress().receivedCount / progress().totalCount * 100}%` : "width: 0%", _$p));
75
118
  return _el$2;
76
119
  }
77
- }), _el$61, _co$11);
120
+ }), _el$60, _co$10);
78
121
  insert(_el$, createComponent(Show, {
79
122
  get when() {
80
123
  return error();
81
124
  },
82
125
  get children() {
83
126
  var _el$16 = getNextElement(_tmpl$5), _el$17 = _el$16.firstChild, _el$18 = _el$17.firstChild, _el$19 = _el$18.nextSibling, _el$20 = _el$17.nextSibling, _el$22 = _el$20.nextSibling, [_el$23, _co$5] = getNextMarker(_el$22.nextSibling);
84
- insert(_el$19, () => {
85
- var _a;
86
- return (_a = error()) == null ? void 0 : _a.error;
87
- });
127
+ insert(_el$19, (() => {
128
+ var _c$ = memo(() => {
129
+ var _a;
130
+ return ((_a = error()) == null ? void 0 : _a.error) === "ssr";
131
+ });
132
+ return () => {
133
+ var _a;
134
+ return _c$() ? strings.streamServerSideTitle : (_a = error()) == null ? void 0 : _a.error;
135
+ };
136
+ })());
88
137
  insert(_el$20, () => {
89
138
  var _a;
90
139
  return (_a = error()) == null ? void 0 : _a.message;
@@ -104,7 +153,7 @@ function StreamingUIRenderer(props) {
104
153
  }), _el$23, _co$5);
105
154
  return _el$16;
106
155
  }
107
- }), _el$63, _co$12);
156
+ }), _el$62, _co$11);
108
157
  insert(_el$24, createComponent(For, {
109
158
  get each() {
110
159
  return components();
@@ -112,8 +161,8 @@ function StreamingUIRenderer(props) {
112
161
  children: (component) => {
113
162
  onMount(() => handleComponentRender(component.id));
114
163
  return (() => {
115
- var _el$66 = getNextElement(_tmpl$0);
116
- insert(_el$66, createComponent(UIResourceRenderer, {
164
+ var _el$65 = getNextElement(_tmpl$0);
165
+ insert(_el$65, createComponent(UIResourceRenderer, {
117
166
  get content() {
118
167
  return asFullWidth(component);
119
168
  },
@@ -132,14 +181,14 @@ function StreamingUIRenderer(props) {
132
181
  col-span-${component.position.colSpan}
133
182
  ${animatingComponents().has(component.id) ? "animate-fade-in-up" : ""}
134
183
  `, _v$2 = `grid-column-start: ${component.position.colStart}; grid-column-end: ${component.position.colStart + component.position.colSpan}`;
135
- _v$ !== _p$.e && className(_el$66, _p$.e = _v$);
136
- _p$.t = style(_el$66, _v$2, _p$.t);
184
+ _v$ !== _p$.e && className(_el$65, _p$.e = _v$);
185
+ _p$.t = style(_el$65, _v$2, _p$.t);
137
186
  return _p$;
138
187
  }, {
139
188
  e: void 0,
140
189
  t: void 0
141
190
  });
142
- return _el$66;
191
+ return _el$65;
143
192
  })();
144
193
  }
145
194
  }), _el$26, _co$6);
@@ -165,17 +214,20 @@ function StreamingUIRenderer(props) {
165
214
  get children() {
166
215
  var _el$29 = getNextElement(_tmpl$8), _el$30 = _el$29.firstChild, _el$31 = _el$30.firstChild, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$31.nextSibling, _el$35 = _el$34.firstChild, _el$36 = _el$35.nextSibling, _el$37 = _el$34.nextSibling, _el$38 = _el$37.firstChild, _el$39 = _el$38.nextSibling, _el$41 = _el$39.firstChild, [_el$42, _co$8] = getNextMarker(_el$41.nextSibling);
167
216
  _el$42.nextSibling;
168
- var _el$56 = _el$37.nextSibling, [_el$57, _co$1] = getNextMarker(_el$56.nextSibling), _el$49 = _el$57.nextSibling, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$53 = _el$51.firstChild, [_el$54, _co$0] = getNextMarker(_el$53.nextSibling);
169
- _el$54.nextSibling;
170
- var _el$58 = _el$49.nextSibling, [_el$59, _co$10] = getNextMarker(_el$58.nextSibling);
217
+ var _el$55 = _el$37.nextSibling, [_el$56, _co$0] = getNextMarker(_el$55.nextSibling), _el$46 = _el$56.nextSibling, _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling, _el$50 = _el$48.firstChild, [_el$51, _co$9] = getNextMarker(_el$50.nextSibling);
218
+ _el$51.nextSibling;
219
+ var _el$57 = _el$46.nextSibling, [_el$58, _co$1] = getNextMarker(_el$57.nextSibling);
220
+ insert(_el$32, () => strings.metaProvider);
171
221
  insert(_el$33, () => {
172
222
  var _a;
173
223
  return (_a = metadata()) == null ? void 0 : _a.provider;
174
224
  });
225
+ insert(_el$35, () => strings.metaModel);
175
226
  insert(_el$36, () => {
176
227
  var _a;
177
228
  return (_a = metadata()) == null ? void 0 : _a.model;
178
229
  });
230
+ insert(_el$38, () => strings.metaExecutionTime);
179
231
  insert(_el$39, () => {
180
232
  var _a;
181
233
  return (_a = metadata()) == null ? void 0 : _a.executionTimeMs;
@@ -186,30 +238,42 @@ function StreamingUIRenderer(props) {
186
238
  return ((_a = metadata()) == null ? void 0 : _a.costUSD) !== void 0;
187
239
  },
188
240
  get children() {
189
- var _el$43 = getNextElement(_tmpl$6), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling, _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling, [_el$48, _co$9] = getNextMarker(_el$47.nextSibling);
241
+ var _el$43 = getNextElement(_tmpl$6), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
242
+ insert(_el$44, () => strings.metaCost);
190
243
  insert(_el$45, () => {
191
- var _a, _b;
192
- return (_b = (_a = metadata()) == null ? void 0 : _a.costUSD) == null ? void 0 : _b.toFixed(4);
193
- }, _el$48, _co$9);
244
+ var _a;
245
+ return new Intl.NumberFormat(strings.locale, {
246
+ style: "currency",
247
+ currency: "USD",
248
+ currencyDisplay: "narrowSymbol",
249
+ minimumFractionDigits: 4,
250
+ maximumFractionDigits: 4,
251
+ useGrouping: false
252
+ }).format(((_a = metadata()) == null ? void 0 : _a.costUSD) ?? 0);
253
+ });
194
254
  return _el$43;
195
255
  }
196
- }), _el$57, _co$1);
197
- insert(_el$51, () => {
256
+ }), _el$56, _co$0);
257
+ insert(_el$47, () => strings.metaTtfb);
258
+ insert(_el$48, () => {
198
259
  var _a;
199
260
  return (_a = metadata()) == null ? void 0 : _a.firstTokenMs;
200
- }, _el$54, _co$0);
261
+ }, _el$51, _co$9);
201
262
  insert(_el$30, createComponent(Show, {
202
263
  get when() {
203
264
  var _a;
204
265
  return (_a = metadata()) == null ? void 0 : _a.cached;
205
266
  },
206
267
  get children() {
207
- return getNextElement(_tmpl$7);
268
+ var _el$52 = getNextElement(_tmpl$7), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
269
+ insert(_el$53, () => strings.metaCached);
270
+ insert(_el$54, () => strings.yes);
271
+ return _el$52;
208
272
  }
209
- }), _el$59, _co$10);
273
+ }), _el$58, _co$1);
210
274
  return _el$29;
211
275
  }
212
- }), _el$65, _co$13);
276
+ }), _el$64, _co$12);
213
277
  effect(() => className(_el$, `streaming-ui-renderer ${props.class || ""}`));
214
278
  return _el$;
215
279
  })();