@burdenoff/microfe-planmagnet 2026.928.5 → 2026.928.7

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 (66) hide show
  1. package/dist/generated/wspace-operations.d.ts +5 -0
  2. package/dist/generated/wspace-operations.d.ts.map +1 -1
  3. package/dist/generated/wspace-types.d.ts +15 -0
  4. package/dist/generated/wspace-types.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  6. package/dist/planmagnet/PlanMagnetRoot.js +20 -11
  7. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  8. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  9. package/dist/planmagnet/PlanMagnetRoutes.js +216 -196
  10. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  11. package/dist/planmagnet/controls/Pickers.d.ts +14 -0
  12. package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
  13. package/dist/planmagnet/controls/Pickers.js +97 -22
  14. package/dist/planmagnet/controls/Pickers.js.map +1 -1
  15. package/dist/planmagnet/controls/WorkItemControls.d.ts +6 -2
  16. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
  17. package/dist/planmagnet/controls/WorkItemControls.js +8 -8
  18. package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
  19. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  20. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +11 -3
  21. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  22. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +1 -1
  23. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +74 -59
  24. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +1 -1
  25. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -1
  26. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +138 -112
  27. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
  28. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  29. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +16 -6
  30. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  31. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  32. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +7 -2
  33. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  34. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
  35. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +76 -56
  36. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
  37. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  38. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +241 -188
  39. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  40. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  41. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +168 -122
  42. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  43. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -1
  44. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +288 -91
  45. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -1
  46. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts +2 -0
  47. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -0
  48. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +217 -0
  49. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -0
  50. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts +2 -0
  51. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +1 -0
  52. package/dist/planmagnet/pages/TeamTeamEditPagePage.js +211 -0
  53. package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +1 -0
  54. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts +2 -0
  55. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +1 -0
  56. package/dist/planmagnet/pages/TeamTeamsListPagePage.js +118 -0
  57. package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +1 -0
  58. package/dist/planmagnet/sprints/SprintControls.d.ts +15 -3
  59. package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
  60. package/dist/planmagnet/sprints/SprintControls.js +293 -190
  61. package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
  62. package/dist/planmagnet/team/TeamControls.d.ts +31 -0
  63. package/dist/planmagnet/team/TeamControls.d.ts.map +1 -0
  64. package/dist/planmagnet/team/TeamControls.js +407 -0
  65. package/dist/planmagnet/team/TeamControls.js.map +1 -0
  66. package/package.json +1 -1
@@ -1,16 +1,18 @@
1
1
  import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
2
  import { PersonAvatar as n } from "../people/People.js";
3
3
  import { countLabel as r, useSprintCounts as i, workProgress as a } from "../hooks/useCounts.js";
4
- import { detailPath as o } from "../utils/rowNavigation.js";
5
- import { NewSprintDialog as s, SprintLifecycleActions as c } from "../sprints/SprintControls.js";
6
- import { SprintDates as l } from "../sprints/SprintDates.js";
7
- import { Users as u, Zap as d } from "lucide-react";
8
- import { gql as f } from "@apollo/client";
9
- import { useQuery as p } from "@apollo/client/react";
10
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
11
- import { Badge as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b } from "@burdenoff/fe-libs/ui";
4
+ import { TeamSelect as o } from "../controls/Pickers.js";
5
+ import { detailPath as s } from "../utils/rowNavigation.js";
6
+ import { NewSprintDialog as c, SprintLifecycleActions as l } from "../sprints/SprintControls.js";
7
+ import { SprintDates as u } from "../sprints/SprintDates.js";
8
+ import { useState as d } from "react";
9
+ import { Users as f, Zap as p } from "lucide-react";
10
+ import { gql as m } from "@apollo/client";
11
+ import { useQuery as h } from "@apollo/client/react";
12
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
13
+ import { Badge as v, Card as y, CardContent as b, CardHeader as x, CardTitle as S } from "@burdenoff/fe-libs/ui";
12
14
  //#region src/planmagnet/pages/SprintsStartSprintPagePage.tsx
13
- var x = f`
15
+ var C = m`
14
16
  query GetSprints(
15
17
  $workspaceId: ID!
16
18
  $filter: PlanmagnetSprintFilter
@@ -37,6 +39,14 @@ var x = f`
37
39
  changedAt
38
40
  }
39
41
  velocity
42
+ project {
43
+ id
44
+ name
45
+ }
46
+ team {
47
+ id
48
+ name
49
+ }
40
50
  workItems {
41
51
  id
42
52
  title
@@ -49,7 +59,18 @@ var x = f`
49
59
  }
50
60
  }
51
61
  `;
52
- function S(e) {
62
+ function w({ sprint: e }) {
63
+ return e.team ? /* @__PURE__ */ _(v, {
64
+ variant: "outline",
65
+ className: "text-xs",
66
+ children: ["Team: ", e.team.name]
67
+ }) : /* @__PURE__ */ _(v, {
68
+ variant: "outline",
69
+ className: "text-xs",
70
+ children: ["Project: ", e.project?.name ?? "Unknown"]
71
+ });
72
+ }
73
+ function T(e) {
53
74
  let t = e.workItems ?? [];
54
75
  return {
55
76
  totalPoints: t.reduce((e, t) => e + (t.storyPoints ?? 0), 0),
@@ -60,140 +81,158 @@ function S(e) {
60
81
  velocity: e.velocity
61
82
  };
62
83
  }
63
- function C() {
64
- let { workspaceId: f } = e(), { data: C, loading: w, error: T } = p(x, {
84
+ function E() {
85
+ let { workspaceId: m } = e(), [E, D] = d(""), O = E ? { teamId: E } : {}, { data: k, loading: A, error: j } = h(C, {
65
86
  variables: {
66
- workspaceId: f,
67
- pagination: { first: 50 }
87
+ workspaceId: m,
88
+ pagination: { first: 50 },
89
+ ...E ? { filter: O } : {}
68
90
  },
69
- skip: !f
70
- }), E = {
71
- skip: !f,
91
+ skip: !m
92
+ }), M = {
93
+ skip: !m,
72
94
  variables: {
73
- workspaceId: f,
95
+ workspaceId: m,
74
96
  pagination: { first: 50 }
75
97
  }
76
- }, { data: D } = p(x, {
77
- ...E,
98
+ }, { data: N } = h(C, {
99
+ ...M,
78
100
  variables: {
79
- ...E.variables,
80
- filter: { status: "ACTIVE" }
101
+ ...M.variables,
102
+ filter: {
103
+ status: "ACTIVE",
104
+ ...O
105
+ }
81
106
  }
82
- }), { data: O } = p(x, {
83
- ...E,
107
+ }), { data: P } = h(C, {
108
+ ...M,
84
109
  variables: {
85
- ...E.variables,
86
- filter: { status: "REVIEW" }
110
+ ...M.variables,
111
+ filter: {
112
+ status: "REVIEW",
113
+ ...O
114
+ }
87
115
  }
88
- }), k = i(), A = C?.planmagnetSprints?.items ?? [], j = [...D?.planmagnetSprints.items ?? [], ...O?.planmagnetSprints.items ?? []], M = A.filter((e) => e.status === "PLANNING"), N = A.filter((e) => e.status === "COMPLETED" || e.status === "CANCELLED"), P = t(), F = (e) => P(o("/projects/planning-detail-page", e));
89
- return w && !C ? /* @__PURE__ */ m("div", {
116
+ }), F = i(), I = k?.planmagnetSprints?.items ?? [], L = [...N?.planmagnetSprints.items ?? [], ...P?.planmagnetSprints.items ?? []], R = I.filter((e) => e.status === "PLANNING"), z = I.filter((e) => e.status === "COMPLETED" || e.status === "CANCELLED"), B = t(), V = (e) => B(s("/projects/planning-detail-page", e));
117
+ return A && !k ? /* @__PURE__ */ g("div", {
90
118
  className: "flex items-center justify-center p-12",
91
- children: /* @__PURE__ */ m("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
92
- }) : T ? /* @__PURE__ */ h("div", {
119
+ children: /* @__PURE__ */ g("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
120
+ }) : j ? /* @__PURE__ */ _("div", {
93
121
  className: "p-6 text-red-500",
94
- children: ["Error: ", T.message]
95
- }) : /* @__PURE__ */ h("div", {
122
+ children: ["Error: ", j.message]
123
+ }) : /* @__PURE__ */ _("div", {
96
124
  className: "space-y-6 p-6",
97
125
  children: [
98
- /* @__PURE__ */ h("div", {
126
+ /* @__PURE__ */ _("div", {
99
127
  className: "flex items-center justify-between",
100
- children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
128
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
101
129
  className: "text-2xl font-semibold",
102
130
  children: "Sprint Management"
103
- }), /* @__PURE__ */ h("p", {
131
+ }), /* @__PURE__ */ _("p", {
104
132
  className: "text-sm text-muted-foreground",
105
133
  children: [
106
- r(k?.all),
134
+ r(F?.all),
107
135
  " sprints total · ",
108
- r(k?.running),
136
+ r(F?.running),
109
137
  " running"
110
138
  ]
111
- })] }), /* @__PURE__ */ m(s, { onCreated: F })]
139
+ })] }), /* @__PURE__ */ _("div", {
140
+ className: "flex items-center gap-2",
141
+ children: [/* @__PURE__ */ g(o, {
142
+ value: E,
143
+ onChange: D,
144
+ noneLabel: "All teams"
145
+ }), /* @__PURE__ */ g(c, { onCreated: V })]
146
+ })]
112
147
  }),
113
- j.length > 0 && /* @__PURE__ */ h("div", {
148
+ L.length > 0 && /* @__PURE__ */ _("div", {
114
149
  className: "space-y-4",
115
- children: [/* @__PURE__ */ m("h2", {
150
+ children: [/* @__PURE__ */ g("h2", {
116
151
  className: "text-lg font-medium",
117
152
  children: "Active Sprints"
118
- }), j.map((e) => {
119
- let t = S(e), r = e.workItems ?? [], i = a(r) ?? 0;
120
- return /* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, {
153
+ }), L.map((e) => {
154
+ let t = T(e), r = e.workItems ?? [], i = a(r) ?? 0;
155
+ return /* @__PURE__ */ _(y, { children: [/* @__PURE__ */ g(x, {
121
156
  className: "pb-2",
122
- children: /* @__PURE__ */ h("div", {
157
+ children: /* @__PURE__ */ _("div", {
123
158
  className: "flex items-center justify-between",
124
- children: [/* @__PURE__ */ h(b, {
159
+ children: [/* @__PURE__ */ _(S, {
125
160
  className: "text-base flex items-center gap-2",
126
- children: [/* @__PURE__ */ m(d, { className: "h-4 w-4 text-primary" }), /* @__PURE__ */ m("button", {
161
+ children: [/* @__PURE__ */ g(p, { className: "h-4 w-4 text-primary" }), /* @__PURE__ */ g("button", {
127
162
  type: "button",
128
163
  className: "hover:underline text-left",
129
- onClick: () => F(e.id),
164
+ onClick: () => V(e.id),
130
165
  children: e.name
131
166
  })]
132
- }), /* @__PURE__ */ h("div", {
167
+ }), /* @__PURE__ */ _("div", {
133
168
  className: "flex items-start gap-2",
134
- children: [/* @__PURE__ */ m(g, { children: e.status === "REVIEW" ? "Review" : "Active" }), /* @__PURE__ */ m(c, {
135
- sprintId: e.id,
136
- sprintName: e.name,
137
- status: e.status
138
- })]
169
+ children: [
170
+ /* @__PURE__ */ g(w, { sprint: e }),
171
+ /* @__PURE__ */ g(v, { children: e.status === "REVIEW" ? "Review" : "Active" }),
172
+ /* @__PURE__ */ g(l, {
173
+ sprintId: e.id,
174
+ sprintName: e.name,
175
+ status: e.status
176
+ })
177
+ ]
139
178
  })]
140
179
  })
141
- }), /* @__PURE__ */ h(v, {
180
+ }), /* @__PURE__ */ _(b, {
142
181
  className: "space-y-4",
143
182
  children: [
144
- /* @__PURE__ */ m("p", {
183
+ /* @__PURE__ */ g("p", {
145
184
  className: "text-sm text-muted-foreground",
146
185
  children: e.goal ?? ""
147
186
  }),
148
- /* @__PURE__ */ m(l, { sprint: e }),
149
- /* @__PURE__ */ m("div", {
187
+ /* @__PURE__ */ g(u, { sprint: e }),
188
+ /* @__PURE__ */ g("div", {
150
189
  className: "flex gap-4 text-xs text-muted-foreground",
151
- children: /* @__PURE__ */ h("span", {
190
+ children: /* @__PURE__ */ _("span", {
152
191
  className: "flex items-center gap-1",
153
192
  children: [
154
- /* @__PURE__ */ m(u, { className: "h-3 w-3" }),
193
+ /* @__PURE__ */ g(f, { className: "h-3 w-3" }),
155
194
  t.teamMemberIds.length,
156
195
  " members"
157
196
  ]
158
197
  })
159
198
  }),
160
- /* @__PURE__ */ h("div", {
199
+ /* @__PURE__ */ _("div", {
161
200
  className: "grid grid-cols-3 gap-4 text-center",
162
201
  children: [
163
- /* @__PURE__ */ h("div", {
202
+ /* @__PURE__ */ _("div", {
164
203
  className: "p-3 bg-muted rounded-md",
165
- children: [/* @__PURE__ */ h("p", {
204
+ children: [/* @__PURE__ */ _("p", {
166
205
  className: "text-lg font-bold",
167
206
  children: [
168
207
  t.completedPoints,
169
208
  "/",
170
209
  t.totalPoints
171
210
  ]
172
- }), /* @__PURE__ */ m("p", {
211
+ }), /* @__PURE__ */ g("p", {
173
212
  className: "text-xs text-muted-foreground",
174
213
  children: "Points"
175
214
  })]
176
215
  }),
177
- /* @__PURE__ */ h("div", {
216
+ /* @__PURE__ */ _("div", {
178
217
  className: "p-3 bg-muted rounded-md",
179
- children: [/* @__PURE__ */ h("p", {
218
+ children: [/* @__PURE__ */ _("p", {
180
219
  className: "text-lg font-bold",
181
220
  children: [
182
221
  t.tasksCompleted,
183
222
  "/",
184
223
  t.tasksTotal
185
224
  ]
186
- }), /* @__PURE__ */ m("p", {
225
+ }), /* @__PURE__ */ g("p", {
187
226
  className: "text-xs text-muted-foreground",
188
227
  children: "Tasks"
189
228
  })]
190
229
  }),
191
- /* @__PURE__ */ h("div", {
230
+ /* @__PURE__ */ _("div", {
192
231
  className: "p-3 bg-muted rounded-md",
193
- children: [/* @__PURE__ */ m("p", {
232
+ children: [/* @__PURE__ */ g("p", {
194
233
  className: "text-lg font-bold",
195
234
  children: t.velocity == null ? "—" : t.velocity
196
- }), /* @__PURE__ */ m("p", {
235
+ }), /* @__PURE__ */ g("p", {
197
236
  className: "text-xs text-muted-foreground",
198
237
  title: "Story points done when the sprint was completed",
199
238
  children: "Velocity"
@@ -201,48 +240,48 @@ function C() {
201
240
  })
202
241
  ]
203
242
  }),
204
- /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("div", {
243
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("div", {
205
244
  className: "flex justify-between text-xs mb-1",
206
- children: [/* @__PURE__ */ m("span", {
245
+ children: [/* @__PURE__ */ g("span", {
207
246
  className: "text-muted-foreground",
208
247
  children: "Sprint Progress"
209
- }), /* @__PURE__ */ h("span", {
248
+ }), /* @__PURE__ */ _("span", {
210
249
  className: "font-medium",
211
250
  children: [i, "%"]
212
251
  })]
213
- }), /* @__PURE__ */ m("div", {
252
+ }), /* @__PURE__ */ g("div", {
214
253
  className: "w-full h-2 rounded-full bg-muted overflow-hidden",
215
- children: /* @__PURE__ */ m("div", {
254
+ children: /* @__PURE__ */ g("div", {
216
255
  className: "h-full bg-primary rounded-full",
217
256
  style: { width: `${i}%` }
218
257
  })
219
258
  })] }),
220
- r.length > 0 && /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
259
+ r.length > 0 && /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
221
260
  className: "text-xs font-medium text-muted-foreground mb-2",
222
261
  children: "Sprint Backlog"
223
- }), /* @__PURE__ */ m("div", {
262
+ }), /* @__PURE__ */ g("div", {
224
263
  className: "space-y-1",
225
- children: r.map((e) => /* @__PURE__ */ h("div", {
264
+ children: r.map((e) => /* @__PURE__ */ _("div", {
226
265
  className: "flex items-center justify-between border rounded p-2 text-sm",
227
- children: [/* @__PURE__ */ m("span", { children: e.title }), /* @__PURE__ */ h("div", {
266
+ children: [/* @__PURE__ */ g("span", { children: e.title }), /* @__PURE__ */ _("div", {
228
267
  className: "flex gap-1",
229
- children: [/* @__PURE__ */ m(g, {
268
+ children: [/* @__PURE__ */ g(v, {
230
269
  variant: "secondary",
231
270
  className: "text-xs capitalize",
232
271
  children: e.status.toLowerCase().replace("_", " ")
233
- }), /* @__PURE__ */ h("span", {
272
+ }), /* @__PURE__ */ _("span", {
234
273
  className: "text-xs text-muted-foreground",
235
274
  children: [e.storyPoints ?? 0, "pts"]
236
275
  })]
237
276
  })]
238
277
  }, e.id))
239
278
  })] }),
240
- /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
279
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
241
280
  className: "text-xs font-medium text-muted-foreground mb-1",
242
281
  children: "Team"
243
- }), /* @__PURE__ */ m("div", {
282
+ }), /* @__PURE__ */ g("div", {
244
283
  className: "flex gap-2",
245
- children: t.teamMemberIds.map((e) => /* @__PURE__ */ m(n, {
284
+ children: t.teamMemberIds.map((e) => /* @__PURE__ */ g(n, {
246
285
  id: e,
247
286
  className: "h-7 w-7 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary"
248
287
  }, e))
@@ -251,83 +290,90 @@ function C() {
251
290
  })] }, e.id);
252
291
  })]
253
292
  }),
254
- M.length > 0 && /* @__PURE__ */ h("div", {
293
+ R.length > 0 && /* @__PURE__ */ _("div", {
255
294
  className: "space-y-4",
256
- children: [/* @__PURE__ */ m("h2", {
295
+ children: [/* @__PURE__ */ g("h2", {
257
296
  className: "text-lg font-medium",
258
297
  children: "Planning"
259
- }), M.map((e) => {
260
- let t = S(e);
261
- return /* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, {
298
+ }), R.map((e) => {
299
+ let t = T(e);
300
+ return /* @__PURE__ */ _(y, { children: [/* @__PURE__ */ g(x, {
262
301
  className: "pb-2",
263
- children: /* @__PURE__ */ h("div", {
302
+ children: /* @__PURE__ */ _("div", {
264
303
  className: "flex items-center justify-between",
265
- children: [/* @__PURE__ */ m(b, {
304
+ children: [/* @__PURE__ */ g(S, {
266
305
  className: "text-base",
267
- children: /* @__PURE__ */ m("button", {
306
+ children: /* @__PURE__ */ g("button", {
268
307
  type: "button",
269
308
  className: "hover:underline text-left",
270
- onClick: () => F(e.id),
309
+ onClick: () => V(e.id),
271
310
  children: e.name
272
311
  })
273
- }), /* @__PURE__ */ h("div", {
312
+ }), /* @__PURE__ */ _("div", {
274
313
  className: "flex items-start gap-2",
275
- children: [/* @__PURE__ */ m(g, {
276
- variant: "secondary",
277
- children: "Planning"
278
- }), /* @__PURE__ */ m(c, {
279
- sprintId: e.id,
280
- sprintName: e.name,
281
- status: e.status
282
- })]
314
+ children: [
315
+ /* @__PURE__ */ g(w, { sprint: e }),
316
+ /* @__PURE__ */ g(v, {
317
+ variant: "secondary",
318
+ children: "Planning"
319
+ }),
320
+ /* @__PURE__ */ g(l, {
321
+ sprintId: e.id,
322
+ sprintName: e.name,
323
+ status: e.status
324
+ })
325
+ ]
283
326
  })]
284
327
  })
285
- }), /* @__PURE__ */ h(v, {
328
+ }), /* @__PURE__ */ _(b, {
286
329
  className: "space-y-2",
287
330
  children: [
288
- /* @__PURE__ */ m("p", {
331
+ /* @__PURE__ */ g("p", {
289
332
  className: "text-sm text-muted-foreground",
290
333
  children: e.goal ?? ""
291
334
  }),
292
- /* @__PURE__ */ m(l, { sprint: e }),
293
- /* @__PURE__ */ h("div", {
335
+ /* @__PURE__ */ g(u, { sprint: e }),
336
+ /* @__PURE__ */ _("div", {
294
337
  className: "flex gap-4 text-xs text-muted-foreground",
295
- children: [/* @__PURE__ */ h("span", { children: [t.totalPoints, " points planned"] }), /* @__PURE__ */ h("span", { children: [t.teamMemberIds.length, " members"] })]
338
+ children: [/* @__PURE__ */ _("span", { children: [t.totalPoints, " points planned"] }), /* @__PURE__ */ _("span", { children: [t.teamMemberIds.length, " members"] })]
296
339
  })
297
340
  ]
298
341
  })] }, e.id);
299
342
  })]
300
343
  }),
301
- N.length > 0 && /* @__PURE__ */ h("div", {
344
+ z.length > 0 && /* @__PURE__ */ _("div", {
302
345
  className: "space-y-4",
303
346
  "data-testid": "finished-sprints",
304
- children: [/* @__PURE__ */ m("h2", {
347
+ children: [/* @__PURE__ */ g("h2", {
305
348
  className: "text-lg font-medium",
306
349
  children: "Finished"
307
- }), N.map((e) => {
308
- let t = S(e);
309
- return /* @__PURE__ */ h(_, {
350
+ }), z.map((e) => {
351
+ let t = T(e);
352
+ return /* @__PURE__ */ _(y, {
310
353
  "data-testid": "finished-sprint",
311
- children: [/* @__PURE__ */ m(y, {
354
+ children: [/* @__PURE__ */ g(x, {
312
355
  className: "pb-2",
313
- children: /* @__PURE__ */ h("div", {
356
+ children: /* @__PURE__ */ _("div", {
314
357
  className: "flex items-center justify-between",
315
- children: [/* @__PURE__ */ m(b, {
358
+ children: [/* @__PURE__ */ g(S, {
316
359
  className: "text-base",
317
- children: /* @__PURE__ */ m("button", {
360
+ children: /* @__PURE__ */ g("button", {
318
361
  type: "button",
319
362
  className: "hover:underline text-left",
320
- onClick: () => F(e.id),
363
+ onClick: () => V(e.id),
321
364
  children: e.name
322
365
  })
323
- }), /* @__PURE__ */ m(g, {
324
- variant: "outline",
325
- children: e.status === "COMPLETED" ? "Completed" : "Cancelled"
366
+ }), /* @__PURE__ */ _("div", {
367
+ className: "flex items-center gap-2",
368
+ children: [/* @__PURE__ */ g(w, { sprint: e }), /* @__PURE__ */ g(v, {
369
+ variant: "outline",
370
+ children: e.status === "COMPLETED" ? "Completed" : "Cancelled"
371
+ })]
326
372
  })]
327
373
  })
328
- }), /* @__PURE__ */ h(v, {
374
+ }), /* @__PURE__ */ _(b, {
329
375
  className: "space-y-2",
330
- children: [/* @__PURE__ */ m(l, { sprint: e }), /* @__PURE__ */ h("p", {
376
+ children: [/* @__PURE__ */ g(u, { sprint: e }), /* @__PURE__ */ _("p", {
331
377
  className: "text-xs text-muted-foreground",
332
378
  children: [
333
379
  t.completedPoints,
@@ -344,6 +390,6 @@ function C() {
344
390
  });
345
391
  }
346
392
  //#endregion
347
- export { C as SprintsStartSprintPagePage };
393
+ export { E as SprintsStartSprintPagePage };
348
394
 
349
395
  //# sourceMappingURL=SprintsStartSprintPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SprintsStartSprintPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/SprintsStartSprintPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Zap, Users } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { NewSprintDialog, SprintLifecycleActions } from '../sprints/SprintControls';\nimport { SprintDates, type SprintPlanChange } from '../sprints/SprintDates';\nimport { PersonAvatar } from '../people/People';\nimport { countLabel, useSprintCounts, workProgress } from '../hooks/useCounts';\n\nconst GET_SPRINTS = gql`\n query GetSprints(\n $workspaceId: ID!\n $filter: PlanmagnetSprintFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetSprints(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n goal\n status\n startDate\n endDate\n startedAt\n completedAt\n baselineStartDate\n baselineEndDate\n planChanges {\n field\n fromValue\n toValue\n sprintStatus\n changedBy\n changedAt\n }\n velocity\n workItems {\n id\n title\n status\n storyPoints\n assigneeId\n }\n }\n totalCount\n }\n }\n`;\n\ninterface SprintWorkItem {\n id: string;\n title: string;\n status: string;\n storyPoints: number | null;\n assigneeId: string | null;\n}\n\ninterface SprintNode {\n id: string;\n name: string;\n goal: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n startedAt: string | null;\n completedAt: string | null;\n baselineStartDate: string | null;\n baselineEndDate: string | null;\n planChanges: SprintPlanChange[];\n velocity: number | null;\n workItems: SprintWorkItem[];\n}\n\ninterface SprintMetrics {\n totalPoints: number;\n completedPoints: number;\n tasksTotal: number;\n tasksCompleted: number;\n teamMemberIds: string[];\n velocity: number | null;\n}\n\nfunction deriveSprintMetrics(sprint: SprintNode): SprintMetrics {\n const items = sprint.workItems ?? [];\n const totalPoints = items.reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const completedPoints = items\n .filter((w) => w.status === 'DONE')\n .reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const tasksTotal = items.length;\n const tasksCompleted = items.filter((w) => w.status === 'DONE').length;\n const teamMemberIds = Array.from(\n new Set(items.map((w) => w.assigneeId).filter((id): id is string => Boolean(id)))\n );\n // BOFF-7944: velocity is the server's DONE-points-at-completion, set only once the sprint is COMPLETED. It used to\n // fall back to the points done so far — a different number under the same name (the Points tile shows that).\n const velocity = sprint.velocity;\n return { totalPoints, completedPoints, tasksTotal, tasksCompleted, teamMemberIds, velocity };\n}\n\nexport function SprintsStartSprintPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n const {\n data: sprintData,\n loading: sprintsLoading,\n error: sprintsError,\n } = useQuery<{\n planmagnetSprints: { items: SprintNode[]; totalCount: number };\n }>(GET_SPRINTS, {\n variables: { workspaceId, pagination: { first: 50 } },\n skip: !workspaceId,\n });\n\n // Running sprints are queried by status (BOFF-7970): taken from the 50 newest sprints, a long-running sprint with\n // 50 newer ones disappeared from this page. REVIEW is still in flight, so it counts as running everywhere.\n const running = { skip: !workspaceId, variables: { workspaceId, pagination: { first: 50 } } };\n const { data: activeData } = useQuery<{ planmagnetSprints: { items: SprintNode[] } }>(\n GET_SPRINTS,\n {\n ...running,\n variables: { ...running.variables, filter: { status: 'ACTIVE' } },\n }\n );\n const { data: reviewData } = useQuery<{ planmagnetSprints: { items: SprintNode[] } }>(\n GET_SPRINTS,\n {\n ...running,\n variables: { ...running.variables, filter: { status: 'REVIEW' } },\n }\n );\n const counts = useSprintCounts();\n\n const sprints = sprintData?.planmagnetSprints?.items ?? [];\n const activeSprints = [\n ...(activeData?.planmagnetSprints.items ?? []),\n ...(reviewData?.planmagnetSprints.items ?? []),\n ];\n const planningSprints = sprints.filter((s) => s.status === 'PLANNING');\n // Finished sprints used to vanish from this page, so \"did we finish on\n // time?\" had nowhere to be answered (BOFF-7918).\n const finishedSprints = sprints.filter(\n (s) => s.status === 'COMPLETED' || s.status === 'CANCELLED'\n );\n\n const navigate = usePlanMagnetNavigate();\n const openSprint = (id: string) => navigate(detailPath('/projects/planning-detail-page', id));\n\n // Only before the first load: a refetch after a sprint action must not blank\n // the page (it unmounted the controls mid-action).\n if (sprintsLoading && !sprintData) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (sprintsError) {\n return <div className=\"p-6 text-red-500\">Error: {sprintsError.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Sprint Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n {countLabel(counts?.all)} sprints total &middot; {countLabel(counts?.running)} running\n </p>\n </div>\n <NewSprintDialog onCreated={openSprint} />\n </div>\n\n {activeSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Active Sprints</h2>\n {activeSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n const tasksForSprint = sprint.workItems ?? [];\n // Done over everything not cancelled, by tasks when nothing is estimated (BOFF-7989).\n const pctDone = workProgress(tasksForSprint) ?? 0;\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-primary\" />\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <Badge>{sprint.status === 'REVIEW' ? 'Review' : 'Active'}</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {metrics.teamMemberIds.length} members\n </span>\n </div>\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.completedPoints}/{metrics.totalPoints}\n </p>\n <p className=\"text-xs text-muted-foreground\">Points</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.tasksCompleted}/{metrics.tasksTotal}\n </p>\n <p className=\"text-xs text-muted-foreground\">Tasks</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.velocity != null ? metrics.velocity : '—'}\n </p>\n <p\n className=\"text-xs text-muted-foreground\"\n title=\"Story points done when the sprint was completed\"\n >\n Velocity\n </p>\n </div>\n </div>\n <div>\n <div className=\"flex justify-between text-xs mb-1\">\n <span className=\"text-muted-foreground\">Sprint Progress</span>\n <span className=\"font-medium\">{pctDone}%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{ width: `${pctDone}%` }}\n />\n </div>\n </div>\n {tasksForSprint.length > 0 && (\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Sprint Backlog\n </p>\n <div className=\"space-y-1\">\n {tasksForSprint.map((t) => (\n <div\n key={t.id}\n className=\"flex items-center justify-between border rounded p-2 text-sm\"\n >\n <span>{t.title}</span>\n <div className=\"flex gap-1\">\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {t.status.toLowerCase().replace('_', ' ')}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n {t.storyPoints ?? 0}pts\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-1\">Team</p>\n <div className=\"flex gap-2\">\n {/* Initials and tooltip from the person's resolved name; these were two characters of the\n user UUID with the full UUID as the tooltip (BOFF-7977). */}\n {metrics.teamMemberIds.map((memberId) => (\n <PersonAvatar\n key={memberId}\n id={memberId}\n className=\"h-7 w-7 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary\"\n />\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {planningSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Planning</h2>\n {planningSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <Badge variant=\"secondary\">Planning</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span>{metrics.totalPoints} points planned</span>\n <span>{metrics.teamMemberIds.length} members</span>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {finishedSprints.length > 0 && (\n <div className=\"space-y-4\" data-testid=\"finished-sprints\">\n <h2 className=\"text-lg font-medium\">Finished</h2>\n {finishedSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id} data-testid=\"finished-sprint\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <Badge variant=\"outline\">\n {sprint.status === 'COMPLETED' ? 'Completed' : 'Cancelled'}\n </Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <SprintDates sprint={sprint} />\n <p className=\"text-xs text-muted-foreground\">\n {metrics.completedPoints}/{metrics.totalPoints} points done\n </p>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAaA,IAAM,IAAc,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEvB,SAAS,EAAoB,GAAmC;CAC9D,IAAM,IAAQ,EAAO,aAAa,EAAE;AAapC,QAAO;EAAE,aAZW,EAAM,QAAQ,GAAK,MAAM,KAAO,EAAE,eAAe,IAAI,EAAE;EAYrD,iBAXE,EACrB,QAAQ,MAAM,EAAE,WAAW,OAAO,CAClC,QAAQ,GAAK,MAAM,KAAO,EAAE,eAAe,IAAI,EAAE;EASb,YARpB,EAAM;EAQ0B,gBAP5B,EAAM,QAAQ,MAAM,EAAE,WAAW,OAAO,CAAC;EAOG,eAN7C,MAAM,KAC1B,IAAI,IAAI,EAAM,KAAK,MAAM,EAAE,WAAW,CAAC,QAAQ,MAAqB,EAAQ,EAAI,CAAC,CAClF;EAIiF,UADjE,EAAO;EACoE;;AAG9F,SAAgB,IAA6B;CAC3C,IAAM,EAAE,mBAAgB,GAAe,EAEjC,EACJ,MAAM,GACN,SAAS,GACT,OAAO,MACL,EAED,GAAa;EACd,WAAW;GAAE;GAAa,YAAY,EAAE,OAAO,IAAI;GAAE;EACrD,MAAM,CAAC;EACR,CAAC,EAII,IAAU;EAAE,MAAM,CAAC;EAAa,WAAW;GAAE;GAAa,YAAY,EAAE,OAAO,IAAI;GAAE;EAAE,EACvF,EAAE,MAAM,MAAe,EAC3B,GACA;EACE,GAAG;EACH,WAAW;GAAE,GAAG,EAAQ;GAAW,QAAQ,EAAE,QAAQ,UAAU;GAAE;EAClE,CACF,EACK,EAAE,MAAM,MAAe,EAC3B,GACA;EACE,GAAG;EACH,WAAW;GAAE,GAAG,EAAQ;GAAW,QAAQ,EAAE,QAAQ,UAAU;GAAE;EAClE,CACF,EACK,IAAS,GAAiB,EAE1B,IAAU,GAAY,mBAAmB,SAAS,EAAE,EACpD,IAAgB,CACpB,GAAI,GAAY,kBAAkB,SAAS,EAAE,EAC7C,GAAI,GAAY,kBAAkB,SAAS,EAAE,CAC9C,EACK,IAAkB,EAAQ,QAAQ,MAAM,EAAE,WAAW,WAAW,EAGhE,IAAkB,EAAQ,QAC7B,MAAM,EAAE,WAAW,eAAe,EAAE,WAAW,YACjD,EAEK,IAAW,GAAuB,EAClC,KAAc,MAAe,EAAS,EAAW,kCAAkC,EAAG,CAAC;AAgB7F,QAZI,KAAkB,CAAC,IAEnB,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA,GAIN,IACK,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAkC,WAAQ,EAAa,QAAc;MAI5E,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAyB;KAAsB,CAAA,EAC7D,kBAAC,KAAD;KAAG,WAAU;eAAb;MACG,EAAW,GAAQ,IAAI;MAAC;MAAyB,EAAW,GAAQ,QAAQ;MAAC;MAC5E;OACA,EAAA,CAAA,EACN,kBAAC,GAAD,EAAiB,WAAW,GAAc,CAAA,CACtC;;GAEL,EAAc,SAAS,KACtB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAAsB;KAAmB,CAAA,EACtD,EAAc,KAAK,MAAW;KAC7B,IAAM,IAAU,EAAoB,EAAO,EACrC,IAAiB,EAAO,aAAa,EAAE,EAEvC,IAAU,EAAa,EAAe,IAAI;AAChD,YACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBACpB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAW,WAAU;kBAArB,CACE,kBAAC,GAAD,EAAK,WAAU,wBAAyB,CAAA,EACxC,kBAAC,UAAD;SACE,MAAK;SACL,WAAU;SACV,eAAe,EAAW,EAAO,GAAG;mBAEnC,EAAO;SACD,CAAA,CACC;WACZ,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAA,UAAQ,EAAO,WAAW,WAAW,WAAW,UAAiB,CAAA,EACjE,kBAAC,GAAD;SACE,UAAU,EAAO;SACjB,YAAY,EAAO;SACnB,QAAQ,EAAO;SACf,CAAA,CACE;UACF;;MACK,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,KAAD;QAAG,WAAU;kBAAiC,EAAO,QAAQ;QAAO,CAAA;OACpE,kBAAC,GAAD,EAAqB,WAAU,CAAA;OAC/B,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;UAC5B,EAAQ,cAAc;UAAO;UACzB;;QACH,CAAA;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAQ;YAAgB;YAAE,EAAQ;YACjC;cACJ,kBAAC,KAAD;WAAG,WAAU;qBAAgC;WAAU,CAAA,CACnD;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAQ;YAAe;YAAE,EAAQ;YAChC;cACJ,kBAAC,KAAD;WAAG,WAAU;qBAAgC;WAAS,CAAA,CAClD;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAQ,YAAY,OAA0B,MAAnB,EAAQ;WAClC,CAAA,EACJ,kBAAC,KAAD;WACE,WAAU;WACV,OAAM;qBACP;WAEG,CAAA,CACA;;SACF;;OACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAsB,CAAA,EAC9D,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CAA+B,GAAQ,IAAQ;WAC3C;WACN,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SACE,WAAU;SACV,OAAO,EAAE,OAAO,GAAG,EAAQ,IAAI;SAC/B,CAAA;QACE,CAAA,CACF,EAAA,CAAA;OACL,EAAe,SAAS,KACvB,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAiD;QAE1D,CAAA,EACJ,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAe,KAAK,MACnB,kBAAC,OAAD;SAEE,WAAU;mBAFZ,CAIE,kBAAC,QAAD,EAAA,UAAO,EAAE,OAAa,CAAA,EACtB,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WAAO,SAAQ;WAAY,WAAU;qBAClC,EAAE,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;WACnC,CAAA,EACR,kBAAC,QAAD;WAAM,WAAU;qBAAhB,CACG,EAAE,eAAe,GAAE,MACf;aACH;YACF;WAZC,EAAE,GAYH,CACN;QACE,CAAA,CACF,EAAA,CAAA;OAER,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAiD;QAAQ,CAAA,EACtE,kBAAC,OAAD;QAAK,WAAU;kBAGZ,EAAQ,cAAc,KAAK,MAC1B,kBAAC,GAAD;SAEE,IAAI;SACJ,WAAU;SACV,EAHK,EAGL,CACF;QACE,CAAA,CACF,EAAA,CAAA;OACM;QACT,EAAA,EA7GI,EAAO,GA6GX;MAET,CACE;;GAGP,EAAgB,SAAS,KACxB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAAsB;KAAa,CAAA,EAChD,EAAgB,KAAK,MAAW;KAC/B,IAAM,IAAU,EAAoB,EAAO;AAC3C,YACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBACpB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAW,WAAU;kBACnB,kBAAC,UAAD;SACE,MAAK;SACL,WAAU;SACV,eAAe,EAAW,EAAO,GAAG;mBAEnC,EAAO;SACD,CAAA;QACC,CAAA,EACZ,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SAAO,SAAQ;mBAAY;SAAgB,CAAA,EAC3C,kBAAC,GAAD;SACE,UAAU,EAAO;SACjB,YAAY,EAAO;SACnB,QAAQ,EAAO;SACf,CAAA,CACE;UACF;;MACK,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,KAAD;QAAG,WAAU;kBAAiC,EAAO,QAAQ;QAAO,CAAA;OACpE,kBAAC,GAAD,EAAqB,WAAU,CAAA;OAC/B,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAQ,aAAY,kBAAsB,EAAA,CAAA,EACjD,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAQ,cAAc,QAAO,WAAe,EAAA,CAAA,CAC/C;;OACM;QACT,EAAA,EA9BI,EAAO,GA8BX;MAET,CACE;;GAGP,EAAgB,SAAS,KACxB,kBAAC,OAAD;IAAK,WAAU;IAAY,eAAY;cAAvC,CACE,kBAAC,MAAD;KAAI,WAAU;eAAsB;KAAa,CAAA,EAChD,EAAgB,KAAK,MAAW;KAC/B,IAAM,IAAU,EAAoB,EAAO;AAC3C,YACE,kBAAC,GAAD;MAAsB,eAAY;gBAAlC,CACE,kBAAC,GAAD;OAAY,WAAU;iBACpB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SAAW,WAAU;mBACnB,kBAAC,UAAD;UACE,MAAK;UACL,WAAU;UACV,eAAe,EAAW,EAAO,GAAG;oBAEnC,EAAO;UACD,CAAA;SACC,CAAA,EACZ,kBAAC,GAAD;SAAO,SAAQ;mBACZ,EAAO,WAAW,cAAc,cAAc;SACzC,CAAA,CACJ;;OACK,CAAA,EACb,kBAAC,GAAD;OAAa,WAAU;iBAAvB,CACE,kBAAC,GAAD,EAAqB,WAAU,CAAA,EAC/B,kBAAC,KAAD;QAAG,WAAU;kBAAb;SACG,EAAQ;SAAgB;SAAE,EAAQ;SAAY;SAC7C;UACQ;SACT;QAvBI,EAAO,GAuBX;MAET,CACE;;GAEJ"}
1
+ {"version":3,"file":"SprintsStartSprintPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/SprintsStartSprintPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Zap, Users } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { NewSprintDialog, SprintLifecycleActions } from '../sprints/SprintControls';\nimport { SprintDates, type SprintPlanChange } from '../sprints/SprintDates';\nimport { PersonAvatar } from '../people/People';\nimport { TeamSelect } from '../controls/Pickers';\nimport { countLabel, useSprintCounts, workProgress } from '../hooks/useCounts';\n\nconst GET_SPRINTS = gql`\n query GetSprints(\n $workspaceId: ID!\n $filter: PlanmagnetSprintFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetSprints(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n goal\n status\n startDate\n endDate\n startedAt\n completedAt\n baselineStartDate\n baselineEndDate\n planChanges {\n field\n fromValue\n toValue\n sprintStatus\n changedBy\n changedAt\n }\n velocity\n project {\n id\n name\n }\n team {\n id\n name\n }\n workItems {\n id\n title\n status\n storyPoints\n assigneeId\n }\n }\n totalCount\n }\n }\n`;\n\ninterface SprintWorkItem {\n id: string;\n title: string;\n status: string;\n storyPoints: number | null;\n assigneeId: string | null;\n}\n\ninterface SprintNode {\n id: string;\n name: string;\n goal: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n startedAt: string | null;\n completedAt: string | null;\n baselineStartDate: string | null;\n baselineEndDate: string | null;\n planChanges: SprintPlanChange[];\n velocity: number | null;\n // BOFF-8044: exactly one of the two is ever set — sprint scope is PROJECT xor TEAM.\n project: { id: string; name: string } | null;\n team: { id: string; name: string } | null;\n workItems: SprintWorkItem[];\n}\n\n/** \"Team: X\" when the sprint is team-scoped, \"Project: Y\" otherwise (BOFF-8044). */\nfunction ScopeBadge({ sprint }: { sprint: SprintNode }) {\n if (sprint.team) {\n return (\n <Badge variant=\"outline\" className=\"text-xs\">\n Team: {sprint.team.name}\n </Badge>\n );\n }\n return (\n <Badge variant=\"outline\" className=\"text-xs\">\n Project: {sprint.project?.name ?? 'Unknown'}\n </Badge>\n );\n}\n\ninterface SprintMetrics {\n totalPoints: number;\n completedPoints: number;\n tasksTotal: number;\n tasksCompleted: number;\n teamMemberIds: string[];\n velocity: number | null;\n}\n\nfunction deriveSprintMetrics(sprint: SprintNode): SprintMetrics {\n const items = sprint.workItems ?? [];\n const totalPoints = items.reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const completedPoints = items\n .filter((w) => w.status === 'DONE')\n .reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const tasksTotal = items.length;\n const tasksCompleted = items.filter((w) => w.status === 'DONE').length;\n const teamMemberIds = Array.from(\n new Set(items.map((w) => w.assigneeId).filter((id): id is string => Boolean(id)))\n );\n // BOFF-7944: velocity is the server's DONE-points-at-completion, set only once the sprint is COMPLETED. It used to\n // fall back to the points done so far — a different number under the same name (the Points tile shows that).\n const velocity = sprint.velocity;\n return { totalPoints, completedPoints, tasksTotal, tasksCompleted, teamMemberIds, velocity };\n}\n\nexport function SprintsStartSprintPagePage() {\n const { workspaceId } = usePlanMagnet();\n // BOFF-8044: an optional team filter, symmetric with the already-schema-supported (but until now\n // UI-unused) projectId filter. '' means \"every team and every project\".\n const [teamFilter, setTeamFilter] = useState('');\n const teamFilterVar = teamFilter ? { teamId: teamFilter } : {};\n\n const {\n data: sprintData,\n loading: sprintsLoading,\n error: sprintsError,\n } = useQuery<{\n planmagnetSprints: { items: SprintNode[]; totalCount: number };\n }>(GET_SPRINTS, {\n variables: {\n workspaceId,\n pagination: { first: 50 },\n ...(teamFilter ? { filter: teamFilterVar } : {}),\n },\n skip: !workspaceId,\n });\n\n // Running sprints are queried by status (BOFF-7970): taken from the 50 newest sprints, a long-running sprint with\n // 50 newer ones disappeared from this page. REVIEW is still in flight, so it counts as running everywhere.\n const running = { skip: !workspaceId, variables: { workspaceId, pagination: { first: 50 } } };\n const { data: activeData } = useQuery<{ planmagnetSprints: { items: SprintNode[] } }>(\n GET_SPRINTS,\n {\n ...running,\n variables: { ...running.variables, filter: { status: 'ACTIVE', ...teamFilterVar } },\n }\n );\n const { data: reviewData } = useQuery<{ planmagnetSprints: { items: SprintNode[] } }>(\n GET_SPRINTS,\n {\n ...running,\n variables: { ...running.variables, filter: { status: 'REVIEW', ...teamFilterVar } },\n }\n );\n const counts = useSprintCounts();\n\n const sprints = sprintData?.planmagnetSprints?.items ?? [];\n const activeSprints = [\n ...(activeData?.planmagnetSprints.items ?? []),\n ...(reviewData?.planmagnetSprints.items ?? []),\n ];\n const planningSprints = sprints.filter((s) => s.status === 'PLANNING');\n // Finished sprints used to vanish from this page, so \"did we finish on\n // time?\" had nowhere to be answered (BOFF-7918).\n const finishedSprints = sprints.filter(\n (s) => s.status === 'COMPLETED' || s.status === 'CANCELLED'\n );\n\n const navigate = usePlanMagnetNavigate();\n const openSprint = (id: string) => navigate(detailPath('/projects/planning-detail-page', id));\n\n // Only before the first load: a refetch after a sprint action must not blank\n // the page (it unmounted the controls mid-action).\n if (sprintsLoading && !sprintData) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (sprintsError) {\n return <div className=\"p-6 text-red-500\">Error: {sprintsError.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Sprint Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n {countLabel(counts?.all)} sprints total &middot; {countLabel(counts?.running)} running\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <TeamSelect value={teamFilter} onChange={setTeamFilter} noneLabel=\"All teams\" />\n <NewSprintDialog onCreated={openSprint} />\n </div>\n </div>\n\n {activeSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Active Sprints</h2>\n {activeSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n const tasksForSprint = sprint.workItems ?? [];\n // Done over everything not cancelled, by tasks when nothing is estimated (BOFF-7989).\n const pctDone = workProgress(tasksForSprint) ?? 0;\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-primary\" />\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <ScopeBadge sprint={sprint} />\n <Badge>{sprint.status === 'REVIEW' ? 'Review' : 'Active'}</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {metrics.teamMemberIds.length} members\n </span>\n </div>\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.completedPoints}/{metrics.totalPoints}\n </p>\n <p className=\"text-xs text-muted-foreground\">Points</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.tasksCompleted}/{metrics.tasksTotal}\n </p>\n <p className=\"text-xs text-muted-foreground\">Tasks</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.velocity != null ? metrics.velocity : '—'}\n </p>\n <p\n className=\"text-xs text-muted-foreground\"\n title=\"Story points done when the sprint was completed\"\n >\n Velocity\n </p>\n </div>\n </div>\n <div>\n <div className=\"flex justify-between text-xs mb-1\">\n <span className=\"text-muted-foreground\">Sprint Progress</span>\n <span className=\"font-medium\">{pctDone}%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{ width: `${pctDone}%` }}\n />\n </div>\n </div>\n {tasksForSprint.length > 0 && (\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Sprint Backlog\n </p>\n <div className=\"space-y-1\">\n {tasksForSprint.map((t) => (\n <div\n key={t.id}\n className=\"flex items-center justify-between border rounded p-2 text-sm\"\n >\n <span>{t.title}</span>\n <div className=\"flex gap-1\">\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {t.status.toLowerCase().replace('_', ' ')}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n {t.storyPoints ?? 0}pts\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-1\">Team</p>\n <div className=\"flex gap-2\">\n {/* Initials and tooltip from the person's resolved name; these were two characters of the\n user UUID with the full UUID as the tooltip (BOFF-7977). */}\n {metrics.teamMemberIds.map((memberId) => (\n <PersonAvatar\n key={memberId}\n id={memberId}\n className=\"h-7 w-7 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary\"\n />\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {planningSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Planning</h2>\n {planningSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <ScopeBadge sprint={sprint} />\n <Badge variant=\"secondary\">Planning</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span>{metrics.totalPoints} points planned</span>\n <span>{metrics.teamMemberIds.length} members</span>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {finishedSprints.length > 0 && (\n <div className=\"space-y-4\" data-testid=\"finished-sprints\">\n <h2 className=\"text-lg font-medium\">Finished</h2>\n {finishedSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id} data-testid=\"finished-sprint\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-center gap-2\">\n <ScopeBadge sprint={sprint} />\n <Badge variant=\"outline\">\n {sprint.status === 'COMPLETED' ? 'Completed' : 'Cancelled'}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <SprintDates sprint={sprint} />\n <p className=\"text-xs text-muted-foreground\">\n {metrics.completedPoints}/{metrics.totalPoints} points done\n </p>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TeamCreateTeamPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TeamCreateTeamPagePage.tsx"],"names":[],"mappings":"AAkCA,wBAAgB,sBAAsB,4CAqHrC"}
1
+ {"version":3,"file":"TeamCreateTeamPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TeamCreateTeamPagePage.tsx"],"names":[],"mappings":"AAuEA,wBAAgB,sBAAsB,4CAsWrC"}