@burdenoff/microfe-planmagnet 2026.925.6 → 2026.925.8

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 (32) hide show
  1. package/dist/generated/wspace-types.d.ts +17 -0
  2. package/dist/generated/wspace-types.d.ts.map +1 -1
  3. package/dist/planmagnet/board/ProjectBoard.d.ts +5 -0
  4. package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -0
  5. package/dist/planmagnet/board/ProjectBoard.js +492 -0
  6. package/dist/planmagnet/board/ProjectBoard.js.map +1 -0
  7. package/dist/planmagnet/create/CreateDialogs.d.ts.map +1 -1
  8. package/dist/planmagnet/create/CreateDialogs.js +118 -117
  9. package/dist/planmagnet/create/CreateDialogs.js.map +1 -1
  10. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.d.ts.map +1 -1
  11. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js.map +1 -1
  12. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
  13. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +322 -280
  14. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +1 -1
  15. package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +1 -1
  16. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +1 -1
  17. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +1 -1
  18. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
  19. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  20. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +147 -126
  21. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  22. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  23. package/dist/planmagnet/pages/TasksTasksPagePage.js +129 -93
  24. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  25. package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
  26. package/dist/planmagnet/sprints/SprintControls.js +202 -201
  27. package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
  28. package/dist/planmagnet/utils/mutationResult.d.ts +16 -0
  29. package/dist/planmagnet/utils/mutationResult.d.ts.map +1 -0
  30. package/dist/planmagnet/utils/mutationResult.js +10 -0
  31. package/dist/planmagnet/utils/mutationResult.js.map +1 -0
  32. package/package.json +3 -2
@@ -1,13 +1,14 @@
1
1
  import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
- import { MarkdownEditor as t } from "../../components/MarkdownEditor.js";
3
- import { useState as n } from "react";
4
- import { FileText as r, Plus as i, X as a } from "lucide-react";
5
- import { gql as o } from "@apollo/client";
6
- import { useMutation as s, useQuery as c } from "@apollo/client/react";
7
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
- import { Badge as d, Button as f, Card as p, CardContent as m, CardHeader as h, CardTitle as g, Input as _ } from "@burdenoff/fe-libs/ui";
2
+ import { throwOnError as t } from "../utils/mutationResult.js";
3
+ import { MarkdownEditor as n } from "../../components/MarkdownEditor.js";
4
+ import { useState as r } from "react";
5
+ import { FileText as i, Plus as a, X as o } from "lucide-react";
6
+ import { gql as s } from "@apollo/client";
7
+ import { useMutation as c, useQuery as l } from "@apollo/client/react";
8
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ import { Badge as f, Button as p, Card as m, CardContent as h, CardHeader as g, CardTitle as _, Input as v } from "@burdenoff/fe-libs/ui";
9
10
  //#region src/planmagnet/pages/TasksTaskDetailPagePage.tsx
10
- var v = o`
11
+ var y = s`
11
12
  query GetWorkItemDetail($workItemId: ID!) {
12
13
  planmagnetWorkItem(id: $workItemId) {
13
14
  id
@@ -29,7 +30,7 @@ var v = o`
29
30
  updatedAt
30
31
  }
31
32
  }
32
- `, y = o`
33
+ `, b = s`
33
34
  query GetWorkItemDocs($workItemId: ID!) {
34
35
  planmagnetWorkItemDocs(workItemId: $workItemId) {
35
36
  id
@@ -39,28 +40,28 @@ var v = o`
39
40
  updatedAt
40
41
  }
41
42
  }
42
- `, b = o`
43
+ `, x = s`
43
44
  mutation CreateDocForWorkItem($input: PlanmagnetCreateDocInput!) {
44
45
  planmagnetCreateDoc(input: $input) {
45
46
  id
46
47
  }
47
48
  }
48
- `, x = o`
49
+ `, S = s`
49
50
  mutation LinkDocToWorkItem($docId: ID!, $workItemId: ID!) {
50
51
  planmagnetLinkDocToWorkItem(docId: $docId, workItemId: $workItemId) {
51
52
  id
52
53
  }
53
54
  }
54
- `, S = o`
55
+ `, C = s`
55
56
  mutation UnlinkDocFromWorkItem($docId: ID!, $workItemId: ID!) {
56
57
  planmagnetUnlinkDocFromWorkItem(docId: $docId, workItemId: $workItemId)
57
58
  }
58
- `, C = {
59
+ `, w = {
59
60
  LOW: "bg-gray-100 text-gray-800",
60
61
  MEDIUM: "bg-blue-100 text-blue-800",
61
62
  HIGH: "bg-orange-100 text-orange-800",
62
63
  CRITICAL: "bg-red-100 text-red-800"
63
- }, w = {
64
+ }, T = {
64
65
  BACKLOG: "bg-gray-100 text-gray-800",
65
66
  TODO: "bg-blue-100 text-blue-800",
66
67
  IN_PROGRESS: "bg-yellow-100 text-yellow-800",
@@ -69,137 +70,157 @@ var v = o`
69
70
  BLOCKED: "bg-red-100 text-red-800",
70
71
  TESTING: "bg-teal-100 text-teal-800",
71
72
  CANCELLED: "bg-gray-100 text-gray-800"
72
- }, T = {
73
+ }, E = {
73
74
  DRAFT: "bg-gray-100 text-gray-800",
74
75
  PUBLISHED: "bg-green-100 text-green-800",
75
76
  ARCHIVED: "bg-gray-100 text-gray-500"
76
77
  };
77
- function E({ workItemId: e }) {
78
- let [o, d] = n(!1), [v, C] = n(""), [w, E] = n(""), { data: D, loading: O, error: k, refetch: A } = c(y, {
78
+ function D({ workItemId: e }) {
79
+ let [s, f] = r(!1), [y, w] = r(""), [T, D] = r(""), { data: O, loading: k, error: A, refetch: j } = l(b, {
79
80
  variables: { workItemId: e },
80
81
  skip: !e
81
- }), [j, { loading: M }] = s(b), [N] = s(x), [P, { loading: F }] = s(S), I = D?.planmagnetWorkItemDocs ?? [], L = async () => {
82
- if (!v.trim() || !w.trim()) return;
83
- let t = (await j({ variables: { input: {
84
- title: v.trim(),
85
- content: w.trim()
86
- } } })).data?.planmagnetCreateDoc?.id;
87
- t && await N({ variables: {
88
- docId: t,
89
- workItemId: e
90
- } }), C(""), E(""), d(!1), A();
91
- }, R = async (t) => {
92
- await P({ variables: {
93
- docId: t,
94
- workItemId: e
95
- } }), A();
82
+ }), [M, { loading: N }] = c(x), [P] = c(S), [F, { loading: I }] = c(C), [L, R] = r(null), z = O?.planmagnetWorkItemDocs ?? [], B = async () => {
83
+ if (!(!y.trim() || !T.trim())) {
84
+ R(null);
85
+ try {
86
+ let n = (await t(M({ variables: { input: {
87
+ title: y.trim(),
88
+ content: T.trim()
89
+ } } }))).data?.planmagnetCreateDoc?.id;
90
+ n && await t(P({ variables: {
91
+ docId: n,
92
+ workItemId: e
93
+ } }));
94
+ } catch (e) {
95
+ R(e instanceof Error ? e.message : "The doc could not be saved.");
96
+ return;
97
+ }
98
+ w(""), D(""), f(!1), j();
99
+ }
100
+ }, V = async (n) => {
101
+ R(null);
102
+ try {
103
+ await t(F({ variables: {
104
+ docId: n,
105
+ workItemId: e
106
+ } }));
107
+ } catch (e) {
108
+ R(e instanceof Error ? e.message : "The doc could not be unlinked.");
109
+ return;
110
+ }
111
+ j();
96
112
  };
97
- return /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
113
+ return /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ d(g, {
98
114
  className: "flex flex-row items-center justify-between space-y-0",
99
- children: [/* @__PURE__ */ l(g, { children: "Linked Docs" }), !o && /* @__PURE__ */ u(f, {
115
+ children: [/* @__PURE__ */ u(_, { children: "Linked Docs" }), !s && /* @__PURE__ */ d(p, {
100
116
  size: "sm",
101
117
  variant: "outline",
102
- onClick: () => d(!0),
103
- children: [/* @__PURE__ */ l(i, { className: "h-4 w-4 mr-1" }), "New Doc"]
118
+ onClick: () => f(!0),
119
+ children: [/* @__PURE__ */ u(a, { className: "h-4 w-4 mr-1" }), "New Doc"]
104
120
  })]
105
- }), /* @__PURE__ */ u(m, {
121
+ }), /* @__PURE__ */ d(h, {
106
122
  className: "space-y-4",
107
123
  children: [
108
- o && /* @__PURE__ */ u("div", {
124
+ s && /* @__PURE__ */ d("div", {
109
125
  className: "space-y-3 rounded-md border border-input p-3",
110
126
  children: [
111
- /* @__PURE__ */ l(_, {
127
+ /* @__PURE__ */ u(v, {
112
128
  placeholder: "Doc title",
113
- value: v,
114
- onChange: (e) => C(e.target.value)
129
+ value: y,
130
+ onChange: (e) => w(e.target.value)
115
131
  }),
116
- /* @__PURE__ */ l(t, {
117
- value: w,
118
- onChange: E,
132
+ /* @__PURE__ */ u(n, {
133
+ value: T,
134
+ onChange: D,
119
135
  placeholder: "Write the spec/doc content...",
120
136
  minHeight: 140
121
137
  }),
122
- /* @__PURE__ */ u("div", {
138
+ /* @__PURE__ */ d("div", {
123
139
  className: "flex gap-2 justify-end",
124
- children: [/* @__PURE__ */ l(f, {
140
+ children: [/* @__PURE__ */ u(p, {
125
141
  size: "sm",
126
142
  variant: "ghost",
127
143
  onClick: () => {
128
- d(!1), C(""), E("");
144
+ f(!1), w(""), D("");
129
145
  },
130
146
  children: "Cancel"
131
- }), /* @__PURE__ */ l(f, {
147
+ }), /* @__PURE__ */ u(p, {
132
148
  size: "sm",
133
- disabled: M || !v.trim() || !w.trim(),
134
- onClick: L,
135
- children: M ? "Creating..." : "Create & Link"
149
+ disabled: N || !y.trim() || !T.trim(),
150
+ onClick: B,
151
+ children: N ? "Creating..." : "Create & Link"
136
152
  })]
137
153
  })
138
154
  ]
139
155
  }),
140
- O && /* @__PURE__ */ l("p", {
156
+ k && /* @__PURE__ */ u("p", {
141
157
  className: "text-sm text-muted-foreground",
142
158
  children: "Loading docs..."
143
159
  }),
144
- k && /* @__PURE__ */ u("p", {
160
+ A && /* @__PURE__ */ d("p", {
145
161
  className: "text-sm text-red-500",
146
- children: ["Error: ", k.message]
162
+ children: ["Error: ", A.message]
163
+ }),
164
+ L && /* @__PURE__ */ u("p", {
165
+ role: "alert",
166
+ className: "text-sm text-destructive",
167
+ children: L
147
168
  }),
148
- !O && !k && I.length === 0 && !o && /* @__PURE__ */ l("p", {
169
+ !k && !A && z.length === 0 && !s && /* @__PURE__ */ u("p", {
149
170
  className: "text-sm text-muted-foreground",
150
171
  children: "No docs linked to this work item yet."
151
172
  }),
152
- I.map((e) => /* @__PURE__ */ u("div", {
173
+ z.map((e) => /* @__PURE__ */ d("div", {
153
174
  className: "flex items-center justify-between gap-3 rounded-md border border-input p-3",
154
- children: [/* @__PURE__ */ u("div", {
175
+ children: [/* @__PURE__ */ d("div", {
155
176
  className: "flex items-center gap-2 min-w-0",
156
- children: [/* @__PURE__ */ l(r, { className: "h-4 w-4 text-muted-foreground shrink-0" }), /* @__PURE__ */ u("div", {
177
+ children: [/* @__PURE__ */ u(i, { className: "h-4 w-4 text-muted-foreground shrink-0" }), /* @__PURE__ */ d("div", {
157
178
  className: "min-w-0",
158
- children: [/* @__PURE__ */ l("p", {
179
+ children: [/* @__PURE__ */ u("p", {
159
180
  className: "text-sm font-medium truncate",
160
181
  children: e.title
161
- }), /* @__PURE__ */ u("p", {
182
+ }), /* @__PURE__ */ d("p", {
162
183
  className: "text-xs text-muted-foreground",
163
184
  children: ["v", e.version]
164
185
  })]
165
186
  })]
166
- }), /* @__PURE__ */ u("div", {
187
+ }), /* @__PURE__ */ d("div", {
167
188
  className: "flex items-center gap-2 shrink-0",
168
- children: [/* @__PURE__ */ l("span", {
169
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${T[e.status] ?? ""}`,
189
+ children: [/* @__PURE__ */ u("span", {
190
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${E[e.status] ?? ""}`,
170
191
  children: e.status.toLowerCase()
171
- }), /* @__PURE__ */ l(f, {
192
+ }), /* @__PURE__ */ u(p, {
172
193
  size: "icon",
173
194
  variant: "ghost",
174
- disabled: F,
175
- onClick: () => R(e.id),
195
+ disabled: I,
196
+ onClick: () => V(e.id),
176
197
  "aria-label": `Unlink ${e.title}`,
177
- children: /* @__PURE__ */ l(a, { className: "h-4 w-4" })
198
+ children: /* @__PURE__ */ u(o, { className: "h-4 w-4" })
178
199
  })]
179
200
  })]
180
201
  }, e.id))
181
202
  ]
182
203
  })] });
183
204
  }
184
- function D() {
185
- let { workspaceId: t } = e(), n = new URLSearchParams(window.location.search).get("taskId") ?? "", { data: r, loading: i, error: a } = c(v, {
205
+ function O() {
206
+ let { workspaceId: t } = e(), n = new URLSearchParams(window.location.search).get("taskId") ?? "", { data: r, loading: i, error: a } = l(y, {
186
207
  variables: { workItemId: n },
187
208
  skip: !t || !n
188
209
  });
189
- if (i) return /* @__PURE__ */ l("div", {
210
+ if (i) return /* @__PURE__ */ u("div", {
190
211
  className: "flex items-center justify-center p-12",
191
- children: /* @__PURE__ */ l("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
212
+ children: /* @__PURE__ */ u("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
192
213
  });
193
- if (a) return /* @__PURE__ */ u("div", {
214
+ if (a) return /* @__PURE__ */ d("div", {
194
215
  className: "p-6 text-red-500",
195
216
  children: ["Error: ", a.message]
196
217
  });
197
218
  let o = r?.planmagnetWorkItem;
198
- if (!o) return /* @__PURE__ */ l("div", {
219
+ if (!o) return /* @__PURE__ */ u("div", {
199
220
  className: "p-6 text-muted-foreground",
200
221
  children: "Task not found."
201
222
  });
202
- let s = o.status.toLowerCase().replace("_", " "), f = [
223
+ let s = o.status.toLowerCase().replace("_", " "), c = [
203
224
  {
204
225
  action: "Task created",
205
226
  by: o.reporterId ?? "Unknown",
@@ -216,41 +237,41 @@ function D() {
216
237
  at: o.updatedAt
217
238
  }
218
239
  ];
219
- return /* @__PURE__ */ u("div", {
240
+ return /* @__PURE__ */ d("div", {
220
241
  className: "space-y-6 p-6",
221
- children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
242
+ children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
222
243
  className: "text-2xl font-semibold",
223
244
  children: o.title
224
- }), /* @__PURE__ */ u("p", {
245
+ }), /* @__PURE__ */ d("p", {
225
246
  className: "text-sm text-muted-foreground",
226
247
  children: [
227
248
  o.key,
228
249
  " · ",
229
250
  o.type.toLowerCase()
230
251
  ]
231
- })] }), /* @__PURE__ */ u("div", {
252
+ })] }), /* @__PURE__ */ d("div", {
232
253
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
233
- children: [/* @__PURE__ */ u("div", {
254
+ children: [/* @__PURE__ */ d("div", {
234
255
  className: "lg:col-span-2 space-y-6",
235
256
  children: [
236
- /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(h, { children: /* @__PURE__ */ l(g, { children: "Description" }) }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("p", {
257
+ /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, { children: "Description" }) }), /* @__PURE__ */ u(h, { children: /* @__PURE__ */ u("p", {
237
258
  className: "text-sm",
238
259
  children: o.description ?? "No description provided."
239
260
  }) })] }),
240
- /* @__PURE__ */ l(E, { workItemId: o.id }),
241
- /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(h, { children: /* @__PURE__ */ l(g, { children: "Activity" }) }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("div", {
261
+ /* @__PURE__ */ u(D, { workItemId: o.id }),
262
+ /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, { children: "Activity" }) }), /* @__PURE__ */ u(h, { children: /* @__PURE__ */ u("div", {
242
263
  className: "space-y-3",
243
- children: f.map((e, t) => /* @__PURE__ */ u("div", {
264
+ children: c.map((e, t) => /* @__PURE__ */ d("div", {
244
265
  className: "flex gap-3",
245
- children: [/* @__PURE__ */ u("div", {
266
+ children: [/* @__PURE__ */ d("div", {
246
267
  className: "flex flex-col items-center",
247
- children: [/* @__PURE__ */ l("div", { className: "h-2.5 w-2.5 rounded-full bg-primary mt-1.5" }), t < f.length - 1 && /* @__PURE__ */ l("div", { className: "w-px flex-1 bg-border" })]
248
- }), /* @__PURE__ */ u("div", {
268
+ children: [/* @__PURE__ */ u("div", { className: "h-2.5 w-2.5 rounded-full bg-primary mt-1.5" }), t < c.length - 1 && /* @__PURE__ */ u("div", { className: "w-px flex-1 bg-border" })]
269
+ }), /* @__PURE__ */ d("div", {
249
270
  className: "pb-3",
250
- children: [/* @__PURE__ */ l("p", {
271
+ children: [/* @__PURE__ */ u("p", {
251
272
  className: "text-sm",
252
273
  children: e.action
253
- }), /* @__PURE__ */ u("p", {
274
+ }), /* @__PURE__ */ d("p", {
254
275
  className: "text-xs text-muted-foreground",
255
276
  children: [
256
277
  e.by,
@@ -262,100 +283,100 @@ function D() {
262
283
  }, t))
263
284
  }) })] })
264
285
  ]
265
- }), /* @__PURE__ */ l("div", {
286
+ }), /* @__PURE__ */ u("div", {
266
287
  className: "space-y-6",
267
- children: /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(h, { children: /* @__PURE__ */ l(g, { children: "Details" }) }), /* @__PURE__ */ u(m, {
288
+ children: /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, { children: "Details" }) }), /* @__PURE__ */ d(h, {
268
289
  className: "space-y-3 text-sm",
269
290
  children: [
270
- /* @__PURE__ */ u("div", {
291
+ /* @__PURE__ */ d("div", {
271
292
  className: "flex justify-between",
272
- children: [/* @__PURE__ */ l("span", {
293
+ children: [/* @__PURE__ */ u("span", {
273
294
  className: "text-muted-foreground",
274
295
  children: "Status"
275
- }), /* @__PURE__ */ l("span", {
276
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${w[o.status] ?? ""}`,
296
+ }), /* @__PURE__ */ u("span", {
297
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${T[o.status] ?? ""}`,
277
298
  children: s
278
299
  })]
279
300
  }),
280
- /* @__PURE__ */ u("div", {
301
+ /* @__PURE__ */ d("div", {
281
302
  className: "flex justify-between",
282
- children: [/* @__PURE__ */ l("span", {
303
+ children: [/* @__PURE__ */ u("span", {
283
304
  className: "text-muted-foreground",
284
305
  children: "Priority"
285
- }), /* @__PURE__ */ l("span", {
286
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${C[o.priority] ?? ""}`,
306
+ }), /* @__PURE__ */ u("span", {
307
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${w[o.priority] ?? ""}`,
287
308
  children: o.priority.toLowerCase()
288
309
  })]
289
310
  }),
290
- /* @__PURE__ */ u("div", {
311
+ /* @__PURE__ */ d("div", {
291
312
  className: "flex justify-between",
292
- children: [/* @__PURE__ */ l("span", {
313
+ children: [/* @__PURE__ */ u("span", {
293
314
  className: "text-muted-foreground",
294
315
  children: "Type"
295
- }), /* @__PURE__ */ l(d, {
316
+ }), /* @__PURE__ */ u(f, {
296
317
  variant: "outline",
297
318
  className: "capitalize",
298
319
  children: o.type.toLowerCase()
299
320
  })]
300
321
  }),
301
- /* @__PURE__ */ u("div", {
322
+ /* @__PURE__ */ d("div", {
302
323
  className: "flex justify-between",
303
- children: [/* @__PURE__ */ l("span", {
324
+ children: [/* @__PURE__ */ u("span", {
304
325
  className: "text-muted-foreground",
305
326
  children: "Story Points"
306
- }), /* @__PURE__ */ l("span", {
327
+ }), /* @__PURE__ */ u("span", {
307
328
  className: "font-medium",
308
329
  children: o.storyPoints ?? 0
309
330
  })]
310
331
  }),
311
- /* @__PURE__ */ u("div", {
332
+ /* @__PURE__ */ d("div", {
312
333
  className: "flex justify-between",
313
- children: [/* @__PURE__ */ l("span", {
334
+ children: [/* @__PURE__ */ u("span", {
314
335
  className: "text-muted-foreground",
315
336
  children: "Assignee"
316
- }), /* @__PURE__ */ l("span", { children: o.assigneeId ?? "Unassigned" })]
337
+ }), /* @__PURE__ */ u("span", { children: o.assigneeId ?? "Unassigned" })]
317
338
  }),
318
- /* @__PURE__ */ u("div", {
339
+ /* @__PURE__ */ d("div", {
319
340
  className: "flex justify-between",
320
- children: [/* @__PURE__ */ l("span", {
341
+ children: [/* @__PURE__ */ u("span", {
321
342
  className: "text-muted-foreground",
322
343
  children: "Reporter"
323
- }), /* @__PURE__ */ l("span", { children: o.reporterId ?? "Unknown" })]
344
+ }), /* @__PURE__ */ u("span", { children: o.reporterId ?? "Unknown" })]
324
345
  }),
325
- /* @__PURE__ */ u("div", {
346
+ /* @__PURE__ */ d("div", {
326
347
  className: "flex justify-between",
327
- children: [/* @__PURE__ */ l("span", {
348
+ children: [/* @__PURE__ */ u("span", {
328
349
  className: "text-muted-foreground",
329
350
  children: "Key"
330
- }), /* @__PURE__ */ l("span", { children: o.key })]
351
+ }), /* @__PURE__ */ u("span", { children: o.key })]
331
352
  }),
332
- /* @__PURE__ */ u("div", {
353
+ /* @__PURE__ */ d("div", {
333
354
  className: "flex justify-between",
334
- children: [/* @__PURE__ */ l("span", {
355
+ children: [/* @__PURE__ */ u("span", {
335
356
  className: "text-muted-foreground",
336
357
  children: "Due Date"
337
- }), /* @__PURE__ */ l("span", { children: o.dueDate ?? "Not set" })]
358
+ }), /* @__PURE__ */ u("span", { children: o.dueDate ?? "Not set" })]
338
359
  }),
339
- /* @__PURE__ */ u("div", {
360
+ /* @__PURE__ */ d("div", {
340
361
  className: "flex justify-between",
341
- children: [/* @__PURE__ */ l("span", {
362
+ children: [/* @__PURE__ */ u("span", {
342
363
  className: "text-muted-foreground",
343
364
  children: "Created"
344
- }), /* @__PURE__ */ l("span", { children: o.createdAt })]
365
+ }), /* @__PURE__ */ u("span", { children: o.createdAt })]
345
366
  }),
346
- /* @__PURE__ */ u("div", {
367
+ /* @__PURE__ */ d("div", {
347
368
  className: "flex justify-between",
348
- children: [/* @__PURE__ */ l("span", {
369
+ children: [/* @__PURE__ */ u("span", {
349
370
  className: "text-muted-foreground",
350
371
  children: "Updated"
351
- }), /* @__PURE__ */ l("span", { children: o.updatedAt })]
372
+ }), /* @__PURE__ */ u("span", { children: o.updatedAt })]
352
373
  }),
353
- /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("span", {
374
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("span", {
354
375
  className: "text-muted-foreground text-xs",
355
376
  children: "Labels"
356
- }), /* @__PURE__ */ l("div", {
377
+ }), /* @__PURE__ */ u("div", {
357
378
  className: "flex gap-1 mt-1 flex-wrap",
358
- children: (o.labels ?? []).map((e) => /* @__PURE__ */ l("span", {
379
+ children: (o.labels ?? []).map((e) => /* @__PURE__ */ u("span", {
359
380
  className: "text-xs px-2 py-0.5 rounded bg-muted",
360
381
  children: e
361
382
  }, e))
@@ -367,6 +388,6 @@ function D() {
367
388
  });
368
389
  }
369
390
  //#endregion
370
- export { D as TasksTaskDetailPagePage };
391
+ export { O as TasksTaskDetailPagePage };
371
392
 
372
393
  //# 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 { 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 } 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 [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\n const docs = data?.planmagnetWorkItemDocs ?? [];\n\n const handleCreateAndLink = async () => {\n if (!newTitle.trim() || !newContent.trim()) return;\n const result = await createDoc({\n variables: { input: { title: newTitle.trim(), content: newContent.trim() } },\n });\n const docId = result.data?.planmagnetCreateDoc?.id;\n if (docId) {\n await linkDoc({ variables: { docId, workItemId } });\n }\n setNewTitle('');\n setNewContent('');\n setIsComposing(false);\n void refetch();\n };\n\n const handleUnlink = async (docId: string) => {\n await unlinkDoc({ variables: { docId, workItemId } });\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 {!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 <p className=\"text-sm font-medium truncate\">{doc.title}</p>\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 if (loading) {\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 const activityLog = [\n { action: 'Task created', by: task.reporterId ?? 'Unknown', at: task.createdAt },\n {\n action: `Assigned to ${task.assigneeId ?? 'Unassigned'}`,\n by: task.reporterId ?? 'Unknown',\n at: task.createdAt,\n },\n {\n action: `Status changed to ${statusDisplay}`,\n by: task.assigneeId ?? 'Unknown',\n at: task.updatedAt,\n },\n ];\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 <Card>\n <CardHeader>\n <CardTitle>Activity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {activityLog.map((a, i) => (\n <div key={i} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"h-2.5 w-2.5 rounded-full bg-primary mt-1.5\" />\n {i < activityLog.length - 1 && <div className=\"w-px flex-1 bg-border\" />}\n </div>\n <div className=\"pb-3\">\n <p className=\"text-sm\">{a.action}</p>\n <p className=\"text-xs text-muted-foreground\">\n {a.by} &middot; {a.at}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\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":"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"}
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 { 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 } 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 [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 <p className=\"text-sm font-medium truncate\">{doc.title}</p>\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 if (loading) {\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 const activityLog = [\n { action: 'Task created', by: task.reporterId ?? 'Unknown', at: task.createdAt },\n {\n action: `Assigned to ${task.assigneeId ?? 'Unassigned'}`,\n by: task.reporterId ?? 'Unknown',\n at: task.createdAt,\n },\n {\n action: `Status changed to ${statusDisplay}`,\n by: task.assigneeId ?? 'Unknown',\n at: task.updatedAt,\n },\n ];\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 <Card>\n <CardHeader>\n <CardTitle>Activity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {activityLog.map((a, i) => (\n <div key={i} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"h-2.5 w-2.5 rounded-full bg-primary mt-1.5\" />\n {i < activityLog.length - 1 && <div className=\"w-px flex-1 bg-border\" />}\n </div>\n <div className=\"pb-3\">\n <p className=\"text-sm\">{a.action}</p>\n <p className=\"text-xs text-muted-foreground\">\n {a.by} &middot; {a.at}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\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":";;;;;;;;;;AAmBA,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,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,KAAD;OAAG,WAAU;iBAAgC,EAAI;OAAU,CAAA,EAC3D,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;MA1BC,EAAI,GA0BL,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;AAEF,KAAI,EACF,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,EAE3D,IAAc;EAClB;GAAE,QAAQ;GAAgB,IAAI,EAAK,cAAc;GAAW,IAAI,EAAK;GAAW;EAChF;GACE,QAAQ,eAAe,EAAK,cAAc;GAC1C,IAAI,EAAK,cAAc;GACvB,IAAI,EAAK;GACV;EACD;GACE,QAAQ,qBAAqB;GAC7B,IAAI,EAAK,cAAc;GACvB,IAAI,EAAK;GACV;EACF;AAED,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,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,YAAoB,CAAA,EACpB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAY,KAAK,GAAG,MACnB,kBAAC,OAAD;OAAa,WAAU;iBAAvB,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD,EAAK,WAAU,8CAA+C,CAAA,EAC7D,IAAI,EAAY,SAAS,KAAK,kBAAC,OAAD,EAAK,WAAU,yBAA0B,CAAA,CACpE;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAW,EAAE;SAAW,CAAA,EACrC,kBAAC,KAAD;SAAG,WAAU;mBAAb;UACG,EAAE;UAAG;UAAW,EAAE;UACjB;WACA;UACF;SAXI,EAWJ,CACN;MACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;KACH;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 +1 @@
1
- {"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AA2HA,wBAAgB,kBAAkB,4CAkMjC"}
1
+ {"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AAuIA,wBAAgB,kBAAkB,4CAsOjC"}