@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.
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +10 -6
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/automation/automationRuleTypes.d.ts +31 -19
- package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +1 -1
- package/dist/planmagnet/automation/automationRuleTypes.js +4 -8
- package/dist/planmagnet/automation/automationRuleTypes.js.map +1 -1
- package/dist/planmagnet/controls/FeatureControls.d.ts +18 -1
- package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/FeatureControls.js +259 -202
- package/dist/planmagnet/controls/FeatureControls.js.map +1 -1
- package/dist/planmagnet/controls/FeedbackControls.d.ts +70 -0
- package/dist/planmagnet/controls/FeedbackControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/FeedbackControls.js +153 -0
- package/dist/planmagnet/controls/FeedbackControls.js.map +1 -0
- package/dist/planmagnet/controls/SyncControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/SyncControls.js +1 -0
- package/dist/planmagnet/controls/SyncControls.js.map +1 -1
- package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts +47 -0
- package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/WebhookSubscriptionControls.js +542 -0
- package/dist/planmagnet/controls/WebhookSubscriptionControls.js.map +1 -0
- package/dist/planmagnet/dashboards/DashboardUI.js +7 -7
- package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js +4 -4
- package/dist/planmagnet/forecast/DeliveryForecastCard.js +8 -8
- package/dist/planmagnet/forecast/ProjectOutlookCard.js +10 -10
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +9 -9
- package/dist/planmagnet/forecast/ResourceForecastCard.js +6 -6
- package/dist/planmagnet/integrations/syncTypes.d.ts +2 -1
- package/dist/planmagnet/integrations/syncTypes.d.ts.map +1 -1
- package/dist/planmagnet/integrations/syncTypes.js +19 -9
- package/dist/planmagnet/integrations/syncTypes.js.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +8 -8
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +23 -23
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +340 -248
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js +172 -167
- package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/IntegrationsSyncsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js +92 -83
- package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js +175 -0
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +151 -126
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +136 -129
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +149 -119
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +13 -13
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +9 -9
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +8 -8
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +12 -12
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +23 -23
- package/dist/planmagnet/pages/TasksMyDashboardPagePage.js +18 -18
- package/dist/planmagnet/pages/TasksMyWorkPagePage.js +10 -10
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +5 -5
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +8 -8
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js +6 -6
- package/dist/planmagnet/pages/analytics/MetricsCard.js +6 -6
- package/dist/planmagnet/pages/analytics/QualityMetricsCard.js +6 -6
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +8 -8
- package/dist/planmagnet/pages/analytics/StatusFlowCard.js +7 -7
- package/dist/planmagnet/pages/analytics/ThroughputCard.js +7 -7
- package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js +7 -7
- package/dist/planmagnet/people/People.d.ts +14 -0
- package/dist/planmagnet/people/People.d.ts.map +1 -1
- package/dist/planmagnet/people/People.js +36 -22
- package/dist/planmagnet/people/People.js.map +1 -1
- package/dist/planmagnet/webhooks/webhookTypes.d.ts +54 -0
- package/dist/planmagnet/webhooks/webhookTypes.d.ts.map +1 -0
- package/dist/planmagnet/webhooks/webhookTypes.js +17 -0
- package/dist/planmagnet/webhooks/webhookTypes.js.map +1 -0
- 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
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
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
|
|
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
|
-
`,
|
|
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
|
|
64
|
-
let
|
|
65
|
-
...
|
|
66
|
-
...
|
|
67
|
-
...
|
|
68
|
-
...
|
|
69
|
-
}, { data:
|
|
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:
|
|
72
|
-
filter: Object.keys(
|
|
74
|
+
workspaceId: M,
|
|
75
|
+
filter: Object.keys(q).length > 0 ? q : void 0,
|
|
73
76
|
pagination: { first: 50 },
|
|
74
|
-
orderBy:
|
|
77
|
+
orderBy: I
|
|
75
78
|
},
|
|
76
|
-
skip: !
|
|
79
|
+
skip: !M
|
|
77
80
|
});
|
|
78
|
-
if (
|
|
81
|
+
if (oe && !J) return /* @__PURE__ */ w("div", {
|
|
79
82
|
className: "flex items-center justify-center p-12",
|
|
80
|
-
children: /* @__PURE__ */
|
|
83
|
+
children: /* @__PURE__ */ w(ne, { className: "h-8 w-8 animate-spin text-muted-foreground" })
|
|
81
84
|
});
|
|
82
|
-
if (Y) return /* @__PURE__ */
|
|
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 =
|
|
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(
|
|
99
|
-
open: r(
|
|
100
|
-
inProgress: r(
|
|
101
|
-
completed: r(
|
|
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__ */
|
|
106
|
+
return /* @__PURE__ */ T("div", {
|
|
104
107
|
className: "space-y-6 p-6",
|
|
105
108
|
children: [
|
|
106
|
-
/* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ T("div", {
|
|
107
110
|
className: "flex items-center justify-between",
|
|
108
|
-
children: [/* @__PURE__ */
|
|
111
|
+
children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h1", {
|
|
109
112
|
className: "text-2xl font-semibold",
|
|
110
113
|
children: "Features"
|
|
111
|
-
}), /* @__PURE__ */
|
|
114
|
+
}), /* @__PURE__ */ w("p", {
|
|
112
115
|
className: "text-sm text-muted-foreground",
|
|
113
|
-
children:
|
|
114
|
-
})] }), /* @__PURE__ */
|
|
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: () =>
|
|
117
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
123
|
+
/* @__PURE__ */ T("div", {
|
|
121
124
|
className: "grid grid-cols-2 md:grid-cols-4 gap-4",
|
|
122
125
|
children: [
|
|
123
|
-
/* @__PURE__ */
|
|
126
|
+
/* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
|
|
124
127
|
className: "pt-4",
|
|
125
|
-
children: [/* @__PURE__ */
|
|
128
|
+
children: [/* @__PURE__ */ w("p", {
|
|
126
129
|
className: "text-xs text-muted-foreground",
|
|
127
130
|
children: "Total Features"
|
|
128
|
-
}), /* @__PURE__ */
|
|
131
|
+
}), /* @__PURE__ */ w("p", {
|
|
129
132
|
className: "text-xl font-bold",
|
|
130
133
|
children: $.total
|
|
131
134
|
})]
|
|
132
135
|
}) }),
|
|
133
|
-
/* @__PURE__ */
|
|
136
|
+
/* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
|
|
134
137
|
className: "pt-4",
|
|
135
|
-
children: [/* @__PURE__ */
|
|
138
|
+
children: [/* @__PURE__ */ w("p", {
|
|
136
139
|
className: "text-xs text-muted-foreground",
|
|
137
140
|
children: "In Progress"
|
|
138
|
-
}), /* @__PURE__ */
|
|
141
|
+
}), /* @__PURE__ */ w("p", {
|
|
139
142
|
className: "text-xl font-bold",
|
|
140
143
|
children: $.inProgress
|
|
141
144
|
})]
|
|
142
145
|
}) }),
|
|
143
|
-
/* @__PURE__ */
|
|
146
|
+
/* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
|
|
144
147
|
className: "pt-4",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
148
|
+
children: [/* @__PURE__ */ w("p", {
|
|
146
149
|
className: "text-xs text-muted-foreground",
|
|
147
150
|
children: "Completed"
|
|
148
|
-
}), /* @__PURE__ */
|
|
151
|
+
}), /* @__PURE__ */ w("p", {
|
|
149
152
|
className: "text-xl font-bold",
|
|
150
153
|
children: $.completed
|
|
151
154
|
})]
|
|
152
155
|
}) }),
|
|
153
|
-
/* @__PURE__ */
|
|
156
|
+
/* @__PURE__ */ w(O, { children: /* @__PURE__ */ T(k, {
|
|
154
157
|
className: "pt-4",
|
|
155
|
-
children: [/* @__PURE__ */
|
|
158
|
+
children: [/* @__PURE__ */ w("p", {
|
|
156
159
|
className: "text-xs text-muted-foreground",
|
|
157
160
|
children: "Open"
|
|
158
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
168
|
+
/* @__PURE__ */ T("div", {
|
|
166
169
|
className: "flex items-center justify-between flex-wrap gap-2",
|
|
167
|
-
children: [/* @__PURE__ */
|
|
170
|
+
children: [/* @__PURE__ */ T("div", {
|
|
168
171
|
className: "flex items-center gap-2",
|
|
169
|
-
children: [/* @__PURE__ */
|
|
170
|
-
onClick: () =>
|
|
171
|
-
className: `px-2 py-1 text-xs rounded-md capitalize ${
|
|
172
|
-
children: e === "all" ? "All" : e === "TRIAGE" ? `Triage (${r(
|
|
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__ */
|
|
177
|
+
}), /* @__PURE__ */ T("div", {
|
|
175
178
|
className: "flex items-center gap-2",
|
|
176
179
|
children: [
|
|
177
|
-
/* @__PURE__ */
|
|
178
|
-
["NEWEST", "MOST_VOTED"].map((e) => /* @__PURE__ */
|
|
179
|
-
onClick: () =>
|
|
180
|
-
className: `px-2 py-1 text-xs rounded-md ${!
|
|
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__ */
|
|
186
|
+
/* @__PURE__ */ w("button", {
|
|
184
187
|
type: "button",
|
|
185
|
-
"aria-pressed":
|
|
188
|
+
"aria-pressed": R,
|
|
186
189
|
"data-testid": "feature-sort-rice",
|
|
187
|
-
onClick: () =>
|
|
188
|
-
className: `px-2 py-1 text-xs rounded-md ${
|
|
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
|
-
|
|
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__ */
|
|
206
|
+
/* @__PURE__ */ T("div", {
|
|
204
207
|
className: "flex flex-wrap items-center gap-3",
|
|
205
208
|
children: [
|
|
206
|
-
/* @__PURE__ */
|
|
209
|
+
/* @__PURE__ */ T("div", {
|
|
207
210
|
className: "flex items-center gap-1",
|
|
208
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
217
|
-
onChange: (e) =>
|
|
218
|
-
children: [/* @__PURE__ */
|
|
219
|
+
value: B,
|
|
220
|
+
onChange: (e) => V(e.target.value),
|
|
221
|
+
children: [/* @__PURE__ */ w("option", {
|
|
219
222
|
value: "",
|
|
220
223
|
children: "All"
|
|
221
|
-
}),
|
|
224
|
+
}), ee.map((e) => /* @__PURE__ */ w("option", {
|
|
222
225
|
value: e,
|
|
223
|
-
children:
|
|
226
|
+
children: d[e].label
|
|
224
227
|
}, e))]
|
|
225
228
|
})]
|
|
226
229
|
}),
|
|
227
|
-
/* @__PURE__ */
|
|
230
|
+
/* @__PURE__ */ T("div", {
|
|
228
231
|
className: "flex items-center gap-1",
|
|
229
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
238
|
-
onChange: (e) =>
|
|
239
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
251
|
+
/* @__PURE__ */ T("div", {
|
|
249
252
|
className: "flex items-center gap-1",
|
|
250
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
259
|
-
onChange: (e) =>
|
|
260
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
274
|
+
/* @__PURE__ */ w("div", {
|
|
272
275
|
className: "space-y-3",
|
|
273
|
-
children: Q.map((e) => /* @__PURE__ */
|
|
274
|
-
...o(() =>
|
|
275
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
280
|
+
children: /* @__PURE__ */ T("div", {
|
|
278
281
|
className: "flex items-start justify-between gap-4",
|
|
279
|
-
children: [/* @__PURE__ */
|
|
282
|
+
children: [/* @__PURE__ */ T("div", {
|
|
280
283
|
className: "flex-1 space-y-2",
|
|
281
284
|
children: [
|
|
282
|
-
/* @__PURE__ */
|
|
285
|
+
/* @__PURE__ */ T("div", {
|
|
283
286
|
className: "flex items-center gap-2",
|
|
284
287
|
children: [
|
|
285
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ w("span", {
|
|
286
289
|
className: "text-sm font-medium",
|
|
287
290
|
children: e.title
|
|
288
291
|
}),
|
|
289
|
-
/* @__PURE__ */
|
|
290
|
-
className: `text-[10px] px-1.5 py-0.5 rounded-full capitalize ${
|
|
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__ */
|
|
296
|
+
/* @__PURE__ */ w(m, {
|
|
294
297
|
quadrant: e.valueEffortQuadrant,
|
|
295
298
|
hideWhenUnscored: !0
|
|
296
299
|
})
|
|
297
300
|
]
|
|
298
301
|
}),
|
|
299
|
-
/* @__PURE__ */
|
|
302
|
+
/* @__PURE__ */ w("p", {
|
|
300
303
|
className: "text-xs text-muted-foreground",
|
|
301
304
|
children: e.description
|
|
302
305
|
}),
|
|
303
|
-
/* @__PURE__ */
|
|
306
|
+
/* @__PURE__ */ T("div", {
|
|
304
307
|
className: "flex items-center gap-4 text-xs text-muted-foreground",
|
|
305
308
|
children: [
|
|
306
|
-
/* @__PURE__ */
|
|
307
|
-
/* @__PURE__ */
|
|
308
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
322
|
+
/* @__PURE__ */ w(s, {
|
|
316
323
|
feature: e,
|
|
317
|
-
now:
|
|
324
|
+
now: F
|
|
318
325
|
}),
|
|
319
|
-
e.tags.length > 0 && /* @__PURE__ */
|
|
326
|
+
e.tags.length > 0 && /* @__PURE__ */ w("div", {
|
|
320
327
|
className: "flex gap-1",
|
|
321
|
-
children: e.tags.map((e) => /* @__PURE__ */
|
|
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__ */
|
|
335
|
+
}), /* @__PURE__ */ T("div", {
|
|
329
336
|
className: "flex items-center gap-4 shrink-0",
|
|
330
337
|
children: [
|
|
331
|
-
/* @__PURE__ */
|
|
338
|
+
/* @__PURE__ */ T("div", {
|
|
332
339
|
className: "text-center",
|
|
333
|
-
children: [/* @__PURE__ */
|
|
340
|
+
children: [/* @__PURE__ */ T("div", {
|
|
334
341
|
className: "flex items-center gap-1",
|
|
335
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
346
|
+
}), /* @__PURE__ */ w("p", {
|
|
340
347
|
className: "text-[10px] text-muted-foreground",
|
|
341
348
|
children: "Priority"
|
|
342
349
|
})]
|
|
343
350
|
}),
|
|
344
|
-
/* @__PURE__ */
|
|
351
|
+
/* @__PURE__ */ T("div", {
|
|
345
352
|
className: "text-center",
|
|
346
|
-
children: [/* @__PURE__ */
|
|
353
|
+
children: [/* @__PURE__ */ T("div", {
|
|
347
354
|
className: "flex items-center gap-1",
|
|
348
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
359
|
+
}), /* @__PURE__ */ w("p", {
|
|
353
360
|
className: "text-[10px] text-muted-foreground",
|
|
354
361
|
children: "Votes"
|
|
355
362
|
})]
|
|
356
363
|
}),
|
|
357
|
-
/* @__PURE__ */
|
|
364
|
+
/* @__PURE__ */ T("div", {
|
|
358
365
|
className: "text-center",
|
|
359
|
-
children: [/* @__PURE__ */
|
|
366
|
+
children: [/* @__PURE__ */ T("div", {
|
|
360
367
|
className: "flex items-center gap-1",
|
|
361
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
372
|
+
}), /* @__PURE__ */ w("p", {
|
|
366
373
|
className: "text-[10px] text-muted-foreground",
|
|
367
374
|
children: "Value"
|
|
368
375
|
})]
|
|
369
376
|
}),
|
|
370
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ T("div", {
|
|
371
378
|
className: "text-center",
|
|
372
379
|
title: e.riceScore == null ? h(e) ?? void 0 : void 0,
|
|
373
|
-
children: [/* @__PURE__ */
|
|
380
|
+
children: [/* @__PURE__ */ T("div", {
|
|
374
381
|
className: "flex items-center gap-1",
|
|
375
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
398
|
+
Q.length === 0 && /* @__PURE__ */ w("p", {
|
|
392
399
|
className: "text-center text-muted-foreground py-8",
|
|
393
|
-
children:
|
|
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 {
|
|
406
|
+
export { M as ProductsFeaturesPagePage };
|
|
400
407
|
|
|
401
408
|
//# sourceMappingURL=ProductsFeaturesPagePage.js.map
|