@seed-ship/mcp-ui-solid 6.19.1 → 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 (257) hide show
  1. package/CHANGELOG.md +519 -0
  2. package/README.md +791 -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/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/ImageGalleryRenderer.cjs +13 -4
  111. package/dist/components/ImageGalleryRenderer.cjs.map +1 -1
  112. package/dist/components/ImageGalleryRenderer.d.ts.map +1 -1
  113. package/dist/components/ImageGalleryRenderer.js +13 -4
  114. package/dist/components/ImageGalleryRenderer.js.map +1 -1
  115. package/dist/components/LightboxOverlay.cjs +16 -8
  116. package/dist/components/LightboxOverlay.cjs.map +1 -1
  117. package/dist/components/LightboxOverlay.d.ts.map +1 -1
  118. package/dist/components/LightboxOverlay.js +17 -9
  119. package/dist/components/LightboxOverlay.js.map +1 -1
  120. package/dist/components/MapRenderer.cjs +59 -29
  121. package/dist/components/MapRenderer.cjs.map +1 -1
  122. package/dist/components/MapRenderer.d.ts +10 -2
  123. package/dist/components/MapRenderer.d.ts.map +1 -1
  124. package/dist/components/MapRenderer.js +60 -30
  125. package/dist/components/MapRenderer.js.map +1 -1
  126. package/dist/components/ModalRenderer.cjs +4 -1
  127. package/dist/components/ModalRenderer.cjs.map +1 -1
  128. package/dist/components/ModalRenderer.d.ts.map +1 -1
  129. package/dist/components/ModalRenderer.js +5 -2
  130. package/dist/components/ModalRenderer.js.map +1 -1
  131. package/dist/components/ScratchpadPanel.cjs +578 -535
  132. package/dist/components/ScratchpadPanel.cjs.map +1 -1
  133. package/dist/components/ScratchpadPanel.d.ts.map +1 -1
  134. package/dist/components/ScratchpadPanel.js +578 -535
  135. package/dist/components/ScratchpadPanel.js.map +1 -1
  136. package/dist/components/StreamingUIRenderer.cjs +92 -28
  137. package/dist/components/StreamingUIRenderer.cjs.map +1 -1
  138. package/dist/components/StreamingUIRenderer.d.ts.map +1 -1
  139. package/dist/components/StreamingUIRenderer.js +92 -28
  140. package/dist/components/StreamingUIRenderer.js.map +1 -1
  141. package/dist/components/UIResourceRenderer.cjs +456 -363
  142. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  143. package/dist/components/UIResourceRenderer.d.ts +21 -0
  144. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  145. package/dist/components/UIResourceRenderer.js +458 -365
  146. package/dist/components/UIResourceRenderer.js.map +1 -1
  147. package/dist/components/VerifiedText.cjs +39 -20
  148. package/dist/components/VerifiedText.cjs.map +1 -1
  149. package/dist/components/VerifiedText.d.ts +2 -1
  150. package/dist/components/VerifiedText.d.ts.map +1 -1
  151. package/dist/components/VerifiedText.js +39 -20
  152. package/dist/components/VerifiedText.js.map +1 -1
  153. package/dist/components/VideoRenderer.cjs +10 -5
  154. package/dist/components/VideoRenderer.cjs.map +1 -1
  155. package/dist/components/VideoRenderer.d.ts.map +1 -1
  156. package/dist/components/VideoRenderer.js +10 -5
  157. package/dist/components/VideoRenderer.js.map +1 -1
  158. package/dist/components/chart-data-table.cjs +38 -17
  159. package/dist/components/chart-data-table.cjs.map +1 -1
  160. package/dist/components/chart-data-table.d.ts +30 -1
  161. package/dist/components/chart-data-table.d.ts.map +1 -1
  162. package/dist/components/chart-data-table.js +38 -17
  163. package/dist/components/chart-data-table.js.map +1 -1
  164. package/dist/context/MCPActionContext.cjs +3 -1
  165. package/dist/context/MCPActionContext.cjs.map +1 -1
  166. package/dist/context/MCPActionContext.d.ts.map +1 -1
  167. package/dist/context/MCPActionContext.js +3 -1
  168. package/dist/context/MCPActionContext.js.map +1 -1
  169. package/dist/context/MCPUIStringsContext.cjs +285 -2
  170. package/dist/context/MCPUIStringsContext.cjs.map +1 -1
  171. package/dist/context/MCPUIStringsContext.d.ts +600 -3
  172. package/dist/context/MCPUIStringsContext.d.ts.map +1 -1
  173. package/dist/context/MCPUIStringsContext.js +285 -2
  174. package/dist/context/MCPUIStringsContext.js.map +1 -1
  175. package/dist/hooks/index.d.ts +2 -2
  176. package/dist/hooks/index.d.ts.map +1 -1
  177. package/dist/hooks/useStreamingUI.cjs +28 -10
  178. package/dist/hooks/useStreamingUI.cjs.map +1 -1
  179. package/dist/hooks/useStreamingUI.d.ts +37 -0
  180. package/dist/hooks/useStreamingUI.d.ts.map +1 -1
  181. package/dist/hooks/useStreamingUI.js +28 -10
  182. package/dist/hooks/useStreamingUI.js.map +1 -1
  183. package/dist/hooks.cjs +1 -0
  184. package/dist/hooks.cjs.map +1 -1
  185. package/dist/hooks.js +2 -1
  186. package/dist/index.cjs +23 -8
  187. package/dist/index.cjs.map +1 -1
  188. package/dist/index.d.cts +9 -3
  189. package/dist/index.d.ts +9 -3
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.js +18 -3
  192. package/dist/index.js.map +1 -1
  193. package/dist/services/validation.cjs +41 -16
  194. package/dist/services/validation.cjs.map +1 -1
  195. package/dist/services/validation.d.ts +47 -2
  196. package/dist/services/validation.d.ts.map +1 -1
  197. package/dist/services/validation.js +41 -16
  198. package/dist/services/validation.js.map +1 -1
  199. package/dist/utils/degraded-projections.cjs +37 -12
  200. package/dist/utils/degraded-projections.cjs.map +1 -1
  201. package/dist/utils/degraded-projections.d.ts +39 -3
  202. package/dist/utils/degraded-projections.d.ts.map +1 -1
  203. package/dist/utils/degraded-projections.js +37 -12
  204. package/dist/utils/degraded-projections.js.map +1 -1
  205. package/dist/utils/format-string.cjs +10 -0
  206. package/dist/utils/format-string.cjs.map +1 -0
  207. package/dist/utils/format-string.d.ts +26 -0
  208. package/dist/utils/format-string.d.ts.map +1 -0
  209. package/dist/utils/format-string.js +10 -0
  210. package/dist/utils/format-string.js.map +1 -0
  211. package/dist/validation.cjs +3 -0
  212. package/dist/validation.cjs.map +1 -1
  213. package/dist/validation.d.cts +2 -1
  214. package/dist/validation.d.ts +2 -1
  215. package/dist/validation.d.ts.map +1 -1
  216. package/dist/validation.js +4 -1
  217. package/package.json +1 -1
  218. package/src/adapters/connector.ts +58 -4
  219. package/src/adapters/index.ts +12 -2
  220. package/src/adapters/macro-run.ts +71 -11
  221. package/src/components/ActionGroupRenderer.tsx +3 -1
  222. package/src/components/AgentCard.tsx +27 -9
  223. package/src/components/AgentHandoff.tsx +4 -1
  224. package/src/components/ArtifactRenderer.tsx +17 -5
  225. package/src/components/AutocompleteDropdown.tsx +8 -6
  226. package/src/components/AutocompleteFormField.tsx +5 -1
  227. package/src/components/BriefingDiff.tsx +11 -3
  228. package/src/components/CarouselRenderer.tsx +4 -2
  229. package/src/components/ChartJSRenderer.tsx +18 -9
  230. package/src/components/ChatPrompt.tsx +13 -8
  231. package/src/components/CodeBlockRenderer.tsx +12 -10
  232. package/src/components/DataPreviewSection.tsx +92 -26
  233. package/src/components/DegradedFallback.tsx +4 -2
  234. package/src/components/FooterRenderer.tsx +3 -1
  235. package/src/components/FormFieldRenderer.tsx +34 -19
  236. package/src/components/FormRenderer.tsx +38 -10
  237. package/src/components/GenerativeUIErrorBoundary.tsx +8 -3
  238. package/src/components/GraphRenderer.tsx +31 -16
  239. package/src/components/ImageGalleryRenderer.tsx +8 -4
  240. package/src/components/LightboxOverlay.tsx +6 -4
  241. package/src/components/MapRenderer.tsx +57 -20
  242. package/src/components/ModalRenderer.tsx +3 -1
  243. package/src/components/ScratchpadPanel.tsx +95 -44
  244. package/src/components/StreamingUIRenderer.tsx +41 -11
  245. package/src/components/UIResourceRenderer.tsx +145 -63
  246. package/src/components/VerifiedText.tsx +19 -9
  247. package/src/components/VideoRenderer.tsx +6 -4
  248. package/src/components/chart-data-table.ts +68 -14
  249. package/src/context/MCPActionContext.tsx +4 -1
  250. package/src/context/MCPUIStringsContext.tsx +1004 -1
  251. package/src/hooks/index.ts +2 -1
  252. package/src/hooks/useStreamingUI.ts +64 -10
  253. package/src/index.ts +23 -0
  254. package/src/services/validation.ts +93 -16
  255. package/src/utils/degraded-projections.ts +75 -12
  256. package/src/utils/format-string.ts +33 -0
  257. package/src/validation.ts +5 -0
@@ -72,6 +72,20 @@ export interface MCPUIStrings {
72
72
  // ── Generic chrome ────────────────────────────────────────
73
73
  /** Label of the streaming retry button. */
74
74
  retry: string
75
+ /** Label of a generic inline "confirm" button (scratchpad filter editor). */
76
+ ok?: string
77
+ /** Label of a generic "cancel" button (scratchpad, chat prompt). */
78
+ cancel?: string
79
+ /** Label of a generic "confirm" button (chat prompt). */
80
+ confirm?: string
81
+ /** Label of a generic "submit" button (chat prompt, form renderers). */
82
+ submit?: string
83
+ /** `aria-label` of a generic "dismiss" button (chat prompt). */
84
+ dismiss?: string
85
+ /** Affirmative value label (streaming metadata, scratchpad feedback). */
86
+ yes?: string
87
+ /** Negative value label (scratchpad feedback). */
88
+ no?: string
75
89
 
76
90
  // ── Chart data access ─────────────────────────────────────
77
91
  /** Label of the native chart view button. */
@@ -98,6 +112,686 @@ export interface MCPUIStrings {
98
112
  // ── Grid layout ────────────────────────────────────────────
99
113
  /** Fallback `aria-label` for a grid region without a title. */
100
114
  gridRegion?: string
115
+
116
+ // ── AutocompleteDropdown ───────────────────────────────────
117
+ /** `aria-label` of the suggestions listbox. */
118
+ autocompleteSuggestions?: string
119
+ /** Fallback loading message of the suggestions listbox. */
120
+ autocompleteLoading?: string
121
+ /** Fallback empty state of the suggestions listbox. */
122
+ autocompleteEmpty?: string
123
+
124
+ // ── CarouselRenderer ───────────────────────────────────────
125
+ /** Toolbar title of the carousel's expandable wrapper. */
126
+ carouselTitle?: string
127
+ /** `copyLabel` of the carousel's copy button (title + `aria-label`). */
128
+ carouselCopy?: string
129
+
130
+ // ── MapRenderer ────────────────────────────────────────────
131
+ /** Toolbar title of the map's expandable wrapper. */
132
+ mapTitle?: string
133
+ /** `copyLabel` of the map's copy button (title + `aria-label`). */
134
+ mapCopy?: string
135
+
136
+ // ── ChartJSRenderer export ─────────────────────────────────
137
+ /** `title` of the chart PNG export button. */
138
+ chartDownloadPng?: string
139
+ /** `aria-label` of the chart PNG export button. */
140
+ chartDownloadPngAria?: string
141
+ /** `copyLabel` of the chart's copy button (title + `aria-label`). */
142
+ chartCopy?: string
143
+ /** Overlay shown while the chart library and data are loading. */
144
+ chartLoading?: string
145
+
146
+ // ── CodeBlockRenderer toolbar ──────────────────────────────
147
+ /** `placeholder` of the in-code search input. */
148
+ codeSearchPlaceholder?: string
149
+ /** `aria-label` of the in-code search input. */
150
+ codeSearchAria?: string
151
+ /** `aria-label` of the code download button. */
152
+ codeDownloadAria?: string
153
+ /** `title` of the code download button. */
154
+ codeDownload?: string
155
+ /** `aria-label` of the word-wrap toggle. */
156
+ codeToggleWordWrap?: string
157
+ /** `aria-label` and `title` of the code copy button. */
158
+ codeCopy?: string
159
+ /** Heading and toolbar title of a code block with no filename or language. */
160
+ codeTitle?: string
161
+ /** `title` of the word-wrap toggle while word wrap is OFF. */
162
+ codeWordWrapEnable?: string
163
+ /** `title` of the word-wrap toggle while word wrap is ON. */
164
+ codeWordWrapDisable?: string
165
+
166
+ // ── DataPreviewSection ─────────────────────────────────────
167
+ /** `title` of the CSV export button. Template — `{count}` = row count. */
168
+ exportCsvRows?: string
169
+ /** `title` of the JSON export button. Template — `{count}` = row count. */
170
+ exportJsonRows?: string
171
+ /**
172
+ * `title` of a sortable column header (data preview and tables).
173
+ * Template — `{column}` = the column label.
174
+ */
175
+ sortBy?: string
176
+
177
+ // ── Form fields (chips, tags, filters) ─────────────────────
178
+ /**
179
+ * `aria-label` of a chip/tag/filter removal button.
180
+ * Template — `{name}` = the item being removed.
181
+ */
182
+ removeItem?: string
183
+ /** `placeholder` of the multi-select options filter input. */
184
+ filterPlaceholder?: string
185
+ /** Badge shown next to a field whose type the renderer does not support. */
186
+ fieldNotSupported?: string
187
+ /** Empty state of the multi-select / autocomplete option list. */
188
+ fieldNoMatches?: string
189
+ /** Fallback help text of a `fieldset` field with none. */
190
+ fieldGroupContainer?: string
191
+ /** Fallback `placeholder` of the multi-select trigger. */
192
+ fieldSelectPlaceholder?: string
193
+ /** Fallback `placeholder` of the tags input. */
194
+ fieldTagsPlaceholder?: string
195
+
196
+ // ── ScratchpadPanel ────────────────────────────────────────
197
+ /** `aria-label` of the scratchpad close button. */
198
+ scratchpadClose?: string
199
+ /** Heading of the filter preview block. */
200
+ scratchpadPreview?: string
201
+ /** Empty state of the filter preview block. */
202
+ scratchpadNoResults?: string
203
+ /** Label of the "refine the filters" button in the empty preview. */
204
+ scratchpadModifyFilters?: string
205
+ /** Empty state of the active-filter chip row. */
206
+ scratchpadNoFilters?: string
207
+ /** Label of the collapsed embedded form's "edit" button. */
208
+ scratchpadEdit?: string
209
+ /** Label of the free-text feedback "send" button. */
210
+ scratchpadSend?: string
211
+ /** Label of the debug toggle while the raw SSE payload is hidden. */
212
+ scratchpadShowRaw?: string
213
+ /** Label of the debug toggle while the raw SSE payload is shown. */
214
+ scratchpadHideRaw?: string
215
+ /** Fallback `placeholder` of the free-text feedback input. */
216
+ scratchpadCommentPlaceholder?: string
217
+ /** Fallback message of an error section with none. */
218
+ scratchpadError?: string
219
+ /** Fallback name of a source card with none. */
220
+ scratchpadSource?: string
221
+
222
+ // ── GraphRenderer ──────────────────────────────────────────
223
+ /** `title` and `aria-label` of the graph export menu trigger. */
224
+ graphExport?: string
225
+ /** `copyLabel` of the graph's copy button (title + `aria-label`). */
226
+ graphCopy?: string
227
+ /** Toolbar title of the graph's expandable wrapper when untitled. */
228
+ graphTitle?: string
229
+ /**
230
+ * Visible label of the graph export menu trigger button.
231
+ * @since 6.20.0
232
+ */
233
+ graphExportMenu?: string
234
+ /** Label of the "download PNG" item in the graph export menu. */
235
+ graphDownloadPng?: string
236
+ /** Hint under the "download PNG" item. */
237
+ graphDownloadPngHint?: string
238
+ /** Label of the "download Mermaid" item in the graph export menu. */
239
+ graphDownloadMermaid?: string
240
+ /** Hint under the "download Mermaid" item. */
241
+ graphDownloadMermaidHint?: string
242
+ /** Label of the "download JSON" item in the graph export menu. */
243
+ graphDownloadJson?: string
244
+ /** Hint under the "download JSON" item. */
245
+ graphDownloadJsonHint?: string
246
+
247
+ // ── ImageGalleryRenderer ───────────────────────────────────
248
+ /** `copyLabel` of the gallery's copy button (title + `aria-label`). */
249
+ galleryCopy?: string
250
+ /** Toolbar title of the gallery's expandable wrapper when untitled. */
251
+ galleryTitle?: string
252
+
253
+ // ── VideoRenderer ──────────────────────────────────────────
254
+ /** `copyLabel` of the video's copy button (title + `aria-label`). */
255
+ videoCopy?: string
256
+ /** Toolbar title and iframe `title` of an untitled video. */
257
+ videoTitle?: string
258
+
259
+ // ── FormFieldRenderer — prefill source badges ──────────────
260
+ /** `title` of the `detected` prefill-source badge. */
261
+ sourceDetected?: string
262
+ /** `title` of the `inferred` prefill-source badge. */
263
+ sourceInferred?: string
264
+ /** `title` of the `user` prefill-source badge. */
265
+ sourcePrevious?: string
266
+
267
+ // ── LightboxOverlay ────────────────────────────────────────
268
+ /** `aria-label` of the lightbox dialog. */
269
+ lightboxLabel?: string
270
+ /** `aria-label` of the lightbox close button. */
271
+ lightboxClose?: string
272
+ /** `aria-label` of the lightbox "previous image" button. */
273
+ lightboxPrevious?: string
274
+ /** `aria-label` of the lightbox "next image" button. */
275
+ lightboxNext?: string
276
+
277
+ // ── ModalRenderer ──────────────────────────────────────────
278
+ /** `aria-label` of the modal close button. */
279
+ modalClose?: string
280
+
281
+ // ── UIResourceRenderer — copy buttons ──────────────────────
282
+ /** Default `title`/`aria-label` of the generic copy button. */
283
+ copy?: string
284
+ /** `title` of the metric card copy button. */
285
+ copyMetric?: string
286
+ /** `title` of the text card copy button. */
287
+ copyText?: string
288
+ /** `title` of the error card copy button. */
289
+ copyErrorDetails?: string
290
+
291
+ // ── UIResourceRenderer — table chrome ──────────────────────
292
+ /** Toolbar title of the table's expandable wrapper when untitled. */
293
+ tableTitle?: string
294
+ /** `title`/`copyLabel` of the table CSV copy button. */
295
+ tableCopyCsv?: string
296
+ /** `title` and `aria-label` of the table export menu trigger. */
297
+ tableExport?: string
298
+ /** `aria-label` of the table search reset button. */
299
+ tableClearSearch?: string
300
+ /** Fallback `aria-label` of the table scroll region when untitled. */
301
+ tableAriaLabel?: string
302
+ /**
303
+ * `placeholder` of the table search input. The payload's
304
+ * `params.searchPlaceholder` still wins when set.
305
+ */
306
+ tableSearchPlaceholder?: string
307
+ /** Label of the "copy as TSV" item in the export menu. */
308
+ tableCopyTsv?: string
309
+ /** Label of the "download CSV" item in the export menu. */
310
+ tableDownloadCsv?: string
311
+ /** Label of the "download JSON" item in the export menu. */
312
+ tableDownloadJson?: string
313
+ /** Suffix rendered after the pagination page-size selector. */
314
+ perPageSuffix?: string
315
+
316
+ // ── UIResourceRenderer — media and links ───────────────────
317
+ /** Fallback `alt` text of an image without one. */
318
+ imageAlt?: string
319
+ /**
320
+ * `aria-label` of the image zoom link.
321
+ * Template — `{alt}` = the image's alternative text.
322
+ */
323
+ imageViewFullSize?: string
324
+ /** Fallback `title` of an iframe without one. */
325
+ iframeTitle?: string
326
+ /** Fallback label of a link component without one. */
327
+ linkLabel?: string
328
+ /**
329
+ * `aria-label` of a link component.
330
+ * Template — `{label}` and `{description}`.
331
+ */
332
+ linkOpensInNewTab?: string
333
+
334
+ // ── UIResourceRenderer — misc chrome ───────────────────────
335
+ /** `aria-label` of the inline component-validation warning chip. */
336
+ validationWarning?: string
337
+ /** Fallback heading of an HTML resource without a title or URI. */
338
+ resourceTitle?: string
339
+ /** Heading of the chart renderer's error overlay. */
340
+ chartError?: string
341
+ /** Heading of the blocking component-validation error card. */
342
+ validationError?: string
343
+ /** Fallback detail of a validation error carrying no message. */
344
+ validationUnknownError?: string
345
+ /** Fallback message inside the error card's copyable text. */
346
+ errorUnknown?: string
347
+ /** Fallback tool name in the error card heading. */
348
+ errorUnknownToolName?: string
349
+ /** Fallback body of an error card carrying no message. */
350
+ errorToolExecution?: string
351
+
352
+ // ── VerifiedText ───────────────────────────────────────────
353
+ /** `title` of a segment verified against the source data. */
354
+ verifiedTitle?: string
355
+ /** `aria-label` of the verified marker glyph. */
356
+ verifiedAria?: string
357
+ /** `aria-label` of the unverified marker glyph. */
358
+ unverifiedAria?: string
359
+ /** `title` of an unverified number with no closest source match. */
360
+ verifiedNotFound?: string
361
+ /**
362
+ * `title` of an unverified number that has a closest source match.
363
+ * Template — `{closest}` = the nearest source number, `{pct}` = the
364
+ * relative distance in percent.
365
+ */
366
+ verifiedNotFoundClosest?: string
367
+ /** Placeholder rendered in `strip` mode in place of the number. */
368
+ verifiedStripLabel?: string
369
+ /**
370
+ * Confidence summary of a validated answer.
371
+ * Template — `{pct}` = the confidence as a whole percentage.
372
+ */
373
+ verifiedConfidence?: string
374
+ /**
375
+ * Count of unverified numbers next to the confidence summary.
376
+ * Template — `{count}` = how many numbers failed verification.
377
+ */
378
+ verifiedUnverifiedCount?: string
379
+
380
+ // ── ChatPrompt ─────────────────────────────────────────────
381
+ /** Placeholder shown while the form's live preview is loading. */
382
+ promptLoadingPreview?: string
383
+ /** Submitted label of a confirmed `confirm` prompt (no `confirmLabel`). */
384
+ promptConfirmed?: string
385
+ /** Submitted label of a cancelled `confirm` prompt (no `cancelLabel`). */
386
+ promptCancelled?: string
387
+ /** Submitted label of a `form` prompt whose fields are all empty. */
388
+ promptFormSubmitted?: string
389
+
390
+ // ── FormRenderer ───────────────────────────────────────────
391
+ /** Fallback error when the submit action fails without a message. */
392
+ formSubmissionFailed?: string
393
+ /**
394
+ * Auto-submit countdown notice.
395
+ * Template — `{label}` = the submit label, `{seconds}` = seconds left.
396
+ */
397
+ formSubmitCountdown?: string
398
+
399
+ // ── ActionGroupRenderer ────────────────────────────────────
400
+ /** Fallback `aria-label` of an action group without one. */
401
+ actionGroupLabel?: string
402
+
403
+ // ── ArtifactRenderer ───────────────────────────────────────
404
+ /** Fallback description of an artifact card without one. */
405
+ artifactDescription?: string
406
+
407
+ // ── DegradedFallback ───────────────────────────────────────
408
+ /** Fallback caption of the degraded-renderer notice. */
409
+ degradedCaption?: string
410
+
411
+ // ── StreamingUIRenderer — metadata panel ───────────────────
412
+ /** Label of the provider cell. */
413
+ metaProvider?: string
414
+ /** Label of the model cell. */
415
+ metaModel?: string
416
+ /** Label of the execution-time cell. */
417
+ metaExecutionTime?: string
418
+ /** Label of the cost cell. */
419
+ metaCost?: string
420
+ /** Label of the time-to-first-byte cell. */
421
+ metaTtfb?: string
422
+ /** Label of the cache-hit cell. */
423
+ metaCached?: string
424
+
425
+ // ── 6.20.0 — generic chrome ─────────────────
426
+ /** Label of a generic "download" link (artifact card). */
427
+ download?: string
428
+ /** Placeholder shown in place of a value the renderer could not determine. */
429
+ unknown?: string
430
+
431
+ // ── UIResourceRenderer — table citation chips ─────────────
432
+ /**
433
+ * Visible placeholder kept in a table cell for a citation marker that no
434
+ * `citationMap` resolves (empty map only — see `transformCellCitations`).
435
+ * Template — `{id}` = the marker number.
436
+ *
437
+ * The former literal was French (`[réf. {id}]`).
438
+ */
439
+ citationUnresolved?: string
440
+
441
+ // ── UIResourceRenderer — error / fallback chrome ──────────
442
+ /**
443
+ * Inline (`errorMode: 'inline-warn'`) validation chip text.
444
+ * Template — `{type}` = the component type.
445
+ */
446
+ invalidComponent?: string
447
+ /**
448
+ * Heading of the tool-error card.
449
+ * Template — `{tool}` = the tool name (`errorUnknownToolName` when absent).
450
+ */
451
+ toolErrorTitle?: string
452
+ /**
453
+ * Error-type line of the tool-error card.
454
+ * Template — `{type}` = the error type.
455
+ */
456
+ errorTypeLabel?: string
457
+ /** Heading above the tool-error suggestion list. */
458
+ errorSuggestions?: string
459
+ /** Message shown in place of a chart whose payload has no `data.datasets`. */
460
+ chartInvalidData?: string
461
+ /** Prefix of the unsupported-component notice (the type follows in a `<code>`). */
462
+ unsupportedComponentType?: string
463
+
464
+ // ── DataPreviewSection — pagination ───────────────────────
465
+ /** Visible label of the previous-page button (glyph stays decorative). */
466
+ previewPrev?: string
467
+ /** Visible label of the next-page button (glyph stays decorative). */
468
+ previewNext?: string
469
+ /**
470
+ * Page indicator between the two buttons.
471
+ * Template — `{page}` = the 1-based page, `{total}` = the page count.
472
+ */
473
+ previewPageIndicator?: string
474
+
475
+ // ── FormFieldRenderer ─────────────────────────────────────
476
+ /** Inline notice while an entity reference is being resolved. */
477
+ fieldResolving?: string
478
+
479
+ // ── FormRenderer / ScratchpadPanel — prefill summary ──────
480
+ /**
481
+ * Prefill summary for a single pre-filled field.
482
+ * Template — `{count}` = always 1, `{total}` = the field count.
483
+ *
484
+ * The former literal was French (`{count} champ pré-rempli sur {total}`).
485
+ */
486
+ formPrefilledOne?: string
487
+ /**
488
+ * Prefill summary for several pre-filled fields.
489
+ * Template — `{count}` = how many, `{total}` = the field count.
490
+ *
491
+ * The former literal was French (`{count} champs pré-remplis sur {total}`).
492
+ */
493
+ formPrefilledMany?: string
494
+ /** Busy label of the submit button while the form is submitting. */
495
+ formSubmitting?: string
496
+ /** Label of the form's reset button. */
497
+ formReset?: string
498
+
499
+ // ── GenerativeUIErrorBoundary — default fallback ──────────
500
+ /** Heading of the default error-boundary fallback card. */
501
+ errorBoundaryTitle?: string
502
+ /**
503
+ * Metadata line of the fallback card.
504
+ * Template — `{type}` = the component type, `{id}` = its truncated id.
505
+ * Both fall back to `unknown`.
506
+ */
507
+ errorBoundaryMeta?: string
508
+ /** Label of the fallback card's retry button. */
509
+ errorBoundaryRetry?: string
510
+
511
+ // ── ScratchpadPanel (continued) ───────────────────────────
512
+ /** Label of the `waiting_human` search button. */
513
+ scratchpadSearch?: string
514
+ /** Label of the "advance to the next step" button in the steps view. */
515
+ scratchpadNextStep?: string
516
+ /** Label preceding the interrogation plan summary. */
517
+ scratchpadPlan?: string
518
+ /** Label of the "modify this prompt" button of a prompt section. */
519
+ scratchpadModify?: string
520
+ /** Label of the "show details" toggle of an error section. */
521
+ scratchpadDetails?: string
522
+ /** Unit suffix after an action section's item count. */
523
+ scratchpadItems?: string
524
+
525
+ // ── VideoRenderer ─────────────────────────────────────────
526
+ /** Fallback text of a `<video>` element the browser cannot play. */
527
+ videoUnsupported?: string
528
+
529
+ // ── DataPreviewSection (page info) ────────────────────────
530
+ /** Paginated row range. Template — `{start}`, `{end}`, `{total}`. */
531
+ previewShowingRange?: string
532
+ /** Unpaginated row count, singular. Template — `{count}`. */
533
+ previewRowsOne?: string
534
+ /** Unpaginated row count, plural. Template — `{count}`. */
535
+ previewRowsMany?: string
536
+ /**
537
+ * Suffix appended when the payload declares more rows than were sent.
538
+ * Template — `{total}`. Keeps its leading space.
539
+ */
540
+ previewTotalSuffix?: string
541
+
542
+ // ── ScratchpadPanel status badge ──────────────────────────
543
+ /** Status badge — the run is still loading. */
544
+ statusLoading?: string
545
+ /** Status badge — an action is available to the user. */
546
+ statusActionAvailable?: string
547
+ /** Status badge — the run is waiting for a human answer. */
548
+ statusYourTurn?: string
549
+ /** Status badge — the run is processing. */
550
+ statusProcessing?: string
551
+ /** Status badge — the run finished. (The error badge reuses `scratchpadError`.) */
552
+ statusComplete?: string
553
+
554
+ // ── AgentCard status ──────────────────────────────────────
555
+ /** Agent badge — idle. */
556
+ agentStatusIdle?: string
557
+ /** Agent badge — running. */
558
+ agentStatusRunning?: string
559
+ /** Agent badge — waiting. */
560
+ agentStatusWaiting?: string
561
+ /** Agent badge — done. */
562
+ agentStatusDone?: string
563
+ /** Agent badge — errored. */
564
+ agentStatusError?: string
565
+
566
+ // ── AgentHandoff ──────────────────────────────────────────
567
+ /**
568
+ * Fallback summary of a handoff that carries only an item count.
569
+ * Template — `{count}`. `content.summary` still wins.
570
+ */
571
+ handoffItems?: string
572
+
573
+ // ── DegradedFallback (fallback ladder) ────────────────────
574
+ /** Truncation notice under the degraded table. Template — `{count}`. */
575
+ degradedMoreRows?: string
576
+ /** Caption of the chart's degraded table. */
577
+ chartDegradedCaption?: string
578
+ /** Notice above the chart's degraded table. Template — `{error}`. */
579
+ chartRenderFailed?: string
580
+ /** Caption of the degraded table shown when chart.js is missing. */
581
+ chartQuickchartCaption?: string
582
+ /** Caption of the graph's degraded table. */
583
+ graphDegradedCaption?: string
584
+ /** Notice above the graph's degraded table. Template — `{error}`. */
585
+ graphRenderFailed?: string
586
+ /** Fallback reason when the G6 render throws without a message. */
587
+ graphRenderError?: string
588
+ /** Fallback reason when the Chart.js render throws without a message. */
589
+ chartRenderError?: string
590
+ /** Error shown when the PNG export is unavailable in the active renderer. */
591
+ graphPngUnsupported?: string
592
+ /** Error shown when the PNG export throws without a message. */
593
+ graphPngExportFailed?: string
594
+ /** Error shown when the Leaflet bundle fails to load. */
595
+ mapLibraryUnavailable?: string
596
+ /** Caption of the map's degraded coordinate table. */
597
+ mapDegradedCaption?: string
598
+ /** Notice above the map's degraded table. Template — `{error}`. */
599
+ mapRenderFailed?: string
600
+ /** Fallback reason when the Leaflet render throws without a message. */
601
+ mapRenderError?: string
602
+
603
+ // ── Degraded / accessible table headers ───────────────────
604
+ /** Column header of the map projection — feature type. */
605
+ degradedColType?: string
606
+ /** Column header of the map projection — latitude. */
607
+ degradedColLat?: string
608
+ /** Column header of the map projection — longitude. */
609
+ degradedColLng?: string
610
+ /** Column header of the map projection — property summary. */
611
+ degradedColInfo?: string
612
+ /** `Type` cell of a marker row in the map projection (6.20.0). */
613
+ degradedMarker?: string
614
+ /** `Type` cell of a GeoJSON feature without a geometry type (6.20.0). */
615
+ degradedFeature?: string
616
+ /** Column header of the graph projection — edge source. */
617
+ degradedColSource?: string
618
+ /** Column header of the graph projection — edge target. */
619
+ degradedColTarget?: string
620
+ /** Column header of the graph projection — node id. */
621
+ degradedColNode?: string
622
+ /** Column header of the graph / chart projections — label. */
623
+ degradedColLabel?: string
624
+ /** Fallback name of a dataset without a label. Template — `{n}`. */
625
+ degradedSeries?: string
626
+ /** Column header of the chart data table — series name. */
627
+ chartTableSeries?: string
628
+ /** Column header of the chart data table — point index. */
629
+ chartTablePoint?: string
630
+
631
+ // ── AutocompleteDropdown / AutocompleteFormField ──────────
632
+ /** Hint prose between the arrow keys and the Enter key cap. */
633
+ autocompleteHintNavigate?: string
634
+ /** Hint prose between the Enter and Esc key caps. */
635
+ autocompleteHintSelect?: string
636
+ /** Hint prose after the Esc key cap. */
637
+ autocompleteHintDismiss?: string
638
+ /** Ghost-text hint of the completion field. */
639
+ autocompleteTabToAccept?: string
640
+
641
+ // ── FormFieldRenderer (entity picker) ─────────────────────
642
+ /** Placeholder of a multi-value entity picker that already has values. */
643
+ fieldAddMorePlaceholder?: string
644
+
645
+ // ── ImageGalleryRenderer ──────────────────────────────────
646
+ /** Accessible name of a gallery thumbnail. Template — `{index}`. */
647
+ galleryViewImage?: string
648
+ /** `alt` of a gallery image without one. Template — `{index}`. */
649
+ galleryImageAlt?: string
650
+ /** Noun substituted into `imageViewFullSize` when the image has no `alt`. */
651
+ imageAltFallback?: string
652
+
653
+ // ── Chart image fallback (quickchart) ─────────────────────
654
+ /** `alt` / `aria-label` of the chart image when the payload has no title. */
655
+ chartVisualizationAlt?: string
656
+ /** `alt` / `aria-label` of the chart image with a title. Template — `{title}`. */
657
+ chartWithTitleAlt?: string
658
+ /** Error shown when the chart image fails to load. */
659
+ chartLoadFailed?: string
660
+
661
+ // ── Table pagination (continued) ──────────────────────────
662
+ /** Page-size option that disables pagination. */
663
+ paginationAllRows?: string
664
+
665
+ // ── Form validation messages ──────────────────────────────
666
+ /** Template — `{field}`. */
667
+ fieldRequired?: string
668
+ /** Template — `{field}`. */
669
+ fieldMustBeChecked?: string
670
+ /** Template — `{min}`. */
671
+ fieldMinLength?: string
672
+ /** Template — `{max}`. */
673
+ fieldMaxLength?: string
674
+ /** Value does not match the field's `pattern`. */
675
+ fieldInvalidPattern?: string
676
+ /** Value is not a valid email address. */
677
+ fieldInvalidEmail?: string
678
+ /** Value is not a number. */
679
+ fieldInvalidNumber?: string
680
+ /** Template — `{min}`. */
681
+ fieldMinValue?: string
682
+ /** Template — `{max}`. */
683
+ fieldMaxValue?: string
684
+ /** Template — `{min}`. */
685
+ fieldMinDate?: string
686
+ /** Template — `{max}`. */
687
+ fieldMaxDate?: string
688
+ /** Value is not one of the field's options. */
689
+ fieldInvalidOption?: string
690
+ /**
691
+ * Value does not match the field's `valueFormat`. Template — `{format}`.
692
+ * `field.valueFormatHint` still wins.
693
+ */
694
+ fieldInvalidFormat?: string
695
+
696
+ // ── Locale (6.20.0) ───────────────────────────
697
+ /**
698
+ * BCP-47 tag used for number / date formatting and string collation in
699
+ * library chrome and table cells (`toLocaleString`, `localeCompare`).
700
+ * Default `'en-US'`. Former behaviour: a hardcoded `'fr-FR'` / `'fr'` in
701
+ * table sorting, DataPreviewSection cells and map popups, and the
702
+ * runtime's implicit locale elsewhere (non-deterministic across SSR and
703
+ * hydration).
704
+ */
705
+ locale?: string
706
+
707
+ // ── BriefingDiff ──────────────────────────────────────────
708
+ /** Stats summary — added entries. Template — `{count}`. */
709
+ briefingAdded?: string
710
+ /** Stats summary — removed entries. Template — `{count}`. */
711
+ briefingRemoved?: string
712
+ /** Stats summary — changed entries. Template — `{count}`. */
713
+ briefingChanged?: string
714
+
715
+ // ── FooterRenderer ────────────────────────────────────────
716
+ /** Number of sources in the footer. Template — `{count}`. */
717
+ footerSources?: string
718
+
719
+ // ── FormFieldRenderer (6.20.0) ────────────────────────
720
+ /** Warning under a field whose `type` is unknown. Template — `{type}`. */
721
+ fieldUnknownType?: string
722
+ /** Trigger text of a multiselect with selections. Template — `{count}`. */
723
+ fieldSelectedCount?: string
724
+
725
+ // ── ScratchpadPanel (6.20.0) ──────────────────────────
726
+ /** Error code line of the error state. Template — `{code}`. */
727
+ scratchpadErrorCode?: string
728
+ /** Row count of a data-source section. Template — `{count}`. */
729
+ scratchpadResultCount?: string
730
+
731
+ // ── UIResourceRenderer table (6.20.0) ─────────────────
732
+ /** Suffix of the table title while rows are virtualized. Template — `{count}`. */
733
+ tableVirtualizedRows?: string
734
+ /** Search result count, singular. Template — `{count}`, `{total}`. */
735
+ tableSearchResultsOne?: string
736
+ /** Search result count, plural. Template — `{count}`, `{total}`. */
737
+ tableSearchResultsMany?: string
738
+ /** Server-side pagination range. Template — `{start}`, `{end}`, `{total}`. */
739
+ tableServerPageRange?: string
740
+
741
+ // ── UIResourceRenderer tool-error card (6.20.0) ───────
742
+ /**
743
+ * Text put on the clipboard by the error card's Copy button.
744
+ * Template — `{tool}`, `{message}`.
745
+ */
746
+ errorCopyText?: string
747
+ /** Tool name substituted into `errorCopyText` when the error has none. */
748
+ errorUnknownTool?: string
749
+
750
+ // ── StreamingUIRenderer / useStreamingUI (6.20.0) ─────
751
+ /** Progress message before the stream starts. */
752
+ streamInitializing?: string
753
+ /** Progress message while connecting. */
754
+ streamConnecting?: string
755
+ /** Progress message while a component streams in. Template — `{type}`. */
756
+ streamLoadingComponent?: string
757
+ /** Progress message once the stream completed. */
758
+ streamDashboardLoaded?: string
759
+ /** Progress message after a stream error. Template — `{message}`. */
760
+ streamErrorProgress?: string
761
+ /** Error title when the stream connection fails. */
762
+ streamConnectionFailed?: string
763
+ /** Error message when the server answers with a non-OK status and no message. */
764
+ streamRequestFailed?: string
765
+ /** Error message when the server answers without a body. */
766
+ streamEmptyResponse?: string
767
+ /** Error message when streaming is started during SSR. */
768
+ streamServerSide?: string
769
+ /** Error message when the failure carries no message. */
770
+ streamUnknownError?: string
771
+
772
+ // ── Degraded and unavailable states shown to end users (6.20.0) ──
773
+ /** StreamingUIRenderer error heading when streaming was started during SSR (the hook keeps the machine code `'ssr'`). */
774
+ streamServerSideTitle?: string
775
+ /** GraphRenderer heading when the `@antv/g6` peer is missing (the install hint below it stays English, policy P3). */
776
+ graphUnavailable?: string
777
+ /** MapRenderer banner when the PMTiles overlay fails to load or render. */
778
+ mapPmtilesUnavailable?: string
779
+ /** MapRenderer sentence appended to the PMTiles banner. */
780
+ mapBaseMapStillShown?: string
781
+ /** Chart error when `renderer: 'native'` is forced and chart.js is missing. */
782
+ chartJsUnavailable?: string
783
+ /** DegradedFallback message when chart.js is missing and the quickchart fallback is not allowed. */
784
+ chartIframeUnavailable?: string
785
+ /** DataPreviewSection fallback when the section content is not `{ columns, rows }`. */
786
+ previewInvalidContent?: string
787
+ /** Tooltip of the default citation chip button. Template — `{label}` (file name and page). */
788
+ citationViewSource?: string
789
+ /** ArtifactRenderer file size below 1 KB. Template — `{size}`. */
790
+ sizeBytes?: string
791
+ /** ArtifactRenderer file size in kilobytes. Template — `{size}`. */
792
+ sizeKilobytes?: string
793
+ /** ArtifactRenderer file size in megabytes. Template — `{size}`. */
794
+ sizeMegabytes?: string
101
795
  }
102
796
 
103
797
  /**
@@ -114,6 +808,13 @@ export const DEFAULT_MCPUI_STRINGS: Required<MCPUIStrings> = {
114
808
  feedbackPositiveAck: 'Thanks!',
115
809
  feedbackNegativeAck: "Noted — we'll improve",
116
810
  retry: 'Retry',
811
+ ok: 'OK',
812
+ cancel: 'Cancel',
813
+ confirm: 'Confirm',
814
+ submit: 'Submit',
815
+ dismiss: 'Dismiss',
816
+ yes: 'Yes',
817
+ no: 'No',
117
818
  chartView: 'Chart',
118
819
  chartDataView: 'Data',
119
820
  chartViewSelector: 'Chart or data view',
@@ -124,8 +825,278 @@ export const DEFAULT_MCPUI_STRINGS: Required<MCPUIStrings> = {
124
825
  paginationNext: 'Next page',
125
826
  paginationPageSize: 'Rows per page',
126
827
  gridRegion: 'Layout grid',
828
+ autocompleteSuggestions: 'Suggestions',
829
+ autocompleteLoading: 'Loading...',
830
+ autocompleteEmpty: 'No suggestions found',
831
+ carouselTitle: 'Carousel',
832
+ carouselCopy: 'Copy items (JSON)',
833
+ mapTitle: 'Map',
834
+ mapCopy: 'Copy markers as GeoJSON',
835
+ chartDownloadPng: 'Download PNG',
836
+ chartDownloadPngAria: 'Download chart as PNG',
837
+ chartCopy: 'Copy chart data (JSON)',
838
+ chartLoading: 'Loading chart...',
839
+ codeSearchPlaceholder: 'Search\u2026',
840
+ codeSearchAria: 'Search in code',
841
+ codeDownloadAria: 'Download code as file',
842
+ codeDownload: 'Download code',
843
+ codeToggleWordWrap: 'Toggle word wrap',
844
+ codeCopy: 'Copy code',
845
+ codeTitle: 'Code',
846
+ codeWordWrapEnable: 'Enable word wrap',
847
+ codeWordWrapDisable: 'Disable word wrap',
848
+ exportCsvRows: 'Export CSV ({count} rows)',
849
+ exportJsonRows: 'Export JSON ({count} rows)',
850
+ sortBy: 'Sort by {column}',
851
+ removeItem: 'Remove {name}',
852
+ filterPlaceholder: 'Filter...',
853
+ fieldNotSupported: 'Not supported',
854
+ fieldNoMatches: 'No matches',
855
+ fieldGroupContainer: 'Group container',
856
+ fieldSelectPlaceholder: 'Select...',
857
+ fieldTagsPlaceholder: 'Type and press Enter...',
858
+ scratchpadClose: 'Close',
859
+ scratchpadPreview: 'Preview',
860
+ scratchpadNoResults: 'No results for these filters',
861
+ scratchpadModifyFilters: 'Modify filters',
862
+ scratchpadNoFilters: 'No filters',
863
+ // Former literal was French ('Modifier') — the library ships English
864
+ // defaults, so this one changed on purpose.
865
+ scratchpadEdit: 'Edit',
866
+ scratchpadSend: 'Send',
867
+ scratchpadShowRaw: 'Show raw SSE payload',
868
+ scratchpadHideRaw: 'Hide raw SSE payload',
869
+ scratchpadCommentPlaceholder: 'Add a comment...',
870
+ scratchpadError: 'Error',
871
+ scratchpadSource: 'Source',
872
+ graphExport: 'Export graph',
873
+ graphCopy: 'Copy graph (JSON)',
874
+ graphTitle: 'Graph',
875
+ graphExportMenu: 'Export \u25BE',
876
+ graphDownloadPng: 'Download PNG',
877
+ graphDownloadPngHint: 'visual snapshot',
878
+ graphDownloadMermaid: 'Download Mermaid',
879
+ graphDownloadMermaidHint: 'markdown / GitHub',
880
+ graphDownloadJson: 'Download JSON',
881
+ graphDownloadJsonHint: 'raw data',
882
+ galleryCopy: 'Copy image URLs',
883
+ galleryTitle: 'Gallery',
884
+ videoCopy: 'Copy video URL',
885
+ videoTitle: 'Video',
886
+ sourceDetected: 'Detected from message',
887
+ sourceInferred: 'Inferred from context',
888
+ sourcePrevious: 'Previously provided',
889
+ lightboxLabel: 'Image lightbox',
890
+ lightboxClose: 'Close lightbox',
891
+ lightboxPrevious: 'Previous image',
892
+ lightboxNext: 'Next image',
893
+ modalClose: 'Close modal',
894
+ copy: 'Copy',
895
+ copyMetric: 'Copy metric',
896
+ copyText: 'Copy text',
897
+ copyErrorDetails: 'Copy error details',
898
+ tableTitle: 'Table',
899
+ tableCopyCsv: 'Copy table (CSV)',
900
+ tableExport: 'Export table',
901
+ tableClearSearch: 'Clear search',
902
+ tableAriaLabel: 'Data table',
903
+ // Former literal was French ('Rechercher dans le tableau...') — the
904
+ // library ships English defaults, so this one changed on purpose.
905
+ tableSearchPlaceholder: 'Search the table...',
906
+ tableCopyTsv: 'Copy TSV',
907
+ tableDownloadCsv: 'Download CSV',
908
+ tableDownloadJson: 'Download JSON',
909
+ perPageSuffix: '/ page',
910
+ imageAlt: 'Image',
911
+ imageViewFullSize: 'View full size: {alt}',
912
+ iframeTitle: 'Embedded content',
913
+ linkLabel: 'Link',
914
+ linkOpensInNewTab: '{label}: {description} (opens in new tab)',
915
+ validationWarning: 'Component validation warning',
916
+ resourceTitle: 'Resource',
917
+ chartError: 'Chart Error',
918
+ validationError: 'Validation Error',
919
+ validationUnknownError: 'Unknown validation error',
920
+ errorUnknown: 'Unknown error',
921
+ errorUnknownToolName: 'Unknown',
922
+ errorToolExecution: 'An error occurred during tool execution',
923
+ verifiedTitle: 'Verified against source data',
924
+ verifiedAria: 'verified',
925
+ unverifiedAria: 'unverified',
926
+ verifiedNotFound: 'Not found in source data',
927
+ verifiedNotFoundClosest: 'Not found in source data. Closest: {closest} ({pct}% off)',
928
+ // Former literal was French ('[non v\u00E9rifi\u00E9]') — see above.
929
+ verifiedStripLabel: '[unverified]',
930
+ verifiedConfidence: '{pct}% verified',
931
+ verifiedUnverifiedCount: '({count} unverified)',
932
+ promptLoadingPreview: 'Loading preview...',
933
+ promptConfirmed: 'Confirmed',
934
+ promptCancelled: 'Cancelled',
935
+ promptFormSubmitted: 'Form submitted',
936
+ formSubmissionFailed: 'Submission failed',
937
+ formSubmitCountdown: '{label} in {seconds}s...',
938
+ actionGroupLabel: 'Action group',
939
+ artifactDescription: 'Generated artifact',
940
+ degradedCaption: 'Showing the underlying data \u2014 the interactive view is unavailable.',
941
+ metaProvider: 'Provider',
942
+ metaModel: 'Model',
943
+ metaExecutionTime: 'Execution Time',
944
+ metaCost: 'Cost',
945
+ metaTtfb: 'TTFB',
946
+ metaCached: 'Cached',
947
+ download: 'Download',
948
+ unknown: 'unknown',
949
+ // Former literal was French ('[r\u00E9f. {id}]') — see above.
950
+ citationUnresolved: '[ref. {id}]',
951
+ invalidComponent: 'Invalid {type}',
952
+ toolErrorTitle: 'Tool Error: {tool}',
953
+ errorTypeLabel: 'Type: {type}',
954
+ errorSuggestions: 'Suggestions:',
955
+ chartInvalidData: 'Invalid chart data: missing data.datasets',
956
+ unsupportedComponentType: 'Unsupported component type:',
957
+ previewPrev: 'Prev',
958
+ previewNext: 'Next',
959
+ previewPageIndicator: 'Page {page} / {total}',
960
+ fieldResolving: 'Resolving...',
961
+ // Former literals were French ('{count} champ(s) pr\u00E9-rempli(s) sur {total}').
962
+ formPrefilledOne: '{count} field pre-filled out of {total}',
963
+ formPrefilledMany: '{count} fields pre-filled out of {total}',
964
+ formSubmitting: 'Submitting...',
965
+ formReset: 'Reset',
966
+ errorBoundaryTitle: 'Component Failed to Render',
967
+ errorBoundaryMeta: 'Type: {type} | ID: {id}...',
968
+ errorBoundaryRetry: 'Retry Rendering',
969
+ scratchpadSearch: 'Search',
970
+ scratchpadNextStep: 'Next',
971
+ scratchpadPlan: 'Plan:',
972
+ scratchpadModify: 'Modify',
973
+ scratchpadDetails: 'Details',
974
+ scratchpadItems: 'items',
975
+ videoUnsupported: 'Your browser does not support the video tag.',
976
+ previewShowingRange: 'Showing {start}–{end} of {total}',
977
+ previewRowsOne: '{count} row',
978
+ previewRowsMany: '{count} rows',
979
+ previewTotalSuffix: ' ({total} total)',
980
+ statusLoading: 'Loading...',
981
+ statusActionAvailable: 'Action available',
982
+ statusYourTurn: 'Your turn',
983
+ statusProcessing: 'Processing...',
984
+ statusComplete: 'Complete',
985
+ agentStatusIdle: 'Idle',
986
+ agentStatusRunning: 'Running',
987
+ agentStatusWaiting: 'Waiting',
988
+ agentStatusDone: 'Done',
989
+ agentStatusError: 'Error',
990
+ handoffItems: '{count} items',
991
+ degradedMoreRows: '+{count} more rows not shown.',
992
+ chartDegradedCaption:
993
+ 'Showing the chart data as a table — the interactive chart is unavailable.',
994
+ chartRenderFailed: 'Chart rendering failed: {error}',
995
+ chartQuickchartCaption: 'Showing the chart data as a table.',
996
+ graphDegradedCaption:
997
+ 'Showing the graph data as a table — the interactive view is unavailable.',
998
+ graphRenderFailed: 'Graph rendering failed: {error}',
999
+ graphRenderError: 'Failed to render graph',
1000
+ chartRenderError: 'Chart rendering failed',
1001
+ graphPngUnsupported: 'PNG export not supported in current renderer mode',
1002
+ graphPngExportFailed: 'PNG export failed',
1003
+ mapLibraryUnavailable: 'Map library could not be loaded.',
1004
+ mapDegradedCaption:
1005
+ 'Showing the map data as a coordinate table — the interactive map is unavailable.',
1006
+ mapRenderFailed: 'Map rendering failed: {error}',
1007
+ mapRenderError: 'Failed to render map',
1008
+ degradedColType: 'Type',
1009
+ degradedColLat: 'Lat',
1010
+ degradedColLng: 'Lng',
1011
+ degradedColInfo: 'Info',
1012
+ degradedColSource: 'Source',
1013
+ degradedColTarget: 'Target',
1014
+ degradedColNode: 'Node',
1015
+ degradedColLabel: 'Label',
1016
+ degradedSeries: 'Series {n}',
1017
+ chartTableSeries: 'Series',
1018
+ chartTablePoint: 'Point',
1019
+ autocompleteHintNavigate: ' to navigate, ',
1020
+ autocompleteHintSelect: ' to select, ',
1021
+ autocompleteHintDismiss: ' to dismiss',
1022
+ autocompleteTabToAccept: 'Tab to accept',
1023
+ fieldAddMorePlaceholder: 'Add more...',
1024
+ galleryViewImage: 'View image {index}',
1025
+ galleryImageAlt: 'Image {index}',
1026
+ imageAltFallback: 'image',
1027
+ chartVisualizationAlt: 'Chart visualization',
1028
+ chartWithTitleAlt: 'Chart: {title}',
1029
+ chartLoadFailed: 'Failed to load chart',
1030
+ paginationAllRows: 'All',
1031
+ fieldRequired: '{field} is required',
1032
+ fieldMustBeChecked: '{field} must be checked',
1033
+ fieldMinLength: 'Minimum {min} characters required',
1034
+ fieldMaxLength: 'Maximum {max} characters allowed',
1035
+ fieldInvalidPattern: 'Invalid format',
1036
+ fieldInvalidEmail: 'Invalid email address',
1037
+ fieldInvalidNumber: 'Must be a valid number',
1038
+ fieldMinValue: 'Minimum value is {min}',
1039
+ fieldMaxValue: 'Maximum value is {max}',
1040
+ fieldMinDate: 'Date must be after {min}',
1041
+ fieldMaxDate: 'Date must be before {max}',
1042
+ fieldInvalidOption: 'Please select a valid option',
1043
+ fieldInvalidFormat: 'Invalid format (expected: {format})',
1044
+
1045
+ // ── 6.20.0 ─────────────────────────────────────
1046
+ // DEFAULT CHANGE: formatting / collation used 'fr-FR' / 'fr' (or the
1047
+ // runtime's implicit locale) — now one explicit, overridable tag.
1048
+ locale: 'en-US',
1049
+ briefingAdded: '+{count} added',
1050
+ briefingRemoved: '{count} removed',
1051
+ briefingChanged: '{count} changed',
1052
+ footerSources: '{count} sources',
1053
+ degradedMarker: 'marker',
1054
+ degradedFeature: 'feature',
1055
+ fieldUnknownType: 'Unknown field type: {type}',
1056
+ fieldSelectedCount: '{count} selected',
1057
+ scratchpadErrorCode: 'Code: {code}',
1058
+ scratchpadResultCount: '{count} results',
1059
+ tableVirtualizedRows: '(virtualized: {count} rows)',
1060
+ tableSearchResultsOne: '{count} result on {total}',
1061
+ tableSearchResultsMany: '{count} results on {total}',
1062
+ tableServerPageRange: 'Showing {start} - {end} of {total}',
1063
+ errorCopyText: 'Error in {tool}: {message}',
1064
+ errorUnknownTool: 'unknown tool',
1065
+ streamInitializing: 'Initializing...',
1066
+ streamConnecting: 'Connecting to server...',
1067
+ streamLoadingComponent: 'Loading {type} component...',
1068
+ streamDashboardLoaded: 'Dashboard loaded',
1069
+ streamErrorProgress: 'Error: {message}',
1070
+ streamConnectionFailed: 'Stream connection failed',
1071
+ streamRequestFailed: 'Stream request failed',
1072
+ streamEmptyResponse: 'Response body is null',
1073
+ streamServerSide: 'Streaming UI cannot start on server-side',
1074
+ streamUnknownError: 'Unknown error',
1075
+ streamServerSideTitle: 'Streaming unavailable',
1076
+ graphUnavailable: 'Graph rendering unavailable',
1077
+ mapPmtilesUnavailable:
1078
+ 'PMTiles layer unavailable \u2014 the optional "protomaps-leaflet" peer dependency failed to load or render.',
1079
+ mapBaseMapStillShown: 'The base map is still shown.',
1080
+ chartJsUnavailable: 'Chart.js is not available. Install chart.js peer dependency.',
1081
+ chartIframeUnavailable:
1082
+ 'Interactive chart unavailable \u2014 install the chart.js peer dependency, or set allowQuickchartFallback to use the external quickchart.io renderer.',
1083
+ previewInvalidContent: '[DataPreviewSection] Invalid content format',
1084
+ citationViewSource: 'View source - {label}',
1085
+ sizeBytes: '{size} B',
1086
+ sizeKilobytes: '{size} KB',
1087
+ sizeMegabytes: '{size} MB',
127
1088
  }
128
1089
 
1090
+ /**
1091
+ * Substitutes `{name}` placeholders in a chrome string template.
1092
+ *
1093
+ * Lives in `../utils/format-string` — a runtime-free module — so the pure
1094
+ * adapters under `src/adapters` can interpolate their own templates without
1095
+ * importing `solid-js`. Re-exported here (and from the root barrel) so every
1096
+ * existing import path keeps working.
1097
+ */
1098
+ export { formatMCPUIString } from '../utils/format-string'
1099
+
129
1100
  export const MCPUIStringsContext = createContext<MCPUIStrings>(DEFAULT_MCPUI_STRINGS)
130
1101
 
131
1102
  /**
@@ -133,8 +1104,40 @@ export const MCPUIStringsContext = createContext<MCPUIStrings>(DEFAULT_MCPUI_STR
133
1104
  * `<MCPUIStringsProvider>` is mounted above — every renderer works
134
1105
  * standalone with English chrome.
135
1106
  */
1107
+ const resolvedLocales = new Map<string, string>()
1108
+
1109
+ /**
1110
+ * Returns `locale` in canonical BCP-47 form, or `DEFAULT_MCPUI_STRINGS.locale`
1111
+ * (`'en-US'`) when it is missing or not a valid tag. Renderers pass the result
1112
+ * straight to `Intl` / `toLocaleString` / `localeCompare`, which throw a
1113
+ * `RangeError` on an invalid tag such as `'not_a_locale'`.
1114
+ *
1115
+ * @since v6.20.0
1116
+ */
1117
+ export function resolveMCPUILocale(locale: unknown): string {
1118
+ const fallback = DEFAULT_MCPUI_STRINGS.locale
1119
+ if (typeof locale !== 'string' || locale.trim() === '') return fallback
1120
+ const cached = resolvedLocales.get(locale)
1121
+ if (cached) return cached
1122
+ let resolved = fallback
1123
+ try {
1124
+ const [canonical] = Intl.getCanonicalLocales(locale)
1125
+ if (canonical) resolved = canonical
1126
+ } catch {
1127
+ resolved = fallback
1128
+ }
1129
+ if (resolvedLocales.size < 64) resolvedLocales.set(locale, resolved)
1130
+ return resolved
1131
+ }
1132
+
136
1133
  export function useMCPUIStrings(): Required<MCPUIStrings> {
137
- return mergeProps(DEFAULT_MCPUI_STRINGS, useContext(MCPUIStringsContext))
1134
+ const context = useContext(MCPUIStringsContext)
1135
+ // The last source wins: `locale` is always a valid tag, whatever the provider passed.
1136
+ return mergeProps(DEFAULT_MCPUI_STRINGS, context, {
1137
+ get locale() {
1138
+ return resolveMCPUILocale(context?.locale)
1139
+ },
1140
+ })
138
1141
  }
139
1142
 
140
1143
  export interface MCPUIStringsProviderProps {