@burdenoff/microfe-planmagnet 2026.928.3 → 2026.928.5

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