@burdenoff/microfe-planmagnet 2026.928.9 → 2026.928.11

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 (43) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +1 -1
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.js +217 -209
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +1 -1
  8. package/dist/planmagnet/automation/AutomationRuleFields.js +18 -18
  9. package/dist/planmagnet/automation/AutomationRuleFields.js.map +1 -1
  10. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +1 -1
  11. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +198 -99
  12. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +1 -1
  13. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
  14. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +272 -170
  15. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
  16. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts +2 -0
  17. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts.map +1 -0
  18. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js +283 -0
  19. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js.map +1 -0
  20. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
  21. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +166 -246
  22. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  23. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
  24. package/dist/planmagnet/pages/ProductsProductsPagePage.js +147 -117
  25. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  26. package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +1 -1
  27. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +159 -124
  28. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +1 -1
  29. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +1 -1
  30. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +166 -128
  31. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
  32. package/dist/planmagnet/product/ProductControls.d.ts +52 -0
  33. package/dist/planmagnet/product/ProductControls.d.ts.map +1 -0
  34. package/dist/planmagnet/product/ProductControls.js +780 -0
  35. package/dist/planmagnet/product/ProductControls.js.map +1 -0
  36. package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +1 -1
  37. package/dist/planmagnet/roadmaps/RoadmapControls.js +1 -1
  38. package/dist/planmagnet/roadmaps/RoadmapControls.js.map +1 -1
  39. package/dist/planmagnet/utils/formValidation.d.ts +11 -0
  40. package/dist/planmagnet/utils/formValidation.d.ts.map +1 -1
  41. package/dist/planmagnet/utils/formValidation.js +13 -1
  42. package/dist/planmagnet/utils/formValidation.js.map +1 -1
  43. package/package.json +1 -1
@@ -1,204 +1,234 @@
1
1
  import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
2
  import { PersonName as n } from "../people/People.js";
3
- import { countLabel as r, useFeatureCounts as i } from "../hooks/useCounts.js";
4
- import { detailPath as a, rowLinkProps as o } from "../utils/rowNavigation.js";
5
- import { PlanningFocusBadge as s, planningFocusLabel as c } from "../roadmaps/planningFocus.js";
6
- import { useState as l } from "react";
7
- import { Calendar as u, GitBranch as d, Loader2 as f, Package as p, Plus as m } from "lucide-react";
8
- import { gql as h } from "@apollo/client";
9
- import { useQuery as g } from "@apollo/client/react";
10
- import { jsx as _, jsxs as v } from "react/jsx-runtime";
11
- import { useI18n as y } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
- import { Button as b, Card as x, CardContent as S, CardHeader as C, CardTitle as w } from "@burdenoff/fe-libs/ui";
3
+ import { enumLabel as r } from "../controls/WorkItemControls.js";
4
+ import { detailPath as i, rowLinkProps as a } from "../utils/rowNavigation.js";
5
+ import { useState as o } from "react";
6
+ import { Archive as s, GitBranch as c, Loader2 as l, Map as u, Package as d, Plus as f, Star as p } from "lucide-react";
7
+ import { gql as m } from "@apollo/client";
8
+ import { useQuery as h } from "@apollo/client/react";
9
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
10
+ import { useI18n as v } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
+ import { Badge as y, Button as b, Card as x, CardContent as S, CardHeader as C, CardTitle as w } from "@burdenoff/fe-libs/ui";
13
12
  //#region src/planmagnet/pages/ProductsProductsPagePage.tsx
14
- var T = h`
15
- query ListRoadmaps($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
16
- planmagnetRoadmaps(workspaceId: $workspaceId, pagination: $pagination) {
13
+ var T = m`
14
+ query GetProducts(
15
+ $workspaceId: ID!
16
+ $filter: PlanmagnetProductFilter
17
+ $pagination: PlanmagnetPaginationInput
18
+ ) {
19
+ planmagnetProducts(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {
17
20
  items {
18
21
  id
19
- workspaceId
20
22
  name
21
23
  description
22
- type
23
- planningFocus
24
- isPublic
24
+ vision
25
+ lifecycleStage
25
26
  ownerId
26
- metadata
27
- createdBy
28
- createdAt
29
- updatedAt
30
- updatedBy
31
- items {
27
+ archivedAt
28
+ northStar {
29
+ name
30
+ unit
31
+ target
32
+ current
33
+ progressRatio
34
+ }
35
+ roadmaps {
36
+ id
37
+ }
38
+ releases {
32
39
  id
33
- status
34
40
  }
41
+ featureRequests {
42
+ id
43
+ }
44
+ updatedAt
35
45
  }
36
46
  totalCount
37
47
  }
38
48
  }
39
- `, E = h`
40
- query ListFeatureRequestsForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
41
- planmagnetFeatureRequests(workspaceId: $workspaceId, pagination: $pagination) {
42
- totalCount
43
- }
44
- }
45
- `, D = h`
46
- query ListReleasesForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
47
- planmagnetReleases(workspaceId: $workspaceId, pagination: $pagination) {
48
- totalCount
49
- }
50
- }
51
49
  `;
52
- function O() {
53
- let { workspaceId: h } = e(), O = t(), { t: k } = y(), A = i(), [j, M] = l("grid"), { data: N, loading: P, error: F } = g(T, {
50
+ function E() {
51
+ let { workspaceId: m } = e(), E = t(), { t: D } = v(), [O, k] = o(!1), { data: A, loading: j, error: M } = h(T, {
54
52
  variables: {
55
- workspaceId: h,
53
+ workspaceId: m,
54
+ filter: O ? void 0 : { isActive: !0 },
56
55
  pagination: { first: 50 }
57
56
  },
58
- skip: !h
59
- }), { data: I } = g(E, {
60
- variables: {
61
- workspaceId: h,
62
- pagination: { first: 1 }
63
- },
64
- skip: !h
65
- }), { data: L } = g(D, {
66
- variables: {
67
- workspaceId: h,
68
- pagination: { first: 1 }
69
- },
70
- skip: !h
57
+ skip: !m
71
58
  });
72
- if (P && !N) return /* @__PURE__ */ _("div", {
59
+ if (j && !A) return /* @__PURE__ */ g("div", {
73
60
  className: "flex items-center justify-center p-12",
74
- children: /* @__PURE__ */ _(f, { className: "h-8 w-8 animate-spin text-muted-foreground" })
61
+ children: /* @__PURE__ */ g(l, { className: "h-8 w-8 animate-spin text-muted-foreground" })
75
62
  });
76
- if (F) return /* @__PURE__ */ v("div", {
63
+ if (M) return /* @__PURE__ */ _("div", {
77
64
  className: "p-6 text-destructive",
78
65
  children: [
79
- k("planmagnet.products.errorLoading", "Failed to load products"),
66
+ D("planmagnet.products.errorLoading", "Failed to load products"),
80
67
  ": ",
81
- F.message
68
+ M.message
82
69
  ]
83
70
  });
84
- let R = N?.planmagnetRoadmaps?.items ?? [], z = N?.planmagnetRoadmaps?.totalCount ?? 0, B = L?.planmagnetReleases?.totalCount ?? 0;
85
- return /* @__PURE__ */ v("div", {
71
+ let N = A?.planmagnetProducts?.items ?? [], P = A?.planmagnetProducts?.totalCount ?? 0;
72
+ return /* @__PURE__ */ _("div", {
86
73
  className: "space-y-6 p-6",
87
74
  children: [
88
- /* @__PURE__ */ v("div", {
75
+ /* @__PURE__ */ _("div", {
89
76
  className: "flex items-center justify-between",
90
- children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ v("h1", {
77
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("h1", {
91
78
  className: "text-2xl font-semibold flex items-center gap-2",
92
79
  children: [
93
- /* @__PURE__ */ _(p, { className: "h-6 w-6" }),
80
+ /* @__PURE__ */ g(d, { className: "h-6 w-6" }),
94
81
  " ",
95
- k("planmagnet.products.title", "Products")
82
+ D("planmagnet.products.title", "Products")
96
83
  ]
97
- }), /* @__PURE__ */ _("p", {
84
+ }), /* @__PURE__ */ g("p", {
98
85
  className: "text-sm text-muted-foreground mt-1",
99
- children: k("planmagnet.products.subtitle", "Manage your product portfolio and track feature development")
100
- })] }), /* @__PURE__ */ v(b, {
101
- size: "sm",
102
- onClick: () => O("/products/create-product-page"),
103
- children: [/* @__PURE__ */ _(m, { className: "h-4 w-4 mr-1" }), k("planmagnet.products.actions.newProduct", "New Product")]
86
+ children: D("planmagnet.products.subtitle", "Strategy entities that link roadmaps, releases, feature requests and OKRs")
87
+ })] }), /* @__PURE__ */ _("div", {
88
+ className: "flex items-center gap-2",
89
+ children: [/* @__PURE__ */ _(b, {
90
+ size: "sm",
91
+ variant: O ? "default" : "outline",
92
+ onClick: () => k((e) => !e),
93
+ "data-testid": "products-toggle-archived",
94
+ children: [/* @__PURE__ */ g(s, { className: "h-4 w-4 mr-1" }), O ? D("planmagnet.products.actions.hideArchived", "Hide archived") : D("planmagnet.products.actions.showArchived", "Show archived")]
95
+ }), /* @__PURE__ */ _(b, {
96
+ size: "sm",
97
+ onClick: () => E("/products/create-product-page"),
98
+ children: [/* @__PURE__ */ g(f, { className: "h-4 w-4 mr-1" }), D("planmagnet.products.actions.newProduct", "New Product")]
99
+ })]
104
100
  })]
105
101
  }),
106
- /* @__PURE__ */ _("div", {
102
+ /* @__PURE__ */ g("div", {
107
103
  className: "grid gap-4 md:grid-cols-3",
108
104
  children: [
109
105
  {
110
- label: k("planmagnet.products.metrics.totalProducts", "Total Products"),
111
- val: z,
112
- icon: p,
106
+ label: D("planmagnet.products.metrics.totalProducts", "Total Products"),
107
+ val: P,
108
+ icon: d,
113
109
  color: "text-blue-500"
114
110
  },
115
111
  {
116
- label: k("planmagnet.products.metrics.openFeatures", "Open feature requests"),
117
- val: r(A?.open),
118
- icon: d,
112
+ label: D("planmagnet.products.metrics.roadmaps", "Linked roadmaps"),
113
+ val: N.reduce((e, t) => e + t.roadmaps.length, 0),
114
+ icon: u,
119
115
  color: "text-green-500"
120
116
  },
121
117
  {
122
- label: k("planmagnet.products.metrics.releases", "Releases"),
123
- val: B,
124
- icon: u,
118
+ label: D("planmagnet.products.metrics.releases", "Linked releases"),
119
+ val: N.reduce((e, t) => e + t.releases.length, 0),
120
+ icon: c,
125
121
  color: "text-purple-500"
126
122
  }
127
- ].map((e) => /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
123
+ ].map((e) => /* @__PURE__ */ g(x, { children: /* @__PURE__ */ g(S, {
128
124
  className: "pt-6",
129
- children: /* @__PURE__ */ v("div", {
125
+ children: /* @__PURE__ */ _("div", {
130
126
  className: "flex items-center justify-between",
131
- children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
127
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
132
128
  className: "text-sm text-muted-foreground",
133
129
  children: e.label
134
- }), /* @__PURE__ */ _("p", {
130
+ }), /* @__PURE__ */ g("p", {
135
131
  className: "text-2xl font-bold",
136
132
  children: e.val
137
- })] }), /* @__PURE__ */ _(e.icon, { className: `h-8 w-8 ${e.color} opacity-60` })]
133
+ })] }), /* @__PURE__ */ g(e.icon, { className: `h-8 w-8 ${e.color} opacity-60` })]
138
134
  })
139
135
  }) }, e.label))
140
136
  }),
141
- /* @__PURE__ */ _("div", {
137
+ N.length === 0 ? /* @__PURE__ */ g(x, { children: /* @__PURE__ */ g(S, {
138
+ className: "py-12 text-center text-sm text-muted-foreground",
139
+ children: D("planmagnet.products.empty", "No products yet. Create one to get started.")
140
+ }) }) : /* @__PURE__ */ g("div", {
142
141
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-2",
143
- children: R.map((e) => /* @__PURE__ */ v(x, {
144
- ...o(() => O(a("/products/product-detail-page", e.id)), e.name),
145
- children: [/* @__PURE__ */ _(C, { children: /* @__PURE__ */ v("div", {
146
- className: "flex items-center justify-between",
147
- children: [/* @__PURE__ */ _(w, {
142
+ children: N.map((e) => /* @__PURE__ */ _(x, {
143
+ ...a(() => E(i("/products/product-detail-page", e.id)), e.name),
144
+ children: [/* @__PURE__ */ g(C, { children: /* @__PURE__ */ _("div", {
145
+ className: "flex items-center justify-between gap-2",
146
+ children: [/* @__PURE__ */ g(w, {
148
147
  className: "text-base",
149
148
  children: e.name
150
- }), /* @__PURE__ */ _(s, { focus: e.planningFocus })]
151
- }) }), /* @__PURE__ */ v(S, {
149
+ }), /* @__PURE__ */ _("div", {
150
+ className: "flex items-center gap-1 shrink-0",
151
+ children: [e.archivedAt && /* @__PURE__ */ g(y, {
152
+ variant: "outline",
153
+ className: "text-xs",
154
+ children: D("planmagnet.products.shared.archived", "Archived")
155
+ }), /* @__PURE__ */ g(y, {
156
+ variant: "secondary",
157
+ className: "text-xs capitalize",
158
+ children: r(e.lifecycleStage)
159
+ })]
160
+ })]
161
+ }) }), /* @__PURE__ */ _(S, {
152
162
  className: "space-y-3",
153
163
  children: [
154
- /* @__PURE__ */ _("p", {
155
- className: "text-sm text-muted-foreground",
156
- children: e.description ?? k("planmagnet.products.shared.noDescription", "No description")
164
+ /* @__PURE__ */ g("p", {
165
+ className: "text-sm text-muted-foreground line-clamp-2",
166
+ children: e.vision || D("planmagnet.products.shared.noVision", "No vision set")
157
167
  }),
158
- /* @__PURE__ */ v("div", {
168
+ /* @__PURE__ */ _("div", {
159
169
  className: "grid grid-cols-3 gap-2 text-center",
160
170
  children: [
161
- /* @__PURE__ */ v("div", {
171
+ /* @__PURE__ */ _("div", {
162
172
  className: "rounded border p-2",
163
- children: [/* @__PURE__ */ _("p", {
173
+ children: [/* @__PURE__ */ g("p", {
164
174
  className: "text-lg font-bold",
165
- children: e.items?.length ?? 0
166
- }), /* @__PURE__ */ _("p", {
175
+ children: e.roadmaps.length
176
+ }), /* @__PURE__ */ g("p", {
167
177
  className: "text-xs text-muted-foreground",
168
- children: k("planmagnet.products.shared.items", "Items")
178
+ children: D("planmagnet.products.shared.roadmaps", "Roadmaps")
169
179
  })]
170
180
  }),
171
- /* @__PURE__ */ v("div", {
181
+ /* @__PURE__ */ _("div", {
172
182
  className: "rounded border p-2",
173
- children: [/* @__PURE__ */ _("p", {
183
+ children: [/* @__PURE__ */ g("p", {
174
184
  className: "text-lg font-bold",
175
- children: e.isPublic ? k("planmagnet.products.shared.public", "Public") : k("planmagnet.products.shared.private", "Private")
176
- }), /* @__PURE__ */ _("p", {
185
+ children: e.releases.length
186
+ }), /* @__PURE__ */ g("p", {
177
187
  className: "text-xs text-muted-foreground",
178
- children: k("planmagnet.products.shared.visibility", "Visibility")
188
+ children: D("planmagnet.products.shared.releases", "Releases")
179
189
  })]
180
190
  }),
181
- /* @__PURE__ */ v("div", {
191
+ /* @__PURE__ */ _("div", {
182
192
  className: "rounded border p-2",
183
- children: [/* @__PURE__ */ _("p", {
193
+ children: [/* @__PURE__ */ g("p", {
184
194
  className: "text-lg font-bold",
185
- children: c(e.planningFocus)
195
+ children: e.featureRequests.length
186
196
  }), /* @__PURE__ */ _("p", {
187
197
  className: "text-xs text-muted-foreground",
188
- children: k("planmagnet.products.shared.planningFocus", "Planning focus")
198
+ children: [/* @__PURE__ */ g(p, { className: "inline h-3 w-3 mr-0.5" }), D("planmagnet.products.shared.features", "Features")]
189
199
  })]
190
200
  })
191
201
  ]
192
202
  }),
193
- /* @__PURE__ */ v("div", {
203
+ e.northStar && /* @__PURE__ */ g("div", {
204
+ className: "rounded border p-2 text-xs",
205
+ children: /* @__PURE__ */ _("div", {
206
+ className: "flex items-center justify-between",
207
+ children: [/* @__PURE__ */ g("span", {
208
+ className: "text-muted-foreground",
209
+ children: e.northStar.name
210
+ }), /* @__PURE__ */ _("span", {
211
+ className: "font-medium",
212
+ children: [
213
+ e.northStar.current,
214
+ " / ",
215
+ e.northStar.target,
216
+ " ",
217
+ e.northStar.unit,
218
+ e.northStar.progressRatio == null ? "" : ` (${Math.round(e.northStar.progressRatio * 100)}%)`
219
+ ]
220
+ })]
221
+ })
222
+ }),
223
+ /* @__PURE__ */ _("div", {
194
224
  className: "flex items-center justify-between text-xs text-muted-foreground",
195
- children: [/* @__PURE__ */ v("span", { children: [
196
- k("planmagnet.products.shared.owner", "Owner"),
225
+ children: [/* @__PURE__ */ _("span", { children: [
226
+ D("planmagnet.products.shared.owner", "Owner"),
197
227
  ":",
198
228
  " ",
199
- /* @__PURE__ */ _(n, { id: e.ownerId })
200
- ] }), /* @__PURE__ */ v("span", { children: [
201
- k("planmagnet.products.shared.updated", "Updated"),
229
+ /* @__PURE__ */ g(n, { id: e.ownerId })
230
+ ] }), /* @__PURE__ */ _("span", { children: [
231
+ D("planmagnet.products.shared.updated", "Updated"),
202
232
  " ",
203
233
  new Date(e.updatedAt).toLocaleDateString()
204
234
  ] })]
@@ -211,6 +241,6 @@ function O() {
211
241
  });
212
242
  }
213
243
  //#endregion
214
- export { O as ProductsProductsPagePage };
244
+ export { E as ProductsProductsPagePage };
215
245
 
216
246
  //# sourceMappingURL=ProductsProductsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsProductsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductsPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Package, Plus, TrendingUp, Calendar, GitBranch, Map, Loader2 } from 'lucide-react';\nimport { countLabel, useFeatureCounts } from '../hooks/useCounts';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { PlanningFocusBadge, planningFocusLabel } from '../roadmaps/planningFocus';\n\nconst LIST_ROADMAPS = gql`\n query ListRoadmaps($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetRoadmaps(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n workspaceId\n name\n description\n type\n planningFocus\n isPublic\n ownerId\n metadata\n createdBy\n createdAt\n updatedAt\n updatedBy\n items {\n id\n status\n }\n }\n totalCount\n }\n }\n`;\n\nconst LIST_FEATURE_REQUESTS = gql`\n query ListFeatureRequestsForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetFeatureRequests(workspaceId: $workspaceId, pagination: $pagination) {\n totalCount\n }\n }\n`;\n\nconst LIST_RELEASES = gql`\n query ListReleasesForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetReleases(workspaceId: $workspaceId, pagination: $pagination) {\n totalCount\n }\n }\n`;\n\ninterface RoadmapNode {\n id: string;\n name: string;\n description: string | null;\n type: string;\n planningFocus: string | null;\n isPublic: boolean;\n ownerId: string;\n createdAt: string;\n updatedAt: string;\n items: { id: string; status: string }[];\n}\n\nexport function ProductsProductsPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const { t } = useI18n();\n const featureCounts = useFeatureCounts();\n const [view, setView] = useState<'grid' | 'list'>('grid');\n\n const {\n data: roadmapsData,\n loading: roadmapsLoading,\n error: roadmapsError,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = useQuery<Record<string, any>>(LIST_ROADMAPS, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n variables: { workspaceId, pagination: { first: 50 } },\n skip: !workspaceId,\n });\n\n const {\n data: featuresData,\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>>(LIST_FEATURE_REQUESTS, {\n variables: { workspaceId, pagination: { first: 1 } },\n skip: !workspaceId,\n });\n\n const {\n data: releasesData,\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>>(LIST_RELEASES, {\n variables: { workspaceId, pagination: { first: 1 } },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page.\n if (roadmapsLoading && !roadmapsData) {\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 (roadmapsError) {\n return (\n <div className=\"p-6 text-destructive\">\n {t('planmagnet.products.errorLoading', 'Failed to load products')}: {roadmapsError.message}\n </div>\n );\n }\n\n const roadmaps: RoadmapNode[] = roadmapsData?.planmagnetRoadmaps?.items ?? [];\n const totalRoadmaps = roadmapsData?.planmagnetRoadmaps?.totalCount ?? 0;\n const totalReleases = releasesData?.planmagnetReleases?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <Package className=\"h-6 w-6\" /> {t('planmagnet.products.title', 'Products')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {t(\n 'planmagnet.products.subtitle',\n 'Manage your product portfolio and track feature development'\n )}\n </p>\n </div>\n <Button size=\"sm\" onClick={() => navigate('/products/create-product-page')}>\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('planmagnet.products.actions.newProduct', 'New Product')}\n </Button>\n </div>\n\n {/* BOFF-7992: \"Total Products\" and \"Roadmaps\" were the same number (a product is a roadmap), and \"Active\n Features\" counted every status. Now three distinct numbers; open = submitted, in review, planned or in\n progress. */}\n <div className=\"grid gap-4 md:grid-cols-3\">\n {[\n {\n label: t('planmagnet.products.metrics.totalProducts', 'Total Products'),\n val: totalRoadmaps,\n icon: Package,\n color: 'text-blue-500',\n },\n {\n label: t('planmagnet.products.metrics.openFeatures', 'Open feature requests'),\n val: countLabel(featureCounts?.open),\n icon: GitBranch,\n color: 'text-green-500',\n },\n {\n label: t('planmagnet.products.metrics.releases', 'Releases'),\n val: totalReleases,\n icon: Calendar,\n color: 'text-purple-500',\n },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">{s.label}</p>\n <p className=\"text-2xl font-bold\">{s.val}</p>\n </div>\n <s.icon className={`h-8 w-8 ${s.color} opacity-60`} />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-2\">\n {roadmaps.map((roadmap) => (\n <Card\n key={roadmap.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/product-detail-page', roadmap.id)),\n roadmap.name\n )}\n >\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{roadmap.name}</CardTitle>\n <PlanningFocusBadge focus={roadmap.planningFocus} />\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {roadmap.description ??\n t('planmagnet.products.shared.noDescription', 'No description')}\n </p>\n <div className=\"grid grid-cols-3 gap-2 text-center\">\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{roadmap.items?.length ?? 0}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.items', 'Items')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">\n {roadmap.isPublic\n ? t('planmagnet.products.shared.public', 'Public')\n : t('planmagnet.products.shared.private', 'Private')}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.visibility', 'Visibility')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{planningFocusLabel(roadmap.planningFocus)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.planningFocus', 'Planning focus')}\n </p>\n </div>\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {t('planmagnet.products.shared.owner', 'Owner')}:{' '}\n <PersonName id={roadmap.ownerId} />\n </span>\n <span>\n {t('planmagnet.products.shared.updated', 'Updated')}{' '}\n {new Date(roadmap.updatedAt).toLocaleDateString()}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProductsProductsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Package, Plus, Archive, Loader2, Map, GitBranch, Star } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\n\n/**\n * The real \"Products\" list (BOFF-8045). Before this shipped, this page listed Roadmaps\n * relabelled as products (CAPABILITY_REGISTER: \"not-built\") — it now queries the Product\n * entity directly, which links roadmaps/releases/feature requests/OKR objectives rather\n * than being one.\n */\n\nconst LIST_PRODUCTS = gql`\n query GetProducts(\n $workspaceId: ID!\n $filter: PlanmagnetProductFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProducts(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n description\n vision\n lifecycleStage\n ownerId\n archivedAt\n northStar {\n name\n unit\n target\n current\n progressRatio\n }\n roadmaps {\n id\n }\n releases {\n id\n }\n featureRequests {\n id\n }\n updatedAt\n }\n totalCount\n }\n }\n`;\n\ninterface ProductNorthStar {\n name: string;\n unit: string;\n target: number;\n current: number;\n progressRatio: number | null;\n}\n\ninterface ProductListNode {\n id: string;\n name: string;\n description: string | null;\n vision: string;\n lifecycleStage: string;\n ownerId: string;\n archivedAt: string | null;\n northStar: ProductNorthStar | null;\n roadmaps: { id: string }[];\n releases: { id: string }[];\n featureRequests: { id: string }[];\n updatedAt: string;\n}\n\nexport function ProductsProductsPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const { t } = useI18n();\n const [showArchived, setShowArchived] = useState(false);\n\n const { data, loading, error } = useQuery<{\n planmagnetProducts: { items: ProductListNode[]; totalCount: number };\n }>(LIST_PRODUCTS, {\n variables: {\n workspaceId,\n filter: showArchived ? undefined : { isActive: true },\n pagination: { first: 50 },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page.\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 (\n <div className=\"p-6 text-destructive\">\n {t('planmagnet.products.errorLoading', 'Failed to load products')}: {error.message}\n </div>\n );\n }\n\n const products = data?.planmagnetProducts?.items ?? [];\n const totalProducts = data?.planmagnetProducts?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <Package className=\"h-6 w-6\" /> {t('planmagnet.products.title', 'Products')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {t(\n 'planmagnet.products.subtitle',\n 'Strategy entities that link roadmaps, releases, feature requests and OKRs'\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"sm\"\n variant={showArchived ? 'default' : 'outline'}\n onClick={() => setShowArchived((v) => !v)}\n data-testid=\"products-toggle-archived\"\n >\n <Archive className=\"h-4 w-4 mr-1\" />\n {showArchived\n ? t('planmagnet.products.actions.hideArchived', 'Hide archived')\n : t('planmagnet.products.actions.showArchived', 'Show archived')}\n </Button>\n <Button size=\"sm\" onClick={() => navigate('/products/create-product-page')}>\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('planmagnet.products.actions.newProduct', 'New Product')}\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n {[\n {\n label: t('planmagnet.products.metrics.totalProducts', 'Total Products'),\n val: totalProducts,\n icon: Package,\n color: 'text-blue-500',\n },\n {\n label: t('planmagnet.products.metrics.roadmaps', 'Linked roadmaps'),\n val: products.reduce((sum, p) => sum + p.roadmaps.length, 0),\n icon: Map,\n color: 'text-green-500',\n },\n {\n label: t('planmagnet.products.metrics.releases', 'Linked releases'),\n val: products.reduce((sum, p) => sum + p.releases.length, 0),\n icon: GitBranch,\n color: 'text-purple-500',\n },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">{s.label}</p>\n <p className=\"text-2xl font-bold\">{s.val}</p>\n </div>\n <s.icon className={`h-8 w-8 ${s.color} opacity-60`} />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {products.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-sm text-muted-foreground\">\n {t('planmagnet.products.empty', 'No products yet. Create one to get started.')}\n </CardContent>\n </Card>\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-2\">\n {products.map((product) => (\n <Card\n key={product.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/product-detail-page', product.id)),\n product.name\n )}\n >\n <CardHeader>\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base\">{product.name}</CardTitle>\n <div className=\"flex items-center gap-1 shrink-0\">\n {product.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {t('planmagnet.products.shared.archived', 'Archived')}\n </Badge>\n )}\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {enumLabel(product.lifecycleStage)}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground line-clamp-2\">\n {product.vision || t('planmagnet.products.shared.noVision', 'No vision set')}\n </p>\n <div className=\"grid grid-cols-3 gap-2 text-center\">\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.roadmaps.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.roadmaps', 'Roadmaps')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.releases.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.releases', 'Releases')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.featureRequests.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n <Star className=\"inline h-3 w-3 mr-0.5\" />\n {t('planmagnet.products.shared.features', 'Features')}\n </p>\n </div>\n </div>\n {product.northStar && (\n <div className=\"rounded border p-2 text-xs\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground\">{product.northStar.name}</span>\n <span className=\"font-medium\">\n {product.northStar.current} / {product.northStar.target}{' '}\n {product.northStar.unit}\n {product.northStar.progressRatio != null\n ? ` (${Math.round(product.northStar.progressRatio * 100)}%)`\n : ''}\n </span>\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {t('planmagnet.products.shared.owner', 'Owner')}:{' '}\n <PersonName id={product.ownerId} />\n </span>\n <span>\n {t('planmagnet.products.shared.updated', 'Updated')}{' '}\n {new Date(product.updatedAt).toLocaleDateString()}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAkBA,IAAM,IAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DzB,SAAgB,IAA2B;CACzC,IAAM,EAAE,mBAAgB,GAAe,EACjC,IAAW,GAAuB,EAClC,EAAE,SAAM,GAAS,EACjB,CAAC,GAAc,KAAmB,EAAS,GAAM,EAEjD,EAAE,SAAM,YAAS,aAAU,EAE9B,GAAe;EAChB,WAAW;GACT;GACA,QAAQ,IAAe,KAAA,IAAY,EAAE,UAAU,IAAM;GACrD,YAAY,EAAE,OAAO,IAAI;GAC1B;EACD,MAAM,CAAC;EACR,CAAC;AAGF,KAAI,KAAW,CAAC,EACd,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAS,WAAU,8CAA+C,CAAA;EAC9D,CAAA;AAIV,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACG,EAAE,oCAAoC,0BAA0B;GAAC;GAAG,EAAM;GACvE;;CAIV,IAAM,IAAW,GAAM,oBAAoB,SAAS,EAAE,EAChD,IAAgB,GAAM,oBAAoB,cAAc;AAE9D,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAd;MACE,kBAAC,GAAD,EAAS,WAAU,WAAY,CAAA;;MAAE,EAAE,6BAA6B,WAAW;MACxE;QACL,kBAAC,KAAD;KAAG,WAAU;eACV,EACC,gCACA,4EACD;KACC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MACE,MAAK;MACL,SAAS,IAAe,YAAY;MACpC,eAAe,GAAiB,MAAM,CAAC,EAAE;MACzC,eAAY;gBAJd,CAME,kBAAC,GAAD,EAAS,WAAU,gBAAiB,CAAA,EACnC,IACG,EAAE,4CAA4C,gBAAgB,GAC9D,EAAE,4CAA4C,gBAAgB,CAC3D;SACT,kBAAC,GAAD;MAAQ,MAAK;MAAK,eAAe,EAAS,gCAAgC;gBAA1E,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAE,0CAA0C,cAAc,CACpD;QACL;OACF;;GAEN,kBAAC,OAAD;IAAK,WAAU;cACZ;KACC;MACE,OAAO,EAAE,6CAA6C,iBAAiB;MACvE,KAAK;MACL,MAAM;MACN,OAAO;MACR;KACD;MACE,OAAO,EAAE,wCAAwC,kBAAkB;MACnE,KAAK,EAAS,QAAQ,GAAK,MAAM,IAAM,EAAE,SAAS,QAAQ,EAAE;MAC5D,MAAM;MACN,OAAO;MACR;KACD;MACE,OAAO,EAAE,wCAAwC,kBAAkB;MACnE,KAAK,EAAS,QAAQ,GAAK,MAAM,IAAM,EAAE,SAAS,QAAQ,EAAE;MAC5D,MAAM;MACN,OAAO;MACR;KACF,CAAC,KAAK,MACL,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KAAa,WAAU;eACrB,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAiC,EAAE;OAAU,CAAA,EAC1D,kBAAC,KAAD;OAAG,WAAU;iBAAsB,EAAE;OAAQ,CAAA,CACzC,EAAA,CAAA,EACN,kBAAC,EAAE,MAAH,EAAQ,WAAW,WAAW,EAAE,MAAM,cAAgB,CAAA,CAClD;;KACM,CAAA,EACT,EAVI,EAAE,MAUN,CACP;IACE,CAAA;GAEL,EAAS,WAAW,IACnB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAE,6BAA6B,8CAA8C;IAClE,CAAA,EACT,CAAA,GAEP,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAS,KAAK,MACb,kBAAC,GAAD;KAEE,GAAI,QACI,EAAS,EAAW,iCAAiC,EAAQ,GAAG,CAAC,EACvE,EAAQ,KACT;eALH,CAOE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAa,EAAQ;OAAiB,CAAA,EAC3D,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACG,EAAQ,cACP,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAE,uCAAuC,WAAW;QAC/C,CAAA,EAEV,kBAAC,GAAD;QAAO,SAAQ;QAAY,WAAU;kBAClC,EAAU,EAAQ,eAAe;QAC5B,CAAA,CACJ;SACF;SACK,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAQ,UAAU,EAAE,uCAAuC,gBAAgB;QAC1E,CAAA;OACJ,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB,EAAQ,SAAS;WAAW,CAAA,EAC9D,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAE,uCAAuC,WAAW;WACnD,CAAA,CACA;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB,EAAQ,SAAS;WAAW,CAAA,EAC9D,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAE,uCAAuC,WAAW;WACnD,CAAA,CACA;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB,EAAQ,gBAAgB;WAAW,CAAA,EACrE,kBAAC,KAAD;WAAG,WAAU;qBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,yBAA0B,CAAA,EACzC,EAAE,uCAAuC,WAAW,CACnD;aACA;;SACF;;OACL,EAAQ,aACP,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAAyB,EAAQ,UAAU;UAAY,CAAA,EACvE,kBAAC,QAAD;UAAM,WAAU;oBAAhB;WACG,EAAQ,UAAU;WAAQ;WAAI,EAAQ,UAAU;WAAQ;WACxD,EAAQ,UAAU;WAClB,EAAQ,UAAU,iBAAiB,OAEhC,KADA,KAAK,KAAK,MAAM,EAAQ,UAAU,gBAAgB,IAAI,CAAC;WAEtD;YACH;;QACF,CAAA;OAER,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD,EAAA,UAAA;SACG,EAAE,oCAAoC,QAAQ;SAAC;SAAE;SAClD,kBAAC,GAAD,EAAY,IAAI,EAAQ,SAAW,CAAA;SAC9B,EAAA,CAAA,EACP,kBAAC,QAAD,EAAA,UAAA;SACG,EAAE,sCAAsC,UAAU;SAAE;SACpD,IAAI,KAAK,EAAQ,UAAU,CAAC,oBAAoB;SAC5C,EAAA,CAAA,CACH;;OACM;QACT;OAvEA,EAAQ,GAuER,CACP;IACE,CAAA;GAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"TasksCreateTaskPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"names":[],"mappings":"AAsEA,wBAAgB,uBAAuB,4CAqStC"}
1
+ {"version":3,"file":"TasksCreateTaskPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"names":[],"mappings":"AAsEA,wBAAgB,uBAAuB,4CAgVtC"}