@bbearai/react 0.4.6 → 0.5.1
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 +1020 -437
- package/dist/index.mjs +1020 -437
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -84,6 +84,8 @@ var BugBearContext = (0, import_react.createContext)({
|
|
|
84
84
|
issueCounts: { open: 0, done: 0, reopened: 0 },
|
|
85
85
|
refreshIssueCounts: async () => {
|
|
86
86
|
},
|
|
87
|
+
queuedCount: 0,
|
|
88
|
+
dashboardUrl: void 0,
|
|
87
89
|
onError: void 0
|
|
88
90
|
});
|
|
89
91
|
function useBugBear() {
|
|
@@ -102,6 +104,7 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
102
104
|
const [threads, setThreads] = (0, import_react.useState)([]);
|
|
103
105
|
const [unreadCount, setUnreadCount] = (0, import_react.useState)(0);
|
|
104
106
|
const [issueCounts, setIssueCounts] = (0, import_react.useState)({ open: 0, done: 0, reopened: 0 });
|
|
107
|
+
const [queuedCount, setQueuedCount] = (0, import_react.useState)(0);
|
|
105
108
|
const refreshAssignments = (0, import_react.useCallback)(async () => {
|
|
106
109
|
if (!client) return;
|
|
107
110
|
const newAssignments = await client.getAssignedTests();
|
|
@@ -249,18 +252,45 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
249
252
|
hasInitialized.current = true;
|
|
250
253
|
import_core.contextCapture.startCapture();
|
|
251
254
|
const newClient = (0, import_core.createBugBear)(config);
|
|
255
|
+
if (newClient.queue) {
|
|
256
|
+
newClient.queue.onChange(setQueuedCount);
|
|
257
|
+
newClient.initQueue();
|
|
258
|
+
}
|
|
252
259
|
setClient(newClient);
|
|
253
260
|
initializeBugBear(newClient);
|
|
254
261
|
}
|
|
255
262
|
}, [enabled, config, initializeBugBear]);
|
|
263
|
+
(0, import_react.useEffect)(() => {
|
|
264
|
+
if (!client?.queue) return;
|
|
265
|
+
const handleOnline = () => {
|
|
266
|
+
client.queue?.flush();
|
|
267
|
+
};
|
|
268
|
+
window.addEventListener("online", handleOnline);
|
|
269
|
+
if (navigator.onLine && client.queue.count > 0) {
|
|
270
|
+
client.queue.flush();
|
|
271
|
+
}
|
|
272
|
+
return () => window.removeEventListener("online", handleOnline);
|
|
273
|
+
}, [client]);
|
|
256
274
|
(0, import_react.useEffect)(() => {
|
|
257
275
|
if (!client || !isTester || !isQAEnabled) return;
|
|
276
|
+
let unsubscribe;
|
|
277
|
+
if (client.realtimeEnabled) {
|
|
278
|
+
unsubscribe = client.subscribeToChanges({
|
|
279
|
+
onAssignmentChange: refreshAssignments,
|
|
280
|
+
onMessageChange: refreshThreads,
|
|
281
|
+
onReportChange: refreshIssueCounts
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
const pollInterval = client.realtimeEnabled ? 12e4 : 3e4;
|
|
258
285
|
const interval = setInterval(() => {
|
|
259
286
|
refreshThreads();
|
|
260
287
|
refreshIssueCounts();
|
|
261
|
-
},
|
|
262
|
-
return () =>
|
|
263
|
-
|
|
288
|
+
}, pollInterval);
|
|
289
|
+
return () => {
|
|
290
|
+
clearInterval(interval);
|
|
291
|
+
unsubscribe?.();
|
|
292
|
+
};
|
|
293
|
+
}, [client, isTester, isQAEnabled, refreshThreads, refreshIssueCounts, refreshAssignments]);
|
|
264
294
|
const currentAssignment = assignments.find(
|
|
265
295
|
(a) => a.status === "in_progress"
|
|
266
296
|
) || assignments.find(
|
|
@@ -303,6 +333,8 @@ function BugBearProvider({ config, children, enabled = true }) {
|
|
|
303
333
|
// Issue tracking
|
|
304
334
|
issueCounts,
|
|
305
335
|
refreshIssueCounts,
|
|
336
|
+
queuedCount,
|
|
337
|
+
dashboardUrl: config.dashboardUrl,
|
|
306
338
|
onError: config.onError
|
|
307
339
|
},
|
|
308
340
|
children
|
|
@@ -429,9 +461,148 @@ function getThreadTypeIcon(type) {
|
|
|
429
461
|
|
|
430
462
|
// src/widget/screens/HomeScreen.tsx
|
|
431
463
|
var import_react3 = require("react");
|
|
464
|
+
|
|
465
|
+
// src/widget/Skeleton.tsx
|
|
432
466
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
467
|
+
var PULSE_CSS = `@keyframes bb-skeleton-pulse{0%,100%{opacity:.6}50%{opacity:.25}}`;
|
|
468
|
+
var styleInjected = false;
|
|
469
|
+
function injectStyle() {
|
|
470
|
+
if (styleInjected || typeof document === "undefined") return;
|
|
471
|
+
const style = document.createElement("style");
|
|
472
|
+
style.textContent = PULSE_CSS;
|
|
473
|
+
document.head.appendChild(style);
|
|
474
|
+
styleInjected = true;
|
|
475
|
+
}
|
|
476
|
+
function Bar({ width = "100%", height = 12, radius = 6, style }) {
|
|
477
|
+
injectStyle();
|
|
478
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
479
|
+
"div",
|
|
480
|
+
{
|
|
481
|
+
style: {
|
|
482
|
+
width,
|
|
483
|
+
height,
|
|
484
|
+
borderRadius: radius,
|
|
485
|
+
backgroundColor: colors.border,
|
|
486
|
+
animation: "bb-skeleton-pulse 1.5s ease-in-out infinite",
|
|
487
|
+
...style
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
function Circle({ size = 20, style }) {
|
|
493
|
+
injectStyle();
|
|
494
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
495
|
+
"div",
|
|
496
|
+
{
|
|
497
|
+
style: {
|
|
498
|
+
width: size,
|
|
499
|
+
height: size,
|
|
500
|
+
borderRadius: size / 2,
|
|
501
|
+
backgroundColor: colors.border,
|
|
502
|
+
animation: "bb-skeleton-pulse 1.5s ease-in-out infinite",
|
|
503
|
+
flexShrink: 0,
|
|
504
|
+
...style
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
function HomeScreenSkeleton() {
|
|
510
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
511
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 100, radius: 16, style: { marginBottom: 20 } }),
|
|
512
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12, marginBottom: 20 }, children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: 12, padding: 16, display: "flex", flexDirection: "column", alignItems: "center", gap: 8 }, children: [
|
|
513
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 28 }),
|
|
514
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 60, height: 10 })
|
|
515
|
+
] }, i)) }),
|
|
516
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [0, 1, 2].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { backgroundColor: colors.card, border: `1px solid ${colors.border}`, borderRadius: 10, padding: "12px 8px", display: "flex", flexDirection: "column", alignItems: "center", gap: 6 }, children: [
|
|
517
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 30, height: 18 }),
|
|
518
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 40, height: 8 })
|
|
519
|
+
] }, i)) }),
|
|
520
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 6, radius: 3, style: { marginBottom: 8 } }),
|
|
521
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 120, height: 10, style: { margin: "0 auto 16px" } })
|
|
522
|
+
] });
|
|
523
|
+
}
|
|
524
|
+
function TestItemSkeleton({ delay = 0 }) {
|
|
525
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center", padding: "10px 12px", borderRadius: 8, marginBottom: 4, backgroundColor: colors.card }, children: [
|
|
526
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 18, style: { marginRight: 10, animationDelay: `${delay}ms` } }),
|
|
527
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { flex: 1 }, children: [
|
|
528
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "70%", height: 11, style: { marginBottom: 4, animationDelay: `${delay}ms` } }),
|
|
529
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "45%", height: 8, style: { animationDelay: `${delay}ms` } })
|
|
530
|
+
] }),
|
|
531
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 50, height: 18, radius: 6, style: { marginLeft: 8, animationDelay: `${delay}ms` } })
|
|
532
|
+
] });
|
|
533
|
+
}
|
|
534
|
+
function TestListScreenSkeleton() {
|
|
535
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
536
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: 8 }, children: [55, 50, 50, 70].map((w, i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: w, height: 28, radius: 8, style: { animationDelay: `${i * 50}ms` } }, i)) }),
|
|
537
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 36, radius: 8, style: { marginBottom: 10 } }),
|
|
538
|
+
[0, 1].map((g) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { marginBottom: 12 }, children: [
|
|
539
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, padding: "8px 4px" }, children: [
|
|
540
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 12, height: 10 }),
|
|
541
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "40%", height: 12 }),
|
|
542
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 40, height: 4, radius: 2, style: { marginLeft: "auto" } }),
|
|
543
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 24, height: 10 })
|
|
544
|
+
] }),
|
|
545
|
+
[0, 1, 2].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TestItemSkeleton, { delay: (g * 3 + i) * 80 }, i))
|
|
546
|
+
] }, g))
|
|
547
|
+
] });
|
|
548
|
+
}
|
|
549
|
+
function IssueListScreenSkeleton() {
|
|
550
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
551
|
+
"div",
|
|
552
|
+
{
|
|
553
|
+
style: {
|
|
554
|
+
backgroundColor: colors.card,
|
|
555
|
+
border: `1px solid ${colors.border}`,
|
|
556
|
+
borderRadius: 10,
|
|
557
|
+
padding: "12px 14px",
|
|
558
|
+
marginBottom: 8
|
|
559
|
+
},
|
|
560
|
+
children: [
|
|
561
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
562
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 8, style: { animationDelay: `${i * 100}ms` } }),
|
|
563
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "65%", height: 11, style: { animationDelay: `${i * 100}ms` } })
|
|
564
|
+
] }),
|
|
565
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 8 }, children: [
|
|
566
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "40%", height: 8, style: { animationDelay: `${i * 100}ms` } }),
|
|
567
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 40, height: 8, style: { animationDelay: `${i * 100}ms` } })
|
|
568
|
+
] })
|
|
569
|
+
]
|
|
570
|
+
},
|
|
571
|
+
i
|
|
572
|
+
)) });
|
|
573
|
+
}
|
|
574
|
+
function MessageListScreenSkeleton() {
|
|
575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
576
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "100%", height: 44, radius: 12, style: { marginBottom: 16 } }),
|
|
577
|
+
[0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
578
|
+
"div",
|
|
579
|
+
{
|
|
580
|
+
style: {
|
|
581
|
+
display: "flex",
|
|
582
|
+
alignItems: "flex-start",
|
|
583
|
+
padding: 12,
|
|
584
|
+
borderRadius: 10,
|
|
585
|
+
marginBottom: 4,
|
|
586
|
+
backgroundColor: colors.card
|
|
587
|
+
},
|
|
588
|
+
children: [
|
|
589
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Circle, { size: 20, style: { marginRight: 10, marginTop: 2, animationDelay: `${i * 100}ms` } }),
|
|
590
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { flex: 1 }, children: [
|
|
591
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "55%", height: 11, style: { marginBottom: 5, animationDelay: `${i * 100}ms` } }),
|
|
592
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: "80%", height: 9, style: { animationDelay: `${i * 100}ms` } })
|
|
593
|
+
] }),
|
|
594
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Bar, { width: 30, height: 8, style: { marginLeft: 8, animationDelay: `${i * 100}ms` } })
|
|
595
|
+
]
|
|
596
|
+
},
|
|
597
|
+
i
|
|
598
|
+
))
|
|
599
|
+
] });
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// src/widget/screens/HomeScreen.tsx
|
|
603
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
433
604
|
function HomeScreen({ nav }) {
|
|
434
|
-
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts } = useBugBear();
|
|
605
|
+
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl, isLoading } = useBugBear();
|
|
435
606
|
(0, import_react3.useEffect)(() => {
|
|
436
607
|
refreshAssignments();
|
|
437
608
|
refreshThreads();
|
|
@@ -442,8 +613,9 @@ function HomeScreen({ nav }) {
|
|
|
442
613
|
const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
|
|
443
614
|
const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
|
|
444
615
|
const totalTests = assignments.length;
|
|
445
|
-
return /* @__PURE__ */ (0,
|
|
446
|
-
|
|
616
|
+
if (isLoading) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(HomeScreenSkeleton, {});
|
|
617
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
618
|
+
pendingCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
447
619
|
"div",
|
|
448
620
|
{
|
|
449
621
|
role: "button",
|
|
@@ -465,13 +637,13 @@ function HomeScreen({ nav }) {
|
|
|
465
637
|
userSelect: "none"
|
|
466
638
|
},
|
|
467
639
|
children: [
|
|
468
|
-
/* @__PURE__ */ (0,
|
|
469
|
-
/* @__PURE__ */ (0,
|
|
640
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: pendingCount }),
|
|
641
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
|
|
470
642
|
"test",
|
|
471
643
|
pendingCount !== 1 ? "s" : "",
|
|
472
644
|
" waiting"
|
|
473
645
|
] }),
|
|
474
|
-
retestCount > 0 && /* @__PURE__ */ (0,
|
|
646
|
+
retestCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
475
647
|
"span",
|
|
476
648
|
{
|
|
477
649
|
style: {
|
|
@@ -495,10 +667,10 @@ function HomeScreen({ nav }) {
|
|
|
495
667
|
]
|
|
496
668
|
}
|
|
497
669
|
),
|
|
498
|
-
/* @__PURE__ */ (0,
|
|
670
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "Start Testing \u2192" })
|
|
499
671
|
]
|
|
500
672
|
}
|
|
501
|
-
) : unreadCount > 0 ? /* @__PURE__ */ (0,
|
|
673
|
+
) : unreadCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
502
674
|
"div",
|
|
503
675
|
{
|
|
504
676
|
role: "button",
|
|
@@ -520,15 +692,15 @@ function HomeScreen({ nav }) {
|
|
|
520
692
|
userSelect: "none"
|
|
521
693
|
},
|
|
522
694
|
children: [
|
|
523
|
-
/* @__PURE__ */ (0,
|
|
524
|
-
/* @__PURE__ */ (0,
|
|
695
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 48, fontWeight: 700, color: colors.blueLight }, children: unreadCount }),
|
|
696
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 16, color: colors.blueText, marginTop: 2 }, children: [
|
|
525
697
|
"unread message",
|
|
526
698
|
unreadCount !== 1 ? "s" : ""
|
|
527
699
|
] }),
|
|
528
|
-
/* @__PURE__ */ (0,
|
|
700
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 600, color: colors.blue, marginTop: 12 }, children: "View Messages \u2192" })
|
|
529
701
|
]
|
|
530
702
|
}
|
|
531
|
-
) : /* @__PURE__ */ (0,
|
|
703
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
532
704
|
"div",
|
|
533
705
|
{
|
|
534
706
|
style: {
|
|
@@ -542,9 +714,9 @@ function HomeScreen({ nav }) {
|
|
|
542
714
|
marginBottom: 20
|
|
543
715
|
},
|
|
544
716
|
children: [
|
|
545
|
-
/* @__PURE__ */ (0,
|
|
546
|
-
/* @__PURE__ */ (0,
|
|
547
|
-
totalTests > 0 && /* @__PURE__ */ (0,
|
|
717
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 36, marginBottom: 8 }, children: "\u2705" }),
|
|
718
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary }, children: "All caught up!" }),
|
|
719
|
+
totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { fontSize: 14, color: colors.textMuted, marginTop: 4 }, children: [
|
|
548
720
|
completedCount,
|
|
549
721
|
"/",
|
|
550
722
|
totalTests,
|
|
@@ -553,7 +725,7 @@ function HomeScreen({ nav }) {
|
|
|
553
725
|
]
|
|
554
726
|
}
|
|
555
727
|
),
|
|
556
|
-
/* @__PURE__ */ (0,
|
|
728
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
557
729
|
"div",
|
|
558
730
|
{
|
|
559
731
|
style: {
|
|
@@ -563,7 +735,7 @@ function HomeScreen({ nav }) {
|
|
|
563
735
|
marginBottom: 20
|
|
564
736
|
},
|
|
565
737
|
children: [
|
|
566
|
-
/* @__PURE__ */ (0,
|
|
738
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
567
739
|
"div",
|
|
568
740
|
{
|
|
569
741
|
role: "button",
|
|
@@ -585,9 +757,9 @@ function HomeScreen({ nav }) {
|
|
|
585
757
|
userSelect: "none"
|
|
586
758
|
},
|
|
587
759
|
children: [
|
|
588
|
-
/* @__PURE__ */ (0,
|
|
589
|
-
/* @__PURE__ */ (0,
|
|
590
|
-
pendingCount > 0 && /* @__PURE__ */ (0,
|
|
760
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u2705" }),
|
|
761
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Tests" }),
|
|
762
|
+
pendingCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
591
763
|
"span",
|
|
592
764
|
{
|
|
593
765
|
style: {
|
|
@@ -613,7 +785,7 @@ function HomeScreen({ nav }) {
|
|
|
613
785
|
]
|
|
614
786
|
}
|
|
615
787
|
),
|
|
616
|
-
/* @__PURE__ */ (0,
|
|
788
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
617
789
|
"div",
|
|
618
790
|
{
|
|
619
791
|
role: "button",
|
|
@@ -635,12 +807,12 @@ function HomeScreen({ nav }) {
|
|
|
635
807
|
userSelect: "none"
|
|
636
808
|
},
|
|
637
809
|
children: [
|
|
638
|
-
/* @__PURE__ */ (0,
|
|
639
|
-
/* @__PURE__ */ (0,
|
|
810
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F41B}" }),
|
|
811
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Report Bug" })
|
|
640
812
|
]
|
|
641
813
|
}
|
|
642
814
|
),
|
|
643
|
-
/* @__PURE__ */ (0,
|
|
815
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
644
816
|
"div",
|
|
645
817
|
{
|
|
646
818
|
role: "button",
|
|
@@ -662,12 +834,12 @@ function HomeScreen({ nav }) {
|
|
|
662
834
|
userSelect: "none"
|
|
663
835
|
},
|
|
664
836
|
children: [
|
|
665
|
-
/* @__PURE__ */ (0,
|
|
666
|
-
/* @__PURE__ */ (0,
|
|
837
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4A1}" }),
|
|
838
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Feedback" })
|
|
667
839
|
]
|
|
668
840
|
}
|
|
669
841
|
),
|
|
670
|
-
/* @__PURE__ */ (0,
|
|
842
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
671
843
|
"div",
|
|
672
844
|
{
|
|
673
845
|
role: "button",
|
|
@@ -689,9 +861,9 @@ function HomeScreen({ nav }) {
|
|
|
689
861
|
userSelect: "none"
|
|
690
862
|
},
|
|
691
863
|
children: [
|
|
692
|
-
/* @__PURE__ */ (0,
|
|
693
|
-
/* @__PURE__ */ (0,
|
|
694
|
-
unreadCount > 0 && /* @__PURE__ */ (0,
|
|
864
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 28, marginBottom: 8 }, children: "\u{1F4AC}" }),
|
|
865
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textPrimary }, children: "Messages" }),
|
|
866
|
+
unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
695
867
|
"span",
|
|
696
868
|
{
|
|
697
869
|
style: {
|
|
@@ -720,8 +892,8 @@ function HomeScreen({ nav }) {
|
|
|
720
892
|
]
|
|
721
893
|
}
|
|
722
894
|
),
|
|
723
|
-
/* @__PURE__ */ (0,
|
|
724
|
-
/* @__PURE__ */ (0,
|
|
895
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 10, marginBottom: 20 }, children: [
|
|
896
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
725
897
|
"div",
|
|
726
898
|
{
|
|
727
899
|
role: "button",
|
|
@@ -743,12 +915,12 @@ function HomeScreen({ nav }) {
|
|
|
743
915
|
userSelect: "none"
|
|
744
916
|
},
|
|
745
917
|
children: [
|
|
746
|
-
/* @__PURE__ */ (0,
|
|
747
|
-
/* @__PURE__ */ (0,
|
|
918
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#f97316" }, children: issueCounts.open }),
|
|
919
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Open" })
|
|
748
920
|
]
|
|
749
921
|
}
|
|
750
922
|
),
|
|
751
|
-
/* @__PURE__ */ (0,
|
|
923
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
752
924
|
"div",
|
|
753
925
|
{
|
|
754
926
|
role: "button",
|
|
@@ -770,12 +942,12 @@ function HomeScreen({ nav }) {
|
|
|
770
942
|
userSelect: "none"
|
|
771
943
|
},
|
|
772
944
|
children: [
|
|
773
|
-
/* @__PURE__ */ (0,
|
|
774
|
-
/* @__PURE__ */ (0,
|
|
945
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#22c55e" }, children: issueCounts.done }),
|
|
946
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Done" })
|
|
775
947
|
]
|
|
776
948
|
}
|
|
777
949
|
),
|
|
778
|
-
/* @__PURE__ */ (0,
|
|
950
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
779
951
|
"div",
|
|
780
952
|
{
|
|
781
953
|
role: "button",
|
|
@@ -797,14 +969,14 @@ function HomeScreen({ nav }) {
|
|
|
797
969
|
userSelect: "none"
|
|
798
970
|
},
|
|
799
971
|
children: [
|
|
800
|
-
/* @__PURE__ */ (0,
|
|
801
|
-
/* @__PURE__ */ (0,
|
|
972
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, fontWeight: 700, color: "#ef4444" }, children: issueCounts.reopened }),
|
|
973
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 11, fontWeight: 600, color: "#a1a1aa", marginTop: 2 }, children: "Reopened" })
|
|
802
974
|
]
|
|
803
975
|
}
|
|
804
976
|
)
|
|
805
977
|
] }),
|
|
806
|
-
totalTests > 0 && /* @__PURE__ */ (0,
|
|
807
|
-
/* @__PURE__ */ (0,
|
|
978
|
+
totalTests > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { marginBottom: 16 }, children: [
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
808
980
|
"div",
|
|
809
981
|
{
|
|
810
982
|
style: {
|
|
@@ -814,7 +986,7 @@ function HomeScreen({ nav }) {
|
|
|
814
986
|
overflow: "hidden",
|
|
815
987
|
marginBottom: 6
|
|
816
988
|
},
|
|
817
|
-
children: /* @__PURE__ */ (0,
|
|
989
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
818
990
|
"div",
|
|
819
991
|
{
|
|
820
992
|
style: {
|
|
@@ -828,14 +1000,41 @@ function HomeScreen({ nav }) {
|
|
|
828
1000
|
)
|
|
829
1001
|
}
|
|
830
1002
|
),
|
|
831
|
-
/* @__PURE__ */ (0,
|
|
1003
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { fontSize: 12, color: colors.textMuted, textAlign: "center" }, children: [
|
|
832
1004
|
completedCount,
|
|
833
1005
|
"/",
|
|
834
1006
|
totalTests,
|
|
835
1007
|
" tests completed"
|
|
836
1008
|
] })
|
|
837
1009
|
] }),
|
|
838
|
-
|
|
1010
|
+
dashboardUrl && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
1011
|
+
"a",
|
|
1012
|
+
{
|
|
1013
|
+
href: dashboardUrl,
|
|
1014
|
+
target: "_blank",
|
|
1015
|
+
rel: "noopener noreferrer",
|
|
1016
|
+
style: {
|
|
1017
|
+
display: "flex",
|
|
1018
|
+
alignItems: "center",
|
|
1019
|
+
backgroundColor: colors.card,
|
|
1020
|
+
border: `1px solid ${colors.border}`,
|
|
1021
|
+
borderRadius: 12,
|
|
1022
|
+
padding: 14,
|
|
1023
|
+
marginBottom: 16,
|
|
1024
|
+
textDecoration: "none",
|
|
1025
|
+
cursor: "pointer"
|
|
1026
|
+
},
|
|
1027
|
+
children: [
|
|
1028
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 22, marginRight: 12 }, children: "\u{1F310}" }),
|
|
1029
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { style: { flex: 1 }, children: [
|
|
1030
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { display: "block", fontSize: 14, fontWeight: 600, color: colors.textPrimary }, children: "Open Dashboard" }),
|
|
1031
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { display: "block", fontSize: 12, color: colors.textMuted, marginTop: 2 }, children: "View analytics, history & more" })
|
|
1032
|
+
] }),
|
|
1033
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: { fontSize: 16, color: colors.textMuted, marginLeft: 8 }, children: "\u2192" })
|
|
1034
|
+
]
|
|
1035
|
+
}
|
|
1036
|
+
),
|
|
1037
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { display: "flex", justifyContent: "center", padding: "8px 0" }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
839
1038
|
"button",
|
|
840
1039
|
{
|
|
841
1040
|
type: "button",
|
|
@@ -860,7 +1059,7 @@ function HomeScreen({ nav }) {
|
|
|
860
1059
|
|
|
861
1060
|
// src/widget/screens/TestDetailScreen.tsx
|
|
862
1061
|
var import_react4 = require("react");
|
|
863
|
-
var
|
|
1062
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
864
1063
|
function TestDetailScreen({ testId, nav }) {
|
|
865
1064
|
const { client, assignments, currentAssignment, refreshAssignments, onNavigate } = useBugBear();
|
|
866
1065
|
const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
|
|
@@ -925,6 +1124,37 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
925
1124
|
setIsSubmitting(false);
|
|
926
1125
|
}
|
|
927
1126
|
}, [client, displayedAssignment, refreshAssignments, nav, isSubmitting]);
|
|
1127
|
+
const handleReopen = (0, import_react4.useCallback)(async () => {
|
|
1128
|
+
if (!client || !displayedAssignment || isSubmitting) return;
|
|
1129
|
+
setIsSubmitting(true);
|
|
1130
|
+
try {
|
|
1131
|
+
await client.reopenAssignment(displayedAssignment.id);
|
|
1132
|
+
await refreshAssignments();
|
|
1133
|
+
} finally {
|
|
1134
|
+
setIsSubmitting(false);
|
|
1135
|
+
}
|
|
1136
|
+
}, [client, displayedAssignment, refreshAssignments, isSubmitting]);
|
|
1137
|
+
const handleChangeResult = (0, import_react4.useCallback)(async (newStatus) => {
|
|
1138
|
+
if (!client || !displayedAssignment || isSubmitting) return;
|
|
1139
|
+
setIsSubmitting(true);
|
|
1140
|
+
try {
|
|
1141
|
+
await client.reopenAssignment(displayedAssignment.id);
|
|
1142
|
+
await client.updateAssignmentStatus(displayedAssignment.id, newStatus);
|
|
1143
|
+
await refreshAssignments();
|
|
1144
|
+
if (newStatus === "failed") {
|
|
1145
|
+
nav.replace({
|
|
1146
|
+
name: "REPORT",
|
|
1147
|
+
prefill: {
|
|
1148
|
+
type: "test_fail",
|
|
1149
|
+
assignmentId: displayedAssignment.id,
|
|
1150
|
+
testCaseId: displayedAssignment.testCase.id
|
|
1151
|
+
}
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1154
|
+
} finally {
|
|
1155
|
+
setIsSubmitting(false);
|
|
1156
|
+
}
|
|
1157
|
+
}, [client, displayedAssignment, refreshAssignments, nav, isSubmitting]);
|
|
928
1158
|
const handleSkip = (0, import_react4.useCallback)(async () => {
|
|
929
1159
|
if (!client || !displayedAssignment || !selectedSkipReason) return;
|
|
930
1160
|
setSkipping(true);
|
|
@@ -948,7 +1178,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
948
1178
|
}
|
|
949
1179
|
}, [client, displayedAssignment, selectedSkipReason, skipNotes, refreshAssignments, assignments, nav]);
|
|
950
1180
|
if (!displayedAssignment) {
|
|
951
|
-
return /* @__PURE__ */ (0,
|
|
1181
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
952
1182
|
"div",
|
|
953
1183
|
{
|
|
954
1184
|
style: {
|
|
@@ -959,10 +1189,10 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
959
1189
|
padding: 40
|
|
960
1190
|
},
|
|
961
1191
|
children: [
|
|
962
|
-
/* @__PURE__ */ (0,
|
|
963
|
-
/* @__PURE__ */ (0,
|
|
964
|
-
/* @__PURE__ */ (0,
|
|
965
|
-
/* @__PURE__ */ (0,
|
|
1192
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 48, marginBottom: 12 }, children: "\u2705" }),
|
|
1193
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 18, fontWeight: 600, color: colors.textPrimary, marginBottom: 4 }, children: "No tests assigned" }),
|
|
1194
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 20 }, children: "Check back later for new tests" }),
|
|
1195
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
966
1196
|
"button",
|
|
967
1197
|
{
|
|
968
1198
|
type: "button",
|
|
@@ -995,8 +1225,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
995
1225
|
{ reason: "dependency", label: "\u{1F517} Needs another test first" },
|
|
996
1226
|
{ reason: "other", label: "\u{1F4DD} Other reason" }
|
|
997
1227
|
];
|
|
998
|
-
return /* @__PURE__ */ (0,
|
|
999
|
-
/* @__PURE__ */ (0,
|
|
1228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { paddingBottom: 16 }, children: [
|
|
1229
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1000
1230
|
"div",
|
|
1001
1231
|
{
|
|
1002
1232
|
style: {
|
|
@@ -1006,14 +1236,14 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1006
1236
|
marginBottom: 12
|
|
1007
1237
|
},
|
|
1008
1238
|
children: [
|
|
1009
|
-
/* @__PURE__ */ (0,
|
|
1010
|
-
/* @__PURE__ */ (0,
|
|
1239
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
1240
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: { fontSize: 13, color: colors.textMuted }, children: [
|
|
1011
1241
|
"Test ",
|
|
1012
1242
|
currentIndex + 1,
|
|
1013
1243
|
" of ",
|
|
1014
1244
|
allTests.length
|
|
1015
1245
|
] }),
|
|
1016
|
-
displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ (0,
|
|
1246
|
+
displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1017
1247
|
"span",
|
|
1018
1248
|
{
|
|
1019
1249
|
style: {
|
|
@@ -1032,7 +1262,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1032
1262
|
}
|
|
1033
1263
|
)
|
|
1034
1264
|
] }),
|
|
1035
|
-
/* @__PURE__ */ (0,
|
|
1265
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1036
1266
|
"button",
|
|
1037
1267
|
{
|
|
1038
1268
|
type: "button",
|
|
@@ -1052,7 +1282,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1052
1282
|
]
|
|
1053
1283
|
}
|
|
1054
1284
|
),
|
|
1055
|
-
displayedAssignment.isVerification && /* @__PURE__ */ (0,
|
|
1285
|
+
displayedAssignment.isVerification && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1056
1286
|
"div",
|
|
1057
1287
|
{
|
|
1058
1288
|
style: {
|
|
@@ -1066,14 +1296,14 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1066
1296
|
marginBottom: 10
|
|
1067
1297
|
},
|
|
1068
1298
|
children: [
|
|
1069
|
-
/* @__PURE__ */ (0,
|
|
1070
|
-
/* @__PURE__ */ (0,
|
|
1071
|
-
/* @__PURE__ */ (0,
|
|
1299
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14 }, children: "\u{1F504}" }),
|
|
1300
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Retest" }),
|
|
1301
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 12, color: "#d97706" }, children: "\u2014 Verify bug fix" })
|
|
1072
1302
|
]
|
|
1073
1303
|
}
|
|
1074
1304
|
),
|
|
1075
|
-
/* @__PURE__ */ (0,
|
|
1076
|
-
testCase.testKey && /* @__PURE__ */ (0,
|
|
1305
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 20, fontWeight: 700, color: colors.textPrimary, marginBottom: 4 }, children: testCase.title }),
|
|
1306
|
+
testCase.testKey && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1077
1307
|
"div",
|
|
1078
1308
|
{
|
|
1079
1309
|
style: {
|
|
@@ -1085,7 +1315,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1085
1315
|
children: testCase.testKey
|
|
1086
1316
|
}
|
|
1087
1317
|
),
|
|
1088
|
-
/* @__PURE__ */ (0,
|
|
1318
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1089
1319
|
"button",
|
|
1090
1320
|
{
|
|
1091
1321
|
type: "button",
|
|
@@ -1101,7 +1331,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1101
1331
|
cursor: "pointer",
|
|
1102
1332
|
textAlign: "left"
|
|
1103
1333
|
},
|
|
1104
|
-
children: /* @__PURE__ */ (0,
|
|
1334
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: { fontSize: 14, fontWeight: 500, color: colors.textSecondary }, children: [
|
|
1105
1335
|
showSteps ? "\u25BC" : "\u25B6",
|
|
1106
1336
|
" ",
|
|
1107
1337
|
info.icon,
|
|
@@ -1110,9 +1340,9 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1110
1340
|
] })
|
|
1111
1341
|
}
|
|
1112
1342
|
),
|
|
1113
|
-
showSteps && /* @__PURE__ */ (0,
|
|
1114
|
-
template === "steps" && steps.map((step, idx) => /* @__PURE__ */ (0,
|
|
1115
|
-
/* @__PURE__ */ (0,
|
|
1343
|
+
showSteps && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 16 }, children: [
|
|
1344
|
+
template === "steps" && steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", marginBottom: 10 }, children: [
|
|
1345
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1116
1346
|
"div",
|
|
1117
1347
|
{
|
|
1118
1348
|
style: {
|
|
@@ -1127,12 +1357,12 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1127
1357
|
marginTop: 2,
|
|
1128
1358
|
flexShrink: 0
|
|
1129
1359
|
},
|
|
1130
|
-
children: /* @__PURE__ */ (0,
|
|
1360
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 12, fontWeight: 600, color: "#fff" }, children: step.stepNumber })
|
|
1131
1361
|
}
|
|
1132
1362
|
),
|
|
1133
|
-
/* @__PURE__ */ (0,
|
|
1134
|
-
/* @__PURE__ */ (0,
|
|
1135
|
-
step.expectedResult && /* @__PURE__ */ (0,
|
|
1363
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { flex: 1 }, children: [
|
|
1364
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14, color: colors.textPrimary, lineHeight: "20px" }, children: step.action }),
|
|
1365
|
+
step.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1136
1366
|
"div",
|
|
1137
1367
|
{
|
|
1138
1368
|
style: {
|
|
@@ -1149,8 +1379,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1149
1379
|
)
|
|
1150
1380
|
] })
|
|
1151
1381
|
] }, idx)),
|
|
1152
|
-
template === "checklist" && /* @__PURE__ */ (0,
|
|
1153
|
-
steps.map((step, idx) => /* @__PURE__ */ (0,
|
|
1382
|
+
template === "checklist" && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
1383
|
+
steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1154
1384
|
"button",
|
|
1155
1385
|
{
|
|
1156
1386
|
type: "button",
|
|
@@ -1176,7 +1406,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1176
1406
|
textAlign: "left"
|
|
1177
1407
|
},
|
|
1178
1408
|
children: [
|
|
1179
|
-
/* @__PURE__ */ (0,
|
|
1409
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1180
1410
|
"div",
|
|
1181
1411
|
{
|
|
1182
1412
|
style: {
|
|
@@ -1191,10 +1421,10 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1191
1421
|
alignItems: "center",
|
|
1192
1422
|
flexShrink: 0
|
|
1193
1423
|
},
|
|
1194
|
-
children: criteriaResults[idx] === true && /* @__PURE__ */ (0,
|
|
1424
|
+
children: criteriaResults[idx] === true && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { color: "#fff", fontSize: 14, fontWeight: "bold" }, children: "\u2713" })
|
|
1195
1425
|
}
|
|
1196
1426
|
),
|
|
1197
|
-
/* @__PURE__ */ (0,
|
|
1427
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1198
1428
|
"span",
|
|
1199
1429
|
{
|
|
1200
1430
|
style: {
|
|
@@ -1210,7 +1440,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1210
1440
|
},
|
|
1211
1441
|
idx
|
|
1212
1442
|
)),
|
|
1213
|
-
Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ (0,
|
|
1443
|
+
Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", justifyContent: "flex-end", paddingTop: 4 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1214
1444
|
"button",
|
|
1215
1445
|
{
|
|
1216
1446
|
type: "button",
|
|
@@ -1227,8 +1457,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1227
1457
|
}
|
|
1228
1458
|
) })
|
|
1229
1459
|
] }),
|
|
1230
|
-
template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ (0,
|
|
1231
|
-
/* @__PURE__ */ (0,
|
|
1460
|
+
template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 14 }, children: [
|
|
1461
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1232
1462
|
"div",
|
|
1233
1463
|
{
|
|
1234
1464
|
style: {
|
|
@@ -1244,7 +1474,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1244
1474
|
]
|
|
1245
1475
|
}
|
|
1246
1476
|
),
|
|
1247
|
-
step.expectedResult && /* @__PURE__ */ (0,
|
|
1477
|
+
step.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1248
1478
|
"div",
|
|
1249
1479
|
{
|
|
1250
1480
|
style: {
|
|
@@ -1256,8 +1486,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1256
1486
|
children: step.expectedResult
|
|
1257
1487
|
}
|
|
1258
1488
|
),
|
|
1259
|
-
rubricMode === "pass_fail" ? /* @__PURE__ */ (0,
|
|
1260
|
-
/* @__PURE__ */ (0,
|
|
1489
|
+
rubricMode === "pass_fail" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 8, marginLeft: 16 }, children: [
|
|
1490
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1261
1491
|
"button",
|
|
1262
1492
|
{
|
|
1263
1493
|
type: "button",
|
|
@@ -1278,7 +1508,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1278
1508
|
children: "\u2713 Pass"
|
|
1279
1509
|
}
|
|
1280
1510
|
),
|
|
1281
|
-
/* @__PURE__ */ (0,
|
|
1511
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1282
1512
|
"button",
|
|
1283
1513
|
{
|
|
1284
1514
|
type: "button",
|
|
@@ -1299,7 +1529,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1299
1529
|
children: "\u2717 Fail"
|
|
1300
1530
|
}
|
|
1301
1531
|
)
|
|
1302
|
-
] }) : /* @__PURE__ */ (0,
|
|
1532
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", gap: 6, marginLeft: 16 }, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1303
1533
|
"button",
|
|
1304
1534
|
{
|
|
1305
1535
|
type: "button",
|
|
@@ -1323,7 +1553,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1323
1553
|
n
|
|
1324
1554
|
)) })
|
|
1325
1555
|
] }, idx)),
|
|
1326
|
-
template === "freeform" && /* @__PURE__ */ (0,
|
|
1556
|
+
template === "freeform" && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1327
1557
|
"div",
|
|
1328
1558
|
{
|
|
1329
1559
|
style: {
|
|
@@ -1333,15 +1563,15 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1333
1563
|
border: "1px solid #854d0e"
|
|
1334
1564
|
},
|
|
1335
1565
|
children: [
|
|
1336
|
-
/* @__PURE__ */ (0,
|
|
1337
|
-
/* @__PURE__ */ (0,
|
|
1338
|
-
/* @__PURE__ */ (0,
|
|
1339
|
-
/* @__PURE__ */ (0,
|
|
1566
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 14, color: "#fde68a", marginBottom: 6 }, children: "Review the area and note:" }),
|
|
1567
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 What works well" }),
|
|
1568
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Issues or concerns" }),
|
|
1569
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: "#fde68a", marginLeft: 8, marginBottom: 2 }, children: "\u2022 Suggestions" })
|
|
1340
1570
|
]
|
|
1341
1571
|
}
|
|
1342
1572
|
)
|
|
1343
1573
|
] }),
|
|
1344
|
-
testCase.expectedResult && /* @__PURE__ */ (0,
|
|
1574
|
+
testCase.expectedResult && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1345
1575
|
"div",
|
|
1346
1576
|
{
|
|
1347
1577
|
style: {
|
|
@@ -1352,12 +1582,12 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1352
1582
|
marginBottom: 12
|
|
1353
1583
|
},
|
|
1354
1584
|
children: [
|
|
1355
|
-
/* @__PURE__ */ (0,
|
|
1356
|
-
/* @__PURE__ */ (0,
|
|
1585
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, fontWeight: 600, color: colors.green, marginBottom: 4 }, children: "\u2705 Expected Result" }),
|
|
1586
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 14, color: "#bbf7d0", lineHeight: "20px" }, children: testCase.expectedResult })
|
|
1357
1587
|
]
|
|
1358
1588
|
}
|
|
1359
1589
|
),
|
|
1360
|
-
testCase.targetRoute && onNavigate && /* @__PURE__ */ (0,
|
|
1590
|
+
testCase.targetRoute && onNavigate && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1361
1591
|
"button",
|
|
1362
1592
|
{
|
|
1363
1593
|
type: "button",
|
|
@@ -1379,7 +1609,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1379
1609
|
children: "\u{1F9ED} Go to test location"
|
|
1380
1610
|
}
|
|
1381
1611
|
),
|
|
1382
|
-
/* @__PURE__ */ (0,
|
|
1612
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1383
1613
|
"button",
|
|
1384
1614
|
{
|
|
1385
1615
|
type: "button",
|
|
@@ -1403,7 +1633,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1403
1633
|
]
|
|
1404
1634
|
}
|
|
1405
1635
|
),
|
|
1406
|
-
showDetails && /* @__PURE__ */ (0,
|
|
1636
|
+
showDetails && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1407
1637
|
"div",
|
|
1408
1638
|
{
|
|
1409
1639
|
style: {
|
|
@@ -1414,7 +1644,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1414
1644
|
marginBottom: 16
|
|
1415
1645
|
},
|
|
1416
1646
|
children: [
|
|
1417
|
-
testCase.testKey && /* @__PURE__ */ (0,
|
|
1647
|
+
testCase.testKey && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1418
1648
|
"div",
|
|
1419
1649
|
{
|
|
1420
1650
|
style: {
|
|
@@ -1432,16 +1662,122 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1432
1662
|
]
|
|
1433
1663
|
}
|
|
1434
1664
|
),
|
|
1435
|
-
testCase.description && /* @__PURE__ */ (0,
|
|
1436
|
-
testCase.group && /* @__PURE__ */ (0,
|
|
1665
|
+
testCase.description && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 13, color: colors.textSecondary, lineHeight: "18px" }, children: testCase.description }),
|
|
1666
|
+
testCase.group && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { marginTop: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
|
|
1437
1667
|
"\u{1F4C1} ",
|
|
1438
1668
|
testCase.group.name
|
|
1439
1669
|
] }) })
|
|
1440
1670
|
]
|
|
1441
1671
|
}
|
|
1442
1672
|
),
|
|
1443
|
-
|
|
1444
|
-
/* @__PURE__ */ (0,
|
|
1673
|
+
displayedAssignment.status === "passed" || displayedAssignment.status === "failed" || displayedAssignment.status === "skipped" || displayedAssignment.status === "blocked" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
1674
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1675
|
+
"div",
|
|
1676
|
+
{
|
|
1677
|
+
style: {
|
|
1678
|
+
display: "flex",
|
|
1679
|
+
alignItems: "center",
|
|
1680
|
+
justifyContent: "center",
|
|
1681
|
+
gap: 6,
|
|
1682
|
+
padding: "8px 12px",
|
|
1683
|
+
borderRadius: 8,
|
|
1684
|
+
marginTop: 8,
|
|
1685
|
+
marginBottom: 8,
|
|
1686
|
+
backgroundColor: displayedAssignment.status === "passed" ? colors.greenDark : displayedAssignment.status === "failed" ? colors.redDark : colors.card,
|
|
1687
|
+
border: `1px solid ${displayedAssignment.status === "passed" ? colors.green : displayedAssignment.status === "failed" ? colors.red : colors.border}`
|
|
1688
|
+
},
|
|
1689
|
+
children: [
|
|
1690
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 14 }, children: displayedAssignment.status === "passed" ? "\u2705" : displayedAssignment.status === "failed" ? "\u274C" : displayedAssignment.status === "skipped" ? "\u23ED" : "\u{1F6AB}" }),
|
|
1691
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1692
|
+
"span",
|
|
1693
|
+
{
|
|
1694
|
+
style: {
|
|
1695
|
+
fontSize: 13,
|
|
1696
|
+
fontWeight: 600,
|
|
1697
|
+
color: displayedAssignment.status === "passed" ? colors.green : displayedAssignment.status === "failed" ? "#fca5a5" : colors.textSecondary
|
|
1698
|
+
},
|
|
1699
|
+
children: [
|
|
1700
|
+
"Marked as ",
|
|
1701
|
+
displayedAssignment.status.charAt(0).toUpperCase() + displayedAssignment.status.slice(1)
|
|
1702
|
+
]
|
|
1703
|
+
}
|
|
1704
|
+
)
|
|
1705
|
+
]
|
|
1706
|
+
}
|
|
1707
|
+
),
|
|
1708
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 4 }, children: [
|
|
1709
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1710
|
+
"button",
|
|
1711
|
+
{
|
|
1712
|
+
type: "button",
|
|
1713
|
+
onClick: handleReopen,
|
|
1714
|
+
disabled: isSubmitting,
|
|
1715
|
+
style: {
|
|
1716
|
+
flex: 1,
|
|
1717
|
+
paddingTop: 14,
|
|
1718
|
+
paddingBottom: 14,
|
|
1719
|
+
borderRadius: 12,
|
|
1720
|
+
textAlign: "center",
|
|
1721
|
+
backgroundColor: colors.card,
|
|
1722
|
+
border: `1px solid ${colors.blue}`,
|
|
1723
|
+
cursor: isSubmitting ? "not-allowed" : "pointer",
|
|
1724
|
+
fontSize: 14,
|
|
1725
|
+
fontWeight: 600,
|
|
1726
|
+
color: colors.blue,
|
|
1727
|
+
opacity: isSubmitting ? 0.5 : 1
|
|
1728
|
+
},
|
|
1729
|
+
children: isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test"
|
|
1730
|
+
}
|
|
1731
|
+
),
|
|
1732
|
+
displayedAssignment.status === "passed" && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1733
|
+
"button",
|
|
1734
|
+
{
|
|
1735
|
+
type: "button",
|
|
1736
|
+
onClick: () => handleChangeResult("failed"),
|
|
1737
|
+
disabled: isSubmitting,
|
|
1738
|
+
style: {
|
|
1739
|
+
flex: 1,
|
|
1740
|
+
paddingTop: 14,
|
|
1741
|
+
paddingBottom: 14,
|
|
1742
|
+
borderRadius: 12,
|
|
1743
|
+
textAlign: "center",
|
|
1744
|
+
backgroundColor: colors.redDark,
|
|
1745
|
+
border: `1px solid ${colors.red}`,
|
|
1746
|
+
cursor: isSubmitting ? "not-allowed" : "pointer",
|
|
1747
|
+
fontSize: 14,
|
|
1748
|
+
fontWeight: 600,
|
|
1749
|
+
color: "#fca5a5",
|
|
1750
|
+
opacity: isSubmitting ? 0.5 : 1
|
|
1751
|
+
},
|
|
1752
|
+
children: "Change to Fail"
|
|
1753
|
+
}
|
|
1754
|
+
),
|
|
1755
|
+
displayedAssignment.status === "failed" && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1756
|
+
"button",
|
|
1757
|
+
{
|
|
1758
|
+
type: "button",
|
|
1759
|
+
onClick: () => handleChangeResult("passed"),
|
|
1760
|
+
disabled: isSubmitting,
|
|
1761
|
+
style: {
|
|
1762
|
+
flex: 1,
|
|
1763
|
+
paddingTop: 14,
|
|
1764
|
+
paddingBottom: 14,
|
|
1765
|
+
borderRadius: 12,
|
|
1766
|
+
textAlign: "center",
|
|
1767
|
+
backgroundColor: colors.greenDark,
|
|
1768
|
+
border: `1px solid ${colors.green}`,
|
|
1769
|
+
cursor: isSubmitting ? "not-allowed" : "pointer",
|
|
1770
|
+
fontSize: 14,
|
|
1771
|
+
fontWeight: 600,
|
|
1772
|
+
color: "#86efac",
|
|
1773
|
+
opacity: isSubmitting ? 0.5 : 1
|
|
1774
|
+
},
|
|
1775
|
+
children: "Change to Pass"
|
|
1776
|
+
}
|
|
1777
|
+
)
|
|
1778
|
+
] })
|
|
1779
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 8 }, children: [
|
|
1780
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1445
1781
|
"button",
|
|
1446
1782
|
{
|
|
1447
1783
|
type: "button",
|
|
@@ -1464,7 +1800,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1464
1800
|
children: isSubmitting ? "Failing..." : "Fail"
|
|
1465
1801
|
}
|
|
1466
1802
|
),
|
|
1467
|
-
/* @__PURE__ */ (0,
|
|
1803
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1468
1804
|
"button",
|
|
1469
1805
|
{
|
|
1470
1806
|
type: "button",
|
|
@@ -1487,7 +1823,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1487
1823
|
children: "Skip"
|
|
1488
1824
|
}
|
|
1489
1825
|
),
|
|
1490
|
-
/* @__PURE__ */ (0,
|
|
1826
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1491
1827
|
"button",
|
|
1492
1828
|
{
|
|
1493
1829
|
type: "button",
|
|
@@ -1511,7 +1847,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1511
1847
|
}
|
|
1512
1848
|
)
|
|
1513
1849
|
] }),
|
|
1514
|
-
showSkipModal && /* @__PURE__ */ (0,
|
|
1850
|
+
showSkipModal && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1515
1851
|
"div",
|
|
1516
1852
|
{
|
|
1517
1853
|
style: {
|
|
@@ -1524,7 +1860,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1524
1860
|
zIndex: 9999,
|
|
1525
1861
|
padding: 24
|
|
1526
1862
|
},
|
|
1527
|
-
children: /* @__PURE__ */ (0,
|
|
1863
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
1528
1864
|
"div",
|
|
1529
1865
|
{
|
|
1530
1866
|
style: {
|
|
@@ -1536,7 +1872,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1536
1872
|
width: "100%"
|
|
1537
1873
|
},
|
|
1538
1874
|
children: [
|
|
1539
|
-
/* @__PURE__ */ (0,
|
|
1875
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1540
1876
|
"div",
|
|
1541
1877
|
{
|
|
1542
1878
|
style: {
|
|
@@ -1548,8 +1884,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1548
1884
|
children: "Skip this test?"
|
|
1549
1885
|
}
|
|
1550
1886
|
),
|
|
1551
|
-
/* @__PURE__ */ (0,
|
|
1552
|
-
skipReasons.map(({ reason, label }) => /* @__PURE__ */ (0,
|
|
1887
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: 14, color: colors.textMuted, marginBottom: 12 }, children: "Select a reason:" }),
|
|
1888
|
+
skipReasons.map(({ reason, label }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1553
1889
|
"button",
|
|
1554
1890
|
{
|
|
1555
1891
|
type: "button",
|
|
@@ -1575,7 +1911,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1575
1911
|
},
|
|
1576
1912
|
reason
|
|
1577
1913
|
)),
|
|
1578
|
-
/* @__PURE__ */ (0,
|
|
1914
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1579
1915
|
"textarea",
|
|
1580
1916
|
{
|
|
1581
1917
|
value: skipNotes,
|
|
@@ -1598,8 +1934,8 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1598
1934
|
}
|
|
1599
1935
|
}
|
|
1600
1936
|
),
|
|
1601
|
-
/* @__PURE__ */ (0,
|
|
1602
|
-
/* @__PURE__ */ (0,
|
|
1937
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 10, marginTop: 14 }, children: [
|
|
1938
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1603
1939
|
"button",
|
|
1604
1940
|
{
|
|
1605
1941
|
type: "button",
|
|
@@ -1623,7 +1959,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1623
1959
|
children: "Cancel"
|
|
1624
1960
|
}
|
|
1625
1961
|
),
|
|
1626
|
-
/* @__PURE__ */ (0,
|
|
1962
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1627
1963
|
"button",
|
|
1628
1964
|
{
|
|
1629
1965
|
type: "button",
|
|
@@ -1657,11 +1993,15 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
1657
1993
|
|
|
1658
1994
|
// src/widget/screens/TestListScreen.tsx
|
|
1659
1995
|
var import_react5 = require("react");
|
|
1660
|
-
var
|
|
1996
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
1661
1997
|
function TestListScreen({ nav }) {
|
|
1662
|
-
const { assignments, currentAssignment, refreshAssignments } = useBugBear();
|
|
1998
|
+
const { assignments, currentAssignment, refreshAssignments, dashboardUrl, isLoading } = useBugBear();
|
|
1663
1999
|
const [filter, setFilter] = (0, import_react5.useState)("all");
|
|
1664
2000
|
const [roleFilter, setRoleFilter] = (0, import_react5.useState)(null);
|
|
2001
|
+
const [trackFilter, setTrackFilter] = (0, import_react5.useState)(null);
|
|
2002
|
+
const [platformFilter, setPlatformFilter] = (0, import_react5.useState)("web");
|
|
2003
|
+
const [searchQuery, setSearchQuery] = (0, import_react5.useState)("");
|
|
2004
|
+
const [sortMode, setSortMode] = (0, import_react5.useState)("priority");
|
|
1665
2005
|
const [collapsedFolders, setCollapsedFolders] = (0, import_react5.useState)(/* @__PURE__ */ new Set());
|
|
1666
2006
|
const availableRoles = (0, import_react5.useMemo)(() => {
|
|
1667
2007
|
const roleMap = /* @__PURE__ */ new Map();
|
|
@@ -1670,6 +2010,20 @@ function TestListScreen({ nav }) {
|
|
|
1670
2010
|
}
|
|
1671
2011
|
return Array.from(roleMap.values());
|
|
1672
2012
|
}, [assignments]);
|
|
2013
|
+
const availableTracks = (0, import_react5.useMemo)(() => {
|
|
2014
|
+
const trackMap = /* @__PURE__ */ new Map();
|
|
2015
|
+
for (const a of assignments) {
|
|
2016
|
+
if (a.testCase.track) trackMap.set(a.testCase.track.id, a.testCase.track);
|
|
2017
|
+
}
|
|
2018
|
+
return Array.from(trackMap.values());
|
|
2019
|
+
}, [assignments]);
|
|
2020
|
+
const availablePlatforms = (0, import_react5.useMemo)(() => {
|
|
2021
|
+
const set = /* @__PURE__ */ new Set();
|
|
2022
|
+
for (const a of assignments) {
|
|
2023
|
+
if (a.testCase.platforms) a.testCase.platforms.forEach((p) => set.add(p));
|
|
2024
|
+
}
|
|
2025
|
+
return Array.from(set).sort();
|
|
2026
|
+
}, [assignments]);
|
|
1673
2027
|
const selectedRole = availableRoles.find((r) => r.id === roleFilter);
|
|
1674
2028
|
const groupedAssignments = (0, import_react5.useMemo)(() => {
|
|
1675
2029
|
const groups = /* @__PURE__ */ new Map();
|
|
@@ -1703,6 +2057,12 @@ function TestListScreen({ nav }) {
|
|
|
1703
2057
|
folder.assignments.sort((a, b) => {
|
|
1704
2058
|
if (a.isVerification && !b.isVerification) return -1;
|
|
1705
2059
|
if (!a.isVerification && b.isVerification) return 1;
|
|
2060
|
+
if (sortMode === "alpha") {
|
|
2061
|
+
return a.testCase.title.localeCompare(b.testCase.title);
|
|
2062
|
+
}
|
|
2063
|
+
if (sortMode === "recent") {
|
|
2064
|
+
return 0;
|
|
2065
|
+
}
|
|
1706
2066
|
const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
|
|
1707
2067
|
if (sd !== 0) return sd;
|
|
1708
2068
|
return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
|
|
@@ -1714,7 +2074,7 @@ function TestListScreen({ nav }) {
|
|
|
1714
2074
|
if (!b.group) return -1;
|
|
1715
2075
|
return a.group.sortOrder - b.group.sortOrder;
|
|
1716
2076
|
});
|
|
1717
|
-
}, [assignments]);
|
|
2077
|
+
}, [assignments, sortMode]);
|
|
1718
2078
|
const toggleFolder = (0, import_react5.useCallback)((id) => {
|
|
1719
2079
|
setCollapsedFolders((prev) => {
|
|
1720
2080
|
const next = new Set(prev);
|
|
@@ -1723,13 +2083,21 @@ function TestListScreen({ nav }) {
|
|
|
1723
2083
|
return next;
|
|
1724
2084
|
});
|
|
1725
2085
|
}, []);
|
|
1726
|
-
const filterAssignment = (a) => {
|
|
2086
|
+
const filterAssignment = (0, import_react5.useCallback)((a) => {
|
|
2087
|
+
if (platformFilter && a.testCase.platforms && !a.testCase.platforms.includes(platformFilter)) return false;
|
|
1727
2088
|
if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
|
|
2089
|
+
if (trackFilter && a.testCase.track?.id !== trackFilter) return false;
|
|
2090
|
+
if (searchQuery) {
|
|
2091
|
+
const q = searchQuery.toLowerCase();
|
|
2092
|
+
const titleMatch = a.testCase.title.toLowerCase().includes(q);
|
|
2093
|
+
const keyMatch = a.testCase.testKey.toLowerCase().includes(q);
|
|
2094
|
+
if (!titleMatch && !keyMatch) return false;
|
|
2095
|
+
}
|
|
1728
2096
|
if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
|
|
1729
2097
|
if (filter === "done") return a.status === "passed";
|
|
1730
2098
|
if (filter === "reopened") return a.status === "failed";
|
|
1731
2099
|
return true;
|
|
1732
|
-
};
|
|
2100
|
+
}, [platformFilter, roleFilter, trackFilter, searchQuery, filter]);
|
|
1733
2101
|
const pendingCount = assignments.filter(
|
|
1734
2102
|
(a) => a.status === "pending" || a.status === "in_progress"
|
|
1735
2103
|
).length;
|
|
@@ -1741,8 +2109,9 @@ function TestListScreen({ nav }) {
|
|
|
1741
2109
|
{ key: "done", label: "Done", count: doneCount },
|
|
1742
2110
|
{ key: "reopened", label: "Re Opened", count: reopenedCount }
|
|
1743
2111
|
];
|
|
1744
|
-
return /* @__PURE__ */ (0,
|
|
1745
|
-
|
|
2112
|
+
if (isLoading) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TestListScreenSkeleton, {});
|
|
2113
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
2114
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: availableRoles.length >= 2 ? 8 : 16 }, children: filters.map((f) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1746
2115
|
"button",
|
|
1747
2116
|
{
|
|
1748
2117
|
type: "button",
|
|
@@ -1769,9 +2138,9 @@ function TestListScreen({ nav }) {
|
|
|
1769
2138
|
},
|
|
1770
2139
|
f.key
|
|
1771
2140
|
)) }),
|
|
1772
|
-
availableRoles.length >= 2 && /* @__PURE__ */ (0,
|
|
1773
|
-
/* @__PURE__ */ (0,
|
|
1774
|
-
/* @__PURE__ */ (0,
|
|
2141
|
+
availableRoles.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { marginBottom: 12 }, children: [
|
|
2142
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", gap: 6, flexWrap: "wrap", marginBottom: selectedRole?.loginHint ? 8 : 0 }, children: [
|
|
2143
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1775
2144
|
"button",
|
|
1776
2145
|
{
|
|
1777
2146
|
type: "button",
|
|
@@ -1794,7 +2163,7 @@ function TestListScreen({ nav }) {
|
|
|
1794
2163
|
),
|
|
1795
2164
|
availableRoles.map((role) => {
|
|
1796
2165
|
const isActive = roleFilter === role.id;
|
|
1797
|
-
return /* @__PURE__ */ (0,
|
|
2166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1798
2167
|
"button",
|
|
1799
2168
|
{
|
|
1800
2169
|
type: "button",
|
|
@@ -1816,7 +2185,7 @@ function TestListScreen({ nav }) {
|
|
|
1816
2185
|
fontWeight: isActive ? 600 : 400
|
|
1817
2186
|
},
|
|
1818
2187
|
children: [
|
|
1819
|
-
/* @__PURE__ */ (0,
|
|
2188
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: {
|
|
1820
2189
|
width: 6,
|
|
1821
2190
|
height: 6,
|
|
1822
2191
|
borderRadius: 3,
|
|
@@ -1830,7 +2199,7 @@ function TestListScreen({ nav }) {
|
|
|
1830
2199
|
);
|
|
1831
2200
|
})
|
|
1832
2201
|
] }),
|
|
1833
|
-
selectedRole?.loginHint && /* @__PURE__ */ (0,
|
|
2202
|
+
selectedRole?.loginHint && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: {
|
|
1834
2203
|
fontSize: 11,
|
|
1835
2204
|
color: colors.textSecondary,
|
|
1836
2205
|
backgroundColor: selectedRole.color + "10",
|
|
@@ -1842,6 +2211,156 @@ function TestListScreen({ nav }) {
|
|
|
1842
2211
|
selectedRole.loginHint
|
|
1843
2212
|
] })
|
|
1844
2213
|
] }),
|
|
2214
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { marginBottom: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2215
|
+
"input",
|
|
2216
|
+
{
|
|
2217
|
+
type: "text",
|
|
2218
|
+
value: searchQuery,
|
|
2219
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
2220
|
+
placeholder: "Search tests...",
|
|
2221
|
+
style: {
|
|
2222
|
+
width: "100%",
|
|
2223
|
+
padding: "8px 12px",
|
|
2224
|
+
borderRadius: 8,
|
|
2225
|
+
border: `1px solid ${colors.border}`,
|
|
2226
|
+
backgroundColor: colors.card,
|
|
2227
|
+
color: colors.textPrimary,
|
|
2228
|
+
fontSize: 13,
|
|
2229
|
+
outline: "none",
|
|
2230
|
+
boxSizing: "border-box"
|
|
2231
|
+
}
|
|
2232
|
+
}
|
|
2233
|
+
) }),
|
|
2234
|
+
availablePlatforms.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", gap: 4, marginBottom: 8 }, children: [
|
|
2235
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2236
|
+
"button",
|
|
2237
|
+
{
|
|
2238
|
+
type: "button",
|
|
2239
|
+
onClick: () => setPlatformFilter(null),
|
|
2240
|
+
style: {
|
|
2241
|
+
padding: "3px 8px",
|
|
2242
|
+
borderRadius: 6,
|
|
2243
|
+
backgroundColor: !platformFilter ? colors.card : "transparent",
|
|
2244
|
+
border: !platformFilter ? `1px solid ${colors.border}` : "1px solid transparent",
|
|
2245
|
+
cursor: "pointer",
|
|
2246
|
+
fontSize: 11,
|
|
2247
|
+
color: !platformFilter ? colors.textPrimary : colors.textMuted,
|
|
2248
|
+
fontWeight: !platformFilter ? 600 : 400,
|
|
2249
|
+
whiteSpace: "nowrap"
|
|
2250
|
+
},
|
|
2251
|
+
children: "All Platforms"
|
|
2252
|
+
}
|
|
2253
|
+
),
|
|
2254
|
+
availablePlatforms.map((p) => {
|
|
2255
|
+
const isActive = platformFilter === p;
|
|
2256
|
+
const label = p === "ios" ? "iOS" : p === "android" ? "Android" : p === "web" ? "Web" : p;
|
|
2257
|
+
const icon = p === "ios" ? "\u{1F4F1}" : p === "android" ? "\u{1F916}" : p === "web" ? "\u{1F310}" : "\u{1F4CB}";
|
|
2258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
2259
|
+
"button",
|
|
2260
|
+
{
|
|
2261
|
+
type: "button",
|
|
2262
|
+
onClick: () => setPlatformFilter(isActive ? null : p),
|
|
2263
|
+
style: {
|
|
2264
|
+
display: "flex",
|
|
2265
|
+
alignItems: "center",
|
|
2266
|
+
gap: 4,
|
|
2267
|
+
padding: "3px 8px",
|
|
2268
|
+
borderRadius: 6,
|
|
2269
|
+
backgroundColor: isActive ? colors.blue + "20" : "transparent",
|
|
2270
|
+
border: isActive ? `1px solid ${colors.blue}60` : "1px solid transparent",
|
|
2271
|
+
cursor: "pointer",
|
|
2272
|
+
fontSize: 11,
|
|
2273
|
+
color: isActive ? colors.blue : colors.textMuted,
|
|
2274
|
+
fontWeight: isActive ? 600 : 400,
|
|
2275
|
+
whiteSpace: "nowrap"
|
|
2276
|
+
},
|
|
2277
|
+
children: [
|
|
2278
|
+
icon,
|
|
2279
|
+
" ",
|
|
2280
|
+
label
|
|
2281
|
+
]
|
|
2282
|
+
},
|
|
2283
|
+
p
|
|
2284
|
+
);
|
|
2285
|
+
})
|
|
2286
|
+
] }),
|
|
2287
|
+
(availableTracks.length >= 2 || true) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 6, marginBottom: 12 }, children: [
|
|
2288
|
+
availableTracks.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", gap: 4, flex: 1, overflow: "auto" }, children: [
|
|
2289
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2290
|
+
"button",
|
|
2291
|
+
{
|
|
2292
|
+
type: "button",
|
|
2293
|
+
onClick: () => setTrackFilter(null),
|
|
2294
|
+
style: {
|
|
2295
|
+
padding: "3px 8px",
|
|
2296
|
+
borderRadius: 6,
|
|
2297
|
+
backgroundColor: !trackFilter ? colors.card : "transparent",
|
|
2298
|
+
border: !trackFilter ? `1px solid ${colors.border}` : "1px solid transparent",
|
|
2299
|
+
cursor: "pointer",
|
|
2300
|
+
fontSize: 11,
|
|
2301
|
+
color: !trackFilter ? colors.textPrimary : colors.textMuted,
|
|
2302
|
+
fontWeight: !trackFilter ? 600 : 400,
|
|
2303
|
+
whiteSpace: "nowrap"
|
|
2304
|
+
},
|
|
2305
|
+
children: "All Tracks"
|
|
2306
|
+
}
|
|
2307
|
+
),
|
|
2308
|
+
availableTracks.map((track) => {
|
|
2309
|
+
const isActive = trackFilter === track.id;
|
|
2310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
2311
|
+
"button",
|
|
2312
|
+
{
|
|
2313
|
+
type: "button",
|
|
2314
|
+
onClick: () => setTrackFilter(isActive ? null : track.id),
|
|
2315
|
+
style: {
|
|
2316
|
+
display: "flex",
|
|
2317
|
+
alignItems: "center",
|
|
2318
|
+
gap: 4,
|
|
2319
|
+
padding: "3px 8px",
|
|
2320
|
+
borderRadius: 6,
|
|
2321
|
+
backgroundColor: isActive ? track.color + "20" : "transparent",
|
|
2322
|
+
border: isActive ? `1px solid ${track.color}60` : "1px solid transparent",
|
|
2323
|
+
cursor: "pointer",
|
|
2324
|
+
fontSize: 11,
|
|
2325
|
+
color: isActive ? track.color : colors.textMuted,
|
|
2326
|
+
fontWeight: isActive ? 600 : 400,
|
|
2327
|
+
whiteSpace: "nowrap"
|
|
2328
|
+
},
|
|
2329
|
+
children: [
|
|
2330
|
+
track.icon,
|
|
2331
|
+
" ",
|
|
2332
|
+
track.name
|
|
2333
|
+
]
|
|
2334
|
+
},
|
|
2335
|
+
track.id
|
|
2336
|
+
);
|
|
2337
|
+
})
|
|
2338
|
+
] }),
|
|
2339
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { display: "flex", gap: 2, marginLeft: "auto", flexShrink: 0 }, children: [
|
|
2340
|
+
{ key: "priority", label: "\u2195 Priority" },
|
|
2341
|
+
{ key: "recent", label: "\u{1F550} Recent" },
|
|
2342
|
+
{ key: "alpha", label: "A-Z" }
|
|
2343
|
+
].map((s) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2344
|
+
"button",
|
|
2345
|
+
{
|
|
2346
|
+
type: "button",
|
|
2347
|
+
onClick: () => setSortMode(s.key),
|
|
2348
|
+
style: {
|
|
2349
|
+
padding: "3px 8px",
|
|
2350
|
+
borderRadius: 6,
|
|
2351
|
+
backgroundColor: sortMode === s.key ? colors.card : "transparent",
|
|
2352
|
+
border: sortMode === s.key ? `1px solid ${colors.border}` : "1px solid transparent",
|
|
2353
|
+
cursor: "pointer",
|
|
2354
|
+
fontSize: 10,
|
|
2355
|
+
color: sortMode === s.key ? colors.textPrimary : colors.textMuted,
|
|
2356
|
+
fontWeight: sortMode === s.key ? 600 : 400,
|
|
2357
|
+
whiteSpace: "nowrap"
|
|
2358
|
+
},
|
|
2359
|
+
children: s.label
|
|
2360
|
+
},
|
|
2361
|
+
s.key
|
|
2362
|
+
)) })
|
|
2363
|
+
] }),
|
|
1845
2364
|
groupedAssignments.map((folder) => {
|
|
1846
2365
|
const folderId = folder.group?.id || "ungrouped";
|
|
1847
2366
|
const isCollapsed = collapsedFolders.has(folderId);
|
|
@@ -1849,8 +2368,8 @@ function TestListScreen({ nav }) {
|
|
|
1849
2368
|
if (filtered.length === 0 && filter !== "all") return null;
|
|
1850
2369
|
const completedInFolder = folder.stats.passed + folder.stats.failed;
|
|
1851
2370
|
const progressPercent = folder.stats.total > 0 ? Math.round(completedInFolder / folder.stats.total * 100) : 0;
|
|
1852
|
-
return /* @__PURE__ */ (0,
|
|
1853
|
-
/* @__PURE__ */ (0,
|
|
2371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { marginBottom: 12 }, children: [
|
|
2372
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1854
2373
|
"button",
|
|
1855
2374
|
{
|
|
1856
2375
|
type: "button",
|
|
@@ -1870,8 +2389,8 @@ function TestListScreen({ nav }) {
|
|
|
1870
2389
|
textAlign: "left"
|
|
1871
2390
|
},
|
|
1872
2391
|
children: [
|
|
1873
|
-
/* @__PURE__ */ (0,
|
|
1874
|
-
/* @__PURE__ */ (0,
|
|
2392
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 10, color: colors.textMuted, width: 14 }, children: isCollapsed ? "\u25B6" : "\u25BC" }),
|
|
2393
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1875
2394
|
"span",
|
|
1876
2395
|
{
|
|
1877
2396
|
style: {
|
|
@@ -1886,7 +2405,7 @@ function TestListScreen({ nav }) {
|
|
|
1886
2405
|
children: folder.group?.name || "Ungrouped"
|
|
1887
2406
|
}
|
|
1888
2407
|
),
|
|
1889
|
-
/* @__PURE__ */ (0,
|
|
2408
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1890
2409
|
"div",
|
|
1891
2410
|
{
|
|
1892
2411
|
style: {
|
|
@@ -1897,7 +2416,7 @@ function TestListScreen({ nav }) {
|
|
|
1897
2416
|
overflow: "hidden",
|
|
1898
2417
|
flexShrink: 0
|
|
1899
2418
|
},
|
|
1900
|
-
children: /* @__PURE__ */ (0,
|
|
2419
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1901
2420
|
"div",
|
|
1902
2421
|
{
|
|
1903
2422
|
style: {
|
|
@@ -1911,7 +2430,7 @@ function TestListScreen({ nav }) {
|
|
|
1911
2430
|
)
|
|
1912
2431
|
}
|
|
1913
2432
|
),
|
|
1914
|
-
/* @__PURE__ */ (0,
|
|
2433
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1915
2434
|
"span",
|
|
1916
2435
|
{
|
|
1917
2436
|
style: {
|
|
@@ -1935,7 +2454,7 @@ function TestListScreen({ nav }) {
|
|
|
1935
2454
|
const badge = getStatusBadge(assignment.status);
|
|
1936
2455
|
const isCurrent = currentAssignment?.id === assignment.id;
|
|
1937
2456
|
const priorityColor = assignment.testCase.priority === "P0" ? colors.red : assignment.testCase.priority === "P1" ? colors.orange : colors.textDim;
|
|
1938
|
-
return /* @__PURE__ */ (0,
|
|
2457
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1939
2458
|
"button",
|
|
1940
2459
|
{
|
|
1941
2460
|
type: "button",
|
|
@@ -1957,9 +2476,9 @@ function TestListScreen({ nav }) {
|
|
|
1957
2476
|
textAlign: "left"
|
|
1958
2477
|
},
|
|
1959
2478
|
children: [
|
|
1960
|
-
/* @__PURE__ */ (0,
|
|
1961
|
-
/* @__PURE__ */ (0,
|
|
1962
|
-
/* @__PURE__ */ (0,
|
|
2479
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 16, marginRight: 10, width: 20, flexShrink: 0 }, children: badge.icon }),
|
|
2480
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
2481
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1963
2482
|
"div",
|
|
1964
2483
|
{
|
|
1965
2484
|
style: {
|
|
@@ -1973,9 +2492,9 @@ function TestListScreen({ nav }) {
|
|
|
1973
2492
|
children: assignment.testCase.title
|
|
1974
2493
|
}
|
|
1975
2494
|
),
|
|
1976
|
-
/* @__PURE__ */ (0,
|
|
1977
|
-
assignment.isVerification && /* @__PURE__ */ (0,
|
|
1978
|
-
/* @__PURE__ */ (0,
|
|
2495
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [
|
|
2496
|
+
assignment.isVerification && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
2497
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1979
2498
|
"span",
|
|
1980
2499
|
{
|
|
1981
2500
|
style: {
|
|
@@ -1990,9 +2509,9 @@ function TestListScreen({ nav }) {
|
|
|
1990
2509
|
children: "Retest"
|
|
1991
2510
|
}
|
|
1992
2511
|
),
|
|
1993
|
-
/* @__PURE__ */ (0,
|
|
2512
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" })
|
|
1994
2513
|
] }),
|
|
1995
|
-
/* @__PURE__ */ (0,
|
|
2514
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1996
2515
|
"span",
|
|
1997
2516
|
{
|
|
1998
2517
|
style: {
|
|
@@ -2003,8 +2522,8 @@ function TestListScreen({ nav }) {
|
|
|
2003
2522
|
children: assignment.testCase.testKey
|
|
2004
2523
|
}
|
|
2005
2524
|
),
|
|
2006
|
-
/* @__PURE__ */ (0,
|
|
2007
|
-
/* @__PURE__ */ (0,
|
|
2525
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
|
|
2526
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2008
2527
|
"span",
|
|
2009
2528
|
{
|
|
2010
2529
|
style: {
|
|
@@ -2015,9 +2534,9 @@ function TestListScreen({ nav }) {
|
|
|
2015
2534
|
children: assignment.testCase.priority
|
|
2016
2535
|
}
|
|
2017
2536
|
),
|
|
2018
|
-
assignment.testCase.role && /* @__PURE__ */ (0,
|
|
2019
|
-
/* @__PURE__ */ (0,
|
|
2020
|
-
/* @__PURE__ */ (0,
|
|
2537
|
+
assignment.testCase.role && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
2538
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
|
|
2539
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { style: {
|
|
2021
2540
|
display: "inline-flex",
|
|
2022
2541
|
alignItems: "center",
|
|
2023
2542
|
gap: 3,
|
|
@@ -2025,7 +2544,7 @@ function TestListScreen({ nav }) {
|
|
|
2025
2544
|
color: assignment.testCase.role.color,
|
|
2026
2545
|
fontWeight: 500
|
|
2027
2546
|
}, children: [
|
|
2028
|
-
/* @__PURE__ */ (0,
|
|
2547
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: {
|
|
2029
2548
|
width: 5,
|
|
2030
2549
|
height: 5,
|
|
2031
2550
|
borderRadius: 3,
|
|
@@ -2036,7 +2555,7 @@ function TestListScreen({ nav }) {
|
|
|
2036
2555
|
] })
|
|
2037
2556
|
] })
|
|
2038
2557
|
] }),
|
|
2039
|
-
/* @__PURE__ */ (0,
|
|
2558
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2040
2559
|
"span",
|
|
2041
2560
|
{
|
|
2042
2561
|
style: {
|
|
@@ -2063,7 +2582,7 @@ function TestListScreen({ nav }) {
|
|
|
2063
2582
|
groupedAssignments.every((folder) => {
|
|
2064
2583
|
const filtered = folder.assignments.filter(filterAssignment);
|
|
2065
2584
|
return filtered.length === 0;
|
|
2066
|
-
}) && /* @__PURE__ */ (0,
|
|
2585
|
+
}) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
2067
2586
|
"div",
|
|
2068
2587
|
{
|
|
2069
2588
|
style: {
|
|
@@ -2073,12 +2592,32 @@ function TestListScreen({ nav }) {
|
|
|
2073
2592
|
padding: 32
|
|
2074
2593
|
},
|
|
2075
2594
|
children: [
|
|
2076
|
-
/* @__PURE__ */ (0,
|
|
2077
|
-
/* @__PURE__ */ (0,
|
|
2595
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 32, marginBottom: 8 }, children: filter === "pending" ? "\u{1F389}" : filter === "reopened" ? "\u{1F44D}" : "\u{1F4CB}" }),
|
|
2596
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style: { fontSize: 14, color: colors.textMuted }, children: filter === "pending" ? "All tests completed!" : filter === "done" ? "No passed tests yet" : filter === "reopened" ? "No reopened issues" : "No tests assigned" })
|
|
2078
2597
|
]
|
|
2079
2598
|
}
|
|
2080
2599
|
),
|
|
2081
|
-
|
|
2600
|
+
dashboardUrl && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2601
|
+
"a",
|
|
2602
|
+
{
|
|
2603
|
+
href: `${dashboardUrl}/test-cases`,
|
|
2604
|
+
target: "_blank",
|
|
2605
|
+
rel: "noopener noreferrer",
|
|
2606
|
+
style: {
|
|
2607
|
+
display: "flex",
|
|
2608
|
+
alignItems: "center",
|
|
2609
|
+
justifyContent: "center",
|
|
2610
|
+
gap: 6,
|
|
2611
|
+
paddingTop: 12,
|
|
2612
|
+
fontSize: 13,
|
|
2613
|
+
fontWeight: 500,
|
|
2614
|
+
color: colors.blue,
|
|
2615
|
+
textDecoration: "none"
|
|
2616
|
+
},
|
|
2617
|
+
children: "\u{1F310} Manage on Dashboard \u2192"
|
|
2618
|
+
}
|
|
2619
|
+
),
|
|
2620
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { display: "flex", justifyContent: "center", paddingTop: 8, paddingBottom: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2082
2621
|
"button",
|
|
2083
2622
|
{
|
|
2084
2623
|
type: "button",
|
|
@@ -2174,13 +2713,13 @@ function useImageAttachments(uploadFn, maxImages, bucket = "screenshots") {
|
|
|
2174
2713
|
}
|
|
2175
2714
|
|
|
2176
2715
|
// src/widget/ImagePreviewStrip.tsx
|
|
2177
|
-
var
|
|
2716
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
2178
2717
|
function ImagePreviewStrip({ images, onRemove }) {
|
|
2179
2718
|
if (images.length === 0) return null;
|
|
2180
|
-
return /* @__PURE__ */ (0,
|
|
2181
|
-
images.map((img) => /* @__PURE__ */ (0,
|
|
2182
|
-
/* @__PURE__ */ (0,
|
|
2183
|
-
img.status === "uploading" && /* @__PURE__ */ (0,
|
|
2719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { display: "flex", gap: 8, overflowX: "auto", paddingTop: 4 }, children: [
|
|
2720
|
+
images.map((img) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { position: "relative", width: 64, height: 64, flexShrink: 0, borderRadius: 8, overflow: "hidden" }, children: [
|
|
2721
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: img.localUri, alt: img.name, style: { width: 64, height: 64, objectFit: "cover", borderRadius: 8 } }),
|
|
2722
|
+
img.status === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
|
|
2184
2723
|
position: "absolute",
|
|
2185
2724
|
inset: 0,
|
|
2186
2725
|
backgroundColor: "rgba(0,0,0,0.5)",
|
|
@@ -2188,7 +2727,7 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2188
2727
|
alignItems: "center",
|
|
2189
2728
|
justifyContent: "center",
|
|
2190
2729
|
borderRadius: 8
|
|
2191
|
-
}, children: /* @__PURE__ */ (0,
|
|
2730
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
|
|
2192
2731
|
width: 16,
|
|
2193
2732
|
height: 16,
|
|
2194
2733
|
border: "2px solid #fff",
|
|
@@ -2196,7 +2735,7 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2196
2735
|
borderRadius: "50%",
|
|
2197
2736
|
animation: "bb-spin 0.6s linear infinite"
|
|
2198
2737
|
} }) }),
|
|
2199
|
-
img.status === "error" && /* @__PURE__ */ (0,
|
|
2738
|
+
img.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
|
|
2200
2739
|
position: "absolute",
|
|
2201
2740
|
inset: 0,
|
|
2202
2741
|
backgroundColor: "rgba(127,29,29,0.7)",
|
|
@@ -2204,8 +2743,8 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2204
2743
|
alignItems: "center",
|
|
2205
2744
|
justifyContent: "center",
|
|
2206
2745
|
borderRadius: 8
|
|
2207
|
-
}, children: /* @__PURE__ */ (0,
|
|
2208
|
-
/* @__PURE__ */ (0,
|
|
2746
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { color: "#fca5a5", fontSize: 18, fontWeight: "bold" }, children: "!" }) }),
|
|
2747
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2209
2748
|
"button",
|
|
2210
2749
|
{
|
|
2211
2750
|
type: "button",
|
|
@@ -2232,18 +2771,18 @@ function ImagePreviewStrip({ images, onRemove }) {
|
|
|
2232
2771
|
}
|
|
2233
2772
|
)
|
|
2234
2773
|
] }, img.id)),
|
|
2235
|
-
/* @__PURE__ */ (0,
|
|
2774
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("style", { children: `@keyframes bb-spin { to { transform: rotate(360deg); } }` })
|
|
2236
2775
|
] });
|
|
2237
2776
|
}
|
|
2238
2777
|
|
|
2239
2778
|
// src/widget/ImagePickerButtons.tsx
|
|
2240
|
-
var
|
|
2779
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
2241
2780
|
function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, onRemove, label }) {
|
|
2242
2781
|
const disabled = images.length >= maxImages;
|
|
2243
|
-
return /* @__PURE__ */ (0,
|
|
2244
|
-
label && /* @__PURE__ */ (0,
|
|
2245
|
-
/* @__PURE__ */ (0,
|
|
2246
|
-
/* @__PURE__ */ (0,
|
|
2782
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: { marginTop: 12, marginBottom: 4 }, children: [
|
|
2783
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { fontSize: 14, fontWeight: 500, color: "#e4e4e7", marginBottom: 8 }, children: label }),
|
|
2784
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 8 }, children: [
|
|
2785
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2247
2786
|
"button",
|
|
2248
2787
|
{
|
|
2249
2788
|
type: "button",
|
|
@@ -2264,7 +2803,7 @@ function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, on
|
|
|
2264
2803
|
children: "Gallery"
|
|
2265
2804
|
}
|
|
2266
2805
|
),
|
|
2267
|
-
/* @__PURE__ */ (0,
|
|
2806
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2268
2807
|
"button",
|
|
2269
2808
|
{
|
|
2270
2809
|
type: "button",
|
|
@@ -2285,18 +2824,18 @@ function ImagePickerButtons({ images, maxImages, onPickGallery, onPickCamera, on
|
|
|
2285
2824
|
children: "Camera"
|
|
2286
2825
|
}
|
|
2287
2826
|
),
|
|
2288
|
-
/* @__PURE__ */ (0,
|
|
2827
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { style: { fontSize: 12, color: colors.textDim, marginLeft: 4 }, children: [
|
|
2289
2828
|
images.length,
|
|
2290
2829
|
"/",
|
|
2291
2830
|
maxImages
|
|
2292
2831
|
] })
|
|
2293
2832
|
] }),
|
|
2294
|
-
/* @__PURE__ */ (0,
|
|
2833
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ImagePreviewStrip, { images, onRemove })
|
|
2295
2834
|
] });
|
|
2296
2835
|
}
|
|
2297
2836
|
|
|
2298
2837
|
// src/widget/screens/TestFeedbackScreen.tsx
|
|
2299
|
-
var
|
|
2838
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
2300
2839
|
function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
2301
2840
|
const { client, assignments, refreshAssignments, uploadImage } = useBugBear();
|
|
2302
2841
|
const images = useImageAttachments(uploadImage, 3, "screenshots");
|
|
@@ -2365,10 +2904,10 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2365
2904
|
{ key: "stepsUnclear", label: "Steps are unclear" },
|
|
2366
2905
|
{ key: "expectedResultUnclear", label: "Expected result unclear" }
|
|
2367
2906
|
];
|
|
2368
|
-
return /* @__PURE__ */ (0,
|
|
2369
|
-
/* @__PURE__ */ (0,
|
|
2370
|
-
/* @__PURE__ */ (0,
|
|
2371
|
-
/* @__PURE__ */ (0,
|
|
2907
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles.container, children: [
|
|
2908
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.header, children: status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed" }),
|
|
2909
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.subheader, children: "Rate this test case" }),
|
|
2910
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.starRow, children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2372
2911
|
"button",
|
|
2373
2912
|
{
|
|
2374
2913
|
onClick: () => setRating(n),
|
|
@@ -2380,9 +2919,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2380
2919
|
},
|
|
2381
2920
|
n
|
|
2382
2921
|
)) }),
|
|
2383
|
-
showFlags && /* @__PURE__ */ (0,
|
|
2384
|
-
/* @__PURE__ */ (0,
|
|
2385
|
-
flagOptions.map(({ key, label }) => /* @__PURE__ */ (0,
|
|
2922
|
+
showFlags && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles.flagsSection, children: [
|
|
2923
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles.flagsLabel, children: "What could be improved?" }),
|
|
2924
|
+
flagOptions.map(({ key, label }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
2386
2925
|
"button",
|
|
2387
2926
|
{
|
|
2388
2927
|
onClick: () => toggleFlag(key),
|
|
@@ -2391,17 +2930,17 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2391
2930
|
...flags[key] ? styles.flagItemActive : {}
|
|
2392
2931
|
},
|
|
2393
2932
|
children: [
|
|
2394
|
-
/* @__PURE__ */ (0,
|
|
2933
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2395
2934
|
"div",
|
|
2396
2935
|
{
|
|
2397
2936
|
style: {
|
|
2398
2937
|
...styles.flagCheck,
|
|
2399
2938
|
...flags[key] ? styles.flagCheckActive : {}
|
|
2400
2939
|
},
|
|
2401
|
-
children: flags[key] && /* @__PURE__ */ (0,
|
|
2940
|
+
children: flags[key] && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { style: styles.flagCheckmark, children: "\u2713" })
|
|
2402
2941
|
}
|
|
2403
2942
|
),
|
|
2404
|
-
/* @__PURE__ */ (0,
|
|
2943
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2405
2944
|
"span",
|
|
2406
2945
|
{
|
|
2407
2946
|
style: {
|
|
@@ -2416,7 +2955,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2416
2955
|
key
|
|
2417
2956
|
))
|
|
2418
2957
|
] }),
|
|
2419
|
-
/* @__PURE__ */ (0,
|
|
2958
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2420
2959
|
"textarea",
|
|
2421
2960
|
{
|
|
2422
2961
|
style: styles.noteInput,
|
|
@@ -2426,7 +2965,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2426
2965
|
rows: 3
|
|
2427
2966
|
}
|
|
2428
2967
|
),
|
|
2429
|
-
/* @__PURE__ */ (0,
|
|
2968
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2430
2969
|
ImagePickerButtons,
|
|
2431
2970
|
{
|
|
2432
2971
|
images: images.images,
|
|
@@ -2437,9 +2976,9 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
|
|
|
2437
2976
|
label: "Screenshots (optional)"
|
|
2438
2977
|
}
|
|
2439
2978
|
),
|
|
2440
|
-
/* @__PURE__ */ (0,
|
|
2441
|
-
/* @__PURE__ */ (0,
|
|
2442
|
-
/* @__PURE__ */ (0,
|
|
2979
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles.actions, children: [
|
|
2980
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { style: styles.skipButton, onClick: handleSkip, children: "Skip" }),
|
|
2981
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2443
2982
|
"button",
|
|
2444
2983
|
{
|
|
2445
2984
|
style: {
|
|
@@ -2592,7 +3131,7 @@ var styles = {
|
|
|
2592
3131
|
var import_react8 = __toESM(require("react"));
|
|
2593
3132
|
|
|
2594
3133
|
// src/widget/CategoryDropdown.tsx
|
|
2595
|
-
var
|
|
3134
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
2596
3135
|
var categoryOptions = [
|
|
2597
3136
|
{ value: "ui_ux", label: "UI/UX", icon: "\u{1F3A8}" },
|
|
2598
3137
|
{ value: "functional", label: "Functional", icon: "\u2699\uFE0F" },
|
|
@@ -2601,7 +3140,7 @@ var categoryOptions = [
|
|
|
2601
3140
|
{ value: "other", label: "Other", icon: "\u{1F4DD}" }
|
|
2602
3141
|
];
|
|
2603
3142
|
function CategoryDropdown({ value, onChange, optional = true, disabled = false }) {
|
|
2604
|
-
return /* @__PURE__ */ (0,
|
|
3143
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
2605
3144
|
"select",
|
|
2606
3145
|
{
|
|
2607
3146
|
value: value || "",
|
|
@@ -2624,8 +3163,8 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
|
|
|
2624
3163
|
paddingRight: 32
|
|
2625
3164
|
},
|
|
2626
3165
|
children: [
|
|
2627
|
-
/* @__PURE__ */ (0,
|
|
2628
|
-
categoryOptions.map(({ value: value2, label, icon }) => /* @__PURE__ */ (0,
|
|
3166
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("option", { value: "", children: optional ? "Select category (optional)" : "Select category" }),
|
|
3167
|
+
categoryOptions.map(({ value: value2, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("option", { value: value2, children: [
|
|
2629
3168
|
icon,
|
|
2630
3169
|
" ",
|
|
2631
3170
|
label
|
|
@@ -2636,7 +3175,7 @@ function CategoryDropdown({ value, onChange, optional = true, disabled = false }
|
|
|
2636
3175
|
}
|
|
2637
3176
|
|
|
2638
3177
|
// src/widget/screens/ReportScreen.tsx
|
|
2639
|
-
var
|
|
3178
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
2640
3179
|
function ReportScreen({ nav, prefill }) {
|
|
2641
3180
|
const { client, refreshAssignments, uploadImage } = useBugBear();
|
|
2642
3181
|
const images = useImageAttachments(uploadImage, 5, "screenshots");
|
|
@@ -2711,17 +3250,17 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2711
3250
|
{ sev: "medium", color: "#eab308" },
|
|
2712
3251
|
{ sev: "low", color: "#6b7280" }
|
|
2713
3252
|
];
|
|
2714
|
-
return /* @__PURE__ */ (0,
|
|
2715
|
-
/* @__PURE__ */ (0,
|
|
2716
|
-
/* @__PURE__ */ (0,
|
|
2717
|
-
/* @__PURE__ */ (0,
|
|
2718
|
-
/* @__PURE__ */ (0,
|
|
2719
|
-
/* @__PURE__ */ (0,
|
|
3253
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { children: isRetestFailure ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
3254
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.retestBanner, children: [
|
|
3255
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
|
|
3256
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { children: [
|
|
3257
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.retestTitle, children: "Bug Still Present" }),
|
|
3258
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.retestSubtitle, children: "The fix did not resolve this issue" })
|
|
2720
3259
|
] })
|
|
2721
3260
|
] }),
|
|
2722
|
-
/* @__PURE__ */ (0,
|
|
2723
|
-
/* @__PURE__ */ (0,
|
|
2724
|
-
/* @__PURE__ */ (0,
|
|
3261
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3262
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Severity" }),
|
|
3263
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2725
3264
|
"button",
|
|
2726
3265
|
{
|
|
2727
3266
|
onClick: () => setSeverity(sev),
|
|
@@ -2729,18 +3268,18 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2729
3268
|
...styles2.sevButton,
|
|
2730
3269
|
...severity === sev ? { backgroundColor: `${color}30`, borderColor: color } : {}
|
|
2731
3270
|
},
|
|
2732
|
-
children: /* @__PURE__ */ (0,
|
|
3271
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
|
|
2733
3272
|
},
|
|
2734
3273
|
sev
|
|
2735
3274
|
)) })
|
|
2736
3275
|
] }),
|
|
2737
|
-
/* @__PURE__ */ (0,
|
|
2738
|
-
/* @__PURE__ */ (0,
|
|
2739
|
-
/* @__PURE__ */ (0,
|
|
3276
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3277
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Category (optional)" }),
|
|
3278
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
|
|
2740
3279
|
] }),
|
|
2741
|
-
/* @__PURE__ */ (0,
|
|
2742
|
-
/* @__PURE__ */ (0,
|
|
2743
|
-
/* @__PURE__ */ (0,
|
|
3280
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3281
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "What went wrong?" }),
|
|
3282
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2744
3283
|
"textarea",
|
|
2745
3284
|
{
|
|
2746
3285
|
style: styles2.descInput,
|
|
@@ -2751,7 +3290,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2751
3290
|
}
|
|
2752
3291
|
)
|
|
2753
3292
|
] }),
|
|
2754
|
-
/* @__PURE__ */ (0,
|
|
3293
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2755
3294
|
ImagePickerButtons,
|
|
2756
3295
|
{
|
|
2757
3296
|
images: images.images,
|
|
@@ -2762,8 +3301,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2762
3301
|
label: "Attachments (optional)"
|
|
2763
3302
|
}
|
|
2764
3303
|
),
|
|
2765
|
-
error && /* @__PURE__ */ (0,
|
|
2766
|
-
/* @__PURE__ */ (0,
|
|
3304
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.errorBanner, children: error }),
|
|
3305
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2767
3306
|
"button",
|
|
2768
3307
|
{
|
|
2769
3308
|
style: {
|
|
@@ -2776,9 +3315,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2776
3315
|
children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest"
|
|
2777
3316
|
}
|
|
2778
3317
|
)
|
|
2779
|
-
] }) : /* @__PURE__ */ (0,
|
|
2780
|
-
/* @__PURE__ */ (0,
|
|
2781
|
-
/* @__PURE__ */ (0,
|
|
3318
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
3319
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "What are you reporting?" }),
|
|
3320
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.typeRow, children: typeOptions.map(({ type, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
2782
3321
|
"button",
|
|
2783
3322
|
{
|
|
2784
3323
|
onClick: () => setReportType(type),
|
|
@@ -2787,8 +3326,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2787
3326
|
...reportType === type ? styles2.typeCardActive : {}
|
|
2788
3327
|
},
|
|
2789
3328
|
children: [
|
|
2790
|
-
/* @__PURE__ */ (0,
|
|
2791
|
-
/* @__PURE__ */ (0,
|
|
3329
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.typeIcon, children: icon }),
|
|
3330
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2792
3331
|
"div",
|
|
2793
3332
|
{
|
|
2794
3333
|
style: {
|
|
@@ -2802,9 +3341,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2802
3341
|
},
|
|
2803
3342
|
type
|
|
2804
3343
|
)) }),
|
|
2805
|
-
isBugType && /* @__PURE__ */ (0,
|
|
2806
|
-
/* @__PURE__ */ (0,
|
|
2807
|
-
/* @__PURE__ */ (0,
|
|
3344
|
+
isBugType && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3345
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Severity" }),
|
|
3346
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2808
3347
|
"button",
|
|
2809
3348
|
{
|
|
2810
3349
|
onClick: () => setSeverity(sev),
|
|
@@ -2815,7 +3354,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2815
3354
|
borderColor: color
|
|
2816
3355
|
} : {}
|
|
2817
3356
|
},
|
|
2818
|
-
children: /* @__PURE__ */ (0,
|
|
3357
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2819
3358
|
"span",
|
|
2820
3359
|
{
|
|
2821
3360
|
style: {
|
|
@@ -2829,13 +3368,13 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2829
3368
|
sev
|
|
2830
3369
|
)) })
|
|
2831
3370
|
] }),
|
|
2832
|
-
isBugType && /* @__PURE__ */ (0,
|
|
2833
|
-
/* @__PURE__ */ (0,
|
|
2834
|
-
/* @__PURE__ */ (0,
|
|
3371
|
+
isBugType && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3372
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Category (optional)" }),
|
|
3373
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CategoryDropdown, { value: category, onChange: setCategory, optional: true })
|
|
2835
3374
|
] }),
|
|
2836
|
-
/* @__PURE__ */ (0,
|
|
2837
|
-
/* @__PURE__ */ (0,
|
|
2838
|
-
/* @__PURE__ */ (0,
|
|
3375
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3376
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "What happened?" }),
|
|
3377
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2839
3378
|
"textarea",
|
|
2840
3379
|
{
|
|
2841
3380
|
style: styles2.descInput,
|
|
@@ -2846,9 +3385,9 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2846
3385
|
}
|
|
2847
3386
|
)
|
|
2848
3387
|
] }),
|
|
2849
|
-
isBugType && /* @__PURE__ */ (0,
|
|
2850
|
-
/* @__PURE__ */ (0,
|
|
2851
|
-
/* @__PURE__ */ (0,
|
|
3388
|
+
isBugType && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.section, children: [
|
|
3389
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.label, children: "Where did it happen?" }),
|
|
3390
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2852
3391
|
"input",
|
|
2853
3392
|
{
|
|
2854
3393
|
style: styles2.routeInput,
|
|
@@ -2857,13 +3396,13 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2857
3396
|
placeholder: observedRoute.current
|
|
2858
3397
|
}
|
|
2859
3398
|
),
|
|
2860
|
-
/* @__PURE__ */ (0,
|
|
3399
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: styles2.routeHint, children: [
|
|
2861
3400
|
"Leave blank to use current page (",
|
|
2862
3401
|
observedRoute.current,
|
|
2863
3402
|
")"
|
|
2864
3403
|
] })
|
|
2865
3404
|
] }),
|
|
2866
|
-
/* @__PURE__ */ (0,
|
|
3405
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2867
3406
|
ImagePickerButtons,
|
|
2868
3407
|
{
|
|
2869
3408
|
images: images.images,
|
|
@@ -2874,8 +3413,8 @@ function ReportScreen({ nav, prefill }) {
|
|
|
2874
3413
|
label: "Screenshots (optional)"
|
|
2875
3414
|
}
|
|
2876
3415
|
),
|
|
2877
|
-
error && /* @__PURE__ */ (0,
|
|
2878
|
-
/* @__PURE__ */ (0,
|
|
3416
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: styles2.errorBanner, children: error }),
|
|
3417
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2879
3418
|
"button",
|
|
2880
3419
|
{
|
|
2881
3420
|
style: {
|
|
@@ -3040,16 +3579,16 @@ var styles2 = {
|
|
|
3040
3579
|
|
|
3041
3580
|
// src/widget/screens/ReportSuccessScreen.tsx
|
|
3042
3581
|
var import_react9 = require("react");
|
|
3043
|
-
var
|
|
3582
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
3044
3583
|
function ReportSuccessScreen({ nav }) {
|
|
3045
3584
|
(0, import_react9.useEffect)(() => {
|
|
3046
3585
|
const timer = setTimeout(() => nav.reset(), 2e3);
|
|
3047
3586
|
return () => clearTimeout(timer);
|
|
3048
3587
|
}, [nav]);
|
|
3049
|
-
return /* @__PURE__ */ (0,
|
|
3050
|
-
/* @__PURE__ */ (0,
|
|
3051
|
-
/* @__PURE__ */ (0,
|
|
3052
|
-
/* @__PURE__ */ (0,
|
|
3588
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: styles3.container, children: [
|
|
3589
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: styles3.emoji, children: "\u{1F389}" }),
|
|
3590
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: styles3.title, children: "Report submitted!" }),
|
|
3591
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: styles3.subtitle, children: "Thank you for your feedback" })
|
|
3053
3592
|
] });
|
|
3054
3593
|
}
|
|
3055
3594
|
var styles3 = {
|
|
@@ -3078,11 +3617,12 @@ var styles3 = {
|
|
|
3078
3617
|
};
|
|
3079
3618
|
|
|
3080
3619
|
// src/widget/screens/MessageListScreen.tsx
|
|
3081
|
-
var
|
|
3620
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
3082
3621
|
function MessageListScreen({ nav }) {
|
|
3083
|
-
const { threads, unreadCount, refreshThreads } = useBugBear();
|
|
3084
|
-
return /* @__PURE__ */ (0,
|
|
3085
|
-
|
|
3622
|
+
const { threads, unreadCount, refreshThreads, dashboardUrl, isLoading } = useBugBear();
|
|
3623
|
+
if (isLoading) return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MessageListScreenSkeleton, {});
|
|
3624
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { children: [
|
|
3625
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3086
3626
|
"button",
|
|
3087
3627
|
{
|
|
3088
3628
|
style: {
|
|
@@ -3101,7 +3641,7 @@ function MessageListScreen({ nav }) {
|
|
|
3101
3641
|
children: "\u2709\uFE0F New Message"
|
|
3102
3642
|
}
|
|
3103
3643
|
),
|
|
3104
|
-
threads.length === 0 ? /* @__PURE__ */ (0,
|
|
3644
|
+
threads.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3105
3645
|
"div",
|
|
3106
3646
|
{
|
|
3107
3647
|
style: {
|
|
@@ -3112,8 +3652,8 @@ function MessageListScreen({ nav }) {
|
|
|
3112
3652
|
paddingBottom: 40
|
|
3113
3653
|
},
|
|
3114
3654
|
children: [
|
|
3115
|
-
/* @__PURE__ */ (0,
|
|
3116
|
-
/* @__PURE__ */ (0,
|
|
3655
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 36, marginBottom: 12 }, children: "\u{1F4AC}" }),
|
|
3656
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3117
3657
|
"span",
|
|
3118
3658
|
{
|
|
3119
3659
|
style: {
|
|
@@ -3125,7 +3665,7 @@ function MessageListScreen({ nav }) {
|
|
|
3125
3665
|
children: "No messages yet"
|
|
3126
3666
|
}
|
|
3127
3667
|
),
|
|
3128
|
-
/* @__PURE__ */ (0,
|
|
3668
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3129
3669
|
"span",
|
|
3130
3670
|
{
|
|
3131
3671
|
style: {
|
|
@@ -3138,7 +3678,7 @@ function MessageListScreen({ nav }) {
|
|
|
3138
3678
|
)
|
|
3139
3679
|
]
|
|
3140
3680
|
}
|
|
3141
|
-
) : /* @__PURE__ */ (0,
|
|
3681
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { children: threads.map((thread) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3142
3682
|
"button",
|
|
3143
3683
|
{
|
|
3144
3684
|
style: {
|
|
@@ -3156,8 +3696,8 @@ function MessageListScreen({ nav }) {
|
|
|
3156
3696
|
},
|
|
3157
3697
|
onClick: () => nav.push({ name: "THREAD_DETAIL", thread }),
|
|
3158
3698
|
children: [
|
|
3159
|
-
/* @__PURE__ */ (0,
|
|
3160
|
-
/* @__PURE__ */ (0,
|
|
3699
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", flex: 1, minWidth: 0 }, children: [
|
|
3700
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3161
3701
|
"span",
|
|
3162
3702
|
{
|
|
3163
3703
|
style: {
|
|
@@ -3169,7 +3709,7 @@ function MessageListScreen({ nav }) {
|
|
|
3169
3709
|
children: getThreadTypeIcon(thread.threadType)
|
|
3170
3710
|
}
|
|
3171
3711
|
),
|
|
3172
|
-
/* @__PURE__ */ (0,
|
|
3712
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3173
3713
|
"div",
|
|
3174
3714
|
{
|
|
3175
3715
|
style: {
|
|
@@ -3177,7 +3717,7 @@ function MessageListScreen({ nav }) {
|
|
|
3177
3717
|
minWidth: 0
|
|
3178
3718
|
},
|
|
3179
3719
|
children: [
|
|
3180
|
-
/* @__PURE__ */ (0,
|
|
3720
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3181
3721
|
"div",
|
|
3182
3722
|
{
|
|
3183
3723
|
style: {
|
|
@@ -3186,8 +3726,8 @@ function MessageListScreen({ nav }) {
|
|
|
3186
3726
|
gap: 4
|
|
3187
3727
|
},
|
|
3188
3728
|
children: [
|
|
3189
|
-
thread.isPinned && /* @__PURE__ */ (0,
|
|
3190
|
-
/* @__PURE__ */ (0,
|
|
3729
|
+
thread.isPinned && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 12, flexShrink: 0 }, children: "\u{1F4CC}" }),
|
|
3730
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3191
3731
|
"span",
|
|
3192
3732
|
{
|
|
3193
3733
|
style: {
|
|
@@ -3204,7 +3744,7 @@ function MessageListScreen({ nav }) {
|
|
|
3204
3744
|
]
|
|
3205
3745
|
}
|
|
3206
3746
|
),
|
|
3207
|
-
thread.lastMessage && /* @__PURE__ */ (0,
|
|
3747
|
+
thread.lastMessage && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3208
3748
|
"span",
|
|
3209
3749
|
{
|
|
3210
3750
|
style: {
|
|
@@ -3228,7 +3768,7 @@ function MessageListScreen({ nav }) {
|
|
|
3228
3768
|
}
|
|
3229
3769
|
)
|
|
3230
3770
|
] }),
|
|
3231
|
-
/* @__PURE__ */ (0,
|
|
3771
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3232
3772
|
"div",
|
|
3233
3773
|
{
|
|
3234
3774
|
style: {
|
|
@@ -3240,8 +3780,8 @@ function MessageListScreen({ nav }) {
|
|
|
3240
3780
|
flexShrink: 0
|
|
3241
3781
|
},
|
|
3242
3782
|
children: [
|
|
3243
|
-
/* @__PURE__ */ (0,
|
|
3244
|
-
thread.unreadCount > 0 && /* @__PURE__ */ (0,
|
|
3783
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: formatRelativeTime(thread.lastMessageAt) }),
|
|
3784
|
+
thread.unreadCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3245
3785
|
"span",
|
|
3246
3786
|
{
|
|
3247
3787
|
style: {
|
|
@@ -3268,19 +3808,39 @@ function MessageListScreen({ nav }) {
|
|
|
3268
3808
|
},
|
|
3269
3809
|
thread.id
|
|
3270
3810
|
)) }),
|
|
3271
|
-
/* @__PURE__ */ (0,
|
|
3811
|
+
dashboardUrl && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3812
|
+
"a",
|
|
3813
|
+
{
|
|
3814
|
+
href: `${dashboardUrl}/discussions`,
|
|
3815
|
+
target: "_blank",
|
|
3816
|
+
rel: "noopener noreferrer",
|
|
3817
|
+
style: {
|
|
3818
|
+
display: "flex",
|
|
3819
|
+
alignItems: "center",
|
|
3820
|
+
justifyContent: "center",
|
|
3821
|
+
gap: 6,
|
|
3822
|
+
paddingTop: 12,
|
|
3823
|
+
fontSize: 13,
|
|
3824
|
+
fontWeight: 500,
|
|
3825
|
+
color: colors.blue,
|
|
3826
|
+
textDecoration: "none"
|
|
3827
|
+
},
|
|
3828
|
+
children: "\u{1F310} View on Dashboard \u2192"
|
|
3829
|
+
}
|
|
3830
|
+
),
|
|
3831
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3272
3832
|
"div",
|
|
3273
3833
|
{
|
|
3274
3834
|
style: {
|
|
3275
3835
|
display: "flex",
|
|
3276
3836
|
justifyContent: "space-between",
|
|
3277
3837
|
alignItems: "center",
|
|
3278
|
-
paddingTop:
|
|
3838
|
+
paddingTop: 8,
|
|
3279
3839
|
paddingLeft: 4,
|
|
3280
3840
|
paddingRight: 4
|
|
3281
3841
|
},
|
|
3282
3842
|
children: [
|
|
3283
|
-
/* @__PURE__ */ (0,
|
|
3843
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { style: { fontSize: 12, color: colors.textMuted }, children: [
|
|
3284
3844
|
threads.length,
|
|
3285
3845
|
" thread",
|
|
3286
3846
|
threads.length !== 1 ? "s" : "",
|
|
@@ -3289,7 +3849,7 @@ function MessageListScreen({ nav }) {
|
|
|
3289
3849
|
unreadCount,
|
|
3290
3850
|
" unread"
|
|
3291
3851
|
] }),
|
|
3292
|
-
/* @__PURE__ */ (0,
|
|
3852
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3293
3853
|
"button",
|
|
3294
3854
|
{
|
|
3295
3855
|
style: {
|
|
@@ -3312,7 +3872,7 @@ function MessageListScreen({ nav }) {
|
|
|
3312
3872
|
|
|
3313
3873
|
// src/widget/screens/ThreadDetailScreen.tsx
|
|
3314
3874
|
var import_react10 = require("react");
|
|
3315
|
-
var
|
|
3875
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
3316
3876
|
var inputStyle = {
|
|
3317
3877
|
backgroundColor: "#27272a",
|
|
3318
3878
|
border: "1px solid #3f3f46",
|
|
@@ -3384,8 +3944,8 @@ function ThreadDetailScreen({
|
|
|
3384
3944
|
handleSend();
|
|
3385
3945
|
}
|
|
3386
3946
|
};
|
|
3387
|
-
return /* @__PURE__ */ (0,
|
|
3388
|
-
/* @__PURE__ */ (0,
|
|
3947
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { style: { display: "flex", flexDirection: "column", flex: 1 }, children: [
|
|
3948
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
3389
3949
|
"div",
|
|
3390
3950
|
{
|
|
3391
3951
|
style: {
|
|
@@ -3397,8 +3957,8 @@ function ThreadDetailScreen({
|
|
|
3397
3957
|
borderBottom: `1px solid ${colors.border}`
|
|
3398
3958
|
},
|
|
3399
3959
|
children: [
|
|
3400
|
-
/* @__PURE__ */ (0,
|
|
3401
|
-
/* @__PURE__ */ (0,
|
|
3960
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { fontSize: 20 }, children: getThreadTypeIcon(thread.threadType) }),
|
|
3961
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3402
3962
|
"span",
|
|
3403
3963
|
{
|
|
3404
3964
|
style: {
|
|
@@ -3418,7 +3978,7 @@ function ThreadDetailScreen({
|
|
|
3418
3978
|
]
|
|
3419
3979
|
}
|
|
3420
3980
|
),
|
|
3421
|
-
loading ? /* @__PURE__ */ (0,
|
|
3981
|
+
loading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3422
3982
|
"div",
|
|
3423
3983
|
{
|
|
3424
3984
|
style: {
|
|
@@ -3426,11 +3986,11 @@ function ThreadDetailScreen({
|
|
|
3426
3986
|
paddingBottom: 40,
|
|
3427
3987
|
textAlign: "center"
|
|
3428
3988
|
},
|
|
3429
|
-
children: /* @__PURE__ */ (0,
|
|
3989
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { fontSize: 14, color: colors.textMuted }, children: "Loading messages..." })
|
|
3430
3990
|
}
|
|
3431
|
-
) : /* @__PURE__ */ (0,
|
|
3991
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { paddingBottom: 8, marginBottom: 8 }, children: messages.map((msg) => {
|
|
3432
3992
|
const isTester = msg.senderType === "tester";
|
|
3433
|
-
return /* @__PURE__ */ (0,
|
|
3993
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
3434
3994
|
"div",
|
|
3435
3995
|
{
|
|
3436
3996
|
style: {
|
|
@@ -3446,7 +4006,7 @@ function ThreadDetailScreen({
|
|
|
3446
4006
|
borderBottomRightRadius: isTester ? 4 : 16
|
|
3447
4007
|
},
|
|
3448
4008
|
children: [
|
|
3449
|
-
/* @__PURE__ */ (0,
|
|
4009
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3450
4010
|
"span",
|
|
3451
4011
|
{
|
|
3452
4012
|
style: {
|
|
@@ -3459,7 +4019,7 @@ function ThreadDetailScreen({
|
|
|
3459
4019
|
children: isTester ? "You" : msg.senderName
|
|
3460
4020
|
}
|
|
3461
4021
|
),
|
|
3462
|
-
/* @__PURE__ */ (0,
|
|
4022
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3463
4023
|
"span",
|
|
3464
4024
|
{
|
|
3465
4025
|
style: {
|
|
@@ -3473,7 +4033,7 @@ function ThreadDetailScreen({
|
|
|
3473
4033
|
children: msg.content
|
|
3474
4034
|
}
|
|
3475
4035
|
),
|
|
3476
|
-
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ (0,
|
|
4036
|
+
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { marginTop: 8, display: "flex", flexDirection: "column", gap: 6 }, children: msg.attachments.filter((a) => a.type === "image" && typeof a.url === "string" && /^https?:\/\//i.test(a.url)).map((att, idx) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3477
4037
|
"img",
|
|
3478
4038
|
{
|
|
3479
4039
|
src: att.url,
|
|
@@ -3482,7 +4042,7 @@ function ThreadDetailScreen({
|
|
|
3482
4042
|
},
|
|
3483
4043
|
idx
|
|
3484
4044
|
)) }),
|
|
3485
|
-
/* @__PURE__ */ (0,
|
|
4045
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3486
4046
|
"span",
|
|
3487
4047
|
{
|
|
3488
4048
|
style: {
|
|
@@ -3500,7 +4060,7 @@ function ThreadDetailScreen({
|
|
|
3500
4060
|
msg.id
|
|
3501
4061
|
);
|
|
3502
4062
|
}) }),
|
|
3503
|
-
sendError && /* @__PURE__ */ (0,
|
|
4063
|
+
sendError && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3504
4064
|
"div",
|
|
3505
4065
|
{
|
|
3506
4066
|
style: {
|
|
@@ -3512,7 +4072,7 @@ function ThreadDetailScreen({
|
|
|
3512
4072
|
borderRadius: 8,
|
|
3513
4073
|
marginBottom: 8
|
|
3514
4074
|
},
|
|
3515
|
-
children: /* @__PURE__ */ (0,
|
|
4075
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3516
4076
|
"span",
|
|
3517
4077
|
{
|
|
3518
4078
|
style: {
|
|
@@ -3526,8 +4086,8 @@ function ThreadDetailScreen({
|
|
|
3526
4086
|
)
|
|
3527
4087
|
}
|
|
3528
4088
|
),
|
|
3529
|
-
replyImages.images.length > 0 && /* @__PURE__ */ (0,
|
|
3530
|
-
/* @__PURE__ */ (0,
|
|
4089
|
+
replyImages.images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { paddingTop: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage }) }),
|
|
4090
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
3531
4091
|
"div",
|
|
3532
4092
|
{
|
|
3533
4093
|
style: {
|
|
@@ -3538,7 +4098,7 @@ function ThreadDetailScreen({
|
|
|
3538
4098
|
gap: 8
|
|
3539
4099
|
},
|
|
3540
4100
|
children: [
|
|
3541
|
-
/* @__PURE__ */ (0,
|
|
4101
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3542
4102
|
"button",
|
|
3543
4103
|
{
|
|
3544
4104
|
type: "button",
|
|
@@ -3557,7 +4117,7 @@ function ThreadDetailScreen({
|
|
|
3557
4117
|
children: "\u{1F4CE}"
|
|
3558
4118
|
}
|
|
3559
4119
|
),
|
|
3560
|
-
/* @__PURE__ */ (0,
|
|
4120
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3561
4121
|
"input",
|
|
3562
4122
|
{
|
|
3563
4123
|
type: "text",
|
|
@@ -3573,7 +4133,7 @@ function ThreadDetailScreen({
|
|
|
3573
4133
|
}
|
|
3574
4134
|
}
|
|
3575
4135
|
),
|
|
3576
|
-
/* @__PURE__ */ (0,
|
|
4136
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
3577
4137
|
"button",
|
|
3578
4138
|
{
|
|
3579
4139
|
style: {
|
|
@@ -3601,7 +4161,7 @@ function ThreadDetailScreen({
|
|
|
3601
4161
|
|
|
3602
4162
|
// src/widget/screens/ComposeMessageScreen.tsx
|
|
3603
4163
|
var import_react11 = require("react");
|
|
3604
|
-
var
|
|
4164
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
3605
4165
|
var inputStyle2 = {
|
|
3606
4166
|
backgroundColor: "#27272a",
|
|
3607
4167
|
border: "1px solid #3f3f46",
|
|
@@ -3632,9 +4192,9 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3632
4192
|
nav.pop();
|
|
3633
4193
|
}
|
|
3634
4194
|
};
|
|
3635
|
-
return /* @__PURE__ */ (0,
|
|
3636
|
-
/* @__PURE__ */ (0,
|
|
3637
|
-
/* @__PURE__ */ (0,
|
|
4195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
|
|
4196
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { style: { marginBottom: 20 }, children: [
|
|
4197
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3638
4198
|
"div",
|
|
3639
4199
|
{
|
|
3640
4200
|
style: {
|
|
@@ -3646,9 +4206,9 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3646
4206
|
children: "New Message"
|
|
3647
4207
|
}
|
|
3648
4208
|
),
|
|
3649
|
-
/* @__PURE__ */ (0,
|
|
4209
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { fontSize: 14, color: colors.textMuted }, children: "Send a message to the QA team" })
|
|
3650
4210
|
] }),
|
|
3651
|
-
/* @__PURE__ */ (0,
|
|
4211
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
3652
4212
|
"div",
|
|
3653
4213
|
{
|
|
3654
4214
|
style: {
|
|
@@ -3658,7 +4218,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3658
4218
|
border: `1px solid ${colors.border}`
|
|
3659
4219
|
},
|
|
3660
4220
|
children: [
|
|
3661
|
-
/* @__PURE__ */ (0,
|
|
4221
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3662
4222
|
"label",
|
|
3663
4223
|
{
|
|
3664
4224
|
style: {
|
|
@@ -3671,7 +4231,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3671
4231
|
children: "Subject"
|
|
3672
4232
|
}
|
|
3673
4233
|
),
|
|
3674
|
-
/* @__PURE__ */ (0,
|
|
4234
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3675
4235
|
"input",
|
|
3676
4236
|
{
|
|
3677
4237
|
type: "text",
|
|
@@ -3686,7 +4246,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3686
4246
|
}
|
|
3687
4247
|
}
|
|
3688
4248
|
),
|
|
3689
|
-
/* @__PURE__ */ (0,
|
|
4249
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3690
4250
|
"label",
|
|
3691
4251
|
{
|
|
3692
4252
|
style: {
|
|
@@ -3700,7 +4260,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3700
4260
|
children: "Message"
|
|
3701
4261
|
}
|
|
3702
4262
|
),
|
|
3703
|
-
/* @__PURE__ */ (0,
|
|
4263
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3704
4264
|
"textarea",
|
|
3705
4265
|
{
|
|
3706
4266
|
value: message,
|
|
@@ -3719,7 +4279,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3719
4279
|
}
|
|
3720
4280
|
}
|
|
3721
4281
|
),
|
|
3722
|
-
/* @__PURE__ */ (0,
|
|
4282
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3723
4283
|
ImagePickerButtons,
|
|
3724
4284
|
{
|
|
3725
4285
|
images: images.images,
|
|
@@ -3730,7 +4290,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3730
4290
|
label: "Attachments (optional)"
|
|
3731
4291
|
}
|
|
3732
4292
|
),
|
|
3733
|
-
/* @__PURE__ */ (0,
|
|
4293
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
3734
4294
|
"button",
|
|
3735
4295
|
{
|
|
3736
4296
|
style: {
|
|
@@ -3759,7 +4319,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
3759
4319
|
|
|
3760
4320
|
// src/widget/screens/ProfileScreen.tsx
|
|
3761
4321
|
var import_react12 = require("react");
|
|
3762
|
-
var
|
|
4322
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
3763
4323
|
function ProfileScreen({ nav }) {
|
|
3764
4324
|
const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo } = useBugBear();
|
|
3765
4325
|
const [editing, setEditing] = (0, import_react12.useState)(false);
|
|
@@ -3806,22 +4366,22 @@ function ProfileScreen({ nav }) {
|
|
|
3806
4366
|
}
|
|
3807
4367
|
};
|
|
3808
4368
|
if (saved) {
|
|
3809
|
-
return /* @__PURE__ */ (0,
|
|
3810
|
-
/* @__PURE__ */ (0,
|
|
3811
|
-
/* @__PURE__ */ (0,
|
|
4369
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.emptyState, children: [
|
|
4370
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyEmoji, children: "\u2705" }),
|
|
4371
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyTitle, children: "Profile saved!" })
|
|
3812
4372
|
] });
|
|
3813
4373
|
}
|
|
3814
4374
|
if (!testerInfo) {
|
|
3815
|
-
return /* @__PURE__ */ (0,
|
|
3816
|
-
/* @__PURE__ */ (0,
|
|
3817
|
-
/* @__PURE__ */ (0,
|
|
4375
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.emptyState, children: [
|
|
4376
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyEmoji, children: "\u{1F464}" }),
|
|
4377
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emptyTitle, children: "No profile found" })
|
|
3818
4378
|
] });
|
|
3819
4379
|
}
|
|
3820
4380
|
if (editing) {
|
|
3821
|
-
return /* @__PURE__ */ (0,
|
|
3822
|
-
/* @__PURE__ */ (0,
|
|
3823
|
-
/* @__PURE__ */ (0,
|
|
3824
|
-
/* @__PURE__ */ (0,
|
|
4381
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
|
|
4382
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.editHeader, children: [
|
|
4383
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.editTitle, children: "Edit Profile" }),
|
|
4384
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3825
4385
|
"button",
|
|
3826
4386
|
{
|
|
3827
4387
|
style: styles4.cancelButton,
|
|
@@ -3833,9 +4393,9 @@ function ProfileScreen({ nav }) {
|
|
|
3833
4393
|
}
|
|
3834
4394
|
)
|
|
3835
4395
|
] }),
|
|
3836
|
-
/* @__PURE__ */ (0,
|
|
3837
|
-
/* @__PURE__ */ (0,
|
|
3838
|
-
/* @__PURE__ */ (0,
|
|
4396
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
|
|
4397
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Name" }),
|
|
4398
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3839
4399
|
"input",
|
|
3840
4400
|
{
|
|
3841
4401
|
style: styles4.input,
|
|
@@ -3845,15 +4405,15 @@ function ProfileScreen({ nav }) {
|
|
|
3845
4405
|
}
|
|
3846
4406
|
)
|
|
3847
4407
|
] }),
|
|
3848
|
-
/* @__PURE__ */ (0,
|
|
3849
|
-
/* @__PURE__ */ (0,
|
|
3850
|
-
/* @__PURE__ */ (0,
|
|
4408
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
|
|
4409
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Primary Email" }),
|
|
4410
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emailFixed, children: testerInfo.email })
|
|
3851
4411
|
] }),
|
|
3852
|
-
/* @__PURE__ */ (0,
|
|
3853
|
-
/* @__PURE__ */ (0,
|
|
3854
|
-
additionalEmails.map((email) => /* @__PURE__ */ (0,
|
|
3855
|
-
/* @__PURE__ */ (0,
|
|
3856
|
-
/* @__PURE__ */ (0,
|
|
4412
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
|
|
4413
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Additional Emails" }),
|
|
4414
|
+
additionalEmails.map((email) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.emailRow, children: [
|
|
4415
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.emailText, children: email }),
|
|
4416
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3857
4417
|
"button",
|
|
3858
4418
|
{
|
|
3859
4419
|
style: styles4.removeEmailButton,
|
|
@@ -3862,8 +4422,8 @@ function ProfileScreen({ nav }) {
|
|
|
3862
4422
|
}
|
|
3863
4423
|
)
|
|
3864
4424
|
] }, email)),
|
|
3865
|
-
/* @__PURE__ */ (0,
|
|
3866
|
-
/* @__PURE__ */ (0,
|
|
4425
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.addEmailRow, children: [
|
|
4426
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3867
4427
|
"input",
|
|
3868
4428
|
{
|
|
3869
4429
|
style: { ...styles4.input, flex: 1, marginRight: 8 },
|
|
@@ -3876,18 +4436,18 @@ function ProfileScreen({ nav }) {
|
|
|
3876
4436
|
}
|
|
3877
4437
|
}
|
|
3878
4438
|
),
|
|
3879
|
-
/* @__PURE__ */ (0,
|
|
4439
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("button", { style: styles4.addButton, onClick: handleAddEmail, children: "Add" })
|
|
3880
4440
|
] })
|
|
3881
4441
|
] }),
|
|
3882
|
-
/* @__PURE__ */ (0,
|
|
3883
|
-
/* @__PURE__ */ (0,
|
|
3884
|
-
/* @__PURE__ */ (0,
|
|
4442
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.field, children: [
|
|
4443
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { style: styles4.label, children: "Testing Platforms" }),
|
|
4444
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.platformRow, children: [
|
|
3885
4445
|
{ key: "ios", label: "\u{1F4F1} iOS" },
|
|
3886
4446
|
{ key: "android", label: "\u{1F916} Android" },
|
|
3887
4447
|
{ key: "web", label: "\u{1F310} Web" }
|
|
3888
4448
|
].map(({ key, label }) => {
|
|
3889
4449
|
const isActive = platforms.includes(key);
|
|
3890
|
-
return /* @__PURE__ */ (0,
|
|
4450
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3891
4451
|
"button",
|
|
3892
4452
|
{
|
|
3893
4453
|
style: {
|
|
@@ -3897,13 +4457,13 @@ function ProfileScreen({ nav }) {
|
|
|
3897
4457
|
onClick: () => setPlatforms(
|
|
3898
4458
|
(prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key]
|
|
3899
4459
|
),
|
|
3900
|
-
children: /* @__PURE__ */ (0,
|
|
4460
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: isActive ? styles4.platformTextActive : styles4.platformText, children: label })
|
|
3901
4461
|
},
|
|
3902
4462
|
key
|
|
3903
4463
|
);
|
|
3904
4464
|
}) })
|
|
3905
4465
|
] }),
|
|
3906
|
-
/* @__PURE__ */ (0,
|
|
4466
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3907
4467
|
"button",
|
|
3908
4468
|
{
|
|
3909
4469
|
style: { ...styles4.primaryButton, marginTop: 20 },
|
|
@@ -3914,45 +4474,45 @@ function ProfileScreen({ nav }) {
|
|
|
3914
4474
|
)
|
|
3915
4475
|
] });
|
|
3916
4476
|
}
|
|
3917
|
-
return /* @__PURE__ */ (0,
|
|
3918
|
-
/* @__PURE__ */ (0,
|
|
3919
|
-
/* @__PURE__ */ (0,
|
|
3920
|
-
/* @__PURE__ */ (0,
|
|
3921
|
-
/* @__PURE__ */ (0,
|
|
4477
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
|
|
4478
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.profileCard, children: [
|
|
4479
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.avatar, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.avatarText, children: testerInfo.name.charAt(0).toUpperCase() }) }),
|
|
4480
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.profileName, children: testerInfo.name }),
|
|
4481
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.profileEmail, children: testerInfo.email })
|
|
3922
4482
|
] }),
|
|
3923
|
-
/* @__PURE__ */ (0,
|
|
3924
|
-
/* @__PURE__ */ (0,
|
|
3925
|
-
/* @__PURE__ */ (0,
|
|
3926
|
-
/* @__PURE__ */ (0,
|
|
4483
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.statsRow, children: [
|
|
4484
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.statItem, children: [
|
|
4485
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statNumber, children: completedCount }),
|
|
4486
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statLabel, children: "Completed" })
|
|
3927
4487
|
] }),
|
|
3928
|
-
/* @__PURE__ */ (0,
|
|
3929
|
-
/* @__PURE__ */ (0,
|
|
3930
|
-
/* @__PURE__ */ (0,
|
|
3931
|
-
/* @__PURE__ */ (0,
|
|
4488
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.statDivider }),
|
|
4489
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.statItem, children: [
|
|
4490
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statNumber, children: assignments.length }),
|
|
4491
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.statLabel, children: "Total Assigned" })
|
|
3932
4492
|
] })
|
|
3933
4493
|
] }),
|
|
3934
|
-
/* @__PURE__ */ (0,
|
|
4494
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3935
4495
|
"button",
|
|
3936
4496
|
{
|
|
3937
4497
|
style: styles4.detailsToggle,
|
|
3938
4498
|
onClick: () => setShowDetails(!showDetails),
|
|
3939
|
-
children: /* @__PURE__ */ (0,
|
|
4499
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { style: styles4.detailsToggleText, children: [
|
|
3940
4500
|
showDetails ? "\u25BC" : "\u25B6",
|
|
3941
4501
|
" Details"
|
|
3942
4502
|
] })
|
|
3943
4503
|
}
|
|
3944
4504
|
),
|
|
3945
|
-
showDetails && /* @__PURE__ */ (0,
|
|
3946
|
-
additionalEmails.length > 0 && /* @__PURE__ */ (0,
|
|
3947
|
-
/* @__PURE__ */ (0,
|
|
3948
|
-
additionalEmails.map((e) => /* @__PURE__ */ (0,
|
|
4505
|
+
showDetails && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.detailsSection, children: [
|
|
4506
|
+
additionalEmails.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.detailBlock, children: [
|
|
4507
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.detailLabel, children: "Additional Emails" }),
|
|
4508
|
+
additionalEmails.map((e) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.detailValue, children: e }, e))
|
|
3949
4509
|
] }),
|
|
3950
|
-
platforms.length > 0 && /* @__PURE__ */ (0,
|
|
3951
|
-
/* @__PURE__ */ (0,
|
|
3952
|
-
/* @__PURE__ */ (0,
|
|
4510
|
+
platforms.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: styles4.detailBlock, children: [
|
|
4511
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.detailLabel, children: "Platforms" }),
|
|
4512
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: styles4.platformTags, children: platforms.map((p) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.platformTag, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { style: styles4.platformTagText, children: p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web" }) }, p)) })
|
|
3953
4513
|
] })
|
|
3954
4514
|
] }),
|
|
3955
|
-
/* @__PURE__ */ (0,
|
|
4515
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
3956
4516
|
"button",
|
|
3957
4517
|
{
|
|
3958
4518
|
style: { ...styles4.primaryButton, marginTop: 20 },
|
|
@@ -4236,7 +4796,7 @@ var styles4 = {
|
|
|
4236
4796
|
|
|
4237
4797
|
// src/widget/screens/IssueListScreen.tsx
|
|
4238
4798
|
var import_react13 = require("react");
|
|
4239
|
-
var
|
|
4799
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
4240
4800
|
var CATEGORY_CONFIG = {
|
|
4241
4801
|
open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
|
|
4242
4802
|
done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
|
|
@@ -4279,15 +4839,15 @@ function IssueListScreen({ nav, category }) {
|
|
|
4279
4839
|
};
|
|
4280
4840
|
}, [client, category]);
|
|
4281
4841
|
if (loading) {
|
|
4282
|
-
return /* @__PURE__ */ (0,
|
|
4842
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(IssueListScreenSkeleton, {});
|
|
4283
4843
|
}
|
|
4284
4844
|
if (issues.length === 0) {
|
|
4285
|
-
return /* @__PURE__ */ (0,
|
|
4286
|
-
/* @__PURE__ */ (0,
|
|
4287
|
-
/* @__PURE__ */ (0,
|
|
4845
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { padding: "40px 0", textAlign: "center" }, children: [
|
|
4846
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { fontSize: 36, marginBottom: 8 }, children: config.emptyIcon }),
|
|
4847
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: colors.textMuted, fontSize: 14 }, children: config.emptyText })
|
|
4288
4848
|
] });
|
|
4289
4849
|
}
|
|
4290
|
-
return /* @__PURE__ */ (0,
|
|
4850
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { children: issues.map((issue) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
4291
4851
|
"div",
|
|
4292
4852
|
{
|
|
4293
4853
|
role: "button",
|
|
@@ -4306,8 +4866,8 @@ function IssueListScreen({ nav, category }) {
|
|
|
4306
4866
|
userSelect: "none"
|
|
4307
4867
|
},
|
|
4308
4868
|
children: [
|
|
4309
|
-
/* @__PURE__ */ (0,
|
|
4310
|
-
issue.severity && /* @__PURE__ */ (0,
|
|
4869
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 }, children: [
|
|
4870
|
+
issue.severity && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
4311
4871
|
"span",
|
|
4312
4872
|
{
|
|
4313
4873
|
style: {
|
|
@@ -4320,7 +4880,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4320
4880
|
}
|
|
4321
4881
|
}
|
|
4322
4882
|
),
|
|
4323
|
-
/* @__PURE__ */ (0,
|
|
4883
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: {
|
|
4324
4884
|
fontSize: 13,
|
|
4325
4885
|
fontWeight: 600,
|
|
4326
4886
|
color: colors.textPrimary,
|
|
@@ -4330,11 +4890,11 @@ function IssueListScreen({ nav, category }) {
|
|
|
4330
4890
|
whiteSpace: "nowrap"
|
|
4331
4891
|
}, children: issue.title })
|
|
4332
4892
|
] }),
|
|
4333
|
-
/* @__PURE__ */ (0,
|
|
4334
|
-
issue.route && /* @__PURE__ */ (0,
|
|
4335
|
-
/* @__PURE__ */ (0,
|
|
4893
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginTop: 6 }, children: [
|
|
4894
|
+
issue.route && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 11, color: colors.textDim, maxWidth: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: issue.route }),
|
|
4895
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontSize: 11, color: colors.textDim, marginLeft: "auto" }, children: formatRelativeTime(issue.updatedAt) })
|
|
4336
4896
|
] }),
|
|
4337
|
-
category === "done" && issue.verifiedByName && /* @__PURE__ */ (0,
|
|
4897
|
+
category === "done" && issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
|
|
4338
4898
|
display: "inline-flex",
|
|
4339
4899
|
alignItems: "center",
|
|
4340
4900
|
gap: 4,
|
|
@@ -4350,7 +4910,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4350
4910
|
"\u2714 Verified by ",
|
|
4351
4911
|
issue.verifiedByName
|
|
4352
4912
|
] }),
|
|
4353
|
-
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ (0,
|
|
4913
|
+
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: {
|
|
4354
4914
|
display: "inline-flex",
|
|
4355
4915
|
alignItems: "center",
|
|
4356
4916
|
gap: 4,
|
|
@@ -4377,7 +4937,7 @@ function IssueListScreen({ nav, category }) {
|
|
|
4377
4937
|
}
|
|
4378
4938
|
|
|
4379
4939
|
// src/widget/screens/IssueDetailScreen.tsx
|
|
4380
|
-
var
|
|
4940
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
4381
4941
|
var STATUS_LABELS = {
|
|
4382
4942
|
new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
|
|
4383
4943
|
triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
|
|
@@ -4399,11 +4959,12 @@ var SEVERITY_CONFIG = {
|
|
|
4399
4959
|
low: { label: "Low", color: "#71717a", bg: "#27272a" }
|
|
4400
4960
|
};
|
|
4401
4961
|
function IssueDetailScreen({ nav, issue }) {
|
|
4962
|
+
const { dashboardUrl } = useBugBear();
|
|
4402
4963
|
const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
|
|
4403
4964
|
const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
|
|
4404
|
-
return /* @__PURE__ */ (0,
|
|
4405
|
-
/* @__PURE__ */ (0,
|
|
4406
|
-
/* @__PURE__ */ (0,
|
|
4965
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { children: [
|
|
4966
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", gap: 8, flexWrap: "wrap", marginBottom: 12 }, children: [
|
|
4967
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: {
|
|
4407
4968
|
backgroundColor: statusConfig.bg,
|
|
4408
4969
|
color: statusConfig.color,
|
|
4409
4970
|
fontSize: 11,
|
|
@@ -4411,7 +4972,7 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4411
4972
|
padding: "3px 10px",
|
|
4412
4973
|
borderRadius: 6
|
|
4413
4974
|
}, children: statusConfig.label }),
|
|
4414
|
-
severityConfig && /* @__PURE__ */ (0,
|
|
4975
|
+
severityConfig && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: {
|
|
4415
4976
|
backgroundColor: severityConfig.bg,
|
|
4416
4977
|
color: severityConfig.color,
|
|
4417
4978
|
fontSize: 11,
|
|
@@ -4420,9 +4981,9 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4420
4981
|
borderRadius: 6
|
|
4421
4982
|
}, children: severityConfig.label })
|
|
4422
4983
|
] }),
|
|
4423
|
-
/* @__PURE__ */ (0,
|
|
4424
|
-
issue.route && /* @__PURE__ */ (0,
|
|
4425
|
-
issue.description && /* @__PURE__ */ (0,
|
|
4984
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { style: { fontSize: 16, fontWeight: 700, color: colors.textPrimary, margin: "0 0 8px 0", lineHeight: 1.3 }, children: issue.title }),
|
|
4985
|
+
issue.route && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 12 }, children: issue.route }),
|
|
4986
|
+
issue.description && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: {
|
|
4426
4987
|
backgroundColor: colors.card,
|
|
4427
4988
|
border: `1px solid ${colors.border}`,
|
|
4428
4989
|
borderRadius: 8,
|
|
@@ -4434,56 +4995,56 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4434
4995
|
whiteSpace: "pre-wrap",
|
|
4435
4996
|
wordBreak: "break-word"
|
|
4436
4997
|
}, children: issue.description }),
|
|
4437
|
-
issue.verifiedByName && /* @__PURE__ */ (0,
|
|
4998
|
+
issue.verifiedByName && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
|
|
4438
4999
|
backgroundColor: "#14532d",
|
|
4439
5000
|
border: "1px solid #166534",
|
|
4440
5001
|
borderRadius: 8,
|
|
4441
5002
|
padding: 12,
|
|
4442
5003
|
marginBottom: 12
|
|
4443
5004
|
}, children: [
|
|
4444
|
-
/* @__PURE__ */ (0,
|
|
4445
|
-
/* @__PURE__ */ (0,
|
|
4446
|
-
/* @__PURE__ */ (0,
|
|
5005
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
|
|
5006
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 16 }, children: "\u2705" }),
|
|
5007
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#4ade80" }, children: "Retesting Proof" })
|
|
4447
5008
|
] }),
|
|
4448
|
-
/* @__PURE__ */ (0,
|
|
5009
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, color: "#86efac" }, children: [
|
|
4449
5010
|
"Verified by ",
|
|
4450
|
-
/* @__PURE__ */ (0,
|
|
4451
|
-
issue.verifiedAt && /* @__PURE__ */ (0,
|
|
5011
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: issue.verifiedByName }),
|
|
5012
|
+
issue.verifiedAt && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { children: [
|
|
4452
5013
|
" on ",
|
|
4453
5014
|
new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })
|
|
4454
5015
|
] })
|
|
4455
5016
|
] })
|
|
4456
5017
|
] }),
|
|
4457
|
-
issue.originalBugTitle && /* @__PURE__ */ (0,
|
|
5018
|
+
issue.originalBugTitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
|
|
4458
5019
|
backgroundColor: "#422006",
|
|
4459
5020
|
border: "1px solid #854d0e",
|
|
4460
5021
|
borderRadius: 8,
|
|
4461
5022
|
padding: 12,
|
|
4462
5023
|
marginBottom: 12
|
|
4463
5024
|
}, children: [
|
|
4464
|
-
/* @__PURE__ */ (0,
|
|
4465
|
-
/* @__PURE__ */ (0,
|
|
4466
|
-
/* @__PURE__ */ (0,
|
|
5025
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }, children: [
|
|
5026
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
|
|
5027
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { fontSize: 13, fontWeight: 600, color: "#fbbf24" }, children: "Original Bug" })
|
|
4467
5028
|
] }),
|
|
4468
|
-
/* @__PURE__ */ (0,
|
|
5029
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, color: "#fde68a" }, children: [
|
|
4469
5030
|
"Retest of: ",
|
|
4470
|
-
/* @__PURE__ */ (0,
|
|
5031
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("strong", { children: issue.originalBugTitle })
|
|
4471
5032
|
] })
|
|
4472
5033
|
] }),
|
|
4473
|
-
issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ (0,
|
|
4474
|
-
/* @__PURE__ */ (0,
|
|
5034
|
+
issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { marginBottom: 12 }, children: [
|
|
5035
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, fontWeight: 600, color: colors.textMuted, marginBottom: 8 }, children: [
|
|
4475
5036
|
"Screenshots (",
|
|
4476
5037
|
issue.screenshotUrls.length,
|
|
4477
5038
|
")"
|
|
4478
5039
|
] }),
|
|
4479
|
-
/* @__PURE__ */ (0,
|
|
5040
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { display: "flex", gap: 8, overflowX: "auto" }, children: issue.screenshotUrls.map((url, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
4480
5041
|
"a",
|
|
4481
5042
|
{
|
|
4482
5043
|
href: url,
|
|
4483
5044
|
target: "_blank",
|
|
4484
5045
|
rel: "noopener noreferrer",
|
|
4485
5046
|
style: { flexShrink: 0 },
|
|
4486
|
-
children: /* @__PURE__ */ (0,
|
|
5047
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
4487
5048
|
"img",
|
|
4488
5049
|
{
|
|
4489
5050
|
src: url,
|
|
@@ -4501,22 +5062,44 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4501
5062
|
i
|
|
4502
5063
|
)) })
|
|
4503
5064
|
] }),
|
|
4504
|
-
/* @__PURE__ */ (0,
|
|
5065
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: {
|
|
4505
5066
|
borderTop: `1px solid ${colors.border}`,
|
|
4506
5067
|
paddingTop: 12,
|
|
4507
5068
|
marginTop: 4
|
|
4508
5069
|
}, children: [
|
|
4509
|
-
issue.reporterName && /* @__PURE__ */ (0,
|
|
5070
|
+
issue.reporterName && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 12, color: colors.textDim, marginBottom: 4 }, children: [
|
|
4510
5071
|
"Reported by ",
|
|
4511
5072
|
issue.reporterName
|
|
4512
5073
|
] }),
|
|
4513
|
-
/* @__PURE__ */ (0,
|
|
5074
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { fontSize: 11, color: colors.textDim }, children: [
|
|
4514
5075
|
"Created ",
|
|
4515
5076
|
formatRelativeTime(issue.createdAt),
|
|
4516
5077
|
" \xB7 Updated ",
|
|
4517
5078
|
formatRelativeTime(issue.updatedAt)
|
|
4518
5079
|
] })
|
|
4519
|
-
] })
|
|
5080
|
+
] }),
|
|
5081
|
+
dashboardUrl && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
5082
|
+
"a",
|
|
5083
|
+
{
|
|
5084
|
+
href: `${dashboardUrl}/reports`,
|
|
5085
|
+
target: "_blank",
|
|
5086
|
+
rel: "noopener noreferrer",
|
|
5087
|
+
style: {
|
|
5088
|
+
display: "flex",
|
|
5089
|
+
alignItems: "center",
|
|
5090
|
+
justifyContent: "center",
|
|
5091
|
+
gap: 6,
|
|
5092
|
+
marginTop: 12,
|
|
5093
|
+
padding: "10px 0",
|
|
5094
|
+
fontSize: 13,
|
|
5095
|
+
fontWeight: 500,
|
|
5096
|
+
color: colors.blue,
|
|
5097
|
+
textDecoration: "none",
|
|
5098
|
+
borderTop: `1px solid ${colors.border}`
|
|
5099
|
+
},
|
|
5100
|
+
children: "\u{1F310} View on Dashboard \u2192"
|
|
5101
|
+
}
|
|
5102
|
+
)
|
|
4520
5103
|
] });
|
|
4521
5104
|
}
|
|
4522
5105
|
|
|
@@ -4524,9 +5107,9 @@ function IssueDetailScreen({ nav, issue }) {
|
|
|
4524
5107
|
var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
|
|
4525
5108
|
|
|
4526
5109
|
// src/BugBearPanel.tsx
|
|
4527
|
-
var
|
|
5110
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
4528
5111
|
function BugBearIcon({ size = 24 }) {
|
|
4529
|
-
return /* @__PURE__ */ (0,
|
|
5112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
4530
5113
|
"img",
|
|
4531
5114
|
{
|
|
4532
5115
|
src: BUGBEAR_LOGO_BASE64,
|
|
@@ -4691,37 +5274,37 @@ function BugBearPanel({
|
|
|
4691
5274
|
const renderScreen = () => {
|
|
4692
5275
|
switch (currentScreen.name) {
|
|
4693
5276
|
case "HOME":
|
|
4694
|
-
return /* @__PURE__ */ (0,
|
|
5277
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(HomeScreen, { nav });
|
|
4695
5278
|
case "TEST_DETAIL":
|
|
4696
|
-
return /* @__PURE__ */ (0,
|
|
5279
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TestDetailScreen, { testId: currentScreen.testId, nav });
|
|
4697
5280
|
case "TEST_LIST":
|
|
4698
|
-
return /* @__PURE__ */ (0,
|
|
5281
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TestListScreen, { nav });
|
|
4699
5282
|
case "TEST_FEEDBACK":
|
|
4700
|
-
return /* @__PURE__ */ (0,
|
|
5283
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
|
|
4701
5284
|
case "REPORT":
|
|
4702
|
-
return /* @__PURE__ */ (0,
|
|
5285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ReportScreen, { nav, prefill: currentScreen.prefill });
|
|
4703
5286
|
case "REPORT_SUCCESS":
|
|
4704
|
-
return /* @__PURE__ */ (0,
|
|
5287
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ReportSuccessScreen, { nav });
|
|
4705
5288
|
case "MESSAGE_LIST":
|
|
4706
|
-
return /* @__PURE__ */ (0,
|
|
5289
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MessageListScreen, { nav });
|
|
4707
5290
|
case "THREAD_DETAIL":
|
|
4708
|
-
return /* @__PURE__ */ (0,
|
|
5291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ThreadDetailScreen, { thread: currentScreen.thread, nav });
|
|
4709
5292
|
case "COMPOSE_MESSAGE":
|
|
4710
|
-
return /* @__PURE__ */ (0,
|
|
5293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ComposeMessageScreen, { nav });
|
|
4711
5294
|
case "ISSUE_LIST":
|
|
4712
|
-
return /* @__PURE__ */ (0,
|
|
5295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(IssueListScreen, { nav, category: currentScreen.category });
|
|
4713
5296
|
case "ISSUE_DETAIL":
|
|
4714
|
-
return /* @__PURE__ */ (0,
|
|
5297
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(IssueDetailScreen, { nav, issue: currentScreen.issue });
|
|
4715
5298
|
case "PROFILE":
|
|
4716
|
-
return /* @__PURE__ */ (0,
|
|
5299
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ProfileScreen, { nav });
|
|
4717
5300
|
default:
|
|
4718
|
-
return /* @__PURE__ */ (0,
|
|
5301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(HomeScreen, { nav });
|
|
4719
5302
|
}
|
|
4720
5303
|
};
|
|
4721
5304
|
if (typeof document === "undefined") return null;
|
|
4722
5305
|
const headerTitle = getHeaderTitle();
|
|
4723
5306
|
return (0, import_react_dom.createPortal)(
|
|
4724
|
-
/* @__PURE__ */ (0,
|
|
5307
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
4725
5308
|
"div",
|
|
4726
5309
|
{
|
|
4727
5310
|
ref: panelRef,
|
|
@@ -4740,7 +5323,7 @@ function BugBearPanel({
|
|
|
4740
5323
|
},
|
|
4741
5324
|
onMouseDown: handleMouseDown,
|
|
4742
5325
|
children: [
|
|
4743
|
-
collapsed && /* @__PURE__ */ (0,
|
|
5326
|
+
collapsed && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
4744
5327
|
"button",
|
|
4745
5328
|
{
|
|
4746
5329
|
onClick: () => setCollapsed(false),
|
|
@@ -4762,9 +5345,9 @@ function BugBearPanel({
|
|
|
4762
5345
|
fontWeight: 500
|
|
4763
5346
|
},
|
|
4764
5347
|
children: [
|
|
4765
|
-
/* @__PURE__ */ (0,
|
|
4766
|
-
/* @__PURE__ */ (0,
|
|
4767
|
-
badgeCount > 0 && /* @__PURE__ */ (0,
|
|
5348
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BugBearIcon, { size: 24 }),
|
|
5349
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { children: "BugBear" }),
|
|
5350
|
+
badgeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: {
|
|
4768
5351
|
backgroundColor: "#fff",
|
|
4769
5352
|
color: colors.blue,
|
|
4770
5353
|
fontSize: "0.75rem",
|
|
@@ -4775,7 +5358,7 @@ function BugBearPanel({
|
|
|
4775
5358
|
]
|
|
4776
5359
|
}
|
|
4777
5360
|
),
|
|
4778
|
-
!collapsed && /* @__PURE__ */ (0,
|
|
5361
|
+
!collapsed && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: {
|
|
4779
5362
|
width: PANEL_WIDTH,
|
|
4780
5363
|
backgroundColor: colors.bg,
|
|
4781
5364
|
borderRadius: 12,
|
|
@@ -4783,7 +5366,7 @@ function BugBearPanel({
|
|
|
4783
5366
|
overflow: "hidden",
|
|
4784
5367
|
boxShadow: "0 25px 50px -12px rgba(0,0,0,0.5)"
|
|
4785
5368
|
}, children: [
|
|
4786
|
-
/* @__PURE__ */ (0,
|
|
5369
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
4787
5370
|
"div",
|
|
4788
5371
|
{
|
|
4789
5372
|
"data-drag-handle": true,
|
|
@@ -4799,7 +5382,7 @@ function BugBearPanel({
|
|
|
4799
5382
|
cursor: draggable ? isDragging ? "grabbing" : "grab" : "default"
|
|
4800
5383
|
},
|
|
4801
5384
|
children: [
|
|
4802
|
-
/* @__PURE__ */ (0,
|
|
5385
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { display: "flex", alignItems: "center", gap: 8, flex: 1, minWidth: 0 }, children: canGoBack ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
4803
5386
|
"button",
|
|
4804
5387
|
{
|
|
4805
5388
|
onClick: pop,
|
|
@@ -4815,14 +5398,14 @@ function BugBearPanel({
|
|
|
4815
5398
|
},
|
|
4816
5399
|
children: "\u2190 Back"
|
|
4817
5400
|
}
|
|
4818
|
-
) : /* @__PURE__ */ (0,
|
|
4819
|
-
/* @__PURE__ */ (0,
|
|
4820
|
-
/* @__PURE__ */ (0,
|
|
4821
|
-
/* @__PURE__ */ (0,
|
|
4822
|
-
/* @__PURE__ */ (0,
|
|
4823
|
-
draggable && /* @__PURE__ */ (0,
|
|
5401
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
|
|
5402
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BugBearIcon, { size: 28 }),
|
|
5403
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { children: [
|
|
5404
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
5405
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { fontWeight: 600, fontSize: "0.875rem" }, children: "BugBear" }),
|
|
5406
|
+
draggable && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { color: colors.textMuted, fontSize: "0.75rem" }, title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
|
|
4824
5407
|
] }),
|
|
4825
|
-
testerInfo && /* @__PURE__ */ (0,
|
|
5408
|
+
testerInfo && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
4826
5409
|
"button",
|
|
4827
5410
|
{
|
|
4828
5411
|
onClick: () => push({ name: "PROFILE" }),
|
|
@@ -4840,13 +5423,13 @@ function BugBearPanel({
|
|
|
4840
5423
|
},
|
|
4841
5424
|
children: [
|
|
4842
5425
|
testerInfo.name,
|
|
4843
|
-
/* @__PURE__ */ (0,
|
|
5426
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { fontSize: "0.625rem" }, children: "\u270E" })
|
|
4844
5427
|
]
|
|
4845
5428
|
}
|
|
4846
5429
|
)
|
|
4847
5430
|
] })
|
|
4848
5431
|
] }) }),
|
|
4849
|
-
headerTitle ? /* @__PURE__ */ (0,
|
|
5432
|
+
headerTitle ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: {
|
|
4850
5433
|
fontSize: "0.8125rem",
|
|
4851
5434
|
fontWeight: 600,
|
|
4852
5435
|
color: colors.textSecondary,
|
|
@@ -4856,7 +5439,7 @@ function BugBearPanel({
|
|
|
4856
5439
|
textOverflow: "ellipsis",
|
|
4857
5440
|
whiteSpace: "nowrap"
|
|
4858
5441
|
}, children: headerTitle }) : null,
|
|
4859
|
-
/* @__PURE__ */ (0,
|
|
5442
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
4860
5443
|
"button",
|
|
4861
5444
|
{
|
|
4862
5445
|
onClick: handleClose,
|
|
@@ -4880,13 +5463,13 @@ function BugBearPanel({
|
|
|
4880
5463
|
]
|
|
4881
5464
|
}
|
|
4882
5465
|
),
|
|
4883
|
-
/* @__PURE__ */ (0,
|
|
5466
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: {
|
|
4884
5467
|
padding: 16,
|
|
4885
5468
|
maxHeight: 400,
|
|
4886
5469
|
overflowY: "auto",
|
|
4887
5470
|
backgroundColor: colors.bg,
|
|
4888
5471
|
color: colors.textSecondary
|
|
4889
|
-
}, children: isLoading ? /* @__PURE__ */ (0,
|
|
5472
|
+
}, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { padding: "60px 0", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { color: colors.textMuted, fontSize: "0.875rem" }, children: "Loading..." }) }) : renderScreen() })
|
|
4890
5473
|
] })
|
|
4891
5474
|
]
|
|
4892
5475
|
}
|
|
@@ -4898,7 +5481,7 @@ function BugBearPanel({
|
|
|
4898
5481
|
// src/BugBearErrorBoundary.tsx
|
|
4899
5482
|
var import_react15 = require("react");
|
|
4900
5483
|
var import_core2 = require("@bbearai/core");
|
|
4901
|
-
var
|
|
5484
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
4902
5485
|
var BugBearErrorBoundary = class extends import_react15.Component {
|
|
4903
5486
|
constructor(props) {
|
|
4904
5487
|
super(props);
|
|
@@ -4943,7 +5526,7 @@ var BugBearErrorBoundary = class extends import_react15.Component {
|
|
|
4943
5526
|
if (fallback) {
|
|
4944
5527
|
return fallback;
|
|
4945
5528
|
}
|
|
4946
|
-
return /* @__PURE__ */ (0,
|
|
5529
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
4947
5530
|
"div",
|
|
4948
5531
|
{
|
|
4949
5532
|
style: {
|
|
@@ -4955,13 +5538,13 @@ var BugBearErrorBoundary = class extends import_react15.Component {
|
|
|
4955
5538
|
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
|
|
4956
5539
|
},
|
|
4957
5540
|
children: [
|
|
4958
|
-
/* @__PURE__ */ (0,
|
|
4959
|
-
/* @__PURE__ */ (0,
|
|
4960
|
-
/* @__PURE__ */ (0,
|
|
5541
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
|
|
5542
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: BUGBEAR_LOGO_BASE64, alt: "BugBear", width: 28, height: 28, style: { objectFit: "contain" } }),
|
|
5543
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h3", { style: { margin: 0, color: "#991b1b", fontSize: "16px" }, children: "Something went wrong" })
|
|
4961
5544
|
] }),
|
|
4962
|
-
/* @__PURE__ */ (0,
|
|
4963
|
-
/* @__PURE__ */ (0,
|
|
4964
|
-
/* @__PURE__ */ (0,
|
|
5545
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { style: { color: "#7f1d1d", fontSize: "14px", margin: "0 0 12px 0" }, children: error.message }),
|
|
5546
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { style: { display: "flex", gap: "8px" }, children: [
|
|
5547
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
4965
5548
|
"button",
|
|
4966
5549
|
{
|
|
4967
5550
|
onClick: this.reset,
|
|
@@ -4978,7 +5561,7 @@ var BugBearErrorBoundary = class extends import_react15.Component {
|
|
|
4978
5561
|
children: "Try Again"
|
|
4979
5562
|
}
|
|
4980
5563
|
),
|
|
4981
|
-
/* @__PURE__ */ (0,
|
|
5564
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
4982
5565
|
"button",
|
|
4983
5566
|
{
|
|
4984
5567
|
onClick: () => window.location.reload(),
|
|
@@ -4996,7 +5579,7 @@ var BugBearErrorBoundary = class extends import_react15.Component {
|
|
|
4996
5579
|
}
|
|
4997
5580
|
)
|
|
4998
5581
|
] }),
|
|
4999
|
-
/* @__PURE__ */ (0,
|
|
5582
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { style: { color: "#9ca3af", fontSize: "12px", marginTop: "12px" }, children: "The error has been captured by BugBear" })
|
|
5000
5583
|
]
|
|
5001
5584
|
}
|
|
5002
5585
|
);
|