@burdenoff/microfe-planmagnet 2026.928.4 → 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 (183) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +117 -93
  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 +156 -76
  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/PortfolioControls.js +7 -7
  58. package/dist/planmagnet/controls/ProgramControls.js +19 -19
  59. package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
  60. package/dist/planmagnet/controls/ProjectControls.js +54 -47
  61. package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
  62. package/dist/planmagnet/controls/ReleaseControls.js +7 -7
  63. package/dist/planmagnet/controls/RiskControls.d.ts +27 -0
  64. package/dist/planmagnet/controls/RiskControls.d.ts.map +1 -0
  65. package/dist/planmagnet/controls/RiskControls.js +346 -0
  66. package/dist/planmagnet/controls/RiskControls.js.map +1 -0
  67. package/dist/planmagnet/controls/TemplateControls.d.ts +15 -0
  68. package/dist/planmagnet/controls/TemplateControls.d.ts.map +1 -0
  69. package/dist/planmagnet/controls/TemplateControls.js +55 -0
  70. package/dist/planmagnet/controls/TemplateControls.js.map +1 -0
  71. package/dist/planmagnet/controls/WorkItemControls.js +1 -1
  72. package/dist/planmagnet/create/CreateDialogs.d.ts +20 -0
  73. package/dist/planmagnet/create/CreateDialogs.d.ts.map +1 -1
  74. package/dist/planmagnet/create/CreateDialogs.js +455 -116
  75. package/dist/planmagnet/create/CreateDialogs.js.map +1 -1
  76. package/dist/planmagnet/dependency/DependencyPanel.d.ts +6 -0
  77. package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +1 -0
  78. package/dist/planmagnet/dependency/DependencyPanel.js +310 -0
  79. package/dist/planmagnet/dependency/DependencyPanel.js.map +1 -0
  80. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts +2 -0
  81. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +1 -0
  82. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +171 -0
  83. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +1 -0
  84. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts +2 -0
  85. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +1 -0
  86. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js +232 -0
  87. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +1 -0
  88. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts +2 -0
  89. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +1 -0
  90. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +93 -0
  91. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +1 -0
  92. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +5 -5
  93. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +9 -9
  94. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +6 -6
  95. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +4 -4
  96. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +6 -6
  97. package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +5 -5
  98. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts +2 -0
  99. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +1 -0
  100. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js +315 -0
  101. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +1 -0
  102. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts +2 -0
  103. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +1 -0
  104. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +186 -0
  105. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +1 -0
  106. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts +2 -0
  107. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +1 -0
  108. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js +164 -0
  109. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +1 -0
  110. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts +2 -0
  111. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +1 -0
  112. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js +348 -0
  113. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +1 -0
  114. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +10 -10
  115. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +4 -4
  116. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +4 -4
  117. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +6 -6
  118. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  119. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +319 -203
  120. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  121. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  122. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +81 -72
  123. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
  124. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts +2 -0
  125. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +1 -0
  126. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js +278 -0
  127. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +1 -0
  128. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts +2 -0
  129. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +1 -0
  130. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js +191 -0
  131. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +1 -0
  132. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +5 -5
  133. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +4 -4
  134. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  135. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +161 -137
  136. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  137. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  138. package/dist/planmagnet/pages/TasksTasksPagePage.js +124 -113
  139. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  140. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts +2 -0
  141. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +1 -0
  142. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +263 -0
  143. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +1 -0
  144. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts +2 -0
  145. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +1 -0
  146. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js +254 -0
  147. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +1 -0
  148. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts +2 -0
  149. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +1 -0
  150. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js +165 -0
  151. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +1 -0
  152. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts +2 -0
  153. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +1 -0
  154. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js +316 -0
  155. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +1 -0
  156. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts +2 -0
  157. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +1 -0
  158. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js +208 -0
  159. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +1 -0
  160. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts +0 -5
  161. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
  162. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +47 -89
  163. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
  164. package/dist/planmagnet/roadmaps/RoadmapControls.js +24 -24
  165. package/dist/planmagnet/time/TaskTimePanel.d.ts +7 -0
  166. package/dist/planmagnet/time/TaskTimePanel.d.ts.map +1 -0
  167. package/dist/planmagnet/time/TaskTimePanel.js +104 -0
  168. package/dist/planmagnet/time/TaskTimePanel.js.map +1 -0
  169. package/dist/planmagnet/time/TimeEntryControls.d.ts +37 -0
  170. package/dist/planmagnet/time/TimeEntryControls.d.ts.map +1 -0
  171. package/dist/planmagnet/time/TimeEntryControls.js +338 -0
  172. package/dist/planmagnet/time/TimeEntryControls.js.map +1 -0
  173. package/dist/planmagnet/time/TimesheetControls.d.ts +18 -0
  174. package/dist/planmagnet/time/TimesheetControls.d.ts.map +1 -0
  175. package/dist/planmagnet/time/TimesheetControls.js +244 -0
  176. package/dist/planmagnet/time/TimesheetControls.js.map +1 -0
  177. package/dist/planmagnet/time/timeShared.d.ts +29 -0
  178. package/dist/planmagnet/time/timeShared.d.ts.map +1 -0
  179. package/dist/planmagnet/time/timeShared.js +34 -0
  180. package/dist/planmagnet/time/timeShared.js.map +1 -0
  181. package/dist/planmagnet/utils/rowNavigation.js +5 -2
  182. package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
  183. 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 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 S = p`
16
+ var M = S`
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
@@ -66,194 +77,237 @@ var S = p`
66
77
  }
67
78
  }
68
79
  }
69
- `, C = {
80
+ `, N = {
70
81
  ACTIVE: "bg-green-100 text-green-800",
71
82
  ON_HOLD: "bg-orange-100 text-orange-800",
72
83
  CANCELLED: "bg-red-100 text-red-800",
73
84
  COMPLETED: "bg-blue-100 text-blue-800",
74
85
  PLANNING: "bg-gray-100 text-gray-800",
75
86
  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
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
81
103
  });
82
- if (!p) return /* @__PURE__ */ h("div", {
104
+ if (!S) return /* @__PURE__ */ w("div", {
83
105
  className: "p-6 text-muted-foreground",
84
106
  children: "No project selected. Open one from the list."
85
107
  });
86
- if (E && !T) return /* @__PURE__ */ h("div", {
108
+ if (z && !R) return /* @__PURE__ */ w("div", {
87
109
  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" })
110
+ children: /* @__PURE__ */ w("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
89
111
  });
90
- if (D) return /* @__PURE__ */ g("div", {
112
+ if (B) return /* @__PURE__ */ T("div", {
91
113
  className: "p-6 text-red-500",
92
- children: ["Error loading project: ", D.message]
114
+ children: ["Error loading project: ", B.message]
93
115
  });
94
- let O = T?.planmagnetProject;
95
- if (!O) return /* @__PURE__ */ h("div", {
116
+ let V = R?.planmagnetProject;
117
+ if (!V) return /* @__PURE__ */ w("div", {
96
118
  className: "p-6 text-muted-foreground",
97
119
  children: "Project not found."
98
120
  });
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", {
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", {
101
126
  className: "space-y-6 p-6",
102
127
  children: [
103
- /* @__PURE__ */ g("div", {
128
+ /* @__PURE__ */ T("div", {
104
129
  className: "flex items-center justify-between",
105
- children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("div", {
130
+ children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
106
131
  className: "flex items-center gap-2",
107
132
  children: [
108
- /* @__PURE__ */ h(u, { className: "h-5 w-5 text-primary" }),
109
- /* @__PURE__ */ h("h1", {
133
+ /* @__PURE__ */ w(g, { className: "h-5 w-5 text-primary" }),
134
+ /* @__PURE__ */ w("h1", {
110
135
  className: "text-2xl font-semibold",
111
- children: O.name
136
+ children: V.name
112
137
  }),
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("_", " ")
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("_", " ")
116
141
  })
117
142
  ]
118
- }), /* @__PURE__ */ h("p", {
143
+ }), /* @__PURE__ */ w("p", {
119
144
  className: "text-sm text-muted-foreground mt-1",
120
- children: O.description ?? "No description"
121
- })] }), /* @__PURE__ */ g("div", {
145
+ children: V.description ?? "No description"
146
+ })] }), /* @__PURE__ */ T("div", {
122
147
  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
- })]
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
+ ]
132
186
  })]
133
187
  }),
134
- /* @__PURE__ */ g("div", {
188
+ /* @__PURE__ */ T("div", {
135
189
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
136
190
  children: [
137
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
191
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
138
192
  className: "pt-4",
139
- children: [/* @__PURE__ */ g("div", {
193
+ children: [/* @__PURE__ */ T("div", {
140
194
  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", {
195
+ children: [/* @__PURE__ */ w(h, { className: "h-4 w-4" }), "Work Items"]
196
+ }), /* @__PURE__ */ T("p", {
143
197
  className: "text-xl font-bold mt-1",
144
198
  children: [
145
- I,
199
+ Q,
146
200
  "/",
147
- F.length
201
+ Z.length
148
202
  ]
149
203
  })]
150
204
  }) }),
151
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
205
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
152
206
  className: "pt-4",
153
- children: [/* @__PURE__ */ g("div", {
207
+ children: [/* @__PURE__ */ T("div", {
154
208
  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", {
209
+ children: [/* @__PURE__ */ w(x, { className: "h-4 w-4" }), "Sprints"]
210
+ }), /* @__PURE__ */ w("p", {
157
211
  className: "text-xl font-bold mt-1",
158
- children: A.length
212
+ children: U.length
159
213
  })]
160
214
  }) }),
161
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
215
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
162
216
  className: "pt-4",
163
- children: [/* @__PURE__ */ g("div", {
217
+ children: [/* @__PURE__ */ T("div", {
164
218
  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", {
219
+ children: [/* @__PURE__ */ w(m, { className: "h-4 w-4" }), "Milestones"]
220
+ }), /* @__PURE__ */ w("p", {
167
221
  className: "text-xl font-bold mt-1",
168
- children: j.length
222
+ children: W.length
169
223
  })]
170
224
  }) }),
171
- /* @__PURE__ */ h(v, { children: /* @__PURE__ */ g(y, {
225
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
172
226
  className: "pt-4",
173
- children: [/* @__PURE__ */ g("div", {
227
+ children: [/* @__PURE__ */ T("div", {
174
228
  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", {
229
+ children: [/* @__PURE__ */ w(b, { className: "h-4 w-4" }), "Owner"]
230
+ }), /* @__PURE__ */ w("p", {
177
231
  className: "text-sm font-bold mt-1 truncate",
178
- children: /* @__PURE__ */ h(t, { id: O.ownerId })
232
+ children: /* @__PURE__ */ w(n, { id: V.ownerId })
179
233
  })]
180
234
  }) })
181
235
  ]
182
236
  }),
183
- /* @__PURE__ */ g("div", {
237
+ /* @__PURE__ */ T("div", {
184
238
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
185
- children: [/* @__PURE__ */ g("div", {
239
+ children: [/* @__PURE__ */ T("div", {
186
240
  className: "lg:col-span-2 space-y-6",
187
241
  children: [
188
- /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ h(x, { children: "Timeline" }) }), /* @__PURE__ */ g(y, { children: [
189
- /* @__PURE__ */ g("div", {
242
+ /* @__PURE__ */ T(O, { children: [/* @__PURE__ */ w(A, { children: /* @__PURE__ */ w(j, { children: "Timeline" }) }), /* @__PURE__ */ T(k, { children: [
243
+ /* @__PURE__ */ T("div", {
190
244
  className: "flex justify-between text-sm mb-2",
191
- children: [/* @__PURE__ */ h("span", {
245
+ children: [/* @__PURE__ */ w("span", {
192
246
  className: "text-muted-foreground",
193
247
  children: "Tasks done"
194
- }), /* @__PURE__ */ h("span", {
248
+ }), /* @__PURE__ */ w("span", {
195
249
  className: "font-medium",
196
- children: P === null ? "No open tasks" : `${P}%`
250
+ children: X === null ? "No open tasks" : `${X}%`
197
251
  })]
198
252
  }),
199
- /* @__PURE__ */ h("div", {
253
+ /* @__PURE__ */ w("div", {
200
254
  className: "w-full h-4 rounded-full bg-muted overflow-hidden",
201
- children: /* @__PURE__ */ h("div", {
255
+ children: /* @__PURE__ */ w("div", {
202
256
  className: "h-full bg-primary rounded-full",
203
- style: { width: `${P ?? 0}%` }
257
+ style: { width: `${X ?? 0}%` }
204
258
  })
205
259
  }),
206
- /* @__PURE__ */ g("div", {
260
+ /* @__PURE__ */ T("div", {
207
261
  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" })]
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" })]
209
263
  })
210
264
  ] })] }),
211
- M && /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ g(x, {
265
+ J && /* @__PURE__ */ T(O, { children: [/* @__PURE__ */ w(A, { children: /* @__PURE__ */ T(j, {
212
266
  className: "flex items-center gap-2",
213
- children: [/* @__PURE__ */ h(f, { className: "h-4 w-4 text-primary" }), "Active Sprint"]
214
- }) }), /* @__PURE__ */ g(y, {
267
+ children: [/* @__PURE__ */ w(x, { className: "h-4 w-4 text-primary" }), "Active Sprint"]
268
+ }) }), /* @__PURE__ */ T(k, {
215
269
  className: "space-y-3",
216
270
  children: [
217
- /* @__PURE__ */ g("div", {
271
+ /* @__PURE__ */ T("div", {
218
272
  className: "flex justify-between",
219
- children: [/* @__PURE__ */ h("span", {
273
+ children: [/* @__PURE__ */ w("span", {
220
274
  className: "font-medium",
221
- children: M.name
222
- }), /* @__PURE__ */ h(_, { children: "Active" })]
275
+ children: J.name
276
+ }), /* @__PURE__ */ w(E, { children: "Active" })]
223
277
  }),
224
- M.goal && /* @__PURE__ */ h("p", {
278
+ J.goal && /* @__PURE__ */ w("p", {
225
279
  className: "text-sm text-muted-foreground",
226
- children: M.goal
280
+ children: J.goal
227
281
  }),
228
- /* @__PURE__ */ g("div", {
282
+ /* @__PURE__ */ T("div", {
229
283
  className: "grid grid-cols-3 gap-4 text-center",
230
284
  children: [
231
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("p", {
285
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("p", {
232
286
  className: "text-lg font-semibold",
233
287
  children: [
234
- M.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),
235
289
  "/",
236
- M.workItems?.reduce((e, t) => e + (t.storyPoints ?? 0), 0) ?? 0
290
+ J.workItems?.reduce((e, t) => e + (t.storyPoints ?? 0), 0) ?? 0
237
291
  ]
238
- }), /* @__PURE__ */ h("p", {
292
+ }), /* @__PURE__ */ w("p", {
239
293
  className: "text-xs text-muted-foreground",
240
294
  children: "Points"
241
295
  })] }),
242
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("p", {
296
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("p", {
243
297
  className: "text-lg font-semibold",
244
298
  children: [
245
- M.workItems?.filter((e) => e.status === "DONE").length ?? 0,
299
+ J.workItems?.filter((e) => e.status === "DONE").length ?? 0,
246
300
  "/",
247
- M.workItems?.length ?? 0
301
+ J.workItems?.length ?? 0
248
302
  ]
249
- }), /* @__PURE__ */ h("p", {
303
+ }), /* @__PURE__ */ w("p", {
250
304
  className: "text-xs text-muted-foreground",
251
305
  children: "Tasks"
252
306
  })] }),
253
- /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
307
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
254
308
  className: "text-lg font-semibold",
255
- children: N ? `${N.velocity} pts` : "—"
256
- }), /* @__PURE__ */ h("p", {
309
+ children: Y ? `${Y.velocity} pts` : "—"
310
+ }), /* @__PURE__ */ w("p", {
257
311
  className: "text-xs text-muted-foreground",
258
312
  children: "Velocity of the last sprint"
259
313
  })] })
@@ -261,144 +315,206 @@ function w() {
261
315
  })
262
316
  ]
263
317
  })] }),
264
- /* @__PURE__ */ g(v, { children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ g(x, { children: [
318
+ /* @__PURE__ */ T(O, { children: [/* @__PURE__ */ w(A, { children: /* @__PURE__ */ T(j, { children: [
265
319
  "Work items (",
266
- k.length,
320
+ H.length,
267
321
  ")",
268
- k.length > 5 ? " · latest 5" : ""
269
- ] }) }), /* @__PURE__ */ g(y, {
322
+ H.length > 5 ? " · latest 5" : ""
323
+ ] }) }), /* @__PURE__ */ T(k, {
270
324
  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", {
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", {
275
329
  className: "text-sm font-medium",
276
330
  children: [
277
331
  e.key,
278
332
  " ",
279
- /* @__PURE__ */ h("span", {
333
+ /* @__PURE__ */ w("span", {
280
334
  className: "font-normal",
281
335
  children: e.title
282
336
  })
283
337
  ]
284
- }), /* @__PURE__ */ h("div", {
338
+ }), /* @__PURE__ */ w("div", {
285
339
  className: "flex gap-1 mt-1",
286
- children: e.labels.map((e) => /* @__PURE__ */ h("span", {
340
+ children: e.labels.map((e) => /* @__PURE__ */ w("span", {
287
341
  className: "text-[10px] px-1.5 py-0.5 rounded bg-muted",
288
342
  children: e
289
343
  }, e))
290
- })] }), /* @__PURE__ */ g("div", {
344
+ })] }), /* @__PURE__ */ T("div", {
291
345
  className: "flex items-center gap-2",
292
- children: [/* @__PURE__ */ g("span", {
346
+ children: [/* @__PURE__ */ T("span", {
293
347
  className: "text-xs text-muted-foreground",
294
348
  children: [e.storyPoints ?? 0, " pts"]
295
- }), /* @__PURE__ */ h(_, {
349
+ }), /* @__PURE__ */ w(E, {
296
350
  variant: "secondary",
297
351
  className: "capitalize text-xs",
298
352
  children: e.status.toLowerCase().replace("_", " ")
299
353
  })]
300
354
  })]
301
- }, e.id)), k.length === 0 && /* @__PURE__ */ h("p", {
355
+ }, e.id)), H.length === 0 && /* @__PURE__ */ w("p", {
302
356
  className: "text-sm text-muted-foreground text-center py-4",
303
357
  children: "No work items yet."
304
358
  })]
305
359
  })] })
306
360
  ]
307
- }), /* @__PURE__ */ g("div", {
361
+ }), /* @__PURE__ */ T("div", {
308
362
  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("_", " ")
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, {
382
+ variant: "outline",
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"]
326
389
  })]
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"]
390
+ }, e.id)), W.length === 0 && /* @__PURE__ */ w("p", {
391
+ className: "text-sm text-muted-foreground text-center py-2",
392
+ children: "No milestones."
330
393
  })]
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", {
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", {
371
439
  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
- })] })]
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
+ ]
396
512
  })]
397
513
  })
398
514
  ]
399
515
  });
400
516
  }
401
517
  //#endregion
402
- export { w as ProjectsProjectDetailPagePage };
518
+ export { I as ProjectsProjectDetailPagePage };
403
519
 
404
520
  //# sourceMappingURL=ProjectsProjectDetailPagePage.js.map