@seed-ship/mcp-ui-solid 1.0.40 → 1.0.42
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/dist/components/GenerativeUIErrorBoundary.cjs +35 -18
- package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
- package/dist/components/GenerativeUIErrorBoundary.default.d.ts +2 -0
- package/dist/components/GenerativeUIErrorBoundary.default.d.ts.map +1 -0
- package/dist/components/GenerativeUIErrorBoundary.js +36 -19
- package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
- package/dist/components/StreamingUIRenderer.cjs +192 -103
- package/dist/components/StreamingUIRenderer.cjs.map +1 -1
- package/dist/components/StreamingUIRenderer.js +193 -104
- package/dist/components/StreamingUIRenderer.js.map +1 -1
- package/dist/components/UIResourceRenderer.cjs +359 -134
- package/dist/components/UIResourceRenderer.cjs.map +1 -1
- package/dist/components/UIResourceRenderer.default.d.ts +2 -0
- package/dist/components/UIResourceRenderer.default.d.ts.map +1 -0
- package/dist/components/UIResourceRenderer.js +360 -135
- package/dist/components/UIResourceRenderer.js.map +1 -1
- package/package.json +9 -7
- package/src/components/GenerativeUIErrorBoundary.default.ts +1 -0
- package/src/components/UIResourceRenderer.default.ts +1 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vite.config.ts +3 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { delegateEvents, getNextElement, template, insert, createComponent, effect, style, className, getNextMarker, setAttribute, memo, setProperty, runHydrationEvents } from "solid-js/web";
|
|
2
2
|
import purify from "../node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.js";
|
|
3
3
|
import { For, Show, createSignal, createEffect, createMemo } from "solid-js";
|
|
4
4
|
import { validateComponent, DEFAULT_RESOURCE_LIMITS } from "../services/validation.js";
|
|
5
5
|
import { GenerativeUIErrorBoundary } from "./GenerativeUIErrorBoundary.js";
|
|
6
6
|
import { marked as k } from "../node_modules/.pnpm/marked@16.4.2/node_modules/marked/lib/marked.esm.js";
|
|
7
|
-
var _tmpl$ =
|
|
7
|
+
var _tmpl$ = /* @__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$2 = /* @__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$3 = /* @__PURE__ */ template(`<h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3">`), _tmpl$4 = /* @__PURE__ */ template(`<div class="w-full h-full p-4"><!$><!/><div class="w-full h-full"><img alt="Chart visualization"class="w-full h-auto max-h-[300px] object-contain">`), _tmpl$5 = /* @__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$6 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>Showing <!$><!/> - <!$><!/> of <!$><!/>`), _tmpl$7 = /* @__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"><div class=p-4><!$><!/><div class=overflow-x-auto><table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0"><thead class="bg-gray-50 dark:bg-gray-900/50"><tr></tr></thead><tbody class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700"></tbody></table></div><!$><!/>`), _tmpl$8 = /* @__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">`), _tmpl$9 = /* @__PURE__ */ template(`<tr>`), _tmpl$0 = /* @__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"><div>`), _tmpl$1 = /* @__PURE__ */ template(`<span class="ml-2 text-sm font-medium text-gray-500 dark:text-gray-400">`), _tmpl$10 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center"><span><!$><!/> <!$><!/>%`), _tmpl$11 = /* @__PURE__ */ template(`<p class="mt-2 text-xs text-gray-500 dark:text-gray-400">`), _tmpl$12 = /* @__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 p-4"><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$13 = /* @__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 p-4"><div>`), _tmpl$14 = /* @__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]"><a target=_blank rel="noopener noreferrer"class=cursor-zoom-in><img class="max-w-full max-h-[400px] object-contain rounded shadow-sm hover:opacity-90 transition-opacity"loading=lazy></a></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">`, true, false, false), _tmpl$15 = /* @__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$16 = /* @__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"sandbox="allow-scripts allow-same-origin allow-popups allow-forms"loading=lazy>`, true, false, false), _tmpl$17 = /* @__PURE__ */ template(`<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">`), _tmpl$18 = /* @__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]"><a target=_blank rel="noopener noreferrer"class=cursor-zoom-in><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$19 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400 truncate">`), _tmpl$20 = /* @__PURE__ */ template(`<a target=_blank rel="noopener noreferrer"class="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"><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"><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><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$21 = /* @__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$22 = /* @__PURE__ */ template(`<span>`), _tmpl$23 = /* @__PURE__ */ template(`<a rel="noopener noreferrer"><!$><!/><!$><!/>`), _tmpl$24 = /* @__PURE__ */ template(`<button><!$><!/><!$><!/>`), _tmpl$25 = /* @__PURE__ */ template(`<div><div class="grid gap-4">`), _tmpl$26 = /* @__PURE__ */ template(`<div>`);
|
|
8
8
|
function ChartRenderer(props) {
|
|
9
9
|
const [iframeUrl, setIframeUrl] = createSignal();
|
|
10
10
|
const [isLoading, setIsLoading] = createSignal(true);
|
|
@@ -26,35 +26,57 @@ function ChartRenderer(props) {
|
|
|
26
26
|
setIframeUrl(url);
|
|
27
27
|
setIsLoading(false);
|
|
28
28
|
});
|
|
29
|
-
return
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
29
|
+
return (() => {
|
|
30
|
+
var _el$ = getNextElement(_tmpl$5), _el$11 = _el$.firstChild, [_el$12, _co$2] = getNextMarker(_el$11.nextSibling), _el$13 = _el$12.nextSibling, [_el$14, _co$3] = getNextMarker(_el$13.nextSibling), _el$15 = _el$14.nextSibling, [_el$16, _co$4] = getNextMarker(_el$15.nextSibling);
|
|
31
|
+
insert(_el$, createComponent(Show, {
|
|
32
|
+
get when() {
|
|
33
|
+
return isLoading();
|
|
34
|
+
},
|
|
35
|
+
get children() {
|
|
36
|
+
return getNextElement(_tmpl$);
|
|
37
|
+
}
|
|
38
|
+
}), _el$12, _co$2);
|
|
39
|
+
insert(_el$, createComponent(Show, {
|
|
40
|
+
get when() {
|
|
41
|
+
return error();
|
|
42
|
+
},
|
|
43
|
+
get children() {
|
|
44
|
+
var _el$3 = getNextElement(_tmpl$2), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
|
|
45
|
+
insert(_el$6, error);
|
|
46
|
+
return _el$3;
|
|
47
|
+
}
|
|
48
|
+
}), _el$14, _co$3);
|
|
49
|
+
insert(_el$, createComponent(Show, {
|
|
50
|
+
get when() {
|
|
51
|
+
return memo(() => !!iframeUrl())() && !error();
|
|
52
|
+
},
|
|
53
|
+
get children() {
|
|
54
|
+
var _el$7 = getNextElement(_tmpl$4), _el$1 = _el$7.firstChild, [_el$10, _co$] = getNextMarker(_el$1.nextSibling), _el$9 = _el$10.nextSibling, _el$0 = _el$9.firstChild;
|
|
55
|
+
insert(_el$7, createComponent(Show, {
|
|
56
|
+
get when() {
|
|
57
|
+
return props.component.params.title;
|
|
58
|
+
},
|
|
59
|
+
get children() {
|
|
60
|
+
var _el$8 = getNextElement(_tmpl$3);
|
|
61
|
+
insert(_el$8, () => props.component.params.title);
|
|
62
|
+
return _el$8;
|
|
63
|
+
}
|
|
64
|
+
}), _el$10, _co$);
|
|
65
|
+
_el$0.addEventListener("error", () => {
|
|
66
|
+
var _a;
|
|
67
|
+
setError("Failed to load chart");
|
|
68
|
+
(_a = props.onError) == null ? void 0 : _a.call(props, {
|
|
69
|
+
type: "render",
|
|
70
|
+
message: "Chart rendering failed",
|
|
71
|
+
componentId: props.component.id
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
effect(() => setAttribute(_el$0, "src", iframeUrl()));
|
|
75
|
+
return _el$7;
|
|
76
|
+
}
|
|
77
|
+
}), _el$16, _co$4);
|
|
78
|
+
return _el$;
|
|
79
|
+
})();
|
|
58
80
|
}
|
|
59
81
|
function renderCellValue(value) {
|
|
60
82
|
if (value === null || value === void 0) {
|
|
@@ -89,63 +111,110 @@ function renderCellValue(value) {
|
|
|
89
111
|
}
|
|
90
112
|
function TableRenderer(props) {
|
|
91
113
|
const tableParams = props.component.params;
|
|
92
|
-
return
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
} : {}), escape(column.label))
|
|
106
|
-
})), escape(createComponent(For, {
|
|
107
|
-
get each() {
|
|
108
|
-
return tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows);
|
|
109
|
-
},
|
|
110
|
-
children: (row, i) => ssr(_tmpl$9, ssrHydrationKey(), `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"}`, escape(createComponent(For, {
|
|
114
|
+
return (() => {
|
|
115
|
+
var _el$17 = getNextElement(_tmpl$7), _el$18 = _el$17.firstChild, _el$38 = _el$18.firstChild, [_el$39, _co$8] = getNextMarker(_el$38.nextSibling), _el$20 = _el$39.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild, _el$24 = _el$22.nextSibling, _el$40 = _el$20.nextSibling, [_el$41, _co$9] = getNextMarker(_el$40.nextSibling);
|
|
116
|
+
insert(_el$18, createComponent(Show, {
|
|
117
|
+
get when() {
|
|
118
|
+
return tableParams.title;
|
|
119
|
+
},
|
|
120
|
+
get children() {
|
|
121
|
+
var _el$19 = getNextElement(_tmpl$3);
|
|
122
|
+
insert(_el$19, () => tableParams.title);
|
|
123
|
+
return _el$19;
|
|
124
|
+
}
|
|
125
|
+
}), _el$39, _co$8);
|
|
126
|
+
insert(_el$23, createComponent(For, {
|
|
111
127
|
get each() {
|
|
112
128
|
return tableParams.columns;
|
|
113
129
|
},
|
|
114
|
-
children: (column) =>
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
130
|
+
children: (column) => (() => {
|
|
131
|
+
var _el$42 = getNextElement(_tmpl$8);
|
|
132
|
+
insert(_el$42, () => column.label);
|
|
133
|
+
effect((_$p) => style(_el$42, column.width ? {
|
|
134
|
+
width: column.width
|
|
135
|
+
} : {}, _$p));
|
|
136
|
+
return _el$42;
|
|
137
|
+
})()
|
|
138
|
+
}));
|
|
139
|
+
insert(_el$24, createComponent(For, {
|
|
140
|
+
get each() {
|
|
141
|
+
return tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows);
|
|
142
|
+
},
|
|
143
|
+
children: (row, i) => (() => {
|
|
144
|
+
var _el$43 = getNextElement(_tmpl$9);
|
|
145
|
+
insert(_el$43, createComponent(For, {
|
|
146
|
+
get each() {
|
|
147
|
+
return tableParams.columns;
|
|
148
|
+
},
|
|
149
|
+
children: (column) => (() => {
|
|
150
|
+
var _el$44 = getNextElement(_tmpl$0), _el$45 = _el$44.firstChild;
|
|
151
|
+
effect(() => setProperty(_el$45, "innerHTML", renderCellValue(row[column.key])));
|
|
152
|
+
return _el$44;
|
|
153
|
+
})()
|
|
154
|
+
}));
|
|
155
|
+
effect(() => className(_el$43, `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"}`));
|
|
156
|
+
return _el$43;
|
|
157
|
+
})()
|
|
158
|
+
}));
|
|
159
|
+
insert(_el$18, createComponent(Show, {
|
|
160
|
+
get when() {
|
|
161
|
+
return tableParams.pagination;
|
|
162
|
+
},
|
|
163
|
+
get children() {
|
|
164
|
+
var _el$25 = getNextElement(_tmpl$6), _el$26 = _el$25.firstChild, _el$27 = _el$26.firstChild, _el$32 = _el$27.nextSibling, [_el$33, _co$5] = getNextMarker(_el$32.nextSibling), _el$28 = _el$33.nextSibling, _el$34 = _el$28.nextSibling, [_el$35, _co$6] = getNextMarker(_el$34.nextSibling), _el$30 = _el$35.nextSibling, _el$36 = _el$30.nextSibling, [_el$37, _co$7] = getNextMarker(_el$36.nextSibling);
|
|
165
|
+
insert(_el$26, () => tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1, _el$33, _co$5);
|
|
166
|
+
insert(_el$26, () => Math.min((tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize, tableParams.pagination.totalRows), _el$35, _co$6);
|
|
167
|
+
insert(_el$26, () => tableParams.pagination.totalRows, _el$37, _co$7);
|
|
168
|
+
return _el$25;
|
|
169
|
+
}
|
|
170
|
+
}), _el$41, _co$9);
|
|
171
|
+
return _el$17;
|
|
172
|
+
})();
|
|
124
173
|
}
|
|
125
174
|
function MetricRenderer(props) {
|
|
126
175
|
const metricParams = props.component.params;
|
|
127
|
-
return
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
176
|
+
return (() => {
|
|
177
|
+
var _el$46 = getNextElement(_tmpl$12), _el$47 = _el$46.firstChild, _el$48 = _el$47.firstChild, _el$49 = _el$48.firstChild, _el$50 = _el$49.nextSibling, _el$51 = _el$50.firstChild, _el$53 = _el$51.nextSibling, [_el$54, _co$0] = getNextMarker(_el$53.nextSibling), _el$64 = _el$48.nextSibling, [_el$65, _co$11] = getNextMarker(_el$64.nextSibling), _el$66 = _el$65.nextSibling, [_el$67, _co$12] = getNextMarker(_el$66.nextSibling);
|
|
178
|
+
insert(_el$49, () => metricParams.title);
|
|
179
|
+
insert(_el$51, () => metricParams.value);
|
|
180
|
+
insert(_el$50, createComponent(Show, {
|
|
181
|
+
get when() {
|
|
182
|
+
return metricParams.unit;
|
|
183
|
+
},
|
|
184
|
+
get children() {
|
|
185
|
+
var _el$52 = getNextElement(_tmpl$1);
|
|
186
|
+
insert(_el$52, () => metricParams.unit);
|
|
187
|
+
return _el$52;
|
|
188
|
+
}
|
|
189
|
+
}), _el$54, _co$0);
|
|
190
|
+
insert(_el$47, createComponent(Show, {
|
|
191
|
+
get when() {
|
|
192
|
+
return metricParams.trend;
|
|
193
|
+
},
|
|
194
|
+
get children() {
|
|
195
|
+
var _el$55 = getNextElement(_tmpl$10), _el$56 = _el$55.firstChild, _el$59 = _el$56.firstChild, [_el$60, _co$1] = getNextMarker(_el$59.nextSibling), _el$57 = _el$60.nextSibling, _el$61 = _el$57.nextSibling, [_el$62, _co$10] = getNextMarker(_el$61.nextSibling);
|
|
196
|
+
_el$62.nextSibling;
|
|
197
|
+
insert(_el$56, (() => {
|
|
198
|
+
var _c$ = memo(() => metricParams.trend.direction === "up");
|
|
199
|
+
return () => _c$() ? "�" : metricParams.trend.direction === "down" ? "�" : "�";
|
|
200
|
+
})(), _el$60, _co$1);
|
|
201
|
+
insert(_el$56, () => Math.abs(metricParams.trend.value), _el$62, _co$10);
|
|
202
|
+
effect(() => className(_el$56, `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"}`));
|
|
203
|
+
return _el$55;
|
|
204
|
+
}
|
|
205
|
+
}), _el$65, _co$11);
|
|
206
|
+
insert(_el$47, createComponent(Show, {
|
|
207
|
+
get when() {
|
|
208
|
+
return metricParams.subtitle;
|
|
209
|
+
},
|
|
210
|
+
get children() {
|
|
211
|
+
var _el$63 = getNextElement(_tmpl$11);
|
|
212
|
+
insert(_el$63, () => metricParams.subtitle);
|
|
213
|
+
return _el$63;
|
|
214
|
+
}
|
|
215
|
+
}), _el$67, _co$12);
|
|
216
|
+
return _el$46;
|
|
217
|
+
})();
|
|
149
218
|
}
|
|
150
219
|
function extractImageFromMarkdown(content) {
|
|
151
220
|
const imagePattern = /\[!\[([^\]]*)\]\(([^)]+)\)\]\(([^)]+)\)\s*\*([^*]+)\*/;
|
|
@@ -181,46 +250,117 @@ function TextRenderer(props) {
|
|
|
181
250
|
return imageData();
|
|
182
251
|
},
|
|
183
252
|
get fallback() {
|
|
184
|
-
return
|
|
253
|
+
return (() => {
|
|
254
|
+
var _el$68 = getNextElement(_tmpl$13), _el$69 = _el$68.firstChild;
|
|
255
|
+
effect((_p$) => {
|
|
256
|
+
var _v$ = `prose prose-sm dark:prose-invert max-w-none ${textParams.className || ""}`, _v$2 = htmlContent();
|
|
257
|
+
_v$ !== _p$.e && className(_el$69, _p$.e = _v$);
|
|
258
|
+
_v$2 !== _p$.t && setProperty(_el$69, "innerHTML", _p$.t = _v$2);
|
|
259
|
+
return _p$;
|
|
260
|
+
}, {
|
|
261
|
+
e: void 0,
|
|
262
|
+
t: void 0
|
|
263
|
+
});
|
|
264
|
+
return _el$68;
|
|
265
|
+
})();
|
|
185
266
|
},
|
|
186
|
-
children: (data) =>
|
|
267
|
+
children: (data) => (() => {
|
|
268
|
+
var _el$70 = getNextElement(_tmpl$14), _el$71 = _el$70.firstChild, _el$72 = _el$71.firstChild, _el$73 = _el$72.firstChild, _el$74 = _el$71.nextSibling, _el$75 = _el$74.firstChild;
|
|
269
|
+
insert(_el$75, () => data().credit);
|
|
270
|
+
effect((_p$) => {
|
|
271
|
+
var _v$3 = data().linkUrl, _v$4 = data().imageUrl, _v$5 = data().alt;
|
|
272
|
+
_v$3 !== _p$.e && setAttribute(_el$72, "href", _p$.e = _v$3);
|
|
273
|
+
_v$4 !== _p$.t && setAttribute(_el$73, "src", _p$.t = _v$4);
|
|
274
|
+
_v$5 !== _p$.a && setAttribute(_el$73, "alt", _p$.a = _v$5);
|
|
275
|
+
return _p$;
|
|
276
|
+
}, {
|
|
277
|
+
e: void 0,
|
|
278
|
+
t: void 0,
|
|
279
|
+
a: void 0
|
|
280
|
+
});
|
|
281
|
+
return _el$70;
|
|
282
|
+
})()
|
|
187
283
|
});
|
|
188
284
|
}
|
|
189
285
|
function IframeRenderer(props) {
|
|
190
286
|
const params = props.component.params;
|
|
191
|
-
return
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
287
|
+
return (() => {
|
|
288
|
+
var _el$76 = getNextElement(_tmpl$16), _el$80 = _el$76.firstChild, [_el$81, _co$13] = getNextMarker(_el$80.nextSibling), _el$79 = _el$81.nextSibling;
|
|
289
|
+
insert(_el$76, createComponent(Show, {
|
|
290
|
+
get when() {
|
|
291
|
+
return params.title;
|
|
292
|
+
},
|
|
293
|
+
get children() {
|
|
294
|
+
var _el$77 = getNextElement(_tmpl$15), _el$78 = _el$77.firstChild;
|
|
295
|
+
insert(_el$78, () => params.title);
|
|
296
|
+
return _el$77;
|
|
297
|
+
}
|
|
298
|
+
}), _el$81, _co$13);
|
|
299
|
+
effect((_p$) => {
|
|
300
|
+
var _v$6 = params.url, _v$7 = params.title || "Embedded content", _v$8 = `height: ${params.height || "400px"}; min-height: 300px;`;
|
|
301
|
+
_v$6 !== _p$.e && setAttribute(_el$79, "src", _p$.e = _v$6);
|
|
302
|
+
_v$7 !== _p$.t && setAttribute(_el$79, "title", _p$.t = _v$7);
|
|
303
|
+
_p$.a = style(_el$79, _v$8, _p$.a);
|
|
304
|
+
return _p$;
|
|
305
|
+
}, {
|
|
306
|
+
e: void 0,
|
|
307
|
+
t: void 0,
|
|
308
|
+
a: void 0
|
|
309
|
+
});
|
|
310
|
+
return _el$76;
|
|
311
|
+
})();
|
|
199
312
|
}
|
|
200
313
|
function ImageRenderer(props) {
|
|
201
314
|
const params = props.component.params;
|
|
202
|
-
return
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
315
|
+
return (() => {
|
|
316
|
+
var _el$82 = getNextElement(_tmpl$18), _el$83 = _el$82.firstChild, _el$84 = _el$83.firstChild, _el$85 = _el$84.firstChild, _el$88 = _el$83.nextSibling, [_el$89, _co$14] = getNextMarker(_el$88.nextSibling);
|
|
317
|
+
insert(_el$82, createComponent(Show, {
|
|
318
|
+
get when() {
|
|
319
|
+
return params.caption;
|
|
320
|
+
},
|
|
321
|
+
get children() {
|
|
322
|
+
var _el$86 = getNextElement(_tmpl$17), _el$87 = _el$86.firstChild;
|
|
323
|
+
insert(_el$87, () => params.caption);
|
|
324
|
+
return _el$86;
|
|
325
|
+
}
|
|
326
|
+
}), _el$89, _co$14);
|
|
327
|
+
effect((_p$) => {
|
|
328
|
+
var _v$9 = params.url, _v$0 = params.url, _v$1 = params.alt || "Image";
|
|
329
|
+
_v$9 !== _p$.e && setAttribute(_el$84, "href", _p$.e = _v$9);
|
|
330
|
+
_v$0 !== _p$.t && setAttribute(_el$85, "src", _p$.t = _v$0);
|
|
331
|
+
_v$1 !== _p$.a && setAttribute(_el$85, "alt", _p$.a = _v$1);
|
|
332
|
+
return _p$;
|
|
333
|
+
}, {
|
|
334
|
+
e: void 0,
|
|
335
|
+
t: void 0,
|
|
336
|
+
a: void 0
|
|
337
|
+
});
|
|
338
|
+
return _el$82;
|
|
339
|
+
})();
|
|
210
340
|
}
|
|
211
341
|
function LinkRenderer(props) {
|
|
212
342
|
const params = props.component.params;
|
|
213
|
-
return
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
343
|
+
return (() => {
|
|
344
|
+
var _el$90 = getNextElement(_tmpl$20), _el$91 = _el$90.firstChild, _el$92 = _el$91.nextSibling, _el$93 = _el$92.firstChild, _el$95 = _el$93.nextSibling, [_el$96, _co$15] = getNextMarker(_el$95.nextSibling);
|
|
345
|
+
_el$90.$$click = (e) => e.stopPropagation();
|
|
346
|
+
insert(_el$93, () => params.label || params.url);
|
|
347
|
+
insert(_el$92, createComponent(Show, {
|
|
348
|
+
get when() {
|
|
349
|
+
return params.description;
|
|
350
|
+
},
|
|
351
|
+
get children() {
|
|
352
|
+
var _el$94 = getNextElement(_tmpl$19);
|
|
353
|
+
insert(_el$94, () => params.description);
|
|
354
|
+
return _el$94;
|
|
355
|
+
}
|
|
356
|
+
}), _el$96, _co$15);
|
|
357
|
+
effect(() => setAttribute(_el$90, "href", params.url));
|
|
358
|
+
runHydrationEvents();
|
|
359
|
+
return _el$90;
|
|
360
|
+
})();
|
|
221
361
|
}
|
|
222
362
|
function ComponentRenderer(props) {
|
|
223
|
-
var _a
|
|
363
|
+
var _a;
|
|
224
364
|
const validation = validateComponent(props.component);
|
|
225
365
|
if (!validation.valid) {
|
|
226
366
|
(_a = props.onError) == null ? void 0 : _a.call(props, {
|
|
@@ -229,7 +369,14 @@ function ComponentRenderer(props) {
|
|
|
229
369
|
componentId: props.component.id,
|
|
230
370
|
details: validation.errors
|
|
231
371
|
});
|
|
232
|
-
return
|
|
372
|
+
return (() => {
|
|
373
|
+
var _el$97 = getNextElement(_tmpl$21), _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling;
|
|
374
|
+
insert(_el$99, () => {
|
|
375
|
+
var _a2, _b;
|
|
376
|
+
return ((_b = (_a2 = validation.errors) == null ? void 0 : _a2[0]) == null ? void 0 : _b.message) || "Unknown validation error";
|
|
377
|
+
});
|
|
378
|
+
return _el$97;
|
|
379
|
+
})();
|
|
233
380
|
}
|
|
234
381
|
return createComponent(GenerativeUIErrorBoundary, {
|
|
235
382
|
get componentId() {
|
|
@@ -343,30 +490,89 @@ function ComponentRenderer(props) {
|
|
|
343
490
|
}
|
|
344
491
|
function ActionRenderer(props) {
|
|
345
492
|
const params = props.component.params;
|
|
493
|
+
let dispatchAction = null;
|
|
346
494
|
createEffect(() => {
|
|
495
|
+
if (typeof window !== "undefined") {
|
|
496
|
+
dispatchAction = (toolName, toolParams) => {
|
|
497
|
+
const event = new CustomEvent("mcp-action", {
|
|
498
|
+
detail: {
|
|
499
|
+
toolName,
|
|
500
|
+
params: toolParams
|
|
501
|
+
},
|
|
502
|
+
bubbles: true
|
|
503
|
+
});
|
|
504
|
+
window.dispatchEvent(event);
|
|
505
|
+
};
|
|
506
|
+
}
|
|
347
507
|
});
|
|
508
|
+
const handleClick = (e) => {
|
|
509
|
+
if (params.action === "tool-call" && params.toolName) {
|
|
510
|
+
e.preventDefault();
|
|
511
|
+
dispatchAction == null ? void 0 : dispatchAction(params.toolName, params.params || {});
|
|
512
|
+
}
|
|
513
|
+
};
|
|
348
514
|
if (params.type === "link" || params.action === "link") {
|
|
349
|
-
return
|
|
350
|
-
|
|
515
|
+
return (() => {
|
|
516
|
+
var _el$100 = getNextElement(_tmpl$23), _el$102 = _el$100.firstChild, [_el$103, _co$16] = getNextMarker(_el$102.nextSibling), _el$104 = _el$103.nextSibling, [_el$105, _co$17] = getNextMarker(_el$104.nextSibling);
|
|
517
|
+
_el$100.$$click = handleClick;
|
|
518
|
+
insert(_el$100, createComponent(Show, {
|
|
519
|
+
get when() {
|
|
520
|
+
return params.icon;
|
|
521
|
+
},
|
|
522
|
+
get children() {
|
|
523
|
+
var _el$101 = getNextElement(_tmpl$22);
|
|
524
|
+
insert(_el$101, () => params.icon);
|
|
525
|
+
return _el$101;
|
|
526
|
+
}
|
|
527
|
+
}), _el$103, _co$16);
|
|
528
|
+
insert(_el$100, () => params.label, _el$105, _co$17);
|
|
529
|
+
effect((_p$) => {
|
|
530
|
+
var _v$10 = params.url || "#", _v$11 = params.url ? "_blank" : void 0, _v$12 = `inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors
|
|
531
|
+
${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"}`;
|
|
532
|
+
_v$10 !== _p$.e && setAttribute(_el$100, "href", _p$.e = _v$10);
|
|
533
|
+
_v$11 !== _p$.t && setAttribute(_el$100, "target", _p$.t = _v$11);
|
|
534
|
+
_v$12 !== _p$.a && className(_el$100, _p$.a = _v$12);
|
|
535
|
+
return _p$;
|
|
536
|
+
}, {
|
|
537
|
+
e: void 0,
|
|
538
|
+
t: void 0,
|
|
539
|
+
a: void 0
|
|
540
|
+
});
|
|
541
|
+
runHydrationEvents();
|
|
542
|
+
return _el$100;
|
|
543
|
+
})();
|
|
544
|
+
}
|
|
545
|
+
return (() => {
|
|
546
|
+
var _el$106 = getNextElement(_tmpl$24), _el$108 = _el$106.firstChild, [_el$109, _co$18] = getNextMarker(_el$108.nextSibling), _el$110 = _el$109.nextSibling, [_el$111, _co$19] = getNextMarker(_el$110.nextSibling);
|
|
547
|
+
_el$106.$$click = handleClick;
|
|
548
|
+
insert(_el$106, createComponent(Show, {
|
|
351
549
|
get when() {
|
|
352
550
|
return params.icon;
|
|
353
551
|
},
|
|
354
552
|
get children() {
|
|
355
|
-
|
|
553
|
+
var _el$107 = getNextElement(_tmpl$22);
|
|
554
|
+
insert(_el$107, () => params.icon);
|
|
555
|
+
return _el$107;
|
|
356
556
|
}
|
|
357
|
-
})
|
|
358
|
-
|
|
359
|
-
|
|
557
|
+
}), _el$109, _co$18);
|
|
558
|
+
insert(_el$106, () => params.label, _el$111, _co$19);
|
|
559
|
+
effect((_p$) => {
|
|
560
|
+
var _v$13 = params.action === "submit" ? "submit" : "button", _v$14 = params.disabled, _v$15 = `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
|
|
360
561
|
${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"}
|
|
361
562
|
${params.disabled ? "opacity-50 cursor-not-allowed" : ""}
|
|
362
|
-
${params.size === "sm" ? "px-3 py-1.5 text-xs" : params.size === "lg" ? "px-6 py-3 text-base" : ""}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
563
|
+
${params.size === "sm" ? "px-3 py-1.5 text-xs" : params.size === "lg" ? "px-6 py-3 text-base" : ""}`;
|
|
564
|
+
_v$13 !== _p$.e && setAttribute(_el$106, "type", _p$.e = _v$13);
|
|
565
|
+
_v$14 !== _p$.t && setProperty(_el$106, "disabled", _p$.t = _v$14);
|
|
566
|
+
_v$15 !== _p$.a && className(_el$106, _p$.a = _v$15);
|
|
567
|
+
return _p$;
|
|
568
|
+
}, {
|
|
569
|
+
e: void 0,
|
|
570
|
+
t: void 0,
|
|
571
|
+
a: void 0
|
|
572
|
+
});
|
|
573
|
+
runHydrationEvents();
|
|
574
|
+
return _el$106;
|
|
575
|
+
})();
|
|
370
576
|
}
|
|
371
577
|
const UIResourceRenderer = (props) => {
|
|
372
578
|
const layout = () => {
|
|
@@ -399,18 +605,37 @@ const UIResourceRenderer = (props) => {
|
|
|
399
605
|
return `grid-column: ${colStart} / span ${colSpan}; grid-row: ${rowStart ? `${rowStart} / span ${rowSpan}` : "auto"}`;
|
|
400
606
|
};
|
|
401
607
|
const layoutData = layout();
|
|
402
|
-
return
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
608
|
+
return (() => {
|
|
609
|
+
var _el$112 = getNextElement(_tmpl$25), _el$113 = _el$112.firstChild;
|
|
610
|
+
insert(_el$113, createComponent(For, {
|
|
611
|
+
get each() {
|
|
612
|
+
return layoutData.components;
|
|
613
|
+
},
|
|
614
|
+
children: (component) => (() => {
|
|
615
|
+
var _el$114 = getNextElement(_tmpl$26);
|
|
616
|
+
insert(_el$114, createComponent(ComponentRenderer, {
|
|
617
|
+
component,
|
|
618
|
+
get onError() {
|
|
619
|
+
return props.onError;
|
|
620
|
+
}
|
|
621
|
+
}));
|
|
622
|
+
effect((_$p) => style(_el$114, getGridStyleString(component), _$p));
|
|
623
|
+
return _el$114;
|
|
624
|
+
})()
|
|
625
|
+
}));
|
|
626
|
+
effect((_p$) => {
|
|
627
|
+
var _v$16 = `w-full ${props.class || ""}`, _v$17 = gridContainerStyle();
|
|
628
|
+
_v$16 !== _p$.e && className(_el$112, _p$.e = _v$16);
|
|
629
|
+
_p$.t = style(_el$113, _v$17, _p$.t);
|
|
630
|
+
return _p$;
|
|
631
|
+
}, {
|
|
632
|
+
e: void 0,
|
|
633
|
+
t: void 0
|
|
634
|
+
});
|
|
635
|
+
return _el$112;
|
|
636
|
+
})();
|
|
413
637
|
};
|
|
638
|
+
delegateEvents(["click"]);
|
|
414
639
|
export {
|
|
415
640
|
UIResourceRenderer
|
|
416
641
|
};
|