@markmo/europacore-session-ui 0.2.0 → 0.4.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.
- package/README.md +1 -1
- package/dist/ArtifactsPage-BxaqShTv.js +1178 -0
- package/dist/{BoardPage-BAQrGP7G.js → BoardPage-DH7p5o99.js} +274 -265
- package/dist/{CardDetail-CCgP8R61.js → CardDetail-LfDCJQhS.js} +42 -33
- package/dist/{ComparePage-FcLLhKzC.js → ComparePage-CrbCyu4u.js} +33 -33
- package/dist/MemoriesPage-BRA53Hlb.js +679 -0
- package/dist/{OverviewPage-CbfbyGNT.js → OverviewPage-BSBqY83_.js} +50 -49
- package/dist/{RegisterPage-3-hJNQEV.js → RegisterPage-64yGl9E-.js} +76 -76
- package/dist/SessionPage-C4hSlxWQ.js +906 -0
- package/dist/api/agentClient.d.ts +66 -1
- package/dist/api/wire.d.ts +540 -4
- package/dist/features/artifacts/ArtifactDetail.d.ts +15 -0
- package/dist/features/artifacts/ArtifactDialogs.d.ts +29 -0
- package/dist/features/artifacts/ArtifactLedger.d.ts +11 -0
- package/dist/features/artifacts/ArtifactStats.d.ts +9 -0
- package/dist/features/artifacts/ArtifactsPage.d.ts +1 -0
- package/dist/features/artifacts/artifactsCommands.d.ts +3 -0
- package/dist/features/artifacts/artifactsStore.d.ts +27 -0
- package/dist/features/artifacts/artifactsUi.d.ts +33 -0
- package/dist/features/bootstrap.d.ts +1 -0
- package/dist/features/chat/model/artifactAccess.d.ts +50 -0
- package/dist/features/chat/model/artifactCsv.d.ts +11 -0
- package/dist/features/chat/model/artifactExport.d.ts +45 -0
- package/dist/features/chat/model/artifactStats.d.ts +79 -0
- package/dist/features/chat/model/artifacts.d.ts +151 -0
- package/dist/features/chat/model/claims.d.ts +102 -0
- package/dist/features/chat/model/contextSources.d.ts +41 -0
- package/dist/features/chat/model/entries.d.ts +37 -2
- package/dist/features/chat/model/fleet.d.ts +11 -0
- package/dist/features/chat/model/format.d.ts +6 -0
- package/dist/features/chat/model/inspect.d.ts +11 -0
- package/dist/features/chat/model/memory.d.ts +3 -3
- package/dist/features/chat/model/memoryRecords.d.ts +79 -0
- package/dist/features/chat/model/monitors.d.ts +11 -0
- package/dist/features/chat/model/progress.d.ts +73 -0
- package/dist/features/chat/model/routing.d.ts +20 -0
- package/dist/features/chat/model/store.d.ts +5 -0
- package/dist/features/chat/model/tasks.d.ts +1 -1
- package/dist/features/chat/panels/ProgressPanel.d.ts +8 -0
- package/dist/features/chat/session/ComposerHistory.d.ts +1 -1
- package/dist/features/chat/session/SessionController.d.ts +3 -2
- package/dist/features/chat/session/useFileMentions.d.ts +18 -5
- package/dist/features/chat/transcript/ArtifactCard.d.ts +8 -0
- package/dist/features/chat/transcript/Rows.d.ts +12 -1
- package/dist/features/commands/InspectDialog.d.ts +3 -0
- package/dist/features/commands/dialogs.d.ts +1 -1
- package/dist/features/commands/registry.d.ts +1 -1
- package/dist/features/memories/MemoriesPage.d.ts +1 -0
- package/dist/features/memories/memoriesCommands.d.ts +3 -0
- package/dist/features/memories/memoriesController.d.ts +81 -0
- package/dist/features/memory/MemoryDialog.d.ts +1 -1
- package/dist/features/memory/memoryService.d.ts +10 -10
- package/dist/features/workspace/claimsCommands.d.ts +26 -0
- package/dist/features/workspace/collisionsWatcher.d.ts +7 -0
- package/dist/features/workspace/useSessionPageHooks.d.ts +1 -1
- package/dist/{index-NjGO7Jg1.js → index-CMPf-3JZ.js} +4821 -3447
- package/dist/index.d.ts +2 -0
- package/dist/index.js +86 -82
- package/dist/lib/paths.d.ts +12 -0
- package/dist/lib/zip.d.ts +14 -0
- package/dist/{promptHistory-DjSCHmEk.js → promptHistory-BR0NpLCI.js} +14 -14
- package/package.json +1 -1
- package/dist/SessionPage-CA9hAakW.js +0 -865
|
@@ -1,152 +1,156 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { memo as xe, useRef as
|
|
1
|
+
import { jsxs as b, jsx as a, Fragment as te } from "react/jsx-runtime";
|
|
2
|
+
import { memo as xe, useRef as I, Fragment as be, useState as z, useLayoutEffect as ne, useEffect as V, createElement as we, useMemo as J, useCallback as U } from "react";
|
|
3
3
|
import { useNavigate as ye } from "react-router";
|
|
4
4
|
import { Menu as ve, MenuButton as ke, Field as Ne, Switch as Se, Label as Me } from "@headlessui/react";
|
|
5
5
|
import { MoreHorizontal as Ce, LayoutGrid as Te } from "lucide-react";
|
|
6
|
-
import {
|
|
7
|
-
import { a as
|
|
6
|
+
import { K as D, an as $e, a as E, I as Ae, aD as Ee, aE as K, aF as ae, aG as _e, aH as Q, am as Le, aI as pe, aa as Ie, n as Pe, aJ as se, aK as Fe, V as Oe, aq as Be, Y as oe } from "./index-CMPf-3JZ.js";
|
|
7
|
+
import { a as De, S as He, c as Ge, b as je, d as Re, i as Ke, e as me, f as qe, g as ze, h as Ye, j as Ue, C as Ve } from "./CardDetail-LfDCJQhS.js";
|
|
8
8
|
import { createPortal as We } from "react-dom";
|
|
9
9
|
const Xe = 15e3;
|
|
10
10
|
function Je(e) {
|
|
11
11
|
return e.started || e.missing ? Promise.resolve() : new Promise((t) => {
|
|
12
12
|
const n = () => {
|
|
13
13
|
clearTimeout(s), i(), t();
|
|
14
|
-
}, i =
|
|
14
|
+
}, i = D.subscribe(() => {
|
|
15
15
|
(e.started || e.missing) && n();
|
|
16
16
|
}), s = setTimeout(n, Xe);
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
async function Qe(e, t) {
|
|
20
|
-
const n =
|
|
20
|
+
const n = D.attach(e);
|
|
21
21
|
return await Je(n), n.missing || !n.started ? !1 : n.setStage(t);
|
|
22
22
|
}
|
|
23
23
|
const Ze = 500, et = 10, tt = xe(function({ card: t, seen: n, now: i, actions: s, onHover: r, onLongPress: p }) {
|
|
24
|
-
const { row: o } = t,
|
|
24
|
+
const { row: o } = t, y = I(null), f = I(null), v = I(!1), T = De(o, n), P = He[o.status], F = Ge(t), _ = je(o, i), H = $e(o.costUsd), l = o.status === "failed" || o.attention === "failed", m = Re(o), N = Ke(o, n), k = () => {
|
|
25
25
|
f.current && clearTimeout(f.current.timer), f.current = null;
|
|
26
26
|
};
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
h.pointerType === "mouse" && r?.(t, v.current);
|
|
44
|
-
},
|
|
45
|
-
onPointerLeave: (h) => {
|
|
46
|
-
y(), h.pointerType === "mouse" && r?.(t, null);
|
|
47
|
-
},
|
|
48
|
-
onPointerDown: (h) => {
|
|
49
|
-
k.current = !1, !(h.pointerType === "mouse" || !p) && (y(), f.current = {
|
|
50
|
-
x: h.clientX,
|
|
51
|
-
y: h.clientY,
|
|
52
|
-
timer: setTimeout(() => {
|
|
53
|
-
f.current = null, k.current = !0, p(t);
|
|
54
|
-
}, Ze)
|
|
55
|
-
});
|
|
56
|
-
},
|
|
57
|
-
onPointerMove: (h) => {
|
|
58
|
-
const S = f.current;
|
|
59
|
-
S && Math.hypot(h.clientX - S.x, h.clientY - S.y) > et && y();
|
|
60
|
-
},
|
|
61
|
-
onPointerUp: y,
|
|
62
|
-
onPointerCancel: y,
|
|
63
|
-
onContextMenu: (h) => {
|
|
64
|
-
(k.current || f.current) && h.preventDefault();
|
|
65
|
-
},
|
|
66
|
-
onClickCapture: (h) => {
|
|
67
|
-
k.current && (k.current = !1, h.preventDefault(), h.stopPropagation());
|
|
68
|
-
},
|
|
69
|
-
children: [
|
|
70
|
-
T && /* @__PURE__ */ x(
|
|
71
|
-
"div",
|
|
72
|
-
{
|
|
73
|
-
className: E(
|
|
74
|
-
"mb-1.5 inline-flex max-w-full items-center gap-1 rounded-full px-1.5 py-px text-[11px] leading-4 font-semibold",
|
|
75
|
-
c ? "bg-danger-soft text-danger" : "bg-warn-soft text-warn"
|
|
76
|
-
),
|
|
77
|
-
children: [
|
|
78
|
-
/* @__PURE__ */ a("span", { "aria-hidden": "true", children: "!" }),
|
|
79
|
-
/* @__PURE__ */ a("span", { className: "truncate", children: T })
|
|
80
|
-
]
|
|
81
|
-
}
|
|
27
|
+
return (
|
|
28
|
+
// biome-ignore lint/a11y/noNoninteractiveElementInteractions: the hover card and long press are pointer extras; the card's buttons carry its actions
|
|
29
|
+
/* @__PURE__ */ b(
|
|
30
|
+
"article",
|
|
31
|
+
{
|
|
32
|
+
ref: y,
|
|
33
|
+
"data-card-id": o.key,
|
|
34
|
+
"data-stage": o.stage,
|
|
35
|
+
"aria-label": o.title || o.key,
|
|
36
|
+
className: E(
|
|
37
|
+
"group relative rounded-lg border bg-surface px-3 pt-2.5 pb-2 text-left shadow-xs transition-[border-color,box-shadow,background-color] duration-150",
|
|
38
|
+
"hover:border-accent/40 hover:shadow-pop focus-within:border-accent/50",
|
|
39
|
+
"data-[landed]:border-accent data-[landed]:ring-2 data-[landed]:ring-accent/35",
|
|
40
|
+
T ? l ? "border-danger-line" : "border-warn-line" : "border-line",
|
|
41
|
+
!o.attached && "bg-surface-alt",
|
|
42
|
+
"select-none [-webkit-touch-callout:none]"
|
|
82
43
|
),
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
44
|
+
onPointerEnter: (h) => {
|
|
45
|
+
h.pointerType === "mouse" && r?.(t, y.current);
|
|
46
|
+
},
|
|
47
|
+
onPointerLeave: (h) => {
|
|
48
|
+
k(), h.pointerType === "mouse" && r?.(t, null);
|
|
49
|
+
},
|
|
50
|
+
onPointerDown: (h) => {
|
|
51
|
+
v.current = !1, !(h.pointerType === "mouse" || !p) && (k(), f.current = {
|
|
52
|
+
x: h.clientX,
|
|
53
|
+
y: h.clientY,
|
|
54
|
+
timer: setTimeout(() => {
|
|
55
|
+
f.current = null, v.current = !0, p(t);
|
|
56
|
+
}, Ze)
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
onPointerMove: (h) => {
|
|
60
|
+
const S = f.current;
|
|
61
|
+
S && Math.hypot(h.clientX - S.x, h.clientY - S.y) > et && k();
|
|
62
|
+
},
|
|
63
|
+
onPointerUp: k,
|
|
64
|
+
onPointerCancel: k,
|
|
65
|
+
onContextMenu: (h) => {
|
|
66
|
+
(v.current || f.current) && h.preventDefault();
|
|
67
|
+
},
|
|
68
|
+
onClickCapture: (h) => {
|
|
69
|
+
v.current && (v.current = !1, h.preventDefault(), h.stopPropagation());
|
|
70
|
+
},
|
|
71
|
+
children: [
|
|
72
|
+
T && /* @__PURE__ */ b(
|
|
73
|
+
"div",
|
|
95
74
|
{
|
|
96
|
-
type: "button",
|
|
97
|
-
onClick: () => s.open(t),
|
|
98
75
|
className: E(
|
|
99
|
-
"
|
|
100
|
-
|
|
101
|
-
!o.attached && "font-medium"
|
|
76
|
+
"mb-1.5 inline-flex max-w-full items-center gap-1 rounded-full px-1.5 py-px text-[11px] leading-4 font-semibold",
|
|
77
|
+
l ? "bg-danger-soft text-danger" : "bg-warn-soft text-warn"
|
|
102
78
|
),
|
|
103
|
-
children:
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ a("span", { "aria-hidden": "true", children: "!" }),
|
|
81
|
+
/* @__PURE__ */ a("span", { className: "truncate", children: T })
|
|
82
|
+
]
|
|
104
83
|
}
|
|
105
84
|
),
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
-
/* @__PURE__ */ a(
|
|
108
|
-
|
|
85
|
+
/* @__PURE__ */ b("div", { className: "flex items-start gap-2", children: [
|
|
86
|
+
/* @__PURE__ */ a(
|
|
87
|
+
"span",
|
|
109
88
|
{
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
89
|
+
className: E("mt-px w-3 shrink-0 text-center text-[12px] leading-5", P.tone, o.status === "running" && "animate-pulse"),
|
|
90
|
+
title: P.label,
|
|
91
|
+
role: "img",
|
|
92
|
+
"aria-label": P.label,
|
|
93
|
+
children: P.glyph
|
|
114
94
|
}
|
|
115
|
-
)
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
95
|
+
),
|
|
96
|
+
/* @__PURE__ */ a(
|
|
97
|
+
"button",
|
|
98
|
+
{
|
|
99
|
+
type: "button",
|
|
100
|
+
onClick: () => s.open(t),
|
|
101
|
+
className: E(
|
|
102
|
+
"block min-w-0 flex-1 text-left text-[13px] leading-5 font-semibold text-ink [overflow-wrap:anywhere]",
|
|
103
|
+
'focus-visible:outline-none after:absolute after:inset-0 after:rounded-lg after:content-[""] focus-visible:after:ring-2 focus-visible:after:ring-accent/40',
|
|
104
|
+
!o.attached && "font-medium"
|
|
105
|
+
),
|
|
106
|
+
children: /* @__PURE__ */ a("span", { className: "line-clamp-2", children: o.title || o.key })
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
/* @__PURE__ */ b(ve, { as: "div", className: "relative z-10 -mt-1 -mr-1.5 shrink-0", children: [
|
|
110
|
+
/* @__PURE__ */ a(ke, { as: be, children: /* @__PURE__ */ a(
|
|
111
|
+
Ae,
|
|
112
|
+
{
|
|
113
|
+
label: "Card actions",
|
|
114
|
+
size: "sm",
|
|
115
|
+
className: "opacity-70 group-hover:opacity-100 data-[open]:opacity-100 pointer-coarse:opacity-100",
|
|
116
|
+
children: /* @__PURE__ */ a(Ce, { size: 15 })
|
|
117
|
+
}
|
|
118
|
+
) }),
|
|
119
|
+
/* @__PURE__ */ b(Ee, { children: [
|
|
120
|
+
/* @__PURE__ */ a(K, { onClick: () => s.open(t), children: "Open" }),
|
|
121
|
+
o.prUrl && /* @__PURE__ */ a(K, { onClick: () => window.open(o.prUrl, "_blank", "noopener,noreferrer"), children: "Open pull request" }),
|
|
122
|
+
m && /* @__PURE__ */ b(te, { children: [
|
|
123
|
+
/* @__PURE__ */ a(ae, {}),
|
|
124
|
+
/* @__PURE__ */ a(_e, { children: "Set stage" }),
|
|
125
|
+
/* @__PURE__ */ a(K, { onClick: () => s.setStage(o, "backlog"), children: Q.backlog }),
|
|
126
|
+
/* @__PURE__ */ a(K, { onClick: () => s.setStage(o, "cancelled"), children: Q.cancelled }),
|
|
127
|
+
/* @__PURE__ */ a(K, { onClick: () => s.setStage(o, null), children: "Clear" })
|
|
128
|
+
] }),
|
|
129
|
+
N && /* @__PURE__ */ b(te, { children: [
|
|
130
|
+
/* @__PURE__ */ a(ae, {}),
|
|
131
|
+
/* @__PURE__ */ a(K, { onClick: () => s.markSeen(o), children: "Mark seen" })
|
|
132
|
+
] })
|
|
129
133
|
] })
|
|
130
134
|
] })
|
|
131
|
-
] })
|
|
132
|
-
] }),
|
|
133
|
-
F && /* @__PURE__ */ a("div", { className: "mt-0.5 truncate pl-5 text-[12px] text-muted", children: F }),
|
|
134
|
-
(o.stageText || o.progress) && /* @__PURE__ */ a("div", { className: "mt-0.5 truncate pl-5 text-[12px] text-ink/80", children: [o.stageText, o.progress].filter(Boolean).join(" · ") }),
|
|
135
|
-
/* @__PURE__ */ x("div", { className: "mt-1.5 flex flex-wrap items-center gap-x-2.5 gap-y-0.5 pl-5 text-[11.5px] text-faint tabular-nums", children: [
|
|
136
|
-
_ && /* @__PURE__ */ x("span", { title: _.running ? "Time running" : "Time in this stage", children: [
|
|
137
|
-
_.running ? "⏱" : "◷",
|
|
138
|
-
" ",
|
|
139
|
-
_.text
|
|
140
|
-
] }),
|
|
141
|
-
o.tokens > 0 && /* @__PURE__ */ x("span", { children: [
|
|
142
|
-
Le(o.tokens),
|
|
143
|
-
" tok"
|
|
144
135
|
] }),
|
|
145
|
-
|
|
146
|
-
o.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
136
|
+
F && /* @__PURE__ */ a("div", { className: "mt-0.5 truncate pl-5 text-[12px] text-muted", children: F }),
|
|
137
|
+
(o.stageText || o.progress) && /* @__PURE__ */ a("div", { className: "mt-0.5 truncate pl-5 text-[12px] text-ink/80", children: [o.stageText, o.progress].filter(Boolean).join(" · ") }),
|
|
138
|
+
/* @__PURE__ */ b("div", { className: "mt-1.5 flex flex-wrap items-center gap-x-2.5 gap-y-0.5 pl-5 text-[11.5px] text-faint tabular-nums", children: [
|
|
139
|
+
_ && /* @__PURE__ */ b("span", { title: _.running ? "Time running" : "Time in this stage", children: [
|
|
140
|
+
_.running ? "⏱" : "◷",
|
|
141
|
+
" ",
|
|
142
|
+
_.text
|
|
143
|
+
] }),
|
|
144
|
+
o.tokens > 0 && /* @__PURE__ */ b("span", { children: [
|
|
145
|
+
Le(o.tokens),
|
|
146
|
+
" tok"
|
|
147
|
+
] }),
|
|
148
|
+
H && /* @__PURE__ */ a("span", { children: H }),
|
|
149
|
+
o.model && /* @__PURE__ */ a("span", { className: "min-w-0 truncate", children: o.model })
|
|
150
|
+
] })
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
)
|
|
150
154
|
);
|
|
151
155
|
}), nt = {
|
|
152
156
|
backlog: "Nothing waiting to start",
|
|
@@ -164,7 +168,7 @@ function at({
|
|
|
164
168
|
onLongPress: r
|
|
165
169
|
}) {
|
|
166
170
|
const p = Q[e.stage];
|
|
167
|
-
return /* @__PURE__ */
|
|
171
|
+
return /* @__PURE__ */ b(
|
|
168
172
|
"section",
|
|
169
173
|
{
|
|
170
174
|
"aria-label": p,
|
|
@@ -174,7 +178,7 @@ function at({
|
|
|
174
178
|
"md:w-auto md:max-w-[340px] md:min-w-[200px] md:flex-1 md:basis-0 md:snap-align-none"
|
|
175
179
|
),
|
|
176
180
|
children: [
|
|
177
|
-
/* @__PURE__ */
|
|
181
|
+
/* @__PURE__ */ b("header", { className: "flex h-10 shrink-0 items-center gap-2 px-3", children: [
|
|
178
182
|
/* @__PURE__ */ a("span", { className: E("text-[13px]", me[e.stage]), "aria-hidden": "true", children: pe[e.stage] }),
|
|
179
183
|
/* @__PURE__ */ a("h2", { className: "font-body text-[12.5px] font-semibold tracking-wide text-ink", children: p }),
|
|
180
184
|
/* @__PURE__ */ a(
|
|
@@ -182,11 +186,12 @@ function at({
|
|
|
182
186
|
{
|
|
183
187
|
"data-stage-count": e.stage,
|
|
184
188
|
className: "inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-surface-hover px-1.5 text-[11px] font-semibold text-muted tabular-nums",
|
|
189
|
+
role: "img",
|
|
185
190
|
"aria-label": `${e.cards.length} card${e.cards.length === 1 ? "" : "s"}`,
|
|
186
191
|
children: e.cards.length
|
|
187
192
|
}
|
|
188
193
|
),
|
|
189
|
-
e.needs > 0 && /* @__PURE__ */
|
|
194
|
+
e.needs > 0 && /* @__PURE__ */ b(
|
|
190
195
|
"span",
|
|
191
196
|
{
|
|
192
197
|
className: "ml-auto rounded-full bg-warn-soft px-1.5 text-[11px] leading-5 font-semibold text-warn tabular-nums",
|
|
@@ -211,7 +216,7 @@ function st({
|
|
|
211
216
|
}) {
|
|
212
217
|
return /* @__PURE__ */ a("nav", { "aria-label": "Board columns", className: E("overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", i), children: /* @__PURE__ */ a("ul", { className: "flex w-max items-center gap-1.5 px-4 py-2", children: e.map((s) => {
|
|
213
218
|
const r = s.stage === t;
|
|
214
|
-
return /* @__PURE__ */ a("li", { children: /* @__PURE__ */
|
|
219
|
+
return /* @__PURE__ */ a("li", { children: /* @__PURE__ */ b(
|
|
215
220
|
"button",
|
|
216
221
|
{
|
|
217
222
|
type: "button",
|
|
@@ -227,7 +232,7 @@ function st({
|
|
|
227
232
|
/* @__PURE__ */ a("span", { className: r ? void 0 : me[s.stage], "aria-hidden": "true", children: pe[s.stage] }),
|
|
228
233
|
Q[s.stage],
|
|
229
234
|
/* @__PURE__ */ a("span", { className: E("tabular-nums", r ? "text-accent" : "text-faint"), children: s.cards.length }),
|
|
230
|
-
s.needs > 0 && /* @__PURE__ */
|
|
235
|
+
s.needs > 0 && /* @__PURE__ */ b("span", { className: "rounded-full bg-warn-soft px-1.5 text-[10.5px] leading-4 text-warn", children: [
|
|
231
236
|
"!",
|
|
232
237
|
s.needs
|
|
233
238
|
] })
|
|
@@ -239,7 +244,8 @@ function st({
|
|
|
239
244
|
const ot = 8, re = 450, rt = 900, Z = { y: -6, scale: 1.04, rotate: -2 };
|
|
240
245
|
function ie(e) {
|
|
241
246
|
const t = /* @__PURE__ */ new Map();
|
|
242
|
-
for (const n of e)
|
|
247
|
+
for (const n of e)
|
|
248
|
+
for (const [i, s] of n.ids.entries()) t.set(s, { stage: n.stage, index: i });
|
|
243
249
|
return t;
|
|
244
250
|
}
|
|
245
251
|
function it(e, t) {
|
|
@@ -251,10 +257,10 @@ function it(e, t) {
|
|
|
251
257
|
for (const [r, p] of n) i.has(r) || s.exits.push({ id: r, stage: p.stage });
|
|
252
258
|
return s;
|
|
253
259
|
}
|
|
254
|
-
function
|
|
260
|
+
function le(e) {
|
|
255
261
|
return e.map((t) => `${t.stage}:${t.ids.join("")}`).join("");
|
|
256
262
|
}
|
|
257
|
-
function
|
|
263
|
+
function ce(e, t) {
|
|
258
264
|
return Math.hypot(t.left + t.width / 2 - (e.left + e.width / 2), t.top + t.height / 2 - (e.top + e.height / 2));
|
|
259
265
|
}
|
|
260
266
|
function de(e) {
|
|
@@ -262,21 +268,21 @@ function de(e) {
|
|
|
262
268
|
return Math.round(Math.min(rt, Math.max(re, t)));
|
|
263
269
|
}
|
|
264
270
|
function ue(e, t, n = {}) {
|
|
265
|
-
const i = n.shadow || "var(--shadow-pop)", s =
|
|
271
|
+
const i = n.shadow || "var(--shadow-pop)", s = Y(t.left + t.width / 2 - (e.left + e.width / 2)), r = Y(t.top + t.height / 2 - (e.top + e.height / 2)), p = e.width > 0 ? Y(t.width / e.width, 4) : 1, o = e.height > 0 ? Y(t.height / e.height, 4) : 1, y = (v, T) => `translate(${v}px, ${T + Z.y}px) scale(${Z.scale}) rotate(${Z.rotate}deg)`;
|
|
266
272
|
return [
|
|
267
273
|
{ offset: 0, transform: "translate(0px, 0px) scale(1) rotate(0deg)", boxShadow: "none", opacity: 1 },
|
|
268
|
-
{ offset: 0.16, transform:
|
|
269
|
-
{ offset: 0.84, transform:
|
|
274
|
+
{ offset: 0.16, transform: y(0, 0), boxShadow: i, opacity: 1 },
|
|
275
|
+
{ offset: 0.84, transform: y(s, r), boxShadow: i, opacity: 1 },
|
|
270
276
|
{ offset: 1, transform: `translate(${s}px, ${r}px) scale(${p}, ${o}) rotate(0deg)`, boxShadow: "none", opacity: n.fade ? 0 : 1 }
|
|
271
277
|
];
|
|
272
278
|
}
|
|
273
|
-
function
|
|
274
|
-
const n =
|
|
279
|
+
function lt(e, t) {
|
|
280
|
+
const n = Y(e.left - t.left), i = Y(e.top - t.top);
|
|
275
281
|
return Math.abs(n) < 0.5 && Math.abs(i) < 0.5 ? null : [{ transform: `translate(${n}px, ${i}px)` }, { transform: "translate(0px, 0px)" }];
|
|
276
282
|
}
|
|
277
|
-
function
|
|
283
|
+
function ct(e, t, n = "both", i = 1) {
|
|
278
284
|
if (t.width <= 0 || t.height <= 0) return !0;
|
|
279
|
-
const s = (o,
|
|
285
|
+
const s = (o, y, f, v) => y <= 0 ? o >= f - 1 && o <= f + v + 1 : Math.min(o + y, f + v) - Math.max(o, f) >= y * i - 1, r = s(e.left, e.width, t.left, t.width), p = s(e.top, e.height, t.top, t.height);
|
|
280
286
|
return n === "x" ? r : (n === "y" || r) && p;
|
|
281
287
|
}
|
|
282
288
|
function dt(e, t, n = 8) {
|
|
@@ -289,7 +295,7 @@ function ut(e, t, n) {
|
|
|
289
295
|
const s = t.left + t.width / 2 >= n.left + n.width / 2 ? n.left + n.width - e.width * 0.35 : n.left - e.width * 0.65, r = Math.min(Math.max(e.top, n.top), Math.max(n.top, n.top + n.height - e.height));
|
|
290
296
|
return { left: s, top: r, width: e.width, height: e.height };
|
|
291
297
|
}
|
|
292
|
-
function
|
|
298
|
+
function Y(e, t = 2) {
|
|
293
299
|
const n = 10 ** t;
|
|
294
300
|
return Math.round(e * n) / n;
|
|
295
301
|
}
|
|
@@ -320,145 +326,145 @@ function fe(e) {
|
|
|
320
326
|
return t;
|
|
321
327
|
}
|
|
322
328
|
function mt(e, { containerRef: t, reducedMotion: n }) {
|
|
323
|
-
const [i, s] =
|
|
329
|
+
const [i, s] = z(e), r = le(X(e)), p = le(X(i)), o = I(null), y = I(null), f = I({
|
|
324
330
|
animations: /* @__PURE__ */ new Set(),
|
|
325
331
|
clones: /* @__PURE__ */ new Map(),
|
|
326
332
|
hidden: /* @__PURE__ */ new Set(),
|
|
327
333
|
timers: /* @__PURE__ */ new Set()
|
|
328
|
-
}),
|
|
329
|
-
const
|
|
330
|
-
for (const m of [...
|
|
334
|
+
}), v = () => {
|
|
335
|
+
const l = f.current;
|
|
336
|
+
for (const m of [...l.animations])
|
|
331
337
|
try {
|
|
332
338
|
m.cancel();
|
|
333
339
|
} catch {
|
|
334
340
|
}
|
|
335
|
-
|
|
336
|
-
for (const m of
|
|
337
|
-
|
|
338
|
-
for (const m of
|
|
339
|
-
|
|
340
|
-
}, T = (
|
|
341
|
+
l.animations.clear();
|
|
342
|
+
for (const m of l.clones.values()) m.remove();
|
|
343
|
+
l.clones.clear();
|
|
344
|
+
for (const m of l.hidden) m.style.visibility = "";
|
|
345
|
+
l.hidden.clear();
|
|
346
|
+
}, T = (l, m) => {
|
|
341
347
|
const N = f.current;
|
|
342
|
-
return N.animations.add(
|
|
343
|
-
N.animations.delete(
|
|
344
|
-
},
|
|
348
|
+
return N.animations.add(l), l.onfinish = () => {
|
|
349
|
+
N.animations.delete(l), m?.();
|
|
350
|
+
}, l;
|
|
345
351
|
};
|
|
346
352
|
ne(() => {
|
|
347
353
|
if (r === p) return;
|
|
348
|
-
const
|
|
349
|
-
if (!
|
|
350
|
-
|
|
354
|
+
const l = t.current, m = o.current;
|
|
355
|
+
if (!l || !m || !pt()) {
|
|
356
|
+
v(), s(e);
|
|
351
357
|
return;
|
|
352
358
|
}
|
|
353
|
-
const N = fe(
|
|
354
|
-
for (const [
|
|
355
|
-
for (const [
|
|
356
|
-
|
|
359
|
+
const N = fe(l), k = /* @__PURE__ */ new Map();
|
|
360
|
+
for (const [g, M] of N) k.set(g, L(M));
|
|
361
|
+
for (const [g, M] of f.current.clones) M.isConnected && k.set(g, L(M));
|
|
362
|
+
v();
|
|
357
363
|
const h = it(X(i), X(e)), S = /* @__PURE__ */ new Map();
|
|
358
|
-
for (const
|
|
359
|
-
const M = N.get(
|
|
360
|
-
if (!M || !
|
|
361
|
-
const $ = gt(m, M,
|
|
362
|
-
S.set(
|
|
364
|
+
for (const g of [...h.flights.map((M) => M.id), ...h.exits.map((M) => M.id)]) {
|
|
365
|
+
const M = N.get(g), O = k.get(g);
|
|
366
|
+
if (!M || !O) continue;
|
|
367
|
+
const $ = gt(m, M, g, O);
|
|
368
|
+
S.set(g, $), f.current.clones.set(g, $);
|
|
363
369
|
}
|
|
364
|
-
|
|
370
|
+
y.current = { plan: h, rects: k, clones: S }, s(e);
|
|
365
371
|
}, [r, p]), ne(() => {
|
|
366
|
-
const
|
|
367
|
-
|
|
372
|
+
const l = y.current;
|
|
373
|
+
y.current = null;
|
|
368
374
|
const m = t.current;
|
|
369
|
-
!
|
|
370
|
-
}, [i]),
|
|
375
|
+
!l || !m || P(l, m, n ?? ge());
|
|
376
|
+
}, [i]), V(
|
|
371
377
|
() => () => {
|
|
372
|
-
|
|
373
|
-
for (const
|
|
378
|
+
v();
|
|
379
|
+
for (const l of f.current.timers) clearTimeout(l);
|
|
374
380
|
},
|
|
375
381
|
[]
|
|
376
382
|
);
|
|
377
|
-
function
|
|
378
|
-
const S = f.current,
|
|
379
|
-
for (const
|
|
380
|
-
const
|
|
381
|
-
|
|
383
|
+
function P({ plan: l, rects: m, clones: N }, k, h) {
|
|
384
|
+
const S = f.current, g = fe(k), M = l.flights.length > ot, O = L(k), $ = /* @__PURE__ */ new Set();
|
|
385
|
+
for (const c of l.flights) {
|
|
386
|
+
const x = g.get(c.id)?.closest("[data-board-column]");
|
|
387
|
+
x && !ct(L(x), O, "x", 0.5) && $.add(c.id);
|
|
382
388
|
}
|
|
383
|
-
for (const
|
|
384
|
-
const d =
|
|
385
|
-
if (!d || !
|
|
386
|
-
const C = dt(L(d), L(
|
|
387
|
-
C && (
|
|
389
|
+
for (const c of l.flights) {
|
|
390
|
+
const d = g.get(c.id), x = d?.closest("[data-column-scroll]");
|
|
391
|
+
if (!d || !x || $.has(c.id)) continue;
|
|
392
|
+
const C = dt(L(d), L(x));
|
|
393
|
+
C && (x.scrollTop += C);
|
|
388
394
|
}
|
|
389
|
-
const G = (
|
|
390
|
-
|
|
395
|
+
const G = (c, d, x, C = q, u, w = !1) => T(
|
|
396
|
+
c.animate(
|
|
391
397
|
w && !h ? [
|
|
392
398
|
{ opacity: d, transform: `scale(${d ? 1 : 0.96})` },
|
|
393
|
-
{ opacity:
|
|
394
|
-
] : [{ opacity: d }, { opacity:
|
|
399
|
+
{ opacity: x, transform: `scale(${x ? 1 : 0.96})` }
|
|
400
|
+
] : [{ opacity: d }, { opacity: x }],
|
|
395
401
|
// A clone holds its last frame until it is removed; a real card goes back to its own style.
|
|
396
|
-
{ duration: C, easing: "ease-out", fill:
|
|
402
|
+
{ duration: C, easing: "ease-out", fill: c.hasAttribute("data-flip-clone") ? "forwards" : "none" }
|
|
397
403
|
),
|
|
398
404
|
u
|
|
399
|
-
),
|
|
400
|
-
d.remove(), S.clones.get(
|
|
405
|
+
), B = (c, d) => {
|
|
406
|
+
d.remove(), S.clones.get(c) === d && S.clones.delete(c);
|
|
401
407
|
};
|
|
402
408
|
if (!h)
|
|
403
|
-
for (const
|
|
404
|
-
const d =
|
|
405
|
-
if (!d || !
|
|
406
|
-
const C =
|
|
409
|
+
for (const c of l.shifts) {
|
|
410
|
+
const d = g.get(c), x = m.get(c);
|
|
411
|
+
if (!d || !x) continue;
|
|
412
|
+
const C = lt(x, L(d));
|
|
407
413
|
C && T(d.animate(C, { duration: ft, easing: ee }));
|
|
408
414
|
}
|
|
409
|
-
for (const { id:
|
|
410
|
-
const d =
|
|
415
|
+
for (const { id: c } of l.enters) {
|
|
416
|
+
const d = g.get(c);
|
|
411
417
|
d && G(d, 0, 1, q, void 0, !0);
|
|
412
418
|
}
|
|
413
|
-
for (const { id:
|
|
414
|
-
const d = N.get(
|
|
415
|
-
d && G(d, 1, 0, q, () =>
|
|
419
|
+
for (const { id: c } of l.exits) {
|
|
420
|
+
const d = N.get(c);
|
|
421
|
+
d && G(d, 1, 0, q, () => B(c, d), !0);
|
|
416
422
|
}
|
|
417
|
-
const j = xt(
|
|
418
|
-
for (const
|
|
419
|
-
const d = N.get(
|
|
423
|
+
const j = xt(k, "--shadow-pop");
|
|
424
|
+
for (const c of l.flights) {
|
|
425
|
+
const d = N.get(c.id), x = g.get(c.id), C = m.get(c.id);
|
|
420
426
|
if (!d || !C) continue;
|
|
421
|
-
if (!
|
|
422
|
-
G(d, 1, 0, q, () =>
|
|
427
|
+
if (!x) {
|
|
428
|
+
G(d, 1, 0, q, () => B(c.id, d));
|
|
423
429
|
continue;
|
|
424
430
|
}
|
|
425
431
|
if (h || M) {
|
|
426
|
-
G(d, 1, 0, q * 1.2, () =>
|
|
432
|
+
G(d, 1, 0, q * 1.2, () => B(c.id, d)), G(x, 0, 1, q * 1.2), $.has(c.id) && _(c.to, h);
|
|
427
433
|
continue;
|
|
428
434
|
}
|
|
429
|
-
if ($.has(
|
|
430
|
-
const w =
|
|
435
|
+
if ($.has(c.id)) {
|
|
436
|
+
const w = x.closest("[data-board-column]"), A = ut(C, L(w), O);
|
|
431
437
|
T(
|
|
432
438
|
d.animate(ue(C, A, { shadow: j, fade: !0 }), {
|
|
433
|
-
duration: de(
|
|
439
|
+
duration: de(ce(C, A)),
|
|
434
440
|
easing: ee,
|
|
435
441
|
fill: "forwards"
|
|
436
442
|
}),
|
|
437
443
|
() => {
|
|
438
|
-
|
|
444
|
+
B(c.id, d), _(c.to, !1);
|
|
439
445
|
}
|
|
440
446
|
);
|
|
441
447
|
continue;
|
|
442
448
|
}
|
|
443
|
-
const u = L(
|
|
444
|
-
|
|
445
|
-
d.animate(ue(C, u, { shadow: j }), { duration: de(
|
|
449
|
+
const u = L(x);
|
|
450
|
+
x.style.visibility = "hidden", S.hidden.add(x), T(
|
|
451
|
+
d.animate(ue(C, u, { shadow: j }), { duration: de(ce(C, u)), easing: ee, fill: "forwards" }),
|
|
446
452
|
() => {
|
|
447
|
-
|
|
453
|
+
B(c.id, d), x.style.visibility = "", S.hidden.delete(x), F(x);
|
|
448
454
|
}
|
|
449
455
|
);
|
|
450
456
|
}
|
|
451
457
|
}
|
|
452
|
-
function F(
|
|
453
|
-
|
|
458
|
+
function F(l) {
|
|
459
|
+
l.setAttribute("data-landed", "");
|
|
454
460
|
const m = setTimeout(() => {
|
|
455
|
-
|
|
461
|
+
l.removeAttribute("data-landed"), f.current.timers.delete(m);
|
|
456
462
|
}, ht);
|
|
457
463
|
f.current.timers.add(m);
|
|
458
464
|
}
|
|
459
|
-
function _(
|
|
465
|
+
function _(l, m) {
|
|
460
466
|
if (!(typeof document > "u"))
|
|
461
|
-
for (const N of document.querySelectorAll(`[data-stage-chip="${
|
|
467
|
+
for (const N of document.querySelectorAll(`[data-stage-chip="${l}"], [data-stage-count="${l}"]`))
|
|
462
468
|
N.setAttribute("data-pulsed", ""), T(
|
|
463
469
|
N.animate(
|
|
464
470
|
m ? [{ opacity: 1 }, { opacity: 0.35 }, { opacity: 1 }] : [{ transform: "scale(1)" }, { transform: "scale(1.18)" }, { transform: "scale(1)" }],
|
|
@@ -467,7 +473,7 @@ function mt(e, { containerRef: t, reducedMotion: n }) {
|
|
|
467
473
|
() => N.removeAttribute("data-pulsed")
|
|
468
474
|
);
|
|
469
475
|
}
|
|
470
|
-
const
|
|
476
|
+
const H = typeof document > "u" ? null : We(
|
|
471
477
|
we("div", {
|
|
472
478
|
ref: o,
|
|
473
479
|
"data-board-overlay": "",
|
|
@@ -476,7 +482,7 @@ function mt(e, { containerRef: t, reducedMotion: n }) {
|
|
|
476
482
|
}),
|
|
477
483
|
document.body
|
|
478
484
|
);
|
|
479
|
-
return { shown: r === p ? e : i, overlay:
|
|
485
|
+
return { shown: r === p ? e : i, overlay: H };
|
|
480
486
|
}
|
|
481
487
|
function gt(e, t, n, i) {
|
|
482
488
|
const s = t.cloneNode(!0);
|
|
@@ -519,81 +525,84 @@ function vt(e, t) {
|
|
|
519
525
|
}
|
|
520
526
|
}
|
|
521
527
|
function kt(e) {
|
|
522
|
-
const [t, n] =
|
|
523
|
-
return
|
|
528
|
+
const [t, n] = z(() => Date.now());
|
|
529
|
+
return V(() => {
|
|
524
530
|
const i = setInterval(() => n(Date.now()), e);
|
|
525
531
|
return () => clearInterval(i);
|
|
526
532
|
}, [e]), t;
|
|
527
533
|
}
|
|
528
534
|
function Nt({ rows: e, seen: t, actions: n, loading: i, error: s, reducedMotion: r }) {
|
|
529
|
-
const [p, o] =
|
|
530
|
-
cancelAnimationFrame(
|
|
531
|
-
const u =
|
|
535
|
+
const [p, o] = z(() => yt(he)), y = J(() => ze(e, p), [e, p]), f = Ye(y), v = I(null), { shown: T, overlay: P } = mt(y, { containerRef: v, reducedMotion: r }), F = kt(3e4), [_, H] = z(y[0]?.stage ?? null), l = I(0), m = U(() => {
|
|
536
|
+
cancelAnimationFrame(l.current), l.current = requestAnimationFrame(() => {
|
|
537
|
+
const u = v.current;
|
|
532
538
|
if (!u) return;
|
|
533
539
|
const w = u.scrollLeft + u.clientWidth / 2;
|
|
534
540
|
let A = null;
|
|
535
541
|
for (const R of u.querySelectorAll("[data-board-column]")) {
|
|
536
|
-
const
|
|
537
|
-
(!A ||
|
|
542
|
+
const W = Math.abs(R.offsetLeft + R.offsetWidth / 2 - w);
|
|
543
|
+
(!A || W < A.d) && (A = { stage: R.dataset.boardColumn, d: W });
|
|
538
544
|
}
|
|
539
|
-
A &&
|
|
545
|
+
A && H(A.stage);
|
|
540
546
|
});
|
|
541
547
|
}, []);
|
|
542
|
-
|
|
543
|
-
const N =
|
|
548
|
+
V(() => () => cancelAnimationFrame(l.current), []);
|
|
549
|
+
const N = U(
|
|
544
550
|
(u) => {
|
|
545
|
-
const w =
|
|
551
|
+
const w = v.current, A = w?.querySelector(`[data-board-column="${u}"]`);
|
|
546
552
|
if (!w || !A) return;
|
|
547
|
-
|
|
548
|
-
const R = Math.max(0, A.offsetLeft - (w.clientWidth - A.offsetWidth) / 2),
|
|
549
|
-
typeof w.scrollTo == "function" ? w.scrollTo({ left: R, behavior:
|
|
553
|
+
H(u);
|
|
554
|
+
const R = Math.max(0, A.offsetLeft - (w.clientWidth - A.offsetWidth) / 2), W = r ?? ge() ? "auto" : "smooth";
|
|
555
|
+
typeof w.scrollTo == "function" ? w.scrollTo({ left: R, behavior: W }) : w.scrollLeft = R;
|
|
550
556
|
},
|
|
551
557
|
[r]
|
|
552
|
-
), [
|
|
558
|
+
), [k, h] = z(null), S = I(null), g = U(() => {
|
|
553
559
|
S.current && clearTimeout(S.current), S.current = null;
|
|
554
|
-
}, M =
|
|
555
|
-
|
|
560
|
+
}, []), M = U((u, w) => {
|
|
561
|
+
g(), S.current = setTimeout(
|
|
556
562
|
() => h(w ? { key: u.row.key, el: w } : null),
|
|
557
563
|
w ? bt : wt
|
|
558
564
|
);
|
|
559
|
-
}, []);
|
|
560
|
-
|
|
561
|
-
const [
|
|
562
|
-
|
|
563
|
-
}, []),
|
|
565
|
+
}, [g]);
|
|
566
|
+
V(() => g, [g]);
|
|
567
|
+
const [O, $] = z(null), G = U((u) => {
|
|
568
|
+
g(), h(null), $(u.row.key);
|
|
569
|
+
}, [g]), B = J(() => new Map(y.flatMap((u) => u.cards).map((u) => [u.row.key, u])), [y]), j = k?.el.isConnected ? B.get(k.key) : void 0, c = O ? B.get(O) : void 0, d = J(
|
|
564
570
|
() => ({
|
|
565
571
|
...n,
|
|
566
572
|
open: (u) => {
|
|
567
|
-
|
|
573
|
+
g(), h(null), n.open(u);
|
|
568
574
|
}
|
|
569
575
|
}),
|
|
570
|
-
[n]
|
|
571
|
-
),
|
|
576
|
+
[n, g]
|
|
577
|
+
), x = (u) => {
|
|
572
578
|
o(u), vt(he, u);
|
|
573
579
|
}, C = [
|
|
574
580
|
`${f.cards} card${f.cards === 1 ? "" : "s"}`,
|
|
575
581
|
f.waiting ? `⏸ ${f.waiting} need${f.waiting === 1 ? "s" : ""} input` : null,
|
|
576
582
|
f.attention ? `! ${f.attention} need${f.attention === 1 ? "s" : ""} attention` : null
|
|
577
583
|
];
|
|
578
|
-
return /* @__PURE__ */
|
|
579
|
-
/* @__PURE__ */
|
|
580
|
-
/* @__PURE__ */
|
|
584
|
+
return /* @__PURE__ */ b("div", { className: "flex h-full min-h-0 flex-col bg-bg", children: [
|
|
585
|
+
/* @__PURE__ */ b("header", { className: "flex shrink-0 flex-wrap items-end gap-x-6 gap-y-2 px-4 pt-4 pb-3 md:px-6 md:pt-5", children: [
|
|
586
|
+
/* @__PURE__ */ b("div", { className: "min-w-0", children: [
|
|
581
587
|
/* @__PURE__ */ a("h1", { className: "text-[20px] leading-7 font-semibold text-ink", children: "Board" }),
|
|
582
588
|
/* @__PURE__ */ a("p", { className: "mt-0.5 flex flex-wrap items-center gap-x-2 text-[12.5px] text-muted", "aria-live": "polite", children: C.map(
|
|
583
|
-
(u, w) => u ?
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
589
|
+
(u, w) => u ? (
|
|
590
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: fixed slots; the position is what styles each part
|
|
591
|
+
/* @__PURE__ */ b("span", { className: E(w === 1 && "text-warn", w === 2 && "text-warn"), children: [
|
|
592
|
+
w > 0 && /* @__PURE__ */ a("span", { className: "mr-2 text-faint", "aria-hidden": "true", children: "·" }),
|
|
593
|
+
u
|
|
594
|
+
] }, w)
|
|
595
|
+
) : null
|
|
587
596
|
) })
|
|
588
597
|
] }),
|
|
589
|
-
/* @__PURE__ */
|
|
598
|
+
/* @__PURE__ */ b("div", { className: "ml-auto flex items-center gap-3", children: [
|
|
590
599
|
i && e.length > 0 && /* @__PURE__ */ a(se, { size: "sm", className: "text-muted" }),
|
|
591
|
-
/* @__PURE__ */
|
|
600
|
+
/* @__PURE__ */ b(Ne, { className: "flex items-center gap-2", children: [
|
|
592
601
|
/* @__PURE__ */ a(
|
|
593
602
|
Se,
|
|
594
603
|
{
|
|
595
604
|
checked: p,
|
|
596
|
-
onChange:
|
|
605
|
+
onChange: x,
|
|
597
606
|
className: E(
|
|
598
607
|
"group relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-line bg-surface-hover transition-colors",
|
|
599
608
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 data-[checked]:border-accent data-[checked]:bg-accent"
|
|
@@ -615,10 +624,10 @@ function Nt({ rows: e, seen: t, actions: n, loading: i, error: s, reducedMotion:
|
|
|
615
624
|
className: "sticky top-0 z-10 shrink-0 border-y border-line-soft bg-bg/95 backdrop-blur-sm md:hidden"
|
|
616
625
|
}
|
|
617
626
|
),
|
|
618
|
-
i && !e.length ? /* @__PURE__ */ a("div", { className: "flex flex-1 items-center justify-center text-accent", children: /* @__PURE__ */ a(se, { size: "lg" }) }) : e.length ? /* @__PURE__ */
|
|
627
|
+
i && !e.length ? /* @__PURE__ */ a("div", { className: "flex flex-1 items-center justify-center text-accent", children: /* @__PURE__ */ a(se, { size: "lg" }) }) : e.length ? /* @__PURE__ */ b(
|
|
619
628
|
"div",
|
|
620
629
|
{
|
|
621
|
-
ref:
|
|
630
|
+
ref: v,
|
|
622
631
|
onScroll: m,
|
|
623
632
|
className: E(
|
|
624
633
|
"relative flex min-h-0 flex-1 items-start gap-3 overflow-x-auto overscroll-x-contain px-4 pt-3 pb-4 md:px-6 md:pt-1",
|
|
@@ -629,38 +638,38 @@ function Nt({ rows: e, seen: t, actions: n, loading: i, error: s, reducedMotion:
|
|
|
629
638
|
/* @__PURE__ */ a("div", { className: "w-px shrink-0", "aria-hidden": "true" })
|
|
630
639
|
]
|
|
631
640
|
}
|
|
632
|
-
) : /* @__PURE__ */ a(
|
|
633
|
-
|
|
634
|
-
j &&
|
|
635
|
-
|
|
641
|
+
) : /* @__PURE__ */ a(Oe, { icon: /* @__PURE__ */ a(Te, { size: 20 }), title: "No sessions yet", children: "Sessions you start appear here, one card each, and move between columns as their work goes on." }),
|
|
642
|
+
P,
|
|
643
|
+
j && k && /* @__PURE__ */ a(
|
|
644
|
+
Ue,
|
|
636
645
|
{
|
|
637
646
|
card: j,
|
|
638
|
-
anchor:
|
|
647
|
+
anchor: k.el,
|
|
639
648
|
seen: t,
|
|
640
649
|
now: F,
|
|
641
|
-
onPointerEnter:
|
|
650
|
+
onPointerEnter: g,
|
|
642
651
|
onPointerLeave: () => M(j, null)
|
|
643
652
|
}
|
|
644
653
|
),
|
|
645
|
-
/* @__PURE__ */ a(
|
|
654
|
+
/* @__PURE__ */ a(Be, { open: !!c, onClose: () => $(null), title: c?.row.title || c?.row.key || "", footer: c && /* @__PURE__ */ b(te, { children: [
|
|
646
655
|
/* @__PURE__ */ a(oe, { variant: "secondary", onClick: () => $(null), children: "Close" }),
|
|
647
656
|
/* @__PURE__ */ a(
|
|
648
657
|
oe,
|
|
649
658
|
{
|
|
650
659
|
variant: "primary",
|
|
651
660
|
onClick: () => {
|
|
652
|
-
$(null), n.open(
|
|
661
|
+
$(null), n.open(c);
|
|
653
662
|
},
|
|
654
663
|
children: "Open"
|
|
655
664
|
}
|
|
656
665
|
)
|
|
657
|
-
] }), children:
|
|
666
|
+
] }), children: c && /* @__PURE__ */ a(Ve, { card: c, seen: t, now: F }) })
|
|
658
667
|
] });
|
|
659
668
|
}
|
|
660
669
|
function Lt() {
|
|
661
|
-
const e =
|
|
662
|
-
|
|
663
|
-
|
|
670
|
+
const e = Ie(), t = ye(), { toast: n } = Pe(), i = e.filter((r) => r.fleet && !r.parent && !r.run && r.id).map((r) => `${r.id}:${r.status}`).join(",");
|
|
671
|
+
V(() => {
|
|
672
|
+
D.wantFleetTasks(D.activeFleetIds());
|
|
664
673
|
}, [i]);
|
|
665
674
|
const s = J(
|
|
666
675
|
() => ({
|
|
@@ -670,11 +679,11 @@ function Lt() {
|
|
|
670
679
|
o || n("Couldn't change the card's stage.", "danger");
|
|
671
680
|
});
|
|
672
681
|
},
|
|
673
|
-
markSeen: (r) =>
|
|
682
|
+
markSeen: (r) => D.markSeen(r)
|
|
674
683
|
}),
|
|
675
684
|
[t, n]
|
|
676
685
|
);
|
|
677
|
-
return /* @__PURE__ */ a(Nt, { rows: e, seen:
|
|
686
|
+
return /* @__PURE__ */ a(Nt, { rows: e, seen: D.seen, actions: s, loading: !D.listedOnce, error: D.listError });
|
|
678
687
|
}
|
|
679
688
|
export {
|
|
680
689
|
Nt as Board,
|