@burdenoff/microfe-planmagnet 2026.1001.6 → 2026.1001.7

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 (81) hide show
  1. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoutes.js +10 -6
  3. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  4. package/dist/planmagnet/automation/automationRuleTypes.d.ts +31 -19
  5. package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +1 -1
  6. package/dist/planmagnet/automation/automationRuleTypes.js +4 -8
  7. package/dist/planmagnet/automation/automationRuleTypes.js.map +1 -1
  8. package/dist/planmagnet/controls/FeatureControls.d.ts +18 -1
  9. package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -1
  10. package/dist/planmagnet/controls/FeatureControls.js +259 -202
  11. package/dist/planmagnet/controls/FeatureControls.js.map +1 -1
  12. package/dist/planmagnet/controls/FeedbackControls.d.ts +70 -0
  13. package/dist/planmagnet/controls/FeedbackControls.d.ts.map +1 -0
  14. package/dist/planmagnet/controls/FeedbackControls.js +153 -0
  15. package/dist/planmagnet/controls/FeedbackControls.js.map +1 -0
  16. package/dist/planmagnet/controls/SyncControls.d.ts.map +1 -1
  17. package/dist/planmagnet/controls/SyncControls.js +1 -0
  18. package/dist/planmagnet/controls/SyncControls.js.map +1 -1
  19. package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts +47 -0
  20. package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts.map +1 -0
  21. package/dist/planmagnet/controls/WebhookSubscriptionControls.js +542 -0
  22. package/dist/planmagnet/controls/WebhookSubscriptionControls.js.map +1 -0
  23. package/dist/planmagnet/dashboards/DashboardUI.js +7 -7
  24. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js +4 -4
  25. package/dist/planmagnet/forecast/DeliveryForecastCard.js +8 -8
  26. package/dist/planmagnet/forecast/ProjectOutlookCard.js +10 -10
  27. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +9 -9
  28. package/dist/planmagnet/forecast/ResourceForecastCard.js +6 -6
  29. package/dist/planmagnet/integrations/syncTypes.d.ts +2 -1
  30. package/dist/planmagnet/integrations/syncTypes.d.ts.map +1 -1
  31. package/dist/planmagnet/integrations/syncTypes.js +19 -9
  32. package/dist/planmagnet/integrations/syncTypes.js.map +1 -1
  33. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +8 -8
  34. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +23 -23
  35. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
  36. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +340 -248
  37. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  38. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.d.ts.map +1 -1
  39. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js +172 -167
  40. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js.map +1 -1
  41. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.d.ts.map +1 -1
  42. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js +92 -83
  43. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js.map +1 -1
  44. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts +2 -0
  45. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts.map +1 -0
  46. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js +175 -0
  47. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js.map +1 -0
  48. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
  49. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +151 -126
  50. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
  51. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
  52. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +136 -129
  53. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
  54. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +1 -1
  55. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +149 -119
  56. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
  57. package/dist/planmagnet/pages/ProductsProductsPagePage.js +13 -13
  58. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +9 -9
  59. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +8 -8
  60. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +12 -12
  61. package/dist/planmagnet/pages/ReportsReportsPagePage.js +23 -23
  62. package/dist/planmagnet/pages/TasksMyDashboardPagePage.js +18 -18
  63. package/dist/planmagnet/pages/TasksMyWorkPagePage.js +10 -10
  64. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +5 -5
  65. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +8 -8
  66. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js +6 -6
  67. package/dist/planmagnet/pages/analytics/MetricsCard.js +6 -6
  68. package/dist/planmagnet/pages/analytics/QualityMetricsCard.js +6 -6
  69. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +8 -8
  70. package/dist/planmagnet/pages/analytics/StatusFlowCard.js +7 -7
  71. package/dist/planmagnet/pages/analytics/ThroughputCard.js +7 -7
  72. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js +7 -7
  73. package/dist/planmagnet/people/People.d.ts +14 -0
  74. package/dist/planmagnet/people/People.d.ts.map +1 -1
  75. package/dist/planmagnet/people/People.js +36 -22
  76. package/dist/planmagnet/people/People.js.map +1 -1
  77. package/dist/planmagnet/webhooks/webhookTypes.d.ts +54 -0
  78. package/dist/planmagnet/webhooks/webhookTypes.d.ts.map +1 -0
  79. package/dist/planmagnet/webhooks/webhookTypes.js +17 -0
  80. package/dist/planmagnet/webhooks/webhookTypes.js.map +1 -0
  81. package/package.json +1 -1
@@ -3,15 +3,16 @@ import { PersonName as n } from "../people/People.js";
3
3
  import { countLabel as r, useFeatureCounts as i } from "../hooks/useCounts.js";
4
4
  import { detailPath as a, rowLinkProps as o } from "../utils/rowNavigation.js";
5
5
  import { FeatureTriageActions as s, isSnoozed as c } from "../controls/FeatureTriage.js";
6
- import { KANO_META as l, KANO_VALUES as u, MOSCOW_META as ee, MOSCOW_VALUES as d, QUADRANT_META as f, QUADRANT_VALUES as p, QuadrantBadge as m, riceScoreMissingHint as h } from "../controls/PrioritizationControls.js";
7
- import { useState as g } from "react";
8
- import { ArrowUpDown as te, Filter as ne, Gauge as _, Loader2 as v, Plus as y, Star as b, Target as re, ThumbsUp as ie } from "lucide-react";
9
- import { gql as x } from "@apollo/client";
10
- import { useQuery as S } from "@apollo/client/react";
11
- import { jsx as C, jsxs as w } from "react/jsx-runtime";
12
- import { Badge as T, Button as E, Card as D, CardContent as O } from "@burdenoff/fe-libs/ui";
6
+ import { KANO_META as l, KANO_VALUES as u, MOSCOW_META as d, MOSCOW_VALUES as ee, QUADRANT_META as f, QUADRANT_VALUES as p, QuadrantBadge as m, riceScoreMissingHint as h } from "../controls/PrioritizationControls.js";
7
+ import { CategoryBadge as te, RatingDisplay as g } from "../controls/FeedbackControls.js";
8
+ import { useState as _ } from "react";
9
+ import { ArrowUpDown as v, Filter as y, Gauge as b, Loader2 as ne, Plus as re, Star as ie, Target as ae, ThumbsUp as x } from "lucide-react";
10
+ import { gql as S } from "@apollo/client";
11
+ import { useQuery as C } from "@apollo/client/react";
12
+ import { jsx as w, jsxs as T } from "react/jsx-runtime";
13
+ import { Badge as E, Button as D, Card as O, CardContent as k } from "@burdenoff/fe-libs/ui";
13
14
  //#region src/planmagnet/pages/ProductsFeaturesPagePage.tsx
14
- var k = x`
15
+ var A = S`
15
16
  query ListFeatureRequests(
16
17
  $workspaceId: ID!
17
18
  $filter: PlanmagnetFeatureRequestFilter
@@ -45,13 +46,15 @@ var k = x`
45
46
  confidence
46
47
  effortScore
47
48
  riceScore
49
+ rating
50
+ category
48
51
  createdAt
49
52
  updatedAt
50
53
  }
51
54
  totalCount
52
55
  }
53
56
  }
54
- `, A = {
57
+ `, j = {
55
58
  SUBMITTED: "bg-gray-100 text-gray-800",
56
59
  UNDER_REVIEW: "bg-yellow-100 text-yellow-800",
57
60
  PLANNED: "bg-blue-100 text-blue-800",
@@ -60,30 +63,30 @@ var k = x`
60
63
  DECLINED: "bg-red-100 text-red-800",
61
64
  DUPLICATE: "bg-orange-100 text-orange-800"
62
65
  };
63
- function j() {
64
- let x = t(), { workspaceId: j } = e(), [M, N] = g("all"), [P] = g(() => Date.now()), [F, I] = g("NEWEST"), [L, R] = g(!1), [z, B] = g(""), [V, H] = g(""), [U, W] = g(""), G = i(), K = {
65
- ...M === "TRIAGE" ? { triage: !0 } : M === "SNOOZED" ? { snoozed: !0 } : M === "all" ? {} : { status: M },
66
- ...z ? { moscow: z } : {},
67
- ...V ? { kano: V } : {},
68
- ...U ? { quadrant: U } : {}
69
- }, { data: q, loading: J, error: Y } = S(k, {
66
+ function M() {
67
+ let S = t(), { workspaceId: M } = e(), [N, P] = _("all"), [F] = _(() => Date.now()), [I, L] = _("NEWEST"), [R, z] = _(!1), [B, V] = _(""), [H, U] = _(""), [W, G] = _(""), K = i(), q = {
68
+ ...N === "TRIAGE" ? { triage: !0 } : N === "SNOOZED" ? { snoozed: !0 } : N === "all" ? {} : { status: N },
69
+ ...B ? { moscow: B } : {},
70
+ ...H ? { kano: H } : {},
71
+ ...W ? { quadrant: W } : {}
72
+ }, { data: J, loading: oe, error: Y } = C(A, {
70
73
  variables: {
71
- workspaceId: j,
72
- filter: Object.keys(K).length > 0 ? K : void 0,
74
+ workspaceId: M,
75
+ filter: Object.keys(q).length > 0 ? q : void 0,
73
76
  pagination: { first: 50 },
74
- orderBy: F
77
+ orderBy: I
75
78
  },
76
- skip: !j
79
+ skip: !M
77
80
  });
78
- if (J && !q) return /* @__PURE__ */ C("div", {
81
+ if (oe && !J) return /* @__PURE__ */ w("div", {
79
82
  className: "flex items-center justify-center p-12",
80
- children: /* @__PURE__ */ C(v, { className: "h-8 w-8 animate-spin text-muted-foreground" })
83
+ children: /* @__PURE__ */ w(ne, { className: "h-8 w-8 animate-spin text-muted-foreground" })
81
84
  });
82
- if (Y) return /* @__PURE__ */ w("div", {
85
+ if (Y) return /* @__PURE__ */ T("div", {
83
86
  className: "p-6 text-destructive",
84
87
  children: ["Failed to load features: ", Y.message]
85
88
  });
86
- let X = q?.planmagnetFeatureRequests?.items ?? [], Z = q?.planmagnetFeatureRequests?.totalCount ?? 0, Q = L ? [...X].sort((e, t) => e.riceScore == null && t.riceScore == null ? 0 : e.riceScore == null ? 1 : t.riceScore == null ? -1 : t.riceScore - e.riceScore) : X, ae = [
89
+ let X = J?.planmagnetFeatureRequests?.items ?? [], Z = J?.planmagnetFeatureRequests?.totalCount ?? 0, Q = R ? [...X].sort((e, t) => e.riceScore == null && t.riceScore == null ? 0 : e.riceScore == null ? 1 : t.riceScore == null ? -1 : t.riceScore - e.riceScore) : X, se = [
87
90
  "all",
88
91
  "TRIAGE",
89
92
  "SNOOZED",
@@ -95,103 +98,103 @@ function j() {
95
98
  "DECLINED",
96
99
  "DUPLICATE"
97
100
  ], $ = {
98
- total: r(G?.all),
99
- open: r(G?.open),
100
- inProgress: r(G?.byStatus.IN_PROGRESS),
101
- completed: r(G?.byStatus.COMPLETED)
101
+ total: r(K?.all),
102
+ open: r(K?.open),
103
+ inProgress: r(K?.byStatus.IN_PROGRESS),
104
+ completed: r(K?.byStatus.COMPLETED)
102
105
  };
103
- return /* @__PURE__ */ w("div", {
106
+ return /* @__PURE__ */ T("div", {
104
107
  className: "space-y-6 p-6",
105
108
  children: [
106
- /* @__PURE__ */ w("div", {
109
+ /* @__PURE__ */ T("div", {
107
110
  className: "flex items-center justify-between",
108
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h1", {
111
+ children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h1", {
109
112
  className: "text-2xl font-semibold",
110
113
  children: "Features"
111
- }), /* @__PURE__ */ C("p", {
114
+ }), /* @__PURE__ */ w("p", {
112
115
  className: "text-sm text-muted-foreground",
113
- children: M === "all" ? `${$.total} feature requests` : M === "TRIAGE" ? `${Z} waiting for triage` : `${Z} ${M.toLowerCase().replace("_", " ")} match`
114
- })] }), /* @__PURE__ */ w(E, {
116
+ children: N === "all" ? `${$.total} feature requests` : N === "TRIAGE" ? `${Z} waiting for triage` : `${Z} ${N.toLowerCase().replace("_", " ")} match`
117
+ })] }), /* @__PURE__ */ T(D, {
115
118
  size: "sm",
116
- onClick: () => x("/products/new-feature-page"),
117
- children: [/* @__PURE__ */ C(y, { className: "mr-1 h-4 w-4" }), "New Feature"]
119
+ onClick: () => S("/products/new-feature-page"),
120
+ children: [/* @__PURE__ */ w(re, { className: "mr-1 h-4 w-4" }), "New Feature"]
118
121
  })]
119
122
  }),
120
- /* @__PURE__ */ w("div", {
123
+ /* @__PURE__ */ T("div", {
121
124
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
122
125
  children: [
123
- /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
126
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
124
127
  className: "pt-4",
125
- children: [/* @__PURE__ */ C("p", {
128
+ children: [/* @__PURE__ */ w("p", {
126
129
  className: "text-xs text-muted-foreground",
127
130
  children: "Total Features"
128
- }), /* @__PURE__ */ C("p", {
131
+ }), /* @__PURE__ */ w("p", {
129
132
  className: "text-xl font-bold",
130
133
  children: $.total
131
134
  })]
132
135
  }) }),
133
- /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
136
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
134
137
  className: "pt-4",
135
- children: [/* @__PURE__ */ C("p", {
138
+ children: [/* @__PURE__ */ w("p", {
136
139
  className: "text-xs text-muted-foreground",
137
140
  children: "In Progress"
138
- }), /* @__PURE__ */ C("p", {
141
+ }), /* @__PURE__ */ w("p", {
139
142
  className: "text-xl font-bold",
140
143
  children: $.inProgress
141
144
  })]
142
145
  }) }),
143
- /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
146
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
144
147
  className: "pt-4",
145
- children: [/* @__PURE__ */ C("p", {
148
+ children: [/* @__PURE__ */ w("p", {
146
149
  className: "text-xs text-muted-foreground",
147
150
  children: "Completed"
148
- }), /* @__PURE__ */ C("p", {
151
+ }), /* @__PURE__ */ w("p", {
149
152
  className: "text-xl font-bold",
150
153
  children: $.completed
151
154
  })]
152
155
  }) }),
153
- /* @__PURE__ */ C(D, { children: /* @__PURE__ */ w(O, {
156
+ /* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
154
157
  className: "pt-4",
155
- children: [/* @__PURE__ */ C("p", {
158
+ children: [/* @__PURE__ */ w("p", {
156
159
  className: "text-xs text-muted-foreground",
157
160
  children: "Open"
158
- }), /* @__PURE__ */ C("p", {
161
+ }), /* @__PURE__ */ w("p", {
159
162
  className: "text-xl font-bold",
160
163
  children: $.open
161
164
  })]
162
165
  }) })
163
166
  ]
164
167
  }),
165
- /* @__PURE__ */ w("div", {
168
+ /* @__PURE__ */ T("div", {
166
169
  className: "flex items-center justify-between flex-wrap gap-2",
167
- children: [/* @__PURE__ */ w("div", {
170
+ children: [/* @__PURE__ */ T("div", {
168
171
  className: "flex items-center gap-2",
169
- children: [/* @__PURE__ */ C(ne, { className: "h-4 w-4 text-muted-foreground" }), ae.map((e) => /* @__PURE__ */ C("button", {
170
- onClick: () => N(e),
171
- className: `px-2 py-1 text-xs rounded-md capitalize ${M === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
172
- children: e === "all" ? "All" : e === "TRIAGE" ? `Triage (${r(G?.triage)})` : e === "SNOOZED" ? `Snoozed (${r(G?.snoozed)})` : e.toLowerCase().replace("_", " ")
172
+ children: [/* @__PURE__ */ w(y, { className: "h-4 w-4 text-muted-foreground" }), se.map((e) => /* @__PURE__ */ w("button", {
173
+ onClick: () => P(e),
174
+ className: `px-2 py-1 text-xs rounded-md capitalize ${N === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
175
+ children: e === "all" ? "All" : e === "TRIAGE" ? `Triage (${r(K?.triage)})` : e === "SNOOZED" ? `Snoozed (${r(K?.snoozed)})` : e.toLowerCase().replace("_", " ")
173
176
  }, e))]
174
- }), /* @__PURE__ */ w("div", {
177
+ }), /* @__PURE__ */ T("div", {
175
178
  className: "flex items-center gap-2",
176
179
  children: [
177
- /* @__PURE__ */ C(te, { className: "h-4 w-4 text-muted-foreground" }),
178
- ["NEWEST", "MOST_VOTED"].map((e) => /* @__PURE__ */ C("button", {
179
- onClick: () => I(e),
180
- className: `px-2 py-1 text-xs rounded-md ${!L && F === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
180
+ /* @__PURE__ */ w(v, { className: "h-4 w-4 text-muted-foreground" }),
181
+ ["NEWEST", "MOST_VOTED"].map((e) => /* @__PURE__ */ w("button", {
182
+ onClick: () => L(e),
183
+ className: `px-2 py-1 text-xs rounded-md ${!R && I === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
181
184
  children: e === "NEWEST" ? "Newest" : "Most voted"
182
185
  }, e)),
183
- /* @__PURE__ */ C("button", {
186
+ /* @__PURE__ */ w("button", {
184
187
  type: "button",
185
- "aria-pressed": L,
188
+ "aria-pressed": R,
186
189
  "data-testid": "feature-sort-rice",
187
- onClick: () => R((e) => !e),
188
- className: `px-2 py-1 text-xs rounded-md ${L ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
190
+ onClick: () => z((e) => !e),
191
+ className: `px-2 py-1 text-xs rounded-md ${R ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
189
192
  children: "RICE score"
190
193
  })
191
194
  ]
192
195
  })]
193
196
  }),
194
- L && /* @__PURE__ */ w("p", {
197
+ R && /* @__PURE__ */ T("p", {
195
198
  className: "text-xs text-muted-foreground",
196
199
  "data-testid": "feature-sort-rice-note",
197
200
  children: [
@@ -200,67 +203,67 @@ function j() {
200
203
  " loaded results above — not a server-wide sort."
201
204
  ]
202
205
  }),
203
- /* @__PURE__ */ w("div", {
206
+ /* @__PURE__ */ T("div", {
204
207
  className: "flex flex-wrap items-center gap-3",
205
208
  children: [
206
- /* @__PURE__ */ w("div", {
209
+ /* @__PURE__ */ T("div", {
207
210
  className: "flex items-center gap-1",
208
- children: [/* @__PURE__ */ C("label", {
211
+ children: [/* @__PURE__ */ w("label", {
209
212
  htmlFor: "feature-filter-moscow",
210
213
  className: "text-xs text-muted-foreground",
211
214
  children: "MoSCoW"
212
- }), /* @__PURE__ */ w("select", {
215
+ }), /* @__PURE__ */ T("select", {
213
216
  id: "feature-filter-moscow",
214
217
  "data-testid": "feature-filter-moscow",
215
218
  className: "rounded-md border border-input bg-background px-2 py-1 text-xs",
216
- value: z,
217
- onChange: (e) => B(e.target.value),
218
- children: [/* @__PURE__ */ C("option", {
219
+ value: B,
220
+ onChange: (e) => V(e.target.value),
221
+ children: [/* @__PURE__ */ w("option", {
219
222
  value: "",
220
223
  children: "All"
221
- }), d.map((e) => /* @__PURE__ */ C("option", {
224
+ }), ee.map((e) => /* @__PURE__ */ w("option", {
222
225
  value: e,
223
- children: ee[e].label
226
+ children: d[e].label
224
227
  }, e))]
225
228
  })]
226
229
  }),
227
- /* @__PURE__ */ w("div", {
230
+ /* @__PURE__ */ T("div", {
228
231
  className: "flex items-center gap-1",
229
- children: [/* @__PURE__ */ C("label", {
232
+ children: [/* @__PURE__ */ w("label", {
230
233
  htmlFor: "feature-filter-kano",
231
234
  className: "text-xs text-muted-foreground",
232
235
  children: "Kano"
233
- }), /* @__PURE__ */ w("select", {
236
+ }), /* @__PURE__ */ T("select", {
234
237
  id: "feature-filter-kano",
235
238
  "data-testid": "feature-filter-kano",
236
239
  className: "rounded-md border border-input bg-background px-2 py-1 text-xs",
237
- value: V,
238
- onChange: (e) => H(e.target.value),
239
- children: [/* @__PURE__ */ C("option", {
240
+ value: H,
241
+ onChange: (e) => U(e.target.value),
242
+ children: [/* @__PURE__ */ w("option", {
240
243
  value: "",
241
244
  children: "All"
242
- }), u.map((e) => /* @__PURE__ */ C("option", {
245
+ }), u.map((e) => /* @__PURE__ */ w("option", {
243
246
  value: e,
244
247
  children: l[e].label
245
248
  }, e))]
246
249
  })]
247
250
  }),
248
- /* @__PURE__ */ w("div", {
251
+ /* @__PURE__ */ T("div", {
249
252
  className: "flex items-center gap-1",
250
- children: [/* @__PURE__ */ C("label", {
253
+ children: [/* @__PURE__ */ w("label", {
251
254
  htmlFor: "feature-filter-quadrant",
252
255
  className: "text-xs text-muted-foreground",
253
256
  children: "Quadrant"
254
- }), /* @__PURE__ */ w("select", {
257
+ }), /* @__PURE__ */ T("select", {
255
258
  id: "feature-filter-quadrant",
256
259
  "data-testid": "feature-filter-quadrant",
257
260
  className: "rounded-md border border-input bg-background px-2 py-1 text-xs",
258
- value: U,
259
- onChange: (e) => W(e.target.value),
260
- children: [/* @__PURE__ */ C("option", {
261
+ value: W,
262
+ onChange: (e) => G(e.target.value),
263
+ children: [/* @__PURE__ */ w("option", {
261
264
  value: "",
262
265
  children: "All"
263
- }), p.map((e) => /* @__PURE__ */ C("option", {
266
+ }), p.map((e) => /* @__PURE__ */ w("option", {
264
267
  value: e,
265
268
  children: f[e].label
266
269
  }, e))]
@@ -268,116 +271,120 @@ function j() {
268
271
  })
269
272
  ]
270
273
  }),
271
- /* @__PURE__ */ C("div", {
274
+ /* @__PURE__ */ w("div", {
272
275
  className: "space-y-3",
273
- children: Q.map((e) => /* @__PURE__ */ C(D, {
274
- ...o(() => x(a("/products/feature-detail-page", e.id)), e.title),
275
- children: /* @__PURE__ */ C(O, {
276
+ children: Q.map((e) => /* @__PURE__ */ w(O, {
277
+ ...o(() => S(a("/products/feature-detail-page", e.id)), e.title),
278
+ children: /* @__PURE__ */ w(k, {
276
279
  className: "py-4",
277
- children: /* @__PURE__ */ w("div", {
280
+ children: /* @__PURE__ */ T("div", {
278
281
  className: "flex items-start justify-between gap-4",
279
- children: [/* @__PURE__ */ w("div", {
282
+ children: [/* @__PURE__ */ T("div", {
280
283
  className: "flex-1 space-y-2",
281
284
  children: [
282
- /* @__PURE__ */ w("div", {
285
+ /* @__PURE__ */ T("div", {
283
286
  className: "flex items-center gap-2",
284
287
  children: [
285
- /* @__PURE__ */ C("span", {
288
+ /* @__PURE__ */ w("span", {
286
289
  className: "text-sm font-medium",
287
290
  children: e.title
288
291
  }),
289
- /* @__PURE__ */ C("span", {
290
- className: `text-[10px] px-1.5 py-0.5 rounded-full capitalize ${A[e.status] ?? "bg-gray-100"}`,
292
+ /* @__PURE__ */ w("span", {
293
+ className: `text-[10px] px-1.5 py-0.5 rounded-full capitalize ${j[e.status] ?? "bg-gray-100"}`,
291
294
  children: e.status.toLowerCase().replace("_", " ")
292
295
  }),
293
- /* @__PURE__ */ C(m, {
296
+ /* @__PURE__ */ w(m, {
294
297
  quadrant: e.valueEffortQuadrant,
295
298
  hideWhenUnscored: !0
296
299
  })
297
300
  ]
298
301
  }),
299
- /* @__PURE__ */ C("p", {
302
+ /* @__PURE__ */ w("p", {
300
303
  className: "text-xs text-muted-foreground",
301
304
  children: e.description
302
305
  }),
303
- /* @__PURE__ */ w("div", {
306
+ /* @__PURE__ */ T("div", {
304
307
  className: "flex items-center gap-4 text-xs text-muted-foreground",
305
308
  children: [
306
- /* @__PURE__ */ w("span", { children: ["Effort: ", e.effortEstimate ?? "N/A"] }),
307
- /* @__PURE__ */ w("span", { children: ["Submitted by: ", /* @__PURE__ */ C(n, { id: e.submittedBy })] }),
308
- /* @__PURE__ */ C("span", { children: new Date(e.updatedAt).toLocaleDateString() })
309
+ /* @__PURE__ */ T("span", { children: ["Effort: ", e.effortEstimate ?? "N/A"] }),
310
+ /* @__PURE__ */ T("span", { children: ["Submitted by: ", /* @__PURE__ */ w(n, { id: e.submittedBy })] }),
311
+ /* @__PURE__ */ w("span", { children: new Date(e.updatedAt).toLocaleDateString() })
309
312
  ]
310
313
  }),
311
- c(e.snoozedUntil, P) && /* @__PURE__ */ w("p", {
314
+ (e.rating != null || e.category) && /* @__PURE__ */ T("div", {
315
+ className: "flex items-center gap-2",
316
+ children: [e.rating != null && /* @__PURE__ */ w(g, { rating: e.rating }), /* @__PURE__ */ w(te, { category: e.category })]
317
+ }),
318
+ c(e.snoozedUntil, F) && /* @__PURE__ */ T("p", {
312
319
  className: "text-xs text-muted-foreground",
313
320
  children: ["Snoozed until ", new Date(e.snoozedUntil).toLocaleDateString()]
314
321
  }),
315
- /* @__PURE__ */ C(s, {
322
+ /* @__PURE__ */ w(s, {
316
323
  feature: e,
317
- now: P
324
+ now: F
318
325
  }),
319
- e.tags.length > 0 && /* @__PURE__ */ C("div", {
326
+ e.tags.length > 0 && /* @__PURE__ */ w("div", {
320
327
  className: "flex gap-1",
321
- children: e.tags.map((e) => /* @__PURE__ */ C(T, {
328
+ children: e.tags.map((e) => /* @__PURE__ */ w(E, {
322
329
  variant: "outline",
323
330
  className: "text-[10px]",
324
331
  children: e
325
332
  }, e))
326
333
  })
327
334
  ]
328
- }), /* @__PURE__ */ w("div", {
335
+ }), /* @__PURE__ */ T("div", {
329
336
  className: "flex items-center gap-4 shrink-0",
330
337
  children: [
331
- /* @__PURE__ */ w("div", {
338
+ /* @__PURE__ */ T("div", {
332
339
  className: "text-center",
333
- children: [/* @__PURE__ */ w("div", {
340
+ children: [/* @__PURE__ */ T("div", {
334
341
  className: "flex items-center gap-1",
335
- children: [/* @__PURE__ */ C(re, { className: "h-3 w-3 text-primary" }), /* @__PURE__ */ C("span", {
342
+ children: [/* @__PURE__ */ w(ae, { className: "h-3 w-3 text-primary" }), /* @__PURE__ */ w("span", {
336
343
  className: "text-sm font-bold",
337
344
  children: e.priorityScore ?? 0
338
345
  })]
339
- }), /* @__PURE__ */ C("p", {
346
+ }), /* @__PURE__ */ w("p", {
340
347
  className: "text-[10px] text-muted-foreground",
341
348
  children: "Priority"
342
349
  })]
343
350
  }),
344
- /* @__PURE__ */ w("div", {
351
+ /* @__PURE__ */ T("div", {
345
352
  className: "text-center",
346
- children: [/* @__PURE__ */ w("div", {
353
+ children: [/* @__PURE__ */ T("div", {
347
354
  className: "flex items-center gap-1",
348
- children: [/* @__PURE__ */ C(ie, { className: "h-3 w-3 text-green-500" }), /* @__PURE__ */ C("span", {
355
+ children: [/* @__PURE__ */ w(x, { className: "h-3 w-3 text-green-500" }), /* @__PURE__ */ w("span", {
349
356
  className: "text-sm font-bold",
350
357
  children: e.voteCount
351
358
  })]
352
- }), /* @__PURE__ */ C("p", {
359
+ }), /* @__PURE__ */ w("p", {
353
360
  className: "text-[10px] text-muted-foreground",
354
361
  children: "Votes"
355
362
  })]
356
363
  }),
357
- /* @__PURE__ */ w("div", {
364
+ /* @__PURE__ */ T("div", {
358
365
  className: "text-center",
359
- children: [/* @__PURE__ */ w("div", {
366
+ children: [/* @__PURE__ */ T("div", {
360
367
  className: "flex items-center gap-1",
361
- children: [/* @__PURE__ */ C(b, { className: "h-3 w-3 text-yellow-500" }), /* @__PURE__ */ C("span", {
368
+ children: [/* @__PURE__ */ w(ie, { className: "h-3 w-3 text-yellow-500" }), /* @__PURE__ */ w("span", {
362
369
  className: "text-sm font-bold",
363
370
  children: e.businessValue ?? 0
364
371
  })]
365
- }), /* @__PURE__ */ C("p", {
372
+ }), /* @__PURE__ */ w("p", {
366
373
  className: "text-[10px] text-muted-foreground",
367
374
  children: "Value"
368
375
  })]
369
376
  }),
370
- /* @__PURE__ */ w("div", {
377
+ /* @__PURE__ */ T("div", {
371
378
  className: "text-center",
372
379
  title: e.riceScore == null ? h(e) ?? void 0 : void 0,
373
- children: [/* @__PURE__ */ w("div", {
380
+ children: [/* @__PURE__ */ T("div", {
374
381
  className: "flex items-center gap-1",
375
- children: [/* @__PURE__ */ C(_, { className: "h-3 w-3 text-primary" }), /* @__PURE__ */ C("span", {
382
+ children: [/* @__PURE__ */ w(b, { className: "h-3 w-3 text-primary" }), /* @__PURE__ */ w("span", {
376
383
  className: "text-sm font-bold",
377
384
  "data-testid": "feature-rice-score-cell",
378
385
  children: e.riceScore == null ? "—" : e.riceScore.toFixed(1)
379
386
  })]
380
- }), /* @__PURE__ */ C("p", {
387
+ }), /* @__PURE__ */ w("p", {
381
388
  className: "text-[10px] text-muted-foreground",
382
389
  children: "RICE"
383
390
  })]
@@ -388,14 +395,14 @@ function j() {
388
395
  })
389
396
  }, e.id))
390
397
  }),
391
- Q.length === 0 && /* @__PURE__ */ C("p", {
398
+ Q.length === 0 && /* @__PURE__ */ w("p", {
392
399
  className: "text-center text-muted-foreground py-8",
393
- children: M === "TRIAGE" ? "Nothing waits for triage." : "No features match the selected filters."
400
+ children: N === "TRIAGE" ? "Nothing waits for triage." : "No features match the selected filters."
394
401
  })
395
402
  ]
396
403
  });
397
404
  }
398
405
  //#endregion
399
- export { j as ProductsFeaturesPagePage };
406
+ export { M as ProductsFeaturesPagePage };
400
407
 
401
408
  //# sourceMappingURL=ProductsFeaturesPagePage.js.map