@bbearai/react 0.4.5 → 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.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +764 -445
- package/dist/index.mjs +764 -445
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -45,6 +45,8 @@ var BugBearContext = createContext({
|
|
|
45
45
|
issueCounts: { open: 0, done: 0, reopened: 0 },
|
|
46
46
|
refreshIssueCounts: async () => {
|
|
47
47
|
},
|
|
48
|
+
queuedCount: 0,
|
|
49
|
+
dashboardUrl: void 0,
|
|
48
50
|
onError: void 0
|
|
49
51
|
});
|
|
50
52
|
function useBugBear() {
|
|
@@ -63,6 +65,7 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
63
65
|
const [threads, setThreads] = useState([]);
|
|
64
66
|
const [unreadCount, setUnreadCount] = useState(0);
|
|
65
67
|
const [issueCounts, setIssueCounts] = useState({ open: 0, done: 0, reopened: 0 });
|
|
68
|
+
const [queuedCount, setQueuedCount] = useState(0);
|
|
66
69
|
const refreshAssignments = useCallback(async () => {
|
|
67
70
|
if (!client) return;
|
|
68
71
|
const newAssignments = await client.getAssignedTests();
|
|
@@ -210,18 +213,45 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
210
213
|
hasInitialized.current = true;
|
|
211
214
|
contextCapture.startCapture();
|
|
212
215
|
const newClient = createBugBear(config);
|
|
216
|
+
if (newClient.queue) {
|
|
217
|
+
newClient.queue.onChange(setQueuedCount);
|
|
218
|
+
newClient.initQueue();
|
|
219
|
+
}
|
|
213
220
|
setClient(newClient);
|
|
214
221
|
initializeBugBear(newClient);
|
|
215
222
|
}
|
|
216
223
|
}, [enabled, config, initializeBugBear]);
|
|
224
|
+
useEffect(() => {
|
|
225
|
+
if (!client?.queue) return;
|
|
226
|
+
const handleOnline = () => {
|
|
227
|
+
client.queue?.flush();
|
|
228
|
+
};
|
|
229
|
+
window.addEventListener("online", handleOnline);
|
|
230
|
+
if (navigator.onLine && client.queue.count > 0) {
|
|
231
|
+
client.queue.flush();
|
|
232
|
+
}
|
|
233
|
+
return () => window.removeEventListener("online", handleOnline);
|
|
234
|
+
}, [client]);
|
|
217
235
|
useEffect(() => {
|
|
218
236
|
if (!client || !isTester || !isQAEnabled) return;
|
|
237
|
+
let unsubscribe;
|
|
238
|
+
if (client.realtimeEnabled) {
|
|
239
|
+
unsubscribe = client.subscribeToChanges({
|
|
240
|
+
onAssignmentChange: refreshAssignments,
|
|
241
|
+
onMessageChange: refreshThreads,
|
|
242
|
+
onReportChange: refreshIssueCounts
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
const pollInterval = client.realtimeEnabled ? 12e4 : 3e4;
|
|
219
246
|
const interval = setInterval(() => {
|
|
220
247
|
refreshThreads();
|
|
221
248
|
refreshIssueCounts();
|
|
222
|
-
},
|
|
223
|
-
return () =>
|
|
224
|
-
|
|
249
|
+
}, pollInterval);
|
|
250
|
+
return () => {
|
|
251
|
+
clearInterval(interval);
|
|
252
|
+
unsubscribe?.();
|
|
253
|
+
};
|
|
254
|
+
}, [client, isTester, isQAEnabled, refreshThreads, refreshIssueCounts, refreshAssignments]);
|
|
225
255
|
const currentAssignment = assignments.find(
|
|
226
256
|
(a) => a.status === "in_progress"
|
|
227
257
|
) || assignments.find(
|
|
@@ -264,6 +294,8 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
264
294
|
// Issue tracking
|
|
265
295
|
issueCounts,
|
|
266
296
|
refreshIssueCounts,
|
|
297
|
+
queuedCount,
|
|
298
|
+
dashboardUrl: config.dashboardUrl,
|
|
267
299
|
onError: config.onError
|
|
268
300
|
},
|
|
269
301
|
children
|
|
@@ -390,9 +422,148 @@ function getThreadTypeIcon(type) {
|
|
|
390
422
|
|
|
391
423
|
// src/widget/screens/HomeScreen.tsx
|
|
392
424
|
import { useEffect as useEffect2 } from "react";
|
|
425
|
+
|
|
426
|
+
// src/widget/Skeleton.tsx
|
|
393
427
|
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
428
|
+
var PULSE_CSS = `@keyframes bb-skeleton-pulse{0%,100%{opacity:.6}50%{opacity:.25}}`;
|
|
429
|
+
var styleInjected = false;
|
|
430
|
+
function injectStyle() {
|
|
431
|
+
if (styleInjected || typeof document === "undefined") return;
|
|
432
|
+
const style = document.createElement("style");
|
|
433
|
+
style.textContent = PULSE_CSS;
|
|
434
|
+
document.head.appendChild(style);
|
|
435
|
+
styleInjected = true;
|
|
436
|
+
}
|
|
437
|
+
function Bar({ width = "100%", height = 12, radius = 6, style }) {
|
|
438
|
+
injectStyle();
|
|
439
|
+
return /* @__PURE__ */ jsx2(
|
|
440
|
+
"div",
|
|
441
|
+
{
|
|
442
|
+
style: {
|
|
443
|
+
width,
|
|
444
|
+
height,
|
|
445
|
+
borderRadius: radius,
|
|
446
|
+
backgroundColor: colors.border,
|
|
447
|
+
animation: "bb-skeleton-pulse 1.5s ease-in-out infinite",
|
|
448
|
+
...style
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
);
|
|
452
|
+
}
|
|
453
|
+
function Circle({ size = 20, style }) {
|
|
454
|
+
injectStyle();
|
|
455
|
+
return /* @__PURE__ */ jsx2(
|
|
456
|
+
"div",
|
|
457
|
+
{
|
|
458
|
+
style: {
|
|
459
|
+
width: size,
|
|
460
|
+
height: size,
|
|
461
|
+
borderRadius: size / 2,
|
|
462
|
+
backgroundColor: colors.border,
|
|
463
|
+
animation: "bb-skeleton-pulse 1.5s ease-in-out infinite",
|
|
464
|
+
flexShrink: 0,
|
|
465
|
+
...style
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
);
|
|
469
|
+
}
|
|
470
|
+
function HomeScreenSkeleton() {
|
|
471
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
472
|
+
/* @__PURE__ */ jsx2(Bar, { width: "100%", height: 100, radius: 16, style: { marginBottom: 20 } }),
|
|
473
|
+
/* @__PURE__ */ jsx2("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12, marginBottom: 20 }, children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs("div", { style: { backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: 12, padding: 16, display: "flex", flexDirection: "column", alignItems: "center", gap: 8 }, children: [
|
|
474
|
+
/* @__PURE__ */ jsx2(Circle, { size: 28 }),
|
|
475
|
+
/* @__PURE__ */ jsx2(Bar, { width: 60, height: 10 })
|
|
476
|
+
] }, i)) }),
|
|
477
|
+
/* @__PURE__ */ jsx2("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [0, 1, 2].map((i) => /* @__PURE__ */ 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: [
|
|
478
|
+
/* @__PURE__ */ jsx2(Bar, { width: 30, height: 18 }),
|
|
479
|
+
/* @__PURE__ */ jsx2(Bar, { width: 40, height: 8 })
|
|
480
|
+
] }, i)) }),
|
|
481
|
+
/* @__PURE__ */ jsx2(Bar, { width: "100%", height: 6, radius: 3, style: { marginBottom: 8 } }),
|
|
482
|
+
/* @__PURE__ */ jsx2(Bar, { width: 120, height: 10, style: { margin: "0 auto 16px" } })
|
|
483
|
+
] });
|
|
484
|
+
}
|
|
485
|
+
function TestItemSkeleton({ delay = 0 }) {
|
|
486
|
+
return /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", padding: "10px 12px", borderRadius: 8, marginBottom: 4, backgroundColor: colors.card }, children: [
|
|
487
|
+
/* @__PURE__ */ jsx2(Circle, { size: 18, style: { marginRight: 10, animationDelay: `${delay}ms` } }),
|
|
488
|
+
/* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
|
|
489
|
+
/* @__PURE__ */ jsx2(Bar, { width: "70%", height: 11, style: { marginBottom: 4, animationDelay: `${delay}ms` } }),
|
|
490
|
+
/* @__PURE__ */ jsx2(Bar, { width: "45%", height: 8, style: { animationDelay: `${delay}ms` } })
|
|
491
|
+
] }),
|
|
492
|
+
/* @__PURE__ */ jsx2(Bar, { width: 50, height: 18, radius: 6, style: { marginLeft: 8, animationDelay: `${delay}ms` } })
|
|
493
|
+
] });
|
|
494
|
+
}
|
|
495
|
+
function TestListScreenSkeleton() {
|
|
496
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
497
|
+
/* @__PURE__ */ jsx2("div", { style: { display: "flex", gap: 8, marginBottom: 8 }, children: [55, 50, 50, 70].map((w, i) => /* @__PURE__ */ jsx2(Bar, { width: w, height: 28, radius: 8, style: { animationDelay: `${i * 50}ms` } }, i)) }),
|
|
498
|
+
/* @__PURE__ */ jsx2(Bar, { width: "100%", height: 36, radius: 8, style: { marginBottom: 10 } }),
|
|
499
|
+
[0, 1].map((g) => /* @__PURE__ */ jsxs("div", { style: { marginBottom: 12 }, children: [
|
|
500
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 8, padding: "8px 4px" }, children: [
|
|
501
|
+
/* @__PURE__ */ jsx2(Bar, { width: 12, height: 10 }),
|
|
502
|
+
/* @__PURE__ */ jsx2(Bar, { width: "40%", height: 12 }),
|
|
503
|
+
/* @__PURE__ */ jsx2(Bar, { width: 40, height: 4, radius: 2, style: { marginLeft: "auto" } }),
|
|
504
|
+
/* @__PURE__ */ jsx2(Bar, { width: 24, height: 10 })
|
|
505
|
+
] }),
|
|
506
|
+
[0, 1, 2].map((i) => /* @__PURE__ */ jsx2(TestItemSkeleton, { delay: (g * 3 + i) * 80 }, i))
|
|
507
|
+
] }, g))
|
|
508
|
+
] });
|
|
509
|
+
}
|
|
510
|
+
function IssueListScreenSkeleton() {
|
|
511
|
+
return /* @__PURE__ */ jsx2("div", { children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs(
|
|
512
|
+
"div",
|
|
513
|
+
{
|
|
514
|
+
style: {
|
|
515
|
+
backgroundColor: colors.card,
|
|
516
|
+
border: `1px solid ${colors.border}`,
|
|
517
|
+
borderRadius: 10,
|
|
518
|
+
padding: "12px 14px",
|
|
519
|
+
marginBottom: 8
|
|
520
|
+
},
|
|
521
|
+
children: [
|
|
522
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
523
|
+
/* @__PURE__ */ jsx2(Circle, { size: 8, style: { animationDelay: `${i * 100}ms` } }),
|
|
524
|
+
/* @__PURE__ */ jsx2(Bar, { width: "65%", height: 11, style: { animationDelay: `${i * 100}ms` } })
|
|
525
|
+
] }),
|
|
526
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 8 }, children: [
|
|
527
|
+
/* @__PURE__ */ jsx2(Bar, { width: "40%", height: 8, style: { animationDelay: `${i * 100}ms` } }),
|
|
528
|
+
/* @__PURE__ */ jsx2(Bar, { width: 40, height: 8, style: { animationDelay: `${i * 100}ms` } })
|
|
529
|
+
] })
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
i
|
|
533
|
+
)) });
|
|
534
|
+
}
|
|
535
|
+
function MessageListScreenSkeleton() {
|
|
536
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
537
|
+
/* @__PURE__ */ jsx2(Bar, { width: "100%", height: 44, radius: 12, style: { marginBottom: 16 } }),
|
|
538
|
+
[0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs(
|
|
539
|
+
"div",
|
|
540
|
+
{
|
|
541
|
+
style: {
|
|
542
|
+
display: "flex",
|
|
543
|
+
alignItems: "flex-start",
|
|
544
|
+
padding: 12,
|
|
545
|
+
borderRadius: 10,
|
|
546
|
+
marginBottom: 4,
|
|
547
|
+
backgroundColor: colors.card
|
|
548
|
+
},
|
|
549
|
+
children: [
|
|
550
|
+
/* @__PURE__ */ jsx2(Circle, { size: 20, style: { marginRight: 10, marginTop: 2, animationDelay: `${i * 100}ms` } }),
|
|
551
|
+
/* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
|
|
552
|
+
/* @__PURE__ */ jsx2(Bar, { width: "55%", height: 11, style: { marginBottom: 5, animationDelay: `${i * 100}ms` } }),
|
|
553
|
+
/* @__PURE__ */ jsx2(Bar, { width: "80%", height: 9, style: { animationDelay: `${i * 100}ms` } })
|
|
554
|
+
] }),
|
|
555
|
+
/* @__PURE__ */ jsx2(Bar, { width: 30, height: 8, style: { marginLeft: 8, animationDelay: `${i * 100}ms` } })
|
|
556
|
+
]
|
|
557
|
+
},
|
|
558
|
+
i
|
|
559
|
+
))
|
|
560
|
+
] });
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// src/widget/screens/HomeScreen.tsx
|
|
564
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
394
565
|
function HomeScreen({ nav }) {
|
|
395
|
-
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts } = useBugBear();
|
|
566
|
+
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, isLoading } = useBugBear();
|
|
396
567
|
useEffect2(() => {
|
|
397
568
|
refreshAssignments();
|
|
398
569
|
refreshThreads();
|
|
@@ -403,8 +574,9 @@ function HomeScreen({ nav }) {
|
|
|
403
574
|
const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
|
|
404
575
|
const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
|
|
405
576
|
const totalTests = assignments.length;
|
|
406
|
-
return /* @__PURE__ */
|
|
407
|
-
|
|
577
|
+
if (isLoading) return /* @__PURE__ */ jsx3(HomeScreenSkeleton, {});
|
|
578
|
+
return /* @__PURE__ */ jsxs2("div", { children: [
|
|
579
|
+
pendingCount > 0 ? /* @__PURE__ */ jsxs2(
|
|
408
580
|
"div",
|
|
409
581
|
{
|
|
410
582
|
role: "button",
|
|
@@ -426,13 +598,13 @@ function HomeScreen({ nav }) {
|
|
|
426
598
|
userSelect: "none"
|
|
427
599
|
},
|
|
428
600
|
children: [
|
|
429
|
-
/* @__PURE__ */
|
|
430
|
-
/* @__PURE__ */
|
|
601
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: pendingCount }),
|
|
602
|
+
/* @__PURE__ */ jsxs2("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
|
|
431
603
|
"test",
|
|
432
604
|
pendingCount !== 1 ? "s" : "",
|
|
433
605
|
" waiting"
|
|
434
606
|
] }),
|
|
435
|
-
retestCount > 0 && /* @__PURE__ */
|
|
607
|
+
retestCount > 0 && /* @__PURE__ */ jsxs2(
|
|
436
608
|
"span",
|
|
437
609
|
{
|
|
438
610
|
style: {
|
|
@@ -456,10 +628,10 @@ function HomeScreen({ nav }) {
|
|
|
456
628
|
]
|
|
457
629
|
}
|
|
458
630
|
),
|
|
459
|
-
/* @__PURE__ */
|
|
631
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "Start Testing \u2192" })
|
|
460
632
|
]
|
|
461
633
|
}
|
|
462
|
-
) : unreadCount > 0 ? /* @__PURE__ */
|
|
634
|
+
) : unreadCount > 0 ? /* @__PURE__ */ jsxs2(
|
|
463
635
|
"div",
|
|
464
636
|
{
|
|
465
637
|
role: "button",
|
|
@@ -481,15 +653,15 @@ function HomeScreen({ nav }) {
|
|
|
481
653
|
userSelect: "none"
|
|
482
654
|
},
|
|
483
655
|
children: [
|
|
484
|
-
/* @__PURE__ */
|
|
485
|
-
/* @__PURE__ */
|
|
656
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: unreadCount }),
|
|
657
|
+
/* @__PURE__ */ jsxs2("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
|
|
486
658
|
"unread message",
|
|
487
659
|
unreadCount !== 1 ? "s" : ""
|
|
488
660
|
] }),
|
|
489
|
-
/* @__PURE__ */
|
|
661
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "View Messages \u2192" })
|
|
490
662
|
]
|
|
491
663
|
}
|
|
492
|
-
) : /* @__PURE__ */
|
|
664
|
+
) : /* @__PURE__ */ jsxs2(
|
|
493
665
|
"div",
|
|
494
666
|
{
|
|
495
667
|
style: {
|
|
@@ -503,9 +675,9 @@ function HomeScreen({ nav }) {
|
|
|
503
675
|
marginBottom: 20
|
|
504
676
|
},
|
|
505
677
|
children: [
|
|
506
|
-
/* @__PURE__ */
|
|
507
|
-
/* @__PURE__ */
|
|
508
|
-
totalTests > 0 && /* @__PURE__ */
|
|
678
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 36, marginBottom: 8 }, children: "\u2705" }),
|
|
679
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary }, children: "All caught up!" }),
|
|
680
|
+
totalTests > 0 && /* @__PURE__ */ jsxs2("span", { style: { fontSize: 14, color: colors.textMuted, marginTop: 4 }, children: [
|
|
509
681
|
completedCount,
|
|
510
682
|
"/",
|
|
511
683
|
totalTests,
|
|
@@ -514,7 +686,7 @@ function HomeScreen({ nav }) {
|
|
|
514
686
|
]
|
|
515
687
|
}
|
|
516
688
|
),
|
|
517
|
-
/* @__PURE__ */
|
|
689
|
+
/* @__PURE__ */ jsxs2(
|
|
518
690
|
"div",
|
|
519
691
|
{
|
|
520
692
|
style: {
|
|
@@ -524,7 +696,7 @@ function HomeScreen({ nav }) {
|
|
|
524
696
|
marginBottom: 20
|
|
525
697
|
},
|
|
526
698
|
children: [
|
|
527
|
-
/* @__PURE__ */
|
|
699
|
+
/* @__PURE__ */ jsxs2(
|
|
528
700
|
"div",
|
|
529
701
|
{
|
|
530
702
|
role: "button",
|
|
@@ -546,9 +718,9 @@ function HomeScreen({ nav }) {
|
|
|
546
718
|
userSelect: "none"
|
|
547
719
|
},
|
|
548
720
|
children: [
|
|
549
|
-
/* @__PURE__ */
|
|
550
|
-
/* @__PURE__ */
|
|
551
|
-
pendingCount > 0 && /* @__PURE__ */
|
|
721
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u2705" }),
|
|
722
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Tests" }),
|
|
723
|
+
pendingCount > 0 && /* @__PURE__ */ jsx3(
|
|
552
724
|
"span",
|
|
553
725
|
{
|
|
554
726
|
style: {
|
|
@@ -574,7 +746,7 @@ function HomeScreen({ nav }) {
|
|
|
574
746
|
]
|
|
575
747
|
}
|
|
576
748
|
),
|
|
577
|
-
/* @__PURE__ */
|
|
749
|
+
/* @__PURE__ */ jsxs2(
|
|
578
750
|
"div",
|
|
579
751
|
{
|
|
580
752
|
role: "button",
|
|
@@ -596,12 +768,12 @@ function HomeScreen({ nav }) {
|
|
|
596
768
|
userSelect: "none"
|
|
597
769
|
},
|
|
598
770
|
children: [
|
|
599
|
-
/* @__PURE__ */
|
|
600
|
-
/* @__PURE__ */
|
|
771
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F41B}" }),
|
|
772
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Report Bug" })
|
|
601
773
|
]
|
|
602
774
|
}
|
|
603
775
|
),
|
|
604
|
-
/* @__PURE__ */
|
|
776
|
+
/* @__PURE__ */ jsxs2(
|
|
605
777
|
"div",
|
|
606
778
|
{
|
|
607
779
|
role: "button",
|
|
@@ -623,12 +795,12 @@ function HomeScreen({ nav }) {
|
|
|
623
795
|
userSelect: "none"
|
|
624
796
|
},
|
|
625
797
|
children: [
|
|
626
|
-
/* @__PURE__ */
|
|
627
|
-
/* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4A1}" }),
|
|
799
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Feedback" })
|
|
628
800
|
]
|
|
629
801
|
}
|
|
630
802
|
),
|
|
631
|
-
/* @__PURE__ */
|
|
803
|
+
/* @__PURE__ */ jsxs2(
|
|
632
804
|
"div",
|
|
633
805
|
{
|
|
634
806
|
role: "button",
|
|
@@ -650,9 +822,9 @@ function HomeScreen({ nav }) {
|
|
|
650
822
|
userSelect: "none"
|
|
651
823
|
},
|
|
652
824
|
children: [
|
|
653
|
-
/* @__PURE__ */
|
|
654
|
-
/* @__PURE__ */
|
|
655
|
-
unreadCount > 0 && /* @__PURE__ */
|
|
825
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4AC}" }),
|
|
826
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Messages" }),
|
|
827
|
+
unreadCount > 0 && /* @__PURE__ */ jsx3(
|
|
656
828
|
"span",
|
|
657
829
|
{
|
|
658
830
|
style: {
|
|
@@ -681,8 +853,8 @@ function HomeScreen({ nav }) {
|
|
|
681
853
|
]
|
|
682
854
|
}
|
|
683
855
|
),
|
|
684
|
-
/* @__PURE__ */
|
|
685
|
-
/* @__PURE__ */
|
|
856
|
+
/* @__PURE__ */ jsxs2("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [
|
|
857
|
+
/* @__PURE__ */ jsxs2(
|
|
686
858
|
"div",
|
|
687
859
|
{
|
|
688
860
|
role: "button",
|
|
@@ -704,12 +876,12 @@ function HomeScreen({ nav }) {
|
|
|
704
876
|
userSelect: "none"
|
|
705
877
|
},
|
|
706
878
|
children: [
|
|
707
|
-
/* @__PURE__ */
|
|
708
|
-
/* @__PURE__ */
|
|
879
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 22, fontWeight: 700, color: "#f97316" }, children: issueCounts.open }),
|
|
880
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Open" })
|
|
709
881
|
]
|
|
710
882
|
}
|
|
711
883
|
),
|
|
712
|
-
/* @__PURE__ */
|
|
884
|
+
/* @__PURE__ */ jsxs2(
|
|
713
885
|
"div",
|
|
714
886
|
{
|
|
715
887
|
role: "button",
|
|
@@ -731,12 +903,12 @@ function HomeScreen({ nav }) {
|
|
|
731
903
|
userSelect: "none"
|
|
732
904
|
},
|
|
733
905
|
children: [
|
|
734
|
-
/* @__PURE__ */
|
|
735
|
-
/* @__PURE__ */
|
|
906
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 22, fontWeight: 700, color: "#22c55e" }, children: issueCounts.done }),
|
|
907
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Done" })
|
|
736
908
|
]
|
|
737
909
|
}
|
|
738
910
|
),
|
|
739
|
-
/* @__PURE__ */
|
|
911
|
+
/* @__PURE__ */ jsxs2(
|
|
740
912
|
"div",
|
|
741
913
|
{
|
|
742
914
|
role: "button",
|
|
@@ -758,14 +930,14 @@ function HomeScreen({ nav }) {
|
|
|
758
930
|
userSelect: "none"
|
|
759
931
|
},
|
|
760
932
|
children: [
|
|
761
|
-
/* @__PURE__ */
|
|
762
|
-
/* @__PURE__ */
|
|
933
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 22, fontWeight: 700, color: "#ef4444" }, children: issueCounts.reopened }),
|
|
934
|
+
/* @__PURE__ */ jsx3("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Reopened" })
|
|
763
935
|
]
|
|
764
936
|
}
|
|
765
937
|
)
|
|
766
938
|
] }),
|
|
767
|
-
totalTests > 0 && /* @__PURE__ */
|
|
768
|
-
/* @__PURE__ */
|
|
939
|
+
totalTests > 0 && /* @__PURE__ */ jsxs2("div", { style: { marginBottom: 16 }, children: [
|
|
940
|
+
/* @__PURE__ */ jsx3(
|
|
769
941
|
"div",
|
|
770
942
|
{
|
|
771
943
|
style: {
|
|
@@ -775,7 +947,7 @@ function HomeScreen({ nav }) {
|
|
|
775
947
|
overflow: "hidden",
|
|
776
948
|
marginBottom: 6
|
|
777
949
|
},
|
|
778
|
-
children: /* @__PURE__ */
|
|
950
|
+
children: /* @__PURE__ */ jsx3(
|
|
779
951
|
"div",
|
|
780
952
|
{
|
|
781
953
|
style: {
|
|
@@ -789,14 +961,14 @@ function HomeScreen({ nav }) {
|
|
|
789
961
|
)
|
|
790
962
|
}
|
|
791
963
|
),
|
|
792
|
-
/* @__PURE__ */
|
|
964
|
+
/* @__PURE__ */ jsxs2("div", { style: { fontSize: 12, color: colors.textMuted, textAlign: "center" }, children: [
|
|
793
965
|
completedCount,
|
|
794
966
|
"/",
|
|
795
967
|
totalTests,
|
|
796
968
|
" tests completed"
|
|
797
969
|
] })
|
|
798
970
|
] }),
|
|
799
|
-
/* @__PURE__ */
|
|
971
|
+
/* @__PURE__ */ jsx3("div", { style: { display: "flex", justifyContent: "center", padding: "8px 0" }, children: /* @__PURE__ */ jsx3(
|
|
800
972
|
"button",
|
|
801
973
|
{
|
|
802
974
|
type: "button",
|
|
@@ -821,7 +993,7 @@ function HomeScreen({ nav }) {
|
|
|
821
993
|
|
|
822
994
|
// src/widget/screens/TestDetailScreen.tsx
|
|
823
995
|
import { useState as useState2, useEffect as useEffect3, useCallback as useCallback2 } from "react";
|
|
824
|
-
import { Fragment, jsx as
|
|
996
|
+
import { Fragment, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
825
997
|
function TestDetailScreen({ testId, nav }) {
|
|
826
998
|
const { client, assignments, currentAssignment, refreshAssignments, onNavigate } = useBugBear();
|
|
827
999
|
const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
|
|
@@ -909,7 +1081,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
909
1081
|
}
|
|
910
1082
|
}, [client, displayedAssignment, selectedSkipReason, skipNotes, refreshAssignments, assignments, nav]);
|
|
911
1083
|
if (!displayedAssignment) {
|
|
912
|
-
return /* @__PURE__ */
|
|
1084
|
+
return /* @__PURE__ */ jsxs3(
|
|
913
1085
|
"div",
|
|
914
1086
|
{
|
|
915
1087
|
style: {
|
|
@@ -920,10 +1092,10 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
920
1092
|
padding: 40
|
|
921
1093
|
},
|
|
922
1094
|
children: [
|
|
923
|
-
/* @__PURE__ */
|
|
924
|
-
/* @__PURE__ */
|
|
925
|
-
/* @__PURE__ */
|
|
926
|
-
/* @__PURE__ */
|
|
1095
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 48, marginBottom: 12 }, children: "\u2705" }),
|
|
1096
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary, marginBottom: 4 }, children: "No tests assigned" }),
|
|
1097
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 20 }, children: "Check back later for new tests" }),
|
|
1098
|
+
/* @__PURE__ */ jsx4(
|
|
927
1099
|
"button",
|
|
928
1100
|
{
|
|
929
1101
|
type: "button",
|
|
@@ -956,8 +1128,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
956
1128
|
{ reason: "dependency", label: "\u{1F517} Needs another test first" },
|
|
957
1129
|
{ reason: "other", label: "\u{1F4DD} Other reason" }
|
|
958
1130
|
];
|
|
959
|
-
return /* @__PURE__ */
|
|
960
|
-
/* @__PURE__ */
|
|
1131
|
+
return /* @__PURE__ */ jsxs3("div", { style: { paddingBottom: 16 }, children: [
|
|
1132
|
+
/* @__PURE__ */ jsxs3(
|
|
961
1133
|
"div",
|
|
962
1134
|
{
|
|
963
1135
|
style: {
|
|
@@ -967,14 +1139,14 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
967
1139
|
marginBottom: 12
|
|
968
1140
|
},
|
|
969
1141
|
children: [
|
|
970
|
-
/* @__PURE__ */
|
|
971
|
-
/* @__PURE__ */
|
|
1142
|
+
/* @__PURE__ */ jsxs3("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
1143
|
+
/* @__PURE__ */ jsxs3("span", { style: { fontSize: 13, color: colors.textMuted }, children: [
|
|
972
1144
|
"Test ",
|
|
973
1145
|
currentIndex + 1,
|
|
974
1146
|
" of ",
|
|
975
1147
|
allTests.length
|
|
976
1148
|
] }),
|
|
977
|
-
displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */
|
|
1149
|
+
displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ jsx4(
|
|
978
1150
|
"span",
|
|
979
1151
|
{
|
|
980
1152
|
style: {
|
|
@@ -993,7 +1165,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
993
1165
|
}
|
|
994
1166
|
)
|
|
995
1167
|
] }),
|
|
996
|
-
/* @__PURE__ */
|
|
1168
|
+
/* @__PURE__ */ jsx4(
|
|
997
1169
|
"button",
|
|
998
1170
|
{
|
|
999
1171
|
type: "button",
|
|
@@ -1013,7 +1185,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1013
1185
|
]
|
|
1014
1186
|
}
|
|
1015
1187
|
),
|
|
1016
|
-
displayedAssignment.isVerification && /* @__PURE__ */
|
|
1188
|
+
displayedAssignment.isVerification && /* @__PURE__ */ jsxs3(
|
|
1017
1189
|
"div",
|
|
1018
1190
|
{
|
|
1019
1191
|
style: {
|
|
@@ -1027,14 +1199,14 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1027
1199
|
marginBottom: 10
|
|
1028
1200
|
},
|
|
1029
1201
|
children: [
|
|
1030
|
-
/* @__PURE__ */
|
|
1031
|
-
/* @__PURE__ */
|
|
1032
|
-
/* @__PURE__ */
|
|
1202
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 14 }, children: "\u{1F504}" }),
|
|
1203
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Retest" }),
|
|
1204
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 12, color: "#d97706" }, children: "\u2014 Verify bug fix" })
|
|
1033
1205
|
]
|
|
1034
1206
|
}
|
|
1035
1207
|
),
|
|
1036
|
-
/* @__PURE__ */
|
|
1037
|
-
testCase.testKey && /* @__PURE__ */
|
|
1208
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 20, fontWeight: 700, color: colors.textPrimary, marginBottom: 4 }, children: testCase.title }),
|
|
1209
|
+
testCase.testKey && /* @__PURE__ */ jsx4(
|
|
1038
1210
|
"div",
|
|
1039
1211
|
{
|
|
1040
1212
|
style: {
|
|
@@ -1046,7 +1218,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1046
1218
|
children: testCase.testKey
|
|
1047
1219
|
}
|
|
1048
1220
|
),
|
|
1049
|
-
/* @__PURE__ */
|
|
1221
|
+
/* @__PURE__ */ jsx4(
|
|
1050
1222
|
"button",
|
|
1051
1223
|
{
|
|
1052
1224
|
type: "button",
|
|
@@ -1062,7 +1234,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1062
1234
|
cursor: "pointer",
|
|
1063
1235
|
textAlign: "left"
|
|
1064
1236
|
},
|
|
1065
|
-
children: /* @__PURE__ */
|
|
1237
|
+
children: /* @__PURE__ */ jsxs3("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textSecondary }, children: [
|
|
1066
1238
|
showSteps ? "\u25BC" : "\u25B6",
|
|
1067
1239
|
" ",
|
|
1068
1240
|
info.icon,
|
|
@@ -1071,9 +1243,9 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1071
1243
|
] })
|
|
1072
1244
|
}
|
|
1073
1245
|
),
|
|
1074
|
-
showSteps && /* @__PURE__ */
|
|
1075
|
-
template === "steps" && steps.map((step, idx) => /* @__PURE__ */
|
|
1076
|
-
/* @__PURE__ */
|
|
1246
|
+
showSteps && /* @__PURE__ */ jsxs3("div", { style: { marginBottom: 16 }, children: [
|
|
1247
|
+
template === "steps" && steps.map((step, idx) => /* @__PURE__ */ jsxs3("div", { style: { display: "flex", marginBottom: 10 }, children: [
|
|
1248
|
+
/* @__PURE__ */ jsx4(
|
|
1077
1249
|
"div",
|
|
1078
1250
|
{
|
|
1079
1251
|
style: {
|
|
@@ -1088,12 +1260,12 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1088
1260
|
marginTop: 2,
|
|
1089
1261
|
flexShrink: 0
|
|
1090
1262
|
},
|
|
1091
|
-
children: /* @__PURE__ */
|
|
1263
|
+
children: /* @__PURE__ */ jsx4("span", { style: { fontSize: 12, fontWeight: 600, color: "#fff" }, children: step.stepNumber })
|
|
1092
1264
|
}
|
|
1093
1265
|
),
|
|
1094
|
-
/* @__PURE__ */
|
|
1095
|
-
/* @__PURE__ */
|
|
1096
|
-
step.expectedResult && /* @__PURE__ */
|
|
1266
|
+
/* @__PURE__ */ jsxs3("div", { style: { flex: 1 }, children: [
|
|
1267
|
+
/* @__PURE__ */ jsx4("span", { style: { fontSize: 14, color: colors.textPrimary, lineHeight: "20px" }, children: step.action }),
|
|
1268
|
+
step.expectedResult && /* @__PURE__ */ jsxs3(
|
|
1097
1269
|
"div",
|
|
1098
1270
|
{
|
|
1099
1271
|
style: {
|
|
@@ -1110,8 +1282,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1110
1282
|
)
|
|
1111
1283
|
] })
|
|
1112
1284
|
] }, idx)),
|
|
1113
|
-
template === "checklist" && /* @__PURE__ */
|
|
1114
|
-
steps.map((step, idx) => /* @__PURE__ */
|
|
1285
|
+
template === "checklist" && /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
1286
|
+
steps.map((step, idx) => /* @__PURE__ */ jsxs3(
|
|
1115
1287
|
"button",
|
|
1116
1288
|
{
|
|
1117
1289
|
type: "button",
|
|
@@ -1137,7 +1309,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1137
1309
|
textAlign: "left"
|
|
1138
1310
|
},
|
|
1139
1311
|
children: [
|
|
1140
|
-
/* @__PURE__ */
|
|
1312
|
+
/* @__PURE__ */ jsx4(
|
|
1141
1313
|
"div",
|
|
1142
1314
|
{
|
|
1143
1315
|
style: {
|
|
@@ -1152,10 +1324,10 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1152
1324
|
alignItems: "center",
|
|
1153
1325
|
flexShrink: 0
|
|
1154
1326
|
},
|
|
1155
|
-
children: criteriaResults[idx] === true && /* @__PURE__ */
|
|
1327
|
+
children: criteriaResults[idx] === true && /* @__PURE__ */ jsx4("span", { style: { color: "#fff", fontSize: 14, fontWeight: "bold" }, children: "\u2713" })
|
|
1156
1328
|
}
|
|
1157
1329
|
),
|
|
1158
|
-
/* @__PURE__ */
|
|
1330
|
+
/* @__PURE__ */ jsx4(
|
|
1159
1331
|
"span",
|
|
1160
1332
|
{
|
|
1161
1333
|
style: {
|
|
@@ -1171,7 +1343,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1171
1343
|
},
|
|
1172
1344
|
idx
|
|
1173
1345
|
)),
|
|
1174
|
-
Object.keys(criteriaResults).length > 0 && /* @__PURE__ */
|
|
1346
|
+
Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ jsx4("div", { style: { display: "flex", justifyContent: "flex-end", paddingTop: 4 }, children: /* @__PURE__ */ jsx4(
|
|
1175
1347
|
"button",
|
|
1176
1348
|
{
|
|
1177
1349
|
type: "button",
|
|
@@ -1188,8 +1360,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1188
1360
|
}
|
|
1189
1361
|
) })
|
|
1190
1362
|
] }),
|
|
1191
|
-
template === "rubric" && steps.map((step, idx) => /* @__PURE__ */
|
|
1192
|
-
/* @__PURE__ */
|
|
1363
|
+
template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ jsxs3("div", { style: { marginBottom: 14 }, children: [
|
|
1364
|
+
/* @__PURE__ */ jsxs3(
|
|
1193
1365
|
"div",
|
|
1194
1366
|
{
|
|
1195
1367
|
style: {
|
|
@@ -1205,7 +1377,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1205
1377
|
]
|
|
1206
1378
|
}
|
|
1207
1379
|
),
|
|
1208
|
-
step.expectedResult && /* @__PURE__ */
|
|
1380
|
+
step.expectedResult && /* @__PURE__ */ jsx4(
|
|
1209
1381
|
"div",
|
|
1210
1382
|
{
|
|
1211
1383
|
style: {
|
|
@@ -1217,8 +1389,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1217
1389
|
children: step.expectedResult
|
|
1218
1390
|
}
|
|
1219
1391
|
),
|
|
1220
|
-
rubricMode === "pass_fail" ? /* @__PURE__ */
|
|
1221
|
-
/* @__PURE__ */
|
|
1392
|
+
rubricMode === "pass_fail" ? /* @__PURE__ */ jsxs3("div", { style: { display: "flex", gap: 8, marginLeft: 16 }, children: [
|
|
1393
|
+
/* @__PURE__ */ jsx4(
|
|
1222
1394
|
"button",
|
|
1223
1395
|
{
|
|
1224
1396
|
type: "button",
|
|
@@ -1239,7 +1411,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1239
1411
|
children: "\u2713 Pass"
|
|
1240
1412
|
}
|
|
1241
1413
|
),
|
|
1242
|
-
/* @__PURE__ */
|
|
1414
|
+
/* @__PURE__ */ jsx4(
|
|
1243
1415
|
"button",
|
|
1244
1416
|
{
|
|
1245
1417
|
type: "button",
|
|
@@ -1260,7 +1432,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1260
1432
|
children: "\u2717 Fail"
|
|
1261
1433
|
}
|
|
1262
1434
|
)
|
|
1263
|
-
] }) : /* @__PURE__ */
|
|
1435
|
+
] }) : /* @__PURE__ */ jsx4("div", { style: { display: "flex", gap: 6, marginLeft: 16 }, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ jsx4(
|
|
1264
1436
|
"button",
|
|
1265
1437
|
{
|
|
1266
1438
|
type: "button",
|
|
@@ -1284,7 +1456,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1284
1456
|
n
|
|
1285
1457
|
)) })
|
|
1286
1458
|
] }, idx)),
|
|
1287
|
-
template === "freeform" && /* @__PURE__ */
|
|
1459
|
+
template === "freeform" && /* @__PURE__ */ jsxs3(
|
|
1288
1460
|
"div",
|
|
1289
1461
|
{
|
|
1290
1462
|
style: {
|
|
@@ -1294,15 +1466,15 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1294
1466
|
border: "1px solid #854d0e"
|
|
1295
1467
|
},
|
|
1296
1468
|
children: [
|
|
1297
|
-
/* @__PURE__ */
|
|
1298
|
-
/* @__PURE__ */
|
|
1299
|
-
/* @__PURE__ */
|
|
1300
|
-
/* @__PURE__ */
|
|
1469
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 14, color: "#fde68a", marginBottom: 6 }, children: "Review the area and note:" }),
|
|
1470
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 What works well" }),
|
|
1471
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Issues or concerns" }),
|
|
1472
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Suggestions" })
|
|
1301
1473
|
]
|
|
1302
1474
|
}
|
|
1303
1475
|
)
|
|
1304
1476
|
] }),
|
|
1305
|
-
testCase.expectedResult && /* @__PURE__ */
|
|
1477
|
+
testCase.expectedResult && /* @__PURE__ */ jsxs3(
|
|
1306
1478
|
"div",
|
|
1307
1479
|
{
|
|
1308
1480
|
style: {
|
|
@@ -1313,12 +1485,12 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1313
1485
|
marginBottom: 12
|
|
1314
1486
|
},
|
|
1315
1487
|
children: [
|
|
1316
|
-
/* @__PURE__ */
|
|
1317
|
-
/* @__PURE__ */
|
|
1488
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 13, fontWeight: 600, color: colors.green, marginBottom: 4 }, children: "\u2705 Expected Result" }),
|
|
1489
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 14, color: "#bbf7d0", lineHeight: "20px" }, children: testCase.expectedResult })
|
|
1318
1490
|
]
|
|
1319
1491
|
}
|
|
1320
1492
|
),
|
|
1321
|
-
testCase.targetRoute && onNavigate && /* @__PURE__ */
|
|
1493
|
+
testCase.targetRoute && onNavigate && /* @__PURE__ */ jsx4(
|
|
1322
1494
|
"button",
|
|
1323
1495
|
{
|
|
1324
1496
|
type: "button",
|
|
@@ -1340,7 +1512,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1340
1512
|
children: "\u{1F9ED} Go to test location"
|
|
1341
1513
|
}
|
|
1342
1514
|
),
|
|
1343
|
-
/* @__PURE__ */
|
|
1515
|
+
/* @__PURE__ */ jsxs3(
|
|
1344
1516
|
"button",
|
|
1345
1517
|
{
|
|
1346
1518
|
type: "button",
|
|
@@ -1364,7 +1536,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1364
1536
|
]
|
|
1365
1537
|
}
|
|
1366
1538
|
),
|
|
1367
|
-
showDetails && /* @__PURE__ */
|
|
1539
|
+
showDetails && /* @__PURE__ */ jsxs3(
|
|
1368
1540
|
"div",
|
|
1369
1541
|
{
|
|
1370
1542
|
style: {
|
|
@@ -1375,7 +1547,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1375
1547
|
marginBottom: 16
|
|
1376
1548
|
},
|
|
1377
1549
|
children: [
|
|
1378
|
-
testCase.testKey && /* @__PURE__ */
|
|
1550
|
+
testCase.testKey && /* @__PURE__ */ jsxs3(
|
|
1379
1551
|
"div",
|
|
1380
1552
|
{
|
|
1381
1553
|
style: {
|
|
@@ -1393,16 +1565,16 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1393
1565
|
]
|
|
1394
1566
|
}
|
|
1395
1567
|
),
|
|
1396
|
-
testCase.description && /* @__PURE__ */
|
|
1397
|
-
testCase.group && /* @__PURE__ */
|
|
1568
|
+
testCase.description && /* @__PURE__ */ jsx4("div", { style: { fontSize: 13, color: colors.textSecondary, lineHeight: "18px" }, children: testCase.description }),
|
|
1569
|
+
testCase.group && /* @__PURE__ */ jsx4("div", { style: { marginTop: 8 }, children: /* @__PURE__ */ jsxs3("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
|
|
1398
1570
|
"\u{1F4C1} ",
|
|
1399
1571
|
testCase.group.name
|
|
1400
1572
|
] }) })
|
|
1401
1573
|
]
|
|
1402
1574
|
}
|
|
1403
1575
|
),
|
|
1404
|
-
/* @__PURE__ */
|
|
1405
|
-
/* @__PURE__ */
|
|
1576
|
+
/* @__PURE__ */ jsxs3("div", { style: { display: "flex", gap: 10, marginTop: 8 }, children: [
|
|
1577
|
+
/* @__PURE__ */ jsx4(
|
|
1406
1578
|
"button",
|
|
1407
1579
|
{
|
|
1408
1580
|
type: "button",
|
|
@@ -1425,7 +1597,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1425
1597
|
children: isSubmitting ? "Failing..." : "Fail"
|
|
1426
1598
|
}
|
|
1427
1599
|
),
|
|
1428
|
-
/* @__PURE__ */
|
|
1600
|
+
/* @__PURE__ */ jsx4(
|
|
1429
1601
|
"button",
|
|
1430
1602
|
{
|
|
1431
1603
|
type: "button",
|
|
@@ -1448,7 +1620,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1448
1620
|
children: "Skip"
|
|
1449
1621
|
}
|
|
1450
1622
|
),
|
|
1451
|
-
/* @__PURE__ */
|
|
1623
|
+
/* @__PURE__ */ jsx4(
|
|
1452
1624
|
"button",
|
|
1453
1625
|
{
|
|
1454
1626
|
type: "button",
|
|
@@ -1472,7 +1644,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1472
1644
|
}
|
|
1473
1645
|
)
|
|
1474
1646
|
] }),
|
|
1475
|
-
showSkipModal && /* @__PURE__ */
|
|
1647
|
+
showSkipModal && /* @__PURE__ */ jsx4(
|
|
1476
1648
|
"div",
|
|
1477
1649
|
{
|
|
1478
1650
|
style: {
|
|
@@ -1485,7 +1657,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1485
1657
|
zIndex: 9999,
|
|
1486
1658
|
padding: 24
|
|
1487
1659
|
},
|
|
1488
|
-
children: /* @__PURE__ */
|
|
1660
|
+
children: /* @__PURE__ */ jsxs3(
|
|
1489
1661
|
"div",
|
|
1490
1662
|
{
|
|
1491
1663
|
style: {
|
|
@@ -1497,7 +1669,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1497
1669
|
width: "100%"
|
|
1498
1670
|
},
|
|
1499
1671
|
children: [
|
|
1500
|
-
/* @__PURE__ */
|
|
1672
|
+
/* @__PURE__ */ jsx4(
|
|
1501
1673
|
"div",
|
|
1502
1674
|
{
|
|
1503
1675
|
style: {
|
|
@@ -1509,8 +1681,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1509
1681
|
children: "Skip this test?"
|
|
1510
1682
|
}
|
|
1511
1683
|
),
|
|
1512
|
-
/* @__PURE__ */
|
|
1513
|
-
skipReasons.map(({ reason, label }) => /* @__PURE__ */
|
|
1684
|
+
/* @__PURE__ */ jsx4("div", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 12 }, children: "Select a reason:" }),
|
|
1685
|
+
skipReasons.map(({ reason, label }) => /* @__PURE__ */ jsx4(
|
|
1514
1686
|
"button",
|
|
1515
1687
|
{
|
|
1516
1688
|
type: "button",
|
|
@@ -1536,7 +1708,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1536
1708
|
},
|
|
1537
1709
|
reason
|
|
1538
1710
|
)),
|
|
1539
|
-
/* @__PURE__ */
|
|
1711
|
+
/* @__PURE__ */ jsx4(
|
|
1540
1712
|
"textarea",
|
|
1541
1713
|
{
|
|
1542
1714
|
value: skipNotes,
|
|
@@ -1559,8 +1731,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1559
1731
|
}
|
|
1560
1732
|
}
|
|
1561
1733
|
),
|
|
1562
|
-
/* @__PURE__ */
|
|
1563
|
-
/* @__PURE__ */
|
|
1734
|
+
/* @__PURE__ */ jsxs3("div", { style: { display: "flex", gap: 10, marginTop: 14 }, children: [
|
|
1735
|
+
/* @__PURE__ */ jsx4(
|
|
1564
1736
|
"button",
|
|
1565
1737
|
{
|
|
1566
1738
|
type: "button",
|
|
@@ -1584,7 +1756,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1584
1756
|
children: "Cancel"
|
|
1585
1757
|
}
|
|
1586
1758
|
),
|
|
1587
|
-
/* @__PURE__ */
|
|
1759
|
+
/* @__PURE__ */ jsx4(
|
|
1588
1760
|
"button",
|
|
1589
1761
|
{
|
|
1590
1762
|
type: "button",
|
|
@@ -1618,11 +1790,14 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1618
1790
|
|
|
1619
1791
|
// src/widget/screens/TestListScreen.tsx
|
|
1620
1792
|
import { useState as useState3, useMemo, useCallback as useCallback3 } from "react";
|
|
1621
|
-
import { Fragment as Fragment2, jsx as
|
|
1793
|
+
import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1622
1794
|
function TestListScreen({ nav }) {
|
|
1623
|
-
const { assignments, currentAssignment, refreshAssignments } = useBugBear();
|
|
1795
|
+
const { assignments, currentAssignment, refreshAssignments, isLoading } = useBugBear();
|
|
1624
1796
|
const [filter, setFilter] = useState3("all");
|
|
1625
1797
|
const [roleFilter, setRoleFilter] = useState3(null);
|
|
1798
|
+
const [trackFilter, setTrackFilter] = useState3(null);
|
|
1799
|
+
const [searchQuery, setSearchQuery] = useState3("");
|
|
1800
|
+
const [sortMode, setSortMode] = useState3("priority");
|
|
1626
1801
|
const [collapsedFolders, setCollapsedFolders] = useState3(/* @__PURE__ */ new Set());
|
|
1627
1802
|
const availableRoles = useMemo(() => {
|
|
1628
1803
|
const roleMap = /* @__PURE__ */ new Map();
|
|
@@ -1631,6 +1806,13 @@ function TestListScreen({ nav }) {
|
|
|
1631
1806
|
}
|
|
1632
1807
|
return Array.from(roleMap.values());
|
|
1633
1808
|
}, [assignments]);
|
|
1809
|
+
const availableTracks = useMemo(() => {
|
|
1810
|
+
const trackMap = /* @__PURE__ */ new Map();
|
|
1811
|
+
for (const a of assignments) {
|
|
1812
|
+
if (a.testCase.track) trackMap.set(a.testCase.track.id, a.testCase.track);
|
|
1813
|
+
}
|
|
1814
|
+
return Array.from(trackMap.values());
|
|
1815
|
+
}, [assignments]);
|
|
1634
1816
|
const selectedRole = availableRoles.find((r) => r.id === roleFilter);
|
|
1635
1817
|
const groupedAssignments = useMemo(() => {
|
|
1636
1818
|
const groups = /* @__PURE__ */ new Map();
|
|
@@ -1664,6 +1846,12 @@ function TestListScreen({ nav }) {
|
|
|
1664
1846
|
folder.assignments.sort((a, b) => {
|
|
1665
1847
|
if (a.isVerification && !b.isVerification) return -1;
|
|
1666
1848
|
if (!a.isVerification && b.isVerification) return 1;
|
|
1849
|
+
if (sortMode === "alpha") {
|
|
1850
|
+
return a.testCase.title.localeCompare(b.testCase.title);
|
|
1851
|
+
}
|
|
1852
|
+
if (sortMode === "recent") {
|
|
1853
|
+
return 0;
|
|
1854
|
+
}
|
|
1667
1855
|
const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
|
|
1668
1856
|
if (sd !== 0) return sd;
|
|
1669
1857
|
return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
|
|
@@ -1675,7 +1863,7 @@ function TestListScreen({ nav }) {
|
|
|
1675
1863
|
if (!b.group) return -1;
|
|
1676
1864
|
return a.group.sortOrder - b.group.sortOrder;
|
|
1677
1865
|
});
|
|
1678
|
-
}, [assignments]);
|
|
1866
|
+
}, [assignments, sortMode]);
|
|
1679
1867
|
const toggleFolder = useCallback3((id) => {
|
|
1680
1868
|
setCollapsedFolders((prev) => {
|
|
1681
1869
|
const next = new Set(prev);
|
|
@@ -1684,13 +1872,20 @@ function TestListScreen({ nav }) {
|
|
|
1684
1872
|
return next;
|
|
1685
1873
|
});
|
|
1686
1874
|
}, []);
|
|
1687
|
-
const filterAssignment = (a) => {
|
|
1875
|
+
const filterAssignment = useCallback3((a) => {
|
|
1688
1876
|
if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
|
|
1877
|
+
if (trackFilter && a.testCase.track?.id !== trackFilter) return false;
|
|
1878
|
+
if (searchQuery) {
|
|
1879
|
+
const q = searchQuery.toLowerCase();
|
|
1880
|
+
const titleMatch = a.testCase.title.toLowerCase().includes(q);
|
|
1881
|
+
const keyMatch = a.testCase.testKey.toLowerCase().includes(q);
|
|
1882
|
+
if (!titleMatch && !keyMatch) return false;
|
|
1883
|
+
}
|
|
1689
1884
|
if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
|
|
1690
1885
|
if (filter === "done") return a.status === "passed";
|
|
1691
1886
|
if (filter === "reopened") return a.status === "failed";
|
|
1692
1887
|
return true;
|
|
1693
|
-
};
|
|
1888
|
+
}, [roleFilter, trackFilter, searchQuery, filter]);
|
|
1694
1889
|
const pendingCount = assignments.filter(
|
|
1695
1890
|
(a) => a.status === "pending" || a.status === "in_progress"
|
|
1696
1891
|
).length;
|
|
@@ -1702,8 +1897,9 @@ function TestListScreen({ nav }) {
|
|
|
1702
1897
|
{ key: "done", label: "Done", count: doneCount },
|
|
1703
1898
|
{ key: "reopened", label: "Re Opened", count: reopenedCount }
|
|
1704
1899
|
];
|
|
1705
|
-
return /* @__PURE__ */
|
|
1706
|
-
|
|
1900
|
+
if (isLoading) return /* @__PURE__ */ jsx5(TestListScreenSkeleton, {});
|
|
1901
|
+
return /* @__PURE__ */ jsxs4("div", { children: [
|
|
1902
|
+
/* @__PURE__ */ jsx5("div", { style: { display: "flex", gap: 8, marginBottom: availableRoles.length >= 2 ? 8 : 16 }, children: filters.map((f) => /* @__PURE__ */ jsxs4(
|
|
1707
1903
|
"button",
|
|
1708
1904
|
{
|
|
1709
1905
|
type: "button",
|
|
@@ -1730,9 +1926,9 @@ function TestListScreen({ nav }) {
|
|
|
1730
1926
|
},
|
|
1731
1927
|
f.key
|
|
1732
1928
|
)) }),
|
|
1733
|
-
availableRoles.length >= 2 && /* @__PURE__ */
|
|
1734
|
-
/* @__PURE__ */
|
|
1735
|
-
/* @__PURE__ */
|
|
1929
|
+
availableRoles.length >= 2 && /* @__PURE__ */ jsxs4("div", { style: { marginBottom: 12 }, children: [
|
|
1930
|
+
/* @__PURE__ */ jsxs4("div", { style: { display: "flex", gap: 6, flexWrap: "wrap", marginBottom: selectedRole?.loginHint ? 8 : 0 }, children: [
|
|
1931
|
+
/* @__PURE__ */ jsx5(
|
|
1736
1932
|
"button",
|
|
1737
1933
|
{
|
|
1738
1934
|
type: "button",
|
|
@@ -1755,7 +1951,7 @@ function TestListScreen({ nav }) {
|
|
|
1755
1951
|
),
|
|
1756
1952
|
availableRoles.map((role) => {
|
|
1757
1953
|
const isActive = roleFilter === role.id;
|
|
1758
|
-
return /* @__PURE__ */
|
|
1954
|
+
return /* @__PURE__ */ jsxs4(
|
|
1759
1955
|
"button",
|
|
1760
1956
|
{
|
|
1761
1957
|
type: "button",
|
|
@@ -1777,7 +1973,7 @@ function TestListScreen({ nav }) {
|
|
|
1777
1973
|
fontWeight: isActive ? 600 : 400
|
|
1778
1974
|
},
|
|
1779
1975
|
children: [
|
|
1780
|
-
/* @__PURE__ */
|
|
1976
|
+
/* @__PURE__ */ jsx5("span", { style: {
|
|
1781
1977
|
width: 6,
|
|
1782
1978
|
height: 6,
|
|
1783
1979
|
borderRadius: 3,
|
|
@@ -1791,7 +1987,7 @@ function TestListScreen({ nav }) {
|
|
|
1791
1987
|
);
|
|
1792
1988
|
})
|
|
1793
1989
|
] }),
|
|
1794
|
-
selectedRole?.loginHint && /* @__PURE__ */
|
|
1990
|
+
selectedRole?.loginHint && /* @__PURE__ */ jsxs4("div", { style: {
|
|
1795
1991
|
fontSize: 11,
|
|
1796
1992
|
color: colors.textSecondary,
|
|
1797
1993
|
backgroundColor: selectedRole.color + "10",
|
|
@@ -1803,6 +1999,103 @@ function TestListScreen({ nav }) {
|
|
|
1803
1999
|
selectedRole.loginHint
|
|
1804
2000
|
] })
|
|
1805
2001
|
] }),
|
|
2002
|
+
/* @__PURE__ */ jsx5("div", { style: { marginBottom: 8 }, children: /* @__PURE__ */ jsx5(
|
|
2003
|
+
"input",
|
|
2004
|
+
{
|
|
2005
|
+
type: "text",
|
|
2006
|
+
value: searchQuery,
|
|
2007
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
2008
|
+
placeholder: "Search tests...",
|
|
2009
|
+
style: {
|
|
2010
|
+
width: "100%",
|
|
2011
|
+
padding: "8px 12px",
|
|
2012
|
+
borderRadius: 8,
|
|
2013
|
+
border: `1px solid ${colors.border}`,
|
|
2014
|
+
backgroundColor: colors.card,
|
|
2015
|
+
color: colors.textPrimary,
|
|
2016
|
+
fontSize: 13,
|
|
2017
|
+
outline: "none",
|
|
2018
|
+
boxSizing: "border-box"
|
|
2019
|
+
}
|
|
2020
|
+
}
|
|
2021
|
+
) }),
|
|
2022
|
+
(availableTracks.length >= 2 || true) && /* @__PURE__ */ jsxs4("div", { style: { display: "flex", alignItems: "center", gap: 6, marginBottom: 12 }, children: [
|
|
2023
|
+
availableTracks.length >= 2 && /* @__PURE__ */ jsxs4("div", { style: { display: "flex", gap: 4, flex: 1, overflow: "auto" }, children: [
|
|
2024
|
+
/* @__PURE__ */ jsx5(
|
|
2025
|
+
"button",
|
|
2026
|
+
{
|
|
2027
|
+
type: "button",
|
|
2028
|
+
onClick: () => setTrackFilter(null),
|
|
2029
|
+
style: {
|
|
2030
|
+
padding: "3px 8px",
|
|
2031
|
+
borderRadius: 6,
|
|
2032
|
+
backgroundColor: !trackFilter ? colors.card : "transparent",
|
|
2033
|
+
border: !trackFilter ? `1px solid ${colors.border}` : "1px solid transparent",
|
|
2034
|
+
cursor: "pointer",
|
|
2035
|
+
fontSize: 11,
|
|
2036
|
+
color: !trackFilter ? colors.textPrimary : colors.textMuted,
|
|
2037
|
+
fontWeight: !trackFilter ? 600 : 400,
|
|
2038
|
+
whiteSpace: "nowrap"
|
|
2039
|
+
},
|
|
2040
|
+
children: "All Tracks"
|
|
2041
|
+
}
|
|
2042
|
+
),
|
|
2043
|
+
availableTracks.map((track) => {
|
|
2044
|
+
const isActive = trackFilter === track.id;
|
|
2045
|
+
return /* @__PURE__ */ jsxs4(
|
|
2046
|
+
"button",
|
|
2047
|
+
{
|
|
2048
|
+
type: "button",
|
|
2049
|
+
onClick: () => setTrackFilter(isActive ? null : track.id),
|
|
2050
|
+
style: {
|
|
2051
|
+
display: "flex",
|
|
2052
|
+
alignItems: "center",
|
|
2053
|
+
gap: 4,
|
|
2054
|
+
padding: "3px 8px",
|
|
2055
|
+
borderRadius: 6,
|
|
2056
|
+
backgroundColor: isActive ? track.color + "20" : "transparent",
|
|
2057
|
+
border: isActive ? `1px solid ${track.color}60` : "1px solid transparent",
|
|
2058
|
+
cursor: "pointer",
|
|
2059
|
+
fontSize: 11,
|
|
2060
|
+
color: isActive ? track.color : colors.textMuted,
|
|
2061
|
+
fontWeight: isActive ? 600 : 400,
|
|
2062
|
+
whiteSpace: "nowrap"
|
|
2063
|
+
},
|
|
2064
|
+
children: [
|
|
2065
|
+
track.icon,
|
|
2066
|
+
" ",
|
|
2067
|
+
track.name
|
|
2068
|
+
]
|
|
2069
|
+
},
|
|
2070
|
+
track.id
|
|
2071
|
+
);
|
|
2072
|
+
})
|
|
2073
|
+
] }),
|
|
2074
|
+
/* @__PURE__ */ jsx5("div", { style: { display: "flex", gap: 2, marginLeft: "auto", flexShrink: 0 }, children: [
|
|
2075
|
+
{ key: "priority", label: "\u2195 Priority" },
|
|
2076
|
+
{ key: "recent", label: "\u{1F550} Recent" },
|
|
2077
|
+
{ key: "alpha", label: "A-Z" }
|
|
2078
|
+
].map((s) => /* @__PURE__ */ jsx5(
|
|
2079
|
+
"button",
|
|
2080
|
+
{
|
|
2081
|
+
type: "button",
|
|
2082
|
+
onClick: () => setSortMode(s.key),
|
|
2083
|
+
style: {
|
|
2084
|
+
padding: "3px 8px",
|
|
2085
|
+
borderRadius: 6,
|
|
2086
|
+
backgroundColor: sortMode === s.key ? colors.card : "transparent",
|
|
2087
|
+
border: sortMode === s.key ? `1px solid ${colors.border}` : "1px solid transparent",
|
|
2088
|
+
cursor: "pointer",
|
|
2089
|
+
fontSize: 10,
|
|
2090
|
+
color: sortMode === s.key ? colors.textPrimary : colors.textMuted,
|
|
2091
|
+
fontWeight: sortMode === s.key ? 600 : 400,
|
|
2092
|
+
whiteSpace: "nowrap"
|
|
2093
|
+
},
|
|
2094
|
+
children: s.label
|
|
2095
|
+
},
|
|
2096
|
+
s.key
|
|
2097
|
+
)) })
|
|
2098
|
+
] }),
|
|
1806
2099
|
groupedAssignments.map((folder) => {
|
|
1807
2100
|
const folderId = folder.group?.id || "ungrouped";
|
|
1808
2101
|
const isCollapsed = collapsedFolders.has(folderId);
|
|
@@ -1810,8 +2103,8 @@ function TestListScreen({ nav }) {
|
|
|
1810
2103
|
if (filtered.length === 0 && filter !== "all") return null;
|
|
1811
2104
|
const completedInFolder = folder.stats.passed + folder.stats.failed;
|
|
1812
2105
|
const progressPercent = folder.stats.total > 0 ? Math.round(completedInFolder / folder.stats.total * 100) : 0;
|
|
1813
|
-
return /* @__PURE__ */
|
|
1814
|
-
/* @__PURE__ */
|
|
2106
|
+
return /* @__PURE__ */ jsxs4("div", { style: { marginBottom: 12 }, children: [
|
|
2107
|
+
/* @__PURE__ */ jsxs4(
|
|
1815
2108
|
"button",
|
|
1816
2109
|
{
|
|
1817
2110
|
type: "button",
|
|
@@ -1831,8 +2124,8 @@ function TestListScreen({ nav }) {
|
|
|
1831
2124
|
textAlign: "left"
|
|
1832
2125
|
},
|
|
1833
2126
|
children: [
|
|
1834
|
-
/* @__PURE__ */
|
|
1835
|
-
/* @__PURE__ */
|
|
2127
|
+
/* @__PURE__ */ jsx5("span", { style: { fontSize: 10, color: colors.textMuted, width: 14 }, children: isCollapsed ? "\u25B6" : "\u25BC" }),
|
|
2128
|
+
/* @__PURE__ */ jsx5(
|
|
1836
2129
|
"span",
|
|
1837
2130
|
{
|
|
1838
2131
|
style: {
|
|
@@ -1847,7 +2140,7 @@ function TestListScreen({ nav }) {
|
|
|
1847
2140
|
children: folder.group?.name || "Ungrouped"
|
|
1848
2141
|
}
|
|
1849
2142
|
),
|
|
1850
|
-
/* @__PURE__ */
|
|
2143
|
+
/* @__PURE__ */ jsx5(
|
|
1851
2144
|
"div",
|
|
1852
2145
|
{
|
|
1853
2146
|
style: {
|
|
@@ -1858,7 +2151,7 @@ function TestListScreen({ nav }) {
|
|
|
1858
2151
|
overflow: "hidden",
|
|
1859
2152
|
flexShrink: 0
|
|
1860
2153
|
},
|
|
1861
|
-
children: /* @__PURE__ */
|
|
2154
|
+
children: /* @__PURE__ */ jsx5(
|
|
1862
2155
|
"div",
|
|
1863
2156
|
{
|
|
1864
2157
|
style: {
|
|
@@ -1872,7 +2165,7 @@ function TestListScreen({ nav }) {
|
|
|
1872
2165
|
)
|
|
1873
2166
|
}
|
|
1874
2167
|
),
|
|
1875
|
-
/* @__PURE__ */
|
|
2168
|
+
/* @__PURE__ */ jsxs4(
|
|
1876
2169
|
"span",
|
|
1877
2170
|
{
|
|
1878
2171
|
style: {
|
|
@@ -1896,7 +2189,7 @@ function TestListScreen({ nav }) {
|
|
|
1896
2189
|
const badge = getStatusBadge(assignment.status);
|
|
1897
2190
|
const isCurrent = currentAssignment?.id === assignment.id;
|
|
1898
2191
|
const priorityColor = assignment.testCase.priority === "P0" ? colors.red : assignment.testCase.priority === "P1" ? colors.orange : colors.textDim;
|
|
1899
|
-
return /* @__PURE__ */
|
|
2192
|
+
return /* @__PURE__ */ jsxs4(
|
|
1900
2193
|
"button",
|
|
1901
2194
|
{
|
|
1902
2195
|
type: "button",
|
|
@@ -1918,9 +2211,9 @@ function TestListScreen({ nav }) {
|
|
|
1918
2211
|
textAlign: "left"
|
|
1919
2212
|
},
|
|
1920
2213
|
children: [
|
|
1921
|
-
/* @__PURE__ */
|
|
1922
|
-
/* @__PURE__ */
|
|
1923
|
-
/* @__PURE__ */
|
|
2214
|
+
/* @__PURE__ */ jsx5("span", { style: { fontSize: 16, marginRight: 10, width: 20, flexShrink: 0 }, children: badge.icon }),
|
|
2215
|
+
/* @__PURE__ */ jsxs4("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
2216
|
+
/* @__PURE__ */ jsx5(
|
|
1924
2217
|
"div",
|
|
1925
2218
|
{
|
|
1926
2219
|
style: {
|
|
@@ -1934,9 +2227,9 @@ function TestListScreen({ nav }) {
|
|
|
1934
2227
|
children: assignment.testCase.title
|
|
1935
2228
|
}
|
|
1936
2229
|
),
|
|
1937
|
-
/* @__PURE__ */
|
|
1938
|
-
assignment.isVerification && /* @__PURE__ */
|
|
1939
|
-
/* @__PURE__ */
|
|
2230
|
+
/* @__PURE__ */ jsxs4("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [
|
|
2231
|
+
assignment.isVerification && /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
2232
|
+
/* @__PURE__ */ jsx5(
|
|
1940
2233
|
"span",
|
|
1941
2234
|
{
|
|
1942
2235
|
style: {
|
|
@@ -1951,9 +2244,9 @@ function TestListScreen({ nav }) {
|
|
|
1951
2244
|
children: "Retest"
|
|
1952
2245
|
}
|
|
1953
2246
|
),
|
|
1954
|
-
/* @__PURE__ */
|
|
2247
|
+
/* @__PURE__ */ jsx5("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" })
|
|
1955
2248
|
] }),
|
|
1956
|
-
/* @__PURE__ */
|
|
2249
|
+
/* @__PURE__ */ jsx5(
|
|
1957
2250
|
"span",
|
|
1958
2251
|
{
|
|
1959
2252
|
style: {
|
|
@@ -1964,8 +2257,8 @@ function TestListScreen({ nav }) {
|
|
|
1964
2257
|
children: assignment.testCase.testKey
|
|
1965
2258
|
}
|
|
1966
2259
|
),
|
|
1967
|
-
/* @__PURE__ */
|
|
1968
|
-
/* @__PURE__ */
|
|
2260
|
+
/* @__PURE__ */ jsx5("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
|
|
2261
|
+
/* @__PURE__ */ jsx5(
|
|
1969
2262
|
"span",
|
|
1970
2263
|
{
|
|
1971
2264
|
style: {
|
|
@@ -1976,9 +2269,9 @@ function TestListScreen({ nav }) {
|
|
|
1976
2269
|
children: assignment.testCase.priority
|
|
1977
2270
|
}
|
|
1978
2271
|
),
|
|
1979
|
-
assignment.testCase.role && /* @__PURE__ */
|
|
1980
|
-
/* @__PURE__ */
|
|
1981
|
-
/* @__PURE__ */
|
|
2272
|
+
assignment.testCase.role && /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
2273
|
+
/* @__PURE__ */ jsx5("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
|
|
2274
|
+
/* @__PURE__ */ jsxs4("span", { style: {
|
|
1982
2275
|
display: "inline-flex",
|
|
1983
2276
|
alignItems: "center",
|
|
1984
2277
|
gap: 3,
|
|
@@ -1986,7 +2279,7 @@ function TestListScreen({ nav }) {
|
|
|
1986
2279
|
color: assignment.testCase.role.color,
|
|
1987
2280
|
fontWeight: 500
|
|
1988
2281
|
}, children: [
|
|
1989
|
-
/* @__PURE__ */
|
|
2282
|
+
/* @__PURE__ */ jsx5("span", { style: {
|
|
1990
2283
|
width: 5,
|
|
1991
2284
|
height: 5,
|
|
1992
2285
|
borderRadius: 3,
|
|
@@ -1997,7 +2290,7 @@ function TestListScreen({ nav }) {
|
|
|
1997
2290
|
] })
|
|
1998
2291
|
] })
|
|
1999
2292
|
] }),
|
|
2000
|
-
/* @__PURE__ */
|
|
2293
|
+
/* @__PURE__ */ jsx5(
|
|
2001
2294
|
"span",
|
|
2002
2295
|
{
|
|
2003
2296
|
style: {
|
|
@@ -2024,7 +2317,7 @@ function TestListScreen({ nav }) {
|
|
|
2024
2317
|
groupedAssignments.every((folder) => {
|
|
2025
2318
|
const filtered = folder.assignments.filter(filterAssignment);
|
|
2026
2319
|
return filtered.length === 0;
|
|
2027
|
-
}) && /* @__PURE__ */
|
|
2320
|
+
}) && /* @__PURE__ */ jsxs4(
|
|
2028
2321
|
"div",
|
|
2029
2322
|
{
|
|
2030
2323
|
style: {
|
|
@@ -2034,12 +2327,12 @@ function TestListScreen({ nav }) {
|
|
|
2034
2327
|
padding: 32
|
|
2035
2328
|
},
|
|
2036
2329
|
children: [
|
|
2037
|
-
/* @__PURE__ */
|
|
2038
|
-
/* @__PURE__ */
|
|
2330
|
+
/* @__PURE__ */ jsx5("span", { style: { fontSize: 32, marginBottom: 8 }, children: filter === "pending" ? "\u{1F389}" : filter === "reopened" ? "\u{1F44D}" : "\u{1F4CB}" }),
|
|
2331
|
+
/* @__PURE__ */ jsx5("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" })
|
|
2039
2332
|
]
|
|
2040
2333
|
}
|
|
2041
2334
|
),
|
|
2042
|
-
/* @__PURE__ */
|
|
2335
|
+
/* @__PURE__ */ jsx5("div", { style: { display: "flex", justifyContent: "center", paddingTop: 12, paddingBottom: 8 }, children: /* @__PURE__ */ jsx5(
|
|
2043
2336
|
"button",
|
|
2044
2337
|
{
|
|
2045
2338
|
type: "button",
|
|
@@ -2135,13 +2428,13 @@ function useImageAttachments(uploadFn, maxImages, bucket = "screenshots") {
|
|
|
2135
2428
|
}
|
|
2136
2429
|
|
|
2137
2430
|
// src/widget/ImagePreviewStrip.tsx
|
|
2138
|
-
import { jsx as
|
|
2431
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
2139
2432
|
function ImagePreviewStrip({ images, onRemove }) {
|
|
2140
2433
|
if (images.length === 0) return null;
|
|
2141
|
-
return /* @__PURE__ */
|
|
2142
|
-
images.map((img) => /* @__PURE__ */
|
|
2143
|
-
/* @__PURE__ */
|
|
2144
|
-
img.status === "uploading" && /* @__PURE__ */
|
|
2434
|
+
return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 8, overflowX: "auto", paddingTop: 4 }, children: [
|
|
2435
|
+
images.map((img) => /* @__PURE__ */ jsxs5("div", { style: { position: "relative", width: 64, height: 64, flexShrink: 0, borderRadius: 8, overflow: "hidden" }, children: [
|
|
2436
|
+
/* @__PURE__ */ jsx6("img", { src: img.localUri, alt: img.name, style: { width: 64, height: 64, objectFit: "cover", borderRadius: 8 } }),
|
|
2437
|
+
img.status === "uploading" && /* @__PURE__ */ jsx6("div", { style: {
|
|
2145
2438
|
position: "absolute",
|
|
2146
2439
|
inset: 0,
|
|
2147
2440
|
backgroundColor: "rgba(0,0,0,0.5)",
|
|
@@ -2149,7 +2442,7 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2149
2442
|
alignItems: "center",
|
|
2150
2443
|
justifyContent: "center",
|
|
2151
2444
|
borderRadius: 8
|
|
2152
|
-
}, children: /* @__PURE__ */
|
|
2445
|
+
}, children: /* @__PURE__ */ jsx6("div", { style: {
|
|
2153
2446
|
width: 16,
|
|
2154
2447
|
height: 16,
|
|
2155
2448
|
border: "2px solid #fff",
|
|
@@ -2157,7 +2450,7 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2157
2450
|
borderRadius: "50%",
|
|
2158
2451
|
animation: "bb-spin 0.6s linear infinite"
|
|
2159
2452
|
} }) }),
|
|
2160
|
-
img.status === "error" && /* @__PURE__ */
|
|
2453
|
+
img.status === "error" && /* @__PURE__ */ jsx6("div", { style: {
|
|
2161
2454
|
position: "absolute",
|
|
2162
2455
|
inset: 0,
|
|
2163
2456
|
backgroundColor: "rgba(127,29,29,0.7)",
|
|
@@ -2165,8 +2458,8 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2165
2458
|
alignItems: "center",
|
|
2166
2459
|
justifyContent: "center",
|
|
2167
2460
|
borderRadius: 8
|
|
2168
|
-
}, children: /* @__PURE__ */
|
|
2169
|
-
/* @__PURE__ */
|
|
2461
|
+
}, children: /* @__PURE__ */ jsx6("span", { style: { color: "#fca5a5", fontSize: 18, fontWeight: "bold" }, children: "!" }) }),
|
|
2462
|
+
/* @__PURE__ */ jsx6(
|
|
2170
2463
|
"button",
|
|
2171
2464
|
{
|
|
2172
2465
|
type: "button",
|
|
@@ -2193,18 +2486,18 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2193
2486
|
}
|
|
2194
2487
|
)
|
|
2195
2488
|
] }, img.id)),
|
|
2196
|
-
/* @__PURE__ */
|
|
2489
|
+
/* @__PURE__ */ jsx6("style", { children: `@keyframes bb-spin { to { transform: rotate(360deg); } }` })
|
|
2197
2490
|
] });
|
|
2198
2491
|
}
|
|
2199
2492
|
|
|
2200
2493
|
// src/widget/ImagePickerButtons.tsx
|
|
2201
|
-
import { jsx as
|
|
2494
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
2202
2495
|
function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, onRemove, label }) {
|
|
2203
2496
|
const disabled = images.length >= maxImages;
|
|
2204
|
-
return /* @__PURE__ */
|
|
2205
|
-
label && /* @__PURE__ */
|
|
2206
|
-
/* @__PURE__ */
|
|
2207
|
-
/* @__PURE__ */
|
|
2497
|
+
return /* @__PURE__ */ jsxs6("div", { style: { marginTop: 12, marginBottom: 4 }, children: [
|
|
2498
|
+
label && /* @__PURE__ */ jsx7("div", { style: { fontSize: 14, fontWeight: 500, color: "#e4e4e7", marginBottom: 8 }, children: label }),
|
|
2499
|
+
/* @__PURE__ */ jsxs6("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 8 }, children: [
|
|
2500
|
+
/* @__PURE__ */ jsx7(
|
|
2208
2501
|
"button",
|
|
2209
2502
|
{
|
|
2210
2503
|
type: "button",
|
|
@@ -2225,7 +2518,7 @@ function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, on
|
|
|
2225
2518
|
children: "Gallery"
|
|
2226
2519
|
}
|
|
2227
2520
|
),
|
|
2228
|
-
/* @__PURE__ */
|
|
2521
|
+
/* @__PURE__ */ jsx7(
|
|
2229
2522
|
"button",
|
|
2230
2523
|
{
|
|
2231
2524
|
type: "button",
|
|
@@ -2246,18 +2539,18 @@ function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, on
|
|
|
2246
2539
|
children: "Camera"
|
|
2247
2540
|
}
|
|
2248
2541
|
),
|
|
2249
|
-
/* @__PURE__ */
|
|
2542
|
+
/* @__PURE__ */ jsxs6("span", { style: { fontSize: 12, color: colors.textDim, marginLeft: 4 }, children: [
|
|
2250
2543
|
images.length,
|
|
2251
2544
|
"/",
|
|
2252
2545
|
maxImages
|
|
2253
2546
|
] })
|
|
2254
2547
|
] }),
|
|
2255
|
-
/* @__PURE__ */
|
|
2548
|
+
/* @__PURE__ */ jsx7(ImagePreviewStrip, { images, onRemove })
|
|
2256
2549
|
] });
|
|
2257
2550
|
}
|
|
2258
2551
|
|
|
2259
2552
|
// src/widget/screens/TestFeedbackScreen.tsx
|
|
2260
|
-
import { jsx as
|
|
2553
|
+
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2261
2554
|
function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
2262
2555
|
const { client, assignments, refreshAssignments, uploadImage } = useBugBear();
|
|
2263
2556
|
const images = useImageAttachments(uploadImage, 3, "screenshots");
|
|
@@ -2290,6 +2583,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2290
2583
|
}
|
|
2291
2584
|
};
|
|
2292
2585
|
const handleSubmit = async () => {
|
|
2586
|
+
if (submitting || images.isUploading) return;
|
|
2293
2587
|
setSubmitting(true);
|
|
2294
2588
|
if (client && assignment) {
|
|
2295
2589
|
const screenshotUrls = images.getScreenshotUrls();
|
|
@@ -2325,10 +2619,10 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2325
2619
|
{ key: "stepsUnclear", label: "Steps are unclear" },
|
|
2326
2620
|
{ key: "expectedResultUnclear", label: "Expected result unclear" }
|
|
2327
2621
|
];
|
|
2328
|
-
return /* @__PURE__ */
|
|
2329
|
-
/* @__PURE__ */
|
|
2330
|
-
/* @__PURE__ */
|
|
2331
|
-
/* @__PURE__ */
|
|
2622
|
+
return /* @__PURE__ */ jsxs7("div", { style: styles.container, children: [
|
|
2623
|
+
/* @__PURE__ */ jsx8("div", { style: styles.header, children: status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed" }),
|
|
2624
|
+
/* @__PURE__ */ jsx8("div", { style: styles.subheader, children: "Rate this test case" }),
|
|
2625
|
+
/* @__PURE__ */ jsx8("div", { style: styles.starRow, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ jsx8(
|
|
2332
2626
|
"button",
|
|
2333
2627
|
{
|
|
2334
2628
|
onClick: () => setRating(n),
|
|
@@ -2340,9 +2634,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2340
2634
|
},
|
|
2341
2635
|
n
|
|
2342
2636
|
)) }),
|
|
2343
|
-
showFlags && /* @__PURE__ */
|
|
2344
|
-
/* @__PURE__ */
|
|
2345
|
-
flagOptions.map(({ key, label }) => /* @__PURE__ */
|
|
2637
|
+
showFlags && /* @__PURE__ */ jsxs7("div", { style: styles.flagsSection, children: [
|
|
2638
|
+
/* @__PURE__ */ jsx8("div", { style: styles.flagsLabel, children: "What could be improved?" }),
|
|
2639
|
+
flagOptions.map(({ key, label }) => /* @__PURE__ */ jsxs7(
|
|
2346
2640
|
"button",
|
|
2347
2641
|
{
|
|
2348
2642
|
onClick: () => toggleFlag(key),
|
|
@@ -2351,17 +2645,17 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2351
2645
|
...flags[key] ? styles.flagItemActive : {}
|
|
2352
2646
|
},
|
|
2353
2647
|
children: [
|
|
2354
|
-
/* @__PURE__ */
|
|
2648
|
+
/* @__PURE__ */ jsx8(
|
|
2355
2649
|
"div",
|
|
2356
2650
|
{
|
|
2357
2651
|
style: {
|
|
2358
2652
|
...styles.flagCheck,
|
|
2359
2653
|
...flags[key] ? styles.flagCheckActive : {}
|
|
2360
2654
|
},
|
|
2361
|
-
children: flags[key] && /* @__PURE__ */
|
|
2655
|
+
children: flags[key] && /* @__PURE__ */ jsx8("span", { style: styles.flagCheckmark, children: "\u2713" })
|
|
2362
2656
|
}
|
|
2363
2657
|
),
|
|
2364
|
-
/* @__PURE__ */
|
|
2658
|
+
/* @__PURE__ */ jsx8(
|
|
2365
2659
|
"span",
|
|
2366
2660
|
{
|
|
2367
2661
|
style: {
|
|
@@ -2376,7 +2670,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2376
2670
|
key
|
|
2377
2671
|
))
|
|
2378
2672
|
] }),
|
|
2379
|
-
/* @__PURE__ */
|
|
2673
|
+
/* @__PURE__ */ jsx8(
|
|
2380
2674
|
"textarea",
|
|
2381
2675
|
{
|
|
2382
2676
|
style: styles.noteInput,
|
|
@@ -2386,7 +2680,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2386
2680
|
rows: 3
|
|
2387
2681
|
}
|
|
2388
2682
|
),
|
|
2389
|
-
/* @__PURE__ */
|
|
2683
|
+
/* @__PURE__ */ jsx8(
|
|
2390
2684
|
ImagePickerButtons,
|
|
2391
2685
|
{
|
|
2392
2686
|
images: images.images,
|
|
@@ -2397,9 +2691,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2397
2691
|
label: "Screenshots (optional)"
|
|
2398
2692
|
}
|
|
2399
2693
|
),
|
|
2400
|
-
/* @__PURE__ */
|
|
2401
|
-
/* @__PURE__ */
|
|
2402
|
-
/* @__PURE__ */
|
|
2694
|
+
/* @__PURE__ */ jsxs7("div", { style: styles.actions, children: [
|
|
2695
|
+
/* @__PURE__ */ jsx8("button", { style: styles.skipButton, onClick: handleSkip, children: "Skip" }),
|
|
2696
|
+
/* @__PURE__ */ jsx8(
|
|
2403
2697
|
"button",
|
|
2404
2698
|
{
|
|
2405
2699
|
style: {
|
|
@@ -2552,7 +2846,7 @@ var styles = {
|
|
|
2552
2846
|
import React6, { useState as useState6, useRef as useRef2 } from "react";
|
|
2553
2847
|
|
|
2554
2848
|
// src/widget/CategoryDropdown.tsx
|
|
2555
|
-
import { jsx as
|
|
2849
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2556
2850
|
var categoryOptions = [
|
|
2557
2851
|
{ value: "ui_ux", label: "UI/UX", icon: "\u{1F3A8}" },
|
|
2558
2852
|
{ value: "functional", label: "Functional", icon: "\u2699\uFE0F" },
|
|
@@ -2561,7 +2855,7 @@ var categoryOptions = [
|
|
|
2561
2855
|
{ value: "other", label: "Other", icon: "\u{1F4DD}" }
|
|
2562
2856
|
];
|
|
2563
2857
|
function CategoryDropdown({ value, onChange, optional = true, disabled = false }) {
|
|
2564
|
-
return /* @__PURE__ */
|
|
2858
|
+
return /* @__PURE__ */ jsxs8(
|
|
2565
2859
|
"select",
|
|
2566
2860
|
{
|
|
2567
2861
|
value: value || "",
|
|
@@ -2584,8 +2878,8 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
|
|
|
2584
2878
|
paddingRight: 32
|
|
2585
2879
|
},
|
|
2586
2880
|
children: [
|
|
2587
|
-
/* @__PURE__ */
|
|
2588
|
-
categoryOptions.map(({ value: value2, label, icon }) => /* @__PURE__ */
|
|
2881
|
+
/* @__PURE__ */ jsx9("option", { value: "", children: optional ? "Select category (optional)" : "Select category" }),
|
|
2882
|
+
categoryOptions.map(({ value: value2, label, icon }) => /* @__PURE__ */ jsxs8("option", { value: value2, children: [
|
|
2589
2883
|
icon,
|
|
2590
2884
|
" ",
|
|
2591
2885
|
label
|
|
@@ -2596,7 +2890,7 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
|
|
|
2596
2890
|
}
|
|
2597
2891
|
|
|
2598
2892
|
// src/widget/screens/ReportScreen.tsx
|
|
2599
|
-
import { Fragment as Fragment3, jsx as
|
|
2893
|
+
import { Fragment as Fragment3, jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2600
2894
|
function ReportScreen({ nav, prefill }) {
|
|
2601
2895
|
const { client, refreshAssignments, uploadImage } = useBugBear();
|
|
2602
2896
|
const images = useImageAttachments(uploadImage, 5, "screenshots");
|
|
@@ -2671,17 +2965,17 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2671
2965
|
{ sev: "medium", color: "#eab308" },
|
|
2672
2966
|
{ sev: "low", color: "#6b7280" }
|
|
2673
2967
|
];
|
|
2674
|
-
return /* @__PURE__ */
|
|
2675
|
-
/* @__PURE__ */
|
|
2676
|
-
/* @__PURE__ */
|
|
2677
|
-
/* @__PURE__ */
|
|
2678
|
-
/* @__PURE__ */
|
|
2679
|
-
/* @__PURE__ */
|
|
2968
|
+
return /* @__PURE__ */ jsx10("div", { children: isRetestFailure ? /* @__PURE__ */ jsxs9(Fragment3, { children: [
|
|
2969
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.retestBanner, children: [
|
|
2970
|
+
/* @__PURE__ */ jsx10("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
|
|
2971
|
+
/* @__PURE__ */ jsxs9("div", { children: [
|
|
2972
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.retestTitle, children: "Bug Still Present" }),
|
|
2973
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.retestSubtitle, children: "The fix did not resolve this issue" })
|
|
2680
2974
|
] })
|
|
2681
2975
|
] }),
|
|
2682
|
-
/* @__PURE__ */
|
|
2683
|
-
/* @__PURE__ */
|
|
2684
|
-
/* @__PURE__ */
|
|
2976
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
2977
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "Severity" }),
|
|
2978
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ jsx10(
|
|
2685
2979
|
"button",
|
|
2686
2980
|
{
|
|
2687
2981
|
onClick: () => setSeverity(sev),
|
|
@@ -2689,18 +2983,18 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2689
2983
|
...styles2.sevButton,
|
|
2690
2984
|
...severity === sev ? { backgroundColor: `${color}30`, borderColor: color } : {}
|
|
2691
2985
|
},
|
|
2692
|
-
children: /* @__PURE__ */
|
|
2986
|
+
children: /* @__PURE__ */ jsx10("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
|
|
2693
2987
|
},
|
|
2694
2988
|
sev
|
|
2695
2989
|
)) })
|
|
2696
2990
|
] }),
|
|
2697
|
-
/* @__PURE__ */
|
|
2698
|
-
/* @__PURE__ */
|
|
2699
|
-
/* @__PURE__ */
|
|
2991
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
2992
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "Category (optional)" }),
|
|
2993
|
+
/* @__PURE__ */ jsx10(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
|
|
2700
2994
|
] }),
|
|
2701
|
-
/* @__PURE__ */
|
|
2702
|
-
/* @__PURE__ */
|
|
2703
|
-
/* @__PURE__ */
|
|
2995
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
2996
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "What went wrong?" }),
|
|
2997
|
+
/* @__PURE__ */ jsx10(
|
|
2704
2998
|
"textarea",
|
|
2705
2999
|
{
|
|
2706
3000
|
style: styles2.descInput,
|
|
@@ -2711,7 +3005,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2711
3005
|
}
|
|
2712
3006
|
)
|
|
2713
3007
|
] }),
|
|
2714
|
-
/* @__PURE__ */
|
|
3008
|
+
/* @__PURE__ */ jsx10(
|
|
2715
3009
|
ImagePickerButtons,
|
|
2716
3010
|
{
|
|
2717
3011
|
images: images.images,
|
|
@@ -2722,8 +3016,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2722
3016
|
label: "Attachments (optional)"
|
|
2723
3017
|
}
|
|
2724
3018
|
),
|
|
2725
|
-
error && /* @__PURE__ */
|
|
2726
|
-
/* @__PURE__ */
|
|
3019
|
+
error && /* @__PURE__ */ jsx10("div", { style: styles2.errorBanner, children: error }),
|
|
3020
|
+
/* @__PURE__ */ jsx10(
|
|
2727
3021
|
"button",
|
|
2728
3022
|
{
|
|
2729
3023
|
style: {
|
|
@@ -2736,9 +3030,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2736
3030
|
children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest"
|
|
2737
3031
|
}
|
|
2738
3032
|
)
|
|
2739
|
-
] }) : /* @__PURE__ */
|
|
2740
|
-
/* @__PURE__ */
|
|
2741
|
-
/* @__PURE__ */
|
|
3033
|
+
] }) : /* @__PURE__ */ jsxs9(Fragment3, { children: [
|
|
3034
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "What are you reporting?" }),
|
|
3035
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.typeRow, children: typeOptions.map(({ type, label, icon }) => /* @__PURE__ */ jsxs9(
|
|
2742
3036
|
"button",
|
|
2743
3037
|
{
|
|
2744
3038
|
onClick: () => setReportType(type),
|
|
@@ -2747,8 +3041,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2747
3041
|
...reportType === type ? styles2.typeCardActive : {}
|
|
2748
3042
|
},
|
|
2749
3043
|
children: [
|
|
2750
|
-
/* @__PURE__ */
|
|
2751
|
-
/* @__PURE__ */
|
|
3044
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.typeIcon, children: icon }),
|
|
3045
|
+
/* @__PURE__ */ jsx10(
|
|
2752
3046
|
"div",
|
|
2753
3047
|
{
|
|
2754
3048
|
style: {
|
|
@@ -2762,9 +3056,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2762
3056
|
},
|
|
2763
3057
|
type
|
|
2764
3058
|
)) }),
|
|
2765
|
-
isBugType && /* @__PURE__ */
|
|
2766
|
-
/* @__PURE__ */
|
|
2767
|
-
/* @__PURE__ */
|
|
3059
|
+
isBugType && /* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
3060
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "Severity" }),
|
|
3061
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ jsx10(
|
|
2768
3062
|
"button",
|
|
2769
3063
|
{
|
|
2770
3064
|
onClick: () => setSeverity(sev),
|
|
@@ -2775,7 +3069,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2775
3069
|
borderColor: color
|
|
2776
3070
|
} : {}
|
|
2777
3071
|
},
|
|
2778
|
-
children: /* @__PURE__ */
|
|
3072
|
+
children: /* @__PURE__ */ jsx10(
|
|
2779
3073
|
"span",
|
|
2780
3074
|
{
|
|
2781
3075
|
style: {
|
|
@@ -2789,13 +3083,13 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2789
3083
|
sev
|
|
2790
3084
|
)) })
|
|
2791
3085
|
] }),
|
|
2792
|
-
isBugType && /* @__PURE__ */
|
|
2793
|
-
/* @__PURE__ */
|
|
2794
|
-
/* @__PURE__ */
|
|
3086
|
+
isBugType && /* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
3087
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "Category (optional)" }),
|
|
3088
|
+
/* @__PURE__ */ jsx10(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
|
|
2795
3089
|
] }),
|
|
2796
|
-
/* @__PURE__ */
|
|
2797
|
-
/* @__PURE__ */
|
|
2798
|
-
/* @__PURE__ */
|
|
3090
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
3091
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "What happened?" }),
|
|
3092
|
+
/* @__PURE__ */ jsx10(
|
|
2799
3093
|
"textarea",
|
|
2800
3094
|
{
|
|
2801
3095
|
style: styles2.descInput,
|
|
@@ -2806,9 +3100,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2806
3100
|
}
|
|
2807
3101
|
)
|
|
2808
3102
|
] }),
|
|
2809
|
-
isBugType && /* @__PURE__ */
|
|
2810
|
-
/* @__PURE__ */
|
|
2811
|
-
/* @__PURE__ */
|
|
3103
|
+
isBugType && /* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
3104
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "Where did it happen?" }),
|
|
3105
|
+
/* @__PURE__ */ jsx10(
|
|
2812
3106
|
"input",
|
|
2813
3107
|
{
|
|
2814
3108
|
style: styles2.routeInput,
|
|
@@ -2817,13 +3111,13 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2817
3111
|
placeholder: observedRoute.current
|
|
2818
3112
|
}
|
|
2819
3113
|
),
|
|
2820
|
-
/* @__PURE__ */
|
|
3114
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.routeHint, children: [
|
|
2821
3115
|
"Leave blank to use current page (",
|
|
2822
3116
|
observedRoute.current,
|
|
2823
3117
|
")"
|
|
2824
3118
|
] })
|
|
2825
3119
|
] }),
|
|
2826
|
-
/* @__PURE__ */
|
|
3120
|
+
/* @__PURE__ */ jsx10(
|
|
2827
3121
|
ImagePickerButtons,
|
|
2828
3122
|
{
|
|
2829
3123
|
images: images.images,
|
|
@@ -2834,8 +3128,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2834
3128
|
label: "Screenshots (optional)"
|
|
2835
3129
|
}
|
|
2836
3130
|
),
|
|
2837
|
-
error && /* @__PURE__ */
|
|
2838
|
-
/* @__PURE__ */
|
|
3131
|
+
error && /* @__PURE__ */ jsx10("div", { style: styles2.errorBanner, children: error }),
|
|
3132
|
+
/* @__PURE__ */ jsx10(
|
|
2839
3133
|
"button",
|
|
2840
3134
|
{
|
|
2841
3135
|
style: {
|
|
@@ -3000,16 +3294,16 @@ var styles2 = {
|
|
|
3000
3294
|
|
|
3001
3295
|
// src/widget/screens/ReportSuccessScreen.tsx
|
|
3002
3296
|
import { useEffect as useEffect4 } from "react";
|
|
3003
|
-
import { jsx as
|
|
3297
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3004
3298
|
function ReportSuccessScreen({ nav }) {
|
|
3005
3299
|
useEffect4(() => {
|
|
3006
3300
|
const timer = setTimeout(() => nav.reset(), 2e3);
|
|
3007
3301
|
return () => clearTimeout(timer);
|
|
3008
3302
|
}, [nav]);
|
|
3009
|
-
return /* @__PURE__ */
|
|
3010
|
-
/* @__PURE__ */
|
|
3011
|
-
/* @__PURE__ */
|
|
3012
|
-
/* @__PURE__ */
|
|
3303
|
+
return /* @__PURE__ */ jsxs10("div", { style: styles3.container, children: [
|
|
3304
|
+
/* @__PURE__ */ jsx11("div", { style: styles3.emoji, children: "\u{1F389}" }),
|
|
3305
|
+
/* @__PURE__ */ jsx11("div", { style: styles3.title, children: "Report submitted!" }),
|
|
3306
|
+
/* @__PURE__ */ jsx11("div", { style: styles3.subtitle, children: "Thank you for your feedback" })
|
|
3013
3307
|
] });
|
|
3014
3308
|
}
|
|
3015
3309
|
var styles3 = {
|
|
@@ -3038,11 +3332,12 @@ var styles3 = {
|
|
|
3038
3332
|
};
|
|
3039
3333
|
|
|
3040
3334
|
// src/widget/screens/MessageListScreen.tsx
|
|
3041
|
-
import { jsx as
|
|
3335
|
+
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3042
3336
|
function MessageListScreen({ nav }) {
|
|
3043
|
-
const { threads, unreadCount, refreshThreads } = useBugBear();
|
|
3044
|
-
return /* @__PURE__ */
|
|
3045
|
-
|
|
3337
|
+
const { threads, unreadCount, refreshThreads, isLoading } = useBugBear();
|
|
3338
|
+
if (isLoading) return /* @__PURE__ */ jsx12(MessageListScreenSkeleton, {});
|
|
3339
|
+
return /* @__PURE__ */ jsxs11("div", { children: [
|
|
3340
|
+
/* @__PURE__ */ jsx12(
|
|
3046
3341
|
"button",
|
|
3047
3342
|
{
|
|
3048
3343
|
style: {
|
|
@@ -3061,7 +3356,7 @@ function MessageListScreen({ nav }) {
|
|
|
3061
3356
|
children: "\u2709\uFE0F New Message"
|
|
3062
3357
|
}
|
|
3063
3358
|
),
|
|
3064
|
-
threads.length === 0 ? /* @__PURE__ */
|
|
3359
|
+
threads.length === 0 ? /* @__PURE__ */ jsxs11(
|
|
3065
3360
|
"div",
|
|
3066
3361
|
{
|
|
3067
3362
|
style: {
|
|
@@ -3072,8 +3367,8 @@ function MessageListScreen({ nav }) {
|
|
|
3072
3367
|
paddingBottom: 40
|
|
3073
3368
|
},
|
|
3074
3369
|
children: [
|
|
3075
|
-
/* @__PURE__ */
|
|
3076
|
-
/* @__PURE__ */
|
|
3370
|
+
/* @__PURE__ */ jsx12("span", { style: { fontSize: 36, marginBottom: 12 }, children: "\u{1F4AC}" }),
|
|
3371
|
+
/* @__PURE__ */ jsx12(
|
|
3077
3372
|
"span",
|
|
3078
3373
|
{
|
|
3079
3374
|
style: {
|
|
@@ -3085,7 +3380,7 @@ function MessageListScreen({ nav }) {
|
|
|
3085
3380
|
children: "No messages yet"
|
|
3086
3381
|
}
|
|
3087
3382
|
),
|
|
3088
|
-
/* @__PURE__ */
|
|
3383
|
+
/* @__PURE__ */ jsx12(
|
|
3089
3384
|
"span",
|
|
3090
3385
|
{
|
|
3091
3386
|
style: {
|
|
@@ -3098,7 +3393,7 @@ function MessageListScreen({ nav }) {
|
|
|
3098
3393
|
)
|
|
3099
3394
|
]
|
|
3100
3395
|
}
|
|
3101
|
-
) : /* @__PURE__ */
|
|
3396
|
+
) : /* @__PURE__ */ jsx12("div", { children: threads.map((thread) => /* @__PURE__ */ jsxs11(
|
|
3102
3397
|
"button",
|
|
3103
3398
|
{
|
|
3104
3399
|
style: {
|
|
@@ -3116,8 +3411,8 @@ function MessageListScreen({ nav }) {
|
|
|
3116
3411
|
},
|
|
3117
3412
|
onClick: () => nav.push({ name: "THREAD_DETAIL", thread }),
|
|
3118
3413
|
children: [
|
|
3119
|
-
/* @__PURE__ */
|
|
3120
|
-
/* @__PURE__ */
|
|
3414
|
+
/* @__PURE__ */ jsxs11("div", { style: { display: "flex", flex: 1, minWidth: 0 }, children: [
|
|
3415
|
+
/* @__PURE__ */ jsx12(
|
|
3121
3416
|
"span",
|
|
3122
3417
|
{
|
|
3123
3418
|
style: {
|
|
@@ -3129,7 +3424,7 @@ function MessageListScreen({ nav }) {
|
|
|
3129
3424
|
children: getThreadTypeIcon(thread.threadType)
|
|
3130
3425
|
}
|
|
3131
3426
|
),
|
|
3132
|
-
/* @__PURE__ */
|
|
3427
|
+
/* @__PURE__ */ jsxs11(
|
|
3133
3428
|
"div",
|
|
3134
3429
|
{
|
|
3135
3430
|
style: {
|
|
@@ -3137,7 +3432,7 @@ function MessageListScreen({ nav }) {
|
|
|
3137
3432
|
minWidth: 0
|
|
3138
3433
|
},
|
|
3139
3434
|
children: [
|
|
3140
|
-
/* @__PURE__ */
|
|
3435
|
+
/* @__PURE__ */ jsxs11(
|
|
3141
3436
|
"div",
|
|
3142
3437
|
{
|
|
3143
3438
|
style: {
|
|
@@ -3146,8 +3441,8 @@ function MessageListScreen({ nav }) {
|
|
|
3146
3441
|
gap: 4
|
|
3147
3442
|
},
|
|
3148
3443
|
children: [
|
|
3149
|
-
thread.isPinned && /* @__PURE__ */
|
|
3150
|
-
/* @__PURE__ */
|
|
3444
|
+
thread.isPinned && /* @__PURE__ */ jsx12("span", { style: { fontSize: 12, flexShrink: 0 }, children: "\u{1F4CC}" }),
|
|
3445
|
+
/* @__PURE__ */ jsx12(
|
|
3151
3446
|
"span",
|
|
3152
3447
|
{
|
|
3153
3448
|
style: {
|
|
@@ -3164,7 +3459,7 @@ function MessageListScreen({ nav }) {
|
|
|
3164
3459
|
]
|
|
3165
3460
|
}
|
|
3166
3461
|
),
|
|
3167
|
-
thread.lastMessage && /* @__PURE__ */
|
|
3462
|
+
thread.lastMessage && /* @__PURE__ */ jsxs11(
|
|
3168
3463
|
"span",
|
|
3169
3464
|
{
|
|
3170
3465
|
style: {
|
|
@@ -3188,7 +3483,7 @@ function MessageListScreen({ nav }) {
|
|
|
3188
3483
|
}
|
|
3189
3484
|
)
|
|
3190
3485
|
] }),
|
|
3191
|
-
/* @__PURE__ */
|
|
3486
|
+
/* @__PURE__ */ jsxs11(
|
|
3192
3487
|
"div",
|
|
3193
3488
|
{
|
|
3194
3489
|
style: {
|
|
@@ -3200,8 +3495,8 @@ function MessageListScreen({ nav }) {
|
|
|
3200
3495
|
flexShrink: 0
|
|
3201
3496
|
},
|
|
3202
3497
|
children: [
|
|
3203
|
-
/* @__PURE__ */
|
|
3204
|
-
thread.unreadCount > 0 && /* @__PURE__ */
|
|
3498
|
+
/* @__PURE__ */ jsx12("span", { style: { fontSize: 11, color: colors.textDim }, children: formatRelativeTime(thread.lastMessageAt) }),
|
|
3499
|
+
thread.unreadCount > 0 && /* @__PURE__ */ jsx12(
|
|
3205
3500
|
"span",
|
|
3206
3501
|
{
|
|
3207
3502
|
style: {
|
|
@@ -3228,7 +3523,7 @@ function MessageListScreen({ nav }) {
|
|
|
3228
3523
|
},
|
|
3229
3524
|
thread.id
|
|
3230
3525
|
)) }),
|
|
3231
|
-
/* @__PURE__ */
|
|
3526
|
+
/* @__PURE__ */ jsxs11(
|
|
3232
3527
|
"div",
|
|
3233
3528
|
{
|
|
3234
3529
|
style: {
|
|
@@ -3240,7 +3535,7 @@ function MessageListScreen({ nav }) {
|
|
|
3240
3535
|
paddingRight: 4
|
|
3241
3536
|
},
|
|
3242
3537
|
children: [
|
|
3243
|
-
/* @__PURE__ */
|
|
3538
|
+
/* @__PURE__ */ jsxs11("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
|
|
3244
3539
|
threads.length,
|
|
3245
3540
|
" thread",
|
|
3246
3541
|
threads.length !== 1 ? "s" : "",
|
|
@@ -3249,7 +3544,7 @@ function MessageListScreen({ nav }) {
|
|
|
3249
3544
|
unreadCount,
|
|
3250
3545
|
" unread"
|
|
3251
3546
|
] }),
|
|
3252
|
-
/* @__PURE__ */
|
|
3547
|
+
/* @__PURE__ */ jsx12(
|
|
3253
3548
|
"button",
|
|
3254
3549
|
{
|
|
3255
3550
|
style: {
|
|
@@ -3272,7 +3567,7 @@ function MessageListScreen({ nav }) {
|
|
|
3272
3567
|
|
|
3273
3568
|
// src/widget/screens/ThreadDetailScreen.tsx
|
|
3274
3569
|
import { useState as useState7, useEffect as useEffect5 } from "react";
|
|
3275
|
-
import { jsx as
|
|
3570
|
+
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3276
3571
|
var inputStyle = {
|
|
3277
3572
|
backgroundColor: "#27272a",
|
|
3278
3573
|
border: "1px solid #3f3f46",
|
|
@@ -3294,15 +3589,28 @@ function ThreadDetailScreen({
|
|
|
3294
3589
|
const [sending, setSending] = useState7(false);
|
|
3295
3590
|
const [sendError, setSendError] = useState7(false);
|
|
3296
3591
|
useEffect5(() => {
|
|
3592
|
+
let cancelled = false;
|
|
3593
|
+
setLoading(true);
|
|
3297
3594
|
(async () => {
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3595
|
+
try {
|
|
3596
|
+
const msgs = await getThreadMessages(thread.id);
|
|
3597
|
+
if (!cancelled) {
|
|
3598
|
+
setMessages(msgs);
|
|
3599
|
+
}
|
|
3600
|
+
if (thread.unreadCount > 0) {
|
|
3601
|
+
await markAsRead(thread.id);
|
|
3602
|
+
}
|
|
3603
|
+
} catch (err) {
|
|
3604
|
+
console.error("BugBear: Failed to load thread messages", err);
|
|
3605
|
+
} finally {
|
|
3606
|
+
if (!cancelled) {
|
|
3607
|
+
setLoading(false);
|
|
3608
|
+
}
|
|
3304
3609
|
}
|
|
3305
3610
|
})();
|
|
3611
|
+
return () => {
|
|
3612
|
+
cancelled = true;
|
|
3613
|
+
};
|
|
3306
3614
|
}, [thread.id]);
|
|
3307
3615
|
const handleSend = async () => {
|
|
3308
3616
|
if (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) return;
|
|
@@ -3331,8 +3639,8 @@ function ThreadDetailScreen({
|
|
|
3331
3639
|
handleSend();
|
|
3332
3640
|
}
|
|
3333
3641
|
};
|
|
3334
|
-
return /* @__PURE__ */
|
|
3335
|
-
/* @__PURE__ */
|
|
3642
|
+
return /* @__PURE__ */ jsxs12("div", { style: { display: "flex", flexDirection: "column", flex: 1 }, children: [
|
|
3643
|
+
/* @__PURE__ */ jsxs12(
|
|
3336
3644
|
"div",
|
|
3337
3645
|
{
|
|
3338
3646
|
style: {
|
|
@@ -3344,8 +3652,8 @@ function ThreadDetailScreen({
|
|
|
3344
3652
|
borderBottom: `1px solid ${colors.border}`
|
|
3345
3653
|
},
|
|
3346
3654
|
children: [
|
|
3347
|
-
/* @__PURE__ */
|
|
3348
|
-
/* @__PURE__ */
|
|
3655
|
+
/* @__PURE__ */ jsx13("span", { style: { fontSize: 20 }, children: getThreadTypeIcon(thread.threadType) }),
|
|
3656
|
+
/* @__PURE__ */ jsx13(
|
|
3349
3657
|
"span",
|
|
3350
3658
|
{
|
|
3351
3659
|
style: {
|
|
@@ -3365,7 +3673,7 @@ function ThreadDetailScreen({
|
|
|
3365
3673
|
]
|
|
3366
3674
|
}
|
|
3367
3675
|
),
|
|
3368
|
-
loading ? /* @__PURE__ */
|
|
3676
|
+
loading ? /* @__PURE__ */ jsx13(
|
|
3369
3677
|
"div",
|
|
3370
3678
|
{
|
|
3371
3679
|
style: {
|
|
@@ -3373,11 +3681,11 @@ function ThreadDetailScreen({
|
|
|
3373
3681
|
paddingBottom: 40,
|
|
3374
3682
|
textAlign: "center"
|
|
3375
3683
|
},
|
|
3376
|
-
children: /* @__PURE__ */
|
|
3684
|
+
children: /* @__PURE__ */ jsx13("span", { style: { fontSize: 14, color: colors.textMuted }, children: "Loading messages..." })
|
|
3377
3685
|
}
|
|
3378
|
-
) : /* @__PURE__ */
|
|
3686
|
+
) : /* @__PURE__ */ jsx13("div", { style: { paddingBottom: 8, marginBottom: 8 }, children: messages.map((msg) => {
|
|
3379
3687
|
const isTester = msg.senderType === "tester";
|
|
3380
|
-
return /* @__PURE__ */
|
|
3688
|
+
return /* @__PURE__ */ jsxs12(
|
|
3381
3689
|
"div",
|
|
3382
3690
|
{
|
|
3383
3691
|
style: {
|
|
@@ -3393,7 +3701,7 @@ function ThreadDetailScreen({
|
|
|
3393
3701
|
borderBottomRightRadius: isTester ? 4 : 16
|
|
3394
3702
|
},
|
|
3395
3703
|
children: [
|
|
3396
|
-
/* @__PURE__ */
|
|
3704
|
+
/* @__PURE__ */ jsx13(
|
|
3397
3705
|
"span",
|
|
3398
3706
|
{
|
|
3399
3707
|
style: {
|
|
@@ -3406,7 +3714,7 @@ function ThreadDetailScreen({
|
|
|
3406
3714
|
children: isTester ? "You" : msg.senderName
|
|
3407
3715
|
}
|
|
3408
3716
|
),
|
|
3409
|
-
/* @__PURE__ */
|
|
3717
|
+
/* @__PURE__ */ jsx13(
|
|
3410
3718
|
"span",
|
|
3411
3719
|
{
|
|
3412
3720
|
style: {
|
|
@@ -3420,7 +3728,7 @@ function ThreadDetailScreen({
|
|
|
3420
3728
|
children: msg.content
|
|
3421
3729
|
}
|
|
3422
3730
|
),
|
|
3423
|
-
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */
|
|
3731
|
+
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ jsx13("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__ */ jsx13(
|
|
3424
3732
|
"img",
|
|
3425
3733
|
{
|
|
3426
3734
|
src: att.url,
|
|
@@ -3429,7 +3737,7 @@ function ThreadDetailScreen({
|
|
|
3429
3737
|
},
|
|
3430
3738
|
idx
|
|
3431
3739
|
)) }),
|
|
3432
|
-
/* @__PURE__ */
|
|
3740
|
+
/* @__PURE__ */ jsx13(
|
|
3433
3741
|
"span",
|
|
3434
3742
|
{
|
|
3435
3743
|
style: {
|
|
@@ -3447,7 +3755,7 @@ function ThreadDetailScreen({
|
|
|
3447
3755
|
msg.id
|
|
3448
3756
|
);
|
|
3449
3757
|
}) }),
|
|
3450
|
-
sendError && /* @__PURE__ */
|
|
3758
|
+
sendError && /* @__PURE__ */ jsx13(
|
|
3451
3759
|
"div",
|
|
3452
3760
|
{
|
|
3453
3761
|
style: {
|
|
@@ -3459,7 +3767,7 @@ function ThreadDetailScreen({
|
|
|
3459
3767
|
borderRadius: 8,
|
|
3460
3768
|
marginBottom: 8
|
|
3461
3769
|
},
|
|
3462
|
-
children: /* @__PURE__ */
|
|
3770
|
+
children: /* @__PURE__ */ jsx13(
|
|
3463
3771
|
"span",
|
|
3464
3772
|
{
|
|
3465
3773
|
style: {
|
|
@@ -3473,8 +3781,8 @@ function ThreadDetailScreen({
|
|
|
3473
3781
|
)
|
|
3474
3782
|
}
|
|
3475
3783
|
),
|
|
3476
|
-
replyImages.images.length > 0 && /* @__PURE__ */
|
|
3477
|
-
/* @__PURE__ */
|
|
3784
|
+
replyImages.images.length > 0 && /* @__PURE__ */ jsx13("div", { style: { paddingTop: 8 }, children: /* @__PURE__ */ jsx13(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage }) }),
|
|
3785
|
+
/* @__PURE__ */ jsxs12(
|
|
3478
3786
|
"div",
|
|
3479
3787
|
{
|
|
3480
3788
|
style: {
|
|
@@ -3485,7 +3793,7 @@ function ThreadDetailScreen({
|
|
|
3485
3793
|
gap: 8
|
|
3486
3794
|
},
|
|
3487
3795
|
children: [
|
|
3488
|
-
/* @__PURE__ */
|
|
3796
|
+
/* @__PURE__ */ jsx13(
|
|
3489
3797
|
"button",
|
|
3490
3798
|
{
|
|
3491
3799
|
type: "button",
|
|
@@ -3504,7 +3812,7 @@ function ThreadDetailScreen({
|
|
|
3504
3812
|
children: "\u{1F4CE}"
|
|
3505
3813
|
}
|
|
3506
3814
|
),
|
|
3507
|
-
/* @__PURE__ */
|
|
3815
|
+
/* @__PURE__ */ jsx13(
|
|
3508
3816
|
"input",
|
|
3509
3817
|
{
|
|
3510
3818
|
type: "text",
|
|
@@ -3520,7 +3828,7 @@ function ThreadDetailScreen({
|
|
|
3520
3828
|
}
|
|
3521
3829
|
}
|
|
3522
3830
|
),
|
|
3523
|
-
/* @__PURE__ */
|
|
3831
|
+
/* @__PURE__ */ jsx13(
|
|
3524
3832
|
"button",
|
|
3525
3833
|
{
|
|
3526
3834
|
style: {
|
|
@@ -3548,7 +3856,7 @@ function ThreadDetailScreen({
|
|
|
3548
3856
|
|
|
3549
3857
|
// src/widget/screens/ComposeMessageScreen.tsx
|
|
3550
3858
|
import { useState as useState8 } from "react";
|
|
3551
|
-
import { jsx as
|
|
3859
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
3552
3860
|
var inputStyle2 = {
|
|
3553
3861
|
backgroundColor: "#27272a",
|
|
3554
3862
|
border: "1px solid #3f3f46",
|
|
@@ -3579,9 +3887,9 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3579
3887
|
nav.pop();
|
|
3580
3888
|
}
|
|
3581
3889
|
};
|
|
3582
|
-
return /* @__PURE__ */
|
|
3583
|
-
/* @__PURE__ */
|
|
3584
|
-
/* @__PURE__ */
|
|
3890
|
+
return /* @__PURE__ */ jsxs13("div", { children: [
|
|
3891
|
+
/* @__PURE__ */ jsxs13("div", { style: { marginBottom: 20 }, children: [
|
|
3892
|
+
/* @__PURE__ */ jsx14(
|
|
3585
3893
|
"div",
|
|
3586
3894
|
{
|
|
3587
3895
|
style: {
|
|
@@ -3593,9 +3901,9 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3593
3901
|
children: "New Message"
|
|
3594
3902
|
}
|
|
3595
3903
|
),
|
|
3596
|
-
/* @__PURE__ */
|
|
3904
|
+
/* @__PURE__ */ jsx14("div", { style: { fontSize: 14, color: colors.textMuted }, children: "Send a message to the QA team" })
|
|
3597
3905
|
] }),
|
|
3598
|
-
/* @__PURE__ */
|
|
3906
|
+
/* @__PURE__ */ jsxs13(
|
|
3599
3907
|
"div",
|
|
3600
3908
|
{
|
|
3601
3909
|
style: {
|
|
@@ -3605,7 +3913,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3605
3913
|
border: `1px solid ${colors.border}`
|
|
3606
3914
|
},
|
|
3607
3915
|
children: [
|
|
3608
|
-
/* @__PURE__ */
|
|
3916
|
+
/* @__PURE__ */ jsx14(
|
|
3609
3917
|
"label",
|
|
3610
3918
|
{
|
|
3611
3919
|
style: {
|
|
@@ -3618,7 +3926,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3618
3926
|
children: "Subject"
|
|
3619
3927
|
}
|
|
3620
3928
|
),
|
|
3621
|
-
/* @__PURE__ */
|
|
3929
|
+
/* @__PURE__ */ jsx14(
|
|
3622
3930
|
"input",
|
|
3623
3931
|
{
|
|
3624
3932
|
type: "text",
|
|
@@ -3633,7 +3941,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3633
3941
|
}
|
|
3634
3942
|
}
|
|
3635
3943
|
),
|
|
3636
|
-
/* @__PURE__ */
|
|
3944
|
+
/* @__PURE__ */ jsx14(
|
|
3637
3945
|
"label",
|
|
3638
3946
|
{
|
|
3639
3947
|
style: {
|
|
@@ -3647,7 +3955,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3647
3955
|
children: "Message"
|
|
3648
3956
|
}
|
|
3649
3957
|
),
|
|
3650
|
-
/* @__PURE__ */
|
|
3958
|
+
/* @__PURE__ */ jsx14(
|
|
3651
3959
|
"textarea",
|
|
3652
3960
|
{
|
|
3653
3961
|
value: message,
|
|
@@ -3666,7 +3974,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3666
3974
|
}
|
|
3667
3975
|
}
|
|
3668
3976
|
),
|
|
3669
|
-
/* @__PURE__ */
|
|
3977
|
+
/* @__PURE__ */ jsx14(
|
|
3670
3978
|
ImagePickerButtons,
|
|
3671
3979
|
{
|
|
3672
3980
|
images: images.images,
|
|
@@ -3677,7 +3985,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3677
3985
|
label: "Attachments (optional)"
|
|
3678
3986
|
}
|
|
3679
3987
|
),
|
|
3680
|
-
/* @__PURE__ */
|
|
3988
|
+
/* @__PURE__ */ jsx14(
|
|
3681
3989
|
"button",
|
|
3682
3990
|
{
|
|
3683
3991
|
style: {
|
|
@@ -3706,7 +4014,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3706
4014
|
|
|
3707
4015
|
// src/widget/screens/ProfileScreen.tsx
|
|
3708
4016
|
import { useState as useState9, useEffect as useEffect6 } from "react";
|
|
3709
|
-
import { jsx as
|
|
4017
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3710
4018
|
function ProfileScreen({ nav }) {
|
|
3711
4019
|
const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo } = useBugBear();
|
|
3712
4020
|
const [editing, setEditing] = useState9(false);
|
|
@@ -3726,6 +4034,7 @@ function ProfileScreen({ nav }) {
|
|
|
3726
4034
|
}
|
|
3727
4035
|
}, [testerInfo]);
|
|
3728
4036
|
const handleSave = async () => {
|
|
4037
|
+
if (saving) return;
|
|
3729
4038
|
setSaving(true);
|
|
3730
4039
|
const updates = {
|
|
3731
4040
|
name: name.trim(),
|
|
@@ -3752,22 +4061,22 @@ function ProfileScreen({ nav }) {
|
|
|
3752
4061
|
}
|
|
3753
4062
|
};
|
|
3754
4063
|
if (saved) {
|
|
3755
|
-
return /* @__PURE__ */
|
|
3756
|
-
/* @__PURE__ */
|
|
3757
|
-
/* @__PURE__ */
|
|
4064
|
+
return /* @__PURE__ */ jsxs14("div", { style: styles4.emptyState, children: [
|
|
4065
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.emptyEmoji, children: "\u2705" }),
|
|
4066
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.emptyTitle, children: "Profile saved!" })
|
|
3758
4067
|
] });
|
|
3759
4068
|
}
|
|
3760
4069
|
if (!testerInfo) {
|
|
3761
|
-
return /* @__PURE__ */
|
|
3762
|
-
/* @__PURE__ */
|
|
3763
|
-
/* @__PURE__ */
|
|
4070
|
+
return /* @__PURE__ */ jsxs14("div", { style: styles4.emptyState, children: [
|
|
4071
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.emptyEmoji, children: "\u{1F464}" }),
|
|
4072
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.emptyTitle, children: "No profile found" })
|
|
3764
4073
|
] });
|
|
3765
4074
|
}
|
|
3766
4075
|
if (editing) {
|
|
3767
|
-
return /* @__PURE__ */
|
|
3768
|
-
/* @__PURE__ */
|
|
3769
|
-
/* @__PURE__ */
|
|
3770
|
-
/* @__PURE__ */
|
|
4076
|
+
return /* @__PURE__ */ jsxs14("div", { children: [
|
|
4077
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.editHeader, children: [
|
|
4078
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.editTitle, children: "Edit Profile" }),
|
|
4079
|
+
/* @__PURE__ */ jsx15(
|
|
3771
4080
|
"button",
|
|
3772
4081
|
{
|
|
3773
4082
|
style: styles4.cancelButton,
|
|
@@ -3779,9 +4088,9 @@ function ProfileScreen({ nav }) {
|
|
|
3779
4088
|
}
|
|
3780
4089
|
)
|
|
3781
4090
|
] }),
|
|
3782
|
-
/* @__PURE__ */
|
|
3783
|
-
/* @__PURE__ */
|
|
3784
|
-
/* @__PURE__ */
|
|
4091
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.field, children: [
|
|
4092
|
+
/* @__PURE__ */ jsx15("label", { style: styles4.label, children: "Name" }),
|
|
4093
|
+
/* @__PURE__ */ jsx15(
|
|
3785
4094
|
"input",
|
|
3786
4095
|
{
|
|
3787
4096
|
style: styles4.input,
|
|
@@ -3791,15 +4100,15 @@ function ProfileScreen({ nav }) {
|
|
|
3791
4100
|
}
|
|
3792
4101
|
)
|
|
3793
4102
|
] }),
|
|
3794
|
-
/* @__PURE__ */
|
|
3795
|
-
/* @__PURE__ */
|
|
3796
|
-
/* @__PURE__ */
|
|
4103
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.field, children: [
|
|
4104
|
+
/* @__PURE__ */ jsx15("label", { style: styles4.label, children: "Primary Email" }),
|
|
4105
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.emailFixed, children: testerInfo.email })
|
|
3797
4106
|
] }),
|
|
3798
|
-
/* @__PURE__ */
|
|
3799
|
-
/* @__PURE__ */
|
|
3800
|
-
additionalEmails.map((email) => /* @__PURE__ */
|
|
3801
|
-
/* @__PURE__ */
|
|
3802
|
-
/* @__PURE__ */
|
|
4107
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.field, children: [
|
|
4108
|
+
/* @__PURE__ */ jsx15("label", { style: styles4.label, children: "Additional Emails" }),
|
|
4109
|
+
additionalEmails.map((email) => /* @__PURE__ */ jsxs14("div", { style: styles4.emailRow, children: [
|
|
4110
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.emailText, children: email }),
|
|
4111
|
+
/* @__PURE__ */ jsx15(
|
|
3803
4112
|
"button",
|
|
3804
4113
|
{
|
|
3805
4114
|
style: styles4.removeEmailButton,
|
|
@@ -3808,8 +4117,8 @@ function ProfileScreen({ nav }) {
|
|
|
3808
4117
|
}
|
|
3809
4118
|
)
|
|
3810
4119
|
] }, email)),
|
|
3811
|
-
/* @__PURE__ */
|
|
3812
|
-
/* @__PURE__ */
|
|
4120
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.addEmailRow, children: [
|
|
4121
|
+
/* @__PURE__ */ jsx15(
|
|
3813
4122
|
"input",
|
|
3814
4123
|
{
|
|
3815
4124
|
style: { ...styles4.input, flex: 1, marginRight: 8 },
|
|
@@ -3822,18 +4131,18 @@ function ProfileScreen({ nav }) {
|
|
|
3822
4131
|
}
|
|
3823
4132
|
}
|
|
3824
4133
|
),
|
|
3825
|
-
/* @__PURE__ */
|
|
4134
|
+
/* @__PURE__ */ jsx15("button", { style: styles4.addButton, onClick: handleAddEmail, children: "Add" })
|
|
3826
4135
|
] })
|
|
3827
4136
|
] }),
|
|
3828
|
-
/* @__PURE__ */
|
|
3829
|
-
/* @__PURE__ */
|
|
3830
|
-
/* @__PURE__ */
|
|
4137
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.field, children: [
|
|
4138
|
+
/* @__PURE__ */ jsx15("label", { style: styles4.label, children: "Testing Platforms" }),
|
|
4139
|
+
/* @__PURE__ */ jsx15("div", { style: styles4.platformRow, children: [
|
|
3831
4140
|
{ key: "ios", label: "\u{1F4F1} iOS" },
|
|
3832
4141
|
{ key: "android", label: "\u{1F916} Android" },
|
|
3833
4142
|
{ key: "web", label: "\u{1F310} Web" }
|
|
3834
4143
|
].map(({ key, label }) => {
|
|
3835
4144
|
const isActive = platforms.includes(key);
|
|
3836
|
-
return /* @__PURE__ */
|
|
4145
|
+
return /* @__PURE__ */ jsx15(
|
|
3837
4146
|
"button",
|
|
3838
4147
|
{
|
|
3839
4148
|
style: {
|
|
@@ -3843,13 +4152,13 @@ function ProfileScreen({ nav }) {
|
|
|
3843
4152
|
onClick: () => setPlatforms(
|
|
3844
4153
|
(prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key]
|
|
3845
4154
|
),
|
|
3846
|
-
children: /* @__PURE__ */
|
|
4155
|
+
children: /* @__PURE__ */ jsx15("span", { style: isActive ? styles4.platformTextActive : styles4.platformText, children: label })
|
|
3847
4156
|
},
|
|
3848
4157
|
key
|
|
3849
4158
|
);
|
|
3850
4159
|
}) })
|
|
3851
4160
|
] }),
|
|
3852
|
-
/* @__PURE__ */
|
|
4161
|
+
/* @__PURE__ */ jsx15(
|
|
3853
4162
|
"button",
|
|
3854
4163
|
{
|
|
3855
4164
|
style: { ...styles4.primaryButton, marginTop: 20 },
|
|
@@ -3860,45 +4169,45 @@ function ProfileScreen({ nav }) {
|
|
|
3860
4169
|
)
|
|
3861
4170
|
] });
|
|
3862
4171
|
}
|
|
3863
|
-
return /* @__PURE__ */
|
|
3864
|
-
/* @__PURE__ */
|
|
3865
|
-
/* @__PURE__ */
|
|
3866
|
-
/* @__PURE__ */
|
|
3867
|
-
/* @__PURE__ */
|
|
4172
|
+
return /* @__PURE__ */ jsxs14("div", { children: [
|
|
4173
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.profileCard, children: [
|
|
4174
|
+
/* @__PURE__ */ jsx15("div", { style: styles4.avatar, children: /* @__PURE__ */ jsx15("span", { style: styles4.avatarText, children: testerInfo.name.charAt(0).toUpperCase() }) }),
|
|
4175
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.profileName, children: testerInfo.name }),
|
|
4176
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.profileEmail, children: testerInfo.email })
|
|
3868
4177
|
] }),
|
|
3869
|
-
/* @__PURE__ */
|
|
3870
|
-
/* @__PURE__ */
|
|
3871
|
-
/* @__PURE__ */
|
|
3872
|
-
/* @__PURE__ */
|
|
4178
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.statsRow, children: [
|
|
4179
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.statItem, children: [
|
|
4180
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.statNumber, children: completedCount }),
|
|
4181
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.statLabel, children: "Completed" })
|
|
3873
4182
|
] }),
|
|
3874
|
-
/* @__PURE__ */
|
|
3875
|
-
/* @__PURE__ */
|
|
3876
|
-
/* @__PURE__ */
|
|
3877
|
-
/* @__PURE__ */
|
|
4183
|
+
/* @__PURE__ */ jsx15("div", { style: styles4.statDivider }),
|
|
4184
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.statItem, children: [
|
|
4185
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.statNumber, children: assignments.length }),
|
|
4186
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.statLabel, children: "Total Assigned" })
|
|
3878
4187
|
] })
|
|
3879
4188
|
] }),
|
|
3880
|
-
/* @__PURE__ */
|
|
4189
|
+
/* @__PURE__ */ jsx15(
|
|
3881
4190
|
"button",
|
|
3882
4191
|
{
|
|
3883
4192
|
style: styles4.detailsToggle,
|
|
3884
4193
|
onClick: () => setShowDetails(!showDetails),
|
|
3885
|
-
children: /* @__PURE__ */
|
|
4194
|
+
children: /* @__PURE__ */ jsxs14("span", { style: styles4.detailsToggleText, children: [
|
|
3886
4195
|
showDetails ? "\u25BC" : "\u25B6",
|
|
3887
4196
|
" Details"
|
|
3888
4197
|
] })
|
|
3889
4198
|
}
|
|
3890
4199
|
),
|
|
3891
|
-
showDetails && /* @__PURE__ */
|
|
3892
|
-
additionalEmails.length > 0 && /* @__PURE__ */
|
|
3893
|
-
/* @__PURE__ */
|
|
3894
|
-
additionalEmails.map((e) => /* @__PURE__ */
|
|
4200
|
+
showDetails && /* @__PURE__ */ jsxs14("div", { style: styles4.detailsSection, children: [
|
|
4201
|
+
additionalEmails.length > 0 && /* @__PURE__ */ jsxs14("div", { style: styles4.detailBlock, children: [
|
|
4202
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.detailLabel, children: "Additional Emails" }),
|
|
4203
|
+
additionalEmails.map((e) => /* @__PURE__ */ jsx15("span", { style: styles4.detailValue, children: e }, e))
|
|
3895
4204
|
] }),
|
|
3896
|
-
platforms.length > 0 && /* @__PURE__ */
|
|
3897
|
-
/* @__PURE__ */
|
|
3898
|
-
/* @__PURE__ */
|
|
4205
|
+
platforms.length > 0 && /* @__PURE__ */ jsxs14("div", { style: styles4.detailBlock, children: [
|
|
4206
|
+
/* @__PURE__ */ jsx15("span", { style: styles4.detailLabel, children: "Platforms" }),
|
|
4207
|
+
/* @__PURE__ */ jsx15("div", { style: styles4.platformTags, children: platforms.map((p) => /* @__PURE__ */ jsx15("span", { style: styles4.platformTag, children: /* @__PURE__ */ jsx15("span", { style: styles4.platformTagText, children: p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web" }) }, p)) })
|
|
3899
4208
|
] })
|
|
3900
4209
|
] }),
|
|
3901
|
-
/* @__PURE__ */
|
|
4210
|
+
/* @__PURE__ */ jsx15(
|
|
3902
4211
|
"button",
|
|
3903
4212
|
{
|
|
3904
4213
|
style: { ...styles4.primaryButton, marginTop: 20 },
|
|
@@ -4182,7 +4491,7 @@ var styles4 = {
|
|
|
4182
4491
|
|
|
4183
4492
|
// src/widget/screens/IssueListScreen.tsx
|
|
4184
4493
|
import { useState as useState10, useEffect as useEffect7 } from "react";
|
|
4185
|
-
import { jsx as
|
|
4494
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
4186
4495
|
var CATEGORY_CONFIG = {
|
|
4187
4496
|
open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
|
|
4188
4497
|
done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
|
|
@@ -4203,11 +4512,21 @@ function IssueListScreen({ nav, category }) {
|
|
|
4203
4512
|
let cancelled = false;
|
|
4204
4513
|
setLoading(true);
|
|
4205
4514
|
(async () => {
|
|
4206
|
-
if (!client)
|
|
4207
|
-
const data = await client.getIssues(category);
|
|
4208
|
-
if (!cancelled) {
|
|
4209
|
-
setIssues(data);
|
|
4515
|
+
if (!client) {
|
|
4210
4516
|
setLoading(false);
|
|
4517
|
+
return;
|
|
4518
|
+
}
|
|
4519
|
+
try {
|
|
4520
|
+
const data = await client.getIssues(category);
|
|
4521
|
+
if (!cancelled) {
|
|
4522
|
+
setIssues(data);
|
|
4523
|
+
}
|
|
4524
|
+
} catch (err) {
|
|
4525
|
+
console.error("BugBear: Failed to load issues", err);
|
|
4526
|
+
} finally {
|
|
4527
|
+
if (!cancelled) {
|
|
4528
|
+
setLoading(false);
|
|
4529
|
+
}
|
|
4211
4530
|
}
|
|
4212
4531
|
})();
|
|
4213
4532
|
return () => {
|
|
@@ -4215,15 +4534,15 @@ function IssueListScreen({ nav, category }) {
|
|
|
4215
4534
|
};
|
|
4216
4535
|
}, [client, category]);
|
|
4217
4536
|
if (loading) {
|
|
4218
|
-
return /* @__PURE__ */
|
|
4537
|
+
return /* @__PURE__ */ jsx16(IssueListScreenSkeleton, {});
|
|
4219
4538
|
}
|
|
4220
4539
|
if (issues.length === 0) {
|
|
4221
|
-
return /* @__PURE__ */
|
|
4222
|
-
/* @__PURE__ */
|
|
4223
|
-
/* @__PURE__ */
|
|
4540
|
+
return /* @__PURE__ */ jsxs15("div", { style: { padding: "40px 0", textAlign: "center" }, children: [
|
|
4541
|
+
/* @__PURE__ */ jsx16("div", { style: { fontSize: 36, marginBottom: 8 }, children: config.emptyIcon }),
|
|
4542
|
+
/* @__PURE__ */ jsx16("div", { style: { color: colors.textMuted, fontSize: 14 }, children: config.emptyText })
|
|
4224
4543
|
] });
|
|
4225
4544
|
}
|
|
4226
|
-
return /* @__PURE__ */
|
|
4545
|
+
return /* @__PURE__ */ jsx16("div", { children: issues.map((issue) => /* @__PURE__ */ jsxs15(
|
|
4227
4546
|
"div",
|
|
4228
4547
|
{
|
|
4229
4548
|
role: "button",
|
|
@@ -4242,8 +4561,8 @@ function IssueListScreen({ nav, category }) {
|
|
|
4242
4561
|
userSelect: "none"
|
|
4243
4562
|
},
|
|
4244
4563
|
children: [
|
|
4245
|
-
/* @__PURE__ */
|
|
4246
|
-
issue.severity && /* @__PURE__ */
|
|
4564
|
+
/* @__PURE__ */ jsxs15("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 }, children: [
|
|
4565
|
+
issue.severity && /* @__PURE__ */ jsx16(
|
|
4247
4566
|
"span",
|
|
4248
4567
|
{
|
|
4249
4568
|
style: {
|
|
@@ -4256,7 +4575,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4256
4575
|
}
|
|
4257
4576
|
}
|
|
4258
4577
|
),
|
|
4259
|
-
/* @__PURE__ */
|
|
4578
|
+
/* @__PURE__ */ jsx16("span", { style: {
|
|
4260
4579
|
fontSize: 13,
|
|
4261
4580
|
fontWeight: 600,
|
|
4262
4581
|
color: colors.textPrimary,
|
|
@@ -4266,11 +4585,11 @@ function IssueListScreen({ nav, category }) {
|
|
|
4266
4585
|
whiteSpace: "nowrap"
|
|
4267
4586
|
}, children: issue.title })
|
|
4268
4587
|
] }),
|
|
4269
|
-
/* @__PURE__ */
|
|
4270
|
-
issue.route && /* @__PURE__ */
|
|
4271
|
-
/* @__PURE__ */
|
|
4588
|
+
/* @__PURE__ */ jsxs15("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 6 }, children: [
|
|
4589
|
+
issue.route && /* @__PURE__ */ jsx16("span", { style: { fontSize: 11, color: colors.textDim, maxWidth: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: issue.route }),
|
|
4590
|
+
/* @__PURE__ */ jsx16("span", { style: { fontSize: 11, color: colors.textDim, marginLeft: "auto" }, children: formatRelativeTime(issue.updatedAt) })
|
|
4272
4591
|
] }),
|
|
4273
|
-
category === "done" && issue.verifiedByName && /* @__PURE__ */
|
|
4592
|
+
category === "done" && issue.verifiedByName && /* @__PURE__ */ jsxs15("div", { style: {
|
|
4274
4593
|
display: "inline-flex",
|
|
4275
4594
|
alignItems: "center",
|
|
4276
4595
|
gap: 4,
|
|
@@ -4286,7 +4605,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4286
4605
|
"\u2714 Verified by ",
|
|
4287
4606
|
issue.verifiedByName
|
|
4288
4607
|
] }),
|
|
4289
|
-
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */
|
|
4608
|
+
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ jsxs15("div", { style: {
|
|
4290
4609
|
display: "inline-flex",
|
|
4291
4610
|
alignItems: "center",
|
|
4292
4611
|
gap: 4,
|
|
@@ -4313,7 +4632,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4313
4632
|
}
|
|
4314
4633
|
|
|
4315
4634
|
// src/widget/screens/IssueDetailScreen.tsx
|
|
4316
|
-
import { jsx as
|
|
4635
|
+
import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
4317
4636
|
var STATUS_LABELS = {
|
|
4318
4637
|
new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
|
|
4319
4638
|
triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
|
|
@@ -4337,9 +4656,9 @@ var SEVERITY_CONFIG = {
|
|
|
4337
4656
|
function IssueDetailScreen({ nav, issue }) {
|
|
4338
4657
|
const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
|
|
4339
4658
|
const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
|
|
4340
|
-
return /* @__PURE__ */
|
|
4341
|
-
/* @__PURE__ */
|
|
4342
|
-
/* @__PURE__ */
|
|
4659
|
+
return /* @__PURE__ */ jsxs16("div", { children: [
|
|
4660
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginBottom: 12 }, children: [
|
|
4661
|
+
/* @__PURE__ */ jsx17("span", { style: {
|
|
4343
4662
|
backgroundColor: statusConfig.bg,
|
|
4344
4663
|
color: statusConfig.color,
|
|
4345
4664
|
fontSize: 11,
|
|
@@ -4347,7 +4666,7 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4347
4666
|
padding: "3px 10px",
|
|
4348
4667
|
borderRadius: 6
|
|
4349
4668
|
}, children: statusConfig.label }),
|
|
4350
|
-
severityConfig && /* @__PURE__ */
|
|
4669
|
+
severityConfig && /* @__PURE__ */ jsx17("span", { style: {
|
|
4351
4670
|
backgroundColor: severityConfig.bg,
|
|
4352
4671
|
color: severityConfig.color,
|
|
4353
4672
|
fontSize: 11,
|
|
@@ -4356,9 +4675,9 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4356
4675
|
borderRadius: 6
|
|
4357
4676
|
}, children: severityConfig.label })
|
|
4358
4677
|
] }),
|
|
4359
|
-
/* @__PURE__ */
|
|
4360
|
-
issue.route && /* @__PURE__ */
|
|
4361
|
-
issue.description && /* @__PURE__ */
|
|
4678
|
+
/* @__PURE__ */ jsx17("h3", { style: { fontSize: 16, fontWeight: 700, color: colors.textPrimary, margin: "0 0 8px 0", lineHeight: 1.3 }, children: issue.title }),
|
|
4679
|
+
issue.route && /* @__PURE__ */ jsx17("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 12 }, children: issue.route }),
|
|
4680
|
+
issue.description && /* @__PURE__ */ jsx17("div", { style: {
|
|
4362
4681
|
backgroundColor: colors.card,
|
|
4363
4682
|
border: `1px solid ${colors.border}`,
|
|
4364
4683
|
borderRadius: 8,
|
|
@@ -4370,56 +4689,56 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4370
4689
|
whiteSpace: "pre-wrap",
|
|
4371
4690
|
wordBreak: "break-word"
|
|
4372
4691
|
}, children: issue.description }),
|
|
4373
|
-
issue.verifiedByName && /* @__PURE__ */
|
|
4692
|
+
issue.verifiedByName && /* @__PURE__ */ jsxs16("div", { style: {
|
|
4374
4693
|
backgroundColor: "#14532d",
|
|
4375
4694
|
border: "1px solid #166534",
|
|
4376
4695
|
borderRadius: 8,
|
|
4377
4696
|
padding: 12,
|
|
4378
4697
|
marginBottom: 12
|
|
4379
4698
|
}, children: [
|
|
4380
|
-
/* @__PURE__ */
|
|
4381
|
-
/* @__PURE__ */
|
|
4382
|
-
/* @__PURE__ */
|
|
4699
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
|
|
4700
|
+
/* @__PURE__ */ jsx17("span", { style: { fontSize: 16 }, children: "\u2705" }),
|
|
4701
|
+
/* @__PURE__ */ jsx17("span", { style: { fontSize: 13, fontWeight: 600, color: "#4ade80" }, children: "Retesting Proof" })
|
|
4383
4702
|
] }),
|
|
4384
|
-
/* @__PURE__ */
|
|
4703
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, color: "#86efac" }, children: [
|
|
4385
4704
|
"Verified by ",
|
|
4386
|
-
/* @__PURE__ */
|
|
4387
|
-
issue.verifiedAt && /* @__PURE__ */
|
|
4705
|
+
/* @__PURE__ */ jsx17("strong", { children: issue.verifiedByName }),
|
|
4706
|
+
issue.verifiedAt && /* @__PURE__ */ jsxs16("span", { children: [
|
|
4388
4707
|
" on ",
|
|
4389
4708
|
new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })
|
|
4390
4709
|
] })
|
|
4391
4710
|
] })
|
|
4392
4711
|
] }),
|
|
4393
|
-
issue.originalBugTitle && /* @__PURE__ */
|
|
4712
|
+
issue.originalBugTitle && /* @__PURE__ */ jsxs16("div", { style: {
|
|
4394
4713
|
backgroundColor: "#422006",
|
|
4395
4714
|
border: "1px solid #854d0e",
|
|
4396
4715
|
borderRadius: 8,
|
|
4397
4716
|
padding: 12,
|
|
4398
4717
|
marginBottom: 12
|
|
4399
4718
|
}, children: [
|
|
4400
|
-
/* @__PURE__ */
|
|
4401
|
-
/* @__PURE__ */
|
|
4402
|
-
/* @__PURE__ */
|
|
4719
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
|
|
4720
|
+
/* @__PURE__ */ jsx17("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
|
|
4721
|
+
/* @__PURE__ */ jsx17("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Original Bug" })
|
|
4403
4722
|
] }),
|
|
4404
|
-
/* @__PURE__ */
|
|
4723
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, color: "#fde68a" }, children: [
|
|
4405
4724
|
"Retest of: ",
|
|
4406
|
-
/* @__PURE__ */
|
|
4725
|
+
/* @__PURE__ */ jsx17("strong", { children: issue.originalBugTitle })
|
|
4407
4726
|
] })
|
|
4408
4727
|
] }),
|
|
4409
|
-
issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */
|
|
4410
|
-
/* @__PURE__ */
|
|
4728
|
+
issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ jsxs16("div", { style: { marginBottom: 12 }, children: [
|
|
4729
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, fontWeight: 600, color: colors.textMuted, marginBottom: 8 }, children: [
|
|
4411
4730
|
"Screenshots (",
|
|
4412
4731
|
issue.screenshotUrls.length,
|
|
4413
4732
|
")"
|
|
4414
4733
|
] }),
|
|
4415
|
-
/* @__PURE__ */
|
|
4734
|
+
/* @__PURE__ */ jsx17("div", { style: { display: "flex", gap: 8, overflowX: "auto" }, children: issue.screenshotUrls.map((url, i) => /* @__PURE__ */ jsx17(
|
|
4416
4735
|
"a",
|
|
4417
4736
|
{
|
|
4418
4737
|
href: url,
|
|
4419
4738
|
target: "_blank",
|
|
4420
4739
|
rel: "noopener noreferrer",
|
|
4421
4740
|
style: { flexShrink: 0 },
|
|
4422
|
-
children: /* @__PURE__ */
|
|
4741
|
+
children: /* @__PURE__ */ jsx17(
|
|
4423
4742
|
"img",
|
|
4424
4743
|
{
|
|
4425
4744
|
src: url,
|
|
@@ -4437,16 +4756,16 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4437
4756
|
i
|
|
4438
4757
|
)) })
|
|
4439
4758
|
] }),
|
|
4440
|
-
/* @__PURE__ */
|
|
4759
|
+
/* @__PURE__ */ jsxs16("div", { style: {
|
|
4441
4760
|
borderTop: `1px solid ${colors.border}`,
|
|
4442
4761
|
paddingTop: 12,
|
|
4443
4762
|
marginTop: 4
|
|
4444
4763
|
}, children: [
|
|
4445
|
-
issue.reporterName && /* @__PURE__ */
|
|
4764
|
+
issue.reporterName && /* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 4 }, children: [
|
|
4446
4765
|
"Reported by ",
|
|
4447
4766
|
issue.reporterName
|
|
4448
4767
|
] }),
|
|
4449
|
-
/* @__PURE__ */
|
|
4768
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 11, color: colors.textDim }, children: [
|
|
4450
4769
|
"Created ",
|
|
4451
4770
|
formatRelativeTime(issue.createdAt),
|
|
4452
4771
|
" \xB7 Updated ",
|
|
@@ -4460,9 +4779,9 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4460
4779
|
var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
|
|
4461
4780
|
|
|
4462
4781
|
// src/BugBearPanel.tsx
|
|
4463
|
-
import { Fragment as Fragment4, jsx as
|
|
4782
|
+
import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
4464
4783
|
function BugBearIcon({ size = 24 }) {
|
|
4465
|
-
return /* @__PURE__ */
|
|
4784
|
+
return /* @__PURE__ */ jsx18(
|
|
4466
4785
|
"img",
|
|
4467
4786
|
{
|
|
4468
4787
|
src: BUGBEAR_LOGO_BASE64,
|
|
@@ -4627,37 +4946,37 @@ function BugBearPanel({
|
|
|
4627
4946
|
const renderScreen = () => {
|
|
4628
4947
|
switch (currentScreen.name) {
|
|
4629
4948
|
case "HOME":
|
|
4630
|
-
return /* @__PURE__ */
|
|
4949
|
+
return /* @__PURE__ */ jsx18(HomeScreen, { nav });
|
|
4631
4950
|
case "TEST_DETAIL":
|
|
4632
|
-
return /* @__PURE__ */
|
|
4951
|
+
return /* @__PURE__ */ jsx18(TestDetailScreen, { testId: currentScreen.testId, nav });
|
|
4633
4952
|
case "TEST_LIST":
|
|
4634
|
-
return /* @__PURE__ */
|
|
4953
|
+
return /* @__PURE__ */ jsx18(TestListScreen, { nav });
|
|
4635
4954
|
case "TEST_FEEDBACK":
|
|
4636
|
-
return /* @__PURE__ */
|
|
4955
|
+
return /* @__PURE__ */ jsx18(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
|
|
4637
4956
|
case "REPORT":
|
|
4638
|
-
return /* @__PURE__ */
|
|
4957
|
+
return /* @__PURE__ */ jsx18(ReportScreen, { nav, prefill: currentScreen.prefill });
|
|
4639
4958
|
case "REPORT_SUCCESS":
|
|
4640
|
-
return /* @__PURE__ */
|
|
4959
|
+
return /* @__PURE__ */ jsx18(ReportSuccessScreen, { nav });
|
|
4641
4960
|
case "MESSAGE_LIST":
|
|
4642
|
-
return /* @__PURE__ */
|
|
4961
|
+
return /* @__PURE__ */ jsx18(MessageListScreen, { nav });
|
|
4643
4962
|
case "THREAD_DETAIL":
|
|
4644
|
-
return /* @__PURE__ */
|
|
4963
|
+
return /* @__PURE__ */ jsx18(ThreadDetailScreen, { thread: currentScreen.thread, nav });
|
|
4645
4964
|
case "COMPOSE_MESSAGE":
|
|
4646
|
-
return /* @__PURE__ */
|
|
4965
|
+
return /* @__PURE__ */ jsx18(ComposeMessageScreen, { nav });
|
|
4647
4966
|
case "ISSUE_LIST":
|
|
4648
|
-
return /* @__PURE__ */
|
|
4967
|
+
return /* @__PURE__ */ jsx18(IssueListScreen, { nav, category: currentScreen.category });
|
|
4649
4968
|
case "ISSUE_DETAIL":
|
|
4650
|
-
return /* @__PURE__ */
|
|
4969
|
+
return /* @__PURE__ */ jsx18(IssueDetailScreen, { nav, issue: currentScreen.issue });
|
|
4651
4970
|
case "PROFILE":
|
|
4652
|
-
return /* @__PURE__ */
|
|
4971
|
+
return /* @__PURE__ */ jsx18(ProfileScreen, { nav });
|
|
4653
4972
|
default:
|
|
4654
|
-
return /* @__PURE__ */
|
|
4973
|
+
return /* @__PURE__ */ jsx18(HomeScreen, { nav });
|
|
4655
4974
|
}
|
|
4656
4975
|
};
|
|
4657
4976
|
if (typeof document === "undefined") return null;
|
|
4658
4977
|
const headerTitle = getHeaderTitle();
|
|
4659
4978
|
return createPortal(
|
|
4660
|
-
/* @__PURE__ */
|
|
4979
|
+
/* @__PURE__ */ jsxs17(
|
|
4661
4980
|
"div",
|
|
4662
4981
|
{
|
|
4663
4982
|
ref: panelRef,
|
|
@@ -4676,7 +4995,7 @@ function BugBearPanel({
|
|
|
4676
4995
|
},
|
|
4677
4996
|
onMouseDown: handleMouseDown,
|
|
4678
4997
|
children: [
|
|
4679
|
-
collapsed && /* @__PURE__ */
|
|
4998
|
+
collapsed && /* @__PURE__ */ jsxs17(
|
|
4680
4999
|
"button",
|
|
4681
5000
|
{
|
|
4682
5001
|
onClick: () => setCollapsed(false),
|
|
@@ -4698,9 +5017,9 @@ function BugBearPanel({
|
|
|
4698
5017
|
fontWeight: 500
|
|
4699
5018
|
},
|
|
4700
5019
|
children: [
|
|
4701
|
-
/* @__PURE__ */
|
|
4702
|
-
/* @__PURE__ */
|
|
4703
|
-
badgeCount > 0 && /* @__PURE__ */
|
|
5020
|
+
/* @__PURE__ */ jsx18(BugBearIcon, { size: 24 }),
|
|
5021
|
+
/* @__PURE__ */ jsx18("span", { children: "BugBear" }),
|
|
5022
|
+
badgeCount > 0 && /* @__PURE__ */ jsx18("span", { style: {
|
|
4704
5023
|
backgroundColor: "#fff",
|
|
4705
5024
|
color: colors.blue,
|
|
4706
5025
|
fontSize: "0.75rem",
|
|
@@ -4711,7 +5030,7 @@ function BugBearPanel({
|
|
|
4711
5030
|
]
|
|
4712
5031
|
}
|
|
4713
5032
|
),
|
|
4714
|
-
!collapsed && /* @__PURE__ */
|
|
5033
|
+
!collapsed && /* @__PURE__ */ jsxs17("div", { style: {
|
|
4715
5034
|
width: PANEL_WIDTH,
|
|
4716
5035
|
backgroundColor: colors.bg,
|
|
4717
5036
|
borderRadius: 12,
|
|
@@ -4719,7 +5038,7 @@ function BugBearPanel({
|
|
|
4719
5038
|
overflow: "hidden",
|
|
4720
5039
|
boxShadow: "0 25px 50px -12px rgba(0,0,0,0.5)"
|
|
4721
5040
|
}, children: [
|
|
4722
|
-
/* @__PURE__ */
|
|
5041
|
+
/* @__PURE__ */ jsxs17(
|
|
4723
5042
|
"div",
|
|
4724
5043
|
{
|
|
4725
5044
|
"data-drag-handle": true,
|
|
@@ -4735,7 +5054,7 @@ function BugBearPanel({
|
|
|
4735
5054
|
cursor: draggable ? isDragging ? "grabbing" : "grab" : "default"
|
|
4736
5055
|
},
|
|
4737
5056
|
children: [
|
|
4738
|
-
/* @__PURE__ */
|
|
5057
|
+
/* @__PURE__ */ jsx18("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ jsx18(
|
|
4739
5058
|
"button",
|
|
4740
5059
|
{
|
|
4741
5060
|
onClick: pop,
|
|
@@ -4751,14 +5070,14 @@ function BugBearPanel({
|
|
|
4751
5070
|
},
|
|
4752
5071
|
children: "\u2190 Back"
|
|
4753
5072
|
}
|
|
4754
|
-
) : /* @__PURE__ */
|
|
4755
|
-
/* @__PURE__ */
|
|
4756
|
-
/* @__PURE__ */
|
|
4757
|
-
/* @__PURE__ */
|
|
4758
|
-
/* @__PURE__ */
|
|
4759
|
-
draggable && /* @__PURE__ */
|
|
5073
|
+
) : /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
5074
|
+
/* @__PURE__ */ jsx18(BugBearIcon, { size: 28 }),
|
|
5075
|
+
/* @__PURE__ */ jsxs17("div", { children: [
|
|
5076
|
+
/* @__PURE__ */ jsxs17("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
5077
|
+
/* @__PURE__ */ jsx18("span", { style: { fontWeight: 600, fontSize: "0.875rem" }, children: "BugBear" }),
|
|
5078
|
+
draggable && /* @__PURE__ */ jsx18("span", { style: { color: colors.textMuted, fontSize: "0.75rem" }, title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
|
|
4760
5079
|
] }),
|
|
4761
|
-
testerInfo && /* @__PURE__ */
|
|
5080
|
+
testerInfo && /* @__PURE__ */ jsxs17(
|
|
4762
5081
|
"button",
|
|
4763
5082
|
{
|
|
4764
5083
|
onClick: () => push({ name: "PROFILE" }),
|
|
@@ -4776,13 +5095,13 @@ function BugBearPanel({
|
|
|
4776
5095
|
},
|
|
4777
5096
|
children: [
|
|
4778
5097
|
testerInfo.name,
|
|
4779
|
-
/* @__PURE__ */
|
|
5098
|
+
/* @__PURE__ */ jsx18("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
|
|
4780
5099
|
]
|
|
4781
5100
|
}
|
|
4782
5101
|
)
|
|
4783
5102
|
] })
|
|
4784
5103
|
] }) }),
|
|
4785
|
-
headerTitle ? /* @__PURE__ */
|
|
5104
|
+
headerTitle ? /* @__PURE__ */ jsx18("span", { style: {
|
|
4786
5105
|
fontSize: "0.8125rem",
|
|
4787
5106
|
fontWeight: 600,
|
|
4788
5107
|
color: colors.textSecondary,
|
|
@@ -4792,7 +5111,7 @@ function BugBearPanel({
|
|
|
4792
5111
|
textOverflow: "ellipsis",
|
|
4793
5112
|
whiteSpace: "nowrap"
|
|
4794
5113
|
}, children: headerTitle }) : null,
|
|
4795
|
-
/* @__PURE__ */
|
|
5114
|
+
/* @__PURE__ */ jsx18(
|
|
4796
5115
|
"button",
|
|
4797
5116
|
{
|
|
4798
5117
|
onClick: handleClose,
|
|
@@ -4816,13 +5135,13 @@ function BugBearPanel({
|
|
|
4816
5135
|
]
|
|
4817
5136
|
}
|
|
4818
5137
|
),
|
|
4819
|
-
/* @__PURE__ */
|
|
5138
|
+
/* @__PURE__ */ jsx18("div", { style: {
|
|
4820
5139
|
padding: 16,
|
|
4821
5140
|
maxHeight: 400,
|
|
4822
5141
|
overflowY: "auto",
|
|
4823
5142
|
backgroundColor: colors.bg,
|
|
4824
5143
|
color: colors.textSecondary
|
|
4825
|
-
}, children: isLoading ? /* @__PURE__ */
|
|
5144
|
+
}, children: isLoading ? /* @__PURE__ */ jsx18("div", { style: { padding: "60px 0", textAlign: "center" }, children: /* @__PURE__ */ jsx18("div", { style: { color: colors.textMuted, fontSize: "0.875rem" }, children: "Loading..." }) }) : renderScreen() })
|
|
4826
5145
|
] })
|
|
4827
5146
|
]
|
|
4828
5147
|
}
|
|
@@ -4834,7 +5153,7 @@ function BugBearPanel({
|
|
|
4834
5153
|
// src/BugBearErrorBoundary.tsx
|
|
4835
5154
|
import { Component } from "react";
|
|
4836
5155
|
import { captureError, contextCapture as contextCapture2 } from "@bbearai/core";
|
|
4837
|
-
import { jsx as
|
|
5156
|
+
import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
4838
5157
|
var BugBearErrorBoundary = class extends Component {
|
|
4839
5158
|
constructor(props) {
|
|
4840
5159
|
super(props);
|
|
@@ -4879,7 +5198,7 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4879
5198
|
if (fallback) {
|
|
4880
5199
|
return fallback;
|
|
4881
5200
|
}
|
|
4882
|
-
return /* @__PURE__ */
|
|
5201
|
+
return /* @__PURE__ */ jsxs18(
|
|
4883
5202
|
"div",
|
|
4884
5203
|
{
|
|
4885
5204
|
style: {
|
|
@@ -4891,13 +5210,13 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4891
5210
|
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
|
|
4892
5211
|
},
|
|
4893
5212
|
children: [
|
|
4894
|
-
/* @__PURE__ */
|
|
4895
|
-
/* @__PURE__ */
|
|
4896
|
-
/* @__PURE__ */
|
|
5213
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
|
|
5214
|
+
/* @__PURE__ */ jsx19("img", { src: BUGBEAR_LOGO_BASE64, alt: "BugBear", width: 28, height: 28, style: { objectFit: "contain" } }),
|
|
5215
|
+
/* @__PURE__ */ jsx19("h3", { style: { margin: 0, color: "#991b1b", fontSize: "16px" }, children: "Something went wrong" })
|
|
4897
5216
|
] }),
|
|
4898
|
-
/* @__PURE__ */
|
|
4899
|
-
/* @__PURE__ */
|
|
4900
|
-
/* @__PURE__ */
|
|
5217
|
+
/* @__PURE__ */ jsx19("p", { style: { color: "#7f1d1d", fontSize: "14px", margin: "0 0 12px 0" }, children: error.message }),
|
|
5218
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", gap: "8px" }, children: [
|
|
5219
|
+
/* @__PURE__ */ jsx19(
|
|
4901
5220
|
"button",
|
|
4902
5221
|
{
|
|
4903
5222
|
onClick: this.reset,
|
|
@@ -4914,7 +5233,7 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4914
5233
|
children: "Try Again"
|
|
4915
5234
|
}
|
|
4916
5235
|
),
|
|
4917
|
-
/* @__PURE__ */
|
|
5236
|
+
/* @__PURE__ */ jsx19(
|
|
4918
5237
|
"button",
|
|
4919
5238
|
{
|
|
4920
5239
|
onClick: () => window.location.reload(),
|
|
@@ -4932,7 +5251,7 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4932
5251
|
}
|
|
4933
5252
|
)
|
|
4934
5253
|
] }),
|
|
4935
|
-
/* @__PURE__ */
|
|
5254
|
+
/* @__PURE__ */ jsx19("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
|
|
4936
5255
|
]
|
|
4937
5256
|
}
|
|
4938
5257
|
);
|