@bbearai/react 0.4.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +729 -435
- package/dist/index.mjs +729 -435
- 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");
|
|
@@ -2326,10 +2619,10 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2326
2619
|
{ key: "stepsUnclear", label: "Steps are unclear" },
|
|
2327
2620
|
{ key: "expectedResultUnclear", label: "Expected result unclear" }
|
|
2328
2621
|
];
|
|
2329
|
-
return /* @__PURE__ */
|
|
2330
|
-
/* @__PURE__ */
|
|
2331
|
-
/* @__PURE__ */
|
|
2332
|
-
/* @__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(
|
|
2333
2626
|
"button",
|
|
2334
2627
|
{
|
|
2335
2628
|
onClick: () => setRating(n),
|
|
@@ -2341,9 +2634,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2341
2634
|
},
|
|
2342
2635
|
n
|
|
2343
2636
|
)) }),
|
|
2344
|
-
showFlags && /* @__PURE__ */
|
|
2345
|
-
/* @__PURE__ */
|
|
2346
|
-
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(
|
|
2347
2640
|
"button",
|
|
2348
2641
|
{
|
|
2349
2642
|
onClick: () => toggleFlag(key),
|
|
@@ -2352,17 +2645,17 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2352
2645
|
...flags[key] ? styles.flagItemActive : {}
|
|
2353
2646
|
},
|
|
2354
2647
|
children: [
|
|
2355
|
-
/* @__PURE__ */
|
|
2648
|
+
/* @__PURE__ */ jsx8(
|
|
2356
2649
|
"div",
|
|
2357
2650
|
{
|
|
2358
2651
|
style: {
|
|
2359
2652
|
...styles.flagCheck,
|
|
2360
2653
|
...flags[key] ? styles.flagCheckActive : {}
|
|
2361
2654
|
},
|
|
2362
|
-
children: flags[key] && /* @__PURE__ */
|
|
2655
|
+
children: flags[key] && /* @__PURE__ */ jsx8("span", { style: styles.flagCheckmark, children: "\u2713" })
|
|
2363
2656
|
}
|
|
2364
2657
|
),
|
|
2365
|
-
/* @__PURE__ */
|
|
2658
|
+
/* @__PURE__ */ jsx8(
|
|
2366
2659
|
"span",
|
|
2367
2660
|
{
|
|
2368
2661
|
style: {
|
|
@@ -2377,7 +2670,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2377
2670
|
key
|
|
2378
2671
|
))
|
|
2379
2672
|
] }),
|
|
2380
|
-
/* @__PURE__ */
|
|
2673
|
+
/* @__PURE__ */ jsx8(
|
|
2381
2674
|
"textarea",
|
|
2382
2675
|
{
|
|
2383
2676
|
style: styles.noteInput,
|
|
@@ -2387,7 +2680,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2387
2680
|
rows: 3
|
|
2388
2681
|
}
|
|
2389
2682
|
),
|
|
2390
|
-
/* @__PURE__ */
|
|
2683
|
+
/* @__PURE__ */ jsx8(
|
|
2391
2684
|
ImagePickerButtons,
|
|
2392
2685
|
{
|
|
2393
2686
|
images: images.images,
|
|
@@ -2398,9 +2691,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2398
2691
|
label: "Screenshots (optional)"
|
|
2399
2692
|
}
|
|
2400
2693
|
),
|
|
2401
|
-
/* @__PURE__ */
|
|
2402
|
-
/* @__PURE__ */
|
|
2403
|
-
/* @__PURE__ */
|
|
2694
|
+
/* @__PURE__ */ jsxs7("div", { style: styles.actions, children: [
|
|
2695
|
+
/* @__PURE__ */ jsx8("button", { style: styles.skipButton, onClick: handleSkip, children: "Skip" }),
|
|
2696
|
+
/* @__PURE__ */ jsx8(
|
|
2404
2697
|
"button",
|
|
2405
2698
|
{
|
|
2406
2699
|
style: {
|
|
@@ -2553,7 +2846,7 @@ var styles = {
|
|
|
2553
2846
|
import React6, { useState as useState6, useRef as useRef2 } from "react";
|
|
2554
2847
|
|
|
2555
2848
|
// src/widget/CategoryDropdown.tsx
|
|
2556
|
-
import { jsx as
|
|
2849
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2557
2850
|
var categoryOptions = [
|
|
2558
2851
|
{ value: "ui_ux", label: "UI/UX", icon: "\u{1F3A8}" },
|
|
2559
2852
|
{ value: "functional", label: "Functional", icon: "\u2699\uFE0F" },
|
|
@@ -2562,7 +2855,7 @@ var categoryOptions = [
|
|
|
2562
2855
|
{ value: "other", label: "Other", icon: "\u{1F4DD}" }
|
|
2563
2856
|
];
|
|
2564
2857
|
function CategoryDropdown({ value, onChange, optional = true, disabled = false }) {
|
|
2565
|
-
return /* @__PURE__ */
|
|
2858
|
+
return /* @__PURE__ */ jsxs8(
|
|
2566
2859
|
"select",
|
|
2567
2860
|
{
|
|
2568
2861
|
value: value || "",
|
|
@@ -2585,8 +2878,8 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
|
|
|
2585
2878
|
paddingRight: 32
|
|
2586
2879
|
},
|
|
2587
2880
|
children: [
|
|
2588
|
-
/* @__PURE__ */
|
|
2589
|
-
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: [
|
|
2590
2883
|
icon,
|
|
2591
2884
|
" ",
|
|
2592
2885
|
label
|
|
@@ -2597,7 +2890,7 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
|
|
|
2597
2890
|
}
|
|
2598
2891
|
|
|
2599
2892
|
// src/widget/screens/ReportScreen.tsx
|
|
2600
|
-
import { Fragment as Fragment3, jsx as
|
|
2893
|
+
import { Fragment as Fragment3, jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2601
2894
|
function ReportScreen({ nav, prefill }) {
|
|
2602
2895
|
const { client, refreshAssignments, uploadImage } = useBugBear();
|
|
2603
2896
|
const images = useImageAttachments(uploadImage, 5, "screenshots");
|
|
@@ -2672,17 +2965,17 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2672
2965
|
{ sev: "medium", color: "#eab308" },
|
|
2673
2966
|
{ sev: "low", color: "#6b7280" }
|
|
2674
2967
|
];
|
|
2675
|
-
return /* @__PURE__ */
|
|
2676
|
-
/* @__PURE__ */
|
|
2677
|
-
/* @__PURE__ */
|
|
2678
|
-
/* @__PURE__ */
|
|
2679
|
-
/* @__PURE__ */
|
|
2680
|
-
/* @__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" })
|
|
2681
2974
|
] })
|
|
2682
2975
|
] }),
|
|
2683
|
-
/* @__PURE__ */
|
|
2684
|
-
/* @__PURE__ */
|
|
2685
|
-
/* @__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(
|
|
2686
2979
|
"button",
|
|
2687
2980
|
{
|
|
2688
2981
|
onClick: () => setSeverity(sev),
|
|
@@ -2690,18 +2983,18 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2690
2983
|
...styles2.sevButton,
|
|
2691
2984
|
...severity === sev ? { backgroundColor: `${color}30`, borderColor: color } : {}
|
|
2692
2985
|
},
|
|
2693
|
-
children: /* @__PURE__ */
|
|
2986
|
+
children: /* @__PURE__ */ jsx10("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
|
|
2694
2987
|
},
|
|
2695
2988
|
sev
|
|
2696
2989
|
)) })
|
|
2697
2990
|
] }),
|
|
2698
|
-
/* @__PURE__ */
|
|
2699
|
-
/* @__PURE__ */
|
|
2700
|
-
/* @__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 })
|
|
2701
2994
|
] }),
|
|
2702
|
-
/* @__PURE__ */
|
|
2703
|
-
/* @__PURE__ */
|
|
2704
|
-
/* @__PURE__ */
|
|
2995
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
2996
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "What went wrong?" }),
|
|
2997
|
+
/* @__PURE__ */ jsx10(
|
|
2705
2998
|
"textarea",
|
|
2706
2999
|
{
|
|
2707
3000
|
style: styles2.descInput,
|
|
@@ -2712,7 +3005,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2712
3005
|
}
|
|
2713
3006
|
)
|
|
2714
3007
|
] }),
|
|
2715
|
-
/* @__PURE__ */
|
|
3008
|
+
/* @__PURE__ */ jsx10(
|
|
2716
3009
|
ImagePickerButtons,
|
|
2717
3010
|
{
|
|
2718
3011
|
images: images.images,
|
|
@@ -2723,8 +3016,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2723
3016
|
label: "Attachments (optional)"
|
|
2724
3017
|
}
|
|
2725
3018
|
),
|
|
2726
|
-
error && /* @__PURE__ */
|
|
2727
|
-
/* @__PURE__ */
|
|
3019
|
+
error && /* @__PURE__ */ jsx10("div", { style: styles2.errorBanner, children: error }),
|
|
3020
|
+
/* @__PURE__ */ jsx10(
|
|
2728
3021
|
"button",
|
|
2729
3022
|
{
|
|
2730
3023
|
style: {
|
|
@@ -2737,9 +3030,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2737
3030
|
children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest"
|
|
2738
3031
|
}
|
|
2739
3032
|
)
|
|
2740
|
-
] }) : /* @__PURE__ */
|
|
2741
|
-
/* @__PURE__ */
|
|
2742
|
-
/* @__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(
|
|
2743
3036
|
"button",
|
|
2744
3037
|
{
|
|
2745
3038
|
onClick: () => setReportType(type),
|
|
@@ -2748,8 +3041,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2748
3041
|
...reportType === type ? styles2.typeCardActive : {}
|
|
2749
3042
|
},
|
|
2750
3043
|
children: [
|
|
2751
|
-
/* @__PURE__ */
|
|
2752
|
-
/* @__PURE__ */
|
|
3044
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.typeIcon, children: icon }),
|
|
3045
|
+
/* @__PURE__ */ jsx10(
|
|
2753
3046
|
"div",
|
|
2754
3047
|
{
|
|
2755
3048
|
style: {
|
|
@@ -2763,9 +3056,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2763
3056
|
},
|
|
2764
3057
|
type
|
|
2765
3058
|
)) }),
|
|
2766
|
-
isBugType && /* @__PURE__ */
|
|
2767
|
-
/* @__PURE__ */
|
|
2768
|
-
/* @__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(
|
|
2769
3062
|
"button",
|
|
2770
3063
|
{
|
|
2771
3064
|
onClick: () => setSeverity(sev),
|
|
@@ -2776,7 +3069,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2776
3069
|
borderColor: color
|
|
2777
3070
|
} : {}
|
|
2778
3071
|
},
|
|
2779
|
-
children: /* @__PURE__ */
|
|
3072
|
+
children: /* @__PURE__ */ jsx10(
|
|
2780
3073
|
"span",
|
|
2781
3074
|
{
|
|
2782
3075
|
style: {
|
|
@@ -2790,13 +3083,13 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2790
3083
|
sev
|
|
2791
3084
|
)) })
|
|
2792
3085
|
] }),
|
|
2793
|
-
isBugType && /* @__PURE__ */
|
|
2794
|
-
/* @__PURE__ */
|
|
2795
|
-
/* @__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 })
|
|
2796
3089
|
] }),
|
|
2797
|
-
/* @__PURE__ */
|
|
2798
|
-
/* @__PURE__ */
|
|
2799
|
-
/* @__PURE__ */
|
|
3090
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.section, children: [
|
|
3091
|
+
/* @__PURE__ */ jsx10("div", { style: styles2.label, children: "What happened?" }),
|
|
3092
|
+
/* @__PURE__ */ jsx10(
|
|
2800
3093
|
"textarea",
|
|
2801
3094
|
{
|
|
2802
3095
|
style: styles2.descInput,
|
|
@@ -2807,9 +3100,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2807
3100
|
}
|
|
2808
3101
|
)
|
|
2809
3102
|
] }),
|
|
2810
|
-
isBugType && /* @__PURE__ */
|
|
2811
|
-
/* @__PURE__ */
|
|
2812
|
-
/* @__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(
|
|
2813
3106
|
"input",
|
|
2814
3107
|
{
|
|
2815
3108
|
style: styles2.routeInput,
|
|
@@ -2818,13 +3111,13 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2818
3111
|
placeholder: observedRoute.current
|
|
2819
3112
|
}
|
|
2820
3113
|
),
|
|
2821
|
-
/* @__PURE__ */
|
|
3114
|
+
/* @__PURE__ */ jsxs9("div", { style: styles2.routeHint, children: [
|
|
2822
3115
|
"Leave blank to use current page (",
|
|
2823
3116
|
observedRoute.current,
|
|
2824
3117
|
")"
|
|
2825
3118
|
] })
|
|
2826
3119
|
] }),
|
|
2827
|
-
/* @__PURE__ */
|
|
3120
|
+
/* @__PURE__ */ jsx10(
|
|
2828
3121
|
ImagePickerButtons,
|
|
2829
3122
|
{
|
|
2830
3123
|
images: images.images,
|
|
@@ -2835,8 +3128,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2835
3128
|
label: "Screenshots (optional)"
|
|
2836
3129
|
}
|
|
2837
3130
|
),
|
|
2838
|
-
error && /* @__PURE__ */
|
|
2839
|
-
/* @__PURE__ */
|
|
3131
|
+
error && /* @__PURE__ */ jsx10("div", { style: styles2.errorBanner, children: error }),
|
|
3132
|
+
/* @__PURE__ */ jsx10(
|
|
2840
3133
|
"button",
|
|
2841
3134
|
{
|
|
2842
3135
|
style: {
|
|
@@ -3001,16 +3294,16 @@ var styles2 = {
|
|
|
3001
3294
|
|
|
3002
3295
|
// src/widget/screens/ReportSuccessScreen.tsx
|
|
3003
3296
|
import { useEffect as useEffect4 } from "react";
|
|
3004
|
-
import { jsx as
|
|
3297
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3005
3298
|
function ReportSuccessScreen({ nav }) {
|
|
3006
3299
|
useEffect4(() => {
|
|
3007
3300
|
const timer = setTimeout(() => nav.reset(), 2e3);
|
|
3008
3301
|
return () => clearTimeout(timer);
|
|
3009
3302
|
}, [nav]);
|
|
3010
|
-
return /* @__PURE__ */
|
|
3011
|
-
/* @__PURE__ */
|
|
3012
|
-
/* @__PURE__ */
|
|
3013
|
-
/* @__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" })
|
|
3014
3307
|
] });
|
|
3015
3308
|
}
|
|
3016
3309
|
var styles3 = {
|
|
@@ -3039,11 +3332,12 @@ var styles3 = {
|
|
|
3039
3332
|
};
|
|
3040
3333
|
|
|
3041
3334
|
// src/widget/screens/MessageListScreen.tsx
|
|
3042
|
-
import { jsx as
|
|
3335
|
+
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3043
3336
|
function MessageListScreen({ nav }) {
|
|
3044
|
-
const { threads, unreadCount, refreshThreads } = useBugBear();
|
|
3045
|
-
return /* @__PURE__ */
|
|
3046
|
-
|
|
3337
|
+
const { threads, unreadCount, refreshThreads, isLoading } = useBugBear();
|
|
3338
|
+
if (isLoading) return /* @__PURE__ */ jsx12(MessageListScreenSkeleton, {});
|
|
3339
|
+
return /* @__PURE__ */ jsxs11("div", { children: [
|
|
3340
|
+
/* @__PURE__ */ jsx12(
|
|
3047
3341
|
"button",
|
|
3048
3342
|
{
|
|
3049
3343
|
style: {
|
|
@@ -3062,7 +3356,7 @@ function MessageListScreen({ nav }) {
|
|
|
3062
3356
|
children: "\u2709\uFE0F New Message"
|
|
3063
3357
|
}
|
|
3064
3358
|
),
|
|
3065
|
-
threads.length === 0 ? /* @__PURE__ */
|
|
3359
|
+
threads.length === 0 ? /* @__PURE__ */ jsxs11(
|
|
3066
3360
|
"div",
|
|
3067
3361
|
{
|
|
3068
3362
|
style: {
|
|
@@ -3073,8 +3367,8 @@ function MessageListScreen({ nav }) {
|
|
|
3073
3367
|
paddingBottom: 40
|
|
3074
3368
|
},
|
|
3075
3369
|
children: [
|
|
3076
|
-
/* @__PURE__ */
|
|
3077
|
-
/* @__PURE__ */
|
|
3370
|
+
/* @__PURE__ */ jsx12("span", { style: { fontSize: 36, marginBottom: 12 }, children: "\u{1F4AC}" }),
|
|
3371
|
+
/* @__PURE__ */ jsx12(
|
|
3078
3372
|
"span",
|
|
3079
3373
|
{
|
|
3080
3374
|
style: {
|
|
@@ -3086,7 +3380,7 @@ function MessageListScreen({ nav }) {
|
|
|
3086
3380
|
children: "No messages yet"
|
|
3087
3381
|
}
|
|
3088
3382
|
),
|
|
3089
|
-
/* @__PURE__ */
|
|
3383
|
+
/* @__PURE__ */ jsx12(
|
|
3090
3384
|
"span",
|
|
3091
3385
|
{
|
|
3092
3386
|
style: {
|
|
@@ -3099,7 +3393,7 @@ function MessageListScreen({ nav }) {
|
|
|
3099
3393
|
)
|
|
3100
3394
|
]
|
|
3101
3395
|
}
|
|
3102
|
-
) : /* @__PURE__ */
|
|
3396
|
+
) : /* @__PURE__ */ jsx12("div", { children: threads.map((thread) => /* @__PURE__ */ jsxs11(
|
|
3103
3397
|
"button",
|
|
3104
3398
|
{
|
|
3105
3399
|
style: {
|
|
@@ -3117,8 +3411,8 @@ function MessageListScreen({ nav }) {
|
|
|
3117
3411
|
},
|
|
3118
3412
|
onClick: () => nav.push({ name: "THREAD_DETAIL", thread }),
|
|
3119
3413
|
children: [
|
|
3120
|
-
/* @__PURE__ */
|
|
3121
|
-
/* @__PURE__ */
|
|
3414
|
+
/* @__PURE__ */ jsxs11("div", { style: { display: "flex", flex: 1, minWidth: 0 }, children: [
|
|
3415
|
+
/* @__PURE__ */ jsx12(
|
|
3122
3416
|
"span",
|
|
3123
3417
|
{
|
|
3124
3418
|
style: {
|
|
@@ -3130,7 +3424,7 @@ function MessageListScreen({ nav }) {
|
|
|
3130
3424
|
children: getThreadTypeIcon(thread.threadType)
|
|
3131
3425
|
}
|
|
3132
3426
|
),
|
|
3133
|
-
/* @__PURE__ */
|
|
3427
|
+
/* @__PURE__ */ jsxs11(
|
|
3134
3428
|
"div",
|
|
3135
3429
|
{
|
|
3136
3430
|
style: {
|
|
@@ -3138,7 +3432,7 @@ function MessageListScreen({ nav }) {
|
|
|
3138
3432
|
minWidth: 0
|
|
3139
3433
|
},
|
|
3140
3434
|
children: [
|
|
3141
|
-
/* @__PURE__ */
|
|
3435
|
+
/* @__PURE__ */ jsxs11(
|
|
3142
3436
|
"div",
|
|
3143
3437
|
{
|
|
3144
3438
|
style: {
|
|
@@ -3147,8 +3441,8 @@ function MessageListScreen({ nav }) {
|
|
|
3147
3441
|
gap: 4
|
|
3148
3442
|
},
|
|
3149
3443
|
children: [
|
|
3150
|
-
thread.isPinned && /* @__PURE__ */
|
|
3151
|
-
/* @__PURE__ */
|
|
3444
|
+
thread.isPinned && /* @__PURE__ */ jsx12("span", { style: { fontSize: 12, flexShrink: 0 }, children: "\u{1F4CC}" }),
|
|
3445
|
+
/* @__PURE__ */ jsx12(
|
|
3152
3446
|
"span",
|
|
3153
3447
|
{
|
|
3154
3448
|
style: {
|
|
@@ -3165,7 +3459,7 @@ function MessageListScreen({ nav }) {
|
|
|
3165
3459
|
]
|
|
3166
3460
|
}
|
|
3167
3461
|
),
|
|
3168
|
-
thread.lastMessage && /* @__PURE__ */
|
|
3462
|
+
thread.lastMessage && /* @__PURE__ */ jsxs11(
|
|
3169
3463
|
"span",
|
|
3170
3464
|
{
|
|
3171
3465
|
style: {
|
|
@@ -3189,7 +3483,7 @@ function MessageListScreen({ nav }) {
|
|
|
3189
3483
|
}
|
|
3190
3484
|
)
|
|
3191
3485
|
] }),
|
|
3192
|
-
/* @__PURE__ */
|
|
3486
|
+
/* @__PURE__ */ jsxs11(
|
|
3193
3487
|
"div",
|
|
3194
3488
|
{
|
|
3195
3489
|
style: {
|
|
@@ -3201,8 +3495,8 @@ function MessageListScreen({ nav }) {
|
|
|
3201
3495
|
flexShrink: 0
|
|
3202
3496
|
},
|
|
3203
3497
|
children: [
|
|
3204
|
-
/* @__PURE__ */
|
|
3205
|
-
thread.unreadCount > 0 && /* @__PURE__ */
|
|
3498
|
+
/* @__PURE__ */ jsx12("span", { style: { fontSize: 11, color: colors.textDim }, children: formatRelativeTime(thread.lastMessageAt) }),
|
|
3499
|
+
thread.unreadCount > 0 && /* @__PURE__ */ jsx12(
|
|
3206
3500
|
"span",
|
|
3207
3501
|
{
|
|
3208
3502
|
style: {
|
|
@@ -3229,7 +3523,7 @@ function MessageListScreen({ nav }) {
|
|
|
3229
3523
|
},
|
|
3230
3524
|
thread.id
|
|
3231
3525
|
)) }),
|
|
3232
|
-
/* @__PURE__ */
|
|
3526
|
+
/* @__PURE__ */ jsxs11(
|
|
3233
3527
|
"div",
|
|
3234
3528
|
{
|
|
3235
3529
|
style: {
|
|
@@ -3241,7 +3535,7 @@ function MessageListScreen({ nav }) {
|
|
|
3241
3535
|
paddingRight: 4
|
|
3242
3536
|
},
|
|
3243
3537
|
children: [
|
|
3244
|
-
/* @__PURE__ */
|
|
3538
|
+
/* @__PURE__ */ jsxs11("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
|
|
3245
3539
|
threads.length,
|
|
3246
3540
|
" thread",
|
|
3247
3541
|
threads.length !== 1 ? "s" : "",
|
|
@@ -3250,7 +3544,7 @@ function MessageListScreen({ nav }) {
|
|
|
3250
3544
|
unreadCount,
|
|
3251
3545
|
" unread"
|
|
3252
3546
|
] }),
|
|
3253
|
-
/* @__PURE__ */
|
|
3547
|
+
/* @__PURE__ */ jsx12(
|
|
3254
3548
|
"button",
|
|
3255
3549
|
{
|
|
3256
3550
|
style: {
|
|
@@ -3273,7 +3567,7 @@ function MessageListScreen({ nav }) {
|
|
|
3273
3567
|
|
|
3274
3568
|
// src/widget/screens/ThreadDetailScreen.tsx
|
|
3275
3569
|
import { useState as useState7, useEffect as useEffect5 } from "react";
|
|
3276
|
-
import { jsx as
|
|
3570
|
+
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3277
3571
|
var inputStyle = {
|
|
3278
3572
|
backgroundColor: "#27272a",
|
|
3279
3573
|
border: "1px solid #3f3f46",
|
|
@@ -3345,8 +3639,8 @@ function ThreadDetailScreen({
|
|
|
3345
3639
|
handleSend();
|
|
3346
3640
|
}
|
|
3347
3641
|
};
|
|
3348
|
-
return /* @__PURE__ */
|
|
3349
|
-
/* @__PURE__ */
|
|
3642
|
+
return /* @__PURE__ */ jsxs12("div", { style: { display: "flex", flexDirection: "column", flex: 1 }, children: [
|
|
3643
|
+
/* @__PURE__ */ jsxs12(
|
|
3350
3644
|
"div",
|
|
3351
3645
|
{
|
|
3352
3646
|
style: {
|
|
@@ -3358,8 +3652,8 @@ function ThreadDetailScreen({
|
|
|
3358
3652
|
borderBottom: `1px solid ${colors.border}`
|
|
3359
3653
|
},
|
|
3360
3654
|
children: [
|
|
3361
|
-
/* @__PURE__ */
|
|
3362
|
-
/* @__PURE__ */
|
|
3655
|
+
/* @__PURE__ */ jsx13("span", { style: { fontSize: 20 }, children: getThreadTypeIcon(thread.threadType) }),
|
|
3656
|
+
/* @__PURE__ */ jsx13(
|
|
3363
3657
|
"span",
|
|
3364
3658
|
{
|
|
3365
3659
|
style: {
|
|
@@ -3379,7 +3673,7 @@ function ThreadDetailScreen({
|
|
|
3379
3673
|
]
|
|
3380
3674
|
}
|
|
3381
3675
|
),
|
|
3382
|
-
loading ? /* @__PURE__ */
|
|
3676
|
+
loading ? /* @__PURE__ */ jsx13(
|
|
3383
3677
|
"div",
|
|
3384
3678
|
{
|
|
3385
3679
|
style: {
|
|
@@ -3387,11 +3681,11 @@ function ThreadDetailScreen({
|
|
|
3387
3681
|
paddingBottom: 40,
|
|
3388
3682
|
textAlign: "center"
|
|
3389
3683
|
},
|
|
3390
|
-
children: /* @__PURE__ */
|
|
3684
|
+
children: /* @__PURE__ */ jsx13("span", { style: { fontSize: 14, color: colors.textMuted }, children: "Loading messages..." })
|
|
3391
3685
|
}
|
|
3392
|
-
) : /* @__PURE__ */
|
|
3686
|
+
) : /* @__PURE__ */ jsx13("div", { style: { paddingBottom: 8, marginBottom: 8 }, children: messages.map((msg) => {
|
|
3393
3687
|
const isTester = msg.senderType === "tester";
|
|
3394
|
-
return /* @__PURE__ */
|
|
3688
|
+
return /* @__PURE__ */ jsxs12(
|
|
3395
3689
|
"div",
|
|
3396
3690
|
{
|
|
3397
3691
|
style: {
|
|
@@ -3407,7 +3701,7 @@ function ThreadDetailScreen({
|
|
|
3407
3701
|
borderBottomRightRadius: isTester ? 4 : 16
|
|
3408
3702
|
},
|
|
3409
3703
|
children: [
|
|
3410
|
-
/* @__PURE__ */
|
|
3704
|
+
/* @__PURE__ */ jsx13(
|
|
3411
3705
|
"span",
|
|
3412
3706
|
{
|
|
3413
3707
|
style: {
|
|
@@ -3420,7 +3714,7 @@ function ThreadDetailScreen({
|
|
|
3420
3714
|
children: isTester ? "You" : msg.senderName
|
|
3421
3715
|
}
|
|
3422
3716
|
),
|
|
3423
|
-
/* @__PURE__ */
|
|
3717
|
+
/* @__PURE__ */ jsx13(
|
|
3424
3718
|
"span",
|
|
3425
3719
|
{
|
|
3426
3720
|
style: {
|
|
@@ -3434,7 +3728,7 @@ function ThreadDetailScreen({
|
|
|
3434
3728
|
children: msg.content
|
|
3435
3729
|
}
|
|
3436
3730
|
),
|
|
3437
|
-
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(
|
|
3438
3732
|
"img",
|
|
3439
3733
|
{
|
|
3440
3734
|
src: att.url,
|
|
@@ -3443,7 +3737,7 @@ function ThreadDetailScreen({
|
|
|
3443
3737
|
},
|
|
3444
3738
|
idx
|
|
3445
3739
|
)) }),
|
|
3446
|
-
/* @__PURE__ */
|
|
3740
|
+
/* @__PURE__ */ jsx13(
|
|
3447
3741
|
"span",
|
|
3448
3742
|
{
|
|
3449
3743
|
style: {
|
|
@@ -3461,7 +3755,7 @@ function ThreadDetailScreen({
|
|
|
3461
3755
|
msg.id
|
|
3462
3756
|
);
|
|
3463
3757
|
}) }),
|
|
3464
|
-
sendError && /* @__PURE__ */
|
|
3758
|
+
sendError && /* @__PURE__ */ jsx13(
|
|
3465
3759
|
"div",
|
|
3466
3760
|
{
|
|
3467
3761
|
style: {
|
|
@@ -3473,7 +3767,7 @@ function ThreadDetailScreen({
|
|
|
3473
3767
|
borderRadius: 8,
|
|
3474
3768
|
marginBottom: 8
|
|
3475
3769
|
},
|
|
3476
|
-
children: /* @__PURE__ */
|
|
3770
|
+
children: /* @__PURE__ */ jsx13(
|
|
3477
3771
|
"span",
|
|
3478
3772
|
{
|
|
3479
3773
|
style: {
|
|
@@ -3487,8 +3781,8 @@ function ThreadDetailScreen({
|
|
|
3487
3781
|
)
|
|
3488
3782
|
}
|
|
3489
3783
|
),
|
|
3490
|
-
replyImages.images.length > 0 && /* @__PURE__ */
|
|
3491
|
-
/* @__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(
|
|
3492
3786
|
"div",
|
|
3493
3787
|
{
|
|
3494
3788
|
style: {
|
|
@@ -3499,7 +3793,7 @@ function ThreadDetailScreen({
|
|
|
3499
3793
|
gap: 8
|
|
3500
3794
|
},
|
|
3501
3795
|
children: [
|
|
3502
|
-
/* @__PURE__ */
|
|
3796
|
+
/* @__PURE__ */ jsx13(
|
|
3503
3797
|
"button",
|
|
3504
3798
|
{
|
|
3505
3799
|
type: "button",
|
|
@@ -3518,7 +3812,7 @@ function ThreadDetailScreen({
|
|
|
3518
3812
|
children: "\u{1F4CE}"
|
|
3519
3813
|
}
|
|
3520
3814
|
),
|
|
3521
|
-
/* @__PURE__ */
|
|
3815
|
+
/* @__PURE__ */ jsx13(
|
|
3522
3816
|
"input",
|
|
3523
3817
|
{
|
|
3524
3818
|
type: "text",
|
|
@@ -3534,7 +3828,7 @@ function ThreadDetailScreen({
|
|
|
3534
3828
|
}
|
|
3535
3829
|
}
|
|
3536
3830
|
),
|
|
3537
|
-
/* @__PURE__ */
|
|
3831
|
+
/* @__PURE__ */ jsx13(
|
|
3538
3832
|
"button",
|
|
3539
3833
|
{
|
|
3540
3834
|
style: {
|
|
@@ -3562,7 +3856,7 @@ function ThreadDetailScreen({
|
|
|
3562
3856
|
|
|
3563
3857
|
// src/widget/screens/ComposeMessageScreen.tsx
|
|
3564
3858
|
import { useState as useState8 } from "react";
|
|
3565
|
-
import { jsx as
|
|
3859
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
3566
3860
|
var inputStyle2 = {
|
|
3567
3861
|
backgroundColor: "#27272a",
|
|
3568
3862
|
border: "1px solid #3f3f46",
|
|
@@ -3593,9 +3887,9 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3593
3887
|
nav.pop();
|
|
3594
3888
|
}
|
|
3595
3889
|
};
|
|
3596
|
-
return /* @__PURE__ */
|
|
3597
|
-
/* @__PURE__ */
|
|
3598
|
-
/* @__PURE__ */
|
|
3890
|
+
return /* @__PURE__ */ jsxs13("div", { children: [
|
|
3891
|
+
/* @__PURE__ */ jsxs13("div", { style: { marginBottom: 20 }, children: [
|
|
3892
|
+
/* @__PURE__ */ jsx14(
|
|
3599
3893
|
"div",
|
|
3600
3894
|
{
|
|
3601
3895
|
style: {
|
|
@@ -3607,9 +3901,9 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3607
3901
|
children: "New Message"
|
|
3608
3902
|
}
|
|
3609
3903
|
),
|
|
3610
|
-
/* @__PURE__ */
|
|
3904
|
+
/* @__PURE__ */ jsx14("div", { style: { fontSize: 14, color: colors.textMuted }, children: "Send a message to the QA team" })
|
|
3611
3905
|
] }),
|
|
3612
|
-
/* @__PURE__ */
|
|
3906
|
+
/* @__PURE__ */ jsxs13(
|
|
3613
3907
|
"div",
|
|
3614
3908
|
{
|
|
3615
3909
|
style: {
|
|
@@ -3619,7 +3913,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3619
3913
|
border: `1px solid ${colors.border}`
|
|
3620
3914
|
},
|
|
3621
3915
|
children: [
|
|
3622
|
-
/* @__PURE__ */
|
|
3916
|
+
/* @__PURE__ */ jsx14(
|
|
3623
3917
|
"label",
|
|
3624
3918
|
{
|
|
3625
3919
|
style: {
|
|
@@ -3632,7 +3926,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3632
3926
|
children: "Subject"
|
|
3633
3927
|
}
|
|
3634
3928
|
),
|
|
3635
|
-
/* @__PURE__ */
|
|
3929
|
+
/* @__PURE__ */ jsx14(
|
|
3636
3930
|
"input",
|
|
3637
3931
|
{
|
|
3638
3932
|
type: "text",
|
|
@@ -3647,7 +3941,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3647
3941
|
}
|
|
3648
3942
|
}
|
|
3649
3943
|
),
|
|
3650
|
-
/* @__PURE__ */
|
|
3944
|
+
/* @__PURE__ */ jsx14(
|
|
3651
3945
|
"label",
|
|
3652
3946
|
{
|
|
3653
3947
|
style: {
|
|
@@ -3661,7 +3955,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3661
3955
|
children: "Message"
|
|
3662
3956
|
}
|
|
3663
3957
|
),
|
|
3664
|
-
/* @__PURE__ */
|
|
3958
|
+
/* @__PURE__ */ jsx14(
|
|
3665
3959
|
"textarea",
|
|
3666
3960
|
{
|
|
3667
3961
|
value: message,
|
|
@@ -3680,7 +3974,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3680
3974
|
}
|
|
3681
3975
|
}
|
|
3682
3976
|
),
|
|
3683
|
-
/* @__PURE__ */
|
|
3977
|
+
/* @__PURE__ */ jsx14(
|
|
3684
3978
|
ImagePickerButtons,
|
|
3685
3979
|
{
|
|
3686
3980
|
images: images.images,
|
|
@@ -3691,7 +3985,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3691
3985
|
label: "Attachments (optional)"
|
|
3692
3986
|
}
|
|
3693
3987
|
),
|
|
3694
|
-
/* @__PURE__ */
|
|
3988
|
+
/* @__PURE__ */ jsx14(
|
|
3695
3989
|
"button",
|
|
3696
3990
|
{
|
|
3697
3991
|
style: {
|
|
@@ -3720,7 +4014,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3720
4014
|
|
|
3721
4015
|
// src/widget/screens/ProfileScreen.tsx
|
|
3722
4016
|
import { useState as useState9, useEffect as useEffect6 } from "react";
|
|
3723
|
-
import { jsx as
|
|
4017
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3724
4018
|
function ProfileScreen({ nav }) {
|
|
3725
4019
|
const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo } = useBugBear();
|
|
3726
4020
|
const [editing, setEditing] = useState9(false);
|
|
@@ -3767,22 +4061,22 @@ function ProfileScreen({ nav }) {
|
|
|
3767
4061
|
}
|
|
3768
4062
|
};
|
|
3769
4063
|
if (saved) {
|
|
3770
|
-
return /* @__PURE__ */
|
|
3771
|
-
/* @__PURE__ */
|
|
3772
|
-
/* @__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!" })
|
|
3773
4067
|
] });
|
|
3774
4068
|
}
|
|
3775
4069
|
if (!testerInfo) {
|
|
3776
|
-
return /* @__PURE__ */
|
|
3777
|
-
/* @__PURE__ */
|
|
3778
|
-
/* @__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" })
|
|
3779
4073
|
] });
|
|
3780
4074
|
}
|
|
3781
4075
|
if (editing) {
|
|
3782
|
-
return /* @__PURE__ */
|
|
3783
|
-
/* @__PURE__ */
|
|
3784
|
-
/* @__PURE__ */
|
|
3785
|
-
/* @__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(
|
|
3786
4080
|
"button",
|
|
3787
4081
|
{
|
|
3788
4082
|
style: styles4.cancelButton,
|
|
@@ -3794,9 +4088,9 @@ function ProfileScreen({ nav }) {
|
|
|
3794
4088
|
}
|
|
3795
4089
|
)
|
|
3796
4090
|
] }),
|
|
3797
|
-
/* @__PURE__ */
|
|
3798
|
-
/* @__PURE__ */
|
|
3799
|
-
/* @__PURE__ */
|
|
4091
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.field, children: [
|
|
4092
|
+
/* @__PURE__ */ jsx15("label", { style: styles4.label, children: "Name" }),
|
|
4093
|
+
/* @__PURE__ */ jsx15(
|
|
3800
4094
|
"input",
|
|
3801
4095
|
{
|
|
3802
4096
|
style: styles4.input,
|
|
@@ -3806,15 +4100,15 @@ function ProfileScreen({ nav }) {
|
|
|
3806
4100
|
}
|
|
3807
4101
|
)
|
|
3808
4102
|
] }),
|
|
3809
|
-
/* @__PURE__ */
|
|
3810
|
-
/* @__PURE__ */
|
|
3811
|
-
/* @__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 })
|
|
3812
4106
|
] }),
|
|
3813
|
-
/* @__PURE__ */
|
|
3814
|
-
/* @__PURE__ */
|
|
3815
|
-
additionalEmails.map((email) => /* @__PURE__ */
|
|
3816
|
-
/* @__PURE__ */
|
|
3817
|
-
/* @__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(
|
|
3818
4112
|
"button",
|
|
3819
4113
|
{
|
|
3820
4114
|
style: styles4.removeEmailButton,
|
|
@@ -3823,8 +4117,8 @@ function ProfileScreen({ nav }) {
|
|
|
3823
4117
|
}
|
|
3824
4118
|
)
|
|
3825
4119
|
] }, email)),
|
|
3826
|
-
/* @__PURE__ */
|
|
3827
|
-
/* @__PURE__ */
|
|
4120
|
+
/* @__PURE__ */ jsxs14("div", { style: styles4.addEmailRow, children: [
|
|
4121
|
+
/* @__PURE__ */ jsx15(
|
|
3828
4122
|
"input",
|
|
3829
4123
|
{
|
|
3830
4124
|
style: { ...styles4.input, flex: 1, marginRight: 8 },
|
|
@@ -3837,18 +4131,18 @@ function ProfileScreen({ nav }) {
|
|
|
3837
4131
|
}
|
|
3838
4132
|
}
|
|
3839
4133
|
),
|
|
3840
|
-
/* @__PURE__ */
|
|
4134
|
+
/* @__PURE__ */ jsx15("button", { style: styles4.addButton, onClick: handleAddEmail, children: "Add" })
|
|
3841
4135
|
] })
|
|
3842
4136
|
] }),
|
|
3843
|
-
/* @__PURE__ */
|
|
3844
|
-
/* @__PURE__ */
|
|
3845
|
-
/* @__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: [
|
|
3846
4140
|
{ key: "ios", label: "\u{1F4F1} iOS" },
|
|
3847
4141
|
{ key: "android", label: "\u{1F916} Android" },
|
|
3848
4142
|
{ key: "web", label: "\u{1F310} Web" }
|
|
3849
4143
|
].map(({ key, label }) => {
|
|
3850
4144
|
const isActive = platforms.includes(key);
|
|
3851
|
-
return /* @__PURE__ */
|
|
4145
|
+
return /* @__PURE__ */ jsx15(
|
|
3852
4146
|
"button",
|
|
3853
4147
|
{
|
|
3854
4148
|
style: {
|
|
@@ -3858,13 +4152,13 @@ function ProfileScreen({ nav }) {
|
|
|
3858
4152
|
onClick: () => setPlatforms(
|
|
3859
4153
|
(prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key]
|
|
3860
4154
|
),
|
|
3861
|
-
children: /* @__PURE__ */
|
|
4155
|
+
children: /* @__PURE__ */ jsx15("span", { style: isActive ? styles4.platformTextActive : styles4.platformText, children: label })
|
|
3862
4156
|
},
|
|
3863
4157
|
key
|
|
3864
4158
|
);
|
|
3865
4159
|
}) })
|
|
3866
4160
|
] }),
|
|
3867
|
-
/* @__PURE__ */
|
|
4161
|
+
/* @__PURE__ */ jsx15(
|
|
3868
4162
|
"button",
|
|
3869
4163
|
{
|
|
3870
4164
|
style: { ...styles4.primaryButton, marginTop: 20 },
|
|
@@ -3875,45 +4169,45 @@ function ProfileScreen({ nav }) {
|
|
|
3875
4169
|
)
|
|
3876
4170
|
] });
|
|
3877
4171
|
}
|
|
3878
|
-
return /* @__PURE__ */
|
|
3879
|
-
/* @__PURE__ */
|
|
3880
|
-
/* @__PURE__ */
|
|
3881
|
-
/* @__PURE__ */
|
|
3882
|
-
/* @__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 })
|
|
3883
4177
|
] }),
|
|
3884
|
-
/* @__PURE__ */
|
|
3885
|
-
/* @__PURE__ */
|
|
3886
|
-
/* @__PURE__ */
|
|
3887
|
-
/* @__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" })
|
|
3888
4182
|
] }),
|
|
3889
|
-
/* @__PURE__ */
|
|
3890
|
-
/* @__PURE__ */
|
|
3891
|
-
/* @__PURE__ */
|
|
3892
|
-
/* @__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" })
|
|
3893
4187
|
] })
|
|
3894
4188
|
] }),
|
|
3895
|
-
/* @__PURE__ */
|
|
4189
|
+
/* @__PURE__ */ jsx15(
|
|
3896
4190
|
"button",
|
|
3897
4191
|
{
|
|
3898
4192
|
style: styles4.detailsToggle,
|
|
3899
4193
|
onClick: () => setShowDetails(!showDetails),
|
|
3900
|
-
children: /* @__PURE__ */
|
|
4194
|
+
children: /* @__PURE__ */ jsxs14("span", { style: styles4.detailsToggleText, children: [
|
|
3901
4195
|
showDetails ? "\u25BC" : "\u25B6",
|
|
3902
4196
|
" Details"
|
|
3903
4197
|
] })
|
|
3904
4198
|
}
|
|
3905
4199
|
),
|
|
3906
|
-
showDetails && /* @__PURE__ */
|
|
3907
|
-
additionalEmails.length > 0 && /* @__PURE__ */
|
|
3908
|
-
/* @__PURE__ */
|
|
3909
|
-
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))
|
|
3910
4204
|
] }),
|
|
3911
|
-
platforms.length > 0 && /* @__PURE__ */
|
|
3912
|
-
/* @__PURE__ */
|
|
3913
|
-
/* @__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)) })
|
|
3914
4208
|
] })
|
|
3915
4209
|
] }),
|
|
3916
|
-
/* @__PURE__ */
|
|
4210
|
+
/* @__PURE__ */ jsx15(
|
|
3917
4211
|
"button",
|
|
3918
4212
|
{
|
|
3919
4213
|
style: { ...styles4.primaryButton, marginTop: 20 },
|
|
@@ -4197,7 +4491,7 @@ var styles4 = {
|
|
|
4197
4491
|
|
|
4198
4492
|
// src/widget/screens/IssueListScreen.tsx
|
|
4199
4493
|
import { useState as useState10, useEffect as useEffect7 } from "react";
|
|
4200
|
-
import { jsx as
|
|
4494
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
4201
4495
|
var CATEGORY_CONFIG = {
|
|
4202
4496
|
open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
|
|
4203
4497
|
done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
|
|
@@ -4240,15 +4534,15 @@ function IssueListScreen({ nav, category }) {
|
|
|
4240
4534
|
};
|
|
4241
4535
|
}, [client, category]);
|
|
4242
4536
|
if (loading) {
|
|
4243
|
-
return /* @__PURE__ */
|
|
4537
|
+
return /* @__PURE__ */ jsx16(IssueListScreenSkeleton, {});
|
|
4244
4538
|
}
|
|
4245
4539
|
if (issues.length === 0) {
|
|
4246
|
-
return /* @__PURE__ */
|
|
4247
|
-
/* @__PURE__ */
|
|
4248
|
-
/* @__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 })
|
|
4249
4543
|
] });
|
|
4250
4544
|
}
|
|
4251
|
-
return /* @__PURE__ */
|
|
4545
|
+
return /* @__PURE__ */ jsx16("div", { children: issues.map((issue) => /* @__PURE__ */ jsxs15(
|
|
4252
4546
|
"div",
|
|
4253
4547
|
{
|
|
4254
4548
|
role: "button",
|
|
@@ -4267,8 +4561,8 @@ function IssueListScreen({ nav, category }) {
|
|
|
4267
4561
|
userSelect: "none"
|
|
4268
4562
|
},
|
|
4269
4563
|
children: [
|
|
4270
|
-
/* @__PURE__ */
|
|
4271
|
-
issue.severity && /* @__PURE__ */
|
|
4564
|
+
/* @__PURE__ */ jsxs15("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 }, children: [
|
|
4565
|
+
issue.severity && /* @__PURE__ */ jsx16(
|
|
4272
4566
|
"span",
|
|
4273
4567
|
{
|
|
4274
4568
|
style: {
|
|
@@ -4281,7 +4575,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4281
4575
|
}
|
|
4282
4576
|
}
|
|
4283
4577
|
),
|
|
4284
|
-
/* @__PURE__ */
|
|
4578
|
+
/* @__PURE__ */ jsx16("span", { style: {
|
|
4285
4579
|
fontSize: 13,
|
|
4286
4580
|
fontWeight: 600,
|
|
4287
4581
|
color: colors.textPrimary,
|
|
@@ -4291,11 +4585,11 @@ function IssueListScreen({ nav, category }) {
|
|
|
4291
4585
|
whiteSpace: "nowrap"
|
|
4292
4586
|
}, children: issue.title })
|
|
4293
4587
|
] }),
|
|
4294
|
-
/* @__PURE__ */
|
|
4295
|
-
issue.route && /* @__PURE__ */
|
|
4296
|
-
/* @__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) })
|
|
4297
4591
|
] }),
|
|
4298
|
-
category === "done" && issue.verifiedByName && /* @__PURE__ */
|
|
4592
|
+
category === "done" && issue.verifiedByName && /* @__PURE__ */ jsxs15("div", { style: {
|
|
4299
4593
|
display: "inline-flex",
|
|
4300
4594
|
alignItems: "center",
|
|
4301
4595
|
gap: 4,
|
|
@@ -4311,7 +4605,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4311
4605
|
"\u2714 Verified by ",
|
|
4312
4606
|
issue.verifiedByName
|
|
4313
4607
|
] }),
|
|
4314
|
-
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */
|
|
4608
|
+
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ jsxs15("div", { style: {
|
|
4315
4609
|
display: "inline-flex",
|
|
4316
4610
|
alignItems: "center",
|
|
4317
4611
|
gap: 4,
|
|
@@ -4338,7 +4632,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4338
4632
|
}
|
|
4339
4633
|
|
|
4340
4634
|
// src/widget/screens/IssueDetailScreen.tsx
|
|
4341
|
-
import { jsx as
|
|
4635
|
+
import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
4342
4636
|
var STATUS_LABELS = {
|
|
4343
4637
|
new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
|
|
4344
4638
|
triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
|
|
@@ -4362,9 +4656,9 @@ var SEVERITY_CONFIG = {
|
|
|
4362
4656
|
function IssueDetailScreen({ nav, issue }) {
|
|
4363
4657
|
const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
|
|
4364
4658
|
const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
|
|
4365
|
-
return /* @__PURE__ */
|
|
4366
|
-
/* @__PURE__ */
|
|
4367
|
-
/* @__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: {
|
|
4368
4662
|
backgroundColor: statusConfig.bg,
|
|
4369
4663
|
color: statusConfig.color,
|
|
4370
4664
|
fontSize: 11,
|
|
@@ -4372,7 +4666,7 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4372
4666
|
padding: "3px 10px",
|
|
4373
4667
|
borderRadius: 6
|
|
4374
4668
|
}, children: statusConfig.label }),
|
|
4375
|
-
severityConfig && /* @__PURE__ */
|
|
4669
|
+
severityConfig && /* @__PURE__ */ jsx17("span", { style: {
|
|
4376
4670
|
backgroundColor: severityConfig.bg,
|
|
4377
4671
|
color: severityConfig.color,
|
|
4378
4672
|
fontSize: 11,
|
|
@@ -4381,9 +4675,9 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4381
4675
|
borderRadius: 6
|
|
4382
4676
|
}, children: severityConfig.label })
|
|
4383
4677
|
] }),
|
|
4384
|
-
/* @__PURE__ */
|
|
4385
|
-
issue.route && /* @__PURE__ */
|
|
4386
|
-
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: {
|
|
4387
4681
|
backgroundColor: colors.card,
|
|
4388
4682
|
border: `1px solid ${colors.border}`,
|
|
4389
4683
|
borderRadius: 8,
|
|
@@ -4395,56 +4689,56 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4395
4689
|
whiteSpace: "pre-wrap",
|
|
4396
4690
|
wordBreak: "break-word"
|
|
4397
4691
|
}, children: issue.description }),
|
|
4398
|
-
issue.verifiedByName && /* @__PURE__ */
|
|
4692
|
+
issue.verifiedByName && /* @__PURE__ */ jsxs16("div", { style: {
|
|
4399
4693
|
backgroundColor: "#14532d",
|
|
4400
4694
|
border: "1px solid #166534",
|
|
4401
4695
|
borderRadius: 8,
|
|
4402
4696
|
padding: 12,
|
|
4403
4697
|
marginBottom: 12
|
|
4404
4698
|
}, children: [
|
|
4405
|
-
/* @__PURE__ */
|
|
4406
|
-
/* @__PURE__ */
|
|
4407
|
-
/* @__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" })
|
|
4408
4702
|
] }),
|
|
4409
|
-
/* @__PURE__ */
|
|
4703
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, color: "#86efac" }, children: [
|
|
4410
4704
|
"Verified by ",
|
|
4411
|
-
/* @__PURE__ */
|
|
4412
|
-
issue.verifiedAt && /* @__PURE__ */
|
|
4705
|
+
/* @__PURE__ */ jsx17("strong", { children: issue.verifiedByName }),
|
|
4706
|
+
issue.verifiedAt && /* @__PURE__ */ jsxs16("span", { children: [
|
|
4413
4707
|
" on ",
|
|
4414
4708
|
new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })
|
|
4415
4709
|
] })
|
|
4416
4710
|
] })
|
|
4417
4711
|
] }),
|
|
4418
|
-
issue.originalBugTitle && /* @__PURE__ */
|
|
4712
|
+
issue.originalBugTitle && /* @__PURE__ */ jsxs16("div", { style: {
|
|
4419
4713
|
backgroundColor: "#422006",
|
|
4420
4714
|
border: "1px solid #854d0e",
|
|
4421
4715
|
borderRadius: 8,
|
|
4422
4716
|
padding: 12,
|
|
4423
4717
|
marginBottom: 12
|
|
4424
4718
|
}, children: [
|
|
4425
|
-
/* @__PURE__ */
|
|
4426
|
-
/* @__PURE__ */
|
|
4427
|
-
/* @__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" })
|
|
4428
4722
|
] }),
|
|
4429
|
-
/* @__PURE__ */
|
|
4723
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, color: "#fde68a" }, children: [
|
|
4430
4724
|
"Retest of: ",
|
|
4431
|
-
/* @__PURE__ */
|
|
4725
|
+
/* @__PURE__ */ jsx17("strong", { children: issue.originalBugTitle })
|
|
4432
4726
|
] })
|
|
4433
4727
|
] }),
|
|
4434
|
-
issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */
|
|
4435
|
-
/* @__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: [
|
|
4436
4730
|
"Screenshots (",
|
|
4437
4731
|
issue.screenshotUrls.length,
|
|
4438
4732
|
")"
|
|
4439
4733
|
] }),
|
|
4440
|
-
/* @__PURE__ */
|
|
4734
|
+
/* @__PURE__ */ jsx17("div", { style: { display: "flex", gap: 8, overflowX: "auto" }, children: issue.screenshotUrls.map((url, i) => /* @__PURE__ */ jsx17(
|
|
4441
4735
|
"a",
|
|
4442
4736
|
{
|
|
4443
4737
|
href: url,
|
|
4444
4738
|
target: "_blank",
|
|
4445
4739
|
rel: "noopener noreferrer",
|
|
4446
4740
|
style: { flexShrink: 0 },
|
|
4447
|
-
children: /* @__PURE__ */
|
|
4741
|
+
children: /* @__PURE__ */ jsx17(
|
|
4448
4742
|
"img",
|
|
4449
4743
|
{
|
|
4450
4744
|
src: url,
|
|
@@ -4462,16 +4756,16 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4462
4756
|
i
|
|
4463
4757
|
)) })
|
|
4464
4758
|
] }),
|
|
4465
|
-
/* @__PURE__ */
|
|
4759
|
+
/* @__PURE__ */ jsxs16("div", { style: {
|
|
4466
4760
|
borderTop: `1px solid ${colors.border}`,
|
|
4467
4761
|
paddingTop: 12,
|
|
4468
4762
|
marginTop: 4
|
|
4469
4763
|
}, children: [
|
|
4470
|
-
issue.reporterName && /* @__PURE__ */
|
|
4764
|
+
issue.reporterName && /* @__PURE__ */ jsxs16("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 4 }, children: [
|
|
4471
4765
|
"Reported by ",
|
|
4472
4766
|
issue.reporterName
|
|
4473
4767
|
] }),
|
|
4474
|
-
/* @__PURE__ */
|
|
4768
|
+
/* @__PURE__ */ jsxs16("div", { style: { fontSize: 11, color: colors.textDim }, children: [
|
|
4475
4769
|
"Created ",
|
|
4476
4770
|
formatRelativeTime(issue.createdAt),
|
|
4477
4771
|
" \xB7 Updated ",
|
|
@@ -4485,9 +4779,9 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4485
4779
|
var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
|
|
4486
4780
|
|
|
4487
4781
|
// src/BugBearPanel.tsx
|
|
4488
|
-
import { Fragment as Fragment4, jsx as
|
|
4782
|
+
import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
4489
4783
|
function BugBearIcon({ size = 24 }) {
|
|
4490
|
-
return /* @__PURE__ */
|
|
4784
|
+
return /* @__PURE__ */ jsx18(
|
|
4491
4785
|
"img",
|
|
4492
4786
|
{
|
|
4493
4787
|
src: BUGBEAR_LOGO_BASE64,
|
|
@@ -4652,37 +4946,37 @@ function BugBearPanel({
|
|
|
4652
4946
|
const renderScreen = () => {
|
|
4653
4947
|
switch (currentScreen.name) {
|
|
4654
4948
|
case "HOME":
|
|
4655
|
-
return /* @__PURE__ */
|
|
4949
|
+
return /* @__PURE__ */ jsx18(HomeScreen, { nav });
|
|
4656
4950
|
case "TEST_DETAIL":
|
|
4657
|
-
return /* @__PURE__ */
|
|
4951
|
+
return /* @__PURE__ */ jsx18(TestDetailScreen, { testId: currentScreen.testId, nav });
|
|
4658
4952
|
case "TEST_LIST":
|
|
4659
|
-
return /* @__PURE__ */
|
|
4953
|
+
return /* @__PURE__ */ jsx18(TestListScreen, { nav });
|
|
4660
4954
|
case "TEST_FEEDBACK":
|
|
4661
|
-
return /* @__PURE__ */
|
|
4955
|
+
return /* @__PURE__ */ jsx18(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
|
|
4662
4956
|
case "REPORT":
|
|
4663
|
-
return /* @__PURE__ */
|
|
4957
|
+
return /* @__PURE__ */ jsx18(ReportScreen, { nav, prefill: currentScreen.prefill });
|
|
4664
4958
|
case "REPORT_SUCCESS":
|
|
4665
|
-
return /* @__PURE__ */
|
|
4959
|
+
return /* @__PURE__ */ jsx18(ReportSuccessScreen, { nav });
|
|
4666
4960
|
case "MESSAGE_LIST":
|
|
4667
|
-
return /* @__PURE__ */
|
|
4961
|
+
return /* @__PURE__ */ jsx18(MessageListScreen, { nav });
|
|
4668
4962
|
case "THREAD_DETAIL":
|
|
4669
|
-
return /* @__PURE__ */
|
|
4963
|
+
return /* @__PURE__ */ jsx18(ThreadDetailScreen, { thread: currentScreen.thread, nav });
|
|
4670
4964
|
case "COMPOSE_MESSAGE":
|
|
4671
|
-
return /* @__PURE__ */
|
|
4965
|
+
return /* @__PURE__ */ jsx18(ComposeMessageScreen, { nav });
|
|
4672
4966
|
case "ISSUE_LIST":
|
|
4673
|
-
return /* @__PURE__ */
|
|
4967
|
+
return /* @__PURE__ */ jsx18(IssueListScreen, { nav, category: currentScreen.category });
|
|
4674
4968
|
case "ISSUE_DETAIL":
|
|
4675
|
-
return /* @__PURE__ */
|
|
4969
|
+
return /* @__PURE__ */ jsx18(IssueDetailScreen, { nav, issue: currentScreen.issue });
|
|
4676
4970
|
case "PROFILE":
|
|
4677
|
-
return /* @__PURE__ */
|
|
4971
|
+
return /* @__PURE__ */ jsx18(ProfileScreen, { nav });
|
|
4678
4972
|
default:
|
|
4679
|
-
return /* @__PURE__ */
|
|
4973
|
+
return /* @__PURE__ */ jsx18(HomeScreen, { nav });
|
|
4680
4974
|
}
|
|
4681
4975
|
};
|
|
4682
4976
|
if (typeof document === "undefined") return null;
|
|
4683
4977
|
const headerTitle = getHeaderTitle();
|
|
4684
4978
|
return createPortal(
|
|
4685
|
-
/* @__PURE__ */
|
|
4979
|
+
/* @__PURE__ */ jsxs17(
|
|
4686
4980
|
"div",
|
|
4687
4981
|
{
|
|
4688
4982
|
ref: panelRef,
|
|
@@ -4701,7 +4995,7 @@ function BugBearPanel({
|
|
|
4701
4995
|
},
|
|
4702
4996
|
onMouseDown: handleMouseDown,
|
|
4703
4997
|
children: [
|
|
4704
|
-
collapsed && /* @__PURE__ */
|
|
4998
|
+
collapsed && /* @__PURE__ */ jsxs17(
|
|
4705
4999
|
"button",
|
|
4706
5000
|
{
|
|
4707
5001
|
onClick: () => setCollapsed(false),
|
|
@@ -4723,9 +5017,9 @@ function BugBearPanel({
|
|
|
4723
5017
|
fontWeight: 500
|
|
4724
5018
|
},
|
|
4725
5019
|
children: [
|
|
4726
|
-
/* @__PURE__ */
|
|
4727
|
-
/* @__PURE__ */
|
|
4728
|
-
badgeCount > 0 && /* @__PURE__ */
|
|
5020
|
+
/* @__PURE__ */ jsx18(BugBearIcon, { size: 24 }),
|
|
5021
|
+
/* @__PURE__ */ jsx18("span", { children: "BugBear" }),
|
|
5022
|
+
badgeCount > 0 && /* @__PURE__ */ jsx18("span", { style: {
|
|
4729
5023
|
backgroundColor: "#fff",
|
|
4730
5024
|
color: colors.blue,
|
|
4731
5025
|
fontSize: "0.75rem",
|
|
@@ -4736,7 +5030,7 @@ function BugBearPanel({
|
|
|
4736
5030
|
]
|
|
4737
5031
|
}
|
|
4738
5032
|
),
|
|
4739
|
-
!collapsed && /* @__PURE__ */
|
|
5033
|
+
!collapsed && /* @__PURE__ */ jsxs17("div", { style: {
|
|
4740
5034
|
width: PANEL_WIDTH,
|
|
4741
5035
|
backgroundColor: colors.bg,
|
|
4742
5036
|
borderRadius: 12,
|
|
@@ -4744,7 +5038,7 @@ function BugBearPanel({
|
|
|
4744
5038
|
overflow: "hidden",
|
|
4745
5039
|
boxShadow: "0 25px 50px -12px rgba(0,0,0,0.5)"
|
|
4746
5040
|
}, children: [
|
|
4747
|
-
/* @__PURE__ */
|
|
5041
|
+
/* @__PURE__ */ jsxs17(
|
|
4748
5042
|
"div",
|
|
4749
5043
|
{
|
|
4750
5044
|
"data-drag-handle": true,
|
|
@@ -4760,7 +5054,7 @@ function BugBearPanel({
|
|
|
4760
5054
|
cursor: draggable ? isDragging ? "grabbing" : "grab" : "default"
|
|
4761
5055
|
},
|
|
4762
5056
|
children: [
|
|
4763
|
-
/* @__PURE__ */
|
|
5057
|
+
/* @__PURE__ */ jsx18("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ jsx18(
|
|
4764
5058
|
"button",
|
|
4765
5059
|
{
|
|
4766
5060
|
onClick: pop,
|
|
@@ -4776,14 +5070,14 @@ function BugBearPanel({
|
|
|
4776
5070
|
},
|
|
4777
5071
|
children: "\u2190 Back"
|
|
4778
5072
|
}
|
|
4779
|
-
) : /* @__PURE__ */
|
|
4780
|
-
/* @__PURE__ */
|
|
4781
|
-
/* @__PURE__ */
|
|
4782
|
-
/* @__PURE__ */
|
|
4783
|
-
/* @__PURE__ */
|
|
4784
|
-
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" })
|
|
4785
5079
|
] }),
|
|
4786
|
-
testerInfo && /* @__PURE__ */
|
|
5080
|
+
testerInfo && /* @__PURE__ */ jsxs17(
|
|
4787
5081
|
"button",
|
|
4788
5082
|
{
|
|
4789
5083
|
onClick: () => push({ name: "PROFILE" }),
|
|
@@ -4801,13 +5095,13 @@ function BugBearPanel({
|
|
|
4801
5095
|
},
|
|
4802
5096
|
children: [
|
|
4803
5097
|
testerInfo.name,
|
|
4804
|
-
/* @__PURE__ */
|
|
5098
|
+
/* @__PURE__ */ jsx18("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
|
|
4805
5099
|
]
|
|
4806
5100
|
}
|
|
4807
5101
|
)
|
|
4808
5102
|
] })
|
|
4809
5103
|
] }) }),
|
|
4810
|
-
headerTitle ? /* @__PURE__ */
|
|
5104
|
+
headerTitle ? /* @__PURE__ */ jsx18("span", { style: {
|
|
4811
5105
|
fontSize: "0.8125rem",
|
|
4812
5106
|
fontWeight: 600,
|
|
4813
5107
|
color: colors.textSecondary,
|
|
@@ -4817,7 +5111,7 @@ function BugBearPanel({
|
|
|
4817
5111
|
textOverflow: "ellipsis",
|
|
4818
5112
|
whiteSpace: "nowrap"
|
|
4819
5113
|
}, children: headerTitle }) : null,
|
|
4820
|
-
/* @__PURE__ */
|
|
5114
|
+
/* @__PURE__ */ jsx18(
|
|
4821
5115
|
"button",
|
|
4822
5116
|
{
|
|
4823
5117
|
onClick: handleClose,
|
|
@@ -4841,13 +5135,13 @@ function BugBearPanel({
|
|
|
4841
5135
|
]
|
|
4842
5136
|
}
|
|
4843
5137
|
),
|
|
4844
|
-
/* @__PURE__ */
|
|
5138
|
+
/* @__PURE__ */ jsx18("div", { style: {
|
|
4845
5139
|
padding: 16,
|
|
4846
5140
|
maxHeight: 400,
|
|
4847
5141
|
overflowY: "auto",
|
|
4848
5142
|
backgroundColor: colors.bg,
|
|
4849
5143
|
color: colors.textSecondary
|
|
4850
|
-
}, 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() })
|
|
4851
5145
|
] })
|
|
4852
5146
|
]
|
|
4853
5147
|
}
|
|
@@ -4859,7 +5153,7 @@ function BugBearPanel({
|
|
|
4859
5153
|
// src/BugBearErrorBoundary.tsx
|
|
4860
5154
|
import { Component } from "react";
|
|
4861
5155
|
import { captureError, contextCapture as contextCapture2 } from "@bbearai/core";
|
|
4862
|
-
import { jsx as
|
|
5156
|
+
import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
4863
5157
|
var BugBearErrorBoundary = class extends Component {
|
|
4864
5158
|
constructor(props) {
|
|
4865
5159
|
super(props);
|
|
@@ -4904,7 +5198,7 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4904
5198
|
if (fallback) {
|
|
4905
5199
|
return fallback;
|
|
4906
5200
|
}
|
|
4907
|
-
return /* @__PURE__ */
|
|
5201
|
+
return /* @__PURE__ */ jsxs18(
|
|
4908
5202
|
"div",
|
|
4909
5203
|
{
|
|
4910
5204
|
style: {
|
|
@@ -4916,13 +5210,13 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4916
5210
|
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
|
|
4917
5211
|
},
|
|
4918
5212
|
children: [
|
|
4919
|
-
/* @__PURE__ */
|
|
4920
|
-
/* @__PURE__ */
|
|
4921
|
-
/* @__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" })
|
|
4922
5216
|
] }),
|
|
4923
|
-
/* @__PURE__ */
|
|
4924
|
-
/* @__PURE__ */
|
|
4925
|
-
/* @__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(
|
|
4926
5220
|
"button",
|
|
4927
5221
|
{
|
|
4928
5222
|
onClick: this.reset,
|
|
@@ -4939,7 +5233,7 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4939
5233
|
children: "Try Again"
|
|
4940
5234
|
}
|
|
4941
5235
|
),
|
|
4942
|
-
/* @__PURE__ */
|
|
5236
|
+
/* @__PURE__ */ jsx19(
|
|
4943
5237
|
"button",
|
|
4944
5238
|
{
|
|
4945
5239
|
onClick: () => window.location.reload(),
|
|
@@ -4957,7 +5251,7 @@ var BugBearErrorBoundary = class extends Component {
|
|
|
4957
5251
|
}
|
|
4958
5252
|
)
|
|
4959
5253
|
] }),
|
|
4960
|
-
/* @__PURE__ */
|
|
5254
|
+
/* @__PURE__ */ jsx19("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
|
|
4961
5255
|
]
|
|
4962
5256
|
}
|
|
4963
5257
|
);
|