@seed-ship/mcp-ui-solid 6.19.1 → 6.21.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 (282) hide show
  1. package/CHANGELOG.md +663 -0
  2. package/README.md +911 -4
  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/FooterRenderer.cjs +21 -17
  86. package/dist/components/FooterRenderer.cjs.map +1 -1
  87. package/dist/components/FooterRenderer.d.ts.map +1 -1
  88. package/dist/components/FooterRenderer.js +21 -17
  89. package/dist/components/FooterRenderer.js.map +1 -1
  90. package/dist/components/FormFieldRenderer.cjs +116 -93
  91. package/dist/components/FormFieldRenderer.cjs.map +1 -1
  92. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  93. package/dist/components/FormFieldRenderer.js +116 -93
  94. package/dist/components/FormFieldRenderer.js.map +1 -1
  95. package/dist/components/FormRenderer.cjs +55 -31
  96. package/dist/components/FormRenderer.cjs.map +1 -1
  97. package/dist/components/FormRenderer.d.ts.map +1 -1
  98. package/dist/components/FormRenderer.js +55 -31
  99. package/dist/components/FormRenderer.js.map +1 -1
  100. package/dist/components/GenerativeUIErrorBoundary.cjs +20 -15
  101. package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
  102. package/dist/components/GenerativeUIErrorBoundary.d.ts.map +1 -1
  103. package/dist/components/GenerativeUIErrorBoundary.js +20 -15
  104. package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
  105. package/dist/components/GraphRenderer.cjs +56 -33
  106. package/dist/components/GraphRenderer.cjs.map +1 -1
  107. package/dist/components/GraphRenderer.d.ts.map +1 -1
  108. package/dist/components/GraphRenderer.js +56 -33
  109. package/dist/components/GraphRenderer.js.map +1 -1
  110. package/dist/components/IframeFallbackLink.cjs +37 -0
  111. package/dist/components/IframeFallbackLink.cjs.map +1 -0
  112. package/dist/components/IframeFallbackLink.d.ts +23 -0
  113. package/dist/components/IframeFallbackLink.d.ts.map +1 -0
  114. package/dist/components/IframeFallbackLink.js +37 -0
  115. package/dist/components/IframeFallbackLink.js.map +1 -0
  116. package/dist/components/ImageGalleryRenderer.cjs +13 -4
  117. package/dist/components/ImageGalleryRenderer.cjs.map +1 -1
  118. package/dist/components/ImageGalleryRenderer.d.ts.map +1 -1
  119. package/dist/components/ImageGalleryRenderer.js +13 -4
  120. package/dist/components/ImageGalleryRenderer.js.map +1 -1
  121. package/dist/components/LightboxOverlay.cjs +16 -8
  122. package/dist/components/LightboxOverlay.cjs.map +1 -1
  123. package/dist/components/LightboxOverlay.d.ts.map +1 -1
  124. package/dist/components/LightboxOverlay.js +17 -9
  125. package/dist/components/LightboxOverlay.js.map +1 -1
  126. package/dist/components/MapRenderer.cjs +59 -29
  127. package/dist/components/MapRenderer.cjs.map +1 -1
  128. package/dist/components/MapRenderer.d.ts +10 -2
  129. package/dist/components/MapRenderer.d.ts.map +1 -1
  130. package/dist/components/MapRenderer.js +60 -30
  131. package/dist/components/MapRenderer.js.map +1 -1
  132. package/dist/components/ModalRenderer.cjs +4 -1
  133. package/dist/components/ModalRenderer.cjs.map +1 -1
  134. package/dist/components/ModalRenderer.d.ts.map +1 -1
  135. package/dist/components/ModalRenderer.js +5 -2
  136. package/dist/components/ModalRenderer.js.map +1 -1
  137. package/dist/components/ScratchpadPanel.cjs +578 -535
  138. package/dist/components/ScratchpadPanel.cjs.map +1 -1
  139. package/dist/components/ScratchpadPanel.d.ts.map +1 -1
  140. package/dist/components/ScratchpadPanel.js +578 -535
  141. package/dist/components/ScratchpadPanel.js.map +1 -1
  142. package/dist/components/StreamingUIRenderer.cjs +92 -28
  143. package/dist/components/StreamingUIRenderer.cjs.map +1 -1
  144. package/dist/components/StreamingUIRenderer.d.ts.map +1 -1
  145. package/dist/components/StreamingUIRenderer.js +92 -28
  146. package/dist/components/StreamingUIRenderer.js.map +1 -1
  147. package/dist/components/UIResourceRenderer.cjs +481 -365
  148. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  149. package/dist/components/UIResourceRenderer.d.ts +21 -0
  150. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  151. package/dist/components/UIResourceRenderer.js +484 -368
  152. package/dist/components/UIResourceRenderer.js.map +1 -1
  153. package/dist/components/VerifiedText.cjs +39 -20
  154. package/dist/components/VerifiedText.cjs.map +1 -1
  155. package/dist/components/VerifiedText.d.ts +2 -1
  156. package/dist/components/VerifiedText.d.ts.map +1 -1
  157. package/dist/components/VerifiedText.js +39 -20
  158. package/dist/components/VerifiedText.js.map +1 -1
  159. package/dist/components/VideoRenderer.cjs +51 -20
  160. package/dist/components/VideoRenderer.cjs.map +1 -1
  161. package/dist/components/VideoRenderer.d.ts.map +1 -1
  162. package/dist/components/VideoRenderer.js +51 -20
  163. package/dist/components/VideoRenderer.js.map +1 -1
  164. package/dist/components/chart-data-table.cjs +38 -17
  165. package/dist/components/chart-data-table.cjs.map +1 -1
  166. package/dist/components/chart-data-table.d.ts +30 -1
  167. package/dist/components/chart-data-table.d.ts.map +1 -1
  168. package/dist/components/chart-data-table.js +38 -17
  169. package/dist/components/chart-data-table.js.map +1 -1
  170. package/dist/context/MCPActionContext.cjs +3 -1
  171. package/dist/context/MCPActionContext.cjs.map +1 -1
  172. package/dist/context/MCPActionContext.d.ts.map +1 -1
  173. package/dist/context/MCPActionContext.js +3 -1
  174. package/dist/context/MCPActionContext.js.map +1 -1
  175. package/dist/context/MCPUIConfigContext.cjs +29 -0
  176. package/dist/context/MCPUIConfigContext.cjs.map +1 -0
  177. package/dist/context/MCPUIConfigContext.d.ts +124 -0
  178. package/dist/context/MCPUIConfigContext.d.ts.map +1 -0
  179. package/dist/context/MCPUIConfigContext.js +29 -0
  180. package/dist/context/MCPUIConfigContext.js.map +1 -0
  181. package/dist/context/MCPUIStringsContext.cjs +287 -2
  182. package/dist/context/MCPUIStringsContext.cjs.map +1 -1
  183. package/dist/context/MCPUIStringsContext.d.ts +607 -3
  184. package/dist/context/MCPUIStringsContext.d.ts.map +1 -1
  185. package/dist/context/MCPUIStringsContext.js +287 -2
  186. package/dist/context/MCPUIStringsContext.js.map +1 -1
  187. package/dist/hooks/index.d.ts +2 -2
  188. package/dist/hooks/index.d.ts.map +1 -1
  189. package/dist/hooks/useStreamingUI.cjs +28 -10
  190. package/dist/hooks/useStreamingUI.cjs.map +1 -1
  191. package/dist/hooks/useStreamingUI.d.ts +37 -0
  192. package/dist/hooks/useStreamingUI.d.ts.map +1 -1
  193. package/dist/hooks/useStreamingUI.js +28 -10
  194. package/dist/hooks/useStreamingUI.js.map +1 -1
  195. package/dist/hooks.cjs +1 -0
  196. package/dist/hooks.cjs.map +1 -1
  197. package/dist/hooks.js +2 -1
  198. package/dist/index.cjs +29 -8
  199. package/dist/index.cjs.map +1 -1
  200. package/dist/index.d.cts +12 -4
  201. package/dist/index.d.ts +12 -4
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +24 -3
  204. package/dist/index.js.map +1 -1
  205. package/dist/services/index.d.ts +1 -1
  206. package/dist/services/index.d.ts.map +1 -1
  207. package/dist/services/validation.cjs +52 -26
  208. package/dist/services/validation.cjs.map +1 -1
  209. package/dist/services/validation.d.ts +67 -2
  210. package/dist/services/validation.d.ts.map +1 -1
  211. package/dist/services/validation.js +52 -26
  212. package/dist/services/validation.js.map +1 -1
  213. package/dist/utils/degraded-projections.cjs +37 -12
  214. package/dist/utils/degraded-projections.cjs.map +1 -1
  215. package/dist/utils/degraded-projections.d.ts +39 -3
  216. package/dist/utils/degraded-projections.d.ts.map +1 -1
  217. package/dist/utils/degraded-projections.js +37 -12
  218. package/dist/utils/degraded-projections.js.map +1 -1
  219. package/dist/utils/format-string.cjs +10 -0
  220. package/dist/utils/format-string.cjs.map +1 -0
  221. package/dist/utils/format-string.d.ts +26 -0
  222. package/dist/utils/format-string.d.ts.map +1 -0
  223. package/dist/utils/format-string.js +10 -0
  224. package/dist/utils/format-string.js.map +1 -0
  225. package/dist/utils/iframe-coep.cjs +30 -0
  226. package/dist/utils/iframe-coep.cjs.map +1 -0
  227. package/dist/utils/iframe-coep.d.ts +46 -0
  228. package/dist/utils/iframe-coep.d.ts.map +1 -0
  229. package/dist/utils/iframe-coep.js +30 -0
  230. package/dist/utils/iframe-coep.js.map +1 -0
  231. package/dist/validation.cjs +5 -0
  232. package/dist/validation.cjs.map +1 -1
  233. package/dist/validation.d.cts +2 -1
  234. package/dist/validation.d.ts +2 -1
  235. package/dist/validation.d.ts.map +1 -1
  236. package/dist/validation.js +6 -1
  237. package/package.json +1 -1
  238. package/src/adapters/connector.ts +58 -4
  239. package/src/adapters/index.ts +12 -2
  240. package/src/adapters/macro-run.ts +71 -11
  241. package/src/components/ActionGroupRenderer.tsx +3 -1
  242. package/src/components/AgentCard.tsx +27 -9
  243. package/src/components/AgentHandoff.tsx +4 -1
  244. package/src/components/ArtifactRenderer.tsx +17 -5
  245. package/src/components/AutocompleteDropdown.tsx +8 -6
  246. package/src/components/AutocompleteFormField.tsx +5 -1
  247. package/src/components/BriefingDiff.tsx +11 -3
  248. package/src/components/CarouselRenderer.tsx +4 -2
  249. package/src/components/ChartJSRenderer.tsx +18 -9
  250. package/src/components/ChatPrompt.tsx +13 -8
  251. package/src/components/CodeBlockRenderer.tsx +12 -10
  252. package/src/components/DataPreviewSection.tsx +92 -26
  253. package/src/components/DegradedFallback.tsx +4 -2
  254. package/src/components/FooterRenderer.tsx +3 -1
  255. package/src/components/FormFieldRenderer.tsx +34 -19
  256. package/src/components/FormRenderer.tsx +38 -10
  257. package/src/components/GenerativeUIErrorBoundary.tsx +8 -3
  258. package/src/components/GraphRenderer.tsx +31 -16
  259. package/src/components/IframeFallbackLink.tsx +57 -0
  260. package/src/components/ImageGalleryRenderer.tsx +8 -4
  261. package/src/components/LightboxOverlay.tsx +6 -4
  262. package/src/components/MapRenderer.tsx +57 -20
  263. package/src/components/ModalRenderer.tsx +3 -1
  264. package/src/components/ScratchpadPanel.tsx +95 -44
  265. package/src/components/StreamingUIRenderer.tsx +41 -11
  266. package/src/components/UIResourceRenderer.tsx +176 -67
  267. package/src/components/VerifiedText.tsx +19 -9
  268. package/src/components/VideoRenderer.tsx +26 -4
  269. package/src/components/chart-data-table.ts +68 -14
  270. package/src/context/MCPActionContext.tsx +4 -1
  271. package/src/context/MCPUIConfigContext.tsx +151 -0
  272. package/src/context/MCPUIStringsContext.tsx +1014 -1
  273. package/src/hooks/index.ts +2 -1
  274. package/src/hooks/useStreamingUI.ts +64 -10
  275. package/src/index.ts +38 -0
  276. package/src/services/index.ts +1 -0
  277. package/src/services/validation.ts +131 -32
  278. package/src/solid-jsx-attrs.d.ts +24 -0
  279. package/src/utils/degraded-projections.ts +75 -12
  280. package/src/utils/format-string.ts +33 -0
  281. package/src/utils/iframe-coep.ts +74 -0
  282. package/src/validation.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"StreamingUIRenderer.js","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":";;;;;;AAsEA,SAASA,YAAYC,WAAqC;AACxD,SAAO;AAAA,IAAE,GAAGA;AAAAA,IAAWC,UAAU;AAAA,MAAEC,UAAU;AAAA,MAAGC,SAAS;AAAA,IAAA;AAAA,EAAG;AAC9D;AAEO,SAASC,oBAAoBC,OAAiC;AACnE,QAAM;AAAA,IAAEC;AAAAA,IAAYC;AAAAA,IAAWC;AAAAA,IAAaC;AAAAA,IAAOC;AAAAA,IAAUC;AAAAA,IAAUC;AAAAA,EAAAA,IACrEC,eAAe;AAAA,IACbC,OAAOT,MAAMS;AAAAA,IACbC,UAAUV,MAAMU;AAAAA,IAChBC,WAAWX,MAAMW;AAAAA,IACjBC,SAASZ,MAAMY;AAAAA,IACfC,YAAYb,MAAMa;AAAAA,IAClBC,SAASd,MAAMc;AAAAA,IACfC,qBAAqBf,MAAMe;AAAAA,EAAAA,CAC5B;AAEH,QAAMC,UAAUC,gBAAAA;AAChB,QAAM,CAACC,qBAAqBC,sBAAsB,IAAIC,aAA0B,oBAAIC,KAAK;AAGzF,QAAMC,wBAAwBA,CAACC,gBAAwB;AACrDJ,2BAAwBK,CAAAA,6BAAaH,IAAI,CAAC,GAAGG,MAAMD,WAAW,CAAC,CAAC;AAGhEE,eAAW,MAAM;AACfN,6BAAwBK,CAAAA,SAAS;AAC/B,cAAME,OAAO,IAAIL,IAAIG,IAAI;AACzBE,aAAKC,OAAOJ,WAAW;AACvB,eAAOG;AAAAA,MACT,CAAC;AAAA,IACH,GAAG,GAAG;AAAA,EACR;AAEA,UAAA,MAAA;AAAA,QAAAE,OAAAC,eAAAC,OAAA,GAAAC,SAAAH,KAAAI,YAAA,CAAAC,QAAAC,MAAA,IAAAC,cAAAJ,OAAAK,WAAA,GAAAC,SAAAJ,OAAAG,aAAA,CAAAE,QAAAC,MAAA,IAAAJ,cAAAE,OAAAD,WAAA,GAAAI,SAAAF,OAAAF,aAAAK,SAAAD,OAAAR,YAAA,CAAAU,QAAAC,KAAA,IAAAR,cAAAM,OAAAL,WAAA,GAAAQ,SAAAF,OAAAN,aAAA,CAAAS,QAAAC,KAAA,IAAAX,cAAAS,OAAAR,WAAA,GAAAW,SAAAP,OAAAJ,aAAA,CAAAY,QAAAC,MAAA,IAAAd,cAAAY,OAAAX,WAAA;AAAAc,WAAAtB,MAAAuB,gBAGKC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,KAAA,MAAAtD,MAAMuD,iBAAiB,KAAK,QAAKrD,eAAeC;MAAc;AAAA,MAAA,IAAAqD,WAAA;AAAA,YAAAC,QAAA5B,eAAA6B,OAAA,GAAAC,QAAAF,MAAAzB,YAAA4B,QAAAD,MAAA3B,YAAA6B,QAAAD,MAAAxB,aAAA,CAAA0B,QAAAC,KAAA,IAAA5B,cAAA0B,MAAAzB,WAAA,GAAA4B,SAAAL,MAAAvB,aAAA6B,SAAAD,OAAAhC,YAAAkC,SAAAF,OAAA5B,aAAA,CAAA+B,QAAAC,KAAA,IAAAjC,cAAA+B,OAAA9B,WAAA;AAAAc,eAAAU,OAAA,MAIfvD,SAAAA,EAAWgE,OAAO;AAAAnB,eAAAS,OAAAR,gBACtEC,MAAI;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAEhD,SAAAA,EAAWiE,eAAe;AAAA,UAAI;AAAA,UAAA,IAAAd,WAAA;AAAA,gBAAAe,QAAA1C,eAAA2C,MAAA,GAAAC,QAAAF,MAAAvC,YAAA,CAAA0C,OAAAC,IAAA,IAAAxC,cAAAsC,MAAArC,WAAA,GAAAwC,QAAAF,MAAAtC,aAAAyC,QAAAD,MAAAxC,aAAA,CAAA0C,OAAAC,KAAA,IAAA5C,cAAA0C,MAAAzC,WAAA;AAAAc,mBAAAqB,OAAA,MAErClE,SAAAA,EAAW2E,eAAaN,OAAAC,IAAA;AAAAzB,mBAAAqB,OAAA,MAAKlE,SAAAA,EAAWiE,YAAUQ,OAAAC,KAAA;AAAA,mBAAAR;AAAAA,UAAA;AAAA,QAAA,CAAA,GAAAT,QAAAC,KAAA;AAAAb,eAAAO,OAAAN,gBAkBxDC,MAAI;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAEC,KAAA,MAAAjD,SAAAA,EAAWiE,eAAe,IAAI,EAAA,KAAInE,YAAAA;AAAAA,UAAa;AAAA,UAAA,IAAAqD,WAAA;AAAA,mBAAA3B,eAAAoD,OAAA;AAAA,UAAA;AAAA,QAAA,CAAA,GAAAd,QAAAC,KAAA;AAAAc,eAAAC,SAAAC,MAAAnB,QARrD5D,WAAWiE,eAAe,OACtB,UAAWjE,SAAAA,EAAW2E,gBAAgB3E,WAAWiE,aAAe,GAAG,MACnE,aAAWa,GAAA,CAAA;AAAA,eAAA1B;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAxB,QAAAC,MAAA;AAAAgB,WAAAtB,MAAAuB,gBAiBxBC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEjD,MAAAA;AAAAA,MAAO;AAAA,MAAA,IAAAoD,WAAA;AAAA,YAAA6B,SAAAxD,eAAAyD,OAAA,GAAAC,SAAAF,OAAArD,YAAAwD,SAAAD,OAAAvD,YAAAyD,SAAAD,OAAApD,aAAAsD,SAAAH,OAAAnD,aAAAuD,SAAAD,OAAAtD,aAAA,CAAAwD,QAAAC,KAAA,IAAA1D,cAAAwD,OAAAvD,WAAA;AAAAc,eAAAuC,QAAA;;AAgBiCrF,6BAAAA,MAAAA,mBAASA;AAAAA,SAAK;AAAA8C,eAAAwC,QAAA;;AAEtBtF,6BAAAA,MAAAA,mBAASiE;AAAAA,SAAO;AAAAnB,eAAAmC,QAAAlC,gBAGvDC,MAAI;AAAA,UAAA,IAACC,OAAI;;AAAA,oBAAEjD,iBAAAA,mBAAS0F;AAAAA,UAAW;AAAA,UAAA,IAAAtC,WAAA;AAAA,gBAAAuC,SAAAlE,eAAAmE,OAAA;AAAAD,mBAAAE,UAInB,MAAM1F,eAAAA;AAAgB2C,mBAAA6C,QAAA,MAE9B/E,QAAQkF,KAAK;AAAAC,+BAAAA;AAAA,mBAAAJ;AAAAA,UAAA;AAAA,QAAA,CAAA,GAAAH,QAAAC,KAAA;AAAA,eAAAR;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA/C,QAAAC,MAAA;AAAAW,WAAAV,QAAAW,gBASnBiD,KAAG;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEpG,WAAAA;AAAAA,MAAY;AAAA,MAAAuD,UACnB7D,CAAAA,cAAc;AAEd2G,gBAAQ,MAAMhF,sBAAsB3B,UAAU4G,EAAE,CAAC;AAEjD,gBAAA,MAAA;AAAA,cAAAC,SAAA3E,eAAA4E,OAAA;AAAAvD,iBAAAsD,QAAArD,gBAQKuD,oBAAkB;AAAA,YAAA,IACjBC,UAAO;AAAA,qBAAEjH,YAAYC,SAAS;AAAA,YAAC;AAAA,YAAA,IAC/BiH,YAAS;AAAA,qBAAE5G,MAAM4G;AAAAA,YAAS;AAAA,YAAA,IAC1B9F,UAAO;AAAA,qBAAEd,MAAM6G;AAAAA,YAAa;AAAA,YAAA,IAC5BC,iBAAc;AAAA,qBAAE9G,MAAM8G;AAAAA,YAAc;AAAA,UAAA,CAAA,CAAA;AAAA5B,iBAAA6B,CAAAA,QAAA;AAAA,gBAAAC,MAV/B;AAAA,6BACMrH,UAAUC,SAASE,OAAO;AAAA,oBACnCoB,sBAAsB+F,IAAItH,UAAU4G,EAAE,IAAI,uBAAuB,EAAE;AAAA,mBACtEW,OACM,sBAAsBvH,UAAUC,SAASC,QAAQ,sBAAsBF,UAAUC,SAASC,WAAWF,UAAUC,SAASE,OAAO;AAAEkH,oBAAAD,IAAAI,KAAAC,UAAAZ,QAAAO,IAAAI,IAAAH,GAAA;AAAAD,gBAAAM,IAAAjC,MAAAoB,QAAAU,MAAAH,IAAAM,CAAA;AAAA,mBAAAN;AAAAA,UAAA,GAAA;AAAA,YAAAI,GAAAG;AAAAA,YAAAD,GAAAC;AAAAA,UAAAA,CAAA;AAAA,iBAAAd;AAAAA,QAAA,GAAA;AAAA,MAU9I;AAAA,IAAA,CAAC,GAAA9D,QAAAC,KAAA;AAAAO,WAAAV,QAAAW,gBAIFC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,KAAA,MAAA,CAAA,CAAAnD,YAAAA,CAAa,EAAA,KAAIE,SAAAA,EAAWiE,eAAe;AAAA,MAAI;AAAA,MAAA,IAAAd,WAAA;AAAA,eAAAL,gBACxDiD,KAAG;AAAA,UAAA,IACFC,OAAI;AAAA,mBAAEkB,MAAMC,KAAK;AAAA,cACfC,QAAQpH,SAAAA,EAAWiE,aAAcjE,WAAW2E;AAAAA,YAAAA,CAC7C;AAAA,UAAC;AAAA,UAAAxB,UAEDA,MAAAL,gBAAOuE,mBAAiB,CAAA,CAAA;AAAA,QAAA,CAAG;AAAA,MAAA;AAAA,IAAA,CAAA,GAAA7E,QAAAC,KAAA;AAAAI,WAAAtB,MAAAuB,gBAMjCC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,KAAA,MAAAtD,MAAM2H,iBAAiB,KAAK,EAAA,KAAIrH,SAAAA;AAAAA,MAAU;AAAA,MAAA,IAAAkD,WAAA;AAAA,YAAAoE,SAAA/F,eAAAgG,OAAA,GAAAC,SAAAF,OAAA5F,YAAA+F,SAAAD,OAAA9F,YAAAgG,SAAAD,OAAA/F,YAAAiG,SAAAD,OAAA5F,aAAA8F,SAAAH,OAAA3F,aAAA+F,SAAAD,OAAAlG,YAAAoG,SAAAD,OAAA/F,aAAAiG,SAAAH,OAAA9F,aAAAkG,SAAAD,OAAArG,YAAAuG,SAAAD,OAAAlG,aAAAoG,SAAAD,OAAAvG,YAAA,CAAAyG,QAAAC,KAAA,IAAAvG,cAAAqG,OAAApG,WAAA;AAAAqG,eAAArG;YAAAuG,SAAAN,OAAAjG,aAAA,CAAAwG,QAAAC,KAAA,IAAA1G,cAAAwG,OAAAvG,WAAA,GAAA0G,SAAAF,OAAAxG,aAAA2G,SAAAD,OAAA9G,YAAAgH,SAAAD,OAAA3G,aAAA6G,SAAAD,OAAAhH,YAAA,CAAAkH,QAAAC,KAAA,IAAAhH,cAAA8G,OAAA7G,WAAA;AAAA8G,eAAA9G;YAAAgH,SAAAN,OAAA1G,aAAA,CAAAiH,QAAAC,MAAA,IAAAnH,cAAAiH,OAAAhH,WAAA;AAAAc,eAAA+E,QAAA;;AAKxC3H,gCAAAA,MAAAA,mBAAYiJ;AAAAA,SAAQ;AAAArG,eAAAkF,QAAA;;AAIpB9H,gCAAAA,MAAAA,mBAAYkJ;AAAAA,SAAK;AAAAtG,eAAAqF,QAAA,MAAA;;AAIjBjI,gCAAAA,MAAAA,mBAAYmJ;AAAAA,WAAehB,QAAAC,KAAA;AAAAxF,eAAA4E,QAAA3E,gBAElCC,MAAI;AAAA,UAAA,IAACC,OAAI;;AAAA,qBAAE/C,cAAAA,MAAAA,mBAAYoJ,aAAYpC;AAAAA,UAAS;AAAA,UAAA,IAAA9D,WAAA;AAAA,gBAAAmG,SAAA9H,eAAA+H,OAAA,GAAAC,SAAAF,OAAA3H,YAAA8H,SAAAD,OAAAzH,aAAA2H,SAAAD,OAAA9H,YAAAgI,SAAAD,OAAA3H,aAAA,CAAA6H,QAAAC,KAAA,IAAA/H,cAAA6H,OAAA5H,WAAA;AAAAc,mBAAA4G,QAAA,MAAA;;AAGlCxJ,gDAAAA,mBAAYoJ,YAAZpJ,mBAAqB6J,QAAQ;AAAA,eAAEF,QAAAC,KAAA;AAAA,mBAAAP;AAAAA,UAAA;AAAA,QAAA,CAAA,GAAAf,QAAAC,KAAA;AAAA3F,eAAA8F,QAAA,MAAA;;AAKlC1I,gCAAAA,MAAAA,mBAAY8J;AAAAA,WAAYlB,QAAAC,KAAA;AAAAjG,eAAA4E,QAAA3E,gBAE/BC,MAAI;AAAA,UAAA,IAACC,OAAI;;AAAA,oBAAE/C,oBAAAA,mBAAY+J;AAAAA,UAAM;AAAA,UAAA,IAAA7G,WAAA;AAAA,mBAAA3B,eAAAyI,OAAA;AAAA,UAAA;AAAA,QAAA,CAAA,GAAAjB,QAAAC,MAAA;AAAA,eAAA1B;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA5E,QAAAC,MAAA;AAAAiC,WAAA,MAAAkC,UAAAxF,MAxI1B,yBAAyB5B,MAAMuK,SAAS,EAAE,EAAE,CAAA;AAAA,WAAA3I;AAAAA,EAAA,GAAA;AAmJ5D;AAKA,SAAS8F,oBAAoB;AAC3B,SAAA7F,eAAA2I,OAAA;AAkBF;AAGAC,eAAA,CAAA,OAAA,CAAA;"}
1
+ {"version":3,"file":"StreamingUIRenderer.js","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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"}