@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.
- package/dist/index.d.ts +1 -0
- package/dist/orchestrator-document.d.ts +2 -2
- package/dist/orchestrator-document.js +2 -1
- package/dist/plan-detail.d.ts +6 -6
- package/dist/plan-detail.js +214 -156
- package/dist/plan-graph.d.ts +2 -2
- package/dist/plan-graph.js +178 -119
- package/dist/plan-node-detail.d.ts +4 -4
- package/dist/plan-node-detail.js +177 -125
- package/dist/plan-task-detail.d.ts +2 -2
- package/dist/plan-task-detail.js +282 -172
- package/dist/run-kanban-filter-menu.d.ts +3 -2
- package/dist/run-kanban-filter-menu.js +96 -77
- package/dist/run-kanban.d.ts +3 -3
- package/dist/run-kanban.js +93 -79
- package/dist/swarm-agent-badge.d.ts +2 -2
- package/dist/swarm-agent-badge.js +21 -18
- package/dist/swarm-run-activity.d.ts +2 -2
- package/dist/swarm-run-activity.js +150 -95
- package/dist/swarm-run-card.d.ts +2 -2
- package/dist/swarm-run-card.js +76 -55
- package/dist/swarm-run-detail.d.ts +2 -2
- package/dist/swarm-run-detail.js +415 -310
- package/dist/swarm-run-list.d.ts +2 -2
- package/dist/swarm-run-list.js +37 -27
- package/dist/swarm-run-row.d.ts +2 -2
- package/dist/swarm-run-row.js +82 -72
- package/dist/swarm-skeletons.d.ts +3 -3
- package/dist/swarm-skeletons.js +65 -16
- package/dist/swarm-status-bar.d.ts +2 -2
- package/dist/swarm-status-bar.js +62 -44
- package/dist/swarm-status-pill.d.ts +2 -2
- package/dist/swarm-status-pill.js +14 -11
- package/dist/swarm-timeline.d.ts +2 -2
- package/dist/swarm-timeline.js +284 -225
- package/dist/task-workspace-sidebar.d.ts +2 -2
- package/dist/task-workspace-sidebar.js +145 -113
- package/package.json +1 -1
package/dist/plan-task-detail.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { useMemo, useState } from "react";
|
|
3
4
|
import {
|
|
4
5
|
AlertTriangle,
|
|
@@ -85,129 +86,201 @@ function PlanTaskDetail({
|
|
|
85
86
|
return out;
|
|
86
87
|
}, [plan, task.title]);
|
|
87
88
|
if (variant === "page") {
|
|
88
|
-
return /* @__PURE__ */
|
|
89
|
+
return /* @__PURE__ */ jsxs(
|
|
89
90
|
"article",
|
|
90
91
|
{
|
|
91
92
|
className: [
|
|
92
93
|
"flex h-full min-h-0 flex-col overflow-hidden bg-p-surface",
|
|
93
94
|
className || ""
|
|
94
|
-
].join(" ")
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
95
|
+
].join(" "),
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
PageHeader,
|
|
99
|
+
{
|
|
100
|
+
status,
|
|
101
|
+
phase: runtime?.phase ?? task.phase,
|
|
102
|
+
priority: runtime?.priority,
|
|
103
|
+
sideEffects: runtime?.sideEffects,
|
|
104
|
+
L,
|
|
105
|
+
headerTrailing
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-7 overflow-y-auto px-7 py-7", children: [
|
|
109
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
110
|
+
/* @__PURE__ */ jsx("h2", { className: "font-display text-[28px] font-bold leading-[1.06] tracking-[-0.02em] text-p-ink", children: task.title }),
|
|
111
|
+
task.description ? renderMarkdown ? /* @__PURE__ */ jsx("div", { className: "mt-3 max-w-[64ch]", children: renderMarkdown(task.description) }) : /* @__PURE__ */ jsx("p", { className: "mt-3 max-w-[64ch] font-body text-[14.5px] leading-[1.6] text-p-ink-2 whitespace-pre-wrap", children: task.description }) : null
|
|
112
|
+
] }),
|
|
113
|
+
actions ? /* @__PURE__ */ jsx(
|
|
114
|
+
ActionDock,
|
|
115
|
+
{
|
|
116
|
+
actions,
|
|
117
|
+
status,
|
|
118
|
+
confirm
|
|
119
|
+
}
|
|
120
|
+
) : null,
|
|
121
|
+
/* @__PURE__ */ jsxs("section", { className: "grid grid-cols-1 gap-px overflow-hidden rounded-xl border border-p-line bg-p-line sm:grid-cols-3", children: [
|
|
122
|
+
/* @__PURE__ */ jsx(PageStat, { label: "assignee", children: agent ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
"span",
|
|
125
|
+
{
|
|
126
|
+
"aria-hidden": true,
|
|
127
|
+
className: "grid size-5 shrink-0 place-items-center rounded font-display text-[10px] font-bold text-white",
|
|
128
|
+
style: { background: agent.color || "#999" },
|
|
129
|
+
children: agent.glyph || (agent.displayName ?? agent.name).charAt(0).toUpperCase()
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
/* @__PURE__ */ jsx("span", { className: "text-[13.5px] font-semibold text-p-ink", children: agent.displayName ?? agent.name })
|
|
133
|
+
] }) : /* @__PURE__ */ jsx("span", { className: "font-mono text-[11px] uppercase tracking-[0.14em] text-p-ink-3", children: agentName ?? "\u2014" }) }),
|
|
134
|
+
/* @__PURE__ */ jsx(PageStat, { label: "phase", children: /* @__PURE__ */ jsx("span", { className: "font-mono text-[11px] uppercase tracking-[0.14em] text-p-ink", children: task.phase ?? runtime?.phase ?? "execution" }) }),
|
|
135
|
+
/* @__PURE__ */ jsx(PageStat, { label: "status", children: /* @__PURE__ */ jsxs(
|
|
136
|
+
"span",
|
|
137
|
+
{
|
|
138
|
+
className: "inline-flex items-center gap-1.5 font-mono text-[11px] font-bold uppercase tracking-[0.16em]",
|
|
139
|
+
style: { color: STATUS_HEX[status] },
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ jsx(StatusIcon, { className: "size-3", "aria-hidden": true }),
|
|
142
|
+
L.status[status]
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
) })
|
|
146
|
+
] }),
|
|
147
|
+
dependsOn.length > 0 ? /* @__PURE__ */ jsx(
|
|
148
|
+
PageRelatedSection,
|
|
149
|
+
{
|
|
150
|
+
title: "depends on",
|
|
151
|
+
icon: /* @__PURE__ */ jsx(ArrowRight, { className: "size-2.5 rotate-180" }),
|
|
152
|
+
items: dependsOn,
|
|
153
|
+
runtimeByTitle,
|
|
154
|
+
onOpen: onOpenRelated,
|
|
155
|
+
L
|
|
156
|
+
}
|
|
157
|
+
) : null,
|
|
158
|
+
dependents.length > 0 ? /* @__PURE__ */ jsx(
|
|
159
|
+
PageRelatedSection,
|
|
160
|
+
{
|
|
161
|
+
title: "blocks",
|
|
162
|
+
icon: /* @__PURE__ */ jsx(ArrowRight, { className: "size-2.5" }),
|
|
163
|
+
items: dependents,
|
|
164
|
+
runtimeByTitle,
|
|
165
|
+
onOpen: onOpenRelated,
|
|
166
|
+
L
|
|
167
|
+
}
|
|
168
|
+
) : null,
|
|
169
|
+
!task.description && dependsOn.length === 0 && dependents.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2 rounded-md border border-dashed border-p-line bg-p-bg p-8 text-center", children: [
|
|
170
|
+
/* @__PURE__ */ jsx(Flag, { className: "size-4 text-p-ink-3", "aria-hidden": true }),
|
|
171
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10.5px] uppercase tracking-[0.16em] text-p-ink-3", children: "no description, no dependencies" })
|
|
172
|
+
] }) : null
|
|
173
|
+
] })
|
|
174
|
+
]
|
|
175
|
+
}
|
|
151
176
|
);
|
|
152
177
|
}
|
|
153
|
-
return /* @__PURE__ */
|
|
178
|
+
return /* @__PURE__ */ jsxs(
|
|
154
179
|
"article",
|
|
155
180
|
{
|
|
156
181
|
className: [
|
|
157
182
|
"flex h-full min-h-0 flex-col overflow-hidden bg-p-surface",
|
|
158
183
|
className || ""
|
|
159
|
-
].join(" ")
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
184
|
+
].join(" "),
|
|
185
|
+
children: [
|
|
186
|
+
/* @__PURE__ */ jsxs(
|
|
187
|
+
"header",
|
|
188
|
+
{
|
|
189
|
+
className: [
|
|
190
|
+
"flex shrink-0 items-start gap-3 border-b border-p-line px-5 py-4",
|
|
191
|
+
STATUS_BG[status]
|
|
192
|
+
].join(" "),
|
|
193
|
+
children: [
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
"span",
|
|
196
|
+
{
|
|
197
|
+
className: [
|
|
198
|
+
"mt-0.5 grid size-7 shrink-0 place-items-center rounded-full bg-p-surface ring-1",
|
|
199
|
+
tone,
|
|
200
|
+
status === "running" ? "ring-p-accent/30" : "ring-p-line"
|
|
201
|
+
].join(" "),
|
|
202
|
+
children: /* @__PURE__ */ jsx(StatusIcon, { className: "size-3.5", "aria-hidden": true })
|
|
203
|
+
}
|
|
204
|
+
),
|
|
205
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
206
|
+
/* @__PURE__ */ jsxs("div", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink-3", children: [
|
|
207
|
+
L.task,
|
|
208
|
+
" \xB7",
|
|
209
|
+
" ",
|
|
210
|
+
/* @__PURE__ */ jsx("span", { className: tone, children: L.status[status] }),
|
|
211
|
+
runtime?.phase && runtime.phase !== "execution" ? /* @__PURE__ */ jsxs("span", { children: [
|
|
212
|
+
" \xB7 ",
|
|
213
|
+
runtime.phase
|
|
214
|
+
] }) : null
|
|
215
|
+
] }),
|
|
216
|
+
/* @__PURE__ */ jsx("h3", { className: "mt-1 font-display text-[18px] font-bold leading-tight tracking-[-0.01em] text-p-ink", children: task.title })
|
|
217
|
+
] }),
|
|
218
|
+
headerTrailing
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
),
|
|
222
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-5 py-4", children: [
|
|
223
|
+
task.description ? /* @__PURE__ */ jsxs("section", { children: [
|
|
224
|
+
/* @__PURE__ */ jsx(Kicker, { children: "brief" }),
|
|
225
|
+
renderMarkdown ? /* @__PURE__ */ jsx("div", { className: "mt-1", children: renderMarkdown(task.description) }) : /* @__PURE__ */ jsx("p", { className: "mt-1 font-body text-[13px] leading-[1.55] text-p-ink-2", children: task.description })
|
|
226
|
+
] }) : null,
|
|
227
|
+
/* @__PURE__ */ jsxs("section", { className: "grid grid-cols-2 gap-px overflow-hidden rounded-md border border-p-line bg-p-line text-[11px]", children: [
|
|
228
|
+
/* @__PURE__ */ jsx(Cell, { label: "agent", children: agent ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
229
|
+
/* @__PURE__ */ jsx(
|
|
230
|
+
"span",
|
|
231
|
+
{
|
|
232
|
+
"aria-hidden": true,
|
|
233
|
+
className: "grid size-4 shrink-0 place-items-center rounded font-display text-[9px] font-bold text-white",
|
|
234
|
+
style: { background: agent.color || "#999" },
|
|
235
|
+
children: agent.glyph || (agent.displayName ?? agent.name).charAt(0).toUpperCase()
|
|
236
|
+
}
|
|
237
|
+
),
|
|
238
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10.5px] font-bold uppercase tracking-[0.14em] text-p-ink", children: agent.displayName ?? agent.name })
|
|
239
|
+
] }) : /* @__PURE__ */ jsx("span", { className: "font-mono text-[10.5px] uppercase tracking-[0.14em] text-p-ink-3", children: agentName ?? "\u2014" }) }),
|
|
240
|
+
/* @__PURE__ */ jsx(Cell, { label: "phase", children: /* @__PURE__ */ jsx("span", { className: "font-mono text-[10.5px] uppercase tracking-[0.14em] text-p-ink", children: task.phase ?? runtime?.phase ?? "execution" }) }),
|
|
241
|
+
typeof runtime?.priority === "number" ? /* @__PURE__ */ jsx(Cell, { label: "priority", children: /* @__PURE__ */ jsxs("span", { className: "font-display text-[14px] font-bold tabular-nums text-p-ink", children: [
|
|
242
|
+
runtime.priority,
|
|
243
|
+
"\xD7"
|
|
244
|
+
] }) }) : null,
|
|
245
|
+
runtime?.sideEffects ? /* @__PURE__ */ jsx(Cell, { label: "warnings", children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-[#E63946]", children: [
|
|
246
|
+
/* @__PURE__ */ jsx(AlertTriangle, { className: "size-3", "aria-hidden": true }),
|
|
247
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10.5px] uppercase tracking-[0.14em]", children: "side effects" })
|
|
248
|
+
] }) }) : null
|
|
249
|
+
] }),
|
|
250
|
+
dependsOn.length > 0 ? /* @__PURE__ */ jsxs("section", { children: [
|
|
251
|
+
/* @__PURE__ */ jsx(Kicker, { icon: /* @__PURE__ */ jsx(ArrowRight, { className: "size-2.5 rotate-180" }), children: "depends on" }),
|
|
252
|
+
/* @__PURE__ */ jsx("ol", { className: "mt-1 flex flex-col gap-0.5", children: dependsOn.map((title) => /* @__PURE__ */ jsx(
|
|
253
|
+
RelatedRow,
|
|
254
|
+
{
|
|
255
|
+
title,
|
|
256
|
+
runtime: runtimeByTitle?.get(title),
|
|
257
|
+
onOpen: onOpenRelated,
|
|
258
|
+
L
|
|
259
|
+
},
|
|
260
|
+
title
|
|
261
|
+
)) })
|
|
262
|
+
] }) : null,
|
|
263
|
+
dependents.length > 0 ? /* @__PURE__ */ jsxs("section", { children: [
|
|
264
|
+
/* @__PURE__ */ jsx(Kicker, { icon: /* @__PURE__ */ jsx(ArrowRight, { className: "size-2.5" }), children: "blocks" }),
|
|
265
|
+
/* @__PURE__ */ jsx("ol", { className: "mt-1 flex flex-col gap-0.5", children: dependents.map((title) => /* @__PURE__ */ jsx(
|
|
266
|
+
RelatedRow,
|
|
267
|
+
{
|
|
268
|
+
title,
|
|
269
|
+
runtime: runtimeByTitle?.get(title),
|
|
270
|
+
onOpen: onOpenRelated,
|
|
271
|
+
L
|
|
272
|
+
},
|
|
273
|
+
title
|
|
274
|
+
)) })
|
|
275
|
+
] }) : null,
|
|
276
|
+
!task.description && dependsOn.length === 0 && dependents.length === 0 ? /* @__PURE__ */ jsxs("section", { className: "flex flex-col items-center gap-2 rounded-md border border-dashed border-p-line bg-p-bg p-6 text-center", children: [
|
|
277
|
+
/* @__PURE__ */ jsx(Flag, { className: "size-4 text-p-ink-3", "aria-hidden": true }),
|
|
278
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10.5px] uppercase tracking-[0.16em] text-p-ink-3", children: "no description, no dependencies" })
|
|
279
|
+
] }) : null
|
|
280
|
+
] }),
|
|
281
|
+
actions || actionsSlot ? /* @__PURE__ */ jsx("footer", { className: "flex shrink-0 flex-wrap items-center justify-end gap-1.5 border-t border-p-line bg-p-bg/50 px-5 py-3", children: actions ? /* @__PURE__ */ jsx(ActionDock, { actions, status, confirm }) : actionsSlot }) : null
|
|
282
|
+
]
|
|
283
|
+
}
|
|
211
284
|
);
|
|
212
285
|
}
|
|
213
286
|
function PageHeader({
|
|
@@ -220,26 +293,38 @@ function PageHeader({
|
|
|
220
293
|
}) {
|
|
221
294
|
const StatusIcon = STATUS_ICON[status];
|
|
222
295
|
const color = STATUS_HEX[status];
|
|
223
|
-
return /* @__PURE__ */
|
|
224
|
-
"
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
296
|
+
return /* @__PURE__ */ jsxs("header", { className: "flex shrink-0 items-start justify-between gap-3 border-b border-p-line px-7 py-5", children: [
|
|
297
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
|
|
298
|
+
/* @__PURE__ */ jsxs(
|
|
299
|
+
"span",
|
|
300
|
+
{
|
|
301
|
+
className: "inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 font-mono text-[10px] font-bold uppercase tracking-[0.18em]",
|
|
302
|
+
style: {
|
|
303
|
+
background: `color-mix(in srgb, ${color} 14%, transparent)`,
|
|
304
|
+
color
|
|
305
|
+
},
|
|
306
|
+
children: [
|
|
307
|
+
/* @__PURE__ */ jsx(StatusIcon, { className: "size-2.5" }),
|
|
308
|
+
L.status[status]
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
),
|
|
312
|
+
phase && phase !== "execution" ? /* @__PURE__ */ jsx(PageChip, { tone: "blue", icon: /* @__PURE__ */ jsx(RotateCcw, { className: "size-2.5" }), children: phase }) : null,
|
|
313
|
+
typeof priority === "number" && priority !== 1 ? /* @__PURE__ */ jsxs(
|
|
314
|
+
PageChip,
|
|
315
|
+
{
|
|
316
|
+
tone: priority > 1 ? "accent" : "neutral",
|
|
317
|
+
icon: /* @__PURE__ */ jsx(Zap, { className: "size-2.5" }),
|
|
318
|
+
children: [
|
|
319
|
+
priority,
|
|
320
|
+
"\xD7"
|
|
321
|
+
]
|
|
322
|
+
}
|
|
323
|
+
) : null,
|
|
324
|
+
sideEffects ? /* @__PURE__ */ jsx(PageChip, { tone: "red", icon: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-2.5" }), children: "side effects" }) : null
|
|
325
|
+
] }),
|
|
326
|
+
headerTrailing ? /* @__PURE__ */ jsx("div", { className: "shrink-0", children: headerTrailing }) : null
|
|
327
|
+
] });
|
|
243
328
|
}
|
|
244
329
|
function PageChip({
|
|
245
330
|
tone,
|
|
@@ -253,21 +338,26 @@ function PageChip({
|
|
|
253
338
|
red: { bg: "#FEF2F2", fg: "#E63946" }
|
|
254
339
|
};
|
|
255
340
|
const c = palette[tone];
|
|
256
|
-
return /* @__PURE__ */
|
|
341
|
+
return /* @__PURE__ */ jsxs(
|
|
257
342
|
"span",
|
|
258
343
|
{
|
|
259
344
|
className: "inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 font-mono text-[10px] font-bold uppercase tracking-[0.18em]",
|
|
260
|
-
style: { background: c.bg, color: c.fg }
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
345
|
+
style: { background: c.bg, color: c.fg },
|
|
346
|
+
children: [
|
|
347
|
+
icon,
|
|
348
|
+
children
|
|
349
|
+
]
|
|
350
|
+
}
|
|
264
351
|
);
|
|
265
352
|
}
|
|
266
353
|
function PageStat({
|
|
267
354
|
label,
|
|
268
355
|
children
|
|
269
356
|
}) {
|
|
270
|
-
return /* @__PURE__ */
|
|
357
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 bg-p-surface px-4 py-3", children: [
|
|
358
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[9.5px] font-bold uppercase tracking-[0.22em] text-p-ink-3", children: label }),
|
|
359
|
+
/* @__PURE__ */ jsx("span", { className: "min-h-[20px]", children })
|
|
360
|
+
] });
|
|
271
361
|
}
|
|
272
362
|
function PageRelatedSection({
|
|
273
363
|
title,
|
|
@@ -277,16 +367,26 @@ function PageRelatedSection({
|
|
|
277
367
|
onOpen,
|
|
278
368
|
L
|
|
279
369
|
}) {
|
|
280
|
-
return /* @__PURE__ */
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
-
|
|
370
|
+
return /* @__PURE__ */ jsxs("section", { children: [
|
|
371
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-baseline gap-2", children: [
|
|
372
|
+
/* @__PURE__ */ jsx(Kicker, { icon, children: title }),
|
|
373
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-[10px] uppercase tracking-[0.18em] text-p-ink-3/70 tabular-nums", children: [
|
|
374
|
+
"\xB7 ",
|
|
375
|
+
items.length
|
|
376
|
+
] }),
|
|
377
|
+
/* @__PURE__ */ jsx("span", { className: "ml-2 h-px flex-1 bg-p-line" })
|
|
378
|
+
] }),
|
|
379
|
+
/* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-1", children: items.map((t) => /* @__PURE__ */ jsx(
|
|
380
|
+
RelatedRow,
|
|
381
|
+
{
|
|
382
|
+
title: t,
|
|
383
|
+
runtime: runtimeByTitle?.get(t),
|
|
384
|
+
onOpen,
|
|
385
|
+
L
|
|
386
|
+
},
|
|
387
|
+
t
|
|
388
|
+
)) })
|
|
389
|
+
] });
|
|
290
390
|
}
|
|
291
391
|
const ACTION_DESCRIPTORS = [
|
|
292
392
|
{
|
|
@@ -367,26 +467,28 @@ function ActionDock({
|
|
|
367
467
|
return isActionApplicable(desc.key, status);
|
|
368
468
|
});
|
|
369
469
|
if (visible.length === 0) return null;
|
|
370
|
-
return /* @__PURE__ */
|
|
470
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-1.5", children: visible.map((desc) => {
|
|
371
471
|
const cfg = actions[desc.key];
|
|
372
472
|
const Icon = desc.icon;
|
|
373
473
|
const isPending = pending === desc.key;
|
|
374
|
-
return /* @__PURE__ */
|
|
474
|
+
return /* @__PURE__ */ jsxs(
|
|
375
475
|
"button",
|
|
376
476
|
{
|
|
377
|
-
key: desc.key,
|
|
378
477
|
type: "button",
|
|
379
478
|
onClick: () => handle(desc.key, desc, cfg),
|
|
380
479
|
disabled: cfg.disabled || isPending,
|
|
381
480
|
className: [
|
|
382
481
|
"inline-flex h-8 items-center gap-1.5 rounded-md border px-2.5 font-mono text-[11px] font-bold uppercase tracking-[0.14em] transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
|
|
383
482
|
desc.destructiveButton ? "border-[#FECACA] bg-p-surface text-[#E63946] hover:bg-[#FEF2F2]" : "border-p-line bg-p-surface text-p-ink-2 hover:border-p-ink-3 hover:bg-p-warm hover:text-p-ink"
|
|
384
|
-
].join(" ")
|
|
483
|
+
].join(" "),
|
|
484
|
+
children: [
|
|
485
|
+
/* @__PURE__ */ jsx(Icon, { className: "size-3", "aria-hidden": true }),
|
|
486
|
+
desc.label
|
|
487
|
+
]
|
|
385
488
|
},
|
|
386
|
-
|
|
387
|
-
desc.label
|
|
489
|
+
desc.key
|
|
388
490
|
);
|
|
389
|
-
}));
|
|
491
|
+
}) });
|
|
390
492
|
}
|
|
391
493
|
function isActionApplicable(key, status) {
|
|
392
494
|
switch (key) {
|
|
@@ -404,10 +506,16 @@ function Kicker({
|
|
|
404
506
|
children,
|
|
405
507
|
icon
|
|
406
508
|
}) {
|
|
407
|
-
return /* @__PURE__ */
|
|
509
|
+
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink-3", children: [
|
|
510
|
+
icon,
|
|
511
|
+
children
|
|
512
|
+
] });
|
|
408
513
|
}
|
|
409
514
|
function Cell({ label, children }) {
|
|
410
|
-
return /* @__PURE__ */
|
|
515
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 bg-p-surface px-3 py-2", children: [
|
|
516
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[9.5px] font-bold uppercase tracking-[0.18em] text-p-ink-3", children: label }),
|
|
517
|
+
/* @__PURE__ */ jsx("span", { className: "min-h-[18px]", children })
|
|
518
|
+
] });
|
|
411
519
|
}
|
|
412
520
|
function RelatedRow({
|
|
413
521
|
title,
|
|
@@ -420,7 +528,7 @@ function RelatedRow({
|
|
|
420
528
|
const tone = STATUS_TONE[status];
|
|
421
529
|
const interactive = !!onOpen;
|
|
422
530
|
const Wrapper = interactive ? "button" : "div";
|
|
423
|
-
return /* @__PURE__ */
|
|
531
|
+
return /* @__PURE__ */ jsxs(
|
|
424
532
|
Wrapper,
|
|
425
533
|
{
|
|
426
534
|
type: interactive ? "button" : void 0,
|
|
@@ -428,21 +536,23 @@ function RelatedRow({
|
|
|
428
536
|
className: [
|
|
429
537
|
"group flex items-center gap-2 rounded-md border border-p-line bg-p-surface px-2.5 py-1.5 text-left transition-colors",
|
|
430
538
|
interactive ? "cursor-pointer hover:border-p-ink-3 hover:bg-p-warm/40" : ""
|
|
431
|
-
].join(" ")
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
539
|
+
].join(" "),
|
|
540
|
+
children: [
|
|
541
|
+
/* @__PURE__ */ jsx(Icon, { className: ["size-3 shrink-0", tone].join(" "), "aria-hidden": true }),
|
|
542
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-display text-[12.5px] font-semibold text-p-ink", children: title }),
|
|
543
|
+
/* @__PURE__ */ jsx(
|
|
544
|
+
"span",
|
|
545
|
+
{
|
|
546
|
+
className: [
|
|
547
|
+
"shrink-0 font-mono text-[9.5px] font-bold uppercase tracking-[0.16em]",
|
|
548
|
+
tone
|
|
549
|
+
].join(" "),
|
|
550
|
+
children: L.status[status]
|
|
551
|
+
}
|
|
552
|
+
),
|
|
553
|
+
interactive ? /* @__PURE__ */ jsx(Clock, { className: "size-2.5 shrink-0 text-p-ink-3 opacity-0 transition-opacity group-hover:opacity-100" }) : null
|
|
554
|
+
]
|
|
555
|
+
}
|
|
446
556
|
);
|
|
447
557
|
}
|
|
448
558
|
export {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { RunKanbanLaneSummary } from './run-kanban.js';
|
|
3
|
+
import 'react';
|
|
3
4
|
import './plan-types.js';
|
|
4
5
|
import './types.js';
|
|
5
6
|
|
|
@@ -19,6 +20,6 @@ interface RunKanbanFilterMenuProps {
|
|
|
19
20
|
* (Linear's pattern). The trigger shows `visible / total` as a
|
|
20
21
|
* tabular badge and the menu lists every lane with a checkmark.
|
|
21
22
|
*/
|
|
22
|
-
declare function RunKanbanFilterMenu({ lanes, value, onChange, hideEmpty, triggerLabel, className, }: RunKanbanFilterMenuProps):
|
|
23
|
+
declare function RunKanbanFilterMenu({ lanes, value, onChange, hideEmpty, triggerLabel, className, }: RunKanbanFilterMenuProps): react_jsx_runtime.JSX.Element;
|
|
23
24
|
|
|
24
25
|
export { RunKanbanFilterMenu, type RunKanbanFilterMenuProps };
|