@burdenoff/microfe-planmagnet 2026.1001.1 → 2026.1001.2

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 (72) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +156 -150
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.js +19 -15
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/comments/CommentThread.js +36 -36
  8. package/dist/planmagnet/comments/RoadmapComments.js +21 -21
  9. package/dist/planmagnet/controls/AutomationRuleControls.js +24 -24
  10. package/dist/planmagnet/controls/FeatureControls.js +60 -60
  11. package/dist/planmagnet/controls/SyncControls.js +59 -59
  12. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +15 -15
  13. package/dist/planmagnet/docs/DocSuggestionsPanel.js +12 -12
  14. package/dist/planmagnet/docs/DocVersionCompare.js +3 -3
  15. package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts +12 -0
  16. package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +1 -0
  17. package/dist/planmagnet/forecast/DeliveryForecastCard.js +208 -0
  18. package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +1 -0
  19. package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts +5 -0
  20. package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +1 -0
  21. package/dist/planmagnet/forecast/ProjectOutlookCard.js +190 -0
  22. package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +1 -0
  23. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts +5 -0
  24. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +1 -0
  25. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +99 -0
  26. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +1 -0
  27. package/dist/planmagnet/forecast/ResourceForecastCard.d.ts +8 -0
  28. package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +1 -0
  29. package/dist/planmagnet/forecast/ResourceForecastCard.js +185 -0
  30. package/dist/planmagnet/forecast/ResourceForecastCard.js.map +1 -0
  31. package/dist/planmagnet/forecast/riskFlags.d.ts +35 -0
  32. package/dist/planmagnet/forecast/riskFlags.d.ts.map +1 -0
  33. package/dist/planmagnet/forecast/riskFlags.js +37 -0
  34. package/dist/planmagnet/forecast/riskFlags.js.map +1 -0
  35. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
  36. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +216 -182
  37. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  38. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +11 -11
  39. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +4 -4
  40. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +163 -163
  41. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  42. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +165 -165
  43. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +1 -1
  44. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts +2 -0
  45. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +1 -0
  46. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +234 -0
  47. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +1 -0
  48. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  49. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +206 -182
  50. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  51. package/dist/planmagnet/pages/ReportsReportPagePage.js +22 -22
  52. package/dist/planmagnet/pages/ReportsReportPagePage.js.map +1 -1
  53. package/dist/planmagnet/pages/ReportsReportsPagePage.js +21 -21
  54. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -1
  55. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +88 -83
  56. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -1
  57. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +1 -1
  58. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +139 -112
  59. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +1 -1
  60. package/dist/planmagnet/pages/analytics/StatusFlowCard.js +21 -21
  61. package/dist/planmagnet/product/ProductControls.js +91 -91
  62. package/dist/planmagnet/reports/SchedulesPanel.js +33 -33
  63. package/dist/planmagnet/reports/ShareDialog.js +20 -20
  64. package/dist/planmagnet/reports/ShareDialog.js.map +1 -1
  65. package/dist/planmagnet/reports/sharedReportRoute.d.ts +3 -2
  66. package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +1 -1
  67. package/dist/planmagnet/reports/sharedReportRoute.js.map +1 -1
  68. package/dist/planmagnet/roadmaps/RoadmapControls.js +60 -60
  69. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +30 -30
  70. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +21 -21
  71. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +22 -22
  72. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
2
  import { PersonName as t } from "../people/People.js";
3
- import { throwOnError as n } from "../utils/mutationResult.js";
4
- import { ConfirmButton as r, ErrorLine as i } from "../controls/ConfirmButton.js";
5
- import { isForbidden as a, mutationErrorMessage as o } from "../utils/graphqlErrors.js";
3
+ import { isForbidden as n, mutationErrorMessage as r } from "../utils/graphqlErrors.js";
4
+ import { throwOnError as i } from "../utils/mutationResult.js";
5
+ import { ConfirmButton as a, ErrorLine as o } from "../controls/ConfirmButton.js";
6
6
  import { useEffect as s, useState as c } from "react";
7
7
  import { MessageSquare as l, Trash2 as u } from "lucide-react";
8
8
  import { gql as d } from "@apollo/client";
@@ -57,11 +57,11 @@ var D = 5e3, O = 20, k = d`
57
57
  refetchQueries: ["RoadmapCommentsThread"],
58
58
  awaitRefetchQueries: !0
59
59
  };
60
- function F({ roadmapId: t, roadmapItemId: r, onTotalCount: l }) {
60
+ function F({ roadmapId: t, roadmapItemId: a, onTotalCount: l }) {
61
61
  let { currentUser: u } = e(), [d, _] = c(""), [v, y] = c(null), [b, x] = c(!1), { data: S, loading: C, error: w, fetchMore: T } = p(k, {
62
62
  variables: {
63
63
  roadmapId: t,
64
- roadmapItemId: r ?? null,
64
+ roadmapItemId: a ?? null,
65
65
  pagination: { first: O }
66
66
  },
67
67
  skip: !t
@@ -72,13 +72,13 @@ function F({ roadmapId: t, roadmapItemId: r, onTotalCount: l }) {
72
72
  let R = async () => {
73
73
  y(null);
74
74
  try {
75
- await n(E({ variables: { input: {
75
+ await i(E({ variables: { input: {
76
76
  roadmapId: t,
77
- roadmapItemId: r ?? null,
77
+ roadmapItemId: a ?? null,
78
78
  body: F
79
79
  } } })), _("");
80
80
  } catch (e) {
81
- y(a(e) ? "Your role can read but not comment." : o(e, "The comment could not be posted."));
81
+ y(n(e) ? "Your role can read but not comment." : r(e, "The comment could not be posted."));
82
82
  }
83
83
  }, z = async () => {
84
84
  let e = M?.pageInfo.endCursor;
@@ -103,12 +103,12 @@ function F({ roadmapId: t, roadmapItemId: r, onTotalCount: l }) {
103
103
  return /* @__PURE__ */ h("div", {
104
104
  className: "space-y-4",
105
105
  children: [
106
- v && /* @__PURE__ */ m(i, { message: v }),
106
+ v && /* @__PURE__ */ m(o, { message: v }),
107
107
  C && !S && /* @__PURE__ */ m("p", {
108
108
  className: "text-sm text-muted-foreground",
109
109
  children: "Loading comments…"
110
110
  }),
111
- w && /* @__PURE__ */ m(i, { message: `Comments could not be loaded: ${w.message}` }),
111
+ w && /* @__PURE__ */ m(o, { message: `Comments could not be loaded: ${w.message}` }),
112
112
  M && N.length === 0 && /* @__PURE__ */ m("p", {
113
113
  className: "text-sm text-muted-foreground",
114
114
  children: "No comments yet."
@@ -132,18 +132,18 @@ function F({ roadmapId: t, roadmapItemId: r, onTotalCount: l }) {
132
132
  className: "space-y-2 border-t pt-4",
133
133
  children: [
134
134
  /* @__PURE__ */ m("label", {
135
- htmlFor: `roadmap-comment-draft-${r ?? t}`,
135
+ htmlFor: `roadmap-comment-draft-${a ?? t}`,
136
136
  className: "sr-only",
137
137
  children: "Add a comment"
138
138
  }),
139
139
  /* @__PURE__ */ m("textarea", {
140
- id: `roadmap-comment-draft-${r ?? t}`,
140
+ id: `roadmap-comment-draft-${a ?? t}`,
141
141
  className: "w-full min-h-[72px] rounded-md border border-input bg-background px-3 py-2 text-sm",
142
142
  placeholder: "Add a comment…",
143
143
  value: d,
144
144
  onChange: (e) => _(e.target.value)
145
145
  }),
146
- L && /* @__PURE__ */ m(i, { message: `A comment can be at most ${D} characters.` }),
146
+ L && /* @__PURE__ */ m(o, { message: `A comment can be at most ${D} characters.` }),
147
147
  /* @__PURE__ */ m("div", {
148
148
  className: "flex justify-end",
149
149
  children: /* @__PURE__ */ m(g, {
@@ -159,23 +159,23 @@ function F({ roadmapId: t, roadmapItemId: r, onTotalCount: l }) {
159
159
  ]
160
160
  });
161
161
  }
162
- function I({ comment: e, mine: a, onError: s }) {
162
+ function I({ comment: e, mine: n, onError: s }) {
163
163
  let [l, d] = c(!1), [p, _] = c(e.body), v = p.trim().length > D, y = s, [b, x] = f(j, P), [S, C] = f(M, P), w = async () => {
164
164
  y(null);
165
165
  try {
166
- await n(b({ variables: {
166
+ await i(b({ variables: {
167
167
  id: e.id,
168
168
  body: p.trim()
169
169
  } })), d(!1);
170
170
  } catch (e) {
171
- y(o(e, "The comment could not be saved."));
171
+ y(r(e, "The comment could not be saved."));
172
172
  }
173
173
  }, T = async () => {
174
174
  y(null);
175
175
  try {
176
- await n(S({ variables: { id: e.id } }));
176
+ await i(S({ variables: { id: e.id } }));
177
177
  } catch (e) {
178
- y(o(e, "The comment could not be deleted."));
178
+ y(r(e, "The comment could not be deleted."));
179
179
  }
180
180
  };
181
181
  return /* @__PURE__ */ h("li", {
@@ -195,7 +195,7 @@ function I({ comment: e, mine: a, onError: s }) {
195
195
  title: `Edited ${N(e.editedAt)}`,
196
196
  children: " · edited"
197
197
  })
198
- ] }), a && !l && /* @__PURE__ */ h("span", {
198
+ ] }), n && !l && /* @__PURE__ */ h("span", {
199
199
  className: "flex items-center gap-1",
200
200
  children: [/* @__PURE__ */ m(g, {
201
201
  size: "sm",
@@ -203,7 +203,7 @@ function I({ comment: e, mine: a, onError: s }) {
203
203
  className: "h-6 px-2 text-xs",
204
204
  onClick: () => d(!0),
205
205
  children: "Edit"
206
- }), /* @__PURE__ */ m(r, {
206
+ }), /* @__PURE__ */ m(a, {
207
207
  label: "",
208
208
  ariaLabel: "Delete comment",
209
209
  variant: "outline",
@@ -225,7 +225,7 @@ function I({ comment: e, mine: a, onError: s }) {
225
225
  value: p,
226
226
  onChange: (e) => _(e.target.value)
227
227
  }),
228
- v && /* @__PURE__ */ m(i, { message: `A comment can be at most ${D} characters.` }),
228
+ v && /* @__PURE__ */ m(o, { message: `A comment can be at most ${D} characters.` }),
229
229
  /* @__PURE__ */ h("div", {
230
230
  className: "flex justify-end gap-2",
231
231
  children: [/* @__PURE__ */ m(g, {
@@ -1,7 +1,7 @@
1
1
  import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
2
- import { LEAVES_PAGE_CONTEXT as t, throwOnError as n } from "../utils/mutationResult.js";
3
- import { ConfirmButton as r, ErrorLine as i } from "./ConfirmButton.js";
4
- import { isForbidden as a, mutationErrorMessage as o } from "../utils/graphqlErrors.js";
2
+ import { isForbidden as t, mutationErrorMessage as n } from "../utils/graphqlErrors.js";
3
+ import { LEAVES_PAGE_CONTEXT as r, throwOnError as i } from "../utils/mutationResult.js";
4
+ import { ConfirmButton as a, ErrorLine as o } from "./ConfirmButton.js";
5
5
  import { WorkItemSearchSelect as s } from "./Pickers.js";
6
6
  import { splitExecutionErrors as c } from "../automation/automationRuleTypes.js";
7
7
  import { useState as l } from "react";
@@ -32,25 +32,25 @@ var E = ["AutomationRulesList", "GetAutomationRule"], D = f`
32
32
  }
33
33
  }
34
34
  `;
35
- function A({ ruleId: e, status: t }) {
36
- let [r, { loading: s }] = p(D, { refetchQueries: E }), [c, u] = l(null), d = t === "ACTIVE", f = async (t) => {
35
+ function A({ ruleId: e, status: r }) {
36
+ let [a, { loading: s }] = p(D, { refetchQueries: E }), [c, u] = l(null), d = r === "ACTIVE", f = async (r) => {
37
37
  u(null);
38
38
  try {
39
- await n(r({ variables: {
39
+ await i(a({ variables: {
40
40
  id: e,
41
- status: t ? "ACTIVE" : "PAUSED"
41
+ status: r ? "ACTIVE" : "PAUSED"
42
42
  } }));
43
43
  } catch (e) {
44
- u(a(e) ? "Your role can view automation rules but not change them." : o(e, "The rule could not be changed."));
44
+ u(t(e) ? "Your role can view automation rules but not change them." : n(e, "The rule could not be changed."));
45
45
  }
46
46
  };
47
47
  return /* @__PURE__ */ h("div", {
48
48
  className: "flex flex-col items-end gap-1",
49
49
  children: [/* @__PURE__ */ h("div", {
50
50
  className: "flex items-center gap-2",
51
- children: [t !== "ACTIVE" && t !== "PAUSED" && /* @__PURE__ */ m(g, {
52
- variant: t === "ERROR" ? "destructive" : "secondary",
53
- children: t.toLowerCase()
51
+ children: [r !== "ACTIVE" && r !== "PAUSED" && /* @__PURE__ */ m(g, {
52
+ variant: r === "ERROR" ? "destructive" : "secondary",
53
+ children: r.toLowerCase()
54
54
  }), /* @__PURE__ */ m(T, {
55
55
  "aria-label": d ? "Active — turn off to pause" : "Paused — turn on to activate",
56
56
  "data-testid": "automation-rule-toggle",
@@ -58,24 +58,24 @@ function A({ ruleId: e, status: t }) {
58
58
  disabled: s,
59
59
  onCheckedChange: (e) => void f(e)
60
60
  })]
61
- }), c && /* @__PURE__ */ m(i, { message: c })]
61
+ }), c && /* @__PURE__ */ m(o, { message: c })]
62
62
  });
63
63
  }
64
64
  function j({ ruleId: s, name: c }) {
65
65
  let u = e(), [f, { loading: g }] = p(O, {
66
66
  refetchQueries: E.filter((e) => e !== "GetAutomationRule"),
67
- context: t
67
+ context: r
68
68
  }), [_, v] = l(null), y = async () => {
69
69
  v(null);
70
70
  try {
71
- await n(f({ variables: { id: s } })), u("/automation/automation-rules-page");
71
+ await i(f({ variables: { id: s } })), u("/automation/automation-rules-page");
72
72
  } catch (e) {
73
- v(a(e) ? "Your role can view automation rules but not delete them." : o(e, "The rule could not be deleted."));
73
+ v(t(e) ? "Your role can view automation rules but not delete them." : n(e, "The rule could not be deleted."));
74
74
  }
75
75
  };
76
76
  return /* @__PURE__ */ h("div", {
77
77
  className: "flex flex-col items-end gap-1",
78
- children: [/* @__PURE__ */ m(r, {
78
+ children: [/* @__PURE__ */ m(a, {
79
79
  label: "Delete",
80
80
  variant: "outline",
81
81
  icon: /* @__PURE__ */ m(d, { className: "mr-1 h-4 w-4" }),
@@ -85,7 +85,7 @@ function j({ ruleId: s, name: c }) {
85
85
  destructive: !0,
86
86
  disabled: g,
87
87
  onConfirm: () => void y()
88
- }), _ && /* @__PURE__ */ m(i, { message: _ })]
88
+ }), _ && /* @__PURE__ */ m(o, { message: _ })]
89
89
  });
90
90
  }
91
91
  var M = {
@@ -94,25 +94,25 @@ var M = {
94
94
  FAILURE: "destructive",
95
95
  SKIPPED: "secondary"
96
96
  };
97
- function N({ ruleId: e, projectId: t }) {
98
- let [r, d] = l(!1), [f, T] = l(""), [D, O] = l(null), [A, j] = l(null), [N, { loading: P }] = p(k, {
97
+ function N({ ruleId: e, projectId: r }) {
98
+ let [a, d] = l(!1), [f, T] = l(""), [D, O] = l(null), [A, j] = l(null), [N, { loading: P }] = p(k, {
99
99
  refetchQueries: ["AutomationExecutionsForRule", ...E],
100
100
  awaitRefetchQueries: !0
101
101
  }), F = async () => {
102
102
  if (f) {
103
103
  O(null), j(null);
104
104
  try {
105
- j((await n(N({ variables: {
105
+ j((await i(N({ variables: {
106
106
  id: e,
107
107
  triggerData: { workItemId: f }
108
108
  } }))).data?.planmagnetExecuteAutomationRule ?? null);
109
109
  } catch (e) {
110
- O(a(e) ? "Your role can view automation rules but not run them." : o(e, "The rule could not be run."));
110
+ O(t(e) ? "Your role can view automation rules but not run them." : n(e, "The rule could not be run."));
111
111
  }
112
112
  }
113
113
  };
114
114
  return /* @__PURE__ */ h(v, {
115
- open: r,
115
+ open: a,
116
116
  onOpenChange: (e) => {
117
117
  d(e), e && (T(""), O(null), j(null));
118
118
  },
@@ -139,12 +139,12 @@ function N({ ruleId: e, projectId: t }) {
139
139
  className: "mt-1",
140
140
  children: /* @__PURE__ */ m(s, {
141
141
  id: "automation-run-work-item",
142
- projectId: t,
142
+ projectId: r,
143
143
  value: f,
144
144
  onChange: T
145
145
  })
146
146
  })] }),
147
- D && /* @__PURE__ */ m(i, { message: D }),
147
+ D && /* @__PURE__ */ m(o, { message: D }),
148
148
  A && /* @__PURE__ */ h("div", {
149
149
  role: "status",
150
150
  className: "rounded-md border p-3 text-sm space-y-1",
@@ -1,8 +1,8 @@
1
1
  import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
2
- import { LEAVES_PAGE_CONTEXT as t, throwOnError as n } from "../utils/mutationResult.js";
3
- import { ConfirmButton as r, ErrorLine as i } from "./ConfirmButton.js";
4
- import { enumLabel as a } from "./WorkItemControls.js";
5
- import { mutationErrorMessage as o } from "../utils/graphqlErrors.js";
2
+ import { mutationErrorMessage as t } from "../utils/graphqlErrors.js";
3
+ import { LEAVES_PAGE_CONTEXT as n, throwOnError as r } from "../utils/mutationResult.js";
4
+ import { ConfirmButton as i, ErrorLine as a } from "./ConfirmButton.js";
5
+ import { enumLabel as o } from "./WorkItemControls.js";
6
6
  import { detailPath as s } from "../utils/rowNavigation.js";
7
7
  import { ProjectSelect as c, WorkItemSearchSelect as l } from "./Pickers.js";
8
8
  import { parseIntField as u } from "../utils/formValidation.js";
@@ -67,10 +67,10 @@ var z = [
67
67
  awaitRefetchQueries: !0
68
68
  };
69
69
  function K({ featureId: e, voted: t }) {
70
- let [r, a] = S(V, G), [o, s] = S(H, G), [c, l] = g(null), u = a.loading || s.loading, d = async () => {
70
+ let [n, i] = S(V, G), [o, s] = S(H, G), [c, l] = g(null), u = i.loading || s.loading, d = async () => {
71
71
  l(null);
72
72
  try {
73
- await n((t ? o : r)({ variables: { id: e } }));
73
+ await r((t ? o : n)({ variables: { id: e } }));
74
74
  } catch (e) {
75
75
  l(e instanceof Error ? e.message : "Your vote could not be saved.");
76
76
  }
@@ -85,18 +85,18 @@ function K({ featureId: e, voted: t }) {
85
85
  disabled: u,
86
86
  onClick: () => void d(),
87
87
  children: [/* @__PURE__ */ w(y, { className: "mr-1 h-4 w-4" }), t ? "Voted" : "Vote"]
88
- }), c && /* @__PURE__ */ w(i, { message: c })]
88
+ }), c && /* @__PURE__ */ w(a, { message: c })]
89
89
  });
90
90
  }
91
- function q({ feature: o }) {
91
+ function q({ feature: t }) {
92
92
  let c = e(), [l, u] = S(U, G), [d, f] = S(W, {
93
93
  refetchQueries: B.filter((e) => e !== "GetFeatureRequest"),
94
- context: t
95
- }), [p, m] = g(null), h = u.loading || f.loading, v = z.includes(o.status) ? z : [o.status, ...z], y = async (e) => {
94
+ context: n
95
+ }), [p, m] = g(null), h = u.loading || f.loading, v = z.includes(t.status) ? z : [t.status, ...z], y = async (e) => {
96
96
  m(null);
97
97
  try {
98
- await n(l({ variables: {
99
- id: o.id,
98
+ await r(l({ variables: {
99
+ id: t.id,
100
100
  input: { status: e }
101
101
  } }));
102
102
  } catch (e) {
@@ -105,7 +105,7 @@ function q({ feature: o }) {
105
105
  }, x = async () => {
106
106
  m(null);
107
107
  try {
108
- await n(d({ variables: { id: o.id } })), c("/products/features-page");
108
+ await r(d({ variables: { id: t.id } })), c("/products/features-page");
109
109
  } catch (e) {
110
110
  m(e instanceof Error ? e.message : "The request could not be deleted.");
111
111
  }
@@ -119,29 +119,29 @@ function q({ feature: o }) {
119
119
  "aria-label": "Status",
120
120
  "data-testid": "feature-status",
121
121
  className: "rounded-md border border-input bg-background px-2 py-1 text-sm disabled:opacity-60",
122
- value: o.status,
122
+ value: t.status,
123
123
  disabled: h,
124
124
  onChange: (e) => {
125
- e.target.value !== o.status && y(e.target.value);
125
+ e.target.value !== t.status && y(e.target.value);
126
126
  },
127
127
  children: v.map((e) => /* @__PURE__ */ w("option", {
128
128
  value: e,
129
- children: a(e)
129
+ children: o(e)
130
130
  }, e))
131
131
  }),
132
- /* @__PURE__ */ w(J, { feature: o }),
132
+ /* @__PURE__ */ w(J, { feature: t }),
133
133
  /* @__PURE__ */ T(E, {
134
134
  size: "sm",
135
135
  variant: "outline",
136
136
  "data-testid": "feature-analytics",
137
- onClick: () => c(s("/products/feature-analytics-page", o.id)),
137
+ onClick: () => c(s("/products/feature-analytics-page", t.id)),
138
138
  children: [/* @__PURE__ */ w(_, { className: "mr-1 h-4 w-4" }), "Analytics"]
139
139
  }),
140
- /* @__PURE__ */ w(r, {
140
+ /* @__PURE__ */ w(i, {
141
141
  label: "Delete",
142
142
  variant: "outline",
143
143
  icon: /* @__PURE__ */ w(b, { className: "mr-1 h-4 w-4" }),
144
- title: `Delete "${o.title}"?`,
144
+ title: `Delete "${t.title}"?`,
145
145
  description: "The request and its votes are deleted. This cannot be undone here.",
146
146
  confirmLabel: "Delete request",
147
147
  destructive: !0,
@@ -149,28 +149,28 @@ function q({ feature: o }) {
149
149
  onConfirm: () => void x()
150
150
  })
151
151
  ]
152
- }), p && /* @__PURE__ */ w(i, { message: p })]
152
+ }), p && /* @__PURE__ */ w(a, { message: p })]
153
153
  });
154
154
  }
155
155
  function J({ feature: e }) {
156
- let t = {
156
+ let n = {
157
157
  title: e.title,
158
158
  description: e.description ?? "",
159
159
  businessValue: e.businessValue == null ? "" : String(e.businessValue),
160
160
  effortEstimate: e.effortEstimate ?? "",
161
161
  projectId: e.projectId ?? "",
162
162
  workItemId: e.workItemId ?? ""
163
- }, r = {
163
+ }, i = {
164
164
  moscow: e.moscow ?? "",
165
165
  kano: e.kano ?? "",
166
166
  valueScore: e.valueScore == null ? "" : String(e.valueScore),
167
167
  effortScore: e.effortScore == null ? "" : String(e.effortScore)
168
- }, [a, s] = g(!1), [p, m] = g(t), [_, y] = g(r), [b, x] = g(null), [C, D] = S(U, G), O = u(p.businessValue, {
168
+ }, [o, s] = g(!1), [p, m] = g(n), [_, y] = g(i), [b, x] = g(null), [C, D] = S(U, G), O = u(p.businessValue, {
169
169
  min: 0,
170
170
  max: 100
171
171
  }), k = p.title.trim() !== "" && !O.invalid && h(_) && !D.loading, A = async () => {
172
172
  x(null);
173
- let i = (e) => e.trim() ? e.trim() : null, a = u(_.valueScore, {
173
+ let a = (e) => e.trim() ? e.trim() : null, o = u(_.valueScore, {
174
174
  min: 1,
175
175
  max: 10
176
176
  }), c = u(_.effortScore, {
@@ -178,44 +178,44 @@ function J({ feature: e }) {
178
178
  max: 10
179
179
  }), l = {
180
180
  title: p.title.trim(),
181
- description: i(p.description),
181
+ description: a(p.description),
182
182
  businessValue: O.value ?? null,
183
- effortEstimate: i(p.effortEstimate),
183
+ effortEstimate: a(p.effortEstimate),
184
184
  projectId: p.projectId || null,
185
185
  workItemId: p.workItemId || null,
186
186
  moscow: _.moscow || null,
187
187
  kano: _.kano || null,
188
- valueScore: a.value ?? null,
188
+ valueScore: o.value ?? null,
189
189
  effortScore: c.value ?? null
190
190
  }, d = {
191
- title: t.title,
192
- description: i(t.description),
193
- businessValue: t.businessValue === "" ? null : Number(t.businessValue),
194
- effortEstimate: i(t.effortEstimate),
195
- projectId: t.projectId || null,
196
- workItemId: t.workItemId || null,
197
- moscow: r.moscow || null,
198
- kano: r.kano || null,
199
- valueScore: r.valueScore === "" ? null : Number(r.valueScore),
200
- effortScore: r.effortScore === "" ? null : Number(r.effortScore)
191
+ title: n.title,
192
+ description: a(n.description),
193
+ businessValue: n.businessValue === "" ? null : Number(n.businessValue),
194
+ effortEstimate: a(n.effortEstimate),
195
+ projectId: n.projectId || null,
196
+ workItemId: n.workItemId || null,
197
+ moscow: i.moscow || null,
198
+ kano: i.kano || null,
199
+ valueScore: i.valueScore === "" ? null : Number(i.valueScore),
200
+ effortScore: i.effortScore === "" ? null : Number(i.effortScore)
201
201
  }, f = Object.fromEntries(Object.entries(l).filter(([e, t]) => t !== d[e]));
202
202
  if (Object.keys(f).length === 0) {
203
203
  s(!1);
204
204
  return;
205
205
  }
206
206
  try {
207
- await n(C({ variables: {
207
+ await r(C({ variables: {
208
208
  id: e.id,
209
209
  input: f
210
210
  } })), s(!1);
211
211
  } catch (e) {
212
- x(o(e, "The request could not be saved."));
212
+ x(t(e, "The request could not be saved."));
213
213
  }
214
214
  }, z = "text-sm font-medium";
215
215
  return /* @__PURE__ */ T(M, {
216
- open: a,
216
+ open: o,
217
217
  onOpenChange: (e) => {
218
- s(e), e ? (m(t), y(r)) : x(null);
218
+ s(e), e ? (m(n), y(i)) : x(null);
219
219
  },
220
220
  children: [/* @__PURE__ */ w(R, {
221
221
  asChild: !0,
@@ -291,7 +291,7 @@ function J({ feature: e }) {
291
291
  })
292
292
  })] })]
293
293
  }),
294
- O.invalid && /* @__PURE__ */ w(i, { message: "Business value is a whole number from 0 to 100." }),
294
+ O.invalid && /* @__PURE__ */ w(a, { message: "Business value is a whole number from 0 to 100." }),
295
295
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("label", {
296
296
  htmlFor: "feature-edit-project",
297
297
  className: z,
@@ -349,7 +349,7 @@ function J({ feature: e }) {
349
349
  })
350
350
  ]
351
351
  }),
352
- b && /* @__PURE__ */ w(i, { message: b })
352
+ b && /* @__PURE__ */ w(a, { message: b })
353
353
  ]
354
354
  }),
355
355
  /* @__PURE__ */ T(F, { children: [/* @__PURE__ */ w(E, {
@@ -366,41 +366,41 @@ function J({ feature: e }) {
366
366
  });
367
367
  }
368
368
  function Y({ feature: e }) {
369
- let t = {
369
+ let n = {
370
370
  moscow: e.moscow ?? "",
371
371
  kano: e.kano ?? "",
372
372
  valueScore: e.valueScore == null ? "" : String(e.valueScore),
373
373
  effortScore: e.effortScore == null ? "" : String(e.effortScore)
374
- }, [r, a] = g(!1), [s, c] = g(t), [l, _] = g(null), [y, b] = S(U, G), x = () => {
375
- c(t), _(null), a(!0);
374
+ }, [i, o] = g(!1), [s, c] = g(n), [l, _] = g(null), [y, b] = S(U, G), x = () => {
375
+ c(n), _(null), o(!0);
376
376
  }, j = async () => {
377
377
  _(null);
378
- let t = u(s.valueScore, {
378
+ let n = u(s.valueScore, {
379
379
  min: 1,
380
380
  max: 10
381
- }), r = u(s.effortScore, {
381
+ }), i = u(s.effortScore, {
382
382
  min: 1,
383
383
  max: 10
384
- }), i = {
384
+ }), a = {
385
385
  moscow: s.moscow || null,
386
386
  kano: s.kano || null,
387
- valueScore: t.value ?? null,
388
- effortScore: r.value ?? null
387
+ valueScore: n.value ?? null,
388
+ effortScore: i.value ?? null
389
389
  };
390
390
  try {
391
- await n(y({ variables: {
391
+ await r(y({ variables: {
392
392
  id: e.id,
393
- input: i
394
- } })), a(!1);
393
+ input: a
394
+ } })), o(!1);
395
395
  } catch (e) {
396
- _(o(e, "The prioritization could not be saved."));
396
+ _(t(e, "The prioritization could not be saved."));
397
397
  }
398
398
  };
399
399
  return /* @__PURE__ */ T(D, {
400
400
  "data-testid": "feature-prioritization-card",
401
401
  children: [/* @__PURE__ */ T(k, {
402
402
  className: "flex flex-row items-center justify-between gap-2",
403
- children: [/* @__PURE__ */ w(A, { children: "Prioritization" }), !r && /* @__PURE__ */ T(E, {
403
+ children: [/* @__PURE__ */ w(A, { children: "Prioritization" }), !i && /* @__PURE__ */ T(E, {
404
404
  size: "sm",
405
405
  variant: "outline",
406
406
  "data-testid": "feature-prioritization-edit",
@@ -409,19 +409,19 @@ function Y({ feature: e }) {
409
409
  })]
410
410
  }), /* @__PURE__ */ w(O, {
411
411
  className: "space-y-3",
412
- children: r ? /* @__PURE__ */ T(C, { children: [
412
+ children: i ? /* @__PURE__ */ T(C, { children: [
413
413
  /* @__PURE__ */ w(d, {
414
414
  idPrefix: "feature-prio",
415
415
  values: s,
416
416
  onChange: c
417
417
  }),
418
- l && /* @__PURE__ */ w(i, { message: l }),
418
+ l && /* @__PURE__ */ w(a, { message: l }),
419
419
  /* @__PURE__ */ T("div", {
420
420
  className: "flex justify-end gap-2",
421
421
  children: [/* @__PURE__ */ w(E, {
422
422
  size: "sm",
423
423
  variant: "outline",
424
- onClick: () => a(!1),
424
+ onClick: () => o(!1),
425
425
  children: "Cancel"
426
426
  }), /* @__PURE__ */ w(E, {
427
427
  size: "sm",