@bbearai/react 0.4.1 → 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.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 import_react13 = require("react");
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 === "completed") return a.status === "passed" || a.status === "failed";
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
- (a) => a.status === "passed" || a.status === "failed"
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: "completed", label: "Done", count: doneCount }
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
- color: getStatusColor(assignment.status),
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 === "completed" ? "No completed tests yet" : "No tests assigned" })
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
  ),
@@ -4044,13 +4133,289 @@ var styles4 = {
4044
4133
  }
4045
4134
  };
4046
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
+
4047
4412
  // src/widget/logo.ts
4048
4413
  var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
4049
4414
 
4050
4415
  // src/BugBearPanel.tsx
4051
- var import_jsx_runtime14 = require("react/jsx-runtime");
4416
+ var import_jsx_runtime16 = require("react/jsx-runtime");
4052
4417
  function BugBearIcon({ size = 24 }) {
4053
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4418
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4054
4419
  "img",
4055
4420
  {
4056
4421
  src: BUGBEAR_LOGO_BASE64,
@@ -4095,12 +4460,12 @@ function BugBearPanel({
4095
4460
  }) {
4096
4461
  const { shouldShowWidget, testerInfo, assignments, isLoading, unreadCount } = useBugBear();
4097
4462
  const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
4098
- const [collapsed, setCollapsed] = (0, import_react13.useState)(defaultCollapsed);
4099
- const [panelPosition, setPanelPosition] = (0, import_react13.useState)(null);
4100
- const [isDragging, setIsDragging] = (0, import_react13.useState)(false);
4101
- const dragStartRef = (0, import_react13.useRef)(null);
4102
- const panelRef = (0, import_react13.useRef)(null);
4103
- (0, import_react13.useEffect)(() => {
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)(() => {
4104
4469
  if (typeof window === "undefined") return;
4105
4470
  try {
4106
4471
  const saved = localStorage.getItem(STORAGE_KEY);
@@ -4114,7 +4479,7 @@ function BugBearPanel({
4114
4479
  setPanelPosition(getDefaultPosition(position));
4115
4480
  }
4116
4481
  }, [position]);
4117
- (0, import_react13.useEffect)(() => {
4482
+ (0, import_react14.useEffect)(() => {
4118
4483
  if (panelPosition && typeof window !== "undefined") {
4119
4484
  try {
4120
4485
  localStorage.setItem(STORAGE_KEY, JSON.stringify(panelPosition));
@@ -4122,7 +4487,7 @@ function BugBearPanel({
4122
4487
  }
4123
4488
  }
4124
4489
  }, [panelPosition]);
4125
- (0, import_react13.useEffect)(() => {
4490
+ (0, import_react14.useEffect)(() => {
4126
4491
  if (typeof window === "undefined") return;
4127
4492
  const handleResize = () => {
4128
4493
  setPanelPosition((prev) => prev ? clampPosition(prev) : getDefaultPosition(position));
@@ -4130,7 +4495,7 @@ function BugBearPanel({
4130
4495
  window.addEventListener("resize", handleResize);
4131
4496
  return () => window.removeEventListener("resize", handleResize);
4132
4497
  }, [position]);
4133
- const handleMouseDown = (0, import_react13.useCallback)((e) => {
4498
+ const handleMouseDown = (0, import_react14.useCallback)((e) => {
4134
4499
  if (!draggable || !panelPosition) return;
4135
4500
  const target = e.target;
4136
4501
  if (!target.closest("[data-drag-handle]")) return;
@@ -4143,7 +4508,7 @@ function BugBearPanel({
4143
4508
  panelY: panelPosition.y
4144
4509
  };
4145
4510
  }, [draggable, panelPosition]);
4146
- (0, import_react13.useEffect)(() => {
4511
+ (0, import_react14.useEffect)(() => {
4147
4512
  if (!isDragging) return;
4148
4513
  const handleMouseMove = (e) => {
4149
4514
  if (!dragStartRef.current) return;
@@ -4165,7 +4530,7 @@ function BugBearPanel({
4165
4530
  document.removeEventListener("mouseup", handleMouseUp);
4166
4531
  };
4167
4532
  }, [isDragging]);
4168
- const handleDoubleClick = (0, import_react13.useCallback)(() => {
4533
+ const handleDoubleClick = (0, import_react14.useCallback)(() => {
4169
4534
  if (!draggable) return;
4170
4535
  setPanelPosition(getDefaultPosition(position));
4171
4536
  try {
@@ -4197,6 +4562,10 @@ function BugBearPanel({
4197
4562
  return currentScreen.thread.subject || "Thread";
4198
4563
  case "COMPOSE_MESSAGE":
4199
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";
4200
4569
  case "PROFILE":
4201
4570
  return "Profile";
4202
4571
  default:
@@ -4211,33 +4580,37 @@ function BugBearPanel({
4211
4580
  const renderScreen = () => {
4212
4581
  switch (currentScreen.name) {
4213
4582
  case "HOME":
4214
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(HomeScreen, { nav });
4583
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(HomeScreen, { nav });
4215
4584
  case "TEST_DETAIL":
4216
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TestDetailScreen, { testId: currentScreen.testId, nav });
4585
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TestDetailScreen, { testId: currentScreen.testId, nav });
4217
4586
  case "TEST_LIST":
4218
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TestListScreen, { nav });
4587
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TestListScreen, { nav });
4219
4588
  case "TEST_FEEDBACK":
4220
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
4589
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
4221
4590
  case "REPORT":
4222
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ReportScreen, { nav, prefill: currentScreen.prefill });
4591
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ReportScreen, { nav, prefill: currentScreen.prefill });
4223
4592
  case "REPORT_SUCCESS":
4224
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ReportSuccessScreen, { nav });
4593
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ReportSuccessScreen, { nav });
4225
4594
  case "MESSAGE_LIST":
4226
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MessageListScreen, { nav });
4595
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MessageListScreen, { nav });
4227
4596
  case "THREAD_DETAIL":
4228
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ThreadDetailScreen, { thread: currentScreen.thread, nav });
4597
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ThreadDetailScreen, { thread: currentScreen.thread, nav });
4229
4598
  case "COMPOSE_MESSAGE":
4230
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ComposeMessageScreen, { nav });
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 });
4231
4604
  case "PROFILE":
4232
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ProfileScreen, { nav });
4605
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ProfileScreen, { nav });
4233
4606
  default:
4234
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(HomeScreen, { nav });
4607
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(HomeScreen, { nav });
4235
4608
  }
4236
4609
  };
4237
4610
  if (typeof document === "undefined") return null;
4238
4611
  const headerTitle = getHeaderTitle();
4239
4612
  return (0, import_react_dom.createPortal)(
4240
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
4613
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4241
4614
  "div",
4242
4615
  {
4243
4616
  ref: panelRef,
@@ -4256,7 +4629,7 @@ function BugBearPanel({
4256
4629
  },
4257
4630
  onMouseDown: handleMouseDown,
4258
4631
  children: [
4259
- collapsed && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
4632
+ collapsed && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4260
4633
  "button",
4261
4634
  {
4262
4635
  onClick: () => setCollapsed(false),
@@ -4278,9 +4651,9 @@ function BugBearPanel({
4278
4651
  fontWeight: 500
4279
4652
  },
4280
4653
  children: [
4281
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BugBearIcon, { size: 24 }),
4282
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: "BugBear" }),
4283
- badgeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: {
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: {
4284
4657
  backgroundColor: "#fff",
4285
4658
  color: colors.blue,
4286
4659
  fontSize: "0.75rem",
@@ -4291,7 +4664,7 @@ function BugBearPanel({
4291
4664
  ]
4292
4665
  }
4293
4666
  ),
4294
- !collapsed && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: {
4667
+ !collapsed && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
4295
4668
  width: PANEL_WIDTH,
4296
4669
  backgroundColor: colors.bg,
4297
4670
  borderRadius: 12,
@@ -4299,7 +4672,7 @@ function BugBearPanel({
4299
4672
  overflow: "hidden",
4300
4673
  boxShadow: "0 25px 50px -12px rgba(0,0,0,0.5)"
4301
4674
  }, children: [
4302
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
4675
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4303
4676
  "div",
4304
4677
  {
4305
4678
  "data-drag-handle": true,
@@ -4315,7 +4688,7 @@ function BugBearPanel({
4315
4688
  cursor: draggable ? isDragging ? "grabbing" : "grab" : "default"
4316
4689
  },
4317
4690
  children: [
4318
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
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)(
4319
4692
  "button",
4320
4693
  {
4321
4694
  onClick: pop,
@@ -4331,14 +4704,14 @@ function BugBearPanel({
4331
4704
  },
4332
4705
  children: "\u2190 Back"
4333
4706
  }
4334
- ) : /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
4335
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BugBearIcon, { size: 28 }),
4336
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
4337
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
4338
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: { fontWeight: 600, fontSize: "0.875rem" }, children: "BugBear" }),
4339
- draggable && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: { color: colors.textMuted, fontSize: "0.75rem" }, title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
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" })
4340
4713
  ] }),
4341
- testerInfo && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
4714
+ testerInfo && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4342
4715
  "button",
4343
4716
  {
4344
4717
  onClick: () => push({ name: "PROFILE" }),
@@ -4356,13 +4729,13 @@ function BugBearPanel({
4356
4729
  },
4357
4730
  children: [
4358
4731
  testerInfo.name,
4359
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
4732
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
4360
4733
  ]
4361
4734
  }
4362
4735
  )
4363
4736
  ] })
4364
4737
  ] }) }),
4365
- headerTitle ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: {
4738
+ headerTitle ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
4366
4739
  fontSize: "0.8125rem",
4367
4740
  fontWeight: 600,
4368
4741
  color: colors.textSecondary,
@@ -4372,7 +4745,7 @@ function BugBearPanel({
4372
4745
  textOverflow: "ellipsis",
4373
4746
  whiteSpace: "nowrap"
4374
4747
  }, children: headerTitle }) : null,
4375
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4748
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4376
4749
  "button",
4377
4750
  {
4378
4751
  onClick: handleClose,
@@ -4396,13 +4769,13 @@ function BugBearPanel({
4396
4769
  ]
4397
4770
  }
4398
4771
  ),
4399
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: {
4772
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: {
4400
4773
  padding: 16,
4401
4774
  maxHeight: 400,
4402
4775
  overflowY: "auto",
4403
4776
  backgroundColor: colors.bg,
4404
4777
  color: colors.textSecondary
4405
- }, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { padding: "60px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { color: colors.textMuted, fontSize: "0.875rem" }, children: "Loading..." }) }) : renderScreen() })
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() })
4406
4779
  ] })
4407
4780
  ]
4408
4781
  }
@@ -4412,10 +4785,10 @@ function BugBearPanel({
4412
4785
  }
4413
4786
 
4414
4787
  // src/BugBearErrorBoundary.tsx
4415
- var import_react14 = require("react");
4788
+ var import_react15 = require("react");
4416
4789
  var import_core2 = require("@bbearai/core");
4417
- var import_jsx_runtime15 = require("react/jsx-runtime");
4418
- var BugBearErrorBoundary = class extends import_react14.Component {
4790
+ var import_jsx_runtime17 = require("react/jsx-runtime");
4791
+ var BugBearErrorBoundary = class extends import_react15.Component {
4419
4792
  constructor(props) {
4420
4793
  super(props);
4421
4794
  this.reset = () => {
@@ -4459,7 +4832,7 @@ var BugBearErrorBoundary = class extends import_react14.Component {
4459
4832
  if (fallback) {
4460
4833
  return fallback;
4461
4834
  }
4462
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
4835
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
4463
4836
  "div",
4464
4837
  {
4465
4838
  style: {
@@ -4471,13 +4844,13 @@ var BugBearErrorBoundary = class extends import_react14.Component {
4471
4844
  fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
4472
4845
  },
4473
4846
  children: [
4474
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
4475
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("img", { src: BUGBEAR_LOGO_BASE64, alt: "BugBear", width: 28, height: 28, style: { objectFit: "contain" } }),
4476
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h3", { style: { margin: 0, color: "#991b1b", fontSize: "16px" }, children: "Something went wrong" })
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" })
4477
4850
  ] }),
4478
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { style: { color: "#7f1d1d", fontSize: "14px", margin: "0 0 12px 0" }, children: error.message }),
4479
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", gap: "8px" }, children: [
4480
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
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)(
4481
4854
  "button",
4482
4855
  {
4483
4856
  onClick: this.reset,
@@ -4494,7 +4867,7 @@ var BugBearErrorBoundary = class extends import_react14.Component {
4494
4867
  children: "Try Again"
4495
4868
  }
4496
4869
  ),
4497
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4870
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4498
4871
  "button",
4499
4872
  {
4500
4873
  onClick: () => window.location.reload(),
@@ -4512,7 +4885,7 @@ var BugBearErrorBoundary = class extends import_react14.Component {
4512
4885
  }
4513
4886
  )
4514
4887
  ] }),
4515
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
4888
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
4516
4889
  ]
4517
4890
  }
4518
4891
  );