@seed-ship/mcp-ui-solid 4.0.5 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/components/AgentCard.cjs +122 -0
  2. package/dist/components/AgentCard.cjs.map +1 -0
  3. package/dist/components/AgentCard.d.ts +20 -0
  4. package/dist/components/AgentCard.d.ts.map +1 -0
  5. package/dist/components/AgentCard.js +122 -0
  6. package/dist/components/AgentCard.js.map +1 -0
  7. package/dist/components/AgentHandoff.cjs +49 -0
  8. package/dist/components/AgentHandoff.cjs.map +1 -0
  9. package/dist/components/AgentHandoff.d.ts +12 -0
  10. package/dist/components/AgentHandoff.d.ts.map +1 -0
  11. package/dist/components/AgentHandoff.js +49 -0
  12. package/dist/components/AgentHandoff.js.map +1 -0
  13. package/dist/components/BriefingDiff.cjs +165 -0
  14. package/dist/components/BriefingDiff.cjs.map +1 -0
  15. package/dist/components/BriefingDiff.d.ts +12 -0
  16. package/dist/components/BriefingDiff.d.ts.map +1 -0
  17. package/dist/components/BriefingDiff.js +165 -0
  18. package/dist/components/BriefingDiff.js.map +1 -0
  19. package/dist/components/ScratchpadPanel.cjs +618 -411
  20. package/dist/components/ScratchpadPanel.cjs.map +1 -1
  21. package/dist/components/ScratchpadPanel.d.ts.map +1 -1
  22. package/dist/components/ScratchpadPanel.js +619 -412
  23. package/dist/components/ScratchpadPanel.js.map +1 -1
  24. package/dist/components/SplitStepper.cjs +121 -0
  25. package/dist/components/SplitStepper.cjs.map +1 -0
  26. package/dist/components/SplitStepper.d.ts +12 -0
  27. package/dist/components/SplitStepper.d.ts.map +1 -0
  28. package/dist/components/SplitStepper.js +121 -0
  29. package/dist/components/SplitStepper.js.map +1 -0
  30. package/dist/components/UIResourceRenderer.cjs +1 -2
  31. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  32. package/dist/components/UIResourceRenderer.js +2 -3
  33. package/dist/components/UIResourceRenderer.js.map +1 -1
  34. package/dist/components/index.d.ts +8 -0
  35. package/dist/components/index.d.ts.map +1 -1
  36. package/dist/components.cjs +9 -0
  37. package/dist/components.cjs.map +1 -1
  38. package/dist/components.d.cts +8 -0
  39. package/dist/components.d.ts +8 -0
  40. package/dist/components.js +9 -0
  41. package/dist/components.js.map +1 -1
  42. package/dist/index.cjs +9 -0
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.d.cts +9 -1
  45. package/dist/index.d.ts +9 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +9 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/types/chat-bus.d.ts +81 -1
  50. package/dist/types/chat-bus.d.ts.map +1 -1
  51. package/package.json +1 -1
  52. package/src/components/AgentCard.tsx +109 -0
  53. package/src/components/AgentHandoff.tsx +64 -0
  54. package/src/components/BriefingDiff.tsx +93 -0
  55. package/src/components/ScratchpadPanel.tsx +131 -49
  56. package/src/components/SplitStepper.tsx +111 -0
  57. package/src/components/UIResourceRenderer.tsx +1 -1
  58. package/src/components/index.ts +13 -0
  59. package/src/index.ts +15 -0
  60. package/src/types/chat-bus.ts +70 -1
  61. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const web = require("solid-js/web");
4
+ const solidJs = require("solid-js");
5
+ var _tmpl$ = /* @__PURE__ */ web.template(`<div class=split-stepper><div class="grid gap-3"></div><!$><!/>`), _tmpl$2 = /* @__PURE__ */ web.template(`<div><div class="flex items-center gap-2 mb-2"><span class="font-medium text-sm text-gray-900 dark:text-white truncate"></span><span></span></div><div class=space-y-1>`), _tmpl$3 = /* @__PURE__ */ web.template(`<div class="flex items-center gap-2 text-xs"><span class="flex-shrink-0 w-4 text-center"></span><span>`), _tmpl$4 = /* @__PURE__ */ web.template(`<div class="w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin">`), _tmpl$5 = /* @__PURE__ */ web.template(`<span>`), _tmpl$6 = /* @__PURE__ */ web.template(`<span class=text-gray-400>`), _tmpl$7 = /* @__PURE__ */ web.template(`<div><div class="flex items-center justify-center gap-2 text-sm"><!$><!/><!$><!/><!$><!/><span>`);
6
+ const STEP_ICONS = {
7
+ done: "✅",
8
+ active: "🔄",
9
+ pending: "⏳",
10
+ skipped: "⏭️",
11
+ error: "❌"
12
+ };
13
+ const AGENT_STATUS_COLORS = {
14
+ done: "border-green-400 dark:border-green-600",
15
+ active: "border-blue-400 dark:border-blue-500",
16
+ pending: "border-gray-300 dark:border-gray-600",
17
+ error: "border-red-400 dark:border-red-600"
18
+ };
19
+ function SplitStepper(props) {
20
+ var _a;
21
+ const c = () => props.content;
22
+ if (typeof console !== "undefined") {
23
+ console.info("[MCP-UI:SplitStepper] mounted", {
24
+ agents: c().agents.map((a) => `${a.id}:${a.status}`),
25
+ synthesis: (_a = c().synthesis) == null ? void 0 : _a.status
26
+ });
27
+ }
28
+ return (() => {
29
+ var _el$ = web.getNextElement(_tmpl$), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, [_el$4, _co$] = web.getNextMarker(_el$3.nextSibling);
30
+ web.insert(_el$2, web.createComponent(solidJs.For, {
31
+ get each() {
32
+ return c().agents;
33
+ },
34
+ children: (agent) => (() => {
35
+ var _el$5 = web.getNextElement(_tmpl$2), _el$6 = _el$5.firstChild, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$6.nextSibling;
36
+ web.insert(_el$7, () => agent.name);
37
+ web.insert(_el$9, web.createComponent(solidJs.For, {
38
+ get each() {
39
+ return agent.steps;
40
+ },
41
+ children: (step) => (() => {
42
+ var _el$0 = web.getNextElement(_tmpl$3), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling;
43
+ web.insert(_el$1, () => STEP_ICONS[step.status] || STEP_ICONS.pending);
44
+ web.insert(_el$10, () => step.label);
45
+ web.effect((_$p) => web.classList(_el$10, {
46
+ "text-gray-900 dark:text-white font-medium": step.status === "active",
47
+ "text-gray-500 dark:text-gray-400": step.status !== "active",
48
+ "line-through opacity-50": step.status === "skipped"
49
+ }, _$p));
50
+ return _el$0;
51
+ })()
52
+ }));
53
+ web.effect((_p$) => {
54
+ var _v$ = `rounded-lg border-2 ${AGENT_STATUS_COLORS[agent.status] || AGENT_STATUS_COLORS.pending} p-3`, _v$2 = `w-2 h-2 rounded-full flex-shrink-0 ${agent.status === "done" ? "bg-green-500" : agent.status === "active" ? "bg-blue-500 animate-pulse" : agent.status === "error" ? "bg-red-500" : "bg-gray-400"}`;
55
+ _v$ !== _p$.e && web.className(_el$5, _p$.e = _v$);
56
+ _v$2 !== _p$.t && web.className(_el$8, _p$.t = _v$2);
57
+ return _p$;
58
+ }, {
59
+ e: void 0,
60
+ t: void 0
61
+ });
62
+ return _el$5;
63
+ })()
64
+ }));
65
+ web.insert(_el$, web.createComponent(solidJs.Show, {
66
+ get when() {
67
+ return c().synthesis;
68
+ },
69
+ children: (syn) => (() => {
70
+ var _el$11 = web.getNextElement(_tmpl$7), _el$12 = _el$11.firstChild, _el$17 = _el$12.firstChild, [_el$18, _co$2] = web.getNextMarker(_el$17.nextSibling), _el$19 = _el$18.nextSibling, [_el$20, _co$3] = web.getNextMarker(_el$19.nextSibling), _el$21 = _el$20.nextSibling, [_el$22, _co$4] = web.getNextMarker(_el$21.nextSibling), _el$16 = _el$22.nextSibling;
71
+ web.insert(_el$12, web.createComponent(solidJs.Show, {
72
+ get when() {
73
+ return syn().status === "active";
74
+ },
75
+ get children() {
76
+ return web.getNextElement(_tmpl$4);
77
+ }
78
+ }), _el$18, _co$2);
79
+ web.insert(_el$12, web.createComponent(solidJs.Show, {
80
+ get when() {
81
+ return syn().status === "done";
82
+ },
83
+ get children() {
84
+ var _el$14 = web.getNextElement(_tmpl$5);
85
+ web.insert(_el$14, () => STEP_ICONS.done);
86
+ return _el$14;
87
+ }
88
+ }), _el$20, _co$3);
89
+ web.insert(_el$12, web.createComponent(solidJs.Show, {
90
+ get when() {
91
+ return syn().status === "pending";
92
+ },
93
+ get children() {
94
+ var _el$15 = web.getNextElement(_tmpl$6);
95
+ web.insert(_el$15, () => STEP_ICONS.pending);
96
+ return _el$15;
97
+ }
98
+ }), _el$22, _co$4);
99
+ web.insert(_el$16, () => syn().label);
100
+ web.effect((_p$) => {
101
+ var _v$3 = `mt-3 p-3 rounded-lg border-2 text-center ${syn().status === "done" ? "border-green-400 dark:border-green-600 bg-green-50 dark:bg-green-900/10" : syn().status === "active" ? "border-blue-400 dark:border-blue-500 bg-blue-50 dark:bg-blue-900/10" : "border-dashed border-gray-300 dark:border-gray-600"}`, _v$4 = {
102
+ "font-medium text-blue-700 dark:text-blue-300": syn().status === "active",
103
+ "font-medium text-green-700 dark:text-green-300": syn().status === "done",
104
+ "text-gray-500 dark:text-gray-400": syn().status === "pending"
105
+ };
106
+ _v$3 !== _p$.e && web.className(_el$11, _p$.e = _v$3);
107
+ _p$.t = web.classList(_el$16, _v$4, _p$.t);
108
+ return _p$;
109
+ }, {
110
+ e: void 0,
111
+ t: void 0
112
+ });
113
+ return _el$11;
114
+ })()
115
+ }), _el$4, _co$);
116
+ web.effect((_$p) => web.setStyleProperty(_el$2, "grid-template-columns", `repeat(${Math.min(c().agents.length, 3)}, 1fr)`));
117
+ return _el$;
118
+ })();
119
+ }
120
+ exports.SplitStepper = SplitStepper;
121
+ //# sourceMappingURL=SplitStepper.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitStepper.cjs","sources":["../../src/components/SplitStepper.tsx"],"sourcesContent":["/**\n * SplitStepper — parallel agent steppers side by side\n * v4.1.0: AITL sprint — 2-3 columns, synthesis row at bottom\n *\n * @experimental\n */\n\nimport { For, Show } from 'solid-js'\nimport type { SplitStepperContent } from '../types/chat-bus'\n\nexport interface SplitStepperProps {\n content: SplitStepperContent\n}\n\nconst STEP_ICONS: Record<string, string> = {\n done: '\\u2705',\n active: '\\uD83D\\uDD04',\n pending: '\\u23F3',\n skipped: '\\u23ED\\uFE0F',\n error: '\\u274C',\n}\n\nconst AGENT_STATUS_COLORS: Record<string, string> = {\n done: 'border-green-400 dark:border-green-600',\n active: 'border-blue-400 dark:border-blue-500',\n pending: 'border-gray-300 dark:border-gray-600',\n error: 'border-red-400 dark:border-red-600',\n}\n\nexport function SplitStepper(props: SplitStepperProps) {\n const c = () => props.content\n\n if (typeof console !== 'undefined') {\n console.info('[MCP-UI:SplitStepper] mounted', {\n agents: c().agents.map(a => `${a.id}:${a.status}`),\n synthesis: c().synthesis?.status,\n })\n }\n\n return (\n <div class=\"split-stepper\">\n {/* Agent columns */}\n <div class=\"grid gap-3\" style={{ \"grid-template-columns\": `repeat(${Math.min(c().agents.length, 3)}, 1fr)` }}>\n <For each={c().agents}>\n {(agent) => (\n <div class={`rounded-lg border-2 ${AGENT_STATUS_COLORS[agent.status] || AGENT_STATUS_COLORS.pending} p-3`}>\n {/* Agent header */}\n <div class=\"flex items-center gap-2 mb-2\">\n <span class=\"font-medium text-sm text-gray-900 dark:text-white truncate\">{agent.name}</span>\n <span class={`w-2 h-2 rounded-full flex-shrink-0 ${\n agent.status === 'done' ? 'bg-green-500' :\n agent.status === 'active' ? 'bg-blue-500 animate-pulse' :\n agent.status === 'error' ? 'bg-red-500' :\n 'bg-gray-400'\n }`} />\n </div>\n\n {/* Steps */}\n <div class=\"space-y-1\">\n <For each={agent.steps}>\n {(step) => (\n <div class=\"flex items-center gap-2 text-xs\">\n <span class=\"flex-shrink-0 w-4 text-center\">{STEP_ICONS[step.status] || STEP_ICONS.pending}</span>\n <span classList={{\n 'text-gray-900 dark:text-white font-medium': step.status === 'active',\n 'text-gray-500 dark:text-gray-400': step.status !== 'active',\n 'line-through opacity-50': step.status === 'skipped',\n }}>\n {step.label}\n </span>\n </div>\n )}\n </For>\n </div>\n </div>\n )}\n </For>\n </div>\n\n {/* Synthesis row */}\n <Show when={c().synthesis}>\n {(syn) => (\n <div class={`mt-3 p-3 rounded-lg border-2 text-center ${\n syn().status === 'done' ? 'border-green-400 dark:border-green-600 bg-green-50 dark:bg-green-900/10' :\n syn().status === 'active' ? 'border-blue-400 dark:border-blue-500 bg-blue-50 dark:bg-blue-900/10' :\n 'border-dashed border-gray-300 dark:border-gray-600'\n }`}>\n <div class=\"flex items-center justify-center gap-2 text-sm\">\n <Show when={syn().status === 'active'}>\n <div class=\"w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin\" />\n </Show>\n <Show when={syn().status === 'done'}>\n <span>{STEP_ICONS.done}</span>\n </Show>\n <Show when={syn().status === 'pending'}>\n <span class=\"text-gray-400\">{STEP_ICONS.pending}</span>\n </Show>\n <span classList={{\n 'font-medium text-blue-700 dark:text-blue-300': syn().status === 'active',\n 'font-medium text-green-700 dark:text-green-300': syn().status === 'done',\n 'text-gray-500 dark:text-gray-400': syn().status === 'pending',\n }}>\n {syn().label}\n </span>\n </div>\n </div>\n )}\n </Show>\n </div>\n )\n}\n"],"names":["STEP_ICONS","done","active","pending","skipped","error","AGENT_STATUS_COLORS","SplitStepper","props","c","content","console","info","agents","map","a","id","status","synthesis","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_co$","_$getNextMarker","_$insert","_$createComponent","For","each","children","agent","_el$5","_tmpl$2","_el$6","_el$7","_el$8","_el$9","name","steps","step","_el$0","_tmpl$3","_el$1","_el$10","label","_$effect","_$p","_$classList","_p$","_v$","_v$2","e","_$className","t","undefined","Show","when","syn","_el$11","_tmpl$7","_el$12","_el$17","_el$18","_co$2","_el$19","_el$20","_co$3","_el$21","_el$22","_co$4","_el$16","_tmpl$4","_el$14","_tmpl$5","_el$15","_tmpl$6","_v$3","_v$4","_$setStyleProperty","Math","min","length"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SplitStepper — parallel agent steppers side by side
3
+ * v4.1.0: AITL sprint — 2-3 columns, synthesis row at bottom
4
+ *
5
+ * @experimental
6
+ */
7
+ import type { SplitStepperContent } from '../types/chat-bus';
8
+ export interface SplitStepperProps {
9
+ content: SplitStepperContent;
10
+ }
11
+ export declare function SplitStepper(props: SplitStepperProps): import("solid-js").JSX.Element;
12
+ //# sourceMappingURL=SplitStepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitStepper.d.ts","sourceRoot":"","sources":["../../src/components/SplitStepper.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,mBAAmB,CAAA;CAC7B;AAiBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,kCAiFpD"}
@@ -0,0 +1,121 @@
1
+ import { getNextElement, template, getNextMarker, insert, createComponent, effect, classList, className, setStyleProperty } from "solid-js/web";
2
+ import { For, Show } from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<div class=split-stepper><div class="grid gap-3"></div><!$><!/>`), _tmpl$2 = /* @__PURE__ */ template(`<div><div class="flex items-center gap-2 mb-2"><span class="font-medium text-sm text-gray-900 dark:text-white truncate"></span><span></span></div><div class=space-y-1>`), _tmpl$3 = /* @__PURE__ */ template(`<div class="flex items-center gap-2 text-xs"><span class="flex-shrink-0 w-4 text-center"></span><span>`), _tmpl$4 = /* @__PURE__ */ template(`<div class="w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin">`), _tmpl$5 = /* @__PURE__ */ template(`<span>`), _tmpl$6 = /* @__PURE__ */ template(`<span class=text-gray-400>`), _tmpl$7 = /* @__PURE__ */ template(`<div><div class="flex items-center justify-center gap-2 text-sm"><!$><!/><!$><!/><!$><!/><span>`);
4
+ const STEP_ICONS = {
5
+ done: "✅",
6
+ active: "🔄",
7
+ pending: "⏳",
8
+ skipped: "⏭️",
9
+ error: "❌"
10
+ };
11
+ const AGENT_STATUS_COLORS = {
12
+ done: "border-green-400 dark:border-green-600",
13
+ active: "border-blue-400 dark:border-blue-500",
14
+ pending: "border-gray-300 dark:border-gray-600",
15
+ error: "border-red-400 dark:border-red-600"
16
+ };
17
+ function SplitStepper(props) {
18
+ var _a;
19
+ const c = () => props.content;
20
+ if (typeof console !== "undefined") {
21
+ console.info("[MCP-UI:SplitStepper] mounted", {
22
+ agents: c().agents.map((a) => `${a.id}:${a.status}`),
23
+ synthesis: (_a = c().synthesis) == null ? void 0 : _a.status
24
+ });
25
+ }
26
+ return (() => {
27
+ var _el$ = getNextElement(_tmpl$), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, [_el$4, _co$] = getNextMarker(_el$3.nextSibling);
28
+ insert(_el$2, createComponent(For, {
29
+ get each() {
30
+ return c().agents;
31
+ },
32
+ children: (agent) => (() => {
33
+ var _el$5 = getNextElement(_tmpl$2), _el$6 = _el$5.firstChild, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$6.nextSibling;
34
+ insert(_el$7, () => agent.name);
35
+ insert(_el$9, createComponent(For, {
36
+ get each() {
37
+ return agent.steps;
38
+ },
39
+ children: (step) => (() => {
40
+ var _el$0 = getNextElement(_tmpl$3), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling;
41
+ insert(_el$1, () => STEP_ICONS[step.status] || STEP_ICONS.pending);
42
+ insert(_el$10, () => step.label);
43
+ effect((_$p) => classList(_el$10, {
44
+ "text-gray-900 dark:text-white font-medium": step.status === "active",
45
+ "text-gray-500 dark:text-gray-400": step.status !== "active",
46
+ "line-through opacity-50": step.status === "skipped"
47
+ }, _$p));
48
+ return _el$0;
49
+ })()
50
+ }));
51
+ effect((_p$) => {
52
+ var _v$ = `rounded-lg border-2 ${AGENT_STATUS_COLORS[agent.status] || AGENT_STATUS_COLORS.pending} p-3`, _v$2 = `w-2 h-2 rounded-full flex-shrink-0 ${agent.status === "done" ? "bg-green-500" : agent.status === "active" ? "bg-blue-500 animate-pulse" : agent.status === "error" ? "bg-red-500" : "bg-gray-400"}`;
53
+ _v$ !== _p$.e && className(_el$5, _p$.e = _v$);
54
+ _v$2 !== _p$.t && className(_el$8, _p$.t = _v$2);
55
+ return _p$;
56
+ }, {
57
+ e: void 0,
58
+ t: void 0
59
+ });
60
+ return _el$5;
61
+ })()
62
+ }));
63
+ insert(_el$, createComponent(Show, {
64
+ get when() {
65
+ return c().synthesis;
66
+ },
67
+ children: (syn) => (() => {
68
+ var _el$11 = getNextElement(_tmpl$7), _el$12 = _el$11.firstChild, _el$17 = _el$12.firstChild, [_el$18, _co$2] = getNextMarker(_el$17.nextSibling), _el$19 = _el$18.nextSibling, [_el$20, _co$3] = getNextMarker(_el$19.nextSibling), _el$21 = _el$20.nextSibling, [_el$22, _co$4] = getNextMarker(_el$21.nextSibling), _el$16 = _el$22.nextSibling;
69
+ insert(_el$12, createComponent(Show, {
70
+ get when() {
71
+ return syn().status === "active";
72
+ },
73
+ get children() {
74
+ return getNextElement(_tmpl$4);
75
+ }
76
+ }), _el$18, _co$2);
77
+ insert(_el$12, createComponent(Show, {
78
+ get when() {
79
+ return syn().status === "done";
80
+ },
81
+ get children() {
82
+ var _el$14 = getNextElement(_tmpl$5);
83
+ insert(_el$14, () => STEP_ICONS.done);
84
+ return _el$14;
85
+ }
86
+ }), _el$20, _co$3);
87
+ insert(_el$12, createComponent(Show, {
88
+ get when() {
89
+ return syn().status === "pending";
90
+ },
91
+ get children() {
92
+ var _el$15 = getNextElement(_tmpl$6);
93
+ insert(_el$15, () => STEP_ICONS.pending);
94
+ return _el$15;
95
+ }
96
+ }), _el$22, _co$4);
97
+ insert(_el$16, () => syn().label);
98
+ effect((_p$) => {
99
+ var _v$3 = `mt-3 p-3 rounded-lg border-2 text-center ${syn().status === "done" ? "border-green-400 dark:border-green-600 bg-green-50 dark:bg-green-900/10" : syn().status === "active" ? "border-blue-400 dark:border-blue-500 bg-blue-50 dark:bg-blue-900/10" : "border-dashed border-gray-300 dark:border-gray-600"}`, _v$4 = {
100
+ "font-medium text-blue-700 dark:text-blue-300": syn().status === "active",
101
+ "font-medium text-green-700 dark:text-green-300": syn().status === "done",
102
+ "text-gray-500 dark:text-gray-400": syn().status === "pending"
103
+ };
104
+ _v$3 !== _p$.e && className(_el$11, _p$.e = _v$3);
105
+ _p$.t = classList(_el$16, _v$4, _p$.t);
106
+ return _p$;
107
+ }, {
108
+ e: void 0,
109
+ t: void 0
110
+ });
111
+ return _el$11;
112
+ })()
113
+ }), _el$4, _co$);
114
+ effect((_$p) => setStyleProperty(_el$2, "grid-template-columns", `repeat(${Math.min(c().agents.length, 3)}, 1fr)`));
115
+ return _el$;
116
+ })();
117
+ }
118
+ export {
119
+ SplitStepper
120
+ };
121
+ //# sourceMappingURL=SplitStepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitStepper.js","sources":["../../src/components/SplitStepper.tsx"],"sourcesContent":["/**\n * SplitStepper — parallel agent steppers side by side\n * v4.1.0: AITL sprint — 2-3 columns, synthesis row at bottom\n *\n * @experimental\n */\n\nimport { For, Show } from 'solid-js'\nimport type { SplitStepperContent } from '../types/chat-bus'\n\nexport interface SplitStepperProps {\n content: SplitStepperContent\n}\n\nconst STEP_ICONS: Record<string, string> = {\n done: '\\u2705',\n active: '\\uD83D\\uDD04',\n pending: '\\u23F3',\n skipped: '\\u23ED\\uFE0F',\n error: '\\u274C',\n}\n\nconst AGENT_STATUS_COLORS: Record<string, string> = {\n done: 'border-green-400 dark:border-green-600',\n active: 'border-blue-400 dark:border-blue-500',\n pending: 'border-gray-300 dark:border-gray-600',\n error: 'border-red-400 dark:border-red-600',\n}\n\nexport function SplitStepper(props: SplitStepperProps) {\n const c = () => props.content\n\n if (typeof console !== 'undefined') {\n console.info('[MCP-UI:SplitStepper] mounted', {\n agents: c().agents.map(a => `${a.id}:${a.status}`),\n synthesis: c().synthesis?.status,\n })\n }\n\n return (\n <div class=\"split-stepper\">\n {/* Agent columns */}\n <div class=\"grid gap-3\" style={{ \"grid-template-columns\": `repeat(${Math.min(c().agents.length, 3)}, 1fr)` }}>\n <For each={c().agents}>\n {(agent) => (\n <div class={`rounded-lg border-2 ${AGENT_STATUS_COLORS[agent.status] || AGENT_STATUS_COLORS.pending} p-3`}>\n {/* Agent header */}\n <div class=\"flex items-center gap-2 mb-2\">\n <span class=\"font-medium text-sm text-gray-900 dark:text-white truncate\">{agent.name}</span>\n <span class={`w-2 h-2 rounded-full flex-shrink-0 ${\n agent.status === 'done' ? 'bg-green-500' :\n agent.status === 'active' ? 'bg-blue-500 animate-pulse' :\n agent.status === 'error' ? 'bg-red-500' :\n 'bg-gray-400'\n }`} />\n </div>\n\n {/* Steps */}\n <div class=\"space-y-1\">\n <For each={agent.steps}>\n {(step) => (\n <div class=\"flex items-center gap-2 text-xs\">\n <span class=\"flex-shrink-0 w-4 text-center\">{STEP_ICONS[step.status] || STEP_ICONS.pending}</span>\n <span classList={{\n 'text-gray-900 dark:text-white font-medium': step.status === 'active',\n 'text-gray-500 dark:text-gray-400': step.status !== 'active',\n 'line-through opacity-50': step.status === 'skipped',\n }}>\n {step.label}\n </span>\n </div>\n )}\n </For>\n </div>\n </div>\n )}\n </For>\n </div>\n\n {/* Synthesis row */}\n <Show when={c().synthesis}>\n {(syn) => (\n <div class={`mt-3 p-3 rounded-lg border-2 text-center ${\n syn().status === 'done' ? 'border-green-400 dark:border-green-600 bg-green-50 dark:bg-green-900/10' :\n syn().status === 'active' ? 'border-blue-400 dark:border-blue-500 bg-blue-50 dark:bg-blue-900/10' :\n 'border-dashed border-gray-300 dark:border-gray-600'\n }`}>\n <div class=\"flex items-center justify-center gap-2 text-sm\">\n <Show when={syn().status === 'active'}>\n <div class=\"w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin\" />\n </Show>\n <Show when={syn().status === 'done'}>\n <span>{STEP_ICONS.done}</span>\n </Show>\n <Show when={syn().status === 'pending'}>\n <span class=\"text-gray-400\">{STEP_ICONS.pending}</span>\n </Show>\n <span classList={{\n 'font-medium text-blue-700 dark:text-blue-300': syn().status === 'active',\n 'font-medium text-green-700 dark:text-green-300': syn().status === 'done',\n 'text-gray-500 dark:text-gray-400': syn().status === 'pending',\n }}>\n {syn().label}\n </span>\n </div>\n </div>\n )}\n </Show>\n </div>\n )\n}\n"],"names":["STEP_ICONS","done","active","pending","skipped","error","AGENT_STATUS_COLORS","SplitStepper","props","c","content","console","info","agents","map","a","id","status","synthesis","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_co$","_$getNextMarker","_$insert","_$createComponent","For","each","children","agent","_el$5","_tmpl$2","_el$6","_el$7","_el$8","_el$9","name","steps","step","_el$0","_tmpl$3","_el$1","_el$10","label","_$effect","_$p","_$classList","_p$","_v$","_v$2","e","_$className","t","undefined","Show","when","syn","_el$11","_tmpl$7","_el$12","_el$17","_el$18","_co$2","_el$19","_el$20","_co$3","_el$21","_el$22","_co$4","_el$16","_tmpl$4","_el$14","_tmpl$5","_el$15","_tmpl$6","_v$3","_v$4","_$setStyleProperty","Math","min","length"],"mappings":"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"}
@@ -608,7 +608,7 @@ ${dataRows}`;
608
608
  },
609
609
  children: (column) => (() => {
610
610
  var _el$103 = web.getNextElement(_tmpl$22), _el$104 = _el$103.firstChild, _el$106 = _el$104.firstChild, [_el$107, _co$23] = web.getNextMarker(_el$106.nextSibling), _el$105 = _el$107.nextSibling;
611
- _el$103.$$click = () => handleSort(column.key);
611
+ web.addEventListener(_el$103, "click", () => handleSort(column.key));
612
612
  web.insert(_el$104, () => column.label, _el$107, _co$23);
613
613
  web.insert(_el$105, () => sortIndicator(column.key));
614
614
  web.effect((_p$) => {
@@ -627,7 +627,6 @@ ${dataRows}`;
627
627
  t: void 0,
628
628
  a: void 0
629
629
  });
630
- web.runHydrationEvents();
631
630
  return _el$103;
632
631
  })()
633
632
  }));