@bbearai/react 0.4.0 → 0.4.2
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/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +465 -88
- package/dist/index.mjs +459 -82
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -70,6 +70,10 @@ var BugBearContext = (0, import_react.createContext)({
|
|
|
70
70
|
},
|
|
71
71
|
createThread: async () => ({ success: false }),
|
|
72
72
|
uploadImage: async () => null,
|
|
73
|
+
// Issue tracking
|
|
74
|
+
issueCounts: { open: 0, done: 0, reopened: 0 },
|
|
75
|
+
refreshIssueCounts: async () => {
|
|
76
|
+
},
|
|
73
77
|
onError: void 0
|
|
74
78
|
});
|
|
75
79
|
function useBugBear() {
|
|
@@ -87,6 +91,7 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
87
91
|
const [sessionFindings, setSessionFindings] = (0, import_react.useState)([]);
|
|
88
92
|
const [threads, setThreads] = (0, import_react.useState)([]);
|
|
89
93
|
const [unreadCount, setUnreadCount] = (0, import_react.useState)(0);
|
|
94
|
+
const [issueCounts, setIssueCounts] = (0, import_react.useState)({ open: 0, done: 0, reopened: 0 });
|
|
90
95
|
const refreshAssignments = (0, import_react.useCallback)(async () => {
|
|
91
96
|
if (!client) return;
|
|
92
97
|
const newAssignments = await client.getAssignedTests();
|
|
@@ -138,6 +143,11 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
138
143
|
const totalUnread = newThreads.reduce((sum, t) => sum + t.unreadCount, 0);
|
|
139
144
|
setUnreadCount(totalUnread);
|
|
140
145
|
}, [client]);
|
|
146
|
+
const refreshIssueCounts = (0, import_react.useCallback)(async () => {
|
|
147
|
+
if (!client) return;
|
|
148
|
+
const counts = await client.getIssueCounts();
|
|
149
|
+
setIssueCounts(counts);
|
|
150
|
+
}, [client]);
|
|
141
151
|
const getThreadMessages = (0, import_react.useCallback)(async (threadId) => {
|
|
142
152
|
if (!client) return [];
|
|
143
153
|
return client.getThreadMessages(threadId);
|
|
@@ -179,16 +189,18 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
179
189
|
setTesterInfo(info);
|
|
180
190
|
setIsTester(!!info);
|
|
181
191
|
if (info && qaEnabled) {
|
|
182
|
-
const [newAssignments, session, newThreads] = await Promise.all([
|
|
192
|
+
const [newAssignments, session, newThreads, counts] = await Promise.all([
|
|
183
193
|
bugBearClient.getAssignedTests(),
|
|
184
194
|
bugBearClient.getActiveSession(),
|
|
185
|
-
bugBearClient.getThreadsForTester()
|
|
195
|
+
bugBearClient.getThreadsForTester(),
|
|
196
|
+
bugBearClient.getIssueCounts()
|
|
186
197
|
]);
|
|
187
198
|
setAssignments(newAssignments);
|
|
188
199
|
setActiveSession(session);
|
|
189
200
|
setThreads(newThreads);
|
|
190
201
|
const totalUnread = newThreads.reduce((sum, t) => sum + t.unreadCount, 0);
|
|
191
202
|
setUnreadCount(totalUnread);
|
|
203
|
+
setIssueCounts(counts);
|
|
192
204
|
if (session) {
|
|
193
205
|
const findings = await bugBearClient.getSessionFindings(session.id);
|
|
194
206
|
setSessionFindings(findings);
|
|
@@ -270,6 +282,9 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
270
282
|
markAsRead,
|
|
271
283
|
createThread,
|
|
272
284
|
uploadImage,
|
|
285
|
+
// Issue tracking
|
|
286
|
+
issueCounts,
|
|
287
|
+
refreshIssueCounts,
|
|
273
288
|
onError: config.onError
|
|
274
289
|
},
|
|
275
290
|
children
|
|
@@ -278,7 +293,7 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
278
293
|
}
|
|
279
294
|
|
|
280
295
|
// src/BugBearPanel.tsx
|
|
281
|
-
var
|
|
296
|
+
var import_react14 = require("react");
|
|
282
297
|
var import_react_dom = require("react-dom");
|
|
283
298
|
|
|
284
299
|
// src/widget/navigation.ts
|
|
@@ -398,10 +413,11 @@ function getThreadTypeIcon(type) {
|
|
|
398
413
|
var import_react3 = require("react");
|
|
399
414
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
400
415
|
function HomeScreen({ nav }) {
|
|
401
|
-
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads } = useBugBear();
|
|
416
|
+
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts } = useBugBear();
|
|
402
417
|
(0, import_react3.useEffect)(() => {
|
|
403
418
|
refreshAssignments();
|
|
404
419
|
refreshThreads();
|
|
420
|
+
refreshIssueCounts();
|
|
405
421
|
}, []);
|
|
406
422
|
const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
|
|
407
423
|
const pendingCount = pendingAssignments.length;
|
|
@@ -686,6 +702,89 @@ function HomeScreen({ nav }) {
|
|
|
686
702
|
]
|
|
687
703
|
}
|
|
688
704
|
),
|
|
705
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [
|
|
706
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
707
|
+
"div",
|
|
708
|
+
{
|
|
709
|
+
role: "button",
|
|
710
|
+
tabIndex: 0,
|
|
711
|
+
onClick: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
|
|
712
|
+
onKeyDown: (e) => {
|
|
713
|
+
if (e.key === "Enter" || e.key === " ") nav.push({ name: "ISSUE_LIST", category: "open" });
|
|
714
|
+
},
|
|
715
|
+
style: {
|
|
716
|
+
backgroundColor: "#27272a",
|
|
717
|
+
border: "1px solid #3f3f46",
|
|
718
|
+
borderTop: "3px solid #f97316",
|
|
719
|
+
borderRadius: 10,
|
|
720
|
+
padding: "12px 8px",
|
|
721
|
+
display: "flex",
|
|
722
|
+
flexDirection: "column",
|
|
723
|
+
alignItems: "center",
|
|
724
|
+
cursor: "pointer",
|
|
725
|
+
userSelect: "none"
|
|
726
|
+
},
|
|
727
|
+
children: [
|
|
728
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#f97316" }, children: issueCounts.open }),
|
|
729
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Open" })
|
|
730
|
+
]
|
|
731
|
+
}
|
|
732
|
+
),
|
|
733
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
734
|
+
"div",
|
|
735
|
+
{
|
|
736
|
+
role: "button",
|
|
737
|
+
tabIndex: 0,
|
|
738
|
+
onClick: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
|
|
739
|
+
onKeyDown: (e) => {
|
|
740
|
+
if (e.key === "Enter" || e.key === " ") nav.push({ name: "ISSUE_LIST", category: "done" });
|
|
741
|
+
},
|
|
742
|
+
style: {
|
|
743
|
+
backgroundColor: "#27272a",
|
|
744
|
+
border: "1px solid #3f3f46",
|
|
745
|
+
borderTop: "3px solid #22c55e",
|
|
746
|
+
borderRadius: 10,
|
|
747
|
+
padding: "12px 8px",
|
|
748
|
+
display: "flex",
|
|
749
|
+
flexDirection: "column",
|
|
750
|
+
alignItems: "center",
|
|
751
|
+
cursor: "pointer",
|
|
752
|
+
userSelect: "none"
|
|
753
|
+
},
|
|
754
|
+
children: [
|
|
755
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#22c55e" }, children: issueCounts.done }),
|
|
756
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Done" })
|
|
757
|
+
]
|
|
758
|
+
}
|
|
759
|
+
),
|
|
760
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
761
|
+
"div",
|
|
762
|
+
{
|
|
763
|
+
role: "button",
|
|
764
|
+
tabIndex: 0,
|
|
765
|
+
onClick: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
|
|
766
|
+
onKeyDown: (e) => {
|
|
767
|
+
if (e.key === "Enter" || e.key === " ") nav.push({ name: "ISSUE_LIST", category: "reopened" });
|
|
768
|
+
},
|
|
769
|
+
style: {
|
|
770
|
+
backgroundColor: "#27272a",
|
|
771
|
+
border: "1px solid #3f3f46",
|
|
772
|
+
borderTop: "3px solid #ef4444",
|
|
773
|
+
borderRadius: 10,
|
|
774
|
+
padding: "12px 8px",
|
|
775
|
+
display: "flex",
|
|
776
|
+
flexDirection: "column",
|
|
777
|
+
alignItems: "center",
|
|
778
|
+
cursor: "pointer",
|
|
779
|
+
userSelect: "none"
|
|
780
|
+
},
|
|
781
|
+
children: [
|
|
782
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#ef4444" }, children: issueCounts.reopened }),
|
|
783
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Reopened" })
|
|
784
|
+
]
|
|
785
|
+
}
|
|
786
|
+
)
|
|
787
|
+
] }),
|
|
689
788
|
totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { marginBottom: 16 }, children: [
|
|
690
789
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
691
790
|
"div",
|
|
@@ -725,6 +824,7 @@ function HomeScreen({ nav }) {
|
|
|
725
824
|
onClick: () => {
|
|
726
825
|
refreshAssignments();
|
|
727
826
|
refreshThreads();
|
|
827
|
+
refreshIssueCounts();
|
|
728
828
|
},
|
|
729
829
|
style: {
|
|
730
830
|
background: "none",
|
|
@@ -1608,36 +1708,21 @@ function TestListScreen({ nav }) {
|
|
|
1608
1708
|
const filterAssignment = (a) => {
|
|
1609
1709
|
if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
|
|
1610
1710
|
if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
|
|
1611
|
-
if (filter === "
|
|
1711
|
+
if (filter === "done") return a.status === "passed";
|
|
1712
|
+
if (filter === "reopened") return a.status === "failed";
|
|
1612
1713
|
return true;
|
|
1613
1714
|
};
|
|
1614
1715
|
const pendingCount = assignments.filter(
|
|
1615
1716
|
(a) => a.status === "pending" || a.status === "in_progress"
|
|
1616
1717
|
).length;
|
|
1617
|
-
const doneCount = assignments.filter(
|
|
1618
|
-
|
|
1619
|
-
).length;
|
|
1718
|
+
const doneCount = assignments.filter((a) => a.status === "passed").length;
|
|
1719
|
+
const reopenedCount = assignments.filter((a) => a.status === "failed").length;
|
|
1620
1720
|
const filters = [
|
|
1621
1721
|
{ key: "all", label: "All", count: assignments.length },
|
|
1622
1722
|
{ key: "pending", label: "To Do", count: pendingCount },
|
|
1623
|
-
{ key: "
|
|
1723
|
+
{ key: "done", label: "Done", count: doneCount },
|
|
1724
|
+
{ key: "reopened", label: "Re Opened", count: reopenedCount }
|
|
1624
1725
|
];
|
|
1625
|
-
const getStatusColor = (status) => {
|
|
1626
|
-
switch (status) {
|
|
1627
|
-
case "passed":
|
|
1628
|
-
return colors.green;
|
|
1629
|
-
case "failed":
|
|
1630
|
-
return colors.red;
|
|
1631
|
-
case "skipped":
|
|
1632
|
-
return colors.yellow;
|
|
1633
|
-
case "in_progress":
|
|
1634
|
-
return colors.blue;
|
|
1635
|
-
case "blocked":
|
|
1636
|
-
return colors.red;
|
|
1637
|
-
default:
|
|
1638
|
-
return colors.textMuted;
|
|
1639
|
-
}
|
|
1640
|
-
};
|
|
1641
1726
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
|
|
1642
1727
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: availableRoles.length >= 2 ? 8 : 16 }, children: filters.map((f) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1643
1728
|
"button",
|
|
@@ -1938,10 +2023,14 @@ function TestListScreen({ nav }) {
|
|
|
1938
2023
|
{
|
|
1939
2024
|
style: {
|
|
1940
2025
|
fontSize: 10,
|
|
1941
|
-
|
|
1942
|
-
fontWeight: 500,
|
|
2026
|
+
fontWeight: 600,
|
|
1943
2027
|
marginLeft: 8,
|
|
1944
|
-
flexShrink: 0
|
|
2028
|
+
flexShrink: 0,
|
|
2029
|
+
padding: "3px 8px",
|
|
2030
|
+
borderRadius: 6,
|
|
2031
|
+
color: assignment.status === "passed" ? "#4ade80" : assignment.status === "failed" ? "#f87171" : assignment.status === "in_progress" ? "#60a5fa" : "#d4d4d8",
|
|
2032
|
+
backgroundColor: assignment.status === "passed" ? "#14532d" : assignment.status === "failed" ? "#450a0a" : assignment.status === "in_progress" ? "#172554" : "#27272a",
|
|
2033
|
+
border: assignment.status === "passed" ? "1px solid #166534" : assignment.status === "failed" ? "1px solid #7f1d1d" : assignment.status === "in_progress" ? "1px solid #1e3a5f" : "1px solid #3f3f46"
|
|
1945
2034
|
},
|
|
1946
2035
|
children: badge.label
|
|
1947
2036
|
}
|
|
@@ -1966,8 +2055,8 @@ function TestListScreen({ nav }) {
|
|
|
1966
2055
|
padding: 32
|
|
1967
2056
|
},
|
|
1968
2057
|
children: [
|
|
1969
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 32, marginBottom: 8 }, children: filter === "pending" ? "\u{1F389}" : "\u{1F4CB}" }),
|
|
1970
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14, color: colors.textMuted }, children: filter === "pending" ? "All tests completed!" : filter === "
|
|
2058
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 32, marginBottom: 8 }, children: filter === "pending" ? "\u{1F389}" : filter === "reopened" ? "\u{1F44D}" : "\u{1F4CB}" }),
|
|
2059
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14, color: colors.textMuted }, children: filter === "pending" ? "All tests completed!" : filter === "done" ? "No passed tests yet" : filter === "reopened" ? "No reopened issues" : "No tests assigned" })
|
|
1971
2060
|
]
|
|
1972
2061
|
}
|
|
1973
2062
|
),
|
|
@@ -2487,6 +2576,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2487
2576
|
const [affectedRoute, setAffectedRoute] = (0, import_react8.useState)("");
|
|
2488
2577
|
const [submitting, setSubmitting] = (0, import_react8.useState)(false);
|
|
2489
2578
|
const [error, setError] = (0, import_react8.useState)(null);
|
|
2579
|
+
const submittingRef = (0, import_react8.useRef)(false);
|
|
2490
2580
|
const observedRoute = (0, import_react8.useRef)(
|
|
2491
2581
|
typeof window !== "undefined" ? window.location.pathname : "unknown"
|
|
2492
2582
|
);
|
|
@@ -2494,6 +2584,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2494
2584
|
const isBugType = reportType === "bug" || reportType === "test_fail";
|
|
2495
2585
|
const handleSubmit = async () => {
|
|
2496
2586
|
if (!client || !description.trim() || images.isUploading) return;
|
|
2587
|
+
if (submittingRef.current) return;
|
|
2588
|
+
submittingRef.current = true;
|
|
2497
2589
|
setSubmitting(true);
|
|
2498
2590
|
setError(null);
|
|
2499
2591
|
try {
|
|
@@ -2515,17 +2607,18 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2515
2607
|
if (!result.success) {
|
|
2516
2608
|
setError(result.error || "Failed to submit report. Please try again.");
|
|
2517
2609
|
setSubmitting(false);
|
|
2610
|
+
submittingRef.current = false;
|
|
2518
2611
|
return;
|
|
2519
2612
|
}
|
|
2520
2613
|
if (prefill?.assignmentId) {
|
|
2521
2614
|
await refreshAssignments();
|
|
2522
2615
|
}
|
|
2523
|
-
setSubmitting(false);
|
|
2524
2616
|
nav.replace({ name: "REPORT_SUCCESS" });
|
|
2525
2617
|
} catch (err) {
|
|
2526
2618
|
console.error("BugBear: Report submission error", err);
|
|
2527
2619
|
setError(err instanceof Error ? err.message : "An unexpected error occurred. Please try again.");
|
|
2528
2620
|
setSubmitting(false);
|
|
2621
|
+
submittingRef.current = false;
|
|
2529
2622
|
}
|
|
2530
2623
|
};
|
|
2531
2624
|
const typeOptions = [
|
|
@@ -3280,7 +3373,7 @@ function ThreadDetailScreen({
|
|
|
3280
3373
|
children: msg.content
|
|
3281
3374
|
}
|
|
3282
3375
|
),
|
|
3283
|
-
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { marginTop: 8, display: "flex", flexDirection: "column", gap: 6 }, children: msg.attachments.filter((a) => a.type === "image").map((att, idx) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3376
|
+
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { marginTop: 8, display: "flex", flexDirection: "column", gap: 6 }, children: msg.attachments.filter((a) => a.type === "image" && typeof a.url === "string" && /^https?:\/\//i.test(a.url)).map((att, idx) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3284
3377
|
"img",
|
|
3285
3378
|
{
|
|
3286
3379
|
src: att.url,
|
|
@@ -4040,13 +4133,289 @@ var styles4 = {
|
|
|
4040
4133
|
}
|
|
4041
4134
|
};
|
|
4042
4135
|
|
|
4136
|
+
// src/widget/screens/IssueListScreen.tsx
|
|
4137
|
+
var import_react13 = require("react");
|
|
4138
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
4139
|
+
var CATEGORY_CONFIG = {
|
|
4140
|
+
open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
|
|
4141
|
+
done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
|
|
4142
|
+
reopened: { label: "Reopened", accent: "#ef4444", emptyIcon: "\u{1F44D}", emptyText: "No reopened issues" }
|
|
4143
|
+
};
|
|
4144
|
+
var SEVERITY_COLORS = {
|
|
4145
|
+
critical: "#ef4444",
|
|
4146
|
+
high: "#f97316",
|
|
4147
|
+
medium: "#eab308",
|
|
4148
|
+
low: "#71717a"
|
|
4149
|
+
};
|
|
4150
|
+
function IssueListScreen({ nav, category }) {
|
|
4151
|
+
const { client } = useBugBear();
|
|
4152
|
+
const [issues, setIssues] = (0, import_react13.useState)([]);
|
|
4153
|
+
const [loading, setLoading] = (0, import_react13.useState)(true);
|
|
4154
|
+
const config = CATEGORY_CONFIG[category];
|
|
4155
|
+
(0, import_react13.useEffect)(() => {
|
|
4156
|
+
let cancelled = false;
|
|
4157
|
+
setLoading(true);
|
|
4158
|
+
(async () => {
|
|
4159
|
+
if (!client) return;
|
|
4160
|
+
const data = await client.getIssues(category);
|
|
4161
|
+
if (!cancelled) {
|
|
4162
|
+
setIssues(data);
|
|
4163
|
+
setLoading(false);
|
|
4164
|
+
}
|
|
4165
|
+
})();
|
|
4166
|
+
return () => {
|
|
4167
|
+
cancelled = true;
|
|
4168
|
+
};
|
|
4169
|
+
}, [client, category]);
|
|
4170
|
+
if (loading) {
|
|
4171
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { padding: "40px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { color: colors.textMuted, fontSize: 14 }, children: "Loading..." }) });
|
|
4172
|
+
}
|
|
4173
|
+
if (issues.length === 0) {
|
|
4174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: { padding: "40px 0", textAlign: "center" }, children: [
|
|
4175
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { fontSize: 36, marginBottom: 8 }, children: config.emptyIcon }),
|
|
4176
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { color: colors.textMuted, fontSize: 14 }, children: config.emptyText })
|
|
4177
|
+
] });
|
|
4178
|
+
}
|
|
4179
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { children: issues.map((issue) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
4180
|
+
"div",
|
|
4181
|
+
{
|
|
4182
|
+
role: "button",
|
|
4183
|
+
tabIndex: 0,
|
|
4184
|
+
onClick: () => nav.push({ name: "ISSUE_DETAIL", issue }),
|
|
4185
|
+
onKeyDown: (e) => {
|
|
4186
|
+
if (e.key === "Enter" || e.key === " ") nav.push({ name: "ISSUE_DETAIL", issue });
|
|
4187
|
+
},
|
|
4188
|
+
style: {
|
|
4189
|
+
backgroundColor: colors.card,
|
|
4190
|
+
border: `1px solid ${colors.border}`,
|
|
4191
|
+
borderRadius: 10,
|
|
4192
|
+
padding: "12px 14px",
|
|
4193
|
+
marginBottom: 8,
|
|
4194
|
+
cursor: "pointer",
|
|
4195
|
+
userSelect: "none"
|
|
4196
|
+
},
|
|
4197
|
+
children: [
|
|
4198
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 }, children: [
|
|
4199
|
+
issue.severity && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
4200
|
+
"span",
|
|
4201
|
+
{
|
|
4202
|
+
style: {
|
|
4203
|
+
width: 8,
|
|
4204
|
+
height: 8,
|
|
4205
|
+
borderRadius: 4,
|
|
4206
|
+
backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim,
|
|
4207
|
+
flexShrink: 0,
|
|
4208
|
+
marginTop: 5
|
|
4209
|
+
}
|
|
4210
|
+
}
|
|
4211
|
+
),
|
|
4212
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: {
|
|
4213
|
+
fontSize: 13,
|
|
4214
|
+
fontWeight: 600,
|
|
4215
|
+
color: colors.textPrimary,
|
|
4216
|
+
flex: 1,
|
|
4217
|
+
overflow: "hidden",
|
|
4218
|
+
textOverflow: "ellipsis",
|
|
4219
|
+
whiteSpace: "nowrap"
|
|
4220
|
+
}, children: issue.title })
|
|
4221
|
+
] }),
|
|
4222
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 6 }, children: [
|
|
4223
|
+
issue.route && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: { fontSize: 11, color: colors.textDim, maxWidth: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: issue.route }),
|
|
4224
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: { fontSize: 11, color: colors.textDim, marginLeft: "auto" }, children: formatRelativeTime(issue.updatedAt) })
|
|
4225
|
+
] }),
|
|
4226
|
+
category === "done" && issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: {
|
|
4227
|
+
display: "inline-flex",
|
|
4228
|
+
alignItems: "center",
|
|
4229
|
+
gap: 4,
|
|
4230
|
+
backgroundColor: "#14532d",
|
|
4231
|
+
border: "1px solid #166534",
|
|
4232
|
+
borderRadius: 6,
|
|
4233
|
+
padding: "2px 8px",
|
|
4234
|
+
marginTop: 6,
|
|
4235
|
+
fontSize: 10,
|
|
4236
|
+
fontWeight: 600,
|
|
4237
|
+
color: "#4ade80"
|
|
4238
|
+
}, children: [
|
|
4239
|
+
"\u2714 Verified by ",
|
|
4240
|
+
issue.verifiedByName
|
|
4241
|
+
] }),
|
|
4242
|
+
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: {
|
|
4243
|
+
display: "inline-flex",
|
|
4244
|
+
alignItems: "center",
|
|
4245
|
+
gap: 4,
|
|
4246
|
+
backgroundColor: "#422006",
|
|
4247
|
+
border: "1px solid #854d0e",
|
|
4248
|
+
borderRadius: 6,
|
|
4249
|
+
padding: "2px 8px",
|
|
4250
|
+
marginTop: 6,
|
|
4251
|
+
fontSize: 10,
|
|
4252
|
+
fontWeight: 600,
|
|
4253
|
+
color: "#fbbf24",
|
|
4254
|
+
maxWidth: "100%",
|
|
4255
|
+
overflow: "hidden",
|
|
4256
|
+
textOverflow: "ellipsis",
|
|
4257
|
+
whiteSpace: "nowrap"
|
|
4258
|
+
}, children: [
|
|
4259
|
+
"\u{1F504} Retest of: ",
|
|
4260
|
+
issue.originalBugTitle
|
|
4261
|
+
] })
|
|
4262
|
+
]
|
|
4263
|
+
},
|
|
4264
|
+
issue.id
|
|
4265
|
+
)) });
|
|
4266
|
+
}
|
|
4267
|
+
|
|
4268
|
+
// src/widget/screens/IssueDetailScreen.tsx
|
|
4269
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
4270
|
+
var STATUS_LABELS = {
|
|
4271
|
+
new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
|
|
4272
|
+
triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
|
|
4273
|
+
confirmed: { label: "Confirmed", bg: "#422006", color: "#fbbf24" },
|
|
4274
|
+
in_progress: { label: "In Progress", bg: "#1e3a5f", color: "#60a5fa" },
|
|
4275
|
+
fixed: { label: "Fixed", bg: "#14532d", color: "#4ade80" },
|
|
4276
|
+
ready_to_test: { label: "Ready to Test", bg: "#422006", color: "#fbbf24" },
|
|
4277
|
+
verified: { label: "Verified", bg: "#14532d", color: "#4ade80" },
|
|
4278
|
+
resolved: { label: "Resolved", bg: "#14532d", color: "#4ade80" },
|
|
4279
|
+
reviewed: { label: "Reviewed", bg: "#14532d", color: "#4ade80" },
|
|
4280
|
+
closed: { label: "Closed", bg: "#27272a", color: "#71717a" },
|
|
4281
|
+
wont_fix: { label: "Won't Fix", bg: "#27272a", color: "#71717a" },
|
|
4282
|
+
duplicate: { label: "Duplicate", bg: "#27272a", color: "#71717a" }
|
|
4283
|
+
};
|
|
4284
|
+
var SEVERITY_CONFIG = {
|
|
4285
|
+
critical: { label: "Critical", color: "#ef4444", bg: "#7f1d1d" },
|
|
4286
|
+
high: { label: "High", color: "#f97316", bg: "#431407" },
|
|
4287
|
+
medium: { label: "Medium", color: "#eab308", bg: "#422006" },
|
|
4288
|
+
low: { label: "Low", color: "#71717a", bg: "#27272a" }
|
|
4289
|
+
};
|
|
4290
|
+
function IssueDetailScreen({ nav, issue }) {
|
|
4291
|
+
const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
|
|
4292
|
+
const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
|
|
4293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
|
|
4294
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginBottom: 12 }, children: [
|
|
4295
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: {
|
|
4296
|
+
backgroundColor: statusConfig.bg,
|
|
4297
|
+
color: statusConfig.color,
|
|
4298
|
+
fontSize: 11,
|
|
4299
|
+
fontWeight: 600,
|
|
4300
|
+
padding: "3px 10px",
|
|
4301
|
+
borderRadius: 6
|
|
4302
|
+
}, children: statusConfig.label }),
|
|
4303
|
+
severityConfig && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: {
|
|
4304
|
+
backgroundColor: severityConfig.bg,
|
|
4305
|
+
color: severityConfig.color,
|
|
4306
|
+
fontSize: 11,
|
|
4307
|
+
fontWeight: 600,
|
|
4308
|
+
padding: "3px 10px",
|
|
4309
|
+
borderRadius: 6
|
|
4310
|
+
}, children: severityConfig.label })
|
|
4311
|
+
] }),
|
|
4312
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h3", { style: { fontSize: 16, fontWeight: 700, color: colors.textPrimary, margin: "0 0 8px 0", lineHeight: 1.3 }, children: issue.title }),
|
|
4313
|
+
issue.route && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 12 }, children: issue.route }),
|
|
4314
|
+
issue.description && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: {
|
|
4315
|
+
backgroundColor: colors.card,
|
|
4316
|
+
border: `1px solid ${colors.border}`,
|
|
4317
|
+
borderRadius: 8,
|
|
4318
|
+
padding: 12,
|
|
4319
|
+
marginBottom: 12,
|
|
4320
|
+
fontSize: 13,
|
|
4321
|
+
color: colors.textSecondary,
|
|
4322
|
+
lineHeight: 1.5,
|
|
4323
|
+
whiteSpace: "pre-wrap",
|
|
4324
|
+
wordBreak: "break-word"
|
|
4325
|
+
}, children: issue.description }),
|
|
4326
|
+
issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: {
|
|
4327
|
+
backgroundColor: "#14532d",
|
|
4328
|
+
border: "1px solid #166534",
|
|
4329
|
+
borderRadius: 8,
|
|
4330
|
+
padding: 12,
|
|
4331
|
+
marginBottom: 12
|
|
4332
|
+
}, children: [
|
|
4333
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
|
|
4334
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: { fontSize: 16 }, children: "\u2705" }),
|
|
4335
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#4ade80" }, children: "Retesting Proof" })
|
|
4336
|
+
] }),
|
|
4337
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { fontSize: 12, color: "#86efac" }, children: [
|
|
4338
|
+
"Verified by ",
|
|
4339
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: issue.verifiedByName }),
|
|
4340
|
+
issue.verifiedAt && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { children: [
|
|
4341
|
+
" on ",
|
|
4342
|
+
new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })
|
|
4343
|
+
] })
|
|
4344
|
+
] })
|
|
4345
|
+
] }),
|
|
4346
|
+
issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: {
|
|
4347
|
+
backgroundColor: "#422006",
|
|
4348
|
+
border: "1px solid #854d0e",
|
|
4349
|
+
borderRadius: 8,
|
|
4350
|
+
padding: 12,
|
|
4351
|
+
marginBottom: 12
|
|
4352
|
+
}, children: [
|
|
4353
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
|
|
4354
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
|
|
4355
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Original Bug" })
|
|
4356
|
+
] }),
|
|
4357
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { fontSize: 12, color: "#fde68a" }, children: [
|
|
4358
|
+
"Retest of: ",
|
|
4359
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: issue.originalBugTitle })
|
|
4360
|
+
] })
|
|
4361
|
+
] }),
|
|
4362
|
+
issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { marginBottom: 12 }, children: [
|
|
4363
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { fontSize: 12, fontWeight: 600, color: colors.textMuted, marginBottom: 8 }, children: [
|
|
4364
|
+
"Screenshots (",
|
|
4365
|
+
issue.screenshotUrls.length,
|
|
4366
|
+
")"
|
|
4367
|
+
] }),
|
|
4368
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { display: "flex", gap: 8, overflowX: "auto" }, children: issue.screenshotUrls.map((url, i) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
4369
|
+
"a",
|
|
4370
|
+
{
|
|
4371
|
+
href: url,
|
|
4372
|
+
target: "_blank",
|
|
4373
|
+
rel: "noopener noreferrer",
|
|
4374
|
+
style: { flexShrink: 0 },
|
|
4375
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
4376
|
+
"img",
|
|
4377
|
+
{
|
|
4378
|
+
src: url,
|
|
4379
|
+
alt: `Screenshot ${i + 1}`,
|
|
4380
|
+
style: {
|
|
4381
|
+
width: 80,
|
|
4382
|
+
height: 60,
|
|
4383
|
+
objectFit: "cover",
|
|
4384
|
+
borderRadius: 6,
|
|
4385
|
+
border: `1px solid ${colors.border}`
|
|
4386
|
+
}
|
|
4387
|
+
}
|
|
4388
|
+
)
|
|
4389
|
+
},
|
|
4390
|
+
i
|
|
4391
|
+
)) })
|
|
4392
|
+
] }),
|
|
4393
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: {
|
|
4394
|
+
borderTop: `1px solid ${colors.border}`,
|
|
4395
|
+
paddingTop: 12,
|
|
4396
|
+
marginTop: 4
|
|
4397
|
+
}, children: [
|
|
4398
|
+
issue.reporterName && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 4 }, children: [
|
|
4399
|
+
"Reported by ",
|
|
4400
|
+
issue.reporterName
|
|
4401
|
+
] }),
|
|
4402
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { fontSize: 11, color: colors.textDim }, children: [
|
|
4403
|
+
"Created ",
|
|
4404
|
+
formatRelativeTime(issue.createdAt),
|
|
4405
|
+
" \xB7 Updated ",
|
|
4406
|
+
formatRelativeTime(issue.updatedAt)
|
|
4407
|
+
] })
|
|
4408
|
+
] })
|
|
4409
|
+
] });
|
|
4410
|
+
}
|
|
4411
|
+
|
|
4043
4412
|
// src/widget/logo.ts
|
|
4044
4413
|
var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
|
|
4045
4414
|
|
|
4046
4415
|
// src/BugBearPanel.tsx
|
|
4047
|
-
var
|
|
4416
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
4048
4417
|
function BugBearIcon({ size = 24 }) {
|
|
4049
|
-
return /* @__PURE__ */ (0,
|
|
4418
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
4050
4419
|
"img",
|
|
4051
4420
|
{
|
|
4052
4421
|
src: BUGBEAR_LOGO_BASE64,
|
|
@@ -4091,12 +4460,12 @@ function BugBearPanel({
|
|
|
4091
4460
|
}) {
|
|
4092
4461
|
const { shouldShowWidget, testerInfo, assignments, isLoading, unreadCount } = useBugBear();
|
|
4093
4462
|
const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
|
|
4094
|
-
const [collapsed, setCollapsed] = (0,
|
|
4095
|
-
const [panelPosition, setPanelPosition] = (0,
|
|
4096
|
-
const [isDragging, setIsDragging] = (0,
|
|
4097
|
-
const dragStartRef = (0,
|
|
4098
|
-
const panelRef = (0,
|
|
4099
|
-
(0,
|
|
4463
|
+
const [collapsed, setCollapsed] = (0, import_react14.useState)(defaultCollapsed);
|
|
4464
|
+
const [panelPosition, setPanelPosition] = (0, import_react14.useState)(null);
|
|
4465
|
+
const [isDragging, setIsDragging] = (0, import_react14.useState)(false);
|
|
4466
|
+
const dragStartRef = (0, import_react14.useRef)(null);
|
|
4467
|
+
const panelRef = (0, import_react14.useRef)(null);
|
|
4468
|
+
(0, import_react14.useEffect)(() => {
|
|
4100
4469
|
if (typeof window === "undefined") return;
|
|
4101
4470
|
try {
|
|
4102
4471
|
const saved = localStorage.getItem(STORAGE_KEY);
|
|
@@ -4110,7 +4479,7 @@ function BugBearPanel({
|
|
|
4110
4479
|
setPanelPosition(getDefaultPosition(position));
|
|
4111
4480
|
}
|
|
4112
4481
|
}, [position]);
|
|
4113
|
-
(0,
|
|
4482
|
+
(0, import_react14.useEffect)(() => {
|
|
4114
4483
|
if (panelPosition && typeof window !== "undefined") {
|
|
4115
4484
|
try {
|
|
4116
4485
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(panelPosition));
|
|
@@ -4118,7 +4487,7 @@ function BugBearPanel({
|
|
|
4118
4487
|
}
|
|
4119
4488
|
}
|
|
4120
4489
|
}, [panelPosition]);
|
|
4121
|
-
(0,
|
|
4490
|
+
(0, import_react14.useEffect)(() => {
|
|
4122
4491
|
if (typeof window === "undefined") return;
|
|
4123
4492
|
const handleResize = () => {
|
|
4124
4493
|
setPanelPosition((prev) => prev ? clampPosition(prev) : getDefaultPosition(position));
|
|
@@ -4126,7 +4495,7 @@ function BugBearPanel({
|
|
|
4126
4495
|
window.addEventListener("resize", handleResize);
|
|
4127
4496
|
return () => window.removeEventListener("resize", handleResize);
|
|
4128
4497
|
}, [position]);
|
|
4129
|
-
const handleMouseDown = (0,
|
|
4498
|
+
const handleMouseDown = (0, import_react14.useCallback)((e) => {
|
|
4130
4499
|
if (!draggable || !panelPosition) return;
|
|
4131
4500
|
const target = e.target;
|
|
4132
4501
|
if (!target.closest("[data-drag-handle]")) return;
|
|
@@ -4139,7 +4508,7 @@ function BugBearPanel({
|
|
|
4139
4508
|
panelY: panelPosition.y
|
|
4140
4509
|
};
|
|
4141
4510
|
}, [draggable, panelPosition]);
|
|
4142
|
-
(0,
|
|
4511
|
+
(0, import_react14.useEffect)(() => {
|
|
4143
4512
|
if (!isDragging) return;
|
|
4144
4513
|
const handleMouseMove = (e) => {
|
|
4145
4514
|
if (!dragStartRef.current) return;
|
|
@@ -4161,7 +4530,7 @@ function BugBearPanel({
|
|
|
4161
4530
|
document.removeEventListener("mouseup", handleMouseUp);
|
|
4162
4531
|
};
|
|
4163
4532
|
}, [isDragging]);
|
|
4164
|
-
const handleDoubleClick = (0,
|
|
4533
|
+
const handleDoubleClick = (0, import_react14.useCallback)(() => {
|
|
4165
4534
|
if (!draggable) return;
|
|
4166
4535
|
setPanelPosition(getDefaultPosition(position));
|
|
4167
4536
|
try {
|
|
@@ -4193,6 +4562,10 @@ function BugBearPanel({
|
|
|
4193
4562
|
return currentScreen.thread.subject || "Thread";
|
|
4194
4563
|
case "COMPOSE_MESSAGE":
|
|
4195
4564
|
return "New Message";
|
|
4565
|
+
case "ISSUE_LIST":
|
|
4566
|
+
return currentScreen.category === "open" ? "Open Issues" : currentScreen.category === "done" ? "Done" : "Reopened";
|
|
4567
|
+
case "ISSUE_DETAIL":
|
|
4568
|
+
return "Issue Detail";
|
|
4196
4569
|
case "PROFILE":
|
|
4197
4570
|
return "Profile";
|
|
4198
4571
|
default:
|
|
@@ -4207,33 +4580,37 @@ function BugBearPanel({
|
|
|
4207
4580
|
const renderScreen = () => {
|
|
4208
4581
|
switch (currentScreen.name) {
|
|
4209
4582
|
case "HOME":
|
|
4210
|
-
return /* @__PURE__ */ (0,
|
|
4583
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(HomeScreen, { nav });
|
|
4211
4584
|
case "TEST_DETAIL":
|
|
4212
|
-
return /* @__PURE__ */ (0,
|
|
4585
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TestDetailScreen, { testId: currentScreen.testId, nav });
|
|
4213
4586
|
case "TEST_LIST":
|
|
4214
|
-
return /* @__PURE__ */ (0,
|
|
4587
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TestListScreen, { nav });
|
|
4215
4588
|
case "TEST_FEEDBACK":
|
|
4216
|
-
return /* @__PURE__ */ (0,
|
|
4589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
|
|
4217
4590
|
case "REPORT":
|
|
4218
|
-
return /* @__PURE__ */ (0,
|
|
4591
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ReportScreen, { nav, prefill: currentScreen.prefill });
|
|
4219
4592
|
case "REPORT_SUCCESS":
|
|
4220
|
-
return /* @__PURE__ */ (0,
|
|
4593
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ReportSuccessScreen, { nav });
|
|
4221
4594
|
case "MESSAGE_LIST":
|
|
4222
|
-
return /* @__PURE__ */ (0,
|
|
4595
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MessageListScreen, { nav });
|
|
4223
4596
|
case "THREAD_DETAIL":
|
|
4224
|
-
return /* @__PURE__ */ (0,
|
|
4597
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ThreadDetailScreen, { thread: currentScreen.thread, nav });
|
|
4225
4598
|
case "COMPOSE_MESSAGE":
|
|
4226
|
-
return /* @__PURE__ */ (0,
|
|
4599
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ComposeMessageScreen, { nav });
|
|
4600
|
+
case "ISSUE_LIST":
|
|
4601
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(IssueListScreen, { nav, category: currentScreen.category });
|
|
4602
|
+
case "ISSUE_DETAIL":
|
|
4603
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(IssueDetailScreen, { nav, issue: currentScreen.issue });
|
|
4227
4604
|
case "PROFILE":
|
|
4228
|
-
return /* @__PURE__ */ (0,
|
|
4605
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ProfileScreen, { nav });
|
|
4229
4606
|
default:
|
|
4230
|
-
return /* @__PURE__ */ (0,
|
|
4607
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(HomeScreen, { nav });
|
|
4231
4608
|
}
|
|
4232
4609
|
};
|
|
4233
4610
|
if (typeof document === "undefined") return null;
|
|
4234
4611
|
const headerTitle = getHeaderTitle();
|
|
4235
4612
|
return (0, import_react_dom.createPortal)(
|
|
4236
|
-
/* @__PURE__ */ (0,
|
|
4613
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
4237
4614
|
"div",
|
|
4238
4615
|
{
|
|
4239
4616
|
ref: panelRef,
|
|
@@ -4252,7 +4629,7 @@ function BugBearPanel({
|
|
|
4252
4629
|
},
|
|
4253
4630
|
onMouseDown: handleMouseDown,
|
|
4254
4631
|
children: [
|
|
4255
|
-
collapsed && /* @__PURE__ */ (0,
|
|
4632
|
+
collapsed && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
4256
4633
|
"button",
|
|
4257
4634
|
{
|
|
4258
4635
|
onClick: () => setCollapsed(false),
|
|
@@ -4274,9 +4651,9 @@ function BugBearPanel({
|
|
|
4274
4651
|
fontWeight: 500
|
|
4275
4652
|
},
|
|
4276
4653
|
children: [
|
|
4277
|
-
/* @__PURE__ */ (0,
|
|
4278
|
-
/* @__PURE__ */ (0,
|
|
4279
|
-
badgeCount > 0 && /* @__PURE__ */ (0,
|
|
4654
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BugBearIcon, { size: 24 }),
|
|
4655
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: "BugBear" }),
|
|
4656
|
+
badgeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
|
|
4280
4657
|
backgroundColor: "#fff",
|
|
4281
4658
|
color: colors.blue,
|
|
4282
4659
|
fontSize: "0.75rem",
|
|
@@ -4287,7 +4664,7 @@ function BugBearPanel({
|
|
|
4287
4664
|
]
|
|
4288
4665
|
}
|
|
4289
4666
|
),
|
|
4290
|
-
!collapsed && /* @__PURE__ */ (0,
|
|
4667
|
+
!collapsed && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
|
|
4291
4668
|
width: PANEL_WIDTH,
|
|
4292
4669
|
backgroundColor: colors.bg,
|
|
4293
4670
|
borderRadius: 12,
|
|
@@ -4295,7 +4672,7 @@ function BugBearPanel({
|
|
|
4295
4672
|
overflow: "hidden",
|
|
4296
4673
|
boxShadow: "0 25px 50px -12px rgba(0,0,0,0.5)"
|
|
4297
4674
|
}, children: [
|
|
4298
|
-
/* @__PURE__ */ (0,
|
|
4675
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
4299
4676
|
"div",
|
|
4300
4677
|
{
|
|
4301
4678
|
"data-drag-handle": true,
|
|
@@ -4311,7 +4688,7 @@ function BugBearPanel({
|
|
|
4311
4688
|
cursor: draggable ? isDragging ? "grabbing" : "grab" : "default"
|
|
4312
4689
|
},
|
|
4313
4690
|
children: [
|
|
4314
|
-
/* @__PURE__ */ (0,
|
|
4691
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
4315
4692
|
"button",
|
|
4316
4693
|
{
|
|
4317
4694
|
onClick: pop,
|
|
@@ -4327,14 +4704,14 @@ function BugBearPanel({
|
|
|
4327
4704
|
},
|
|
4328
4705
|
children: "\u2190 Back"
|
|
4329
4706
|
}
|
|
4330
|
-
) : /* @__PURE__ */ (0,
|
|
4331
|
-
/* @__PURE__ */ (0,
|
|
4332
|
-
/* @__PURE__ */ (0,
|
|
4333
|
-
/* @__PURE__ */ (0,
|
|
4334
|
-
/* @__PURE__ */ (0,
|
|
4335
|
-
draggable && /* @__PURE__ */ (0,
|
|
4707
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
|
|
4708
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BugBearIcon, { size: 28 }),
|
|
4709
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { children: [
|
|
4710
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
4711
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontWeight: 600, fontSize: "0.875rem" }, children: "BugBear" }),
|
|
4712
|
+
draggable && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { color: colors.textMuted, fontSize: "0.75rem" }, title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
|
|
4336
4713
|
] }),
|
|
4337
|
-
testerInfo && /* @__PURE__ */ (0,
|
|
4714
|
+
testerInfo && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
4338
4715
|
"button",
|
|
4339
4716
|
{
|
|
4340
4717
|
onClick: () => push({ name: "PROFILE" }),
|
|
@@ -4352,13 +4729,13 @@ function BugBearPanel({
|
|
|
4352
4729
|
},
|
|
4353
4730
|
children: [
|
|
4354
4731
|
testerInfo.name,
|
|
4355
|
-
/* @__PURE__ */ (0,
|
|
4732
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
|
|
4356
4733
|
]
|
|
4357
4734
|
}
|
|
4358
4735
|
)
|
|
4359
4736
|
] })
|
|
4360
4737
|
] }) }),
|
|
4361
|
-
headerTitle ? /* @__PURE__ */ (0,
|
|
4738
|
+
headerTitle ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
|
|
4362
4739
|
fontSize: "0.8125rem",
|
|
4363
4740
|
fontWeight: 600,
|
|
4364
4741
|
color: colors.textSecondary,
|
|
@@ -4368,7 +4745,7 @@ function BugBearPanel({
|
|
|
4368
4745
|
textOverflow: "ellipsis",
|
|
4369
4746
|
whiteSpace: "nowrap"
|
|
4370
4747
|
}, children: headerTitle }) : null,
|
|
4371
|
-
/* @__PURE__ */ (0,
|
|
4748
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
4372
4749
|
"button",
|
|
4373
4750
|
{
|
|
4374
4751
|
onClick: handleClose,
|
|
@@ -4392,13 +4769,13 @@ function BugBearPanel({
|
|
|
4392
4769
|
]
|
|
4393
4770
|
}
|
|
4394
4771
|
),
|
|
4395
|
-
/* @__PURE__ */ (0,
|
|
4772
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: {
|
|
4396
4773
|
padding: 16,
|
|
4397
4774
|
maxHeight: 400,
|
|
4398
4775
|
overflowY: "auto",
|
|
4399
4776
|
backgroundColor: colors.bg,
|
|
4400
4777
|
color: colors.textSecondary
|
|
4401
|
-
}, children: isLoading ? /* @__PURE__ */ (0,
|
|
4778
|
+
}, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { padding: "60px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: colors.textMuted, fontSize: "0.875rem" }, children: "Loading..." }) }) : renderScreen() })
|
|
4402
4779
|
] })
|
|
4403
4780
|
]
|
|
4404
4781
|
}
|
|
@@ -4408,10 +4785,10 @@ function BugBearPanel({
|
|
|
4408
4785
|
}
|
|
4409
4786
|
|
|
4410
4787
|
// src/BugBearErrorBoundary.tsx
|
|
4411
|
-
var
|
|
4788
|
+
var import_react15 = require("react");
|
|
4412
4789
|
var import_core2 = require("@bbearai/core");
|
|
4413
|
-
var
|
|
4414
|
-
var BugBearErrorBoundary = class extends
|
|
4790
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
4791
|
+
var BugBearErrorBoundary = class extends import_react15.Component {
|
|
4415
4792
|
constructor(props) {
|
|
4416
4793
|
super(props);
|
|
4417
4794
|
this.reset = () => {
|
|
@@ -4455,7 +4832,7 @@ var BugBearErrorBoundary = class extends import_react14.Component {
|
|
|
4455
4832
|
if (fallback) {
|
|
4456
4833
|
return fallback;
|
|
4457
4834
|
}
|
|
4458
|
-
return /* @__PURE__ */ (0,
|
|
4835
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
4459
4836
|
"div",
|
|
4460
4837
|
{
|
|
4461
4838
|
style: {
|
|
@@ -4467,13 +4844,13 @@ var BugBearErrorBoundary = class extends import_react14.Component {
|
|
|
4467
4844
|
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
|
|
4468
4845
|
},
|
|
4469
4846
|
children: [
|
|
4470
|
-
/* @__PURE__ */ (0,
|
|
4471
|
-
/* @__PURE__ */ (0,
|
|
4472
|
-
/* @__PURE__ */ (0,
|
|
4847
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
|
|
4848
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("img", { src: BUGBEAR_LOGO_BASE64, alt: "BugBear", width: 28, height: 28, style: { objectFit: "contain" } }),
|
|
4849
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { style: { margin: 0, color: "#991b1b", fontSize: "16px" }, children: "Something went wrong" })
|
|
4473
4850
|
] }),
|
|
4474
|
-
/* @__PURE__ */ (0,
|
|
4475
|
-
/* @__PURE__ */ (0,
|
|
4476
|
-
/* @__PURE__ */ (0,
|
|
4851
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { style: { color: "#7f1d1d", fontSize: "14px", margin: "0 0 12px 0" }, children: error.message }),
|
|
4852
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", gap: "8px" }, children: [
|
|
4853
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
4477
4854
|
"button",
|
|
4478
4855
|
{
|
|
4479
4856
|
onClick: this.reset,
|
|
@@ -4490,7 +4867,7 @@ var BugBearErrorBoundary = class extends import_react14.Component {
|
|
|
4490
4867
|
children: "Try Again"
|
|
4491
4868
|
}
|
|
4492
4869
|
),
|
|
4493
|
-
/* @__PURE__ */ (0,
|
|
4870
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
4494
4871
|
"button",
|
|
4495
4872
|
{
|
|
4496
4873
|
onClick: () => window.location.reload(),
|
|
@@ -4508,7 +4885,7 @@ var BugBearErrorBoundary = class extends import_react14.Component {
|
|
|
4508
4885
|
}
|
|
4509
4886
|
)
|
|
4510
4887
|
] }),
|
|
4511
|
-
/* @__PURE__ */ (0,
|
|
4888
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
|
|
4512
4889
|
]
|
|
4513
4890
|
}
|
|
4514
4891
|
);
|