@burdenoff/microfe-planmagnet 2026.925.17 → 2026.926.1

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 (59) hide show
  1. package/dist/generated/wspace-types.d.ts +76 -2
  2. package/dist/generated/wspace-types.d.ts.map +1 -1
  3. package/dist/node_modules/@apollo/client/errors/ServerError.js +17 -0
  4. package/dist/node_modules/@apollo/client/errors/ServerError.js.map +1 -0
  5. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
  6. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +128 -127
  7. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  8. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +1 -1
  9. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +93 -98
  10. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +1 -1
  11. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.d.ts.map +1 -1
  12. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js +72 -79
  13. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js.map +1 -1
  14. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
  15. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +112 -123
  16. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
  17. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
  18. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +92 -98
  19. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  20. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
  21. package/dist/planmagnet/pages/ProductsProductsPagePage.js +88 -96
  22. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  23. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
  24. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +102 -122
  25. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
  26. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +1 -1
  27. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +116 -114
  28. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -1
  29. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +1 -1
  30. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +82 -88
  31. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +1 -1
  32. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
  33. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +79 -79
  34. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
  35. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  36. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +150 -154
  37. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  38. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  39. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +120 -109
  40. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  41. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  42. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +75 -31
  43. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  44. package/dist/planmagnet/releases/ReleaseReadinessCard.d.ts.map +1 -1
  45. package/dist/planmagnet/releases/ReleaseReadinessCard.js +90 -89
  46. package/dist/planmagnet/releases/ReleaseReadinessCard.js.map +1 -1
  47. package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts +13 -0
  48. package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +1 -0
  49. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js +189 -0
  50. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +1 -0
  51. package/dist/planmagnet/roadmaps/planningFocus.d.ts +23 -0
  52. package/dist/planmagnet/roadmaps/planningFocus.d.ts.map +1 -0
  53. package/dist/planmagnet/roadmaps/planningFocus.js +76 -0
  54. package/dist/planmagnet/roadmaps/planningFocus.js.map +1 -0
  55. package/dist/planmagnet/sprints/SprintDates.d.ts +37 -0
  56. package/dist/planmagnet/sprints/SprintDates.d.ts.map +1 -0
  57. package/dist/planmagnet/sprints/SprintDates.js +114 -0
  58. package/dist/planmagnet/sprints/SprintDates.js.map +1 -0
  59. package/package.json +1 -1
@@ -3,15 +3,16 @@ import { PersonName as t } from "../people/People.js";
3
3
  import { ReleaseNotesCard as n } from "../releases/ReleaseNotesCard.js";
4
4
  import { ReleaseGatesCard as r } from "../releases/ReleaseGatesCard.js";
5
5
  import { ReleaseReadinessCard as i } from "../releases/ReleaseReadinessCard.js";
6
- import { Calendar as a, Clock as o, GitBranch as s, Loader2 as c } from "lucide-react";
7
- import { useParams as l } from "react-router";
8
- import { gql as u } from "@apollo/client";
9
- import { useQuery as d } from "@apollo/client/react";
10
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
11
- import { Badge as m, Card as h, CardContent as g, CardHeader as _, CardTitle as v } from "@burdenoff/fe-libs/ui";
12
- import { Markdown as y } from "@burdenoff/fe-libs/shared/components";
6
+ import { ReleaseWorkItemsCard as a } from "../releases/ReleaseWorkItemsCard.js";
7
+ import { Calendar as o, Clock as s, GitBranch as c, Loader2 as l } from "lucide-react";
8
+ import { useParams as u } from "react-router";
9
+ import { gql as d } from "@apollo/client";
10
+ import { useQuery as f } from "@apollo/client/react";
11
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
12
+ import { Badge as h, Card as g, CardContent as _, CardHeader as v, CardTitle as y } from "@burdenoff/fe-libs/ui";
13
+ import { Markdown as b } from "@burdenoff/fe-libs/shared/components";
13
14
  //#region src/planmagnet/pages/ProductsReleaseDetailPagePage.tsx
14
- var b = u`
15
+ var x = d`
15
16
  query GetRelease($id: ID!) {
16
17
  planmagnetRelease(id: $id) {
17
18
  id
@@ -38,7 +39,7 @@ var b = u`
38
39
  }
39
40
  }
40
41
  }
41
- `, x = {
42
+ `, S = {
42
43
  DRAFT: "bg-gray-100 text-gray-800",
43
44
  PLANNING: "bg-yellow-100 text-yellow-800",
44
45
  IN_PROGRESS: "bg-blue-100 text-blue-800",
@@ -47,95 +48,95 @@ var b = u`
47
48
  CANCELLED: "bg-red-100 text-red-800",
48
49
  ROLLED_BACK: "bg-red-100 text-red-800"
49
50
  };
50
- function S() {
51
- let { workspaceId: u } = e(), S = l().id ?? "", { data: C, loading: w, error: T } = d(b, {
52
- variables: { id: S },
53
- skip: !S
51
+ function C() {
52
+ let { workspaceId: d } = e(), C = u().id ?? "", { data: w, loading: T, error: E } = f(x, {
53
+ variables: { id: C },
54
+ skip: !C
54
55
  });
55
- if (w && !C) return /* @__PURE__ */ f("div", {
56
+ if (T && !w) return /* @__PURE__ */ p("div", {
56
57
  className: "flex items-center justify-center p-12",
57
- children: /* @__PURE__ */ f(c, { className: "h-8 w-8 animate-spin text-muted-foreground" })
58
+ children: /* @__PURE__ */ p(l, { className: "h-8 w-8 animate-spin text-muted-foreground" })
58
59
  });
59
- if (T) return /* @__PURE__ */ p("div", {
60
+ if (E) return /* @__PURE__ */ m("div", {
60
61
  className: "p-6 text-destructive",
61
- children: ["Failed to load release: ", T.message]
62
+ children: ["Failed to load release: ", E.message]
62
63
  });
63
- let E = C?.planmagnetRelease;
64
- if (!E) return /* @__PURE__ */ f("div", {
64
+ let D = w?.planmagnetRelease;
65
+ if (!D) return /* @__PURE__ */ p("div", {
65
66
  className: "p-6 text-muted-foreground",
66
67
  children: "Release not found."
67
68
  });
68
- let D = E.workItems ?? [], O = D.filter((e) => e.type === "STORY" || e.type === "FEATURE"), k = D.filter((e) => e.type === "BUG");
69
- return /* @__PURE__ */ p("div", {
69
+ let O = D.workItems ?? [], k = O.filter((e) => e.type === "STORY" || e.type === "FEATURE"), A = O.filter((e) => e.type === "BUG");
70
+ return /* @__PURE__ */ m("div", {
70
71
  className: "space-y-6 p-6",
71
- children: [/* @__PURE__ */ p("div", {
72
+ children: [/* @__PURE__ */ m("div", {
72
73
  className: "flex items-center justify-between",
73
- children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("div", {
74
+ children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("div", {
74
75
  className: "flex items-center gap-2",
75
76
  children: [
76
- /* @__PURE__ */ f(s, { className: "h-5 w-5 text-primary" }),
77
- /* @__PURE__ */ f("h1", {
77
+ /* @__PURE__ */ p(c, { className: "h-5 w-5 text-primary" }),
78
+ /* @__PURE__ */ p("h1", {
78
79
  className: "text-2xl font-semibold",
79
- children: E.version
80
+ children: D.version
80
81
  }),
81
- /* @__PURE__ */ f("span", {
82
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${x[E.status] ?? "bg-gray-100"}`,
83
- children: E.status.toLowerCase().replace("_", " ")
82
+ /* @__PURE__ */ p("span", {
83
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${S[D.status] ?? "bg-gray-100"}`,
84
+ children: D.status.toLowerCase().replace("_", " ")
84
85
  })
85
86
  ]
86
- }), /* @__PURE__ */ f("p", {
87
+ }), /* @__PURE__ */ p("p", {
87
88
  className: "text-sm text-muted-foreground mt-1",
88
- children: E.name
89
- })] }), /* @__PURE__ */ f(m, {
89
+ children: D.name
90
+ })] }), /* @__PURE__ */ p(h, {
90
91
  variant: "outline",
91
92
  className: "capitalize",
92
- children: E.status.toLowerCase().replace("_", " ")
93
+ children: D.status.toLowerCase().replace("_", " ")
93
94
  })]
94
- }), /* @__PURE__ */ p("div", {
95
+ }), /* @__PURE__ */ m("div", {
95
96
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
96
- children: [/* @__PURE__ */ p("div", {
97
+ children: [/* @__PURE__ */ m("div", {
97
98
  className: "lg:col-span-2 space-y-6",
98
99
  children: [
99
- /* @__PURE__ */ f(i, {
100
- releaseId: E.id,
101
- projectId: E.projectId || null,
102
- releaseStatus: E.status,
103
- plannedDate: E.plannedDate ?? null
100
+ /* @__PURE__ */ p(i, {
101
+ releaseId: D.id,
102
+ projectId: D.projectId || null,
103
+ releaseStatus: D.status,
104
+ plannedDate: D.plannedDate ?? null
104
105
  }),
105
- /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ f(_, { children: /* @__PURE__ */ f(v, { children: "Overview" }) }), /* @__PURE__ */ p(g, {
106
+ /* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: "Overview" }) }), /* @__PURE__ */ m(_, {
106
107
  className: "space-y-4",
107
- children: [/* @__PURE__ */ f("div", {
108
+ children: [/* @__PURE__ */ p("div", {
108
109
  className: "text-sm prose prose-sm dark:prose-invert max-w-none",
109
- children: E.description ? /* @__PURE__ */ f(y, { children: E.description }) : /* @__PURE__ */ f("p", { children: "No description provided." })
110
- }), /* @__PURE__ */ p("div", {
110
+ children: D.description ? /* @__PURE__ */ p(b, { children: D.description }) : /* @__PURE__ */ p("p", { children: "No description provided." })
111
+ }), /* @__PURE__ */ m("div", {
111
112
  className: "grid grid-cols-3 gap-4",
112
113
  children: [
113
- /* @__PURE__ */ p("div", {
114
+ /* @__PURE__ */ m("div", {
114
115
  className: "text-center p-3 bg-muted rounded-md",
115
- children: [/* @__PURE__ */ f("p", {
116
+ children: [/* @__PURE__ */ p("p", {
116
117
  className: "text-lg font-semibold mt-1",
117
- children: O.length
118
- }), /* @__PURE__ */ f("p", {
118
+ children: k.length
119
+ }), /* @__PURE__ */ p("p", {
119
120
  className: "text-xs text-muted-foreground",
120
121
  children: "Features"
121
122
  })]
122
123
  }),
123
- /* @__PURE__ */ p("div", {
124
+ /* @__PURE__ */ m("div", {
124
125
  className: "text-center p-3 bg-muted rounded-md",
125
- children: [/* @__PURE__ */ f("p", {
126
+ children: [/* @__PURE__ */ p("p", {
126
127
  className: "text-lg font-semibold mt-1",
127
- children: k.length
128
- }), /* @__PURE__ */ f("p", {
128
+ children: A.length
129
+ }), /* @__PURE__ */ p("p", {
129
130
  className: "text-xs text-muted-foreground",
130
131
  children: "Bug Fixes"
131
132
  })]
132
133
  }),
133
- /* @__PURE__ */ p("div", {
134
+ /* @__PURE__ */ m("div", {
134
135
  className: "text-center p-3 bg-muted rounded-md",
135
- children: [/* @__PURE__ */ f("p", {
136
+ children: [/* @__PURE__ */ p("p", {
136
137
  className: "text-lg font-semibold mt-1",
137
- children: D.length
138
- }), /* @__PURE__ */ f("p", {
138
+ children: O.length
139
+ }), /* @__PURE__ */ p("p", {
139
140
  className: "text-xs text-muted-foreground",
140
141
  children: "Total Items"
141
142
  })]
@@ -143,125 +144,104 @@ function S() {
143
144
  ]
144
145
  })]
145
146
  })] }),
146
- /* @__PURE__ */ f(r, {
147
- releaseId: E.id,
148
- projectId: E.projectId ?? null,
149
- releaseStatus: E.status
147
+ /* @__PURE__ */ p(r, {
148
+ releaseId: D.id,
149
+ projectId: D.projectId ?? null,
150
+ releaseStatus: D.status
150
151
  }),
151
- /* @__PURE__ */ f(n, {
152
- releaseId: E.id,
153
- notes: E.releaseNotes ?? null
152
+ /* @__PURE__ */ p(n, {
153
+ releaseId: D.id,
154
+ notes: D.releaseNotes ?? null
154
155
  }),
155
- D.length > 0 && /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ f(_, { children: /* @__PURE__ */ p(v, { children: [
156
- "Work Items (",
157
- D.length,
158
- ")"
159
- ] }) }), /* @__PURE__ */ f(g, {
160
- className: "space-y-2",
161
- children: D.map((e) => /* @__PURE__ */ p("div", {
162
- className: "flex items-center justify-between border rounded-md p-3",
163
- children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
164
- className: "text-sm font-medium",
165
- children: e.title
166
- }), /* @__PURE__ */ p("p", {
167
- className: "text-xs text-muted-foreground capitalize",
168
- children: [
169
- e.type.toLowerCase(),
170
- " · ",
171
- e.priority.toLowerCase(),
172
- " priority"
173
- ]
174
- })] }), /* @__PURE__ */ f(m, {
175
- variant: "outline",
176
- className: "text-xs capitalize",
177
- children: e.status.toLowerCase().replace("_", " ")
178
- })]
179
- }, e.id))
180
- })] })
156
+ /* @__PURE__ */ p(a, {
157
+ releaseId: D.id,
158
+ projectId: D.projectId || null,
159
+ items: O
160
+ })
181
161
  ]
182
- }), /* @__PURE__ */ p("div", {
162
+ }), /* @__PURE__ */ m("div", {
183
163
  className: "space-y-6",
184
164
  children: [
185
- /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ f(_, { children: /* @__PURE__ */ f(v, { children: "Timeline" }) }), /* @__PURE__ */ p(g, {
165
+ /* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: "Timeline" }) }), /* @__PURE__ */ m(_, {
186
166
  className: "space-y-3 text-sm",
187
- children: [/* @__PURE__ */ p("div", {
167
+ children: [/* @__PURE__ */ m("div", {
188
168
  className: "flex items-center gap-2",
189
169
  children: [
190
- /* @__PURE__ */ f(a, { className: "h-4 w-4 text-muted-foreground" }),
191
- /* @__PURE__ */ f("span", {
170
+ /* @__PURE__ */ p(o, { className: "h-4 w-4 text-muted-foreground" }),
171
+ /* @__PURE__ */ p("span", {
192
172
  className: "text-muted-foreground",
193
173
  children: "Planned:"
194
174
  }),
195
- /* @__PURE__ */ f("span", {
175
+ /* @__PURE__ */ p("span", {
196
176
  className: "font-medium",
197
- children: E.plannedDate ? new Date(E.plannedDate).toLocaleDateString() : "Not set"
177
+ children: D.plannedDate ? new Date(D.plannedDate).toLocaleDateString() : "Not set"
198
178
  })
199
179
  ]
200
- }), E.releasedAt && /* @__PURE__ */ p("div", {
180
+ }), D.releasedAt && /* @__PURE__ */ m("div", {
201
181
  className: "flex items-center gap-2",
202
182
  children: [
203
- /* @__PURE__ */ f(o, { className: "h-4 w-4 text-green-500" }),
204
- /* @__PURE__ */ f("span", {
183
+ /* @__PURE__ */ p(s, { className: "h-4 w-4 text-green-500" }),
184
+ /* @__PURE__ */ p("span", {
205
185
  className: "text-muted-foreground",
206
186
  children: "Released:"
207
187
  }),
208
- /* @__PURE__ */ f("span", {
188
+ /* @__PURE__ */ p("span", {
209
189
  className: "font-medium",
210
- children: new Date(E.releasedAt).toLocaleDateString()
190
+ children: new Date(D.releasedAt).toLocaleDateString()
211
191
  })
212
192
  ]
213
193
  })]
214
194
  })] }),
215
- /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ f(_, { children: /* @__PURE__ */ f(v, { children: "Details" }) }), /* @__PURE__ */ p(g, {
195
+ /* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: "Details" }) }), /* @__PURE__ */ m(_, {
216
196
  className: "space-y-2 text-sm",
217
197
  children: [
218
- /* @__PURE__ */ p("div", {
198
+ /* @__PURE__ */ m("div", {
219
199
  className: "flex justify-between",
220
- children: [/* @__PURE__ */ f("span", {
200
+ children: [/* @__PURE__ */ p("span", {
221
201
  className: "text-muted-foreground",
222
202
  children: "Version"
223
- }), /* @__PURE__ */ f("span", {
203
+ }), /* @__PURE__ */ p("span", {
224
204
  className: "font-medium",
225
- children: E.version
205
+ children: D.version
226
206
  })]
227
207
  }),
228
- /* @__PURE__ */ p("div", {
208
+ /* @__PURE__ */ m("div", {
229
209
  className: "flex justify-between",
230
- children: [/* @__PURE__ */ f("span", {
210
+ children: [/* @__PURE__ */ p("span", {
231
211
  className: "text-muted-foreground",
232
212
  children: "Status"
233
- }), /* @__PURE__ */ f(m, {
213
+ }), /* @__PURE__ */ p(h, {
234
214
  variant: "outline",
235
215
  className: "text-xs capitalize",
236
- children: E.status.toLowerCase().replace("_", " ")
216
+ children: D.status.toLowerCase().replace("_", " ")
237
217
  })]
238
218
  }),
239
- /* @__PURE__ */ p("div", {
219
+ /* @__PURE__ */ m("div", {
240
220
  className: "flex justify-between",
241
- children: [/* @__PURE__ */ f("span", {
221
+ children: [/* @__PURE__ */ p("span", {
242
222
  className: "text-muted-foreground",
243
223
  children: "Owner"
244
- }), /* @__PURE__ */ f("span", { children: /* @__PURE__ */ f(t, { id: E.ownerId }) })]
224
+ }), /* @__PURE__ */ p("span", { children: /* @__PURE__ */ p(t, { id: D.ownerId }) })]
245
225
  }),
246
- /* @__PURE__ */ p("div", {
226
+ /* @__PURE__ */ m("div", {
247
227
  className: "flex justify-between",
248
- children: [/* @__PURE__ */ f("span", {
228
+ children: [/* @__PURE__ */ p("span", {
249
229
  className: "text-muted-foreground",
250
230
  children: "Created"
251
- }), /* @__PURE__ */ f("span", { children: new Date(E.createdAt).toLocaleDateString() })]
231
+ }), /* @__PURE__ */ p("span", { children: new Date(D.createdAt).toLocaleDateString() })]
252
232
  }),
253
- /* @__PURE__ */ p("div", {
233
+ /* @__PURE__ */ m("div", {
254
234
  className: "flex justify-between",
255
- children: [/* @__PURE__ */ f("span", {
235
+ children: [/* @__PURE__ */ p("span", {
256
236
  className: "text-muted-foreground",
257
237
  children: "Updated"
258
- }), /* @__PURE__ */ f("span", { children: new Date(E.updatedAt).toLocaleDateString() })]
238
+ }), /* @__PURE__ */ p("span", { children: new Date(D.updatedAt).toLocaleDateString() })]
259
239
  })
260
240
  ]
261
241
  })] }),
262
- E.tags?.length > 0 && /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ f(_, { children: /* @__PURE__ */ f(v, { children: "Tags" }) }), /* @__PURE__ */ f(g, {
242
+ D.tags?.length > 0 && /* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: "Tags" }) }), /* @__PURE__ */ p(_, {
263
243
  className: "flex flex-wrap gap-1",
264
- children: E.tags.map((e) => /* @__PURE__ */ f(m, {
244
+ children: D.tags.map((e) => /* @__PURE__ */ p(h, {
265
245
  variant: "outline",
266
246
  className: "text-xs",
267
247
  children: e
@@ -273,6 +253,6 @@ function S() {
273
253
  });
274
254
  }
275
255
  //#endregion
276
- export { S as ProductsReleaseDetailPagePage };
256
+ export { C as ProductsReleaseDetailPagePage };
277
257
 
278
258
  //# sourceMappingURL=ProductsReleaseDetailPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsReleaseDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsReleaseDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Markdown } from '@burdenoff/fe-libs/shared/components';\nimport { GitBranch, Calendar, Clock, Server, Loader2 } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { ReleaseNotesCard } from '../releases/ReleaseNotesCard';\nimport { ReleaseGatesCard } from '../releases/ReleaseGatesCard';\nimport { ReleaseReadinessCard } from '../releases/ReleaseReadinessCard';\n\nconst GET_RELEASE = gql`\n query GetRelease($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n workspaceId\n projectId\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n metadata\n createdAt\n updatedAt\n workItems {\n id\n title\n status\n type\n priority\n }\n }\n }\n`;\n\ninterface WorkItemSummary {\n id: string;\n title: string;\n status: string;\n type: string;\n priority: string;\n}\n\nconst statusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PLANNING: 'bg-yellow-100 text-yellow-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n READY: 'bg-orange-100 text-orange-800',\n RELEASED: 'bg-green-100 text-green-800',\n CANCELLED: 'bg-red-100 text-red-800',\n ROLLED_BACK: 'bg-red-100 text-red-800',\n};\n\nexport function ProductsReleaseDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\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 <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n const release = data?.planmagnetRelease;\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release not found.</div>;\n\n const workItems: WorkItemSummary[] = release.workItems ?? [];\n const featureItems = workItems.filter((w) => w.type === 'STORY' || w.type === 'FEATURE');\n const bugItems = workItems.filter((w) => w.type === 'BUG');\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{release.version}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[release.status] ?? 'bg-gray-100'}`}\n >\n {release.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{release.name}</p>\n </div>\n <Badge variant=\"outline\" className=\"capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <ReleaseReadinessCard\n releaseId={release.id}\n projectId={release.projectId || null}\n releaseStatus={release.status}\n plannedDate={release.plannedDate ?? null}\n />\n <Card>\n <CardHeader>\n <CardTitle>Overview</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"text-sm prose prose-sm dark:prose-invert max-w-none\">\n {release.description ? (\n <Markdown>{release.description}</Markdown>\n ) : (\n <p>No description provided.</p>\n )}\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{featureItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Features</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{bugItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Bug Fixes</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{workItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Total Items</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ReleaseGatesCard\n releaseId={release.id}\n projectId={release.projectId ?? null}\n releaseStatus={release.status}\n />\n <ReleaseNotesCard releaseId={release.id} notes={release.releaseNotes ?? null} />\n\n {workItems.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Work Items ({workItems.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {workItems.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between border rounded-md p-3\"\n >\n <div>\n <p className=\"text-sm font-medium\">{item.title}</p>\n <p className=\"text-xs text-muted-foreground capitalize\">\n {item.type.toLowerCase()} &middot; {item.priority.toLowerCase()} priority\n </p>\n </div>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {item.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Planned:</span>\n <span className=\"font-medium\">\n {release.plannedDate\n ? new Date(release.plannedDate).toLocaleDateString()\n : 'Not set'}\n </span>\n </div>\n {release.releasedAt && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-muted-foreground\">Released:</span>\n <span className=\"font-medium\">\n {new Date(release.releasedAt).toLocaleDateString()}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Version</span>\n <span className=\"font-medium\">{release.version}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={release.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(release.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(release.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {release.tags?.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {release.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProductsReleaseDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsReleaseDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Markdown } from '@burdenoff/fe-libs/shared/components';\nimport { GitBranch, Calendar, Clock, Server, Loader2 } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { ReleaseNotesCard } from '../releases/ReleaseNotesCard';\nimport { ReleaseGatesCard } from '../releases/ReleaseGatesCard';\nimport { ReleaseReadinessCard } from '../releases/ReleaseReadinessCard';\nimport { ReleaseWorkItemsCard } from '../releases/ReleaseWorkItemsCard';\n\nconst GET_RELEASE = gql`\n query GetRelease($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n workspaceId\n projectId\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n metadata\n createdAt\n updatedAt\n workItems {\n id\n title\n status\n type\n priority\n }\n }\n }\n`;\n\ninterface WorkItemSummary {\n id: string;\n title: string;\n status: string;\n type: string;\n priority: string;\n}\n\nconst statusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PLANNING: 'bg-yellow-100 text-yellow-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n READY: 'bg-orange-100 text-orange-800',\n RELEASED: 'bg-green-100 text-green-800',\n CANCELLED: 'bg-red-100 text-red-800',\n ROLLED_BACK: 'bg-red-100 text-red-800',\n};\n\nexport function ProductsReleaseDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\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 <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n const release = data?.planmagnetRelease;\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release not found.</div>;\n\n const workItems: WorkItemSummary[] = release.workItems ?? [];\n const featureItems = workItems.filter((w) => w.type === 'STORY' || w.type === 'FEATURE');\n const bugItems = workItems.filter((w) => w.type === 'BUG');\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{release.version}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[release.status] ?? 'bg-gray-100'}`}\n >\n {release.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{release.name}</p>\n </div>\n <Badge variant=\"outline\" className=\"capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <ReleaseReadinessCard\n releaseId={release.id}\n projectId={release.projectId || null}\n releaseStatus={release.status}\n plannedDate={release.plannedDate ?? null}\n />\n <Card>\n <CardHeader>\n <CardTitle>Overview</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"text-sm prose prose-sm dark:prose-invert max-w-none\">\n {release.description ? (\n <Markdown>{release.description}</Markdown>\n ) : (\n <p>No description provided.</p>\n )}\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{featureItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Features</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{bugItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Bug Fixes</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{workItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Total Items</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ReleaseGatesCard\n releaseId={release.id}\n projectId={release.projectId ?? null}\n releaseStatus={release.status}\n />\n <ReleaseNotesCard releaseId={release.id} notes={release.releaseNotes ?? null} />\n\n <ReleaseWorkItemsCard\n releaseId={release.id}\n projectId={release.projectId || null}\n items={workItems}\n />\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Planned:</span>\n <span className=\"font-medium\">\n {release.plannedDate\n ? new Date(release.plannedDate).toLocaleDateString()\n : 'Not set'}\n </span>\n </div>\n {release.releasedAt && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-muted-foreground\">Released:</span>\n <span className=\"font-medium\">\n {new Date(release.releasedAt).toLocaleDateString()}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Version</span>\n <span className=\"font-medium\">{release.version}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={release.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(release.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(release.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {release.tags?.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {release.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsRoadmapAnalyticsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.tsx"],"names":[],"mappings":"AA2DA,wBAAgB,gCAAgC,4CA2V/C"}
1
+ {"version":3,"file":"ProductsRoadmapAnalyticsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,gCAAgC,4CA2V/C"}