@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,7 +1,7 @@
1
- import { throwOnError as e } from "../utils/mutationResult.js";
2
- import { ConfirmButton as t, ErrorLine as n } from "./ConfirmButton.js";
3
- import { enumLabel as r } from "./WorkItemControls.js";
4
- import { isForbidden as i, mutationErrorMessage as a } from "../utils/graphqlErrors.js";
1
+ import { isForbidden as e, mutationErrorMessage as t } from "../utils/graphqlErrors.js";
2
+ import { 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
5
  import { useSyncProviderCapabilities as o } from "../integrations/useSyncProviderCapabilities.js";
6
6
  import { CONFLICT_RESOLUTIONS as s, GITHUB_FIELD_MAPPING_DEFAULTS as c, SYNC_DIRECTIONS as l, directionLabel as u, directionSupported as d, isValidGithubOwner as f, isValidGithubRepo as p, parseGithubFieldMapping as m } from "../integrations/syncTypes.js";
7
7
  import { useState as h } from "react";
@@ -27,7 +27,7 @@ function F({ status: e }) {
27
27
  return /* @__PURE__ */ D(k, {
28
28
  variant: P[e] ?? "outline",
29
29
  className: "text-xs",
30
- children: r(e)
30
+ children: a(e)
31
31
  });
32
32
  }
33
33
  var I = {
@@ -39,14 +39,14 @@ function L({ status: e }) {
39
39
  return /* @__PURE__ */ D(k, {
40
40
  variant: I[e] ?? "secondary",
41
41
  className: "text-xs",
42
- children: r(e)
42
+ children: a(e)
43
43
  });
44
44
  }
45
45
  function R({ status: e }) {
46
46
  return /* @__PURE__ */ D(k, {
47
47
  variant: e === "OPEN" ? "warning" : "secondary",
48
48
  className: "text-xs",
49
- children: r(e)
49
+ children: a(e)
50
50
  });
51
51
  }
52
52
  function z({ text: e, max: t = 140, className: n = "text-muted-foreground", testId: r }) {
@@ -126,14 +126,14 @@ var V = w`
126
126
  }
127
127
  }
128
128
  `;
129
- function H({ syncId: t, onResult: r, size: o = "sm" }) {
129
+ function H({ syncId: r, onResult: a, size: o = "sm" }) {
130
130
  let [s, c] = T(V, { refetchQueries: [...M, ...N] }), [l, u] = h(null), d = async () => {
131
131
  u(null);
132
132
  try {
133
- let n = await e(s({ variables: { id: t } }));
134
- n.data && r?.(n.data.planmagnetStartSync);
135
- } catch (e) {
136
- u(i(e) ? "Your role can view integrations but not change them." : a(e, "The sync could not be started."));
133
+ let e = await n(s({ variables: { id: r } }));
134
+ e.data && a?.(e.data.planmagnetStartSync);
135
+ } catch (n) {
136
+ u(e(n) ? "Your role can view integrations but not change them." : t(n, "The sync could not be started."));
137
137
  }
138
138
  };
139
139
  return /* @__PURE__ */ O("div", {
@@ -145,7 +145,7 @@ function H({ syncId: t, onResult: r, size: o = "sm" }) {
145
145
  onClick: () => void d(),
146
146
  "data-testid": "sync-run-now",
147
147
  children: [c.loading ? /* @__PURE__ */ D(y, { className: "mr-1 h-4 w-4 animate-spin" }) : /* @__PURE__ */ D(S, { className: "mr-1 h-4 w-4" }), "Run now"]
148
- }), l && /* @__PURE__ */ D(n, { message: l })]
148
+ }), l && /* @__PURE__ */ D(i, { message: l })]
149
149
  });
150
150
  }
151
151
  function ue({ result: e }) {
@@ -193,13 +193,13 @@ var U = w`
193
193
  }
194
194
  }
195
195
  `;
196
- function W({ syncId: t, status: r }) {
197
- let [o, s] = T(U, { refetchQueries: M }), [c, l] = T(de, { refetchQueries: M }), [u, d] = h(null), f = s.loading || l.loading, p = r === "PAUSED", m = async () => {
196
+ function W({ syncId: r, status: a }) {
197
+ let [o, s] = T(U, { refetchQueries: M }), [c, l] = T(de, { refetchQueries: M }), [u, d] = h(null), f = s.loading || l.loading, p = a === "PAUSED", m = async () => {
198
198
  d(null);
199
199
  try {
200
- p ? await e(c({ variables: { id: t } })) : await e(o({ variables: { id: t } }));
201
- } catch (e) {
202
- d(i(e) ? "Your role can view integrations but not change them." : a(e, `The sync could not be ${p ? "resumed" : "paused"}.`));
200
+ p ? await n(c({ variables: { id: r } })) : await n(o({ variables: { id: r } }));
201
+ } catch (n) {
202
+ d(e(n) ? "Your role can view integrations but not change them." : t(n, `The sync could not be ${p ? "resumed" : "paused"}.`));
203
203
  }
204
204
  };
205
205
  return /* @__PURE__ */ O("div", {
@@ -211,7 +211,7 @@ function W({ syncId: t, status: r }) {
211
211
  onClick: () => void m(),
212
212
  "data-testid": p ? "sync-resume" : "sync-pause",
213
213
  children: [f ? /* @__PURE__ */ D(y, { className: "mr-1 h-4 w-4 animate-spin" }) : D(p ? x : b, { className: "mr-1 h-4 w-4" }), p ? "Resume" : "Pause"]
214
- }), u && /* @__PURE__ */ D(n, { message: u })]
214
+ }), u && /* @__PURE__ */ D(i, { message: u })]
215
215
  });
216
216
  }
217
217
  var G = w`
@@ -223,14 +223,14 @@ var G = w`
223
223
  }
224
224
  }
225
225
  `;
226
- function K({ syncId: t }) {
227
- let [r, o] = T(G), [s, c] = h(null), [l, u] = h(null), d = async () => {
226
+ function K({ syncId: r }) {
227
+ let [a, o] = T(G), [s, c] = h(null), [l, u] = h(null), d = async () => {
228
228
  u(null), c(null);
229
229
  try {
230
- let n = await e(r({ variables: { id: t } }));
231
- n.data && c(n.data.planmagnetTestExternalSync);
232
- } catch (e) {
233
- u(i(e) ? "Your role can view integrations but not change them." : a(e, "The connection could not be tested."));
230
+ let e = await n(a({ variables: { id: r } }));
231
+ e.data && c(e.data.planmagnetTestExternalSync);
232
+ } catch (n) {
233
+ u(e(n) ? "Your role can view integrations but not change them." : t(n, "The connection could not be tested."));
234
234
  }
235
235
  };
236
236
  return /* @__PURE__ */ O("div", {
@@ -253,7 +253,7 @@ function K({ syncId: t }) {
253
253
  s.rateLimitRemaining !== null && ` (${s.rateLimitRemaining} calls remaining)`
254
254
  ]
255
255
  }),
256
- l && /* @__PURE__ */ D(n, { message: l })
256
+ l && /* @__PURE__ */ D(i, { message: l })
257
257
  ]
258
258
  });
259
259
  }
@@ -262,18 +262,18 @@ var q = w`
262
262
  planmagnetDeleteExternalSync(id: $id)
263
263
  }
264
264
  `;
265
- function J({ syncId: r, label: o, onDeleted: s }) {
265
+ function J({ syncId: a, label: o, onDeleted: s }) {
266
266
  let [c, { loading: l }] = T(q, { refetchQueries: M }), [u, d] = h(null), f = async () => {
267
267
  d(null);
268
268
  try {
269
- await e(c({ variables: { id: r } })), s?.();
270
- } catch (e) {
271
- d(i(e) ? "Your role can view integrations but not change them." : a(e, "The sync could not be deleted."));
269
+ await n(c({ variables: { id: a } })), s?.();
270
+ } catch (n) {
271
+ d(e(n) ? "Your role can view integrations but not change them." : t(n, "The sync could not be deleted."));
272
272
  }
273
273
  };
274
274
  return /* @__PURE__ */ O("div", {
275
275
  className: "flex flex-col items-end gap-1",
276
- children: [/* @__PURE__ */ D(t, {
276
+ children: [/* @__PURE__ */ D(r, {
277
277
  label: "Delete",
278
278
  variant: "outline",
279
279
  icon: /* @__PURE__ */ D(C, { className: "mr-1 h-4 w-4" }),
@@ -284,7 +284,7 @@ function J({ syncId: r, label: o, onDeleted: s }) {
284
284
  disabled: l,
285
285
  onConfirm: () => void f(),
286
286
  testId: "sync-delete"
287
- }), u && /* @__PURE__ */ D(n, { message: u })]
287
+ }), u && /* @__PURE__ */ D(i, { message: u })]
288
288
  });
289
289
  }
290
290
  var fe = w`
@@ -298,16 +298,16 @@ var fe = w`
298
298
  }
299
299
  }
300
300
  `;
301
- function Y({ conflictId: t }) {
302
- let [r, o] = T(fe, { refetchQueries: N }), [s, c] = h(null), [l, u] = h(null), d = async (n) => {
303
- c(null), u(n);
301
+ function Y({ conflictId: r }) {
302
+ let [a, o] = T(fe, { refetchQueries: N }), [s, c] = h(null), [l, u] = h(null), d = async (i) => {
303
+ c(null), u(i);
304
304
  try {
305
- await e(r({ variables: {
306
- id: t,
307
- resolution: n
305
+ await n(a({ variables: {
306
+ id: r,
307
+ resolution: i
308
308
  } }));
309
- } catch (e) {
310
- c(i(e) ? "Your role can view integrations but not change them." : a(e, "The conflict could not be resolved."));
309
+ } catch (n) {
310
+ c(e(n) ? "Your role can view integrations but not change them." : t(n, "The conflict could not be resolved."));
311
311
  } finally {
312
312
  u(null);
313
313
  }
@@ -342,7 +342,7 @@ function Y({ conflictId: t }) {
342
342
  children: [l === "MANUAL" && /* @__PURE__ */ D(y, { className: "mr-1 h-4 w-4 animate-spin" }), "Dismiss (manual)"]
343
343
  })
344
344
  ]
345
- }), s && /* @__PURE__ */ D(n, { message: s })]
345
+ }), s && /* @__PURE__ */ D(i, { message: s })]
346
346
  });
347
347
  }
348
348
  var pe = {
@@ -369,23 +369,23 @@ var pe = {
369
369
  }
370
370
  }
371
371
  `;
372
- function X({ sync: t }) {
373
- let [g, _] = h(!1), v = t.provider === "GITHUB", { capabilities: y } = o(), b = y.find((e) => e.provider === t.provider), x = b ? l.filter((e) => d(b, e)) : l, S = m(t.fieldMapping), C = t.syncFilters ? JSON.stringify(t.syncFilters, null, 2) : "", [w, E] = h(t.direction), [k, P] = h(t.conflictStrategy), [F, I] = h(S.priority), [L, R] = h(S.dueDate), [z, B] = h(C), [V, H] = h(null), [ue, U] = h(""), [de, W] = h(""), [G, K] = h(""), [q, J] = h(null), { data: fe } = te(he, {
374
- variables: { id: t.id },
372
+ function X({ sync: r }) {
373
+ let [g, _] = h(!1), v = r.provider === "GITHUB", { capabilities: y } = o(), b = y.find((e) => e.provider === r.provider), x = b ? l.filter((e) => d(b, e)) : l, S = m(r.fieldMapping), C = r.syncFilters ? JSON.stringify(r.syncFilters, null, 2) : "", [w, E] = h(r.direction), [k, P] = h(r.conflictStrategy), [F, I] = h(S.priority), [L, R] = h(S.dueDate), [z, B] = h(C), [V, H] = h(null), [ue, U] = h(""), [de, W] = h(""), [G, K] = h(""), [q, J] = h(null), { data: fe } = te(he, {
374
+ variables: { id: r.id },
375
375
  skip: !g || !v
376
376
  }), Y = fe?.planmagnetExternalSync?.connectionConfig, X = typeof Y?.owner == "string" ? Y.owner : "", _e = typeof Y?.repo == "string" ? Y.repo : "", Z = ue || X, Q = de || _e, ve = () => {
377
- E(t.direction), P(t.conflictStrategy), I(S.priority), R(S.dueDate), B(C), H(null), U(""), W(""), K(""), J(null);
377
+ E(r.direction), P(r.conflictStrategy), I(S.priority), R(S.dueDate), B(C), H(null), U(""), W(""), K(""), J(null);
378
378
  }, [ye, $] = T(ge, { refetchQueries: [...M, ...N] }), be = v && !!Y && (Z !== X || Q !== _e || G.trim() !== ""), xe = F.trim() !== S.priority || L.trim() !== S.dueDate, Se = z.trim() !== C.trim(), Ce = async () => {
379
379
  J(null), H(null);
380
- let n = {};
381
- if (w !== t.direction && (n.direction = w), k !== t.conflictStrategy && (n.conflictStrategy = k), xe && (n.fieldMapping = {
380
+ let i = {};
381
+ if (w !== r.direction && (i.direction = w), k !== r.conflictStrategy && (i.conflictStrategy = k), xe && (i.fieldMapping = {
382
382
  ...F.trim() ? { priority: F.trim() } : {},
383
383
  ...L.trim() ? { dueDate: L.trim() } : {}
384
384
  }), Se) {
385
385
  let e = z.trim();
386
- if (!e) n.syncFilters = null;
386
+ if (!e) i.syncFilters = null;
387
387
  else try {
388
- n.syncFilters = JSON.parse(e);
388
+ i.syncFilters = JSON.parse(e);
389
389
  } catch {
390
390
  H("Sync filters must be valid JSON.");
391
391
  return;
@@ -400,23 +400,23 @@ function X({ sync: t }) {
400
400
  J("Owner and repo must look like real GitHub names (letters, digits, \"-\", \"_\", \".\").");
401
401
  return;
402
402
  }
403
- n.connectionConfig = {
403
+ i.connectionConfig = {
404
404
  token: G.trim(),
405
405
  owner: Z.trim(),
406
406
  repo: Q.trim()
407
407
  };
408
408
  }
409
- if (Object.keys(n).length === 0) {
409
+ if (Object.keys(i).length === 0) {
410
410
  _(!1);
411
411
  return;
412
412
  }
413
413
  try {
414
- await e(ye({ variables: {
415
- id: t.id,
416
- input: n
414
+ await n(ye({ variables: {
415
+ id: r.id,
416
+ input: i
417
417
  } })), _(!1);
418
- } catch (e) {
419
- J(i(e) ? "Your role can view integrations but not change them." : a(e, "The sync could not be saved."));
418
+ } catch (n) {
419
+ J(e(n) ? "Your role can view integrations but not change them." : t(n, "The sync could not be saved."));
420
420
  }
421
421
  };
422
422
  return /* @__PURE__ */ O(ne, {
@@ -469,7 +469,7 @@ function X({ sync: t }) {
469
469
  onChange: (e) => P(e.target.value),
470
470
  children: s.map((e) => /* @__PURE__ */ D("option", {
471
471
  value: e,
472
- children: r(e)
472
+ children: a(e)
473
473
  }, e))
474
474
  }),
475
475
  /* @__PURE__ */ D("p", {
@@ -542,7 +542,7 @@ function X({ sync: t }) {
542
542
  value: z,
543
543
  onChange: (e) => B(e.target.value)
544
544
  }),
545
- V && /* @__PURE__ */ D(n, { message: V })
545
+ V && /* @__PURE__ */ D(i, { message: V })
546
546
  ] }),
547
547
  v && /* @__PURE__ */ O("div", {
548
548
  className: "space-y-2 rounded-md border p-3",
@@ -591,7 +591,7 @@ function X({ sync: t }) {
591
591
  })] })
592
592
  ]
593
593
  }),
594
- q && /* @__PURE__ */ D(n, { message: q })
594
+ q && /* @__PURE__ */ D(i, { message: q })
595
595
  ]
596
596
  }),
597
597
  /* @__PURE__ */ O(ae, { children: [/* @__PURE__ */ D(A, {
@@ -1,7 +1,7 @@
1
1
  import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
- import { throwOnError as t } from "../utils/mutationResult.js";
3
- import { ErrorLine as n } from "../controls/ConfirmButton.js";
4
- import { isForbidden as r, mutationErrorMessage as i } from "../utils/graphqlErrors.js";
2
+ import { isForbidden as t, mutationErrorMessage as n } from "../utils/graphqlErrors.js";
3
+ import { throwOnError as r } from "../utils/mutationResult.js";
4
+ import { ErrorLine as i } from "../controls/ConfirmButton.js";
5
5
  import { useDeferredValue as a, useEffect as o, useState as s } from "react";
6
6
  import { ExternalLink as c, MessageCircle as l, MessagesSquare as u, Unlink as d } from "lucide-react";
7
7
  import { gql as f } from "@apollo/client";
@@ -46,19 +46,19 @@ function P({ workItemId: c, workItemKey: l, workItemTitle: d, assigneeId: f }) {
46
46
  if (_) {
47
47
  H(null);
48
48
  try {
49
- let e = await t(G({ variables: { input: {
49
+ let e = await r(G({ variables: { input: {
50
50
  workspaceId: _,
51
51
  type: "GROUP",
52
52
  title: `${l}: ${d}`,
53
53
  participantIds: [...z]
54
- } } })), n = e.data?.createConversation?.conversation?.id;
55
- if (!e.data?.createConversation?.success || !n) throw Error("The conversation could not be created.");
56
- await t(q({ variables: {
54
+ } } })), t = e.data?.createConversation?.conversation?.id;
55
+ if (!e.data?.createConversation?.success || !t) throw Error("The conversation could not be created.");
56
+ await r(q({ variables: {
57
57
  workItemId: c,
58
- conversationId: n
58
+ conversationId: t
59
59
  } })), F(!1), L("");
60
60
  } catch (e) {
61
- H(r(e) ? "Your role cannot start a conversation in this workspace." : i(e, "The discussion could not be started."));
61
+ H(t(e) ? "Your role cannot start a conversation in this workspace." : n(e, "The discussion could not be started."));
62
62
  }
63
63
  }
64
64
  };
@@ -142,7 +142,7 @@ function P({ workItemId: c, workItemKey: l, workItemTitle: d, assigneeId: f }) {
142
142
  })
143
143
  ]
144
144
  }),
145
- V && /* @__PURE__ */ m(n, { message: V }),
145
+ V && /* @__PURE__ */ m(i, { message: V }),
146
146
  /* @__PURE__ */ m(E, { children: /* @__PURE__ */ m(g, {
147
147
  onClick: () => void Z(),
148
148
  disabled: z.size === 0 || Y,
@@ -153,16 +153,16 @@ function P({ workItemId: c, workItemKey: l, workItemTitle: d, assigneeId: f }) {
153
153
  })]
154
154
  });
155
155
  }
156
- function F({ workItemId: e, workItemKey: r, workItemTitle: a, assigneeId: o, discussionConversationId: u }) {
156
+ function F({ workItemId: e, workItemKey: t, workItemTitle: a, assigneeId: o, discussionConversationId: u }) {
157
157
  let [f, x] = p(j, N), [S, C] = s(null), w = async () => {
158
158
  C(null);
159
159
  try {
160
- await t(f({ variables: {
160
+ await r(f({ variables: {
161
161
  workItemId: e,
162
162
  conversationId: null
163
163
  } }));
164
164
  } catch (e) {
165
- C(i(e, "The discussion could not be unlinked."));
165
+ C(n(e, "The discussion could not be unlinked."));
166
166
  }
167
167
  };
168
168
  return /* @__PURE__ */ h(_, {
@@ -175,7 +175,7 @@ function F({ workItemId: e, workItemKey: r, workItemTitle: a, assigneeId: o, dis
175
175
  }), "Discussion"]
176
176
  }) }), /* @__PURE__ */ h(v, {
177
177
  className: "space-y-3",
178
- children: [S && /* @__PURE__ */ m(n, { message: S }), u ? /* @__PURE__ */ h("div", {
178
+ children: [S && /* @__PURE__ */ m(i, { message: S }), u ? /* @__PURE__ */ h("div", {
179
179
  className: "flex flex-wrap items-center justify-between gap-2",
180
180
  children: [/* @__PURE__ */ h("a", {
181
181
  href: `/conversations/${encodeURIComponent(u)}`,
@@ -203,7 +203,7 @@ function F({ workItemId: e, workItemKey: r, workItemTitle: a, assigneeId: o, dis
203
203
  children: "Not linked to a conversation yet. Starting one creates a group chat for this task in Conversations."
204
204
  }), /* @__PURE__ */ m(P, {
205
205
  workItemId: e,
206
- workItemKey: r,
206
+ workItemKey: t,
207
207
  workItemTitle: a,
208
208
  assigneeId: o
209
209
  })]
@@ -1,7 +1,7 @@
1
1
  import { PersonName as e } from "../people/People.js";
2
- import { throwOnError as t } from "../utils/mutationResult.js";
3
- import { ConfirmButton as n, ErrorLine as r } from "../controls/ConfirmButton.js";
4
- import { isConflict as i, isForbidden as a, mutationErrorMessage as o } from "../utils/graphqlErrors.js";
2
+ import { isConflict as t, isForbidden as n, mutationErrorMessage as r } from "../utils/graphqlErrors.js";
3
+ import { throwOnError as i } from "../utils/mutationResult.js";
4
+ import { ConfirmButton as a, ErrorLine as o } from "../controls/ConfirmButton.js";
5
5
  import { lineDiff as s } from "../utils/lineDiff.js";
6
6
  import { DocDiffHunks as c } from "./DocDiffView.js";
7
7
  import { useState as l } from "react";
@@ -62,12 +62,12 @@ function N({ suggestion: u, docTitle: f, docContent: m, revisions: y, currentUse
62
62
  }), [D, k] = p(j, {
63
63
  refetchQueries: [O],
64
64
  awaitRefetchQueries: !0
65
- }), N = y.find((e) => e.version === u.baseVersion), P = N?.content ?? m, F = N?.title ?? f, I = s(P, u.proposedContent), L = u.proposedTitle !== null && u.proposedTitle !== F, R = u.authorId === b, z = async (e, n) => {
65
+ }), N = y.find((e) => e.version === u.baseVersion), P = N?.content ?? m, F = N?.title ?? f, I = s(P, u.proposedContent), L = u.proposedTitle !== null && u.proposedTitle !== F, R = u.authorId === b, z = async (e, a) => {
66
66
  w(null);
67
67
  try {
68
- await t(e());
68
+ await i(e());
69
69
  } catch (e) {
70
- w(a(e) ? "Your role cannot decide this suggestion." : i(e) ? "The doc changed since this was suggested." : o(e, n));
70
+ w(n(e) ? "Your role cannot decide this suggestion." : t(e) ? "The doc changed since this was suggested." : r(e, a));
71
71
  }
72
72
  };
73
73
  return /* @__PURE__ */ _("li", {
@@ -119,7 +119,7 @@ function N({ suggestion: u, docTitle: f, docContent: m, revisions: y, currentUse
119
119
  children: x ? "Hide diff" : "Show diff"
120
120
  })]
121
121
  }),
122
- C && /* @__PURE__ */ g(r, { message: C }),
122
+ C && /* @__PURE__ */ g(o, { message: C }),
123
123
  x && /* @__PURE__ */ _("div", {
124
124
  className: "space-y-1",
125
125
  children: [L && /* @__PURE__ */ _("p", {
@@ -147,7 +147,7 @@ function N({ suggestion: u, docTitle: f, docContent: m, revisions: y, currentUse
147
147
  u.status === "OPEN" && /* @__PURE__ */ _("div", {
148
148
  className: "flex flex-wrap justify-end gap-2 border-t border-border-default pt-2",
149
149
  children: [
150
- R && /* @__PURE__ */ g(n, {
150
+ R && /* @__PURE__ */ g(a, {
151
151
  label: "Withdraw",
152
152
  icon: /* @__PURE__ */ g(d, {
153
153
  className: "h-3.5 w-3.5",
@@ -187,7 +187,7 @@ function N({ suggestion: u, docTitle: f, docContent: m, revisions: y, currentUse
187
187
  ]
188
188
  });
189
189
  }
190
- function P({ docId: e, status: t, docTitle: n, docContent: i, revisions: o, currentUserId: s }) {
190
+ function P({ docId: e, status: t, docTitle: r, docContent: i, revisions: a, currentUserId: s }) {
191
191
  let [c, u] = l(!1), { data: d, loading: f, error: p, fetchMore: h } = m(k, {
192
192
  variables: {
193
193
  docId: e,
@@ -229,7 +229,7 @@ function P({ docId: e, status: t, docTitle: n, docContent: i, revisions: o, curr
229
229
  className: "text-sm text-muted-foreground",
230
230
  children: "Loading…"
231
231
  }),
232
- p && /* @__PURE__ */ g(r, { message: a(p) ? "Your role cannot see this doc’s suggestions." : `Suggestions could not be loaded: ${p.message}` }),
232
+ p && /* @__PURE__ */ g(o, { message: n(p) ? "Your role cannot see this doc’s suggestions." : `Suggestions could not be loaded: ${p.message}` }),
233
233
  y && b.length === 0 && /* @__PURE__ */ g("p", {
234
234
  className: "text-sm text-muted-foreground",
235
235
  children: t === "OPEN" ? "No open suggestions." : t === "ACCEPTED" ? "None accepted yet." : "None rejected yet."
@@ -238,9 +238,9 @@ function P({ docId: e, status: t, docTitle: n, docContent: i, revisions: o, curr
238
238
  className: "space-y-2",
239
239
  children: b.map((e) => /* @__PURE__ */ g(N, {
240
240
  suggestion: e,
241
- docTitle: n,
241
+ docTitle: r,
242
242
  docContent: i,
243
- revisions: o,
243
+ revisions: a,
244
244
  currentUserId: s
245
245
  }, e.id))
246
246
  }),
@@ -1,5 +1,5 @@
1
- import { ErrorLine as e } from "../controls/ConfirmButton.js";
2
- import { isForbidden as t } from "../utils/graphqlErrors.js";
1
+ import { isForbidden as e } from "../utils/graphqlErrors.js";
2
+ import { ErrorLine as t } from "../controls/ConfirmButton.js";
3
3
  import { DocDiffHunks as n } from "./DocDiffView.js";
4
4
  import { useState as r } from "react";
5
5
  import { GitCompare as i } from "lucide-react";
@@ -90,7 +90,7 @@ function f({ docId: a, versions: f }) {
90
90
  "data-testid": "doc-version-compare-run",
91
91
  children: y.loading ? "Comparing…" : "Compare"
92
92
  }),
93
- y.error && /* @__PURE__ */ c(e, { message: t(y.error) ? "Your role cannot compare versions of this doc." : `The comparison could not be loaded: ${y.error.message}` }),
93
+ y.error && /* @__PURE__ */ c(t, { message: e(y.error) ? "Your role cannot compare versions of this doc." : `The comparison could not be loaded: ${y.error.message}` }),
94
94
  x && /* @__PURE__ */ c(n, {
95
95
  hunks: x.hunks,
96
96
  truncated: x.truncated,
@@ -0,0 +1,12 @@
1
+ export declare function DeliveryForecastCard({ workspaceId, projectId,
2
+ /** When set, the card offers an "only this sprint's items" toggle that narrows
3
+ * `scope.sprintId` to this sprint instead of the project's full remaining scope. Pass the
4
+ * active/current sprint of whatever page hosts this card — omit it where no single sprint
5
+ * is in context (the card then always forecasts the project's full open scope). */
6
+ sprintId, sprintName, }: {
7
+ workspaceId?: string | null;
8
+ projectId: string;
9
+ sprintId?: string | null;
10
+ sprintName?: string | null;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=DeliveryForecastCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeliveryForecastCard.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/forecast/DeliveryForecastCard.tsx"],"names":[],"mappings":"AAkFA,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,SAAS;AACT;;;oFAGoF;AACpF,QAAQ,EACR,UAAU,GACX,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,2CAwMA"}