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