@burdenoff/microfe-planmagnet 2026.1001.6 → 2026.1001.7

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 (81) hide show
  1. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoutes.js +10 -6
  3. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  4. package/dist/planmagnet/automation/automationRuleTypes.d.ts +31 -19
  5. package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +1 -1
  6. package/dist/planmagnet/automation/automationRuleTypes.js +4 -8
  7. package/dist/planmagnet/automation/automationRuleTypes.js.map +1 -1
  8. package/dist/planmagnet/controls/FeatureControls.d.ts +18 -1
  9. package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -1
  10. package/dist/planmagnet/controls/FeatureControls.js +259 -202
  11. package/dist/planmagnet/controls/FeatureControls.js.map +1 -1
  12. package/dist/planmagnet/controls/FeedbackControls.d.ts +70 -0
  13. package/dist/planmagnet/controls/FeedbackControls.d.ts.map +1 -0
  14. package/dist/planmagnet/controls/FeedbackControls.js +153 -0
  15. package/dist/planmagnet/controls/FeedbackControls.js.map +1 -0
  16. package/dist/planmagnet/controls/SyncControls.d.ts.map +1 -1
  17. package/dist/planmagnet/controls/SyncControls.js +1 -0
  18. package/dist/planmagnet/controls/SyncControls.js.map +1 -1
  19. package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts +47 -0
  20. package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts.map +1 -0
  21. package/dist/planmagnet/controls/WebhookSubscriptionControls.js +542 -0
  22. package/dist/planmagnet/controls/WebhookSubscriptionControls.js.map +1 -0
  23. package/dist/planmagnet/dashboards/DashboardUI.js +7 -7
  24. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js +4 -4
  25. package/dist/planmagnet/forecast/DeliveryForecastCard.js +8 -8
  26. package/dist/planmagnet/forecast/ProjectOutlookCard.js +10 -10
  27. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +9 -9
  28. package/dist/planmagnet/forecast/ResourceForecastCard.js +6 -6
  29. package/dist/planmagnet/integrations/syncTypes.d.ts +2 -1
  30. package/dist/planmagnet/integrations/syncTypes.d.ts.map +1 -1
  31. package/dist/planmagnet/integrations/syncTypes.js +19 -9
  32. package/dist/planmagnet/integrations/syncTypes.js.map +1 -1
  33. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +8 -8
  34. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +23 -23
  35. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
  36. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +340 -248
  37. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  38. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.d.ts.map +1 -1
  39. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js +172 -167
  40. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js.map +1 -1
  41. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.d.ts.map +1 -1
  42. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js +92 -83
  43. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js.map +1 -1
  44. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts +2 -0
  45. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts.map +1 -0
  46. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js +175 -0
  47. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js.map +1 -0
  48. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
  49. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +151 -126
  50. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
  51. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
  52. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +136 -129
  53. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
  54. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +1 -1
  55. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +149 -119
  56. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
  57. package/dist/planmagnet/pages/ProductsProductsPagePage.js +13 -13
  58. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +9 -9
  59. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +8 -8
  60. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +12 -12
  61. package/dist/planmagnet/pages/ReportsReportsPagePage.js +23 -23
  62. package/dist/planmagnet/pages/TasksMyDashboardPagePage.js +18 -18
  63. package/dist/planmagnet/pages/TasksMyWorkPagePage.js +10 -10
  64. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +5 -5
  65. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +8 -8
  66. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js +6 -6
  67. package/dist/planmagnet/pages/analytics/MetricsCard.js +6 -6
  68. package/dist/planmagnet/pages/analytics/QualityMetricsCard.js +6 -6
  69. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +8 -8
  70. package/dist/planmagnet/pages/analytics/StatusFlowCard.js +7 -7
  71. package/dist/planmagnet/pages/analytics/ThroughputCard.js +7 -7
  72. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js +7 -7
  73. package/dist/planmagnet/people/People.d.ts +14 -0
  74. package/dist/planmagnet/people/People.d.ts.map +1 -1
  75. package/dist/planmagnet/people/People.js +36 -22
  76. package/dist/planmagnet/people/People.js.map +1 -1
  77. package/dist/planmagnet/webhooks/webhookTypes.d.ts +54 -0
  78. package/dist/planmagnet/webhooks/webhookTypes.d.ts.map +1 -0
  79. package/dist/planmagnet/webhooks/webhookTypes.js +17 -0
  80. package/dist/planmagnet/webhooks/webhookTypes.js.map +1 -0
  81. package/package.json +1 -1
@@ -17,8 +17,8 @@ import { ArrowRight as y, Clock as b, Flag as x, LayoutDashboard as S, TrendingU
17
17
  import { gql as w } from "@apollo/client";
18
18
  import { useQuery as T } from "@apollo/client/react";
19
19
  import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
20
- import { useI18n as k } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { Badge as A, Button as j, Card as M, CardContent as N, CardHeader as P, CardTitle as F } from "@burdenoff/fe-libs/ui";
20
+ import { Badge as k, Button as A, Card as j, CardContent as M, CardHeader as N, CardTitle as P } from "@burdenoff/fe-libs/ui";
21
+ import { useI18n as F } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
22
22
  //#region src/planmagnet/pages/TasksMyDashboardPagePage.tsx
23
23
  var I = w`
24
24
  query GetMyTimeAllocation($workspaceId: ID!, $startDate: DateTime, $endDate: DateTime) {
@@ -78,7 +78,7 @@ function H({ progress: e }) {
78
78
  });
79
79
  }
80
80
  function U({ workspaceId: e, range: t, onRangeChange: n }) {
81
- let { t: r } = k(), { startDate: i, endDate: a } = _(t), { data: o, loading: s, error: c } = T(I, {
81
+ let { t: r } = F(), { startDate: i, endDate: a } = _(t), { data: o, loading: s, error: c } = T(I, {
82
82
  variables: {
83
83
  workspaceId: e,
84
84
  startDate: i,
@@ -86,11 +86,11 @@ function U({ workspaceId: e, range: t, onRangeChange: n }) {
86
86
  },
87
87
  skip: !e
88
88
  }), l = o?.planmagnetMyTimeAllocation, u = h(t);
89
- return /* @__PURE__ */ O(M, {
89
+ return /* @__PURE__ */ O(j, {
90
90
  "data-testid": "my-time-allocation",
91
- children: [/* @__PURE__ */ D(P, { children: /* @__PURE__ */ O("div", {
91
+ children: [/* @__PURE__ */ D(N, { children: /* @__PURE__ */ O("div", {
92
92
  className: "flex flex-wrap items-center justify-between gap-2",
93
- children: [/* @__PURE__ */ O(F, {
93
+ children: [/* @__PURE__ */ O(P, {
94
94
  className: "flex items-center gap-2",
95
95
  children: [/* @__PURE__ */ D(b, { className: "h-4 w-4" }), r("planmagnet.myDashboard.timeAllocation.title", "My time allocation")]
96
96
  }), /* @__PURE__ */ D("div", {
@@ -105,7 +105,7 @@ function U({ workspaceId: e, range: t, onRangeChange: n }) {
105
105
  children: r("planmagnet.myDashboard.timeAllocation.last", "Last {{days}}d", { days: e })
106
106
  }, e))
107
107
  })]
108
- }) }), /* @__PURE__ */ D(N, { children: s ? /* @__PURE__ */ D("p", {
108
+ }) }), /* @__PURE__ */ D(M, { children: s ? /* @__PURE__ */ D("p", {
109
109
  className: "text-sm text-muted-foreground",
110
110
  children: r("planmagnet.myDashboard.loading", "Loading…")
111
111
  }) : c ? /* @__PURE__ */ D("p", {
@@ -155,7 +155,7 @@ function U({ workspaceId: e, range: t, onRangeChange: n }) {
155
155
  });
156
156
  }
157
157
  function W({ workspaceId: e }) {
158
- let { t } = k(), { data: n, loading: r, error: f } = T(L, {
158
+ let { t } = F(), { data: n, loading: r, error: f } = T(L, {
159
159
  variables: {
160
160
  workspaceId: e,
161
161
  weeks: z
@@ -166,15 +166,15 @@ function W({ workspaceId: e }) {
166
166
  items: e.itemsCompleted,
167
167
  points: e.pointsCompleted
168
168
  })), h = p.reduce((e, t) => e + t.itemsCompleted, 0), g = p.reduce((e, t) => e + t.pointsCompleted, 0);
169
- return /* @__PURE__ */ O(M, {
169
+ return /* @__PURE__ */ O(j, {
170
170
  "data-testid": "my-delivery-trend",
171
- children: [/* @__PURE__ */ O(P, { children: [/* @__PURE__ */ O(F, {
171
+ children: [/* @__PURE__ */ O(N, { children: [/* @__PURE__ */ O(P, {
172
172
  className: "flex items-center gap-2",
173
173
  children: [/* @__PURE__ */ D(C, { className: "h-4 w-4" }), t("planmagnet.myDashboard.deliveryTrend.title", "My delivery trend")]
174
174
  }), /* @__PURE__ */ D("p", {
175
175
  className: "text-xs text-muted-foreground",
176
176
  children: t("planmagnet.myDashboard.deliveryTrend.subtitle", "Items and points assigned to you that reached Done, last {{weeks}} weeks.", { weeks: z })
177
- })] }), /* @__PURE__ */ D(N, { children: r ? /* @__PURE__ */ D("p", {
177
+ })] }), /* @__PURE__ */ D(M, { children: r ? /* @__PURE__ */ D("p", {
178
178
  className: "text-sm text-muted-foreground",
179
179
  children: t("planmagnet.myDashboard.loading", "Loading…")
180
180
  }) : f ? /* @__PURE__ */ D("p", {
@@ -226,22 +226,22 @@ function W({ workspaceId: e }) {
226
226
  });
227
227
  }
228
228
  function G({ workspaceId: e, ownerId: t }) {
229
- let { t: n } = k(), i = r(), { data: a, loading: o, error: s } = T(R, {
229
+ let { t: n } = F(), i = r(), { data: a, loading: o, error: s } = T(R, {
230
230
  variables: {
231
231
  workspaceId: e,
232
232
  filter: t ? { ownerId: t } : void 0
233
233
  },
234
234
  skip: !e || !t
235
235
  }), c = a?.planmagnetObjectives.items ?? [];
236
- return /* @__PURE__ */ O(M, {
236
+ return /* @__PURE__ */ O(j, {
237
237
  "data-testid": "my-goals",
238
- children: [/* @__PURE__ */ O(P, { children: [/* @__PURE__ */ O(F, {
238
+ children: [/* @__PURE__ */ O(N, { children: [/* @__PURE__ */ O(P, {
239
239
  className: "flex items-center gap-2",
240
240
  children: [/* @__PURE__ */ D(x, { className: "h-4 w-4" }), n("planmagnet.myDashboard.goals.title", "My goals")]
241
241
  }), /* @__PURE__ */ D("p", {
242
242
  className: "text-xs text-muted-foreground",
243
243
  children: n("planmagnet.myDashboard.goals.subtitle", "Objectives you own, with their progress.")
244
- })] }), /* @__PURE__ */ D(N, { children: t ? o ? /* @__PURE__ */ D("p", {
244
+ })] }), /* @__PURE__ */ D(M, { children: t ? o ? /* @__PURE__ */ D("p", {
245
245
  className: "text-sm text-muted-foreground",
246
246
  children: n("planmagnet.myDashboard.loading", "Loading…")
247
247
  }) : s ? /* @__PURE__ */ D("p", {
@@ -262,7 +262,7 @@ function G({ workspaceId: e, ownerId: t }) {
262
262
  children: [/* @__PURE__ */ D("span", {
263
263
  className: "text-sm font-medium truncate",
264
264
  children: e.title
265
- }), /* @__PURE__ */ D(A, {
265
+ }), /* @__PURE__ */ D(k, {
266
266
  variant: "outline",
267
267
  className: "text-xs capitalize shrink-0",
268
268
  children: e.status.toLowerCase()
@@ -288,7 +288,7 @@ function G({ workspaceId: e, ownerId: t }) {
288
288
  });
289
289
  }
290
290
  function K() {
291
- let { workspaceId: e, currentUser: t } = n(), i = r(), { t: a } = k(), [o, s] = v(() => g("30"));
291
+ let { workspaceId: e, currentUser: t } = n(), i = r(), { t: a } = F(), [o, s] = v(() => g("30"));
292
292
  return /* @__PURE__ */ O("div", {
293
293
  className: "space-y-6 p-6",
294
294
  "data-testid": "my-dashboard-page",
@@ -301,7 +301,7 @@ function K() {
301
301
  }), /* @__PURE__ */ D("p", {
302
302
  className: "text-sm text-muted-foreground",
303
303
  children: a("planmagnet.myDashboard.subtitle", "Your own time, delivery, and goals across every project.")
304
- })] }), /* @__PURE__ */ O(j, {
304
+ })] }), /* @__PURE__ */ O(A, {
305
305
  variant: "outline",
306
306
  size: "sm",
307
307
  onClick: () => i("/tasks/my-work-page"),
@@ -6,8 +6,8 @@ import { CalendarClock as u, ListChecks as d } from "lucide-react";
6
6
  import { gql as f } from "@apollo/client";
7
7
  import { useQuery as p } from "@apollo/client/react";
8
8
  import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
- import { useI18n as g } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
- import { Badge as _, Card as v, CardContent as y, Switch as b } from "@burdenoff/fe-libs/ui";
9
+ import { Badge as g, Card as _, CardContent as v, Switch as y } from "@burdenoff/fe-libs/ui";
10
+ import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
11
  //#region src/planmagnet/pages/TasksMyWorkPagePage.tsx
12
12
  var x = f`
13
13
  query GetMyWorkItems(
@@ -66,7 +66,7 @@ function T(e, t) {
66
66
  }
67
67
  }
68
68
  function E() {
69
- let { workspaceId: f } = e(), E = t(), { t: D } = g(), [O, k] = l(!1), [A, j] = l(!1), { data: M, loading: N, error: P, fetchMore: F } = p(x, {
69
+ let { workspaceId: f } = e(), E = t(), { t: D } = b(), [O, k] = l(!1), [A, j] = l(!1), { data: M, loading: N, error: P, fetchMore: F } = p(x, {
70
70
  variables: {
71
71
  workspaceId: f,
72
72
  filter: { includeClosed: O },
@@ -122,14 +122,14 @@ function E() {
122
122
  children: D("planmagnet.myWork.subtitle", "{{count}} item(s) assigned to you across every project", { count: R })
123
123
  })] }), /* @__PURE__ */ h("label", {
124
124
  className: "flex items-center gap-2 text-sm text-muted-foreground",
125
- children: [/* @__PURE__ */ m(b, {
125
+ children: [/* @__PURE__ */ m(y, {
126
126
  checked: O,
127
127
  onCheckedChange: k,
128
128
  "aria-label": D("planmagnet.myWork.includeClosed", "Show completed"),
129
129
  "data-testid": "my-work-include-closed"
130
130
  }), D("planmagnet.myWork.includeClosed", "Show completed")]
131
131
  })]
132
- }), L.length === 0 ? /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
132
+ }), L.length === 0 ? /* @__PURE__ */ m(_, { children: /* @__PURE__ */ h(v, {
133
133
  className: "flex flex-col items-center gap-2 py-12 text-center",
134
134
  children: [
135
135
  /* @__PURE__ */ m(u, { className: "h-8 w-8 text-muted-foreground" }),
@@ -149,7 +149,7 @@ function E() {
149
149
  "data-testid": `my-work-group-${e}`,
150
150
  children: [/* @__PURE__ */ h("div", {
151
151
  className: "flex items-center gap-2",
152
- children: [/* @__PURE__ */ m(_, {
152
+ children: [/* @__PURE__ */ m(g, {
153
153
  variant: w[e],
154
154
  children: T(D, e)
155
155
  }), /* @__PURE__ */ h("span", {
@@ -162,9 +162,9 @@ function E() {
162
162
  })]
163
163
  }), /* @__PURE__ */ m("div", {
164
164
  className: "space-y-2",
165
- children: t.map((e) => /* @__PURE__ */ m(v, {
165
+ children: t.map((e) => /* @__PURE__ */ m(_, {
166
166
  ...s(() => E(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`), e.title),
167
- children: /* @__PURE__ */ h(y, {
167
+ children: /* @__PURE__ */ h(v, {
168
168
  className: "flex flex-wrap items-center gap-3 p-3",
169
169
  children: [/* @__PURE__ */ h("div", {
170
170
  className: "min-w-[12rem] flex-1 space-y-1",
@@ -175,11 +175,11 @@ function E() {
175
175
  className: "flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground",
176
176
  children: [
177
177
  /* @__PURE__ */ m("span", { children: e.key }),
178
- e.project && /* @__PURE__ */ m(_, {
178
+ e.project && /* @__PURE__ */ m(g, {
179
179
  variant: "outline",
180
180
  children: e.project.name
181
181
  }),
182
- e.sprint && /* @__PURE__ */ m(_, {
182
+ e.sprint && /* @__PURE__ */ m(g, {
183
183
  variant: "secondary",
184
184
  children: e.sprint.name
185
185
  }),
@@ -8,8 +8,8 @@ import { useState as u } from "react";
8
8
  import { gql as d } from "@apollo/client";
9
9
  import { useQuery as f } from "@apollo/client/react";
10
10
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
11
- import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
- import { Input as g } from "@burdenoff/fe-libs/ui";
11
+ import { Input as h } from "@burdenoff/fe-libs/ui";
12
+ import { useI18n as g } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
13
  //#region src/planmagnet/pages/TasksTimeEntriesPagePage.tsx
14
14
  var _ = d`
15
15
  query TimeEntriesList(
@@ -39,7 +39,7 @@ var _ = d`
39
39
  }
40
40
  `, v = ["ALL", ...a];
41
41
  function y() {
42
- let { workspaceId: a, currentUser: d } = e(), y = t(), { t: b } = h(), [x, S] = u("mine"), [C, w] = u("ALL"), [T, E] = u(""), [D, O] = u(""), k = {
42
+ let { workspaceId: a, currentUser: d } = e(), y = t(), { t: b } = g(), [x, S] = u("mine"), [C, w] = u("ALL"), [T, E] = u(""), [D, O] = u(""), k = {
43
43
  ...x === "mine" && d?.id ? { userId: d.id } : {},
44
44
  ...C === "ALL" ? {} : { status: C },
45
45
  ...T ? { dateFrom: T } : {},
@@ -90,7 +90,7 @@ function y() {
90
90
  className: "text-xs text-muted-foreground",
91
91
  children: b("planmagnet.timeEntries.from", "From")
92
92
  }),
93
- /* @__PURE__ */ p(g, {
93
+ /* @__PURE__ */ p(h, {
94
94
  id: "time-entries-from",
95
95
  type: "date",
96
96
  className: "h-8 w-36",
@@ -102,7 +102,7 @@ function y() {
102
102
  className: "text-xs text-muted-foreground",
103
103
  children: b("planmagnet.timeEntries.to", "To")
104
104
  }),
105
- /* @__PURE__ */ p(g, {
105
+ /* @__PURE__ */ p(h, {
106
106
  id: "time-entries-to",
107
107
  type: "date",
108
108
  className: "h-8 w-36",
@@ -3,8 +3,8 @@ import { Timer as i, Wallet as a } from "lucide-react";
3
3
  import { gql as o } from "@apollo/client";
4
4
  import { useQuery as s } from "@apollo/client/react";
5
5
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
- import { Card as d, CardContent as f, CardHeader as p, CardTitle as m } from "@burdenoff/fe-libs/ui";
6
+ import { Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
7
+ import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
8
  //#region src/planmagnet/pages/analytics/DeliveryHealthCards.tsx
9
9
  var h = o`
10
10
  query GetProjectCycleTime(
@@ -79,7 +79,7 @@ function v({ label: e, value: t, hint: n }) {
79
79
  });
80
80
  }
81
81
  function y({ workspaceId: e, projectId: t, startDate: n, endDate: r }) {
82
- let { t: a } = u(), { data: o, loading: g, error: y } = s(h, {
82
+ let { t: a } = m(), { data: o, loading: g, error: y } = s(h, {
83
83
  variables: {
84
84
  workspaceId: e,
85
85
  projectId: t,
@@ -88,13 +88,13 @@ function y({ workspaceId: e, projectId: t, startDate: n, endDate: r }) {
88
88
  },
89
89
  skip: !e || !t
90
90
  }), b = o?.planmagnetCycleTime, x = [...b?.items ?? []].sort((e, t) => t.cycleTimeHours - e.cycleTimeHours).slice(0, 5);
91
- return /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ l(p, { children: [/* @__PURE__ */ l(m, {
91
+ return /* @__PURE__ */ l(u, { children: [/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(p, {
92
92
  className: "flex items-center gap-2",
93
93
  children: [/* @__PURE__ */ c(i, { className: "h-4 w-4" }), a("planmagnet.analytics.cycleTime.title", "Cycle time")]
94
94
  }), /* @__PURE__ */ c("p", {
95
95
  className: "text-xs text-muted-foreground",
96
96
  children: a("planmagnet.analytics.cycleTime.subtitle", "From first moving to In Progress (or creation) to Done, for the selected project.")
97
- })] }), /* @__PURE__ */ c(f, { children: t ? g ? /* @__PURE__ */ c("p", {
97
+ })] }), /* @__PURE__ */ c(d, { children: t ? g ? /* @__PURE__ */ c("p", {
98
98
  className: "text-sm text-muted-foreground",
99
99
  children: a("planmagnet.analytics.loading", "Loading…")
100
100
  }) : y ? /* @__PURE__ */ l("p", {
@@ -171,7 +171,7 @@ function y({ workspaceId: e, projectId: t, startDate: n, endDate: r }) {
171
171
  }) })] });
172
172
  }
173
173
  function b({ workspaceId: i, projectId: o }) {
174
- let { t: h } = u(), { data: _, loading: v, error: y } = s(g, {
174
+ let { t: h } = m(), { data: _, loading: v, error: y } = s(g, {
175
175
  variables: {
176
176
  workspaceId: i,
177
177
  filter: o ? { projectId: o } : void 0
@@ -183,7 +183,7 @@ function b({ workspaceId: i, projectId: o }) {
183
183
  "near-limit": h("planmagnet.analytics.budget.nearLimit", "Near limit"),
184
184
  "over-budget": h("planmagnet.analytics.budget.over", "Over budget")
185
185
  };
186
- return /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ l(p, { children: [/* @__PURE__ */ l(m, {
186
+ return /* @__PURE__ */ l(u, { children: [/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(p, {
187
187
  className: "flex items-center gap-2",
188
188
  children: [/* @__PURE__ */ c(a, { className: "h-4 w-4" }), h("planmagnet.analytics.budget.title", "Budget performance")]
189
189
  }), /* @__PURE__ */ c("p", {
@@ -192,7 +192,7 @@ function b({ workspaceId: i, projectId: o }) {
192
192
  shown: b.length,
193
193
  total: x
194
194
  }) : o ? h("planmagnet.analytics.budget.subtitleProject", "Spent against plan, per budget, for the selected project.") : h("planmagnet.analytics.budget.subtitle", "Spent against plan, per budget, across the workspace.")
195
- })] }), /* @__PURE__ */ c(f, { children: v ? /* @__PURE__ */ c("p", {
195
+ })] }), /* @__PURE__ */ c(d, { children: v ? /* @__PURE__ */ c("p", {
196
196
  className: "text-sm text-muted-foreground",
197
197
  children: h("planmagnet.analytics.loading", "Loading…")
198
198
  }) : y ? /* @__PURE__ */ l("p", {
@@ -3,8 +3,8 @@ import { Info as t, Target as n } from "lucide-react";
3
3
  import { gql as r } from "@apollo/client";
4
4
  import { useQuery as i } from "@apollo/client/react";
5
5
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
- import { Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
6
+ import { Card as s, CardContent as c, CardHeader as l, CardTitle as u } from "@burdenoff/fe-libs/ui";
7
+ import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
8
  //#region src/planmagnet/pages/analytics/DeliveryKpisCard.tsx
9
9
  var f = r`
10
10
  query GetAnalyticsDeliveryKpis(
@@ -71,7 +71,7 @@ function p({ label: e, onTime: t, total: n, withoutPlan: r, rate: i, noPlanNoun:
71
71
  });
72
72
  }
73
73
  function m({ workspaceId: r, projectId: m, startDate: h, endDate: g }) {
74
- let { t: _ } = s(), { data: v, loading: y, error: b } = i(f, {
74
+ let { t: _ } = d(), { data: v, loading: y, error: b } = i(f, {
75
75
  variables: {
76
76
  workspaceId: r,
77
77
  projectId: m,
@@ -80,15 +80,15 @@ function m({ workspaceId: r, projectId: m, startDate: h, endDate: g }) {
80
80
  },
81
81
  skip: !r
82
82
  }), x = v?.planmagnetDeliveryKpis, S = x?.scopeAdherence, C = S?.adherenceRate == null ? null : Math.round(S.adherenceRate * 100);
83
- return /* @__PURE__ */ o(c, {
83
+ return /* @__PURE__ */ o(s, {
84
84
  "data-testid": "delivery-card",
85
- children: [/* @__PURE__ */ o(u, { children: [/* @__PURE__ */ o(d, {
85
+ children: [/* @__PURE__ */ o(l, { children: [/* @__PURE__ */ o(u, {
86
86
  className: "flex items-center gap-2",
87
87
  children: [/* @__PURE__ */ a(n, { className: "h-4 w-4" }), _("planmagnet.analytics.delivery.kpiTitle", "Delivery")]
88
88
  }), /* @__PURE__ */ a("p", {
89
89
  className: "text-xs text-muted-foreground",
90
90
  children: _("planmagnet.analytics.delivery.kpiSubtitle", "On-time delivery and scope adherence, for sprints/releases/milestones completed in the selected range.")
91
- })] }), /* @__PURE__ */ a(l, { children: y ? /* @__PURE__ */ a("p", {
91
+ })] }), /* @__PURE__ */ a(c, { children: y ? /* @__PURE__ */ a("p", {
92
92
  className: "text-sm text-muted-foreground",
93
93
  children: _("planmagnet.analytics.loading", "Loading…")
94
94
  }) : b ? /* @__PURE__ */ o("p", {
@@ -3,8 +3,8 @@ import { Activity as n, Info as r } from "lucide-react";
3
3
  import { gql as i } from "@apollo/client";
4
4
  import { useQuery as a } from "@apollo/client/react";
5
5
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
- import { Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "@burdenoff/fe-libs/ui";
6
+ import { Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
7
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
8
  //#region src/planmagnet/pages/analytics/MetricsCard.tsx
9
9
  var p = i`
10
10
  query GetWorkspaceMetrics($workspaceId: ID!, $timeRange: PlanmagnetTimeRangeInput) {
@@ -69,7 +69,7 @@ function v({ metric: t }) {
69
69
  });
70
70
  }
71
71
  function y({ workspaceId: e, projectId: t, startDate: i, endDate: h }) {
72
- let { t: g } = c(), _ = {
72
+ let { t: g } = f(), _ = {
73
73
  startDate: i,
74
74
  endDate: h
75
75
  }, { data: y, loading: b, error: x } = a(p, {
@@ -86,15 +86,15 @@ function y({ workspaceId: e, projectId: t, startDate: i, endDate: h }) {
86
86
  },
87
87
  skip: !e || !t
88
88
  }), T = y?.planmagnetMetrics ?? [], E = S?.planmagnetAnalytics.projectMetrics ?? [], D = S?.planmagnetAnalytics.teamMetrics ?? [], O = [...E, ...D];
89
- return /* @__PURE__ */ s(l, {
89
+ return /* @__PURE__ */ s(c, {
90
90
  "data-testid": "metrics-card",
91
- children: [/* @__PURE__ */ s(d, { children: [/* @__PURE__ */ s(f, {
91
+ children: [/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(d, {
92
92
  className: "flex items-center gap-2",
93
93
  children: [/* @__PURE__ */ o(n, { className: "h-4 w-4" }), g("planmagnet.analytics.metrics.title", "Metrics")]
94
94
  }), /* @__PURE__ */ o("p", {
95
95
  className: "text-xs text-muted-foreground",
96
96
  children: g("planmagnet.analytics.metrics.subtitle", "Workspace-wide KPIs, plus the selected project's own metrics, composed from the queries above into one generic shape.")
97
- })] }), /* @__PURE__ */ s(u, {
97
+ })] }), /* @__PURE__ */ s(l, {
98
98
  className: "space-y-4",
99
99
  children: [
100
100
  /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h3", {
@@ -12,8 +12,8 @@ import { Bug as d } from "lucide-react";
12
12
  import { gql as f } from "@apollo/client";
13
13
  import { useQuery as p } from "@apollo/client/react";
14
14
  import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
15
- import { useI18n as _ } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
16
- import { Card as v, CardContent as y, CardHeader as b, CardTitle as x } from "@burdenoff/fe-libs/ui";
15
+ import { Card as _, CardContent as v, CardHeader as y, CardTitle as b } from "@burdenoff/fe-libs/ui";
16
+ import { useI18n as x } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
17
17
  //#region src/planmagnet/pages/analytics/QualityMetricsCard.tsx
18
18
  var S = f`
19
19
  query GetAnalyticsQualityMetrics(
@@ -56,7 +56,7 @@ var S = f`
56
56
  NONE: "var(--color-chart-axis)"
57
57
  };
58
58
  function T({ workspaceId: f, projectId: T, startDate: E, endDate: D }) {
59
- let { t: O } = _(), { data: k, loading: A, error: j } = p(S, {
59
+ let { t: O } = x(), { data: k, loading: A, error: j } = p(S, {
60
60
  variables: {
61
61
  workspaceId: f,
62
62
  projectId: T,
@@ -69,15 +69,15 @@ function T({ workspaceId: f, projectId: T, startDate: E, endDate: D }) {
69
69
  count: N.get(e) ?? 0,
70
70
  fill: w[e]
71
71
  }));
72
- return /* @__PURE__ */ g(v, {
72
+ return /* @__PURE__ */ g(_, {
73
73
  "data-testid": "quality-card",
74
- children: [/* @__PURE__ */ g(b, { children: [/* @__PURE__ */ g(x, {
74
+ children: [/* @__PURE__ */ g(y, { children: [/* @__PURE__ */ g(b, {
75
75
  className: "flex items-center gap-2",
76
76
  children: [/* @__PURE__ */ h(d, { className: "h-4 w-4" }), O("planmagnet.analytics.quality.title", "Quality")]
77
77
  }), /* @__PURE__ */ h("p", {
78
78
  className: "text-xs text-muted-foreground",
79
79
  children: T ? O("planmagnet.analytics.quality.subtitleProject", "Bug and quality-gate activity for the selected project, in the selected range.") : O("planmagnet.analytics.quality.subtitle", "Bug and quality-gate activity across the workspace, in the selected range.")
80
- })] }), /* @__PURE__ */ h(y, { children: A ? /* @__PURE__ */ h("p", {
80
+ })] }), /* @__PURE__ */ h(v, { children: A ? /* @__PURE__ */ h("p", {
81
81
  className: "text-sm text-muted-foreground",
82
82
  children: O("planmagnet.analytics.loading", "Loading…")
83
83
  }) : j ? /* @__PURE__ */ g("p", {
@@ -14,8 +14,8 @@ import { BarChart3 as f, TrendingUp as p } from "lucide-react";
14
14
  import { gql as m } from "@apollo/client";
15
15
  import { useQuery as h } from "@apollo/client/react";
16
16
  import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
17
- import { useI18n as y } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
18
- import { Card as b, CardContent as x, CardHeader as S, CardTitle as C } from "@burdenoff/fe-libs/ui";
17
+ import { Card as y, CardContent as b, CardHeader as x, CardTitle as S } from "@burdenoff/fe-libs/ui";
18
+ import { useI18n as C } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
19
19
  //#region src/planmagnet/pages/analytics/SprintDeliveryCards.tsx
20
20
  var w = m`
21
21
  query DashboardSprintBurndown($workspaceId: ID!, $sprintId: ID!) {
@@ -60,7 +60,7 @@ function E(e) {
60
60
  return `${t.getUTCMonth() + 1}/${t.getUTCDate()}`;
61
61
  }
62
62
  function D({ workspaceId: r, sprintId: i }) {
63
- let { t: a } = y(), { data: d, loading: p, error: m } = h(w, {
63
+ let { t: a } = C(), { data: d, loading: p, error: m } = h(w, {
64
64
  variables: {
65
65
  workspaceId: r,
66
66
  sprintId: i
@@ -71,13 +71,13 @@ function D({ workspaceId: r, sprintId: i }) {
71
71
  remaining: e.remainingPoints,
72
72
  completed: e.completedPoints
73
73
  }));
74
- return /* @__PURE__ */ v(b, { children: [/* @__PURE__ */ v(S, { children: [/* @__PURE__ */ v(C, {
74
+ return /* @__PURE__ */ v(y, { children: [/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ v(S, {
75
75
  className: "flex items-center gap-2",
76
76
  children: [/* @__PURE__ */ _(f, { className: "h-4 w-4" }), a("planmagnet.dashboards.burndown.title", "Sprint burndown")]
77
77
  }), /* @__PURE__ */ _("p", {
78
78
  className: "text-xs text-muted-foreground",
79
79
  children: a("planmagnet.dashboards.burndown.subtitle", "Remaining vs. completed story points, by day of the sprint.")
80
- })] }), /* @__PURE__ */ _(x, { children: i ? p && !d ? /* @__PURE__ */ _("p", {
80
+ })] }), /* @__PURE__ */ _(b, { children: i ? p && !d ? /* @__PURE__ */ _("p", {
81
81
  className: "text-sm text-muted-foreground",
82
82
  children: a("planmagnet.dashboards.loading", "Loading…")
83
83
  }) : m ? /* @__PURE__ */ v("p", {
@@ -135,7 +135,7 @@ function D({ workspaceId: r, sprintId: i }) {
135
135
  }) })] });
136
136
  }
137
137
  function O({ workspaceId: s, projectId: u, trailingSprintCount: f = 6 }) {
138
- let { t: m } = y(), { data: w, loading: E, error: D } = h(T, {
138
+ let { t: m } = C(), { data: w, loading: E, error: D } = h(T, {
139
139
  variables: {
140
140
  workspaceId: s,
141
141
  projectId: u,
@@ -147,13 +147,13 @@ function O({ workspaceId: s, projectId: u, trailingSprintCount: f = 6 }) {
147
147
  completed: e.completedPoints,
148
148
  planned: e.plannedPoints ?? void 0
149
149
  })) ?? [], A = O ? Math.round(O.averageVelocity) : 0, j = O ? Math.round(O.forecastNextSprintPoints) : 0, M = O?.forecastRange ?? null, N = O?.insufficientHistory ?? !1;
150
- return /* @__PURE__ */ v(b, { children: [/* @__PURE__ */ v(S, { children: [/* @__PURE__ */ v(C, {
150
+ return /* @__PURE__ */ v(y, { children: [/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ v(S, {
151
151
  className: "flex items-center gap-2",
152
152
  children: [/* @__PURE__ */ _(p, { className: "h-4 w-4" }), m("planmagnet.dashboards.velocity.title", "Sprint velocity")]
153
153
  }), /* @__PURE__ */ _("p", {
154
154
  className: "text-xs text-muted-foreground",
155
155
  children: m("planmagnet.dashboards.velocity.subtitle", "Completed story points per sprint, across the trailing {{count}} completed sprints.", { count: f })
156
- })] }), /* @__PURE__ */ _(x, { children: u ? E && !w ? /* @__PURE__ */ _("p", {
156
+ })] }), /* @__PURE__ */ _(b, { children: u ? E && !w ? /* @__PURE__ */ _("p", {
157
157
  className: "text-sm text-muted-foreground",
158
158
  children: m("planmagnet.dashboards.loading", "Loading…")
159
159
  }) : D ? /* @__PURE__ */ v("p", {
@@ -9,8 +9,8 @@ import { Workflow as c } from "lucide-react";
9
9
  import { gql as l } from "@apollo/client";
10
10
  import { useQuery as u } from "@apollo/client/react";
11
11
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
12
- import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
- import { Card as m, CardContent as h, CardHeader as g, CardTitle as _ } from "@burdenoff/fe-libs/ui";
12
+ import { Card as p, CardContent as m, CardHeader as h, CardTitle as g } from "@burdenoff/fe-libs/ui";
13
+ import { useI18n as _ } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
14
14
  //#region src/planmagnet/pages/analytics/StatusFlowCard.tsx
15
15
  var v = l`
16
16
  query GetAnalyticsStatusFlow(
@@ -93,7 +93,7 @@ function w({ sourceX: e, sourceY: t, targetX: n, targetY: r, sourceControlX: i,
93
93
  });
94
94
  }
95
95
  function T({ workspaceId: i, projectId: o, startDate: l, endDate: b }) {
96
- let { t: T } = p(), E = s(() => x(l, b), [l, b]), { data: D, loading: O, error: k } = u(v, {
96
+ let { t: T } = _(), E = s(() => x(l, b), [l, b]), { data: D, loading: O, error: k } = u(v, {
97
97
  variables: {
98
98
  workspaceId: i,
99
99
  projectId: o,
@@ -102,10 +102,10 @@ function T({ workspaceId: i, projectId: o, startDate: l, endDate: b }) {
102
102
  },
103
103
  skip: !i || !o
104
104
  }), A = D?.planmagnetStatusFlow ?? [], { nodes: j, links: M } = S(A), N = [...A].sort((e, t) => t.count - e.count);
105
- return /* @__PURE__ */ f(m, {
105
+ return /* @__PURE__ */ f(p, {
106
106
  "data-testid": "status-flow-card",
107
- children: [/* @__PURE__ */ f(g, { children: [
108
- /* @__PURE__ */ f(_, {
107
+ children: [/* @__PURE__ */ f(h, { children: [
108
+ /* @__PURE__ */ f(g, {
109
109
  className: "flex items-center gap-2",
110
110
  children: [/* @__PURE__ */ d(c, { className: "h-4 w-4" }), T("planmagnet.analytics.statusFlow.title", "Status flow")]
111
111
  }),
@@ -120,7 +120,7 @@ function T({ workspaceId: i, projectId: o, startDate: l, endDate: b }) {
120
120
  from: E.from.slice(0, 10)
121
121
  })
122
122
  })
123
- ] }), /* @__PURE__ */ d(h, { children: o ? O && !D ? /* @__PURE__ */ d("div", {
123
+ ] }), /* @__PURE__ */ d(m, { children: o ? O && !D ? /* @__PURE__ */ d("div", {
124
124
  className: "flex justify-center py-12",
125
125
  children: /* @__PURE__ */ d("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
126
126
  }) : k ? /* @__PURE__ */ d("p", {
@@ -11,8 +11,8 @@ import { BarChart3 as l } from "lucide-react";
11
11
  import { gql as u } from "@apollo/client";
12
12
  import { useQuery as d } from "@apollo/client/react";
13
13
  import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
14
- import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
15
- import { Card as g, CardContent as _, CardHeader as v, CardTitle as y } from "@burdenoff/fe-libs/ui";
14
+ import { Card as h, CardContent as g, CardHeader as _, CardTitle as v } from "@burdenoff/fe-libs/ui";
15
+ import { useI18n as y } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
16
16
  //#region src/planmagnet/pages/analytics/ThroughputCard.tsx
17
17
  var b = u`
18
18
  query GetAnalyticsThroughput(
@@ -43,7 +43,7 @@ function x(e) {
43
43
  return `${t.getUTCMonth() + 1}/${t.getUTCDate()}`;
44
44
  }
45
45
  function S({ workspaceId: u, projectId: S, startDate: C, endDate: w }) {
46
- let { t: T } = h(), [E, D] = c("WEEK"), { data: O, loading: k, error: A } = d(b, {
46
+ let { t: T } = y(), [E, D] = c("WEEK"), { data: O, loading: k, error: A } = d(b, {
47
47
  variables: {
48
48
  workspaceId: u,
49
49
  projectId: S,
@@ -57,11 +57,11 @@ function S({ workspaceId: u, projectId: S, startDate: C, endDate: w }) {
57
57
  count: e.completedCount,
58
58
  points: e.completedPoints
59
59
  })), N = j.reduce((e, t) => e + t.completedCount, 0), P = j.reduce((e, t) => e + t.completedPoints, 0);
60
- return /* @__PURE__ */ m(g, {
60
+ return /* @__PURE__ */ m(h, {
61
61
  "data-testid": "analytics-throughput",
62
- children: [/* @__PURE__ */ m(v, { children: [/* @__PURE__ */ m("div", {
62
+ children: [/* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m("div", {
63
63
  className: "flex flex-wrap items-center justify-between gap-2",
64
- children: [/* @__PURE__ */ m(y, {
64
+ children: [/* @__PURE__ */ m(v, {
65
65
  className: "flex items-center gap-2",
66
66
  children: [/* @__PURE__ */ p(l, { className: "h-4 w-4" }), T("planmagnet.analytics.throughput.title", "Throughput")]
67
67
  }), /* @__PURE__ */ p("div", {
@@ -80,7 +80,7 @@ function S({ workspaceId: u, projectId: S, startDate: C, endDate: w }) {
80
80
  }), /* @__PURE__ */ p("p", {
81
81
  className: "text-xs text-muted-foreground",
82
82
  children: T("planmagnet.analytics.throughput.subtitle", "Work items completed per {{bucket}}, in the selected range.", { bucket: E === "DAY" ? T("planmagnet.analytics.throughput.day", "Day").toLowerCase() : T("planmagnet.analytics.throughput.week", "Week").toLowerCase() })
83
- })] }), /* @__PURE__ */ p(_, { children: k && !O ? /* @__PURE__ */ p("div", {
83
+ })] }), /* @__PURE__ */ p(g, { children: k && !O ? /* @__PURE__ */ p("div", {
84
84
  className: "flex justify-center py-12",
85
85
  children: /* @__PURE__ */ p("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
86
86
  }) : A ? /* @__PURE__ */ p("p", {
@@ -10,8 +10,8 @@ import { LayoutGrid as c } from "lucide-react";
10
10
  import { gql as l } from "@apollo/client";
11
11
  import { useQuery as u } from "@apollo/client/react";
12
12
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
13
- import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
14
- import { Card as m, CardContent as h, CardHeader as g, CardTitle as _ } from "@burdenoff/fe-libs/ui";
13
+ import { Card as p, CardContent as m, CardHeader as h, CardTitle as g } from "@burdenoff/fe-libs/ui";
14
+ import { useI18n as _ } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
15
15
  //#region src/planmagnet/pages/analytics/WorkBreakdownCard.tsx
16
16
  var v = l`
17
17
  query GetAnalyticsWorkBreakdown($workspaceId: ID!, $projectIds: [ID!]) {
@@ -168,7 +168,7 @@ function T(e) {
168
168
  });
169
169
  }
170
170
  function E({ workspaceId: a, projectId: o }) {
171
- let { t: l } = p(), y = e(), [b, x] = s("items"), { data: S, loading: w, error: E } = u(v, {
171
+ let { t: l } = _(), y = e(), [b, x] = s("items"), { data: S, loading: w, error: E } = u(v, {
172
172
  variables: {
173
173
  workspaceId: a,
174
174
  projectIds: o ? [o] : void 0
@@ -178,11 +178,11 @@ function E({ workspaceId: a, projectId: o }) {
178
178
  function M(e) {
179
179
  y(`/tasks/task-detail-page?taskId=${encodeURIComponent(e)}`);
180
180
  }
181
- return /* @__PURE__ */ f(m, {
181
+ return /* @__PURE__ */ f(p, {
182
182
  "data-testid": "work-breakdown-card",
183
- children: [/* @__PURE__ */ f(g, { children: [/* @__PURE__ */ f("div", {
183
+ children: [/* @__PURE__ */ f(h, { children: [/* @__PURE__ */ f("div", {
184
184
  className: "flex flex-wrap items-center justify-between gap-2",
185
- children: [/* @__PURE__ */ f(_, {
185
+ children: [/* @__PURE__ */ f(g, {
186
186
  className: "flex items-center gap-2",
187
187
  children: [/* @__PURE__ */ d(c, { className: "h-4 w-4" }), l("planmagnet.analytics.workBreakdown.title", "Work breakdown")]
188
188
  }), /* @__PURE__ */ d("div", {
@@ -201,7 +201,7 @@ function E({ workspaceId: a, projectId: o }) {
201
201
  }), /* @__PURE__ */ d("p", {
202
202
  className: "text-xs text-muted-foreground",
203
203
  children: l("planmagnet.analytics.workBreakdown.subtitle", "Live open/done work, by project and epic — current state, not limited by the date range above.")
204
- })] }), /* @__PURE__ */ d(h, { children: w && !S ? /* @__PURE__ */ d("div", {
204
+ })] }), /* @__PURE__ */ d(m, { children: w && !S ? /* @__PURE__ */ d("div", {
205
205
  className: "flex justify-center py-12",
206
206
  children: /* @__PURE__ */ d("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
207
207
  }) : E ? /* @__PURE__ */ d("p", {
@@ -1,6 +1,20 @@
1
1
  import { ActorProfile } from '@burdenoff/fe-libs/shared';
2
2
  import { ReactNode } from 'react';
3
3
 
4
+ /**
5
+ * CWF-15's redaction sentinel: `FeatureRequest.submittedBy`/`createdBy`/`updatedBy` and `FeatureVote.voterId`
6
+ * read back this literal string, instead of the real actor id, for a non-moderator caller when the record (or,
7
+ * for a vote, that vote) is flagged `isAnonymous`. Never a real actor id — those are workspace-member uuids —
8
+ * so, like the `automation:` actor ids above, it must never be sent through `useActorProfiles`: that would only
9
+ * ever resolve to the generic "not a member" fallback, and would burn a wasted slot in every batch lookup.
10
+ */
11
+ export declare const ANONYMOUS_ACTOR_ID = "anonymous";
12
+ export declare function isAnonymousActorId(id: string | null | undefined): boolean;
13
+ /** The literal "Anonymous" badge CWF-15 asks for everywhere a redacted actor id would otherwise show — see
14
+ * `PersonName` below, which is the one place `submittedBy`/`createdBy`/`updatedBy`/`voterId` ever render. */
15
+ export declare function AnonymousBadge({ className }: {
16
+ className?: string;
17
+ }): import("react/jsx-runtime").JSX.Element;
4
18
  export declare function PeopleProvider({ workspaceId, children, }: {
5
19
  workspaceId?: string;
6
20
  children: ReactNode;