@burdenoff/microfe-planmagnet 2026.1001.2 → 2026.1001.4

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 (62) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +160 -153
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.js +121 -109
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/controls/MilestoneControls.d.ts +2 -0
  8. package/dist/planmagnet/controls/MilestoneControls.d.ts.map +1 -1
  9. package/dist/planmagnet/controls/MilestoneControls.js +89 -72
  10. package/dist/planmagnet/controls/MilestoneControls.js.map +1 -1
  11. package/dist/planmagnet/meetings/MeetingActionItemsPanel.d.ts +17 -0
  12. package/dist/planmagnet/meetings/MeetingActionItemsPanel.d.ts.map +1 -0
  13. package/dist/planmagnet/meetings/MeetingActionItemsPanel.js +218 -0
  14. package/dist/planmagnet/meetings/MeetingActionItemsPanel.js.map +1 -0
  15. package/dist/planmagnet/meetings/MeetingsCard.d.ts +7 -0
  16. package/dist/planmagnet/meetings/MeetingsCard.d.ts.map +1 -0
  17. package/dist/planmagnet/meetings/MeetingsCard.js +108 -0
  18. package/dist/planmagnet/meetings/MeetingsCard.js.map +1 -0
  19. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.d.ts +9 -0
  20. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.d.ts.map +1 -0
  21. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js +232 -0
  22. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js.map +1 -0
  23. package/dist/planmagnet/meetings/ScheduleMeetingDialog.d.ts +19 -0
  24. package/dist/planmagnet/meetings/ScheduleMeetingDialog.d.ts.map +1 -0
  25. package/dist/planmagnet/meetings/ScheduleMeetingDialog.js +226 -0
  26. package/dist/planmagnet/meetings/ScheduleMeetingDialog.js.map +1 -0
  27. package/dist/planmagnet/meetings/UnlinkMeetingDialog.d.ts +14 -0
  28. package/dist/planmagnet/meetings/UnlinkMeetingDialog.d.ts.map +1 -0
  29. package/dist/planmagnet/meetings/UnlinkMeetingDialog.js +78 -0
  30. package/dist/planmagnet/meetings/UnlinkMeetingDialog.js.map +1 -0
  31. package/dist/planmagnet/meetings/meetingActions.d.ts +58 -0
  32. package/dist/planmagnet/meetings/meetingActions.d.ts.map +1 -0
  33. package/dist/planmagnet/meetings/meetingActions.js +48 -0
  34. package/dist/planmagnet/meetings/meetingActions.js.map +1 -0
  35. package/dist/planmagnet/meetings/meetingGraphql.d.ts +29 -0
  36. package/dist/planmagnet/meetings/meetingGraphql.d.ts.map +1 -0
  37. package/dist/planmagnet/meetings/meetingGraphql.js +166 -0
  38. package/dist/planmagnet/meetings/meetingGraphql.js.map +1 -0
  39. package/dist/planmagnet/meetings/meetingModel.d.ts +74 -0
  40. package/dist/planmagnet/meetings/meetingModel.d.ts.map +1 -0
  41. package/dist/planmagnet/meetings/meetingModel.js +88 -0
  42. package/dist/planmagnet/meetings/meetingModel.js.map +1 -0
  43. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.d.ts +2 -0
  44. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.d.ts.map +1 -0
  45. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js +197 -0
  46. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js.map +1 -0
  47. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.d.ts +2 -0
  48. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.d.ts.map +1 -0
  49. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js +173 -0
  50. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js.map +1 -0
  51. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +1 -1
  52. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +73 -52
  53. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -1
  54. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  55. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +205 -190
  56. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  57. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  58. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +192 -187
  59. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  60. package/dist/planmagnet/reports/ShareDialog.js +65 -65
  61. package/dist/planmagnet/reports/ShareDialog.js.map +1 -1
  62. package/package.json +1 -1
@@ -1,18 +1,20 @@
1
- import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
2
- import { PersonAvatar as t, PersonName as n, initialsOf as r } from "../people/People.js";
3
- import { detailPath as i } from "../utils/rowNavigation.js";
4
- import { useEntityId as a } from "../hooks/useEntityId.js";
5
- import { combineLiveRefreshModes as o, useLiveRefresh as s } from "../hooks/useLiveRefresh.js";
6
- import { LiveStatus as c } from "../controls/LiveStatus.js";
7
- import { SprintLifecycleActions as l, SprintWorkItemsPanel as u } from "../sprints/SprintControls.js";
8
- import { SprintDates as d } from "../sprints/SprintDates.js";
9
- import { BarChart3 as f, FolderKanban as p, Pencil as m, Users as h } from "lucide-react";
10
- import { gql as g } from "@apollo/client";
11
- import { useQuery as _ } from "@apollo/client/react";
12
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
13
- import { Badge as b, Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T } from "@burdenoff/fe-libs/ui";
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { PersonAvatar as n, PersonName as r, initialsOf as i } from "../people/People.js";
3
+ import { detailPath as a } from "../utils/rowNavigation.js";
4
+ import { useEntityId as o } from "../hooks/useEntityId.js";
5
+ import { combineLiveRefreshModes as s, useLiveRefresh as c } from "../hooks/useLiveRefresh.js";
6
+ import { LiveStatus as l } from "../controls/LiveStatus.js";
7
+ import { SprintLifecycleActions as u, SprintWorkItemsPanel as d } from "../sprints/SprintControls.js";
8
+ import { SprintDates as f } from "../sprints/SprintDates.js";
9
+ import { MeetingsCard as p } from "../meetings/MeetingsCard.js";
10
+ import { ScheduleCeremoniesDialog as m } from "../meetings/ScheduleCeremoniesDialog.js";
11
+ import { BarChart3 as h, FolderKanban as g, Pencil as _, Users as v } from "lucide-react";
12
+ import { gql as y } from "@apollo/client";
13
+ import { useQuery as b } from "@apollo/client/react";
14
+ import { jsx as x, jsxs as S } from "react/jsx-runtime";
15
+ import { Badge as C, Button as w, Card as T, CardContent as E, CardHeader as D, CardTitle as O } from "@burdenoff/fe-libs/ui";
14
16
  //#region src/planmagnet/pages/ProjectsPlanningDetailPagePage.tsx
15
- var E = ["GetSprintDetail", "GetSprintCapacity"], D = g`
17
+ var k = ["GetSprintDetail", "GetSprintCapacity"], A = y`
16
18
  query GetSprintDetail($id: ID!) {
17
19
  planmagnetSprint(id: $id) {
18
20
  id
@@ -60,7 +62,7 @@ var E = ["GetSprintDetail", "GetSprintCapacity"], D = g`
60
62
  }
61
63
  }
62
64
  }
63
- `, O = g`
65
+ `, j = y`
64
66
  query GetSprintCapacity($sprintId: ID!) {
65
67
  planmagnetSprintCapacity(sprintId: $sprintId) {
66
68
  sprintId
@@ -80,285 +82,298 @@ var E = ["GetSprintDetail", "GetSprintCapacity"], D = g`
80
82
  }
81
83
  }
82
84
  `;
83
- function k() {
84
- let g = a("sprintId"), k = e(), { data: A, loading: j, error: M } = _(D, {
85
- variables: { id: g },
86
- skip: !g
87
- }), { data: N } = _(O, {
88
- variables: { sprintId: g },
89
- skip: !g
90
- }), P = A?.planmagnetSprint?.projectId ?? null, F = s({
85
+ function M() {
86
+ let y = o("sprintId"), M = t(), { workspaceId: N } = e(), { data: P, loading: F, error: I } = b(A, {
87
+ variables: { id: y },
88
+ skip: !y
89
+ }), { data: L } = b(j, {
90
+ variables: { sprintId: y },
91
+ skip: !y
92
+ }), R = P?.planmagnetSprint?.projectId ?? null, z = c({
91
93
  kind: "sprint",
92
- sprintId: g,
93
- projectId: P,
94
- queries: E
95
- }), I = s({
94
+ sprintId: y,
95
+ projectId: R,
96
+ queries: k
97
+ }), B = c({
96
98
  kind: "workItem",
97
- projectId: P,
98
- enabled: !!P,
99
- queries: E
100
- }), L = o(F.mode, I.mode);
101
- if (!g) return /* @__PURE__ */ v("div", {
99
+ projectId: R,
100
+ enabled: !!R,
101
+ queries: k
102
+ }), V = s(z.mode, B.mode);
103
+ if (!y) return /* @__PURE__ */ x("div", {
102
104
  className: "p-6 text-muted-foreground",
103
105
  children: "No planning session selected. Open one from the list."
104
106
  });
105
- if (j && !A) return /* @__PURE__ */ v("div", {
107
+ if (F && !P) return /* @__PURE__ */ x("div", {
106
108
  className: "flex items-center justify-center p-12",
107
- children: /* @__PURE__ */ v("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
109
+ children: /* @__PURE__ */ x("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
108
110
  });
109
- if (M) return /* @__PURE__ */ y("div", {
111
+ if (I) return /* @__PURE__ */ S("div", {
110
112
  className: "p-6 text-red-500",
111
- children: ["Error loading planning session: ", M.message]
113
+ children: ["Error loading planning session: ", I.message]
112
114
  });
113
- let R = A?.planmagnetSprint;
114
- if (!R) return /* @__PURE__ */ v("div", {
115
+ let H = P?.planmagnetSprint;
116
+ if (!H) return /* @__PURE__ */ x("div", {
115
117
  className: "p-6 text-muted-foreground",
116
118
  children: "Planning session not found."
117
119
  });
118
- let z = N?.planmagnetSprintCapacity, B = {};
119
- for (let e of z?.members ?? []) B[e.actorId] = {
120
+ let U = L?.planmagnetSprintCapacity, W = {};
121
+ for (let e of U?.members ?? []) W[e.actorId] = {
120
122
  employeeName: e.employeeName,
121
123
  allocatedHours: e.allocatedHours,
122
124
  billableHours: e.billableHours,
123
125
  utilizationPercent: e.utilizationPercent
124
126
  };
125
- let V = R.workItems ?? [], H = V.reduce((e, t) => e + (t.storyPoints ?? 0), 0);
126
- V.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0);
127
- let U = R.capacity ?? null, W = U && U > 0 ? Math.round(H / U * 100) : null, G = U == null ? null : Math.max(0, U - H), K = [...new Set(V.map((e) => e.assigneeId).filter(Boolean))], q = R.team?.projects ?? [], J = R.team ? q.map((e) => e.id) : R.projectId ? [R.projectId] : [], Y = R.team ? Object.fromEntries(q.map((e) => [e.id, e.name])) : void 0;
128
- return /* @__PURE__ */ y("div", {
127
+ let G = H.workItems ?? [], K = G.reduce((e, t) => e + (t.storyPoints ?? 0), 0);
128
+ G.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0);
129
+ let q = H.capacity ?? null, J = q && q > 0 ? Math.round(K / q * 100) : null, Y = q == null ? null : Math.max(0, q - K), X = [...new Set(G.map((e) => e.assigneeId).filter(Boolean))], Z = H.team?.projects ?? [], Q = H.team ? Z.map((e) => e.id) : H.projectId ? [H.projectId] : [], $ = H.team ? Object.fromEntries(Z.map((e) => [e.id, e.name])) : void 0;
130
+ return /* @__PURE__ */ S("div", {
129
131
  className: "space-y-6 p-6",
130
- children: [/* @__PURE__ */ y("div", {
132
+ children: [/* @__PURE__ */ S("div", {
131
133
  className: "flex items-center justify-between",
132
- children: [/* @__PURE__ */ y("div", { children: [
133
- /* @__PURE__ */ y("div", {
134
+ children: [/* @__PURE__ */ S("div", { children: [
135
+ /* @__PURE__ */ S("div", {
134
136
  className: "flex items-center gap-3",
135
- children: [/* @__PURE__ */ v("h1", {
137
+ children: [/* @__PURE__ */ x("h1", {
136
138
  className: "text-2xl font-semibold",
137
- children: R.name
138
- }), /* @__PURE__ */ v(c, { mode: L })]
139
+ children: H.name
140
+ }), /* @__PURE__ */ x(l, { mode: V })]
139
141
  }),
140
- /* @__PURE__ */ v("p", {
142
+ /* @__PURE__ */ x("p", {
141
143
  className: "text-sm text-muted-foreground",
142
- children: R.team ? `Team: ${R.team.name}` : R.project?.name ?? "Unknown project"
144
+ children: H.team ? `Team: ${H.team.name}` : H.project?.name ?? "Unknown project"
143
145
  }),
144
- /* @__PURE__ */ v("div", {
146
+ /* @__PURE__ */ x("div", {
145
147
  className: "mt-1",
146
- children: /* @__PURE__ */ v(d, { sprint: R })
148
+ children: /* @__PURE__ */ x(f, { sprint: H })
147
149
  })
148
- ] }), /* @__PURE__ */ y("div", {
150
+ ] }), /* @__PURE__ */ S("div", {
149
151
  className: "flex items-start gap-3",
150
152
  children: [
151
- /* @__PURE__ */ v(b, {
153
+ /* @__PURE__ */ x(C, {
152
154
  className: "capitalize",
153
- children: R.status.toLowerCase().replace("_", " ")
155
+ children: H.status.toLowerCase().replace("_", " ")
154
156
  }),
155
- R.status !== "COMPLETED" && R.status !== "CANCELLED" && /* @__PURE__ */ y(x, {
157
+ H.status !== "COMPLETED" && H.status !== "CANCELLED" && /* @__PURE__ */ S(w, {
156
158
  size: "sm",
157
159
  variant: "outline",
158
- onClick: () => k(i("/projects/planning-edit-page", R.id)),
160
+ onClick: () => M(a("/projects/planning-edit-page", H.id)),
159
161
  "data-testid": "sprint-edit",
160
- children: [/* @__PURE__ */ v(m, { className: "mr-1 h-4 w-4" }), " Edit"]
162
+ children: [/* @__PURE__ */ x(_, { className: "mr-1 h-4 w-4" }), " Edit"]
161
163
  }),
162
- /* @__PURE__ */ v(l, {
163
- sprintId: R.id,
164
- sprintName: R.name,
165
- status: R.status
164
+ !H.team && /* @__PURE__ */ x(m, {
165
+ projectId: H.projectId,
166
+ sprintId: H.id,
167
+ startDate: H.startDate,
168
+ endDate: H.endDate
169
+ }),
170
+ /* @__PURE__ */ x(u, {
171
+ sprintId: H.id,
172
+ sprintName: H.name,
173
+ status: H.status
166
174
  })
167
175
  ]
168
176
  })]
169
- }), /* @__PURE__ */ y("div", {
177
+ }), /* @__PURE__ */ S("div", {
170
178
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
171
- children: [/* @__PURE__ */ y("div", {
179
+ children: [/* @__PURE__ */ S("div", {
172
180
  className: "lg:col-span-2 space-y-6",
173
181
  children: [
174
- /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, { children: "Capacity Allocation" }) }), /* @__PURE__ */ y(C, {
182
+ /* @__PURE__ */ S(T, { children: [/* @__PURE__ */ x(D, { children: /* @__PURE__ */ x(O, { children: "Capacity Allocation" }) }), /* @__PURE__ */ S(E, {
175
183
  className: "space-y-4",
176
- children: [/* @__PURE__ */ y("div", {
184
+ children: [/* @__PURE__ */ S("div", {
177
185
  className: "grid grid-cols-3 gap-4 text-center",
178
186
  children: [
179
- /* @__PURE__ */ y("div", {
187
+ /* @__PURE__ */ S("div", {
180
188
  className: "p-4 bg-muted rounded-md",
181
- children: [/* @__PURE__ */ v("p", {
189
+ children: [/* @__PURE__ */ x("p", {
182
190
  className: "text-2xl font-bold",
183
- children: U ?? "—"
184
- }), /* @__PURE__ */ v("p", {
191
+ children: q ?? "—"
192
+ }), /* @__PURE__ */ x("p", {
185
193
  className: "text-xs text-muted-foreground",
186
- children: U == null ? "No capacity set" : "Capacity"
194
+ children: q == null ? "No capacity set" : "Capacity"
187
195
  })]
188
196
  }),
189
- /* @__PURE__ */ y("div", {
197
+ /* @__PURE__ */ S("div", {
190
198
  className: "p-4 bg-primary/10 rounded-md",
191
- children: [/* @__PURE__ */ v("p", {
199
+ children: [/* @__PURE__ */ x("p", {
192
200
  className: "text-2xl font-bold text-primary",
193
- children: H
194
- }), /* @__PURE__ */ v("p", {
201
+ children: K
202
+ }), /* @__PURE__ */ x("p", {
195
203
  className: "text-xs text-muted-foreground",
196
204
  children: "Allocated"
197
205
  })]
198
206
  }),
199
- /* @__PURE__ */ y("div", {
207
+ /* @__PURE__ */ S("div", {
200
208
  className: "p-4 bg-muted rounded-md",
201
- children: [/* @__PURE__ */ v("p", {
209
+ children: [/* @__PURE__ */ x("p", {
202
210
  className: "text-2xl font-bold",
203
- children: G ?? "—"
204
- }), /* @__PURE__ */ v("p", {
211
+ children: Y ?? "—"
212
+ }), /* @__PURE__ */ x("p", {
205
213
  className: "text-xs text-muted-foreground",
206
214
  children: "Remaining"
207
215
  })]
208
216
  })
209
217
  ]
210
- }), W === null ? /* @__PURE__ */ v("p", {
218
+ }), J === null ? /* @__PURE__ */ x("p", {
211
219
  className: "text-sm text-muted-foreground",
212
220
  children: "Set a capacity on the sprint to see its utilisation."
213
- }) : /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("div", {
221
+ }) : /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ S("div", {
214
222
  className: "flex justify-between text-sm mb-2",
215
- children: [/* @__PURE__ */ v("span", {
223
+ children: [/* @__PURE__ */ x("span", {
216
224
  className: "text-muted-foreground",
217
225
  children: "Utilization"
218
- }), /* @__PURE__ */ y("span", {
226
+ }), /* @__PURE__ */ S("span", {
219
227
  className: "font-medium",
220
- children: [W, "%"]
228
+ children: [J, "%"]
221
229
  })]
222
- }), /* @__PURE__ */ v("div", {
230
+ }), /* @__PURE__ */ x("div", {
223
231
  className: "w-full h-4 rounded-full bg-muted overflow-hidden",
224
- children: /* @__PURE__ */ v("div", {
225
- className: `h-full rounded-full ${W > 90 ? "bg-destructive" : "bg-success"}`,
226
- style: { width: `${Math.min(W, 100)}%` }
232
+ children: /* @__PURE__ */ x("div", {
233
+ className: `h-full rounded-full ${J > 90 ? "bg-destructive" : "bg-success"}`,
234
+ style: { width: `${Math.min(J, 100)}%` }
227
235
  })
228
236
  })] })]
229
237
  })] }),
230
- /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, { children: "Work Items" }) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(u, {
231
- sprintId: R.id,
232
- eligibleProjectIds: J,
233
- projectNames: Y,
234
- status: R.status,
235
- items: V
238
+ /* @__PURE__ */ S(T, { children: [/* @__PURE__ */ x(D, { children: /* @__PURE__ */ x(O, { children: "Work Items" }) }), /* @__PURE__ */ x(E, { children: /* @__PURE__ */ x(d, {
239
+ sprintId: H.id,
240
+ eligibleProjectIds: Q,
241
+ projectNames: $,
242
+ status: H.status,
243
+ items: G
236
244
  }) })] }),
237
- /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ y(T, { children: [
245
+ /* @__PURE__ */ S(T, { children: [/* @__PURE__ */ x(D, { children: /* @__PURE__ */ S(O, { children: [
238
246
  "Team Members (",
239
- K.length,
247
+ X.length,
240
248
  ")"
241
- ] }) }), /* @__PURE__ */ y(C, { children: [
242
- /* @__PURE__ */ y("div", {
249
+ ] }) }), /* @__PURE__ */ S(E, { children: [
250
+ /* @__PURE__ */ S("div", {
243
251
  className: "grid grid-cols-2 gap-3",
244
- children: [K.map((e) => {
245
- let i = B[e];
246
- return /* @__PURE__ */ y("div", {
252
+ children: [X.map((e) => {
253
+ let t = W[e];
254
+ return /* @__PURE__ */ S("div", {
247
255
  className: "flex items-center gap-2 border rounded-md p-2.5",
248
- children: [i?.employeeName ? /* @__PURE__ */ v("span", {
256
+ children: [t?.employeeName ? /* @__PURE__ */ x("span", {
249
257
  className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-medium text-primary",
250
- title: i.employeeName,
251
- children: r(i.employeeName) || "?"
252
- }) : /* @__PURE__ */ v(t, {
258
+ title: t.employeeName,
259
+ children: i(t.employeeName) || "?"
260
+ }) : /* @__PURE__ */ x(n, {
253
261
  id: e,
254
262
  className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-medium text-primary"
255
- }), /* @__PURE__ */ y("div", {
263
+ }), /* @__PURE__ */ S("div", {
256
264
  className: "min-w-0",
257
- children: [/* @__PURE__ */ v("span", {
265
+ children: [/* @__PURE__ */ x("span", {
258
266
  className: "text-sm truncate block",
259
- children: i?.employeeName ?? /* @__PURE__ */ v(n, { id: e })
260
- }), i && /* @__PURE__ */ y("span", {
267
+ children: t?.employeeName ?? /* @__PURE__ */ x(r, { id: e })
268
+ }), t && /* @__PURE__ */ S("span", {
261
269
  className: "text-xs text-muted-foreground",
262
270
  children: [
263
- i.allocatedHours,
271
+ t.allocatedHours,
264
272
  "h allocated (",
265
- i.billableHours,
273
+ t.billableHours,
266
274
  "h billable)",
267
- i.utilizationPercent != null && ` · ${i.utilizationPercent}% util`
275
+ t.utilizationPercent != null && ` · ${t.utilizationPercent}% util`
268
276
  ]
269
277
  })]
270
278
  })]
271
279
  }, e);
272
- }), K.length === 0 && /* @__PURE__ */ v("p", {
280
+ }), X.length === 0 && /* @__PURE__ */ x("p", {
273
281
  className: "text-sm text-muted-foreground col-span-2 text-center py-4",
274
282
  children: "No team members assigned."
275
283
  })]
276
284
  }),
277
- z?.crewfoundryUnavailable && K.length > 0 && /* @__PURE__ */ v("p", {
285
+ U?.crewfoundryUnavailable && X.length > 0 && /* @__PURE__ */ x("p", {
278
286
  className: "text-xs text-muted-foreground mt-3 border-t pt-3",
279
287
  children: "Workforce allocation from CrewFoundry is unavailable for this workspace — no CrewFoundry module provisioned yet."
280
288
  }),
281
- !z?.crewfoundryUnavailable && (z?.unmatchedAssigneeIds?.length ?? 0) > 0 && /* @__PURE__ */ y("p", {
289
+ !U?.crewfoundryUnavailable && (U?.unmatchedAssigneeIds?.length ?? 0) > 0 && /* @__PURE__ */ S("p", {
282
290
  className: "text-xs text-muted-foreground mt-3 border-t pt-3",
283
- children: [z.unmatchedAssigneeIds.length, " assignee(s) have no matching CrewFoundry employee record — allocation hours shown only for matched employees."]
291
+ children: [U.unmatchedAssigneeIds.length, " assignee(s) have no matching CrewFoundry employee record — allocation hours shown only for matched employees."]
284
292
  })
285
293
  ] })] })
286
294
  ]
287
- }), /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, { children: "Session Info" }) }), /* @__PURE__ */ y(C, {
288
- className: "space-y-3 text-sm",
289
- children: [
290
- /* @__PURE__ */ y("div", {
291
- className: "flex items-center gap-2",
292
- children: [
293
- R.team ? /* @__PURE__ */ v(h, { className: "h-4 w-4 text-muted-foreground" }) : /* @__PURE__ */ v(p, { className: "h-4 w-4 text-muted-foreground" }),
294
- /* @__PURE__ */ v("span", {
295
- className: "text-muted-foreground",
296
- children: R.team ? "Team:" : "Project:"
297
- }),
298
- /* @__PURE__ */ v("span", {
299
- className: "font-medium",
300
- children: R.team ? R.team.name : R.project?.name ?? "Unknown project"
301
- })
302
- ]
303
- }),
304
- /* @__PURE__ */ y("div", {
305
- className: "flex items-center gap-2",
306
- children: [
307
- /* @__PURE__ */ v(h, { className: "h-4 w-4 text-muted-foreground" }),
308
- /* @__PURE__ */ v("span", {
309
- className: "text-muted-foreground",
310
- children: "Assignees:"
311
- }),
312
- /* @__PURE__ */ v("span", {
313
- className: "font-medium",
314
- children: K.length
315
- })
316
- ]
317
- }),
318
- /* @__PURE__ */ y("div", {
319
- className: "flex items-center gap-2",
320
- children: [
321
- /* @__PURE__ */ v(f, { className: "h-4 w-4 text-muted-foreground" }),
322
- /* @__PURE__ */ v("span", {
323
- className: "text-muted-foreground",
324
- children: "Capacity:"
325
- }),
326
- /* @__PURE__ */ v("span", {
327
- className: "font-medium",
328
- children: U == null ? "not set" : `${U} pts`
329
- })
330
- ]
331
- }),
332
- R.velocity != null && /* @__PURE__ */ y("div", {
333
- className: "flex items-center gap-2",
334
- children: [
335
- /* @__PURE__ */ v(f, { className: "h-4 w-4 text-muted-foreground" }),
336
- /* @__PURE__ */ v("span", {
337
- className: "text-muted-foreground",
338
- children: "Velocity:"
339
- }),
340
- /* @__PURE__ */ y("span", {
341
- className: "font-medium",
342
- children: [R.velocity, " pts"]
343
- })
344
- ]
345
- }),
346
- R.goal && /* @__PURE__ */ y("div", {
347
- className: "border-t pt-3 mt-3",
348
- children: [/* @__PURE__ */ v("p", {
349
- className: "text-muted-foreground text-xs mb-1",
350
- children: "Goal"
351
- }), /* @__PURE__ */ v("p", {
352
- className: "text-sm",
353
- children: R.goal
354
- })]
355
- })
356
- ]
357
- })] })]
295
+ }), /* @__PURE__ */ S("div", {
296
+ className: "space-y-6",
297
+ children: [/* @__PURE__ */ S(T, { children: [/* @__PURE__ */ x(D, { children: /* @__PURE__ */ x(O, { children: "Session Info" }) }), /* @__PURE__ */ S(E, {
298
+ className: "space-y-3 text-sm",
299
+ children: [
300
+ /* @__PURE__ */ S("div", {
301
+ className: "flex items-center gap-2",
302
+ children: [
303
+ H.team ? /* @__PURE__ */ x(v, { className: "h-4 w-4 text-muted-foreground" }) : /* @__PURE__ */ x(g, { className: "h-4 w-4 text-muted-foreground" }),
304
+ /* @__PURE__ */ x("span", {
305
+ className: "text-muted-foreground",
306
+ children: H.team ? "Team:" : "Project:"
307
+ }),
308
+ /* @__PURE__ */ x("span", {
309
+ className: "font-medium",
310
+ children: H.team ? H.team.name : H.project?.name ?? "Unknown project"
311
+ })
312
+ ]
313
+ }),
314
+ /* @__PURE__ */ S("div", {
315
+ className: "flex items-center gap-2",
316
+ children: [
317
+ /* @__PURE__ */ x(v, { className: "h-4 w-4 text-muted-foreground" }),
318
+ /* @__PURE__ */ x("span", {
319
+ className: "text-muted-foreground",
320
+ children: "Assignees:"
321
+ }),
322
+ /* @__PURE__ */ x("span", {
323
+ className: "font-medium",
324
+ children: X.length
325
+ })
326
+ ]
327
+ }),
328
+ /* @__PURE__ */ S("div", {
329
+ className: "flex items-center gap-2",
330
+ children: [
331
+ /* @__PURE__ */ x(h, { className: "h-4 w-4 text-muted-foreground" }),
332
+ /* @__PURE__ */ x("span", {
333
+ className: "text-muted-foreground",
334
+ children: "Capacity:"
335
+ }),
336
+ /* @__PURE__ */ x("span", {
337
+ className: "font-medium",
338
+ children: q == null ? "not set" : `${q} pts`
339
+ })
340
+ ]
341
+ }),
342
+ H.velocity != null && /* @__PURE__ */ S("div", {
343
+ className: "flex items-center gap-2",
344
+ children: [
345
+ /* @__PURE__ */ x(h, { className: "h-4 w-4 text-muted-foreground" }),
346
+ /* @__PURE__ */ x("span", {
347
+ className: "text-muted-foreground",
348
+ children: "Velocity:"
349
+ }),
350
+ /* @__PURE__ */ S("span", {
351
+ className: "font-medium",
352
+ children: [H.velocity, " pts"]
353
+ })
354
+ ]
355
+ }),
356
+ H.goal && /* @__PURE__ */ S("div", {
357
+ className: "border-t pt-3 mt-3",
358
+ children: [/* @__PURE__ */ x("p", {
359
+ className: "text-muted-foreground text-xs mb-1",
360
+ children: "Goal"
361
+ }), /* @__PURE__ */ x("p", {
362
+ className: "text-sm",
363
+ children: H.goal
364
+ })]
365
+ })
366
+ ]
367
+ })] }), !H.team && H.projectId && /* @__PURE__ */ x(p, {
368
+ workspaceId: N,
369
+ projectId: H.projectId,
370
+ sprintId: H.id
371
+ })]
372
+ })]
358
373
  })]
359
374
  });
360
375
  }
361
376
  //#endregion
362
- export { k as ProjectsPlanningDetailPagePage };
377
+ export { M as ProjectsPlanningDetailPagePage };
363
378
 
364
379
  //# sourceMappingURL=ProjectsPlanningDetailPagePage.js.map