@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
|
@@ -2,29 +2,44 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const web = require("solid-js/web");
|
|
4
4
|
const solidJs = require("solid-js");
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const MCPUIStringsContext = require("../context/MCPUIStringsContext.cjs");
|
|
6
|
+
const formatString = require("../utils/format-string.cjs");
|
|
7
|
+
var _tmpl$ = /* @__PURE__ */ web.template(`<div class="text-xs text-amber-600 dark:text-amber-400 p-2">`), _tmpl$2 = /* @__PURE__ */ web.template(`<span class=font-medium>`), _tmpl$3 = /* @__PURE__ */ web.template(`<span class="px-1.5 py-0.5 rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300">`), _tmpl$4 = /* @__PURE__ */ web.template(`<div class="flex items-center gap-1"><button class="px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">CSV</button><button class="px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">JSON`), _tmpl$5 = /* @__PURE__ */ web.template(`<span><!$><!/><!$><!/>`), _tmpl$6 = /* @__PURE__ */ web.template(`<span>`), _tmpl$7 = /* @__PURE__ */ web.template(`<div class="flex items-center gap-1"><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 class=px-2 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>▶`), _tmpl$8 = /* @__PURE__ */ web.template(`<div class=data-preview-section><div class="flex items-center justify-between mb-2"><div class="flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400"><!$><!/><!$><!/></div><!$><!/></div><div class="overflow-x-auto rounded border border-gray-200 dark:border-gray-700"><table class="w-full text-sm"><thead><tr class="bg-gray-50 dark:bg-gray-800"></tr></thead><tbody></tbody></table></div><div class="flex items-center justify-between mt-2 text-xs text-gray-500 dark:text-gray-400"><!$><!/><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ web.template(`<th class="px-3 py-2 font-medium text-xs text-gray-600 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 cursor-pointer select-none hover:bg-gray-100 dark:hover:bg-gray-700/50 transition-colors"><span class="inline-flex items-center gap-1"><!$><!/><span class="text-[10px] leading-none">`), _tmpl$0 = /* @__PURE__ */ web.template(`<tr class="border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors">`), _tmpl$1 = /* @__PURE__ */ web.template(`<td class="px-3 py-2 text-gray-800 dark:text-gray-200">`);
|
|
8
|
+
function formatNumber(value, format, locale = MCPUIStringsContext.DEFAULT_MCPUI_STRINGS.locale) {
|
|
7
9
|
if (typeof value !== "number" || !isFinite(value)) return String(value ?? "");
|
|
8
|
-
if (format === "percent")
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
if (format === "percent") {
|
|
11
|
+
return new Intl.NumberFormat(locale, {
|
|
12
|
+
style: "percent",
|
|
13
|
+
minimumFractionDigits: 1,
|
|
14
|
+
maximumFractionDigits: 1,
|
|
15
|
+
useGrouping: false
|
|
16
|
+
}).format(value);
|
|
17
|
+
}
|
|
18
|
+
if (format === "currency") return `${value.toLocaleString(locale)} EUR`;
|
|
19
|
+
if (Number.isInteger(value)) return value.toLocaleString(locale);
|
|
20
|
+
return value.toLocaleString(locale, {
|
|
12
21
|
maximumFractionDigits: 2
|
|
13
22
|
});
|
|
14
23
|
}
|
|
15
|
-
function formatCell(value, col) {
|
|
24
|
+
function formatCell(value, col, locale = MCPUIStringsContext.DEFAULT_MCPUI_STRINGS.locale, zoneAware = true) {
|
|
16
25
|
if (value == null) return "—";
|
|
17
|
-
if (col.type === "number") return formatNumber(value, col.format);
|
|
26
|
+
if (col.type === "number") return formatNumber(value, col.format, locale);
|
|
18
27
|
if (col.type === "date" && typeof value === "string") {
|
|
28
|
+
const date = new Date(value);
|
|
29
|
+
if (Number.isNaN(date.getTime())) return value;
|
|
30
|
+
const dateOnly = /^\d{4}-\d{2}-\d{2}$/.test(value);
|
|
31
|
+
if (!dateOnly && !zoneAware) return value;
|
|
19
32
|
try {
|
|
20
|
-
return
|
|
33
|
+
return date.toLocaleDateString(locale, dateOnly ? {
|
|
34
|
+
timeZone: "UTC"
|
|
35
|
+
} : void 0);
|
|
21
36
|
} catch {
|
|
22
37
|
return value;
|
|
23
38
|
}
|
|
24
39
|
}
|
|
25
40
|
return String(value);
|
|
26
41
|
}
|
|
27
|
-
function compareValues(a, b, type) {
|
|
42
|
+
function compareValues(a, b, type, locale = MCPUIStringsContext.DEFAULT_MCPUI_STRINGS.locale) {
|
|
28
43
|
if (a == null && b == null) return 0;
|
|
29
44
|
if (a == null) return 1;
|
|
30
45
|
if (b == null) return -1;
|
|
@@ -44,7 +59,7 @@ function compareValues(a, b, type) {
|
|
|
44
59
|
if (isNaN(db)) return -1;
|
|
45
60
|
return da - db;
|
|
46
61
|
}
|
|
47
|
-
return String(a).localeCompare(String(b),
|
|
62
|
+
return String(a).localeCompare(String(b), locale, {
|
|
48
63
|
sensitivity: "base"
|
|
49
64
|
});
|
|
50
65
|
}
|
|
@@ -86,6 +101,7 @@ function resolveContent(raw) {
|
|
|
86
101
|
}
|
|
87
102
|
function DataPreviewSection(props) {
|
|
88
103
|
var _a;
|
|
104
|
+
const strings = MCPUIStringsContext.useMCPUIStrings();
|
|
89
105
|
const content = solidJs.createMemo(() => {
|
|
90
106
|
const resolved = resolveContent(props.content);
|
|
91
107
|
if (!resolved) {
|
|
@@ -110,6 +126,8 @@ function DataPreviewSection(props) {
|
|
|
110
126
|
return ((_a2 = content()) == null ? void 0 : _a2.showPageInfo) !== false;
|
|
111
127
|
};
|
|
112
128
|
const [page, setPage] = solidJs.createSignal(((_a = content()) == null ? void 0 : _a.initialPage) ?? 0);
|
|
129
|
+
const [mounted, setMounted] = solidJs.createSignal(false);
|
|
130
|
+
solidJs.onMount(() => setMounted(true));
|
|
113
131
|
const [sortKey, setSortKey] = solidJs.createSignal(null);
|
|
114
132
|
const [sortDir, setSortDir] = solidJs.createSignal(null);
|
|
115
133
|
solidJs.createEffect(() => {
|
|
@@ -137,7 +155,7 @@ function DataPreviewSection(props) {
|
|
|
137
155
|
if (!key || !dir) return r;
|
|
138
156
|
const col = columns().find((c) => c.key === key);
|
|
139
157
|
return [...r].sort((a, b) => {
|
|
140
|
-
const cmp = compareValues(a[key], b[key], col == null ? void 0 : col.type);
|
|
158
|
+
const cmp = compareValues(a[key], b[key], col == null ? void 0 : col.type, strings.locale);
|
|
141
159
|
return dir === "desc" ? -cmp : cmp;
|
|
142
160
|
});
|
|
143
161
|
});
|
|
@@ -172,10 +190,14 @@ function DataPreviewSection(props) {
|
|
|
172
190
|
return content();
|
|
173
191
|
},
|
|
174
192
|
get fallback() {
|
|
175
|
-
return
|
|
193
|
+
return (() => {
|
|
194
|
+
var _el$ = web.getNextElement(_tmpl$);
|
|
195
|
+
web.insert(_el$, () => strings.previewInvalidContent);
|
|
196
|
+
return _el$;
|
|
197
|
+
})();
|
|
176
198
|
},
|
|
177
199
|
children: (c) => (() => {
|
|
178
|
-
var _el$2 = web.getNextElement(_tmpl$8), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$7 = _el$4.firstChild, [_el$8, _co$] = web.getNextMarker(_el$7.nextSibling), _el$9 = _el$8.nextSibling, [_el$0, _co$2] = web.getNextMarker(_el$9.nextSibling), _el$12 = _el$4.nextSibling, [_el$13, _co$3] = web.getNextMarker(_el$12.nextSibling), _el$14 = _el$3.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$16.nextSibling, _el$19 = _el$14.nextSibling, _el$
|
|
200
|
+
var _el$2 = web.getNextElement(_tmpl$8), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$7 = _el$4.firstChild, [_el$8, _co$] = web.getNextMarker(_el$7.nextSibling), _el$9 = _el$8.nextSibling, [_el$0, _co$2] = web.getNextMarker(_el$9.nextSibling), _el$12 = _el$4.nextSibling, [_el$13, _co$3] = web.getNextMarker(_el$12.nextSibling), _el$14 = _el$3.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$16.nextSibling, _el$19 = _el$14.nextSibling, _el$37 = _el$19.firstChild, [_el$38, _co$8] = web.getNextMarker(_el$37.nextSibling), _el$39 = _el$38.nextSibling, [_el$40, _co$9] = web.getNextMarker(_el$39.nextSibling), _el$41 = _el$40.nextSibling, [_el$42, _co$0] = web.getNextMarker(_el$41.nextSibling);
|
|
179
201
|
web.insert(_el$4, web.createComponent(solidJs.Show, {
|
|
180
202
|
get when() {
|
|
181
203
|
return c().source;
|
|
@@ -205,7 +227,11 @@ function DataPreviewSection(props) {
|
|
|
205
227
|
_el$10.$$click = handleExportCSV;
|
|
206
228
|
_el$11.$$click = handleExportJSON;
|
|
207
229
|
web.effect((_p$) => {
|
|
208
|
-
var _v$ =
|
|
230
|
+
var _v$ = formatString.formatMCPUIString(strings.exportCsvRows, {
|
|
231
|
+
count: sortedRows().length
|
|
232
|
+
}), _v$2 = formatString.formatMCPUIString(strings.exportJsonRows, {
|
|
233
|
+
count: sortedRows().length
|
|
234
|
+
});
|
|
209
235
|
_v$ !== _p$.e && web.setAttribute(_el$10, "title", _p$.e = _v$);
|
|
210
236
|
_v$2 !== _p$.t && web.setAttribute(_el$11, "title", _p$.t = _v$2);
|
|
211
237
|
return _p$;
|
|
@@ -222,18 +248,20 @@ function DataPreviewSection(props) {
|
|
|
222
248
|
return columns();
|
|
223
249
|
},
|
|
224
250
|
children: (col) => (() => {
|
|
225
|
-
var _el$
|
|
226
|
-
_el$
|
|
227
|
-
web.insert(_el$
|
|
228
|
-
web.insert(_el$
|
|
251
|
+
var _el$43 = web.getNextElement(_tmpl$9), _el$44 = _el$43.firstChild, _el$46 = _el$44.firstChild, [_el$47, _co$1] = web.getNextMarker(_el$46.nextSibling), _el$45 = _el$47.nextSibling;
|
|
252
|
+
_el$43.$$click = () => handleSort(col.key);
|
|
253
|
+
web.insert(_el$44, () => col.label, _el$47, _co$1);
|
|
254
|
+
web.insert(_el$45, () => sortIndicator(col.key));
|
|
229
255
|
web.effect((_p$) => {
|
|
230
|
-
var _v$
|
|
256
|
+
var _v$7 = columnAlign(col), _v$8 = formatString.formatMCPUIString(strings.sortBy, {
|
|
257
|
+
column: col.label
|
|
258
|
+
}), _v$9 = {
|
|
231
259
|
"opacity-30": sortKey() !== col.key,
|
|
232
260
|
"opacity-100 text-blue-600 dark:text-blue-400": sortKey() === col.key
|
|
233
261
|
};
|
|
234
|
-
_v$
|
|
235
|
-
_v$
|
|
236
|
-
_p$.a = web.classList(_el$
|
|
262
|
+
_v$7 !== _p$.e && web.setStyleProperty(_el$43, "text-align", _p$.e = _v$7);
|
|
263
|
+
_v$8 !== _p$.t && web.setAttribute(_el$43, "title", _p$.t = _v$8);
|
|
264
|
+
_p$.a = web.classList(_el$45, _v$9, _p$.a);
|
|
237
265
|
return _p$;
|
|
238
266
|
}, {
|
|
239
267
|
e: void 0,
|
|
@@ -241,7 +269,7 @@ function DataPreviewSection(props) {
|
|
|
241
269
|
a: void 0
|
|
242
270
|
});
|
|
243
271
|
web.runHydrationEvents();
|
|
244
|
-
return _el$
|
|
272
|
+
return _el$43;
|
|
245
273
|
})()
|
|
246
274
|
}));
|
|
247
275
|
web.insert(_el$18, web.createComponent(solidJs.For, {
|
|
@@ -249,22 +277,22 @@ function DataPreviewSection(props) {
|
|
|
249
277
|
return visibleRows();
|
|
250
278
|
},
|
|
251
279
|
children: (row, i) => (() => {
|
|
252
|
-
var _el$
|
|
253
|
-
web.insert(_el$
|
|
280
|
+
var _el$48 = web.getNextElement(_tmpl$0);
|
|
281
|
+
web.insert(_el$48, web.createComponent(solidJs.For, {
|
|
254
282
|
get each() {
|
|
255
283
|
return columns();
|
|
256
284
|
},
|
|
257
285
|
children: (col) => (() => {
|
|
258
|
-
var _el$
|
|
259
|
-
web.insert(_el$
|
|
260
|
-
web.effect((_$p) => web.setStyleProperty(_el$
|
|
261
|
-
return _el$
|
|
286
|
+
var _el$49 = web.getNextElement(_tmpl$1);
|
|
287
|
+
web.insert(_el$49, () => formatCell(row[col.key], col, strings.locale, mounted()));
|
|
288
|
+
web.effect((_$p) => web.setStyleProperty(_el$49, "text-align", columnAlign(col)));
|
|
289
|
+
return _el$49;
|
|
262
290
|
})()
|
|
263
291
|
}));
|
|
264
|
-
web.effect((_$p) => web.classList(_el$
|
|
292
|
+
web.effect((_$p) => web.classList(_el$48, {
|
|
265
293
|
"bg-gray-25 dark:bg-gray-850": i() % 2 === 1
|
|
266
294
|
}, _$p));
|
|
267
|
-
return _el$
|
|
295
|
+
return _el$48;
|
|
268
296
|
})()
|
|
269
297
|
}));
|
|
270
298
|
web.insert(_el$19, web.createComponent(solidJs.Show, {
|
|
@@ -275,15 +303,25 @@ function DataPreviewSection(props) {
|
|
|
275
303
|
var _el$20 = web.getNextElement(_tmpl$5), _el$21 = _el$20.firstChild, [_el$22, _co$4] = web.getNextMarker(_el$21.nextSibling), _el$23 = _el$22.nextSibling, [_el$24, _co$5] = web.getNextMarker(_el$23.nextSibling);
|
|
276
304
|
web.insert(_el$20, (() => {
|
|
277
305
|
var _c$ = web.memo(() => !!isPaginated());
|
|
278
|
-
return () => _c$() ?
|
|
306
|
+
return () => _c$() ? formatString.formatMCPUIString(strings.previewShowingRange, {
|
|
307
|
+
start: rangeStart().toLocaleString(strings.locale),
|
|
308
|
+
end: rangeEnd().toLocaleString(strings.locale),
|
|
309
|
+
// `strings.locale` formats the count, so the chrome
|
|
310
|
+
// string and the digits agree (and SSR matches the client).
|
|
311
|
+
total: sortedRows().length.toLocaleString(strings.locale)
|
|
312
|
+
}) : formatString.formatMCPUIString(sortedRows().length === 1 ? strings.previewRowsOne : strings.previewRowsMany, {
|
|
313
|
+
count: sortedRows().length.toLocaleString(strings.locale)
|
|
314
|
+
});
|
|
279
315
|
})(), _el$22, _co$4);
|
|
280
316
|
web.insert(_el$20, (() => {
|
|
281
317
|
var _c$2 = web.memo(() => !!(c().totalRows && c().totalRows > sortedRows().length));
|
|
282
|
-
return () => _c$2() ?
|
|
318
|
+
return () => _c$2() ? formatString.formatMCPUIString(strings.previewTotalSuffix, {
|
|
319
|
+
total: c().totalRows.toLocaleString(strings.locale)
|
|
320
|
+
}) : "";
|
|
283
321
|
})(), _el$24, _co$5);
|
|
284
322
|
return _el$20;
|
|
285
323
|
}
|
|
286
|
-
}), _el$
|
|
324
|
+
}), _el$38, _co$8);
|
|
287
325
|
web.insert(_el$19, web.createComponent(solidJs.Show, {
|
|
288
326
|
get when() {
|
|
289
327
|
return !showPageInfo();
|
|
@@ -291,30 +329,39 @@ function DataPreviewSection(props) {
|
|
|
291
329
|
get children() {
|
|
292
330
|
return web.getNextElement(_tmpl$6);
|
|
293
331
|
}
|
|
294
|
-
}), _el$
|
|
332
|
+
}), _el$40, _co$9);
|
|
295
333
|
web.insert(_el$19, web.createComponent(solidJs.Show, {
|
|
296
334
|
get when() {
|
|
297
335
|
return isPaginated();
|
|
298
336
|
},
|
|
299
337
|
get children() {
|
|
300
|
-
var _el$26 = web.getNextElement(_tmpl$7), _el$27 = _el$26.firstChild, _el$28 = _el$27.
|
|
338
|
+
var _el$26 = web.getNextElement(_tmpl$7), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.nextSibling, _el$30 = _el$29.nextSibling, [_el$31, _co$6] = web.getNextMarker(_el$30.nextSibling), _el$32 = _el$27.nextSibling, _el$33 = _el$32.nextSibling, _el$35 = _el$33.firstChild, [_el$36, _co$7] = web.getNextMarker(_el$35.nextSibling);
|
|
339
|
+
_el$36.nextSibling;
|
|
301
340
|
_el$27.$$click = () => setPage((p) => p - 1);
|
|
302
|
-
web.insert(_el$
|
|
303
|
-
web.insert(_el$
|
|
304
|
-
|
|
341
|
+
web.insert(_el$27, () => strings.previewPrev, _el$31, _co$6);
|
|
342
|
+
web.insert(_el$32, () => formatString.formatMCPUIString(strings.previewPageIndicator, {
|
|
343
|
+
page: page() + 1,
|
|
344
|
+
total: totalPages()
|
|
345
|
+
}));
|
|
346
|
+
_el$33.$$click = () => setPage((p) => p + 1);
|
|
347
|
+
web.insert(_el$33, () => strings.previewNext, _el$36, _co$7);
|
|
305
348
|
web.effect((_p$) => {
|
|
306
|
-
var _v$3 = page() === 0, _v$4 = page() >= totalPages() - 1;
|
|
349
|
+
var _v$3 = page() === 0, _v$4 = strings.paginationPrevious, _v$5 = page() >= totalPages() - 1, _v$6 = strings.paginationNext;
|
|
307
350
|
_v$3 !== _p$.e && web.setProperty(_el$27, "disabled", _p$.e = _v$3);
|
|
308
|
-
_v$4 !== _p$.t && web.
|
|
351
|
+
_v$4 !== _p$.t && web.setAttribute(_el$27, "aria-label", _p$.t = _v$4);
|
|
352
|
+
_v$5 !== _p$.a && web.setProperty(_el$33, "disabled", _p$.a = _v$5);
|
|
353
|
+
_v$6 !== _p$.o && web.setAttribute(_el$33, "aria-label", _p$.o = _v$6);
|
|
309
354
|
return _p$;
|
|
310
355
|
}, {
|
|
311
356
|
e: void 0,
|
|
312
|
-
t: void 0
|
|
357
|
+
t: void 0,
|
|
358
|
+
a: void 0,
|
|
359
|
+
o: void 0
|
|
313
360
|
});
|
|
314
361
|
web.runHydrationEvents();
|
|
315
362
|
return _el$26;
|
|
316
363
|
}
|
|
317
|
-
}), _el$
|
|
364
|
+
}), _el$42, _co$0);
|
|
318
365
|
return _el$2;
|
|
319
366
|
})()
|
|
320
367
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataPreviewSection.cjs","sources":["../../src/components/DataPreviewSection.tsx"],"sourcesContent":["/**\n * DataPreviewSection — paginated, sortable data table with export\n * v4.0.4: Full pagination spec (auto-activate, pageSize=0 disable, showPageInfo, onPageChange)\n *\n * @experimental\n */\n\nimport { createSignal, createMemo, createEffect, For, Show } from 'solid-js'\nimport type { DataPreviewContent, DataPreviewColumn } from '../types/chat-bus'\n\nexport interface DataPreviewSectionProps {\n content: DataPreviewContent\n}\n\ntype SortDir = 'asc' | 'desc' | null\n\n// ─── Formatting helpers ─────────────────────────────────────\n\nfunction formatNumber(value: unknown, format?: string): string {\n if (typeof value !== 'number' || !isFinite(value)) return String(value ?? '')\n if (format === 'percent') return `${(value * 100).toFixed(1)}%`\n if (format === 'currency') return `${value.toLocaleString('fr-FR')} EUR`\n if (Number.isInteger(value)) return value.toLocaleString('fr-FR')\n return value.toLocaleString('fr-FR', { maximumFractionDigits: 2 })\n}\n\nfunction formatCell(value: unknown, col: DataPreviewColumn): string {\n if (value == null) return '\\u2014'\n if (col.type === 'number') return formatNumber(value, col.format)\n if (col.type === 'date' && typeof value === 'string') {\n try { return new Date(value).toLocaleDateString('fr-FR') } catch { return value }\n }\n return String(value)\n}\n\nfunction compareValues(a: unknown, b: unknown, type?: string): number {\n if (a == null && b == null) return 0\n if (a == null) return 1\n if (b == null) return -1\n if (type === 'number') {\n const na = typeof a === 'number' ? a : Number(a)\n const nb = typeof b === 'number' ? b : Number(b)\n if (isNaN(na) && isNaN(nb)) return 0\n if (isNaN(na)) return 1\n if (isNaN(nb)) return -1\n return na - nb\n }\n if (type === 'date') {\n const da = new Date(String(a)).getTime()\n const db = new Date(String(b)).getTime()\n if (isNaN(da) && isNaN(db)) return 0\n if (isNaN(da)) return 1\n if (isNaN(db)) return -1\n return da - db\n }\n return String(a).localeCompare(String(b), 'fr', { sensitivity: 'base' })\n}\n\n// ─── Export helpers ─────────────────────────────────────────\n\nfunction toCSV(columns: DataPreviewColumn[], rows: Record<string, unknown>[]): string {\n const header = columns.map(c => `\"${c.label.replace(/\"/g, '\"\"')}\"`).join(';')\n const body = rows.map(row =>\n columns.map(c => {\n const val = row[c.key]\n if (val == null) return ''\n if (typeof val === 'string') return `\"${val.replace(/\"/g, '\"\"')}\"`\n return String(val)\n }).join(';')\n ).join('\\n')\n return `${header}\\n${body}`\n}\n\nfunction downloadFile(content: string, filename: string, mimeType: string) {\n const blob = new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n a.click()\n URL.revokeObjectURL(url)\n}\n\n// ─── Content resolver ───────────────────────────────────────\n\nfunction resolveContent(raw: unknown): DataPreviewContent | null {\n if (!raw || typeof raw !== 'object') return null\n const obj = raw as Record<string, unknown>\n if (Array.isArray(obj.columns) && Array.isArray(obj.rows)) {\n return obj as unknown as DataPreviewContent\n }\n if (obj.content && typeof obj.content === 'object') {\n const inner = obj.content as Record<string, unknown>\n if (Array.isArray(inner.columns) && Array.isArray(inner.rows)) {\n return inner as unknown as DataPreviewContent\n }\n }\n return null\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function DataPreviewSection(props: DataPreviewSectionProps) {\n const content = createMemo(() => {\n const resolved = resolveContent(props.content)\n if (!resolved) {\n console.warn('[MCP-UI] DataPreviewSection: invalid content — expected { columns, rows }', props.content)\n }\n return resolved\n })\n\n const columns = () => content()?.columns || []\n const rawRows = () => content()?.rows || []\n const pageSizeVal = () => content()?.pageSize ?? 25\n const showPageInfo = () => content()?.showPageInfo !== false\n\n const [page, setPage] = createSignal(content()?.initialPage ?? 0)\n const [sortKey, setSortKey] = createSignal<string | null>(null)\n const [sortDir, setSortDir] = createSignal<SortDir>(null)\n\n // Notify parent on page change\n createEffect(() => {\n const p = page()\n content()?.onPageChange?.(p)\n })\n\n const handleSort = (key: string) => {\n if (sortKey() === key) {\n if (sortDir() === 'asc') setSortDir('desc')\n else { setSortKey(null); setSortDir(null) }\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n setPage(0)\n }\n\n const sortedRows = createMemo(() => {\n const r = rawRows()\n const key = sortKey()\n const dir = sortDir()\n if (!key || !dir) return r\n const col = columns().find(c => c.key === key)\n return [...r].sort((a, b) => {\n const cmp = compareValues(a[key], b[key], col?.type)\n return dir === 'desc' ? -cmp : cmp\n })\n })\n\n // Pagination: auto-enabled when rows > pageSize, disabled when pageSize=0\n const isPaginated = () => pageSizeVal() > 0 && sortedRows().length > pageSizeVal()\n const totalPages = () => isPaginated() ? Math.ceil(sortedRows().length / pageSizeVal()) : 1\n\n const visibleRows = createMemo(() => {\n if (!isPaginated()) return sortedRows()\n const start = page() * pageSizeVal()\n return sortedRows().slice(start, start + pageSizeVal())\n })\n\n const rangeStart = () => isPaginated() ? page() * pageSizeVal() + 1 : 1\n const rangeEnd = () => isPaginated()\n ? Math.min((page() + 1) * pageSizeVal(), sortedRows().length)\n : sortedRows().length\n\n // Export ALL rows (not just page)\n const handleExportCSV = () => {\n const c = content()\n if (!c) return\n downloadFile(toCSV(c.columns, sortedRows()), 'data-export.csv', 'text/csv;charset=utf-8')\n }\n const handleExportJSON = () => {\n downloadFile(JSON.stringify(sortedRows(), null, 2), 'data-export.json', 'application/json')\n }\n\n const columnAlign = (col: DataPreviewColumn) => {\n if (col.align) return col.align\n if (col.type === 'number') return 'right'\n return 'left'\n }\n\n const sortIndicator = (key: string) => {\n if (sortKey() !== key) return '\\u2195'\n return sortDir() === 'asc' ? '\\u2191' : '\\u2193'\n }\n\n return (\n <Show when={content()} fallback={\n <div class=\"text-xs text-amber-600 dark:text-amber-400 p-2\">\n [DataPreviewSection] Invalid content format\n </div>\n }>\n {(c) => (\n <div class=\"data-preview-section\">\n {/* Header: source + export */}\n <div class=\"flex items-center justify-between mb-2\">\n <div class=\"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400\">\n <Show when={c().source}>\n <span class=\"font-medium\">{c().source}</span>\n </Show>\n <Show when={c().freshness}>\n <span class=\"px-1.5 py-0.5 rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\">\n {c().freshness}\n </span>\n </Show>\n </div>\n <Show when={c().exportable !== false}>\n <div class=\"flex items-center gap-1\">\n <button\n class=\"px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={handleExportCSV}\n title={`Export CSV (${sortedRows().length} rows)`}\n >\n CSV\n </button>\n <button\n class=\"px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={handleExportJSON}\n title={`Export JSON (${sortedRows().length} rows)`}\n >\n JSON\n </button>\n </div>\n </Show>\n </div>\n\n {/* Table */}\n <div class=\"overflow-x-auto rounded border border-gray-200 dark:border-gray-700\">\n <table class=\"w-full text-sm\">\n <thead>\n <tr class=\"bg-gray-50 dark:bg-gray-800\">\n <For each={columns()}>\n {(col) => (\n <th\n class=\"px-3 py-2 font-medium text-xs text-gray-600 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 cursor-pointer select-none hover:bg-gray-100 dark:hover:bg-gray-700/50 transition-colors\"\n style={{ \"text-align\": columnAlign(col) }}\n onClick={() => handleSort(col.key)}\n title={`Sort by ${col.label}`}\n >\n <span class=\"inline-flex items-center gap-1\">\n {col.label}\n <span\n class=\"text-[10px] leading-none\"\n classList={{\n 'opacity-30': sortKey() !== col.key,\n 'opacity-100 text-blue-600 dark:text-blue-400': sortKey() === col.key,\n }}\n >\n {sortIndicator(col.key)}\n </span>\n </span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <For each={visibleRows()}>\n {(row, i) => (\n <tr\n class=\"border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors\"\n classList={{ 'bg-gray-25 dark:bg-gray-850': i() % 2 === 1 }}\n >\n <For each={columns()}>\n {(col) => (\n <td\n class=\"px-3 py-2 text-gray-800 dark:text-gray-200\"\n style={{ \"text-align\": columnAlign(col) }}\n >\n {formatCell(row[col.key], col)}\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n </div>\n\n {/* Footer: pagination + page info */}\n <div class=\"flex items-center justify-between mt-2 text-xs text-gray-500 dark:text-gray-400\">\n <Show when={showPageInfo()}>\n <span>\n {isPaginated()\n ? `Showing ${rangeStart()}\\u2013${rangeEnd()} of ${sortedRows().length.toLocaleString('fr-FR')}`\n : `${sortedRows().length} row${sortedRows().length !== 1 ? 's' : ''}`\n }\n {c().totalRows && c().totalRows! > sortedRows().length\n ? ` (${c().totalRows!.toLocaleString('fr-FR')} total)`\n : ''\n }\n </span>\n </Show>\n <Show when={!showPageInfo()}><span /></Show>\n\n <Show when={isPaginated()}>\n <div class=\"flex items-center gap-1\">\n <button\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={page() === 0}\n onClick={() => setPage(p => p - 1)}\n >\n ◀ Prev\n </button>\n <span class=\"px-2\">Page {page() + 1} / {totalPages()}</span>\n <button\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={page() >= totalPages() - 1}\n onClick={() => setPage(p => p + 1)}\n >\n Next ▶\n </button>\n </div>\n </Show>\n </div>\n </div>\n )}\n </Show>\n )\n}\n"],"names":["formatNumber","value","format","isFinite","String","toFixed","toLocaleString","Number","isInteger","maximumFractionDigits","formatCell","col","type","Date","toLocaleDateString","compareValues","a","b","na","nb","isNaN","da","getTime","db","localeCompare","sensitivity","toCSV","columns","rows","header","map","c","label","replace","join","body","row","val","key","downloadFile","content","filename","mimeType","blob","Blob","url","URL","createObjectURL","document","createElement","href","download","click","revokeObjectURL","resolveContent","raw","obj","Array","isArray","inner","DataPreviewSection","props","createMemo","resolved","console","warn","rawRows","pageSizeVal","pageSize","showPageInfo","page","setPage","createSignal","initialPage","sortKey","setSortKey","sortDir","setSortDir","createEffect","p","onPageChange","handleSort","sortedRows","r","dir","find","sort","cmp","isPaginated","length","totalPages","Math","ceil","visibleRows","start","slice","rangeStart","rangeEnd","min","handleExportCSV","handleExportJSON","JSON","stringify","columnAlign","align","sortIndicator","_$createComponent","Show","when","fallback","_$getNextElement","_tmpl$","children","_el$2","_tmpl$8","_el$3","firstChild","_el$4","_el$7","_el$8","_co$","_$getNextMarker","nextSibling","_el$9","_el$0","_co$2","_el$12","_el$13","_co$3","_el$14","_el$15","_el$16","_el$17","_el$18","_el$19","_el$36","_el$37","_co$8","_el$38","_el$39","_co$9","_el$40","_el$41","_co$0","_$insert","source","_el$5","_tmpl$2","freshness","_el$6","_tmpl$3","exportable","_el$1","_tmpl$4","_el$10","_el$11","$$click","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","undefined","_$runHydrationEvents","For","each","_el$42","_tmpl$9","_el$43","_el$45","_el$46","_co$1","_el$44","_v$5","_v$6","_v$7","_$setStyleProperty","_$classList","i","_el$47","_tmpl$0","_el$48","_tmpl$1","_$p","_el$20","_tmpl$5","_el$21","_el$22","_co$4","_el$23","_el$24","_co$5","_c$","_$memo","_c$2","totalRows","_tmpl$6","_el$26","_tmpl$7","_el$27","_el$28","_el$29","_el$31","_el$32","_co$6","_el$30","_el$33","_el$34","_co$7","_el$35","_v$3","_v$4","_$setProperty","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataPreviewSection.cjs","sources":["../../src/components/DataPreviewSection.tsx"],"sourcesContent":["/**\n * DataPreviewSection — paginated, sortable data table with export\n * v4.0.4: Full pagination spec (auto-activate, pageSize=0 disable, showPageInfo, onPageChange)\n *\n * @experimental\n */\n\nimport { createSignal, createMemo, createEffect, For, Show, onMount } from 'solid-js'\nimport type { DataPreviewContent, DataPreviewColumn } from '../types/chat-bus'\nimport {\n DEFAULT_MCPUI_STRINGS,\n formatMCPUIString,\n useMCPUIStrings,\n} from '../context/MCPUIStringsContext'\n\nexport interface DataPreviewSectionProps {\n content: DataPreviewContent\n}\n\ntype SortDir = 'asc' | 'desc' | null\n\n// ─── Formatting helpers ─────────────────────────────────────\n\n/**\n * `locale` — BCP-47 tag (`MCPUIStrings.locale`, default `'en-US'`). Before\n * 6.20.0 these helpers hardcoded `'fr-FR'` / `'fr'`.\n */\nfunction formatNumber(\n value: unknown,\n format?: string,\n locale: string = DEFAULT_MCPUI_STRINGS.locale\n): string {\n if (typeof value !== 'number' || !isFinite(value)) return String(value ?? '')\n if (format === 'percent') {\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n useGrouping: false,\n }).format(value)\n }\n if (format === 'currency') return `${value.toLocaleString(locale)} EUR`\n if (Number.isInteger(value)) return value.toLocaleString(locale)\n return value.toLocaleString(locale, { maximumFractionDigits: 2 })\n}\n\nfunction formatCell(\n value: unknown,\n col: DataPreviewColumn,\n locale: string = DEFAULT_MCPUI_STRINGS.locale,\n /** False before mount: date-time values stay raw so SSR and hydration match. */\n zoneAware = true\n): string {\n if (value == null) return '\\u2014'\n if (col.type === 'number') return formatNumber(value, col.format, locale)\n if (col.type === 'date' && typeof value === 'string') {\n const date = new Date(value)\n if (Number.isNaN(date.getTime())) return value\n // A date-only value (`2026-09-17`) has no time zone: format it in UTC so\n // every viewer, and the server, shows the same calendar date.\n const dateOnly = /^\\d{4}-\\d{2}-\\d{2}$/.test(value)\n // A date-time's calendar date depends on the viewer's time zone, which the\n // server cannot know: keep the raw value until the component has mounted.\n if (!dateOnly && !zoneAware) return value\n try {\n return date.toLocaleDateString(locale, dateOnly ? { timeZone: 'UTC' } : undefined)\n } catch {\n return value\n }\n }\n return String(value)\n}\n\nfunction compareValues(\n a: unknown,\n b: unknown,\n type?: string,\n locale: string = DEFAULT_MCPUI_STRINGS.locale\n): number {\n if (a == null && b == null) return 0\n if (a == null) return 1\n if (b == null) return -1\n if (type === 'number') {\n const na = typeof a === 'number' ? a : Number(a)\n const nb = typeof b === 'number' ? b : Number(b)\n if (isNaN(na) && isNaN(nb)) return 0\n if (isNaN(na)) return 1\n if (isNaN(nb)) return -1\n return na - nb\n }\n if (type === 'date') {\n const da = new Date(String(a)).getTime()\n const db = new Date(String(b)).getTime()\n if (isNaN(da) && isNaN(db)) return 0\n if (isNaN(da)) return 1\n if (isNaN(db)) return -1\n return da - db\n }\n return String(a).localeCompare(String(b), locale, { sensitivity: 'base' })\n}\n\n// ─── Export helpers ─────────────────────────────────────────\n\nfunction toCSV(columns: DataPreviewColumn[], rows: Record<string, unknown>[]): string {\n const header = columns.map(c => `\"${c.label.replace(/\"/g, '\"\"')}\"`).join(';')\n const body = rows.map(row =>\n columns.map(c => {\n const val = row[c.key]\n if (val == null) return ''\n if (typeof val === 'string') return `\"${val.replace(/\"/g, '\"\"')}\"`\n return String(val)\n }).join(';')\n ).join('\\n')\n return `${header}\\n${body}`\n}\n\nfunction downloadFile(content: string, filename: string, mimeType: string) {\n const blob = new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n a.click()\n URL.revokeObjectURL(url)\n}\n\n// ─── Content resolver ───────────────────────────────────────\n\nfunction resolveContent(raw: unknown): DataPreviewContent | null {\n if (!raw || typeof raw !== 'object') return null\n const obj = raw as Record<string, unknown>\n if (Array.isArray(obj.columns) && Array.isArray(obj.rows)) {\n return obj as unknown as DataPreviewContent\n }\n if (obj.content && typeof obj.content === 'object') {\n const inner = obj.content as Record<string, unknown>\n if (Array.isArray(inner.columns) && Array.isArray(inner.rows)) {\n return inner as unknown as DataPreviewContent\n }\n }\n return null\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function DataPreviewSection(props: DataPreviewSectionProps) {\n const strings = useMCPUIStrings()\n const content = createMemo(() => {\n const resolved = resolveContent(props.content)\n if (!resolved) {\n console.warn('[MCP-UI] DataPreviewSection: invalid content — expected { columns, rows }', props.content)\n }\n return resolved\n })\n\n const columns = () => content()?.columns || []\n const rawRows = () => content()?.rows || []\n const pageSizeVal = () => content()?.pageSize ?? 25\n const showPageInfo = () => content()?.showPageInfo !== false\n\n const [page, setPage] = createSignal(content()?.initialPage ?? 0)\n const [mounted, setMounted] = createSignal(false)\n onMount(() => setMounted(true))\n const [sortKey, setSortKey] = createSignal<string | null>(null)\n const [sortDir, setSortDir] = createSignal<SortDir>(null)\n\n // Notify parent on page change\n createEffect(() => {\n const p = page()\n content()?.onPageChange?.(p)\n })\n\n const handleSort = (key: string) => {\n if (sortKey() === key) {\n if (sortDir() === 'asc') setSortDir('desc')\n else { setSortKey(null); setSortDir(null) }\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n setPage(0)\n }\n\n const sortedRows = createMemo(() => {\n const r = rawRows()\n const key = sortKey()\n const dir = sortDir()\n if (!key || !dir) return r\n const col = columns().find(c => c.key === key)\n return [...r].sort((a, b) => {\n const cmp = compareValues(a[key], b[key], col?.type, strings.locale)\n return dir === 'desc' ? -cmp : cmp\n })\n })\n\n // Pagination: auto-enabled when rows > pageSize, disabled when pageSize=0\n const isPaginated = () => pageSizeVal() > 0 && sortedRows().length > pageSizeVal()\n const totalPages = () => isPaginated() ? Math.ceil(sortedRows().length / pageSizeVal()) : 1\n\n const visibleRows = createMemo(() => {\n if (!isPaginated()) return sortedRows()\n const start = page() * pageSizeVal()\n return sortedRows().slice(start, start + pageSizeVal())\n })\n\n const rangeStart = () => isPaginated() ? page() * pageSizeVal() + 1 : 1\n const rangeEnd = () => isPaginated()\n ? Math.min((page() + 1) * pageSizeVal(), sortedRows().length)\n : sortedRows().length\n\n // Export ALL rows (not just page)\n const handleExportCSV = () => {\n const c = content()\n if (!c) return\n downloadFile(toCSV(c.columns, sortedRows()), 'data-export.csv', 'text/csv;charset=utf-8')\n }\n const handleExportJSON = () => {\n downloadFile(JSON.stringify(sortedRows(), null, 2), 'data-export.json', 'application/json')\n }\n\n const columnAlign = (col: DataPreviewColumn) => {\n if (col.align) return col.align\n if (col.type === 'number') return 'right'\n return 'left'\n }\n\n const sortIndicator = (key: string) => {\n if (sortKey() !== key) return '\\u2195'\n return sortDir() === 'asc' ? '\\u2191' : '\\u2193'\n }\n\n return (\n <Show when={content()} fallback={\n <div class=\"text-xs text-amber-600 dark:text-amber-400 p-2\">\n {strings.previewInvalidContent}\n </div>\n }>\n {(c) => (\n <div class=\"data-preview-section\">\n {/* Header: source + export */}\n <div class=\"flex items-center justify-between mb-2\">\n <div class=\"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400\">\n <Show when={c().source}>\n <span class=\"font-medium\">{c().source}</span>\n </Show>\n <Show when={c().freshness}>\n <span class=\"px-1.5 py-0.5 rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\">\n {c().freshness}\n </span>\n </Show>\n </div>\n <Show when={c().exportable !== false}>\n <div class=\"flex items-center gap-1\">\n <button\n class=\"px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={handleExportCSV}\n title={formatMCPUIString(strings.exportCsvRows, { count: sortedRows().length })}\n >\n CSV\n </button>\n <button\n class=\"px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n onClick={handleExportJSON}\n title={formatMCPUIString(strings.exportJsonRows, { count: sortedRows().length })}\n >\n JSON\n </button>\n </div>\n </Show>\n </div>\n\n {/* Table */}\n <div class=\"overflow-x-auto rounded border border-gray-200 dark:border-gray-700\">\n <table class=\"w-full text-sm\">\n <thead>\n <tr class=\"bg-gray-50 dark:bg-gray-800\">\n <For each={columns()}>\n {(col) => (\n <th\n class=\"px-3 py-2 font-medium text-xs text-gray-600 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 cursor-pointer select-none hover:bg-gray-100 dark:hover:bg-gray-700/50 transition-colors\"\n style={{ \"text-align\": columnAlign(col) }}\n onClick={() => handleSort(col.key)}\n title={formatMCPUIString(strings.sortBy, { column: col.label })}\n >\n <span class=\"inline-flex items-center gap-1\">\n {col.label}\n <span\n class=\"text-[10px] leading-none\"\n classList={{\n 'opacity-30': sortKey() !== col.key,\n 'opacity-100 text-blue-600 dark:text-blue-400': sortKey() === col.key,\n }}\n >\n {sortIndicator(col.key)}\n </span>\n </span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <For each={visibleRows()}>\n {(row, i) => (\n <tr\n class=\"border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors\"\n classList={{ 'bg-gray-25 dark:bg-gray-850': i() % 2 === 1 }}\n >\n <For each={columns()}>\n {(col) => (\n <td\n class=\"px-3 py-2 text-gray-800 dark:text-gray-200\"\n style={{ \"text-align\": columnAlign(col) }}\n >\n {formatCell(row[col.key], col, strings.locale, mounted())}\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n </div>\n\n {/* Footer: pagination + page info */}\n <div class=\"flex items-center justify-between mt-2 text-xs text-gray-500 dark:text-gray-400\">\n <Show when={showPageInfo()}>\n <span>\n {isPaginated()\n ? formatMCPUIString(strings.previewShowingRange, {\n start: rangeStart().toLocaleString(strings.locale),\n end: rangeEnd().toLocaleString(strings.locale),\n // `strings.locale` formats the count, so the chrome\n // string and the digits agree (and SSR matches the client).\n total: sortedRows().length.toLocaleString(strings.locale),\n })\n : formatMCPUIString(\n sortedRows().length === 1 ? strings.previewRowsOne : strings.previewRowsMany,\n { count: sortedRows().length.toLocaleString(strings.locale) }\n )}\n {c().totalRows && c().totalRows! > sortedRows().length\n ? formatMCPUIString(strings.previewTotalSuffix, {\n total: c().totalRows!.toLocaleString(strings.locale),\n })\n : ''}\n </span>\n </Show>\n <Show when={!showPageInfo()}><span /></Show>\n\n <Show when={isPaginated()}>\n <div class=\"flex items-center gap-1\">\n <button\n type=\"button\"\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={page() === 0}\n onClick={() => setPage(p => p - 1)}\n aria-label={strings.paginationPrevious}\n data-mcp-ui-action=\"page-prev\"\n >\n <span aria-hidden=\"true\">◀</span> {strings.previewPrev}\n </button>\n <span class=\"px-2\" aria-live=\"polite\">\n {formatMCPUIString(strings.previewPageIndicator, {\n page: page() + 1,\n total: totalPages(),\n })}\n </span>\n <button\n type=\"button\"\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={page() >= totalPages() - 1}\n onClick={() => setPage(p => p + 1)}\n aria-label={strings.paginationNext}\n data-mcp-ui-action=\"page-next\"\n >\n {strings.previewNext} <span aria-hidden=\"true\">▶</span>\n </button>\n </div>\n </Show>\n </div>\n </div>\n )}\n </Show>\n )\n}\n"],"names":["formatNumber","value","format","locale","DEFAULT_MCPUI_STRINGS","isFinite","String","Intl","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","useGrouping","toLocaleString","Number","isInteger","formatCell","col","zoneAware","type","date","Date","isNaN","getTime","dateOnly","test","toLocaleDateString","timeZone","undefined","compareValues","a","b","na","nb","da","db","localeCompare","sensitivity","toCSV","columns","rows","header","map","c","label","replace","join","body","row","val","key","downloadFile","content","filename","mimeType","blob","Blob","url","URL","createObjectURL","document","createElement","href","download","click","revokeObjectURL","resolveContent","raw","obj","Array","isArray","inner","DataPreviewSection","props","strings","useMCPUIStrings","createMemo","resolved","console","warn","rawRows","pageSizeVal","pageSize","showPageInfo","page","setPage","createSignal","initialPage","mounted","setMounted","onMount","sortKey","setSortKey","sortDir","setSortDir","createEffect","p","onPageChange","handleSort","sortedRows","r","dir","find","sort","cmp","isPaginated","length","totalPages","Math","ceil","visibleRows","start","slice","rangeStart","rangeEnd","min","handleExportCSV","handleExportJSON","JSON","stringify","columnAlign","align","sortIndicator","_$createComponent","Show","when","fallback","_el$","_$getNextElement","_tmpl$","_$insert","previewInvalidContent","children","_el$2","_tmpl$8","_el$3","firstChild","_el$4","_el$7","_el$8","_co$","_$getNextMarker","nextSibling","_el$9","_el$0","_co$2","_el$12","_el$13","_co$3","_el$14","_el$15","_el$16","_el$17","_el$18","_el$19","_el$37","_el$38","_co$8","_el$39","_el$40","_co$9","_el$41","_el$42","_co$0","source","_el$5","_tmpl$2","freshness","_el$6","_tmpl$3","exportable","_el$1","_tmpl$4","_el$10","_el$11","$$click","_$effect","_p$","_v$","formatMCPUIString","exportCsvRows","count","_v$2","exportJsonRows","e","_$setAttribute","t","_$runHydrationEvents","For","each","_el$43","_tmpl$9","_el$44","_el$46","_el$47","_co$1","_el$45","_v$7","_v$8","sortBy","column","_v$9","_$setStyleProperty","_$classList","i","_el$48","_tmpl$0","_el$49","_tmpl$1","_$p","_el$20","_tmpl$5","_el$21","_el$22","_co$4","_el$23","_el$24","_co$5","_c$","_$memo","previewShowingRange","end","total","previewRowsOne","previewRowsMany","_c$2","totalRows","previewTotalSuffix","_tmpl$6","_el$26","_tmpl$7","_el$27","_el$28","_el$29","_el$30","_el$31","_co$6","_el$32","_el$33","_el$35","_el$36","_co$7","previewPrev","previewPageIndicator","previewNext","_v$3","_v$4","paginationPrevious","_v$5","_v$6","paginationNext","_$setProperty","o","_$delegateEvents"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataPreviewSection.d.ts","sourceRoot":"","sources":["../../src/components/DataPreviewSection.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"DataPreviewSection.d.ts","sourceRoot":"","sources":["../../src/components/DataPreviewSection.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,mBAAmB,CAAA;AAO9E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,kBAAkB,CAAA;CAC5B;AAgID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,kCAgPhE"}
|