@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.
- package/CHANGELOG.md +519 -0
- package/README.md +791 -1
- package/dist/adapters/connector.cjs +15 -4
- package/dist/adapters/connector.cjs.map +1 -1
- package/dist/adapters/connector.d.ts +38 -0
- package/dist/adapters/connector.d.ts.map +1 -1
- package/dist/adapters/connector.js +15 -4
- package/dist/adapters/connector.js.map +1 -1
- package/dist/adapters/index.d.ts +4 -3
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/macro-run.cjs +25 -13
- package/dist/adapters/macro-run.cjs.map +1 -1
- package/dist/adapters/macro-run.d.ts +37 -2
- package/dist/adapters/macro-run.d.ts.map +1 -1
- package/dist/adapters/macro-run.js +25 -13
- package/dist/adapters/macro-run.js.map +1 -1
- package/dist/adapters.cjs +2 -0
- package/dist/adapters.cjs.map +1 -1
- package/dist/adapters.js +4 -2
- package/dist/components/ActionGroupRenderer.cjs +3 -1
- package/dist/components/ActionGroupRenderer.cjs.map +1 -1
- package/dist/components/ActionGroupRenderer.d.ts.map +1 -1
- package/dist/components/ActionGroupRenderer.js +3 -1
- package/dist/components/ActionGroupRenderer.js.map +1 -1
- package/dist/components/AgentCard.cjs +11 -8
- package/dist/components/AgentCard.cjs.map +1 -1
- package/dist/components/AgentCard.d.ts.map +1 -1
- package/dist/components/AgentCard.js +11 -8
- package/dist/components/AgentCard.js.map +1 -1
- package/dist/components/AgentHandoff.cjs +6 -1
- package/dist/components/AgentHandoff.cjs.map +1 -1
- package/dist/components/AgentHandoff.d.ts.map +1 -1
- package/dist/components/AgentHandoff.js +6 -1
- package/dist/components/AgentHandoff.js.map +1 -1
- package/dist/components/ArtifactRenderer.cjs +25 -6
- package/dist/components/ArtifactRenderer.cjs.map +1 -1
- package/dist/components/ArtifactRenderer.d.ts.map +1 -1
- package/dist/components/ArtifactRenderer.js +25 -6
- package/dist/components/ArtifactRenderer.js.map +1 -1
- package/dist/components/AutocompleteDropdown.cjs +30 -24
- package/dist/components/AutocompleteDropdown.cjs.map +1 -1
- package/dist/components/AutocompleteDropdown.d.ts.map +1 -1
- package/dist/components/AutocompleteDropdown.js +30 -24
- package/dist/components/AutocompleteDropdown.js.map +1 -1
- package/dist/components/AutocompleteFormField.cjs +3 -1
- package/dist/components/AutocompleteFormField.cjs.map +1 -1
- package/dist/components/AutocompleteFormField.d.ts.map +1 -1
- package/dist/components/AutocompleteFormField.js +4 -2
- package/dist/components/AutocompleteFormField.js.map +1 -1
- package/dist/components/BriefingDiff.cjs +45 -39
- package/dist/components/BriefingDiff.cjs.map +1 -1
- package/dist/components/BriefingDiff.d.ts.map +1 -1
- package/dist/components/BriefingDiff.js +45 -39
- package/dist/components/BriefingDiff.js.map +1 -1
- package/dist/components/CarouselRenderer.cjs +8 -2
- package/dist/components/CarouselRenderer.cjs.map +1 -1
- package/dist/components/CarouselRenderer.d.ts.map +1 -1
- package/dist/components/CarouselRenderer.js +8 -2
- package/dist/components/CarouselRenderer.js.map +1 -1
- package/dist/components/ChartJSRenderer.cjs +60 -36
- package/dist/components/ChartJSRenderer.cjs.map +1 -1
- package/dist/components/ChartJSRenderer.d.ts.map +1 -1
- package/dist/components/ChartJSRenderer.js +61 -37
- package/dist/components/ChartJSRenderer.js.map +1 -1
- package/dist/components/ChatPrompt.cjs +15 -9
- package/dist/components/ChatPrompt.cjs.map +1 -1
- package/dist/components/ChatPrompt.d.ts.map +1 -1
- package/dist/components/ChatPrompt.js +15 -9
- package/dist/components/ChatPrompt.js.map +1 -1
- package/dist/components/CodeBlockRenderer.cjs +34 -16
- package/dist/components/CodeBlockRenderer.cjs.map +1 -1
- package/dist/components/CodeBlockRenderer.d.ts.map +1 -1
- package/dist/components/CodeBlockRenderer.js +34 -16
- package/dist/components/CodeBlockRenderer.js.map +1 -1
- package/dist/components/DataPreviewSection.cjs +91 -44
- package/dist/components/DataPreviewSection.cjs.map +1 -1
- package/dist/components/DataPreviewSection.d.ts.map +1 -1
- package/dist/components/DataPreviewSection.js +92 -45
- package/dist/components/DataPreviewSection.js.map +1 -1
- package/dist/components/DegradedFallback.cjs +20 -16
- package/dist/components/DegradedFallback.cjs.map +1 -1
- package/dist/components/DegradedFallback.d.ts.map +1 -1
- package/dist/components/DegradedFallback.js +20 -16
- package/dist/components/DegradedFallback.js.map +1 -1
- package/dist/components/FooterRenderer.cjs +21 -17
- package/dist/components/FooterRenderer.cjs.map +1 -1
- package/dist/components/FooterRenderer.d.ts.map +1 -1
- package/dist/components/FooterRenderer.js +21 -17
- package/dist/components/FooterRenderer.js.map +1 -1
- package/dist/components/FormFieldRenderer.cjs +116 -93
- package/dist/components/FormFieldRenderer.cjs.map +1 -1
- package/dist/components/FormFieldRenderer.d.ts.map +1 -1
- package/dist/components/FormFieldRenderer.js +116 -93
- package/dist/components/FormFieldRenderer.js.map +1 -1
- package/dist/components/FormRenderer.cjs +55 -31
- package/dist/components/FormRenderer.cjs.map +1 -1
- package/dist/components/FormRenderer.d.ts.map +1 -1
- package/dist/components/FormRenderer.js +55 -31
- package/dist/components/FormRenderer.js.map +1 -1
- package/dist/components/GenerativeUIErrorBoundary.cjs +20 -15
- package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
- package/dist/components/GenerativeUIErrorBoundary.d.ts.map +1 -1
- package/dist/components/GenerativeUIErrorBoundary.js +20 -15
- package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
- package/dist/components/GraphRenderer.cjs +56 -33
- package/dist/components/GraphRenderer.cjs.map +1 -1
- package/dist/components/GraphRenderer.d.ts.map +1 -1
- package/dist/components/GraphRenderer.js +56 -33
- package/dist/components/GraphRenderer.js.map +1 -1
- package/dist/components/ImageGalleryRenderer.cjs +13 -4
- package/dist/components/ImageGalleryRenderer.cjs.map +1 -1
- package/dist/components/ImageGalleryRenderer.d.ts.map +1 -1
- package/dist/components/ImageGalleryRenderer.js +13 -4
- package/dist/components/ImageGalleryRenderer.js.map +1 -1
- package/dist/components/LightboxOverlay.cjs +16 -8
- package/dist/components/LightboxOverlay.cjs.map +1 -1
- package/dist/components/LightboxOverlay.d.ts.map +1 -1
- package/dist/components/LightboxOverlay.js +17 -9
- package/dist/components/LightboxOverlay.js.map +1 -1
- package/dist/components/MapRenderer.cjs +59 -29
- package/dist/components/MapRenderer.cjs.map +1 -1
- package/dist/components/MapRenderer.d.ts +10 -2
- package/dist/components/MapRenderer.d.ts.map +1 -1
- package/dist/components/MapRenderer.js +60 -30
- package/dist/components/MapRenderer.js.map +1 -1
- package/dist/components/ModalRenderer.cjs +4 -1
- package/dist/components/ModalRenderer.cjs.map +1 -1
- package/dist/components/ModalRenderer.d.ts.map +1 -1
- package/dist/components/ModalRenderer.js +5 -2
- package/dist/components/ModalRenderer.js.map +1 -1
- package/dist/components/ScratchpadPanel.cjs +578 -535
- package/dist/components/ScratchpadPanel.cjs.map +1 -1
- package/dist/components/ScratchpadPanel.d.ts.map +1 -1
- package/dist/components/ScratchpadPanel.js +578 -535
- package/dist/components/ScratchpadPanel.js.map +1 -1
- package/dist/components/StreamingUIRenderer.cjs +92 -28
- package/dist/components/StreamingUIRenderer.cjs.map +1 -1
- package/dist/components/StreamingUIRenderer.d.ts.map +1 -1
- package/dist/components/StreamingUIRenderer.js +92 -28
- package/dist/components/StreamingUIRenderer.js.map +1 -1
- package/dist/components/UIResourceRenderer.cjs +456 -363
- package/dist/components/UIResourceRenderer.cjs.map +1 -1
- package/dist/components/UIResourceRenderer.d.ts +21 -0
- package/dist/components/UIResourceRenderer.d.ts.map +1 -1
- package/dist/components/UIResourceRenderer.js +458 -365
- package/dist/components/UIResourceRenderer.js.map +1 -1
- package/dist/components/VerifiedText.cjs +39 -20
- package/dist/components/VerifiedText.cjs.map +1 -1
- package/dist/components/VerifiedText.d.ts +2 -1
- package/dist/components/VerifiedText.d.ts.map +1 -1
- package/dist/components/VerifiedText.js +39 -20
- package/dist/components/VerifiedText.js.map +1 -1
- package/dist/components/VideoRenderer.cjs +10 -5
- package/dist/components/VideoRenderer.cjs.map +1 -1
- package/dist/components/VideoRenderer.d.ts.map +1 -1
- package/dist/components/VideoRenderer.js +10 -5
- package/dist/components/VideoRenderer.js.map +1 -1
- package/dist/components/chart-data-table.cjs +38 -17
- package/dist/components/chart-data-table.cjs.map +1 -1
- package/dist/components/chart-data-table.d.ts +30 -1
- package/dist/components/chart-data-table.d.ts.map +1 -1
- package/dist/components/chart-data-table.js +38 -17
- package/dist/components/chart-data-table.js.map +1 -1
- package/dist/context/MCPActionContext.cjs +3 -1
- package/dist/context/MCPActionContext.cjs.map +1 -1
- package/dist/context/MCPActionContext.d.ts.map +1 -1
- package/dist/context/MCPActionContext.js +3 -1
- package/dist/context/MCPActionContext.js.map +1 -1
- package/dist/context/MCPUIStringsContext.cjs +285 -2
- package/dist/context/MCPUIStringsContext.cjs.map +1 -1
- package/dist/context/MCPUIStringsContext.d.ts +600 -3
- package/dist/context/MCPUIStringsContext.d.ts.map +1 -1
- package/dist/context/MCPUIStringsContext.js +285 -2
- package/dist/context/MCPUIStringsContext.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useStreamingUI.cjs +28 -10
- package/dist/hooks/useStreamingUI.cjs.map +1 -1
- package/dist/hooks/useStreamingUI.d.ts +37 -0
- package/dist/hooks/useStreamingUI.d.ts.map +1 -1
- package/dist/hooks/useStreamingUI.js +28 -10
- package/dist/hooks/useStreamingUI.js.map +1 -1
- package/dist/hooks.cjs +1 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.js +2 -1
- package/dist/index.cjs +23 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -3
- package/dist/index.js.map +1 -1
- package/dist/services/validation.cjs +41 -16
- package/dist/services/validation.cjs.map +1 -1
- package/dist/services/validation.d.ts +47 -2
- package/dist/services/validation.d.ts.map +1 -1
- package/dist/services/validation.js +41 -16
- package/dist/services/validation.js.map +1 -1
- package/dist/utils/degraded-projections.cjs +37 -12
- package/dist/utils/degraded-projections.cjs.map +1 -1
- package/dist/utils/degraded-projections.d.ts +39 -3
- package/dist/utils/degraded-projections.d.ts.map +1 -1
- package/dist/utils/degraded-projections.js +37 -12
- package/dist/utils/degraded-projections.js.map +1 -1
- package/dist/utils/format-string.cjs +10 -0
- package/dist/utils/format-string.cjs.map +1 -0
- package/dist/utils/format-string.d.ts +26 -0
- package/dist/utils/format-string.d.ts.map +1 -0
- package/dist/utils/format-string.js +10 -0
- package/dist/utils/format-string.js.map +1 -0
- package/dist/validation.cjs +3 -0
- package/dist/validation.cjs.map +1 -1
- package/dist/validation.d.cts +2 -1
- package/dist/validation.d.ts +2 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +4 -1
- package/package.json +1 -1
- package/src/adapters/connector.ts +58 -4
- package/src/adapters/index.ts +12 -2
- package/src/adapters/macro-run.ts +71 -11
- package/src/components/ActionGroupRenderer.tsx +3 -1
- package/src/components/AgentCard.tsx +27 -9
- package/src/components/AgentHandoff.tsx +4 -1
- package/src/components/ArtifactRenderer.tsx +17 -5
- package/src/components/AutocompleteDropdown.tsx +8 -6
- package/src/components/AutocompleteFormField.tsx +5 -1
- package/src/components/BriefingDiff.tsx +11 -3
- package/src/components/CarouselRenderer.tsx +4 -2
- package/src/components/ChartJSRenderer.tsx +18 -9
- package/src/components/ChatPrompt.tsx +13 -8
- package/src/components/CodeBlockRenderer.tsx +12 -10
- package/src/components/DataPreviewSection.tsx +92 -26
- package/src/components/DegradedFallback.tsx +4 -2
- package/src/components/FooterRenderer.tsx +3 -1
- package/src/components/FormFieldRenderer.tsx +34 -19
- package/src/components/FormRenderer.tsx +38 -10
- package/src/components/GenerativeUIErrorBoundary.tsx +8 -3
- package/src/components/GraphRenderer.tsx +31 -16
- package/src/components/ImageGalleryRenderer.tsx +8 -4
- package/src/components/LightboxOverlay.tsx +6 -4
- package/src/components/MapRenderer.tsx +57 -20
- package/src/components/ModalRenderer.tsx +3 -1
- package/src/components/ScratchpadPanel.tsx +95 -44
- package/src/components/StreamingUIRenderer.tsx +41 -11
- package/src/components/UIResourceRenderer.tsx +145 -63
- package/src/components/VerifiedText.tsx +19 -9
- package/src/components/VideoRenderer.tsx +6 -4
- package/src/components/chart-data-table.ts +68 -14
- package/src/context/MCPActionContext.tsx +4 -1
- package/src/context/MCPUIStringsContext.tsx +1004 -1
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useStreamingUI.ts +64 -10
- package/src/index.ts +23 -0
- package/src/services/validation.ts +93 -16
- package/src/utils/degraded-projections.ts +75 -12
- package/src/utils/format-string.ts +33 -0
- 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,
|
|
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">×`), _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><!$><!/>–<!$><!/> / <!$><!/></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>◀</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>▶</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">×`), _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><!$><!/>–<!$><!/> / <!$><!/></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>◀</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>▶</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 ||
|
|
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
|
|
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(
|
|
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$
|
|
165
|
-
insert(_el$
|
|
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$
|
|
171
|
-
insert(_el$
|
|
172
|
-
message
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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$
|
|
178
|
-
insert(_el$
|
|
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$
|
|
186
|
-
insert(_el$
|
|
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$
|
|
192
|
-
insert(_el$1,
|
|
193
|
-
|
|
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$
|
|
196
|
-
insert(_el$
|
|
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$
|
|
202
|
-
insert(_el$
|
|
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$
|
|
209
|
-
insert(_el$
|
|
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$
|
|
233
|
+
return _el$12;
|
|
214
234
|
}
|
|
215
|
-
}), _el$
|
|
216
|
-
_el$
|
|
235
|
+
}), _el$16, _co$);
|
|
236
|
+
_el$14.addEventListener("error", () => {
|
|
217
237
|
var _a2;
|
|
218
|
-
setError(
|
|
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
|
|
227
|
-
|
|
228
|
-
_v$
|
|
229
|
-
_v$
|
|
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$
|
|
256
|
+
return _el$11;
|
|
238
257
|
}
|
|
239
|
-
}), _el$
|
|
240
|
-
return _el$
|
|
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="
|
|
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 ? "" :
|
|
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),
|
|
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 ||
|
|
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:
|
|
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$
|
|
621
|
-
insert(_el$
|
|
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$
|
|
627
|
-
insert(_el$
|
|
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$
|
|
633
|
-
insert(_el$
|
|
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$
|
|
666
|
+
return _el$27;
|
|
637
667
|
})()
|
|
638
668
|
}));
|
|
639
|
-
effect(() => className(_el$
|
|
640
|
-
return _el$
|
|
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$
|
|
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$
|
|
654
|
-
setStyleProperty(_el$
|
|
655
|
-
insert(_el$
|
|
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$
|
|
661
|
-
setStyleProperty(_el$
|
|
662
|
-
insert(_el$
|
|
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$
|
|
668
|
-
insert(_el$
|
|
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$
|
|
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$
|
|
677
|
-
_v$8 !== _p$.t && setStyleProperty(_el$
|
|
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$
|
|
713
|
+
return _el$29;
|
|
684
714
|
})();
|
|
685
715
|
}
|
|
686
716
|
}));
|
|
687
|
-
return _el$
|
|
717
|
+
return _el$28;
|
|
688
718
|
})();
|
|
689
719
|
};
|
|
690
720
|
return createComponent(ExpandableWrapper, {
|
|
691
721
|
get title() {
|
|
692
|
-
return tableParams.title ||
|
|
722
|
+
return tableParams.title || strings.tableTitle;
|
|
693
723
|
},
|
|
694
724
|
get copyData() {
|
|
695
725
|
return getTableCSV();
|
|
696
726
|
},
|
|
697
|
-
copyLabel
|
|
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$
|
|
704
|
-
insert(_el$
|
|
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
|
|
741
|
+
get title() {
|
|
742
|
+
return strings.tableCopyCsv;
|
|
743
|
+
},
|
|
710
744
|
position: "top-right"
|
|
711
745
|
});
|
|
712
746
|
},
|
|
713
747
|
get children() {
|
|
714
|
-
var _el$
|
|
715
|
-
_el$
|
|
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$
|
|
718
|
-
insert(_el$
|
|
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$
|
|
732
|
-
_el$
|
|
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$
|
|
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$
|
|
742
|
-
_el$
|
|
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$
|
|
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$
|
|
752
|
-
_el$
|
|
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$
|
|
791
|
+
return _el$36;
|
|
755
792
|
}
|
|
756
793
|
})];
|
|
757
794
|
}
|
|
758
|
-
}), _el$
|
|
759
|
-
effect(() =>
|
|
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$
|
|
808
|
+
return _el$32;
|
|
762
809
|
}
|
|
763
|
-
}), _el$
|
|
764
|
-
insert(_el$
|
|
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$
|
|
770
|
-
setAttribute(_el$
|
|
771
|
-
insert(_el$
|
|
772
|
-
insert(_el$
|
|
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$
|
|
778
|
-
_el$
|
|
779
|
-
insert(_el$40, () => {
|
|
824
|
+
var _el$41 = getNextElement(_tmpl$15);
|
|
825
|
+
insert(_el$41, () => {
|
|
780
826
|
var _a;
|
|
781
|
-
return (
|
|
782
|
-
|
|
783
|
-
|
|
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$
|
|
786
|
-
return _el$
|
|
833
|
+
}), _el$45, _co$8);
|
|
834
|
+
return _el$40;
|
|
787
835
|
}
|
|
788
|
-
}), _el$
|
|
789
|
-
insert(_el$
|
|
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$
|
|
796
|
-
_el$
|
|
797
|
-
insert(_el$
|
|
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$
|
|
803
|
-
_el$
|
|
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$
|
|
858
|
+
return _el$49;
|
|
810
859
|
}
|
|
811
|
-
}), _el$
|
|
812
|
-
effect(() => setAttribute(_el$
|
|
813
|
-
effect(() => setProperty(_el$
|
|
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$
|
|
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$
|
|
822
|
-
insert(_el$
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
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$
|
|
879
|
+
}), _el$87, _co$16);
|
|
830
880
|
var _ref$2 = scrollContainerRef;
|
|
831
|
-
typeof _ref$2 === "function" ? use(_ref$2, _el$
|
|
832
|
-
insert(_el$
|
|
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$
|
|
838
|
-
addEventListener(_el$
|
|
839
|
-
insert(_el$
|
|
840
|
-
insert(_el$
|
|
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$
|
|
892
|
+
var _v$20 = column.width ? {
|
|
843
893
|
width: column.width
|
|
844
|
-
} : {}, _v$
|
|
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$
|
|
849
|
-
_v$
|
|
850
|
-
_p$.a = classList(_el$
|
|
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$
|
|
909
|
+
return _el$94;
|
|
858
910
|
})()
|
|
859
911
|
}));
|
|
860
|
-
insert(_el$
|
|
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$
|
|
871
|
-
insert(_el$
|
|
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$
|
|
877
|
-
insert(_el$
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
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$
|
|
883
|
-
insert(_el$
|
|
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$
|
|
889
|
-
insert(_el$
|
|
890
|
-
insert(_el$
|
|
891
|
-
insert(_el$
|
|
892
|
-
_el$
|
|
893
|
-
insert(_el$
|
|
894
|
-
insert(_el$
|
|
895
|
-
_el$
|
|
896
|
-
insert(_el$
|
|
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$
|
|
903
|
-
_el$
|
|
904
|
-
insert(_el$
|
|
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$
|
|
910
|
-
insert(_el$
|
|
911
|
-
effect(() => setProperty(_el$
|
|
912
|
-
return _el$
|
|
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$
|
|
916
|
-
effect(() => setProperty(_el$
|
|
917
|
-
return _el$
|
|
918
|
-
})(),
|
|
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$
|
|
978
|
+
}), _el$83, _co$14);
|
|
921
979
|
effect((_p$) => {
|
|
922
|
-
var _v$
|
|
923
|
-
_v$
|
|
924
|
-
_v$
|
|
925
|
-
_v$
|
|
926
|
-
_v$
|
|
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$
|
|
993
|
+
return _el$61;
|
|
936
994
|
}
|
|
937
|
-
}), _el$
|
|
995
|
+
}), _el$91, _co$18);
|
|
938
996
|
effect((_p$) => {
|
|
939
|
-
var _v$
|
|
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$
|
|
969
|
-
_v$
|
|
970
|
-
_v$
|
|
971
|
-
_v$
|
|
972
|
-
_p$.o = style(_el$
|
|
973
|
-
_v$
|
|
974
|
-
_v$
|
|
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$
|
|
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$
|
|
998
|
-
insert(_el$
|
|
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
|
|
1059
|
+
get title() {
|
|
1060
|
+
return strings.copyMetric;
|
|
1061
|
+
},
|
|
1001
1062
|
position: "top-right"
|
|
1002
|
-
}), _el$
|
|
1003
|
-
insert(_el$
|
|
1004
|
-
insert(_el$
|
|
1005
|
-
insert(_el$
|
|
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$
|
|
1011
|
-
insert(_el$
|
|
1012
|
-
return _el$
|
|
1071
|
+
var _el$106 = getNextElement(_tmpl$27);
|
|
1072
|
+
insert(_el$106, () => metricParams.unit);
|
|
1073
|
+
return _el$106;
|
|
1013
1074
|
}
|
|
1014
|
-
}), _el$
|
|
1015
|
-
insert(_el$
|
|
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$
|
|
1021
|
-
_el$
|
|
1022
|
-
insert(_el$
|
|
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$
|
|
1026
|
-
insert(_el$
|
|
1027
|
-
effect(() => className(_el$
|
|
1028
|
-
return _el$
|
|
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$
|
|
1031
|
-
insert(_el$
|
|
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$
|
|
1037
|
-
insert(_el$
|
|
1038
|
-
return _el$
|
|
1097
|
+
var _el$117 = getNextElement(_tmpl$29);
|
|
1098
|
+
insert(_el$117, () => metricParams.subtitle);
|
|
1099
|
+
return _el$117;
|
|
1039
1100
|
}
|
|
1040
|
-
}), _el$
|
|
1041
|
-
return _el$
|
|
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] ||
|
|
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$
|
|
1098
|
-
insert(_el$
|
|
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
|
|
1162
|
+
get title() {
|
|
1163
|
+
return strings.copyText;
|
|
1164
|
+
},
|
|
1101
1165
|
position: "top-right"
|
|
1102
|
-
}), _el$
|
|
1103
|
-
insert(_el$
|
|
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$
|
|
1109
|
-
return _el$
|
|
1172
|
+
}), _el$128, _co$28);
|
|
1173
|
+
return _el$124;
|
|
1110
1174
|
})();
|
|
1111
1175
|
},
|
|
1112
1176
|
children: (data) => {
|
|
1113
1177
|
const image = () => (() => {
|
|
1114
|
-
var _el$
|
|
1178
|
+
var _el$129 = getNextElement(_tmpl$32);
|
|
1115
1179
|
effect((_p$) => {
|
|
1116
|
-
var _v$
|
|
1117
|
-
_v$
|
|
1118
|
-
_v$
|
|
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$
|
|
1188
|
+
return _el$129;
|
|
1125
1189
|
})();
|
|
1126
1190
|
return (() => {
|
|
1127
|
-
var _el$
|
|
1128
|
-
insert(_el$
|
|
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$
|
|
1137
|
-
insert(_el$
|
|
1138
|
-
effect(() => setAttribute(_el$
|
|
1139
|
-
return _el$
|
|
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$
|
|
1143
|
-
return _el$
|
|
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$
|
|
1152
|
-
insert(_el$
|
|
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$
|
|
1158
|
-
insert(_el$
|
|
1159
|
-
return _el$
|
|
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$
|
|
1226
|
+
}), _el$140, _co$29);
|
|
1162
1227
|
effect((_p$) => {
|
|
1163
|
-
var _v$
|
|
1164
|
-
_v$
|
|
1165
|
-
_v$
|
|
1166
|
-
_p$.a = style(_el$
|
|
1167
|
-
_v$
|
|
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$
|
|
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$
|
|
1182
|
-
insert(_el$
|
|
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$
|
|
1188
|
-
insert(_el$
|
|
1189
|
-
return _el$
|
|
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$
|
|
1257
|
+
}), _el$148, _co$30);
|
|
1192
1258
|
effect((_p$) => {
|
|
1193
|
-
var _v$
|
|
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$
|
|
1196
|
-
_v$
|
|
1197
|
-
_v$
|
|
1198
|
-
_v$
|
|
1199
|
-
_v$
|
|
1200
|
-
_v$
|
|
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$
|
|
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$
|
|
1216
|
-
_el$
|
|
1217
|
-
insert(_el$
|
|
1218
|
-
insert(_el$
|
|
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$
|
|
1224
|
-
insert(_el$
|
|
1225
|
-
return _el$
|
|
1292
|
+
var _el$153 = getNextElement(_tmpl$39);
|
|
1293
|
+
insert(_el$153, () => params.description);
|
|
1294
|
+
return _el$153;
|
|
1226
1295
|
}
|
|
1227
|
-
}), _el$
|
|
1296
|
+
}), _el$155, _co$31);
|
|
1228
1297
|
effect((_p$) => {
|
|
1229
|
-
var _v$
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
_v$
|
|
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$
|
|
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) ||
|
|
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$
|
|
1315
|
-
setAttribute(_el$
|
|
1316
|
-
insert(_el$
|
|
1317
|
-
|
|
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$
|
|
1322
|
-
insert(_el$
|
|
1323
|
-
|
|
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$
|
|
1617
|
-
insert(_el$
|
|
1618
|
-
|
|
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$
|
|
1659
|
-
_el$
|
|
1660
|
-
insert(_el$
|
|
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$
|
|
1666
|
-
insert(_el$
|
|
1667
|
-
return _el$
|
|
1744
|
+
var _el$168 = getNextElement(_tmpl$44);
|
|
1745
|
+
insert(_el$168, () => params.icon);
|
|
1746
|
+
return _el$168;
|
|
1668
1747
|
}
|
|
1669
|
-
}), _el$
|
|
1670
|
-
insert(_el$
|
|
1748
|
+
}), _el$170, _co$33);
|
|
1749
|
+
insert(_el$167, () => params.label, _el$172, _co$34);
|
|
1671
1750
|
effect((_p$) => {
|
|
1672
|
-
var _v$
|
|
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$
|
|
1676
|
-
_v$
|
|
1677
|
-
_v$
|
|
1678
|
-
_v$
|
|
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$
|
|
1766
|
+
return _el$167;
|
|
1688
1767
|
})();
|
|
1689
1768
|
}
|
|
1690
1769
|
return (() => {
|
|
1691
|
-
var _el$
|
|
1692
|
-
_el$
|
|
1693
|
-
insert(_el$
|
|
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$
|
|
1777
|
+
return getNextElement(_tmpl$46);
|
|
1699
1778
|
}
|
|
1700
|
-
}), _el$
|
|
1701
|
-
insert(_el$
|
|
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$
|
|
1707
|
-
insert(_el$
|
|
1708
|
-
return _el$
|
|
1785
|
+
var _el$175 = getNextElement(_tmpl$44);
|
|
1786
|
+
insert(_el$175, () => params.icon);
|
|
1787
|
+
return _el$175;
|
|
1709
1788
|
}
|
|
1710
|
-
}), _el$
|
|
1711
|
-
insert(_el$
|
|
1789
|
+
}), _el$179, _co$36);
|
|
1790
|
+
insert(_el$173, () => params.label, _el$181, _co$37);
|
|
1712
1791
|
effect((_p$) => {
|
|
1713
|
-
var _v$
|
|
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$
|
|
1719
|
-
_v$
|
|
1720
|
-
_v$
|
|
1721
|
-
_v$
|
|
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$
|
|
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
|
|
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$
|
|
1739
|
-
insert(_el$
|
|
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
|
|
1826
|
+
get title() {
|
|
1827
|
+
return strings.copyErrorDetails;
|
|
1828
|
+
},
|
|
1742
1829
|
position: "top-right"
|
|
1743
|
-
}), _el$
|
|
1744
|
-
insert(_el$
|
|
1745
|
-
|
|
1746
|
-
|
|
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$
|
|
1752
|
-
insert(_el$
|
|
1753
|
-
|
|
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$
|
|
1756
|
-
insert(_el$
|
|
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$
|
|
1763
|
-
insert(_el$
|
|
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$
|
|
1769
|
-
insert(_el$
|
|
1770
|
-
return _el$
|
|
1860
|
+
var _el$201 = getNextElement(_tmpl$52);
|
|
1861
|
+
insert(_el$201, suggestion);
|
|
1862
|
+
return _el$201;
|
|
1771
1863
|
})()
|
|
1772
1864
|
}));
|
|
1773
|
-
return _el$
|
|
1865
|
+
return _el$189;
|
|
1774
1866
|
}
|
|
1775
|
-
}), _el$
|
|
1776
|
-
insert(_el$
|
|
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$
|
|
1782
|
-
insert(_el$
|
|
1783
|
-
return _el$
|
|
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$
|
|
1786
|
-
return _el$
|
|
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/", "")) ||
|
|
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$
|
|
1810
|
-
insert(_el$
|
|
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$
|
|
1817
|
-
insert(_el$
|
|
1818
|
-
return _el$
|
|
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$
|
|
1821
|
-
insert(_el$
|
|
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$
|
|
1825
|
-
return _el$
|
|
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$
|
|
1932
|
-
spread(_el$
|
|
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$
|
|
1943
|
-
insert(_el$
|
|
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$
|
|
1949
|
-
insert(_el$
|
|
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$
|
|
1966
|
-
_p$.e = style(_el$
|
|
1967
|
-
_v$
|
|
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$
|
|
2066
|
+
return _el$213;
|
|
1974
2067
|
})()
|
|
1975
2068
|
}));
|
|
1976
|
-
insert(_el$
|
|
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$
|
|
2080
|
+
}), _el$212, _co$44);
|
|
1988
2081
|
effect((_p$) => {
|
|
1989
|
-
var _v$
|
|
1990
|
-
_p$.e = style(_el$
|
|
1991
|
-
_v$
|
|
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$
|
|
2091
|
+
return _el$209;
|
|
1999
2092
|
}
|
|
2000
2093
|
});
|
|
2001
2094
|
};
|