@bbearai/react 0.4.6 → 0.5.0

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
@@ -84,6 +84,8 @@ var BugBearContext = (0, import_react.createContext)({
84
84
  issueCounts: { open: 0, done: 0, reopened: 0 },
85
85
  refreshIssueCounts: async () => {
86
86
  },
87
+ queuedCount: 0,
88
+ dashboardUrl: void 0,
87
89
  onError: void 0
88
90
  });
89
91
  function useBugBear() {
@@ -102,6 +104,7 @@ function BugBearProvider({ config, children, enabled = true }) {
102
104
  const [threads, setThreads] = (0, import_react.useState)([]);
103
105
  const [unreadCount, setUnreadCount] = (0, import_react.useState)(0);
104
106
  const [issueCounts, setIssueCounts] = (0, import_react.useState)({ open: 0, done: 0, reopened: 0 });
107
+ const [queuedCount, setQueuedCount] = (0, import_react.useState)(0);
105
108
  const refreshAssignments = (0, import_react.useCallback)(async () => {
106
109
  if (!client) return;
107
110
  const newAssignments = await client.getAssignedTests();
@@ -249,18 +252,45 @@ function BugBearProvider({ config, children, enabled = true }) {
249
252
  hasInitialized.current = true;
250
253
  import_core.contextCapture.startCapture();
251
254
  const newClient = (0, import_core.createBugBear)(config);
255
+ if (newClient.queue) {
256
+ newClient.queue.onChange(setQueuedCount);
257
+ newClient.initQueue();
258
+ }
252
259
  setClient(newClient);
253
260
  initializeBugBear(newClient);
254
261
  }
255
262
  }, [enabled, config, initializeBugBear]);
263
+ (0, import_react.useEffect)(() => {
264
+ if (!client?.queue) return;
265
+ const handleOnline = () => {
266
+ client.queue?.flush();
267
+ };
268
+ window.addEventListener("online", handleOnline);
269
+ if (navigator.onLine && client.queue.count > 0) {
270
+ client.queue.flush();
271
+ }
272
+ return () => window.removeEventListener("online", handleOnline);
273
+ }, [client]);
256
274
  (0, import_react.useEffect)(() => {
257
275
  if (!client || !isTester || !isQAEnabled) return;
276
+ let unsubscribe;
277
+ if (client.realtimeEnabled) {
278
+ unsubscribe = client.subscribeToChanges({
279
+ onAssignmentChange: refreshAssignments,
280
+ onMessageChange: refreshThreads,
281
+ onReportChange: refreshIssueCounts
282
+ });
283
+ }
284
+ const pollInterval = client.realtimeEnabled ? 12e4 : 3e4;
258
285
  const interval = setInterval(() => {
259
286
  refreshThreads();
260
287
  refreshIssueCounts();
261
- }, 3e4);
262
- return () => clearInterval(interval);
263
- }, [client, isTester, isQAEnabled, refreshThreads, refreshIssueCounts]);
288
+ }, pollInterval);
289
+ return () => {
290
+ clearInterval(interval);
291
+ unsubscribe?.();
292
+ };
293
+ }, [client, isTester, isQAEnabled, refreshThreads, refreshIssueCounts, refreshAssignments]);
264
294
  const currentAssignment = assignments.find(
265
295
  (a) => a.status === "in_progress"
266
296
  ) || assignments.find(
@@ -303,6 +333,8 @@ function BugBearProvider({ config, children, enabled = true }) {
303
333
  // Issue tracking
304
334
  issueCounts,
305
335
  refreshIssueCounts,
336
+ queuedCount,
337
+ dashboardUrl: config.dashboardUrl,
306
338
  onError: config.onError
307
339
  },
308
340
  children
@@ -429,9 +461,148 @@ function getThreadTypeIcon(type) {
429
461
 
430
462
  // src/widget/screens/HomeScreen.tsx
431
463
  var import_react3 = require("react");
464
+
465
+ // src/widget/Skeleton.tsx
432
466
  var import_jsx_runtime2 = require("react/jsx-runtime");
467
+ var PULSE_CSS = `@keyframes bb-skeleton-pulse{0%,100%{opacity:.6}50%{opacity:.25}}`;
468
+ var styleInjected = false;
469
+ function injectStyle() {
470
+ if (styleInjected || typeof document === "undefined") return;
471
+ const style = document.createElement("style");
472
+ style.textContent = PULSE_CSS;
473
+ document.head.appendChild(style);
474
+ styleInjected = true;
475
+ }
476
+ function Bar({ width = "100%", height = 12, radius = 6, style }) {
477
+ injectStyle();
478
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
479
+ "div",
480
+ {
481
+ style: {
482
+ width,
483
+ height,
484
+ borderRadius: radius,
485
+ backgroundColor: colors.border,
486
+ animation: "bb-skeleton-pulse 1.5s ease-in-out infinite",
487
+ ...style
488
+ }
489
+ }
490
+ );
491
+ }
492
+ function Circle({ size = 20, style }) {
493
+ injectStyle();
494
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
495
+ "div",
496
+ {
497
+ style: {
498
+ width: size,
499
+ height: size,
500
+ borderRadius: size / 2,
501
+ backgroundColor: colors.border,
502
+ animation: "bb-skeleton-pulse 1.5s ease-in-out infinite",
503
+ flexShrink: 0,
504
+ ...style
505
+ }
506
+ }
507
+ );
508
+ }
509
+ function HomeScreenSkeleton() {
510
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
511
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 100, radius: 16, style: { marginBottom: 20 } }),
512
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12, marginBottom: 20 }, children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: 12, padding: 16, display: "flex", flexDirection: "column", alignItems: "center", gap: 8 }, children: [
513
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 28 }),
514
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 60, height: 10 })
515
+ ] }, i)) }),
516
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [0, 1, 2].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: 10, padding: "12px 8px", display: "flex", flexDirection: "column", alignItems: "center", gap: 6 }, children: [
517
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 30, height: 18 }),
518
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 40, height: 8 })
519
+ ] }, i)) }),
520
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 6, radius: 3, style: { marginBottom: 8 } }),
521
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 120, height: 10, style: { margin: "0 auto 16px" } })
522
+ ] });
523
+ }
524
+ function TestItemSkeleton({ delay = 0 }) {
525
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center", padding: "10px 12px", borderRadius: 8, marginBottom: 4, backgroundColor: colors.card }, children: [
526
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 18, style: { marginRight: 10, animationDelay: `${delay}ms` } }),
527
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { flex: 1 }, children: [
528
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "70%", height: 11, style: { marginBottom: 4, animationDelay: `${delay}ms` } }),
529
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "45%", height: 8, style: { animationDelay: `${delay}ms` } })
530
+ ] }),
531
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 50, height: 18, radius: 6, style: { marginLeft: 8, animationDelay: `${delay}ms` } })
532
+ ] });
533
+ }
534
+ function TestListScreenSkeleton() {
535
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
536
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: 8 }, children: [55, 50, 50, 70].map((w, i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: w, height: 28, radius: 8, style: { animationDelay: `${i * 50}ms` } }, i)) }),
537
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 36, radius: 8, style: { marginBottom: 10 } }),
538
+ [0, 1].map((g) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { marginBottom: 12 }, children: [
539
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, padding: "8px 4px" }, children: [
540
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 12, height: 10 }),
541
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "40%", height: 12 }),
542
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 40, height: 4, radius: 2, style: { marginLeft: "auto" } }),
543
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 24, height: 10 })
544
+ ] }),
545
+ [0, 1, 2].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TestItemSkeleton, { delay: (g * 3 + i) * 80 }, i))
546
+ ] }, g))
547
+ ] });
548
+ }
549
+ function IssueListScreenSkeleton() {
550
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
551
+ "div",
552
+ {
553
+ style: {
554
+ backgroundColor: colors.card,
555
+ border: `1px solid ${colors.border}`,
556
+ borderRadius: 10,
557
+ padding: "12px 14px",
558
+ marginBottom: 8
559
+ },
560
+ children: [
561
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
562
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 8, style: { animationDelay: `${i * 100}ms` } }),
563
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "65%", height: 11, style: { animationDelay: `${i * 100}ms` } })
564
+ ] }),
565
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 8 }, children: [
566
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "40%", height: 8, style: { animationDelay: `${i * 100}ms` } }),
567
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 40, height: 8, style: { animationDelay: `${i * 100}ms` } })
568
+ ] })
569
+ ]
570
+ },
571
+ i
572
+ )) });
573
+ }
574
+ function MessageListScreenSkeleton() {
575
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
576
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 44, radius: 12, style: { marginBottom: 16 } }),
577
+ [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
578
+ "div",
579
+ {
580
+ style: {
581
+ display: "flex",
582
+ alignItems: "flex-start",
583
+ padding: 12,
584
+ borderRadius: 10,
585
+ marginBottom: 4,
586
+ backgroundColor: colors.card
587
+ },
588
+ children: [
589
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 20, style: { marginRight: 10, marginTop: 2, animationDelay: `${i * 100}ms` } }),
590
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { flex: 1 }, children: [
591
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "55%", height: 11, style: { marginBottom: 5, animationDelay: `${i * 100}ms` } }),
592
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "80%", height: 9, style: { animationDelay: `${i * 100}ms` } })
593
+ ] }),
594
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 30, height: 8, style: { marginLeft: 8, animationDelay: `${i * 100}ms` } })
595
+ ]
596
+ },
597
+ i
598
+ ))
599
+ ] });
600
+ }
601
+
602
+ // src/widget/screens/HomeScreen.tsx
603
+ var import_jsx_runtime3 = require("react/jsx-runtime");
433
604
  function HomeScreen({ nav }) {
434
- const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts } = useBugBear();
605
+ const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, isLoading } = useBugBear();
435
606
  (0, import_react3.useEffect)(() => {
436
607
  refreshAssignments();
437
608
  refreshThreads();
@@ -442,8 +613,9 @@ function HomeScreen({ nav }) {
442
613
  const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
443
614
  const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
444
615
  const totalTests = assignments.length;
445
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
446
- pendingCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
616
+ if (isLoading) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(HomeScreenSkeleton, {});
617
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
618
+ pendingCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
447
619
  "div",
448
620
  {
449
621
  role: "button",
@@ -465,13 +637,13 @@ function HomeScreen({ nav }) {
465
637
  userSelect: "none"
466
638
  },
467
639
  children: [
468
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: pendingCount }),
469
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
640
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: pendingCount }),
641
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
470
642
  "test",
471
643
  pendingCount !== 1 ? "s" : "",
472
644
  " waiting"
473
645
  ] }),
474
- retestCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
646
+ retestCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
475
647
  "span",
476
648
  {
477
649
  style: {
@@ -495,10 +667,10 @@ function HomeScreen({ nav }) {
495
667
  ]
496
668
  }
497
669
  ),
498
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "Start Testing \u2192" })
670
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "Start Testing \u2192" })
499
671
  ]
500
672
  }
501
- ) : unreadCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
673
+ ) : unreadCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
502
674
  "div",
503
675
  {
504
676
  role: "button",
@@ -520,15 +692,15 @@ function HomeScreen({ nav }) {
520
692
  userSelect: "none"
521
693
  },
522
694
  children: [
523
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: unreadCount }),
524
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
695
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: unreadCount }),
696
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
525
697
  "unread message",
526
698
  unreadCount !== 1 ? "s" : ""
527
699
  ] }),
528
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "View Messages \u2192" })
700
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "View Messages \u2192" })
529
701
  ]
530
702
  }
531
- ) : /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
703
+ ) : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
532
704
  "div",
533
705
  {
534
706
  style: {
@@ -542,9 +714,9 @@ function HomeScreen({ nav }) {
542
714
  marginBottom: 20
543
715
  },
544
716
  children: [
545
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 36, marginBottom: 8 }, children: "\u2705" }),
546
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary }, children: "All caught up!" }),
547
- totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: { fontSize: 14, color: colors.textMuted, marginTop: 4 }, children: [
717
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 36, marginBottom: 8 }, children: "\u2705" }),
718
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary }, children: "All caught up!" }),
719
+ totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 14, color: colors.textMuted, marginTop: 4 }, children: [
548
720
  completedCount,
549
721
  "/",
550
722
  totalTests,
@@ -553,7 +725,7 @@ function HomeScreen({ nav }) {
553
725
  ]
554
726
  }
555
727
  ),
556
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
728
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
557
729
  "div",
558
730
  {
559
731
  style: {
@@ -563,7 +735,7 @@ function HomeScreen({ nav }) {
563
735
  marginBottom: 20
564
736
  },
565
737
  children: [
566
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
738
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
567
739
  "div",
568
740
  {
569
741
  role: "button",
@@ -585,9 +757,9 @@ function HomeScreen({ nav }) {
585
757
  userSelect: "none"
586
758
  },
587
759
  children: [
588
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u2705" }),
589
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Tests" }),
590
- pendingCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
760
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u2705" }),
761
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Tests" }),
762
+ pendingCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
591
763
  "span",
592
764
  {
593
765
  style: {
@@ -613,7 +785,7 @@ function HomeScreen({ nav }) {
613
785
  ]
614
786
  }
615
787
  ),
616
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
788
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
617
789
  "div",
618
790
  {
619
791
  role: "button",
@@ -635,12 +807,12 @@ function HomeScreen({ nav }) {
635
807
  userSelect: "none"
636
808
  },
637
809
  children: [
638
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F41B}" }),
639
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Report Bug" })
810
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F41B}" }),
811
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Report Bug" })
640
812
  ]
641
813
  }
642
814
  ),
643
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
815
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
644
816
  "div",
645
817
  {
646
818
  role: "button",
@@ -662,12 +834,12 @@ function HomeScreen({ nav }) {
662
834
  userSelect: "none"
663
835
  },
664
836
  children: [
665
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4A1}" }),
666
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Feedback" })
837
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4A1}" }),
838
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Feedback" })
667
839
  ]
668
840
  }
669
841
  ),
670
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
842
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
671
843
  "div",
672
844
  {
673
845
  role: "button",
@@ -689,9 +861,9 @@ function HomeScreen({ nav }) {
689
861
  userSelect: "none"
690
862
  },
691
863
  children: [
692
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4AC}" }),
693
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Messages" }),
694
- unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
864
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4AC}" }),
865
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Messages" }),
866
+ unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
695
867
  "span",
696
868
  {
697
869
  style: {
@@ -720,8 +892,8 @@ function HomeScreen({ nav }) {
720
892
  ]
721
893
  }
722
894
  ),
723
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [
724
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
895
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [
896
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
725
897
  "div",
726
898
  {
727
899
  role: "button",
@@ -743,12 +915,12 @@ function HomeScreen({ nav }) {
743
915
  userSelect: "none"
744
916
  },
745
917
  children: [
746
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#f97316" }, children: issueCounts.open }),
747
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Open" })
918
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#f97316" }, children: issueCounts.open }),
919
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Open" })
748
920
  ]
749
921
  }
750
922
  ),
751
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
923
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
752
924
  "div",
753
925
  {
754
926
  role: "button",
@@ -770,12 +942,12 @@ function HomeScreen({ nav }) {
770
942
  userSelect: "none"
771
943
  },
772
944
  children: [
773
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#22c55e" }, children: issueCounts.done }),
774
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Done" })
945
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#22c55e" }, children: issueCounts.done }),
946
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Done" })
775
947
  ]
776
948
  }
777
949
  ),
778
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
950
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
779
951
  "div",
780
952
  {
781
953
  role: "button",
@@ -797,14 +969,14 @@ function HomeScreen({ nav }) {
797
969
  userSelect: "none"
798
970
  },
799
971
  children: [
800
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#ef4444" }, children: issueCounts.reopened }),
801
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Reopened" })
972
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#ef4444" }, children: issueCounts.reopened }),
973
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Reopened" })
802
974
  ]
803
975
  }
804
976
  )
805
977
  ] }),
806
- totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { marginBottom: 16 }, children: [
807
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
978
+ totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { marginBottom: 16 }, children: [
979
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
808
980
  "div",
809
981
  {
810
982
  style: {
@@ -814,7 +986,7 @@ function HomeScreen({ nav }) {
814
986
  overflow: "hidden",
815
987
  marginBottom: 6
816
988
  },
817
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
989
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
818
990
  "div",
819
991
  {
820
992
  style: {
@@ -828,14 +1000,14 @@ function HomeScreen({ nav }) {
828
1000
  )
829
1001
  }
830
1002
  ),
831
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { fontSize: 12, color: colors.textMuted, textAlign: "center" }, children: [
1003
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { fontSize: 12, color: colors.textMuted, textAlign: "center" }, children: [
832
1004
  completedCount,
833
1005
  "/",
834
1006
  totalTests,
835
1007
  " tests completed"
836
1008
  ] })
837
1009
  ] }),
838
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "flex", justifyContent: "center", padding: "8px 0" }, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1010
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { display: "flex", justifyContent: "center", padding: "8px 0" }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
839
1011
  "button",
840
1012
  {
841
1013
  type: "button",
@@ -860,7 +1032,7 @@ function HomeScreen({ nav }) {
860
1032
 
861
1033
  // src/widget/screens/TestDetailScreen.tsx
862
1034
  var import_react4 = require("react");
863
- var import_jsx_runtime3 = require("react/jsx-runtime");
1035
+ var import_jsx_runtime4 = require("react/jsx-runtime");
864
1036
  function TestDetailScreen({ testId, nav }) {
865
1037
  const { client, assignments, currentAssignment, refreshAssignments, onNavigate } = useBugBear();
866
1038
  const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
@@ -948,7 +1120,7 @@ function TestDetailScreen({ testId, nav }) {
948
1120
  }
949
1121
  }, [client, displayedAssignment, selectedSkipReason, skipNotes, refreshAssignments, assignments, nav]);
950
1122
  if (!displayedAssignment) {
951
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1123
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
952
1124
  "div",
953
1125
  {
954
1126
  style: {
@@ -959,10 +1131,10 @@ function TestDetailScreen({ testId, nav }) {
959
1131
  padding: 40
960
1132
  },
961
1133
  children: [
962
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 48, marginBottom: 12 }, children: "\u2705" }),
963
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary, marginBottom: 4 }, children: "No tests assigned" }),
964
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 20 }, children: "Check back later for new tests" }),
965
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1134
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 48, marginBottom: 12 }, children: "\u2705" }),
1135
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary, marginBottom: 4 }, children: "No tests assigned" }),
1136
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 20 }, children: "Check back later for new tests" }),
1137
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
966
1138
  "button",
967
1139
  {
968
1140
  type: "button",
@@ -995,8 +1167,8 @@ function TestDetailScreen({ testId, nav }) {
995
1167
  { reason: "dependency", label: "\u{1F517} Needs another test first" },
996
1168
  { reason: "other", label: "\u{1F4DD} Other reason" }
997
1169
  ];
998
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { paddingBottom: 16 }, children: [
999
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1170
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { paddingBottom: 16 }, children: [
1171
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1000
1172
  "div",
1001
1173
  {
1002
1174
  style: {
@@ -1006,14 +1178,14 @@ function TestDetailScreen({ testId, nav }) {
1006
1178
  marginBottom: 12
1007
1179
  },
1008
1180
  children: [
1009
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
1010
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 13, color: colors.textMuted }, children: [
1181
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
1182
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: { fontSize: 13, color: colors.textMuted }, children: [
1011
1183
  "Test ",
1012
1184
  currentIndex + 1,
1013
1185
  " of ",
1014
1186
  allTests.length
1015
1187
  ] }),
1016
- displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1188
+ displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1017
1189
  "span",
1018
1190
  {
1019
1191
  style: {
@@ -1032,7 +1204,7 @@ function TestDetailScreen({ testId, nav }) {
1032
1204
  }
1033
1205
  )
1034
1206
  ] }),
1035
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1207
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1036
1208
  "button",
1037
1209
  {
1038
1210
  type: "button",
@@ -1052,7 +1224,7 @@ function TestDetailScreen({ testId, nav }) {
1052
1224
  ]
1053
1225
  }
1054
1226
  ),
1055
- displayedAssignment.isVerification && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1227
+ displayedAssignment.isVerification && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1056
1228
  "div",
1057
1229
  {
1058
1230
  style: {
@@ -1066,14 +1238,14 @@ function TestDetailScreen({ testId, nav }) {
1066
1238
  marginBottom: 10
1067
1239
  },
1068
1240
  children: [
1069
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14 }, children: "\u{1F504}" }),
1070
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Retest" }),
1071
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 12, color: "#d97706" }, children: "\u2014 Verify bug fix" })
1241
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14 }, children: "\u{1F504}" }),
1242
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Retest" }),
1243
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 12, color: "#d97706" }, children: "\u2014 Verify bug fix" })
1072
1244
  ]
1073
1245
  }
1074
1246
  ),
1075
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 20, fontWeight: 700, color: colors.textPrimary, marginBottom: 4 }, children: testCase.title }),
1076
- testCase.testKey && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1247
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 20, fontWeight: 700, color: colors.textPrimary, marginBottom: 4 }, children: testCase.title }),
1248
+ testCase.testKey && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1077
1249
  "div",
1078
1250
  {
1079
1251
  style: {
@@ -1085,7 +1257,7 @@ function TestDetailScreen({ testId, nav }) {
1085
1257
  children: testCase.testKey
1086
1258
  }
1087
1259
  ),
1088
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1260
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1089
1261
  "button",
1090
1262
  {
1091
1263
  type: "button",
@@ -1101,7 +1273,7 @@ function TestDetailScreen({ testId, nav }) {
1101
1273
  cursor: "pointer",
1102
1274
  textAlign: "left"
1103
1275
  },
1104
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textSecondary }, children: [
1276
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textSecondary }, children: [
1105
1277
  showSteps ? "\u25BC" : "\u25B6",
1106
1278
  " ",
1107
1279
  info.icon,
@@ -1110,9 +1282,9 @@ function TestDetailScreen({ testId, nav }) {
1110
1282
  ] })
1111
1283
  }
1112
1284
  ),
1113
- showSteps && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { marginBottom: 16 }, children: [
1114
- template === "steps" && steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", marginBottom: 10 }, children: [
1115
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1285
+ showSteps && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 16 }, children: [
1286
+ template === "steps" && steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", marginBottom: 10 }, children: [
1287
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1116
1288
  "div",
1117
1289
  {
1118
1290
  style: {
@@ -1127,12 +1299,12 @@ function TestDetailScreen({ testId, nav }) {
1127
1299
  marginTop: 2,
1128
1300
  flexShrink: 0
1129
1301
  },
1130
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 12, fontWeight: 600, color: "#fff" }, children: step.stepNumber })
1302
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 12, fontWeight: 600, color: "#fff" }, children: step.stepNumber })
1131
1303
  }
1132
1304
  ),
1133
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { flex: 1 }, children: [
1134
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, color: colors.textPrimary, lineHeight: "20px" }, children: step.action }),
1135
- step.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1305
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { flex: 1 }, children: [
1306
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14, color: colors.textPrimary, lineHeight: "20px" }, children: step.action }),
1307
+ step.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1136
1308
  "div",
1137
1309
  {
1138
1310
  style: {
@@ -1149,8 +1321,8 @@ function TestDetailScreen({ testId, nav }) {
1149
1321
  )
1150
1322
  ] })
1151
1323
  ] }, idx)),
1152
- template === "checklist" && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
1153
- steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1324
+ template === "checklist" && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
1325
+ steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1154
1326
  "button",
1155
1327
  {
1156
1328
  type: "button",
@@ -1176,7 +1348,7 @@ function TestDetailScreen({ testId, nav }) {
1176
1348
  textAlign: "left"
1177
1349
  },
1178
1350
  children: [
1179
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1351
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1180
1352
  "div",
1181
1353
  {
1182
1354
  style: {
@@ -1191,10 +1363,10 @@ function TestDetailScreen({ testId, nav }) {
1191
1363
  alignItems: "center",
1192
1364
  flexShrink: 0
1193
1365
  },
1194
- children: criteriaResults[idx] === true && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { color: "#fff", fontSize: 14, fontWeight: "bold" }, children: "\u2713" })
1366
+ children: criteriaResults[idx] === true && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { color: "#fff", fontSize: 14, fontWeight: "bold" }, children: "\u2713" })
1195
1367
  }
1196
1368
  ),
1197
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1369
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1198
1370
  "span",
1199
1371
  {
1200
1372
  style: {
@@ -1210,7 +1382,7 @@ function TestDetailScreen({ testId, nav }) {
1210
1382
  },
1211
1383
  idx
1212
1384
  )),
1213
- Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { display: "flex", justifyContent: "flex-end", paddingTop: 4 }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1385
+ Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", justifyContent: "flex-end", paddingTop: 4 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1214
1386
  "button",
1215
1387
  {
1216
1388
  type: "button",
@@ -1227,8 +1399,8 @@ function TestDetailScreen({ testId, nav }) {
1227
1399
  }
1228
1400
  ) })
1229
1401
  ] }),
1230
- template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { marginBottom: 14 }, children: [
1231
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1402
+ template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 14 }, children: [
1403
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1232
1404
  "div",
1233
1405
  {
1234
1406
  style: {
@@ -1244,7 +1416,7 @@ function TestDetailScreen({ testId, nav }) {
1244
1416
  ]
1245
1417
  }
1246
1418
  ),
1247
- step.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1419
+ step.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1248
1420
  "div",
1249
1421
  {
1250
1422
  style: {
@@ -1256,8 +1428,8 @@ function TestDetailScreen({ testId, nav }) {
1256
1428
  children: step.expectedResult
1257
1429
  }
1258
1430
  ),
1259
- rubricMode === "pass_fail" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", gap: 8, marginLeft: 16 }, children: [
1260
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1431
+ rubricMode === "pass_fail" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 8, marginLeft: 16 }, children: [
1432
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1261
1433
  "button",
1262
1434
  {
1263
1435
  type: "button",
@@ -1278,7 +1450,7 @@ function TestDetailScreen({ testId, nav }) {
1278
1450
  children: "\u2713 Pass"
1279
1451
  }
1280
1452
  ),
1281
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1453
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1282
1454
  "button",
1283
1455
  {
1284
1456
  type: "button",
@@ -1299,7 +1471,7 @@ function TestDetailScreen({ testId, nav }) {
1299
1471
  children: "\u2717 Fail"
1300
1472
  }
1301
1473
  )
1302
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { display: "flex", gap: 6, marginLeft: 16 }, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1474
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", gap: 6, marginLeft: 16 }, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1303
1475
  "button",
1304
1476
  {
1305
1477
  type: "button",
@@ -1323,7 +1495,7 @@ function TestDetailScreen({ testId, nav }) {
1323
1495
  n
1324
1496
  )) })
1325
1497
  ] }, idx)),
1326
- template === "freeform" && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1498
+ template === "freeform" && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1327
1499
  "div",
1328
1500
  {
1329
1501
  style: {
@@ -1333,15 +1505,15 @@ function TestDetailScreen({ testId, nav }) {
1333
1505
  border: "1px solid #854d0e"
1334
1506
  },
1335
1507
  children: [
1336
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 14, color: "#fde68a", marginBottom: 6 }, children: "Review the area and note:" }),
1337
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 What works well" }),
1338
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Issues or concerns" }),
1339
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Suggestions" })
1508
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 14, color: "#fde68a", marginBottom: 6 }, children: "Review the area and note:" }),
1509
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 What works well" }),
1510
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Issues or concerns" }),
1511
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Suggestions" })
1340
1512
  ]
1341
1513
  }
1342
1514
  )
1343
1515
  ] }),
1344
- testCase.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1516
+ testCase.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1345
1517
  "div",
1346
1518
  {
1347
1519
  style: {
@@ -1352,12 +1524,12 @@ function TestDetailScreen({ testId, nav }) {
1352
1524
  marginBottom: 12
1353
1525
  },
1354
1526
  children: [
1355
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 13, fontWeight: 600, color: colors.green, marginBottom: 4 }, children: "\u2705 Expected Result" }),
1356
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 14, color: "#bbf7d0", lineHeight: "20px" }, children: testCase.expectedResult })
1527
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, fontWeight: 600, color: colors.green, marginBottom: 4 }, children: "\u2705 Expected Result" }),
1528
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 14, color: "#bbf7d0", lineHeight: "20px" }, children: testCase.expectedResult })
1357
1529
  ]
1358
1530
  }
1359
1531
  ),
1360
- testCase.targetRoute && onNavigate && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1532
+ testCase.targetRoute && onNavigate && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1361
1533
  "button",
1362
1534
  {
1363
1535
  type: "button",
@@ -1379,7 +1551,7 @@ function TestDetailScreen({ testId, nav }) {
1379
1551
  children: "\u{1F9ED} Go to test location"
1380
1552
  }
1381
1553
  ),
1382
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1554
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1383
1555
  "button",
1384
1556
  {
1385
1557
  type: "button",
@@ -1403,7 +1575,7 @@ function TestDetailScreen({ testId, nav }) {
1403
1575
  ]
1404
1576
  }
1405
1577
  ),
1406
- showDetails && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1578
+ showDetails && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1407
1579
  "div",
1408
1580
  {
1409
1581
  style: {
@@ -1414,7 +1586,7 @@ function TestDetailScreen({ testId, nav }) {
1414
1586
  marginBottom: 16
1415
1587
  },
1416
1588
  children: [
1417
- testCase.testKey && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1589
+ testCase.testKey && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1418
1590
  "div",
1419
1591
  {
1420
1592
  style: {
@@ -1432,16 +1604,16 @@ function TestDetailScreen({ testId, nav }) {
1432
1604
  ]
1433
1605
  }
1434
1606
  ),
1435
- testCase.description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 13, color: colors.textSecondary, lineHeight: "18px" }, children: testCase.description }),
1436
- testCase.group && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { marginTop: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
1607
+ testCase.description && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: colors.textSecondary, lineHeight: "18px" }, children: testCase.description }),
1608
+ testCase.group && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { marginTop: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
1437
1609
  "\u{1F4C1} ",
1438
1610
  testCase.group.name
1439
1611
  ] }) })
1440
1612
  ]
1441
1613
  }
1442
1614
  ),
1443
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 8 }, children: [
1444
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1615
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 8 }, children: [
1616
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1445
1617
  "button",
1446
1618
  {
1447
1619
  type: "button",
@@ -1464,7 +1636,7 @@ function TestDetailScreen({ testId, nav }) {
1464
1636
  children: isSubmitting ? "Failing..." : "Fail"
1465
1637
  }
1466
1638
  ),
1467
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1639
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1468
1640
  "button",
1469
1641
  {
1470
1642
  type: "button",
@@ -1487,7 +1659,7 @@ function TestDetailScreen({ testId, nav }) {
1487
1659
  children: "Skip"
1488
1660
  }
1489
1661
  ),
1490
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1662
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1491
1663
  "button",
1492
1664
  {
1493
1665
  type: "button",
@@ -1511,7 +1683,7 @@ function TestDetailScreen({ testId, nav }) {
1511
1683
  }
1512
1684
  )
1513
1685
  ] }),
1514
- showSkipModal && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1686
+ showSkipModal && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1515
1687
  "div",
1516
1688
  {
1517
1689
  style: {
@@ -1524,7 +1696,7 @@ function TestDetailScreen({ testId, nav }) {
1524
1696
  zIndex: 9999,
1525
1697
  padding: 24
1526
1698
  },
1527
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1699
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1528
1700
  "div",
1529
1701
  {
1530
1702
  style: {
@@ -1536,7 +1708,7 @@ function TestDetailScreen({ testId, nav }) {
1536
1708
  width: "100%"
1537
1709
  },
1538
1710
  children: [
1539
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1711
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1540
1712
  "div",
1541
1713
  {
1542
1714
  style: {
@@ -1548,8 +1720,8 @@ function TestDetailScreen({ testId, nav }) {
1548
1720
  children: "Skip this test?"
1549
1721
  }
1550
1722
  ),
1551
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 12 }, children: "Select a reason:" }),
1552
- skipReasons.map(({ reason, label }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1723
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 12 }, children: "Select a reason:" }),
1724
+ skipReasons.map(({ reason, label }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1553
1725
  "button",
1554
1726
  {
1555
1727
  type: "button",
@@ -1575,7 +1747,7 @@ function TestDetailScreen({ testId, nav }) {
1575
1747
  },
1576
1748
  reason
1577
1749
  )),
1578
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1750
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1579
1751
  "textarea",
1580
1752
  {
1581
1753
  value: skipNotes,
@@ -1598,8 +1770,8 @@ function TestDetailScreen({ testId, nav }) {
1598
1770
  }
1599
1771
  }
1600
1772
  ),
1601
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 14 }, children: [
1602
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1773
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 14 }, children: [
1774
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1603
1775
  "button",
1604
1776
  {
1605
1777
  type: "button",
@@ -1623,7 +1795,7 @@ function TestDetailScreen({ testId, nav }) {
1623
1795
  children: "Cancel"
1624
1796
  }
1625
1797
  ),
1626
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1798
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1627
1799
  "button",
1628
1800
  {
1629
1801
  type: "button",
@@ -1657,11 +1829,14 @@ function TestDetailScreen({ testId, nav }) {
1657
1829
 
1658
1830
  // src/widget/screens/TestListScreen.tsx
1659
1831
  var import_react5 = require("react");
1660
- var import_jsx_runtime4 = require("react/jsx-runtime");
1832
+ var import_jsx_runtime5 = require("react/jsx-runtime");
1661
1833
  function TestListScreen({ nav }) {
1662
- const { assignments, currentAssignment, refreshAssignments } = useBugBear();
1834
+ const { assignments, currentAssignment, refreshAssignments, isLoading } = useBugBear();
1663
1835
  const [filter, setFilter] = (0, import_react5.useState)("all");
1664
1836
  const [roleFilter, setRoleFilter] = (0, import_react5.useState)(null);
1837
+ const [trackFilter, setTrackFilter] = (0, import_react5.useState)(null);
1838
+ const [searchQuery, setSearchQuery] = (0, import_react5.useState)("");
1839
+ const [sortMode, setSortMode] = (0, import_react5.useState)("priority");
1665
1840
  const [collapsedFolders, setCollapsedFolders] = (0, import_react5.useState)(/* @__PURE__ */ new Set());
1666
1841
  const availableRoles = (0, import_react5.useMemo)(() => {
1667
1842
  const roleMap = /* @__PURE__ */ new Map();
@@ -1670,6 +1845,13 @@ function TestListScreen({ nav }) {
1670
1845
  }
1671
1846
  return Array.from(roleMap.values());
1672
1847
  }, [assignments]);
1848
+ const availableTracks = (0, import_react5.useMemo)(() => {
1849
+ const trackMap = /* @__PURE__ */ new Map();
1850
+ for (const a of assignments) {
1851
+ if (a.testCase.track) trackMap.set(a.testCase.track.id, a.testCase.track);
1852
+ }
1853
+ return Array.from(trackMap.values());
1854
+ }, [assignments]);
1673
1855
  const selectedRole = availableRoles.find((r) => r.id === roleFilter);
1674
1856
  const groupedAssignments = (0, import_react5.useMemo)(() => {
1675
1857
  const groups = /* @__PURE__ */ new Map();
@@ -1703,6 +1885,12 @@ function TestListScreen({ nav }) {
1703
1885
  folder.assignments.sort((a, b) => {
1704
1886
  if (a.isVerification && !b.isVerification) return -1;
1705
1887
  if (!a.isVerification && b.isVerification) return 1;
1888
+ if (sortMode === "alpha") {
1889
+ return a.testCase.title.localeCompare(b.testCase.title);
1890
+ }
1891
+ if (sortMode === "recent") {
1892
+ return 0;
1893
+ }
1706
1894
  const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
1707
1895
  if (sd !== 0) return sd;
1708
1896
  return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
@@ -1714,7 +1902,7 @@ function TestListScreen({ nav }) {
1714
1902
  if (!b.group) return -1;
1715
1903
  return a.group.sortOrder - b.group.sortOrder;
1716
1904
  });
1717
- }, [assignments]);
1905
+ }, [assignments, sortMode]);
1718
1906
  const toggleFolder = (0, import_react5.useCallback)((id) => {
1719
1907
  setCollapsedFolders((prev) => {
1720
1908
  const next = new Set(prev);
@@ -1723,13 +1911,20 @@ function TestListScreen({ nav }) {
1723
1911
  return next;
1724
1912
  });
1725
1913
  }, []);
1726
- const filterAssignment = (a) => {
1914
+ const filterAssignment = (0, import_react5.useCallback)((a) => {
1727
1915
  if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
1916
+ if (trackFilter && a.testCase.track?.id !== trackFilter) return false;
1917
+ if (searchQuery) {
1918
+ const q = searchQuery.toLowerCase();
1919
+ const titleMatch = a.testCase.title.toLowerCase().includes(q);
1920
+ const keyMatch = a.testCase.testKey.toLowerCase().includes(q);
1921
+ if (!titleMatch && !keyMatch) return false;
1922
+ }
1728
1923
  if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
1729
1924
  if (filter === "done") return a.status === "passed";
1730
1925
  if (filter === "reopened") return a.status === "failed";
1731
1926
  return true;
1732
- };
1927
+ }, [roleFilter, trackFilter, searchQuery, filter]);
1733
1928
  const pendingCount = assignments.filter(
1734
1929
  (a) => a.status === "pending" || a.status === "in_progress"
1735
1930
  ).length;
@@ -1741,8 +1936,9 @@ function TestListScreen({ nav }) {
1741
1936
  { key: "done", label: "Done", count: doneCount },
1742
1937
  { key: "reopened", label: "Re Opened", count: reopenedCount }
1743
1938
  ];
1744
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
1745
- /* @__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)(
1939
+ if (isLoading) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TestListScreenSkeleton, {});
1940
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
1941
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: availableRoles.length >= 2 ? 8 : 16 }, children: filters.map((f) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1746
1942
  "button",
1747
1943
  {
1748
1944
  type: "button",
@@ -1769,9 +1965,9 @@ function TestListScreen({ nav }) {
1769
1965
  },
1770
1966
  f.key
1771
1967
  )) }),
1772
- availableRoles.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 12 }, children: [
1773
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 6, flexWrap: "wrap", marginBottom: selectedRole?.loginHint ? 8 : 0 }, children: [
1774
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1968
+ availableRoles.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { marginBottom: 12 }, children: [
1969
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", gap: 6, flexWrap: "wrap", marginBottom: selectedRole?.loginHint ? 8 : 0 }, children: [
1970
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1775
1971
  "button",
1776
1972
  {
1777
1973
  type: "button",
@@ -1794,7 +1990,7 @@ function TestListScreen({ nav }) {
1794
1990
  ),
1795
1991
  availableRoles.map((role) => {
1796
1992
  const isActive = roleFilter === role.id;
1797
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1993
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1798
1994
  "button",
1799
1995
  {
1800
1996
  type: "button",
@@ -1816,7 +2012,7 @@ function TestListScreen({ nav }) {
1816
2012
  fontWeight: isActive ? 600 : 400
1817
2013
  },
1818
2014
  children: [
1819
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: {
2015
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: {
1820
2016
  width: 6,
1821
2017
  height: 6,
1822
2018
  borderRadius: 3,
@@ -1830,7 +2026,7 @@ function TestListScreen({ nav }) {
1830
2026
  );
1831
2027
  })
1832
2028
  ] }),
1833
- selectedRole?.loginHint && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: {
2029
+ selectedRole?.loginHint && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: {
1834
2030
  fontSize: 11,
1835
2031
  color: colors.textSecondary,
1836
2032
  backgroundColor: selectedRole.color + "10",
@@ -1842,6 +2038,103 @@ function TestListScreen({ nav }) {
1842
2038
  selectedRole.loginHint
1843
2039
  ] })
1844
2040
  ] }),
2041
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { marginBottom: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2042
+ "input",
2043
+ {
2044
+ type: "text",
2045
+ value: searchQuery,
2046
+ onChange: (e) => setSearchQuery(e.target.value),
2047
+ placeholder: "Search tests...",
2048
+ style: {
2049
+ width: "100%",
2050
+ padding: "8px 12px",
2051
+ borderRadius: 8,
2052
+ border: `1px solid ${colors.border}`,
2053
+ backgroundColor: colors.card,
2054
+ color: colors.textPrimary,
2055
+ fontSize: 13,
2056
+ outline: "none",
2057
+ boxSizing: "border-box"
2058
+ }
2059
+ }
2060
+ ) }),
2061
+ (availableTracks.length >= 2 || true) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 6, marginBottom: 12 }, children: [
2062
+ availableTracks.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", gap: 4, flex: 1, overflow: "auto" }, children: [
2063
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2064
+ "button",
2065
+ {
2066
+ type: "button",
2067
+ onClick: () => setTrackFilter(null),
2068
+ style: {
2069
+ padding: "3px 8px",
2070
+ borderRadius: 6,
2071
+ backgroundColor: !trackFilter ? colors.card : "transparent",
2072
+ border: !trackFilter ? `1px solid ${colors.border}` : "1px solid transparent",
2073
+ cursor: "pointer",
2074
+ fontSize: 11,
2075
+ color: !trackFilter ? colors.textPrimary : colors.textMuted,
2076
+ fontWeight: !trackFilter ? 600 : 400,
2077
+ whiteSpace: "nowrap"
2078
+ },
2079
+ children: "All Tracks"
2080
+ }
2081
+ ),
2082
+ availableTracks.map((track) => {
2083
+ const isActive = trackFilter === track.id;
2084
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2085
+ "button",
2086
+ {
2087
+ type: "button",
2088
+ onClick: () => setTrackFilter(isActive ? null : track.id),
2089
+ style: {
2090
+ display: "flex",
2091
+ alignItems: "center",
2092
+ gap: 4,
2093
+ padding: "3px 8px",
2094
+ borderRadius: 6,
2095
+ backgroundColor: isActive ? track.color + "20" : "transparent",
2096
+ border: isActive ? `1px solid ${track.color}60` : "1px solid transparent",
2097
+ cursor: "pointer",
2098
+ fontSize: 11,
2099
+ color: isActive ? track.color : colors.textMuted,
2100
+ fontWeight: isActive ? 600 : 400,
2101
+ whiteSpace: "nowrap"
2102
+ },
2103
+ children: [
2104
+ track.icon,
2105
+ " ",
2106
+ track.name
2107
+ ]
2108
+ },
2109
+ track.id
2110
+ );
2111
+ })
2112
+ ] }),
2113
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { display: "flex", gap: 2, marginLeft: "auto", flexShrink: 0 }, children: [
2114
+ { key: "priority", label: "\u2195 Priority" },
2115
+ { key: "recent", label: "\u{1F550} Recent" },
2116
+ { key: "alpha", label: "A-Z" }
2117
+ ].map((s) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2118
+ "button",
2119
+ {
2120
+ type: "button",
2121
+ onClick: () => setSortMode(s.key),
2122
+ style: {
2123
+ padding: "3px 8px",
2124
+ borderRadius: 6,
2125
+ backgroundColor: sortMode === s.key ? colors.card : "transparent",
2126
+ border: sortMode === s.key ? `1px solid ${colors.border}` : "1px solid transparent",
2127
+ cursor: "pointer",
2128
+ fontSize: 10,
2129
+ color: sortMode === s.key ? colors.textPrimary : colors.textMuted,
2130
+ fontWeight: sortMode === s.key ? 600 : 400,
2131
+ whiteSpace: "nowrap"
2132
+ },
2133
+ children: s.label
2134
+ },
2135
+ s.key
2136
+ )) })
2137
+ ] }),
1845
2138
  groupedAssignments.map((folder) => {
1846
2139
  const folderId = folder.group?.id || "ungrouped";
1847
2140
  const isCollapsed = collapsedFolders.has(folderId);
@@ -1849,8 +2142,8 @@ function TestListScreen({ nav }) {
1849
2142
  if (filtered.length === 0 && filter !== "all") return null;
1850
2143
  const completedInFolder = folder.stats.passed + folder.stats.failed;
1851
2144
  const progressPercent = folder.stats.total > 0 ? Math.round(completedInFolder / folder.stats.total * 100) : 0;
1852
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 12 }, children: [
1853
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
2145
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { marginBottom: 12 }, children: [
2146
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1854
2147
  "button",
1855
2148
  {
1856
2149
  type: "button",
@@ -1870,8 +2163,8 @@ function TestListScreen({ nav }) {
1870
2163
  textAlign: "left"
1871
2164
  },
1872
2165
  children: [
1873
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 10, color: colors.textMuted, width: 14 }, children: isCollapsed ? "\u25B6" : "\u25BC" }),
1874
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2166
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 10, color: colors.textMuted, width: 14 }, children: isCollapsed ? "\u25B6" : "\u25BC" }),
2167
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1875
2168
  "span",
1876
2169
  {
1877
2170
  style: {
@@ -1886,7 +2179,7 @@ function TestListScreen({ nav }) {
1886
2179
  children: folder.group?.name || "Ungrouped"
1887
2180
  }
1888
2181
  ),
1889
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2182
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1890
2183
  "div",
1891
2184
  {
1892
2185
  style: {
@@ -1897,7 +2190,7 @@ function TestListScreen({ nav }) {
1897
2190
  overflow: "hidden",
1898
2191
  flexShrink: 0
1899
2192
  },
1900
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2193
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1901
2194
  "div",
1902
2195
  {
1903
2196
  style: {
@@ -1911,7 +2204,7 @@ function TestListScreen({ nav }) {
1911
2204
  )
1912
2205
  }
1913
2206
  ),
1914
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
2207
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1915
2208
  "span",
1916
2209
  {
1917
2210
  style: {
@@ -1935,7 +2228,7 @@ function TestListScreen({ nav }) {
1935
2228
  const badge = getStatusBadge(assignment.status);
1936
2229
  const isCurrent = currentAssignment?.id === assignment.id;
1937
2230
  const priorityColor = assignment.testCase.priority === "P0" ? colors.red : assignment.testCase.priority === "P1" ? colors.orange : colors.textDim;
1938
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
2231
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1939
2232
  "button",
1940
2233
  {
1941
2234
  type: "button",
@@ -1957,9 +2250,9 @@ function TestListScreen({ nav }) {
1957
2250
  textAlign: "left"
1958
2251
  },
1959
2252
  children: [
1960
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 16, marginRight: 10, width: 20, flexShrink: 0 }, children: badge.icon }),
1961
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
1962
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2253
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 16, marginRight: 10, width: 20, flexShrink: 0 }, children: badge.icon }),
2254
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
2255
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1963
2256
  "div",
1964
2257
  {
1965
2258
  style: {
@@ -1973,9 +2266,9 @@ function TestListScreen({ nav }) {
1973
2266
  children: assignment.testCase.title
1974
2267
  }
1975
2268
  ),
1976
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [
1977
- assignment.isVerification && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
1978
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2269
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [
2270
+ assignment.isVerification && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
2271
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1979
2272
  "span",
1980
2273
  {
1981
2274
  style: {
@@ -1990,9 +2283,9 @@ function TestListScreen({ nav }) {
1990
2283
  children: "Retest"
1991
2284
  }
1992
2285
  ),
1993
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" })
2286
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" })
1994
2287
  ] }),
1995
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2288
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1996
2289
  "span",
1997
2290
  {
1998
2291
  style: {
@@ -2003,8 +2296,8 @@ function TestListScreen({ nav }) {
2003
2296
  children: assignment.testCase.testKey
2004
2297
  }
2005
2298
  ),
2006
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
2007
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2299
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
2300
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2008
2301
  "span",
2009
2302
  {
2010
2303
  style: {
@@ -2015,9 +2308,9 @@ function TestListScreen({ nav }) {
2015
2308
  children: assignment.testCase.priority
2016
2309
  }
2017
2310
  ),
2018
- assignment.testCase.role && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
2019
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
2020
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: {
2311
+ assignment.testCase.role && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
2312
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
2313
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { style: {
2021
2314
  display: "inline-flex",
2022
2315
  alignItems: "center",
2023
2316
  gap: 3,
@@ -2025,7 +2318,7 @@ function TestListScreen({ nav }) {
2025
2318
  color: assignment.testCase.role.color,
2026
2319
  fontWeight: 500
2027
2320
  }, children: [
2028
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: {
2321
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: {
2029
2322
  width: 5,
2030
2323
  height: 5,
2031
2324
  borderRadius: 3,
@@ -2036,7 +2329,7 @@ function TestListScreen({ nav }) {
2036
2329
  ] })
2037
2330
  ] })
2038
2331
  ] }),
2039
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2332
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2040
2333
  "span",
2041
2334
  {
2042
2335
  style: {
@@ -2063,7 +2356,7 @@ function TestListScreen({ nav }) {
2063
2356
  groupedAssignments.every((folder) => {
2064
2357
  const filtered = folder.assignments.filter(filterAssignment);
2065
2358
  return filtered.length === 0;
2066
- }) && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
2359
+ }) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2067
2360
  "div",
2068
2361
  {
2069
2362
  style: {
@@ -2073,12 +2366,12 @@ function TestListScreen({ nav }) {
2073
2366
  padding: 32
2074
2367
  },
2075
2368
  children: [
2076
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 32, marginBottom: 8 }, children: filter === "pending" ? "\u{1F389}" : filter === "reopened" ? "\u{1F44D}" : "\u{1F4CB}" }),
2077
- /* @__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" })
2369
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 32, marginBottom: 8 }, children: filter === "pending" ? "\u{1F389}" : filter === "reopened" ? "\u{1F44D}" : "\u{1F4CB}" }),
2370
+ /* @__PURE__ */ (0, import_jsx_runtime5.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" })
2078
2371
  ]
2079
2372
  }
2080
2373
  ),
2081
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", justifyContent: "center", paddingTop: 12, paddingBottom: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2374
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { display: "flex", justifyContent: "center", paddingTop: 12, paddingBottom: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2082
2375
  "button",
2083
2376
  {
2084
2377
  type: "button",
@@ -2174,13 +2467,13 @@ function useImageAttachments(uploadFn, maxImages, bucket = "screenshots") {
2174
2467
  }
2175
2468
 
2176
2469
  // src/widget/ImagePreviewStrip.tsx
2177
- var import_jsx_runtime5 = require("react/jsx-runtime");
2470
+ var import_jsx_runtime6 = require("react/jsx-runtime");
2178
2471
  function ImagePreviewStrip({ images, onRemove }) {
2179
2472
  if (images.length === 0) return null;
2180
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", gap: 8, overflowX: "auto", paddingTop: 4 }, children: [
2181
- images.map((img) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { position: "relative", width: 64, height: 64, flexShrink: 0, borderRadius: 8, overflow: "hidden" }, children: [
2182
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("img", { src: img.localUri, alt: img.name, style: { width: 64, height: 64, objectFit: "cover", borderRadius: 8 } }),
2183
- img.status === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: {
2473
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { display: "flex", gap: 8, overflowX: "auto", paddingTop: 4 }, children: [
2474
+ images.map((img) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { position: "relative", width: 64, height: 64, flexShrink: 0, borderRadius: 8, overflow: "hidden" }, children: [
2475
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: img.localUri, alt: img.name, style: { width: 64, height: 64, objectFit: "cover", borderRadius: 8 } }),
2476
+ img.status === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
2184
2477
  position: "absolute",
2185
2478
  inset: 0,
2186
2479
  backgroundColor: "rgba(0,0,0,0.5)",
@@ -2188,7 +2481,7 @@ function ImagePreviewStrip({ images, onRemove }) {
2188
2481
  alignItems: "center",
2189
2482
  justifyContent: "center",
2190
2483
  borderRadius: 8
2191
- }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: {
2484
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
2192
2485
  width: 16,
2193
2486
  height: 16,
2194
2487
  border: "2px solid #fff",
@@ -2196,7 +2489,7 @@ function ImagePreviewStrip({ images, onRemove }) {
2196
2489
  borderRadius: "50%",
2197
2490
  animation: "bb-spin 0.6s linear infinite"
2198
2491
  } }) }),
2199
- img.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: {
2492
+ img.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
2200
2493
  position: "absolute",
2201
2494
  inset: 0,
2202
2495
  backgroundColor: "rgba(127,29,29,0.7)",
@@ -2204,8 +2497,8 @@ function ImagePreviewStrip({ images, onRemove }) {
2204
2497
  alignItems: "center",
2205
2498
  justifyContent: "center",
2206
2499
  borderRadius: 8
2207
- }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { color: "#fca5a5", fontSize: 18, fontWeight: "bold" }, children: "!" }) }),
2208
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2500
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { color: "#fca5a5", fontSize: 18, fontWeight: "bold" }, children: "!" }) }),
2501
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2209
2502
  "button",
2210
2503
  {
2211
2504
  type: "button",
@@ -2232,18 +2525,18 @@ function ImagePreviewStrip({ images, onRemove }) {
2232
2525
  }
2233
2526
  )
2234
2527
  ] }, img.id)),
2235
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("style", { children: `@keyframes bb-spin { to { transform: rotate(360deg); } }` })
2528
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("style", { children: `@keyframes bb-spin { to { transform: rotate(360deg); } }` })
2236
2529
  ] });
2237
2530
  }
2238
2531
 
2239
2532
  // src/widget/ImagePickerButtons.tsx
2240
- var import_jsx_runtime6 = require("react/jsx-runtime");
2533
+ var import_jsx_runtime7 = require("react/jsx-runtime");
2241
2534
  function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, onRemove, label }) {
2242
2535
  const disabled = images.length >= maxImages;
2243
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { marginTop: 12, marginBottom: 4 }, children: [
2244
- label && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { fontSize: 14, fontWeight: 500, color: "#e4e4e7", marginBottom: 8 }, children: label }),
2245
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 8 }, children: [
2246
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2536
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: { marginTop: 12, marginBottom: 4 }, children: [
2537
+ label && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { fontSize: 14, fontWeight: 500, color: "#e4e4e7", marginBottom: 8 }, children: label }),
2538
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 8 }, children: [
2539
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2247
2540
  "button",
2248
2541
  {
2249
2542
  type: "button",
@@ -2264,7 +2557,7 @@ function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, on
2264
2557
  children: "Gallery"
2265
2558
  }
2266
2559
  ),
2267
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2560
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2268
2561
  "button",
2269
2562
  {
2270
2563
  type: "button",
@@ -2285,18 +2578,18 @@ function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, on
2285
2578
  children: "Camera"
2286
2579
  }
2287
2580
  ),
2288
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { style: { fontSize: 12, color: colors.textDim, marginLeft: 4 }, children: [
2581
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { style: { fontSize: 12, color: colors.textDim, marginLeft: 4 }, children: [
2289
2582
  images.length,
2290
2583
  "/",
2291
2584
  maxImages
2292
2585
  ] })
2293
2586
  ] }),
2294
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ImagePreviewStrip, { images, onRemove })
2587
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ImagePreviewStrip, { images, onRemove })
2295
2588
  ] });
2296
2589
  }
2297
2590
 
2298
2591
  // src/widget/screens/TestFeedbackScreen.tsx
2299
- var import_jsx_runtime7 = require("react/jsx-runtime");
2592
+ var import_jsx_runtime8 = require("react/jsx-runtime");
2300
2593
  function TestFeedbackScreen({ status, assignmentId, nav }) {
2301
2594
  const { client, assignments, refreshAssignments, uploadImage } = useBugBear();
2302
2595
  const images = useImageAttachments(uploadImage, 3, "screenshots");
@@ -2365,10 +2658,10 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
2365
2658
  { key: "stepsUnclear", label: "Steps are unclear" },
2366
2659
  { key: "expectedResultUnclear", label: "Expected result unclear" }
2367
2660
  ];
2368
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: styles.container, children: [
2369
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: styles.header, children: status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed" }),
2370
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: styles.subheader, children: "Rate this test case" }),
2371
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: styles.starRow, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2661
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles.container, children: [
2662
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.header, children: status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed" }),
2663
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.subheader, children: "Rate this test case" }),
2664
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.starRow, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2372
2665
  "button",
2373
2666
  {
2374
2667
  onClick: () => setRating(n),
@@ -2380,9 +2673,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
2380
2673
  },
2381
2674
  n
2382
2675
  )) }),
2383
- showFlags && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: styles.flagsSection, children: [
2384
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: styles.flagsLabel, children: "What could be improved?" }),
2385
- flagOptions.map(({ key, label }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
2676
+ showFlags && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles.flagsSection, children: [
2677
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.flagsLabel, children: "What could be improved?" }),
2678
+ flagOptions.map(({ key, label }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2386
2679
  "button",
2387
2680
  {
2388
2681
  onClick: () => toggleFlag(key),
@@ -2391,17 +2684,17 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
2391
2684
  ...flags[key] ? styles.flagItemActive : {}
2392
2685
  },
2393
2686
  children: [
2394
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2687
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2395
2688
  "div",
2396
2689
  {
2397
2690
  style: {
2398
2691
  ...styles.flagCheck,
2399
2692
  ...flags[key] ? styles.flagCheckActive : {}
2400
2693
  },
2401
- children: flags[key] && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { style: styles.flagCheckmark, children: "\u2713" })
2694
+ children: flags[key] && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { style: styles.flagCheckmark, children: "\u2713" })
2402
2695
  }
2403
2696
  ),
2404
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2697
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2405
2698
  "span",
2406
2699
  {
2407
2700
  style: {
@@ -2416,7 +2709,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
2416
2709
  key
2417
2710
  ))
2418
2711
  ] }),
2419
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2712
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2420
2713
  "textarea",
2421
2714
  {
2422
2715
  style: styles.noteInput,
@@ -2426,7 +2719,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
2426
2719
  rows: 3
2427
2720
  }
2428
2721
  ),
2429
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2722
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2430
2723
  ImagePickerButtons,
2431
2724
  {
2432
2725
  images: images.images,
@@ -2437,9 +2730,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
2437
2730
  label: "Screenshots (optional)"
2438
2731
  }
2439
2732
  ),
2440
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: styles.actions, children: [
2441
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("button", { style: styles.skipButton, onClick: handleSkip, children: "Skip" }),
2442
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2733
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles.actions, children: [
2734
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { style: styles.skipButton, onClick: handleSkip, children: "Skip" }),
2735
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2443
2736
  "button",
2444
2737
  {
2445
2738
  style: {
@@ -2592,7 +2885,7 @@ var styles = {
2592
2885
  var import_react8 = __toESM(require("react"));
2593
2886
 
2594
2887
  // src/widget/CategoryDropdown.tsx
2595
- var import_jsx_runtime8 = require("react/jsx-runtime");
2888
+ var import_jsx_runtime9 = require("react/jsx-runtime");
2596
2889
  var categoryOptions = [
2597
2890
  { value: "ui_ux", label: "UI/UX", icon: "\u{1F3A8}" },
2598
2891
  { value: "functional", label: "Functional", icon: "\u2699\uFE0F" },
@@ -2601,7 +2894,7 @@ var categoryOptions = [
2601
2894
  { value: "other", label: "Other", icon: "\u{1F4DD}" }
2602
2895
  ];
2603
2896
  function CategoryDropdown({ value, onChange, optional = true, disabled = false }) {
2604
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2897
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
2605
2898
  "select",
2606
2899
  {
2607
2900
  value: value || "",
@@ -2624,8 +2917,8 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
2624
2917
  paddingRight: 32
2625
2918
  },
2626
2919
  children: [
2627
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("option", { value: "", children: optional ? "Select category (optional)" : "Select category" }),
2628
- categoryOptions.map(({ value: value2, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("option", { value: value2, children: [
2920
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("option", { value: "", children: optional ? "Select category (optional)" : "Select category" }),
2921
+ categoryOptions.map(({ value: value2, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("option", { value: value2, children: [
2629
2922
  icon,
2630
2923
  " ",
2631
2924
  label
@@ -2636,7 +2929,7 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
2636
2929
  }
2637
2930
 
2638
2931
  // src/widget/screens/ReportScreen.tsx
2639
- var import_jsx_runtime9 = require("react/jsx-runtime");
2932
+ var import_jsx_runtime10 = require("react/jsx-runtime");
2640
2933
  function ReportScreen({ nav, prefill }) {
2641
2934
  const { client, refreshAssignments, uploadImage } = useBugBear();
2642
2935
  const images = useImageAttachments(uploadImage, 5, "screenshots");
@@ -2711,17 +3004,17 @@ function ReportScreen({ nav, prefill }) {
2711
3004
  { sev: "medium", color: "#eab308" },
2712
3005
  { sev: "low", color: "#6b7280" }
2713
3006
  ];
2714
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { children: isRetestFailure ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
2715
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.retestBanner, children: [
2716
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
2717
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
2718
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.retestTitle, children: "Bug Still Present" }),
2719
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.retestSubtitle, children: "The fix did not resolve this issue" })
3007
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { children: isRetestFailure ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
3008
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.retestBanner, children: [
3009
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
3010
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { children: [
3011
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.retestTitle, children: "Bug Still Present" }),
3012
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.retestSubtitle, children: "The fix did not resolve this issue" })
2720
3013
  ] })
2721
3014
  ] }),
2722
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2723
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "Severity" }),
2724
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3015
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3016
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Severity" }),
3017
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2725
3018
  "button",
2726
3019
  {
2727
3020
  onClick: () => setSeverity(sev),
@@ -2729,18 +3022,18 @@ function ReportScreen({ nav, prefill }) {
2729
3022
  ...styles2.sevButton,
2730
3023
  ...severity === sev ? { backgroundColor: `${color}30`, borderColor: color } : {}
2731
3024
  },
2732
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
3025
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
2733
3026
  },
2734
3027
  sev
2735
3028
  )) })
2736
3029
  ] }),
2737
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2738
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "Category (optional)" }),
2739
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
3030
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3031
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Category (optional)" }),
3032
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
2740
3033
  ] }),
2741
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2742
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "What went wrong?" }),
2743
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3034
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3035
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "What went wrong?" }),
3036
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2744
3037
  "textarea",
2745
3038
  {
2746
3039
  style: styles2.descInput,
@@ -2751,7 +3044,7 @@ function ReportScreen({ nav, prefill }) {
2751
3044
  }
2752
3045
  )
2753
3046
  ] }),
2754
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3047
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2755
3048
  ImagePickerButtons,
2756
3049
  {
2757
3050
  images: images.images,
@@ -2762,8 +3055,8 @@ function ReportScreen({ nav, prefill }) {
2762
3055
  label: "Attachments (optional)"
2763
3056
  }
2764
3057
  ),
2765
- error && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.errorBanner, children: error }),
2766
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3058
+ error && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.errorBanner, children: error }),
3059
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2767
3060
  "button",
2768
3061
  {
2769
3062
  style: {
@@ -2776,9 +3069,9 @@ function ReportScreen({ nav, prefill }) {
2776
3069
  children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest"
2777
3070
  }
2778
3071
  )
2779
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
2780
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "What are you reporting?" }),
2781
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.typeRow, children: typeOptions.map(({ type, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3072
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
3073
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "What are you reporting?" }),
3074
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.typeRow, children: typeOptions.map(({ type, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2782
3075
  "button",
2783
3076
  {
2784
3077
  onClick: () => setReportType(type),
@@ -2787,8 +3080,8 @@ function ReportScreen({ nav, prefill }) {
2787
3080
  ...reportType === type ? styles2.typeCardActive : {}
2788
3081
  },
2789
3082
  children: [
2790
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.typeIcon, children: icon }),
2791
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3083
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.typeIcon, children: icon }),
3084
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2792
3085
  "div",
2793
3086
  {
2794
3087
  style: {
@@ -2802,9 +3095,9 @@ function ReportScreen({ nav, prefill }) {
2802
3095
  },
2803
3096
  type
2804
3097
  )) }),
2805
- isBugType && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2806
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "Severity" }),
2807
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3098
+ isBugType && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3099
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Severity" }),
3100
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2808
3101
  "button",
2809
3102
  {
2810
3103
  onClick: () => setSeverity(sev),
@@ -2815,7 +3108,7 @@ function ReportScreen({ nav, prefill }) {
2815
3108
  borderColor: color
2816
3109
  } : {}
2817
3110
  },
2818
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3111
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2819
3112
  "span",
2820
3113
  {
2821
3114
  style: {
@@ -2829,13 +3122,13 @@ function ReportScreen({ nav, prefill }) {
2829
3122
  sev
2830
3123
  )) })
2831
3124
  ] }),
2832
- isBugType && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2833
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "Category (optional)" }),
2834
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
3125
+ isBugType && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3126
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Category (optional)" }),
3127
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
2835
3128
  ] }),
2836
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2837
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "What happened?" }),
2838
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3129
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3130
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "What happened?" }),
3131
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2839
3132
  "textarea",
2840
3133
  {
2841
3134
  style: styles2.descInput,
@@ -2846,9 +3139,9 @@ function ReportScreen({ nav, prefill }) {
2846
3139
  }
2847
3140
  )
2848
3141
  ] }),
2849
- isBugType && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.section, children: [
2850
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.label, children: "Where did it happen?" }),
2851
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3142
+ isBugType && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
3143
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Where did it happen?" }),
3144
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2852
3145
  "input",
2853
3146
  {
2854
3147
  style: styles2.routeInput,
@@ -2857,13 +3150,13 @@ function ReportScreen({ nav, prefill }) {
2857
3150
  placeholder: observedRoute.current
2858
3151
  }
2859
3152
  ),
2860
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: styles2.routeHint, children: [
3153
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.routeHint, children: [
2861
3154
  "Leave blank to use current page (",
2862
3155
  observedRoute.current,
2863
3156
  ")"
2864
3157
  ] })
2865
3158
  ] }),
2866
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3159
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2867
3160
  ImagePickerButtons,
2868
3161
  {
2869
3162
  images: images.images,
@@ -2874,8 +3167,8 @@ function ReportScreen({ nav, prefill }) {
2874
3167
  label: "Screenshots (optional)"
2875
3168
  }
2876
3169
  ),
2877
- error && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: styles2.errorBanner, children: error }),
2878
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3170
+ error && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.errorBanner, children: error }),
3171
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2879
3172
  "button",
2880
3173
  {
2881
3174
  style: {
@@ -3040,16 +3333,16 @@ var styles2 = {
3040
3333
 
3041
3334
  // src/widget/screens/ReportSuccessScreen.tsx
3042
3335
  var import_react9 = require("react");
3043
- var import_jsx_runtime10 = require("react/jsx-runtime");
3336
+ var import_jsx_runtime11 = require("react/jsx-runtime");
3044
3337
  function ReportSuccessScreen({ nav }) {
3045
3338
  (0, import_react9.useEffect)(() => {
3046
3339
  const timer = setTimeout(() => nav.reset(), 2e3);
3047
3340
  return () => clearTimeout(timer);
3048
3341
  }, [nav]);
3049
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles3.container, children: [
3050
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles3.emoji, children: "\u{1F389}" }),
3051
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles3.title, children: "Report submitted!" }),
3052
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles3.subtitle, children: "Thank you for your feedback" })
3342
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: styles3.container, children: [
3343
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: styles3.emoji, children: "\u{1F389}" }),
3344
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: styles3.title, children: "Report submitted!" }),
3345
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: styles3.subtitle, children: "Thank you for your feedback" })
3053
3346
  ] });
3054
3347
  }
3055
3348
  var styles3 = {
@@ -3078,11 +3371,12 @@ var styles3 = {
3078
3371
  };
3079
3372
 
3080
3373
  // src/widget/screens/MessageListScreen.tsx
3081
- var import_jsx_runtime11 = require("react/jsx-runtime");
3374
+ var import_jsx_runtime12 = require("react/jsx-runtime");
3082
3375
  function MessageListScreen({ nav }) {
3083
- const { threads, unreadCount, refreshThreads } = useBugBear();
3084
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
3085
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3376
+ const { threads, unreadCount, refreshThreads, isLoading } = useBugBear();
3377
+ if (isLoading) return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MessageListScreenSkeleton, {});
3378
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { children: [
3379
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3086
3380
  "button",
3087
3381
  {
3088
3382
  style: {
@@ -3101,7 +3395,7 @@ function MessageListScreen({ nav }) {
3101
3395
  children: "\u2709\uFE0F New Message"
3102
3396
  }
3103
3397
  ),
3104
- threads.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3398
+ threads.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3105
3399
  "div",
3106
3400
  {
3107
3401
  style: {
@@ -3112,8 +3406,8 @@ function MessageListScreen({ nav }) {
3112
3406
  paddingBottom: 40
3113
3407
  },
3114
3408
  children: [
3115
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { style: { fontSize: 36, marginBottom: 12 }, children: "\u{1F4AC}" }),
3116
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3409
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 36, marginBottom: 12 }, children: "\u{1F4AC}" }),
3410
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3117
3411
  "span",
3118
3412
  {
3119
3413
  style: {
@@ -3125,7 +3419,7 @@ function MessageListScreen({ nav }) {
3125
3419
  children: "No messages yet"
3126
3420
  }
3127
3421
  ),
3128
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3422
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3129
3423
  "span",
3130
3424
  {
3131
3425
  style: {
@@ -3138,7 +3432,7 @@ function MessageListScreen({ nav }) {
3138
3432
  )
3139
3433
  ]
3140
3434
  }
3141
- ) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { children: threads.map((thread) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3435
+ ) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { children: threads.map((thread) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3142
3436
  "button",
3143
3437
  {
3144
3438
  style: {
@@ -3156,8 +3450,8 @@ function MessageListScreen({ nav }) {
3156
3450
  },
3157
3451
  onClick: () => nav.push({ name: "THREAD_DETAIL", thread }),
3158
3452
  children: [
3159
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: { display: "flex", flex: 1, minWidth: 0 }, children: [
3160
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3453
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", flex: 1, minWidth: 0 }, children: [
3454
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3161
3455
  "span",
3162
3456
  {
3163
3457
  style: {
@@ -3169,7 +3463,7 @@ function MessageListScreen({ nav }) {
3169
3463
  children: getThreadTypeIcon(thread.threadType)
3170
3464
  }
3171
3465
  ),
3172
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3466
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3173
3467
  "div",
3174
3468
  {
3175
3469
  style: {
@@ -3177,7 +3471,7 @@ function MessageListScreen({ nav }) {
3177
3471
  minWidth: 0
3178
3472
  },
3179
3473
  children: [
3180
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3474
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3181
3475
  "div",
3182
3476
  {
3183
3477
  style: {
@@ -3186,8 +3480,8 @@ function MessageListScreen({ nav }) {
3186
3480
  gap: 4
3187
3481
  },
3188
3482
  children: [
3189
- thread.isPinned && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { style: { fontSize: 12, flexShrink: 0 }, children: "\u{1F4CC}" }),
3190
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3483
+ thread.isPinned && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 12, flexShrink: 0 }, children: "\u{1F4CC}" }),
3484
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3191
3485
  "span",
3192
3486
  {
3193
3487
  style: {
@@ -3204,7 +3498,7 @@ function MessageListScreen({ nav }) {
3204
3498
  ]
3205
3499
  }
3206
3500
  ),
3207
- thread.lastMessage && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3501
+ thread.lastMessage && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3208
3502
  "span",
3209
3503
  {
3210
3504
  style: {
@@ -3228,7 +3522,7 @@ function MessageListScreen({ nav }) {
3228
3522
  }
3229
3523
  )
3230
3524
  ] }),
3231
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3525
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3232
3526
  "div",
3233
3527
  {
3234
3528
  style: {
@@ -3240,8 +3534,8 @@ function MessageListScreen({ nav }) {
3240
3534
  flexShrink: 0
3241
3535
  },
3242
3536
  children: [
3243
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: formatRelativeTime(thread.lastMessageAt) }),
3244
- thread.unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3537
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: formatRelativeTime(thread.lastMessageAt) }),
3538
+ thread.unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3245
3539
  "span",
3246
3540
  {
3247
3541
  style: {
@@ -3268,7 +3562,7 @@ function MessageListScreen({ nav }) {
3268
3562
  },
3269
3563
  thread.id
3270
3564
  )) }),
3271
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
3565
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3272
3566
  "div",
3273
3567
  {
3274
3568
  style: {
@@ -3280,7 +3574,7 @@ function MessageListScreen({ nav }) {
3280
3574
  paddingRight: 4
3281
3575
  },
3282
3576
  children: [
3283
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
3577
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
3284
3578
  threads.length,
3285
3579
  " thread",
3286
3580
  threads.length !== 1 ? "s" : "",
@@ -3289,7 +3583,7 @@ function MessageListScreen({ nav }) {
3289
3583
  unreadCount,
3290
3584
  " unread"
3291
3585
  ] }),
3292
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3586
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3293
3587
  "button",
3294
3588
  {
3295
3589
  style: {
@@ -3312,7 +3606,7 @@ function MessageListScreen({ nav }) {
3312
3606
 
3313
3607
  // src/widget/screens/ThreadDetailScreen.tsx
3314
3608
  var import_react10 = require("react");
3315
- var import_jsx_runtime12 = require("react/jsx-runtime");
3609
+ var import_jsx_runtime13 = require("react/jsx-runtime");
3316
3610
  var inputStyle = {
3317
3611
  backgroundColor: "#27272a",
3318
3612
  border: "1px solid #3f3f46",
@@ -3384,8 +3678,8 @@ function ThreadDetailScreen({
3384
3678
  handleSend();
3385
3679
  }
3386
3680
  };
3387
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", flexDirection: "column", flex: 1 }, children: [
3388
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3681
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { style: { display: "flex", flexDirection: "column", flex: 1 }, children: [
3682
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
3389
3683
  "div",
3390
3684
  {
3391
3685
  style: {
@@ -3397,8 +3691,8 @@ function ThreadDetailScreen({
3397
3691
  borderBottom: `1px solid ${colors.border}`
3398
3692
  },
3399
3693
  children: [
3400
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 20 }, children: getThreadTypeIcon(thread.threadType) }),
3401
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3694
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { fontSize: 20 }, children: getThreadTypeIcon(thread.threadType) }),
3695
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3402
3696
  "span",
3403
3697
  {
3404
3698
  style: {
@@ -3418,7 +3712,7 @@ function ThreadDetailScreen({
3418
3712
  ]
3419
3713
  }
3420
3714
  ),
3421
- loading ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3715
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3422
3716
  "div",
3423
3717
  {
3424
3718
  style: {
@@ -3426,11 +3720,11 @@ function ThreadDetailScreen({
3426
3720
  paddingBottom: 40,
3427
3721
  textAlign: "center"
3428
3722
  },
3429
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 14, color: colors.textMuted }, children: "Loading messages..." })
3723
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { fontSize: 14, color: colors.textMuted }, children: "Loading messages..." })
3430
3724
  }
3431
- ) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { paddingBottom: 8, marginBottom: 8 }, children: messages.map((msg) => {
3725
+ ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { paddingBottom: 8, marginBottom: 8 }, children: messages.map((msg) => {
3432
3726
  const isTester = msg.senderType === "tester";
3433
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3727
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
3434
3728
  "div",
3435
3729
  {
3436
3730
  style: {
@@ -3446,7 +3740,7 @@ function ThreadDetailScreen({
3446
3740
  borderBottomRightRadius: isTester ? 4 : 16
3447
3741
  },
3448
3742
  children: [
3449
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3743
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3450
3744
  "span",
3451
3745
  {
3452
3746
  style: {
@@ -3459,7 +3753,7 @@ function ThreadDetailScreen({
3459
3753
  children: isTester ? "You" : msg.senderName
3460
3754
  }
3461
3755
  ),
3462
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3756
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3463
3757
  "span",
3464
3758
  {
3465
3759
  style: {
@@ -3473,7 +3767,7 @@ function ThreadDetailScreen({
3473
3767
  children: msg.content
3474
3768
  }
3475
3769
  ),
3476
- msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.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_runtime12.jsx)(
3770
+ msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.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_runtime13.jsx)(
3477
3771
  "img",
3478
3772
  {
3479
3773
  src: att.url,
@@ -3482,7 +3776,7 @@ function ThreadDetailScreen({
3482
3776
  },
3483
3777
  idx
3484
3778
  )) }),
3485
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3779
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3486
3780
  "span",
3487
3781
  {
3488
3782
  style: {
@@ -3500,7 +3794,7 @@ function ThreadDetailScreen({
3500
3794
  msg.id
3501
3795
  );
3502
3796
  }) }),
3503
- sendError && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3797
+ sendError && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3504
3798
  "div",
3505
3799
  {
3506
3800
  style: {
@@ -3512,7 +3806,7 @@ function ThreadDetailScreen({
3512
3806
  borderRadius: 8,
3513
3807
  marginBottom: 8
3514
3808
  },
3515
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3809
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3516
3810
  "span",
3517
3811
  {
3518
3812
  style: {
@@ -3526,8 +3820,8 @@ function ThreadDetailScreen({
3526
3820
  )
3527
3821
  }
3528
3822
  ),
3529
- replyImages.images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { paddingTop: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage }) }),
3530
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
3823
+ replyImages.images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { paddingTop: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage }) }),
3824
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
3531
3825
  "div",
3532
3826
  {
3533
3827
  style: {
@@ -3538,7 +3832,7 @@ function ThreadDetailScreen({
3538
3832
  gap: 8
3539
3833
  },
3540
3834
  children: [
3541
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3835
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3542
3836
  "button",
3543
3837
  {
3544
3838
  type: "button",
@@ -3557,7 +3851,7 @@ function ThreadDetailScreen({
3557
3851
  children: "\u{1F4CE}"
3558
3852
  }
3559
3853
  ),
3560
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3854
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3561
3855
  "input",
3562
3856
  {
3563
3857
  type: "text",
@@ -3573,7 +3867,7 @@ function ThreadDetailScreen({
3573
3867
  }
3574
3868
  }
3575
3869
  ),
3576
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3870
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3577
3871
  "button",
3578
3872
  {
3579
3873
  style: {
@@ -3601,7 +3895,7 @@ function ThreadDetailScreen({
3601
3895
 
3602
3896
  // src/widget/screens/ComposeMessageScreen.tsx
3603
3897
  var import_react11 = require("react");
3604
- var import_jsx_runtime13 = require("react/jsx-runtime");
3898
+ var import_jsx_runtime14 = require("react/jsx-runtime");
3605
3899
  var inputStyle2 = {
3606
3900
  backgroundColor: "#27272a",
3607
3901
  border: "1px solid #3f3f46",
@@ -3632,9 +3926,9 @@ function ComposeMessageScreen({ nav }) {
3632
3926
  nav.pop();
3633
3927
  }
3634
3928
  };
3635
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { children: [
3636
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { style: { marginBottom: 20 }, children: [
3637
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3929
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
3930
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: { marginBottom: 20 }, children: [
3931
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3638
3932
  "div",
3639
3933
  {
3640
3934
  style: {
@@ -3646,9 +3940,9 @@ function ComposeMessageScreen({ nav }) {
3646
3940
  children: "New Message"
3647
3941
  }
3648
3942
  ),
3649
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { fontSize: 14, color: colors.textMuted }, children: "Send a message to the QA team" })
3943
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { fontSize: 14, color: colors.textMuted }, children: "Send a message to the QA team" })
3650
3944
  ] }),
3651
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
3945
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
3652
3946
  "div",
3653
3947
  {
3654
3948
  style: {
@@ -3658,7 +3952,7 @@ function ComposeMessageScreen({ nav }) {
3658
3952
  border: `1px solid ${colors.border}`
3659
3953
  },
3660
3954
  children: [
3661
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3955
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3662
3956
  "label",
3663
3957
  {
3664
3958
  style: {
@@ -3671,7 +3965,7 @@ function ComposeMessageScreen({ nav }) {
3671
3965
  children: "Subject"
3672
3966
  }
3673
3967
  ),
3674
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3968
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3675
3969
  "input",
3676
3970
  {
3677
3971
  type: "text",
@@ -3686,7 +3980,7 @@ function ComposeMessageScreen({ nav }) {
3686
3980
  }
3687
3981
  }
3688
3982
  ),
3689
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3983
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3690
3984
  "label",
3691
3985
  {
3692
3986
  style: {
@@ -3700,7 +3994,7 @@ function ComposeMessageScreen({ nav }) {
3700
3994
  children: "Message"
3701
3995
  }
3702
3996
  ),
3703
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3997
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3704
3998
  "textarea",
3705
3999
  {
3706
4000
  value: message,
@@ -3719,7 +4013,7 @@ function ComposeMessageScreen({ nav }) {
3719
4013
  }
3720
4014
  }
3721
4015
  ),
3722
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4016
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3723
4017
  ImagePickerButtons,
3724
4018
  {
3725
4019
  images: images.images,
@@ -3730,7 +4024,7 @@ function ComposeMessageScreen({ nav }) {
3730
4024
  label: "Attachments (optional)"
3731
4025
  }
3732
4026
  ),
3733
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4027
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3734
4028
  "button",
3735
4029
  {
3736
4030
  style: {
@@ -3759,7 +4053,7 @@ function ComposeMessageScreen({ nav }) {
3759
4053
 
3760
4054
  // src/widget/screens/ProfileScreen.tsx
3761
4055
  var import_react12 = require("react");
3762
- var import_jsx_runtime14 = require("react/jsx-runtime");
4056
+ var import_jsx_runtime15 = require("react/jsx-runtime");
3763
4057
  function ProfileScreen({ nav }) {
3764
4058
  const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo } = useBugBear();
3765
4059
  const [editing, setEditing] = (0, import_react12.useState)(false);
@@ -3806,22 +4100,22 @@ function ProfileScreen({ nav }) {
3806
4100
  }
3807
4101
  };
3808
4102
  if (saved) {
3809
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.emptyState, children: [
3810
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.emptyEmoji, children: "\u2705" }),
3811
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.emptyTitle, children: "Profile saved!" })
4103
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.emptyState, children: [
4104
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyEmoji, children: "\u2705" }),
4105
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyTitle, children: "Profile saved!" })
3812
4106
  ] });
3813
4107
  }
3814
4108
  if (!testerInfo) {
3815
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.emptyState, children: [
3816
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.emptyEmoji, children: "\u{1F464}" }),
3817
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.emptyTitle, children: "No profile found" })
4109
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.emptyState, children: [
4110
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyEmoji, children: "\u{1F464}" }),
4111
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyTitle, children: "No profile found" })
3818
4112
  ] });
3819
4113
  }
3820
4114
  if (editing) {
3821
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
3822
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.editHeader, children: [
3823
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.editTitle, children: "Edit Profile" }),
3824
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4115
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
4116
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.editHeader, children: [
4117
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.editTitle, children: "Edit Profile" }),
4118
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3825
4119
  "button",
3826
4120
  {
3827
4121
  style: styles4.cancelButton,
@@ -3833,9 +4127,9 @@ function ProfileScreen({ nav }) {
3833
4127
  }
3834
4128
  )
3835
4129
  ] }),
3836
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.field, children: [
3837
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("label", { style: styles4.label, children: "Name" }),
3838
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4130
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
4131
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Name" }),
4132
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3839
4133
  "input",
3840
4134
  {
3841
4135
  style: styles4.input,
@@ -3845,15 +4139,15 @@ function ProfileScreen({ nav }) {
3845
4139
  }
3846
4140
  )
3847
4141
  ] }),
3848
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.field, children: [
3849
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("label", { style: styles4.label, children: "Primary Email" }),
3850
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.emailFixed, children: testerInfo.email })
4142
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
4143
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Primary Email" }),
4144
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emailFixed, children: testerInfo.email })
3851
4145
  ] }),
3852
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.field, children: [
3853
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("label", { style: styles4.label, children: "Additional Emails" }),
3854
- additionalEmails.map((email) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.emailRow, children: [
3855
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.emailText, children: email }),
3856
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4146
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
4147
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Additional Emails" }),
4148
+ additionalEmails.map((email) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.emailRow, children: [
4149
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emailText, children: email }),
4150
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3857
4151
  "button",
3858
4152
  {
3859
4153
  style: styles4.removeEmailButton,
@@ -3862,8 +4156,8 @@ function ProfileScreen({ nav }) {
3862
4156
  }
3863
4157
  )
3864
4158
  ] }, email)),
3865
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.addEmailRow, children: [
3866
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4159
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.addEmailRow, children: [
4160
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3867
4161
  "input",
3868
4162
  {
3869
4163
  style: { ...styles4.input, flex: 1, marginRight: 8 },
@@ -3876,18 +4170,18 @@ function ProfileScreen({ nav }) {
3876
4170
  }
3877
4171
  }
3878
4172
  ),
3879
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("button", { style: styles4.addButton, onClick: handleAddEmail, children: "Add" })
4173
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("button", { style: styles4.addButton, onClick: handleAddEmail, children: "Add" })
3880
4174
  ] })
3881
4175
  ] }),
3882
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.field, children: [
3883
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("label", { style: styles4.label, children: "Testing Platforms" }),
3884
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: styles4.platformRow, children: [
4176
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
4177
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Testing Platforms" }),
4178
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.platformRow, children: [
3885
4179
  { key: "ios", label: "\u{1F4F1} iOS" },
3886
4180
  { key: "android", label: "\u{1F916} Android" },
3887
4181
  { key: "web", label: "\u{1F310} Web" }
3888
4182
  ].map(({ key, label }) => {
3889
4183
  const isActive = platforms.includes(key);
3890
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4184
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3891
4185
  "button",
3892
4186
  {
3893
4187
  style: {
@@ -3897,13 +4191,13 @@ function ProfileScreen({ nav }) {
3897
4191
  onClick: () => setPlatforms(
3898
4192
  (prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key]
3899
4193
  ),
3900
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: isActive ? styles4.platformTextActive : styles4.platformText, children: label })
4194
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: isActive ? styles4.platformTextActive : styles4.platformText, children: label })
3901
4195
  },
3902
4196
  key
3903
4197
  );
3904
4198
  }) })
3905
4199
  ] }),
3906
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4200
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3907
4201
  "button",
3908
4202
  {
3909
4203
  style: { ...styles4.primaryButton, marginTop: 20 },
@@ -3914,45 +4208,45 @@ function ProfileScreen({ nav }) {
3914
4208
  )
3915
4209
  ] });
3916
4210
  }
3917
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
3918
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.profileCard, children: [
3919
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: styles4.avatar, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.avatarText, children: testerInfo.name.charAt(0).toUpperCase() }) }),
3920
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.profileName, children: testerInfo.name }),
3921
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.profileEmail, children: testerInfo.email })
4211
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
4212
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.profileCard, children: [
4213
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.avatar, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.avatarText, children: testerInfo.name.charAt(0).toUpperCase() }) }),
4214
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.profileName, children: testerInfo.name }),
4215
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.profileEmail, children: testerInfo.email })
3922
4216
  ] }),
3923
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.statsRow, children: [
3924
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.statItem, children: [
3925
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.statNumber, children: completedCount }),
3926
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.statLabel, children: "Completed" })
4217
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.statsRow, children: [
4218
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.statItem, children: [
4219
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statNumber, children: completedCount }),
4220
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statLabel, children: "Completed" })
3927
4221
  ] }),
3928
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: styles4.statDivider }),
3929
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.statItem, children: [
3930
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.statNumber, children: assignments.length }),
3931
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.statLabel, children: "Total Assigned" })
4222
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.statDivider }),
4223
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.statItem, children: [
4224
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statNumber, children: assignments.length }),
4225
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statLabel, children: "Total Assigned" })
3932
4226
  ] })
3933
4227
  ] }),
3934
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4228
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3935
4229
  "button",
3936
4230
  {
3937
4231
  style: styles4.detailsToggle,
3938
4232
  onClick: () => setShowDetails(!showDetails),
3939
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { style: styles4.detailsToggleText, children: [
4233
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { style: styles4.detailsToggleText, children: [
3940
4234
  showDetails ? "\u25BC" : "\u25B6",
3941
4235
  " Details"
3942
4236
  ] })
3943
4237
  }
3944
4238
  ),
3945
- showDetails && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.detailsSection, children: [
3946
- additionalEmails.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.detailBlock, children: [
3947
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.detailLabel, children: "Additional Emails" }),
3948
- additionalEmails.map((e) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.detailValue, children: e }, e))
4239
+ showDetails && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.detailsSection, children: [
4240
+ additionalEmails.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.detailBlock, children: [
4241
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.detailLabel, children: "Additional Emails" }),
4242
+ additionalEmails.map((e) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.detailValue, children: e }, e))
3949
4243
  ] }),
3950
- platforms.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: styles4.detailBlock, children: [
3951
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.detailLabel, children: "Platforms" }),
3952
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: styles4.platformTags, children: platforms.map((p) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.platformTag, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { style: styles4.platformTagText, children: p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web" }) }, p)) })
4244
+ platforms.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.detailBlock, children: [
4245
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.detailLabel, children: "Platforms" }),
4246
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.platformTags, children: platforms.map((p) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.platformTag, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.platformTagText, children: p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web" }) }, p)) })
3953
4247
  ] })
3954
4248
  ] }),
3955
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4249
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3956
4250
  "button",
3957
4251
  {
3958
4252
  style: { ...styles4.primaryButton, marginTop: 20 },
@@ -4236,7 +4530,7 @@ var styles4 = {
4236
4530
 
4237
4531
  // src/widget/screens/IssueListScreen.tsx
4238
4532
  var import_react13 = require("react");
4239
- var import_jsx_runtime15 = require("react/jsx-runtime");
4533
+ var import_jsx_runtime16 = require("react/jsx-runtime");
4240
4534
  var CATEGORY_CONFIG = {
4241
4535
  open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
4242
4536
  done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
@@ -4279,15 +4573,15 @@ function IssueListScreen({ nav, category }) {
4279
4573
  };
4280
4574
  }, [client, category]);
4281
4575
  if (loading) {
4282
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { padding: "40px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { color: colors.textMuted, fontSize: 14 }, children: "Loading..." }) });
4576
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(IssueListScreenSkeleton, {});
4283
4577
  }
4284
4578
  if (issues.length === 0) {
4285
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { padding: "40px 0", textAlign: "center" }, children: [
4286
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize: 36, marginBottom: 8 }, children: config.emptyIcon }),
4287
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { color: colors.textMuted, fontSize: 14 }, children: config.emptyText })
4579
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { padding: "40px 0", textAlign: "center" }, children: [
4580
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { fontSize: 36, marginBottom: 8 }, children: config.emptyIcon }),
4581
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: colors.textMuted, fontSize: 14 }, children: config.emptyText })
4288
4582
  ] });
4289
4583
  }
4290
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { children: issues.map((issue) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
4584
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { children: issues.map((issue) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4291
4585
  "div",
4292
4586
  {
4293
4587
  role: "button",
@@ -4306,8 +4600,8 @@ function IssueListScreen({ nav, category }) {
4306
4600
  userSelect: "none"
4307
4601
  },
4308
4602
  children: [
4309
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 }, children: [
4310
- issue.severity && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4603
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 }, children: [
4604
+ issue.severity && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4311
4605
  "span",
4312
4606
  {
4313
4607
  style: {
@@ -4320,7 +4614,7 @@ function IssueListScreen({ nav, category }) {
4320
4614
  }
4321
4615
  }
4322
4616
  ),
4323
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: {
4617
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
4324
4618
  fontSize: 13,
4325
4619
  fontWeight: 600,
4326
4620
  color: colors.textPrimary,
@@ -4330,11 +4624,11 @@ function IssueListScreen({ nav, category }) {
4330
4624
  whiteSpace: "nowrap"
4331
4625
  }, children: issue.title })
4332
4626
  ] }),
4333
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 6 }, children: [
4334
- issue.route && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: { fontSize: 11, color: colors.textDim, maxWidth: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: issue.route }),
4335
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: { fontSize: 11, color: colors.textDim, marginLeft: "auto" }, children: formatRelativeTime(issue.updatedAt) })
4627
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 6 }, children: [
4628
+ issue.route && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 11, color: colors.textDim, maxWidth: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: issue.route }),
4629
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 11, color: colors.textDim, marginLeft: "auto" }, children: formatRelativeTime(issue.updatedAt) })
4336
4630
  ] }),
4337
- category === "done" && issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: {
4631
+ category === "done" && issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
4338
4632
  display: "inline-flex",
4339
4633
  alignItems: "center",
4340
4634
  gap: 4,
@@ -4350,7 +4644,7 @@ function IssueListScreen({ nav, category }) {
4350
4644
  "\u2714 Verified by ",
4351
4645
  issue.verifiedByName
4352
4646
  ] }),
4353
- category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: {
4647
+ category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
4354
4648
  display: "inline-flex",
4355
4649
  alignItems: "center",
4356
4650
  gap: 4,
@@ -4377,7 +4671,7 @@ function IssueListScreen({ nav, category }) {
4377
4671
  }
4378
4672
 
4379
4673
  // src/widget/screens/IssueDetailScreen.tsx
4380
- var import_jsx_runtime16 = require("react/jsx-runtime");
4674
+ var import_jsx_runtime17 = require("react/jsx-runtime");
4381
4675
  var STATUS_LABELS = {
4382
4676
  new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
4383
4677
  triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
@@ -4401,9 +4695,9 @@ var SEVERITY_CONFIG = {
4401
4695
  function IssueDetailScreen({ nav, issue }) {
4402
4696
  const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
4403
4697
  const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
4404
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { children: [
4405
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginBottom: 12 }, children: [
4406
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
4698
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { children: [
4699
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginBottom: 12 }, children: [
4700
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: {
4407
4701
  backgroundColor: statusConfig.bg,
4408
4702
  color: statusConfig.color,
4409
4703
  fontSize: 11,
@@ -4411,7 +4705,7 @@ function IssueDetailScreen({ nav, issue }) {
4411
4705
  padding: "3px 10px",
4412
4706
  borderRadius: 6
4413
4707
  }, children: statusConfig.label }),
4414
- severityConfig && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
4708
+ severityConfig && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: {
4415
4709
  backgroundColor: severityConfig.bg,
4416
4710
  color: severityConfig.color,
4417
4711
  fontSize: 11,
@@ -4420,9 +4714,9 @@ function IssueDetailScreen({ nav, issue }) {
4420
4714
  borderRadius: 6
4421
4715
  }, children: severityConfig.label })
4422
4716
  ] }),
4423
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h3", { style: { fontSize: 16, fontWeight: 700, color: colors.textPrimary, margin: "0 0 8px 0", lineHeight: 1.3 }, children: issue.title }),
4424
- issue.route && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 12 }, children: issue.route }),
4425
- issue.description && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: {
4717
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { style: { fontSize: 16, fontWeight: 700, color: colors.textPrimary, margin: "0 0 8px 0", lineHeight: 1.3 }, children: issue.title }),
4718
+ issue.route && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 12 }, children: issue.route }),
4719
+ issue.description && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: {
4426
4720
  backgroundColor: colors.card,
4427
4721
  border: `1px solid ${colors.border}`,
4428
4722
  borderRadius: 8,
@@ -4434,56 +4728,56 @@ function IssueDetailScreen({ nav, issue }) {
4434
4728
  whiteSpace: "pre-wrap",
4435
4729
  wordBreak: "break-word"
4436
4730
  }, children: issue.description }),
4437
- issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
4731
+ issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
4438
4732
  backgroundColor: "#14532d",
4439
4733
  border: "1px solid #166534",
4440
4734
  borderRadius: 8,
4441
4735
  padding: 12,
4442
4736
  marginBottom: 12
4443
4737
  }, children: [
4444
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
4445
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 16 }, children: "\u2705" }),
4446
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#4ade80" }, children: "Retesting Proof" })
4738
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
4739
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 16 }, children: "\u2705" }),
4740
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#4ade80" }, children: "Retesting Proof" })
4447
4741
  ] }),
4448
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { fontSize: 12, color: "#86efac" }, children: [
4742
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, color: "#86efac" }, children: [
4449
4743
  "Verified by ",
4450
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("strong", { children: issue.verifiedByName }),
4451
- issue.verifiedAt && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("span", { children: [
4744
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: issue.verifiedByName }),
4745
+ issue.verifiedAt && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { children: [
4452
4746
  " on ",
4453
4747
  new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })
4454
4748
  ] })
4455
4749
  ] })
4456
4750
  ] }),
4457
- issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
4751
+ issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
4458
4752
  backgroundColor: "#422006",
4459
4753
  border: "1px solid #854d0e",
4460
4754
  borderRadius: 8,
4461
4755
  padding: 12,
4462
4756
  marginBottom: 12
4463
4757
  }, children: [
4464
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
4465
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
4466
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Original Bug" })
4758
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
4759
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
4760
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Original Bug" })
4467
4761
  ] }),
4468
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { fontSize: 12, color: "#fde68a" }, children: [
4762
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, color: "#fde68a" }, children: [
4469
4763
  "Retest of: ",
4470
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("strong", { children: issue.originalBugTitle })
4764
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: issue.originalBugTitle })
4471
4765
  ] })
4472
4766
  ] }),
4473
- issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { marginBottom: 12 }, children: [
4474
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { fontSize: 12, fontWeight: 600, color: colors.textMuted, marginBottom: 8 }, children: [
4767
+ issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { marginBottom: 12 }, children: [
4768
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, fontWeight: 600, color: colors.textMuted, marginBottom: 8 }, children: [
4475
4769
  "Screenshots (",
4476
4770
  issue.screenshotUrls.length,
4477
4771
  ")"
4478
4772
  ] }),
4479
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { display: "flex", gap: 8, overflowX: "auto" }, children: issue.screenshotUrls.map((url, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4773
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { display: "flex", gap: 8, overflowX: "auto" }, children: issue.screenshotUrls.map((url, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4480
4774
  "a",
4481
4775
  {
4482
4776
  href: url,
4483
4777
  target: "_blank",
4484
4778
  rel: "noopener noreferrer",
4485
4779
  style: { flexShrink: 0 },
4486
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4780
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4487
4781
  "img",
4488
4782
  {
4489
4783
  src: url,
@@ -4501,16 +4795,16 @@ function IssueDetailScreen({ nav, issue }) {
4501
4795
  i
4502
4796
  )) })
4503
4797
  ] }),
4504
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
4798
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
4505
4799
  borderTop: `1px solid ${colors.border}`,
4506
4800
  paddingTop: 12,
4507
4801
  marginTop: 4
4508
4802
  }, children: [
4509
- issue.reporterName && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 4 }, children: [
4803
+ issue.reporterName && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 4 }, children: [
4510
4804
  "Reported by ",
4511
4805
  issue.reporterName
4512
4806
  ] }),
4513
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { fontSize: 11, color: colors.textDim }, children: [
4807
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 11, color: colors.textDim }, children: [
4514
4808
  "Created ",
4515
4809
  formatRelativeTime(issue.createdAt),
4516
4810
  " \xB7 Updated ",
@@ -4524,9 +4818,9 @@ function IssueDetailScreen({ nav, issue }) {
4524
4818
  var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
4525
4819
 
4526
4820
  // src/BugBearPanel.tsx
4527
- var import_jsx_runtime17 = require("react/jsx-runtime");
4821
+ var import_jsx_runtime18 = require("react/jsx-runtime");
4528
4822
  function BugBearIcon({ size = 24 }) {
4529
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4823
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
4530
4824
  "img",
4531
4825
  {
4532
4826
  src: BUGBEAR_LOGO_BASE64,
@@ -4691,37 +4985,37 @@ function BugBearPanel({
4691
4985
  const renderScreen = () => {
4692
4986
  switch (currentScreen.name) {
4693
4987
  case "HOME":
4694
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(HomeScreen, { nav });
4988
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(HomeScreen, { nav });
4695
4989
  case "TEST_DETAIL":
4696
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TestDetailScreen, { testId: currentScreen.testId, nav });
4990
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TestDetailScreen, { testId: currentScreen.testId, nav });
4697
4991
  case "TEST_LIST":
4698
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TestListScreen, { nav });
4992
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TestListScreen, { nav });
4699
4993
  case "TEST_FEEDBACK":
4700
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
4994
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
4701
4995
  case "REPORT":
4702
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ReportScreen, { nav, prefill: currentScreen.prefill });
4996
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ReportScreen, { nav, prefill: currentScreen.prefill });
4703
4997
  case "REPORT_SUCCESS":
4704
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ReportSuccessScreen, { nav });
4998
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ReportSuccessScreen, { nav });
4705
4999
  case "MESSAGE_LIST":
4706
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(MessageListScreen, { nav });
5000
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MessageListScreen, { nav });
4707
5001
  case "THREAD_DETAIL":
4708
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ThreadDetailScreen, { thread: currentScreen.thread, nav });
5002
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ThreadDetailScreen, { thread: currentScreen.thread, nav });
4709
5003
  case "COMPOSE_MESSAGE":
4710
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ComposeMessageScreen, { nav });
5004
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ComposeMessageScreen, { nav });
4711
5005
  case "ISSUE_LIST":
4712
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IssueListScreen, { nav, category: currentScreen.category });
5006
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(IssueListScreen, { nav, category: currentScreen.category });
4713
5007
  case "ISSUE_DETAIL":
4714
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IssueDetailScreen, { nav, issue: currentScreen.issue });
5008
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(IssueDetailScreen, { nav, issue: currentScreen.issue });
4715
5009
  case "PROFILE":
4716
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ProfileScreen, { nav });
5010
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ProfileScreen, { nav });
4717
5011
  default:
4718
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(HomeScreen, { nav });
5012
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(HomeScreen, { nav });
4719
5013
  }
4720
5014
  };
4721
5015
  if (typeof document === "undefined") return null;
4722
5016
  const headerTitle = getHeaderTitle();
4723
5017
  return (0, import_react_dom.createPortal)(
4724
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
5018
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4725
5019
  "div",
4726
5020
  {
4727
5021
  ref: panelRef,
@@ -4740,7 +5034,7 @@ function BugBearPanel({
4740
5034
  },
4741
5035
  onMouseDown: handleMouseDown,
4742
5036
  children: [
4743
- collapsed && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
5037
+ collapsed && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4744
5038
  "button",
4745
5039
  {
4746
5040
  onClick: () => setCollapsed(false),
@@ -4762,9 +5056,9 @@ function BugBearPanel({
4762
5056
  fontWeight: 500
4763
5057
  },
4764
5058
  children: [
4765
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BugBearIcon, { size: 24 }),
4766
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: "BugBear" }),
4767
- badgeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: {
5059
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BugBearIcon, { size: 24 }),
5060
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { children: "BugBear" }),
5061
+ badgeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: {
4768
5062
  backgroundColor: "#fff",
4769
5063
  color: colors.blue,
4770
5064
  fontSize: "0.75rem",
@@ -4775,7 +5069,7 @@ function BugBearPanel({
4775
5069
  ]
4776
5070
  }
4777
5071
  ),
4778
- !collapsed && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
5072
+ !collapsed && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: {
4779
5073
  width: PANEL_WIDTH,
4780
5074
  backgroundColor: colors.bg,
4781
5075
  borderRadius: 12,
@@ -4783,7 +5077,7 @@ function BugBearPanel({
4783
5077
  overflow: "hidden",
4784
5078
  boxShadow: "0 25px 50px -12px rgba(0,0,0,0.5)"
4785
5079
  }, children: [
4786
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
5080
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4787
5081
  "div",
4788
5082
  {
4789
5083
  "data-drag-handle": true,
@@ -4799,7 +5093,7 @@ function BugBearPanel({
4799
5093
  cursor: draggable ? isDragging ? "grabbing" : "grab" : "default"
4800
5094
  },
4801
5095
  children: [
4802
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
5096
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
4803
5097
  "button",
4804
5098
  {
4805
5099
  onClick: pop,
@@ -4815,14 +5109,14 @@ function BugBearPanel({
4815
5109
  },
4816
5110
  children: "\u2190 Back"
4817
5111
  }
4818
- ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
4819
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BugBearIcon, { size: 28 }),
4820
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { children: [
4821
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
4822
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontWeight: 600, fontSize: "0.875rem" }, children: "BugBear" }),
4823
- draggable && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { color: colors.textMuted, fontSize: "0.75rem" }, title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
5112
+ ) : /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
5113
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BugBearIcon, { size: 28 }),
5114
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { children: [
5115
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
5116
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { fontWeight: 600, fontSize: "0.875rem" }, children: "BugBear" }),
5117
+ draggable && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { color: colors.textMuted, fontSize: "0.75rem" }, title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
4824
5118
  ] }),
4825
- testerInfo && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
5119
+ testerInfo && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4826
5120
  "button",
4827
5121
  {
4828
5122
  onClick: () => push({ name: "PROFILE" }),
@@ -4840,13 +5134,13 @@ function BugBearPanel({
4840
5134
  },
4841
5135
  children: [
4842
5136
  testerInfo.name,
4843
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
5137
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
4844
5138
  ]
4845
5139
  }
4846
5140
  )
4847
5141
  ] })
4848
5142
  ] }) }),
4849
- headerTitle ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: {
5143
+ headerTitle ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: {
4850
5144
  fontSize: "0.8125rem",
4851
5145
  fontWeight: 600,
4852
5146
  color: colors.textSecondary,
@@ -4856,7 +5150,7 @@ function BugBearPanel({
4856
5150
  textOverflow: "ellipsis",
4857
5151
  whiteSpace: "nowrap"
4858
5152
  }, children: headerTitle }) : null,
4859
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
5153
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
4860
5154
  "button",
4861
5155
  {
4862
5156
  onClick: handleClose,
@@ -4880,13 +5174,13 @@ function BugBearPanel({
4880
5174
  ]
4881
5175
  }
4882
5176
  ),
4883
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: {
5177
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: {
4884
5178
  padding: 16,
4885
5179
  maxHeight: 400,
4886
5180
  overflowY: "auto",
4887
5181
  backgroundColor: colors.bg,
4888
5182
  color: colors.textSecondary
4889
- }, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { padding: "60px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { color: colors.textMuted, fontSize: "0.875rem" }, children: "Loading..." }) }) : renderScreen() })
5183
+ }, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { padding: "60px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { color: colors.textMuted, fontSize: "0.875rem" }, children: "Loading..." }) }) : renderScreen() })
4890
5184
  ] })
4891
5185
  ]
4892
5186
  }
@@ -4898,7 +5192,7 @@ function BugBearPanel({
4898
5192
  // src/BugBearErrorBoundary.tsx
4899
5193
  var import_react15 = require("react");
4900
5194
  var import_core2 = require("@bbearai/core");
4901
- var import_jsx_runtime18 = require("react/jsx-runtime");
5195
+ var import_jsx_runtime19 = require("react/jsx-runtime");
4902
5196
  var BugBearErrorBoundary = class extends import_react15.Component {
4903
5197
  constructor(props) {
4904
5198
  super(props);
@@ -4943,7 +5237,7 @@ var BugBearErrorBoundary = class extends import_react15.Component {
4943
5237
  if (fallback) {
4944
5238
  return fallback;
4945
5239
  }
4946
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
5240
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
4947
5241
  "div",
4948
5242
  {
4949
5243
  style: {
@@ -4955,13 +5249,13 @@ var BugBearErrorBoundary = class extends import_react15.Component {
4955
5249
  fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
4956
5250
  },
4957
5251
  children: [
4958
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
4959
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("img", { src: BUGBEAR_LOGO_BASE64, alt: "BugBear", width: 28, height: 28, style: { objectFit: "contain" } }),
4960
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h3", { style: { margin: 0, color: "#991b1b", fontSize: "16px" }, children: "Something went wrong" })
5252
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
5253
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: BUGBEAR_LOGO_BASE64, alt: "BugBear", width: 28, height: 28, style: { objectFit: "contain" } }),
5254
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h3", { style: { margin: 0, color: "#991b1b", fontSize: "16px" }, children: "Something went wrong" })
4961
5255
  ] }),
4962
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { style: { color: "#7f1d1d", fontSize: "14px", margin: "0 0 12px 0" }, children: error.message }),
4963
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", gap: "8px" }, children: [
4964
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
5256
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { style: { color: "#7f1d1d", fontSize: "14px", margin: "0 0 12px 0" }, children: error.message }),
5257
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { style: { display: "flex", gap: "8px" }, children: [
5258
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
4965
5259
  "button",
4966
5260
  {
4967
5261
  onClick: this.reset,
@@ -4978,7 +5272,7 @@ var BugBearErrorBoundary = class extends import_react15.Component {
4978
5272
  children: "Try Again"
4979
5273
  }
4980
5274
  ),
4981
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
5275
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
4982
5276
  "button",
4983
5277
  {
4984
5278
  onClick: () => window.location.reload(),
@@ -4996,7 +5290,7 @@ var BugBearErrorBoundary = class extends import_react15.Component {
4996
5290
  }
4997
5291
  )
4998
5292
  ] }),
4999
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
5293
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
5000
5294
  ]
5001
5295
  }
5002
5296
  );