@burdenoff/microfe-planmagnet 2026.927.5 → 2026.928.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoutes.js +58 -54
  3. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  4. package/dist/planmagnet/board/ProjectBoard.d.ts +2 -0
  5. package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
  6. package/dist/planmagnet/board/ProjectBoard.js +546 -272
  7. package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
  8. package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
  9. package/dist/planmagnet/controls/ProjectControls.js +47 -40
  10. package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
  11. package/dist/planmagnet/controls/WorkItemControls.d.ts +9 -0
  12. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
  13. package/dist/planmagnet/controls/WorkItemControls.js +87 -59
  14. package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
  15. package/dist/planmagnet/hooks/useProjectWorkflow.d.ts +32 -0
  16. package/dist/planmagnet/hooks/useProjectWorkflow.d.ts.map +1 -0
  17. package/dist/planmagnet/hooks/useProjectWorkflow.js +44 -0
  18. package/dist/planmagnet/hooks/useProjectWorkflow.js.map +1 -0
  19. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts +2 -0
  20. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts.map +1 -0
  21. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js +261 -0
  22. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js.map +1 -0
  23. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  24. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +8 -9
  25. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  26. package/package.json +1 -1
@@ -1,14 +1,15 @@
1
1
  import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
2
  import { PersonName as n } from "../people/People.js";
3
3
  import { throwOnError as r } from "../utils/mutationResult.js";
4
- import { useState as i } from "react";
5
- import { ChevronLeft as a, ChevronRight as o, LayoutGrid as s, Pencil as c, Plus as l } from "lucide-react";
6
- import { gql as u } from "@apollo/client";
7
- import { useMutation as d, useQuery as f } from "@apollo/client/react";
8
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
9
- import { AlertDialog as h, AlertDialogAction as g, AlertDialogCancel as _, AlertDialogContent as v, AlertDialogDescription as y, AlertDialogFooter as b, AlertDialogHeader as x, AlertDialogTitle as S, AlertDialogTrigger as C, Button as w, Card as T, CardContent as E, Input as D, ResponsiveDialog as O, ResponsiveDialogContent as k, ResponsiveDialogDescription as A, ResponsiveDialogFooter as j, ResponsiveDialogHeader as M, ResponsiveDialogTitle as N, ResponsiveDialogTrigger as ee } from "@burdenoff/fe-libs/ui";
4
+ import { allowedTargets as i, useProjectWorkflow as a, workflowLabel as o } from "../hooks/useProjectWorkflow.js";
5
+ import { createContext as s, useContext as c, useState as l } from "react";
6
+ import { ChevronLeft as u, ChevronRight as d, LayoutGrid as f, Pencil as p, Plus as m } from "lucide-react";
7
+ import { gql as h } from "@apollo/client";
8
+ import { useApolloClient as g, useMutation as _, useQuery as v } from "@apollo/client/react";
9
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
10
+ import { AlertDialog as x, AlertDialogAction as S, AlertDialogCancel as ee, AlertDialogContent as C, AlertDialogDescription as w, AlertDialogFooter as te, AlertDialogHeader as T, AlertDialogTitle as E, AlertDialogTrigger as D, Button as O, Card as k, CardContent as ne, Input as A, ResponsiveDialog as re, ResponsiveDialogContent as ie, ResponsiveDialogDescription as j, ResponsiveDialogFooter as M, ResponsiveDialogHeader as N, ResponsiveDialogTitle as P, ResponsiveDialogTrigger as F } from "@burdenoff/fe-libs/ui";
10
11
  //#region src/planmagnet/board/ProjectBoard.tsx
11
- var te = [
12
+ var I = [
12
13
  "BACKLOG",
13
14
  "TODO",
14
15
  "IN_PROGRESS",
@@ -16,7 +17,10 @@ var te = [
16
17
  "TESTING",
17
18
  "DONE",
18
19
  "CANCELLED"
19
- ], P = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), F = 100, I = u`
20
+ ], L = s(null), R = () => {
21
+ let e = c(L);
22
+ return (t) => o(e, t);
23
+ }, z = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), B = 100, V = h`
20
24
  query ProjectBoards($workspaceId: ID!, $projectId: String) {
21
25
  planmagnetBoards(
22
26
  workspaceId: $workspaceId
@@ -30,7 +34,30 @@ var te = [
30
34
  }
31
35
  }
32
36
  }
33
- `, L = u`
37
+ `, H = h`
38
+ query ProjectBoardColumnPage($boardId: ID!, $columnId: ID!, $after: String) {
39
+ planmagnetBoardColumnCards(
40
+ boardId: $boardId
41
+ columnId: $columnId
42
+ pagination: { first: 100, after: $after }
43
+ ) {
44
+ pageInfo {
45
+ hasNextPage
46
+ endCursor
47
+ }
48
+ items {
49
+ id
50
+ key
51
+ title
52
+ status
53
+ priority
54
+ storyPoints
55
+ assigneeId
56
+ statusSince
57
+ }
58
+ }
59
+ }
60
+ `, U = h`
34
61
  query ProjectBoard($id: ID!) {
35
62
  planmagnetBoard(id: $id) {
36
63
  id
@@ -44,6 +71,10 @@ var te = [
44
71
  sortOrder
45
72
  cards(pagination: { first: 100 }) {
46
73
  totalCount
74
+ pageInfo {
75
+ hasNextPage
76
+ endCursor
77
+ }
47
78
  items {
48
79
  id
49
80
  key
@@ -52,434 +83,677 @@ var te = [
52
83
  priority
53
84
  storyPoints
54
85
  assigneeId
86
+ statusSince
55
87
  }
56
88
  }
57
89
  }
58
90
  }
59
91
  }
60
- `, R = u`
92
+ `, W = h`
61
93
  mutation ProjectBoardMoveCard($boardId: ID!, $input: PlanmagnetMoveCardInput!) {
62
94
  planmagnetMoveCard(boardId: $boardId, input: $input) {
63
95
  id
64
96
  }
65
97
  }
66
- `, z = u`
98
+ `, G = h`
67
99
  mutation ProjectBoardCreate($input: PlanmagnetCreateBoardInput!) {
68
100
  planmagnetCreateBoard(input: $input) {
69
101
  id
70
102
  }
71
103
  }
72
- `, B = u`
104
+ `, K = h`
73
105
  mutation ProjectBoardCreateColumn($input: PlanmagnetCreateBoardColumnInput!) {
74
106
  planmagnetCreateBoardColumn(input: $input) {
75
107
  id
76
108
  }
77
109
  }
78
- `, V = u`
110
+ `, q = h`
79
111
  mutation ProjectBoardUpdateColumn($id: ID!, $input: PlanmagnetUpdateBoardColumnInput!) {
80
112
  planmagnetUpdateBoardColumn(id: $id, input: $input) {
81
113
  id
82
114
  }
83
115
  }
84
- `, H = u`
116
+ `, ae = h`
85
117
  mutation ProjectBoardDeleteColumn($id: ID!) {
86
118
  planmagnetDeleteBoardColumn(id: $id)
87
119
  }
88
- `, U = u`
120
+ `, oe = h`
89
121
  mutation ProjectBoardReorder($boardId: ID!, $input: PlanmagnetReorderColumnsInput!) {
90
122
  planmagnetReorderColumns(boardId: $boardId, input: $input) {
91
123
  id
92
124
  }
93
125
  }
94
- `, W = [
126
+ `, J = [
95
127
  "ProjectBoard",
96
128
  "ProjectBoards",
97
129
  "GetWorkItems",
98
130
  "GetWorkItemCounts",
99
131
  "GetDashboardData"
100
- ], G = (e, t) => e instanceof Error ? e.message : t;
101
- function K({ message: e }) {
102
- return /* @__PURE__ */ p("p", {
132
+ ], Y = [
133
+ "CRITICAL",
134
+ "HIGH",
135
+ "MEDIUM",
136
+ "LOW",
137
+ "NONE"
138
+ ], se = 864e5;
139
+ function X(e, t) {
140
+ return e ? Math.max(0, Math.floor((t - new Date(e).getTime()) / se)) : null;
141
+ }
142
+ function ce(e) {
143
+ return e >= 14 ? "text-destructive font-medium" : e >= 7 ? "text-status-warning-text" : "text-muted-foreground";
144
+ }
145
+ function Z(e, t) {
146
+ return t === "assignee" ? e.assigneeId ?? "" : t === "priority" ? e.priority || "NONE" : "";
147
+ }
148
+ var Q = (e, t) => e instanceof Error ? e.message : t;
149
+ function $({ message: e }) {
150
+ return /* @__PURE__ */ y("p", {
103
151
  role: "alert",
104
152
  className: "text-sm text-destructive",
105
153
  children: e
106
154
  });
107
155
  }
108
- function q({ projectId: t, projectName: n }) {
109
- let { workspaceId: a } = e(), [o, c] = i(null), [u, h] = i(null), { data: g, loading: _ } = f(I, {
156
+ function le({ projectId: t, projectName: n }) {
157
+ let { workspaceId: i } = e(), o = g(), [s, c] = l(null), [u, d] = l(null), [p] = l(() => Date.now()), [h, x] = l("none"), [S, ee] = l({
158
+ key: null,
159
+ byColumn: {}
160
+ }), [C, w] = l(null), te = a(t), { data: T, loading: E } = v(V, {
110
161
  variables: {
111
- workspaceId: a,
162
+ workspaceId: i,
112
163
  projectId: t
113
164
  },
114
- skip: !a
115
- }), v = g?.planmagnetBoards.items ?? [], y = (o && v.some((e) => e.id === o) ? o : null) ?? v.find((e) => e.isDefault)?.id ?? v[0]?.id ?? null, { data: b, loading: x } = f(L, {
116
- variables: { id: y },
117
- skip: !y
118
- }), S = b?.planmagnetBoard ?? null, [C, D] = d(z, {
119
- refetchQueries: W,
165
+ skip: !i
166
+ }), D = T?.planmagnetBoards.items ?? [], A = (s && D.some((e) => e.id === s) ? s : null) ?? D.find((e) => e.isDefault)?.id ?? D[0]?.id ?? null, { data: re, loading: ie } = v(U, {
167
+ variables: { id: A },
168
+ skip: !A
169
+ }), j = re?.planmagnetBoard ?? null, M = S.key === j ? S.byColumn : {}, N = (e) => {
170
+ let t = M[e.id];
171
+ return {
172
+ items: t ? [...e.cards.items, ...t.items] : e.cards.items,
173
+ pageInfo: t ? t.pageInfo : e.cards.pageInfo,
174
+ totalCount: e.cards.totalCount
175
+ };
176
+ }, P = async (e) => {
177
+ let t = N(e).pageInfo.endCursor;
178
+ if (!(!j || !t)) {
179
+ d(null), w(e.id);
180
+ try {
181
+ let n = await o.query({
182
+ query: H,
183
+ variables: {
184
+ boardId: j.id,
185
+ columnId: e.id,
186
+ after: t
187
+ },
188
+ fetchPolicy: "network-only"
189
+ }), r = n.data?.planmagnetBoardColumnCards;
190
+ if (!r) throw Error(n.error?.message ?? "The next cards could not be loaded.");
191
+ let i = M[e.id]?.items ?? [];
192
+ ee({
193
+ key: j,
194
+ byColumn: {
195
+ ...M,
196
+ [e.id]: {
197
+ items: [...i, ...r.items],
198
+ pageInfo: r.pageInfo
199
+ }
200
+ }
201
+ });
202
+ } catch (e) {
203
+ d(Q(e, "The next cards could not be loaded."));
204
+ } finally {
205
+ w(null);
206
+ }
207
+ }
208
+ }, [F, I] = _(G, {
209
+ refetchQueries: J,
120
210
  awaitRefetchQueries: !0
121
- }), [O, k] = d(R, {
122
- refetchQueries: W,
211
+ }), [R, z] = _(W, {
212
+ refetchQueries: J,
123
213
  awaitRefetchQueries: !0
124
- }), [A] = d(U, {
125
- refetchQueries: W,
214
+ }), [B] = _(oe, {
215
+ refetchQueries: J,
126
216
  awaitRefetchQueries: !0
127
- }), j = async (e, t) => {
128
- h(null);
217
+ }), K = async (e, t) => {
218
+ d(null);
129
219
  try {
130
220
  await r(e());
131
221
  } catch (e) {
132
- h(G(e, t));
222
+ d(Q(e, t));
133
223
  }
134
- }, M = (e, t) => j(() => O({ variables: {
135
- boardId: y,
224
+ }, q = (e, t) => K(() => R({ variables: {
225
+ boardId: A,
136
226
  input: {
137
227
  workItemId: e,
138
228
  targetColumnId: t
139
229
  }
140
- } }), "The card could not be moved."), N = (e, t) => {
141
- if (!S) return;
142
- let n = S.columns.map((e) => e.id), r = e + t;
143
- if (!(r < 0 || r >= n.length)) return [n[e], n[r]] = [n[r], n[e]], j(() => A({ variables: {
144
- boardId: y,
230
+ } }), "The card could not be moved."), ae = (e, t) => {
231
+ if (!j) return;
232
+ let n = j.columns.map((e) => e.id), r = e + t;
233
+ if (!(r < 0 || r >= n.length)) return [n[e], n[r]] = [n[r], n[e]], K(() => B({ variables: {
234
+ boardId: A,
145
235
  input: { columnIds: n }
146
236
  } }), "The columns could not be reordered.");
147
237
  };
148
- return _ && !g ? /* @__PURE__ */ p("p", {
238
+ return E && !T ? /* @__PURE__ */ y("p", {
149
239
  className: "text-sm text-muted-foreground p-4",
150
240
  children: "Loading board…"
151
- }) : y ? /* @__PURE__ */ m("div", {
152
- className: "space-y-3",
153
- "data-testid": "project-board",
154
- children: [
155
- /* @__PURE__ */ m("div", {
156
- className: "flex flex-wrap items-center gap-3",
157
- children: [
158
- v.length > 1 && /* @__PURE__ */ p("select", {
159
- "aria-label": "Board",
160
- className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
161
- value: y,
162
- onChange: (e) => c(e.target.value),
163
- children: v.map((e) => /* @__PURE__ */ p("option", {
164
- value: e.id,
165
- children: e.name
166
- }, e.id))
167
- }),
168
- S && S.unplacedCount > 0 && /* @__PURE__ */ m("p", {
169
- className: "text-xs text-muted-foreground",
170
- "data-testid": "board-unplaced",
171
- children: [
172
- S.unplacedCount,
173
- " work item",
174
- S.unplacedCount === 1 ? " is" : "s are",
175
- " not on this board: ",
176
- S.unplacedCount === 1 ? "its status has" : "their status has",
177
- " no column."
178
- ]
179
- }),
180
- S && /* @__PURE__ */ p("div", {
181
- className: "ml-auto",
182
- children: /* @__PURE__ */ p(Y, { boardId: S.id })
183
- })
184
- ]
185
- }),
186
- u && /* @__PURE__ */ p(K, { message: u }),
187
- x && !S ? /* @__PURE__ */ p("p", {
188
- className: "text-sm text-muted-foreground p-4",
189
- children: "Loading board…"
190
- }) : /* @__PURE__ */ m("div", {
191
- className: "flex gap-3 overflow-x-auto pb-2",
192
- children: [S?.columns.map((e, t) => /* @__PURE__ */ p(J, {
193
- boardId: S.id,
194
- column: e,
195
- columns: S.columns,
196
- isFirst: t === 0,
197
- isLast: t === S.columns.length - 1,
198
- busy: k.loading,
199
- onMove: M,
200
- onShift: (e) => N(t, e)
201
- }, e.id)), S && S.columns.length === 0 && /* @__PURE__ */ p("p", {
241
+ }) : A ? /* @__PURE__ */ y(L.Provider, {
242
+ value: te,
243
+ children: /* @__PURE__ */ b("div", {
244
+ className: "space-y-3",
245
+ "data-testid": "project-board",
246
+ children: [
247
+ /* @__PURE__ */ b("div", {
248
+ className: "flex flex-wrap items-center gap-3",
249
+ children: [
250
+ D.length > 1 && /* @__PURE__ */ y("select", {
251
+ "aria-label": "Board",
252
+ className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
253
+ value: A,
254
+ onChange: (e) => c(e.target.value),
255
+ children: D.map((e) => /* @__PURE__ */ y("option", {
256
+ value: e.id,
257
+ children: e.name
258
+ }, e.id))
259
+ }),
260
+ j && /* @__PURE__ */ b("label", {
261
+ className: "flex items-center gap-1 text-sm",
262
+ children: [/* @__PURE__ */ y("span", {
263
+ className: "text-muted-foreground",
264
+ children: "Swimlanes"
265
+ }), /* @__PURE__ */ b("select", {
266
+ "aria-label": "Swimlanes",
267
+ "data-testid": "board-lanes",
268
+ className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
269
+ value: h,
270
+ onChange: (e) => x(e.target.value),
271
+ children: [
272
+ /* @__PURE__ */ y("option", {
273
+ value: "none",
274
+ children: "None"
275
+ }),
276
+ /* @__PURE__ */ y("option", {
277
+ value: "assignee",
278
+ children: "By assignee"
279
+ }),
280
+ /* @__PURE__ */ y("option", {
281
+ value: "priority",
282
+ children: "By priority"
283
+ })
284
+ ]
285
+ })]
286
+ }),
287
+ j && j.unplacedCount > 0 && /* @__PURE__ */ b("p", {
288
+ className: "text-xs text-muted-foreground",
289
+ "data-testid": "board-unplaced",
290
+ children: [
291
+ j.unplacedCount,
292
+ " work item",
293
+ j.unplacedCount === 1 ? " is" : "s are",
294
+ " not on this board: ",
295
+ j.unplacedCount === 1 ? "its status has" : "their status has",
296
+ " no column."
297
+ ]
298
+ }),
299
+ j && /* @__PURE__ */ y("div", {
300
+ className: "ml-auto",
301
+ children: /* @__PURE__ */ y(he, { boardId: j.id })
302
+ })
303
+ ]
304
+ }),
305
+ u && /* @__PURE__ */ y($, { message: u }),
306
+ ie && !j ? /* @__PURE__ */ y("p", {
202
307
  className: "text-sm text-muted-foreground p-4",
203
- children: "This board has no columns. Add one to start placing work."
204
- })]
205
- })
206
- ]
207
- }) : /* @__PURE__ */ p(T, { children: /* @__PURE__ */ m(E, {
308
+ children: "Loading board…"
309
+ }) : j && h !== "none" ? /* @__PURE__ */ y(pe, {
310
+ board: j,
311
+ laneBy: h,
312
+ cardsOf: N,
313
+ now: p,
314
+ busy: z.loading,
315
+ loadingMore: C,
316
+ onLoadMore: (e) => void P(e),
317
+ onMove: q
318
+ }) : /* @__PURE__ */ b("div", {
319
+ className: "flex gap-3 overflow-x-auto pb-2",
320
+ children: [j?.columns.map((e, t) => /* @__PURE__ */ y(me, {
321
+ boardId: j.id,
322
+ column: e,
323
+ columns: j.columns,
324
+ cards: N(e),
325
+ isFirst: t === 0,
326
+ isLast: t === j.columns.length - 1,
327
+ busy: z.loading,
328
+ now: p,
329
+ loadingMore: C === e.id,
330
+ onLoadMore: () => void P(e),
331
+ onMove: q,
332
+ onShift: (e) => ae(t, e)
333
+ }, e.id)), j && j.columns.length === 0 && /* @__PURE__ */ y("p", {
334
+ className: "text-sm text-muted-foreground p-4",
335
+ children: "This board has no columns. Add one to start placing work."
336
+ })]
337
+ })
338
+ ]
339
+ })
340
+ }) : /* @__PURE__ */ y(k, { children: /* @__PURE__ */ b(ne, {
208
341
  className: "p-8 text-center space-y-3",
209
342
  "data-testid": "board-empty",
210
343
  children: [
211
- /* @__PURE__ */ p(s, { className: "h-8 w-8 mx-auto text-muted-foreground" }),
212
- /* @__PURE__ */ m("p", {
344
+ /* @__PURE__ */ y(f, { className: "h-8 w-8 mx-auto text-muted-foreground" }),
345
+ /* @__PURE__ */ b("p", {
213
346
  className: "text-sm text-muted-foreground",
214
347
  children: [n, " has no board yet."]
215
348
  }),
216
- /* @__PURE__ */ m(w, {
349
+ /* @__PURE__ */ b(O, {
217
350
  size: "sm",
218
- disabled: D.loading,
219
- onClick: () => j(() => C({ variables: { input: {
351
+ disabled: I.loading,
352
+ onClick: () => K(() => F({ variables: { input: {
220
353
  projectId: t,
221
354
  name: `${n} board`,
222
355
  type: "KANBAN",
223
356
  isDefault: !0,
224
357
  withDefaultColumns: !0
225
358
  } } }), "The board could not be created."),
226
- children: [/* @__PURE__ */ p(l, { className: "mr-1 h-4 w-4" }), D.loading ? "Creating…" : "Create board"]
359
+ children: [/* @__PURE__ */ y(m, { className: "mr-1 h-4 w-4" }), I.loading ? "Creating…" : "Create board"]
227
360
  }),
228
- /* @__PURE__ */ p("p", {
361
+ /* @__PURE__ */ y("p", {
229
362
  className: "text-xs text-muted-foreground",
230
363
  children: "Starts with one column per status: Backlog, To Do, In Progress, In Review, Testing, Done."
231
364
  }),
232
- u && /* @__PURE__ */ p(K, { message: u })
365
+ u && /* @__PURE__ */ y($, { message: u })
233
366
  ]
234
367
  }) });
235
368
  }
236
- function J({ boardId: e, column: r, columns: s, isFirst: c, isLast: l, busy: u, onMove: d, onShift: f }) {
237
- let h = t(), [g, _] = i(!1), v = r.cards.totalCount, y = r.wipLimit != null && r.wipLimit > 0 && v >= r.wipLimit, b = v - r.cards.items.length;
238
- return /* @__PURE__ */ m("section", {
239
- "aria-label": `${r.name} column`,
240
- "data-testid": `board-column-${r.name}`,
241
- className: `min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30 ${g ? "ring-2 ring-primary" : ""}`,
369
+ function ue({ card: e, column: r, columns: a, busy: s, now: l, onMove: u }) {
370
+ let d = t(), f = c(L), p = X(e.statusSince, l), m = i(f, e.status, I), h = a.filter((e) => e.id !== r.id && (!e.mappedStatus || m.includes(e.mappedStatus)));
371
+ return /* @__PURE__ */ b("li", {
372
+ draggable: !0,
373
+ onDragStart: (t) => {
374
+ t.dataTransfer.setData("text/plain", e.id), t.dataTransfer.effectAllowed = "move";
375
+ },
376
+ className: "rounded-md border bg-background p-2 space-y-1 cursor-grab",
377
+ "data-testid": "board-card",
378
+ children: [
379
+ /* @__PURE__ */ y("button", {
380
+ type: "button",
381
+ className: "text-left text-sm font-medium leading-tight hover:underline",
382
+ onClick: () => d(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`),
383
+ children: e.title
384
+ }),
385
+ /* @__PURE__ */ b("div", {
386
+ className: "flex items-center justify-between text-[11px] text-muted-foreground",
387
+ children: [
388
+ /* @__PURE__ */ y("span", { children: e.key }),
389
+ p !== null && /* @__PURE__ */ y("span", {
390
+ "data-testid": "card-age",
391
+ className: ce(p),
392
+ title: `In ${o(f, e.status)} since ${new Date(e.statusSince ?? "").toLocaleDateString()}`,
393
+ children: p === 0 ? "today" : `${p}d in status`
394
+ }),
395
+ /* @__PURE__ */ b("span", { children: [e.storyPoints ?? 0, " pts"] })
396
+ ]
397
+ }),
398
+ /* @__PURE__ */ b("div", {
399
+ className: "flex items-center justify-between gap-1 text-[11px] text-muted-foreground",
400
+ children: [/* @__PURE__ */ y("span", {
401
+ className: "truncate",
402
+ children: e.assigneeId ? /* @__PURE__ */ y(n, { id: e.assigneeId }) : "Unassigned"
403
+ }), /* @__PURE__ */ b("select", {
404
+ "aria-label": `Move ${e.key} to column`,
405
+ className: "rounded border border-input bg-background px-1 py-0.5 text-[11px]",
406
+ value: "",
407
+ disabled: s,
408
+ onChange: (t) => t.target.value && u(e.id, t.target.value),
409
+ children: [/* @__PURE__ */ y("option", {
410
+ value: "",
411
+ children: "Move…"
412
+ }), h.map((e) => /* @__PURE__ */ y("option", {
413
+ value: e.id,
414
+ children: e.name
415
+ }, e.id))]
416
+ })]
417
+ })
418
+ ]
419
+ });
420
+ }
421
+ function de({ column: e, onMove: t, className: n, children: r, label: i }) {
422
+ let [a, o] = l(!1);
423
+ return /* @__PURE__ */ y("section", {
424
+ "aria-label": i,
425
+ className: `${n} ${a ? "ring-2 ring-primary" : ""}`,
242
426
  onDragOver: (e) => {
243
- e.preventDefault(), _(!0);
427
+ e.preventDefault(), o(!0);
244
428
  },
245
- onDragLeave: () => _(!1),
246
- onDrop: (e) => {
247
- e.preventDefault(), _(!1);
248
- let t = e.dataTransfer.getData("text/plain");
249
- t && d(t, r.id);
429
+ onDragLeave: () => o(!1),
430
+ onDrop: (n) => {
431
+ n.preventDefault(), o(!1);
432
+ let r = n.dataTransfer.getData("text/plain");
433
+ r && t(r, e.id);
250
434
  },
435
+ children: r
436
+ });
437
+ }
438
+ function fe({ cards: e, loading: t, onLoadMore: n }) {
439
+ let r = e.totalCount - e.items.length;
440
+ return r <= 0 || !e.pageInfo.hasNextPage ? null : /* @__PURE__ */ b("div", {
441
+ className: "px-2 pb-2 space-y-1",
442
+ children: [/* @__PURE__ */ b("p", {
443
+ className: "text-xs text-muted-foreground",
444
+ children: [
445
+ "Showing ",
446
+ e.items.length,
447
+ " of ",
448
+ e.totalCount
449
+ ]
450
+ }), /* @__PURE__ */ y(O, {
451
+ size: "sm",
452
+ variant: "outline",
453
+ className: "w-full",
454
+ "data-testid": "board-column-more",
455
+ disabled: t,
456
+ onClick: n,
457
+ children: t ? "Loading…" : `Show ${Math.min(r, B)} more`
458
+ })]
459
+ });
460
+ }
461
+ function pe({ board: e, laneBy: t, cardsOf: r, now: i, busy: a, loadingMore: o, onLoadMore: s, onMove: c }) {
462
+ let l = e.columns.map((e) => ({
463
+ column: e,
464
+ cards: r(e)
465
+ })), u = [...new Set(l.flatMap(({ cards: e }) => e.items.map((e) => Z(e, t))))].sort((e, n) => t === "priority" ? Y.indexOf(e) - Y.indexOf(n) : e === "" ? 1 : n === "" ? -1 : e.localeCompare(n)), d = (e) => t === "priority" ? z(e) : e ? /* @__PURE__ */ y(n, { id: e }) : "Unassigned";
466
+ return /* @__PURE__ */ b("div", {
467
+ className: "overflow-x-auto pb-2 space-y-3",
468
+ "data-testid": "board-swimlanes",
251
469
  children: [
252
- /* @__PURE__ */ m("header", {
253
- className: "p-2 border-b space-y-1",
254
- children: [/* @__PURE__ */ m("div", {
255
- className: "flex items-center justify-between gap-1",
256
- children: [/* @__PURE__ */ p("h3", {
470
+ /* @__PURE__ */ b("p", {
471
+ className: "text-xs text-muted-foreground",
472
+ children: [
473
+ "Dragging moves a card between columns. Its lane follows its",
474
+ " ",
475
+ t === "priority" ? "priority" : "assignee",
476
+ "."
477
+ ]
478
+ }),
479
+ /* @__PURE__ */ y("div", {
480
+ className: "flex gap-3",
481
+ children: l.map(({ column: e, cards: t }) => /* @__PURE__ */ y("div", {
482
+ className: "min-w-[240px] w-[240px] shrink-0 px-2",
483
+ children: /* @__PURE__ */ b("h3", {
257
484
  className: "text-sm font-medium truncate",
258
- children: r.name
259
- }), /* @__PURE__ */ p("span", {
260
- "data-testid": `board-column-count-${r.name}`,
261
- className: `text-xs rounded-full px-1.5 ${y ? "bg-status-warning-subtle text-status-warning" : "bg-muted"}`,
262
- title: r.wipLimit ? `WIP limit ${r.wipLimit}` : void 0,
263
- children: r.wipLimit ? `${v} / ${r.wipLimit}` : v
264
- })]
265
- }), /* @__PURE__ */ m("div", {
266
- className: "flex items-center justify-between gap-1",
267
- children: [/* @__PURE__ */ p("span", {
268
- className: "text-[11px] text-muted-foreground",
269
- children: r.mappedStatus ? `Sets status: ${P(r.mappedStatus)}` : "No status"
270
- }), /* @__PURE__ */ m("span", {
271
- className: "flex",
272
485
  children: [
273
- /* @__PURE__ */ p(w, {
274
- size: "icon",
275
- variant: "ghost",
276
- className: "h-6 w-6",
277
- "aria-label": `Move ${r.name} column left`,
278
- disabled: c,
279
- onClick: () => f(-1),
280
- children: /* @__PURE__ */ p(a, { className: "h-3.5 w-3.5" })
281
- }),
282
- /* @__PURE__ */ p(w, {
283
- size: "icon",
284
- variant: "ghost",
285
- className: "h-6 w-6",
286
- "aria-label": `Move ${r.name} column right`,
287
- disabled: l,
288
- onClick: () => f(1),
289
- children: /* @__PURE__ */ p(o, { className: "h-3.5 w-3.5" })
290
- }),
291
- /* @__PURE__ */ p(Y, {
292
- boardId: e,
293
- column: r
486
+ e.name,
487
+ " ",
488
+ /* @__PURE__ */ y("span", {
489
+ className: "text-xs text-muted-foreground",
490
+ children: e.wipLimit ? `${t.totalCount} / ${e.wipLimit}` : t.totalCount
294
491
  })
295
492
  ]
296
- })]
297
- })]
493
+ })
494
+ }, e.id))
298
495
  }),
299
- /* @__PURE__ */ m("ul", {
300
- className: "p-2 space-y-2 min-h-[80px]",
301
- children: [r.cards.items.map((e) => /* @__PURE__ */ m("li", {
302
- draggable: !0,
303
- onDragStart: (t) => {
304
- t.dataTransfer.setData("text/plain", e.id), t.dataTransfer.effectAllowed = "move";
305
- },
306
- className: "rounded-md border bg-background p-2 space-y-1 cursor-grab",
307
- "data-testid": "board-card",
496
+ u.length === 0 && /* @__PURE__ */ y("p", {
497
+ className: "text-sm text-muted-foreground p-4",
498
+ children: "No cards on this board yet."
499
+ }),
500
+ u.map((n) => /* @__PURE__ */ b("div", {
501
+ "data-testid": "board-lane",
502
+ className: "space-y-1",
503
+ children: [/* @__PURE__ */ b("p", {
504
+ className: "text-xs font-medium",
308
505
  children: [
309
- /* @__PURE__ */ p("button", {
310
- type: "button",
311
- className: "text-left text-sm font-medium leading-tight hover:underline",
312
- onClick: () => h(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`),
313
- children: e.title
314
- }),
315
- /* @__PURE__ */ m("div", {
316
- className: "flex items-center justify-between text-[11px] text-muted-foreground",
317
- children: [/* @__PURE__ */ p("span", { children: e.key }), /* @__PURE__ */ m("span", { children: [e.storyPoints ?? 0, " pts"] })]
318
- }),
319
- /* @__PURE__ */ m("div", {
320
- className: "flex items-center justify-between gap-1 text-[11px] text-muted-foreground",
321
- children: [/* @__PURE__ */ p("span", {
322
- className: "truncate",
323
- children: e.assigneeId ? /* @__PURE__ */ p(n, { id: e.assigneeId }) : "Unassigned"
324
- }), /* @__PURE__ */ m("select", {
325
- "aria-label": `Move ${e.key} to column`,
326
- className: "rounded border border-input bg-background px-1 py-0.5 text-[11px]",
327
- value: "",
328
- disabled: u,
329
- onChange: (t) => t.target.value && d(e.id, t.target.value),
330
- children: [/* @__PURE__ */ p("option", {
331
- value: "",
332
- children: "Move…"
333
- }), s.filter((e) => e.id !== r.id).map((e) => /* @__PURE__ */ p("option", {
334
- value: e.id,
335
- children: e.name
336
- }, e.id))]
337
- })]
506
+ d(n),
507
+ " ",
508
+ /* @__PURE__ */ b("span", {
509
+ className: "text-muted-foreground",
510
+ children: [
511
+ "(",
512
+ l.reduce((e, { cards: r }) => e + r.items.filter((e) => Z(e, t) === n).length, 0),
513
+ ")"
514
+ ]
338
515
  })
339
516
  ]
340
- }, e.id)), v === 0 && /* @__PURE__ */ p("li", {
341
- className: "text-xs text-muted-foreground text-center py-4",
342
- children: "Empty"
517
+ }), /* @__PURE__ */ y("div", {
518
+ className: "flex gap-3",
519
+ children: l.map(({ column: r, cards: o }) => /* @__PURE__ */ y(de, {
520
+ column: r,
521
+ onMove: c,
522
+ label: `${r.name} column`,
523
+ className: "min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30",
524
+ children: /* @__PURE__ */ y("ul", {
525
+ className: "p-2 space-y-2 min-h-[48px]",
526
+ children: o.items.filter((e) => Z(e, t) === n).map((t) => /* @__PURE__ */ y(ue, {
527
+ card: t,
528
+ column: r,
529
+ columns: e.columns,
530
+ busy: a,
531
+ now: i,
532
+ onMove: c
533
+ }, t.id))
534
+ })
535
+ }, r.id))
343
536
  })]
344
- }),
345
- b > 0 && /* @__PURE__ */ m("p", {
346
- className: "px-2 pb-2 text-xs text-muted-foreground",
347
- children: [
348
- "+",
349
- b,
350
- " more (showing the first ",
351
- F,
352
- ")"
353
- ]
537
+ }, n || "none")),
538
+ /* @__PURE__ */ y("div", {
539
+ className: "flex gap-3",
540
+ children: l.map(({ column: e, cards: t }) => /* @__PURE__ */ y("div", {
541
+ className: "min-w-[240px] w-[240px] shrink-0",
542
+ children: /* @__PURE__ */ y(fe, {
543
+ cards: t,
544
+ loading: o === e.id,
545
+ onLoadMore: () => s(e)
546
+ })
547
+ }, e.id))
354
548
  })
355
549
  ]
356
550
  });
357
551
  }
358
- function Y({ boardId: e, column: t }) {
359
- let n = t !== void 0, [a, o] = i(!1), [s, u] = i(t?.name ?? ""), [f, T] = i(t?.mappedStatus ?? ""), [E, F] = i(t?.wipLimit ? String(t.wipLimit) : ""), [I, L] = i(null), R = {
360
- refetchQueries: W,
552
+ function me({ boardId: e, column: t, columns: n, cards: r, isFirst: i, isLast: a, busy: o, now: s, loadingMore: c, onLoadMore: l, onMove: f, onShift: p }) {
553
+ let m = r.totalCount, h = t.wipLimit != null && t.wipLimit > 0 && m >= t.wipLimit, g = R();
554
+ return /* @__PURE__ */ y(de, {
555
+ column: t,
556
+ onMove: f,
557
+ label: `${t.name} column`,
558
+ className: "min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30",
559
+ children: /* @__PURE__ */ b("div", {
560
+ "data-testid": `board-column-${t.name}`,
561
+ children: [
562
+ /* @__PURE__ */ b("header", {
563
+ className: "p-2 border-b space-y-1",
564
+ children: [/* @__PURE__ */ b("div", {
565
+ className: "flex items-center justify-between gap-1",
566
+ children: [/* @__PURE__ */ y("h3", {
567
+ className: "text-sm font-medium truncate",
568
+ children: t.name
569
+ }), /* @__PURE__ */ y("span", {
570
+ "data-testid": `board-column-count-${t.name}`,
571
+ className: `text-xs rounded-full px-1.5 ${h ? "bg-status-warning-subtle text-status-warning" : "bg-muted"}`,
572
+ title: t.wipLimit ? `WIP limit ${t.wipLimit}` : void 0,
573
+ children: t.wipLimit ? `${m} / ${t.wipLimit}` : m
574
+ })]
575
+ }), /* @__PURE__ */ b("div", {
576
+ className: "flex items-center justify-between gap-1",
577
+ children: [/* @__PURE__ */ y("span", {
578
+ className: "text-[11px] text-muted-foreground",
579
+ children: t.mappedStatus ? `Sets status: ${g(t.mappedStatus)}` : "No status"
580
+ }), /* @__PURE__ */ b("span", {
581
+ className: "flex",
582
+ children: [
583
+ /* @__PURE__ */ y(O, {
584
+ size: "icon",
585
+ variant: "ghost",
586
+ className: "h-6 w-6",
587
+ "aria-label": `Move ${t.name} column left`,
588
+ disabled: i,
589
+ onClick: () => p(-1),
590
+ children: /* @__PURE__ */ y(u, { className: "h-3.5 w-3.5" })
591
+ }),
592
+ /* @__PURE__ */ y(O, {
593
+ size: "icon",
594
+ variant: "ghost",
595
+ className: "h-6 w-6",
596
+ "aria-label": `Move ${t.name} column right`,
597
+ disabled: a,
598
+ onClick: () => p(1),
599
+ children: /* @__PURE__ */ y(d, { className: "h-3.5 w-3.5" })
600
+ }),
601
+ /* @__PURE__ */ y(he, {
602
+ boardId: e,
603
+ column: t
604
+ })
605
+ ]
606
+ })]
607
+ })]
608
+ }),
609
+ /* @__PURE__ */ b("ul", {
610
+ className: "p-2 space-y-2 min-h-[80px]",
611
+ children: [r.items.map((e) => /* @__PURE__ */ y(ue, {
612
+ card: e,
613
+ column: t,
614
+ columns: n,
615
+ busy: o,
616
+ now: s,
617
+ onMove: f
618
+ }, e.id)), m === 0 && /* @__PURE__ */ y("li", {
619
+ className: "text-xs text-muted-foreground text-center py-4",
620
+ children: "Empty"
621
+ })]
622
+ }),
623
+ /* @__PURE__ */ y(fe, {
624
+ cards: r,
625
+ loading: c,
626
+ onLoadMore: l
627
+ })
628
+ ]
629
+ })
630
+ });
631
+ }
632
+ function he({ boardId: e, column: t }) {
633
+ let n = t !== void 0, i = R(), [a, o] = l(!1), [s, c] = l(t?.name ?? ""), [u, d] = l(t?.mappedStatus ?? ""), [f, h] = l(t?.wipLimit ? String(t.wipLimit) : ""), [g, v] = l(null), k = {
634
+ refetchQueries: J,
361
635
  awaitRefetchQueries: !0
362
- }, [z, U] = d(B, R), [q, J] = d(V, R), [Y, ne] = d(H, R), X = U.loading || J.loading || ne.loading, Z = E.trim() === "" ? null : Number(E), Q = Z !== null && (!Number.isInteger(Z) || Z < 1), re = s.trim() !== "" && !Q && !X, ie = () => {
363
- u(t?.name ?? ""), T(t?.mappedStatus ?? ""), F(t?.wipLimit ? String(t.wipLimit) : ""), L(null);
364
- }, ae = async () => {
365
- L(null);
636
+ }, [ne, L] = _(K, k), [z, B] = _(q, k), [V, H] = _(ae, k), U = L.loading || B.loading || H.loading, W = f.trim() === "" ? null : Number(f), G = W !== null && (!Number.isInteger(W) || W < 1), oe = s.trim() !== "" && !G && !U, Y = () => {
637
+ c(t?.name ?? ""), d(t?.mappedStatus ?? ""), h(t?.wipLimit ? String(t.wipLimit) : ""), v(null);
638
+ }, se = async () => {
639
+ v(null);
366
640
  let i = {
367
641
  name: s.trim(),
368
- mappedStatus: f || null,
369
- wipLimit: Z
642
+ mappedStatus: u || null,
643
+ wipLimit: W
370
644
  };
371
645
  try {
372
- n ? await r(q({ variables: {
646
+ n ? await r(z({ variables: {
373
647
  id: t.id,
374
648
  input: i
375
- } })) : await r(z({ variables: { input: {
649
+ } })) : await r(ne({ variables: { input: {
376
650
  boardId: e,
377
651
  type: "CUSTOM",
378
652
  ...i
379
653
  } } })), o(!1);
380
654
  } catch (e) {
381
- L(G(e, "The column could not be saved."));
655
+ v(Q(e, "The column could not be saved."));
382
656
  }
383
- }, $ = n ? `column-${t.id}` : "new-column";
384
- return /* @__PURE__ */ m(O, {
657
+ }, X = n ? `column-${t.id}` : "new-column";
658
+ return /* @__PURE__ */ b(re, {
385
659
  open: a,
386
660
  onOpenChange: (e) => {
387
- o(e), e && ie();
661
+ o(e), e && Y();
388
662
  },
389
- children: [/* @__PURE__ */ p(ee, {
663
+ children: [/* @__PURE__ */ y(F, {
390
664
  asChild: !0,
391
- children: n ? /* @__PURE__ */ p(w, {
665
+ children: n ? /* @__PURE__ */ y(O, {
392
666
  size: "icon",
393
667
  variant: "ghost",
394
668
  className: "h-6 w-6",
395
669
  "aria-label": `Edit ${t.name} column`,
396
- children: /* @__PURE__ */ p(c, { className: "h-3.5 w-3.5" })
397
- }) : /* @__PURE__ */ m(w, {
670
+ children: /* @__PURE__ */ y(p, { className: "h-3.5 w-3.5" })
671
+ }) : /* @__PURE__ */ b(O, {
398
672
  size: "sm",
399
673
  variant: "outline",
400
- children: [/* @__PURE__ */ p(l, { className: "mr-1 h-4 w-4" }), "Add column"]
674
+ children: [/* @__PURE__ */ y(m, { className: "mr-1 h-4 w-4" }), "Add column"]
401
675
  })
402
- }), /* @__PURE__ */ m(k, {
676
+ }), /* @__PURE__ */ b(ie, {
403
677
  className: "max-w-md",
404
678
  children: [
405
- /* @__PURE__ */ m(M, { children: [/* @__PURE__ */ p(N, { children: n ? `Edit ${t.name}` : "Add column" }), /* @__PURE__ */ p(A, { children: "Moving a card into a column that sets a status changes the work item's status." })] }),
406
- /* @__PURE__ */ m("div", {
679
+ /* @__PURE__ */ b(N, { children: [/* @__PURE__ */ y(P, { children: n ? `Edit ${t.name}` : "Add column" }), /* @__PURE__ */ y(j, { children: "Moving a card into a column that sets a status changes the work item's status." })] }),
680
+ /* @__PURE__ */ b("div", {
407
681
  className: "space-y-3",
408
682
  children: [
409
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
410
- htmlFor: `${$}-name`,
683
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
684
+ htmlFor: `${X}-name`,
411
685
  className: "text-sm font-medium",
412
686
  children: "Name"
413
- }), /* @__PURE__ */ p(D, {
414
- id: `${$}-name`,
687
+ }), /* @__PURE__ */ y(A, {
688
+ id: `${X}-name`,
415
689
  className: "mt-1",
416
690
  value: s,
417
- onChange: (e) => u(e.target.value)
691
+ onChange: (e) => c(e.target.value)
418
692
  })] }),
419
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
420
- htmlFor: `${$}-status`,
693
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
694
+ htmlFor: `${X}-status`,
421
695
  className: "text-sm font-medium",
422
696
  children: "Sets status"
423
- }), /* @__PURE__ */ m("select", {
424
- id: `${$}-status`,
697
+ }), /* @__PURE__ */ b("select", {
698
+ id: `${X}-status`,
425
699
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
426
- value: f,
427
- onChange: (e) => T(e.target.value),
428
- children: [/* @__PURE__ */ p("option", {
700
+ value: u,
701
+ onChange: (e) => d(e.target.value),
702
+ children: [/* @__PURE__ */ y("option", {
429
703
  value: "",
430
704
  children: "No status (cards keep theirs)"
431
- }), te.map((e) => /* @__PURE__ */ p("option", {
705
+ }), I.map((e) => /* @__PURE__ */ y("option", {
432
706
  value: e,
433
- children: P(e)
707
+ children: i(e)
434
708
  }, e))]
435
709
  })] }),
436
- /* @__PURE__ */ m("div", { children: [
437
- /* @__PURE__ */ p("label", {
438
- htmlFor: `${$}-wip`,
710
+ /* @__PURE__ */ b("div", { children: [
711
+ /* @__PURE__ */ y("label", {
712
+ htmlFor: `${X}-wip`,
439
713
  className: "text-sm font-medium",
440
714
  children: "WIP limit (blank for none)"
441
715
  }),
442
- /* @__PURE__ */ p(D, {
443
- id: `${$}-wip`,
716
+ /* @__PURE__ */ y(A, {
717
+ id: `${X}-wip`,
444
718
  type: "number",
445
719
  min: 1,
446
720
  className: "mt-1",
447
- value: E,
448
- onChange: (e) => F(e.target.value)
721
+ value: f,
722
+ onChange: (e) => h(e.target.value)
449
723
  }),
450
- Q && /* @__PURE__ */ p(K, { message: "The WIP limit must be a whole number, 1 or more." })
724
+ G && /* @__PURE__ */ y($, { message: "The WIP limit must be a whole number, 1 or more." })
451
725
  ] })
452
726
  ]
453
727
  }),
454
- I && /* @__PURE__ */ p(K, { message: I }),
455
- /* @__PURE__ */ m(j, {
728
+ g && /* @__PURE__ */ y($, { message: g }),
729
+ /* @__PURE__ */ b(M, {
456
730
  className: "gap-2",
457
- children: [n && /* @__PURE__ */ m(h, { children: [/* @__PURE__ */ p(C, {
731
+ children: [n && /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(D, {
458
732
  asChild: !0,
459
- children: /* @__PURE__ */ p(w, {
733
+ children: /* @__PURE__ */ y(O, {
460
734
  variant: "outline",
461
- disabled: X,
735
+ disabled: U,
462
736
  children: "Delete column"
463
737
  })
464
- }), /* @__PURE__ */ m(v, { children: [/* @__PURE__ */ m(x, { children: [/* @__PURE__ */ m(S, { children: [
738
+ }), /* @__PURE__ */ b(C, { children: [/* @__PURE__ */ b(T, { children: [/* @__PURE__ */ b(E, { children: [
465
739
  "Delete ",
466
740
  t.name,
467
741
  "?"
468
- ] }), /* @__PURE__ */ p(y, { children: "Its cards are not deleted: each goes back to the column for its status, or off the board if no column sets that status." })] }), /* @__PURE__ */ m(b, { children: [/* @__PURE__ */ p(_, { children: "Keep it" }), /* @__PURE__ */ p(g, {
742
+ ] }), /* @__PURE__ */ y(w, { children: "Its cards are not deleted: each goes back to the column for its status, or off the board if no column sets that status." })] }), /* @__PURE__ */ b(te, { children: [/* @__PURE__ */ y(ee, { children: "Keep it" }), /* @__PURE__ */ y(S, {
469
743
  className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
470
744
  onClick: async () => {
471
745
  try {
472
- await r(Y({ variables: { id: t.id } })), o(!1);
746
+ await r(V({ variables: { id: t.id } })), o(!1);
473
747
  } catch (e) {
474
- L(G(e, "The column could not be deleted."));
748
+ v(Q(e, "The column could not be deleted."));
475
749
  }
476
750
  },
477
751
  children: "Delete column"
478
- })] })] })] }), /* @__PURE__ */ p(w, {
479
- onClick: ae,
480
- disabled: !re,
481
- "data-testid": `${$}-save`,
482
- children: X ? "Saving…" : n ? "Save" : "Add column"
752
+ })] })] })] }), /* @__PURE__ */ y(O, {
753
+ onClick: se,
754
+ disabled: !oe,
755
+ "data-testid": `${X}-save`,
756
+ children: U ? "Saving…" : n ? "Save" : "Add column"
483
757
  })]
484
758
  })
485
759
  ]
@@ -487,6 +761,6 @@ function Y({ boardId: e, column: t }) {
487
761
  });
488
762
  }
489
763
  //#endregion
490
- export { q as ProjectBoard };
764
+ export { le as ProjectBoard };
491
765
 
492
766
  //# sourceMappingURL=ProjectBoard.js.map