@burdenoff/microfe-planmagnet 2026.928.4 → 2026.928.6

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 (226) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +130 -97
  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 +256 -156
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts +5 -0
  8. package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts.map +1 -0
  9. package/dist/planmagnet/automation/AutomationExecutionsPanel.js +107 -0
  10. package/dist/planmagnet/automation/AutomationExecutionsPanel.js.map +1 -0
  11. package/dist/planmagnet/automation/AutomationRuleFields.d.ts +29 -0
  12. package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +1 -0
  13. package/dist/planmagnet/automation/AutomationRuleFields.js +308 -0
  14. package/dist/planmagnet/automation/AutomationRuleFields.js.map +1 -0
  15. package/dist/planmagnet/automation/automationRuleTypes.d.ts +60 -0
  16. package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +1 -0
  17. package/dist/planmagnet/automation/automationRuleTypes.js +113 -0
  18. package/dist/planmagnet/automation/automationRuleTypes.js.map +1 -0
  19. package/dist/planmagnet/board/BulkActions.d.ts +11 -0
  20. package/dist/planmagnet/board/BulkActions.d.ts.map +1 -0
  21. package/dist/planmagnet/board/BulkActions.js +182 -0
  22. package/dist/planmagnet/board/BulkActions.js.map +1 -0
  23. package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
  24. package/dist/planmagnet/board/ProjectBoard.js +289 -254
  25. package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
  26. package/dist/planmagnet/budgets/BudgetControls.d.ts +30 -0
  27. package/dist/planmagnet/budgets/BudgetControls.d.ts.map +1 -0
  28. package/dist/planmagnet/budgets/BudgetControls.js +470 -0
  29. package/dist/planmagnet/budgets/BudgetControls.js.map +1 -0
  30. package/dist/planmagnet/budgets/ExpenseControls.d.ts +27 -0
  31. package/dist/planmagnet/budgets/ExpenseControls.d.ts.map +1 -0
  32. package/dist/planmagnet/budgets/ExpenseControls.js +366 -0
  33. package/dist/planmagnet/budgets/ExpenseControls.js.map +1 -0
  34. package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts +5 -0
  35. package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts.map +1 -0
  36. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js +112 -0
  37. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js.map +1 -0
  38. package/dist/planmagnet/budgets/budgetMath.d.ts +26 -0
  39. package/dist/planmagnet/budgets/budgetMath.d.ts.map +1 -0
  40. package/dist/planmagnet/budgets/budgetMath.js +49 -0
  41. package/dist/planmagnet/budgets/budgetMath.js.map +1 -0
  42. package/dist/planmagnet/controls/AutomationRuleControls.d.ts +23 -0
  43. package/dist/planmagnet/controls/AutomationRuleControls.d.ts.map +1 -0
  44. package/dist/planmagnet/controls/AutomationRuleControls.js +172 -0
  45. package/dist/planmagnet/controls/AutomationRuleControls.js.map +1 -0
  46. package/dist/planmagnet/controls/CompetitorControls.js +15 -15
  47. package/dist/planmagnet/controls/CustomFieldControls.d.ts +42 -0
  48. package/dist/planmagnet/controls/CustomFieldControls.d.ts.map +1 -0
  49. package/dist/planmagnet/controls/CustomFieldControls.js +84 -0
  50. package/dist/planmagnet/controls/CustomFieldControls.js.map +1 -0
  51. package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts +8 -0
  52. package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts.map +1 -0
  53. package/dist/planmagnet/controls/CustomFieldValuesPanel.js +315 -0
  54. package/dist/planmagnet/controls/CustomFieldValuesPanel.js.map +1 -0
  55. package/dist/planmagnet/controls/FeatureControls.js +54 -54
  56. package/dist/planmagnet/controls/ObjectiveControls.js +15 -15
  57. package/dist/planmagnet/controls/Pickers.d.ts +7 -0
  58. package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
  59. package/dist/planmagnet/controls/Pickers.js +58 -20
  60. package/dist/planmagnet/controls/Pickers.js.map +1 -1
  61. package/dist/planmagnet/controls/PortfolioControls.js +7 -7
  62. package/dist/planmagnet/controls/ProgramControls.js +19 -19
  63. package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
  64. package/dist/planmagnet/controls/ProjectControls.js +54 -47
  65. package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
  66. package/dist/planmagnet/controls/ReleaseControls.js +7 -7
  67. package/dist/planmagnet/controls/RiskControls.d.ts +27 -0
  68. package/dist/planmagnet/controls/RiskControls.d.ts.map +1 -0
  69. package/dist/planmagnet/controls/RiskControls.js +346 -0
  70. package/dist/planmagnet/controls/RiskControls.js.map +1 -0
  71. package/dist/planmagnet/controls/TemplateControls.d.ts +15 -0
  72. package/dist/planmagnet/controls/TemplateControls.d.ts.map +1 -0
  73. package/dist/planmagnet/controls/TemplateControls.js +55 -0
  74. package/dist/planmagnet/controls/TemplateControls.js.map +1 -0
  75. package/dist/planmagnet/controls/WorkItemControls.d.ts +6 -2
  76. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
  77. package/dist/planmagnet/controls/WorkItemControls.js +9 -9
  78. package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
  79. package/dist/planmagnet/create/CreateDialogs.d.ts +20 -0
  80. package/dist/planmagnet/create/CreateDialogs.d.ts.map +1 -1
  81. package/dist/planmagnet/create/CreateDialogs.js +455 -116
  82. package/dist/planmagnet/create/CreateDialogs.js.map +1 -1
  83. package/dist/planmagnet/dependency/DependencyPanel.d.ts +6 -0
  84. package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +1 -0
  85. package/dist/planmagnet/dependency/DependencyPanel.js +310 -0
  86. package/dist/planmagnet/dependency/DependencyPanel.js.map +1 -0
  87. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts +2 -0
  88. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +1 -0
  89. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +171 -0
  90. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +1 -0
  91. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts +2 -0
  92. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +1 -0
  93. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js +232 -0
  94. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +1 -0
  95. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts +2 -0
  96. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +1 -0
  97. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +93 -0
  98. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +1 -0
  99. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  100. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +11 -3
  101. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  102. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +5 -5
  103. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +9 -9
  104. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +6 -6
  105. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +4 -4
  106. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +6 -6
  107. package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +5 -5
  108. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts +2 -0
  109. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +1 -0
  110. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js +315 -0
  111. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +1 -0
  112. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts +2 -0
  113. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +1 -0
  114. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +186 -0
  115. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +1 -0
  116. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts +2 -0
  117. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +1 -0
  118. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js +164 -0
  119. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +1 -0
  120. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts +2 -0
  121. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +1 -0
  122. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js +348 -0
  123. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +1 -0
  124. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +10 -10
  125. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +4 -4
  126. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  127. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +20 -10
  128. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  129. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  130. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +13 -8
  131. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  132. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
  133. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +76 -56
  134. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
  135. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  136. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +372 -203
  137. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  138. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  139. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +81 -72
  140. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
  141. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts +2 -0
  142. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +1 -0
  143. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js +278 -0
  144. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +1 -0
  145. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts +2 -0
  146. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +1 -0
  147. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js +191 -0
  148. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +1 -0
  149. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  150. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +168 -122
  151. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  152. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +5 -5
  153. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +4 -4
  154. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  155. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +161 -137
  156. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  157. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  158. package/dist/planmagnet/pages/TasksTasksPagePage.js +124 -113
  159. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  160. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts +2 -0
  161. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +1 -0
  162. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +263 -0
  163. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +1 -0
  164. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts +2 -0
  165. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +1 -0
  166. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js +254 -0
  167. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +1 -0
  168. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts +2 -0
  169. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +1 -0
  170. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js +165 -0
  171. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +1 -0
  172. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -1
  173. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +288 -91
  174. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -1
  175. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts +2 -0
  176. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -0
  177. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +217 -0
  178. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -0
  179. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts +2 -0
  180. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +1 -0
  181. package/dist/planmagnet/pages/TeamTeamEditPagePage.js +211 -0
  182. package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +1 -0
  183. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts +2 -0
  184. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +1 -0
  185. package/dist/planmagnet/pages/TeamTeamsListPagePage.js +118 -0
  186. package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +1 -0
  187. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts +2 -0
  188. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +1 -0
  189. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js +316 -0
  190. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +1 -0
  191. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts +2 -0
  192. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +1 -0
  193. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js +208 -0
  194. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +1 -0
  195. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts +0 -5
  196. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
  197. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +47 -89
  198. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
  199. package/dist/planmagnet/roadmaps/RoadmapControls.js +24 -24
  200. package/dist/planmagnet/sprints/SprintControls.d.ts +15 -3
  201. package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
  202. package/dist/planmagnet/sprints/SprintControls.js +293 -190
  203. package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
  204. package/dist/planmagnet/team/TeamControls.d.ts +31 -0
  205. package/dist/planmagnet/team/TeamControls.d.ts.map +1 -0
  206. package/dist/planmagnet/team/TeamControls.js +407 -0
  207. package/dist/planmagnet/team/TeamControls.js.map +1 -0
  208. package/dist/planmagnet/time/TaskTimePanel.d.ts +7 -0
  209. package/dist/planmagnet/time/TaskTimePanel.d.ts.map +1 -0
  210. package/dist/planmagnet/time/TaskTimePanel.js +104 -0
  211. package/dist/planmagnet/time/TaskTimePanel.js.map +1 -0
  212. package/dist/planmagnet/time/TimeEntryControls.d.ts +37 -0
  213. package/dist/planmagnet/time/TimeEntryControls.d.ts.map +1 -0
  214. package/dist/planmagnet/time/TimeEntryControls.js +338 -0
  215. package/dist/planmagnet/time/TimeEntryControls.js.map +1 -0
  216. package/dist/planmagnet/time/TimesheetControls.d.ts +18 -0
  217. package/dist/planmagnet/time/TimesheetControls.d.ts.map +1 -0
  218. package/dist/planmagnet/time/TimesheetControls.js +244 -0
  219. package/dist/planmagnet/time/TimesheetControls.js.map +1 -0
  220. package/dist/planmagnet/time/timeShared.d.ts +29 -0
  221. package/dist/planmagnet/time/timeShared.d.ts.map +1 -0
  222. package/dist/planmagnet/time/timeShared.js +34 -0
  223. package/dist/planmagnet/time/timeShared.js.map +1 -0
  224. package/dist/planmagnet/utils/rowNavigation.js +5 -2
  225. package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
  226. package/package.json +1 -1
@@ -1,16 +1,19 @@
1
- import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
2
- import { PersonName as t } from "../people/People.js";
3
- import { workProgress as n } from "../hooks/useCounts.js";
4
- import { ROW_LINK_CLASS as r, detailPath as i, rowLinkProps as a } from "../utils/rowNavigation.js";
5
- import { ProjectHeaderActions as o } from "../controls/ProjectControls.js";
6
- import { useEntityId as s } from "../hooks/useEntityId.js";
7
- import { Calendar as c, CheckSquare as l, FolderKanban as u, Users as d, Zap as f } from "lucide-react";
8
- import { gql as p } from "@apollo/client";
9
- import { useQuery as m } from "@apollo/client/react";
10
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
11
- import { Badge as _, Card as v, CardContent as y, CardHeader as b, CardTitle as x } from "@burdenoff/fe-libs/ui";
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { PersonName as n } from "../people/People.js";
3
+ import { workProgress as r } from "../hooks/useCounts.js";
4
+ import { useEntityId as ee } from "../hooks/useEntityId.js";
5
+ import { enumLabel as i } from "../controls/WorkItemControls.js";
6
+ import { ROW_LINK_CLASS as a, detailPath as o, rowLinkProps as s } from "../utils/rowNavigation.js";
7
+ import { NewRiskDialog as c, NewTemplateFromProjectDialog as l } from "../create/CreateDialogs.js";
8
+ import { ProjectHeaderActions as u } from "../controls/ProjectControls.js";
9
+ import { ProjectBudgetsSummary as d } from "../budgets/ProjectBudgetsSummary.js";
10
+ import { Bot as f, Calendar as p, CheckSquare as m, FolderKanban as h, LayoutTemplate as g, Route as _, ShieldAlert as v, Users as y, Zap as b } from "lucide-react";
11
+ import { gql as x } from "@apollo/client";
12
+ import { useQuery as S } from "@apollo/client/react";
13
+ import { jsx as C, jsxs as w } from "react/jsx-runtime";
14
+ import { Badge as T, Button as E, Card as D, CardContent as O, CardHeader as k, CardTitle as A } from "@burdenoff/fe-libs/ui";
12
15
  //#region src/planmagnet/pages/ProjectsProjectDetailPagePage.tsx
13
- var S = p`
16
+ var j = x`
14
17
  query GetProjectDetail($id: ID!) {
15
18
  planmagnetProject(id: $id) {
16
19
  id
@@ -52,6 +55,14 @@ var S = p`
52
55
  dueDate
53
56
  ownerId
54
57
  }
58
+ risks {
59
+ id
60
+ title
61
+ severity
62
+ status
63
+ riskScore
64
+ dueDate
65
+ }
55
66
  workItems {
56
67
  id
57
68
  key
@@ -63,197 +74,263 @@ var S = p`
63
74
  assigneeId
64
75
  labels
65
76
  createdAt
77
+ sprint {
78
+ id
79
+ name
80
+ status
81
+ team {
82
+ id
83
+ name
84
+ }
85
+ }
66
86
  }
67
87
  }
68
88
  }
69
- `, C = {
89
+ `, M = {
70
90
  ACTIVE: "bg-green-100 text-green-800",
71
91
  ON_HOLD: "bg-orange-100 text-orange-800",
72
92
  CANCELLED: "bg-red-100 text-red-800",
73
93
  COMPLETED: "bg-blue-100 text-blue-800",
74
94
  PLANNING: "bg-gray-100 text-gray-800",
75
95
  ARCHIVED: "bg-gray-100 text-gray-800"
76
- };
77
- function w() {
78
- let p = s("projectId"), w = e(), { data: T, loading: E, error: D } = m(S, {
79
- variables: { id: p },
80
- skip: !p
96
+ }, N = {
97
+ CRITICAL: "bg-red-100 text-red-800",
98
+ HIGH: "bg-orange-100 text-orange-800",
99
+ MEDIUM: "bg-yellow-100 text-yellow-800",
100
+ LOW: "bg-blue-100 text-blue-800",
101
+ NEGLIGIBLE: "bg-gray-100 text-gray-800"
102
+ }, P = new Set([
103
+ "IDENTIFIED",
104
+ "ANALYZING",
105
+ "MITIGATING",
106
+ "ACCEPTED"
107
+ ]);
108
+ function F() {
109
+ let x = ee("projectId"), F = t(), { workspaceId: I } = e(), { data: L, loading: R, error: z } = S(j, {
110
+ variables: { id: x },
111
+ skip: !x
81
112
  });
82
- if (!p) return /* @__PURE__ */ h("div", {
113
+ if (!x) return /* @__PURE__ */ C("div", {
83
114
  className: "p-6 text-muted-foreground",
84
115
  children: "No project selected. Open one from the list."
85
116
  });
86
- if (E && !T) return /* @__PURE__ */ h("div", {
117
+ if (R && !L) return /* @__PURE__ */ C("div", {
87
118
  className: "flex items-center justify-center p-12",
88
- children: /* @__PURE__ */ h("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
119
+ children: /* @__PURE__ */ C("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
89
120
  });
90
- if (D) return /* @__PURE__ */ g("div", {
121
+ if (z) return /* @__PURE__ */ w("div", {
91
122
  className: "p-6 text-red-500",
92
- children: ["Error loading project: ", D.message]
123
+ children: ["Error loading project: ", z.message]
93
124
  });
94
- let O = T?.planmagnetProject;
95
- if (!O) return /* @__PURE__ */ h("div", {
125
+ let B = L?.planmagnetProject;
126
+ if (!B) return /* @__PURE__ */ C("div", {
96
127
  className: "p-6 text-muted-foreground",
97
128
  children: "Project not found."
98
129
  });
99
- let k = O.workItems ?? [], A = O.sprints ?? [], j = O.milestones ?? [], M = A.find((e) => e.status === "ACTIVE"), N = A.filter((e) => e.status === "COMPLETED" && e.velocity != null).sort((e, t) => (t.endDate ?? "").localeCompare(e.endDate ?? ""))[0], P = n(k.map((e) => ({ status: e.status }))), F = k.filter((e) => e.status !== "CANCELLED"), I = F.filter((e) => e.status === "DONE").length, L = [...k].sort((e, t) => t.createdAt.localeCompare(e.createdAt)).slice(0, 5);
100
- return /* @__PURE__ */ g("div", {
130
+ let V = B.workItems ?? [], H = B.sprints ?? [], U = B.milestones ?? [], W = B.risks ?? [], G = W.filter((e) => P.has(e.status)), K = [...G].sort((e, t) => t.riskScore - e.riskScore).slice(0, 3), q = H.find((e) => e.status === "ACTIVE"), J = H.filter((e) => e.status === "COMPLETED" && e.velocity != null).sort((e, t) => (t.endDate ?? "").localeCompare(e.endDate ?? ""))[0], Y = r(V.map((e) => ({
131
+ status: e.status,
132
+ storyPoints: e.storyPoints
133
+ }))), X = V.filter((e) => e.status !== "CANCELLED"), Z = X.filter((e) => e.status === "DONE").length, Q = [...V].sort((e, t) => t.createdAt.localeCompare(e.createdAt)).slice(0, 5), $ = Object.values(V.reduce((e, t) => {
134
+ if (!t.sprint?.team) return e;
135
+ let n = e[t.sprint.id] ?? {
136
+ sprint: {
137
+ ...t.sprint,
138
+ team: t.sprint.team
139
+ },
140
+ items: []
141
+ };
142
+ return n.items.push({
143
+ id: t.id,
144
+ key: t.key,
145
+ title: t.title
146
+ }), e[t.sprint.id] = n, e;
147
+ }, {}));
148
+ return /* @__PURE__ */ w("div", {
101
149
  className: "space-y-6 p-6",
102
150
  children: [
103
- /* @__PURE__ */ g("div", {
151
+ /* @__PURE__ */ w("div", {
104
152
  className: "flex items-center justify-between",
105
- children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("div", {
153
+ children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("div", {
106
154
  className: "flex items-center gap-2",
107
155
  children: [
108
- /* @__PURE__ */ h(u, { className: "h-5 w-5 text-primary" }),
109
- /* @__PURE__ */ h("h1", {
156
+ /* @__PURE__ */ C(h, { className: "h-5 w-5 text-primary" }),
157
+ /* @__PURE__ */ C("h1", {
110
158
  className: "text-2xl font-semibold",
111
- children: O.name
159
+ children: B.name
112
160
  }),
113
- /* @__PURE__ */ h("span", {
114
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${C[O.status] ?? "bg-gray-100"}`,
115
- children: O.status.toLowerCase().replace("_", " ")
161
+ /* @__PURE__ */ C("span", {
162
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${M[B.status] ?? "bg-gray-100"}`,
163
+ children: B.status.toLowerCase().replace("_", " ")
116
164
  })
117
165
  ]
118
- }), /* @__PURE__ */ h("p", {
166
+ }), /* @__PURE__ */ C("p", {
119
167
  className: "text-sm text-muted-foreground mt-1",
120
- children: O.description ?? "No description"
121
- })] }), /* @__PURE__ */ g("div", {
168
+ children: B.description ?? "No description"
169
+ })] }), /* @__PURE__ */ w("div", {
122
170
  className: "flex flex-col items-end gap-2",
123
- children: [/* @__PURE__ */ h(o, {
124
- projectId: O.id,
125
- name: O.name,
126
- status: O.status
127
- }), /* @__PURE__ */ h(_, {
128
- variant: "outline",
129
- className: "capitalize",
130
- children: O.methodology.toLowerCase()
131
- })]
171
+ children: [
172
+ /* @__PURE__ */ C(u, {
173
+ projectId: B.id,
174
+ name: B.name,
175
+ status: B.status
176
+ }),
177
+ /* @__PURE__ */ w("div", {
178
+ className: "flex items-center gap-2",
179
+ children: [/* @__PURE__ */ w(E, {
180
+ size: "sm",
181
+ variant: "outline",
182
+ onClick: () => F("/automation/automation-rules-page"),
183
+ "data-testid": "project-automation-rules",
184
+ children: [/* @__PURE__ */ C(f, { className: "mr-1 h-4 w-4" }), "Automation rules"]
185
+ }), /* @__PURE__ */ C(l, {
186
+ projectId: B.id,
187
+ projectName: B.name,
188
+ onCreated: (e) => F(o("/templates/edit-template-page", e)),
189
+ trigger: /* @__PURE__ */ w(E, {
190
+ size: "sm",
191
+ variant: "outline",
192
+ "data-testid": "project-save-as-template",
193
+ children: [/* @__PURE__ */ C(g, { className: "mr-1 h-4 w-4" }), "Save as template"]
194
+ })
195
+ })]
196
+ }),
197
+ /* @__PURE__ */ C(T, {
198
+ variant: "outline",
199
+ className: "capitalize",
200
+ children: B.methodology.toLowerCase()
201
+ }),
202
+ /* @__PURE__ */ w(E, {
203
+ size: "sm",
204
+ variant: "outline",
205
+ onClick: () => F(o("/projects/critical-path-page", B.id)),
206
+ children: [/* @__PURE__ */ C(_, { className: "mr-1 h-4 w-4" }), "Critical path"]
207
+ })
208
+ ]
132
209
  })]
133
210
  }),
134
- /* @__PURE__ */ g("div", {
211
+ /* @__PURE__ */ w("div", {
135
212
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
136
213
  children: [
137
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
214
+ /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
138
215
  className: "pt-4",
139
- children: [/* @__PURE__ */ g("div", {
216
+ children: [/* @__PURE__ */ w("div", {
140
217
  className: "flex items-center gap-2 text-muted-foreground text-xs",
141
- children: [/* @__PURE__ */ h(l, { className: "h-4 w-4" }), "Work Items"]
142
- }), /* @__PURE__ */ g("p", {
218
+ children: [/* @__PURE__ */ C(m, { className: "h-4 w-4" }), "Work Items"]
219
+ }), /* @__PURE__ */ w("p", {
143
220
  className: "text-xl font-bold mt-1",
144
221
  children: [
145
- I,
222
+ Z,
146
223
  "/",
147
- F.length
224
+ X.length
148
225
  ]
149
226
  })]
150
227
  }) }),
151
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
228
+ /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
152
229
  className: "pt-4",
153
- children: [/* @__PURE__ */ g("div", {
230
+ children: [/* @__PURE__ */ w("div", {
154
231
  className: "flex items-center gap-2 text-muted-foreground text-xs",
155
- children: [/* @__PURE__ */ h(f, { className: "h-4 w-4" }), "Sprints"]
156
- }), /* @__PURE__ */ h("p", {
232
+ children: [/* @__PURE__ */ C(b, { className: "h-4 w-4" }), "Sprints"]
233
+ }), /* @__PURE__ */ C("p", {
157
234
  className: "text-xl font-bold mt-1",
158
- children: A.length
235
+ children: H.length
159
236
  })]
160
237
  }) }),
161
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
238
+ /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
162
239
  className: "pt-4",
163
- children: [/* @__PURE__ */ g("div", {
240
+ children: [/* @__PURE__ */ w("div", {
164
241
  className: "flex items-center gap-2 text-muted-foreground text-xs",
165
- children: [/* @__PURE__ */ h(c, { className: "h-4 w-4" }), "Milestones"]
166
- }), /* @__PURE__ */ h("p", {
242
+ children: [/* @__PURE__ */ C(p, { className: "h-4 w-4" }), "Milestones"]
243
+ }), /* @__PURE__ */ C("p", {
167
244
  className: "text-xl font-bold mt-1",
168
- children: j.length
245
+ children: U.length
169
246
  })]
170
247
  }) }),
171
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
248
+ /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
172
249
  className: "pt-4",
173
- children: [/* @__PURE__ */ g("div", {
250
+ children: [/* @__PURE__ */ w("div", {
174
251
  className: "flex items-center gap-2 text-muted-foreground text-xs",
175
- children: [/* @__PURE__ */ h(d, { className: "h-4 w-4" }), "Owner"]
176
- }), /* @__PURE__ */ h("p", {
252
+ children: [/* @__PURE__ */ C(y, { className: "h-4 w-4" }), "Owner"]
253
+ }), /* @__PURE__ */ C("p", {
177
254
  className: "text-sm font-bold mt-1 truncate",
178
- children: /* @__PURE__ */ h(t, { id: O.ownerId })
255
+ children: /* @__PURE__ */ C(n, { id: B.ownerId })
179
256
  })]
180
257
  }) })
181
258
  ]
182
259
  }),
183
- /* @__PURE__ */ g("div", {
260
+ /* @__PURE__ */ w("div", {
184
261
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
185
- children: [/* @__PURE__ */ g("div", {
262
+ children: [/* @__PURE__ */ w("div", {
186
263
  className: "lg:col-span-2 space-y-6",
187
264
  children: [
188
- /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ h(x, { children: "Timeline" }) }), /* @__PURE__ */ g(y, { children: [
189
- /* @__PURE__ */ g("div", {
265
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ C(k, { children: /* @__PURE__ */ C(A, { children: "Timeline" }) }), /* @__PURE__ */ w(O, { children: [
266
+ /* @__PURE__ */ w("div", {
190
267
  className: "flex justify-between text-sm mb-2",
191
- children: [/* @__PURE__ */ h("span", {
268
+ children: [/* @__PURE__ */ C("span", {
192
269
  className: "text-muted-foreground",
193
270
  children: "Tasks done"
194
- }), /* @__PURE__ */ h("span", {
271
+ }), /* @__PURE__ */ C("span", {
195
272
  className: "font-medium",
196
- children: P === null ? "No open tasks" : `${P}%`
273
+ children: Y === null ? "No open tasks" : `${Y}%`
197
274
  })]
198
275
  }),
199
- /* @__PURE__ */ h("div", {
276
+ /* @__PURE__ */ C("div", {
200
277
  className: "w-full h-4 rounded-full bg-muted overflow-hidden",
201
- children: /* @__PURE__ */ h("div", {
278
+ children: /* @__PURE__ */ C("div", {
202
279
  className: "h-full bg-primary rounded-full",
203
- style: { width: `${P ?? 0}%` }
280
+ style: { width: `${Y ?? 0}%` }
204
281
  })
205
282
  }),
206
- /* @__PURE__ */ g("div", {
283
+ /* @__PURE__ */ w("div", {
207
284
  className: "flex justify-between text-xs text-muted-foreground mt-2",
208
- children: [/* @__PURE__ */ h("span", { children: O.startDate ? new Date(O.startDate).toLocaleDateString() : "Not set" }), /* @__PURE__ */ h("span", { children: O.endDate ? new Date(O.endDate).toLocaleDateString() : "Not set" })]
285
+ children: [/* @__PURE__ */ C("span", { children: B.startDate ? new Date(B.startDate).toLocaleDateString() : "Not set" }), /* @__PURE__ */ C("span", { children: B.endDate ? new Date(B.endDate).toLocaleDateString() : "Not set" })]
209
286
  })
210
287
  ] })] }),
211
- M && /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ g(x, {
288
+ q && /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ C(k, { children: /* @__PURE__ */ w(A, {
212
289
  className: "flex items-center gap-2",
213
- children: [/* @__PURE__ */ h(f, { className: "h-4 w-4 text-primary" }), "Active Sprint"]
214
- }) }), /* @__PURE__ */ g(y, {
290
+ children: [/* @__PURE__ */ C(b, { className: "h-4 w-4 text-primary" }), "Active Sprint"]
291
+ }) }), /* @__PURE__ */ w(O, {
215
292
  className: "space-y-3",
216
293
  children: [
217
- /* @__PURE__ */ g("div", {
294
+ /* @__PURE__ */ w("div", {
218
295
  className: "flex justify-between",
219
- children: [/* @__PURE__ */ h("span", {
296
+ children: [/* @__PURE__ */ C("span", {
220
297
  className: "font-medium",
221
- children: M.name
222
- }), /* @__PURE__ */ h(_, { children: "Active" })]
298
+ children: q.name
299
+ }), /* @__PURE__ */ C(T, { children: "Active" })]
223
300
  }),
224
- M.goal && /* @__PURE__ */ h("p", {
301
+ q.goal && /* @__PURE__ */ C("p", {
225
302
  className: "text-sm text-muted-foreground",
226
- children: M.goal
303
+ children: q.goal
227
304
  }),
228
- /* @__PURE__ */ g("div", {
305
+ /* @__PURE__ */ w("div", {
229
306
  className: "grid grid-cols-3 gap-4 text-center",
230
307
  children: [
231
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("p", {
308
+ /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("p", {
232
309
  className: "text-lg font-semibold",
233
310
  children: [
234
- M.workItems?.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0),
311
+ q.workItems?.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0),
235
312
  "/",
236
- M.workItems?.reduce((e, t) => e + (t.storyPoints ?? 0), 0) ?? 0
313
+ q.workItems?.reduce((e, t) => e + (t.storyPoints ?? 0), 0) ?? 0
237
314
  ]
238
- }), /* @__PURE__ */ h("p", {
315
+ }), /* @__PURE__ */ C("p", {
239
316
  className: "text-xs text-muted-foreground",
240
317
  children: "Points"
241
318
  })] }),
242
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("p", {
319
+ /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("p", {
243
320
  className: "text-lg font-semibold",
244
321
  children: [
245
- M.workItems?.filter((e) => e.status === "DONE").length ?? 0,
322
+ q.workItems?.filter((e) => e.status === "DONE").length ?? 0,
246
323
  "/",
247
- M.workItems?.length ?? 0
324
+ q.workItems?.length ?? 0
248
325
  ]
249
- }), /* @__PURE__ */ h("p", {
326
+ }), /* @__PURE__ */ C("p", {
250
327
  className: "text-xs text-muted-foreground",
251
328
  children: "Tasks"
252
329
  })] }),
253
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
330
+ /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
254
331
  className: "text-lg font-semibold",
255
- children: N ? `${N.velocity} pts` : "—"
256
- }), /* @__PURE__ */ h("p", {
332
+ children: J ? `${J.velocity} pts` : "—"
333
+ }), /* @__PURE__ */ C("p", {
257
334
  className: "text-xs text-muted-foreground",
258
335
  children: "Velocity of the last sprint"
259
336
  })] })
@@ -261,144 +338,236 @@ function w() {
261
338
  })
262
339
  ]
263
340
  })] }),
264
- /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ g(x, { children: [
341
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ C(k, { children: /* @__PURE__ */ w(A, { children: [
265
342
  "Work items (",
266
- k.length,
343
+ V.length,
267
344
  ")",
268
- k.length > 5 ? " · latest 5" : ""
269
- ] }) }), /* @__PURE__ */ g(y, {
345
+ V.length > 5 ? " · latest 5" : ""
346
+ ] }) }), /* @__PURE__ */ w(O, {
270
347
  className: "space-y-2",
271
- children: [L.map((e) => /* @__PURE__ */ g("div", {
272
- ...a(() => w(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`), e.key),
273
- className: `flex items-center justify-between border rounded-md p-2.5 ${r}`,
274
- children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("p", {
348
+ children: [Q.map((e) => /* @__PURE__ */ w("div", {
349
+ ...s(() => F(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`), e.key),
350
+ className: `flex items-center justify-between border rounded-md p-2.5 ${a}`,
351
+ children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("p", {
275
352
  className: "text-sm font-medium",
276
353
  children: [
277
354
  e.key,
278
355
  " ",
279
- /* @__PURE__ */ h("span", {
356
+ /* @__PURE__ */ C("span", {
280
357
  className: "font-normal",
281
358
  children: e.title
282
359
  })
283
360
  ]
284
- }), /* @__PURE__ */ h("div", {
361
+ }), /* @__PURE__ */ C("div", {
285
362
  className: "flex gap-1 mt-1",
286
- children: e.labels.map((e) => /* @__PURE__ */ h("span", {
363
+ children: e.labels.map((e) => /* @__PURE__ */ C("span", {
287
364
  className: "text-[10px] px-1.5 py-0.5 rounded bg-muted",
288
365
  children: e
289
366
  }, e))
290
- })] }), /* @__PURE__ */ g("div", {
367
+ })] }), /* @__PURE__ */ w("div", {
291
368
  className: "flex items-center gap-2",
292
- children: [/* @__PURE__ */ g("span", {
369
+ children: [/* @__PURE__ */ w("span", {
293
370
  className: "text-xs text-muted-foreground",
294
371
  children: [e.storyPoints ?? 0, " pts"]
295
- }), /* @__PURE__ */ h(_, {
372
+ }), /* @__PURE__ */ C(T, {
296
373
  variant: "secondary",
297
374
  className: "capitalize text-xs",
298
375
  children: e.status.toLowerCase().replace("_", " ")
299
376
  })]
300
377
  })]
301
- }, e.id)), k.length === 0 && /* @__PURE__ */ h("p", {
378
+ }, e.id)), V.length === 0 && /* @__PURE__ */ C("p", {
302
379
  className: "text-sm text-muted-foreground text-center py-4",
303
380
  children: "No work items yet."
304
381
  })]
305
382
  })] })
306
383
  ]
307
- }), /* @__PURE__ */ g("div", {
384
+ }), /* @__PURE__ */ w("div", {
308
385
  className: "space-y-6",
309
- children: [/* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ g(x, { children: [
310
- "Milestones (",
311
- j.length,
312
- ")"
313
- ] }) }), /* @__PURE__ */ g(y, {
314
- className: "space-y-3",
315
- children: [j.map((e) => /* @__PURE__ */ g("div", {
316
- className: "border-b pb-2 last:border-0",
317
- children: [/* @__PURE__ */ g("div", {
318
- className: "flex justify-between",
319
- children: [/* @__PURE__ */ h("span", {
320
- className: "text-sm font-medium",
321
- children: e.name
322
- }), /* @__PURE__ */ h(_, {
323
- variant: "outline",
324
- className: "text-xs capitalize",
325
- children: e.status.toLowerCase().replace("_", " ")
386
+ children: [
387
+ /* @__PURE__ */ C(d, {
388
+ workspaceId: I,
389
+ projectId: B.id
390
+ }),
391
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ C(k, { children: /* @__PURE__ */ w(A, { children: [
392
+ "Milestones (",
393
+ U.length,
394
+ ")"
395
+ ] }) }), /* @__PURE__ */ w(O, {
396
+ className: "space-y-3",
397
+ children: [U.map((e) => /* @__PURE__ */ w("div", {
398
+ className: "border-b pb-2 last:border-0",
399
+ children: [/* @__PURE__ */ w("div", {
400
+ className: "flex justify-between",
401
+ children: [/* @__PURE__ */ C("span", {
402
+ className: "text-sm font-medium",
403
+ children: e.name
404
+ }), /* @__PURE__ */ C(T, {
405
+ variant: "outline",
406
+ className: "text-xs capitalize",
407
+ children: e.status.toLowerCase().replace("_", " ")
408
+ })]
409
+ }), /* @__PURE__ */ w("div", {
410
+ className: "flex items-center gap-1 text-xs text-muted-foreground mt-1",
411
+ children: [/* @__PURE__ */ C(p, { className: "h-3 w-3" }), e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "No due date"]
326
412
  })]
327
- }), /* @__PURE__ */ g("div", {
328
- className: "flex items-center gap-1 text-xs text-muted-foreground mt-1",
329
- children: [/* @__PURE__ */ h(c, { className: "h-3 w-3" }), e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "No due date"]
413
+ }, e.id)), U.length === 0 && /* @__PURE__ */ C("p", {
414
+ className: "text-sm text-muted-foreground text-center py-2",
415
+ children: "No milestones."
330
416
  })]
331
- }, e.id)), j.length === 0 && /* @__PURE__ */ h("p", {
332
- className: "text-sm text-muted-foreground text-center py-2",
333
- children: "No milestones."
334
- })]
335
- })] }), /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ h(x, { children: "Details" }) }), /* @__PURE__ */ g(y, {
336
- className: "space-y-2 text-sm",
337
- children: [
338
- /* @__PURE__ */ g("div", {
339
- className: "flex justify-between",
340
- children: [/* @__PURE__ */ h("span", {
341
- className: "text-muted-foreground",
342
- children: "Owner"
343
- }), /* @__PURE__ */ h("span", { children: /* @__PURE__ */ h(t, { id: O.ownerId }) })]
344
- }),
345
- /* @__PURE__ */ g("div", {
346
- className: "flex justify-between",
347
- children: [/* @__PURE__ */ h("span", {
348
- className: "text-muted-foreground",
349
- children: "Key"
350
- }), /* @__PURE__ */ h("span", {
351
- className: "font-mono",
352
- children: O.key
353
- })]
354
- }),
355
- /* @__PURE__ */ g("div", {
356
- className: "flex justify-between",
357
- children: [/* @__PURE__ */ h("span", {
358
- className: "text-muted-foreground",
359
- children: "Methodology"
360
- }), /* @__PURE__ */ h("span", {
361
- className: "capitalize",
362
- children: O.methodology.toLowerCase()
363
- })]
364
- }),
365
- /* @__PURE__ */ g("div", {
366
- className: "flex justify-between",
367
- children: [/* @__PURE__ */ h("span", {
368
- className: "text-muted-foreground",
369
- children: "Program"
370
- }), O.program ? /* @__PURE__ */ h("button", {
417
+ })] }),
418
+ $.length > 0 && /* @__PURE__ */ w(D, {
419
+ "data-testid": "team-sprint-work",
420
+ children: [/* @__PURE__ */ C(k, { children: /* @__PURE__ */ w(A, {
421
+ className: "flex items-center gap-2",
422
+ children: [/* @__PURE__ */ C(y, { className: "h-4 w-4" }), "Team sprint work"]
423
+ }) }), /* @__PURE__ */ C(O, {
424
+ className: "space-y-3",
425
+ children: $.map((e) => /* @__PURE__ */ w("div", {
426
+ className: "border-b pb-2 last:border-0",
427
+ children: [/* @__PURE__ */ C("button", {
428
+ type: "button",
429
+ className: "text-sm font-medium hover:underline text-left",
430
+ onClick: () => F(o("/projects/planning-detail-page", e.sprint.id)),
431
+ children: e.sprint.name
432
+ }), /* @__PURE__ */ w("button", {
433
+ type: "button",
434
+ className: "block text-xs text-muted-foreground hover:underline",
435
+ onClick: () => F(o("/team/team-detail-page", e.sprint.team.id)),
436
+ children: [
437
+ e.items.length,
438
+ " item",
439
+ e.items.length === 1 ? "" : "s",
440
+ " · team",
441
+ " ",
442
+ e.sprint.team.name
443
+ ]
444
+ })]
445
+ }, e.sprint.id))
446
+ })]
447
+ }),
448
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ w(k, {
449
+ className: "flex flex-row items-center justify-between space-y-0",
450
+ children: [/* @__PURE__ */ w(A, {
451
+ className: "flex items-center gap-2",
452
+ children: [
453
+ /* @__PURE__ */ C(v, { className: "h-4 w-4 text-primary" }),
454
+ "Risks (",
455
+ G.length,
456
+ " open)"
457
+ ]
458
+ }), /* @__PURE__ */ C(c, {
459
+ projectId: B.id,
460
+ onCreated: (e) => F(o("/risks/risk-detail-page", e))
461
+ })]
462
+ }), /* @__PURE__ */ w(O, {
463
+ className: "space-y-3",
464
+ children: [
465
+ K.map((e) => /* @__PURE__ */ w("div", {
466
+ ...s(() => F(o("/risks/risk-detail-page", e.id)), e.title),
467
+ className: `border-b pb-2 last:border-0 ${a}`,
468
+ children: [/* @__PURE__ */ w("div", {
469
+ className: "flex justify-between gap-2",
470
+ children: [/* @__PURE__ */ C("span", {
471
+ className: "text-sm font-medium truncate",
472
+ children: e.title
473
+ }), /* @__PURE__ */ C("span", {
474
+ className: `text-xs px-2 py-0.5 rounded-full shrink-0 ${N[e.severity] ?? "bg-gray-100"}`,
475
+ children: i(e.severity)
476
+ })]
477
+ }), /* @__PURE__ */ w("div", {
478
+ className: "text-xs text-muted-foreground mt-1",
479
+ children: [
480
+ "Score ",
481
+ e.riskScore,
482
+ " · ",
483
+ i(e.status)
484
+ ]
485
+ })]
486
+ }, e.id)),
487
+ G.length === 0 && /* @__PURE__ */ C("p", {
488
+ className: "text-sm text-muted-foreground text-center py-2",
489
+ children: "No open risks."
490
+ }),
491
+ /* @__PURE__ */ w("button", {
371
492
  type: "button",
372
- className: "text-primary hover:underline underline-offset-2",
373
- onClick: () => w(i("/products/program-detail-page", O.program.id)),
374
- children: O.program.name
375
- }) : /* @__PURE__ */ h("span", {
376
- className: "text-muted-foreground",
377
- children: "No program"
378
- })]
379
- }),
380
- O.tags.length > 0 && /* @__PURE__ */ g("div", {
381
- className: "flex justify-between items-start",
382
- children: [/* @__PURE__ */ h("span", {
383
- className: "text-muted-foreground",
384
- children: "Tags"
385
- }), /* @__PURE__ */ h("div", {
386
- className: "flex gap-1 flex-wrap justify-end",
387
- children: O.tags.map((e) => /* @__PURE__ */ h(_, {
388
- variant: "outline",
389
- className: "text-xs",
390
- children: e
391
- }, e))
392
- })]
393
- })
394
- ]
395
- })] })]
493
+ className: "text-xs text-primary hover:underline",
494
+ onClick: () => F(`/risks/risk-register-page?projectId=${encodeURIComponent(B.id)}`),
495
+ children: [
496
+ "View risk register (",
497
+ W.length,
498
+ ") →"
499
+ ]
500
+ })
501
+ ]
502
+ })] }),
503
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ C(k, { children: /* @__PURE__ */ C(A, { children: "Details" }) }), /* @__PURE__ */ w(O, {
504
+ className: "space-y-2 text-sm",
505
+ children: [
506
+ /* @__PURE__ */ w("div", {
507
+ className: "flex justify-between",
508
+ children: [/* @__PURE__ */ C("span", {
509
+ className: "text-muted-foreground",
510
+ children: "Owner"
511
+ }), /* @__PURE__ */ C("span", { children: /* @__PURE__ */ C(n, { id: B.ownerId }) })]
512
+ }),
513
+ /* @__PURE__ */ w("div", {
514
+ className: "flex justify-between",
515
+ children: [/* @__PURE__ */ C("span", {
516
+ className: "text-muted-foreground",
517
+ children: "Key"
518
+ }), /* @__PURE__ */ C("span", {
519
+ className: "font-mono",
520
+ children: B.key
521
+ })]
522
+ }),
523
+ /* @__PURE__ */ w("div", {
524
+ className: "flex justify-between",
525
+ children: [/* @__PURE__ */ C("span", {
526
+ className: "text-muted-foreground",
527
+ children: "Methodology"
528
+ }), /* @__PURE__ */ C("span", {
529
+ className: "capitalize",
530
+ children: B.methodology.toLowerCase()
531
+ })]
532
+ }),
533
+ /* @__PURE__ */ w("div", {
534
+ className: "flex justify-between",
535
+ children: [/* @__PURE__ */ C("span", {
536
+ className: "text-muted-foreground",
537
+ children: "Program"
538
+ }), B.program ? /* @__PURE__ */ C("button", {
539
+ type: "button",
540
+ className: "text-primary hover:underline underline-offset-2",
541
+ onClick: () => F(o("/products/program-detail-page", B.program.id)),
542
+ children: B.program.name
543
+ }) : /* @__PURE__ */ C("span", {
544
+ className: "text-muted-foreground",
545
+ children: "No program"
546
+ })]
547
+ }),
548
+ B.tags.length > 0 && /* @__PURE__ */ w("div", {
549
+ className: "flex justify-between items-start",
550
+ children: [/* @__PURE__ */ C("span", {
551
+ className: "text-muted-foreground",
552
+ children: "Tags"
553
+ }), /* @__PURE__ */ C("div", {
554
+ className: "flex gap-1 flex-wrap justify-end",
555
+ children: B.tags.map((e) => /* @__PURE__ */ C(T, {
556
+ variant: "outline",
557
+ className: "text-xs",
558
+ children: e
559
+ }, e))
560
+ })]
561
+ })
562
+ ]
563
+ })] })
564
+ ]
396
565
  })]
397
566
  })
398
567
  ]
399
568
  });
400
569
  }
401
570
  //#endregion
402
- export { w as ProjectsProjectDetailPagePage };
571
+ export { F as ProjectsProjectDetailPagePage };
403
572
 
404
573
  //# sourceMappingURL=ProjectsProjectDetailPagePage.js.map