@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
@@ -1,4 +1,4 @@
1
- import { createComponent, getNextElement, getNextMarker, spread, mergeProps, use, insert, effect, style, setAttribute, runHydrationEvents, template, className, memo, isServer, setProperty, addEventListener, classList, setStyleProperty, delegateEvents } from "solid-js/web";
1
+ import { createComponent, getNextElement, getNextMarker, spread, mergeProps, use, insert, effect, style, setAttribute, runHydrationEvents, memo, template, className, isServer, setProperty, addEventListener, classList, setStyleProperty, delegateEvents } from "solid-js/web";
2
2
  import { createMemo, onMount, onCleanup, For, Show, createSignal, createEffect } from "solid-js";
3
3
  import { sanitizeHtml, SANITIZE_PROFILES, canSanitizeHtml } from "../utils/sanitize-html.js";
4
4
  import { escapeHtml } from "../utils/escape-html.js";
@@ -11,7 +11,7 @@ import { isDebugEnabled } from "../utils/logger.js";
11
11
  import { getUiResourceStableKey } from "../utils/stable-key.js";
12
12
  import { _registerMount, _unregisterMount, getDuplicateMountReporter } from "../utils/duplicate-mount-registry.js";
13
13
  import { useTelemetry } from "../context/MCPUITelemetryContext.js";
14
- import { useMCPUIStrings } from "../context/MCPUIStringsContext.js";
14
+ import { useMCPUIStrings, DEFAULT_MCPUI_STRINGS } from "../context/MCPUIStringsContext.js";
15
15
  import { GridRenderer } from "./GridRenderer.js";
16
16
  import { FooterRenderer } from "./FooterRenderer.js";
17
17
  import { CarouselRenderer } from "./CarouselRenderer.js";
@@ -33,8 +33,10 @@ import { RenderProvider } from "./RenderContext.js";
33
33
  import { useAction } from "../hooks/useAction.js";
34
34
  import { createResponsiveGrid } from "../hooks/createResponsiveGrid.js";
35
35
  import { marked } from "marked";
36
- var _tmpl$ = /* @__PURE__ */ template(`<svg class="w-3 h-3 text-gray-500 dark:text-gray-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z">`), _tmpl$2 = /* @__PURE__ */ template(`<button data-mcp-ui-action=copy type=button>`), _tmpl$3 = /* @__PURE__ */ template(`<svg class="w-3 h-3 text-green-500"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M5 13l4 4L19 7">`), _tmpl$4 = /* @__PURE__ */ template(`<div class="p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700"><p class="text-red-500 dark:text-red-400 text-sm">Invalid chart data: missing data.datasets`), _tmpl$5 = /* @__PURE__ */ template(`<div class=p-3>`), _tmpl$6 = /* @__PURE__ */ template(`<div class="absolute inset-0 flex items-center justify-center"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600">`), _tmpl$7 = /* @__PURE__ */ template(`<div class="absolute inset-0 flex items-center justify-center p-4"><div class=text-center><p class="text-red-600 dark:text-red-400 text-sm font-medium">Chart Error</p><p class="text-gray-600 dark:text-gray-400 text-xs mt-1">`), _tmpl$8 = /* @__PURE__ */ template(`<h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3">`), _tmpl$9 = /* @__PURE__ */ template(`<div class="w-full h-full p-4"><!$><!/><div class="w-full h-full"role=img><img class="w-full h-auto max-h-[300px] object-contain">`), _tmpl$0 = /* @__PURE__ */ template(`<div class="relative w-full h-full min-h-[300px] bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden"><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$1 = /* @__PURE__ */ template(`<tbody class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">`), _tmpl$10 = /* @__PURE__ */ template(`<tr>`), _tmpl$11 = /* @__PURE__ */ template(`<td class="px-6 py-4 text-sm text-gray-700 dark:text-gray-200 whitespace-normal break-words leading-relaxed first:pl-6 last:pr-6">`), _tmpl$12 = /* @__PURE__ */ template(`<tbody class="bg-white dark:bg-gray-800 relative">`), _tmpl$13 = /* @__PURE__ */ template(`<button class="w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">Copy TSV`), _tmpl$14 = /* @__PURE__ */ template(`<button class="w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">Download CSV`), _tmpl$15 = /* @__PURE__ */ template(`<button class="w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">Download JSON`), _tmpl$16 = /* @__PURE__ */ template(`<div class="absolute right-10 top-2 z-10"><button class="opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm"title="Export table"aria-label="Export table"aria-haspopup=menu><svg class="w-3 h-3 text-gray-500 dark:text-gray-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg></button><!$><!/>`), _tmpl$17 = /* @__PURE__ */ template(`<span class="ml-2 text-xs font-normal text-gray-400">(virtualized: <!$><!/> rows)`), _tmpl$18 = /* @__PURE__ */ template(`<h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3 flex-shrink-0"><!$><!/><!$><!/>`), _tmpl$19 = /* @__PURE__ */ template(`<button type=button class="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-sm"aria-label="Clear search">&times;`), _tmpl$20 = /* @__PURE__ */ template(`<div class="relative mb-3"><span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none text-sm">🔍</span><input type=text class="w-full max-w-xs min-w-[200px] pl-8 pr-8 py-1.5 text-sm border border-gray-200 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 outline-none"><!$><!/>`), _tmpl$21 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400 mb-2"><!$><!/> result<!$><!/> on <!$><!/>`), _tmpl$22 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>Showing <!$><!/> - <!$><!/> of <!$><!/>`), _tmpl$23 = /* @__PURE__ */ template(`<select class="ml-2 px-1 py-0.5 text-xs border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300"data-mcp-ui-action=page-size>`), _tmpl$24 = /* @__PURE__ */ template(`<span class=text-gray-400>/ page`), _tmpl$25 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span><!$><!/>&ndash;<!$><!/> / <!$><!/></span><div class="flex items-center gap-2"><button type=button class="px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors"data-mcp-ui-action=page-prev><span aria-hidden=true>&#x25C0;</span></button><span aria-live=polite><!$><!/> / <!$><!/></span><button type=button class="px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors"data-mcp-ui-action=page-next><span aria-hidden=true>&#x25B6;</span></button><!$><!/>`), _tmpl$26 = /* @__PURE__ */ template(`<div><!$><!/><div><!$><!/><!$><!/><div role=region tabindex=0><table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0"><thead class="bg-gray-100 dark:bg-gray-900 sticky top-0 z-10"><tr></tr></thead><!$><!/></table></div><!$><!/><!$><!/>`), _tmpl$27 = /* @__PURE__ */ template(`<th scope=col class="px-6 py-3 text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 first:pl-6 last:pr-6 bg-gray-100 dark:bg-gray-900 cursor-pointer select-none hover:bg-gray-200 dark:hover:bg-gray-800 transition-colors"><span class="inline-flex items-center gap-1"><!$><!/><span class="text-[10px] leading-none">`), _tmpl$28 = /* @__PURE__ */ template(`<option>`), _tmpl$29 = /* @__PURE__ */ template(`<span class="ml-2 text-sm font-medium text-gray-500 dark:text-gray-400">`), _tmpl$30 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center"><span><!$><!/> <!$><!/>%`), _tmpl$31 = /* @__PURE__ */ template(`<p class="mt-2 text-xs text-gray-500 dark:text-gray-400">`), _tmpl$32 = /* @__PURE__ */ template(`<div class="relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group"><!$><!/><div class="flex flex-col h-full justify-between"><div><p class="text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide"></p><div class="mt-2 flex items-baseline"><p class="text-2xl font-semibold text-gray-900 dark:text-white"></p><!$><!/></div></div><!$><!/><!$><!/>`), _tmpl$33 = /* @__PURE__ */ template(`<div class="relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group"><!$><!/><!$><!/>`), _tmpl$34 = /* @__PURE__ */ template(`<img class="max-w-full max-h-[400px] object-contain rounded shadow-sm hover:opacity-90 transition-opacity"loading=lazy>`, true, false, false), _tmpl$35 = /* @__PURE__ */ template(`<div class="w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col"><div class="flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]"></div><div class="p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800"><p class="text-sm text-gray-600 dark:text-gray-400 text-center italic">`), _tmpl$36 = /* @__PURE__ */ template(`<a target=_blank rel="noopener noreferrer"class=cursor-zoom-in>`), _tmpl$37 = /* @__PURE__ */ template(`<div class="px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900"><h3 class="text-sm font-semibold text-gray-900 dark:text-white">`), _tmpl$38 = /* @__PURE__ */ template(`<div class="w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col"><!$><!/><iframe class="w-full border-0 flex-1"loading=lazy>`, true, false, false), _tmpl$39 = /* @__PURE__ */ template(`<figcaption class="p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800"><p class="text-sm text-gray-600 dark:text-gray-400 text-center">`), _tmpl$40 = /* @__PURE__ */ template(`<figure><div class="flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]"><a target=_blank rel="noopener noreferrer"class="cursor-zoom-in focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded"><img class="max-w-full max-h-[500px] object-contain rounded shadow-sm hover:opacity-95 transition-opacity"loading=lazy></a></div><!$><!/>`, true, false, false), _tmpl$41 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400 truncate">`), _tmpl$42 = /* @__PURE__ */ template(`<a target=_blank rel="noopener noreferrer"><div class="p-2 bg-blue-50 dark:bg-blue-900/30 rounded-full text-blue-600 dark:text-blue-400 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/50 shrink-0 transition-colors"aria-hidden=true><svg xmlns=http://www.w3.org/2000/svg class="w-5 h-5"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></div><div class="flex-1 min-w-0"><h4 class="text-sm font-medium text-gray-900 dark:text-white truncate group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors"></h4><!$><!/></div><svg xmlns=http://www.w3.org/2000/svg class="w-4 h-4 text-gray-400 group-hover:text-gray-600 dark:group-hover:text-gray-300 shrink-0 transition-colors"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>`), _tmpl$43 = /* @__PURE__ */ template(`<div class="inline-flex items-center gap-1.5 px-2 py-1 rounded-md bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 text-xs text-yellow-800 dark:text-yellow-200"role=alert aria-label="Component validation warning"><svg xmlns=http://www.w3.org/2000/svg class="w-3.5 h-3.5"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1=12 y1=9 x2=12 y2=13></line><line x1=12 y1=17 x2=12.01 y2=17></line></svg><span>Invalid <!$><!/>`), _tmpl$44 = /* @__PURE__ */ template(`<div class="w-full h-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4"><p class="text-sm font-medium text-red-900 dark:text-red-100">Validation Error</p><p class="text-xs text-red-700 dark:text-red-300 mt-1">`), _tmpl$45 = /* @__PURE__ */ template(`<div role=alert class="w-full rounded-lg border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:border-amber-700/50 dark:bg-amber-900/20 dark:text-amber-200">Unsupported component type: <code class=font-mono>`), _tmpl$46 = /* @__PURE__ */ template(`<span aria-hidden=true>`), _tmpl$47 = /* @__PURE__ */ template(`<a rel="noopener noreferrer"><!$><!/><!$><!/>`), _tmpl$48 = /* @__PURE__ */ template(`<span class="animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full"aria-hidden=true>`), _tmpl$49 = /* @__PURE__ */ template(`<button type=button><!$><!/><!$><!/><!$><!/>`), _tmpl$50 = /* @__PURE__ */ template(`<p class="text-xs text-red-600 dark:text-red-400 mt-1">Type: <!$><!/>`), _tmpl$51 = /* @__PURE__ */ template(`<div class=mt-3><p class="text-xs font-medium text-red-700 dark:text-red-300">Suggestions:</p><ul class="mt-1 text-xs text-red-600 dark:text-red-400 list-disc list-inside">`), _tmpl$52 = /* @__PURE__ */ template(`<p class="text-xs text-red-500 dark:text-red-500 mt-2">`), _tmpl$53 = /* @__PURE__ */ template(`<div class="relative w-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 group"><!$><!/><div class="flex items-start gap-3"><div class="p-2 bg-red-100 dark:bg-red-900/40 rounded-full shrink-0"><svg class="w-5 h-5 text-red-600 dark:text-red-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path></svg></div><div class="flex-1 min-w-0"><h4 class="text-sm font-semibold text-red-800 dark:text-red-200">Tool Error: <!$><!/></h4><p class="text-sm text-red-700 dark:text-red-300 mt-1"></p><!$><!/><!$><!/><!$><!/>`), _tmpl$54 = /* @__PURE__ */ template(`<li>`), _tmpl$55 = /* @__PURE__ */ template(`<div class="px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900"><h3 class="text-sm font-semibold text-gray-900 dark:text-white capitalize">`), _tmpl$56 = /* @__PURE__ */ template(`<div class="w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden"><!$><!/><!$><!/>`), _tmpl$57 = /* @__PURE__ */ template(`<div><div class="grid gap-4"data-mcp-ui-grid></div><!$><!/>`), _tmpl$58 = /* @__PURE__ */ template(`<div class=min-w-0>`);
36
+ import { formatMCPUIString } from "../utils/format-string.js";
37
+ var _tmpl$ = /* @__PURE__ */ template(`<svg class="w-3 h-3 text-gray-500 dark:text-gray-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z">`), _tmpl$2 = /* @__PURE__ */ template(`<button data-mcp-ui-action=copy type=button>`), _tmpl$3 = /* @__PURE__ */ template(`<svg class="w-3 h-3 text-green-500"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M5 13l4 4L19 7">`), _tmpl$4 = /* @__PURE__ */ template(`<div class="p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700"><p class="text-red-500 dark:text-red-400 text-sm">`), _tmpl$5 = /* @__PURE__ */ template(`<div class=p-3>`), _tmpl$6 = /* @__PURE__ */ template(`<div class="absolute inset-0 flex items-center justify-center"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600">`), _tmpl$7 = /* @__PURE__ */ template(`<div class="absolute inset-0 flex items-center justify-center p-4"><div class=text-center><p class="text-red-600 dark:text-red-400 text-sm font-medium"></p><p class="text-gray-600 dark:text-gray-400 text-xs mt-1">`), _tmpl$8 = /* @__PURE__ */ template(`<h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3">`), _tmpl$9 = /* @__PURE__ */ template(`<div class="w-full h-full p-4"><!$><!/><div class="w-full h-full"role=img><img class="w-full h-auto max-h-[300px] object-contain">`), _tmpl$0 = /* @__PURE__ */ template(`<div class="relative w-full h-full min-h-[300px] bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden"><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$1 = /* @__PURE__ */ template(`<tbody class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">`), _tmpl$10 = /* @__PURE__ */ template(`<tr>`), _tmpl$11 = /* @__PURE__ */ template(`<td class="px-6 py-4 text-sm text-gray-700 dark:text-gray-200 whitespace-normal break-words leading-relaxed first:pl-6 last:pr-6">`), _tmpl$12 = /* @__PURE__ */ template(`<tbody class="bg-white dark:bg-gray-800 relative">`), _tmpl$13 = /* @__PURE__ */ template(`<button class="w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">`), _tmpl$14 = /* @__PURE__ */ template(`<div class="absolute right-10 top-2 z-10"><button class="opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm"aria-haspopup=menu><svg class="w-3 h-3 text-gray-500 dark:text-gray-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg></button><!$><!/>`), _tmpl$15 = /* @__PURE__ */ template(`<span class="ml-2 text-xs font-normal text-gray-400">`), _tmpl$16 = /* @__PURE__ */ template(`<h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3 flex-shrink-0"><!$><!/><!$><!/>`), _tmpl$17 = /* @__PURE__ */ template(`<button type=button class="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-sm">&times;`), _tmpl$18 = /* @__PURE__ */ template(`<div class="relative mb-3"><span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none text-sm">🔍</span><input type=text class="w-full max-w-xs min-w-[200px] pl-8 pr-8 py-1.5 text-sm border border-gray-200 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 outline-none"><!$><!/>`), _tmpl$19 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400 mb-2">`), _tmpl$20 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>`), _tmpl$21 = /* @__PURE__ */ template(`<select class="ml-2 px-1 py-0.5 text-xs border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300"data-mcp-ui-action=page-size>`), _tmpl$22 = /* @__PURE__ */ template(`<span class=text-gray-400>`), _tmpl$23 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span><!$><!/>&ndash;<!$><!/> / <!$><!/></span><div class="flex items-center gap-2"><button type=button class="px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors"data-mcp-ui-action=page-prev><span aria-hidden=true>&#x25C0;</span></button><span aria-live=polite><!$><!/> / <!$><!/></span><button type=button class="px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors"data-mcp-ui-action=page-next><span aria-hidden=true>&#x25B6;</span></button><!$><!/>`), _tmpl$24 = /* @__PURE__ */ template(`<div><!$><!/><div><!$><!/><!$><!/><div role=region tabindex=0><table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0"><thead class="bg-gray-100 dark:bg-gray-900 sticky top-0 z-10"><tr></tr></thead><!$><!/></table></div><!$><!/><!$><!/>`), _tmpl$25 = /* @__PURE__ */ template(`<th scope=col class="px-6 py-3 text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 first:pl-6 last:pr-6 bg-gray-100 dark:bg-gray-900 cursor-pointer select-none hover:bg-gray-200 dark:hover:bg-gray-800 transition-colors"><span class="inline-flex items-center gap-1"><!$><!/><span class="text-[10px] leading-none">`), _tmpl$26 = /* @__PURE__ */ template(`<option>`), _tmpl$27 = /* @__PURE__ */ template(`<span class="ml-2 text-sm font-medium text-gray-500 dark:text-gray-400">`), _tmpl$28 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center"><span><!$><!/> <!$><!/>%`), _tmpl$29 = /* @__PURE__ */ template(`<p class="mt-2 text-xs text-gray-500 dark:text-gray-400">`), _tmpl$30 = /* @__PURE__ */ template(`<div class="relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group"><!$><!/><div class="flex flex-col h-full justify-between"><div><p class="text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide"></p><div class="mt-2 flex items-baseline"><p class="text-2xl font-semibold text-gray-900 dark:text-white"></p><!$><!/></div></div><!$><!/><!$><!/>`), _tmpl$31 = /* @__PURE__ */ template(`<div class="relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group"><!$><!/><!$><!/>`), _tmpl$32 = /* @__PURE__ */ template(`<img class="max-w-full max-h-[400px] object-contain rounded shadow-sm hover:opacity-90 transition-opacity"loading=lazy>`, true, false, false), _tmpl$33 = /* @__PURE__ */ template(`<div class="w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col"><div class="flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]"></div><div class="p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800"><p class="text-sm text-gray-600 dark:text-gray-400 text-center italic">`), _tmpl$34 = /* @__PURE__ */ template(`<a target=_blank rel="noopener noreferrer"class=cursor-zoom-in>`), _tmpl$35 = /* @__PURE__ */ template(`<div class="px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900"><h3 class="text-sm font-semibold text-gray-900 dark:text-white">`), _tmpl$36 = /* @__PURE__ */ template(`<div class="w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col"><!$><!/><iframe class="w-full border-0 flex-1"loading=lazy>`, true, false, false), _tmpl$37 = /* @__PURE__ */ template(`<figcaption class="p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800"><p class="text-sm text-gray-600 dark:text-gray-400 text-center">`), _tmpl$38 = /* @__PURE__ */ template(`<figure><div class="flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]"><a target=_blank rel="noopener noreferrer"class="cursor-zoom-in focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded"><img class="max-w-full max-h-[500px] object-contain rounded shadow-sm hover:opacity-95 transition-opacity"loading=lazy></a></div><!$><!/>`, true, false, false), _tmpl$39 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400 truncate">`), _tmpl$40 = /* @__PURE__ */ template(`<a target=_blank rel="noopener noreferrer"><div class="p-2 bg-blue-50 dark:bg-blue-900/30 rounded-full text-blue-600 dark:text-blue-400 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/50 shrink-0 transition-colors"aria-hidden=true><svg xmlns=http://www.w3.org/2000/svg class="w-5 h-5"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></div><div class="flex-1 min-w-0"><h4 class="text-sm font-medium text-gray-900 dark:text-white truncate group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors"></h4><!$><!/></div><svg xmlns=http://www.w3.org/2000/svg class="w-4 h-4 text-gray-400 group-hover:text-gray-600 dark:group-hover:text-gray-300 shrink-0 transition-colors"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>`), _tmpl$41 = /* @__PURE__ */ template(`<div class="inline-flex items-center gap-1.5 px-2 py-1 rounded-md bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 text-xs text-yellow-800 dark:text-yellow-200"role=alert><svg xmlns=http://www.w3.org/2000/svg class="w-3.5 h-3.5"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1=12 y1=9 x2=12 y2=13></line><line x1=12 y1=17 x2=12.01 y2=17></line></svg><span>`), _tmpl$42 = /* @__PURE__ */ template(`<div class="w-full h-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4"><p class="text-sm font-medium text-red-900 dark:text-red-100"></p><p class="text-xs text-red-700 dark:text-red-300 mt-1">`), _tmpl$43 = /* @__PURE__ */ template(`<div role=alert class="w-full rounded-lg border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:border-amber-700/50 dark:bg-amber-900/20 dark:text-amber-200"><!$><!/> <code class=font-mono>`), _tmpl$44 = /* @__PURE__ */ template(`<span aria-hidden=true>`), _tmpl$45 = /* @__PURE__ */ template(`<a rel="noopener noreferrer"><!$><!/><!$><!/>`), _tmpl$46 = /* @__PURE__ */ template(`<span class="animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full"aria-hidden=true>`), _tmpl$47 = /* @__PURE__ */ template(`<button type=button><!$><!/><!$><!/><!$><!/>`), _tmpl$48 = /* @__PURE__ */ template(`<p class="text-xs text-red-600 dark:text-red-400 mt-1">`), _tmpl$49 = /* @__PURE__ */ template(`<div class=mt-3><p class="text-xs font-medium text-red-700 dark:text-red-300"></p><ul class="mt-1 text-xs text-red-600 dark:text-red-400 list-disc list-inside">`), _tmpl$50 = /* @__PURE__ */ template(`<p class="text-xs text-red-500 dark:text-red-500 mt-2">`), _tmpl$51 = /* @__PURE__ */ template(`<div class="relative w-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 group"><!$><!/><div class="flex items-start gap-3"><div class="p-2 bg-red-100 dark:bg-red-900/40 rounded-full shrink-0"><svg class="w-5 h-5 text-red-600 dark:text-red-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path></svg></div><div class="flex-1 min-w-0"><h4 class="text-sm font-semibold text-red-800 dark:text-red-200"></h4><p class="text-sm text-red-700 dark:text-red-300 mt-1"></p><!$><!/><!$><!/><!$><!/>`), _tmpl$52 = /* @__PURE__ */ template(`<li>`), _tmpl$53 = /* @__PURE__ */ template(`<div class="px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900"><h3 class="text-sm font-semibold text-gray-900 dark:text-white capitalize">`), _tmpl$54 = /* @__PURE__ */ template(`<div class="w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden"><!$><!/><!$><!/>`), _tmpl$55 = /* @__PURE__ */ template(`<div><div class="grid gap-4"data-mcp-ui-grid></div><!$><!/>`), _tmpl$56 = /* @__PURE__ */ template(`<div class=min-w-0>`);
37
38
  function CopyButton(props) {
39
+ const strings = useMCPUIStrings();
38
40
  const [copied, setCopied] = createSignal(false);
39
41
  const handleCopy = async () => {
40
42
  try {
@@ -63,7 +65,7 @@ function CopyButton(props) {
63
65
  }
64
66
  }));
65
67
  effect((_p$) => {
66
- var _v$ = `${positionClasses()} opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm z-10`, _v$2 = props.title || "Copy", _v$3 = props.title || "Copy";
68
+ var _v$ = `${positionClasses()} opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm z-10`, _v$2 = props.title || strings.copy, _v$3 = props.title || strings.copy;
67
69
  _v$ !== _p$.e && className(_el$, _p$.e = _v$);
68
70
  _v$2 !== _p$.t && setAttribute(_el$, "title", _p$.t = _v$2);
69
71
  _v$3 !== _p$.a && setAttribute(_el$, "aria-label", _p$.a = _v$3);
@@ -79,6 +81,7 @@ function CopyButton(props) {
79
81
  }
80
82
  function ChartRenderer(props) {
81
83
  var _a, _b;
84
+ const strings = useMCPUIStrings();
82
85
  const [useNative, setUseNative] = createSignal(false);
83
86
  const [iframeUrl, setIframeUrl] = createSignal();
84
87
  const [isLoading, setIsLoading] = createSignal(true);
@@ -91,6 +94,12 @@ function ChartRenderer(props) {
91
94
  return ((_a2 = params()) == null ? void 0 : _a2.renderer) || "auto";
92
95
  };
93
96
  const allowQuickchart = () => props.allowQuickchartFallback === true;
97
+ const chartImageAlt = () => {
98
+ var _a2;
99
+ return ((_a2 = params()) == null ? void 0 : _a2.title) ? formatMCPUIString(strings.chartWithTitleAlt, {
100
+ title: String(params().title)
101
+ }) : strings.chartVisualizationAlt;
102
+ };
94
103
  const signalBlockedFallback = (reason) => {
95
104
  setDegraded(true);
96
105
  setIsLoading(false);
@@ -104,7 +113,11 @@ function ChartRenderer(props) {
104
113
  });
105
114
  };
106
115
  if (!((_b = (_a = params()) == null ? void 0 : _a.data) == null ? void 0 : _b.datasets)) {
107
- return getNextElement(_tmpl$4);
116
+ return (() => {
117
+ var _el$4 = getNextElement(_tmpl$4), _el$5 = _el$4.firstChild;
118
+ insert(_el$5, () => strings.chartInvalidData);
119
+ return _el$4;
120
+ })();
108
121
  }
109
122
  createEffect(async () => {
110
123
  const pref = rendererPref();
@@ -121,7 +134,7 @@ function ChartRenderer(props) {
121
134
  setUseNative(true);
122
135
  setIsLoading(false);
123
136
  } else {
124
- setError("Chart.js is not available. Install chart.js peer dependency.");
137
+ setError(strings.chartJsUnavailable);
125
138
  setIsLoading(false);
126
139
  }
127
140
  } else {
@@ -161,61 +174,68 @@ function ChartRenderer(props) {
161
174
  },
162
175
  get fallback() {
163
176
  return (() => {
164
- var _el$5 = getNextElement(_tmpl$0), _el$16 = _el$5.firstChild, [_el$17, _co$2] = getNextMarker(_el$16.nextSibling), _el$18 = _el$17.nextSibling, [_el$19, _co$3] = getNextMarker(_el$18.nextSibling), _el$20 = _el$19.nextSibling, [_el$21, _co$4] = getNextMarker(_el$20.nextSibling), _el$22 = _el$21.nextSibling, [_el$23, _co$5] = getNextMarker(_el$22.nextSibling);
165
- insert(_el$5, createComponent(Show, {
177
+ var _el$6 = getNextElement(_tmpl$0), _el$17 = _el$6.firstChild, [_el$18, _co$2] = getNextMarker(_el$17.nextSibling), _el$19 = _el$18.nextSibling, [_el$20, _co$3] = getNextMarker(_el$19.nextSibling), _el$21 = _el$20.nextSibling, [_el$22, _co$4] = getNextMarker(_el$21.nextSibling), _el$23 = _el$22.nextSibling, [_el$24, _co$5] = getNextMarker(_el$23.nextSibling);
178
+ insert(_el$6, createComponent(Show, {
166
179
  get when() {
167
180
  return degraded();
168
181
  },
169
182
  get children() {
170
- var _el$6 = getNextElement(_tmpl$5);
171
- insert(_el$6, createComponent(DegradedFallback, mergeProps({
172
- message: "Interactive chart unavailable — install the chart.js peer dependency, or set allowQuickchartFallback to use the external quickchart.io renderer.",
173
- caption: "Showing the chart data as a table."
174
- }, () => chartToDegradedTable(params() ?? {}))));
175
- return _el$6;
183
+ var _el$7 = getNextElement(_tmpl$5);
184
+ insert(_el$7, createComponent(DegradedFallback, mergeProps({
185
+ get message() {
186
+ return strings.chartIframeUnavailable;
187
+ },
188
+ get caption() {
189
+ return strings.chartQuickchartCaption;
190
+ }
191
+ }, () => chartToDegradedTable(params() ?? {}, {
192
+ series: strings.degradedSeries
193
+ }))));
194
+ return _el$7;
176
195
  }
177
- }), _el$17, _co$2);
178
- insert(_el$5, createComponent(Show, {
196
+ }), _el$18, _co$2);
197
+ insert(_el$6, createComponent(Show, {
179
198
  get when() {
180
199
  return isLoading();
181
200
  },
182
201
  get children() {
183
202
  return getNextElement(_tmpl$6);
184
203
  }
185
- }), _el$19, _co$3);
186
- insert(_el$5, createComponent(Show, {
204
+ }), _el$20, _co$3);
205
+ insert(_el$6, createComponent(Show, {
187
206
  get when() {
188
207
  return error();
189
208
  },
190
209
  get children() {
191
- var _el$8 = getNextElement(_tmpl$7), _el$9 = _el$8.firstChild, _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
192
- insert(_el$1, error);
193
- return _el$8;
210
+ var _el$9 = getNextElement(_tmpl$7), _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling;
211
+ insert(_el$1, () => strings.chartError);
212
+ insert(_el$10, error);
213
+ return _el$9;
194
214
  }
195
- }), _el$21, _co$4);
196
- insert(_el$5, createComponent(Show, {
215
+ }), _el$22, _co$4);
216
+ insert(_el$6, createComponent(Show, {
197
217
  get when() {
198
218
  return memo(() => !!iframeUrl())() && !error();
199
219
  },
200
220
  get children() {
201
- var _el$10 = getNextElement(_tmpl$9), _el$14 = _el$10.firstChild, [_el$15, _co$] = getNextMarker(_el$14.nextSibling), _el$12 = _el$15.nextSibling, _el$13 = _el$12.firstChild;
202
- insert(_el$10, createComponent(Show, {
221
+ var _el$11 = getNextElement(_tmpl$9), _el$15 = _el$11.firstChild, [_el$16, _co$] = getNextMarker(_el$15.nextSibling), _el$13 = _el$16.nextSibling, _el$14 = _el$13.firstChild;
222
+ insert(_el$11, createComponent(Show, {
203
223
  get when() {
204
224
  var _a2;
205
225
  return (_a2 = params()) == null ? void 0 : _a2.title;
206
226
  },
207
227
  get children() {
208
- var _el$11 = getNextElement(_tmpl$8);
209
- insert(_el$11, () => {
228
+ var _el$12 = getNextElement(_tmpl$8);
229
+ insert(_el$12, () => {
210
230
  var _a2;
211
231
  return (_a2 = params()) == null ? void 0 : _a2.title;
212
232
  });
213
- return _el$11;
233
+ return _el$12;
214
234
  }
215
- }), _el$15, _co$);
216
- _el$13.addEventListener("error", () => {
235
+ }), _el$16, _co$);
236
+ _el$14.addEventListener("error", () => {
217
237
  var _a2;
218
- setError("Failed to load chart");
238
+ setError(strings.chartLoadFailed);
219
239
  (_a2 = props.onError) == null ? void 0 : _a2.call(props, {
220
240
  type: "render",
221
241
  message: "Chart rendering failed",
@@ -223,21 +243,20 @@ function ChartRenderer(props) {
223
243
  });
224
244
  });
225
245
  effect((_p$) => {
226
- var _a2, _b2, _c, _d;
227
- var _v$4 = ((_a2 = params()) == null ? void 0 : _a2.title) ? `Chart: ${(_b2 = params()) == null ? void 0 : _b2.title}` : "Chart visualization", _v$5 = iframeUrl(), _v$6 = ((_c = params()) == null ? void 0 : _c.title) ? `Chart: ${(_d = params()) == null ? void 0 : _d.title}` : "Chart visualization";
228
- _v$4 !== _p$.e && setAttribute(_el$12, "aria-label", _p$.e = _v$4);
229
- _v$5 !== _p$.t && setAttribute(_el$13, "src", _p$.t = _v$5);
230
- _v$6 !== _p$.a && setAttribute(_el$13, "alt", _p$.a = _v$6);
246
+ var _v$4 = chartImageAlt(), _v$5 = iframeUrl(), _v$6 = chartImageAlt();
247
+ _v$4 !== _p$.e && setAttribute(_el$13, "aria-label", _p$.e = _v$4);
248
+ _v$5 !== _p$.t && setAttribute(_el$14, "src", _p$.t = _v$5);
249
+ _v$6 !== _p$.a && setAttribute(_el$14, "alt", _p$.a = _v$6);
231
250
  return _p$;
232
251
  }, {
233
252
  e: void 0,
234
253
  t: void 0,
235
254
  a: void 0
236
255
  });
237
- return _el$10;
256
+ return _el$11;
238
257
  }
239
- }), _el$23, _co$5);
240
- return _el$5;
258
+ }), _el$24, _co$5);
259
+ return _el$6;
241
260
  })();
242
261
  },
243
262
  get children() {
@@ -304,13 +323,15 @@ function highlightQuery(html, query) {
304
323
  }
305
324
  return template2.innerHTML;
306
325
  }
307
- function defaultCitationChip(pageNum, fileName, verified = true) {
326
+ function defaultCitationChip(pageNum, fileName, verified = true, viewSourceLabel = DEFAULT_MCPUI_STRINGS.citationViewSource) {
308
327
  const safeDocName = encodeURIComponent(fileName || "");
309
328
  const label = fileName ? `${fileName} - ${pageNum}` : `${pageNum}`;
310
329
  if (!verified) {
311
330
  return `<span class="citation-ref inline-flex items-center gap-0.5 align-middle opacity-60"><span class="text-gray-500 line-through">[${label}]</span></span>`;
312
331
  }
313
- return ['<span class="citation-ref inline-flex items-center gap-0.5 align-middle">', `<span class="text-gray-500">[${label}]</span>`, '<button class="inline-flex items-center ml-0.5 px-1 py-0.5 text-xs bg-gray-800 hover:bg-gray-700 border border-gray-600 hover:border-teal-500 rounded cursor-pointer transition-colors align-middle"', ` data-citation-page="${pageNum}"`, ` data-citation-doc="${safeDocName}"`, ' data-citation-verified="true"', ` title="View source - ${label}">`, '<svg class="w-3 h-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>', "</button>", "</span>"].join("");
332
+ return ['<span class="citation-ref inline-flex items-center gap-0.5 align-middle">', `<span class="text-gray-500">[${label}]</span>`, '<button class="inline-flex items-center ml-0.5 px-1 py-0.5 text-xs bg-gray-800 hover:bg-gray-700 border border-gray-600 hover:border-teal-500 rounded cursor-pointer transition-colors align-middle"', ` data-citation-page="${pageNum}"`, ` data-citation-doc="${safeDocName}"`, ' data-citation-verified="true"', ` title="${escapeHtml(formatMCPUIString(viewSourceLabel, {
333
+ label
334
+ }))}">`, '<svg class="w-3 h-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>', "</button>", "</span>"].join("");
314
335
  }
315
336
  function transformCellCitations(text, ctx) {
316
337
  let out = text.replace(new RegExp("(?<![p.])\\[(\\d{1,2})\\](?!\\()", "g"), "[📄 CITATION $1]");
@@ -320,8 +341,10 @@ function transformCellCitations(text, ctx) {
320
341
  const id = parseInt(idStr, 10);
321
342
  const mapping = ctx.map[id] ?? ctx.map[String(id)];
322
343
  if (ctx.render) return ctx.render(id, mapping);
323
- if (mapping) return defaultCitationChip(mapping.page, mapping.file ?? "", true);
324
- return Object.keys(ctx.map).length > 0 ? "" : `[réf. ${id}]`;
344
+ if (mapping) return defaultCitationChip(mapping.page, mapping.file ?? "", true, ctx.viewSourceLabel);
345
+ return Object.keys(ctx.map).length > 0 ? "" : formatMCPUIString(ctx.unresolvedLabel ?? DEFAULT_MCPUI_STRINGS.citationUnresolved, {
346
+ id
347
+ });
325
348
  });
326
349
  }
327
350
  function renderCellValue(value, citationCtx) {
@@ -381,7 +404,14 @@ function TableRenderer(props) {
381
404
  const strings = useMCPUIStrings();
382
405
  const citationCtx = tableParams.citationMap ? {
383
406
  map: tableParams.citationMap,
384
- render: tableParams.citationRender
407
+ render: tableParams.citationRender,
408
+ // Getters, not snapshots: cells read the provider's current wording.
409
+ get unresolvedLabel() {
410
+ return strings.citationUnresolved;
411
+ },
412
+ get viewSourceLabel() {
413
+ return strings.citationViewSource;
414
+ }
385
415
  } : void 0;
386
416
  const allRows = () => tableParams.rows || [];
387
417
  const columns = () => tableParams.columns || [];
@@ -417,7 +447,7 @@ function TableRenderer(props) {
417
447
  if (isNum) {
418
448
  cmp = (Number(va) || 0) - (Number(vb) || 0);
419
449
  } else {
420
- cmp = String(va).localeCompare(String(vb), "fr", {
450
+ cmp = String(va).localeCompare(String(vb), strings.locale, {
421
451
  sensitivity: "base"
422
452
  });
423
453
  }
@@ -432,7 +462,7 @@ function TableRenderer(props) {
432
462
  const [debouncedQuery, setDebouncedQuery] = createSignal("");
433
463
  let searchTimer = null;
434
464
  const isSearchable = () => tableParams.searchable !== false;
435
- const searchPlaceholder = () => tableParams.searchPlaceholder || "Rechercher dans le tableau...";
465
+ const searchPlaceholder = () => tableParams.searchPlaceholder || strings.tableSearchPlaceholder;
436
466
  const handleSearch = (value) => {
437
467
  setSearchQuery(value);
438
468
  if (searchTimer) clearTimeout(searchTimer);
@@ -490,7 +520,7 @@ function TableRenderer(props) {
490
520
  }
491
521
  opts.push({
492
522
  value: 0,
493
- label: "All"
523
+ label: strings.paginationAllRows
494
524
  });
495
525
  return opts;
496
526
  };
@@ -617,30 +647,30 @@ ${dataRows}`;
617
647
  };
618
648
  const tableId = `table-${Math.random().toString(36).slice(2, 9)}`;
619
649
  const StandardTableBody = () => (() => {
620
- var _el$24 = getNextElement(_tmpl$1);
621
- insert(_el$24, createComponent(For, {
650
+ var _el$25 = getNextElement(_tmpl$1);
651
+ insert(_el$25, createComponent(For, {
622
652
  get each() {
623
653
  return clientVisibleRows().slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows);
624
654
  },
625
655
  children: (row, i) => (() => {
626
- var _el$25 = getNextElement(_tmpl$10);
627
- insert(_el$25, createComponent(For, {
656
+ var _el$26 = getNextElement(_tmpl$10);
657
+ insert(_el$26, createComponent(For, {
628
658
  get each() {
629
659
  return tableParams.columns;
630
660
  },
631
661
  children: (column) => (() => {
632
- var _el$26 = getNextElement(_tmpl$11);
633
- insert(_el$26, createComponent(SafeHtml, {
662
+ var _el$27 = getNextElement(_tmpl$11);
663
+ insert(_el$27, createComponent(SafeHtml, {
634
664
  html: () => highlightQuery(renderCellValue(row[column.key], citationCtx), debouncedQuery())
635
665
  }));
636
- return _el$26;
666
+ return _el$27;
637
667
  })()
638
668
  }));
639
- effect(() => className(_el$25, `hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors ${i() % 2 === 0 ? "bg-white dark:bg-gray-800" : "bg-gray-50/30 dark:bg-gray-800/50"}`));
640
- return _el$25;
669
+ effect(() => className(_el$26, `hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors ${i() % 2 === 0 ? "bg-white dark:bg-gray-800" : "bg-gray-50/30 dark:bg-gray-800/50"}`));
670
+ return _el$26;
641
671
  })()
642
672
  }));
643
- return _el$24;
673
+ return _el$25;
644
674
  })();
645
675
  const VirtualizedTableBody = () => {
646
676
  const v = virtualizer();
@@ -650,72 +680,76 @@ ${dataRows}`;
650
680
  const opts = virtualizeOpts();
651
681
  const rowHeight = opts.rowHeight ?? 48;
652
682
  return (() => {
653
- var _el$27 = getNextElement(_tmpl$12);
654
- setStyleProperty(_el$27, "height", `${totalSize}px`);
655
- insert(_el$27, createComponent(For, {
683
+ var _el$28 = getNextElement(_tmpl$12);
684
+ setStyleProperty(_el$28, "height", `${totalSize}px`);
685
+ insert(_el$28, createComponent(For, {
656
686
  each: items,
657
687
  children: (virtualRow) => {
658
688
  const row = tableParams.rows[virtualRow.index];
659
689
  return (() => {
660
- var _el$28 = getNextElement(_tmpl$10);
661
- setStyleProperty(_el$28, "height", `${rowHeight}px`);
662
- insert(_el$28, createComponent(For, {
690
+ var _el$29 = getNextElement(_tmpl$10);
691
+ setStyleProperty(_el$29, "height", `${rowHeight}px`);
692
+ insert(_el$29, createComponent(For, {
663
693
  get each() {
664
694
  return tableParams.columns;
665
695
  },
666
696
  children: (column) => (() => {
667
- var _el$29 = getNextElement(_tmpl$11);
668
- insert(_el$29, createComponent(SafeHtml, {
697
+ var _el$30 = getNextElement(_tmpl$11);
698
+ insert(_el$30, createComponent(SafeHtml, {
669
699
  html: () => highlightQuery(renderCellValue(row[column.key], citationCtx), debouncedQuery())
670
700
  }));
671
- return _el$29;
701
+ return _el$30;
672
702
  })()
673
703
  }));
674
704
  effect((_p$) => {
675
705
  var _v$7 = `hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors absolute left-0 right-0 ${virtualRow.index % 2 === 0 ? "bg-white dark:bg-gray-800" : "bg-gray-50/30 dark:bg-gray-800/50"}`, _v$8 = `translateY(${virtualRow.start}px)`;
676
- _v$7 !== _p$.e && className(_el$28, _p$.e = _v$7);
677
- _v$8 !== _p$.t && setStyleProperty(_el$28, "transform", _p$.t = _v$8);
706
+ _v$7 !== _p$.e && className(_el$29, _p$.e = _v$7);
707
+ _v$8 !== _p$.t && setStyleProperty(_el$29, "transform", _p$.t = _v$8);
678
708
  return _p$;
679
709
  }, {
680
710
  e: void 0,
681
711
  t: void 0
682
712
  });
683
- return _el$28;
713
+ return _el$29;
684
714
  })();
685
715
  }
686
716
  }));
687
- return _el$27;
717
+ return _el$28;
688
718
  })();
689
719
  };
690
720
  return createComponent(ExpandableWrapper, {
691
721
  get title() {
692
- return tableParams.title || "Table";
722
+ return tableParams.title || strings.tableTitle;
693
723
  },
694
724
  get copyData() {
695
725
  return getTableCSV();
696
726
  },
697
- copyLabel: "Copy table (CSV)",
727
+ get copyLabel() {
728
+ return strings.tableCopyCsv;
729
+ },
698
730
  get toolbarVariant() {
699
731
  return props.toolbarVariant;
700
732
  },
701
733
  onExpandedChange: setSelfExpanded,
702
734
  get children() {
703
- var _el$30 = getNextElement(_tmpl$26), _el$114 = _el$30.firstChild, [_el$115, _co$26] = getNextMarker(_el$114.nextSibling), _el$38 = _el$115.nextSibling, _el$106 = _el$38.firstChild, [_el$107, _co$22] = getNextMarker(_el$106.nextSibling), _el$108 = _el$107.nextSibling, [_el$109, _co$23] = getNextMarker(_el$108.nextSibling), _el$64 = _el$109.nextSibling, _el$65 = _el$64.firstChild, _el$66 = _el$65.firstChild, _el$67 = _el$66.firstChild, _el$68 = _el$66.nextSibling, [_el$69, _co$12] = getNextMarker(_el$68.nextSibling), _el$110 = _el$64.nextSibling, [_el$111, _co$24] = getNextMarker(_el$110.nextSibling), _el$112 = _el$111.nextSibling, [_el$113, _co$25] = getNextMarker(_el$112.nextSibling);
704
- insert(_el$30, createComponent(Show, {
735
+ var _el$31 = getNextElement(_tmpl$24), _el$92 = _el$31.firstChild, [_el$93, _co$19] = getNextMarker(_el$92.nextSibling), _el$39 = _el$93.nextSibling, _el$84 = _el$39.firstChild, [_el$85, _co$15] = getNextMarker(_el$84.nextSibling), _el$86 = _el$85.nextSibling, [_el$87, _co$16] = getNextMarker(_el$86.nextSibling), _el$53 = _el$87.nextSibling, _el$54 = _el$53.firstChild, _el$55 = _el$54.firstChild, _el$56 = _el$55.firstChild, _el$57 = _el$55.nextSibling, [_el$58, _co$0] = getNextMarker(_el$57.nextSibling), _el$88 = _el$53.nextSibling, [_el$89, _co$17] = getNextMarker(_el$88.nextSibling), _el$90 = _el$89.nextSibling, [_el$91, _co$18] = getNextMarker(_el$90.nextSibling);
736
+ insert(_el$31, createComponent(Show, {
705
737
  when: exportable,
706
738
  get fallback() {
707
739
  return createComponent(CopyButton, {
708
740
  getText: getTableCSV,
709
- title: "Copy table (CSV)",
741
+ get title() {
742
+ return strings.tableCopyCsv;
743
+ },
710
744
  position: "top-right"
711
745
  });
712
746
  },
713
747
  get children() {
714
- var _el$31 = getNextElement(_tmpl$16), _el$32 = _el$31.firstChild, _el$36 = _el$32.nextSibling, [_el$37, _co$6] = getNextMarker(_el$36.nextSibling);
715
- _el$32.$$click = () => setShowExportMenu(!showExportMenu());
748
+ var _el$32 = getNextElement(_tmpl$14), _el$33 = _el$32.firstChild, _el$37 = _el$33.nextSibling, [_el$38, _co$6] = getNextMarker(_el$37.nextSibling);
749
+ _el$33.$$click = () => setShowExportMenu(!showExportMenu());
716
750
  var _ref$ = exportTriggerRef;
717
- typeof _ref$ === "function" ? use(_ref$, _el$32) : exportTriggerRef = _el$32;
718
- insert(_el$31, createComponent(PortalDropdownMenu, {
751
+ typeof _ref$ === "function" ? use(_ref$, _el$33) : exportTriggerRef = _el$33;
752
+ insert(_el$32, createComponent(PortalDropdownMenu, {
719
753
  get open() {
720
754
  return showExportMenu();
721
755
  },
@@ -728,136 +762,154 @@ ${dataRows}`;
728
762
  return exportFormats.includes("tsv");
729
763
  },
730
764
  get children() {
731
- var _el$33 = getNextElement(_tmpl$13);
732
- _el$33.$$click = () => handleExport("tsv");
765
+ var _el$34 = getNextElement(_tmpl$13);
766
+ _el$34.$$click = () => handleExport("tsv");
767
+ insert(_el$34, () => strings.tableCopyTsv);
733
768
  runHydrationEvents();
734
- return _el$33;
769
+ return _el$34;
735
770
  }
736
771
  }), createComponent(Show, {
737
772
  get when() {
738
773
  return exportFormats.includes("csv");
739
774
  },
740
775
  get children() {
741
- var _el$34 = getNextElement(_tmpl$14);
742
- _el$34.$$click = () => handleExport("csv");
776
+ var _el$35 = getNextElement(_tmpl$13);
777
+ _el$35.$$click = () => handleExport("csv");
778
+ insert(_el$35, () => strings.tableDownloadCsv);
743
779
  runHydrationEvents();
744
- return _el$34;
780
+ return _el$35;
745
781
  }
746
782
  }), createComponent(Show, {
747
783
  get when() {
748
784
  return exportFormats.includes("json");
749
785
  },
750
786
  get children() {
751
- var _el$35 = getNextElement(_tmpl$15);
752
- _el$35.$$click = () => handleExport("json");
787
+ var _el$36 = getNextElement(_tmpl$13);
788
+ _el$36.$$click = () => handleExport("json");
789
+ insert(_el$36, () => strings.tableDownloadJson);
753
790
  runHydrationEvents();
754
- return _el$35;
791
+ return _el$36;
755
792
  }
756
793
  })];
757
794
  }
758
- }), _el$37, _co$6);
759
- effect(() => setAttribute(_el$32, "aria-expanded", showExportMenu()));
795
+ }), _el$38, _co$6);
796
+ effect((_p$) => {
797
+ var _v$9 = strings.tableExport, _v$0 = strings.tableExport, _v$1 = showExportMenu();
798
+ _v$9 !== _p$.e && setAttribute(_el$33, "title", _p$.e = _v$9);
799
+ _v$0 !== _p$.t && setAttribute(_el$33, "aria-label", _p$.t = _v$0);
800
+ _v$1 !== _p$.a && setAttribute(_el$33, "aria-expanded", _p$.a = _v$1);
801
+ return _p$;
802
+ }, {
803
+ e: void 0,
804
+ t: void 0,
805
+ a: void 0
806
+ });
760
807
  runHydrationEvents();
761
- return _el$31;
808
+ return _el$32;
762
809
  }
763
- }), _el$115, _co$26);
764
- insert(_el$38, createComponent(Show, {
810
+ }), _el$93, _co$19);
811
+ insert(_el$39, createComponent(Show, {
765
812
  get when() {
766
813
  return tableParams.title;
767
814
  },
768
815
  get children() {
769
- var _el$39 = getNextElement(_tmpl$18), _el$45 = _el$39.firstChild, [_el$46, _co$8] = getNextMarker(_el$45.nextSibling), _el$47 = _el$46.nextSibling, [_el$48, _co$9] = getNextMarker(_el$47.nextSibling);
770
- setAttribute(_el$39, "id", `${tableId}-title`);
771
- insert(_el$39, () => tableParams.title, _el$46, _co$8);
772
- insert(_el$39, createComponent(Show, {
816
+ var _el$40 = getNextElement(_tmpl$16), _el$42 = _el$40.firstChild, [_el$43, _co$7] = getNextMarker(_el$42.nextSibling), _el$44 = _el$43.nextSibling, [_el$45, _co$8] = getNextMarker(_el$44.nextSibling);
817
+ setAttribute(_el$40, "id", `${tableId}-title`);
818
+ insert(_el$40, () => tableParams.title, _el$43, _co$7);
819
+ insert(_el$40, createComponent(Show, {
773
820
  get when() {
774
821
  return isVirtualizing();
775
822
  },
776
823
  get children() {
777
- var _el$40 = getNextElement(_tmpl$17), _el$41 = _el$40.firstChild, _el$43 = _el$41.nextSibling, [_el$44, _co$7] = getNextMarker(_el$43.nextSibling);
778
- _el$44.nextSibling;
779
- insert(_el$40, () => {
824
+ var _el$41 = getNextElement(_tmpl$15);
825
+ insert(_el$41, () => {
780
826
  var _a;
781
- return (_a = tableParams.rows) == null ? void 0 : _a.length;
782
- }, _el$44, _co$7);
783
- return _el$40;
827
+ return formatMCPUIString(strings.tableVirtualizedRows, {
828
+ count: ((_a = tableParams.rows) == null ? void 0 : _a.length) ?? 0
829
+ });
830
+ });
831
+ return _el$41;
784
832
  }
785
- }), _el$48, _co$9);
786
- return _el$39;
833
+ }), _el$45, _co$8);
834
+ return _el$40;
787
835
  }
788
- }), _el$107, _co$22);
789
- insert(_el$38, createComponent(Show, {
836
+ }), _el$85, _co$15);
837
+ insert(_el$39, createComponent(Show, {
790
838
  get when() {
791
839
  return isSearchable();
792
840
  },
793
841
  get children() {
794
842
  return [(() => {
795
- var _el$49 = getNextElement(_tmpl$20), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling, _el$53 = _el$51.nextSibling, [_el$54, _co$0] = getNextMarker(_el$53.nextSibling);
796
- _el$51.$$input = (e) => handleSearch(e.currentTarget.value);
797
- insert(_el$49, createComponent(Show, {
843
+ var _el$46 = getNextElement(_tmpl$18), _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling, _el$50 = _el$48.nextSibling, [_el$51, _co$9] = getNextMarker(_el$50.nextSibling);
844
+ _el$48.$$input = (e) => handleSearch(e.currentTarget.value);
845
+ insert(_el$46, createComponent(Show, {
798
846
  get when() {
799
847
  return searchQuery();
800
848
  },
801
849
  get children() {
802
- var _el$52 = getNextElement(_tmpl$19);
803
- _el$52.$$click = () => {
850
+ var _el$49 = getNextElement(_tmpl$17);
851
+ _el$49.$$click = () => {
804
852
  handleSearch("");
805
853
  setSearchQuery("");
806
854
  setDebouncedQuery("");
807
855
  };
856
+ effect(() => setAttribute(_el$49, "aria-label", strings.tableClearSearch));
808
857
  runHydrationEvents();
809
- return _el$52;
858
+ return _el$49;
810
859
  }
811
- }), _el$54, _co$0);
812
- effect(() => setAttribute(_el$51, "placeholder", searchPlaceholder()));
813
- effect(() => setProperty(_el$51, "value", searchQuery()));
860
+ }), _el$51, _co$9);
861
+ effect(() => setAttribute(_el$48, "placeholder", searchPlaceholder()));
862
+ effect(() => setProperty(_el$48, "value", searchQuery()));
814
863
  runHydrationEvents();
815
- return _el$49;
864
+ return _el$46;
816
865
  })(), createComponent(Show, {
817
866
  get when() {
818
867
  return memo(() => !!debouncedQuery())() && filteredRows().length !== sortedRows().length;
819
868
  },
820
869
  get children() {
821
- var _el$55 = getNextElement(_tmpl$21), _el$58 = _el$55.firstChild, [_el$59, _co$1] = getNextMarker(_el$58.nextSibling), _el$56 = _el$59.nextSibling, _el$60 = _el$56.nextSibling, [_el$61, _co$10] = getNextMarker(_el$60.nextSibling), _el$57 = _el$61.nextSibling, _el$62 = _el$57.nextSibling, [_el$63, _co$11] = getNextMarker(_el$62.nextSibling);
822
- insert(_el$55, () => filteredRows().length, _el$59, _co$1);
823
- insert(_el$55, () => filteredRows().length !== 1 ? "s" : "", _el$61, _co$10);
824
- insert(_el$55, () => sortedRows().length, _el$63, _co$11);
825
- return _el$55;
870
+ var _el$52 = getNextElement(_tmpl$19);
871
+ insert(_el$52, () => formatMCPUIString(filteredRows().length === 1 ? strings.tableSearchResultsOne : strings.tableSearchResultsMany, {
872
+ count: filteredRows().length,
873
+ total: sortedRows().length
874
+ }));
875
+ return _el$52;
826
876
  }
827
877
  })];
828
878
  }
829
- }), _el$109, _co$23);
879
+ }), _el$87, _co$16);
830
880
  var _ref$2 = scrollContainerRef;
831
- typeof _ref$2 === "function" ? use(_ref$2, _el$64) : scrollContainerRef = _el$64;
832
- insert(_el$67, createComponent(For, {
881
+ typeof _ref$2 === "function" ? use(_ref$2, _el$53) : scrollContainerRef = _el$53;
882
+ insert(_el$56, createComponent(For, {
833
883
  get each() {
834
884
  return tableParams.columns;
835
885
  },
836
886
  children: (column) => (() => {
837
- var _el$116 = getNextElement(_tmpl$27), _el$117 = _el$116.firstChild, _el$119 = _el$117.firstChild, [_el$120, _co$27] = getNextMarker(_el$119.nextSibling), _el$118 = _el$120.nextSibling;
838
- addEventListener(_el$116, "click", () => handleSort(column.key));
839
- insert(_el$117, () => column.label, _el$120, _co$27);
840
- insert(_el$118, () => sortIndicator(column.key));
887
+ var _el$94 = getNextElement(_tmpl$25), _el$95 = _el$94.firstChild, _el$97 = _el$95.firstChild, [_el$98, _co$20] = getNextMarker(_el$97.nextSibling), _el$96 = _el$98.nextSibling;
888
+ addEventListener(_el$94, "click", () => handleSort(column.key));
889
+ insert(_el$95, () => column.label, _el$98, _co$20);
890
+ insert(_el$96, () => sortIndicator(column.key));
841
891
  effect((_p$) => {
842
- var _v$17 = column.width ? {
892
+ var _v$20 = column.width ? {
843
893
  width: column.width
844
- } : {}, _v$18 = `Sort by ${column.label}`, _v$19 = {
894
+ } : {}, _v$21 = formatMCPUIString(strings.sortBy, {
895
+ column: column.label
896
+ }), _v$22 = {
845
897
  "opacity-30": sortKey() !== column.key,
846
898
  "opacity-100 text-blue-600 dark:text-blue-400": sortKey() === column.key
847
899
  };
848
- _p$.e = style(_el$116, _v$17, _p$.e);
849
- _v$18 !== _p$.t && setAttribute(_el$116, "title", _p$.t = _v$18);
850
- _p$.a = classList(_el$118, _v$19, _p$.a);
900
+ _p$.e = style(_el$94, _v$20, _p$.e);
901
+ _v$21 !== _p$.t && setAttribute(_el$94, "title", _p$.t = _v$21);
902
+ _p$.a = classList(_el$96, _v$22, _p$.a);
851
903
  return _p$;
852
904
  }, {
853
905
  e: void 0,
854
906
  t: void 0,
855
907
  a: void 0
856
908
  });
857
- return _el$116;
909
+ return _el$94;
858
910
  })()
859
911
  }));
860
- insert(_el$65, createComponent(Show, {
912
+ insert(_el$54, createComponent(Show, {
861
913
  get when() {
862
914
  return isVirtualizing();
863
915
  },
@@ -867,63 +919,69 @@ ${dataRows}`;
867
919
  get children() {
868
920
  return createComponent(VirtualizedTableBody, {});
869
921
  }
870
- }), _el$69, _co$12);
871
- insert(_el$38, createComponent(Show, {
922
+ }), _el$58, _co$0);
923
+ insert(_el$39, createComponent(Show, {
872
924
  get when() {
873
925
  return tableParams.pagination;
874
926
  },
875
927
  get children() {
876
- var _el$70 = getNextElement(_tmpl$22), _el$71 = _el$70.firstChild, _el$72 = _el$71.firstChild, _el$77 = _el$72.nextSibling, [_el$78, _co$13] = getNextMarker(_el$77.nextSibling), _el$73 = _el$78.nextSibling, _el$79 = _el$73.nextSibling, [_el$80, _co$14] = getNextMarker(_el$79.nextSibling), _el$75 = _el$80.nextSibling, _el$81 = _el$75.nextSibling, [_el$82, _co$15] = getNextMarker(_el$81.nextSibling);
877
- insert(_el$71, () => tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1, _el$78, _co$13);
878
- insert(_el$71, () => Math.min((tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize, tableParams.pagination.totalRows), _el$80, _co$14);
879
- insert(_el$71, () => tableParams.pagination.totalRows, _el$82, _co$15);
880
- return _el$70;
928
+ var _el$59 = getNextElement(_tmpl$20), _el$60 = _el$59.firstChild;
929
+ insert(_el$60, () => formatMCPUIString(strings.tableServerPageRange, {
930
+ start: tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1,
931
+ end: Math.min((tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize, tableParams.pagination.totalRows),
932
+ total: tableParams.pagination.totalRows
933
+ }));
934
+ return _el$59;
881
935
  }
882
- }), _el$111, _co$24);
883
- insert(_el$38, createComponent(Show, {
936
+ }), _el$89, _co$17);
937
+ insert(_el$39, createComponent(Show, {
884
938
  get when() {
885
939
  return needsClientPagination();
886
940
  },
887
941
  get children() {
888
- var _el$83 = getNextElement(_tmpl$25), _el$84 = _el$83.firstChild, _el$87 = _el$84.firstChild, [_el$88, _co$16] = getNextMarker(_el$87.nextSibling), _el$85 = _el$88.nextSibling, _el$89 = _el$85.nextSibling, [_el$90, _co$17] = getNextMarker(_el$89.nextSibling), _el$86 = _el$90.nextSibling, _el$91 = _el$86.nextSibling, [_el$92, _co$18] = getNextMarker(_el$91.nextSibling), _el$93 = _el$84.nextSibling, _el$94 = _el$93.firstChild, _el$95 = _el$94.nextSibling, _el$97 = _el$95.firstChild, [_el$98, _co$19] = getNextMarker(_el$97.nextSibling), _el$96 = _el$98.nextSibling, _el$99 = _el$96.nextSibling, [_el$100, _co$20] = getNextMarker(_el$99.nextSibling), _el$101 = _el$95.nextSibling, _el$104 = _el$101.nextSibling, [_el$105, _co$21] = getNextMarker(_el$104.nextSibling);
889
- insert(_el$84, clientRangeStart, _el$88, _co$16);
890
- insert(_el$84, clientRangeEnd, _el$90, _co$17);
891
- insert(_el$84, () => filteredRows().length.toLocaleString("fr-FR"), _el$92, _co$18);
892
- _el$94.$$click = () => setClientPage((p) => p - 1);
893
- insert(_el$95, () => clientPage() + 1, _el$98, _co$19);
894
- insert(_el$95, clientTotalPages, _el$100, _co$20);
895
- _el$101.$$click = () => setClientPage((p) => p + 1);
896
- insert(_el$93, createComponent(Show, {
942
+ var _el$61 = getNextElement(_tmpl$23), _el$62 = _el$61.firstChild, _el$65 = _el$62.firstChild, [_el$66, _co$1] = getNextMarker(_el$65.nextSibling), _el$63 = _el$66.nextSibling, _el$67 = _el$63.nextSibling, [_el$68, _co$10] = getNextMarker(_el$67.nextSibling), _el$64 = _el$68.nextSibling, _el$69 = _el$64.nextSibling, [_el$70, _co$11] = getNextMarker(_el$69.nextSibling), _el$71 = _el$62.nextSibling, _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling, _el$75 = _el$73.firstChild, [_el$76, _co$12] = getNextMarker(_el$75.nextSibling), _el$74 = _el$76.nextSibling, _el$77 = _el$74.nextSibling, [_el$78, _co$13] = getNextMarker(_el$77.nextSibling), _el$79 = _el$73.nextSibling, _el$82 = _el$79.nextSibling, [_el$83, _co$14] = getNextMarker(_el$82.nextSibling);
943
+ insert(_el$62, clientRangeStart, _el$66, _co$1);
944
+ insert(_el$62, clientRangeEnd, _el$68, _co$10);
945
+ insert(_el$62, () => filteredRows().length.toLocaleString(strings.locale), _el$70, _co$11);
946
+ _el$72.$$click = () => setClientPage((p) => p - 1);
947
+ insert(_el$73, () => clientPage() + 1, _el$76, _co$12);
948
+ insert(_el$73, clientTotalPages, _el$78, _co$13);
949
+ _el$79.$$click = () => setClientPage((p) => p + 1);
950
+ insert(_el$71, createComponent(Show, {
897
951
  get when() {
898
952
  return memo(() => !!isExpanded())() && filteredRows().length > 10;
899
953
  },
900
954
  get children() {
901
955
  return [(() => {
902
- var _el$102 = getNextElement(_tmpl$23);
903
- _el$102.addEventListener("change", (e) => handlePageSizeChange(Number(e.currentTarget.value)));
904
- insert(_el$102, createComponent(For, {
956
+ var _el$80 = getNextElement(_tmpl$21);
957
+ _el$80.addEventListener("change", (e) => handlePageSizeChange(Number(e.currentTarget.value)));
958
+ insert(_el$80, createComponent(For, {
905
959
  get each() {
906
960
  return pageSizeOptions();
907
961
  },
908
962
  children: (opt) => (() => {
909
- var _el$121 = getNextElement(_tmpl$28);
910
- insert(_el$121, () => opt.label);
911
- effect(() => setProperty(_el$121, "value", opt.value));
912
- return _el$121;
963
+ var _el$99 = getNextElement(_tmpl$26);
964
+ insert(_el$99, () => opt.label);
965
+ effect(() => setProperty(_el$99, "value", opt.value));
966
+ return _el$99;
913
967
  })()
914
968
  }));
915
- effect(() => setAttribute(_el$102, "aria-label", strings.paginationPageSize));
916
- effect(() => setProperty(_el$102, "value", clientPageSize()));
917
- return _el$102;
918
- })(), getNextElement(_tmpl$24)];
969
+ effect(() => setAttribute(_el$80, "aria-label", strings.paginationPageSize));
970
+ effect(() => setProperty(_el$80, "value", clientPageSize()));
971
+ return _el$80;
972
+ })(), (() => {
973
+ var _el$81 = getNextElement(_tmpl$22);
974
+ insert(_el$81, () => strings.perPageSuffix);
975
+ return _el$81;
976
+ })()];
919
977
  }
920
- }), _el$105, _co$21);
978
+ }), _el$83, _co$14);
921
979
  effect((_p$) => {
922
- var _v$9 = clientPage() === 0, _v$0 = strings.paginationPrevious, _v$1 = clientPage() >= clientTotalPages() - 1, _v$10 = strings.paginationNext;
923
- _v$9 !== _p$.e && setProperty(_el$94, "disabled", _p$.e = _v$9);
924
- _v$0 !== _p$.t && setAttribute(_el$94, "aria-label", _p$.t = _v$0);
925
- _v$1 !== _p$.a && setProperty(_el$101, "disabled", _p$.a = _v$1);
926
- _v$10 !== _p$.o && setAttribute(_el$101, "aria-label", _p$.o = _v$10);
980
+ var _v$10 = clientPage() === 0, _v$11 = strings.paginationPrevious, _v$12 = clientPage() >= clientTotalPages() - 1, _v$13 = strings.paginationNext;
981
+ _v$10 !== _p$.e && setProperty(_el$72, "disabled", _p$.e = _v$10);
982
+ _v$11 !== _p$.t && setAttribute(_el$72, "aria-label", _p$.t = _v$11);
983
+ _v$12 !== _p$.a && setProperty(_el$79, "disabled", _p$.a = _v$12);
984
+ _v$13 !== _p$.o && setAttribute(_el$79, "aria-label", _p$.o = _v$13);
927
985
  return _p$;
928
986
  }, {
929
987
  e: void 0,
@@ -932,11 +990,11 @@ ${dataRows}`;
932
990
  o: void 0
933
991
  });
934
992
  runHydrationEvents();
935
- return _el$83;
993
+ return _el$61;
936
994
  }
937
- }), _el$113, _co$25);
995
+ }), _el$91, _co$18);
938
996
  effect((_p$) => {
939
- var _v$11 = `relative w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden group ${isExpanded() ? "flex-1 min-h-0 flex flex-col" : "h-full"} ${tableParams.className || ""}`, _v$12 = `p-4 ${isExpanded() ? "flex-1 min-h-0 flex flex-col" : ""}`, _v$13 = `overflow-x-auto ${isExpanded() ? "flex-1 min-h-0" : ""}`, _v$14 = (
997
+ var _v$14 = `relative w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden group ${isExpanded() ? "flex-1 min-h-0 flex flex-col" : "h-full"} ${tableParams.className || ""}`, _v$15 = `p-4 ${isExpanded() ? "flex-1 min-h-0 flex flex-col" : ""}`, _v$16 = `overflow-x-auto ${isExpanded() ? "flex-1 min-h-0" : ""}`, _v$17 = (
940
998
  // v6.1.0 — when expanded, the scroll container fills the
941
999
  // remaining vertical space and scrolls internally.
942
1000
  // v6.3.0 — `params.maxHeight` opt-out (axe 1 deposium handoff)
@@ -965,13 +1023,13 @@ ${dataRows}`;
965
1023
  };
966
1024
  return {};
967
1025
  })()
968
- ), _v$15 = tableParams.title || "Data table", _v$16 = tableParams.title ? `${tableId}-title` : void 0;
969
- _v$11 !== _p$.e && className(_el$30, _p$.e = _v$11);
970
- _v$12 !== _p$.t && className(_el$38, _p$.t = _v$12);
971
- _v$13 !== _p$.a && className(_el$64, _p$.a = _v$13);
972
- _p$.o = style(_el$64, _v$14, _p$.o);
973
- _v$15 !== _p$.i && setAttribute(_el$64, "aria-label", _p$.i = _v$15);
974
- _v$16 !== _p$.n && setAttribute(_el$65, "aria-labelledby", _p$.n = _v$16);
1026
+ ), _v$18 = tableParams.title || strings.tableAriaLabel, _v$19 = tableParams.title ? `${tableId}-title` : void 0;
1027
+ _v$14 !== _p$.e && className(_el$31, _p$.e = _v$14);
1028
+ _v$15 !== _p$.t && className(_el$39, _p$.t = _v$15);
1029
+ _v$16 !== _p$.a && className(_el$53, _p$.a = _v$16);
1030
+ _p$.o = style(_el$53, _v$17, _p$.o);
1031
+ _v$18 !== _p$.i && setAttribute(_el$53, "aria-label", _p$.i = _v$18);
1032
+ _v$19 !== _p$.n && setAttribute(_el$54, "aria-labelledby", _p$.n = _v$19);
975
1033
  return _p$;
976
1034
  }, {
977
1035
  e: void 0,
@@ -981,11 +1039,12 @@ ${dataRows}`;
981
1039
  i: void 0,
982
1040
  n: void 0
983
1041
  });
984
- return _el$30;
1042
+ return _el$31;
985
1043
  }
986
1044
  });
987
1045
  }
988
1046
  function MetricRenderer(props) {
1047
+ const strings = useMCPUIStrings();
989
1048
  const metricParams = props.component.params;
990
1049
  const getMetricText = () => {
991
1050
  const title = metricParams.title || metricParams.label || "";
@@ -994,59 +1053,61 @@ function MetricRenderer(props) {
994
1053
  return `${title}: ${value}${unit ? " " + unit : ""}`;
995
1054
  };
996
1055
  return (() => {
997
- var _el$122 = getNextElement(_tmpl$32), _el$144 = _el$122.firstChild, [_el$145, _co$33] = getNextMarker(_el$144.nextSibling), _el$123 = _el$145.nextSibling, _el$124 = _el$123.firstChild, _el$125 = _el$124.firstChild, _el$126 = _el$125.nextSibling, _el$127 = _el$126.firstChild, _el$129 = _el$127.nextSibling, [_el$130, _co$28] = getNextMarker(_el$129.nextSibling), _el$140 = _el$124.nextSibling, [_el$141, _co$31] = getNextMarker(_el$140.nextSibling), _el$142 = _el$141.nextSibling, [_el$143, _co$32] = getNextMarker(_el$142.nextSibling);
998
- insert(_el$122, createComponent(CopyButton, {
1056
+ var _el$100 = getNextElement(_tmpl$30), _el$122 = _el$100.firstChild, [_el$123, _co$26] = getNextMarker(_el$122.nextSibling), _el$101 = _el$123.nextSibling, _el$102 = _el$101.firstChild, _el$103 = _el$102.firstChild, _el$104 = _el$103.nextSibling, _el$105 = _el$104.firstChild, _el$107 = _el$105.nextSibling, [_el$108, _co$21] = getNextMarker(_el$107.nextSibling), _el$118 = _el$102.nextSibling, [_el$119, _co$24] = getNextMarker(_el$118.nextSibling), _el$120 = _el$119.nextSibling, [_el$121, _co$25] = getNextMarker(_el$120.nextSibling);
1057
+ insert(_el$100, createComponent(CopyButton, {
999
1058
  getText: getMetricText,
1000
- title: "Copy metric",
1059
+ get title() {
1060
+ return strings.copyMetric;
1061
+ },
1001
1062
  position: "top-right"
1002
- }), _el$145, _co$33);
1003
- insert(_el$125, () => metricParams.title);
1004
- insert(_el$127, () => metricParams.value);
1005
- insert(_el$126, createComponent(Show, {
1063
+ }), _el$123, _co$26);
1064
+ insert(_el$103, () => metricParams.title);
1065
+ insert(_el$105, () => metricParams.value);
1066
+ insert(_el$104, createComponent(Show, {
1006
1067
  get when() {
1007
1068
  return metricParams.unit;
1008
1069
  },
1009
1070
  get children() {
1010
- var _el$128 = getNextElement(_tmpl$29);
1011
- insert(_el$128, () => metricParams.unit);
1012
- return _el$128;
1071
+ var _el$106 = getNextElement(_tmpl$27);
1072
+ insert(_el$106, () => metricParams.unit);
1073
+ return _el$106;
1013
1074
  }
1014
- }), _el$130, _co$28);
1015
- insert(_el$123, createComponent(Show, {
1075
+ }), _el$108, _co$21);
1076
+ insert(_el$101, createComponent(Show, {
1016
1077
  get when() {
1017
1078
  return metricParams.trend;
1018
1079
  },
1019
1080
  get children() {
1020
- var _el$131 = getNextElement(_tmpl$30), _el$132 = _el$131.firstChild, _el$135 = _el$132.firstChild, [_el$136, _co$29] = getNextMarker(_el$135.nextSibling), _el$133 = _el$136.nextSibling, _el$137 = _el$133.nextSibling, [_el$138, _co$30] = getNextMarker(_el$137.nextSibling);
1021
- _el$138.nextSibling;
1022
- insert(_el$132, (() => {
1081
+ var _el$109 = getNextElement(_tmpl$28), _el$110 = _el$109.firstChild, _el$113 = _el$110.firstChild, [_el$114, _co$22] = getNextMarker(_el$113.nextSibling), _el$111 = _el$114.nextSibling, _el$115 = _el$111.nextSibling, [_el$116, _co$23] = getNextMarker(_el$115.nextSibling);
1082
+ _el$116.nextSibling;
1083
+ insert(_el$110, (() => {
1023
1084
  var _c$ = memo(() => metricParams.trend.direction === "up");
1024
1085
  return () => _c$() ? "�" : metricParams.trend.direction === "down" ? "�" : "�";
1025
- })(), _el$136, _co$29);
1026
- insert(_el$132, () => Math.abs(metricParams.trend.value), _el$138, _co$30);
1027
- effect(() => className(_el$132, `text-sm font-medium ${metricParams.trend.direction === "up" ? "text-green-600 dark:text-green-400" : metricParams.trend.direction === "down" ? "text-red-600 dark:text-red-400" : "text-gray-600 dark:text-gray-400"}`));
1028
- return _el$131;
1086
+ })(), _el$114, _co$22);
1087
+ insert(_el$110, () => Math.abs(metricParams.trend.value), _el$116, _co$23);
1088
+ effect(() => className(_el$110, `text-sm font-medium ${metricParams.trend.direction === "up" ? "text-green-600 dark:text-green-400" : metricParams.trend.direction === "down" ? "text-red-600 dark:text-red-400" : "text-gray-600 dark:text-gray-400"}`));
1089
+ return _el$109;
1029
1090
  }
1030
- }), _el$141, _co$31);
1031
- insert(_el$123, createComponent(Show, {
1091
+ }), _el$119, _co$24);
1092
+ insert(_el$101, createComponent(Show, {
1032
1093
  get when() {
1033
1094
  return metricParams.subtitle;
1034
1095
  },
1035
1096
  get children() {
1036
- var _el$139 = getNextElement(_tmpl$31);
1037
- insert(_el$139, () => metricParams.subtitle);
1038
- return _el$139;
1097
+ var _el$117 = getNextElement(_tmpl$29);
1098
+ insert(_el$117, () => metricParams.subtitle);
1099
+ return _el$117;
1039
1100
  }
1040
- }), _el$143, _co$32);
1041
- return _el$122;
1101
+ }), _el$121, _co$25);
1102
+ return _el$100;
1042
1103
  })();
1043
1104
  }
1044
- function extractImageFromMarkdown(content) {
1105
+ function extractImageFromMarkdown(content, fallbackAlt) {
1045
1106
  const imagePattern = /\[!\[([^\]]*)\]\(([^)]+)\)\]\(([^)]+)\)\s*\*([^*]+)\*/;
1046
1107
  const match = content.match(imagePattern);
1047
1108
  if (match) {
1048
1109
  return {
1049
- alt: match[1] || "Image",
1110
+ alt: match[1] || fallbackAlt,
1050
1111
  imageUrl: match[2],
1051
1112
  linkUrl: match[3],
1052
1113
  credit: match[4].trim()
@@ -1055,10 +1116,11 @@ function extractImageFromMarkdown(content) {
1055
1116
  return null;
1056
1117
  }
1057
1118
  function TextRenderer(props) {
1119
+ const strings = useMCPUIStrings();
1058
1120
  const textParams = props.component.params;
1059
1121
  const imageData = createMemo(() => {
1060
1122
  if (textParams.markdown && textParams.content) {
1061
- const extracted = extractImageFromMarkdown(textParams.content);
1123
+ const extracted = extractImageFromMarkdown(textParams.content, strings.imageAlt);
1062
1124
  if (!extracted) return null;
1063
1125
  const imageUrl = safeUrl(extracted.imageUrl, {
1064
1126
  allowDataImage: true
@@ -1094,38 +1156,40 @@ function TextRenderer(props) {
1094
1156
  },
1095
1157
  get fallback() {
1096
1158
  return (() => {
1097
- var _el$146 = getNextElement(_tmpl$33), _el$147 = _el$146.firstChild, [_el$148, _co$34] = getNextMarker(_el$147.nextSibling), _el$149 = _el$148.nextSibling, [_el$150, _co$35] = getNextMarker(_el$149.nextSibling);
1098
- insert(_el$146, createComponent(CopyButton, {
1159
+ var _el$124 = getNextElement(_tmpl$31), _el$125 = _el$124.firstChild, [_el$126, _co$27] = getNextMarker(_el$125.nextSibling), _el$127 = _el$126.nextSibling, [_el$128, _co$28] = getNextMarker(_el$127.nextSibling);
1160
+ insert(_el$124, createComponent(CopyButton, {
1099
1161
  getText: getTextContent,
1100
- title: "Copy text",
1162
+ get title() {
1163
+ return strings.copyText;
1164
+ },
1101
1165
  position: "top-right"
1102
- }), _el$148, _co$34);
1103
- insert(_el$146, createComponent(SafeHtml, {
1166
+ }), _el$126, _co$27);
1167
+ insert(_el$124, createComponent(SafeHtml, {
1104
1168
  get ["class"]() {
1105
1169
  return `prose prose-sm dark:prose-invert max-w-none ${textParams.className || ""}`;
1106
1170
  },
1107
1171
  html: htmlContent
1108
- }), _el$150, _co$35);
1109
- return _el$146;
1172
+ }), _el$128, _co$28);
1173
+ return _el$124;
1110
1174
  })();
1111
1175
  },
1112
1176
  children: (data) => {
1113
1177
  const image = () => (() => {
1114
- var _el$151 = getNextElement(_tmpl$34);
1178
+ var _el$129 = getNextElement(_tmpl$32);
1115
1179
  effect((_p$) => {
1116
- var _v$20 = data().imageUrl, _v$21 = data().alt;
1117
- _v$20 !== _p$.e && setAttribute(_el$151, "src", _p$.e = _v$20);
1118
- _v$21 !== _p$.t && setAttribute(_el$151, "alt", _p$.t = _v$21);
1180
+ var _v$23 = data().imageUrl, _v$24 = data().alt;
1181
+ _v$23 !== _p$.e && setAttribute(_el$129, "src", _p$.e = _v$23);
1182
+ _v$24 !== _p$.t && setAttribute(_el$129, "alt", _p$.t = _v$24);
1119
1183
  return _p$;
1120
1184
  }, {
1121
1185
  e: void 0,
1122
1186
  t: void 0
1123
1187
  });
1124
- return _el$151;
1188
+ return _el$129;
1125
1189
  })();
1126
1190
  return (() => {
1127
- var _el$152 = getNextElement(_tmpl$35), _el$153 = _el$152.firstChild, _el$154 = _el$153.nextSibling, _el$155 = _el$154.firstChild;
1128
- insert(_el$153, createComponent(Show, {
1191
+ var _el$130 = getNextElement(_tmpl$33), _el$131 = _el$130.firstChild, _el$132 = _el$131.nextSibling, _el$133 = _el$132.firstChild;
1192
+ insert(_el$131, createComponent(Show, {
1129
1193
  get when() {
1130
1194
  return data().linkUrl;
1131
1195
  },
@@ -1133,38 +1197,39 @@ function TextRenderer(props) {
1133
1197
  return image();
1134
1198
  },
1135
1199
  children: (href) => (() => {
1136
- var _el$156 = getNextElement(_tmpl$36);
1137
- insert(_el$156, image);
1138
- effect(() => setAttribute(_el$156, "href", href()));
1139
- return _el$156;
1200
+ var _el$134 = getNextElement(_tmpl$34);
1201
+ insert(_el$134, image);
1202
+ effect(() => setAttribute(_el$134, "href", href()));
1203
+ return _el$134;
1140
1204
  })()
1141
1205
  }));
1142
- insert(_el$155, () => data().credit);
1143
- return _el$152;
1206
+ insert(_el$133, () => data().credit);
1207
+ return _el$130;
1144
1208
  })();
1145
1209
  }
1146
1210
  });
1147
1211
  }
1148
1212
  function IframeRenderer(props) {
1213
+ const strings = useMCPUIStrings();
1149
1214
  const params = props.component.params;
1150
1215
  return (() => {
1151
- var _el$157 = getNextElement(_tmpl$38), _el$161 = _el$157.firstChild, [_el$162, _co$36] = getNextMarker(_el$161.nextSibling), _el$160 = _el$162.nextSibling;
1152
- insert(_el$157, createComponent(Show, {
1216
+ var _el$135 = getNextElement(_tmpl$36), _el$139 = _el$135.firstChild, [_el$140, _co$29] = getNextMarker(_el$139.nextSibling), _el$138 = _el$140.nextSibling;
1217
+ insert(_el$135, createComponent(Show, {
1153
1218
  get when() {
1154
1219
  return params.title;
1155
1220
  },
1156
1221
  get children() {
1157
- var _el$158 = getNextElement(_tmpl$37), _el$159 = _el$158.firstChild;
1158
- insert(_el$159, () => params.title);
1159
- return _el$158;
1222
+ var _el$136 = getNextElement(_tmpl$35), _el$137 = _el$136.firstChild;
1223
+ insert(_el$137, () => params.title);
1224
+ return _el$136;
1160
1225
  }
1161
- }), _el$162, _co$36);
1226
+ }), _el$140, _co$29);
1162
1227
  effect((_p$) => {
1163
- var _v$22 = params.url, _v$23 = params.title || "Embedded content", _v$24 = `height: ${params.height || "400px"}; min-height: 300px;`, _v$25 = getIframeSandbox(params.url);
1164
- _v$22 !== _p$.e && setAttribute(_el$160, "src", _p$.e = _v$22);
1165
- _v$23 !== _p$.t && setAttribute(_el$160, "title", _p$.t = _v$23);
1166
- _p$.a = style(_el$160, _v$24, _p$.a);
1167
- _v$25 !== _p$.o && setAttribute(_el$160, "sandbox", _p$.o = _v$25);
1228
+ var _v$25 = params.url, _v$26 = params.title || strings.iframeTitle, _v$27 = `height: ${params.height || "400px"}; min-height: 300px;`, _v$28 = getIframeSandbox(params.url);
1229
+ _v$25 !== _p$.e && setAttribute(_el$138, "src", _p$.e = _v$25);
1230
+ _v$26 !== _p$.t && setAttribute(_el$138, "title", _p$.t = _v$26);
1231
+ _p$.a = style(_el$138, _v$27, _p$.a);
1232
+ _v$28 !== _p$.o && setAttribute(_el$138, "sandbox", _p$.o = _v$28);
1168
1233
  return _p$;
1169
1234
  }, {
1170
1235
  e: void 0,
@@ -1172,32 +1237,35 @@ function IframeRenderer(props) {
1172
1237
  a: void 0,
1173
1238
  o: void 0
1174
1239
  });
1175
- return _el$157;
1240
+ return _el$135;
1176
1241
  })();
1177
1242
  }
1178
1243
  function ImageRenderer(props) {
1244
+ const strings = useMCPUIStrings();
1179
1245
  const params = props.component.params;
1180
1246
  return (() => {
1181
- var _el$163 = getNextElement(_tmpl$40), _el$164 = _el$163.firstChild, _el$165 = _el$164.firstChild, _el$166 = _el$165.firstChild, _el$169 = _el$164.nextSibling, [_el$170, _co$37] = getNextMarker(_el$169.nextSibling);
1182
- insert(_el$163, createComponent(Show, {
1247
+ var _el$141 = getNextElement(_tmpl$38), _el$142 = _el$141.firstChild, _el$143 = _el$142.firstChild, _el$144 = _el$143.firstChild, _el$147 = _el$142.nextSibling, [_el$148, _co$30] = getNextMarker(_el$147.nextSibling);
1248
+ insert(_el$141, createComponent(Show, {
1183
1249
  get when() {
1184
1250
  return params.caption;
1185
1251
  },
1186
1252
  get children() {
1187
- var _el$167 = getNextElement(_tmpl$39), _el$168 = _el$167.firstChild;
1188
- insert(_el$168, () => params.caption);
1189
- return _el$167;
1253
+ var _el$145 = getNextElement(_tmpl$37), _el$146 = _el$145.firstChild;
1254
+ insert(_el$146, () => params.caption);
1255
+ return _el$145;
1190
1256
  }
1191
- }), _el$170, _co$37);
1257
+ }), _el$148, _co$30);
1192
1258
  effect((_p$) => {
1193
- var _v$26 = `w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col ${params.className || ""}`, _v$27 = safeUrl(params.url), _v$28 = `View full size: ${params.alt || "image"}`, _v$29 = safeUrl(params.url, {
1259
+ var _v$29 = `w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col ${params.className || ""}`, _v$30 = safeUrl(params.url), _v$31 = formatMCPUIString(strings.imageViewFullSize, {
1260
+ alt: params.alt || strings.imageAltFallback
1261
+ }), _v$32 = safeUrl(params.url, {
1194
1262
  allowDataImage: true
1195
- }), _v$30 = params.alt || "Image";
1196
- _v$26 !== _p$.e && className(_el$163, _p$.e = _v$26);
1197
- _v$27 !== _p$.t && setAttribute(_el$165, "href", _p$.t = _v$27);
1198
- _v$28 !== _p$.a && setAttribute(_el$165, "aria-label", _p$.a = _v$28);
1199
- _v$29 !== _p$.o && setAttribute(_el$166, "src", _p$.o = _v$29);
1200
- _v$30 !== _p$.i && setAttribute(_el$166, "alt", _p$.i = _v$30);
1263
+ }), _v$33 = params.alt || strings.imageAlt;
1264
+ _v$29 !== _p$.e && className(_el$141, _p$.e = _v$29);
1265
+ _v$30 !== _p$.t && setAttribute(_el$143, "href", _p$.t = _v$30);
1266
+ _v$31 !== _p$.a && setAttribute(_el$143, "aria-label", _p$.a = _v$31);
1267
+ _v$32 !== _p$.o && setAttribute(_el$144, "src", _p$.o = _v$32);
1268
+ _v$33 !== _p$.i && setAttribute(_el$144, "alt", _p$.i = _v$33);
1201
1269
  return _p$;
1202
1270
  }, {
1203
1271
  e: void 0,
@@ -1206,30 +1274,34 @@ function ImageRenderer(props) {
1206
1274
  o: void 0,
1207
1275
  i: void 0
1208
1276
  });
1209
- return _el$163;
1277
+ return _el$141;
1210
1278
  })();
1211
1279
  }
1212
1280
  function LinkRenderer(props) {
1281
+ const strings = useMCPUIStrings();
1213
1282
  const params = props.component.params;
1214
1283
  return (() => {
1215
- var _el$171 = getNextElement(_tmpl$42), _el$172 = _el$171.firstChild, _el$173 = _el$172.nextSibling, _el$174 = _el$173.firstChild, _el$176 = _el$174.nextSibling, [_el$177, _co$38] = getNextMarker(_el$176.nextSibling);
1216
- _el$171.$$click = (e) => e.stopPropagation();
1217
- insert(_el$174, () => params.label || params.url);
1218
- insert(_el$173, createComponent(Show, {
1284
+ var _el$149 = getNextElement(_tmpl$40), _el$150 = _el$149.firstChild, _el$151 = _el$150.nextSibling, _el$152 = _el$151.firstChild, _el$154 = _el$152.nextSibling, [_el$155, _co$31] = getNextMarker(_el$154.nextSibling);
1285
+ _el$149.$$click = (e) => e.stopPropagation();
1286
+ insert(_el$152, () => params.label || params.url);
1287
+ insert(_el$151, createComponent(Show, {
1219
1288
  get when() {
1220
1289
  return params.description;
1221
1290
  },
1222
1291
  get children() {
1223
- var _el$175 = getNextElement(_tmpl$41);
1224
- insert(_el$175, () => params.description);
1225
- return _el$175;
1292
+ var _el$153 = getNextElement(_tmpl$39);
1293
+ insert(_el$153, () => params.description);
1294
+ return _el$153;
1226
1295
  }
1227
- }), _el$177, _co$38);
1296
+ }), _el$155, _co$31);
1228
1297
  effect((_p$) => {
1229
- var _v$31 = safeUrl(params.url), _v$32 = `${params.label || "Link"}: ${params.description || params.url} (opens in new tab)`, _v$33 = `flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors group h-full focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${params.className || ""}`;
1230
- _v$31 !== _p$.e && setAttribute(_el$171, "href", _p$.e = _v$31);
1231
- _v$32 !== _p$.t && setAttribute(_el$171, "aria-label", _p$.t = _v$32);
1232
- _v$33 !== _p$.a && className(_el$171, _p$.a = _v$33);
1298
+ var _v$34 = safeUrl(params.url), _v$35 = formatMCPUIString(strings.linkOpensInNewTab, {
1299
+ label: params.label || strings.linkLabel,
1300
+ description: params.description || params.url
1301
+ }), _v$36 = `flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors group h-full focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${params.className || ""}`;
1302
+ _v$34 !== _p$.e && setAttribute(_el$149, "href", _p$.e = _v$34);
1303
+ _v$35 !== _p$.t && setAttribute(_el$149, "aria-label", _p$.t = _v$35);
1304
+ _v$36 !== _p$.a && className(_el$149, _p$.a = _v$36);
1233
1305
  return _p$;
1234
1306
  }, {
1235
1307
  e: void 0,
@@ -1237,13 +1309,14 @@ function LinkRenderer(props) {
1237
1309
  a: void 0
1238
1310
  });
1239
1311
  runHydrationEvents();
1240
- return _el$171;
1312
+ return _el$149;
1241
1313
  })();
1242
1314
  }
1243
1315
  function ComponentRenderer(props) {
1244
1316
  var _a, _b, _c, _d, _e, _f, _g;
1245
1317
  markRenderStart(props.component.id);
1246
1318
  const telemetry = useTelemetry();
1319
+ const strings = useMCPUIStrings();
1247
1320
  onMount(() => {
1248
1321
  markRenderEnd(props.component.id);
1249
1322
  if (telemetry) {
@@ -1298,7 +1371,7 @@ function ComponentRenderer(props) {
1298
1371
  });
1299
1372
  }
1300
1373
  const mode = props.errorMode ?? "block";
1301
- const firstError = ((_f = (_e = validation.errors) == null ? void 0 : _e[0]) == null ? void 0 : _f.message) || "Unknown validation error";
1374
+ const firstError = ((_f = (_e = validation.errors) == null ? void 0 : _e[0]) == null ? void 0 : _f.message) || strings.validationUnknownError;
1302
1375
  if ((_g = validation.errors) == null ? void 0 : _g.some((e) => e.code === "UNKNOWN_COMPONENT_TYPE")) {
1303
1376
  return createComponent(UnsupportedComponentFallback, {
1304
1377
  get component() {
@@ -1311,16 +1384,20 @@ function ComponentRenderer(props) {
1311
1384
  }
1312
1385
  if (mode === "inline-warn") {
1313
1386
  return (() => {
1314
- var _el$178 = getNextElement(_tmpl$43), _el$179 = _el$178.firstChild, _el$180 = _el$179.nextSibling, _el$181 = _el$180.firstChild, _el$182 = _el$181.nextSibling, [_el$183, _co$39] = getNextMarker(_el$182.nextSibling);
1315
- setAttribute(_el$178, "title", firstError);
1316
- insert(_el$180, () => props.component.type, _el$183, _co$39);
1317
- return _el$178;
1387
+ var _el$156 = getNextElement(_tmpl$41), _el$157 = _el$156.firstChild, _el$158 = _el$157.nextSibling;
1388
+ setAttribute(_el$156, "title", firstError);
1389
+ insert(_el$158, () => formatMCPUIString(strings.invalidComponent, {
1390
+ type: props.component.type
1391
+ }));
1392
+ effect(() => setAttribute(_el$156, "aria-label", strings.validationWarning));
1393
+ return _el$156;
1318
1394
  })();
1319
1395
  }
1320
1396
  return (() => {
1321
- var _el$184 = getNextElement(_tmpl$44), _el$185 = _el$184.firstChild, _el$186 = _el$185.nextSibling;
1322
- insert(_el$186, firstError);
1323
- return _el$184;
1397
+ var _el$159 = getNextElement(_tmpl$42), _el$160 = _el$159.firstChild, _el$161 = _el$160.nextSibling;
1398
+ insert(_el$160, () => strings.validationError);
1399
+ insert(_el$161, firstError);
1400
+ return _el$159;
1324
1401
  })();
1325
1402
  }
1326
1403
  return createComponent(GenerativeUIErrorBoundary, {
@@ -1612,10 +1689,12 @@ function ComponentRenderer(props) {
1612
1689
  });
1613
1690
  }
1614
1691
  function UnsupportedComponentFallback(props) {
1692
+ const strings = useMCPUIStrings();
1615
1693
  return (() => {
1616
- var _el$187 = getNextElement(_tmpl$45), _el$188 = _el$187.firstChild, _el$189 = _el$188.nextSibling;
1617
- insert(_el$189, () => props.component.type);
1618
- return _el$187;
1694
+ var _el$162 = getNextElement(_tmpl$43), _el$165 = _el$162.firstChild, [_el$166, _co$32] = getNextMarker(_el$165.nextSibling), _el$163 = _el$166.nextSibling, _el$164 = _el$163.nextSibling;
1695
+ insert(_el$162, () => strings.unsupportedComponentType, _el$166, _co$32);
1696
+ insert(_el$164, () => props.component.type);
1697
+ return _el$162;
1619
1698
  })();
1620
1699
  }
1621
1700
  function ActionRenderer(props) {
@@ -1655,27 +1734,27 @@ function ActionRenderer(props) {
1655
1734
  const isDisabled = () => params.disabled || isExecutable() && isExecuting();
1656
1735
  if (params.type === "link" || params.action === "link") {
1657
1736
  return (() => {
1658
- var _el$190 = getNextElement(_tmpl$47), _el$192 = _el$190.firstChild, [_el$193, _co$40] = getNextMarker(_el$192.nextSibling), _el$194 = _el$193.nextSibling, [_el$195, _co$41] = getNextMarker(_el$194.nextSibling);
1659
- _el$190.$$click = handleClick;
1660
- insert(_el$190, createComponent(Show, {
1737
+ var _el$167 = getNextElement(_tmpl$45), _el$169 = _el$167.firstChild, [_el$170, _co$33] = getNextMarker(_el$169.nextSibling), _el$171 = _el$170.nextSibling, [_el$172, _co$34] = getNextMarker(_el$171.nextSibling);
1738
+ _el$167.$$click = handleClick;
1739
+ insert(_el$167, createComponent(Show, {
1661
1740
  get when() {
1662
1741
  return params.icon;
1663
1742
  },
1664
1743
  get children() {
1665
- var _el$191 = getNextElement(_tmpl$46);
1666
- insert(_el$191, () => params.icon);
1667
- return _el$191;
1744
+ var _el$168 = getNextElement(_tmpl$44);
1745
+ insert(_el$168, () => params.icon);
1746
+ return _el$168;
1668
1747
  }
1669
- }), _el$193, _co$40);
1670
- insert(_el$190, () => params.label, _el$195, _co$41);
1748
+ }), _el$170, _co$33);
1749
+ insert(_el$167, () => params.label, _el$172, _co$34);
1671
1750
  effect((_p$) => {
1672
- var _v$34 = safeUrl(params.url) ?? "#", _v$35 = safeUrl(params.url) ? "_blank" : void 0, _v$36 = params.ariaLabel || params.label, _v$37 = `inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500
1751
+ var _v$37 = safeUrl(params.url) ?? "#", _v$38 = safeUrl(params.url) ? "_blank" : void 0, _v$39 = params.ariaLabel || params.label, _v$40 = `inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500
1673
1752
  ${params.variant === "primary" ? "bg-blue-600 text-white hover:bg-blue-700" : params.variant === "outline" ? "border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800" : "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300"}
1674
1753
  ${params.className || ""}`;
1675
- _v$34 !== _p$.e && setAttribute(_el$190, "href", _p$.e = _v$34);
1676
- _v$35 !== _p$.t && setAttribute(_el$190, "target", _p$.t = _v$35);
1677
- _v$36 !== _p$.a && setAttribute(_el$190, "aria-label", _p$.a = _v$36);
1678
- _v$37 !== _p$.o && className(_el$190, _p$.o = _v$37);
1754
+ _v$37 !== _p$.e && setAttribute(_el$167, "href", _p$.e = _v$37);
1755
+ _v$38 !== _p$.t && setAttribute(_el$167, "target", _p$.t = _v$38);
1756
+ _v$39 !== _p$.a && setAttribute(_el$167, "aria-label", _p$.a = _v$39);
1757
+ _v$40 !== _p$.o && className(_el$167, _p$.o = _v$40);
1679
1758
  return _p$;
1680
1759
  }, {
1681
1760
  e: void 0,
@@ -1684,41 +1763,41 @@ function ActionRenderer(props) {
1684
1763
  o: void 0
1685
1764
  });
1686
1765
  runHydrationEvents();
1687
- return _el$190;
1766
+ return _el$167;
1688
1767
  })();
1689
1768
  }
1690
1769
  return (() => {
1691
- var _el$196 = getNextElement(_tmpl$49), _el$199 = _el$196.firstChild, [_el$200, _co$42] = getNextMarker(_el$199.nextSibling), _el$201 = _el$200.nextSibling, [_el$202, _co$43] = getNextMarker(_el$201.nextSibling), _el$203 = _el$202.nextSibling, [_el$204, _co$44] = getNextMarker(_el$203.nextSibling);
1692
- _el$196.$$click = handleClick;
1693
- insert(_el$196, createComponent(Show, {
1770
+ var _el$173 = getNextElement(_tmpl$47), _el$176 = _el$173.firstChild, [_el$177, _co$35] = getNextMarker(_el$176.nextSibling), _el$178 = _el$177.nextSibling, [_el$179, _co$36] = getNextMarker(_el$178.nextSibling), _el$180 = _el$179.nextSibling, [_el$181, _co$37] = getNextMarker(_el$180.nextSibling);
1771
+ _el$173.$$click = handleClick;
1772
+ insert(_el$173, createComponent(Show, {
1694
1773
  get when() {
1695
1774
  return memo(() => !!isExecuting())() && isExecutable();
1696
1775
  },
1697
1776
  get children() {
1698
- return getNextElement(_tmpl$48);
1777
+ return getNextElement(_tmpl$46);
1699
1778
  }
1700
- }), _el$200, _co$42);
1701
- insert(_el$196, createComponent(Show, {
1779
+ }), _el$177, _co$35);
1780
+ insert(_el$173, createComponent(Show, {
1702
1781
  get when() {
1703
1782
  return memo(() => !!params.icon)() && !(isExecuting() && isExecutable());
1704
1783
  },
1705
1784
  get children() {
1706
- var _el$198 = getNextElement(_tmpl$46);
1707
- insert(_el$198, () => params.icon);
1708
- return _el$198;
1785
+ var _el$175 = getNextElement(_tmpl$44);
1786
+ insert(_el$175, () => params.icon);
1787
+ return _el$175;
1709
1788
  }
1710
- }), _el$202, _co$43);
1711
- insert(_el$196, () => params.label, _el$204, _co$44);
1789
+ }), _el$179, _co$36);
1790
+ insert(_el$173, () => params.label, _el$181, _co$37);
1712
1791
  effect((_p$) => {
1713
- var _v$38 = isDisabled(), _v$39 = isExecuting() && isExecutable(), _v$40 = params.ariaLabel || params.label, _v$41 = `inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500
1792
+ var _v$41 = isDisabled(), _v$42 = isExecuting() && isExecutable(), _v$43 = params.ariaLabel || params.label, _v$44 = `inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500
1714
1793
  ${params.variant === "primary" ? "bg-blue-600 text-white hover:bg-blue-700 shadow-sm" : params.variant === "secondary" ? "bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600" : params.variant === "outline" ? "border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800" : params.variant === "danger" ? "bg-red-600 text-white hover:bg-red-700" : "bg-transparent text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800"}
1715
1794
  ${isDisabled() ? "opacity-50 cursor-not-allowed" : ""}
1716
1795
  ${params.size === "sm" ? "px-3 py-1.5 text-xs" : params.size === "lg" ? "px-6 py-3 text-base" : ""}
1717
1796
  ${params.className || ""}`;
1718
- _v$38 !== _p$.e && setProperty(_el$196, "disabled", _p$.e = _v$38);
1719
- _v$39 !== _p$.t && setAttribute(_el$196, "aria-busy", _p$.t = _v$39);
1720
- _v$40 !== _p$.a && setAttribute(_el$196, "aria-label", _p$.a = _v$40);
1721
- _v$41 !== _p$.o && className(_el$196, _p$.o = _v$41);
1797
+ _v$41 !== _p$.e && setProperty(_el$173, "disabled", _p$.e = _v$41);
1798
+ _v$42 !== _p$.t && setAttribute(_el$173, "aria-busy", _p$.t = _v$42);
1799
+ _v$43 !== _p$.a && setAttribute(_el$173, "aria-label", _p$.a = _v$43);
1800
+ _v$44 !== _p$.o && className(_el$173, _p$.o = _v$44);
1722
1801
  return _p$;
1723
1802
  }, {
1724
1803
  e: void 0,
@@ -1727,63 +1806,76 @@ function ActionRenderer(props) {
1727
1806
  o: void 0
1728
1807
  });
1729
1808
  runHydrationEvents();
1730
- return _el$196;
1809
+ return _el$173;
1731
1810
  })();
1732
1811
  }
1733
1812
  function ErrorCardRenderer(props) {
1813
+ const strings = useMCPUIStrings();
1814
+ const [mounted, setMounted] = createSignal(false);
1815
+ onMount(() => setMounted(true));
1734
1816
  const getErrorText = () => {
1735
- return `Error in ${props.error.tool || "unknown tool"}: ${props.error.message || "Unknown error"}`;
1817
+ return formatMCPUIString(strings.errorCopyText, {
1818
+ tool: props.error.tool || strings.errorUnknownTool,
1819
+ message: props.error.message || strings.errorUnknown
1820
+ });
1736
1821
  };
1737
1822
  return (() => {
1738
- var _el$205 = getNextElement(_tmpl$53), _el$228 = _el$205.firstChild, [_el$229, _co$50] = getNextMarker(_el$228.nextSibling), _el$206 = _el$229.nextSibling, _el$207 = _el$206.firstChild, _el$208 = _el$207.nextSibling, _el$209 = _el$208.firstChild, _el$210 = _el$209.firstChild, _el$211 = _el$210.nextSibling, [_el$212, _co$45] = getNextMarker(_el$211.nextSibling), _el$213 = _el$209.nextSibling, _el$222 = _el$213.nextSibling, [_el$223, _co$47] = getNextMarker(_el$222.nextSibling), _el$224 = _el$223.nextSibling, [_el$225, _co$48] = getNextMarker(_el$224.nextSibling), _el$226 = _el$225.nextSibling, [_el$227, _co$49] = getNextMarker(_el$226.nextSibling);
1739
- insert(_el$205, createComponent(CopyButton, {
1823
+ var _el$182 = getNextElement(_tmpl$51), _el$199 = _el$182.firstChild, [_el$200, _co$41] = getNextMarker(_el$199.nextSibling), _el$183 = _el$200.nextSibling, _el$184 = _el$183.firstChild, _el$185 = _el$184.nextSibling, _el$186 = _el$185.firstChild, _el$187 = _el$186.nextSibling, _el$193 = _el$187.nextSibling, [_el$194, _co$38] = getNextMarker(_el$193.nextSibling), _el$195 = _el$194.nextSibling, [_el$196, _co$39] = getNextMarker(_el$195.nextSibling), _el$197 = _el$196.nextSibling, [_el$198, _co$40] = getNextMarker(_el$197.nextSibling);
1824
+ insert(_el$182, createComponent(CopyButton, {
1740
1825
  getText: getErrorText,
1741
- title: "Copy error details",
1826
+ get title() {
1827
+ return strings.copyErrorDetails;
1828
+ },
1742
1829
  position: "top-right"
1743
- }), _el$229, _co$50);
1744
- insert(_el$209, () => props.error.tool || "Unknown", _el$212, _co$45);
1745
- insert(_el$213, () => props.error.message || "An error occurred during tool execution");
1746
- insert(_el$208, createComponent(Show, {
1830
+ }), _el$200, _co$41);
1831
+ insert(_el$186, () => formatMCPUIString(strings.toolErrorTitle, {
1832
+ tool: props.error.tool || strings.errorUnknownToolName
1833
+ }));
1834
+ insert(_el$187, () => props.error.message || strings.errorToolExecution);
1835
+ insert(_el$185, createComponent(Show, {
1747
1836
  get when() {
1748
1837
  return props.error.type;
1749
1838
  },
1750
1839
  get children() {
1751
- var _el$214 = getNextElement(_tmpl$50), _el$215 = _el$214.firstChild, _el$216 = _el$215.nextSibling, [_el$217, _co$46] = getNextMarker(_el$216.nextSibling);
1752
- insert(_el$214, () => props.error.type, _el$217, _co$46);
1753
- return _el$214;
1840
+ var _el$188 = getNextElement(_tmpl$48);
1841
+ insert(_el$188, () => formatMCPUIString(strings.errorTypeLabel, {
1842
+ type: props.error.type
1843
+ }));
1844
+ return _el$188;
1754
1845
  }
1755
- }), _el$223, _co$47);
1756
- insert(_el$208, createComponent(Show, {
1846
+ }), _el$194, _co$38);
1847
+ insert(_el$185, createComponent(Show, {
1757
1848
  get when() {
1758
1849
  var _a;
1759
1850
  return (_a = props.error.suggestions) == null ? void 0 : _a.length;
1760
1851
  },
1761
1852
  get children() {
1762
- var _el$218 = getNextElement(_tmpl$51), _el$219 = _el$218.firstChild, _el$220 = _el$219.nextSibling;
1763
- insert(_el$220, createComponent(For, {
1853
+ var _el$189 = getNextElement(_tmpl$49), _el$190 = _el$189.firstChild, _el$191 = _el$190.nextSibling;
1854
+ insert(_el$190, () => strings.errorSuggestions);
1855
+ insert(_el$191, createComponent(For, {
1764
1856
  get each() {
1765
1857
  return props.error.suggestions;
1766
1858
  },
1767
1859
  children: (suggestion) => (() => {
1768
- var _el$230 = getNextElement(_tmpl$54);
1769
- insert(_el$230, suggestion);
1770
- return _el$230;
1860
+ var _el$201 = getNextElement(_tmpl$52);
1861
+ insert(_el$201, suggestion);
1862
+ return _el$201;
1771
1863
  })()
1772
1864
  }));
1773
- return _el$218;
1865
+ return _el$189;
1774
1866
  }
1775
- }), _el$225, _co$48);
1776
- insert(_el$208, createComponent(Show, {
1867
+ }), _el$196, _co$39);
1868
+ insert(_el$185, createComponent(Show, {
1777
1869
  get when() {
1778
- return props.error.timestamp;
1870
+ return memo(() => !!mounted())() && props.error.timestamp;
1779
1871
  },
1780
1872
  get children() {
1781
- var _el$221 = getNextElement(_tmpl$52);
1782
- insert(_el$221, () => new Date(props.error.timestamp).toLocaleString());
1783
- return _el$221;
1873
+ var _el$192 = getNextElement(_tmpl$50);
1874
+ insert(_el$192, () => new Date(props.error.timestamp).toLocaleString(strings.locale));
1875
+ return _el$192;
1784
1876
  }
1785
- }), _el$227, _co$49);
1786
- return _el$205;
1877
+ }), _el$198, _co$40);
1878
+ return _el$182;
1787
1879
  })();
1788
1880
  }
1789
1881
  function isErrorResponse(content) {
@@ -1794,6 +1886,7 @@ function isUIResource(content) {
1794
1886
  return content && typeof content === "object" && (((_a = content.uri) == null ? void 0 : _a.startsWith("ui://")) || ((_b = content.content) == null ? void 0 : _b.type) === "rawHtml" || ((_c = content.content) == null ? void 0 : _c.htmlString));
1795
1887
  }
1796
1888
  function UIResourceHtmlRenderer(props) {
1889
+ const strings = useMCPUIStrings();
1797
1890
  const htmlContent = () => {
1798
1891
  var _a;
1799
1892
  if ((_a = props.resource.content) == null ? void 0 : _a.htmlString) {
@@ -1803,26 +1896,26 @@ function UIResourceHtmlRenderer(props) {
1803
1896
  };
1804
1897
  const resourceTitle = () => {
1805
1898
  var _a, _b;
1806
- return ((_a = props.resource.metadata) == null ? void 0 : _a.title) || ((_b = props.resource.uri) == null ? void 0 : _b.replace("ui://deposium/", "")) || "Resource";
1899
+ return ((_a = props.resource.metadata) == null ? void 0 : _a.title) || ((_b = props.resource.uri) == null ? void 0 : _b.replace("ui://deposium/", "")) || strings.resourceTitle;
1807
1900
  };
1808
1901
  return (() => {
1809
- var _el$231 = getNextElement(_tmpl$56), _el$234 = _el$231.firstChild, [_el$235, _co$51] = getNextMarker(_el$234.nextSibling), _el$236 = _el$235.nextSibling, [_el$237, _co$52] = getNextMarker(_el$236.nextSibling);
1810
- insert(_el$231, createComponent(Show, {
1902
+ var _el$202 = getNextElement(_tmpl$54), _el$205 = _el$202.firstChild, [_el$206, _co$42] = getNextMarker(_el$205.nextSibling), _el$207 = _el$206.nextSibling, [_el$208, _co$43] = getNextMarker(_el$207.nextSibling);
1903
+ insert(_el$202, createComponent(Show, {
1811
1904
  get when() {
1812
1905
  var _a;
1813
1906
  return ((_a = props.resource.metadata) == null ? void 0 : _a.title) || props.resource.uri;
1814
1907
  },
1815
1908
  get children() {
1816
- var _el$232 = getNextElement(_tmpl$55), _el$233 = _el$232.firstChild;
1817
- insert(_el$233, resourceTitle);
1818
- return _el$232;
1909
+ var _el$203 = getNextElement(_tmpl$53), _el$204 = _el$203.firstChild;
1910
+ insert(_el$204, resourceTitle);
1911
+ return _el$203;
1819
1912
  }
1820
- }), _el$235, _co$51);
1821
- insert(_el$231, createComponent(SafeHtml, {
1913
+ }), _el$206, _co$42);
1914
+ insert(_el$202, createComponent(SafeHtml, {
1822
1915
  "class": "p-4 prose prose-sm dark:prose-invert max-w-none",
1823
1916
  html: htmlContent
1824
- }), _el$237, _co$52);
1825
- return _el$231;
1917
+ }), _el$208, _co$43);
1918
+ return _el$202;
1826
1919
  })();
1827
1920
  }
1828
1921
  const UIResourceRenderer = (props) => {
@@ -1928,8 +2021,8 @@ const UIResourceRenderer = (props) => {
1928
2021
  return createComponent(RenderProvider, {
1929
2022
  renderComponent,
1930
2023
  get children() {
1931
- var _el$238 = getNextElement(_tmpl$57), _el$239 = _el$238.firstChild, _el$240 = _el$239.nextSibling, [_el$241, _co$53] = getNextMarker(_el$240.nextSibling);
1932
- spread(_el$238, mergeProps({
2024
+ var _el$209 = getNextElement(_tmpl$55), _el$210 = _el$209.firstChild, _el$211 = _el$210.nextSibling, [_el$212, _co$44] = getNextMarker(_el$211.nextSibling);
2025
+ spread(_el$209, mergeProps({
1933
2026
  get ["class"]() {
1934
2027
  return `w-full ${props.class || ""}`;
1935
2028
  }
@@ -1939,14 +2032,14 @@ const UIResourceRenderer = (props) => {
1939
2032
  "data-mcp-ui-component-id": outerKey()
1940
2033
  }), false, true);
1941
2034
  var _ref$3 = responsiveGrid.ref;
1942
- typeof _ref$3 === "function" ? use(_ref$3, _el$239) : responsiveGrid.ref = _el$239;
1943
- insert(_el$239, createComponent(For, {
2035
+ typeof _ref$3 === "function" ? use(_ref$3, _el$210) : responsiveGrid.ref = _el$210;
2036
+ insert(_el$210, createComponent(For, {
1944
2037
  get each() {
1945
2038
  return layout().components;
1946
2039
  },
1947
2040
  children: (component) => (() => {
1948
- var _el$242 = getNextElement(_tmpl$58);
1949
- insert(_el$242, createComponent(ComponentRenderer, {
2041
+ var _el$213 = getNextElement(_tmpl$56);
2042
+ insert(_el$213, createComponent(ComponentRenderer, {
1950
2043
  component,
1951
2044
  get onError() {
1952
2045
  return props.onError;
@@ -1962,18 +2055,18 @@ const UIResourceRenderer = (props) => {
1962
2055
  }
1963
2056
  }));
1964
2057
  effect((_p$) => {
1965
- var _v$44 = getGridStyleString(component), _v$45 = getUiResourceStableKey(component);
1966
- _p$.e = style(_el$242, _v$44, _p$.e);
1967
- _v$45 !== _p$.t && setAttribute(_el$242, "data-mcp-ui-component-id", _p$.t = _v$45);
2058
+ var _v$47 = getGridStyleString(component), _v$48 = getUiResourceStableKey(component);
2059
+ _p$.e = style(_el$213, _v$47, _p$.e);
2060
+ _v$48 !== _p$.t && setAttribute(_el$213, "data-mcp-ui-component-id", _p$.t = _v$48);
1968
2061
  return _p$;
1969
2062
  }, {
1970
2063
  e: void 0,
1971
2064
  t: void 0
1972
2065
  });
1973
- return _el$242;
2066
+ return _el$213;
1974
2067
  })()
1975
2068
  }));
1976
- insert(_el$238, createComponent(Show, {
2069
+ insert(_el$209, createComponent(Show, {
1977
2070
  get when() {
1978
2071
  return shouldShowAutoFooter();
1979
2072
  },
@@ -1984,18 +2077,18 @@ const UIResourceRenderer = (props) => {
1984
2077
  }
1985
2078
  });
1986
2079
  }
1987
- }), _el$241, _co$53);
2080
+ }), _el$212, _co$44);
1988
2081
  effect((_p$) => {
1989
- var _v$42 = gridContainerStyle(), _v$43 = responsiveGrid.stacked();
1990
- _p$.e = style(_el$239, _v$42, _p$.e);
1991
- _v$43 !== _p$.t && setAttribute(_el$239, "data-mcp-ui-stacked", _p$.t = _v$43);
2082
+ var _v$45 = gridContainerStyle(), _v$46 = responsiveGrid.stacked();
2083
+ _p$.e = style(_el$210, _v$45, _p$.e);
2084
+ _v$46 !== _p$.t && setAttribute(_el$210, "data-mcp-ui-stacked", _p$.t = _v$46);
1992
2085
  return _p$;
1993
2086
  }, {
1994
2087
  e: void 0,
1995
2088
  t: void 0
1996
2089
  });
1997
2090
  runHydrationEvents();
1998
- return _el$238;
2091
+ return _el$209;
1999
2092
  }
2000
2093
  });
2001
2094
  };