@bbearai/react-native 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +766 -371
  2. package/dist/index.mjs +766 -371
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -15195,8 +15195,8 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
15195
15195
  }
15196
15196
 
15197
15197
  // src/BugBearButton.tsx
15198
- var import_react23 = __toESM(require("react"));
15199
- var import_react_native22 = require("react-native");
15198
+ var import_react24 = __toESM(require("react"));
15199
+ var import_react_native23 = require("react-native");
15200
15200
 
15201
15201
  // src/widget/logo.ts
15202
15202
  var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
@@ -15251,6 +15251,11 @@ async function captureAppScreen() {
15251
15251
  }
15252
15252
  }
15253
15253
 
15254
+ // src/widget/animatedUtils.ts
15255
+ function getAnimatedValue(value) {
15256
+ return value._value;
15257
+ }
15258
+
15254
15259
  // src/widget/screens/HomeScreen.tsx
15255
15260
  var import_react4 = __toESM(require("react"));
15256
15261
  var import_react_native4 = require("react-native");
@@ -15335,7 +15340,7 @@ var s = import_react_native3.StyleSheet.create({
15335
15340
  // src/widget/screens/HomeScreen.tsx
15336
15341
  function HomeScreen({ nav }) {
15337
15342
  const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl, isLoading, activeSession, sessionFindings, refreshSession, widgetMode, widgetColorScheme } = useBugBear();
15338
- const styles5 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15343
+ const styles6 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15339
15344
  const [sessionElapsed, setSessionElapsed] = (0, import_react4.useState)(0);
15340
15345
  const timerRef = (0, import_react4.useRef)(null);
15341
15346
  (0, import_react4.useEffect)(() => {
@@ -15364,98 +15369,98 @@ function HomeScreen({ nav }) {
15364
15369
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15365
15370
  import_react_native4.TouchableOpacity,
15366
15371
  {
15367
- style: [styles5.heroBanner, styles5.heroBannerMessages],
15372
+ style: [styles6.heroBanner, styles6.heroBannerMessages],
15368
15373
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15369
15374
  activeOpacity: 0.8
15370
15375
  },
15371
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroCount }, unreadCount),
15372
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15373
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroAction }, "View Messages \u2192")
15374
- ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles5.heroBanner, styles5.heroBannerClear] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroClearEmoji }, "\u{1F4AC}"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroClearTitle }, "Help us improve"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroClearSub }, "Report bugs, share ideas, and track your submissions")), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15376
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroCount }, unreadCount),
15377
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15378
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroAction }, "View Messages \u2192")
15379
+ ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles6.heroBanner, styles6.heroBannerClear] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroClearEmoji }, "\u{1F4AC}"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroClearTitle }, "Help us improve"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroClearSub }, "Report bugs, share ideas, and track your submissions")), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15375
15380
  import_react_native4.TouchableOpacity,
15376
15381
  {
15377
- style: styles5.actionCard,
15382
+ style: styles6.actionCard,
15378
15383
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15379
15384
  activeOpacity: 0.7
15380
15385
  },
15381
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F41B}"),
15382
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Report Bug")
15386
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F41B}"),
15387
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Report Bug")
15383
15388
  ), /* @__PURE__ */ import_react4.default.createElement(
15384
15389
  import_react_native4.TouchableOpacity,
15385
15390
  {
15386
- style: styles5.actionCard,
15391
+ style: styles6.actionCard,
15387
15392
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15388
15393
  activeOpacity: 0.7
15389
15394
  },
15390
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4A1}"),
15391
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Share Feedback")
15395
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F4A1}"),
15396
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Share Feedback")
15392
15397
  ), /* @__PURE__ */ import_react4.default.createElement(
15393
15398
  import_react_native4.TouchableOpacity,
15394
15399
  {
15395
- style: styles5.actionCard,
15400
+ style: styles6.actionCard,
15396
15401
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15397
15402
  activeOpacity: 0.7
15398
15403
  },
15399
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4AC}"),
15400
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Messages"),
15401
- unreadCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles5.actionBadge, styles5.actionBadgeMsg] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionBadgeText }, unreadCount))
15404
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F4AC}"),
15405
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Messages"),
15406
+ unreadCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles6.actionBadge, styles6.actionBadgeMsg] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionBadgeText }, unreadCount))
15402
15407
  ), /* @__PURE__ */ import_react4.default.createElement(
15403
15408
  import_react_native4.TouchableOpacity,
15404
15409
  {
15405
- style: styles5.actionCard,
15410
+ style: styles6.actionCard,
15406
15411
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15407
15412
  activeOpacity: 0.7
15408
15413
  },
15409
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4CB}"),
15410
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "My Issues"),
15411
- issueCounts.open > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles5.actionBadge, styles5.actionBadgeIssue] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionBadgeText }, issueCounts.open))
15412
- )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15414
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F4CB}"),
15415
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "My Issues"),
15416
+ issueCounts.open > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles6.actionBadge, styles6.actionBadgeIssue] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionBadgeText }, issueCounts.open))
15417
+ )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15413
15418
  import_react_native4.TouchableOpacity,
15414
15419
  {
15415
- style: [styles5.issueCard, styles5.issueCardOpen],
15420
+ style: [styles6.issueCard, styles6.issueCardOpen],
15416
15421
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15417
15422
  activeOpacity: 0.7
15418
15423
  },
15419
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountOpen }, issueCounts.open),
15420
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Open")
15424
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueCountOpen }, issueCounts.open),
15425
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueLabel }, "Open")
15421
15426
  ), /* @__PURE__ */ import_react4.default.createElement(
15422
15427
  import_react_native4.TouchableOpacity,
15423
15428
  {
15424
- style: [styles5.issueCard, styles5.issueCardDone],
15429
+ style: [styles6.issueCard, styles6.issueCardDone],
15425
15430
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15426
15431
  activeOpacity: 0.7
15427
15432
  },
15428
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountDone }, issueCounts.done),
15429
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Done")
15433
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueCountDone }, issueCounts.done),
15434
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueLabel }, "Done")
15430
15435
  ), /* @__PURE__ */ import_react4.default.createElement(
15431
15436
  import_react_native4.TouchableOpacity,
15432
15437
  {
15433
- style: [styles5.issueCard, styles5.issueCardReopened],
15438
+ style: [styles6.issueCard, styles6.issueCardReopened],
15434
15439
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15435
15440
  activeOpacity: 0.7
15436
15441
  },
15437
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountReopened }, issueCounts.reopened),
15438
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Reopened")
15442
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueCountReopened }, issueCounts.reopened),
15443
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueLabel }, "Reopened")
15439
15444
  )), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15440
15445
  import_react_native4.TouchableOpacity,
15441
15446
  {
15442
- style: styles5.webAppLink,
15447
+ style: styles6.webAppLink,
15443
15448
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15444
15449
  activeOpacity: 0.7
15445
15450
  },
15446
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppIcon }, "\u{1F310}"),
15447
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.webAppTextWrap }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppTitle }, "Open Web Dashboard"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppSub }, "View your submissions & updates")),
15448
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppArrow }, "\u2192")
15451
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppIcon }, "\u{1F310}"),
15452
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.webAppTextWrap }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppTitle }, "Open Web Dashboard"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppSub }, "View your submissions & updates")),
15453
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppArrow }, "\u2192")
15449
15454
  ), /* @__PURE__ */ import_react4.default.createElement(
15450
15455
  import_react_native4.TouchableOpacity,
15451
15456
  {
15452
- style: styles5.refreshButton,
15457
+ style: styles6.refreshButton,
15453
15458
  onPress: () => {
15454
15459
  refreshThreads();
15455
15460
  refreshIssueCounts();
15456
15461
  }
15457
15462
  },
15458
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.refreshText }, "\u21BB Refresh")
15463
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.refreshText }, "\u21BB Refresh")
15459
15464
  ));
15460
15465
  }
15461
15466
  const formatTimer = (s2) => {
@@ -15472,130 +15477,130 @@ function HomeScreen({ nav }) {
15472
15477
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, pendingCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15473
15478
  import_react_native4.TouchableOpacity,
15474
15479
  {
15475
- style: [styles5.heroBanner, styles5.heroBannerTests],
15480
+ style: [styles6.heroBanner, styles6.heroBannerTests],
15476
15481
  onPress: () => nav.push({ name: "TEST_DETAIL" }),
15477
15482
  activeOpacity: 0.8
15478
15483
  },
15479
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroCount }, pendingCount),
15480
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
15481
- retestCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.retestPill }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
15482
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroAction }, "Start Testing \u2192")
15484
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroCount }, pendingCount),
15485
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
15486
+ retestCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.retestPill }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
15487
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroAction }, "Start Testing \u2192")
15483
15488
  ) : unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15484
15489
  import_react_native4.TouchableOpacity,
15485
15490
  {
15486
- style: [styles5.heroBanner, styles5.heroBannerMessages],
15491
+ style: [styles6.heroBanner, styles6.heroBannerMessages],
15487
15492
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15488
15493
  activeOpacity: 0.8
15489
15494
  },
15490
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroCount }, unreadCount),
15491
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15492
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroAction }, "View Messages \u2192")
15493
- ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles5.heroBanner, styles5.heroBannerClear] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroClearEmoji }, "\u2705"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroClearTitle }, "All caught up!"), totalTests > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroClearSub }, completedCount, "/", totalTests, " tests completed")), activeSession && activeSession.status === "active" ? /* @__PURE__ */ import_react4.default.createElement(
15495
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroCount }, unreadCount),
15496
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15497
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroAction }, "View Messages \u2192")
15498
+ ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles6.heroBanner, styles6.heroBannerClear] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroClearEmoji }, "\u2705"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroClearTitle }, "All caught up!"), totalTests > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.heroClearSub }, completedCount, "/", totalTests, " tests completed")), activeSession && activeSession.status === "active" ? /* @__PURE__ */ import_react4.default.createElement(
15494
15499
  import_react_native4.TouchableOpacity,
15495
15500
  {
15496
- style: styles5.sessionCardActive,
15501
+ style: styles6.sessionCardActive,
15497
15502
  onPress: () => nav.push({ name: "SESSION_ACTIVE" }),
15498
15503
  activeOpacity: 0.8
15499
15504
  },
15500
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.sessionDot }),
15501
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.sessionCardContent }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardTitle, numberOfLines: 1 }, activeSession.focusArea || "QA Session"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardMeta }, formatTimer(sessionElapsed), " \xB7 ", sessionFindings.length, " finding", sessionFindings.length !== 1 ? "s" : "")),
15502
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardAction }, "Resume \u2192")
15505
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.sessionDot }),
15506
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.sessionCardContent }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.sessionCardTitle, numberOfLines: 1 }, activeSession.focusArea || "QA Session"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.sessionCardMeta }, formatTimer(sessionElapsed), " \xB7 ", sessionFindings.length, " finding", sessionFindings.length !== 1 ? "s" : "")),
15507
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.sessionCardAction }, "Resume \u2192")
15503
15508
  ) : /* @__PURE__ */ import_react4.default.createElement(
15504
15509
  import_react_native4.TouchableOpacity,
15505
15510
  {
15506
- style: styles5.sessionCardInactive,
15511
+ style: styles6.sessionCardInactive,
15507
15512
  onPress: () => nav.push({ name: "SESSION_START" }),
15508
15513
  activeOpacity: 0.7
15509
15514
  },
15510
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardIcon }, "\u{1F50D}"),
15511
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardLabel }, "Start QA Session"),
15512
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardArrow }, "\u2192")
15513
- ), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15515
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.sessionCardIcon }, "\u{1F50D}"),
15516
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.sessionCardLabel }, "Start QA Session"),
15517
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.sessionCardArrow }, "\u2192")
15518
+ ), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15514
15519
  import_react_native4.TouchableOpacity,
15515
15520
  {
15516
- style: styles5.actionCard,
15521
+ style: styles6.actionCard,
15517
15522
  onPress: () => nav.push({ name: "TEST_LIST" }),
15518
15523
  activeOpacity: 0.7
15519
15524
  },
15520
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u2705"),
15521
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Tests"),
15522
- pendingCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.actionBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionBadgeText }, pendingCount))
15525
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u2705"),
15526
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Tests"),
15527
+ pendingCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.actionBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionBadgeText }, pendingCount))
15523
15528
  ), /* @__PURE__ */ import_react4.default.createElement(
15524
15529
  import_react_native4.TouchableOpacity,
15525
15530
  {
15526
- style: styles5.actionCard,
15531
+ style: styles6.actionCard,
15527
15532
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15528
15533
  activeOpacity: 0.7
15529
15534
  },
15530
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F41B}"),
15531
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Report Bug")
15535
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F41B}"),
15536
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Report Bug")
15532
15537
  ), /* @__PURE__ */ import_react4.default.createElement(
15533
15538
  import_react_native4.TouchableOpacity,
15534
15539
  {
15535
- style: styles5.actionCard,
15540
+ style: styles6.actionCard,
15536
15541
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15537
15542
  activeOpacity: 0.7
15538
15543
  },
15539
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4A1}"),
15540
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Feedback")
15544
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F4A1}"),
15545
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Feedback")
15541
15546
  ), /* @__PURE__ */ import_react4.default.createElement(
15542
15547
  import_react_native4.TouchableOpacity,
15543
15548
  {
15544
- style: styles5.actionCard,
15549
+ style: styles6.actionCard,
15545
15550
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15546
15551
  activeOpacity: 0.7
15547
15552
  },
15548
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4AC}"),
15549
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Messages"),
15550
- unreadCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles5.actionBadge, styles5.actionBadgeMsg] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionBadgeText }, unreadCount))
15551
- )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15553
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionIcon }, "\u{1F4AC}"),
15554
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionLabel }, "Messages"),
15555
+ unreadCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles6.actionBadge, styles6.actionBadgeMsg] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.actionBadgeText }, unreadCount))
15556
+ )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15552
15557
  import_react_native4.TouchableOpacity,
15553
15558
  {
15554
- style: [styles5.issueCard, styles5.issueCardOpen],
15559
+ style: [styles6.issueCard, styles6.issueCardOpen],
15555
15560
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15556
15561
  activeOpacity: 0.7
15557
15562
  },
15558
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountOpen }, issueCounts.open),
15559
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Open")
15563
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueCountOpen }, issueCounts.open),
15564
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueLabel }, "Open")
15560
15565
  ), /* @__PURE__ */ import_react4.default.createElement(
15561
15566
  import_react_native4.TouchableOpacity,
15562
15567
  {
15563
- style: [styles5.issueCard, styles5.issueCardDone],
15568
+ style: [styles6.issueCard, styles6.issueCardDone],
15564
15569
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15565
15570
  activeOpacity: 0.7
15566
15571
  },
15567
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountDone }, issueCounts.done),
15568
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Done")
15572
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueCountDone }, issueCounts.done),
15573
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueLabel }, "Done")
15569
15574
  ), /* @__PURE__ */ import_react4.default.createElement(
15570
15575
  import_react_native4.TouchableOpacity,
15571
15576
  {
15572
- style: [styles5.issueCard, styles5.issueCardReopened],
15577
+ style: [styles6.issueCard, styles6.issueCardReopened],
15573
15578
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15574
15579
  activeOpacity: 0.7
15575
15580
  },
15576
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountReopened }, issueCounts.reopened),
15577
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Reopened")
15578
- )), totalTests > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.progressSection }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.progressBar }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles5.progressFill, { width: `${Math.round(completedCount / totalTests * 100)}%` }] })), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.progressText }, completedCount, "/", totalTests, " tests completed")), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15581
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueCountReopened }, issueCounts.reopened),
15582
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.issueLabel }, "Reopened")
15583
+ )), totalTests > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.progressSection }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.progressBar }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles6.progressFill, { width: `${Math.round(completedCount / totalTests * 100)}%` }] })), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.progressText }, completedCount, "/", totalTests, " tests completed")), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15579
15584
  import_react_native4.TouchableOpacity,
15580
15585
  {
15581
- style: styles5.webAppLink,
15586
+ style: styles6.webAppLink,
15582
15587
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15583
15588
  activeOpacity: 0.7
15584
15589
  },
15585
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppIcon }, "\u{1F310}"),
15586
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.webAppTextWrap }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppTitle }, "Open Web Dashboard"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppSub }, "View analytics, history & more")),
15587
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppArrow }, "\u2192")
15590
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppIcon }, "\u{1F310}"),
15591
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles6.webAppTextWrap }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppTitle }, "Open Web Dashboard"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppSub }, "View analytics, history & more")),
15592
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.webAppArrow }, "\u2192")
15588
15593
  ), /* @__PURE__ */ import_react4.default.createElement(
15589
15594
  import_react_native4.TouchableOpacity,
15590
15595
  {
15591
- style: styles5.refreshButton,
15596
+ style: styles6.refreshButton,
15592
15597
  onPress: () => {
15593
15598
  refreshAssignments();
15594
15599
  refreshThreads();
15595
15600
  refreshIssueCounts();
15596
15601
  }
15597
15602
  },
15598
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.refreshText }, "\u21BB Refresh")
15603
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.refreshText }, "\u21BB Refresh")
15599
15604
  ));
15600
15605
  }
15601
15606
  function createStyles() {
@@ -15893,7 +15898,7 @@ var import_react5 = __toESM(require("react"));
15893
15898
  var import_react_native5 = require("react-native");
15894
15899
  function TestDetailScreen({ testId, nav }) {
15895
15900
  const { client, assignments, currentAssignment, refreshAssignments, getDeviceInfo, onNavigate, widgetColorScheme } = useBugBear();
15896
- const styles5 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15901
+ const styles6 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15897
15902
  const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
15898
15903
  const [showSteps, setShowSteps] = (0, import_react5.useState)(true);
15899
15904
  const [showDetails, setShowDetails] = (0, import_react5.useState)(false);
@@ -15904,6 +15909,20 @@ function TestDetailScreen({ testId, nav }) {
15904
15909
  const [skipNotes, setSkipNotes] = (0, import_react5.useState)("");
15905
15910
  const [skipping, setSkipping] = (0, import_react5.useState)(false);
15906
15911
  const [isSubmitting, setIsSubmitting] = (0, import_react5.useState)(false);
15912
+ const [feedbackToastAssignmentId, setFeedbackToastAssignmentId] = (0, import_react5.useState)(null);
15913
+ const toastTimerRef = (0, import_react5.useRef)(null);
15914
+ const toastSlideAnim = (0, import_react5.useRef)(new import_react_native5.Animated.Value(80)).current;
15915
+ (0, import_react5.useEffect)(() => {
15916
+ return () => {
15917
+ if (toastTimerRef.current) clearTimeout(toastTimerRef.current);
15918
+ };
15919
+ }, []);
15920
+ (0, import_react5.useEffect)(() => {
15921
+ if (feedbackToastAssignmentId) {
15922
+ toastSlideAnim.setValue(80);
15923
+ import_react_native5.Animated.spring(toastSlideAnim, { toValue: 0, useNativeDriver: true, tension: 80, friction: 10 }).start();
15924
+ }
15925
+ }, [feedbackToastAssignmentId]);
15907
15926
  (0, import_react5.useEffect)(() => {
15908
15927
  setCriteriaResults({});
15909
15928
  setShowSteps(true);
@@ -15941,13 +15960,34 @@ function TestDetailScreen({ testId, nav }) {
15941
15960
  import_react_native5.Keyboard.dismiss();
15942
15961
  setIsSubmitting(true);
15943
15962
  try {
15944
- await client.passAssignment(displayedAssignment.id);
15963
+ const passedId = displayedAssignment.id;
15964
+ const testCaseId = displayedAssignment.testCase.id;
15965
+ await client.passAssignment(passedId);
15966
+ client.submitTestFeedback({
15967
+ testCaseId,
15968
+ assignmentId: passedId,
15969
+ feedback: { rating: 5 }
15970
+ }).catch(() => {
15971
+ });
15945
15972
  await refreshAssignments();
15946
- nav.replace({ name: "TEST_FEEDBACK", status: "passed", assignmentId: displayedAssignment.id });
15973
+ setFeedbackToastAssignmentId(passedId);
15974
+ if (toastTimerRef.current) clearTimeout(toastTimerRef.current);
15975
+ toastTimerRef.current = setTimeout(() => setFeedbackToastAssignmentId(null), 4e3);
15976
+ const currentIdx = assignments.indexOf(displayedAssignment);
15977
+ const remaining = assignments.filter(
15978
+ (a) => (a.status === "pending" || a.status === "in_progress") && a.id !== passedId
15979
+ );
15980
+ if (remaining.length > 0) {
15981
+ const nextAfterCurrent = remaining.find((a) => assignments.indexOf(a) > currentIdx);
15982
+ const nextTest = nextAfterCurrent || remaining[0];
15983
+ nav.replace({ name: "TEST_DETAIL", testId: nextTest.id });
15984
+ } else {
15985
+ nav.reset();
15986
+ }
15947
15987
  } finally {
15948
15988
  setIsSubmitting(false);
15949
15989
  }
15950
- }, [client, displayedAssignment, refreshAssignments, nav, isSubmitting]);
15990
+ }, [client, displayedAssignment, refreshAssignments, nav, isSubmitting, assignments]);
15951
15991
  const handleFail = (0, import_react5.useCallback)(async () => {
15952
15992
  if (!client || !displayedAssignment || isSubmitting) return;
15953
15993
  import_react_native5.Keyboard.dismiss();
@@ -16036,7 +16076,7 @@ function TestDetailScreen({ testId, nav }) {
16036
16076
  const steps = testCase.steps;
16037
16077
  const info = templateInfo[template] || templateInfo.steps;
16038
16078
  const rubricMode = testCase.track?.rubricMode || "pass_fail";
16039
- return /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.container }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.topRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.positionInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.timerBadge }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.retestBanner }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.retestLabel }, "Retest"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.testKey }, testCase.key), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles5.sectionHeader }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { key: idx, style: styles5.step }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.stepNumber }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.stepBody }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(
16079
+ return /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.container }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.topRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.positionInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.timerBadge }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.retestBanner }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.retestLabel }, "Retest"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.testKey }, testCase.key), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles6.sectionHeader }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { key: idx, style: styles6.step }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.stepNumber }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.stepBody }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(
16040
16080
  import_react_native5.TouchableOpacity,
16041
16081
  {
16042
16082
  key: idx,
@@ -16046,76 +16086,95 @@ function TestDetailScreen({ testId, nav }) {
16046
16086
  else next[idx] = true;
16047
16087
  return next;
16048
16088
  }),
16049
- style: [styles5.checklistItem, criteriaResults[idx] === true && styles5.checklistItemChecked]
16089
+ style: [styles6.checklistItem, criteriaResults[idx] === true && styles6.checklistItemChecked]
16050
16090
  },
16051
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles5.checkbox, criteriaResults[idx] === true && styles5.checkboxChecked] }, criteriaResults[idx] === true && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.checkmark }, "\u2713")),
16052
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.checklistText, criteriaResults[idx] === true && styles5.checklistTextDone] }, step.action)
16053
- )), Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setCriteriaResults({}), style: styles5.resetRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.resetText }, "\u21BA Reset"))), template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { key: idx, style: styles5.rubricItem }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.rubricTitle }, idx + 1, ". ", step.action), step.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.rubricExpected }, step.expectedResult), rubricMode === "pass_fail" ? /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.passFailRow }, /* @__PURE__ */ import_react5.default.createElement(
16091
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles6.checkbox, criteriaResults[idx] === true && styles6.checkboxChecked] }, criteriaResults[idx] === true && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.checkmark }, "\u2713")),
16092
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.checklistText, criteriaResults[idx] === true && styles6.checklistTextDone] }, step.action)
16093
+ )), Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setCriteriaResults({}), style: styles6.resetRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.resetText }, "\u21BA Reset"))), template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { key: idx, style: styles6.rubricItem }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.rubricTitle }, idx + 1, ". ", step.action), step.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.rubricExpected }, step.expectedResult), rubricMode === "pass_fail" ? /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.passFailRow }, /* @__PURE__ */ import_react5.default.createElement(
16054
16094
  import_react_native5.TouchableOpacity,
16055
16095
  {
16056
16096
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: true })),
16057
- style: [styles5.pfButton, criteriaResults[idx] === true && styles5.pfButtonPass]
16097
+ style: [styles6.pfButton, criteriaResults[idx] === true && styles6.pfButtonPass]
16058
16098
  },
16059
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.pfButtonText, criteriaResults[idx] === true && styles5.pfButtonTextActive] }, "\u2713 Pass")
16099
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.pfButtonText, criteriaResults[idx] === true && styles6.pfButtonTextActive] }, "\u2713 Pass")
16060
16100
  ), /* @__PURE__ */ import_react5.default.createElement(
16061
16101
  import_react_native5.TouchableOpacity,
16062
16102
  {
16063
16103
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: false })),
16064
- style: [styles5.pfButton, criteriaResults[idx] === false && styles5.pfButtonFail]
16104
+ style: [styles6.pfButton, criteriaResults[idx] === false && styles6.pfButtonFail]
16065
16105
  },
16066
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.pfButtonText, criteriaResults[idx] === false && styles5.pfButtonTextActive] }, "\u2717 Fail")
16067
- )) : /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.ratingRow }, [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ import_react5.default.createElement(
16106
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.pfButtonText, criteriaResults[idx] === false && styles6.pfButtonTextActive] }, "\u2717 Fail")
16107
+ )) : /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.ratingRow }, [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ import_react5.default.createElement(
16068
16108
  import_react_native5.TouchableOpacity,
16069
16109
  {
16070
16110
  key: n,
16071
16111
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: n })),
16072
- style: [styles5.ratingBtn, criteriaResults[idx] === n && styles5.ratingBtnActive]
16112
+ style: [styles6.ratingBtn, criteriaResults[idx] === n && styles6.ratingBtnActive]
16073
16113
  },
16074
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.ratingBtnText, criteriaResults[idx] === n && styles5.ratingBtnTextActive] }, n)
16075
- ))))), template === "freeform" && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.freeformBox }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.freeformText }, "Review the area and note:"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.freeformBullet }, "\u2022 What works well"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.freeformBullet }, "\u2022 Issues or concerns"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.freeformBullet }, "\u2022 Suggestions"))), testCase.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.expectedBox }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.expectedLabel }, "\u2705 Expected Result"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.expectedText }, testCase.expectedResult)), testCase.targetRoute && onNavigate && /* @__PURE__ */ import_react5.default.createElement(
16114
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.ratingBtnText, criteriaResults[idx] === n && styles6.ratingBtnTextActive] }, n)
16115
+ ))))), template === "freeform" && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.freeformBox }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.freeformText }, "Review the area and note:"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.freeformBullet }, "\u2022 What works well"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.freeformBullet }, "\u2022 Issues or concerns"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.freeformBullet }, "\u2022 Suggestions"))), testCase.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.expectedBox }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.expectedLabel }, "\u2705 Expected Result"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.expectedText }, testCase.expectedResult)), testCase.targetRoute && onNavigate && /* @__PURE__ */ import_react5.default.createElement(
16076
16116
  import_react_native5.TouchableOpacity,
16077
16117
  {
16078
- style: styles5.navigateButton,
16118
+ style: styles6.navigateButton,
16079
16119
  onPress: () => {
16080
16120
  import_react_native5.Keyboard.dismiss();
16081
16121
  onNavigate(testCase.targetRoute);
16082
16122
  nav.closeWidget?.();
16083
16123
  }
16084
16124
  },
16085
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.navigateText }, "\u{1F9ED} Go to test location")
16086
- ), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles5.detailsToggle }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.detailsSection }, testCase.key && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.detailMeta }, testCase.key, " \xB7 ", testCase.priority, " \xB7 ", info.name), testCase.track && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.detailMeta }, testCase.track.icon, " ", testCase.track.name), testCase.description && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.detailDesc }, testCase.description), testCase.group && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.folderProgress }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.folderName }, "\u{1F4C1} ", testCase.group.name))), displayedAssignment.status === "passed" || displayedAssignment.status === "failed" || displayedAssignment.status === "skipped" || displayedAssignment.status === "blocked" ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [
16087
- styles5.completedBanner,
16088
- displayedAssignment.status === "passed" && styles5.completedBannerPass,
16089
- displayedAssignment.status === "failed" && styles5.completedBannerFail
16090
- ] }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.completedIcon }, displayedAssignment.status === "passed" ? "\u2705" : displayedAssignment.status === "failed" ? "\u274C" : displayedAssignment.status === "skipped" ? "\u23ED" : "\u{1F6AB}"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [
16091
- styles5.completedLabel,
16125
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.navigateText }, "\u{1F9ED} Go to test location")
16126
+ ), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles6.detailsToggle }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.detailsSection }, testCase.key && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.detailMeta }, testCase.key, " \xB7 ", testCase.priority, " \xB7 ", info.name), testCase.track && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.detailMeta }, testCase.track.icon, " ", testCase.track.name), testCase.description && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.detailDesc }, testCase.description), testCase.group && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.folderProgress }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.folderName }, "\u{1F4C1} ", testCase.group.name))), displayedAssignment.status === "in_progress" && nav.startMiniRunner && /* @__PURE__ */ import_react5.default.createElement(
16127
+ import_react_native5.TouchableOpacity,
16128
+ {
16129
+ style: styles6.startTestBtn,
16130
+ onPress: () => nav.startMiniRunner(displayedAssignment.id)
16131
+ },
16132
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.startTestText }, "\u25B6 Start Test")
16133
+ ), displayedAssignment.status === "passed" || displayedAssignment.status === "failed" || displayedAssignment.status === "skipped" || displayedAssignment.status === "blocked" ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [
16134
+ styles6.completedBanner,
16135
+ displayedAssignment.status === "passed" && styles6.completedBannerPass,
16136
+ displayedAssignment.status === "failed" && styles6.completedBannerFail
16137
+ ] }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.completedIcon }, displayedAssignment.status === "passed" ? "\u2705" : displayedAssignment.status === "failed" ? "\u274C" : displayedAssignment.status === "skipped" ? "\u23ED" : "\u{1F6AB}"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [
16138
+ styles6.completedLabel,
16092
16139
  displayedAssignment.status === "passed" && { color: colors.green },
16093
16140
  displayedAssignment.status === "failed" && { color: colors.redLight }
16094
- ] }, "Marked as ", displayedAssignment.status.charAt(0).toUpperCase() + displayedAssignment.status.slice(1))), !(displayedAssignment.isVerification && (displayedAssignment.status === "passed" || displayedAssignment.status === "failed")) && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles5.actionButtons, { marginTop: 4 }] }, /* @__PURE__ */ import_react5.default.createElement(
16141
+ ] }, "Marked as ", displayedAssignment.status.charAt(0).toUpperCase() + displayedAssignment.status.slice(1))), !(displayedAssignment.isVerification && (displayedAssignment.status === "passed" || displayedAssignment.status === "failed")) && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles6.actionButtons, { marginTop: 4 }] }, /* @__PURE__ */ import_react5.default.createElement(
16095
16142
  import_react_native5.TouchableOpacity,
16096
16143
  {
16097
- style: [styles5.actionBtn, styles5.reopenBtn, isSubmitting && { opacity: 0.5 }],
16144
+ style: [styles6.actionBtn, styles6.reopenBtn, isSubmitting && { opacity: 0.5 }],
16098
16145
  onPress: handleReopen,
16099
16146
  disabled: isSubmitting
16100
16147
  },
16101
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.reopenBtnText }, isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test")
16148
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.reopenBtnText }, isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test")
16102
16149
  ), displayedAssignment.status === "passed" && /* @__PURE__ */ import_react5.default.createElement(
16103
16150
  import_react_native5.TouchableOpacity,
16104
16151
  {
16105
- style: [styles5.actionBtn, styles5.failBtn, isSubmitting && { opacity: 0.5 }],
16152
+ style: [styles6.actionBtn, styles6.failBtn, isSubmitting && { opacity: 0.5 }],
16106
16153
  onPress: () => handleChangeResult("failed"),
16107
16154
  disabled: isSubmitting
16108
16155
  },
16109
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.failBtnText }, "Change to Fail")
16156
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.failBtnText }, "Change to Fail")
16110
16157
  ), displayedAssignment.status === "failed" && /* @__PURE__ */ import_react5.default.createElement(
16111
16158
  import_react_native5.TouchableOpacity,
16112
16159
  {
16113
- style: [styles5.actionBtn, styles5.passBtn, isSubmitting && { opacity: 0.5 }],
16160
+ style: [styles6.actionBtn, styles6.passBtn, isSubmitting && { opacity: 0.5 }],
16114
16161
  onPress: () => handleChangeResult("passed"),
16115
16162
  disabled: isSubmitting
16116
16163
  },
16117
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.passBtnText }, "Change to Pass")
16118
- ))) : /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.actionButtons }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles5.actionBtn, styles5.failBtn, isSubmitting && { opacity: 0.5 }], onPress: handleFail, disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.failBtnText }, isSubmitting ? displayedAssignment.isVerification ? "Reporting..." : "Failing..." : displayedAssignment.isVerification ? "\u2717 Still Broken" : "Fail")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles5.actionBtn, styles5.skipBtn, isSubmitting && { opacity: 0.5 }], onPress: () => setShowSkipModal(true), disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.skipBtnText }, "Skip")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles5.actionBtn, styles5.passBtn, isSubmitting && { opacity: 0.5 }], onPress: handlePass, disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.passBtnText }, isSubmitting ? displayedAssignment.isVerification ? "Verifying..." : "Passing..." : displayedAssignment.isVerification ? "\u2713 Fix Verified" : "Pass"))), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Modal, { visible: showSkipModal, transparent: true, animationType: "fade" }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.modalOverlay }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.modalContent }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.modalTitle }, "Skip this test?"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.modalSubtitle }, "Select a reason:"), [
16164
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.passBtnText }, "Change to Pass")
16165
+ ))) : /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.actionButtons }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles6.actionBtn, styles6.failBtn, isSubmitting && { opacity: 0.5 }], onPress: handleFail, disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.failBtnText }, isSubmitting ? displayedAssignment.isVerification ? "Reporting..." : "Failing..." : displayedAssignment.isVerification ? "\u2717 Still Broken" : "Fail")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles6.actionBtn, styles6.skipBtn, isSubmitting && { opacity: 0.5 }], onPress: () => setShowSkipModal(true), disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipBtnText }, "Skip")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles6.actionBtn, styles6.passBtn, isSubmitting && { opacity: 0.5 }], onPress: handlePass, disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.passBtnText }, isSubmitting ? displayedAssignment.isVerification ? "Verifying..." : "Passing..." : displayedAssignment.isVerification ? "\u2713 Fix Verified" : "Pass"))), feedbackToastAssignmentId && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Animated.View, { style: [styles6.passToast, { transform: [{ translateY: toastSlideAnim }] }] }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.passToastContent }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.passToastIcon }, "\u2705"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.passToastText }, "Test passed!")), /* @__PURE__ */ import_react5.default.createElement(
16166
+ import_react_native5.TouchableOpacity,
16167
+ {
16168
+ style: styles6.passToastButton,
16169
+ onPress: () => {
16170
+ if (toastTimerRef.current) clearTimeout(toastTimerRef.current);
16171
+ const toastId = feedbackToastAssignmentId;
16172
+ setFeedbackToastAssignmentId(null);
16173
+ nav.push({ name: "TEST_FEEDBACK", status: "passed", assignmentId: toastId });
16174
+ }
16175
+ },
16176
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.passToastButtonText }, "Rate this test")
16177
+ )), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Modal, { visible: showSkipModal, transparent: true, animationType: "fade" }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.modalOverlay }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.modalContent }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.modalTitle }, "Skip this test?"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.modalSubtitle }, "Select a reason:"), [
16119
16178
  { reason: "blocked", label: "\u{1F6AB} Blocked by a bug" },
16120
16179
  { reason: "not_ready", label: "\u{1F6A7} Feature not ready" },
16121
16180
  { reason: "dependency", label: "\u{1F517} Needs another test first" },
@@ -16124,32 +16183,32 @@ function TestDetailScreen({ testId, nav }) {
16124
16183
  import_react_native5.TouchableOpacity,
16125
16184
  {
16126
16185
  key: reason,
16127
- style: [styles5.skipOption, selectedSkipReason === reason && styles5.skipOptionActive],
16186
+ style: [styles6.skipOption, selectedSkipReason === reason && styles6.skipOptionActive],
16128
16187
  onPress: () => setSelectedSkipReason(reason)
16129
16188
  },
16130
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.skipOptionText, selectedSkipReason === reason && styles5.skipOptionTextActive] }, label)
16189
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.skipOptionText, selectedSkipReason === reason && styles6.skipOptionTextActive] }, label)
16131
16190
  )), /* @__PURE__ */ import_react5.default.createElement(
16132
16191
  import_react_native5.TextInput,
16133
16192
  {
16134
- style: styles5.skipNotes,
16193
+ style: styles6.skipNotes,
16135
16194
  value: skipNotes,
16136
16195
  onChangeText: setSkipNotes,
16137
16196
  placeholder: "Additional notes (optional)",
16138
16197
  placeholderTextColor: colors.textMuted,
16139
16198
  multiline: true
16140
16199
  }
16141
- ), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles5.skipActions }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: styles5.skipCancel, onPress: () => {
16200
+ ), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles6.skipActions }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: styles6.skipCancel, onPress: () => {
16142
16201
  setShowSkipModal(false);
16143
16202
  setSelectedSkipReason(null);
16144
16203
  setSkipNotes("");
16145
- } }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.skipCancelText }, "Cancel")), /* @__PURE__ */ import_react5.default.createElement(
16204
+ } }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipCancelText }, "Cancel")), /* @__PURE__ */ import_react5.default.createElement(
16146
16205
  import_react_native5.TouchableOpacity,
16147
16206
  {
16148
- style: [styles5.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16207
+ style: [styles6.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16149
16208
  onPress: handleSkip,
16150
16209
  disabled: !selectedSkipReason || skipping
16151
16210
  },
16152
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.skipConfirmText }, skipping ? "Skipping..." : "Skip Test")
16211
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipConfirmText }, skipping ? "Skipping..." : "Skip Test")
16153
16212
  ))))));
16154
16213
  }
16155
16214
  function createStyles2() {
@@ -16252,7 +16311,17 @@ function createStyles2() {
16252
16311
  skipCancel: { flex: 1, paddingVertical: 12, borderRadius: 10, alignItems: "center", backgroundColor: colors.card },
16253
16312
  skipCancelText: { fontSize: 14, color: colors.textSecondary },
16254
16313
  skipConfirm: { flex: 1, paddingVertical: 12, borderRadius: 10, alignItems: "center", backgroundColor: colors.yellow },
16255
- skipConfirmText: { fontSize: 14, fontWeight: "600", color: colors.onBright }
16314
+ skipConfirmText: { fontSize: 14, fontWeight: "600", color: colors.onBright },
16315
+ // Start test button
16316
+ startTestBtn: { backgroundColor: colors.blueDark, borderRadius: 10, padding: 12, borderWidth: 1, borderColor: colors.blue, alignItems: "center", marginBottom: 8 },
16317
+ startTestText: { fontSize: 14, fontWeight: "600", color: colors.blueLight },
16318
+ // Instant pass toast
16319
+ passToast: { position: "absolute", bottom: 16, left: 16, right: 16, flexDirection: "row", alignItems: "center", justifyContent: "space-between", backgroundColor: colors.greenDark, borderWidth: 1, borderColor: colors.green, borderRadius: 10, paddingVertical: 10, paddingHorizontal: 14, zIndex: 1e4 },
16320
+ passToastContent: { flexDirection: "row", alignItems: "center", gap: 8 },
16321
+ passToastIcon: { fontSize: 14 },
16322
+ passToastText: { fontSize: 13, fontWeight: "600", color: colors.green },
16323
+ passToastButton: { borderWidth: 1, borderColor: colors.green, borderRadius: 8, paddingVertical: 4, paddingHorizontal: 10 },
16324
+ passToastButtonText: { fontSize: 12, fontWeight: "500", color: colors.green }
16256
16325
  });
16257
16326
  }
16258
16327
 
@@ -16261,7 +16330,7 @@ var import_react6 = __toESM(require("react"));
16261
16330
  var import_react_native6 = require("react-native");
16262
16331
  function TestListScreen({ nav }) {
16263
16332
  const { assignments, currentAssignment, refreshAssignments, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
16264
- const styles5 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16333
+ const styles6 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16265
16334
  const [filter, setFilter] = (0, import_react6.useState)("all");
16266
16335
  const [roleFilter, setRoleFilter] = (0, import_react6.useState)(null);
16267
16336
  const [trackFilter, setTrackFilter] = (0, import_react6.useState)(null);
@@ -16353,18 +16422,18 @@ function TestListScreen({ nav }) {
16353
16422
  return true;
16354
16423
  }, [platformFilter, roleFilter, trackFilter, searchQuery, filter]);
16355
16424
  if (isLoading) return /* @__PURE__ */ import_react6.default.createElement(TestListScreenSkeleton, null);
16356
- return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, null, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.filterBar }, [
16425
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, null, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.filterBar }, [
16357
16426
  { key: "all", label: "All", count: assignments.length },
16358
16427
  { key: "todo", label: "To Do", count: assignments.filter((a) => !a.isVerification && (a.status === "pending" || a.status === "in_progress" || a.status === "failed")).length },
16359
16428
  { key: "retest", label: "Retest", count: assignments.filter((a) => !!a.isVerification && (a.status === "pending" || a.status === "in_progress")).length },
16360
16429
  { key: "done", label: "Done", count: assignments.filter((a) => a.status === "passed" || a.status === "skipped" || a.status === "blocked").length }
16361
- ].map((f) => /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { key: f.key, style: [styles5.filterBtn, filter === f.key && styles5.filterBtnActive], onPress: () => setFilter(f.key) }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.filterBtnText, filter === f.key && styles5.filterBtnTextActive] }, f.label, " (", f.count, ")")))), availableRoles.length >= 2 && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.roleSection }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles5.roleBar }, /* @__PURE__ */ import_react6.default.createElement(
16430
+ ].map((f) => /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { key: f.key, style: [styles6.filterBtn, filter === f.key && styles6.filterBtnActive], onPress: () => setFilter(f.key) }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.filterBtnText, filter === f.key && styles6.filterBtnTextActive] }, f.label, " (", f.count, ")")))), availableRoles.length >= 2 && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.roleSection }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles6.roleBar }, /* @__PURE__ */ import_react6.default.createElement(
16362
16431
  import_react_native6.TouchableOpacity,
16363
16432
  {
16364
- style: [styles5.roleBtn, !roleFilter && styles5.roleBtnActive],
16433
+ style: [styles6.roleBtn, !roleFilter && styles6.roleBtnActive],
16365
16434
  onPress: () => setRoleFilter(null)
16366
16435
  },
16367
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.roleBtnText, !roleFilter && styles5.roleBtnTextActive] }, "All Roles")
16436
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.roleBtnText, !roleFilter && styles6.roleBtnTextActive] }, "All Roles")
16368
16437
  ), availableRoles.map((role) => {
16369
16438
  const isActive = roleFilter === role.id;
16370
16439
  return /* @__PURE__ */ import_react6.default.createElement(
@@ -16372,30 +16441,30 @@ function TestListScreen({ nav }) {
16372
16441
  {
16373
16442
  key: role.id,
16374
16443
  style: [
16375
- styles5.roleBtn,
16444
+ styles6.roleBtn,
16376
16445
  isActive && { backgroundColor: role.color + "20", borderColor: role.color + "60", borderWidth: 1 }
16377
16446
  ],
16378
16447
  onPress: () => setRoleFilter(isActive ? null : role.id)
16379
16448
  },
16380
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles5.roleDot, { backgroundColor: role.color }] }),
16381
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.roleBtnText, isActive && { color: role.color, fontWeight: "600" }] }, role.name)
16449
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles6.roleDot, { backgroundColor: role.color }] }),
16450
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.roleBtnText, isActive && { color: role.color, fontWeight: "600" }] }, role.name)
16382
16451
  );
16383
- })), selectedRole?.loginHint && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles5.loginHint, { backgroundColor: selectedRole.color + "10", borderColor: selectedRole.color + "30" }] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.loginHintText }, "Log in as: ", selectedRole.loginHint))), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.searchContainer }, /* @__PURE__ */ import_react6.default.createElement(
16452
+ })), selectedRole?.loginHint && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles6.loginHint, { backgroundColor: selectedRole.color + "10", borderColor: selectedRole.color + "30" }] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.loginHintText }, "Log in as: ", selectedRole.loginHint))), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.searchContainer }, /* @__PURE__ */ import_react6.default.createElement(
16384
16453
  import_react_native6.TextInput,
16385
16454
  {
16386
16455
  value: searchQuery,
16387
16456
  onChangeText: setSearchQuery,
16388
16457
  placeholder: "Search tests...",
16389
16458
  placeholderTextColor: colors.textMuted,
16390
- style: styles5.searchInput
16459
+ style: styles6.searchInput
16391
16460
  }
16392
- )), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles5.platformBar }, /* @__PURE__ */ import_react6.default.createElement(
16461
+ )), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles6.platformBar }, /* @__PURE__ */ import_react6.default.createElement(
16393
16462
  import_react_native6.TouchableOpacity,
16394
16463
  {
16395
- style: [styles5.platformBtn, !platformFilter && styles5.platformBtnActive],
16464
+ style: [styles6.platformBtn, !platformFilter && styles6.platformBtnActive],
16396
16465
  onPress: () => setPlatformFilter(null)
16397
16466
  },
16398
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.platformBtnText, !platformFilter && styles5.platformBtnTextActive] }, "All")
16467
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.platformBtnText, !platformFilter && styles6.platformBtnTextActive] }, "All")
16399
16468
  ), [
16400
16469
  { key: "web", label: "Web", icon: "\u{1F310}" },
16401
16470
  { key: "ios", label: "iOS", icon: "\u{1F4F1}" },
@@ -16407,32 +16476,32 @@ function TestListScreen({ nav }) {
16407
16476
  {
16408
16477
  key: p.key,
16409
16478
  style: [
16410
- styles5.platformBtn,
16479
+ styles6.platformBtn,
16411
16480
  isActive && { backgroundColor: colors.blue + "20", borderColor: colors.blue + "60", borderWidth: 1 }
16412
16481
  ],
16413
16482
  onPress: () => setPlatformFilter(isActive ? null : p.key)
16414
16483
  },
16415
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.platformBtnText, isActive && { color: colors.blue, fontWeight: "600" }] }, p.icon, " ", p.label)
16484
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.platformBtnText, isActive && { color: colors.blue, fontWeight: "600" }] }, p.icon, " ", p.label)
16416
16485
  );
16417
- })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.trackSortRow }, availableTracks.length >= 2 && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: { flex: 1 } }, /* @__PURE__ */ import_react6.default.createElement(
16486
+ })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.trackSortRow }, availableTracks.length >= 2 && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: { flex: 1 } }, /* @__PURE__ */ import_react6.default.createElement(
16418
16487
  import_react_native6.TouchableOpacity,
16419
16488
  {
16420
- style: [styles5.trackBtn, !trackFilter && styles5.trackBtnActive],
16489
+ style: [styles6.trackBtn, !trackFilter && styles6.trackBtnActive],
16421
16490
  onPress: () => setTrackFilter(null)
16422
16491
  },
16423
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.trackBtnText, !trackFilter && styles5.trackBtnTextActive] }, "All Tracks")
16492
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.trackBtnText, !trackFilter && styles6.trackBtnTextActive] }, "All Tracks")
16424
16493
  ), availableTracks.map((track) => {
16425
16494
  const isActive = trackFilter === track.id;
16426
16495
  return /* @__PURE__ */ import_react6.default.createElement(
16427
16496
  import_react_native6.TouchableOpacity,
16428
16497
  {
16429
16498
  key: track.id,
16430
- style: [styles5.trackBtn, isActive && { backgroundColor: track.color + "20", borderColor: track.color + "60", borderWidth: 1 }],
16499
+ style: [styles6.trackBtn, isActive && { backgroundColor: track.color + "20", borderColor: track.color + "60", borderWidth: 1 }],
16431
16500
  onPress: () => setTrackFilter(isActive ? null : track.id)
16432
16501
  },
16433
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.trackBtnText, isActive && { color: track.color, fontWeight: "600" }] }, track.icon, " ", track.name)
16502
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.trackBtnText, isActive && { color: track.color, fontWeight: "600" }] }, track.icon, " ", track.name)
16434
16503
  );
16435
- })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.sortGroup }, [
16504
+ })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.sortGroup }, [
16436
16505
  { key: "priority", label: "\u2195 Priority" },
16437
16506
  { key: "recent", label: "\u{1F550} Recent" },
16438
16507
  { key: "alpha", label: "A-Z" }
@@ -16440,41 +16509,41 @@ function TestListScreen({ nav }) {
16440
16509
  import_react_native6.TouchableOpacity,
16441
16510
  {
16442
16511
  key: s2.key,
16443
- style: [styles5.sortBtn, sortMode === s2.key && styles5.sortBtnActive],
16512
+ style: [styles6.sortBtn, sortMode === s2.key && styles6.sortBtnActive],
16444
16513
  onPress: () => setSortMode(s2.key)
16445
16514
  },
16446
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.sortBtnText, sortMode === s2.key && styles5.sortBtnTextActive] }, s2.label)
16515
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.sortBtnText, sortMode === s2.key && styles6.sortBtnTextActive] }, s2.label)
16447
16516
  )))), groupedAssignments.map((folder) => {
16448
16517
  const folderId = folder.group?.id || "ungrouped";
16449
16518
  const isCollapsed = collapsedFolders.has(folderId);
16450
16519
  const filtered = folder.assignments.filter(filterAssignment);
16451
16520
  if (filtered.length === 0 && filter !== "all") return null;
16452
- return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { key: folderId, style: styles5.folder }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { style: styles5.folderHeader, onPress: () => toggleFolder(folderId) }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.folderToggle }, isCollapsed ? "\u25B6" : "\u25BC"), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.folderName, numberOfLines: 1 }, folder.group?.name || "Ungrouped"), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.folderProgress }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles5.folderProgressFill, { width: `${folder.stats.total > 0 ? Math.round((folder.stats.passed + folder.stats.failed) / folder.stats.total * 100) : 0}%` }] })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.folderCount }, folder.stats.passed + folder.stats.failed, "/", folder.stats.total)), !isCollapsed && filtered.map((assignment) => {
16521
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { key: folderId, style: styles6.folder }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { style: styles6.folderHeader, onPress: () => toggleFolder(folderId) }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.folderToggle }, isCollapsed ? "\u25B6" : "\u25BC"), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.folderName, numberOfLines: 1 }, folder.group?.name || "Ungrouped"), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.folderProgress }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles6.folderProgressFill, { width: `${folder.stats.total > 0 ? Math.round((folder.stats.passed + folder.stats.failed) / folder.stats.total * 100) : 0}%` }] })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.folderCount }, folder.stats.passed + folder.stats.failed, "/", folder.stats.total)), !isCollapsed && filtered.map((assignment) => {
16453
16522
  const badge = getStatusBadge(assignment.status);
16454
16523
  const isCurrent = currentAssignment?.id === assignment.id;
16455
16524
  return /* @__PURE__ */ import_react6.default.createElement(
16456
16525
  import_react_native6.TouchableOpacity,
16457
16526
  {
16458
16527
  key: assignment.id,
16459
- style: [styles5.testItem, isCurrent && styles5.testItemCurrent],
16528
+ style: [styles6.testItem, isCurrent && styles6.testItemCurrent],
16460
16529
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
16461
16530
  },
16462
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.testBadge }, badge.icon),
16463
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.testInfo }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.testMetaRow }, assignment.isVerification && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16464
- styles5.retestTag,
16531
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.testBadge }, badge.icon),
16532
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.testInfo }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.testMetaRow }, assignment.isVerification && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16533
+ styles6.retestTag,
16465
16534
  assignment.status === "passed" && { backgroundColor: colors.greenDark, borderColor: colors.greenBorder }
16466
16535
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16467
- styles5.retestTagText,
16536
+ styles6.retestTagText,
16468
16537
  assignment.status === "passed" && { color: colors.greenLight }
16469
- ] }, assignment.status === "passed" ? "Verified" : "Retest")), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.testMeta }, assignment.testCase.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles5.roleBadgeRow }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.testMeta }, " \xB7 "), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles5.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles5.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name)))),
16538
+ ] }, assignment.status === "passed" ? "Verified" : "Retest")), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.testMeta }, assignment.testCase.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.roleBadgeRow }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.testMeta }, " \xB7 "), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles6.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name)))),
16470
16539
  /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16471
- styles5.statusPill,
16540
+ styles6.statusPill,
16472
16541
  {
16473
16542
  backgroundColor: assignment.status === "passed" ? colors.greenDark : assignment.status === "failed" ? colors.redSurface : assignment.status === "in_progress" ? colors.blueSurface : colors.card,
16474
16543
  borderColor: assignment.status === "passed" ? colors.greenBorder : assignment.status === "failed" ? colors.redDark : assignment.status === "in_progress" ? colors.blueDark : colors.border
16475
16544
  }
16476
16545
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16477
- styles5.statusPillText,
16546
+ styles6.statusPillText,
16478
16547
  {
16479
16548
  color: assignment.status === "passed" ? colors.greenMed : assignment.status === "failed" ? colors.redMed : assignment.status === "in_progress" ? colors.blueLight : colors.zincLight
16480
16549
  }
@@ -16484,12 +16553,12 @@ function TestListScreen({ nav }) {
16484
16553
  }), dashboardUrl && /* @__PURE__ */ import_react6.default.createElement(
16485
16554
  import_react_native6.TouchableOpacity,
16486
16555
  {
16487
- style: styles5.dashboardLink,
16556
+ style: styles6.dashboardLink,
16488
16557
  onPress: () => import_react_native6.Linking.openURL(`${dashboardUrl}/test-cases`),
16489
16558
  activeOpacity: 0.7
16490
16559
  },
16491
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.dashboardLinkText }, "\u{1F310}", " Manage on Dashboard ", "\u2192")
16492
- ), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { style: styles5.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.refreshText }, "\u21BB", " Refresh")));
16560
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.dashboardLinkText }, "\u{1F310}", " Manage on Dashboard ", "\u2192")
16561
+ ), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { style: styles6.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles6.refreshText }, "\u21BB", " Refresh")));
16493
16562
  }
16494
16563
  function createStyles3() {
16495
16564
  return import_react_native6.StyleSheet.create({
@@ -16809,7 +16878,7 @@ var styles2 = import_react_native8.StyleSheet.create({
16809
16878
  // src/widget/screens/TestFeedbackScreen.tsx
16810
16879
  function TestFeedbackScreen({ status, assignmentId, nav }) {
16811
16880
  const { client, assignments, refreshAssignments, uploadImage, widgetColorScheme } = useBugBear();
16812
- const styles5 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16881
+ const styles6 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16813
16882
  const images = useImageAttachments(uploadImage, 3, "screenshots");
16814
16883
  const [rating, setRating] = (0, import_react10.useState)(5);
16815
16884
  const [note, setNote] = (0, import_react10.useState)("");
@@ -16869,7 +16938,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16869
16938
  }
16870
16939
  }
16871
16940
  };
16872
- return /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles5.container }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles5.header }, status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed"), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles5.subheader }, "Rate this test case"), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles5.starRow }, [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { key: n, onPress: () => setRating(n), style: styles5.starButton }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles5.star, n <= rating && styles5.starActive] }, n <= rating ? "\u2605" : "\u2606")))), showFlags && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles5.flagsSection }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles5.flagsLabel }, "What could be improved?"), [
16941
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles6.container }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles6.header }, status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed"), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles6.subheader }, "Rate this test case"), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles6.starRow }, [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { key: n, onPress: () => setRating(n), style: styles6.starButton }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles6.star, n <= rating && styles6.starActive] }, n <= rating ? "\u2605" : "\u2606")))), showFlags && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles6.flagsSection }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles6.flagsLabel }, "What could be improved?"), [
16873
16942
  { key: "isOutdated", label: "Test is outdated" },
16874
16943
  { key: "needsMoreDetail", label: "Needs more detail" },
16875
16944
  { key: "stepsUnclear", label: "Steps are unclear" },
@@ -16878,15 +16947,15 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16878
16947
  import_react_native9.TouchableOpacity,
16879
16948
  {
16880
16949
  key,
16881
- style: [styles5.flagItem, flags[key] && styles5.flagItemActive],
16950
+ style: [styles6.flagItem, flags[key] && styles6.flagItemActive],
16882
16951
  onPress: () => setFlags((prev) => ({ ...prev, [key]: !prev[key] }))
16883
16952
  },
16884
- /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: [styles5.flagCheck, flags[key] && styles5.flagCheckActive] }, flags[key] && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles5.flagCheckmark }, "\u2713")),
16885
- /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles5.flagText, flags[key] && styles5.flagTextActive] }, label)
16953
+ /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: [styles6.flagCheck, flags[key] && styles6.flagCheckActive] }, flags[key] && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles6.flagCheckmark }, "\u2713")),
16954
+ /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles6.flagText, flags[key] && styles6.flagTextActive] }, label)
16886
16955
  ))), /* @__PURE__ */ import_react10.default.createElement(
16887
16956
  import_react_native9.TextInput,
16888
16957
  {
16889
- style: styles5.noteInput,
16958
+ style: styles6.noteInput,
16890
16959
  value: note,
16891
16960
  onChangeText: setNote,
16892
16961
  placeholder: "Add a note (optional)",
@@ -16903,7 +16972,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16903
16972
  onRemove: images.removeImage,
16904
16973
  label: "Screenshots (optional)"
16905
16974
  }
16906
- ), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles5.actions }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { style: styles5.skipButton, onPress: handleSkip }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles5.skipText }, "Skip")), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { style: [shared.primaryButton, { flex: 2, opacity: submitting || images.isUploading ? 0.5 : 1 }], onPress: handleSubmit, disabled: submitting || images.isUploading }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading..." : submitting ? "Submitting..." : "Submit"))));
16975
+ ), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles6.actions }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { style: styles6.skipButton, onPress: handleSkip }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles6.skipText }, "Skip")), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { style: [shared.primaryButton, { flex: 2, opacity: submitting || images.isUploading ? 0.5 : 1 }], onPress: handleSubmit, disabled: submitting || images.isUploading }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading..." : submitting ? "Submitting..." : "Submit"))));
16907
16976
  }
16908
16977
  function createStyles4() {
16909
16978
  return import_react_native9.StyleSheet.create({
@@ -17092,7 +17161,7 @@ var styles3 = import_react_native10.StyleSheet.create({
17092
17161
  // src/widget/screens/ReportScreen.tsx
17093
17162
  function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17094
17163
  const { client, getDeviceInfo, uploadImage, refreshAssignments, widgetColorScheme } = useBugBear();
17095
- const styles5 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17164
+ const styles6 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17096
17165
  const [reportType, setReportType] = (0, import_react12.useState)(prefill?.type || "bug");
17097
17166
  const [severity, setSeverity] = (0, import_react12.useState)("medium");
17098
17167
  const [category, setCategory] = (0, import_react12.useState)(null);
@@ -17198,7 +17267,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17198
17267
  submittingRef.current = false;
17199
17268
  }
17200
17269
  };
17201
- return /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, null, isRetestFailure ? /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.retestBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.retestTitle }, "Bug Still Present"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.retestSubtitle }, "The fix did not resolve this issue"))), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.severityRow }, [
17270
+ return /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, null, isRetestFailure ? /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.retestBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.retestTitle }, "Bug Still Present"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.retestSubtitle }, "The fix did not resolve this issue"))), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.severityRow }, [
17202
17271
  { sev: "critical", color: colors.red },
17203
17272
  { sev: "high", color: colors.orange },
17204
17273
  { sev: "medium", color: colors.yellow },
@@ -17207,14 +17276,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17207
17276
  import_react_native11.TouchableOpacity,
17208
17277
  {
17209
17278
  key: sev,
17210
- style: [styles5.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17279
+ style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17211
17280
  onPress: () => setSeverity(sev)
17212
17281
  },
17213
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles5.sevText, severity === sev && { color }] }, sev)
17214
- )))), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Category (optional)"), /* @__PURE__ */ import_react12.default.createElement(CategoryPicker, { value: category, onChange: setCategory, optional: true })), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What went wrong?"), /* @__PURE__ */ import_react12.default.createElement(
17282
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles6.sevText, severity === sev && { color }] }, sev)
17283
+ )))), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Category (optional)"), /* @__PURE__ */ import_react12.default.createElement(CategoryPicker, { value: category, onChange: setCategory, optional: true })), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What went wrong?"), /* @__PURE__ */ import_react12.default.createElement(
17215
17284
  import_react_native11.TextInput,
17216
17285
  {
17217
- style: styles5.descInput,
17286
+ style: styles6.descInput,
17218
17287
  value: description,
17219
17288
  onChangeText: setDescription,
17220
17289
  placeholder: "Describe what you observed. What still doesn't work?",
@@ -17267,15 +17336,15 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17267
17336
  onRemove: images.removeImage,
17268
17337
  label: "Attachments (optional)"
17269
17338
  }
17270
- ), error && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.errorBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.errorText }, error)), /* @__PURE__ */ import_react12.default.createElement(
17339
+ ), error && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.errorBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.errorText }, error)), /* @__PURE__ */ import_react12.default.createElement(
17271
17340
  import_react_native11.TouchableOpacity,
17272
17341
  {
17273
- style: [shared.primaryButton, styles5.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
17342
+ style: [shared.primaryButton, styles6.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
17274
17343
  onPress: handleSubmit,
17275
17344
  disabled: !description.trim() || submitting || images.isUploading
17276
17345
  },
17277
17346
  /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest")
17278
- )) : /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What are you reporting?"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.typeRow }, [
17347
+ )) : /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What are you reporting?"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.typeRow }, [
17279
17348
  { type: "bug", label: "Bug", icon: "\u{1F41B}" },
17280
17349
  { type: "feedback", label: "Feedback", icon: "\u{1F4A1}" },
17281
17350
  { type: "suggestion", label: "Idea", icon: "\u2728" }
@@ -17283,12 +17352,12 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17283
17352
  import_react_native11.TouchableOpacity,
17284
17353
  {
17285
17354
  key: type,
17286
- style: [styles5.typeCard, reportType === type && styles5.typeCardActive],
17355
+ style: [styles6.typeCard, reportType === type && styles6.typeCardActive],
17287
17356
  onPress: () => setReportType(type)
17288
17357
  },
17289
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.typeIcon }, icon),
17290
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles5.typeLabel, reportType === type && styles5.typeLabelActive] }, label)
17291
- ))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.severityRow }, [
17358
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.typeIcon }, icon),
17359
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles6.typeLabel, reportType === type && styles6.typeLabelActive] }, label)
17360
+ ))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.severityRow }, [
17292
17361
  { sev: "critical", color: colors.red },
17293
17362
  { sev: "high", color: colors.orange },
17294
17363
  { sev: "medium", color: colors.yellow },
@@ -17297,14 +17366,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17297
17366
  import_react_native11.TouchableOpacity,
17298
17367
  {
17299
17368
  key: sev,
17300
- style: [styles5.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17369
+ style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17301
17370
  onPress: () => setSeverity(sev)
17302
17371
  },
17303
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles5.sevText, severity === sev && { color }] }, sev)
17304
- )))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Category (optional)"), /* @__PURE__ */ import_react12.default.createElement(CategoryPicker, { value: category, onChange: setCategory, optional: true })), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What happened?"), /* @__PURE__ */ import_react12.default.createElement(
17372
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles6.sevText, severity === sev && { color }] }, sev)
17373
+ )))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Category (optional)"), /* @__PURE__ */ import_react12.default.createElement(CategoryPicker, { value: category, onChange: setCategory, optional: true })), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What happened?"), /* @__PURE__ */ import_react12.default.createElement(
17305
17374
  import_react_native11.TextInput,
17306
17375
  {
17307
- style: styles5.descInput,
17376
+ style: styles6.descInput,
17308
17377
  value: description,
17309
17378
  onChangeText: setDescription,
17310
17379
  placeholder: "Describe the issue...",
@@ -17347,16 +17416,16 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17347
17416
  issue.title
17348
17417
  ),
17349
17418
  /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: { fontSize: 11, color: colors.textMuted } }, issue.status)
17350
- )))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Which screen?"), /* @__PURE__ */ import_react12.default.createElement(
17419
+ )))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Which screen?"), /* @__PURE__ */ import_react12.default.createElement(
17351
17420
  import_react_native11.TextInput,
17352
17421
  {
17353
- style: styles5.screenInput,
17422
+ style: styles6.screenInput,
17354
17423
  value: affectedScreen,
17355
17424
  onChangeText: setAffectedScreen,
17356
17425
  placeholder: "e.g. Reservations, Settings...",
17357
17426
  placeholderTextColor: colors.textMuted
17358
17427
  }
17359
- ), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.screenHint }, "Which screen or area was the bug on? (optional)")), /* @__PURE__ */ import_react12.default.createElement(
17428
+ ), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.screenHint }, "Which screen or area was the bug on? (optional)")), /* @__PURE__ */ import_react12.default.createElement(
17360
17429
  ImagePickerButtons,
17361
17430
  {
17362
17431
  images: images.images,
@@ -17366,7 +17435,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17366
17435
  onRemove: images.removeImage,
17367
17436
  label: "Screenshots (optional)"
17368
17437
  }
17369
- ), error && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles5.errorBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.errorText }, error)), /* @__PURE__ */ import_react12.default.createElement(
17438
+ ), error && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles6.errorBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles6.errorText }, error)), /* @__PURE__ */ import_react12.default.createElement(
17370
17439
  import_react_native11.TouchableOpacity,
17371
17440
  {
17372
17441
  style: [shared.primaryButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
@@ -17406,12 +17475,12 @@ var import_react13 = __toESM(require("react"));
17406
17475
  var import_react_native12 = require("react-native");
17407
17476
  function ReportSuccessScreen({ nav }) {
17408
17477
  const { widgetColorScheme } = useBugBear();
17409
- const styles5 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17478
+ const styles6 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17410
17479
  (0, import_react13.useEffect)(() => {
17411
17480
  const timer = setTimeout(() => nav.reset(), 2e3);
17412
17481
  return () => clearTimeout(timer);
17413
17482
  }, [nav]);
17414
- return /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles5.container }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles5.emoji }, "\u{1F389}"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles5.title }, "Report submitted!"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles5.subtitle }, "Thank you for your feedback"));
17483
+ return /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles6.container }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles6.emoji }, "\u{1F389}"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles6.title }, "Report submitted!"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles6.subtitle }, "Thank you for your feedback"));
17415
17484
  }
17416
17485
  function createStyles6() {
17417
17486
  return import_react_native12.StyleSheet.create({
@@ -17427,7 +17496,7 @@ var import_react14 = __toESM(require("react"));
17427
17496
  var import_react_native13 = require("react-native");
17428
17497
  function MessageListScreen({ nav }) {
17429
17498
  const { threads, unreadCount, refreshThreads, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
17430
- const styles5 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17499
+ const styles6 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17431
17500
  const [activeFilter, setActiveFilter] = (0, import_react14.useState)("all");
17432
17501
  const filteredThreads = threads.filter((thread) => {
17433
17502
  if (activeFilter === "all") return true;
@@ -17445,10 +17514,10 @@ function MessageListScreen({ nav }) {
17445
17514
  return /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, null, /* @__PURE__ */ import_react14.default.createElement(
17446
17515
  import_react_native13.TouchableOpacity,
17447
17516
  {
17448
- style: styles5.newMsgButton,
17517
+ style: styles6.newMsgButton,
17449
17518
  onPress: () => nav.push({ name: "COMPOSE_MESSAGE" })
17450
17519
  },
17451
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.newMsgText }, "\u2709\uFE0F New Message")
17520
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.newMsgText }, "\u2709\uFE0F New Message")
17452
17521
  ), /* @__PURE__ */ import_react14.default.createElement(
17453
17522
  import_react_native13.ScrollView,
17454
17523
  {
@@ -17493,20 +17562,20 @@ function MessageListScreen({ nav }) {
17493
17562
  import_react_native13.TouchableOpacity,
17494
17563
  {
17495
17564
  key: thread.id,
17496
- style: [styles5.threadItem, thread.unreadCount > 0 && styles5.threadItemUnread],
17565
+ style: [styles6.threadItem, thread.unreadCount > 0 && styles6.threadItemUnread],
17497
17566
  onPress: () => nav.push({ name: "THREAD_DETAIL", thread })
17498
17567
  },
17499
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles5.threadLeft }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.threadIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles5.threadInfo }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles5.threadTitleRow }, thread.isPinned && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.pinIcon }, "\u{1F4CC}"), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.threadSubject, numberOfLines: 1 }, thread.subject || "No subject")), thread.threadType === "report" && thread.reporterName && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: { fontSize: 11, color: colors.textMuted } }, "Reported by: ", thread.reporterName), thread.lastMessage && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.threadPreview, numberOfLines: 1 }, thread.lastMessage.senderName, ": ", thread.lastMessage.content))),
17500
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles5.threadRight }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.threadTime }, formatRelativeTime(thread.lastMessageAt)), thread.unreadCount > 0 && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles5.unreadBadge }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.unreadText }, thread.unreadCount)), thread.priority !== "normal" && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: [styles5.priorityDot, { backgroundColor: getPriorityColor(thread.priority) }] }))
17568
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles6.threadLeft }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.threadIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles6.threadInfo }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles6.threadTitleRow }, thread.isPinned && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.pinIcon }, "\u{1F4CC}"), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.threadSubject, numberOfLines: 1 }, thread.subject || "No subject")), thread.threadType === "report" && thread.reporterName && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: { fontSize: 11, color: colors.textMuted } }, "Reported by: ", thread.reporterName), thread.lastMessage && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.threadPreview, numberOfLines: 1 }, thread.lastMessage.senderName, ": ", thread.lastMessage.content))),
17569
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles6.threadRight }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.threadTime }, formatRelativeTime(thread.lastMessageAt)), thread.unreadCount > 0 && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles6.unreadBadge }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.unreadText }, thread.unreadCount)), thread.priority !== "normal" && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: [styles6.priorityDot, { backgroundColor: getPriorityColor(thread.priority) }] }))
17501
17570
  ))), dashboardUrl && /* @__PURE__ */ import_react14.default.createElement(
17502
17571
  import_react_native13.TouchableOpacity,
17503
17572
  {
17504
- style: styles5.dashboardLink,
17573
+ style: styles6.dashboardLink,
17505
17574
  onPress: () => import_react_native13.Linking.openURL(`${dashboardUrl}/discussions`),
17506
17575
  activeOpacity: 0.7
17507
17576
  },
17508
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
17509
- ), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles5.footer }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.footerText }, filteredThreads.length, " thread", filteredThreads.length !== 1 ? "s" : "", " \xB7 ", unreadCount, " unread"), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.TouchableOpacity, { onPress: refreshThreads }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.refreshText }, "\u21BB Refresh"))));
17577
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
17578
+ ), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles6.footer }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.footerText }, filteredThreads.length, " thread", filteredThreads.length !== 1 ? "s" : "", " \xB7 ", unreadCount, " unread"), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.TouchableOpacity, { onPress: refreshThreads }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.refreshText }, "\u21BB Refresh"))));
17510
17579
  }
17511
17580
  function createStyles7() {
17512
17581
  return import_react_native13.StyleSheet.create({
@@ -17539,7 +17608,7 @@ var import_react15 = __toESM(require("react"));
17539
17608
  var import_react_native14 = require("react-native");
17540
17609
  function ThreadDetailScreen({ thread, nav }) {
17541
17610
  const { getThreadMessages, sendMessage, markAsRead, uploadImage, widgetColorScheme } = useBugBear();
17542
- const styles5 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17611
+ const styles6 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17543
17612
  const [messages, setMessages] = (0, import_react15.useState)([]);
17544
17613
  const [loading, setLoading] = (0, import_react15.useState)(true);
17545
17614
  const [replyText, setReplyText] = (0, import_react15.useState)("");
@@ -17591,20 +17660,20 @@ function ThreadDetailScreen({ thread, nav }) {
17591
17660
  }
17592
17661
  setSending(false);
17593
17662
  };
17594
- return /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.container }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.header }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles5.headerIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles5.headerSubject, numberOfLines: 2 }, thread.subject || "No subject")), loading ? /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.loadingContainer }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles5.loadingText }, "Loading messages...")) : /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.messagesContainer }, messages.map((msg) => /* @__PURE__ */ import_react15.default.createElement(
17663
+ return /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.container }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.header }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.headerIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.headerSubject, numberOfLines: 2 }, thread.subject || "No subject")), loading ? /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.loadingContainer }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.loadingText }, "Loading messages...")) : /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.messagesContainer }, messages.map((msg) => /* @__PURE__ */ import_react15.default.createElement(
17595
17664
  import_react_native14.View,
17596
17665
  {
17597
17666
  key: msg.id,
17598
- style: [styles5.bubble, msg.senderType === "tester" ? styles5.bubbleTester : styles5.bubbleAdmin]
17667
+ style: [styles6.bubble, msg.senderType === "tester" ? styles6.bubbleTester : styles6.bubbleAdmin]
17599
17668
  },
17600
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles5.sender, msg.senderType === "tester" && styles5.senderTester] }, msg.senderType === "tester" ? "You" : msg.senderName),
17601
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles5.content, msg.senderType === "tester" && styles5.contentTester] }, msg.content),
17602
- msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.attachments }, msg.attachments.filter((a) => a.type === "image").map((att, idx) => /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Image, { key: idx, source: { uri: att.url }, style: styles5.attachmentImage, resizeMode: "cover" }))),
17603
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles5.time, msg.senderType === "tester" && styles5.timeTester] }, formatMessageTime(msg.createdAt))
17604
- ))), sendError && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.errorBar }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles5.errorText }, "Failed to send. Tap Send to retry.")), replyImages.images.length > 0 && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.replyPreview }, /* @__PURE__ */ import_react15.default.createElement(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage })), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles5.composer }, IMAGE_PICKER_AVAILABLE && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.TouchableOpacity, { style: styles5.attachBtn, onPress: replyImages.pickFromGallery, disabled: replyImages.images.length >= 3 }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles5.attachBtnText }, "\u{1F4CE}")), /* @__PURE__ */ import_react15.default.createElement(
17669
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles6.sender, msg.senderType === "tester" && styles6.senderTester] }, msg.senderType === "tester" ? "You" : msg.senderName),
17670
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles6.content, msg.senderType === "tester" && styles6.contentTester] }, msg.content),
17671
+ msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.attachments }, msg.attachments.filter((a) => a.type === "image").map((att, idx) => /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Image, { key: idx, source: { uri: att.url }, style: styles6.attachmentImage, resizeMode: "cover" }))),
17672
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles6.time, msg.senderType === "tester" && styles6.timeTester] }, formatMessageTime(msg.createdAt))
17673
+ ))), sendError && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.errorBar }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.errorText }, "Failed to send. Tap Send to retry.")), replyImages.images.length > 0 && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.replyPreview }, /* @__PURE__ */ import_react15.default.createElement(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage })), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles6.composer }, IMAGE_PICKER_AVAILABLE && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.TouchableOpacity, { style: styles6.attachBtn, onPress: replyImages.pickFromGallery, disabled: replyImages.images.length >= 3 }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.attachBtnText }, "\u{1F4CE}")), /* @__PURE__ */ import_react15.default.createElement(
17605
17674
  import_react_native14.TextInput,
17606
17675
  {
17607
- style: styles5.replyInput,
17676
+ style: styles6.replyInput,
17608
17677
  value: replyText,
17609
17678
  onChangeText: setReplyText,
17610
17679
  placeholder: "Type a reply...",
@@ -17615,11 +17684,11 @@ function ThreadDetailScreen({ thread, nav }) {
17615
17684
  ), /* @__PURE__ */ import_react15.default.createElement(
17616
17685
  import_react_native14.TouchableOpacity,
17617
17686
  {
17618
- style: [styles5.sendBtn, (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) && styles5.sendBtnDisabled],
17687
+ style: [styles6.sendBtn, (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) && styles6.sendBtnDisabled],
17619
17688
  onPress: handleSend,
17620
17689
  disabled: !replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading
17621
17690
  },
17622
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles5.sendBtnText }, sending ? "..." : "Send")
17691
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.sendBtnText }, sending ? "..." : "Send")
17623
17692
  )));
17624
17693
  }
17625
17694
  function createStyles8() {
@@ -17660,7 +17729,7 @@ var import_react16 = __toESM(require("react"));
17660
17729
  var import_react_native15 = require("react-native");
17661
17730
  function ComposeMessageScreen({ nav }) {
17662
17731
  const { createThread, uploadImage, widgetColorScheme } = useBugBear();
17663
- const styles5 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17732
+ const styles6 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17664
17733
  const [subject, setSubject] = (0, import_react16.useState)("");
17665
17734
  const [message, setMessage] = (0, import_react16.useState)("");
17666
17735
  const [sending, setSending] = (0, import_react16.useState)(false);
@@ -17679,10 +17748,10 @@ function ComposeMessageScreen({ nav }) {
17679
17748
  nav.pop();
17680
17749
  }
17681
17750
  };
17682
- return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles5.header }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles5.title }, "New Message"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles5.subtitle }, "Send a message to the QA team")), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles5.form }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Subject"), /* @__PURE__ */ import_react16.default.createElement(
17751
+ return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles6.header }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles6.title }, "New Message"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles6.subtitle }, "Send a message to the QA team")), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles6.form }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Subject"), /* @__PURE__ */ import_react16.default.createElement(
17683
17752
  import_react_native15.TextInput,
17684
17753
  {
17685
- style: styles5.subjectInput,
17754
+ style: styles6.subjectInput,
17686
17755
  value: subject,
17687
17756
  onChangeText: setSubject,
17688
17757
  placeholder: "What's this about?",
@@ -17692,7 +17761,7 @@ function ComposeMessageScreen({ nav }) {
17692
17761
  ), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: [shared.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ import_react16.default.createElement(
17693
17762
  import_react_native15.TextInput,
17694
17763
  {
17695
- style: styles5.messageInput,
17764
+ style: styles6.messageInput,
17696
17765
  value: message,
17697
17766
  onChangeText: setMessage,
17698
17767
  placeholder: "Write your message...",
@@ -17737,7 +17806,7 @@ var import_react17 = __toESM(require("react"));
17737
17806
  var import_react_native16 = require("react-native");
17738
17807
  function ProfileScreen({ nav }) {
17739
17808
  const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo, widgetColorScheme } = useBugBear();
17740
- const styles5 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17809
+ const styles6 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17741
17810
  const [editing, setEditing] = (0, import_react17.useState)(false);
17742
17811
  const [name, setName] = (0, import_react17.useState)(testerInfo?.name || "");
17743
17812
  const [additionalEmails, setAdditionalEmails] = (0, import_react17.useState)(testerInfo?.additionalEmails || []);
@@ -17788,13 +17857,13 @@ function ProfileScreen({ nav }) {
17788
17857
  return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: shared.emptyState }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.emptyEmoji }, "\u{1F464}"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.emptyTitle }, "No profile found"));
17789
17858
  }
17790
17859
  if (editing) {
17791
- return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.editHeader }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.editTitle }, "Edit Profile"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => {
17860
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.editHeader }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.editTitle }, "Edit Profile"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => {
17792
17861
  setEditing(false);
17793
17862
  setNewEmailInput("");
17794
- } }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.cancelText }, "Cancel"))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Name"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TextInput, { style: styles5.input, value: name, onChangeText: setName, placeholder: "Your name", placeholderTextColor: colors.textMuted })), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Primary Email"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.emailFixed }, testerInfo.email)), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Additional Emails"), additionalEmails.map((email) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { key: email, style: styles5.emailRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.emailText }, email), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => setAdditionalEmails(additionalEmails.filter((e) => e !== email)) }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.removeEmail }, "\u2715")))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.addEmailRow }, /* @__PURE__ */ import_react17.default.createElement(
17863
+ } }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.cancelText }, "Cancel"))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Name"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TextInput, { style: styles6.input, value: name, onChangeText: setName, placeholder: "Your name", placeholderTextColor: colors.textMuted })), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Primary Email"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.emailFixed }, testerInfo.email)), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Additional Emails"), additionalEmails.map((email) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { key: email, style: styles6.emailRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.emailText }, email), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => setAdditionalEmails(additionalEmails.filter((e) => e !== email)) }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.removeEmail }, "\u2715")))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.addEmailRow }, /* @__PURE__ */ import_react17.default.createElement(
17795
17864
  import_react_native16.TextInput,
17796
17865
  {
17797
- style: [styles5.input, { flex: 1, marginRight: 8 }],
17866
+ style: [styles6.input, { flex: 1, marginRight: 8 }],
17798
17867
  value: newEmailInput,
17799
17868
  onChangeText: setNewEmailInput,
17800
17869
  placeholder: "Add email",
@@ -17802,17 +17871,17 @@ function ProfileScreen({ nav }) {
17802
17871
  keyboardType: "email-address",
17803
17872
  autoCapitalize: "none"
17804
17873
  }
17805
- ), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { style: styles5.addButton, onPress: handleAddEmail }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.addButtonText }, "Add")))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Testing Platforms"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.platformRow }, [{ key: "ios", label: "\u{1F4F1} iOS" }, { key: "android", label: "\u{1F916} Android" }, { key: "web", label: "\u{1F310} Web" }].map(({ key, label }) => /* @__PURE__ */ import_react17.default.createElement(
17874
+ ), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { style: styles6.addButton, onPress: handleAddEmail }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.addButtonText }, "Add")))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Testing Platforms"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.platformRow }, [{ key: "ios", label: "\u{1F4F1} iOS" }, { key: "android", label: "\u{1F916} Android" }, { key: "web", label: "\u{1F310} Web" }].map(({ key, label }) => /* @__PURE__ */ import_react17.default.createElement(
17806
17875
  import_react_native16.TouchableOpacity,
17807
17876
  {
17808
17877
  key,
17809
- style: [styles5.platformBtn, platforms.includes(key) && styles5.platformBtnActive],
17878
+ style: [styles6.platformBtn, platforms.includes(key) && styles6.platformBtnActive],
17810
17879
  onPress: () => setPlatforms((prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key])
17811
17880
  },
17812
- /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles5.platformText, platforms.includes(key) && styles5.platformTextActive] }, label)
17881
+ /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles6.platformText, platforms.includes(key) && styles6.platformTextActive] }, label)
17813
17882
  )))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { style: [shared.primaryButton, { marginTop: 20 }], onPress: handleSave, disabled: saving }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.primaryButtonText }, saving ? "Saving..." : "Save Profile")));
17814
17883
  }
17815
- return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.profileCard }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.avatar }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.avatarText }, testerInfo.name.charAt(0).toUpperCase())), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.profileName }, testerInfo.name), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.profileEmail }, testerInfo.email)), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.statsRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.statItem }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.statNumber }, completedCount), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.statLabel }, "Completed")), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.statDivider }), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.statItem }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.statNumber }, assignments.length), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.statLabel }, "Total Assigned"))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles5.detailsToggle }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.detailsSection }, additionalEmails.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.detailBlock }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.detailLabel }, "Additional Emails"), additionalEmails.map((e) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { key: e, style: styles5.detailValue }, e))), platforms.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.detailBlock }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.detailLabel }, "Platforms"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles5.platformTags }, platforms.map((p) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { key: p, style: styles5.platformTag }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles5.platformTagText }, p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web")))))), /* @__PURE__ */ import_react17.default.createElement(
17884
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.profileCard }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.avatar }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.avatarText }, testerInfo.name.charAt(0).toUpperCase())), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.profileName }, testerInfo.name), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.profileEmail }, testerInfo.email)), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.statsRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.statItem }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.statNumber }, completedCount), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.statLabel }, "Completed")), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.statDivider }), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.statItem }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.statNumber }, assignments.length), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.statLabel }, "Total Assigned"))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles6.detailsToggle }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.detailsSection }, additionalEmails.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.detailBlock }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.detailLabel }, "Additional Emails"), additionalEmails.map((e) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { key: e, style: styles6.detailValue }, e))), platforms.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.detailBlock }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.detailLabel }, "Platforms"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles6.platformTags }, platforms.map((p) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { key: p, style: styles6.platformTag }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles6.platformTagText }, p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web")))))), /* @__PURE__ */ import_react17.default.createElement(
17816
17885
  import_react_native16.TouchableOpacity,
17817
17886
  {
17818
17887
  style: [shared.primaryButton, { marginTop: 20 }],
@@ -17870,7 +17939,7 @@ var CATEGORIES = ["open", "done", "reopened"];
17870
17939
  var SEVERITY_ORDER2 = { critical: 0, high: 1, medium: 2, low: 3 };
17871
17940
  function IssueListScreen({ nav, category }) {
17872
17941
  const { client, widgetColorScheme } = useBugBear();
17873
- const styles5 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
17942
+ const styles6 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
17874
17943
  const CATEGORY_CONFIG = (0, import_react18.useMemo)(() => ({
17875
17944
  open: { label: "Open", accent: colors.orange, emptyIcon: "\u2705", emptyText: "No open issues" },
17876
17945
  done: { label: "Done", accent: colors.green, emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
@@ -17940,7 +18009,7 @@ function IssueListScreen({ nav, category }) {
17940
18009
  const searchFilteredIssues = debouncedQuery ? sortedIssues.filter(
17941
18010
  (issue) => (issue.title || "").toLowerCase().includes(debouncedQuery.toLowerCase()) || (issue.description || "").toLowerCase().includes(debouncedQuery.toLowerCase())
17942
18011
  ) : sortedIssues;
17943
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, null, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.tabBar }, CATEGORIES.map((cat) => {
18012
+ return /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, null, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.tabBar }, CATEGORIES.map((cat) => {
17944
18013
  const catConfig = CATEGORY_CONFIG[cat];
17945
18014
  const isActive = activeCategory === cat;
17946
18015
  const count = counts?.[cat];
@@ -17949,7 +18018,7 @@ function IssueListScreen({ nav, category }) {
17949
18018
  {
17950
18019
  key: cat,
17951
18020
  style: [
17952
- styles5.tab,
18021
+ styles6.tab,
17953
18022
  { borderBottomColor: isActive ? catConfig.accent : "transparent" }
17954
18023
  ],
17955
18024
  onPress: () => {
@@ -17959,20 +18028,20 @@ function IssueListScreen({ nav, category }) {
17959
18028
  activeOpacity: 0.7
17960
18029
  },
17961
18030
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
17962
- styles5.tabLabel,
18031
+ styles6.tabLabel,
17963
18032
  isActive && { fontWeight: "600", color: colors.textPrimary }
17964
18033
  ] }, catConfig.label),
17965
18034
  count !== void 0 && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [
17966
- styles5.countBadge,
18035
+ styles6.countBadge,
17967
18036
  {
17968
18037
  backgroundColor: isActive ? catConfig.accent + "18" : colors.card
17969
18038
  }
17970
18039
  ] }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
17971
- styles5.countText,
18040
+ styles6.countText,
17972
18041
  { color: isActive ? catConfig.accent : colors.textDim }
17973
18042
  ] }, count))
17974
18043
  );
17975
- })), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.sortRow }, [
18044
+ })), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.sortRow }, [
17976
18045
  { key: "severity", label: "Severity" },
17977
18046
  { key: "recent", label: "Recent" }
17978
18047
  ].map((s2) => /* @__PURE__ */ import_react18.default.createElement(
@@ -17980,14 +18049,14 @@ function IssueListScreen({ nav, category }) {
17980
18049
  {
17981
18050
  key: s2.key,
17982
18051
  style: [
17983
- styles5.sortBtn,
17984
- sortMode === s2.key && styles5.sortBtnActive
18052
+ styles6.sortBtn,
18053
+ sortMode === s2.key && styles6.sortBtnActive
17985
18054
  ],
17986
18055
  onPress: () => setSortMode(s2.key)
17987
18056
  },
17988
18057
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
17989
- styles5.sortBtnText,
17990
- sortMode === s2.key && styles5.sortBtnTextActive
18058
+ styles6.sortBtnText,
18059
+ sortMode === s2.key && styles6.sortBtnTextActive
17991
18060
  ] }, s2.label)
17992
18061
  ))), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: { paddingHorizontal: 16, paddingBottom: 12 } }, /* @__PURE__ */ import_react18.default.createElement(
17993
18062
  import_react_native17.TextInput,
@@ -18007,18 +18076,18 @@ function IssueListScreen({ nav, category }) {
18007
18076
  fontSize: 13
18008
18077
  }
18009
18078
  }
18010
- )), loading ? /* @__PURE__ */ import_react18.default.createElement(IssueListScreenSkeleton, null) : searchFilteredIssues.length === 0 ? /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.emptyContainer }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.emptyIcon }, debouncedQuery ? "\u{1F50D}" : config.emptyIcon), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.emptyText }, debouncedQuery ? "No matching issues" : config.emptyText)) : searchFilteredIssues.map((issue) => /* @__PURE__ */ import_react18.default.createElement(
18079
+ )), loading ? /* @__PURE__ */ import_react18.default.createElement(IssueListScreenSkeleton, null) : searchFilteredIssues.length === 0 ? /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.emptyContainer }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.emptyIcon }, debouncedQuery ? "\u{1F50D}" : config.emptyIcon), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.emptyText }, debouncedQuery ? "No matching issues" : config.emptyText)) : searchFilteredIssues.map((issue) => /* @__PURE__ */ import_react18.default.createElement(
18011
18080
  import_react_native17.TouchableOpacity,
18012
18081
  {
18013
18082
  key: issue.id,
18014
- style: styles5.issueCard,
18083
+ style: styles6.issueCard,
18015
18084
  onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
18016
18085
  activeOpacity: 0.7
18017
18086
  },
18018
- /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.topRow }, issue.severity && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [styles5.severityDot, { backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim }] }), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.issueTitle, numberOfLines: 1 }, issue.title)),
18019
- /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.bottomRow }, issue.route && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.routeText, numberOfLines: 1 }, issue.route), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.timeText }, formatRelativeTime(issue.updatedAt))),
18020
- activeCategory === "done" && issue.verifiedByName && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.verifiedBadge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.verifiedBadgeText }, "\u2714", " Verified by ", issue.verifiedByName)),
18021
- activeCategory === "reopened" && issue.originalBugTitle && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles5.reopenedBadge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles5.reopenedBadgeText, numberOfLines: 1 }, "\u{1F504}", " Retest of: ", issue.originalBugTitle))
18087
+ /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.topRow }, issue.severity && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [styles6.severityDot, { backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim }] }), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.issueTitle, numberOfLines: 1 }, issue.title)),
18088
+ /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.bottomRow }, issue.route && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.routeText, numberOfLines: 1 }, issue.route), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.timeText }, formatRelativeTime(issue.updatedAt))),
18089
+ activeCategory === "done" && issue.verifiedByName && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.verifiedBadge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.verifiedBadgeText }, "\u2714", " Verified by ", issue.verifiedByName)),
18090
+ activeCategory === "reopened" && issue.originalBugTitle && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.reopenedBadge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles6.reopenedBadgeText, numberOfLines: 1 }, "\u{1F504}", " Retest of: ", issue.originalBugTitle))
18022
18091
  )));
18023
18092
  }
18024
18093
  function createStyles11() {
@@ -18177,7 +18246,7 @@ var import_react_native18 = require("react-native");
18177
18246
  var DONE_STATUSES = ["verified", "resolved", "closed", "reviewed"];
18178
18247
  function IssueDetailScreen({ nav, issue }) {
18179
18248
  const { dashboardUrl, widgetColorScheme, reopenReport } = useBugBear();
18180
- const styles5 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18249
+ const styles6 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18181
18250
  const [showReopenForm, setShowReopenForm] = (0, import_react19.useState)(false);
18182
18251
  const [reopenReason, setReopenReason] = (0, import_react19.useState)("");
18183
18252
  const [isSubmitting, setIsSubmitting] = (0, import_react19.useState)(false);
@@ -18219,44 +18288,44 @@ function IssueDetailScreen({ nav, issue }) {
18219
18288
  setReopenError(result.error || "Failed to reopen");
18220
18289
  }
18221
18290
  }, [reopenReason, reopenReport, issue.id]);
18222
- return /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, null, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.badgeRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: [styles5.badge, { backgroundColor: wasReopened ? colors.yellowDark : statusConfig.bg }] }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [styles5.badgeText, { color: wasReopened ? colors.yellowLight : statusConfig.color }] }, wasReopened ? "Reopened" : statusConfig.label)), severityConfig && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: [styles5.badge, { backgroundColor: severityConfig.bg }] }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [styles5.badgeText, { color: severityConfig.color }] }, severityConfig.label))), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.title }, issue.title), issue.route && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.route }, issue.route), issue.description && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.descriptionCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.descriptionText }, issue.description)), wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.reopenedCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.reopenedRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenedIcon }, "\u{1F504}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenedText }, "Issue reopened \u2014 your team has been notified"))), issue.verifiedByName && !wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.verifiedCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.verifiedHeader }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.verifiedIcon }, "\u2705"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.verifiedTitle }, "Retesting Proof")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.verifiedBody }, "Verified by ", issue.verifiedByName, issue.verifiedAt && ` on ${new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })}`)), issue.originalBugTitle && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.originalBugCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.originalBugHeader }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.originalBugIcon }, "\u{1F504}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.originalBugTitleText }, "Original Bug")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.originalBugBody }, "Retest of: ", issue.originalBugTitle)), isDone && !wasReopened && !showReopenForm && /* @__PURE__ */ import_react19.default.createElement(
18291
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, null, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.badgeRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: [styles6.badge, { backgroundColor: wasReopened ? colors.yellowDark : statusConfig.bg }] }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [styles6.badgeText, { color: wasReopened ? colors.yellowLight : statusConfig.color }] }, wasReopened ? "Reopened" : statusConfig.label)), severityConfig && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: [styles6.badge, { backgroundColor: severityConfig.bg }] }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [styles6.badgeText, { color: severityConfig.color }] }, severityConfig.label))), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.title }, issue.title), issue.route && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.route }, issue.route), issue.description && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.descriptionCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.descriptionText }, issue.description)), wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.reopenedCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.reopenedRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenedIcon }, "\u{1F504}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenedText }, "Issue reopened \u2014 your team has been notified"))), issue.verifiedByName && !wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.verifiedCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.verifiedHeader }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.verifiedIcon }, "\u2705"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.verifiedTitle }, "Retesting Proof")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.verifiedBody }, "Verified by ", issue.verifiedByName, issue.verifiedAt && ` on ${new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })}`)), issue.originalBugTitle && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.originalBugCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.originalBugHeader }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.originalBugIcon }, "\u{1F504}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.originalBugTitleText }, "Original Bug")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.originalBugBody }, "Retest of: ", issue.originalBugTitle)), isDone && !wasReopened && !showReopenForm && /* @__PURE__ */ import_react19.default.createElement(
18223
18292
  import_react_native18.TouchableOpacity,
18224
18293
  {
18225
- style: styles5.reopenButton,
18294
+ style: styles6.reopenButton,
18226
18295
  onPress: () => setShowReopenForm(true),
18227
18296
  activeOpacity: 0.7
18228
18297
  },
18229
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenButtonText }, "\u{1F504}", " Not Fixed \u2014 Reopen Issue")
18230
- ), showReopenForm && !wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.reopenForm }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenFormTitle }, "Why isn't this fixed?"), /* @__PURE__ */ import_react19.default.createElement(
18298
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenButtonText }, "\u{1F504}", " Not Fixed \u2014 Reopen Issue")
18299
+ ), showReopenForm && !wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.reopenForm }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenFormTitle }, "Why isn't this fixed?"), /* @__PURE__ */ import_react19.default.createElement(
18231
18300
  import_react_native18.TextInput,
18232
18301
  {
18233
18302
  value: reopenReason,
18234
18303
  onChangeText: setReopenReason,
18235
18304
  placeholder: "Describe what you're still seeing...",
18236
18305
  placeholderTextColor: colors.textMuted,
18237
- style: styles5.reopenInput,
18306
+ style: styles6.reopenInput,
18238
18307
  multiline: true,
18239
18308
  autoFocus: true
18240
18309
  }
18241
- ), reopenError && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenErrorText }, reopenError), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.reopenActions }, /* @__PURE__ */ import_react19.default.createElement(
18310
+ ), reopenError && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenErrorText }, reopenError), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.reopenActions }, /* @__PURE__ */ import_react19.default.createElement(
18242
18311
  import_react_native18.TouchableOpacity,
18243
18312
  {
18244
18313
  style: [
18245
- styles5.reopenSubmitButton,
18246
- (!reopenReason.trim() || isSubmitting) && styles5.reopenSubmitDisabled
18314
+ styles6.reopenSubmitButton,
18315
+ (!reopenReason.trim() || isSubmitting) && styles6.reopenSubmitDisabled
18247
18316
  ],
18248
18317
  onPress: handleReopen,
18249
18318
  disabled: isSubmitting || !reopenReason.trim(),
18250
18319
  activeOpacity: 0.7
18251
18320
  },
18252
18321
  isSubmitting ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.ActivityIndicator, { size: "small", color: "#fff" }) : /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [
18253
- styles5.reopenSubmitText,
18254
- !reopenReason.trim() && styles5.reopenSubmitTextDisabled
18322
+ styles6.reopenSubmitText,
18323
+ !reopenReason.trim() && styles6.reopenSubmitTextDisabled
18255
18324
  ] }, "Reopen Issue")
18256
18325
  ), /* @__PURE__ */ import_react19.default.createElement(
18257
18326
  import_react_native18.TouchableOpacity,
18258
18327
  {
18259
- style: styles5.reopenCancelButton,
18328
+ style: styles6.reopenCancelButton,
18260
18329
  onPress: () => {
18261
18330
  setShowReopenForm(false);
18262
18331
  setReopenReason("");
@@ -18265,7 +18334,7 @@ function IssueDetailScreen({ nav, issue }) {
18265
18334
  disabled: isSubmitting,
18266
18335
  activeOpacity: 0.7
18267
18336
  },
18268
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenCancelText }, "Cancel")
18337
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenCancelText }, "Cancel")
18269
18338
  ))), issue.status === "ready_to_test" && (issue.fixCommitSha || issue.resolutionNotes) && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: {
18270
18339
  backgroundColor: "rgba(59, 130, 246, 0.1)",
18271
18340
  borderWidth: 1,
@@ -18273,14 +18342,14 @@ function IssueDetailScreen({ nav, issue }) {
18273
18342
  borderRadius: 8,
18274
18343
  padding: 12,
18275
18344
  marginBottom: 12
18276
- } }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: { flexDirection: "row", alignItems: "center", gap: 6, marginBottom: 8 } }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 13 } }, "\u{1F527}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 12, fontWeight: "600", color: "#60a5fa" } }, "Fix Details")), issue.resolutionNotes ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 12, color: colors.textSecondary, marginBottom: 6, lineHeight: 17 } }, issue.resolutionNotes) : null, issue.fixCommitSha ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 11, color: colors.textDim, fontFamily: "monospace" } }, "Commit: ", issue.fixCommitSha.slice(0, 7), issue.fixCommitMessage && ` \u2014 ${issue.fixCommitMessage}`) : null, issue.fixFilesChanged && issue.fixFilesChanged.length > 0 ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 11, color: colors.textDim, marginTop: 4 } }, issue.fixFilesChanged.length, " file", issue.fixFilesChanged.length > 1 ? "s" : "", " changed") : null), issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.screenshotSection }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.screenshotLabel }, "Screenshots (", issue.screenshotUrls.length, ")"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.screenshotRow }, issue.screenshotUrls.map((url, i) => /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { key: i, onPress: () => import_react_native18.Linking.openURL(url), activeOpacity: 0.7 }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Image, { source: { uri: url }, style: styles5.screenshotThumb }))))), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles5.metaSection }, issue.reporterName && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.metaText }, "Reported by ", issue.reporterName), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.metaTextSmall }, "Created ", formatRelativeTime(issue.createdAt), " ", "\xB7", " Updated ", formatRelativeTime(issue.updatedAt))), dashboardUrl && /* @__PURE__ */ import_react19.default.createElement(
18345
+ } }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: { flexDirection: "row", alignItems: "center", gap: 6, marginBottom: 8 } }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 13 } }, "\u{1F527}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 12, fontWeight: "600", color: "#60a5fa" } }, "Fix Details")), issue.resolutionNotes ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 12, color: colors.textSecondary, marginBottom: 6, lineHeight: 17 } }, issue.resolutionNotes) : null, issue.fixCommitSha ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 11, color: colors.textDim, fontFamily: "monospace" } }, "Commit: ", issue.fixCommitSha.slice(0, 7), issue.fixCommitMessage && ` \u2014 ${issue.fixCommitMessage}`) : null, issue.fixFilesChanged && issue.fixFilesChanged.length > 0 ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: { fontSize: 11, color: colors.textDim, marginTop: 4 } }, issue.fixFilesChanged.length, " file", issue.fixFilesChanged.length > 1 ? "s" : "", " changed") : null), issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.screenshotSection }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.screenshotLabel }, "Screenshots (", issue.screenshotUrls.length, ")"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.screenshotRow }, issue.screenshotUrls.map((url, i) => /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { key: i, onPress: () => import_react_native18.Linking.openURL(url), activeOpacity: 0.7 }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Image, { source: { uri: url }, style: styles6.screenshotThumb }))))), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles6.metaSection }, issue.reporterName && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.metaText }, "Reported by ", issue.reporterName), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.metaTextSmall }, "Created ", formatRelativeTime(issue.createdAt), " ", "\xB7", " Updated ", formatRelativeTime(issue.updatedAt))), dashboardUrl && /* @__PURE__ */ import_react19.default.createElement(
18277
18346
  import_react_native18.TouchableOpacity,
18278
18347
  {
18279
- style: styles5.dashboardLink,
18348
+ style: styles6.dashboardLink,
18280
18349
  onPress: () => import_react_native18.Linking.openURL(`${dashboardUrl}/reports`),
18281
18350
  activeOpacity: 0.7
18282
18351
  },
18283
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
18352
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
18284
18353
  ));
18285
18354
  }
18286
18355
  function createStyles12() {
@@ -18537,7 +18606,7 @@ var import_react20 = __toESM(require("react"));
18537
18606
  var import_react_native19 = require("react-native");
18538
18607
  function SessionStartScreen({ nav }) {
18539
18608
  const { startSession, assignments, widgetColorScheme } = useBugBear();
18540
- const styles5 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18609
+ const styles6 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18541
18610
  const [focusArea, setFocusArea] = (0, import_react20.useState)("");
18542
18611
  const [isStarting, setIsStarting] = (0, import_react20.useState)(false);
18543
18612
  const [error, setError] = (0, import_react20.useState)(null);
@@ -18564,35 +18633,35 @@ function SessionStartScreen({ nav }) {
18564
18633
  setIsStarting(false);
18565
18634
  }
18566
18635
  };
18567
- return /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles5.header }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles5.headerIcon }, "\u{1F50D}"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles5.headerDesc }, "Start an exploratory QA session. Log findings as you go \u2014 bugs, concerns, suggestions, or questions.")), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles5.inputSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles5.label }, "What are you testing?"), /* @__PURE__ */ import_react20.default.createElement(
18636
+ return /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles6.header }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.headerIcon }, "\u{1F50D}"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.headerDesc }, "Start an exploratory QA session. Log findings as you go \u2014 bugs, concerns, suggestions, or questions.")), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles6.inputSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.label }, "What are you testing?"), /* @__PURE__ */ import_react20.default.createElement(
18568
18637
  import_react_native19.TextInput,
18569
18638
  {
18570
18639
  value: focusArea,
18571
18640
  onChangeText: setFocusArea,
18572
18641
  placeholder: "e.g. Checkout flow, Settings page...",
18573
18642
  placeholderTextColor: colors.textMuted,
18574
- style: styles5.input,
18643
+ style: styles6.input,
18575
18644
  returnKeyType: "done",
18576
18645
  onSubmitEditing: handleStart
18577
18646
  }
18578
- )), trackNames.length > 0 && /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles5.chipsSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles5.chipsLabel }, "Quick pick:"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles5.chipsRow }, trackNames.map((name) => /* @__PURE__ */ import_react20.default.createElement(
18647
+ )), trackNames.length > 0 && /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles6.chipsSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.chipsLabel }, "Quick pick:"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles6.chipsRow }, trackNames.map((name) => /* @__PURE__ */ import_react20.default.createElement(
18579
18648
  import_react_native19.TouchableOpacity,
18580
18649
  {
18581
18650
  key: name,
18582
- style: [styles5.chip, focusArea === name && styles5.chipActive],
18651
+ style: [styles6.chip, focusArea === name && styles6.chipActive],
18583
18652
  onPress: () => setFocusArea(name),
18584
18653
  activeOpacity: 0.7
18585
18654
  },
18586
- /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: [styles5.chipText, focusArea === name && styles5.chipTextActive] }, name)
18587
- )))), error && /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles5.errorBox }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles5.errorText }, error)), /* @__PURE__ */ import_react20.default.createElement(
18655
+ /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: [styles6.chipText, focusArea === name && styles6.chipTextActive] }, name)
18656
+ )))), error && /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles6.errorBox }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.errorText }, error)), /* @__PURE__ */ import_react20.default.createElement(
18588
18657
  import_react_native19.TouchableOpacity,
18589
18658
  {
18590
- style: [styles5.startBtn, isStarting && styles5.startBtnDisabled],
18659
+ style: [styles6.startBtn, isStarting && styles6.startBtnDisabled],
18591
18660
  onPress: handleStart,
18592
18661
  disabled: isStarting,
18593
18662
  activeOpacity: 0.8
18594
18663
  },
18595
- /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles5.startBtnText }, isStarting ? "Starting..." : "\u25B6 Start Session")
18664
+ /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.startBtnText }, isStarting ? "Starting..." : "\u25B6 Start Session")
18596
18665
  ));
18597
18666
  }
18598
18667
  function createStyles13() {
@@ -18701,7 +18770,7 @@ var import_react21 = __toESM(require("react"));
18701
18770
  var import_react_native20 = require("react-native");
18702
18771
  function SessionActiveScreen({ nav }) {
18703
18772
  const { activeSession, sessionFindings, endSession, refreshSession, widgetColorScheme } = useBugBear();
18704
- const styles5 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18773
+ const styles6 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18705
18774
  const FINDING_TYPE_CONFIG = (0, import_react21.useMemo)(() => ({
18706
18775
  bug: { icon: "\u{1F41B}", label: "Bug", color: colors.red },
18707
18776
  concern: { icon: "\u26A0\uFE0F", label: "Concern", color: colors.amber },
@@ -18743,30 +18812,30 @@ function SessionActiveScreen({ nav }) {
18743
18812
  }
18744
18813
  };
18745
18814
  if (!activeSession) {
18746
- return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.emptyContainer }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.emptyText }, "No active session"), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.TouchableOpacity, { onPress: () => nav.replace({ name: "SESSION_START" }) }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.emptyLink }, "Start a new session")));
18815
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.emptyContainer }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.emptyText }, "No active session"), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.TouchableOpacity, { onPress: () => nav.replace({ name: "SESSION_START" }) }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.emptyLink }, "Start a new session")));
18747
18816
  }
18748
18817
  const renderFinding = (finding) => {
18749
18818
  const config = FINDING_TYPE_CONFIG[finding.type] || FINDING_TYPE_CONFIG.bug;
18750
- return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { key: finding.id, style: styles5.findingRow }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.findingIcon }, config.icon), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.findingContent }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.findingTitle, numberOfLines: 1 }, finding.title), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.findingMeta }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: [styles5.findingType, { color: config.color }] }, config.label), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.findingSeverity }, finding.severity), finding.convertedToBugId && /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.findingConverted }, "\u2192 Bug filed"))));
18819
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { key: finding.id, style: styles6.findingRow }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.findingIcon }, config.icon), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.findingContent }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.findingTitle, numberOfLines: 1 }, finding.title), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.findingMeta }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: [styles6.findingType, { color: config.color }] }, config.label), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.findingSeverity }, finding.severity), finding.convertedToBugId && /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.findingConverted }, "\u2192 Bug filed"))));
18751
18820
  };
18752
- return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, null, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.timerCard }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.recordingRow }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.recordingDot }), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.recordingLabel }, "Recording")), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.timerText }, formatTimer(elapsed)), activeSession.focusArea ? /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.focusArea }, activeSession.focusArea) : null), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.actionRow }, /* @__PURE__ */ import_react21.default.createElement(
18821
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, null, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.timerCard }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.recordingRow }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.recordingDot }), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.recordingLabel }, "Recording")), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.timerText }, formatTimer(elapsed)), activeSession.focusArea ? /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.focusArea }, activeSession.focusArea) : null), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.actionRow }, /* @__PURE__ */ import_react21.default.createElement(
18753
18822
  import_react_native20.TouchableOpacity,
18754
18823
  {
18755
- style: styles5.addFindingBtn,
18824
+ style: styles6.addFindingBtn,
18756
18825
  onPress: () => nav.push({ name: "SESSION_FINDING" }),
18757
18826
  activeOpacity: 0.8
18758
18827
  },
18759
- /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.addFindingText }, "+ Add Finding")
18828
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.addFindingText }, "+ Add Finding")
18760
18829
  ), /* @__PURE__ */ import_react21.default.createElement(
18761
18830
  import_react_native20.TouchableOpacity,
18762
18831
  {
18763
- style: [styles5.endBtn, isEnding && styles5.endBtnDisabled],
18832
+ style: [styles6.endBtn, isEnding && styles6.endBtnDisabled],
18764
18833
  onPress: handleEnd,
18765
18834
  disabled: isEnding,
18766
18835
  activeOpacity: 0.8
18767
18836
  },
18768
- /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.endBtnText }, isEnding ? "..." : "End")
18769
- )), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.sectionTitle }, "Findings (", sessionFindings.length, ")"), sessionFindings.length === 0 ? /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.emptyFindings }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.emptyFindingsIcon }, "\u{1F4CB}"), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.emptyFindingsText }, 'No findings yet. Tap "Add Finding" to log something.')) : /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles5.findingsList }, sessionFindings.map(renderFinding)));
18837
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.endBtnText }, isEnding ? "..." : "End")
18838
+ )), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.sectionTitle }, "Findings (", sessionFindings.length, ")"), sessionFindings.length === 0 ? /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.emptyFindings }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.emptyFindingsIcon }, "\u{1F4CB}"), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.emptyFindingsText }, 'No findings yet. Tap "Add Finding" to log something.')) : /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles6.findingsList }, sessionFindings.map(renderFinding)));
18770
18839
  }
18771
18840
  function createStyles14() {
18772
18841
  return import_react_native20.StyleSheet.create({
@@ -18944,7 +19013,7 @@ var FINDING_TYPES = [
18944
19013
  ];
18945
19014
  function SessionFindingScreen({ nav }) {
18946
19015
  const { addFinding, widgetColorScheme } = useBugBear();
18947
- const styles5 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
19016
+ const styles6 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
18948
19017
  const SEVERITIES = (0, import_react22.useMemo)(() => [
18949
19018
  { value: "critical", label: "Critical", color: colors.red },
18950
19019
  { value: "high", label: "High", color: colors.orange },
@@ -18976,46 +19045,46 @@ function SessionFindingScreen({ nav }) {
18976
19045
  }
18977
19046
  };
18978
19047
  const canSubmit = title.trim().length > 0 && !isSubmitting;
18979
- return /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, null, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles5.section }, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles5.sectionLabel }, "Type"), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles5.typeRow }, FINDING_TYPES.map((ft) => /* @__PURE__ */ import_react22.default.createElement(
19048
+ return /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, null, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.section }, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles6.sectionLabel }, "Type"), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.typeRow }, FINDING_TYPES.map((ft) => /* @__PURE__ */ import_react22.default.createElement(
18980
19049
  import_react_native21.TouchableOpacity,
18981
19050
  {
18982
19051
  key: ft.value,
18983
- style: [styles5.typePill, type === ft.value && styles5.typePillActive],
19052
+ style: [styles6.typePill, type === ft.value && styles6.typePillActive],
18984
19053
  onPress: () => setType(ft.value),
18985
19054
  activeOpacity: 0.7
18986
19055
  },
18987
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles5.typePillIcon }, ft.icon),
18988
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles5.typePillLabel, type === ft.value && styles5.typePillLabelActive] }, ft.label)
18989
- )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles5.section }, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles5.sectionLabel }, "Severity"), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles5.severityRow }, SEVERITIES.map((s2) => /* @__PURE__ */ import_react22.default.createElement(
19056
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles6.typePillIcon }, ft.icon),
19057
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles6.typePillLabel, type === ft.value && styles6.typePillLabelActive] }, ft.label)
19058
+ )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.section }, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles6.sectionLabel }, "Severity"), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.severityRow }, SEVERITIES.map((s2) => /* @__PURE__ */ import_react22.default.createElement(
18990
19059
  import_react_native21.TouchableOpacity,
18991
19060
  {
18992
19061
  key: s2.value,
18993
19062
  style: [
18994
- styles5.severityPill,
19063
+ styles6.severityPill,
18995
19064
  severity === s2.value && { backgroundColor: `${s2.color}20`, borderColor: s2.color }
18996
19065
  ],
18997
19066
  onPress: () => setSeverity(s2.value),
18998
19067
  activeOpacity: 0.7
18999
19068
  },
19000
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles5.severityText, severity === s2.value && { color: s2.color }] }, s2.label)
19001
- )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles5.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19069
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles6.severityText, severity === s2.value && { color: s2.color }] }, s2.label)
19070
+ )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19002
19071
  import_react_native21.TextInput,
19003
19072
  {
19004
19073
  value: title,
19005
19074
  onChangeText: setTitle,
19006
19075
  placeholder: "What did you find?",
19007
19076
  placeholderTextColor: colors.textMuted,
19008
- style: styles5.titleInput,
19077
+ style: styles6.titleInput,
19009
19078
  returnKeyType: "next"
19010
19079
  }
19011
- )), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles5.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19080
+ )), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19012
19081
  import_react_native21.TextInput,
19013
19082
  {
19014
19083
  value: description,
19015
19084
  onChangeText: setDescription,
19016
19085
  placeholder: "Details (optional)",
19017
19086
  placeholderTextColor: colors.textMuted,
19018
- style: styles5.descInput,
19087
+ style: styles6.descInput,
19019
19088
  multiline: true,
19020
19089
  numberOfLines: 3,
19021
19090
  textAlignVertical: "top"
@@ -19023,12 +19092,12 @@ function SessionFindingScreen({ nav }) {
19023
19092
  )), /* @__PURE__ */ import_react22.default.createElement(
19024
19093
  import_react_native21.TouchableOpacity,
19025
19094
  {
19026
- style: [styles5.submitBtn, !canSubmit && styles5.submitBtnDisabled],
19095
+ style: [styles6.submitBtn, !canSubmit && styles6.submitBtnDisabled],
19027
19096
  onPress: handleSubmit,
19028
19097
  disabled: !canSubmit,
19029
19098
  activeOpacity: 0.8
19030
19099
  },
19031
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles5.submitBtnText, !canSubmit && styles5.submitBtnTextDisabled] }, isSubmitting ? "Saving..." : "Save Finding")
19100
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles6.submitBtnText, !canSubmit && styles6.submitBtnTextDisabled] }, isSubmitting ? "Saving..." : "Save Finding")
19032
19101
  ));
19033
19102
  }
19034
19103
  function createStyles15() {
@@ -19140,9 +19209,278 @@ function createStyles15() {
19140
19209
  });
19141
19210
  }
19142
19211
 
19143
- // src/BugBearButton.tsx
19212
+ // src/widget/MiniTestRunner.tsx
19213
+ var import_react23 = __toESM(require("react"));
19214
+ var import_react_native22 = require("react-native");
19144
19215
  var screenWidth = import_react_native22.Dimensions.get("window").width;
19145
19216
  var screenHeight = import_react_native22.Dimensions.get("window").height;
19217
+ var RUNNER_WIDTH = 280;
19218
+ function MiniTestRunner({ assignmentId, onExpand, onComplete, onAdvance, onNavigateToReport }) {
19219
+ const { client, assignments, refreshAssignments } = useBugBear();
19220
+ const assignment = assignments.find((a) => a.id === assignmentId);
19221
+ const [currentStepIndex, setCurrentStepIndex] = (0, import_react23.useState)(0);
19222
+ const [isSubmitting, setIsSubmitting] = (0, import_react23.useState)(false);
19223
+ const [elapsedTime, setElapsedTime] = (0, import_react23.useState)(0);
19224
+ const mountAnim = (0, import_react23.useRef)(new import_react_native22.Animated.Value(0)).current;
19225
+ (0, import_react23.useEffect)(() => {
19226
+ import_react_native22.Animated.spring(mountAnim, { toValue: 1, useNativeDriver: true, tension: 80, friction: 10 }).start();
19227
+ }, []);
19228
+ (0, import_react23.useEffect)(() => {
19229
+ setCurrentStepIndex(0);
19230
+ }, [assignmentId]);
19231
+ const pan = (0, import_react23.useRef)(new import_react_native22.Animated.ValueXY({
19232
+ x: screenWidth - RUNNER_WIDTH - 16,
19233
+ y: screenHeight - 220
19234
+ })).current;
19235
+ const panResponder = (0, import_react23.useRef)(
19236
+ import_react_native22.PanResponder.create({
19237
+ onStartShouldSetPanResponder: () => true,
19238
+ onMoveShouldSetPanResponder: (_, gs) => Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5,
19239
+ onPanResponderGrant: () => {
19240
+ pan.setOffset({
19241
+ x: getAnimatedValue(pan.x),
19242
+ y: getAnimatedValue(pan.y)
19243
+ });
19244
+ pan.setValue({ x: 0, y: 0 });
19245
+ },
19246
+ onPanResponderMove: import_react_native22.Animated.event(
19247
+ [null, { dx: pan.x, dy: pan.y }],
19248
+ { useNativeDriver: false }
19249
+ ),
19250
+ onPanResponderRelease: () => {
19251
+ pan.flattenOffset();
19252
+ const currentX = getAnimatedValue(pan.x);
19253
+ const currentY = getAnimatedValue(pan.y);
19254
+ const snapX = currentX < screenWidth / 2 ? 16 : screenWidth - RUNNER_WIDTH - 16;
19255
+ const snapY = Math.max(80, Math.min(currentY, screenHeight - 200));
19256
+ import_react_native22.Animated.spring(pan, {
19257
+ toValue: { x: snapX, y: snapY },
19258
+ useNativeDriver: false,
19259
+ friction: 7,
19260
+ tension: 40
19261
+ }).start();
19262
+ }
19263
+ })
19264
+ ).current;
19265
+ (0, import_react23.useEffect)(() => {
19266
+ if (!assignment?.startedAt) return;
19267
+ const startTime = new Date(assignment.startedAt).getTime();
19268
+ setElapsedTime(Math.floor((Date.now() - startTime) / 1e3));
19269
+ const interval = setInterval(() => {
19270
+ setElapsedTime(Math.floor((Date.now() - startTime) / 1e3));
19271
+ }, 1e3);
19272
+ return () => clearInterval(interval);
19273
+ }, [assignment?.startedAt]);
19274
+ const handlePass = (0, import_react23.useCallback)(async () => {
19275
+ if (!client || !assignment || isSubmitting) return;
19276
+ setIsSubmitting(true);
19277
+ try {
19278
+ const passedId = assignment.id;
19279
+ await client.passAssignment(passedId);
19280
+ client.submitTestFeedback({
19281
+ testCaseId: assignment.testCase.id,
19282
+ assignmentId: passedId,
19283
+ feedback: { rating: 5 }
19284
+ }).catch(() => {
19285
+ });
19286
+ await refreshAssignments();
19287
+ const remaining = assignments.filter(
19288
+ (a) => (a.status === "pending" || a.status === "in_progress") && a.id !== passedId
19289
+ );
19290
+ if (remaining.length > 0) {
19291
+ onAdvance(remaining[0].id);
19292
+ } else {
19293
+ onComplete();
19294
+ }
19295
+ } finally {
19296
+ setIsSubmitting(false);
19297
+ }
19298
+ }, [client, assignment, isSubmitting, refreshAssignments, assignments, onAdvance, onComplete]);
19299
+ const handleFail = (0, import_react23.useCallback)(async () => {
19300
+ if (!client || !assignment || isSubmitting) return;
19301
+ setIsSubmitting(true);
19302
+ try {
19303
+ await client.failAssignment(assignment.id);
19304
+ await refreshAssignments();
19305
+ onNavigateToReport(assignment.id, assignment.testCase.id);
19306
+ } finally {
19307
+ setIsSubmitting(false);
19308
+ }
19309
+ }, [client, assignment, isSubmitting, refreshAssignments, onNavigateToReport]);
19310
+ if (!assignment) return null;
19311
+ const testCase = assignment.testCase;
19312
+ const steps = testCase.steps;
19313
+ const totalSteps = steps.length;
19314
+ const currentStep = steps[currentStepIndex];
19315
+ return /* @__PURE__ */ import_react23.default.createElement(
19316
+ import_react_native22.Animated.View,
19317
+ {
19318
+ style: [
19319
+ styles4.container,
19320
+ { transform: pan.getTranslateTransform() },
19321
+ { opacity: mountAnim, transform: [...pan.getTranslateTransform(), { scale: mountAnim.interpolate({ inputRange: [0, 1], outputRange: [0.8, 1] }) }] }
19322
+ ],
19323
+ ...panResponder.panHandlers
19324
+ },
19325
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles4.header }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles4.headerLeft }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.stepCounter }, "Step ", currentStepIndex + 1, " of ", totalSteps), elapsedTime > 0 && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.timer }, formatElapsedTime(elapsedTime))), /* @__PURE__ */ import_react23.default.createElement(import_react_native22.TouchableOpacity, { onPress: onExpand, style: styles4.expandButton }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.expandText }, "\u2197 Expand"))),
19326
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles4.stepContent }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.stepAction, numberOfLines: 3 }, currentStep?.action || testCase.title), currentStep?.expectedResult && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.stepExpected, numberOfLines: 1 }, "\u2192 ", currentStep.expectedResult)),
19327
+ totalSteps > 1 && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles4.stepNav }, /* @__PURE__ */ import_react23.default.createElement(
19328
+ import_react_native22.TouchableOpacity,
19329
+ {
19330
+ disabled: currentStepIndex === 0,
19331
+ onPress: () => setCurrentStepIndex((i) => i - 1)
19332
+ },
19333
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: [styles4.stepNavText, currentStepIndex === 0 && styles4.stepNavDisabled] }, "\u25C0 Prev")
19334
+ ), /* @__PURE__ */ import_react23.default.createElement(
19335
+ import_react_native22.TouchableOpacity,
19336
+ {
19337
+ disabled: currentStepIndex >= totalSteps - 1,
19338
+ onPress: () => setCurrentStepIndex((i) => i + 1)
19339
+ },
19340
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: [styles4.stepNavText, currentStepIndex >= totalSteps - 1 && styles4.stepNavDisabled] }, "Next \u25B6")
19341
+ )),
19342
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles4.actions }, /* @__PURE__ */ import_react23.default.createElement(
19343
+ import_react_native22.TouchableOpacity,
19344
+ {
19345
+ style: [styles4.failBtn, isSubmitting && { opacity: 0.5 }],
19346
+ onPress: handleFail,
19347
+ disabled: isSubmitting
19348
+ },
19349
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.failText }, "Fail")
19350
+ ), /* @__PURE__ */ import_react23.default.createElement(
19351
+ import_react_native22.TouchableOpacity,
19352
+ {
19353
+ style: [styles4.passBtn, isSubmitting && { opacity: 0.5 }],
19354
+ onPress: handlePass,
19355
+ disabled: isSubmitting
19356
+ },
19357
+ /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles4.passText }, isSubmitting ? "Passing..." : "\u2713 Pass")
19358
+ ))
19359
+ );
19360
+ }
19361
+ var styles4 = import_react_native22.StyleSheet.create({
19362
+ container: {
19363
+ position: "absolute",
19364
+ width: RUNNER_WIDTH,
19365
+ zIndex: 9999,
19366
+ backgroundColor: colors.bg,
19367
+ borderRadius: 12,
19368
+ borderWidth: 1,
19369
+ borderColor: colors.border,
19370
+ shadowColor: "#000",
19371
+ shadowOffset: { width: 0, height: 8 },
19372
+ shadowOpacity: 0.4,
19373
+ shadowRadius: 16,
19374
+ elevation: 20,
19375
+ overflow: "hidden"
19376
+ },
19377
+ header: {
19378
+ backgroundColor: colors.bgDarker,
19379
+ paddingVertical: 6,
19380
+ paddingHorizontal: 12,
19381
+ flexDirection: "row",
19382
+ alignItems: "center",
19383
+ justifyContent: "space-between",
19384
+ borderBottomWidth: 1,
19385
+ borderBottomColor: colors.border
19386
+ },
19387
+ headerLeft: {
19388
+ flexDirection: "row",
19389
+ alignItems: "center",
19390
+ gap: 6
19391
+ },
19392
+ stepCounter: {
19393
+ fontSize: 11,
19394
+ color: colors.textMuted
19395
+ },
19396
+ timer: {
19397
+ fontSize: 10,
19398
+ color: colors.green,
19399
+ fontWeight: "600",
19400
+ fontVariant: ["tabular-nums"]
19401
+ },
19402
+ expandButton: {
19403
+ paddingVertical: 2,
19404
+ paddingHorizontal: 4
19405
+ },
19406
+ expandText: {
19407
+ fontSize: 12,
19408
+ color: colors.blue,
19409
+ fontWeight: "500"
19410
+ },
19411
+ stepContent: {
19412
+ paddingVertical: 8,
19413
+ paddingHorizontal: 12
19414
+ },
19415
+ stepAction: {
19416
+ fontSize: 13,
19417
+ color: colors.textPrimary,
19418
+ lineHeight: 18
19419
+ },
19420
+ stepExpected: {
19421
+ fontSize: 11,
19422
+ color: colors.textMuted,
19423
+ fontStyle: "italic",
19424
+ marginTop: 2
19425
+ },
19426
+ stepNav: {
19427
+ flexDirection: "row",
19428
+ justifyContent: "center",
19429
+ gap: 16,
19430
+ paddingBottom: 6,
19431
+ paddingHorizontal: 12
19432
+ },
19433
+ stepNavText: {
19434
+ fontSize: 12,
19435
+ color: colors.blue,
19436
+ paddingVertical: 2,
19437
+ paddingHorizontal: 6
19438
+ },
19439
+ stepNavDisabled: {
19440
+ color: colors.textDim
19441
+ },
19442
+ actions: {
19443
+ flexDirection: "row",
19444
+ gap: 6,
19445
+ paddingVertical: 6,
19446
+ paddingHorizontal: 10,
19447
+ paddingBottom: 10,
19448
+ borderTopWidth: 1,
19449
+ borderTopColor: colors.border
19450
+ },
19451
+ failBtn: {
19452
+ flex: 1,
19453
+ paddingVertical: 8,
19454
+ borderRadius: 8,
19455
+ backgroundColor: colors.redDark,
19456
+ borderWidth: 1,
19457
+ borderColor: colors.red,
19458
+ alignItems: "center"
19459
+ },
19460
+ failText: {
19461
+ fontSize: 12,
19462
+ fontWeight: "600",
19463
+ color: colors.redLight
19464
+ },
19465
+ passBtn: {
19466
+ flex: 2,
19467
+ paddingVertical: 8,
19468
+ borderRadius: 8,
19469
+ backgroundColor: colors.greenDark,
19470
+ borderWidth: 1,
19471
+ borderColor: colors.green,
19472
+ alignItems: "center"
19473
+ },
19474
+ passText: {
19475
+ fontSize: 12,
19476
+ fontWeight: "600",
19477
+ color: colors.greenLight
19478
+ }
19479
+ });
19480
+
19481
+ // src/BugBearButton.tsx
19482
+ var screenWidth2 = import_react_native23.Dimensions.get("window").width;
19483
+ var screenHeight2 = import_react_native23.Dimensions.get("window").height;
19146
19484
  function BugBearButton({
19147
19485
  position = "bottom-right",
19148
19486
  buttonStyle,
@@ -19154,16 +19492,18 @@ function BugBearButton({
19154
19492
  }) {
19155
19493
  const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments, widgetMode, widgetColorScheme } = useBugBear();
19156
19494
  const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
19157
- const [panelVisible, setPanelVisible] = (0, import_react23.useState)(false);
19158
- const panelAnim = (0, import_react23.useRef)(new import_react_native22.Animated.Value(0)).current;
19159
- const styles5 = (0, import_react23.useMemo)(() => createStyles16(), [widgetColorScheme]);
19160
- const screenCaptureRef = (0, import_react23.useRef)(null);
19495
+ const [viewMode, setViewMode] = (0, import_react24.useState)("closed");
19496
+ const [miniRunnerAssignmentId, setMiniRunnerAssignmentId] = (0, import_react24.useState)(null);
19497
+ const panelAnim = (0, import_react24.useRef)(new import_react_native23.Animated.Value(0)).current;
19498
+ const styles6 = (0, import_react24.useMemo)(() => createStyles16(), [widgetColorScheme]);
19499
+ const panelVisible = viewMode === "panel";
19500
+ const screenCaptureRef = (0, import_react24.useRef)(null);
19161
19501
  const openPanel = () => {
19162
19502
  captureAppScreen().then((uri) => {
19163
19503
  screenCaptureRef.current = uri;
19164
19504
  });
19165
- setPanelVisible(true);
19166
- import_react_native22.Animated.spring(panelAnim, {
19505
+ setViewMode("panel");
19506
+ import_react_native23.Animated.spring(panelAnim, {
19167
19507
  toValue: 1,
19168
19508
  useNativeDriver: true,
19169
19509
  friction: 8,
@@ -19171,13 +19511,13 @@ function BugBearButton({
19171
19511
  }).start();
19172
19512
  };
19173
19513
  const closePanel = () => {
19174
- import_react_native22.Keyboard.dismiss();
19175
- import_react_native22.Animated.timing(panelAnim, {
19514
+ import_react_native23.Keyboard.dismiss();
19515
+ import_react_native23.Animated.timing(panelAnim, {
19176
19516
  toValue: 0,
19177
19517
  duration: 250,
19178
19518
  useNativeDriver: true
19179
19519
  }).start(() => {
19180
- setPanelVisible(false);
19520
+ setViewMode("closed");
19181
19521
  });
19182
19522
  };
19183
19523
  const getInitialPosition = () => {
@@ -19186,22 +19526,22 @@ function BugBearButton({
19186
19526
  if (initialX !== void 0 && initialY !== void 0) {
19187
19527
  return { x: initialX, y: initialY };
19188
19528
  }
19189
- const x = position === "bottom-right" ? screenWidth - buttonSize - margin : margin;
19190
- const y = screenHeight - 160;
19529
+ const x = position === "bottom-right" ? screenWidth2 - buttonSize - margin : margin;
19530
+ const y = screenHeight2 - 160;
19191
19531
  return { x, y };
19192
19532
  };
19193
19533
  const initialPos = getInitialPosition();
19194
- const pan = (0, import_react23.useRef)(new import_react_native22.Animated.ValueXY(initialPos)).current;
19195
- const isDragging = (0, import_react23.useRef)(false);
19196
- const panResponder = (0, import_react23.useRef)(
19197
- import_react_native22.PanResponder.create({
19534
+ const pan = (0, import_react24.useRef)(new import_react_native23.Animated.ValueXY(initialPos)).current;
19535
+ const isDragging = (0, import_react24.useRef)(false);
19536
+ const panResponder = (0, import_react24.useRef)(
19537
+ import_react_native23.PanResponder.create({
19198
19538
  onStartShouldSetPanResponder: () => draggable,
19199
19539
  onMoveShouldSetPanResponder: (_, gs) => draggable && (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5),
19200
19540
  onPanResponderGrant: () => {
19201
19541
  isDragging.current = false;
19202
19542
  pan.setOffset({
19203
- x: pan.x._value,
19204
- y: pan.y._value
19543
+ x: getAnimatedValue(pan.x),
19544
+ y: getAnimatedValue(pan.y)
19205
19545
  });
19206
19546
  pan.setValue({ x: 0, y: 0 });
19207
19547
  },
@@ -19209,20 +19549,20 @@ function BugBearButton({
19209
19549
  if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {
19210
19550
  isDragging.current = true;
19211
19551
  }
19212
- import_react_native22.Animated.event(
19552
+ import_react_native23.Animated.event(
19213
19553
  [null, { dx: pan.x, dy: pan.y }],
19214
19554
  { useNativeDriver: false }
19215
19555
  )(_, gs);
19216
19556
  },
19217
19557
  onPanResponderRelease: (_, gs) => {
19218
19558
  pan.flattenOffset();
19219
- const currentX = pan.x._value;
19220
- const currentY = pan.y._value;
19559
+ const currentX = getAnimatedValue(pan.x);
19560
+ const currentY = getAnimatedValue(pan.y);
19221
19561
  const buttonSize = 56;
19222
19562
  const margin = 16;
19223
- const snapX = currentX < screenWidth / 2 ? margin : screenWidth - buttonSize - margin;
19224
- const snapY = Math.max(minY, Math.min(currentY, screenHeight - maxYOffset));
19225
- import_react_native22.Animated.spring(pan, {
19563
+ const snapX = currentX < screenWidth2 / 2 ? margin : screenWidth2 - buttonSize - margin;
19564
+ const snapY = Math.max(minY, Math.min(currentY, screenHeight2 - maxYOffset));
19565
+ import_react_native23.Animated.spring(pan, {
19226
19566
  toValue: { x: snapX, y: snapY },
19227
19567
  useNativeDriver: false,
19228
19568
  friction: 7,
@@ -19237,11 +19577,11 @@ function BugBearButton({
19237
19577
  ).current;
19238
19578
  const pendingTests = widgetMode === "qa" ? assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length : 0;
19239
19579
  const badgeCount = pendingTests + unreadCount;
19240
- (0, import_react23.useEffect)(() => {
19241
- if (!panelVisible || import_react_native22.Platform.OS !== "android") return;
19242
- const handler = import_react_native22.BackHandler.addEventListener("hardwareBackPress", () => {
19580
+ (0, import_react24.useEffect)(() => {
19581
+ if (!panelVisible || import_react_native23.Platform.OS !== "android") return;
19582
+ const handler = import_react_native23.BackHandler.addEventListener("hardwareBackPress", () => {
19243
19583
  if (canGoBack) {
19244
- import_react_native22.Keyboard.dismiss();
19584
+ import_react_native23.Keyboard.dismiss();
19245
19585
  pop();
19246
19586
  } else {
19247
19587
  closePanel();
@@ -19250,6 +19590,51 @@ function BugBearButton({
19250
19590
  });
19251
19591
  return () => handler.remove();
19252
19592
  }, [panelVisible, canGoBack]);
19593
+ const startMiniRunner = (0, import_react24.useCallback)((assignId) => {
19594
+ import_react_native23.Keyboard.dismiss();
19595
+ import_react_native23.Animated.timing(panelAnim, {
19596
+ toValue: 0,
19597
+ duration: 200,
19598
+ useNativeDriver: true
19599
+ }).start(() => {
19600
+ setMiniRunnerAssignmentId(assignId);
19601
+ setViewMode("mini-runner");
19602
+ });
19603
+ }, [panelAnim]);
19604
+ const expandFromMiniRunner = (0, import_react24.useCallback)(() => {
19605
+ setViewMode("panel");
19606
+ if (miniRunnerAssignmentId) {
19607
+ replace({ name: "TEST_DETAIL", testId: miniRunnerAssignmentId });
19608
+ }
19609
+ setMiniRunnerAssignmentId(null);
19610
+ import_react_native23.Animated.spring(panelAnim, {
19611
+ toValue: 1,
19612
+ useNativeDriver: true,
19613
+ friction: 8,
19614
+ tension: 65
19615
+ }).start();
19616
+ }, [miniRunnerAssignmentId, replace, panelAnim]);
19617
+ const handleMiniRunnerAdvance = (0, import_react24.useCallback)((nextId) => {
19618
+ setMiniRunnerAssignmentId(nextId);
19619
+ }, []);
19620
+ const handleMiniRunnerComplete = (0, import_react24.useCallback)(() => {
19621
+ setMiniRunnerAssignmentId(null);
19622
+ setViewMode("closed");
19623
+ }, []);
19624
+ const handleMiniRunnerReport = (0, import_react24.useCallback)((assignId, testCaseId) => {
19625
+ setMiniRunnerAssignmentId(null);
19626
+ setViewMode("panel");
19627
+ replace({
19628
+ name: "REPORT",
19629
+ prefill: { type: "test_fail", assignmentId: assignId, testCaseId }
19630
+ });
19631
+ import_react_native23.Animated.spring(panelAnim, {
19632
+ toValue: 1,
19633
+ useNativeDriver: true,
19634
+ friction: 8,
19635
+ tension: 65
19636
+ }).start();
19637
+ }, [replace, panelAnim]);
19253
19638
  if (!shouldShowWidget) return null;
19254
19639
  const getHeaderTitle = () => {
19255
19640
  switch (currentScreen.name) {
@@ -19292,40 +19677,41 @@ function BugBearButton({
19292
19677
  };
19293
19678
  const nav = {
19294
19679
  push: (screen) => {
19295
- import_react_native22.Keyboard.dismiss();
19680
+ import_react_native23.Keyboard.dismiss();
19296
19681
  push(screen);
19297
19682
  },
19298
19683
  pop: () => {
19299
- import_react_native22.Keyboard.dismiss();
19684
+ import_react_native23.Keyboard.dismiss();
19300
19685
  pop();
19301
19686
  },
19302
19687
  replace: (screen) => {
19303
- import_react_native22.Keyboard.dismiss();
19688
+ import_react_native23.Keyboard.dismiss();
19304
19689
  replace(screen);
19305
19690
  },
19306
19691
  reset: () => {
19307
- import_react_native22.Keyboard.dismiss();
19692
+ import_react_native23.Keyboard.dismiss();
19308
19693
  reset();
19309
19694
  },
19310
19695
  canGoBack,
19311
- closeWidget: handleClose
19696
+ closeWidget: handleClose,
19697
+ startMiniRunner
19312
19698
  };
19313
19699
  const QA_ONLY_SCREENS = ["TEST_DETAIL", "TEST_LIST", "TEST_FEEDBACK", "SESSION_START", "SESSION_ACTIVE", "SESSION_FINDING"];
19314
19700
  const renderScreen = () => {
19315
19701
  if (widgetMode === "feedback" && QA_ONLY_SCREENS.includes(currentScreen.name)) {
19316
- return /* @__PURE__ */ import_react23.default.createElement(HomeScreen, { nav });
19702
+ return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
19317
19703
  }
19318
19704
  switch (currentScreen.name) {
19319
19705
  case "HOME":
19320
- return /* @__PURE__ */ import_react23.default.createElement(HomeScreen, { nav });
19706
+ return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
19321
19707
  case "TEST_DETAIL":
19322
- return /* @__PURE__ */ import_react23.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
19708
+ return /* @__PURE__ */ import_react24.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
19323
19709
  case "TEST_LIST":
19324
- return /* @__PURE__ */ import_react23.default.createElement(TestListScreen, { nav });
19710
+ return /* @__PURE__ */ import_react24.default.createElement(TestListScreen, { nav });
19325
19711
  case "TEST_FEEDBACK":
19326
- return /* @__PURE__ */ import_react23.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
19712
+ return /* @__PURE__ */ import_react24.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
19327
19713
  case "REPORT":
19328
- return /* @__PURE__ */ import_react23.default.createElement(
19714
+ return /* @__PURE__ */ import_react24.default.createElement(
19329
19715
  ReportScreen,
19330
19716
  {
19331
19717
  nav,
@@ -19337,84 +19723,93 @@ function BugBearButton({
19337
19723
  }
19338
19724
  );
19339
19725
  case "REPORT_SUCCESS":
19340
- return /* @__PURE__ */ import_react23.default.createElement(ReportSuccessScreen, { nav });
19726
+ return /* @__PURE__ */ import_react24.default.createElement(ReportSuccessScreen, { nav });
19341
19727
  case "MESSAGE_LIST":
19342
- return /* @__PURE__ */ import_react23.default.createElement(MessageListScreen, { nav });
19728
+ return /* @__PURE__ */ import_react24.default.createElement(MessageListScreen, { nav });
19343
19729
  case "THREAD_DETAIL":
19344
- return /* @__PURE__ */ import_react23.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
19730
+ return /* @__PURE__ */ import_react24.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
19345
19731
  case "COMPOSE_MESSAGE":
19346
- return /* @__PURE__ */ import_react23.default.createElement(ComposeMessageScreen, { nav });
19732
+ return /* @__PURE__ */ import_react24.default.createElement(ComposeMessageScreen, { nav });
19347
19733
  case "ISSUE_LIST":
19348
- return /* @__PURE__ */ import_react23.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
19734
+ return /* @__PURE__ */ import_react24.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
19349
19735
  case "ISSUE_DETAIL":
19350
- return /* @__PURE__ */ import_react23.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
19736
+ return /* @__PURE__ */ import_react24.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
19351
19737
  case "PROFILE":
19352
- return /* @__PURE__ */ import_react23.default.createElement(ProfileScreen, { nav });
19738
+ return /* @__PURE__ */ import_react24.default.createElement(ProfileScreen, { nav });
19353
19739
  case "SESSION_START":
19354
- return /* @__PURE__ */ import_react23.default.createElement(SessionStartScreen, { nav });
19740
+ return /* @__PURE__ */ import_react24.default.createElement(SessionStartScreen, { nav });
19355
19741
  case "SESSION_ACTIVE":
19356
- return /* @__PURE__ */ import_react23.default.createElement(SessionActiveScreen, { nav });
19742
+ return /* @__PURE__ */ import_react24.default.createElement(SessionActiveScreen, { nav });
19357
19743
  case "SESSION_FINDING":
19358
- return /* @__PURE__ */ import_react23.default.createElement(SessionFindingScreen, { nav });
19744
+ return /* @__PURE__ */ import_react24.default.createElement(SessionFindingScreen, { nav });
19359
19745
  default:
19360
- return /* @__PURE__ */ import_react23.default.createElement(HomeScreen, { nav });
19746
+ return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
19361
19747
  }
19362
19748
  };
19363
- return /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, !panelVisible && /* @__PURE__ */ import_react23.default.createElement(
19364
- import_react_native22.Animated.View,
19749
+ return /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, viewMode === "mini-runner" && miniRunnerAssignmentId && /* @__PURE__ */ import_react24.default.createElement(
19750
+ MiniTestRunner,
19751
+ {
19752
+ assignmentId: miniRunnerAssignmentId,
19753
+ onExpand: expandFromMiniRunner,
19754
+ onAdvance: handleMiniRunnerAdvance,
19755
+ onComplete: handleMiniRunnerComplete,
19756
+ onNavigateToReport: handleMiniRunnerReport
19757
+ }
19758
+ ), viewMode === "closed" && /* @__PURE__ */ import_react24.default.createElement(
19759
+ import_react_native23.Animated.View,
19365
19760
  {
19366
- style: [styles5.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
19761
+ style: [styles6.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
19367
19762
  ...panResponder.panHandlers
19368
19763
  },
19369
- /* @__PURE__ */ import_react23.default.createElement(
19370
- import_react_native22.TouchableOpacity,
19764
+ /* @__PURE__ */ import_react24.default.createElement(
19765
+ import_react_native23.TouchableOpacity,
19371
19766
  {
19372
- style: styles5.fab,
19767
+ style: styles6.fab,
19373
19768
  onPress: openPanel,
19374
19769
  activeOpacity: draggable ? 1 : 0.7
19375
19770
  },
19376
- /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles5.fabIcon }),
19377
- badgeCount > 0 && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.badge }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
19771
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles6.fabIcon }),
19772
+ badgeCount > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.badge }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
19378
19773
  )
19379
- ), panelVisible && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react23.default.createElement(
19380
- import_react_native22.KeyboardAvoidingView,
19774
+ ), viewMode === "panel" && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react24.default.createElement(
19775
+ import_react_native23.KeyboardAvoidingView,
19381
19776
  {
19382
- behavior: import_react_native22.Platform.OS === "ios" ? "padding" : "height",
19383
- style: styles5.panelKeyboardAvoid,
19777
+ behavior: import_react_native23.Platform.OS === "ios" ? "padding" : "height",
19778
+ style: styles6.panelKeyboardAvoid,
19384
19779
  pointerEvents: "box-none"
19385
19780
  },
19386
- /* @__PURE__ */ import_react23.default.createElement(
19387
- import_react_native22.Animated.View,
19781
+ /* @__PURE__ */ import_react24.default.createElement(
19782
+ import_react_native23.Animated.View,
19388
19783
  {
19389
19784
  style: [
19390
- styles5.panelContainer,
19785
+ styles6.panelContainer,
19391
19786
  {
19392
19787
  transform: [{
19393
19788
  translateY: panelAnim.interpolate({
19394
19789
  inputRange: [0, 1],
19395
- outputRange: [screenHeight, 0]
19790
+ outputRange: [screenHeight2, 0]
19396
19791
  })
19397
19792
  }]
19398
19793
  }
19399
19794
  ]
19400
19795
  },
19401
- /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.panelHandle }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.panelHandleBar })),
19402
- /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.header }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.headerLeft }, canGoBack ? /* @__PURE__ */ import_react23.default.createElement(import_react_native22.TouchableOpacity, { onPress: () => nav.pop(), style: styles5.backButton }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.backText }, "\u2190 Back")) : /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.headerTitleRow }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.TouchableOpacity, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.headerActions }, currentScreen.name !== "HOME" && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.TouchableOpacity, { onPress: () => nav.reset(), style: styles5.homeButton }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.homeIcon }, "\u2302")), /* @__PURE__ */ import_react23.default.createElement(import_react_native22.TouchableOpacity, { onPress: handleClose, style: styles5.closeButton }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.closeText }, "\u2715")))),
19403
- /* @__PURE__ */ import_react23.default.createElement(
19404
- import_react_native22.ScrollView,
19796
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelHandle }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelHandleBar })),
19797
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.header }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.headerLeft }, canGoBack ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => nav.pop(), style: styles6.backButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.backText }, "\u2190 Back")) : /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.headerTitleRow }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.headerActions }, currentScreen.name !== "HOME" && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => nav.reset(), style: styles6.homeButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.homeIcon }, "\u2302")), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: handleClose, style: styles6.closeButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.closeText }, "\u2715")))),
19798
+ /* @__PURE__ */ import_react24.default.createElement(
19799
+ import_react_native23.ScrollView,
19405
19800
  {
19406
- style: styles5.content,
19407
- contentContainerStyle: styles5.contentContainer,
19801
+ style: styles6.content,
19802
+ contentContainerStyle: styles6.contentContainer,
19408
19803
  keyboardShouldPersistTaps: "handled",
19409
19804
  showsVerticalScrollIndicator: false
19410
19805
  },
19411
- isLoading ? /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.loadingContainer }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.ActivityIndicator, { size: "large", color: colors.blue }), /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Text, { style: styles5.loadingText }, "Loading...")) : renderScreen()
19806
+ isLoading ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.loadingContainer }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.ActivityIndicator, { size: "large", color: colors.blue }), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.loadingText }, "Loading...")) : renderScreen()
19412
19807
  )
19413
19808
  )
19414
19809
  )));
19415
19810
  }
19416
19811
  function createStyles16() {
19417
- return import_react_native22.StyleSheet.create({
19812
+ return import_react_native23.StyleSheet.create({
19418
19813
  // FAB
19419
19814
  fabContainer: {
19420
19815
  position: "absolute",
@@ -19573,7 +19968,7 @@ function createStyles16() {
19573
19968
  },
19574
19969
  contentContainer: {
19575
19970
  padding: 16,
19576
- paddingBottom: import_react_native22.Platform.OS === "ios" ? 50 : 28
19971
+ paddingBottom: import_react_native23.Platform.OS === "ios" ? 50 : 28
19577
19972
  },
19578
19973
  // Loading
19579
19974
  loadingContainer: {
@@ -19589,9 +19984,9 @@ function createStyles16() {
19589
19984
  }
19590
19985
 
19591
19986
  // src/BugBearErrorBoundary.tsx
19592
- var import_react24 = __toESM(require("react"));
19593
- var import_react_native23 = require("react-native");
19594
- var BugBearErrorBoundary = class extends import_react24.Component {
19987
+ var import_react25 = __toESM(require("react"));
19988
+ var import_react_native24 = require("react-native");
19989
+ var BugBearErrorBoundary = class extends import_react25.Component {
19595
19990
  constructor(props) {
19596
19991
  super(props);
19597
19992
  this.reset = () => {
@@ -19635,7 +20030,7 @@ var BugBearErrorBoundary = class extends import_react24.Component {
19635
20030
  if (fallback) {
19636
20031
  return fallback;
19637
20032
  }
19638
- return /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles4.container }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles4.title }, "Something went wrong"), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles4.message }, error.message), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { style: styles4.button, onPress: this.reset }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles4.buttonText }, "Try Again")), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles4.caption }, "The error has been captured by BugBear"));
20033
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles5.container }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.title }, "Something went wrong"), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.message }, error.message), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.TouchableOpacity, { style: styles5.button, onPress: this.reset }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.buttonText }, "Try Again")), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.caption }, "The error has been captured by BugBear"));
19639
20034
  }
19640
20035
  return children;
19641
20036
  }
@@ -19646,7 +20041,7 @@ function useErrorContext() {
19646
20041
  getEnhancedContext: () => contextCapture.getEnhancedContext()
19647
20042
  };
19648
20043
  }
19649
- var styles4 = import_react_native23.StyleSheet.create({
20044
+ var styles5 = import_react_native24.StyleSheet.create({
19650
20045
  container: {
19651
20046
  padding: 20,
19652
20047
  margin: 20,