@burdenoff/microfe-planmagnet 2026.924.2 → 2026.924.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +93 -142
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +1 -1
  5. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +150 -149
  6. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +1 -1
  7. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
  8. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +180 -172
  9. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  10. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  11. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +113 -116
  12. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  13. package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +1 -1
  14. package/dist/planmagnet/pages/GoalsGoalsPagePage.js +59 -58
  15. package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +1 -1
  16. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
  17. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +150 -149
  18. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +1 -1
  19. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
  20. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +108 -107
  21. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
  22. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
  23. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +93 -92
  24. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  25. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
  26. package/dist/planmagnet/pages/ProductsProductsPagePage.js +89 -87
  27. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  28. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
  29. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +94 -93
  30. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
  31. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -1
  32. package/dist/planmagnet/pages/ProductsReleasesPagePage.js +57 -56
  33. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
  34. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +1 -1
  35. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +82 -81
  36. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +1 -1
  37. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
  38. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +72 -71
  39. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
  40. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -1
  41. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +38 -37
  42. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -1
  43. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +1 -1
  44. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +72 -71
  45. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +1 -1
  46. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +1 -1
  47. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +47 -46
  48. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -1
  49. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  50. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +120 -119
  51. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  52. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  53. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +131 -130
  54. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  55. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  56. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +77 -75
  57. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
  58. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
  59. package/dist/planmagnet/pages/ReportsReportsPagePage.js +71 -70
  60. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
  61. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -1
  62. package/dist/planmagnet/pages/TeamTeamPagePage.js +58 -57
  63. package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -1
  64. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +1 -1
  65. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js +81 -72
  66. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +1 -1
  67. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts +15 -0
  68. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -0
  69. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +302 -0
  70. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -0
  71. package/dist/planmagnet/people/People.d.ts +20 -0
  72. package/dist/planmagnet/people/People.d.ts.map +1 -0
  73. package/dist/planmagnet/people/People.js +42 -0
  74. package/dist/planmagnet/people/People.js.map +1 -0
  75. package/package.json +1 -1
@@ -1,11 +1,12 @@
1
- import { useEntityId as e } from "../hooks/useEntityId.js";
2
- import { Calendar as t, CheckSquare as n, FolderKanban as r, Users as i, Zap as a } from "lucide-react";
3
- import { gql as o } from "@apollo/client";
4
- import { useQuery as s } from "@apollo/client/react";
5
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
- import { Badge as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m } from "@burdenoff/fe-libs/ui";
1
+ import { PersonName as e } from "../people/People.js";
2
+ import { useEntityId as t } from "../hooks/useEntityId.js";
3
+ import { Calendar as n, CheckSquare as r, FolderKanban as i, Users as a, Zap as o } from "lucide-react";
4
+ import { gql as s } from "@apollo/client";
5
+ import { useQuery as c } from "@apollo/client/react";
6
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
7
+ import { Badge as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h } from "@burdenoff/fe-libs/ui";
7
8
  //#region src/planmagnet/pages/ProjectsProjectDetailPagePage.tsx
8
- var h = o`
9
+ var g = s`
9
10
  query GetProjectDetail($id: ID!) {
10
11
  planmagnetProject(id: $id) {
11
12
  id
@@ -55,7 +56,7 @@ var h = o`
55
56
  }
56
57
  }
57
58
  }
58
- `, g = {
59
+ `, _ = {
59
60
  ACTIVE: "bg-green-100 text-green-800",
60
61
  ON_HOLD: "bg-orange-100 text-orange-800",
61
62
  CANCELLED: "bg-red-100 text-red-800",
@@ -63,185 +64,185 @@ var h = o`
63
64
  PLANNING: "bg-gray-100 text-gray-800",
64
65
  ARCHIVED: "bg-gray-100 text-gray-800"
65
66
  };
66
- function _() {
67
- let o = e("projectId"), { data: _, loading: v, error: y } = s(h, {
68
- variables: { id: o },
69
- skip: !o
67
+ function v() {
68
+ let s = t("projectId"), { data: v, loading: y, error: b } = c(g, {
69
+ variables: { id: s },
70
+ skip: !s
70
71
  });
71
- if (!o) return /* @__PURE__ */ c("div", {
72
+ if (!s) return /* @__PURE__ */ l("div", {
72
73
  className: "p-6 text-muted-foreground",
73
74
  children: "No project selected. Open one from the list."
74
75
  });
75
- if (v) return /* @__PURE__ */ c("div", {
76
+ if (y) return /* @__PURE__ */ l("div", {
76
77
  className: "flex items-center justify-center p-12",
77
- children: /* @__PURE__ */ c("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
78
+ children: /* @__PURE__ */ l("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
78
79
  });
79
- if (y) return /* @__PURE__ */ l("div", {
80
+ if (b) return /* @__PURE__ */ u("div", {
80
81
  className: "p-6 text-red-500",
81
- children: ["Error loading project: ", y.message]
82
+ children: ["Error loading project: ", b.message]
82
83
  });
83
- let b = _?.planmagnetProject;
84
- if (!b) return /* @__PURE__ */ c("div", {
84
+ let x = v?.planmagnetProject;
85
+ if (!x) return /* @__PURE__ */ l("div", {
85
86
  className: "p-6 text-muted-foreground",
86
87
  children: "Project not found."
87
88
  });
88
- let x = b.workItems ?? [], S = b.sprints ?? [], C = b.milestones ?? [], w = S.find((e) => e.status === "ACTIVE"), T = x.length, E = x.filter((e) => e.status === "DONE").length;
89
- return /* @__PURE__ */ l("div", {
89
+ let S = x.workItems ?? [], C = x.sprints ?? [], w = x.milestones ?? [], T = C.find((e) => e.status === "ACTIVE"), E = S.length, D = S.filter((e) => e.status === "DONE").length;
90
+ return /* @__PURE__ */ u("div", {
90
91
  className: "space-y-6 p-6",
91
92
  children: [
92
- /* @__PURE__ */ l("div", {
93
+ /* @__PURE__ */ u("div", {
93
94
  className: "flex items-center justify-between",
94
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("div", {
95
+ children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("div", {
95
96
  className: "flex items-center gap-2",
96
97
  children: [
97
- /* @__PURE__ */ c(r, { className: "h-5 w-5 text-primary" }),
98
- /* @__PURE__ */ c("h1", {
98
+ /* @__PURE__ */ l(i, { className: "h-5 w-5 text-primary" }),
99
+ /* @__PURE__ */ l("h1", {
99
100
  className: "text-2xl font-semibold",
100
- children: b.name
101
+ children: x.name
101
102
  }),
102
- /* @__PURE__ */ c("span", {
103
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${g[b.status] ?? "bg-gray-100"}`,
104
- children: b.status.toLowerCase().replace("_", " ")
103
+ /* @__PURE__ */ l("span", {
104
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${_[x.status] ?? "bg-gray-100"}`,
105
+ children: x.status.toLowerCase().replace("_", " ")
105
106
  })
106
107
  ]
107
- }), /* @__PURE__ */ c("p", {
108
+ }), /* @__PURE__ */ l("p", {
108
109
  className: "text-sm text-muted-foreground mt-1",
109
- children: b.description ?? "No description"
110
- })] }), /* @__PURE__ */ l("div", {
110
+ children: x.description ?? "No description"
111
+ })] }), /* @__PURE__ */ u("div", {
111
112
  className: "flex gap-2",
112
- children: [/* @__PURE__ */ c(u, {
113
+ children: [/* @__PURE__ */ l(d, {
113
114
  className: "capitalize",
114
- children: b.status.toLowerCase().replace("_", " ")
115
- }), /* @__PURE__ */ c(u, {
115
+ children: x.status.toLowerCase().replace("_", " ")
116
+ }), /* @__PURE__ */ l(d, {
116
117
  variant: "outline",
117
118
  className: "capitalize",
118
- children: b.methodology.toLowerCase()
119
+ children: x.methodology.toLowerCase()
119
120
  })]
120
121
  })]
121
122
  }),
122
- /* @__PURE__ */ l("div", {
123
+ /* @__PURE__ */ u("div", {
123
124
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
124
125
  children: [
125
- /* @__PURE__ */ c(d, { children: /* @__PURE__ */ l(f, {
126
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
126
127
  className: "pt-4",
127
- children: [/* @__PURE__ */ l("div", {
128
+ children: [/* @__PURE__ */ u("div", {
128
129
  className: "flex items-center gap-2 text-muted-foreground text-xs",
129
- children: [/* @__PURE__ */ c(n, { className: "h-4 w-4" }), "Work Items"]
130
- }), /* @__PURE__ */ l("p", {
130
+ children: [/* @__PURE__ */ l(r, { className: "h-4 w-4" }), "Work Items"]
131
+ }), /* @__PURE__ */ u("p", {
131
132
  className: "text-xl font-bold mt-1",
132
133
  children: [
133
- E,
134
+ D,
134
135
  "/",
135
- T
136
+ E
136
137
  ]
137
138
  })]
138
139
  }) }),
139
- /* @__PURE__ */ c(d, { children: /* @__PURE__ */ l(f, {
140
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
140
141
  className: "pt-4",
141
- children: [/* @__PURE__ */ l("div", {
142
+ children: [/* @__PURE__ */ u("div", {
142
143
  className: "flex items-center gap-2 text-muted-foreground text-xs",
143
- children: [/* @__PURE__ */ c(a, { className: "h-4 w-4" }), "Sprints"]
144
- }), /* @__PURE__ */ c("p", {
144
+ children: [/* @__PURE__ */ l(o, { className: "h-4 w-4" }), "Sprints"]
145
+ }), /* @__PURE__ */ l("p", {
145
146
  className: "text-xl font-bold mt-1",
146
- children: S.length
147
+ children: C.length
147
148
  })]
148
149
  }) }),
149
- /* @__PURE__ */ c(d, { children: /* @__PURE__ */ l(f, {
150
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
150
151
  className: "pt-4",
151
- children: [/* @__PURE__ */ l("div", {
152
+ children: [/* @__PURE__ */ u("div", {
152
153
  className: "flex items-center gap-2 text-muted-foreground text-xs",
153
- children: [/* @__PURE__ */ c(t, { className: "h-4 w-4" }), "Milestones"]
154
- }), /* @__PURE__ */ c("p", {
154
+ children: [/* @__PURE__ */ l(n, { className: "h-4 w-4" }), "Milestones"]
155
+ }), /* @__PURE__ */ l("p", {
155
156
  className: "text-xl font-bold mt-1",
156
- children: C.length
157
+ children: w.length
157
158
  })]
158
159
  }) }),
159
- /* @__PURE__ */ c(d, { children: /* @__PURE__ */ l(f, {
160
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
160
161
  className: "pt-4",
161
- children: [/* @__PURE__ */ l("div", {
162
+ children: [/* @__PURE__ */ u("div", {
162
163
  className: "flex items-center gap-2 text-muted-foreground text-xs",
163
- children: [/* @__PURE__ */ c(i, { className: "h-4 w-4" }), "Owner"]
164
- }), /* @__PURE__ */ c("p", {
164
+ children: [/* @__PURE__ */ l(a, { className: "h-4 w-4" }), "Owner"]
165
+ }), /* @__PURE__ */ l("p", {
165
166
  className: "text-sm font-bold mt-1 truncate",
166
- children: b.ownerId
167
+ children: /* @__PURE__ */ l(e, { id: x.ownerId })
167
168
  })]
168
169
  }) })
169
170
  ]
170
171
  }),
171
- /* @__PURE__ */ l("div", {
172
+ /* @__PURE__ */ u("div", {
172
173
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
173
- children: [/* @__PURE__ */ l("div", {
174
+ children: [/* @__PURE__ */ u("div", {
174
175
  className: "lg:col-span-2 space-y-6",
175
176
  children: [
176
- /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ c(m, { children: "Timeline" }) }), /* @__PURE__ */ l(f, { children: [
177
- /* @__PURE__ */ l("div", {
177
+ /* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, { children: /* @__PURE__ */ l(h, { children: "Timeline" }) }), /* @__PURE__ */ u(p, { children: [
178
+ /* @__PURE__ */ u("div", {
178
179
  className: "flex justify-between text-sm mb-2",
179
- children: [/* @__PURE__ */ c("span", {
180
+ children: [/* @__PURE__ */ l("span", {
180
181
  className: "text-muted-foreground",
181
182
  children: "Duration"
182
- }), /* @__PURE__ */ c("span", {
183
+ }), /* @__PURE__ */ l("span", {
183
184
  className: "font-medium",
184
- children: T > 0 ? `${Math.round(E / T * 100)}% tasks done` : "No tasks yet"
185
+ children: E > 0 ? `${Math.round(D / E * 100)}% tasks done` : "No tasks yet"
185
186
  })]
186
187
  }),
187
- /* @__PURE__ */ c("div", {
188
+ /* @__PURE__ */ l("div", {
188
189
  className: "w-full h-4 rounded-full bg-muted overflow-hidden",
189
- children: /* @__PURE__ */ c("div", {
190
+ children: /* @__PURE__ */ l("div", {
190
191
  className: "h-full bg-primary rounded-full",
191
- style: { width: `${T > 0 ? Math.round(E / T * 100) : 0}%` }
192
+ style: { width: `${E > 0 ? Math.round(D / E * 100) : 0}%` }
192
193
  })
193
194
  }),
194
- /* @__PURE__ */ l("div", {
195
+ /* @__PURE__ */ u("div", {
195
196
  className: "flex justify-between text-xs text-muted-foreground mt-2",
196
- 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" })]
197
+ children: [/* @__PURE__ */ l("span", { children: x.startDate ? new Date(x.startDate).toLocaleDateString() : "Not set" }), /* @__PURE__ */ l("span", { children: x.endDate ? new Date(x.endDate).toLocaleDateString() : "Not set" })]
197
198
  })
198
199
  ] })] }),
199
- w && /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, {
200
+ T && /* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, { children: /* @__PURE__ */ u(h, {
200
201
  className: "flex items-center gap-2",
201
- children: [/* @__PURE__ */ c(a, { className: "h-4 w-4 text-primary" }), "Active Sprint"]
202
- }) }), /* @__PURE__ */ l(f, {
202
+ children: [/* @__PURE__ */ l(o, { className: "h-4 w-4 text-primary" }), "Active Sprint"]
203
+ }) }), /* @__PURE__ */ u(p, {
203
204
  className: "space-y-3",
204
205
  children: [
205
- /* @__PURE__ */ l("div", {
206
+ /* @__PURE__ */ u("div", {
206
207
  className: "flex justify-between",
207
- children: [/* @__PURE__ */ c("span", {
208
+ children: [/* @__PURE__ */ l("span", {
208
209
  className: "font-medium",
209
- children: w.name
210
- }), /* @__PURE__ */ c(u, { children: "Active" })]
210
+ children: T.name
211
+ }), /* @__PURE__ */ l(d, { children: "Active" })]
211
212
  }),
212
- w.goal && /* @__PURE__ */ c("p", {
213
+ T.goal && /* @__PURE__ */ l("p", {
213
214
  className: "text-sm text-muted-foreground",
214
- children: w.goal
215
+ children: T.goal
215
216
  }),
216
- /* @__PURE__ */ l("div", {
217
+ /* @__PURE__ */ u("div", {
217
218
  className: "grid grid-cols-3 gap-4 text-center",
218
219
  children: [
219
- /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("p", {
220
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("p", {
220
221
  className: "text-lg font-semibold",
221
222
  children: [
222
- w.workItems?.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0),
223
+ T.workItems?.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0),
223
224
  "/",
224
- w.workItems?.reduce((e, t) => e + (t.storyPoints ?? 0), 0) ?? 0
225
+ T.workItems?.reduce((e, t) => e + (t.storyPoints ?? 0), 0) ?? 0
225
226
  ]
226
- }), /* @__PURE__ */ c("p", {
227
+ }), /* @__PURE__ */ l("p", {
227
228
  className: "text-xs text-muted-foreground",
228
229
  children: "Points"
229
230
  })] }),
230
- /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("p", {
231
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("p", {
231
232
  className: "text-lg font-semibold",
232
233
  children: [
233
- w.workItems?.filter((e) => e.status === "DONE").length ?? 0,
234
+ T.workItems?.filter((e) => e.status === "DONE").length ?? 0,
234
235
  "/",
235
- w.workItems?.length ?? 0
236
+ T.workItems?.length ?? 0
236
237
  ]
237
- }), /* @__PURE__ */ c("p", {
238
+ }), /* @__PURE__ */ l("p", {
238
239
  className: "text-xs text-muted-foreground",
239
240
  children: "Tasks"
240
241
  })] }),
241
- /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
242
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
242
243
  className: "text-lg font-semibold",
243
- children: w.velocity ?? 0
244
- }), /* @__PURE__ */ c("p", {
244
+ children: T.velocity ?? 0
245
+ }), /* @__PURE__ */ l("p", {
245
246
  className: "text-xs text-muted-foreground",
246
247
  children: "Velocity"
247
248
  })] })
@@ -249,106 +250,106 @@ function _() {
249
250
  })
250
251
  ]
251
252
  })] }),
252
- /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, { children: [
253
+ /* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, { children: /* @__PURE__ */ u(h, { children: [
253
254
  "Recent Work Items (",
254
- x.length,
255
+ S.length,
255
256
  ")"
256
- ] }) }), /* @__PURE__ */ l(f, {
257
+ ] }) }), /* @__PURE__ */ u(p, {
257
258
  className: "space-y-2",
258
- children: [x.slice(0, 5).map((e) => /* @__PURE__ */ l("div", {
259
+ children: [S.slice(0, 5).map((e) => /* @__PURE__ */ u("div", {
259
260
  className: "flex items-center justify-between border rounded-md p-2.5",
260
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
261
+ children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
261
262
  className: "text-sm font-medium",
262
263
  children: e.key
263
- }), /* @__PURE__ */ c("div", {
264
+ }), /* @__PURE__ */ l("div", {
264
265
  className: "flex gap-1 mt-1",
265
- children: e.labels.map((e) => /* @__PURE__ */ c("span", {
266
+ children: e.labels.map((e) => /* @__PURE__ */ l("span", {
266
267
  className: "text-[10px] px-1.5 py-0.5 rounded bg-muted",
267
268
  children: e
268
269
  }, e))
269
- })] }), /* @__PURE__ */ l("div", {
270
+ })] }), /* @__PURE__ */ u("div", {
270
271
  className: "flex items-center gap-2",
271
- children: [/* @__PURE__ */ l("span", {
272
+ children: [/* @__PURE__ */ u("span", {
272
273
  className: "text-xs text-muted-foreground",
273
274
  children: [e.storyPoints ?? 0, " pts"]
274
- }), /* @__PURE__ */ c(u, {
275
+ }), /* @__PURE__ */ l(d, {
275
276
  variant: "secondary",
276
277
  className: "capitalize text-xs",
277
278
  children: e.status.toLowerCase().replace("_", " ")
278
279
  })]
279
280
  })]
280
- }, e.id)), x.length === 0 && /* @__PURE__ */ c("p", {
281
+ }, e.id)), S.length === 0 && /* @__PURE__ */ l("p", {
281
282
  className: "text-sm text-muted-foreground text-center py-4",
282
283
  children: "No work items yet."
283
284
  })]
284
285
  })] })
285
286
  ]
286
- }), /* @__PURE__ */ l("div", {
287
+ }), /* @__PURE__ */ u("div", {
287
288
  className: "space-y-6",
288
- children: [/* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, { children: [
289
+ children: [/* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, { children: /* @__PURE__ */ u(h, { children: [
289
290
  "Milestones (",
290
- C.length,
291
+ w.length,
291
292
  ")"
292
- ] }) }), /* @__PURE__ */ l(f, {
293
+ ] }) }), /* @__PURE__ */ u(p, {
293
294
  className: "space-y-3",
294
- children: [C.map((e) => /* @__PURE__ */ l("div", {
295
+ children: [w.map((e) => /* @__PURE__ */ u("div", {
295
296
  className: "border-b pb-2 last:border-0",
296
- children: [/* @__PURE__ */ l("div", {
297
+ children: [/* @__PURE__ */ u("div", {
297
298
  className: "flex justify-between",
298
- children: [/* @__PURE__ */ c("span", {
299
+ children: [/* @__PURE__ */ l("span", {
299
300
  className: "text-sm font-medium",
300
301
  children: e.name
301
- }), /* @__PURE__ */ c(u, {
302
+ }), /* @__PURE__ */ l(d, {
302
303
  variant: "outline",
303
304
  className: "text-xs capitalize",
304
305
  children: e.status.toLowerCase().replace("_", " ")
305
306
  })]
306
- }), /* @__PURE__ */ l("div", {
307
+ }), /* @__PURE__ */ u("div", {
307
308
  className: "flex items-center gap-1 text-xs text-muted-foreground mt-1",
308
- children: [/* @__PURE__ */ c(t, { className: "h-3 w-3" }), e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "No due date"]
309
+ children: [/* @__PURE__ */ l(n, { className: "h-3 w-3" }), e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "No due date"]
309
310
  })]
310
- }, e.id)), C.length === 0 && /* @__PURE__ */ c("p", {
311
+ }, e.id)), w.length === 0 && /* @__PURE__ */ l("p", {
311
312
  className: "text-sm text-muted-foreground text-center py-2",
312
313
  children: "No milestones."
313
314
  })]
314
- })] }), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ c(m, { children: "Details" }) }), /* @__PURE__ */ l(f, {
315
+ })] }), /* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, { children: /* @__PURE__ */ l(h, { children: "Details" }) }), /* @__PURE__ */ u(p, {
315
316
  className: "space-y-2 text-sm",
316
317
  children: [
317
- /* @__PURE__ */ l("div", {
318
+ /* @__PURE__ */ u("div", {
318
319
  className: "flex justify-between",
319
- children: [/* @__PURE__ */ c("span", {
320
+ children: [/* @__PURE__ */ l("span", {
320
321
  className: "text-muted-foreground",
321
322
  children: "Owner"
322
- }), /* @__PURE__ */ c("span", { children: b.ownerId })]
323
+ }), /* @__PURE__ */ l("span", { children: /* @__PURE__ */ l(e, { id: x.ownerId }) })]
323
324
  }),
324
- /* @__PURE__ */ l("div", {
325
+ /* @__PURE__ */ u("div", {
325
326
  className: "flex justify-between",
326
- children: [/* @__PURE__ */ c("span", {
327
+ children: [/* @__PURE__ */ l("span", {
327
328
  className: "text-muted-foreground",
328
329
  children: "Key"
329
- }), /* @__PURE__ */ c("span", {
330
+ }), /* @__PURE__ */ l("span", {
330
331
  className: "font-mono",
331
- children: b.key
332
+ children: x.key
332
333
  })]
333
334
  }),
334
- /* @__PURE__ */ l("div", {
335
+ /* @__PURE__ */ u("div", {
335
336
  className: "flex justify-between",
336
- children: [/* @__PURE__ */ c("span", {
337
+ children: [/* @__PURE__ */ l("span", {
337
338
  className: "text-muted-foreground",
338
339
  children: "Methodology"
339
- }), /* @__PURE__ */ c("span", {
340
+ }), /* @__PURE__ */ l("span", {
340
341
  className: "capitalize",
341
- children: b.methodology.toLowerCase()
342
+ children: x.methodology.toLowerCase()
342
343
  })]
343
344
  }),
344
- b.tags.length > 0 && /* @__PURE__ */ l("div", {
345
+ x.tags.length > 0 && /* @__PURE__ */ u("div", {
345
346
  className: "flex justify-between items-start",
346
- children: [/* @__PURE__ */ c("span", {
347
+ children: [/* @__PURE__ */ l("span", {
347
348
  className: "text-muted-foreground",
348
349
  children: "Tags"
349
- }), /* @__PURE__ */ c("div", {
350
+ }), /* @__PURE__ */ l("div", {
350
351
  className: "flex gap-1 flex-wrap justify-end",
351
- children: b.tags.map((e) => /* @__PURE__ */ c(u, {
352
+ children: x.tags.map((e) => /* @__PURE__ */ l(d, {
352
353
  variant: "outline",
353
354
  className: "text-xs",
354
355
  children: e
@@ -363,6 +364,6 @@ function _() {
363
364
  });
364
365
  }
365
366
  //#endregion
366
- export { _ as ProjectsProjectDetailPagePage };
367
+ export { v as ProjectsProjectDetailPagePage };
367
368
 
368
369
  //# sourceMappingURL=ProjectsProjectDetailPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsProjectDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsProjectDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, CheckSquare, Users, Zap, Calendar } from 'lucide-react';\nimport { useEntityId } from '../hooks/useEntityId';\n\nconst GET_PROJECT_DETAIL = gql`\n query GetProjectDetail($id: ID!) {\n planmagnetProject(id: $id) {\n id\n name\n key\n description\n status\n methodology\n ownerId\n startDate\n endDate\n tags\n createdAt\n sprints {\n id\n name\n status\n goal\n capacity\n velocity\n startDate\n endDate\n workItems {\n id\n status\n storyPoints\n }\n }\n milestones {\n id\n name\n description\n status\n dueDate\n ownerId\n }\n workItems {\n id\n key\n description\n status\n priority\n storyPoints\n assigneeId\n labels\n createdAt\n }\n }\n }\n`;\n\nconst statusColor: Record<string, string> = {\n ACTIVE: 'bg-green-100 text-green-800',\n ON_HOLD: 'bg-orange-100 text-orange-800',\n CANCELLED: 'bg-red-100 text-red-800',\n COMPLETED: 'bg-blue-100 text-blue-800',\n PLANNING: 'bg-gray-100 text-gray-800',\n ARCHIVED: 'bg-gray-100 text-gray-800',\n};\n\nexport function ProjectsProjectDetailPagePage() {\n const projectId = useEntityId('projectId');\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_PROJECT_DETAIL, {\n variables: { id: projectId },\n skip: !projectId,\n });\n\n if (!projectId)\n return (\n <div className=\"p-6 text-muted-foreground\">No project selected. Open one from the list.</div>\n );\n if (loading)\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n if (error) return <div className=\"p-6 text-red-500\">Error loading project: {error.message}</div>;\n\n const project = data?.planmagnetProject;\n if (!project) return <div className=\"p-6 text-muted-foreground\">Project not found.</div>;\n\n const projectWorkItems = project.workItems ?? [];\n const projectSprints = project.sprints ?? [];\n const projectMilestones = project.milestones ?? [];\n const activeSprint = projectSprints.find((s: { status: string }) => s.status === 'ACTIVE');\n const totalTasks = projectWorkItems.length;\n const completedTasks = projectWorkItems.filter(\n (wi: { status: string }) => wi.status === 'DONE'\n ).length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{project.name}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[project.status] ?? 'bg-gray-100'}`}\n >\n {project.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {project.description ?? 'No description'}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge className=\"capitalize\">{project.status.toLowerCase().replace('_', ' ')}</Badge>\n <Badge variant=\"outline\" className=\"capitalize\">\n {project.methodology.toLowerCase()}\n </Badge>\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <CheckSquare className=\"h-4 w-4\" />\n Work Items\n </div>\n <p className=\"text-xl font-bold mt-1\">\n {completedTasks}/{totalTasks}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Zap className=\"h-4 w-4\" />\n Sprints\n </div>\n <p className=\"text-xl font-bold mt-1\">{projectSprints.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Calendar className=\"h-4 w-4\" />\n Milestones\n </div>\n <p className=\"text-xl font-bold mt-1\">{projectMilestones.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Users className=\"h-4 w-4\" />\n Owner\n </div>\n <p className=\"text-sm font-bold mt-1 truncate\">{project.ownerId}</p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex justify-between text-sm mb-2\">\n <span className=\"text-muted-foreground\">Duration</span>\n <span className=\"font-medium\">\n {totalTasks > 0\n ? `${Math.round((completedTasks / totalTasks) * 100)}% tasks done`\n : 'No tasks yet'}\n </span>\n </div>\n <div className=\"w-full h-4 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{\n width: `${totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0}%`,\n }}\n />\n </div>\n <div className=\"flex justify-between text-xs text-muted-foreground mt-2\">\n <span>\n {project.startDate ? new Date(project.startDate).toLocaleDateString() : 'Not set'}\n </span>\n <span>\n {project.endDate ? new Date(project.endDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n </CardContent>\n </Card>\n\n {activeSprint && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-primary\" />\n Active Sprint\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"font-medium\">{activeSprint.name}</span>\n <Badge>Active</Badge>\n </div>\n {activeSprint.goal && (\n <p className=\"text-sm text-muted-foreground\">{activeSprint.goal}</p>\n )}\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div>\n <p className=\"text-lg font-semibold\">\n {activeSprint.workItems\n ?.filter((wi: { status: string }) => wi.status === 'DONE')\n .reduce(\n (s: number, wi: { storyPoints: number | null }) =>\n s + (wi.storyPoints ?? 0),\n 0\n )}\n /\n {activeSprint.workItems?.reduce(\n (s: number, wi: { storyPoints: number | null }) =>\n s + (wi.storyPoints ?? 0),\n 0\n ) ?? 0}\n </p>\n <p className=\"text-xs text-muted-foreground\">Points</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold\">\n {activeSprint.workItems?.filter(\n (wi: { status: string }) => wi.status === 'DONE'\n ).length ?? 0}\n /{activeSprint.workItems?.length ?? 0}\n </p>\n <p className=\"text-xs text-muted-foreground\">Tasks</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold\">{activeSprint.velocity ?? 0}</p>\n <p className=\"text-xs text-muted-foreground\">Velocity</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Recent Work Items ({projectWorkItems.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {projectWorkItems\n .slice(0, 5)\n .map(\n (task: {\n id: string;\n key: string;\n description: string | null;\n status: string;\n storyPoints: number | null;\n labels: string[];\n }) => (\n <div\n key={task.id}\n className=\"flex items-center justify-between border rounded-md p-2.5\"\n >\n <div>\n <p className=\"text-sm font-medium\">{task.key}</p>\n <div className=\"flex gap-1 mt-1\">\n {task.labels.map((l: string) => (\n <span key={l} className=\"text-[10px] px-1.5 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {task.storyPoints ?? 0} pts\n </span>\n <Badge variant=\"secondary\" className=\"capitalize text-xs\">\n {task.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n </div>\n )\n )}\n {projectWorkItems.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-4\">No work items yet.</p>\n )}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Milestones ({projectMilestones.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {projectMilestones.map(\n (ms: { id: string; name: string; status: string; dueDate: string | null }) => (\n <div key={ms.id} className=\"border-b pb-2 last:border-0\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm font-medium\">{ms.name}</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {ms.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground mt-1\">\n <Calendar className=\"h-3 w-3\" />\n {ms.dueDate ? new Date(ms.dueDate).toLocaleDateString() : 'No due date'}\n </div>\n </div>\n )\n )}\n {projectMilestones.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-2\">No milestones.</p>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>{project.ownerId}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Key</span>\n <span className=\"font-mono\">{project.key}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Methodology</span>\n <span className=\"capitalize\">{project.methodology.toLowerCase()}</span>\n </div>\n {project.tags.length > 0 && (\n <div className=\"flex justify-between items-start\">\n <span className=\"text-muted-foreground\">Tags</span>\n <div className=\"flex gap-1 flex-wrap justify-end\">\n {project.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectsProjectDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsProjectDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, CheckSquare, Users, Zap, Calendar } from 'lucide-react';\nimport { useEntityId } from '../hooks/useEntityId';\nimport { PersonName } from '../people/People';\n\nconst GET_PROJECT_DETAIL = gql`\n query GetProjectDetail($id: ID!) {\n planmagnetProject(id: $id) {\n id\n name\n key\n description\n status\n methodology\n ownerId\n startDate\n endDate\n tags\n createdAt\n sprints {\n id\n name\n status\n goal\n capacity\n velocity\n startDate\n endDate\n workItems {\n id\n status\n storyPoints\n }\n }\n milestones {\n id\n name\n description\n status\n dueDate\n ownerId\n }\n workItems {\n id\n key\n description\n status\n priority\n storyPoints\n assigneeId\n labels\n createdAt\n }\n }\n }\n`;\n\nconst statusColor: Record<string, string> = {\n ACTIVE: 'bg-green-100 text-green-800',\n ON_HOLD: 'bg-orange-100 text-orange-800',\n CANCELLED: 'bg-red-100 text-red-800',\n COMPLETED: 'bg-blue-100 text-blue-800',\n PLANNING: 'bg-gray-100 text-gray-800',\n ARCHIVED: 'bg-gray-100 text-gray-800',\n};\n\nexport function ProjectsProjectDetailPagePage() {\n const projectId = useEntityId('projectId');\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_PROJECT_DETAIL, {\n variables: { id: projectId },\n skip: !projectId,\n });\n\n if (!projectId)\n return (\n <div className=\"p-6 text-muted-foreground\">No project selected. Open one from the list.</div>\n );\n if (loading)\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n if (error) return <div className=\"p-6 text-red-500\">Error loading project: {error.message}</div>;\n\n const project = data?.planmagnetProject;\n if (!project) return <div className=\"p-6 text-muted-foreground\">Project not found.</div>;\n\n const projectWorkItems = project.workItems ?? [];\n const projectSprints = project.sprints ?? [];\n const projectMilestones = project.milestones ?? [];\n const activeSprint = projectSprints.find((s: { status: string }) => s.status === 'ACTIVE');\n const totalTasks = projectWorkItems.length;\n const completedTasks = projectWorkItems.filter(\n (wi: { status: string }) => wi.status === 'DONE'\n ).length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{project.name}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[project.status] ?? 'bg-gray-100'}`}\n >\n {project.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {project.description ?? 'No description'}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge className=\"capitalize\">{project.status.toLowerCase().replace('_', ' ')}</Badge>\n <Badge variant=\"outline\" className=\"capitalize\">\n {project.methodology.toLowerCase()}\n </Badge>\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <CheckSquare className=\"h-4 w-4\" />\n Work Items\n </div>\n <p className=\"text-xl font-bold mt-1\">\n {completedTasks}/{totalTasks}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Zap className=\"h-4 w-4\" />\n Sprints\n </div>\n <p className=\"text-xl font-bold mt-1\">{projectSprints.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Calendar className=\"h-4 w-4\" />\n Milestones\n </div>\n <p className=\"text-xl font-bold mt-1\">{projectMilestones.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Users className=\"h-4 w-4\" />\n Owner\n </div>\n <p className=\"text-sm font-bold mt-1 truncate\">\n <PersonName id={project.ownerId} />\n </p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex justify-between text-sm mb-2\">\n <span className=\"text-muted-foreground\">Duration</span>\n <span className=\"font-medium\">\n {totalTasks > 0\n ? `${Math.round((completedTasks / totalTasks) * 100)}% tasks done`\n : 'No tasks yet'}\n </span>\n </div>\n <div className=\"w-full h-4 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{\n width: `${totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0}%`,\n }}\n />\n </div>\n <div className=\"flex justify-between text-xs text-muted-foreground mt-2\">\n <span>\n {project.startDate ? new Date(project.startDate).toLocaleDateString() : 'Not set'}\n </span>\n <span>\n {project.endDate ? new Date(project.endDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n </CardContent>\n </Card>\n\n {activeSprint && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-primary\" />\n Active Sprint\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"font-medium\">{activeSprint.name}</span>\n <Badge>Active</Badge>\n </div>\n {activeSprint.goal && (\n <p className=\"text-sm text-muted-foreground\">{activeSprint.goal}</p>\n )}\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div>\n <p className=\"text-lg font-semibold\">\n {activeSprint.workItems\n ?.filter((wi: { status: string }) => wi.status === 'DONE')\n .reduce(\n (s: number, wi: { storyPoints: number | null }) =>\n s + (wi.storyPoints ?? 0),\n 0\n )}\n /\n {activeSprint.workItems?.reduce(\n (s: number, wi: { storyPoints: number | null }) =>\n s + (wi.storyPoints ?? 0),\n 0\n ) ?? 0}\n </p>\n <p className=\"text-xs text-muted-foreground\">Points</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold\">\n {activeSprint.workItems?.filter(\n (wi: { status: string }) => wi.status === 'DONE'\n ).length ?? 0}\n /{activeSprint.workItems?.length ?? 0}\n </p>\n <p className=\"text-xs text-muted-foreground\">Tasks</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold\">{activeSprint.velocity ?? 0}</p>\n <p className=\"text-xs text-muted-foreground\">Velocity</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Recent Work Items ({projectWorkItems.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {projectWorkItems\n .slice(0, 5)\n .map(\n (task: {\n id: string;\n key: string;\n description: string | null;\n status: string;\n storyPoints: number | null;\n labels: string[];\n }) => (\n <div\n key={task.id}\n className=\"flex items-center justify-between border rounded-md p-2.5\"\n >\n <div>\n <p className=\"text-sm font-medium\">{task.key}</p>\n <div className=\"flex gap-1 mt-1\">\n {task.labels.map((l: string) => (\n <span key={l} className=\"text-[10px] px-1.5 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {task.storyPoints ?? 0} pts\n </span>\n <Badge variant=\"secondary\" className=\"capitalize text-xs\">\n {task.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n </div>\n )\n )}\n {projectWorkItems.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-4\">No work items yet.</p>\n )}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Milestones ({projectMilestones.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {projectMilestones.map(\n (ms: { id: string; name: string; status: string; dueDate: string | null }) => (\n <div key={ms.id} className=\"border-b pb-2 last:border-0\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm font-medium\">{ms.name}</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {ms.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground mt-1\">\n <Calendar className=\"h-3 w-3\" />\n {ms.dueDate ? new Date(ms.dueDate).toLocaleDateString() : 'No due date'}\n </div>\n </div>\n )\n )}\n {projectMilestones.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-2\">No milestones.</p>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={project.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Key</span>\n <span className=\"font-mono\">{project.key}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Methodology</span>\n <span className=\"capitalize\">{project.methodology.toLowerCase()}</span>\n </div>\n {project.tags.length > 0 && (\n <div className=\"flex justify-between items-start\">\n <span className=\"text-muted-foreground\">Tags</span>\n <div className=\"flex gap-1 flex-wrap justify-end\">\n {project.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsProjectsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsProjectsPagePage.tsx"],"names":[],"mappings":"AA0CA,wBAAgB,wBAAwB,4CAoKvC"}
1
+ {"version":3,"file":"ProjectsProjectsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsProjectsPagePage.tsx"],"names":[],"mappings":"AA2CA,wBAAgB,wBAAwB,4CAqKvC"}