@burdenoff/microfe-planmagnet 2026.926.2 → 2026.927.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 (53) hide show
  1. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  2. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +14 -4
  3. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  4. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
  5. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +102 -100
  6. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
  7. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
  8. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +95 -94
  9. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
  10. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
  11. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +1 -1
  12. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  13. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -1
  14. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +97 -93
  15. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
  16. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +1 -1
  17. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +84 -73
  18. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +1 -1
  19. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +1 -1
  20. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +13 -8
  21. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -1
  22. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  23. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +129 -125
  24. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  25. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  26. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +112 -109
  27. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  28. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
  29. package/dist/planmagnet/pages/ReportsReportsPagePage.js +72 -83
  30. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
  31. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  32. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +103 -103
  33. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  34. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +1 -1
  35. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +101 -99
  36. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
  37. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  38. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +127 -125
  39. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  40. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  41. package/dist/planmagnet/pages/TasksTasksPagePage.js +8 -11
  42. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  43. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -1
  44. package/dist/planmagnet/pages/TeamTeamPagePage.js +67 -68
  45. package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -1
  46. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +1 -1
  47. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js +1 -5
  48. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +1 -1
  49. package/dist/planmagnet/people/People.d.ts +18 -0
  50. package/dist/planmagnet/people/People.d.ts.map +1 -1
  51. package/dist/planmagnet/people/People.js +26 -12
  52. package/dist/planmagnet/people/People.js.map +1 -1
  53. package/package.json +1 -1
@@ -1,16 +1,17 @@
1
1
  import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
- import { MarkdownEditor as n } from "../../components/MarkdownEditor.js";
3
- import { throwOnError as r } from "../utils/mutationResult.js";
4
- import { WorkItemComments as i } from "../comments/WorkItemComments.js";
5
- import { WorkItemActivity as a } from "../comments/WorkItemActivity.js";
6
- import { useState as o } from "react";
7
- import { FileText as s, Plus as c, X as l } from "lucide-react";
8
- import { gql as u } from "@apollo/client";
9
- import { useMutation as d, useQuery as f } from "@apollo/client/react";
10
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
11
- import { Badge as h, Button as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b, Input as x } from "@burdenoff/fe-libs/ui";
2
+ import { PersonName as n } from "../people/People.js";
3
+ import { MarkdownEditor as r } from "../../components/MarkdownEditor.js";
4
+ import { throwOnError as i } from "../utils/mutationResult.js";
5
+ import { WorkItemComments as a } from "../comments/WorkItemComments.js";
6
+ import { WorkItemActivity as o } from "../comments/WorkItemActivity.js";
7
+ import { useState as s } from "react";
8
+ import { FileText as c, Plus as l, X as u } from "lucide-react";
9
+ import { gql as d } from "@apollo/client";
10
+ import { useMutation as f, useQuery as p } from "@apollo/client/react";
11
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
12
+ import { Badge as g, Button as _, Card as v, CardContent as y, CardHeader as b, CardTitle as x, Input as S } from "@burdenoff/fe-libs/ui";
12
13
  //#region src/planmagnet/pages/TasksTaskDetailPagePage.tsx
13
- var S = u`
14
+ var C = d`
14
15
  query GetWorkItemDetail($workItemId: ID!) {
15
16
  planmagnetWorkItem(id: $workItemId) {
16
17
  id
@@ -22,6 +23,7 @@ var S = u`
22
23
  key
23
24
  assigneeId
24
25
  reporterId
26
+ createdBy
25
27
  sprintId
26
28
  storyPoints
27
29
  estimateMinutes
@@ -32,7 +34,7 @@ var S = u`
32
34
  updatedAt
33
35
  }
34
36
  }
35
- `, C = u`
37
+ `, w = d`
36
38
  query GetWorkItemDocs($workItemId: ID!) {
37
39
  planmagnetWorkItemDocs(workItemId: $workItemId) {
38
40
  id
@@ -42,28 +44,28 @@ var S = u`
42
44
  updatedAt
43
45
  }
44
46
  }
45
- `, w = u`
47
+ `, T = d`
46
48
  mutation CreateDocForWorkItem($input: PlanmagnetCreateDocInput!) {
47
49
  planmagnetCreateDoc(input: $input) {
48
50
  id
49
51
  }
50
52
  }
51
- `, T = u`
53
+ `, E = d`
52
54
  mutation LinkDocToWorkItem($docId: ID!, $workItemId: ID!) {
53
55
  planmagnetLinkDocToWorkItem(docId: $docId, workItemId: $workItemId) {
54
56
  id
55
57
  }
56
58
  }
57
- `, E = u`
59
+ `, D = d`
58
60
  mutation UnlinkDocFromWorkItem($docId: ID!, $workItemId: ID!) {
59
61
  planmagnetUnlinkDocFromWorkItem(docId: $docId, workItemId: $workItemId)
60
62
  }
61
- `, D = {
63
+ `, O = {
62
64
  LOW: "bg-gray-100 text-gray-800",
63
65
  MEDIUM: "bg-blue-100 text-blue-800",
64
66
  HIGH: "bg-orange-100 text-orange-800",
65
67
  CRITICAL: "bg-red-100 text-red-800"
66
- }, O = {
68
+ }, k = {
67
69
  BACKLOG: "bg-gray-100 text-gray-800",
68
70
  TODO: "bg-blue-100 text-blue-800",
69
71
  IN_PROGRESS: "bg-yellow-100 text-yellow-800",
@@ -72,24 +74,24 @@ var S = u`
72
74
  BLOCKED: "bg-red-100 text-red-800",
73
75
  TESTING: "bg-teal-100 text-teal-800",
74
76
  CANCELLED: "bg-gray-100 text-gray-800"
75
- }, k = {
77
+ }, A = {
76
78
  DRAFT: "bg-gray-100 text-gray-800",
77
79
  PUBLISHED: "bg-green-100 text-green-800",
78
80
  ARCHIVED: "bg-gray-100 text-gray-500"
79
81
  };
80
- function A({ workItemId: e }) {
81
- let i = t(), [a, u] = o(!1), [h, S] = o(""), [D, O] = o(""), { data: A, loading: j, error: M, refetch: N } = f(C, {
82
+ function j({ workItemId: e }) {
83
+ let n = t(), [a, o] = s(!1), [d, g] = s(""), [C, O] = s(""), { data: k, loading: j, error: M, refetch: N } = p(w, {
82
84
  variables: { workItemId: e },
83
85
  skip: !e
84
- }), [P, { loading: F }] = d(w), [I] = d(T), [L, { loading: R }] = d(E), [z, B] = o(null), V = A?.planmagnetWorkItemDocs ?? [], H = async () => {
85
- if (!(!h.trim() || !D.trim())) {
86
+ }), [P, { loading: F }] = f(T), [I] = f(E), [L, { loading: R }] = f(D), [z, B] = s(null), V = k?.planmagnetWorkItemDocs ?? [], H = async () => {
87
+ if (!(!d.trim() || !C.trim())) {
86
88
  B(null);
87
89
  try {
88
- let t = (await r(P({ variables: { input: {
89
- title: h.trim(),
90
- content: D.trim()
90
+ let t = (await i(P({ variables: { input: {
91
+ title: d.trim(),
92
+ content: C.trim()
91
93
  } } }))).data?.planmagnetCreateDoc?.id;
92
- t && await r(I({ variables: {
94
+ t && await i(I({ variables: {
93
95
  docId: t,
94
96
  workItemId: e
95
97
  } }));
@@ -97,12 +99,12 @@ function A({ workItemId: e }) {
97
99
  B(e instanceof Error ? e.message : "The doc could not be saved.");
98
100
  return;
99
101
  }
100
- S(""), O(""), u(!1), N();
102
+ g(""), O(""), o(!1), N();
101
103
  }
102
104
  }, U = async (t) => {
103
105
  B(null);
104
106
  try {
105
- await r(L({ variables: {
107
+ await i(L({ variables: {
106
108
  docId: t,
107
109
  workItemId: e
108
110
  } }));
@@ -112,238 +114,238 @@ function A({ workItemId: e }) {
112
114
  }
113
115
  N();
114
116
  };
115
- return /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(y, {
117
+ return /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ h(b, {
116
118
  className: "flex flex-row items-center justify-between space-y-0",
117
- children: [/* @__PURE__ */ p(b, { children: "Linked Docs" }), !a && /* @__PURE__ */ m(g, {
119
+ children: [/* @__PURE__ */ m(x, { children: "Linked Docs" }), !a && /* @__PURE__ */ h(_, {
118
120
  size: "sm",
119
121
  variant: "outline",
120
- onClick: () => u(!0),
121
- children: [/* @__PURE__ */ p(c, { className: "h-4 w-4 mr-1" }), "New Doc"]
122
+ onClick: () => o(!0),
123
+ children: [/* @__PURE__ */ m(l, { className: "h-4 w-4 mr-1" }), "New Doc"]
122
124
  })]
123
- }), /* @__PURE__ */ m(v, {
125
+ }), /* @__PURE__ */ h(y, {
124
126
  className: "space-y-4",
125
127
  children: [
126
- a && /* @__PURE__ */ m("div", {
128
+ a && /* @__PURE__ */ h("div", {
127
129
  className: "space-y-3 rounded-md border border-input p-3",
128
130
  children: [
129
- /* @__PURE__ */ p(x, {
131
+ /* @__PURE__ */ m(S, {
130
132
  placeholder: "Doc title",
131
- value: h,
132
- onChange: (e) => S(e.target.value)
133
+ value: d,
134
+ onChange: (e) => g(e.target.value)
133
135
  }),
134
- /* @__PURE__ */ p(n, {
135
- value: D,
136
+ /* @__PURE__ */ m(r, {
137
+ value: C,
136
138
  onChange: O,
137
139
  placeholder: "Write the spec/doc content...",
138
140
  minHeight: 140
139
141
  }),
140
- /* @__PURE__ */ m("div", {
142
+ /* @__PURE__ */ h("div", {
141
143
  className: "flex gap-2 justify-end",
142
- children: [/* @__PURE__ */ p(g, {
144
+ children: [/* @__PURE__ */ m(_, {
143
145
  size: "sm",
144
146
  variant: "ghost",
145
147
  onClick: () => {
146
- u(!1), S(""), O("");
148
+ o(!1), g(""), O("");
147
149
  },
148
150
  children: "Cancel"
149
- }), /* @__PURE__ */ p(g, {
151
+ }), /* @__PURE__ */ m(_, {
150
152
  size: "sm",
151
- disabled: F || !h.trim() || !D.trim(),
153
+ disabled: F || !d.trim() || !C.trim(),
152
154
  onClick: H,
153
155
  children: F ? "Creating..." : "Create & Link"
154
156
  })]
155
157
  })
156
158
  ]
157
159
  }),
158
- j && /* @__PURE__ */ p("p", {
160
+ j && /* @__PURE__ */ m("p", {
159
161
  className: "text-sm text-muted-foreground",
160
162
  children: "Loading docs..."
161
163
  }),
162
- M && /* @__PURE__ */ m("p", {
164
+ M && /* @__PURE__ */ h("p", {
163
165
  className: "text-sm text-red-500",
164
166
  children: ["Error: ", M.message]
165
167
  }),
166
- z && /* @__PURE__ */ p("p", {
168
+ z && /* @__PURE__ */ m("p", {
167
169
  role: "alert",
168
170
  className: "text-sm text-destructive",
169
171
  children: z
170
172
  }),
171
- !j && !M && V.length === 0 && !a && /* @__PURE__ */ p("p", {
173
+ !j && !M && V.length === 0 && !a && /* @__PURE__ */ m("p", {
172
174
  className: "text-sm text-muted-foreground",
173
175
  children: "No docs linked to this work item yet."
174
176
  }),
175
- V.map((e) => /* @__PURE__ */ m("div", {
177
+ V.map((e) => /* @__PURE__ */ h("div", {
176
178
  className: "flex items-center justify-between gap-3 rounded-md border border-input p-3",
177
- children: [/* @__PURE__ */ m("div", {
179
+ children: [/* @__PURE__ */ h("div", {
178
180
  className: "flex items-center gap-2 min-w-0",
179
- children: [/* @__PURE__ */ p(s, { className: "h-4 w-4 text-muted-foreground shrink-0" }), /* @__PURE__ */ m("div", {
181
+ children: [/* @__PURE__ */ m(c, { className: "h-4 w-4 text-muted-foreground shrink-0" }), /* @__PURE__ */ h("div", {
180
182
  className: "min-w-0",
181
- children: [/* @__PURE__ */ p("button", {
183
+ children: [/* @__PURE__ */ m("button", {
182
184
  type: "button",
183
185
  className: "block max-w-full truncate text-left text-sm font-medium hover:underline",
184
- onClick: () => i(`/docs/doc-detail-page?docId=${encodeURIComponent(e.id)}`),
186
+ onClick: () => n(`/docs/doc-detail-page?docId=${encodeURIComponent(e.id)}`),
185
187
  children: e.title
186
- }), /* @__PURE__ */ m("p", {
188
+ }), /* @__PURE__ */ h("p", {
187
189
  className: "text-xs text-muted-foreground",
188
190
  children: ["v", e.version]
189
191
  })]
190
192
  })]
191
- }), /* @__PURE__ */ m("div", {
193
+ }), /* @__PURE__ */ h("div", {
192
194
  className: "flex items-center gap-2 shrink-0",
193
- children: [/* @__PURE__ */ p("span", {
194
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${k[e.status] ?? ""}`,
195
+ children: [/* @__PURE__ */ m("span", {
196
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${A[e.status] ?? ""}`,
195
197
  children: e.status.toLowerCase()
196
- }), /* @__PURE__ */ p(g, {
198
+ }), /* @__PURE__ */ m(_, {
197
199
  size: "icon",
198
200
  variant: "ghost",
199
201
  disabled: R,
200
202
  onClick: () => U(e.id),
201
203
  "aria-label": `Unlink ${e.title}`,
202
- children: /* @__PURE__ */ p(l, { className: "h-4 w-4" })
204
+ children: /* @__PURE__ */ m(u, { className: "h-4 w-4" })
203
205
  })]
204
206
  })]
205
207
  }, e.id))
206
208
  ]
207
209
  })] });
208
210
  }
209
- function j() {
210
- let { workspaceId: t } = e(), n = new URLSearchParams(window.location.search).get("taskId") ?? "", { data: r, loading: o, error: s } = f(S, {
211
- variables: { workItemId: n },
212
- skip: !t || !n
211
+ function M() {
212
+ let { workspaceId: t } = e(), r = new URLSearchParams(window.location.search).get("taskId") ?? "", { data: i, loading: s, error: c } = p(C, {
213
+ variables: { workItemId: r },
214
+ skip: !t || !r
213
215
  });
214
- if (o && !r) return /* @__PURE__ */ p("div", {
216
+ if (s && !i) return /* @__PURE__ */ m("div", {
215
217
  className: "flex items-center justify-center p-12",
216
- children: /* @__PURE__ */ p("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
218
+ children: /* @__PURE__ */ m("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
217
219
  });
218
- if (s) return /* @__PURE__ */ m("div", {
220
+ if (c) return /* @__PURE__ */ h("div", {
219
221
  className: "p-6 text-red-500",
220
- children: ["Error: ", s.message]
222
+ children: ["Error: ", c.message]
221
223
  });
222
- let c = r?.planmagnetWorkItem;
223
- if (!c) return /* @__PURE__ */ p("div", {
224
+ let l = i?.planmagnetWorkItem;
225
+ if (!l) return /* @__PURE__ */ m("div", {
224
226
  className: "p-6 text-muted-foreground",
225
227
  children: "Task not found."
226
228
  });
227
- let l = c.status.toLowerCase().replace("_", " ");
228
- return /* @__PURE__ */ m("div", {
229
+ let u = l.status.toLowerCase().replace("_", " ");
230
+ return /* @__PURE__ */ h("div", {
229
231
  className: "space-y-6 p-6",
230
- children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
232
+ children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
231
233
  className: "text-2xl font-semibold",
232
- children: c.title
233
- }), /* @__PURE__ */ m("p", {
234
+ children: l.title
235
+ }), /* @__PURE__ */ h("p", {
234
236
  className: "text-sm text-muted-foreground",
235
237
  children: [
236
- c.key,
238
+ l.key,
237
239
  " · ",
238
- c.type.toLowerCase()
240
+ l.type.toLowerCase()
239
241
  ]
240
- })] }), /* @__PURE__ */ m("div", {
242
+ })] }), /* @__PURE__ */ h("div", {
241
243
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
242
- children: [/* @__PURE__ */ m("div", {
244
+ children: [/* @__PURE__ */ h("div", {
243
245
  className: "lg:col-span-2 space-y-6",
244
246
  children: [
245
- /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(y, { children: /* @__PURE__ */ p(b, { children: "Description" }) }), /* @__PURE__ */ p(v, { children: /* @__PURE__ */ p("p", {
247
+ /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, { children: "Description" }) }), /* @__PURE__ */ m(y, { children: /* @__PURE__ */ m("p", {
246
248
  className: "text-sm",
247
- children: c.description ?? "No description provided."
249
+ children: l.description ?? "No description provided."
248
250
  }) })] }),
249
- /* @__PURE__ */ p(A, { workItemId: c.id }),
250
- /* @__PURE__ */ p(i, { workItemId: c.id }),
251
- /* @__PURE__ */ p(a, { workItemId: c.id })
251
+ /* @__PURE__ */ m(j, { workItemId: l.id }),
252
+ /* @__PURE__ */ m(a, { workItemId: l.id }),
253
+ /* @__PURE__ */ m(o, { workItemId: l.id })
252
254
  ]
253
- }), /* @__PURE__ */ p("div", {
255
+ }), /* @__PURE__ */ m("div", {
254
256
  className: "space-y-6",
255
- children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(y, { children: /* @__PURE__ */ p(b, { children: "Details" }) }), /* @__PURE__ */ m(v, {
257
+ children: /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, { children: "Details" }) }), /* @__PURE__ */ h(y, {
256
258
  className: "space-y-3 text-sm",
257
259
  children: [
258
- /* @__PURE__ */ m("div", {
260
+ /* @__PURE__ */ h("div", {
259
261
  className: "flex justify-between",
260
- children: [/* @__PURE__ */ p("span", {
262
+ children: [/* @__PURE__ */ m("span", {
261
263
  className: "text-muted-foreground",
262
264
  children: "Status"
263
- }), /* @__PURE__ */ p("span", {
264
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${O[c.status] ?? ""}`,
265
- children: l
265
+ }), /* @__PURE__ */ m("span", {
266
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${k[l.status] ?? ""}`,
267
+ children: u
266
268
  })]
267
269
  }),
268
- /* @__PURE__ */ m("div", {
270
+ /* @__PURE__ */ h("div", {
269
271
  className: "flex justify-between",
270
- children: [/* @__PURE__ */ p("span", {
272
+ children: [/* @__PURE__ */ m("span", {
271
273
  className: "text-muted-foreground",
272
274
  children: "Priority"
273
- }), /* @__PURE__ */ p("span", {
274
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${D[c.priority] ?? ""}`,
275
- children: c.priority.toLowerCase()
275
+ }), /* @__PURE__ */ m("span", {
276
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${O[l.priority] ?? ""}`,
277
+ children: l.priority.toLowerCase()
276
278
  })]
277
279
  }),
278
- /* @__PURE__ */ m("div", {
280
+ /* @__PURE__ */ h("div", {
279
281
  className: "flex justify-between",
280
- children: [/* @__PURE__ */ p("span", {
282
+ children: [/* @__PURE__ */ m("span", {
281
283
  className: "text-muted-foreground",
282
284
  children: "Type"
283
- }), /* @__PURE__ */ p(h, {
285
+ }), /* @__PURE__ */ m(g, {
284
286
  variant: "outline",
285
287
  className: "capitalize",
286
- children: c.type.toLowerCase()
288
+ children: l.type.toLowerCase()
287
289
  })]
288
290
  }),
289
- /* @__PURE__ */ m("div", {
291
+ /* @__PURE__ */ h("div", {
290
292
  className: "flex justify-between",
291
- children: [/* @__PURE__ */ p("span", {
293
+ children: [/* @__PURE__ */ m("span", {
292
294
  className: "text-muted-foreground",
293
295
  children: "Story Points"
294
- }), /* @__PURE__ */ p("span", {
296
+ }), /* @__PURE__ */ m("span", {
295
297
  className: "font-medium",
296
- children: c.storyPoints ?? 0
298
+ children: l.storyPoints ?? 0
297
299
  })]
298
300
  }),
299
- /* @__PURE__ */ m("div", {
301
+ /* @__PURE__ */ h("div", {
300
302
  className: "flex justify-between",
301
- children: [/* @__PURE__ */ p("span", {
303
+ children: [/* @__PURE__ */ m("span", {
302
304
  className: "text-muted-foreground",
303
305
  children: "Assignee"
304
- }), /* @__PURE__ */ p("span", { children: c.assigneeId ?? "Unassigned" })]
306
+ }), l.assigneeId ? /* @__PURE__ */ m(n, { id: l.assigneeId }) : /* @__PURE__ */ m("span", { children: "Unassigned" })]
305
307
  }),
306
- /* @__PURE__ */ m("div", {
308
+ /* @__PURE__ */ h("div", {
307
309
  className: "flex justify-between",
308
- children: [/* @__PURE__ */ p("span", {
310
+ children: [/* @__PURE__ */ m("span", {
309
311
  className: "text-muted-foreground",
310
312
  children: "Reporter"
311
- }), /* @__PURE__ */ p("span", { children: c.reporterId ?? "Unknown" })]
313
+ }), /* @__PURE__ */ m(n, { id: l.reporterId ?? l.createdBy })]
312
314
  }),
313
- /* @__PURE__ */ m("div", {
315
+ /* @__PURE__ */ h("div", {
314
316
  className: "flex justify-between",
315
- children: [/* @__PURE__ */ p("span", {
317
+ children: [/* @__PURE__ */ m("span", {
316
318
  className: "text-muted-foreground",
317
319
  children: "Key"
318
- }), /* @__PURE__ */ p("span", { children: c.key })]
320
+ }), /* @__PURE__ */ m("span", { children: l.key })]
319
321
  }),
320
- /* @__PURE__ */ m("div", {
322
+ /* @__PURE__ */ h("div", {
321
323
  className: "flex justify-between",
322
- children: [/* @__PURE__ */ p("span", {
324
+ children: [/* @__PURE__ */ m("span", {
323
325
  className: "text-muted-foreground",
324
326
  children: "Due Date"
325
- }), /* @__PURE__ */ p("span", { children: c.dueDate ?? "Not set" })]
327
+ }), /* @__PURE__ */ m("span", { children: l.dueDate ?? "Not set" })]
326
328
  }),
327
- /* @__PURE__ */ m("div", {
329
+ /* @__PURE__ */ h("div", {
328
330
  className: "flex justify-between",
329
- children: [/* @__PURE__ */ p("span", {
331
+ children: [/* @__PURE__ */ m("span", {
330
332
  className: "text-muted-foreground",
331
333
  children: "Created"
332
- }), /* @__PURE__ */ p("span", { children: c.createdAt })]
334
+ }), /* @__PURE__ */ m("span", { children: l.createdAt })]
333
335
  }),
334
- /* @__PURE__ */ m("div", {
336
+ /* @__PURE__ */ h("div", {
335
337
  className: "flex justify-between",
336
- children: [/* @__PURE__ */ p("span", {
338
+ children: [/* @__PURE__ */ m("span", {
337
339
  className: "text-muted-foreground",
338
340
  children: "Updated"
339
- }), /* @__PURE__ */ p("span", { children: c.updatedAt })]
341
+ }), /* @__PURE__ */ m("span", { children: l.updatedAt })]
340
342
  }),
341
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("span", {
343
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("span", {
342
344
  className: "text-muted-foreground text-xs",
343
345
  children: "Labels"
344
- }), /* @__PURE__ */ p("div", {
346
+ }), /* @__PURE__ */ m("div", {
345
347
  className: "flex gap-1 mt-1 flex-wrap",
346
- children: (c.labels ?? []).map((e) => /* @__PURE__ */ p("span", {
348
+ children: (l.labels ?? []).map((e) => /* @__PURE__ */ m("span", {
347
349
  className: "text-xs px-2 py-0.5 rounded bg-muted",
348
350
  children: e
349
351
  }, e))
@@ -355,6 +357,6 @@ function j() {
355
357
  });
356
358
  }
357
359
  //#endregion
358
- export { j as TasksTaskDetailPagePage };
360
+ export { M as TasksTaskDetailPagePage };
359
361
 
360
362
  //# sourceMappingURL=TasksTaskDetailPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TasksTaskDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { throwOnError } from '../utils/mutationResult';\nimport { WorkItemComments } from '../comments/WorkItemComments';\nimport { WorkItemActivity } from '../comments/WorkItemActivity';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { FileText, Plus, X } from 'lucide-react';\nimport { MarkdownEditor } from '#src/components/MarkdownEditor';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\nconst GET_WORK_ITEM = gql`\n query GetWorkItemDetail($workItemId: ID!) {\n planmagnetWorkItem(id: $workItemId) {\n id\n title\n description\n type\n status\n priority\n key\n assigneeId\n reporterId\n sprintId\n storyPoints\n estimateMinutes\n dueDate\n labels\n tags\n createdAt\n updatedAt\n }\n }\n`;\n\nconst GET_WORK_ITEM_DOCS = gql`\n query GetWorkItemDocs($workItemId: ID!) {\n planmagnetWorkItemDocs(workItemId: $workItemId) {\n id\n title\n status\n version\n updatedAt\n }\n }\n`;\n\nconst CREATE_DOC = gql`\n mutation CreateDocForWorkItem($input: PlanmagnetCreateDocInput!) {\n planmagnetCreateDoc(input: $input) {\n id\n }\n }\n`;\n\nconst LINK_DOC_TO_WORK_ITEM = gql`\n mutation LinkDocToWorkItem($docId: ID!, $workItemId: ID!) {\n planmagnetLinkDocToWorkItem(docId: $docId, workItemId: $workItemId) {\n id\n }\n }\n`;\n\nconst UNLINK_DOC_FROM_WORK_ITEM = gql`\n mutation UnlinkDocFromWorkItem($docId: ID!, $workItemId: ID!) {\n planmagnetUnlinkDocFromWorkItem(docId: $docId, workItemId: $workItemId)\n }\n`;\n\ninterface WorkItemNode {\n id: string;\n title: string;\n description: string | null;\n type: string;\n status: string;\n priority: string;\n key: string;\n assigneeId: string | null;\n reporterId: string | null;\n sprintId: string | null;\n storyPoints: number | null;\n estimateMinutes: number | null;\n dueDate: string | null;\n labels: string[];\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\ninterface WorkItemDocNode {\n id: string;\n title: string;\n status: string;\n version: number;\n updatedAt: string;\n}\n\nconst priorityColor: Record<string, string> = {\n LOW: 'bg-gray-100 text-gray-800',\n MEDIUM: 'bg-blue-100 text-blue-800',\n HIGH: 'bg-orange-100 text-orange-800',\n CRITICAL: 'bg-red-100 text-red-800',\n};\n\nconst statusColor: Record<string, string> = {\n BACKLOG: 'bg-gray-100 text-gray-800',\n TODO: 'bg-blue-100 text-blue-800',\n IN_PROGRESS: 'bg-yellow-100 text-yellow-800',\n IN_REVIEW: 'bg-purple-100 text-purple-800',\n DONE: 'bg-green-100 text-green-800',\n BLOCKED: 'bg-red-100 text-red-800',\n TESTING: 'bg-teal-100 text-teal-800',\n CANCELLED: 'bg-gray-100 text-gray-800',\n};\n\nconst docStatusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PUBLISHED: 'bg-green-100 text-green-800',\n ARCHIVED: 'bg-gray-100 text-gray-500',\n};\n\n/**\n * Linked-docs panel (BOFF-4443): create a doc and link it to this work item\n * in one action, view currently-linked docs, and unlink one. Reads/writes go\n * through the real planmagnetWorkItemDocs / planmagnetCreateDoc /\n * planmagnetLinkDocToWorkItem / planmagnetUnlinkDocFromWorkItem GraphQL\n * fields — no fabricated data. Full doc editing (revisions, revert) lives on\n * a dedicated doc detail view; this panel is scoped to linking.\n */\nfunction LinkedDocsPanel({ workItemId }: { workItemId: string }) {\n const navigate = usePlanMagnetNavigate();\n const [isComposing, setIsComposing] = useState(false);\n const [newTitle, setNewTitle] = useState('');\n const [newContent, setNewContent] = useState('');\n\n const { data, loading, error, refetch } = useQuery<{\n planmagnetWorkItemDocs: WorkItemDocNode[];\n }>(GET_WORK_ITEM_DOCS, {\n variables: { workItemId },\n skip: !workItemId,\n });\n\n const [createDoc, { loading: creating }] = useMutation(CREATE_DOC);\n const [linkDoc] = useMutation(LINK_DOC_TO_WORK_ITEM);\n const [unlinkDoc, { loading: unlinking }] = useMutation(UNLINK_DOC_FROM_WORK_ITEM);\n // A refused mutation resolves with { error } (fe-libs errorPolicy 'all');\n // the composer used to clear itself as if the doc had been saved.\n const [actionError, setActionError] = useState<string | null>(null);\n\n const docs = data?.planmagnetWorkItemDocs ?? [];\n\n const handleCreateAndLink = async () => {\n if (!newTitle.trim() || !newContent.trim()) return;\n setActionError(null);\n try {\n const result = await throwOnError(\n createDoc({ variables: { input: { title: newTitle.trim(), content: newContent.trim() } } })\n );\n const docId = result.data?.planmagnetCreateDoc?.id;\n if (docId) {\n await throwOnError(linkDoc({ variables: { docId, workItemId } }));\n }\n } catch (e) {\n setActionError(e instanceof Error ? e.message : 'The doc could not be saved.');\n return;\n }\n setNewTitle('');\n setNewContent('');\n setIsComposing(false);\n void refetch();\n };\n\n const handleUnlink = async (docId: string) => {\n setActionError(null);\n try {\n await throwOnError(unlinkDoc({ variables: { docId, workItemId } }));\n } catch (e) {\n setActionError(e instanceof Error ? e.message : 'The doc could not be unlinked.');\n return;\n }\n void refetch();\n };\n\n return (\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0\">\n <CardTitle>Linked Docs</CardTitle>\n {!isComposing && (\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsComposing(true)}>\n <Plus className=\"h-4 w-4 mr-1\" />\n New Doc\n </Button>\n )}\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isComposing && (\n <div className=\"space-y-3 rounded-md border border-input p-3\">\n <Input\n placeholder=\"Doc title\"\n value={newTitle}\n onChange={(e) => setNewTitle(e.target.value)}\n />\n <MarkdownEditor\n value={newContent}\n onChange={setNewContent}\n placeholder=\"Write the spec/doc content...\"\n minHeight={140}\n />\n <div className=\"flex gap-2 justify-end\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setIsComposing(false);\n setNewTitle('');\n setNewContent('');\n }}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n disabled={creating || !newTitle.trim() || !newContent.trim()}\n onClick={handleCreateAndLink}\n >\n {creating ? 'Creating...' : 'Create & Link'}\n </Button>\n </div>\n </div>\n )}\n\n {loading && <p className=\"text-sm text-muted-foreground\">Loading docs...</p>}\n {error && <p className=\"text-sm text-red-500\">Error: {error.message}</p>}\n {actionError && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {actionError}\n </p>\n )}\n {!loading && !error && docs.length === 0 && !isComposing && (\n <p className=\"text-sm text-muted-foreground\">No docs linked to this work item yet.</p>\n )}\n {docs.map((doc) => (\n <div\n key={doc.id}\n className=\"flex items-center justify-between gap-3 rounded-md border border-input p-3\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <FileText className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n <div className=\"min-w-0\">\n <button\n type=\"button\"\n className=\"block max-w-full truncate text-left text-sm font-medium hover:underline\"\n onClick={() =>\n navigate(`/docs/doc-detail-page?docId=${encodeURIComponent(doc.id)}`)\n }\n >\n {doc.title}\n </button>\n <p className=\"text-xs text-muted-foreground\">v{doc.version}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${docStatusColor[doc.status] ?? ''}`}\n >\n {doc.status.toLowerCase()}\n </span>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n disabled={unlinking}\n onClick={() => handleUnlink(doc.id)}\n aria-label={`Unlink ${doc.title}`}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n}\n\nexport function TasksTaskDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n // In a real app, workItemId comes from route params.\n const workItemId = new URLSearchParams(window.location.search).get('taskId') ?? '';\n\n const { data, loading, error } = useQuery<{\n planmagnetWorkItem: WorkItemNode;\n }>(GET_WORK_ITEM, {\n variables: { workItemId },\n skip: !workspaceId || !workItemId,\n });\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const task = data?.planmagnetWorkItem;\n if (!task) return <div className=\"p-6 text-muted-foreground\">Task not found.</div>;\n\n const statusDisplay = task.status.toLowerCase().replace('_', ' ');\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">{task.title}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {task.key} &middot; {task.type.toLowerCase()}\n </p>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm\">{task.description ?? 'No description provided.'}</p>\n </CardContent>\n </Card>\n <LinkedDocsPanel workItemId={task.id} />\n <WorkItemComments workItemId={task.id} />\n <WorkItemActivity workItemId={task.id} />\n </div>\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[task.status] ?? ''}`}\n >\n {statusDisplay}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Priority</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${priorityColor[task.priority] ?? ''}`}\n >\n {task.priority.toLowerCase()}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Type</span>\n <Badge variant=\"outline\" className=\"capitalize\">\n {task.type.toLowerCase()}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Story Points</span>\n <span className=\"font-medium\">{task.storyPoints ?? 0}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Assignee</span>\n <span>{task.assigneeId ?? 'Unassigned'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Reporter</span>\n <span>{task.reporterId ?? 'Unknown'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Key</span>\n <span>{task.key}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Due Date</span>\n <span>{task.dueDate ?? 'Not set'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{task.createdAt}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{task.updatedAt}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground text-xs\">Labels</span>\n <div className=\"flex gap-1 mt-1 flex-wrap\">\n {(task.labels ?? []).map((l) => (\n <span key={l} className=\"text-xs px-2 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,IAAM,IAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;GAwBnB,IAAqB,CAAG;;;;;;;;;;GAYxB,IAAa,CAAG;;;;;;GAQhB,IAAwB,CAAG;;;;;;GAQ3B,IAA4B,CAAG;;;;GAkC/B,IAAwC;CAC5C,KAAK;CACL,QAAQ;CACR,MAAM;CACN,UAAU;CACX,EAEK,IAAsC;CAC1C,SAAS;CACT,MAAM;CACN,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACT,SAAS;CACT,WAAW;CACZ,EAEK,IAAyC;CAC7C,OAAO;CACP,WAAW;CACX,UAAU;CACX;AAUD,SAAS,EAAgB,EAAE,iBAAsC;CAC/D,IAAM,IAAW,GAAuB,EAClC,CAAC,GAAa,KAAkB,EAAS,GAAM,EAC/C,CAAC,GAAU,KAAe,EAAS,GAAG,EACtC,CAAC,GAAY,KAAiB,EAAS,GAAG,EAE1C,EAAE,SAAM,YAAS,UAAO,eAAY,EAEvC,GAAoB;EACrB,WAAW,EAAE,eAAY;EACzB,MAAM,CAAC;EACR,CAAC,EAEI,CAAC,GAAW,EAAE,SAAS,OAAc,EAAY,EAAW,EAC5D,CAAC,KAAW,EAAY,EAAsB,EAC9C,CAAC,GAAW,EAAE,SAAS,OAAe,EAAY,EAA0B,EAG5E,CAAC,GAAa,KAAkB,EAAwB,KAAK,EAE7D,IAAO,GAAM,0BAA0B,EAAE,EAEzC,IAAsB,YAAY;AAClC,SAAC,EAAS,MAAM,IAAI,CAAC,EAAW,MAAM,GAC1C;KAAe,KAAK;AACpB,OAAI;IAIF,IAAM,KAHS,MAAM,EACnB,EAAU,EAAE,WAAW,EAAE,OAAO;KAAE,OAAO,EAAS,MAAM;KAAE,SAAS,EAAW,MAAM;KAAE,EAAE,EAAE,CAAC,CAC5F,EACoB,MAAM,qBAAqB;AAChD,IAAI,KACF,MAAM,EAAa,EAAQ,EAAE,WAAW;KAAE;KAAO;KAAY,EAAE,CAAC,CAAC;YAE5D,GAAG;AACV,MAAe,aAAa,QAAQ,EAAE,UAAU,8BAA8B;AAC9E;;AAKG,GAHL,EAAY,GAAG,EACf,EAAc,GAAG,EACjB,EAAe,GAAM,EAChB,GAAS;;IAGV,IAAe,OAAO,MAAkB;AAC5C,IAAe,KAAK;AACpB,MAAI;AACF,SAAM,EAAa,EAAU,EAAE,WAAW;IAAE;IAAO;IAAY,EAAE,CAAC,CAAC;WAC5D,GAAG;AACV,KAAe,aAAa,QAAQ,EAAE,UAAU,iCAAiC;AACjF;;AAEG,KAAS;;AAGhB,QACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EAAY,WAAU;YAAtB,CACE,kBAAC,GAAD,EAAA,UAAW,eAAuB,CAAA,EACjC,CAAC,KACA,kBAAC,GAAD;GAAQ,MAAK;GAAK,SAAQ;GAAU,eAAe,EAAe,GAAK;aAAvE,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,UAE1B;KAEA;KACb,kBAAC,GAAD;EAAa,WAAU;YAAvB;GACG,KACC,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MACE,aAAY;MACZ,OAAO;MACP,WAAW,MAAM,EAAY,EAAE,OAAO,MAAM;MAC5C,CAAA;KACF,kBAAC,GAAD;MACE,OAAO;MACP,UAAU;MACV,aAAY;MACZ,WAAW;MACX,CAAA;KACF,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OACE,MAAK;OACL,SAAQ;OACR,eAAe;AAGb,QAFA,EAAe,GAAM,EACrB,EAAY,GAAG,EACf,EAAc,GAAG;;iBAEpB;OAEQ,CAAA,EACT,kBAAC,GAAD;OACE,MAAK;OACL,UAAU,KAAY,CAAC,EAAS,MAAM,IAAI,CAAC,EAAW,MAAM;OAC5D,SAAS;iBAER,IAAW,gBAAgB;OACrB,CAAA,CACL;;KACF;;GAGP,KAAW,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAmB,CAAA;GAC3E,KAAS,kBAAC,KAAD;IAAG,WAAU;cAAb,CAAoC,WAAQ,EAAM,QAAY;;GACvE,KACC,kBAAC,KAAD;IAAG,MAAK;IAAQ,WAAU;cACvB;IACC,CAAA;GAEL,CAAC,KAAW,CAAC,KAAS,EAAK,WAAW,KAAK,CAAC,KAC3C,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAyC,CAAA;GAEvF,EAAK,KAAK,MACT,kBAAC,OAAD;IAEE,WAAU;cAFZ,CAIE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAU,WAAU,0CAA2C,CAAA,EAC/D,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,UAAD;OACE,MAAK;OACL,WAAU;OACV,eACE,EAAS,+BAA+B,mBAAmB,EAAI,GAAG,GAAG;iBAGtE,EAAI;OACE,CAAA,EACT,kBAAC,KAAD;OAAG,WAAU;iBAAb,CAA6C,KAAE,EAAI,QAAY;SAC3D;QACF;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MACE,WAAW,+CAA+C,EAAe,EAAI,WAAW;gBAEvF,EAAI,OAAO,aAAa;MACpB,CAAA,EACP,kBAAC,GAAD;MACE,MAAK;MACL,SAAQ;MACR,UAAU;MACV,eAAe,EAAa,EAAI,GAAG;MACnC,cAAY,UAAU,EAAI;gBAE1B,kBAAC,GAAD,EAAG,WAAU,WAAY,CAAA;MAClB,CAAA,CACL;OACF;MAlCC,EAAI,GAkCL,CACN;GACU;IACT,EAAA,CAAA;;AAIX,SAAgB,IAA0B;CACxC,IAAM,EAAE,mBAAgB,GAAe,EAGjC,IAAa,IAAI,gBAAgB,OAAO,SAAS,OAAO,CAAC,IAAI,SAAS,IAAI,IAE1E,EAAE,SAAM,YAAS,aAAU,EAE9B,GAAe;EAChB,WAAW,EAAE,eAAY;EACzB,MAAM,CAAC,KAAe,CAAC;EACxB,CAAC;AAMF,KAAI,KAAW,CAAC,EACd,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA;AAIV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAkC,WAAQ,EAAM,QAAc;;CAGvE,IAAM,IAAO,GAAM;AACnB,KAAI,CAAC,EAAM,QAAO,kBAAC,OAAD;EAAK,WAAU;YAA4B;EAAqB,CAAA;CAElF,IAAM,IAAgB,EAAK,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;AAEjE,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aAA0B,EAAK;GAAW,CAAA,EACxD,kBAAC,KAAD;GAAG,WAAU;aAAb;IACG,EAAK;IAAI;IAAW,EAAK,KAAK,aAAa;IAC1C;KACA,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,eAAuB,CAAA,EACvB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,KAAD;MAAG,WAAU;gBAAW,EAAK,eAAe;MAA+B,CAAA,EAC/D,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAiB,YAAY,EAAK,IAAM,CAAA;KACxC,kBAAC,GAAD,EAAkB,YAAY,EAAK,IAAM,CAAA;KACzC,kBAAC,GAAD,EAAkB,YAAY,EAAK,IAAM,CAAA;KACrC;OACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,WAAmB,CAAA,EACnB,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAa,CAAA,EACrD,kBAAC,QAAD;QACE,WAAW,+CAA+C,EAAY,EAAK,WAAW;kBAErF;QACI,CAAA,CACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD;QACE,WAAW,+CAA+C,EAAc,EAAK,aAAa;kBAEzF,EAAK,SAAS,aAAa;QACvB,CAAA,CACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAW,CAAA,EACnD,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAK,KAAK,aAAa;QAClB,CAAA,CACJ;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAmB,CAAA,EAC3D,kBAAC,QAAD;QAAM,WAAU;kBAAe,EAAK,eAAe;QAAS,CAAA,CACxD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD,EAAA,UAAO,EAAK,cAAc,cAAoB,CAAA,CAC1C;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD,EAAA,UAAO,EAAK,cAAc,WAAiB,CAAA,CACvC;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAU,CAAA,EAClD,kBAAC,QAAD,EAAA,UAAO,EAAK,KAAW,CAAA,CACnB;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD,EAAA,UAAO,EAAK,WAAW,WAAiB,CAAA,CACpC;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAc,CAAA,EACtD,kBAAC,QAAD,EAAA,UAAO,EAAK,WAAiB,CAAA,CACzB;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAc,CAAA,EACtD,kBAAC,QAAD,EAAA,UAAO,EAAK,WAAiB,CAAA,CACzB;;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,QAAD;OAAM,WAAU;iBAAgC;OAAa,CAAA,EAC7D,kBAAC,OAAD;OAAK,WAAU;kBACX,EAAK,UAAU,EAAE,EAAE,KAAK,MACxB,kBAAC,QAAD;QAAc,WAAU;kBACrB;QACI,EAFI,EAEJ,CACP;OACE,CAAA,CACF,EAAA,CAAA;MACM;OACT,EAAA,CAAA;IACH,CAAA,CACF;KACF"}
1
+ {"version":3,"file":"TasksTaskDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { throwOnError } from '../utils/mutationResult';\nimport { WorkItemComments } from '../comments/WorkItemComments';\nimport { WorkItemActivity } from '../comments/WorkItemActivity';\nimport { PersonName } from '../people/People';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { FileText, Plus, X } from 'lucide-react';\nimport { MarkdownEditor } from '#src/components/MarkdownEditor';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\nconst GET_WORK_ITEM = gql`\n query GetWorkItemDetail($workItemId: ID!) {\n planmagnetWorkItem(id: $workItemId) {\n id\n title\n description\n type\n status\n priority\n key\n assigneeId\n reporterId\n createdBy\n sprintId\n storyPoints\n estimateMinutes\n dueDate\n labels\n tags\n createdAt\n updatedAt\n }\n }\n`;\n\nconst GET_WORK_ITEM_DOCS = gql`\n query GetWorkItemDocs($workItemId: ID!) {\n planmagnetWorkItemDocs(workItemId: $workItemId) {\n id\n title\n status\n version\n updatedAt\n }\n }\n`;\n\nconst CREATE_DOC = gql`\n mutation CreateDocForWorkItem($input: PlanmagnetCreateDocInput!) {\n planmagnetCreateDoc(input: $input) {\n id\n }\n }\n`;\n\nconst LINK_DOC_TO_WORK_ITEM = gql`\n mutation LinkDocToWorkItem($docId: ID!, $workItemId: ID!) {\n planmagnetLinkDocToWorkItem(docId: $docId, workItemId: $workItemId) {\n id\n }\n }\n`;\n\nconst UNLINK_DOC_FROM_WORK_ITEM = gql`\n mutation UnlinkDocFromWorkItem($docId: ID!, $workItemId: ID!) {\n planmagnetUnlinkDocFromWorkItem(docId: $docId, workItemId: $workItemId)\n }\n`;\n\ninterface WorkItemNode {\n id: string;\n title: string;\n description: string | null;\n type: string;\n status: string;\n priority: string;\n key: string;\n assigneeId: string | null;\n reporterId: string | null;\n createdBy: string;\n sprintId: string | null;\n storyPoints: number | null;\n estimateMinutes: number | null;\n dueDate: string | null;\n labels: string[];\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\ninterface WorkItemDocNode {\n id: string;\n title: string;\n status: string;\n version: number;\n updatedAt: string;\n}\n\nconst priorityColor: Record<string, string> = {\n LOW: 'bg-gray-100 text-gray-800',\n MEDIUM: 'bg-blue-100 text-blue-800',\n HIGH: 'bg-orange-100 text-orange-800',\n CRITICAL: 'bg-red-100 text-red-800',\n};\n\nconst statusColor: Record<string, string> = {\n BACKLOG: 'bg-gray-100 text-gray-800',\n TODO: 'bg-blue-100 text-blue-800',\n IN_PROGRESS: 'bg-yellow-100 text-yellow-800',\n IN_REVIEW: 'bg-purple-100 text-purple-800',\n DONE: 'bg-green-100 text-green-800',\n BLOCKED: 'bg-red-100 text-red-800',\n TESTING: 'bg-teal-100 text-teal-800',\n CANCELLED: 'bg-gray-100 text-gray-800',\n};\n\nconst docStatusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PUBLISHED: 'bg-green-100 text-green-800',\n ARCHIVED: 'bg-gray-100 text-gray-500',\n};\n\n/**\n * Linked-docs panel (BOFF-4443): create a doc and link it to this work item\n * in one action, view currently-linked docs, and unlink one. Reads/writes go\n * through the real planmagnetWorkItemDocs / planmagnetCreateDoc /\n * planmagnetLinkDocToWorkItem / planmagnetUnlinkDocFromWorkItem GraphQL\n * fields — no fabricated data. Full doc editing (revisions, revert) lives on\n * a dedicated doc detail view; this panel is scoped to linking.\n */\nfunction LinkedDocsPanel({ workItemId }: { workItemId: string }) {\n const navigate = usePlanMagnetNavigate();\n const [isComposing, setIsComposing] = useState(false);\n const [newTitle, setNewTitle] = useState('');\n const [newContent, setNewContent] = useState('');\n\n const { data, loading, error, refetch } = useQuery<{\n planmagnetWorkItemDocs: WorkItemDocNode[];\n }>(GET_WORK_ITEM_DOCS, {\n variables: { workItemId },\n skip: !workItemId,\n });\n\n const [createDoc, { loading: creating }] = useMutation(CREATE_DOC);\n const [linkDoc] = useMutation(LINK_DOC_TO_WORK_ITEM);\n const [unlinkDoc, { loading: unlinking }] = useMutation(UNLINK_DOC_FROM_WORK_ITEM);\n // A refused mutation resolves with { error } (fe-libs errorPolicy 'all');\n // the composer used to clear itself as if the doc had been saved.\n const [actionError, setActionError] = useState<string | null>(null);\n\n const docs = data?.planmagnetWorkItemDocs ?? [];\n\n const handleCreateAndLink = async () => {\n if (!newTitle.trim() || !newContent.trim()) return;\n setActionError(null);\n try {\n const result = await throwOnError(\n createDoc({ variables: { input: { title: newTitle.trim(), content: newContent.trim() } } })\n );\n const docId = result.data?.planmagnetCreateDoc?.id;\n if (docId) {\n await throwOnError(linkDoc({ variables: { docId, workItemId } }));\n }\n } catch (e) {\n setActionError(e instanceof Error ? e.message : 'The doc could not be saved.');\n return;\n }\n setNewTitle('');\n setNewContent('');\n setIsComposing(false);\n void refetch();\n };\n\n const handleUnlink = async (docId: string) => {\n setActionError(null);\n try {\n await throwOnError(unlinkDoc({ variables: { docId, workItemId } }));\n } catch (e) {\n setActionError(e instanceof Error ? e.message : 'The doc could not be unlinked.');\n return;\n }\n void refetch();\n };\n\n return (\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0\">\n <CardTitle>Linked Docs</CardTitle>\n {!isComposing && (\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsComposing(true)}>\n <Plus className=\"h-4 w-4 mr-1\" />\n New Doc\n </Button>\n )}\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isComposing && (\n <div className=\"space-y-3 rounded-md border border-input p-3\">\n <Input\n placeholder=\"Doc title\"\n value={newTitle}\n onChange={(e) => setNewTitle(e.target.value)}\n />\n <MarkdownEditor\n value={newContent}\n onChange={setNewContent}\n placeholder=\"Write the spec/doc content...\"\n minHeight={140}\n />\n <div className=\"flex gap-2 justify-end\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setIsComposing(false);\n setNewTitle('');\n setNewContent('');\n }}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n disabled={creating || !newTitle.trim() || !newContent.trim()}\n onClick={handleCreateAndLink}\n >\n {creating ? 'Creating...' : 'Create & Link'}\n </Button>\n </div>\n </div>\n )}\n\n {loading && <p className=\"text-sm text-muted-foreground\">Loading docs...</p>}\n {error && <p className=\"text-sm text-red-500\">Error: {error.message}</p>}\n {actionError && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {actionError}\n </p>\n )}\n {!loading && !error && docs.length === 0 && !isComposing && (\n <p className=\"text-sm text-muted-foreground\">No docs linked to this work item yet.</p>\n )}\n {docs.map((doc) => (\n <div\n key={doc.id}\n className=\"flex items-center justify-between gap-3 rounded-md border border-input p-3\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <FileText className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n <div className=\"min-w-0\">\n <button\n type=\"button\"\n className=\"block max-w-full truncate text-left text-sm font-medium hover:underline\"\n onClick={() =>\n navigate(`/docs/doc-detail-page?docId=${encodeURIComponent(doc.id)}`)\n }\n >\n {doc.title}\n </button>\n <p className=\"text-xs text-muted-foreground\">v{doc.version}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${docStatusColor[doc.status] ?? ''}`}\n >\n {doc.status.toLowerCase()}\n </span>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n disabled={unlinking}\n onClick={() => handleUnlink(doc.id)}\n aria-label={`Unlink ${doc.title}`}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n}\n\nexport function TasksTaskDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n // In a real app, workItemId comes from route params.\n const workItemId = new URLSearchParams(window.location.search).get('taskId') ?? '';\n\n const { data, loading, error } = useQuery<{\n planmagnetWorkItem: WorkItemNode;\n }>(GET_WORK_ITEM, {\n variables: { workItemId },\n skip: !workspaceId || !workItemId,\n });\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const task = data?.planmagnetWorkItem;\n if (!task) return <div className=\"p-6 text-muted-foreground\">Task not found.</div>;\n\n const statusDisplay = task.status.toLowerCase().replace('_', ' ');\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">{task.title}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {task.key} &middot; {task.type.toLowerCase()}\n </p>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm\">{task.description ?? 'No description provided.'}</p>\n </CardContent>\n </Card>\n <LinkedDocsPanel workItemId={task.id} />\n <WorkItemComments workItemId={task.id} />\n <WorkItemActivity workItemId={task.id} />\n </div>\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[task.status] ?? ''}`}\n >\n {statusDisplay}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Priority</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${priorityColor[task.priority] ?? ''}`}\n >\n {task.priority.toLowerCase()}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Type</span>\n <Badge variant=\"outline\" className=\"capitalize\">\n {task.type.toLowerCase()}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Story Points</span>\n <span className=\"font-medium\">{task.storyPoints ?? 0}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Assignee</span>\n {/* Names, not UUIDs (BOFF-7946) — the board card the user clicked already showed the name. */}\n {task.assigneeId ? <PersonName id={task.assigneeId} /> : <span>Unassigned</span>}\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Reporter</span>\n {/* No PlanMagnet form sets reporterId, so a UI-created task has none; its creator reported it. */}\n <PersonName id={task.reporterId ?? task.createdBy} />\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Key</span>\n <span>{task.key}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Due Date</span>\n <span>{task.dueDate ?? 'Not set'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{task.createdAt}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{task.updatedAt}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground text-xs\">Labels</span>\n <div className=\"flex gap-1 mt-1 flex-wrap\">\n {(task.labels ?? []).map((l) => (\n <span key={l} className=\"text-xs px-2 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AAwIA,wBAAgB,kBAAkB,4CAyOjC"}
1
+ {"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AAyIA,wBAAgB,kBAAkB,4CAqPjC"}