@seed-ship/mcp-ui-solid 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/components/ActionRenderer.cjs +34 -0
  3. package/dist/components/ActionRenderer.cjs.map +1 -0
  4. package/dist/components/ActionRenderer.js +34 -0
  5. package/dist/components/ActionRenderer.js.map +1 -0
  6. package/dist/components/ArtifactRenderer.cjs +37 -0
  7. package/dist/components/ArtifactRenderer.cjs.map +1 -0
  8. package/dist/components/ArtifactRenderer.js +37 -0
  9. package/dist/components/ArtifactRenderer.js.map +1 -0
  10. package/dist/components/CarouselRenderer.cjs +58 -0
  11. package/dist/components/CarouselRenderer.cjs.map +1 -0
  12. package/dist/components/CarouselRenderer.js +58 -0
  13. package/dist/components/CarouselRenderer.js.map +1 -0
  14. package/dist/components/UIResourceRenderer.cjs +238 -160
  15. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  16. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  17. package/dist/components/UIResourceRenderer.js +238 -160
  18. package/dist/components/UIResourceRenderer.js.map +1 -1
  19. package/dist/components/index.d.ts +10 -0
  20. package/dist/components/index.d.ts.map +1 -1
  21. package/dist/components.cjs +10 -0
  22. package/dist/components.cjs.map +1 -1
  23. package/dist/components.d.ts +10 -0
  24. package/dist/components.js +10 -0
  25. package/dist/components.js.map +1 -1
  26. package/dist/hooks/useStreamingUI.cjs +4 -1
  27. package/dist/hooks/useStreamingUI.cjs.map +1 -1
  28. package/dist/hooks/useStreamingUI.d.ts +2 -0
  29. package/dist/hooks/useStreamingUI.d.ts.map +1 -1
  30. package/dist/hooks/useStreamingUI.js +4 -1
  31. package/dist/hooks/useStreamingUI.js.map +1 -1
  32. package/dist/index.cjs +4 -0
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/services/component-registry.cjs +211 -1
  37. package/dist/services/component-registry.cjs.map +1 -1
  38. package/dist/services/component-registry.d.ts +25 -0
  39. package/dist/services/component-registry.d.ts.map +1 -1
  40. package/dist/services/component-registry.js +211 -1
  41. package/dist/services/component-registry.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/components/UIResourceRenderer.tsx +79 -3
  44. package/src/components/index.ts +16 -0
  45. package/src/hooks/useStreamingUI.ts +7 -1
  46. package/src/services/component-registry.ts +239 -0
  47. package/tsconfig.tsbuildinfo +1 -1
@@ -7,7 +7,48 @@ import { GridRenderer } from "./GridRenderer.js";
7
7
  import { FooterRenderer } from "./FooterRenderer.js";
8
8
  import { useAction } from "../hooks/useAction.js";
9
9
  import { marked as k } from "../node_modules/.pnpm/marked@16.4.2/node_modules/marked/lib/marked.esm.js";
10
- 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(`<span class="animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full">`), _tmpl$25 = /* @__PURE__ */ template(`<button><!$><!/><!$><!/><!$><!/>`), _tmpl$26 = /* @__PURE__ */ template(`<div><div class="grid gap-4"></div><!$><!/>`), _tmpl$27 = /* @__PURE__ */ template(`<div>`);
10
+ 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>`), _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="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$5 = /* @__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$6 = /* @__PURE__ */ template(`<h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3">`), _tmpl$7 = /* @__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$8 = /* @__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$9 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>Showing <!$><!/> - <!$><!/> of <!$><!/>`), _tmpl$0 = /* @__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 overflow-hidden group"><!$><!/><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$1 = /* @__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$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"><div>`), _tmpl$12 = /* @__PURE__ */ template(`<span class="ml-2 text-sm font-medium text-gray-500 dark:text-gray-400">`), _tmpl$13 = /* @__PURE__ */ template(`<div class="mt-3 flex items-center"><span><!$><!/> <!$><!/>%`), _tmpl$14 = /* @__PURE__ */ template(`<p class="mt-2 text-xs text-gray-500 dark:text-gray-400">`), _tmpl$15 = /* @__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$16 = /* @__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>`), _tmpl$17 = /* @__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$18 = /* @__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$19 = /* @__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$20 = /* @__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$21 = /* @__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$22 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400 truncate">`), _tmpl$23 = /* @__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$24 = /* @__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$25 = /* @__PURE__ */ template(`<span>`), _tmpl$26 = /* @__PURE__ */ template(`<a rel="noopener noreferrer"><!$><!/><!$><!/>`), _tmpl$27 = /* @__PURE__ */ template(`<span class="animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full">`), _tmpl$28 = /* @__PURE__ */ template(`<button><!$><!/><!$><!/><!$><!/>`), _tmpl$29 = /* @__PURE__ */ template(`<div><div class="grid gap-4"></div><!$><!/>`), _tmpl$30 = /* @__PURE__ */ template(`<div>`);
11
+ function CopyButton(props) {
12
+ const [copied, setCopied] = createSignal(false);
13
+ const handleCopy = async () => {
14
+ try {
15
+ await navigator.clipboard.writeText(props.getText());
16
+ setCopied(true);
17
+ setTimeout(() => setCopied(false), 2e3);
18
+ } catch (err) {
19
+ console.error("Failed to copy:", err);
20
+ }
21
+ };
22
+ const positionClasses = () => {
23
+ return props.position === "bottom-right" ? "absolute -right-2 -bottom-3" : "absolute right-2 top-2";
24
+ };
25
+ return (() => {
26
+ var _el$ = getNextElement(_tmpl$2);
27
+ _el$.$$click = handleCopy;
28
+ insert(_el$, createComponent(Show, {
29
+ get when() {
30
+ return !copied();
31
+ },
32
+ get fallback() {
33
+ return getNextElement(_tmpl$3);
34
+ },
35
+ get children() {
36
+ return getNextElement(_tmpl$);
37
+ }
38
+ }));
39
+ effect((_p$) => {
40
+ var _v$ = `${positionClasses()} opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm z-10`, _v$2 = props.title || "Copy";
41
+ _v$ !== _p$.e && className(_el$, _p$.e = _v$);
42
+ _v$2 !== _p$.t && setAttribute(_el$, "title", _p$.t = _v$2);
43
+ return _p$;
44
+ }, {
45
+ e: void 0,
46
+ t: void 0
47
+ });
48
+ runHydrationEvents();
49
+ return _el$;
50
+ })();
51
+ }
11
52
  function ChartRenderer(props) {
12
53
  const [iframeUrl, setIframeUrl] = createSignal();
13
54
  const [isLoading, setIsLoading] = createSignal(true);
@@ -30,42 +71,42 @@ function ChartRenderer(props) {
30
71
  setIsLoading(false);
31
72
  });
32
73
  return (() => {
33
- 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);
34
- insert(_el$, createComponent(Show, {
74
+ var _el$4 = getNextElement(_tmpl$8), _el$14 = _el$4.firstChild, [_el$15, _co$2] = getNextMarker(_el$14.nextSibling), _el$16 = _el$15.nextSibling, [_el$17, _co$3] = getNextMarker(_el$16.nextSibling), _el$18 = _el$17.nextSibling, [_el$19, _co$4] = getNextMarker(_el$18.nextSibling);
75
+ insert(_el$4, createComponent(Show, {
35
76
  get when() {
36
77
  return isLoading();
37
78
  },
38
79
  get children() {
39
- return getNextElement(_tmpl$);
80
+ return getNextElement(_tmpl$4);
40
81
  }
41
- }), _el$12, _co$2);
42
- insert(_el$, createComponent(Show, {
82
+ }), _el$15, _co$2);
83
+ insert(_el$4, createComponent(Show, {
43
84
  get when() {
44
85
  return error();
45
86
  },
46
87
  get children() {
47
- var _el$3 = getNextElement(_tmpl$2), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
48
- insert(_el$6, error);
49
- return _el$3;
88
+ var _el$6 = getNextElement(_tmpl$5), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
89
+ insert(_el$9, error);
90
+ return _el$6;
50
91
  }
51
- }), _el$14, _co$3);
52
- insert(_el$, createComponent(Show, {
92
+ }), _el$17, _co$3);
93
+ insert(_el$4, createComponent(Show, {
53
94
  get when() {
54
95
  return memo(() => !!iframeUrl())() && !error();
55
96
  },
56
97
  get children() {
57
- 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;
58
- insert(_el$7, createComponent(Show, {
98
+ var _el$0 = getNextElement(_tmpl$7), _el$12 = _el$0.firstChild, [_el$13, _co$] = getNextMarker(_el$12.nextSibling), _el$10 = _el$13.nextSibling, _el$11 = _el$10.firstChild;
99
+ insert(_el$0, createComponent(Show, {
59
100
  get when() {
60
101
  return props.component.params.title;
61
102
  },
62
103
  get children() {
63
- var _el$8 = getNextElement(_tmpl$3);
64
- insert(_el$8, () => props.component.params.title);
65
- return _el$8;
104
+ var _el$1 = getNextElement(_tmpl$6);
105
+ insert(_el$1, () => props.component.params.title);
106
+ return _el$1;
66
107
  }
67
- }), _el$10, _co$);
68
- _el$0.addEventListener("error", () => {
108
+ }), _el$13, _co$);
109
+ _el$11.addEventListener("error", () => {
69
110
  var _a;
70
111
  setError("Failed to load chart");
71
112
  (_a = props.onError) == null ? void 0 : _a.call(props, {
@@ -74,11 +115,11 @@ function ChartRenderer(props) {
74
115
  componentId: props.component.id
75
116
  });
76
117
  });
77
- effect(() => setAttribute(_el$0, "src", iframeUrl()));
78
- return _el$7;
118
+ effect(() => setAttribute(_el$11, "src", iframeUrl()));
119
+ return _el$0;
79
120
  }
80
- }), _el$16, _co$4);
81
- return _el$;
121
+ }), _el$19, _co$4);
122
+ return _el$4;
82
123
  })();
83
124
  }
84
125
  function renderCellValue(value) {
@@ -130,109 +171,138 @@ function renderCellValue(value) {
130
171
  }
131
172
  function TableRenderer(props) {
132
173
  const tableParams = props.component.params;
174
+ const getTableText = () => {
175
+ const columns = tableParams.columns || [];
176
+ const rows = tableParams.rows || [];
177
+ const header = columns.map((c) => c.label).join(" ");
178
+ const dataRows = rows.map((row) => columns.map((c) => {
179
+ const value = row[c.key];
180
+ if (value === null || value === void 0) return "";
181
+ if (typeof value === "object") return value.name || value.label || JSON.stringify(value);
182
+ return String(value);
183
+ }).join(" ")).join("\n");
184
+ return `${header}
185
+ ${dataRows}`;
186
+ };
133
187
  return (() => {
134
- 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);
135
- insert(_el$18, createComponent(Show, {
188
+ var _el$20 = getNextElement(_tmpl$0), _el$45 = _el$20.firstChild, [_el$46, _co$0] = getNextMarker(_el$45.nextSibling), _el$21 = _el$46.nextSibling, _el$41 = _el$21.firstChild, [_el$42, _co$8] = getNextMarker(_el$41.nextSibling), _el$23 = _el$42.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$24.firstChild, _el$26 = _el$25.firstChild, _el$27 = _el$25.nextSibling, _el$43 = _el$23.nextSibling, [_el$44, _co$9] = getNextMarker(_el$43.nextSibling);
189
+ insert(_el$20, createComponent(CopyButton, {
190
+ getText: getTableText,
191
+ title: "Copy table data",
192
+ position: "top-right"
193
+ }), _el$46, _co$0);
194
+ insert(_el$21, createComponent(Show, {
136
195
  get when() {
137
196
  return tableParams.title;
138
197
  },
139
198
  get children() {
140
- var _el$19 = getNextElement(_tmpl$3);
141
- insert(_el$19, () => tableParams.title);
142
- return _el$19;
199
+ var _el$22 = getNextElement(_tmpl$6);
200
+ insert(_el$22, () => tableParams.title);
201
+ return _el$22;
143
202
  }
144
- }), _el$39, _co$8);
145
- insert(_el$23, createComponent(For, {
203
+ }), _el$42, _co$8);
204
+ insert(_el$26, createComponent(For, {
146
205
  get each() {
147
206
  return tableParams.columns;
148
207
  },
149
208
  children: (column) => (() => {
150
- var _el$42 = getNextElement(_tmpl$8);
151
- insert(_el$42, () => column.label);
152
- effect((_$p) => style(_el$42, column.width ? {
209
+ var _el$47 = getNextElement(_tmpl$1);
210
+ insert(_el$47, () => column.label);
211
+ effect((_$p) => style(_el$47, column.width ? {
153
212
  width: column.width
154
213
  } : {}, _$p));
155
- return _el$42;
214
+ return _el$47;
156
215
  })()
157
216
  }));
158
- insert(_el$24, createComponent(For, {
217
+ insert(_el$27, createComponent(For, {
159
218
  get each() {
160
219
  return tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows);
161
220
  },
162
221
  children: (row, i) => (() => {
163
- var _el$43 = getNextElement(_tmpl$9);
164
- insert(_el$43, createComponent(For, {
222
+ var _el$48 = getNextElement(_tmpl$10);
223
+ insert(_el$48, createComponent(For, {
165
224
  get each() {
166
225
  return tableParams.columns;
167
226
  },
168
227
  children: (column) => (() => {
169
- var _el$44 = getNextElement(_tmpl$0), _el$45 = _el$44.firstChild;
170
- effect(() => setProperty(_el$45, "innerHTML", renderCellValue(row[column.key])));
171
- return _el$44;
228
+ var _el$49 = getNextElement(_tmpl$11), _el$50 = _el$49.firstChild;
229
+ effect(() => setProperty(_el$50, "innerHTML", renderCellValue(row[column.key])));
230
+ return _el$49;
172
231
  })()
173
232
  }));
174
- 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"}`));
175
- return _el$43;
233
+ effect(() => className(_el$48, `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"}`));
234
+ return _el$48;
176
235
  })()
177
236
  }));
178
- insert(_el$18, createComponent(Show, {
237
+ insert(_el$21, createComponent(Show, {
179
238
  get when() {
180
239
  return tableParams.pagination;
181
240
  },
182
241
  get children() {
183
- 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);
184
- insert(_el$26, () => tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1, _el$33, _co$5);
185
- insert(_el$26, () => Math.min((tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize, tableParams.pagination.totalRows), _el$35, _co$6);
186
- insert(_el$26, () => tableParams.pagination.totalRows, _el$37, _co$7);
187
- return _el$25;
242
+ var _el$28 = getNextElement(_tmpl$9), _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild, _el$35 = _el$30.nextSibling, [_el$36, _co$5] = getNextMarker(_el$35.nextSibling), _el$31 = _el$36.nextSibling, _el$37 = _el$31.nextSibling, [_el$38, _co$6] = getNextMarker(_el$37.nextSibling), _el$33 = _el$38.nextSibling, _el$39 = _el$33.nextSibling, [_el$40, _co$7] = getNextMarker(_el$39.nextSibling);
243
+ insert(_el$29, () => tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1, _el$36, _co$5);
244
+ insert(_el$29, () => Math.min((tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize, tableParams.pagination.totalRows), _el$38, _co$6);
245
+ insert(_el$29, () => tableParams.pagination.totalRows, _el$40, _co$7);
246
+ return _el$28;
188
247
  }
189
- }), _el$41, _co$9);
190
- return _el$17;
248
+ }), _el$44, _co$9);
249
+ return _el$20;
191
250
  })();
192
251
  }
193
252
  function MetricRenderer(props) {
194
253
  const metricParams = props.component.params;
254
+ const getMetricText = () => {
255
+ const title = metricParams.title || metricParams.label || "";
256
+ const value = metricParams.value;
257
+ const unit = metricParams.unit || "";
258
+ return `${title}: ${value}${unit ? " " + unit : ""}`;
259
+ };
195
260
  return (() => {
196
- 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);
197
- insert(_el$49, () => metricParams.title);
198
- insert(_el$51, () => metricParams.value);
199
- insert(_el$50, createComponent(Show, {
261
+ var _el$51 = getNextElement(_tmpl$15), _el$73 = _el$51.firstChild, [_el$74, _co$14] = getNextMarker(_el$73.nextSibling), _el$52 = _el$74.nextSibling, _el$53 = _el$52.firstChild, _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling, _el$56 = _el$55.firstChild, _el$58 = _el$56.nextSibling, [_el$59, _co$1] = getNextMarker(_el$58.nextSibling), _el$69 = _el$53.nextSibling, [_el$70, _co$12] = getNextMarker(_el$69.nextSibling), _el$71 = _el$70.nextSibling, [_el$72, _co$13] = getNextMarker(_el$71.nextSibling);
262
+ insert(_el$51, createComponent(CopyButton, {
263
+ getText: getMetricText,
264
+ title: "Copy metric",
265
+ position: "top-right"
266
+ }), _el$74, _co$14);
267
+ insert(_el$54, () => metricParams.title);
268
+ insert(_el$56, () => metricParams.value);
269
+ insert(_el$55, createComponent(Show, {
200
270
  get when() {
201
271
  return metricParams.unit;
202
272
  },
203
273
  get children() {
204
- var _el$52 = getNextElement(_tmpl$1);
205
- insert(_el$52, () => metricParams.unit);
206
- return _el$52;
274
+ var _el$57 = getNextElement(_tmpl$12);
275
+ insert(_el$57, () => metricParams.unit);
276
+ return _el$57;
207
277
  }
208
- }), _el$54, _co$0);
209
- insert(_el$47, createComponent(Show, {
278
+ }), _el$59, _co$1);
279
+ insert(_el$52, createComponent(Show, {
210
280
  get when() {
211
281
  return metricParams.trend;
212
282
  },
213
283
  get children() {
214
- 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);
215
- _el$62.nextSibling;
216
- insert(_el$56, (() => {
284
+ var _el$60 = getNextElement(_tmpl$13), _el$61 = _el$60.firstChild, _el$64 = _el$61.firstChild, [_el$65, _co$10] = getNextMarker(_el$64.nextSibling), _el$62 = _el$65.nextSibling, _el$66 = _el$62.nextSibling, [_el$67, _co$11] = getNextMarker(_el$66.nextSibling);
285
+ _el$67.nextSibling;
286
+ insert(_el$61, (() => {
217
287
  var _c$ = memo(() => metricParams.trend.direction === "up");
218
288
  return () => _c$() ? "�" : metricParams.trend.direction === "down" ? "�" : "�";
219
- })(), _el$60, _co$1);
220
- insert(_el$56, () => Math.abs(metricParams.trend.value), _el$62, _co$10);
221
- 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"}`));
222
- return _el$55;
289
+ })(), _el$65, _co$10);
290
+ insert(_el$61, () => Math.abs(metricParams.trend.value), _el$67, _co$11);
291
+ effect(() => className(_el$61, `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"}`));
292
+ return _el$60;
223
293
  }
224
- }), _el$65, _co$11);
225
- insert(_el$47, createComponent(Show, {
294
+ }), _el$70, _co$12);
295
+ insert(_el$52, createComponent(Show, {
226
296
  get when() {
227
297
  return metricParams.subtitle;
228
298
  },
229
299
  get children() {
230
- var _el$63 = getNextElement(_tmpl$11);
231
- insert(_el$63, () => metricParams.subtitle);
232
- return _el$63;
300
+ var _el$68 = getNextElement(_tmpl$14);
301
+ insert(_el$68, () => metricParams.subtitle);
302
+ return _el$68;
233
303
  }
234
- }), _el$67, _co$12);
235
- return _el$46;
304
+ }), _el$72, _co$13);
305
+ return _el$51;
236
306
  })();
237
307
  }
238
308
  function extractImageFromMarkdown(content) {
@@ -264,118 +334,126 @@ function TextRenderer(props) {
264
334
  }
265
335
  return textParams.content;
266
336
  });
337
+ const getTextContent = () => {
338
+ return textParams.content || "";
339
+ };
267
340
  return createComponent(Show, {
268
341
  get when() {
269
342
  return imageData();
270
343
  },
271
344
  get fallback() {
272
345
  return (() => {
273
- var _el$68 = getNextElement(_tmpl$13), _el$69 = _el$68.firstChild;
346
+ var _el$75 = getNextElement(_tmpl$16), _el$77 = _el$75.firstChild, [_el$78, _co$15] = getNextMarker(_el$77.nextSibling), _el$76 = _el$78.nextSibling;
347
+ insert(_el$75, createComponent(CopyButton, {
348
+ getText: getTextContent,
349
+ title: "Copy text",
350
+ position: "top-right"
351
+ }), _el$78, _co$15);
274
352
  effect((_p$) => {
275
- var _v$ = `prose prose-sm dark:prose-invert max-w-none ${textParams.className || ""}`, _v$2 = htmlContent();
276
- _v$ !== _p$.e && className(_el$69, _p$.e = _v$);
277
- _v$2 !== _p$.t && setProperty(_el$69, "innerHTML", _p$.t = _v$2);
353
+ var _v$3 = `prose prose-sm dark:prose-invert max-w-none ${textParams.className || ""}`, _v$4 = htmlContent();
354
+ _v$3 !== _p$.e && className(_el$76, _p$.e = _v$3);
355
+ _v$4 !== _p$.t && setProperty(_el$76, "innerHTML", _p$.t = _v$4);
278
356
  return _p$;
279
357
  }, {
280
358
  e: void 0,
281
359
  t: void 0
282
360
  });
283
- return _el$68;
361
+ return _el$75;
284
362
  })();
285
363
  },
286
364
  children: (data) => (() => {
287
- 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;
288
- insert(_el$75, () => data().credit);
365
+ var _el$79 = getNextElement(_tmpl$17), _el$80 = _el$79.firstChild, _el$81 = _el$80.firstChild, _el$82 = _el$81.firstChild, _el$83 = _el$80.nextSibling, _el$84 = _el$83.firstChild;
366
+ insert(_el$84, () => data().credit);
289
367
  effect((_p$) => {
290
- var _v$3 = data().linkUrl, _v$4 = data().imageUrl, _v$5 = data().alt;
291
- _v$3 !== _p$.e && setAttribute(_el$72, "href", _p$.e = _v$3);
292
- _v$4 !== _p$.t && setAttribute(_el$73, "src", _p$.t = _v$4);
293
- _v$5 !== _p$.a && setAttribute(_el$73, "alt", _p$.a = _v$5);
368
+ var _v$5 = data().linkUrl, _v$6 = data().imageUrl, _v$7 = data().alt;
369
+ _v$5 !== _p$.e && setAttribute(_el$81, "href", _p$.e = _v$5);
370
+ _v$6 !== _p$.t && setAttribute(_el$82, "src", _p$.t = _v$6);
371
+ _v$7 !== _p$.a && setAttribute(_el$82, "alt", _p$.a = _v$7);
294
372
  return _p$;
295
373
  }, {
296
374
  e: void 0,
297
375
  t: void 0,
298
376
  a: void 0
299
377
  });
300
- return _el$70;
378
+ return _el$79;
301
379
  })()
302
380
  });
303
381
  }
304
382
  function IframeRenderer(props) {
305
383
  const params = props.component.params;
306
384
  return (() => {
307
- var _el$76 = getNextElement(_tmpl$16), _el$80 = _el$76.firstChild, [_el$81, _co$13] = getNextMarker(_el$80.nextSibling), _el$79 = _el$81.nextSibling;
308
- insert(_el$76, createComponent(Show, {
385
+ var _el$85 = getNextElement(_tmpl$19), _el$89 = _el$85.firstChild, [_el$90, _co$16] = getNextMarker(_el$89.nextSibling), _el$88 = _el$90.nextSibling;
386
+ insert(_el$85, createComponent(Show, {
309
387
  get when() {
310
388
  return params.title;
311
389
  },
312
390
  get children() {
313
- var _el$77 = getNextElement(_tmpl$15), _el$78 = _el$77.firstChild;
314
- insert(_el$78, () => params.title);
315
- return _el$77;
391
+ var _el$86 = getNextElement(_tmpl$18), _el$87 = _el$86.firstChild;
392
+ insert(_el$87, () => params.title);
393
+ return _el$86;
316
394
  }
317
- }), _el$81, _co$13);
395
+ }), _el$90, _co$16);
318
396
  effect((_p$) => {
319
- var _v$6 = params.url, _v$7 = params.title || "Embedded content", _v$8 = `height: ${params.height || "400px"}; min-height: 300px;`;
320
- _v$6 !== _p$.e && setAttribute(_el$79, "src", _p$.e = _v$6);
321
- _v$7 !== _p$.t && setAttribute(_el$79, "title", _p$.t = _v$7);
322
- _p$.a = style(_el$79, _v$8, _p$.a);
397
+ var _v$8 = params.url, _v$9 = params.title || "Embedded content", _v$0 = `height: ${params.height || "400px"}; min-height: 300px;`;
398
+ _v$8 !== _p$.e && setAttribute(_el$88, "src", _p$.e = _v$8);
399
+ _v$9 !== _p$.t && setAttribute(_el$88, "title", _p$.t = _v$9);
400
+ _p$.a = style(_el$88, _v$0, _p$.a);
323
401
  return _p$;
324
402
  }, {
325
403
  e: void 0,
326
404
  t: void 0,
327
405
  a: void 0
328
406
  });
329
- return _el$76;
407
+ return _el$85;
330
408
  })();
331
409
  }
332
410
  function ImageRenderer(props) {
333
411
  const params = props.component.params;
334
412
  return (() => {
335
- 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);
336
- insert(_el$82, createComponent(Show, {
413
+ var _el$91 = getNextElement(_tmpl$21), _el$92 = _el$91.firstChild, _el$93 = _el$92.firstChild, _el$94 = _el$93.firstChild, _el$97 = _el$92.nextSibling, [_el$98, _co$17] = getNextMarker(_el$97.nextSibling);
414
+ insert(_el$91, createComponent(Show, {
337
415
  get when() {
338
416
  return params.caption;
339
417
  },
340
418
  get children() {
341
- var _el$86 = getNextElement(_tmpl$17), _el$87 = _el$86.firstChild;
342
- insert(_el$87, () => params.caption);
343
- return _el$86;
419
+ var _el$95 = getNextElement(_tmpl$20), _el$96 = _el$95.firstChild;
420
+ insert(_el$96, () => params.caption);
421
+ return _el$95;
344
422
  }
345
- }), _el$89, _co$14);
423
+ }), _el$98, _co$17);
346
424
  effect((_p$) => {
347
- var _v$9 = params.url, _v$0 = params.url, _v$1 = params.alt || "Image";
348
- _v$9 !== _p$.e && setAttribute(_el$84, "href", _p$.e = _v$9);
349
- _v$0 !== _p$.t && setAttribute(_el$85, "src", _p$.t = _v$0);
350
- _v$1 !== _p$.a && setAttribute(_el$85, "alt", _p$.a = _v$1);
425
+ var _v$1 = params.url, _v$10 = params.url, _v$11 = params.alt || "Image";
426
+ _v$1 !== _p$.e && setAttribute(_el$93, "href", _p$.e = _v$1);
427
+ _v$10 !== _p$.t && setAttribute(_el$94, "src", _p$.t = _v$10);
428
+ _v$11 !== _p$.a && setAttribute(_el$94, "alt", _p$.a = _v$11);
351
429
  return _p$;
352
430
  }, {
353
431
  e: void 0,
354
432
  t: void 0,
355
433
  a: void 0
356
434
  });
357
- return _el$82;
435
+ return _el$91;
358
436
  })();
359
437
  }
360
438
  function LinkRenderer(props) {
361
439
  const params = props.component.params;
362
440
  return (() => {
363
- 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);
364
- _el$90.$$click = (e) => e.stopPropagation();
365
- insert(_el$93, () => params.label || params.url);
366
- insert(_el$92, createComponent(Show, {
441
+ var _el$99 = getNextElement(_tmpl$23), _el$100 = _el$99.firstChild, _el$101 = _el$100.nextSibling, _el$102 = _el$101.firstChild, _el$104 = _el$102.nextSibling, [_el$105, _co$18] = getNextMarker(_el$104.nextSibling);
442
+ _el$99.$$click = (e) => e.stopPropagation();
443
+ insert(_el$102, () => params.label || params.url);
444
+ insert(_el$101, createComponent(Show, {
367
445
  get when() {
368
446
  return params.description;
369
447
  },
370
448
  get children() {
371
- var _el$94 = getNextElement(_tmpl$19);
372
- insert(_el$94, () => params.description);
373
- return _el$94;
449
+ var _el$103 = getNextElement(_tmpl$22);
450
+ insert(_el$103, () => params.description);
451
+ return _el$103;
374
452
  }
375
- }), _el$96, _co$15);
376
- effect(() => setAttribute(_el$90, "href", params.url));
453
+ }), _el$105, _co$18);
454
+ effect(() => setAttribute(_el$99, "href", params.url));
377
455
  runHydrationEvents();
378
- return _el$90;
456
+ return _el$99;
379
457
  })();
380
458
  }
381
459
  function ComponentRenderer(props) {
@@ -389,12 +467,12 @@ function ComponentRenderer(props) {
389
467
  details: validation.errors
390
468
  });
391
469
  return (() => {
392
- var _el$97 = getNextElement(_tmpl$21), _el$98 = _el$97.firstChild, _el$99 = _el$98.nextSibling;
393
- insert(_el$99, () => {
470
+ var _el$106 = getNextElement(_tmpl$24), _el$107 = _el$106.firstChild, _el$108 = _el$107.nextSibling;
471
+ insert(_el$108, () => {
394
472
  var _a2, _b;
395
473
  return ((_b = (_a2 = validation.errors) == null ? void 0 : _a2[0]) == null ? void 0 : _b.message) || "Unknown validation error";
396
474
  });
397
- return _el$97;
475
+ return _el$106;
398
476
  })();
399
477
  }
400
478
  return createComponent(GenerativeUIErrorBoundary, {
@@ -536,25 +614,25 @@ function ActionRenderer(props) {
536
614
  const isDisabled = () => params.disabled || params.action === "tool-call" && isExecuting();
537
615
  if (params.type === "link" || params.action === "link") {
538
616
  return (() => {
539
- 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);
540
- _el$100.$$click = handleClick;
541
- insert(_el$100, createComponent(Show, {
617
+ var _el$109 = getNextElement(_tmpl$26), _el$111 = _el$109.firstChild, [_el$112, _co$19] = getNextMarker(_el$111.nextSibling), _el$113 = _el$112.nextSibling, [_el$114, _co$20] = getNextMarker(_el$113.nextSibling);
618
+ _el$109.$$click = handleClick;
619
+ insert(_el$109, createComponent(Show, {
542
620
  get when() {
543
621
  return params.icon;
544
622
  },
545
623
  get children() {
546
- var _el$101 = getNextElement(_tmpl$22);
547
- insert(_el$101, () => params.icon);
548
- return _el$101;
624
+ var _el$110 = getNextElement(_tmpl$25);
625
+ insert(_el$110, () => params.icon);
626
+ return _el$110;
549
627
  }
550
- }), _el$103, _co$16);
551
- insert(_el$100, () => params.label, _el$105, _co$17);
628
+ }), _el$112, _co$19);
629
+ insert(_el$109, () => params.label, _el$114, _co$20);
552
630
  effect((_p$) => {
553
- 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
631
+ var _v$12 = params.url || "#", _v$13 = params.url ? "_blank" : void 0, _v$14 = `inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors
554
632
  ${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"}`;
555
- _v$10 !== _p$.e && setAttribute(_el$100, "href", _p$.e = _v$10);
556
- _v$11 !== _p$.t && setAttribute(_el$100, "target", _p$.t = _v$11);
557
- _v$12 !== _p$.a && className(_el$100, _p$.a = _v$12);
633
+ _v$12 !== _p$.e && setAttribute(_el$109, "href", _p$.e = _v$12);
634
+ _v$13 !== _p$.t && setAttribute(_el$109, "target", _p$.t = _v$13);
635
+ _v$14 !== _p$.a && className(_el$109, _p$.a = _v$14);
558
636
  return _p$;
559
637
  }, {
560
638
  e: void 0,
@@ -562,39 +640,39 @@ function ActionRenderer(props) {
562
640
  a: void 0
563
641
  });
564
642
  runHydrationEvents();
565
- return _el$100;
643
+ return _el$109;
566
644
  })();
567
645
  }
568
646
  return (() => {
569
- var _el$106 = getNextElement(_tmpl$25), _el$109 = _el$106.firstChild, [_el$110, _co$18] = getNextMarker(_el$109.nextSibling), _el$111 = _el$110.nextSibling, [_el$112, _co$19] = getNextMarker(_el$111.nextSibling), _el$113 = _el$112.nextSibling, [_el$114, _co$20] = getNextMarker(_el$113.nextSibling);
570
- _el$106.$$click = handleClick;
571
- insert(_el$106, createComponent(Show, {
647
+ var _el$115 = getNextElement(_tmpl$28), _el$118 = _el$115.firstChild, [_el$119, _co$21] = getNextMarker(_el$118.nextSibling), _el$120 = _el$119.nextSibling, [_el$121, _co$22] = getNextMarker(_el$120.nextSibling), _el$122 = _el$121.nextSibling, [_el$123, _co$23] = getNextMarker(_el$122.nextSibling);
648
+ _el$115.$$click = handleClick;
649
+ insert(_el$115, createComponent(Show, {
572
650
  get when() {
573
651
  return memo(() => !!isExecuting())() && params.action === "tool-call";
574
652
  },
575
653
  get children() {
576
- return getNextElement(_tmpl$24);
654
+ return getNextElement(_tmpl$27);
577
655
  }
578
- }), _el$110, _co$18);
579
- insert(_el$106, createComponent(Show, {
656
+ }), _el$119, _co$21);
657
+ insert(_el$115, createComponent(Show, {
580
658
  get when() {
581
659
  return memo(() => !!params.icon)() && !(isExecuting() && params.action === "tool-call");
582
660
  },
583
661
  get children() {
584
- var _el$108 = getNextElement(_tmpl$22);
585
- insert(_el$108, () => params.icon);
586
- return _el$108;
662
+ var _el$117 = getNextElement(_tmpl$25);
663
+ insert(_el$117, () => params.icon);
664
+ return _el$117;
587
665
  }
588
- }), _el$112, _co$19);
589
- insert(_el$106, () => params.label, _el$114, _co$20);
666
+ }), _el$121, _co$22);
667
+ insert(_el$115, () => params.label, _el$123, _co$23);
590
668
  effect((_p$) => {
591
- var _v$13 = params.action === "submit" ? "submit" : "button", _v$14 = isDisabled(), _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
669
+ var _v$15 = params.action === "submit" ? "submit" : "button", _v$16 = isDisabled(), _v$17 = `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
592
670
  ${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"}
593
671
  ${isDisabled() ? "opacity-50 cursor-not-allowed" : ""}
594
672
  ${params.size === "sm" ? "px-3 py-1.5 text-xs" : params.size === "lg" ? "px-6 py-3 text-base" : ""}`;
595
- _v$13 !== _p$.e && setAttribute(_el$106, "type", _p$.e = _v$13);
596
- _v$14 !== _p$.t && setProperty(_el$106, "disabled", _p$.t = _v$14);
597
- _v$15 !== _p$.a && className(_el$106, _p$.a = _v$15);
673
+ _v$15 !== _p$.e && setAttribute(_el$115, "type", _p$.e = _v$15);
674
+ _v$16 !== _p$.t && setProperty(_el$115, "disabled", _p$.t = _v$16);
675
+ _v$17 !== _p$.a && className(_el$115, _p$.a = _v$17);
598
676
  return _p$;
599
677
  }, {
600
678
  e: void 0,
@@ -602,7 +680,7 @@ function ActionRenderer(props) {
602
680
  a: void 0
603
681
  });
604
682
  runHydrationEvents();
605
- return _el$106;
683
+ return _el$115;
606
684
  })();
607
685
  }
608
686
  const UIResourceRenderer = (props) => {
@@ -662,24 +740,24 @@ const UIResourceRenderer = (props) => {
662
740
  });
663
741
  const layoutData = layout();
664
742
  return (() => {
665
- var _el$115 = getNextElement(_tmpl$26), _el$116 = _el$115.firstChild, _el$117 = _el$116.nextSibling, [_el$118, _co$21] = getNextMarker(_el$117.nextSibling);
666
- insert(_el$116, createComponent(For, {
743
+ var _el$124 = getNextElement(_tmpl$29), _el$125 = _el$124.firstChild, _el$126 = _el$125.nextSibling, [_el$127, _co$24] = getNextMarker(_el$126.nextSibling);
744
+ insert(_el$125, createComponent(For, {
667
745
  get each() {
668
746
  return layoutData.components;
669
747
  },
670
748
  children: (component) => (() => {
671
- var _el$119 = getNextElement(_tmpl$27);
672
- insert(_el$119, createComponent(ComponentRenderer, {
749
+ var _el$128 = getNextElement(_tmpl$30);
750
+ insert(_el$128, createComponent(ComponentRenderer, {
673
751
  component,
674
752
  get onError() {
675
753
  return props.onError;
676
754
  }
677
755
  }));
678
- effect((_$p) => style(_el$119, getGridStyleString(component), _$p));
679
- return _el$119;
756
+ effect((_$p) => style(_el$128, getGridStyleString(component), _$p));
757
+ return _el$128;
680
758
  })()
681
759
  }));
682
- insert(_el$115, createComponent(Show, {
760
+ insert(_el$124, createComponent(Show, {
683
761
  get when() {
684
762
  return shouldShowAutoFooter();
685
763
  },
@@ -690,17 +768,17 @@ const UIResourceRenderer = (props) => {
690
768
  }
691
769
  });
692
770
  }
693
- }), _el$118, _co$21);
771
+ }), _el$127, _co$24);
694
772
  effect((_p$) => {
695
- var _v$16 = `w-full ${props.class || ""}`, _v$17 = gridContainerStyle();
696
- _v$16 !== _p$.e && className(_el$115, _p$.e = _v$16);
697
- _p$.t = style(_el$116, _v$17, _p$.t);
773
+ var _v$18 = `w-full ${props.class || ""}`, _v$19 = gridContainerStyle();
774
+ _v$18 !== _p$.e && className(_el$124, _p$.e = _v$18);
775
+ _p$.t = style(_el$125, _v$19, _p$.t);
698
776
  return _p$;
699
777
  }, {
700
778
  e: void 0,
701
779
  t: void 0
702
780
  });
703
- return _el$115;
781
+ return _el$124;
704
782
  })();
705
783
  };
706
784
  delegateEvents(["click"]);