@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.
Files changed (63) hide show
  1. package/README.md +1 -1
  2. package/dist/ArtifactsPage-BxaqShTv.js +1178 -0
  3. package/dist/{BoardPage-BAQrGP7G.js → BoardPage-DH7p5o99.js} +274 -265
  4. package/dist/{CardDetail-CCgP8R61.js → CardDetail-LfDCJQhS.js} +42 -33
  5. package/dist/{ComparePage-FcLLhKzC.js → ComparePage-CrbCyu4u.js} +33 -33
  6. package/dist/MemoriesPage-BRA53Hlb.js +679 -0
  7. package/dist/{OverviewPage-CbfbyGNT.js → OverviewPage-BSBqY83_.js} +50 -49
  8. package/dist/{RegisterPage-3-hJNQEV.js → RegisterPage-64yGl9E-.js} +76 -76
  9. package/dist/SessionPage-C4hSlxWQ.js +906 -0
  10. package/dist/api/agentClient.d.ts +66 -1
  11. package/dist/api/wire.d.ts +540 -4
  12. package/dist/features/artifacts/ArtifactDetail.d.ts +15 -0
  13. package/dist/features/artifacts/ArtifactDialogs.d.ts +29 -0
  14. package/dist/features/artifacts/ArtifactLedger.d.ts +11 -0
  15. package/dist/features/artifacts/ArtifactStats.d.ts +9 -0
  16. package/dist/features/artifacts/ArtifactsPage.d.ts +1 -0
  17. package/dist/features/artifacts/artifactsCommands.d.ts +3 -0
  18. package/dist/features/artifacts/artifactsStore.d.ts +27 -0
  19. package/dist/features/artifacts/artifactsUi.d.ts +33 -0
  20. package/dist/features/bootstrap.d.ts +1 -0
  21. package/dist/features/chat/model/artifactAccess.d.ts +50 -0
  22. package/dist/features/chat/model/artifactCsv.d.ts +11 -0
  23. package/dist/features/chat/model/artifactExport.d.ts +45 -0
  24. package/dist/features/chat/model/artifactStats.d.ts +79 -0
  25. package/dist/features/chat/model/artifacts.d.ts +151 -0
  26. package/dist/features/chat/model/claims.d.ts +102 -0
  27. package/dist/features/chat/model/contextSources.d.ts +41 -0
  28. package/dist/features/chat/model/entries.d.ts +37 -2
  29. package/dist/features/chat/model/fleet.d.ts +11 -0
  30. package/dist/features/chat/model/format.d.ts +6 -0
  31. package/dist/features/chat/model/inspect.d.ts +11 -0
  32. package/dist/features/chat/model/memory.d.ts +3 -3
  33. package/dist/features/chat/model/memoryRecords.d.ts +79 -0
  34. package/dist/features/chat/model/monitors.d.ts +11 -0
  35. package/dist/features/chat/model/progress.d.ts +73 -0
  36. package/dist/features/chat/model/routing.d.ts +20 -0
  37. package/dist/features/chat/model/store.d.ts +5 -0
  38. package/dist/features/chat/model/tasks.d.ts +1 -1
  39. package/dist/features/chat/panels/ProgressPanel.d.ts +8 -0
  40. package/dist/features/chat/session/ComposerHistory.d.ts +1 -1
  41. package/dist/features/chat/session/SessionController.d.ts +3 -2
  42. package/dist/features/chat/session/useFileMentions.d.ts +18 -5
  43. package/dist/features/chat/transcript/ArtifactCard.d.ts +8 -0
  44. package/dist/features/chat/transcript/Rows.d.ts +12 -1
  45. package/dist/features/commands/InspectDialog.d.ts +3 -0
  46. package/dist/features/commands/dialogs.d.ts +1 -1
  47. package/dist/features/commands/registry.d.ts +1 -1
  48. package/dist/features/memories/MemoriesPage.d.ts +1 -0
  49. package/dist/features/memories/memoriesCommands.d.ts +3 -0
  50. package/dist/features/memories/memoriesController.d.ts +81 -0
  51. package/dist/features/memory/MemoryDialog.d.ts +1 -1
  52. package/dist/features/memory/memoryService.d.ts +10 -10
  53. package/dist/features/workspace/claimsCommands.d.ts +26 -0
  54. package/dist/features/workspace/collisionsWatcher.d.ts +7 -0
  55. package/dist/features/workspace/useSessionPageHooks.d.ts +1 -1
  56. package/dist/{index-NjGO7Jg1.js → index-CMPf-3JZ.js} +4821 -3447
  57. package/dist/index.d.ts +2 -0
  58. package/dist/index.js +86 -82
  59. package/dist/lib/paths.d.ts +12 -0
  60. package/dist/lib/zip.d.ts +14 -0
  61. package/dist/{promptHistory-DjSCHmEk.js → promptHistory-BR0NpLCI.js} +14 -14
  62. package/package.json +1 -1
  63. package/dist/SessionPage-CA9hAakW.js +0 -865
@@ -1,152 +1,156 @@
1
- import { jsxs as x, jsx as a, Fragment as te } from "react/jsx-runtime";
2
- import { memo as xe, useRef as P, Fragment as be, useState as K, useLayoutEffect as ne, useEffect as Y, createElement as we, useMemo as J, useCallback as W } from "react";
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 { y as H, ae as $e, a as E, I as Ae, au as Ee, av as z, aw as ae, ax as _e, ay as Q, ad as Le, az as pe, a1 as Pe, g as Ie, aA as se, aB as Fe, F as Be, ah as Oe, H as oe } from "./index-NjGO7Jg1.js";
7
- import { a as He, S as De, c as Ge, b as je, d as Re, i as ze, e as me, f as qe, g as Ke, h as Ue, j as Ye, C as Ve } from "./CardDetail-CCgP8R61.js";
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 = H.subscribe(() => {
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 = H.attach(e);
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, v = P(null), f = P(null), k = P(!1), T = He(o, n), I = De[o.status], F = Ge(t), _ = je(o, i), D = $e(o.costUsd), c = o.status === "failed" || o.attention === "failed", m = Re(o), N = ze(o, n), y = () => {
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 /* @__PURE__ */ x(
28
- "article",
29
- {
30
- ref: v,
31
- "data-card-id": o.key,
32
- "data-stage": o.stage,
33
- "aria-label": o.title || o.key,
34
- className: E(
35
- "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",
36
- "hover:border-accent/40 hover:shadow-pop focus-within:border-accent/50",
37
- "data-[landed]:border-accent data-[landed]:ring-2 data-[landed]:ring-accent/35",
38
- T ? c ? "border-danger-line" : "border-warn-line" : "border-line",
39
- !o.attached && "bg-surface-alt",
40
- "select-none [-webkit-touch-callout:none]"
41
- ),
42
- onPointerEnter: (h) => {
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
- /* @__PURE__ */ x("div", { className: "flex items-start gap-2", children: [
84
- /* @__PURE__ */ a(
85
- "span",
86
- {
87
- className: E("mt-px w-3 shrink-0 text-center text-[12px] leading-5", I.tone, o.status === "running" && "animate-pulse"),
88
- title: I.label,
89
- "aria-label": I.label,
90
- children: I.glyph
91
- }
92
- ),
93
- /* @__PURE__ */ a(
94
- "button",
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
- "block min-w-0 flex-1 text-left text-[13px] leading-5 font-semibold text-ink [overflow-wrap:anywhere]",
100
- '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',
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: /* @__PURE__ */ a("span", { className: "line-clamp-2", children: o.title || o.key })
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__ */ x(ve, { as: "div", className: "relative z-10 -mt-1 -mr-1.5 shrink-0", children: [
107
- /* @__PURE__ */ a(ke, { as: be, children: /* @__PURE__ */ a(
108
- Ae,
85
+ /* @__PURE__ */ b("div", { className: "flex items-start gap-2", children: [
86
+ /* @__PURE__ */ a(
87
+ "span",
109
88
  {
110
- label: "Card actions",
111
- size: "sm",
112
- className: "opacity-70 group-hover:opacity-100 data-[open]:opacity-100 pointer-coarse:opacity-100",
113
- children: /* @__PURE__ */ a(Ce, { size: 15 })
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__ */ x(Ee, { children: [
117
- /* @__PURE__ */ a(z, { onClick: () => s.open(t), children: "Open" }),
118
- o.prUrl && /* @__PURE__ */ a(z, { onClick: () => window.open(o.prUrl, "_blank", "noopener,noreferrer"), children: "Open pull request" }),
119
- m && /* @__PURE__ */ x(te, { children: [
120
- /* @__PURE__ */ a(ae, {}),
121
- /* @__PURE__ */ a(_e, { children: "Set stage" }),
122
- /* @__PURE__ */ a(z, { onClick: () => s.setStage(o, "backlog"), children: Q.backlog }),
123
- /* @__PURE__ */ a(z, { onClick: () => s.setStage(o, "cancelled"), children: Q.cancelled }),
124
- /* @__PURE__ */ a(z, { onClick: () => s.setStage(o, null), children: "Clear" })
125
- ] }),
126
- N && /* @__PURE__ */ x(te, { children: [
127
- /* @__PURE__ */ a(ae, {}),
128
- /* @__PURE__ */ a(z, { onClick: () => s.markSeen(o), children: "Mark seen" })
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
- D && /* @__PURE__ */ a("span", { children: D }),
146
- o.model && /* @__PURE__ */ a("span", { className: "min-w-0 truncate", children: o.model })
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__ */ x(
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__ */ x("header", { className: "flex h-10 shrink-0 items-center gap-2 px-3", children: [
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__ */ x(
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__ */ x(
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__ */ x("span", { className: "rounded-full bg-warn-soft px-1.5 text-[10.5px] leading-4 text-warn", children: [
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) n.ids.forEach((i, s) => t.set(i, { stage: n.stage, index: s }));
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 ce(e) {
260
+ function le(e) {
255
261
  return e.map((t) => `${t.stage}:${t.ids.join("")}`).join("");
256
262
  }
257
- function le(e, t) {
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 = U(t.left + t.width / 2 - (e.left + e.width / 2)), r = U(t.top + t.height / 2 - (e.top + e.height / 2)), p = e.width > 0 ? U(t.width / e.width, 4) : 1, o = e.height > 0 ? U(t.height / e.height, 4) : 1, v = (k, T) => `translate(${k}px, ${T + Z.y}px) scale(${Z.scale}) rotate(${Z.rotate}deg)`;
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: v(0, 0), boxShadow: i, opacity: 1 },
269
- { offset: 0.84, transform: v(s, r), boxShadow: i, opacity: 1 },
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 ct(e, t) {
274
- const n = U(e.left - t.left), i = U(e.top - t.top);
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 lt(e, t, n = "both", i = 1) {
283
+ function ct(e, t, n = "both", i = 1) {
278
284
  if (t.width <= 0 || t.height <= 0) return !0;
279
- const s = (o, v, f, k) => v <= 0 ? o >= f - 1 && o <= f + k + 1 : Math.min(o + v, f + k) - Math.max(o, f) >= v * i - 1, r = s(e.left, e.width, t.left, t.width), p = s(e.top, e.height, t.top, t.height);
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 U(e, t = 2) {
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] = K(e), r = ce(X(e)), p = ce(X(i)), o = P(null), v = P(null), f = P({
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
- }), k = () => {
329
- const c = f.current;
330
- for (const m of [...c.animations])
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
- c.animations.clear();
336
- for (const m of c.clones.values()) m.remove();
337
- c.clones.clear();
338
- for (const m of c.hidden) m.style.visibility = "";
339
- c.hidden.clear();
340
- }, T = (c, m) => {
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(c), c.onfinish = () => {
343
- N.animations.delete(c), m?.();
344
- }, c;
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 c = t.current, m = o.current;
349
- if (!c || !m || !pt()) {
350
- k(), s(e);
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(c), y = /* @__PURE__ */ new Map();
354
- for (const [b, M] of N) y.set(b, L(M));
355
- for (const [b, M] of f.current.clones) M.isConnected && y.set(b, L(M));
356
- k();
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 b of [...h.flights.map((M) => M.id), ...h.exits.map((M) => M.id)]) {
359
- const M = N.get(b), B = y.get(b);
360
- if (!M || !B) continue;
361
- const $ = gt(m, M, b, B);
362
- S.set(b, $), f.current.clones.set(b, $);
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
- v.current = { plan: h, rects: y, clones: S }, s(e);
370
+ y.current = { plan: h, rects: k, clones: S }, s(e);
365
371
  }, [r, p]), ne(() => {
366
- const c = v.current;
367
- v.current = null;
372
+ const l = y.current;
373
+ y.current = null;
368
374
  const m = t.current;
369
- !c || !m || I(c, m, n ?? ge());
370
- }, [i]), Y(
375
+ !l || !m || P(l, m, n ?? ge());
376
+ }, [i]), V(
371
377
  () => () => {
372
- k();
373
- for (const c of f.current.timers) clearTimeout(c);
378
+ v();
379
+ for (const l of f.current.timers) clearTimeout(l);
374
380
  },
375
381
  []
376
382
  );
377
- function I({ plan: c, rects: m, clones: N }, y, h) {
378
- const S = f.current, b = fe(y), M = c.flights.length > ot, B = L(y), $ = /* @__PURE__ */ new Set();
379
- for (const l of c.flights) {
380
- const g = b.get(l.id)?.closest("[data-board-column]");
381
- g && !lt(L(g), B, "x", 0.5) && $.add(l.id);
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 l of c.flights) {
384
- const d = b.get(l.id), g = d?.closest("[data-column-scroll]");
385
- if (!d || !g || $.has(l.id)) continue;
386
- const C = dt(L(d), L(g));
387
- C && (g.scrollTop += 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 = (l, d, g, C = q, u, w = !1) => T(
390
- l.animate(
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: g, transform: `scale(${g ? 1 : 0.96})` }
394
- ] : [{ opacity: d }, { opacity: g }],
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: l.hasAttribute("data-flip-clone") ? "forwards" : "none" }
402
+ { duration: C, easing: "ease-out", fill: c.hasAttribute("data-flip-clone") ? "forwards" : "none" }
397
403
  ),
398
404
  u
399
- ), O = (l, d) => {
400
- d.remove(), S.clones.get(l) === d && S.clones.delete(l);
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 l of c.shifts) {
404
- const d = b.get(l), g = m.get(l);
405
- if (!d || !g) continue;
406
- const C = ct(g, L(d));
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: l } of c.enters) {
410
- const d = b.get(l);
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: l } of c.exits) {
414
- const d = N.get(l);
415
- d && G(d, 1, 0, q, () => O(l, d), !0);
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(y, "--shadow-pop");
418
- for (const l of c.flights) {
419
- const d = N.get(l.id), g = b.get(l.id), C = m.get(l.id);
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 (!g) {
422
- G(d, 1, 0, q, () => O(l.id, d));
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, () => O(l.id, d)), G(g, 0, 1, q * 1.2), $.has(l.id) && _(l.to, h);
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(l.id)) {
430
- const w = g.closest("[data-board-column]"), A = ut(C, L(w), B);
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(le(C, A)),
439
+ duration: de(ce(C, A)),
434
440
  easing: ee,
435
441
  fill: "forwards"
436
442
  }),
437
443
  () => {
438
- O(l.id, d), _(l.to, !1);
444
+ B(c.id, d), _(c.to, !1);
439
445
  }
440
446
  );
441
447
  continue;
442
448
  }
443
- const u = L(g);
444
- g.style.visibility = "hidden", S.hidden.add(g), T(
445
- d.animate(ue(C, u, { shadow: j }), { duration: de(le(C, u)), easing: ee, fill: "forwards" }),
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
- O(l.id, d), g.style.visibility = "", S.hidden.delete(g), F(g);
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(c) {
453
- c.setAttribute("data-landed", "");
458
+ function F(l) {
459
+ l.setAttribute("data-landed", "");
454
460
  const m = setTimeout(() => {
455
- c.removeAttribute("data-landed"), f.current.timers.delete(m);
461
+ l.removeAttribute("data-landed"), f.current.timers.delete(m);
456
462
  }, ht);
457
463
  f.current.timers.add(m);
458
464
  }
459
- function _(c, m) {
465
+ function _(l, m) {
460
466
  if (!(typeof document > "u"))
461
- for (const N of document.querySelectorAll(`[data-stage-chip="${c}"], [data-stage-count="${c}"]`))
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 D = typeof document > "u" ? null : We(
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: D };
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] = K(() => Date.now());
523
- return Y(() => {
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] = K(() => yt(he)), v = J(() => Ke(e, p), [e, p]), f = Ue(v), k = P(null), { shown: T, overlay: I } = mt(v, { containerRef: k, reducedMotion: r }), F = kt(3e4), [_, D] = K(v[0]?.stage ?? null), c = P(0), m = W(() => {
530
- cancelAnimationFrame(c.current), c.current = requestAnimationFrame(() => {
531
- const u = k.current;
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 V = Math.abs(R.offsetLeft + R.offsetWidth / 2 - w);
537
- (!A || V < A.d) && (A = { stage: R.dataset.boardColumn, d: V });
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 && D(A.stage);
545
+ A && H(A.stage);
540
546
  });
541
547
  }, []);
542
- Y(() => () => cancelAnimationFrame(c.current), []);
543
- const N = W(
548
+ V(() => () => cancelAnimationFrame(l.current), []);
549
+ const N = U(
544
550
  (u) => {
545
- const w = k.current, A = w?.querySelector(`[data-board-column="${u}"]`);
551
+ const w = v.current, A = w?.querySelector(`[data-board-column="${u}"]`);
546
552
  if (!w || !A) return;
547
- D(u);
548
- const R = Math.max(0, A.offsetLeft - (w.clientWidth - A.offsetWidth) / 2), V = r ?? ge() ? "auto" : "smooth";
549
- typeof w.scrollTo == "function" ? w.scrollTo({ left: R, behavior: V }) : w.scrollLeft = R;
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
- ), [y, h] = K(null), S = P(null), b = () => {
558
+ ), [k, h] = z(null), S = I(null), g = U(() => {
553
559
  S.current && clearTimeout(S.current), S.current = null;
554
- }, M = W((u, w) => {
555
- b(), S.current = setTimeout(
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
- Y(() => b, []);
561
- const [B, $] = K(null), G = W((u) => {
562
- b(), h(null), $(u.row.key);
563
- }, []), O = J(() => new Map(v.flatMap((u) => u.cards).map((u) => [u.row.key, u])), [v]), j = y && y.el.isConnected ? O.get(y.key) : void 0, l = B ? O.get(B) : void 0, d = J(
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
- b(), h(null), n.open(u);
573
+ g(), h(null), n.open(u);
568
574
  }
569
575
  }),
570
- [n]
571
- ), g = (u) => {
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__ */ x("div", { className: "flex h-full min-h-0 flex-col bg-bg", children: [
579
- /* @__PURE__ */ x("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: [
580
- /* @__PURE__ */ x("div", { className: "min-w-0", children: [
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 ? /* @__PURE__ */ x("span", { className: E(w === 1 && "text-warn", w === 2 && "text-warn"), children: [
584
- w > 0 && /* @__PURE__ */ a("span", { className: "mr-2 text-faint", "aria-hidden": "true", children: "·" }),
585
- u
586
- ] }, w) : null
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__ */ x("div", { className: "ml-auto flex items-center gap-3", children: [
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__ */ x(Ne, { className: "flex items-center gap-2", children: [
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: g,
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__ */ x(
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: k,
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(Be, { 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." }),
633
- I,
634
- j && y && /* @__PURE__ */ a(
635
- Ye,
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: y.el,
647
+ anchor: k.el,
639
648
  seen: t,
640
649
  now: F,
641
- onPointerEnter: b,
650
+ onPointerEnter: g,
642
651
  onPointerLeave: () => M(j, null)
643
652
  }
644
653
  ),
645
- /* @__PURE__ */ a(Oe, { open: !!l, onClose: () => $(null), title: l?.row.title || l?.row.key || "", footer: l && /* @__PURE__ */ x(te, { children: [
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(l);
661
+ $(null), n.open(c);
653
662
  },
654
663
  children: "Open"
655
664
  }
656
665
  )
657
- ] }), children: l && /* @__PURE__ */ a(Ve, { card: l, seen: t, now: F }) })
666
+ ] }), children: c && /* @__PURE__ */ a(Ve, { card: c, seen: t, now: F }) })
658
667
  ] });
659
668
  }
660
669
  function Lt() {
661
- const e = Pe(), t = ye(), { toast: n } = Ie(), i = e.filter((r) => r.fleet && !r.parent && !r.run && r.id).map((r) => `${r.id}:${r.status}`).join(",");
662
- Y(() => {
663
- H.wantFleetTasks(H.activeFleetIds());
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) => H.markSeen(r)
682
+ markSeen: (r) => D.markSeen(r)
674
683
  }),
675
684
  [t, n]
676
685
  );
677
- return /* @__PURE__ */ a(Nt, { rows: e, seen: H.seen, actions: s, loading: !H.listedOnce, error: H.listError });
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,