@burdenoff/microfe-planmagnet 2026.1001.6 → 2026.1001.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/hooks/useLiveRefresh.d.ts +33 -2
- package/dist/planmagnet/hooks/useLiveRefresh.d.ts.map +1 -1
- package/dist/planmagnet/hooks/useLiveRefresh.js +71 -42
- package/dist/planmagnet/hooks/useLiveRefresh.js.map +1 -1
- 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/ProductsRoadmapAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +153 -117
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +173 -138
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +1 -1
- 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/roadmaps/RoadmapNowNextLater.d.ts.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +171 -153
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.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
|
@@ -7,12 +7,13 @@ import { detailPath as s } from "../utils/rowNavigation.js";
|
|
|
7
7
|
import { ProjectSelect as c, WorkItemSearchSelect as l } from "./Pickers.js";
|
|
8
8
|
import { parseIntField as u } from "../utils/formValidation.js";
|
|
9
9
|
import { PrioritizationScoreFields as d, QuadrantBadge as f, RiceScoreFields as p, kanoLabel as m, moscowLabel as h, prioritizationScoresValid as g, riceInputsValid as _, riceScoreMissingHint as v } from "./PrioritizationControls.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
10
|
+
import { AnonymousSubmissionCheckbox as y, FeedbackFields as b } from "./FeedbackControls.js";
|
|
11
|
+
import { useState as x } from "react";
|
|
12
|
+
import { BarChart3 as S, Pencil as C, ThumbsUp as w, Trash2 as T } from "lucide-react";
|
|
13
|
+
import { gql as E } from "@apollo/client";
|
|
14
|
+
import { useMutation as D } from "@apollo/client/react";
|
|
15
|
+
import { Fragment as O, jsx as k, jsxs as A } from "react/jsx-runtime";
|
|
16
|
+
import { Button as j, Card as M, CardContent as N, CardHeader as P, CardTitle as F, Input as I, ResponsiveDialog as L, ResponsiveDialogContent as R, ResponsiveDialogDescription as z, ResponsiveDialogFooter as B, ResponsiveDialogHeader as V, ResponsiveDialogTitle as ee, ResponsiveDialogTrigger as te } from "@burdenoff/fe-libs/ui";
|
|
16
17
|
//#region src/planmagnet/controls/FeatureControls.tsx
|
|
17
18
|
var H = [
|
|
18
19
|
"SUBMITTED",
|
|
@@ -30,17 +31,18 @@ var H = [
|
|
|
30
31
|
"ListAllFeaturesAnalytics",
|
|
31
32
|
"GetFeatureRequestAnalytics",
|
|
32
33
|
"ReleaseCustomerRequests"
|
|
33
|
-
], W =
|
|
34
|
-
mutation FeatureControlsVote($id: ID
|
|
35
|
-
planmagnetVoteOnFeature(featureRequestId: $id) {
|
|
34
|
+
], W = E`
|
|
35
|
+
mutation FeatureControlsVote($id: ID!, $input: PlanmagnetVoteOnFeatureInput) {
|
|
36
|
+
planmagnetVoteOnFeature(featureRequestId: $id, input: $input) {
|
|
36
37
|
id
|
|
38
|
+
isAnonymous
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
|
-
`, G =
|
|
41
|
+
`, G = E`
|
|
40
42
|
mutation FeatureControlsUnvote($id: ID!) {
|
|
41
43
|
planmagnetRemoveFeatureVote(featureRequestId: $id)
|
|
42
44
|
}
|
|
43
|
-
`, K =
|
|
45
|
+
`, K = E`
|
|
44
46
|
mutation FeatureControlsUpdate($id: ID!, $input: PlanmagnetUpdateFeatureRequestInput!) {
|
|
45
47
|
planmagnetUpdateFeatureRequest(id: $id, input: $input) {
|
|
46
48
|
id
|
|
@@ -60,9 +62,13 @@ var H = [
|
|
|
60
62
|
impact
|
|
61
63
|
confidence
|
|
62
64
|
riceScore
|
|
65
|
+
rating
|
|
66
|
+
category
|
|
67
|
+
isAnonymous
|
|
68
|
+
submittedBy
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
|
-
`, q =
|
|
71
|
+
`, q = E`
|
|
66
72
|
mutation FeatureControlsDelete($id: ID!) {
|
|
67
73
|
planmagnetDeleteFeatureRequest(id: $id)
|
|
68
74
|
}
|
|
@@ -70,33 +76,47 @@ var H = [
|
|
|
70
76
|
refetchQueries: U,
|
|
71
77
|
awaitRefetchQueries: !0
|
|
72
78
|
};
|
|
73
|
-
function Y({ featureId: e, voted:
|
|
74
|
-
let [
|
|
75
|
-
|
|
79
|
+
function Y({ featureId: e, voted: n }) {
|
|
80
|
+
let [i, o] = D(W, J), [s, c] = D(G, J), [l, u] = x(null), [d, f] = x(!1), [p, m] = x(null), h = p ?? n, g = o.loading || c.loading, _ = async () => {
|
|
81
|
+
u(null);
|
|
76
82
|
try {
|
|
77
|
-
await r((
|
|
83
|
+
h ? (await r(s({ variables: { id: e } })), m(!1)) : (await r(i({ variables: {
|
|
84
|
+
id: e,
|
|
85
|
+
input: { isAnonymous: d }
|
|
86
|
+
} })), m(!0), f(!1));
|
|
78
87
|
} catch (e) {
|
|
79
|
-
|
|
88
|
+
u(t(e, "Your vote could not be saved."));
|
|
80
89
|
}
|
|
81
90
|
};
|
|
82
|
-
return /* @__PURE__ */
|
|
91
|
+
return /* @__PURE__ */ A("div", {
|
|
83
92
|
className: "flex flex-col items-end gap-1",
|
|
84
|
-
children: [
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
children: [
|
|
94
|
+
!h && /* @__PURE__ */ k(y, {
|
|
95
|
+
idPrefix: "feature-vote",
|
|
96
|
+
checked: d,
|
|
97
|
+
onChange: f,
|
|
98
|
+
disabled: g,
|
|
99
|
+
label: "Vote anonymously",
|
|
100
|
+
hint: null
|
|
101
|
+
}),
|
|
102
|
+
/* @__PURE__ */ A(j, {
|
|
103
|
+
size: "sm",
|
|
104
|
+
variant: h ? "default" : "outline",
|
|
105
|
+
"data-testid": "feature-vote",
|
|
106
|
+
"aria-pressed": h,
|
|
107
|
+
disabled: g,
|
|
108
|
+
onClick: () => void _(),
|
|
109
|
+
children: [/* @__PURE__ */ k(w, { className: "mr-1 h-4 w-4" }), h ? "Voted" : "Vote"]
|
|
110
|
+
}),
|
|
111
|
+
l && /* @__PURE__ */ k(a, { message: l })
|
|
112
|
+
]
|
|
93
113
|
});
|
|
94
114
|
}
|
|
95
115
|
function X({ feature: t }) {
|
|
96
|
-
let c = e(), [l, u] =
|
|
116
|
+
let c = e(), [l, u] = D(K, J), [d, f] = D(q, {
|
|
97
117
|
refetchQueries: U.filter((e) => e !== "GetFeatureRequest"),
|
|
98
118
|
context: n
|
|
99
|
-
}), [p, m] =
|
|
119
|
+
}), [p, m] = x(null), h = u.loading || f.loading, g = H.includes(t.status) ? H : [t.status, ...H], _ = async (e) => {
|
|
100
120
|
m(null);
|
|
101
121
|
try {
|
|
102
122
|
await r(l({ variables: {
|
|
@@ -114,12 +134,12 @@ function X({ feature: t }) {
|
|
|
114
134
|
m(e instanceof Error ? e.message : "The request could not be deleted.");
|
|
115
135
|
}
|
|
116
136
|
};
|
|
117
|
-
return /* @__PURE__ */
|
|
137
|
+
return /* @__PURE__ */ A("div", {
|
|
118
138
|
className: "flex flex-col items-end gap-2",
|
|
119
|
-
children: [/* @__PURE__ */
|
|
139
|
+
children: [/* @__PURE__ */ A("div", {
|
|
120
140
|
className: "flex flex-wrap items-center justify-end gap-2",
|
|
121
141
|
children: [
|
|
122
|
-
/* @__PURE__ */
|
|
142
|
+
/* @__PURE__ */ k("select", {
|
|
123
143
|
"aria-label": "Status",
|
|
124
144
|
"data-testid": "feature-status",
|
|
125
145
|
className: "rounded-md border border-input bg-background px-2 py-1 text-sm disabled:opacity-60",
|
|
@@ -128,23 +148,23 @@ function X({ feature: t }) {
|
|
|
128
148
|
onChange: (e) => {
|
|
129
149
|
e.target.value !== t.status && _(e.target.value);
|
|
130
150
|
},
|
|
131
|
-
children: g.map((e) => /* @__PURE__ */
|
|
151
|
+
children: g.map((e) => /* @__PURE__ */ k("option", {
|
|
132
152
|
value: e,
|
|
133
153
|
children: o(e)
|
|
134
154
|
}, e))
|
|
135
155
|
}),
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
/* @__PURE__ */
|
|
156
|
+
/* @__PURE__ */ k(Z, { feature: t }),
|
|
157
|
+
/* @__PURE__ */ A(j, {
|
|
138
158
|
size: "sm",
|
|
139
159
|
variant: "outline",
|
|
140
160
|
"data-testid": "feature-analytics",
|
|
141
161
|
onClick: () => c(s("/products/feature-analytics-page", t.id)),
|
|
142
|
-
children: [/* @__PURE__ */
|
|
162
|
+
children: [/* @__PURE__ */ k(S, { className: "mr-1 h-4 w-4" }), "Analytics"]
|
|
143
163
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ k(i, {
|
|
145
165
|
label: "Delete",
|
|
146
166
|
variant: "outline",
|
|
147
|
-
icon: /* @__PURE__ */
|
|
167
|
+
icon: /* @__PURE__ */ k(T, { className: "mr-1 h-4 w-4" }),
|
|
148
168
|
title: `Delete "${t.title}"?`,
|
|
149
169
|
description: "The request and its votes are deleted. This cannot be undone here.",
|
|
150
170
|
confirmLabel: "Delete request",
|
|
@@ -153,7 +173,7 @@ function X({ feature: t }) {
|
|
|
153
173
|
onConfirm: () => void v()
|
|
154
174
|
})
|
|
155
175
|
]
|
|
156
|
-
}), p && /* @__PURE__ */
|
|
176
|
+
}), p && /* @__PURE__ */ k(a, { message: p })]
|
|
157
177
|
});
|
|
158
178
|
}
|
|
159
179
|
function Z({ feature: e }) {
|
|
@@ -173,40 +193,49 @@ function Z({ feature: e }) {
|
|
|
173
193
|
reach: e.reach == null ? "" : String(e.reach),
|
|
174
194
|
impact: e.impact == null ? "" : String(e.impact),
|
|
175
195
|
confidence: e.confidence == null ? "" : String(e.confidence)
|
|
176
|
-
},
|
|
196
|
+
}, s = {
|
|
197
|
+
rating: e.rating == null ? "" : String(e.rating),
|
|
198
|
+
category: e.category ?? ""
|
|
199
|
+
}, m = e.isAnonymous ?? !1, [h, v] = x(!1), [S, w] = x(n), [T, E] = x(i), [O, M] = x(o), [N, P] = x(s), [F, H] = x(m), [U, W] = x(null), [G, q] = D(K, J), Y = u(S.businessValue, {
|
|
177
200
|
min: 0,
|
|
178
201
|
max: 100
|
|
179
|
-
}),
|
|
180
|
-
|
|
181
|
-
|
|
202
|
+
}), X = u(N.rating, {
|
|
203
|
+
min: 1,
|
|
204
|
+
max: 5
|
|
205
|
+
}), Z = S.title.trim() !== "" && !Y.invalid && !X.invalid && g(T) && _(O) && !q.loading, Q = async () => {
|
|
206
|
+
W(null);
|
|
207
|
+
let a = (e) => e.trim() ? e.trim() : null, c = u(T.valueScore, {
|
|
182
208
|
min: 1,
|
|
183
209
|
max: 10
|
|
184
|
-
}),
|
|
210
|
+
}), l = u(T.effortScore, {
|
|
185
211
|
min: 1,
|
|
186
212
|
max: 10
|
|
187
|
-
}),
|
|
213
|
+
}), d = u(O.reach, {
|
|
188
214
|
min: 1,
|
|
189
215
|
max: 10
|
|
190
|
-
}),
|
|
216
|
+
}), f = u(O.impact, {
|
|
191
217
|
min: 1,
|
|
192
218
|
max: 10
|
|
193
|
-
}),
|
|
219
|
+
}), p = u(O.confidence, {
|
|
194
220
|
min: 1,
|
|
195
221
|
max: 10
|
|
196
|
-
}),
|
|
197
|
-
title:
|
|
198
|
-
description: a(
|
|
199
|
-
businessValue:
|
|
200
|
-
effortEstimate: a(
|
|
201
|
-
projectId:
|
|
202
|
-
workItemId:
|
|
203
|
-
moscow:
|
|
204
|
-
kano:
|
|
205
|
-
valueScore:
|
|
206
|
-
effortScore:
|
|
207
|
-
reach:
|
|
208
|
-
impact:
|
|
209
|
-
confidence:
|
|
222
|
+
}), h = {
|
|
223
|
+
title: S.title.trim(),
|
|
224
|
+
description: a(S.description),
|
|
225
|
+
businessValue: Y.value ?? null,
|
|
226
|
+
effortEstimate: a(S.effortEstimate),
|
|
227
|
+
projectId: S.projectId || null,
|
|
228
|
+
workItemId: S.workItemId || null,
|
|
229
|
+
moscow: T.moscow || null,
|
|
230
|
+
kano: T.kano || null,
|
|
231
|
+
valueScore: c.value ?? null,
|
|
232
|
+
effortScore: l.value ?? null,
|
|
233
|
+
reach: d.value ?? null,
|
|
234
|
+
impact: f.value ?? null,
|
|
235
|
+
confidence: p.value ?? null,
|
|
236
|
+
rating: X.value ?? null,
|
|
237
|
+
category: a(N.category),
|
|
238
|
+
isAnonymous: F
|
|
210
239
|
}, g = {
|
|
211
240
|
title: n.title,
|
|
212
241
|
description: a(n.description),
|
|
@@ -217,184 +246,187 @@ function Z({ feature: e }) {
|
|
|
217
246
|
moscow: i.moscow || null,
|
|
218
247
|
kano: i.kano || null,
|
|
219
248
|
valueScore: i.valueScore === "" ? null : Number(i.valueScore),
|
|
249
|
+
rating: s.rating === "" ? null : Number(s.rating),
|
|
250
|
+
category: a(s.category),
|
|
251
|
+
isAnonymous: m,
|
|
220
252
|
effortScore: i.effortScore === "" ? null : Number(i.effortScore),
|
|
221
253
|
reach: o.reach === "" ? null : Number(o.reach),
|
|
222
254
|
impact: o.impact === "" ? null : Number(o.impact),
|
|
223
255
|
confidence: o.confidence === "" ? null : Number(o.confidence)
|
|
224
|
-
}, _ = Object.fromEntries(Object.entries(
|
|
256
|
+
}, _ = Object.fromEntries(Object.entries(h).filter(([e, t]) => t !== g[e]));
|
|
225
257
|
if (Object.keys(_).length === 0) {
|
|
226
|
-
|
|
258
|
+
v(!1);
|
|
227
259
|
return;
|
|
228
260
|
}
|
|
229
261
|
try {
|
|
230
|
-
await r(
|
|
262
|
+
await r(G({ variables: {
|
|
231
263
|
id: e.id,
|
|
232
264
|
input: _
|
|
233
|
-
} })),
|
|
265
|
+
} })), v(!1);
|
|
234
266
|
} catch (e) {
|
|
235
|
-
|
|
267
|
+
W(t(e, "The request could not be saved."));
|
|
236
268
|
}
|
|
237
|
-
},
|
|
238
|
-
return /* @__PURE__ */
|
|
239
|
-
open:
|
|
269
|
+
}, $ = "text-sm font-medium";
|
|
270
|
+
return /* @__PURE__ */ A(L, {
|
|
271
|
+
open: h,
|
|
240
272
|
onOpenChange: (e) => {
|
|
241
|
-
|
|
273
|
+
v(e), e ? (w(n), E(i), M(o), P(s), H(m)) : W(null);
|
|
242
274
|
},
|
|
243
|
-
children: [/* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ k(te, {
|
|
244
276
|
asChild: !0,
|
|
245
|
-
children: /* @__PURE__ */
|
|
277
|
+
children: /* @__PURE__ */ A(j, {
|
|
246
278
|
size: "sm",
|
|
247
279
|
variant: "outline",
|
|
248
280
|
"data-testid": "feature-edit",
|
|
249
|
-
children: [/* @__PURE__ */
|
|
281
|
+
children: [/* @__PURE__ */ k(C, { className: "mr-1 h-4 w-4" }), "Edit"]
|
|
250
282
|
})
|
|
251
|
-
}), /* @__PURE__ */
|
|
283
|
+
}), /* @__PURE__ */ A(R, {
|
|
252
284
|
className: "max-w-lg",
|
|
253
285
|
children: [
|
|
254
|
-
/* @__PURE__ */
|
|
255
|
-
/* @__PURE__ */
|
|
286
|
+
/* @__PURE__ */ A(V, { children: [/* @__PURE__ */ k(ee, { children: "Edit feature request" }), /* @__PURE__ */ k(z, { children: "Link the request to the work item that delivers it so releases can show who is waiting on it." })] }),
|
|
287
|
+
/* @__PURE__ */ A("div", {
|
|
256
288
|
className: "space-y-3",
|
|
257
289
|
children: [
|
|
258
|
-
/* @__PURE__ */
|
|
290
|
+
/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
259
291
|
htmlFor: "feature-edit-title",
|
|
260
|
-
className:
|
|
292
|
+
className: $,
|
|
261
293
|
children: "Title"
|
|
262
|
-
}), /* @__PURE__ */
|
|
294
|
+
}), /* @__PURE__ */ k(I, {
|
|
263
295
|
id: "feature-edit-title",
|
|
264
296
|
className: "mt-1",
|
|
265
|
-
value:
|
|
266
|
-
onChange: (e) =>
|
|
267
|
-
...
|
|
297
|
+
value: S.title,
|
|
298
|
+
onChange: (e) => w({
|
|
299
|
+
...S,
|
|
268
300
|
title: e.target.value
|
|
269
301
|
})
|
|
270
302
|
})] }),
|
|
271
|
-
/* @__PURE__ */
|
|
303
|
+
/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
272
304
|
htmlFor: "feature-edit-description",
|
|
273
|
-
className:
|
|
305
|
+
className: $,
|
|
274
306
|
children: "Description"
|
|
275
|
-
}), /* @__PURE__ */
|
|
307
|
+
}), /* @__PURE__ */ k("textarea", {
|
|
276
308
|
id: "feature-edit-description",
|
|
277
309
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[72px]",
|
|
278
|
-
value:
|
|
279
|
-
onChange: (e) =>
|
|
280
|
-
...
|
|
310
|
+
value: S.description,
|
|
311
|
+
onChange: (e) => w({
|
|
312
|
+
...S,
|
|
281
313
|
description: e.target.value
|
|
282
314
|
})
|
|
283
315
|
})] }),
|
|
284
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ A("div", {
|
|
285
317
|
className: "grid grid-cols-2 gap-3",
|
|
286
|
-
children: [/* @__PURE__ */
|
|
318
|
+
children: [/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
287
319
|
htmlFor: "feature-edit-value",
|
|
288
|
-
className:
|
|
320
|
+
className: $,
|
|
289
321
|
children: "Business value (0–100)"
|
|
290
|
-
}), /* @__PURE__ */
|
|
322
|
+
}), /* @__PURE__ */ k(I, {
|
|
291
323
|
id: "feature-edit-value",
|
|
292
324
|
type: "number",
|
|
293
325
|
min: 0,
|
|
294
326
|
max: 100,
|
|
295
327
|
className: "mt-1",
|
|
296
|
-
value:
|
|
297
|
-
"aria-invalid":
|
|
298
|
-
onChange: (e) =>
|
|
299
|
-
...
|
|
328
|
+
value: S.businessValue,
|
|
329
|
+
"aria-invalid": Y.invalid,
|
|
330
|
+
onChange: (e) => w({
|
|
331
|
+
...S,
|
|
300
332
|
businessValue: e.target.value
|
|
301
333
|
})
|
|
302
|
-
})] }), /* @__PURE__ */
|
|
334
|
+
})] }), /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
303
335
|
htmlFor: "feature-edit-effort",
|
|
304
|
-
className:
|
|
336
|
+
className: $,
|
|
305
337
|
children: "Effort"
|
|
306
|
-
}), /* @__PURE__ */
|
|
338
|
+
}), /* @__PURE__ */ k(I, {
|
|
307
339
|
id: "feature-edit-effort",
|
|
308
340
|
className: "mt-1",
|
|
309
341
|
placeholder: "e.g. M",
|
|
310
|
-
value:
|
|
311
|
-
onChange: (e) =>
|
|
312
|
-
...
|
|
342
|
+
value: S.effortEstimate,
|
|
343
|
+
onChange: (e) => w({
|
|
344
|
+
...S,
|
|
313
345
|
effortEstimate: e.target.value
|
|
314
346
|
})
|
|
315
347
|
})] })]
|
|
316
348
|
}),
|
|
317
|
-
|
|
318
|
-
/* @__PURE__ */
|
|
349
|
+
Y.invalid && /* @__PURE__ */ k(a, { message: "Business value is a whole number from 0 to 100." }),
|
|
350
|
+
/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
319
351
|
htmlFor: "feature-edit-project",
|
|
320
|
-
className:
|
|
352
|
+
className: $,
|
|
321
353
|
children: "Project"
|
|
322
|
-
}), /* @__PURE__ */
|
|
354
|
+
}), /* @__PURE__ */ k("div", {
|
|
323
355
|
className: "mt-1",
|
|
324
|
-
children: /* @__PURE__ */
|
|
356
|
+
children: /* @__PURE__ */ k(c, {
|
|
325
357
|
id: "feature-edit-project",
|
|
326
|
-
value:
|
|
358
|
+
value: S.projectId,
|
|
327
359
|
noneLabel: "No project",
|
|
328
|
-
onChange: (e) =>
|
|
329
|
-
...
|
|
360
|
+
onChange: (e) => w({
|
|
361
|
+
...S,
|
|
330
362
|
projectId: e,
|
|
331
363
|
workItemId: ""
|
|
332
364
|
})
|
|
333
365
|
})
|
|
334
366
|
})] }),
|
|
335
|
-
/* @__PURE__ */
|
|
367
|
+
/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
336
368
|
htmlFor: "feature-edit-workitem",
|
|
337
|
-
className:
|
|
369
|
+
className: $,
|
|
338
370
|
children: "Delivered by work item"
|
|
339
|
-
}), /* @__PURE__ */
|
|
371
|
+
}), /* @__PURE__ */ k("div", {
|
|
340
372
|
className: "mt-1",
|
|
341
|
-
children: /* @__PURE__ */
|
|
373
|
+
children: /* @__PURE__ */ k(l, {
|
|
342
374
|
id: "feature-edit-workitem",
|
|
343
|
-
projectId:
|
|
344
|
-
value:
|
|
345
|
-
onChange: (e) =>
|
|
346
|
-
...
|
|
375
|
+
projectId: S.projectId || void 0,
|
|
376
|
+
value: S.workItemId,
|
|
377
|
+
onChange: (e) => w({
|
|
378
|
+
...S,
|
|
347
379
|
workItemId: e
|
|
348
380
|
})
|
|
349
381
|
})
|
|
350
382
|
})] }),
|
|
351
|
-
/* @__PURE__ */
|
|
383
|
+
/* @__PURE__ */ A("div", {
|
|
352
384
|
className: "border-t pt-3",
|
|
353
385
|
children: [
|
|
354
|
-
/* @__PURE__ */
|
|
355
|
-
className:
|
|
386
|
+
/* @__PURE__ */ k("p", {
|
|
387
|
+
className: $,
|
|
356
388
|
children: "Prioritization"
|
|
357
389
|
}),
|
|
358
|
-
/* @__PURE__ */
|
|
390
|
+
/* @__PURE__ */ A("div", {
|
|
359
391
|
className: "mt-1 flex items-center gap-2",
|
|
360
|
-
children: [/* @__PURE__ */
|
|
392
|
+
children: [/* @__PURE__ */ k("span", {
|
|
361
393
|
className: "text-xs text-muted-foreground",
|
|
362
394
|
children: "Current quadrant:"
|
|
363
|
-
}), /* @__PURE__ */
|
|
395
|
+
}), /* @__PURE__ */ k(f, { quadrant: e.valueEffortQuadrant ?? null })]
|
|
364
396
|
}),
|
|
365
|
-
/* @__PURE__ */
|
|
397
|
+
/* @__PURE__ */ k("div", {
|
|
366
398
|
className: "mt-2",
|
|
367
|
-
children: /* @__PURE__ */
|
|
399
|
+
children: /* @__PURE__ */ k(d, {
|
|
368
400
|
idPrefix: "feature-edit",
|
|
369
|
-
values:
|
|
370
|
-
onChange:
|
|
401
|
+
values: T,
|
|
402
|
+
onChange: E
|
|
371
403
|
})
|
|
372
404
|
}),
|
|
373
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ A("div", {
|
|
374
406
|
className: "mt-3 border-t pt-3",
|
|
375
407
|
children: [
|
|
376
|
-
/* @__PURE__ */
|
|
377
|
-
className:
|
|
408
|
+
/* @__PURE__ */ k("p", {
|
|
409
|
+
className: $,
|
|
378
410
|
children: "RICE"
|
|
379
411
|
}),
|
|
380
|
-
/* @__PURE__ */
|
|
412
|
+
/* @__PURE__ */ A("div", {
|
|
381
413
|
className: "mt-1 flex items-center gap-2",
|
|
382
|
-
children: [/* @__PURE__ */
|
|
414
|
+
children: [/* @__PURE__ */ k("span", {
|
|
383
415
|
className: "text-xs text-muted-foreground",
|
|
384
416
|
children: "Current RICE score:"
|
|
385
|
-
}), /* @__PURE__ */
|
|
417
|
+
}), /* @__PURE__ */ k("span", {
|
|
386
418
|
className: "text-sm font-medium",
|
|
387
419
|
"data-testid": "feature-edit-rice-score",
|
|
388
420
|
children: e.riceScore == null ? "—" : e.riceScore.toFixed(1)
|
|
389
421
|
})]
|
|
390
422
|
}),
|
|
391
|
-
/* @__PURE__ */
|
|
423
|
+
/* @__PURE__ */ k("div", {
|
|
392
424
|
className: "mt-2",
|
|
393
|
-
children: /* @__PURE__ */
|
|
425
|
+
children: /* @__PURE__ */ k(p, {
|
|
394
426
|
idPrefix: "feature-edit",
|
|
395
|
-
values:
|
|
396
|
-
onChange:
|
|
397
|
-
effortScoreMissing: u(
|
|
427
|
+
values: O,
|
|
428
|
+
onChange: M,
|
|
429
|
+
effortScoreMissing: u(T.effortScore, {
|
|
398
430
|
min: 1,
|
|
399
431
|
max: 10
|
|
400
432
|
}).value == null
|
|
@@ -404,17 +436,42 @@ function Z({ feature: e }) {
|
|
|
404
436
|
})
|
|
405
437
|
]
|
|
406
438
|
}),
|
|
407
|
-
|
|
439
|
+
/* @__PURE__ */ A("div", {
|
|
440
|
+
className: "border-t pt-3",
|
|
441
|
+
children: [
|
|
442
|
+
/* @__PURE__ */ k("p", {
|
|
443
|
+
className: $,
|
|
444
|
+
children: "Feedback"
|
|
445
|
+
}),
|
|
446
|
+
/* @__PURE__ */ A("div", {
|
|
447
|
+
className: "mt-2",
|
|
448
|
+
children: [/* @__PURE__ */ k(b, {
|
|
449
|
+
idPrefix: "feature-edit",
|
|
450
|
+
values: N,
|
|
451
|
+
onChange: P
|
|
452
|
+
}), X.invalid && /* @__PURE__ */ k(a, { message: "Rating is a whole number from 1 to 5." })]
|
|
453
|
+
}),
|
|
454
|
+
/* @__PURE__ */ k("div", {
|
|
455
|
+
className: "mt-3",
|
|
456
|
+
children: /* @__PURE__ */ k(y, {
|
|
457
|
+
idPrefix: "feature-edit",
|
|
458
|
+
checked: F,
|
|
459
|
+
onChange: H
|
|
460
|
+
})
|
|
461
|
+
})
|
|
462
|
+
]
|
|
463
|
+
}),
|
|
464
|
+
U && /* @__PURE__ */ k(a, { message: U })
|
|
408
465
|
]
|
|
409
466
|
}),
|
|
410
|
-
/* @__PURE__ */
|
|
467
|
+
/* @__PURE__ */ A(B, { children: [/* @__PURE__ */ k(j, {
|
|
411
468
|
variant: "outline",
|
|
412
|
-
onClick: () =>
|
|
469
|
+
onClick: () => v(!1),
|
|
413
470
|
children: "Cancel"
|
|
414
|
-
}), /* @__PURE__ */
|
|
415
|
-
onClick: () => void
|
|
416
|
-
disabled: !
|
|
417
|
-
children:
|
|
471
|
+
}), /* @__PURE__ */ k(j, {
|
|
472
|
+
onClick: () => void Q(),
|
|
473
|
+
disabled: !Z,
|
|
474
|
+
children: q.loading ? "Saving…" : "Save"
|
|
418
475
|
})] })
|
|
419
476
|
]
|
|
420
477
|
})]
|
|
@@ -430,8 +487,8 @@ function Q({ feature: e }) {
|
|
|
430
487
|
reach: e.reach == null ? "" : String(e.reach),
|
|
431
488
|
impact: e.impact == null ? "" : String(e.impact),
|
|
432
489
|
confidence: e.confidence == null ? "" : String(e.confidence)
|
|
433
|
-
}, [o, s] =
|
|
434
|
-
l(n),
|
|
490
|
+
}, [o, s] = x(!1), [c, l] = x(n), [y, b] = x(i), [S, w] = x(null), [T, E] = D(K, J), I = () => {
|
|
491
|
+
l(n), b(i), w(null), s(!0);
|
|
435
492
|
}, L = async () => {
|
|
436
493
|
w(null);
|
|
437
494
|
let n = u(c.valueScore, {
|
|
@@ -440,13 +497,13 @@ function Q({ feature: e }) {
|
|
|
440
497
|
}), i = u(c.effortScore, {
|
|
441
498
|
min: 1,
|
|
442
499
|
max: 10
|
|
443
|
-
}), a = u(
|
|
500
|
+
}), a = u(y.reach, {
|
|
444
501
|
min: 1,
|
|
445
502
|
max: 10
|
|
446
|
-
}), o = u(
|
|
503
|
+
}), o = u(y.impact, {
|
|
447
504
|
min: 1,
|
|
448
505
|
max: 10
|
|
449
|
-
}), l = u(
|
|
506
|
+
}), l = u(y.confidence, {
|
|
450
507
|
min: 1,
|
|
451
508
|
max: 10
|
|
452
509
|
}), d = {
|
|
@@ -459,7 +516,7 @@ function Q({ feature: e }) {
|
|
|
459
516
|
confidence: l.value ?? null
|
|
460
517
|
};
|
|
461
518
|
try {
|
|
462
|
-
await r(
|
|
519
|
+
await r(T({ variables: {
|
|
463
520
|
id: e.id,
|
|
464
521
|
input: d
|
|
465
522
|
} })), s(!1);
|
|
@@ -467,157 +524,157 @@ function Q({ feature: e }) {
|
|
|
467
524
|
w(t(e, "The prioritization could not be saved."));
|
|
468
525
|
}
|
|
469
526
|
};
|
|
470
|
-
return /* @__PURE__ */
|
|
527
|
+
return /* @__PURE__ */ A(M, {
|
|
471
528
|
"data-testid": "feature-prioritization-card",
|
|
472
|
-
children: [/* @__PURE__ */
|
|
529
|
+
children: [/* @__PURE__ */ A(P, {
|
|
473
530
|
className: "flex flex-row items-center justify-between gap-2",
|
|
474
|
-
children: [/* @__PURE__ */
|
|
531
|
+
children: [/* @__PURE__ */ k(F, { children: "Prioritization" }), !o && /* @__PURE__ */ A(j, {
|
|
475
532
|
size: "sm",
|
|
476
533
|
variant: "outline",
|
|
477
534
|
"data-testid": "feature-prioritization-edit",
|
|
478
535
|
onClick: I,
|
|
479
|
-
children: [/* @__PURE__ */
|
|
536
|
+
children: [/* @__PURE__ */ k(C, { className: "mr-1 h-4 w-4" }), "Edit"]
|
|
480
537
|
})]
|
|
481
|
-
}), /* @__PURE__ */
|
|
538
|
+
}), /* @__PURE__ */ k(N, {
|
|
482
539
|
className: "space-y-3",
|
|
483
|
-
children: o ? /* @__PURE__ */ O
|
|
484
|
-
/* @__PURE__ */
|
|
540
|
+
children: o ? /* @__PURE__ */ A(O, { children: [
|
|
541
|
+
/* @__PURE__ */ k(d, {
|
|
485
542
|
idPrefix: "feature-prio",
|
|
486
543
|
values: c,
|
|
487
544
|
onChange: l
|
|
488
545
|
}),
|
|
489
|
-
/* @__PURE__ */
|
|
546
|
+
/* @__PURE__ */ A("div", {
|
|
490
547
|
className: "border-t pt-3",
|
|
491
|
-
children: [/* @__PURE__ */
|
|
548
|
+
children: [/* @__PURE__ */ k("p", {
|
|
492
549
|
className: "text-sm font-medium mb-1",
|
|
493
550
|
children: "RICE"
|
|
494
|
-
}), /* @__PURE__ */
|
|
551
|
+
}), /* @__PURE__ */ k(p, {
|
|
495
552
|
idPrefix: "feature-prio",
|
|
496
|
-
values:
|
|
497
|
-
onChange:
|
|
553
|
+
values: y,
|
|
554
|
+
onChange: b,
|
|
498
555
|
effortScoreMissing: u(c.effortScore, {
|
|
499
556
|
min: 1,
|
|
500
557
|
max: 10
|
|
501
558
|
}).value == null
|
|
502
559
|
})]
|
|
503
560
|
}),
|
|
504
|
-
|
|
505
|
-
/* @__PURE__ */
|
|
561
|
+
S && /* @__PURE__ */ k(a, { message: S }),
|
|
562
|
+
/* @__PURE__ */ A("div", {
|
|
506
563
|
className: "flex justify-end gap-2",
|
|
507
|
-
children: [/* @__PURE__ */
|
|
564
|
+
children: [/* @__PURE__ */ k(j, {
|
|
508
565
|
size: "sm",
|
|
509
566
|
variant: "outline",
|
|
510
567
|
onClick: () => s(!1),
|
|
511
568
|
children: "Cancel"
|
|
512
|
-
}), /* @__PURE__ */
|
|
569
|
+
}), /* @__PURE__ */ k(j, {
|
|
513
570
|
size: "sm",
|
|
514
571
|
"data-testid": "feature-prioritization-save",
|
|
515
|
-
disabled:
|
|
572
|
+
disabled: E.loading || !g(c) || !_(y),
|
|
516
573
|
onClick: () => void L(),
|
|
517
|
-
children:
|
|
574
|
+
children: E.loading ? "Saving…" : "Save"
|
|
518
575
|
})]
|
|
519
576
|
})
|
|
520
|
-
] }) : /* @__PURE__ */ O
|
|
521
|
-
/* @__PURE__ */
|
|
577
|
+
] }) : /* @__PURE__ */ A(O, { children: [
|
|
578
|
+
/* @__PURE__ */ A("div", {
|
|
522
579
|
className: "flex items-center gap-2",
|
|
523
|
-
children: [/* @__PURE__ */
|
|
580
|
+
children: [/* @__PURE__ */ k("span", {
|
|
524
581
|
className: "text-xs text-muted-foreground",
|
|
525
582
|
children: "Quadrant:"
|
|
526
|
-
}), /* @__PURE__ */
|
|
583
|
+
}), /* @__PURE__ */ k(f, { quadrant: e.valueEffortQuadrant ?? null })]
|
|
527
584
|
}),
|
|
528
|
-
/* @__PURE__ */
|
|
585
|
+
/* @__PURE__ */ A("div", {
|
|
529
586
|
className: "grid grid-cols-2 gap-2 text-sm",
|
|
530
587
|
children: [
|
|
531
|
-
/* @__PURE__ */
|
|
588
|
+
/* @__PURE__ */ A("div", {
|
|
532
589
|
className: "flex justify-between",
|
|
533
|
-
children: [/* @__PURE__ */
|
|
590
|
+
children: [/* @__PURE__ */ k("span", {
|
|
534
591
|
className: "text-muted-foreground",
|
|
535
592
|
children: "MoSCoW"
|
|
536
|
-
}), /* @__PURE__ */
|
|
593
|
+
}), /* @__PURE__ */ k("span", {
|
|
537
594
|
className: "font-medium",
|
|
538
595
|
children: h(e.moscow)
|
|
539
596
|
})]
|
|
540
597
|
}),
|
|
541
|
-
/* @__PURE__ */
|
|
598
|
+
/* @__PURE__ */ A("div", {
|
|
542
599
|
className: "flex justify-between",
|
|
543
|
-
children: [/* @__PURE__ */
|
|
600
|
+
children: [/* @__PURE__ */ k("span", {
|
|
544
601
|
className: "text-muted-foreground",
|
|
545
602
|
children: "Kano"
|
|
546
|
-
}), /* @__PURE__ */
|
|
603
|
+
}), /* @__PURE__ */ k("span", {
|
|
547
604
|
className: "font-medium",
|
|
548
605
|
children: m(e.kano)
|
|
549
606
|
})]
|
|
550
607
|
}),
|
|
551
|
-
/* @__PURE__ */
|
|
608
|
+
/* @__PURE__ */ A("div", {
|
|
552
609
|
className: "flex justify-between",
|
|
553
|
-
children: [/* @__PURE__ */
|
|
610
|
+
children: [/* @__PURE__ */ k("span", {
|
|
554
611
|
className: "text-muted-foreground",
|
|
555
612
|
children: "Value score"
|
|
556
|
-
}), /* @__PURE__ */
|
|
613
|
+
}), /* @__PURE__ */ k("span", {
|
|
557
614
|
className: "font-medium",
|
|
558
615
|
children: e.valueScore ?? "Not set"
|
|
559
616
|
})]
|
|
560
617
|
}),
|
|
561
|
-
/* @__PURE__ */
|
|
618
|
+
/* @__PURE__ */ A("div", {
|
|
562
619
|
className: "flex justify-between",
|
|
563
|
-
children: [/* @__PURE__ */
|
|
620
|
+
children: [/* @__PURE__ */ k("span", {
|
|
564
621
|
className: "text-muted-foreground",
|
|
565
622
|
children: "Effort score"
|
|
566
|
-
}), /* @__PURE__ */
|
|
623
|
+
}), /* @__PURE__ */ k("span", {
|
|
567
624
|
className: "font-medium",
|
|
568
625
|
children: e.effortScore ?? "Not set"
|
|
569
626
|
})]
|
|
570
627
|
})
|
|
571
628
|
]
|
|
572
629
|
}),
|
|
573
|
-
/* @__PURE__ */
|
|
630
|
+
/* @__PURE__ */ A("div", {
|
|
574
631
|
className: "border-t pt-3",
|
|
575
632
|
children: [
|
|
576
|
-
/* @__PURE__ */
|
|
633
|
+
/* @__PURE__ */ A("div", {
|
|
577
634
|
className: "flex items-center justify-between",
|
|
578
|
-
children: [/* @__PURE__ */
|
|
635
|
+
children: [/* @__PURE__ */ k("span", {
|
|
579
636
|
className: "text-xs text-muted-foreground",
|
|
580
637
|
children: "RICE score"
|
|
581
|
-
}), /* @__PURE__ */
|
|
638
|
+
}), /* @__PURE__ */ k("span", {
|
|
582
639
|
className: "font-medium",
|
|
583
640
|
"data-testid": "feature-rice-score",
|
|
584
641
|
children: e.riceScore == null ? "—" : e.riceScore.toFixed(1)
|
|
585
642
|
})]
|
|
586
643
|
}),
|
|
587
|
-
e.riceScore == null && /* @__PURE__ */
|
|
644
|
+
e.riceScore == null && /* @__PURE__ */ k("p", {
|
|
588
645
|
className: "text-xs text-muted-foreground mt-0.5",
|
|
589
646
|
"data-testid": "feature-rice-missing-hint",
|
|
590
647
|
children: v(e)
|
|
591
648
|
}),
|
|
592
|
-
/* @__PURE__ */
|
|
649
|
+
/* @__PURE__ */ A("div", {
|
|
593
650
|
className: "grid grid-cols-3 gap-2 text-sm mt-2",
|
|
594
651
|
children: [
|
|
595
|
-
/* @__PURE__ */
|
|
652
|
+
/* @__PURE__ */ A("div", {
|
|
596
653
|
className: "flex justify-between",
|
|
597
|
-
children: [/* @__PURE__ */
|
|
654
|
+
children: [/* @__PURE__ */ k("span", {
|
|
598
655
|
className: "text-muted-foreground",
|
|
599
656
|
children: "Reach"
|
|
600
|
-
}), /* @__PURE__ */
|
|
657
|
+
}), /* @__PURE__ */ k("span", {
|
|
601
658
|
className: "font-medium",
|
|
602
659
|
children: e.reach ?? "Not set"
|
|
603
660
|
})]
|
|
604
661
|
}),
|
|
605
|
-
/* @__PURE__ */
|
|
662
|
+
/* @__PURE__ */ A("div", {
|
|
606
663
|
className: "flex justify-between",
|
|
607
|
-
children: [/* @__PURE__ */
|
|
664
|
+
children: [/* @__PURE__ */ k("span", {
|
|
608
665
|
className: "text-muted-foreground",
|
|
609
666
|
children: "Impact"
|
|
610
|
-
}), /* @__PURE__ */
|
|
667
|
+
}), /* @__PURE__ */ k("span", {
|
|
611
668
|
className: "font-medium",
|
|
612
669
|
children: e.impact ?? "Not set"
|
|
613
670
|
})]
|
|
614
671
|
}),
|
|
615
|
-
/* @__PURE__ */
|
|
672
|
+
/* @__PURE__ */ A("div", {
|
|
616
673
|
className: "flex justify-between",
|
|
617
|
-
children: [/* @__PURE__ */
|
|
674
|
+
children: [/* @__PURE__ */ k("span", {
|
|
618
675
|
className: "text-muted-foreground",
|
|
619
676
|
children: "Confidence"
|
|
620
|
-
}), /* @__PURE__ */
|
|
677
|
+
}), /* @__PURE__ */ k("span", {
|
|
621
678
|
className: "font-medium",
|
|
622
679
|
children: e.confidence ?? "Not set"
|
|
623
680
|
})]
|