@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
@@ -6,21 +6,22 @@ import { Bar as i } from "../../node_modules/recharts/es6/cartesian/Bar.js";
6
6
  import { ReferenceLine as ee } from "../../node_modules/recharts/es6/cartesian/ReferenceLine.js";
7
7
  import { CartesianGrid as a } from "../../node_modules/recharts/es6/cartesian/CartesianGrid.js";
8
8
  import { Line as o } from "../../node_modules/recharts/es6/cartesian/Line.js";
9
- import { Area as s } from "../../node_modules/recharts/es6/cartesian/Area.js";
10
- import { XAxis as c } from "../../node_modules/recharts/es6/cartesian/XAxis.js";
11
- import { YAxis as l } from "../../node_modules/recharts/es6/cartesian/YAxis.js";
12
- import { LineChart as te } from "../../node_modules/recharts/es6/chart/LineChart.js";
13
- import { BarChart as ne } from "../../node_modules/recharts/es6/chart/BarChart.js";
14
- import { AreaChart as u } from "../../node_modules/recharts/es6/chart/AreaChart.js";
9
+ import { Area as te } from "../../node_modules/recharts/es6/cartesian/Area.js";
10
+ import { XAxis as s } from "../../node_modules/recharts/es6/cartesian/XAxis.js";
11
+ import { YAxis as c } from "../../node_modules/recharts/es6/cartesian/YAxis.js";
12
+ import { LineChart as ne } from "../../node_modules/recharts/es6/chart/LineChart.js";
13
+ import { BarChart as re } from "../../node_modules/recharts/es6/chart/BarChart.js";
14
+ import { AreaChart as ie } from "../../node_modules/recharts/es6/chart/AreaChart.js";
15
+ import { BudgetPerformanceCard as l, CycleTimeCard as u } from "./analytics/DeliveryHealthCards.js";
15
16
  import { useState as d } from "react";
16
- import { BarChart3 as f, FolderKanban as re, Target as ie, TrendingUp as p, Zap as m } from "lucide-react";
17
- import { gql as h } from "@apollo/client";
18
- import { useQuery as g } from "@apollo/client/react";
19
- import { Fragment as ae, jsx as _, jsxs as v } from "react/jsx-runtime";
17
+ import { BarChart3 as f, FolderKanban as p, Target as m, TrendingUp as h, Zap as ae } from "lucide-react";
18
+ import { gql as g } from "@apollo/client";
19
+ import { useQuery as _ } from "@apollo/client/react";
20
+ import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
20
21
  import { useI18n as oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { Badge as se, Card as y, CardContent as b, CardHeader as x, CardTitle as S, Select as C, SelectContent as w, SelectItem as T, SelectTrigger as E, SelectValue as D } from "@burdenoff/fe-libs/ui";
22
+ import { Badge as se, Card as x, CardContent as S, CardHeader as C, CardTitle as w, Select as T, SelectContent as E, SelectItem as D, SelectTrigger as O, SelectValue as k } from "@burdenoff/fe-libs/ui";
22
23
  //#region src/planmagnet/pages/AnalyticsAnalyticsPagePage.tsx
23
- var ce = h`
24
+ var A = g`
24
25
  query GetAnalyticsData(
25
26
  $workspaceId: ID!
26
27
  $projectPagination: PlanmagnetPaginationInput
@@ -73,7 +74,7 @@ var ce = h`
73
74
  totalCount
74
75
  }
75
76
  }
76
- `, le = h`
77
+ `, j = g`
77
78
  query GetSprintBurndown($workspaceId: ID!, $sprintId: ID!) {
78
79
  planmagnetSprintBurndown(workspaceId: $workspaceId, sprintId: $sprintId) {
79
80
  sprintId
@@ -90,7 +91,7 @@ var ce = h`
90
91
  }
91
92
  }
92
93
  }
93
- `, O = h`
94
+ `, ce = g`
94
95
  query GetVelocity($workspaceId: ID!, $projectId: ID!, $trailingSprintCount: Int) {
95
96
  planmagnetVelocity(
96
97
  workspaceId: $workspaceId
@@ -110,7 +111,7 @@ var ce = h`
110
111
  }
111
112
  }
112
113
  }
113
- `, k = h`
114
+ `, le = g`
114
115
  query GetCumulativeFlow($workspaceId: ID!, $projectId: ID!) {
115
116
  planmagnetCumulativeFlow(workspaceId: $workspaceId, projectId: $projectId) {
116
117
  projectId
@@ -125,7 +126,7 @@ var ce = h`
125
126
  }
126
127
  }
127
128
  }
128
- `, A = {
129
+ `, M = {
129
130
  BACKLOG: "#9ca3af",
130
131
  TODO: "#60a5fa",
131
132
  IN_PROGRESS: "#fbbf24",
@@ -134,396 +135,403 @@ var ce = h`
134
135
  DONE: "#4ade80",
135
136
  CANCELLED: "#f87171"
136
137
  };
137
- function j(e) {
138
+ function N(e) {
138
139
  let t = new Date(e);
139
140
  return `${t.getUTCMonth() + 1}/${t.getUTCDate()}`;
140
141
  }
141
- function M() {
142
- let { workspaceId: h } = e(), { t: M } = oe(), [ue, de] = d(""), [fe, N] = d(""), { data: P, loading: F, error: I } = g(ce, {
142
+ function P() {
143
+ let { workspaceId: g } = e(), { t: P } = oe(), [ue, de] = d(""), [fe, F] = d(""), { data: I, loading: L, error: R } = _(A, {
143
144
  variables: {
144
- workspaceId: h,
145
+ workspaceId: g,
145
146
  projectPagination: { first: 100 },
146
147
  workItemPagination: { first: 500 },
147
148
  sprintPagination: { first: 100 },
148
149
  milestonePagination: { first: 100 }
149
150
  },
150
- skip: !h
151
- }), L = P?.planmagnetProjects?.items ?? [], R = P?.planmagnetWorkItems?.items ?? [], z = P?.planmagnetSprints?.items ?? [], B = P?.planmagnetMilestones?.items ?? [], V = ue || L[0]?.id || "", H = z.filter((e) => e.projectId === V), U = fe || H[0]?.id || "", { data: pe, loading: me } = g(le, {
151
+ skip: !g
152
+ }), z = I?.planmagnetProjects?.items ?? [], B = I?.planmagnetWorkItems?.items ?? [], V = I?.planmagnetSprints?.items ?? [], pe = I?.planmagnetMilestones?.items ?? [], H = ue || z[0]?.id || "", U = V.filter((e) => e.projectId === H), W = fe || U[0]?.id || "", { data: me, loading: he } = _(j, {
152
153
  variables: {
153
- workspaceId: h,
154
- sprintId: U
154
+ workspaceId: g,
155
+ sprintId: W
155
156
  },
156
- skip: !h || !U
157
- }), { data: he, loading: ge } = g(O, {
157
+ skip: !g || !W
158
+ }), { data: ge, loading: _e } = _(ce, {
158
159
  variables: {
159
- workspaceId: h,
160
- projectId: V,
160
+ workspaceId: g,
161
+ projectId: H,
161
162
  trailingSprintCount: 6
162
163
  },
163
- skip: !h || !V
164
- }), { data: _e, loading: ve } = g(k, {
164
+ skip: !g || !H
165
+ }), { data: ve, loading: ye } = _(le, {
165
166
  variables: {
166
- workspaceId: h,
167
- projectId: V
167
+ workspaceId: g,
168
+ projectId: H
168
169
  },
169
- skip: !h || !V
170
+ skip: !g || !H
170
171
  });
171
- if (F) return /* @__PURE__ */ _("div", {
172
+ if (L) return /* @__PURE__ */ y("div", {
172
173
  className: "flex items-center justify-center p-12",
173
- children: /* @__PURE__ */ _("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
174
+ children: /* @__PURE__ */ y("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
174
175
  });
175
- if (I) return /* @__PURE__ */ v("div", {
176
+ if (R) return /* @__PURE__ */ b("div", {
176
177
  className: "p-6 text-red-500",
177
178
  children: [
178
- M("planmagnet.analytics.errorLoading", "Error loading analytics"),
179
+ P("planmagnet.analytics.errorLoading", "Error loading analytics"),
179
180
  ": ",
180
- I.message
181
+ R.message
181
182
  ]
182
183
  });
183
- let W = R.length, ye = R.filter((e) => e.status === "DONE").length, G = R.filter((e) => e.status === "BLOCKED").length, be = R.reduce((e, t) => e + (t.storyPoints ?? 0), 0), xe = R.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0), K = z.filter((e) => e.status === "ACTIVE").length, Se = B.filter((e) => e.status === "AT_RISK" || e.status === "OVERDUE").length, q = L.filter((e) => e.status === "ACTIVE").length, Ce = W > 0 ? Math.round(ye / W * 100) : 0, J = (pe?.planmagnetSprintBurndown)?.points.map((e) => ({
184
- day: j(e.date),
184
+ let G = B.length, be = B.filter((e) => e.status === "DONE").length, K = B.filter((e) => e.status === "BLOCKED").length, xe = B.reduce((e, t) => e + (t.storyPoints ?? 0), 0), Se = B.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0), Ce = V.filter((e) => e.status === "ACTIVE").length, we = pe.filter((e) => e.status === "AT_RISK" || e.status === "OVERDUE").length, q = z.filter((e) => e.status === "ACTIVE").length, Te = G > 0 ? Math.round(be / G * 100) : 0, J = (me?.planmagnetSprintBurndown)?.points.map((e) => ({
185
+ day: N(e.date),
185
186
  remaining: e.remainingPoints,
186
187
  completed: e.completedPoints
187
- })) ?? [], Y = he?.planmagnetVelocity, X = Y?.sprints.map((e) => ({
188
+ })) ?? [], Y = ge?.planmagnetVelocity, X = Y?.sprints.map((e) => ({
188
189
  name: e.sprintName,
189
190
  completed: e.completedPoints,
190
191
  planned: e.plannedPoints ?? void 0
191
- })) ?? [], Z = Y ? Math.round(Y.averageVelocity) : 0, we = Y ? Math.round(Y.forecastNextSprintPoints) : 0, Q = _e?.planmagnetCumulativeFlow, Te = Array.from(new Set(Q?.points.flatMap((e) => e.statuses.map((e) => e.status)) ?? [])), $ = Q?.points.map((e) => {
192
- let t = { day: j(e.date) };
192
+ })) ?? [], Z = Y ? Math.round(Y.averageVelocity) : 0, Ee = Y ? Math.round(Y.forecastNextSprintPoints) : 0, Q = ve?.planmagnetCumulativeFlow, De = Array.from(new Set(Q?.points.flatMap((e) => e.statuses.map((e) => e.status)) ?? [])), $ = Q?.points.map((e) => {
193
+ let t = { day: N(e.date) };
193
194
  for (let n of e.statuses) t[n.status] = n.count;
194
195
  return t;
195
- }) ?? [], Ee = [
196
+ }) ?? [], Oe = [
196
197
  {
197
- label: M("planmagnet.analytics.metrics.totalWorkItems.label", "Total Work Items"),
198
- value: String(W),
199
- trend: `${Ce}% ${M("planmagnet.analytics.metrics.totalWorkItems.trend", "completed")}`
198
+ label: P("planmagnet.analytics.metrics.totalWorkItems.label", "Total Work Items"),
199
+ value: String(G),
200
+ trend: `${Te}% ${P("planmagnet.analytics.metrics.totalWorkItems.trend", "completed")}`
200
201
  },
201
202
  {
202
- label: M("planmagnet.analytics.metrics.storyPoints.label", "Story Points"),
203
- value: String(be),
204
- trend: `${xe} ${M("planmagnet.analytics.metrics.storyPoints.trend", "completed")}`
203
+ label: P("planmagnet.analytics.metrics.storyPoints.label", "Story Points"),
204
+ value: String(xe),
205
+ trend: `${Se} ${P("planmagnet.analytics.metrics.storyPoints.trend", "completed")}`
205
206
  },
206
207
  {
207
- label: M("planmagnet.analytics.metrics.activeProjects.label", "Active Projects"),
208
+ label: P("planmagnet.analytics.metrics.activeProjects.label", "Active Projects"),
208
209
  value: String(q),
209
- trend: `${L.length} ${M("planmagnet.analytics.metrics.activeProjects.trend", "total")}`
210
+ trend: `${z.length} ${P("planmagnet.analytics.metrics.activeProjects.trend", "total")}`
210
211
  },
211
212
  {
212
- label: M("planmagnet.analytics.metrics.blockedItems.label", "Blocked Items"),
213
- value: String(G),
214
- trend: G > 0 ? M("planmagnet.analytics.metrics.blockedItems.attention", "Needs attention") : M("planmagnet.analytics.metrics.blockedItems.clear", "All clear")
213
+ label: P("planmagnet.analytics.metrics.blockedItems.label", "Blocked Items"),
214
+ value: String(K),
215
+ trend: K > 0 ? P("planmagnet.analytics.metrics.blockedItems.attention", "Needs attention") : P("planmagnet.analytics.metrics.blockedItems.clear", "All clear")
215
216
  }
216
217
  ];
217
- return /* @__PURE__ */ v("div", {
218
+ return /* @__PURE__ */ b("div", {
218
219
  className: "space-y-6 p-6",
219
220
  children: [
220
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h1", {
221
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h1", {
221
222
  className: "text-2xl font-semibold",
222
- children: M("planmagnet.analytics.title", "Analytics Dashboard")
223
- }), /* @__PURE__ */ _("p", {
223
+ children: P("planmagnet.analytics.title", "Analytics Dashboard")
224
+ }), /* @__PURE__ */ y("p", {
224
225
  className: "text-sm text-muted-foreground",
225
- children: M("planmagnet.analytics.subtitle", "Overview of project health and team performance")
226
+ children: P("planmagnet.analytics.subtitle", "Overview of project health and team performance")
226
227
  })] }),
227
- /* @__PURE__ */ _("div", {
228
+ /* @__PURE__ */ y("div", {
228
229
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
229
- children: Ee.map((e) => /* @__PURE__ */ _(y, { children: /* @__PURE__ */ v(b, {
230
+ children: Oe.map((e) => /* @__PURE__ */ y(x, { children: /* @__PURE__ */ b(S, {
230
231
  className: "pt-4",
231
232
  children: [
232
- /* @__PURE__ */ _("p", {
233
+ /* @__PURE__ */ y("p", {
233
234
  className: "text-xs text-muted-foreground",
234
235
  children: e.label
235
236
  }),
236
- /* @__PURE__ */ _("p", {
237
+ /* @__PURE__ */ y("p", {
237
238
  className: "text-xl font-bold mt-1",
238
239
  children: e.value
239
240
  }),
240
- /* @__PURE__ */ _("p", {
241
+ /* @__PURE__ */ y("p", {
241
242
  className: "text-xs text-green-600 mt-1",
242
243
  children: e.trend
243
244
  })
244
245
  ]
245
246
  }) }, e.label))
246
247
  }),
247
- /* @__PURE__ */ v("div", {
248
+ /* @__PURE__ */ b("div", {
248
249
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
249
250
  children: [
250
- /* @__PURE__ */ _(y, { children: /* @__PURE__ */ v(b, {
251
+ /* @__PURE__ */ y(x, { children: /* @__PURE__ */ b(S, {
251
252
  className: "pt-4",
252
- children: [/* @__PURE__ */ v("div", {
253
+ children: [/* @__PURE__ */ b("div", {
253
254
  className: "flex items-center gap-2 text-muted-foreground text-xs",
254
- children: [/* @__PURE__ */ _(re, { className: "h-4 w-4" }), M("planmagnet.analytics.summary.activeProjects", "Active Projects")]
255
- }), /* @__PURE__ */ _("p", {
255
+ children: [/* @__PURE__ */ y(p, { className: "h-4 w-4" }), P("planmagnet.analytics.summary.activeProjects", "Active Projects")]
256
+ }), /* @__PURE__ */ y("p", {
256
257
  className: "text-xl font-bold mt-1",
257
258
  children: q
258
259
  })]
259
260
  }) }),
260
- /* @__PURE__ */ _(y, { children: /* @__PURE__ */ v(b, {
261
+ /* @__PURE__ */ y(x, { children: /* @__PURE__ */ b(S, {
261
262
  className: "pt-4",
262
- children: [/* @__PURE__ */ v("div", {
263
+ children: [/* @__PURE__ */ b("div", {
263
264
  className: "flex items-center gap-2 text-muted-foreground text-xs",
264
- children: [/* @__PURE__ */ _(m, { className: "h-4 w-4" }), M("planmagnet.analytics.summary.activeSprints", "Active Sprints")]
265
- }), /* @__PURE__ */ _("p", {
265
+ children: [/* @__PURE__ */ y(ae, { className: "h-4 w-4" }), P("planmagnet.analytics.summary.activeSprints", "Active Sprints")]
266
+ }), /* @__PURE__ */ y("p", {
266
267
  className: "text-xl font-bold mt-1",
267
- children: K
268
+ children: Ce
268
269
  })]
269
270
  }) }),
270
- /* @__PURE__ */ _(y, { children: /* @__PURE__ */ v(b, {
271
+ /* @__PURE__ */ y(x, { children: /* @__PURE__ */ b(S, {
271
272
  className: "pt-4",
272
- children: [/* @__PURE__ */ v("div", {
273
+ children: [/* @__PURE__ */ b("div", {
273
274
  className: "flex items-center gap-2 text-muted-foreground text-xs",
274
- children: [/* @__PURE__ */ _(p, { className: "h-4 w-4" }), M("planmagnet.analytics.summary.avgVelocity", "Avg Velocity")]
275
- }), /* @__PURE__ */ v("p", {
275
+ children: [/* @__PURE__ */ y(h, { className: "h-4 w-4" }), P("planmagnet.analytics.summary.avgVelocity", "Avg Velocity")]
276
+ }), /* @__PURE__ */ b("p", {
276
277
  className: "text-xl font-bold mt-1",
277
278
  children: [
278
279
  Z,
279
280
  " ",
280
- M("planmagnet.analytics.summary.pointsShort", "pts")
281
+ P("planmagnet.analytics.summary.pointsShort", "pts")
281
282
  ]
282
283
  })]
283
284
  }) }),
284
- /* @__PURE__ */ _(y, { children: /* @__PURE__ */ v(b, {
285
+ /* @__PURE__ */ y(x, { children: /* @__PURE__ */ b(S, {
285
286
  className: "pt-4",
286
- children: [/* @__PURE__ */ v("div", {
287
+ children: [/* @__PURE__ */ b("div", {
287
288
  className: "flex items-center gap-2 text-muted-foreground text-xs",
288
- children: [/* @__PURE__ */ _(ie, { className: "h-4 w-4" }), M("planmagnet.analytics.summary.atRisk", "At Risk")]
289
- }), /* @__PURE__ */ v("p", {
289
+ children: [/* @__PURE__ */ y(m, { className: "h-4 w-4" }), P("planmagnet.analytics.summary.atRisk", "At Risk")]
290
+ }), /* @__PURE__ */ b("p", {
290
291
  className: "text-xl font-bold mt-1",
291
292
  children: [
292
- Se,
293
+ we,
293
294
  " ",
294
- M("planmagnet.analytics.summary.milestones", "milestones")
295
+ P("planmagnet.analytics.summary.milestones", "milestones")
295
296
  ]
296
297
  })]
297
298
  }) })
298
299
  ]
299
300
  }),
300
- /* @__PURE__ */ v("div", {
301
+ /* @__PURE__ */ b("div", {
301
302
  className: "flex flex-col sm:flex-row gap-3 items-start sm:items-center",
302
- children: [/* @__PURE__ */ _("h2", {
303
+ children: [/* @__PURE__ */ y("h2", {
303
304
  className: "text-lg font-semibold",
304
- children: M("planmagnet.analytics.delivery.title", "Sprint Delivery Analytics")
305
- }), /* @__PURE__ */ v("div", {
305
+ children: P("planmagnet.analytics.delivery.title", "Sprint Delivery Analytics")
306
+ }), /* @__PURE__ */ b("div", {
306
307
  className: "flex gap-2 sm:ml-auto",
307
- children: [/* @__PURE__ */ v(C, {
308
- value: V,
308
+ children: [/* @__PURE__ */ b(T, {
309
+ value: H,
309
310
  onValueChange: (e) => {
310
- de(e), N("");
311
+ de(e), F("");
311
312
  },
312
- children: [/* @__PURE__ */ _(E, {
313
+ children: [/* @__PURE__ */ y(O, {
313
314
  className: "h-8 w-48",
314
- children: /* @__PURE__ */ _(D, { placeholder: M("planmagnet.analytics.delivery.projectPlaceholder", "Select project") })
315
- }), /* @__PURE__ */ _(w, { children: L.map((e) => /* @__PURE__ */ _(T, {
315
+ children: /* @__PURE__ */ y(k, { placeholder: P("planmagnet.analytics.delivery.projectPlaceholder", "Select project") })
316
+ }), /* @__PURE__ */ y(E, { children: z.map((e) => /* @__PURE__ */ y(D, {
316
317
  value: e.id,
317
318
  children: e.name
318
319
  }, e.id)) })]
319
- }), /* @__PURE__ */ v(C, {
320
- value: U,
321
- onValueChange: N,
322
- children: [/* @__PURE__ */ _(E, {
320
+ }), /* @__PURE__ */ b(T, {
321
+ value: W,
322
+ onValueChange: F,
323
+ children: [/* @__PURE__ */ y(O, {
323
324
  className: "h-8 w-48",
324
- children: /* @__PURE__ */ _(D, { placeholder: M("planmagnet.analytics.delivery.sprintPlaceholder", "Select sprint") })
325
- }), /* @__PURE__ */ _(w, { children: H.map((e) => /* @__PURE__ */ _(T, {
325
+ children: /* @__PURE__ */ y(k, { placeholder: P("planmagnet.analytics.delivery.sprintPlaceholder", "Select sprint") })
326
+ }), /* @__PURE__ */ y(E, { children: U.map((e) => /* @__PURE__ */ y(D, {
326
327
  value: e.id,
327
328
  children: e.name
328
329
  }, e.id)) })]
329
330
  })]
330
331
  })]
331
332
  }),
332
- /* @__PURE__ */ v("div", {
333
+ /* @__PURE__ */ b("div", {
333
334
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
334
- children: [/* @__PURE__ */ v(y, { children: [/* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
335
+ children: [/* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(C, { children: /* @__PURE__ */ b(w, {
335
336
  className: "flex items-center gap-2",
336
- children: [/* @__PURE__ */ _(f, { className: "h-4 w-4" }), M("planmagnet.analytics.burndown.title", "Sprint Burndown")]
337
- }) }), /* @__PURE__ */ _(b, { children: me ? /* @__PURE__ */ _("div", {
337
+ children: [/* @__PURE__ */ y(f, { className: "h-4 w-4" }), P("planmagnet.analytics.burndown.title", "Sprint Burndown")]
338
+ }) }), /* @__PURE__ */ y(S, { children: he ? /* @__PURE__ */ y("div", {
338
339
  className: "flex justify-center py-12",
339
- children: /* @__PURE__ */ _("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
340
- }) : J.length > 0 ? /* @__PURE__ */ _(r, {
340
+ children: /* @__PURE__ */ y("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
341
+ }) : J.length > 0 ? /* @__PURE__ */ y(r, {
341
342
  width: "100%",
342
343
  height: 220,
343
- children: /* @__PURE__ */ v(te, {
344
+ children: /* @__PURE__ */ b(ne, {
344
345
  data: J,
345
346
  children: [
346
- /* @__PURE__ */ _(a, {
347
+ /* @__PURE__ */ y(a, {
347
348
  strokeDasharray: "3 3",
348
349
  opacity: .2
349
350
  }),
350
- /* @__PURE__ */ _(c, {
351
+ /* @__PURE__ */ y(s, {
351
352
  dataKey: "day",
352
353
  tick: { fontSize: 11 }
353
354
  }),
354
- /* @__PURE__ */ _(l, {
355
+ /* @__PURE__ */ y(c, {
355
356
  tick: { fontSize: 11 },
356
357
  allowDecimals: !1
357
358
  }),
358
- /* @__PURE__ */ _(n, {}),
359
- /* @__PURE__ */ _(t, { wrapperStyle: { fontSize: 12 } }),
360
- /* @__PURE__ */ _(o, {
359
+ /* @__PURE__ */ y(n, {}),
360
+ /* @__PURE__ */ y(t, { wrapperStyle: { fontSize: 12 } }),
361
+ /* @__PURE__ */ y(o, {
361
362
  type: "monotone",
362
363
  dataKey: "remaining",
363
- name: M("planmagnet.analytics.burndown.remaining", "Remaining points"),
364
+ name: P("planmagnet.analytics.burndown.remaining", "Remaining points"),
364
365
  stroke: "#f59e0b",
365
366
  strokeWidth: 2,
366
367
  dot: { r: 2 }
367
368
  }),
368
- /* @__PURE__ */ _(o, {
369
+ /* @__PURE__ */ y(o, {
369
370
  type: "monotone",
370
371
  dataKey: "completed",
371
- name: M("planmagnet.analytics.burndown.completed", "Completed points"),
372
+ name: P("planmagnet.analytics.burndown.completed", "Completed points"),
372
373
  stroke: "#22c55e",
373
374
  strokeWidth: 2,
374
375
  dot: { r: 2 }
375
376
  })
376
377
  ]
377
378
  })
378
- }) : /* @__PURE__ */ _("p", {
379
+ }) : /* @__PURE__ */ y("p", {
379
380
  className: "text-sm text-muted-foreground py-8 text-center",
380
- children: M("planmagnet.analytics.burndown.empty", "No sprint selected, or the sprint has no work items yet")
381
- }) })] }), /* @__PURE__ */ v(y, { children: [/* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
381
+ children: P("planmagnet.analytics.burndown.empty", "No sprint selected, or the sprint has no work items yet")
382
+ }) })] }), /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(C, { children: /* @__PURE__ */ b(w, {
382
383
  className: "flex items-center gap-2",
383
384
  children: [
384
- /* @__PURE__ */ _(p, { className: "h-4 w-4" }),
385
- M("planmagnet.analytics.velocity.title", "Sprint Velocity"),
385
+ /* @__PURE__ */ y(h, { className: "h-4 w-4" }),
386
+ P("planmagnet.analytics.velocity.title", "Sprint Velocity"),
386
387
  " (",
387
388
  X.length,
388
389
  " ",
389
- M("planmagnet.analytics.velocity.sprints", "Sprints"),
390
+ P("planmagnet.analytics.velocity.sprints", "Sprints"),
390
391
  ")"
391
392
  ]
392
- }) }), /* @__PURE__ */ _(b, { children: ge ? /* @__PURE__ */ _("div", {
393
+ }) }), /* @__PURE__ */ y(S, { children: _e ? /* @__PURE__ */ y("div", {
393
394
  className: "flex justify-center py-12",
394
- children: /* @__PURE__ */ _("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
395
- }) : X.length > 0 ? /* @__PURE__ */ v(ae, { children: [/* @__PURE__ */ _(r, {
395
+ children: /* @__PURE__ */ y("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
396
+ }) : X.length > 0 ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(r, {
396
397
  width: "100%",
397
398
  height: 190,
398
- children: /* @__PURE__ */ v(ne, {
399
+ children: /* @__PURE__ */ b(re, {
399
400
  data: X,
400
401
  children: [
401
- /* @__PURE__ */ _(a, {
402
+ /* @__PURE__ */ y(a, {
402
403
  strokeDasharray: "3 3",
403
404
  opacity: .2
404
405
  }),
405
- /* @__PURE__ */ _(c, {
406
+ /* @__PURE__ */ y(s, {
406
407
  dataKey: "name",
407
408
  tick: { fontSize: 11 }
408
409
  }),
409
- /* @__PURE__ */ _(l, {
410
+ /* @__PURE__ */ y(c, {
410
411
  tick: { fontSize: 11 },
411
412
  allowDecimals: !1
412
413
  }),
413
- /* @__PURE__ */ _(n, {}),
414
- /* @__PURE__ */ _(t, { wrapperStyle: { fontSize: 12 } }),
415
- /* @__PURE__ */ _(i, {
414
+ /* @__PURE__ */ y(n, {}),
415
+ /* @__PURE__ */ y(t, { wrapperStyle: { fontSize: 12 } }),
416
+ /* @__PURE__ */ y(i, {
416
417
  dataKey: "planned",
417
- name: M("planmagnet.analytics.velocity.planned", "Planned"),
418
+ name: P("planmagnet.analytics.velocity.planned", "Planned"),
418
419
  fill: "#cbd5e1"
419
420
  }),
420
- /* @__PURE__ */ _(i, {
421
+ /* @__PURE__ */ y(i, {
421
422
  dataKey: "completed",
422
- name: M("planmagnet.analytics.velocity.completed", "Completed"),
423
+ name: P("planmagnet.analytics.velocity.completed", "Completed"),
423
424
  fill: "#6366f1"
424
425
  }),
425
- /* @__PURE__ */ _(ee, {
426
+ /* @__PURE__ */ y(ee, {
426
427
  y: Z,
427
428
  stroke: "#22c55e",
428
429
  strokeDasharray: "4 4",
429
430
  label: {
430
- value: M("planmagnet.analytics.velocity.avgLabel", "avg"),
431
+ value: P("planmagnet.analytics.velocity.avgLabel", "avg"),
431
432
  fontSize: 10,
432
433
  position: "right"
433
434
  }
434
435
  })
435
436
  ]
436
437
  })
437
- }), /* @__PURE__ */ _("p", {
438
+ }), /* @__PURE__ */ y("p", {
438
439
  className: "text-xs text-muted-foreground text-center mt-2",
439
- children: M("planmagnet.analytics.velocity.forecast", "Forecast for next sprint: {{points}} pts (trailing average)", { points: we })
440
- })] }) : /* @__PURE__ */ _("p", {
440
+ children: P("planmagnet.analytics.velocity.forecast", "Forecast for next sprint: {{points}} pts (trailing average)", { points: Ee })
441
+ })] }) : /* @__PURE__ */ y("p", {
441
442
  className: "text-sm text-muted-foreground py-8 text-center",
442
- children: M("planmagnet.analytics.velocity.empty", "No completed sprints yet for this project")
443
+ children: P("planmagnet.analytics.velocity.empty", "No completed sprints yet for this project")
443
444
  }) })] })]
444
445
  }),
445
- /* @__PURE__ */ v(y, { children: [/* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
446
+ /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(C, { children: /* @__PURE__ */ b(w, {
446
447
  className: "flex items-center gap-2",
447
- children: [/* @__PURE__ */ _(f, { className: "h-4 w-4" }), M("planmagnet.analytics.cfd.title", "Cumulative Flow Diagram")]
448
- }) }), /* @__PURE__ */ _(b, { children: ve ? /* @__PURE__ */ _("div", {
448
+ children: [/* @__PURE__ */ y(f, { className: "h-4 w-4" }), P("planmagnet.analytics.cfd.title", "Cumulative Flow Diagram")]
449
+ }) }), /* @__PURE__ */ y(S, { children: ye ? /* @__PURE__ */ y("div", {
449
450
  className: "flex justify-center py-12",
450
- children: /* @__PURE__ */ _("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
451
- }) : $.length > 0 ? /* @__PURE__ */ _(r, {
451
+ children: /* @__PURE__ */ y("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
452
+ }) : $.length > 0 ? /* @__PURE__ */ y(r, {
452
453
  width: "100%",
453
454
  height: 260,
454
- children: /* @__PURE__ */ v(u, {
455
+ children: /* @__PURE__ */ b(ie, {
455
456
  data: $,
456
457
  children: [
457
- /* @__PURE__ */ _(a, {
458
+ /* @__PURE__ */ y(a, {
458
459
  strokeDasharray: "3 3",
459
460
  opacity: .2
460
461
  }),
461
- /* @__PURE__ */ _(c, {
462
+ /* @__PURE__ */ y(s, {
462
463
  dataKey: "day",
463
464
  tick: { fontSize: 11 }
464
465
  }),
465
- /* @__PURE__ */ _(l, {
466
+ /* @__PURE__ */ y(c, {
466
467
  tick: { fontSize: 11 },
467
468
  allowDecimals: !1
468
469
  }),
469
- /* @__PURE__ */ _(n, {}),
470
- /* @__PURE__ */ _(t, { wrapperStyle: { fontSize: 12 } }),
471
- Te.map((e) => /* @__PURE__ */ _(s, {
470
+ /* @__PURE__ */ y(n, {}),
471
+ /* @__PURE__ */ y(t, { wrapperStyle: { fontSize: 12 } }),
472
+ De.map((e) => /* @__PURE__ */ y(te, {
472
473
  type: "monotone",
473
474
  dataKey: e,
474
475
  name: e.toLowerCase().replace("_", " "),
475
476
  stackId: "cfd",
476
- stroke: A[e] ?? "#a3a3a3",
477
- fill: A[e] ?? "#a3a3a3",
477
+ stroke: M[e] ?? "#a3a3a3",
478
+ fill: M[e] ?? "#a3a3a3",
478
479
  fillOpacity: .7
479
480
  }, e))
480
481
  ]
481
482
  })
482
- }) : /* @__PURE__ */ _("p", {
483
+ }) : /* @__PURE__ */ y("p", {
483
484
  className: "text-sm text-muted-foreground py-8 text-center",
484
- children: M("planmagnet.analytics.cfd.empty", "No work items found for this project")
485
+ children: P("planmagnet.analytics.cfd.empty", "No work items found for this project")
485
486
  }) })] }),
486
- /* @__PURE__ */ v(y, { children: [/* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, { children: M("planmagnet.analytics.projectHealth.title", "Project Health") }) }), /* @__PURE__ */ _(b, { children: /* @__PURE__ */ v("div", {
487
+ /* @__PURE__ */ b("div", {
488
+ className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
489
+ children: [/* @__PURE__ */ y(u, {
490
+ workspaceId: g,
491
+ projectId: H
492
+ }), /* @__PURE__ */ y(l, { workspaceId: g })]
493
+ }),
494
+ /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(C, { children: /* @__PURE__ */ y(w, { children: P("planmagnet.analytics.projectHealth.title", "Project Health") }) }), /* @__PURE__ */ y(S, { children: /* @__PURE__ */ b("div", {
487
495
  className: "space-y-3",
488
- children: [L.filter((e) => e.status === "ACTIVE").map((e) => {
489
- let t = R.filter((e) => e.assigneeId != null), n = t.filter((e) => e.status === "DONE").length, r = t.length > 0 ? Math.round(n / t.length * 100) : 0, i = e.endDate && new Date(e.endDate) < /* @__PURE__ */ new Date() && r < 100 ? "at_risk" : r >= 75 ? "on_track" : "in_progress";
490
- return /* @__PURE__ */ v("div", {
496
+ children: [z.filter((e) => e.status === "ACTIVE").map((e) => {
497
+ let t = B.filter((e) => e.assigneeId != null), n = t.filter((e) => e.status === "DONE").length, r = t.length > 0 ? Math.round(n / t.length * 100) : 0, i = e.endDate && new Date(e.endDate) < /* @__PURE__ */ new Date() && r < 100 ? "at_risk" : r >= 75 ? "on_track" : "in_progress";
498
+ return /* @__PURE__ */ b("div", {
491
499
  className: "flex items-center gap-4",
492
500
  children: [
493
- /* @__PURE__ */ _("span", {
501
+ /* @__PURE__ */ y("span", {
494
502
  className: "text-sm font-medium w-40 truncate",
495
503
  children: e.name
496
504
  }),
497
- /* @__PURE__ */ _("div", {
505
+ /* @__PURE__ */ y("div", {
498
506
  className: "flex-1",
499
- children: /* @__PURE__ */ _("div", {
507
+ children: /* @__PURE__ */ y("div", {
500
508
  className: "w-full h-2 rounded-full bg-muted overflow-hidden",
501
- children: /* @__PURE__ */ _("div", {
509
+ children: /* @__PURE__ */ y("div", {
502
510
  className: `h-full rounded-full ${i === "at_risk" ? "bg-orange-400" : i === "on_track" ? "bg-green-400" : "bg-blue-400"}`,
503
511
  style: { width: `${r}%` }
504
512
  })
505
513
  })
506
514
  }),
507
- /* @__PURE__ */ v("span", {
515
+ /* @__PURE__ */ b("span", {
508
516
  className: "text-sm w-12 text-right",
509
517
  children: [r, "%"]
510
518
  }),
511
- /* @__PURE__ */ _(se, {
519
+ /* @__PURE__ */ y(se, {
512
520
  variant: "outline",
513
521
  className: "capitalize text-xs w-20 justify-center",
514
522
  children: i.replace("_", " ")
515
523
  })
516
524
  ]
517
525
  }, e.id);
518
- }), L.filter((e) => e.status === "ACTIVE").length === 0 && /* @__PURE__ */ _("p", {
526
+ }), z.filter((e) => e.status === "ACTIVE").length === 0 && /* @__PURE__ */ y("p", {
519
527
  className: "text-sm text-muted-foreground text-center py-4",
520
- children: M("planmagnet.analytics.projectHealth.empty", "No active projects found")
528
+ children: P("planmagnet.analytics.projectHealth.empty", "No active projects found")
521
529
  })]
522
530
  }) })] })
523
531
  ]
524
532
  });
525
533
  }
526
534
  //#endregion
527
- export { M as AnalyticsAnalyticsPagePage };
535
+ export { P as AnalyticsAnalyticsPagePage };
528
536
 
529
537
  //# sourceMappingURL=AnalyticsAnalyticsPagePage.js.map