@lumea-labs/orchestrator 0.1.0 → 0.1.1

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 (38) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/orchestrator-document.d.ts +2 -2
  3. package/dist/orchestrator-document.js +2 -1
  4. package/dist/plan-detail.d.ts +6 -6
  5. package/dist/plan-detail.js +214 -156
  6. package/dist/plan-graph.d.ts +2 -2
  7. package/dist/plan-graph.js +178 -119
  8. package/dist/plan-node-detail.d.ts +4 -4
  9. package/dist/plan-node-detail.js +177 -125
  10. package/dist/plan-task-detail.d.ts +2 -2
  11. package/dist/plan-task-detail.js +282 -172
  12. package/dist/run-kanban-filter-menu.d.ts +3 -2
  13. package/dist/run-kanban-filter-menu.js +96 -77
  14. package/dist/run-kanban.d.ts +3 -3
  15. package/dist/run-kanban.js +93 -79
  16. package/dist/swarm-agent-badge.d.ts +2 -2
  17. package/dist/swarm-agent-badge.js +21 -18
  18. package/dist/swarm-run-activity.d.ts +2 -2
  19. package/dist/swarm-run-activity.js +150 -95
  20. package/dist/swarm-run-card.d.ts +2 -2
  21. package/dist/swarm-run-card.js +76 -55
  22. package/dist/swarm-run-detail.d.ts +2 -2
  23. package/dist/swarm-run-detail.js +415 -310
  24. package/dist/swarm-run-list.d.ts +2 -2
  25. package/dist/swarm-run-list.js +37 -27
  26. package/dist/swarm-run-row.d.ts +2 -2
  27. package/dist/swarm-run-row.js +82 -72
  28. package/dist/swarm-skeletons.d.ts +3 -3
  29. package/dist/swarm-skeletons.js +65 -16
  30. package/dist/swarm-status-bar.d.ts +2 -2
  31. package/dist/swarm-status-bar.js +62 -44
  32. package/dist/swarm-status-pill.d.ts +2 -2
  33. package/dist/swarm-status-pill.js +14 -11
  34. package/dist/swarm-timeline.d.ts +2 -2
  35. package/dist/swarm-timeline.js +284 -225
  36. package/dist/task-workspace-sidebar.d.ts +2 -2
  37. package/dist/task-workspace-sidebar.js +145 -113
  38. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
3
  import "@xyflow/react/dist/style.css";
3
4
  import { useEffect, useMemo } from "react";
4
5
  import {
@@ -59,21 +60,24 @@ function joinClasses(...parts) {
59
60
  return parts.filter(Boolean).join(" ");
60
61
  }
61
62
  function HandlesTB() {
62
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
63
- Handle,
64
- {
65
- type: "target",
66
- position: Position.Top,
67
- className: "!h-2 !w-2 !border-p-line !bg-p-surface"
68
- }
69
- ), /* @__PURE__ */ React.createElement(
70
- Handle,
71
- {
72
- type: "source",
73
- position: Position.Bottom,
74
- className: "!h-2 !w-2 !border-p-line !bg-p-surface"
75
- }
76
- ));
63
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
64
+ /* @__PURE__ */ jsx(
65
+ Handle,
66
+ {
67
+ type: "target",
68
+ position: Position.Top,
69
+ className: "!h-2 !w-2 !border-p-line !bg-p-surface"
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsx(
73
+ Handle,
74
+ {
75
+ type: "source",
76
+ position: Position.Bottom,
77
+ className: "!h-2 !w-2 !border-p-line !bg-p-surface"
78
+ }
79
+ )
80
+ ] });
77
81
  }
78
82
  function TaskNode({ data, selected }) {
79
83
  const { plan, runtime, agent, labels, onOpen } = data;
@@ -82,7 +86,7 @@ function TaskNode({ data, selected }) {
82
86
  const Icon = STATUS_ICON[status];
83
87
  const assigneeName = agent?.displayName ?? plan.assignTo ?? runtime?.agentName ?? "\u2014";
84
88
  const canOpen = !!onOpen;
85
- return /* @__PURE__ */ React.createElement(
89
+ return /* @__PURE__ */ jsxs(
86
90
  "div",
87
91
  {
88
92
  onClick: () => {
@@ -105,36 +109,58 @@ function TaskNode({ data, selected }) {
105
109
  boxShadow: selected ? `0 0 0 3px ${color}, 0 0 0 8px ${color}40, 0 22px 48px -18px rgba(15,15,15,0.38)` : "none",
106
110
  transform: selected ? "scale(1.02)" : "scale(1)",
107
111
  backgroundColor: selected ? `color-mix(in srgb, ${color} 5%, var(--surface))` : "var(--surface)"
108
- }
109
- },
110
- /* @__PURE__ */ React.createElement(HandlesTB, null),
111
- /* @__PURE__ */ React.createElement("div", { className: "absolute -top-2 left-3 bg-p-surface px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-p-ink-3" }, labels.task),
112
- /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-1.5 px-4 py-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React.createElement(Icon, { className: "size-3 shrink-0", style: { color } }), /* @__PURE__ */ React.createElement(
113
- "span",
114
- {
115
- className: "font-mono text-[9px] font-bold uppercase tracking-[0.18em]",
116
- style: { color }
117
- },
118
- labels.status[status]
119
- ), runtime?.phase && runtime.phase !== "execution" && /* @__PURE__ */ React.createElement("span", { className: "ml-auto font-mono text-[9px] uppercase tracking-[0.14em] text-p-ink-3" }, "\xB7 ", runtime.phase)), /* @__PURE__ */ React.createElement(
120
- "div",
121
- {
122
- className: "font-display text-[14.5px] font-bold leading-[1.15] tracking-[-0.01em] text-p-ink",
123
- style: {
124
- display: "-webkit-box",
125
- WebkitLineClamp: 2,
126
- WebkitBoxOrient: "vertical",
127
- overflow: "hidden"
128
- }
129
112
  },
130
- plan.title
131
- ), /* @__PURE__ */ React.createElement("div", { className: "mt-0.5 flex items-center justify-between gap-2 font-mono text-[10px] uppercase tracking-[0.14em] text-p-ink-3" }, /* @__PURE__ */ React.createElement("span", { className: "truncate" }, assigneeName), /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-1.5 shrink-0" }, runtime?.sideEffects && /* @__PURE__ */ React.createElement(
132
- "span",
133
- {
134
- title: "side effects",
135
- className: "inline-flex size-1.5 rounded-full bg-[#E63946]"
136
- }
137
- ), typeof runtime?.priority === "number" && runtime.priority !== 1 && /* @__PURE__ */ React.createElement("span", { className: "text-p-ink-2" }, runtime.priority, "\xD7"))))
113
+ children: [
114
+ /* @__PURE__ */ jsx(HandlesTB, {}),
115
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-2 left-3 bg-p-surface px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-p-ink-3", children: labels.task }),
116
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 px-4 py-3", children: [
117
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
118
+ /* @__PURE__ */ jsx(Icon, { className: "size-3 shrink-0", style: { color } }),
119
+ /* @__PURE__ */ jsx(
120
+ "span",
121
+ {
122
+ className: "font-mono text-[9px] font-bold uppercase tracking-[0.18em]",
123
+ style: { color },
124
+ children: labels.status[status]
125
+ }
126
+ ),
127
+ runtime?.phase && runtime.phase !== "execution" && /* @__PURE__ */ jsxs("span", { className: "ml-auto font-mono text-[9px] uppercase tracking-[0.14em] text-p-ink-3", children: [
128
+ "\xB7 ",
129
+ runtime.phase
130
+ ] })
131
+ ] }),
132
+ /* @__PURE__ */ jsx(
133
+ "div",
134
+ {
135
+ className: "font-display text-[14.5px] font-bold leading-[1.15] tracking-[-0.01em] text-p-ink",
136
+ style: {
137
+ display: "-webkit-box",
138
+ WebkitLineClamp: 2,
139
+ WebkitBoxOrient: "vertical",
140
+ overflow: "hidden"
141
+ },
142
+ children: plan.title
143
+ }
144
+ ),
145
+ /* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex items-center justify-between gap-2 font-mono text-[10px] uppercase tracking-[0.14em] text-p-ink-3", children: [
146
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: assigneeName }),
147
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 shrink-0", children: [
148
+ runtime?.sideEffects && /* @__PURE__ */ jsx(
149
+ "span",
150
+ {
151
+ title: "side effects",
152
+ className: "inline-flex size-1.5 rounded-full bg-[#E63946]"
153
+ }
154
+ ),
155
+ typeof runtime?.priority === "number" && runtime.priority !== 1 && /* @__PURE__ */ jsxs("span", { className: "text-p-ink-2", children: [
156
+ runtime.priority,
157
+ "\xD7"
158
+ ] })
159
+ ] })
160
+ ] })
161
+ ] })
162
+ ]
163
+ }
138
164
  );
139
165
  }
140
166
  function CheckpointNode({
@@ -143,7 +169,7 @@ function CheckpointNode({
143
169
  }) {
144
170
  const { cp, labels, onOpen } = data;
145
171
  const canOpen = !!onOpen;
146
- return /* @__PURE__ */ React.createElement(
172
+ return /* @__PURE__ */ jsxs(
147
173
  "div",
148
174
  {
149
175
  onClick: canOpen ? () => onOpen(cp.name) : void 0,
@@ -157,30 +183,35 @@ function CheckpointNode({
157
183
  style: {
158
184
  boxShadow: selected ? "0 0 0 3px #D4A017, 0 0 0 8px #D4A01740, 0 22px 48px -18px rgba(15,15,15,0.38)" : "none",
159
185
  transform: selected ? "scale(1.02)" : "scale(1)"
160
- }
161
- },
162
- /* @__PURE__ */ React.createElement(HandlesTB, null),
163
- /* @__PURE__ */ React.createElement("div", { className: "absolute -top-2 left-3 bg-[#FDF8E8] px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-[#8A6B0B]" }, labels.checkpoint),
164
- /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React.createElement(Hourglass, { className: "size-3 shrink-0 text-[#8A6B0B]" }), /* @__PURE__ */ React.createElement("span", { className: "truncate font-display text-[13.5px] font-bold leading-tight text-p-ink" }, cp.name)),
165
- cp.message && /* @__PURE__ */ React.createElement(
166
- "p",
167
- {
168
- className: "mt-1.5 text-[11.5px] leading-snug text-[#8A6B0B]",
169
- style: {
170
- display: "-webkit-box",
171
- WebkitLineClamp: 2,
172
- WebkitBoxOrient: "vertical",
173
- overflow: "hidden"
174
- }
175
186
  },
176
- cp.message
177
- )
187
+ children: [
188
+ /* @__PURE__ */ jsx(HandlesTB, {}),
189
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-2 left-3 bg-[#FDF8E8] px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-[#8A6B0B]", children: labels.checkpoint }),
190
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
191
+ /* @__PURE__ */ jsx(Hourglass, { className: "size-3 shrink-0 text-[#8A6B0B]" }),
192
+ /* @__PURE__ */ jsx("span", { className: "truncate font-display text-[13.5px] font-bold leading-tight text-p-ink", children: cp.name })
193
+ ] }),
194
+ cp.message && /* @__PURE__ */ jsx(
195
+ "p",
196
+ {
197
+ className: "mt-1.5 text-[11.5px] leading-snug text-[#8A6B0B]",
198
+ style: {
199
+ display: "-webkit-box",
200
+ WebkitLineClamp: 2,
201
+ WebkitBoxOrient: "vertical",
202
+ overflow: "hidden"
203
+ },
204
+ children: cp.message
205
+ }
206
+ )
207
+ ]
208
+ }
178
209
  );
179
210
  }
180
211
  function GateNode({ data, selected }) {
181
212
  const { gate, labels, onOpen } = data;
182
213
  const canOpen = !!onOpen;
183
- return /* @__PURE__ */ React.createElement(
214
+ return /* @__PURE__ */ jsxs(
184
215
  "div",
185
216
  {
186
217
  onClick: canOpen ? () => onOpen(gate.name) : void 0,
@@ -194,18 +225,33 @@ function GateNode({ data, selected }) {
194
225
  style: {
195
226
  boxShadow: selected ? "0 0 0 3px var(--p-accent), 0 0 0 8px color-mix(in srgb, var(--p-accent) 28%, transparent), 0 22px 48px -18px rgba(15,15,15,0.38)" : "none",
196
227
  transform: selected ? "scale(1.02)" : "scale(1)"
197
- }
198
- },
199
- /* @__PURE__ */ React.createElement(HandlesTB, null),
200
- /* @__PURE__ */ React.createElement("div", { className: "absolute -top-2 left-3 bg-p-accent-light px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-p-accent" }, labels.qualityGate),
201
- /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React.createElement(ShieldCheck, { className: "size-3 shrink-0 text-p-accent" }), /* @__PURE__ */ React.createElement("span", { className: "truncate font-display text-[13.5px] font-bold leading-tight text-p-ink" }, gate.name)),
202
- /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 flex flex-wrap gap-1 font-mono text-[10px] uppercase tracking-[0.14em] text-p-accent" }, typeof gate.minScore === "number" && /* @__PURE__ */ React.createElement("span", null, labels.qualityMinScore, " ", gate.minScore), gate.requireAllPassed && /* @__PURE__ */ React.createElement("span", null, "\xB7 ", labels.qualityRequireAll))
228
+ },
229
+ children: [
230
+ /* @__PURE__ */ jsx(HandlesTB, {}),
231
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-2 left-3 bg-p-accent-light px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-p-accent", children: labels.qualityGate }),
232
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
233
+ /* @__PURE__ */ jsx(ShieldCheck, { className: "size-3 shrink-0 text-p-accent" }),
234
+ /* @__PURE__ */ jsx("span", { className: "truncate font-display text-[13.5px] font-bold leading-tight text-p-ink", children: gate.name })
235
+ ] }),
236
+ /* @__PURE__ */ jsxs("div", { className: "mt-1.5 flex flex-wrap gap-1 font-mono text-[10px] uppercase tracking-[0.14em] text-p-accent", children: [
237
+ typeof gate.minScore === "number" && /* @__PURE__ */ jsxs("span", { children: [
238
+ labels.qualityMinScore,
239
+ " ",
240
+ gate.minScore
241
+ ] }),
242
+ gate.requireAllPassed && /* @__PURE__ */ jsxs("span", { children: [
243
+ "\xB7 ",
244
+ labels.qualityRequireAll
245
+ ] })
246
+ ] })
247
+ ]
248
+ }
203
249
  );
204
250
  }
205
251
  function DelayNode({ data, selected }) {
206
252
  const { delay, labels, onOpen } = data;
207
253
  const canOpen = !!onOpen;
208
- return /* @__PURE__ */ React.createElement(
254
+ return /* @__PURE__ */ jsxs(
209
255
  "div",
210
256
  {
211
257
  onClick: canOpen ? () => onOpen(delay.name) : void 0,
@@ -219,33 +265,42 @@ function DelayNode({ data, selected }) {
219
265
  style: {
220
266
  boxShadow: selected ? "0 0 0 3px #7B3FE4, 0 0 0 8px #7B3FE440, 0 22px 48px -18px rgba(15,15,15,0.38)" : "none",
221
267
  transform: selected ? "scale(1.02)" : "scale(1)"
222
- }
223
- },
224
- /* @__PURE__ */ React.createElement(HandlesTB, null),
225
- /* @__PURE__ */ React.createElement("div", { className: "absolute -top-2 left-3 bg-[#F3EEFF] px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-[#7B3FE4]" }, labels.delay),
226
- /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React.createElement(Clock, { className: "size-3 shrink-0 text-[#7B3FE4]" }), /* @__PURE__ */ React.createElement("span", { className: "truncate font-display text-[13.5px] font-bold leading-tight text-p-ink" }, delay.name)),
227
- /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 font-mono text-[11px] font-bold uppercase tracking-[0.14em] text-[#7B3FE4]" }, parseDuration(delay.duration))
268
+ },
269
+ children: [
270
+ /* @__PURE__ */ jsx(HandlesTB, {}),
271
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-2 left-3 bg-[#F3EEFF] px-1 font-mono text-[9px] font-bold uppercase tracking-[0.16em] text-[#7B3FE4]", children: labels.delay }),
272
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
273
+ /* @__PURE__ */ jsx(Clock, { className: "size-3 shrink-0 text-[#7B3FE4]" }),
274
+ /* @__PURE__ */ jsx("span", { className: "truncate font-display text-[13.5px] font-bold leading-tight text-p-ink", children: delay.name })
275
+ ] }),
276
+ /* @__PURE__ */ jsx("div", { className: "mt-1.5 font-mono text-[11px] font-bold uppercase tracking-[0.14em] text-[#7B3FE4]", children: parseDuration(delay.duration) })
277
+ ]
278
+ }
228
279
  );
229
280
  }
230
281
  function SentinelNode({ data }) {
231
282
  const { role, label } = data;
232
283
  const isStart = role === "start";
233
284
  const Icon = isStart ? FlagTriangleRight : Flag;
234
- return /* @__PURE__ */ React.createElement("div", { className: "relative inline-flex items-center gap-1.5 rounded-full border-2 border-p-ink bg-p-surface px-3 py-1.5" }, isStart ? /* @__PURE__ */ React.createElement(
235
- Handle,
236
- {
237
- type: "source",
238
- position: Position.Bottom,
239
- className: "!h-2 !w-2 !border-p-ink !bg-p-ink"
240
- }
241
- ) : /* @__PURE__ */ React.createElement(
242
- Handle,
243
- {
244
- type: "target",
245
- position: Position.Top,
246
- className: "!h-2 !w-2 !border-p-ink !bg-p-ink"
247
- }
248
- ), /* @__PURE__ */ React.createElement(Icon, { className: "size-3 text-p-ink", "aria-hidden": true }), /* @__PURE__ */ React.createElement("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink" }, label));
285
+ return /* @__PURE__ */ jsxs("div", { className: "relative inline-flex items-center gap-1.5 rounded-full border-2 border-p-ink bg-p-surface px-3 py-1.5", children: [
286
+ isStart ? /* @__PURE__ */ jsx(
287
+ Handle,
288
+ {
289
+ type: "source",
290
+ position: Position.Bottom,
291
+ className: "!h-2 !w-2 !border-p-ink !bg-p-ink"
292
+ }
293
+ ) : /* @__PURE__ */ jsx(
294
+ Handle,
295
+ {
296
+ type: "target",
297
+ position: Position.Top,
298
+ className: "!h-2 !w-2 !border-p-ink !bg-p-ink"
299
+ }
300
+ ),
301
+ /* @__PURE__ */ jsx(Icon, { className: "size-3 text-p-ink", "aria-hidden": true }),
302
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink", children: label })
303
+ ] });
249
304
  }
250
305
  const nodeTypes = {
251
306
  taskNode: TaskNode,
@@ -368,7 +423,7 @@ function useZoomToNode(targetId, enabled) {
368
423
  }, [targetId, enabled, rf]);
369
424
  }
370
425
  function PlanGraph(props) {
371
- return /* @__PURE__ */ React.createElement(ReactFlowProvider, null, /* @__PURE__ */ React.createElement(PlanGraphInner, { ...props }));
426
+ return /* @__PURE__ */ jsx(ReactFlowProvider, { children: /* @__PURE__ */ jsx(PlanGraphInner, { ...props }) });
372
427
  }
373
428
  function PlanGraphInner({
374
429
  tasks,
@@ -547,20 +602,22 @@ function PlanGraphInner({
547
602
  }, [flowNodes, selectedNodeId]);
548
603
  useZoomToNode(selectedNodeId ?? null, zoomToSelected);
549
604
  if (flowNodes.length === 0) {
550
- return /* @__PURE__ */ React.createElement(
605
+ return /* @__PURE__ */ jsxs(
551
606
  "div",
552
607
  {
553
608
  className: joinClasses(
554
609
  "flex flex-col items-center justify-center gap-4 border border-p-line bg-p-bg px-8 py-20 text-center",
555
610
  className
556
- )
557
- },
558
- /* @__PURE__ */ React.createElement("span", { className: "inline-flex size-12 items-center justify-center rounded-full border border-p-line bg-p-surface text-p-ink-3" }, /* @__PURE__ */ React.createElement(Flag, { className: "size-5" })),
559
- /* @__PURE__ */ React.createElement("h3", { className: "max-w-[36ch] font-display text-[22px] italic leading-[1.15] tracking-tight text-p-ink" }, L.emptyTitle),
560
- /* @__PURE__ */ React.createElement("p", { className: "max-w-[48ch] text-[13.5px] leading-relaxed text-p-ink-2" }, L.emptyBody)
611
+ ),
612
+ children: [
613
+ /* @__PURE__ */ jsx("span", { className: "inline-flex size-12 items-center justify-center rounded-full border border-p-line bg-p-surface text-p-ink-3", children: /* @__PURE__ */ jsx(Flag, { className: "size-5" }) }),
614
+ /* @__PURE__ */ jsx("h3", { className: "max-w-[36ch] font-display text-[22px] italic leading-[1.15] tracking-tight text-p-ink", children: L.emptyTitle }),
615
+ /* @__PURE__ */ jsx("p", { className: "max-w-[48ch] text-[13.5px] leading-relaxed text-p-ink-2", children: L.emptyBody })
616
+ ]
617
+ }
561
618
  );
562
619
  }
563
- return /* @__PURE__ */ React.createElement("div", { className: joinClasses("plan-graph relative bg-p-bg", className) }, /* @__PURE__ */ React.createElement(
620
+ return /* @__PURE__ */ jsx("div", { className: joinClasses("plan-graph relative bg-p-bg", className), children: /* @__PURE__ */ jsxs(
564
621
  ReactFlow,
565
622
  {
566
623
  nodes: renderedNodes,
@@ -572,25 +629,27 @@ function PlanGraphInner({
572
629
  nodesDraggable: false,
573
630
  nodesConnectable: false,
574
631
  elementsSelectable: true,
575
- style: { width: "100%", height: "100%" }
576
- },
577
- /* @__PURE__ */ React.createElement(
578
- Background,
579
- {
580
- variant: BackgroundVariant.Dots,
581
- gap: 28,
582
- size: 1,
583
- color: "var(--line)"
584
- }
585
- ),
586
- /* @__PURE__ */ React.createElement(
587
- Controls,
588
- {
589
- showInteractive: false,
590
- className: "!bg-p-surface !border !border-p-line !rounded-[4px] !shadow-none [&_button]:!bg-p-surface [&_button]:!border-p-line [&_button]:!text-p-ink-2 [&_button:hover]:!bg-p-warm [&_button:hover]:!text-p-ink"
591
- }
592
- )
593
- ));
632
+ style: { width: "100%", height: "100%" },
633
+ children: [
634
+ /* @__PURE__ */ jsx(
635
+ Background,
636
+ {
637
+ variant: BackgroundVariant.Dots,
638
+ gap: 28,
639
+ size: 1,
640
+ color: "var(--line)"
641
+ }
642
+ ),
643
+ /* @__PURE__ */ jsx(
644
+ Controls,
645
+ {
646
+ showInteractive: false,
647
+ className: "!bg-p-surface !border !border-p-line !rounded-[4px] !shadow-none [&_button]:!bg-p-surface [&_button]:!border-p-line [&_button]:!text-p-ink-2 [&_button:hover]:!bg-p-warm [&_button:hover]:!text-p-ink"
648
+ }
649
+ )
650
+ ]
651
+ }
652
+ ) });
594
653
  }
595
654
  export {
596
655
  PlanGraph
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { PlanTaskRuntime, Plan, PlanGraphLabels, PlanCheckpoint, PlanDelay, PlanQualityGate } from './plan-types.js';
4
4
 
@@ -22,8 +22,8 @@ interface PlanQualityGateDetailProps extends CommonProps {
22
22
  interface PlanDelayDetailProps extends CommonProps {
23
23
  delay: PlanDelay;
24
24
  }
25
- declare function PlanCheckpointDetail({ checkpoint, runtimeByTitle, plan, headerTrailing, actionsSlot, onOpenRelated, labels, className, }: PlanCheckpointDetailProps): react.JSX.Element;
26
- declare function PlanQualityGateDetail({ gate, runtimeByTitle, plan, headerTrailing, actionsSlot, onOpenRelated, labels, className, }: PlanQualityGateDetailProps): react.JSX.Element;
27
- declare function PlanDelayDetail({ delay, runtimeByTitle, plan, headerTrailing, actionsSlot, onOpenRelated, labels, className, }: PlanDelayDetailProps): react.JSX.Element;
25
+ declare function PlanCheckpointDetail({ checkpoint, runtimeByTitle, plan, headerTrailing, actionsSlot, onOpenRelated, labels, className, }: PlanCheckpointDetailProps): react_jsx_runtime.JSX.Element;
26
+ declare function PlanQualityGateDetail({ gate, runtimeByTitle, plan, headerTrailing, actionsSlot, onOpenRelated, labels, className, }: PlanQualityGateDetailProps): react_jsx_runtime.JSX.Element;
27
+ declare function PlanDelayDetail({ delay, runtimeByTitle, plan, headerTrailing, actionsSlot, onOpenRelated, labels, className, }: PlanDelayDetailProps): react_jsx_runtime.JSX.Element;
28
28
 
29
29
  export { PlanCheckpointDetail, type PlanCheckpointDetailProps, PlanDelayDetail, type PlanDelayDetailProps, PlanQualityGateDetail, type PlanQualityGateDetailProps };