@bbearai/react-native 0.9.0 → 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 +842 -422
  2. package/dist/index.mjs +842 -422
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -12793,55 +12793,66 @@ var BugBearClient = class {
12793
12793
  ...pendingResult.data || [],
12794
12794
  ...completedResult.data || []
12795
12795
  ];
12796
- const mapItem = (item) => ({
12797
- id: item.id,
12798
- status: item.status,
12799
- startedAt: item.started_at,
12800
- skipReason: item.skip_reason,
12801
- isVerification: item.is_verification || false,
12802
- originalReportId: item.original_report_id,
12803
- testCase: {
12804
- id: item.test_case.id,
12805
- title: item.test_case.title,
12806
- testKey: item.test_case.test_key,
12807
- description: item.test_case.description,
12808
- steps: item.test_case.steps,
12809
- expectedResult: item.test_case.expected_result,
12810
- priority: item.test_case.priority,
12811
- targetRoute: item.test_case.target_route,
12812
- track: item.test_case.track ? {
12813
- id: item.test_case.track.id,
12814
- name: item.test_case.track.name,
12815
- icon: item.test_case.track.icon,
12816
- color: item.test_case.track.color,
12817
- testTemplate: item.test_case.track.test_template,
12818
- rubricMode: item.test_case.track.rubric_mode || "pass_fail",
12819
- description: item.test_case.track.description
12820
- } : void 0,
12821
- group: item.test_case.group ? {
12822
- id: item.test_case.group.id,
12823
- name: item.test_case.group.name,
12824
- description: item.test_case.group.description,
12825
- sortOrder: item.test_case.group.sort_order
12826
- } : void 0,
12827
- role: item.test_case.role ? {
12828
- id: item.test_case.role.id,
12829
- name: item.test_case.role.name,
12830
- slug: item.test_case.role.slug,
12831
- color: item.test_case.role.color,
12832
- description: item.test_case.role.description,
12833
- loginHint: item.test_case.role.login_hint
12834
- } : void 0,
12835
- platforms: item.test_case.platforms || void 0
12836
- }
12837
- });
12838
- const mapped = allData.filter((item) => {
12839
- if (!item.test_case) {
12840
- console.warn("BugBear: Assignment returned without test_case", { id: item.id });
12841
- return false;
12842
- }
12843
- return true;
12844
- }).map(mapItem);
12796
+ const mapItem = (item) => {
12797
+ const tc = item.test_case;
12798
+ return {
12799
+ id: item.id,
12800
+ status: item.status,
12801
+ startedAt: item.started_at,
12802
+ skipReason: item.skip_reason,
12803
+ isVerification: item.is_verification || false,
12804
+ originalReportId: item.original_report_id,
12805
+ testCase: tc ? {
12806
+ id: tc.id,
12807
+ title: tc.title,
12808
+ testKey: tc.test_key,
12809
+ description: tc.description,
12810
+ steps: tc.steps,
12811
+ expectedResult: tc.expected_result,
12812
+ priority: tc.priority,
12813
+ targetRoute: tc.target_route,
12814
+ track: tc.track ? {
12815
+ id: tc.track.id,
12816
+ name: tc.track.name,
12817
+ icon: tc.track.icon,
12818
+ color: tc.track.color,
12819
+ testTemplate: tc.track.test_template,
12820
+ rubricMode: tc.track.rubric_mode || "pass_fail",
12821
+ description: tc.track.description
12822
+ } : void 0,
12823
+ group: tc.group ? {
12824
+ id: tc.group.id,
12825
+ name: tc.group.name,
12826
+ description: tc.group.description,
12827
+ sortOrder: tc.group.sort_order
12828
+ } : void 0,
12829
+ role: tc.role ? {
12830
+ id: tc.role.id,
12831
+ name: tc.role.name,
12832
+ slug: tc.role.slug,
12833
+ color: tc.role.color,
12834
+ description: tc.role.description,
12835
+ loginHint: tc.role.login_hint
12836
+ } : void 0,
12837
+ platforms: tc.platforms || void 0
12838
+ } : {
12839
+ // Standalone verification assignment (bug reported without a test case)
12840
+ id: item.original_report_id || item.id,
12841
+ title: item.notes || "Bug Verification",
12842
+ testKey: "VERIFY",
12843
+ description: "Verify that the reported bug has been fixed",
12844
+ steps: [],
12845
+ expectedResult: "The bug should no longer be reproducible",
12846
+ priority: "P1",
12847
+ targetRoute: void 0,
12848
+ track: void 0,
12849
+ group: void 0,
12850
+ role: void 0,
12851
+ platforms: void 0
12852
+ }
12853
+ };
12854
+ };
12855
+ const mapped = allData.map(mapItem);
12845
12856
  mapped.sort((a, b) => {
12846
12857
  if (a.isVerification && !b.isVerification) return -1;
12847
12858
  if (!a.isVerification && b.isVerification) return 1;
@@ -13355,7 +13366,11 @@ var BugBearClient = class {
13355
13366
  verifiedByName: row.verified_by_name || void 0,
13356
13367
  verifiedAt: row.verified_at || void 0,
13357
13368
  originalBugId: row.original_bug_id || void 0,
13358
- originalBugTitle: row.original_bug_title || void 0
13369
+ originalBugTitle: row.original_bug_title || void 0,
13370
+ resolutionNotes: row.resolution_notes || void 0,
13371
+ fixCommitSha: row.code_context?.fix?.commit_sha || void 0,
13372
+ fixCommitMessage: row.code_context?.fix?.commit_message || void 0,
13373
+ fixFilesChanged: row.code_context?.fix?.files_changed || void 0
13359
13374
  }));
13360
13375
  } catch (err) {
13361
13376
  console.error("BugBear: Error fetching issues", err);
@@ -15180,8 +15195,8 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
15180
15195
  }
15181
15196
 
15182
15197
  // src/BugBearButton.tsx
15183
- var import_react23 = __toESM(require("react"));
15184
- var import_react_native22 = require("react-native");
15198
+ var import_react24 = __toESM(require("react"));
15199
+ var import_react_native23 = require("react-native");
15185
15200
 
15186
15201
  // src/widget/logo.ts
15187
15202
  var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
@@ -15236,6 +15251,11 @@ async function captureAppScreen() {
15236
15251
  }
15237
15252
  }
15238
15253
 
15254
+ // src/widget/animatedUtils.ts
15255
+ function getAnimatedValue(value) {
15256
+ return value._value;
15257
+ }
15258
+
15239
15259
  // src/widget/screens/HomeScreen.tsx
15240
15260
  var import_react4 = __toESM(require("react"));
15241
15261
  var import_react_native4 = require("react-native");
@@ -15320,7 +15340,7 @@ var s = import_react_native3.StyleSheet.create({
15320
15340
  // src/widget/screens/HomeScreen.tsx
15321
15341
  function HomeScreen({ nav }) {
15322
15342
  const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl, isLoading, activeSession, sessionFindings, refreshSession, widgetMode, widgetColorScheme } = useBugBear();
15323
- const styles5 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15343
+ const styles6 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15324
15344
  const [sessionElapsed, setSessionElapsed] = (0, import_react4.useState)(0);
15325
15345
  const timerRef = (0, import_react4.useRef)(null);
15326
15346
  (0, import_react4.useEffect)(() => {
@@ -15349,98 +15369,98 @@ function HomeScreen({ nav }) {
15349
15369
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15350
15370
  import_react_native4.TouchableOpacity,
15351
15371
  {
15352
- style: [styles5.heroBanner, styles5.heroBannerMessages],
15372
+ style: [styles6.heroBanner, styles6.heroBannerMessages],
15353
15373
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15354
15374
  activeOpacity: 0.8
15355
15375
  },
15356
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroCount }, unreadCount),
15357
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15358
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroAction }, "View Messages \u2192")
15359
- ) : /* @__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(
15360
15380
  import_react_native4.TouchableOpacity,
15361
15381
  {
15362
- style: styles5.actionCard,
15382
+ style: styles6.actionCard,
15363
15383
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15364
15384
  activeOpacity: 0.7
15365
15385
  },
15366
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F41B}"),
15367
- /* @__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")
15368
15388
  ), /* @__PURE__ */ import_react4.default.createElement(
15369
15389
  import_react_native4.TouchableOpacity,
15370
15390
  {
15371
- style: styles5.actionCard,
15391
+ style: styles6.actionCard,
15372
15392
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15373
15393
  activeOpacity: 0.7
15374
15394
  },
15375
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4A1}"),
15376
- /* @__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")
15377
15397
  ), /* @__PURE__ */ import_react4.default.createElement(
15378
15398
  import_react_native4.TouchableOpacity,
15379
15399
  {
15380
- style: styles5.actionCard,
15400
+ style: styles6.actionCard,
15381
15401
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15382
15402
  activeOpacity: 0.7
15383
15403
  },
15384
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4AC}"),
15385
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Messages"),
15386
- 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))
15387
15407
  ), /* @__PURE__ */ import_react4.default.createElement(
15388
15408
  import_react_native4.TouchableOpacity,
15389
15409
  {
15390
- style: styles5.actionCard,
15410
+ style: styles6.actionCard,
15391
15411
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15392
15412
  activeOpacity: 0.7
15393
15413
  },
15394
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4CB}"),
15395
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "My Issues"),
15396
- 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))
15397
- )), /* @__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(
15398
15418
  import_react_native4.TouchableOpacity,
15399
15419
  {
15400
- style: [styles5.issueCard, styles5.issueCardOpen],
15420
+ style: [styles6.issueCard, styles6.issueCardOpen],
15401
15421
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15402
15422
  activeOpacity: 0.7
15403
15423
  },
15404
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountOpen }, issueCounts.open),
15405
- /* @__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")
15406
15426
  ), /* @__PURE__ */ import_react4.default.createElement(
15407
15427
  import_react_native4.TouchableOpacity,
15408
15428
  {
15409
- style: [styles5.issueCard, styles5.issueCardDone],
15429
+ style: [styles6.issueCard, styles6.issueCardDone],
15410
15430
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15411
15431
  activeOpacity: 0.7
15412
15432
  },
15413
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountDone }, issueCounts.done),
15414
- /* @__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")
15415
15435
  ), /* @__PURE__ */ import_react4.default.createElement(
15416
15436
  import_react_native4.TouchableOpacity,
15417
15437
  {
15418
- style: [styles5.issueCard, styles5.issueCardReopened],
15438
+ style: [styles6.issueCard, styles6.issueCardReopened],
15419
15439
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15420
15440
  activeOpacity: 0.7
15421
15441
  },
15422
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountReopened }, issueCounts.reopened),
15423
- /* @__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")
15424
15444
  )), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15425
15445
  import_react_native4.TouchableOpacity,
15426
15446
  {
15427
- style: styles5.webAppLink,
15447
+ style: styles6.webAppLink,
15428
15448
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15429
15449
  activeOpacity: 0.7
15430
15450
  },
15431
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppIcon }, "\u{1F310}"),
15432
- /* @__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")),
15433
- /* @__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")
15434
15454
  ), /* @__PURE__ */ import_react4.default.createElement(
15435
15455
  import_react_native4.TouchableOpacity,
15436
15456
  {
15437
- style: styles5.refreshButton,
15457
+ style: styles6.refreshButton,
15438
15458
  onPress: () => {
15439
15459
  refreshThreads();
15440
15460
  refreshIssueCounts();
15441
15461
  }
15442
15462
  },
15443
- /* @__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")
15444
15464
  ));
15445
15465
  }
15446
15466
  const formatTimer = (s2) => {
@@ -15457,130 +15477,130 @@ function HomeScreen({ nav }) {
15457
15477
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, pendingCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15458
15478
  import_react_native4.TouchableOpacity,
15459
15479
  {
15460
- style: [styles5.heroBanner, styles5.heroBannerTests],
15480
+ style: [styles6.heroBanner, styles6.heroBannerTests],
15461
15481
  onPress: () => nav.push({ name: "TEST_DETAIL" }),
15462
15482
  activeOpacity: 0.8
15463
15483
  },
15464
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroCount }, pendingCount),
15465
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
15466
- 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" : "")),
15467
- /* @__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")
15468
15488
  ) : unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15469
15489
  import_react_native4.TouchableOpacity,
15470
15490
  {
15471
- style: [styles5.heroBanner, styles5.heroBannerMessages],
15491
+ style: [styles6.heroBanner, styles6.heroBannerMessages],
15472
15492
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15473
15493
  activeOpacity: 0.8
15474
15494
  },
15475
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroCount }, unreadCount),
15476
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15477
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.heroAction }, "View Messages \u2192")
15478
- ) : /* @__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(
15479
15499
  import_react_native4.TouchableOpacity,
15480
15500
  {
15481
- style: styles5.sessionCardActive,
15501
+ style: styles6.sessionCardActive,
15482
15502
  onPress: () => nav.push({ name: "SESSION_ACTIVE" }),
15483
15503
  activeOpacity: 0.8
15484
15504
  },
15485
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles5.sessionDot }),
15486
- /* @__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" : "")),
15487
- /* @__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")
15488
15508
  ) : /* @__PURE__ */ import_react4.default.createElement(
15489
15509
  import_react_native4.TouchableOpacity,
15490
15510
  {
15491
- style: styles5.sessionCardInactive,
15511
+ style: styles6.sessionCardInactive,
15492
15512
  onPress: () => nav.push({ name: "SESSION_START" }),
15493
15513
  activeOpacity: 0.7
15494
15514
  },
15495
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardIcon }, "\u{1F50D}"),
15496
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardLabel }, "Start QA Session"),
15497
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.sessionCardArrow }, "\u2192")
15498
- ), /* @__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(
15499
15519
  import_react_native4.TouchableOpacity,
15500
15520
  {
15501
- style: styles5.actionCard,
15521
+ style: styles6.actionCard,
15502
15522
  onPress: () => nav.push({ name: "TEST_LIST" }),
15503
15523
  activeOpacity: 0.7
15504
15524
  },
15505
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u2705"),
15506
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Tests"),
15507
- 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))
15508
15528
  ), /* @__PURE__ */ import_react4.default.createElement(
15509
15529
  import_react_native4.TouchableOpacity,
15510
15530
  {
15511
- style: styles5.actionCard,
15531
+ style: styles6.actionCard,
15512
15532
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15513
15533
  activeOpacity: 0.7
15514
15534
  },
15515
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F41B}"),
15516
- /* @__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")
15517
15537
  ), /* @__PURE__ */ import_react4.default.createElement(
15518
15538
  import_react_native4.TouchableOpacity,
15519
15539
  {
15520
- style: styles5.actionCard,
15540
+ style: styles6.actionCard,
15521
15541
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15522
15542
  activeOpacity: 0.7
15523
15543
  },
15524
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4A1}"),
15525
- /* @__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")
15526
15546
  ), /* @__PURE__ */ import_react4.default.createElement(
15527
15547
  import_react_native4.TouchableOpacity,
15528
15548
  {
15529
- style: styles5.actionCard,
15549
+ style: styles6.actionCard,
15530
15550
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15531
15551
  activeOpacity: 0.7
15532
15552
  },
15533
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionIcon }, "\u{1F4AC}"),
15534
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.actionLabel }, "Messages"),
15535
- 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))
15536
- )), /* @__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(
15537
15557
  import_react_native4.TouchableOpacity,
15538
15558
  {
15539
- style: [styles5.issueCard, styles5.issueCardOpen],
15559
+ style: [styles6.issueCard, styles6.issueCardOpen],
15540
15560
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15541
15561
  activeOpacity: 0.7
15542
15562
  },
15543
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountOpen }, issueCounts.open),
15544
- /* @__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")
15545
15565
  ), /* @__PURE__ */ import_react4.default.createElement(
15546
15566
  import_react_native4.TouchableOpacity,
15547
15567
  {
15548
- style: [styles5.issueCard, styles5.issueCardDone],
15568
+ style: [styles6.issueCard, styles6.issueCardDone],
15549
15569
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15550
15570
  activeOpacity: 0.7
15551
15571
  },
15552
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountDone }, issueCounts.done),
15553
- /* @__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")
15554
15574
  ), /* @__PURE__ */ import_react4.default.createElement(
15555
15575
  import_react_native4.TouchableOpacity,
15556
15576
  {
15557
- style: [styles5.issueCard, styles5.issueCardReopened],
15577
+ style: [styles6.issueCard, styles6.issueCardReopened],
15558
15578
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15559
15579
  activeOpacity: 0.7
15560
15580
  },
15561
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueCountReopened }, issueCounts.reopened),
15562
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.issueLabel }, "Reopened")
15563
- )), 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(
15564
15584
  import_react_native4.TouchableOpacity,
15565
15585
  {
15566
- style: styles5.webAppLink,
15586
+ style: styles6.webAppLink,
15567
15587
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15568
15588
  activeOpacity: 0.7
15569
15589
  },
15570
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles5.webAppIcon }, "\u{1F310}"),
15571
- /* @__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")),
15572
- /* @__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")
15573
15593
  ), /* @__PURE__ */ import_react4.default.createElement(
15574
15594
  import_react_native4.TouchableOpacity,
15575
15595
  {
15576
- style: styles5.refreshButton,
15596
+ style: styles6.refreshButton,
15577
15597
  onPress: () => {
15578
15598
  refreshAssignments();
15579
15599
  refreshThreads();
15580
15600
  refreshIssueCounts();
15581
15601
  }
15582
15602
  },
15583
- /* @__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")
15584
15604
  ));
15585
15605
  }
15586
15606
  function createStyles() {
@@ -15878,7 +15898,7 @@ var import_react5 = __toESM(require("react"));
15878
15898
  var import_react_native5 = require("react-native");
15879
15899
  function TestDetailScreen({ testId, nav }) {
15880
15900
  const { client, assignments, currentAssignment, refreshAssignments, getDeviceInfo, onNavigate, widgetColorScheme } = useBugBear();
15881
- const styles5 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15901
+ const styles6 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15882
15902
  const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
15883
15903
  const [showSteps, setShowSteps] = (0, import_react5.useState)(true);
15884
15904
  const [showDetails, setShowDetails] = (0, import_react5.useState)(false);
@@ -15889,6 +15909,20 @@ function TestDetailScreen({ testId, nav }) {
15889
15909
  const [skipNotes, setSkipNotes] = (0, import_react5.useState)("");
15890
15910
  const [skipping, setSkipping] = (0, import_react5.useState)(false);
15891
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]);
15892
15926
  (0, import_react5.useEffect)(() => {
15893
15927
  setCriteriaResults({});
15894
15928
  setShowSteps(true);
@@ -15926,13 +15960,34 @@ function TestDetailScreen({ testId, nav }) {
15926
15960
  import_react_native5.Keyboard.dismiss();
15927
15961
  setIsSubmitting(true);
15928
15962
  try {
15929
- 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
+ });
15930
15972
  await refreshAssignments();
15931
- 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
+ }
15932
15987
  } finally {
15933
15988
  setIsSubmitting(false);
15934
15989
  }
15935
- }, [client, displayedAssignment, refreshAssignments, nav, isSubmitting]);
15990
+ }, [client, displayedAssignment, refreshAssignments, nav, isSubmitting, assignments]);
15936
15991
  const handleFail = (0, import_react5.useCallback)(async () => {
15937
15992
  if (!client || !displayedAssignment || isSubmitting) return;
15938
15993
  import_react_native5.Keyboard.dismiss();
@@ -16021,7 +16076,7 @@ function TestDetailScreen({ testId, nav }) {
16021
16076
  const steps = testCase.steps;
16022
16077
  const info = templateInfo[template] || templateInfo.steps;
16023
16078
  const rubricMode = testCase.track?.rubricMode || "pass_fail";
16024
- 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(
16025
16080
  import_react_native5.TouchableOpacity,
16026
16081
  {
16027
16082
  key: idx,
@@ -16031,76 +16086,95 @@ function TestDetailScreen({ testId, nav }) {
16031
16086
  else next[idx] = true;
16032
16087
  return next;
16033
16088
  }),
16034
- style: [styles5.checklistItem, criteriaResults[idx] === true && styles5.checklistItemChecked]
16089
+ style: [styles6.checklistItem, criteriaResults[idx] === true && styles6.checklistItemChecked]
16035
16090
  },
16036
- /* @__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")),
16037
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.checklistText, criteriaResults[idx] === true && styles5.checklistTextDone] }, step.action)
16038
- )), 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(
16039
16094
  import_react_native5.TouchableOpacity,
16040
16095
  {
16041
16096
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: true })),
16042
- style: [styles5.pfButton, criteriaResults[idx] === true && styles5.pfButtonPass]
16097
+ style: [styles6.pfButton, criteriaResults[idx] === true && styles6.pfButtonPass]
16043
16098
  },
16044
- /* @__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")
16045
16100
  ), /* @__PURE__ */ import_react5.default.createElement(
16046
16101
  import_react_native5.TouchableOpacity,
16047
16102
  {
16048
16103
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: false })),
16049
- style: [styles5.pfButton, criteriaResults[idx] === false && styles5.pfButtonFail]
16104
+ style: [styles6.pfButton, criteriaResults[idx] === false && styles6.pfButtonFail]
16050
16105
  },
16051
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.pfButtonText, criteriaResults[idx] === false && styles5.pfButtonTextActive] }, "\u2717 Fail")
16052
- )) : /* @__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(
16053
16108
  import_react_native5.TouchableOpacity,
16054
16109
  {
16055
16110
  key: n,
16056
16111
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: n })),
16057
- style: [styles5.ratingBtn, criteriaResults[idx] === n && styles5.ratingBtnActive]
16112
+ style: [styles6.ratingBtn, criteriaResults[idx] === n && styles6.ratingBtnActive]
16058
16113
  },
16059
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles5.ratingBtnText, criteriaResults[idx] === n && styles5.ratingBtnTextActive] }, n)
16060
- ))))), 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(
16061
16116
  import_react_native5.TouchableOpacity,
16062
16117
  {
16063
- style: styles5.navigateButton,
16118
+ style: styles6.navigateButton,
16064
16119
  onPress: () => {
16065
16120
  import_react_native5.Keyboard.dismiss();
16066
16121
  onNavigate(testCase.targetRoute);
16067
16122
  nav.closeWidget?.();
16068
16123
  }
16069
16124
  },
16070
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.navigateText }, "\u{1F9ED} Go to test location")
16071
- ), /* @__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: [
16072
- styles5.completedBanner,
16073
- displayedAssignment.status === "passed" && styles5.completedBannerPass,
16074
- displayedAssignment.status === "failed" && styles5.completedBannerFail
16075
- ] }, /* @__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: [
16076
- 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,
16077
16139
  displayedAssignment.status === "passed" && { color: colors.green },
16078
16140
  displayedAssignment.status === "failed" && { color: colors.redLight }
16079
- ] }, "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(
16080
16142
  import_react_native5.TouchableOpacity,
16081
16143
  {
16082
- style: [styles5.actionBtn, styles5.reopenBtn, isSubmitting && { opacity: 0.5 }],
16144
+ style: [styles6.actionBtn, styles6.reopenBtn, isSubmitting && { opacity: 0.5 }],
16083
16145
  onPress: handleReopen,
16084
16146
  disabled: isSubmitting
16085
16147
  },
16086
- /* @__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")
16087
16149
  ), displayedAssignment.status === "passed" && /* @__PURE__ */ import_react5.default.createElement(
16088
16150
  import_react_native5.TouchableOpacity,
16089
16151
  {
16090
- style: [styles5.actionBtn, styles5.failBtn, isSubmitting && { opacity: 0.5 }],
16152
+ style: [styles6.actionBtn, styles6.failBtn, isSubmitting && { opacity: 0.5 }],
16091
16153
  onPress: () => handleChangeResult("failed"),
16092
16154
  disabled: isSubmitting
16093
16155
  },
16094
- /* @__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")
16095
16157
  ), displayedAssignment.status === "failed" && /* @__PURE__ */ import_react5.default.createElement(
16096
16158
  import_react_native5.TouchableOpacity,
16097
16159
  {
16098
- style: [styles5.actionBtn, styles5.passBtn, isSubmitting && { opacity: 0.5 }],
16160
+ style: [styles6.actionBtn, styles6.passBtn, isSubmitting && { opacity: 0.5 }],
16099
16161
  onPress: () => handleChangeResult("passed"),
16100
16162
  disabled: isSubmitting
16101
16163
  },
16102
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles5.passBtnText }, "Change to Pass")
16103
- ))) : /* @__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:"), [
16104
16178
  { reason: "blocked", label: "\u{1F6AB} Blocked by a bug" },
16105
16179
  { reason: "not_ready", label: "\u{1F6A7} Feature not ready" },
16106
16180
  { reason: "dependency", label: "\u{1F517} Needs another test first" },
@@ -16109,32 +16183,32 @@ function TestDetailScreen({ testId, nav }) {
16109
16183
  import_react_native5.TouchableOpacity,
16110
16184
  {
16111
16185
  key: reason,
16112
- style: [styles5.skipOption, selectedSkipReason === reason && styles5.skipOptionActive],
16186
+ style: [styles6.skipOption, selectedSkipReason === reason && styles6.skipOptionActive],
16113
16187
  onPress: () => setSelectedSkipReason(reason)
16114
16188
  },
16115
- /* @__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)
16116
16190
  )), /* @__PURE__ */ import_react5.default.createElement(
16117
16191
  import_react_native5.TextInput,
16118
16192
  {
16119
- style: styles5.skipNotes,
16193
+ style: styles6.skipNotes,
16120
16194
  value: skipNotes,
16121
16195
  onChangeText: setSkipNotes,
16122
16196
  placeholder: "Additional notes (optional)",
16123
16197
  placeholderTextColor: colors.textMuted,
16124
16198
  multiline: true
16125
16199
  }
16126
- ), /* @__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: () => {
16127
16201
  setShowSkipModal(false);
16128
16202
  setSelectedSkipReason(null);
16129
16203
  setSkipNotes("");
16130
- } }, /* @__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(
16131
16205
  import_react_native5.TouchableOpacity,
16132
16206
  {
16133
- style: [styles5.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16207
+ style: [styles6.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16134
16208
  onPress: handleSkip,
16135
16209
  disabled: !selectedSkipReason || skipping
16136
16210
  },
16137
- /* @__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")
16138
16212
  ))))));
16139
16213
  }
16140
16214
  function createStyles2() {
@@ -16237,7 +16311,17 @@ function createStyles2() {
16237
16311
  skipCancel: { flex: 1, paddingVertical: 12, borderRadius: 10, alignItems: "center", backgroundColor: colors.card },
16238
16312
  skipCancelText: { fontSize: 14, color: colors.textSecondary },
16239
16313
  skipConfirm: { flex: 1, paddingVertical: 12, borderRadius: 10, alignItems: "center", backgroundColor: colors.yellow },
16240
- 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 }
16241
16325
  });
16242
16326
  }
16243
16327
 
@@ -16246,7 +16330,7 @@ var import_react6 = __toESM(require("react"));
16246
16330
  var import_react_native6 = require("react-native");
16247
16331
  function TestListScreen({ nav }) {
16248
16332
  const { assignments, currentAssignment, refreshAssignments, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
16249
- const styles5 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16333
+ const styles6 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16250
16334
  const [filter, setFilter] = (0, import_react6.useState)("all");
16251
16335
  const [roleFilter, setRoleFilter] = (0, import_react6.useState)(null);
16252
16336
  const [trackFilter, setTrackFilter] = (0, import_react6.useState)(null);
@@ -16338,18 +16422,18 @@ function TestListScreen({ nav }) {
16338
16422
  return true;
16339
16423
  }, [platformFilter, roleFilter, trackFilter, searchQuery, filter]);
16340
16424
  if (isLoading) return /* @__PURE__ */ import_react6.default.createElement(TestListScreenSkeleton, null);
16341
- 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 }, [
16342
16426
  { key: "all", label: "All", count: assignments.length },
16343
16427
  { key: "todo", label: "To Do", count: assignments.filter((a) => !a.isVerification && (a.status === "pending" || a.status === "in_progress" || a.status === "failed")).length },
16344
16428
  { key: "retest", label: "Retest", count: assignments.filter((a) => !!a.isVerification && (a.status === "pending" || a.status === "in_progress")).length },
16345
16429
  { key: "done", label: "Done", count: assignments.filter((a) => a.status === "passed" || a.status === "skipped" || a.status === "blocked").length }
16346
- ].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(
16347
16431
  import_react_native6.TouchableOpacity,
16348
16432
  {
16349
- style: [styles5.roleBtn, !roleFilter && styles5.roleBtnActive],
16433
+ style: [styles6.roleBtn, !roleFilter && styles6.roleBtnActive],
16350
16434
  onPress: () => setRoleFilter(null)
16351
16435
  },
16352
- /* @__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")
16353
16437
  ), availableRoles.map((role) => {
16354
16438
  const isActive = roleFilter === role.id;
16355
16439
  return /* @__PURE__ */ import_react6.default.createElement(
@@ -16357,30 +16441,30 @@ function TestListScreen({ nav }) {
16357
16441
  {
16358
16442
  key: role.id,
16359
16443
  style: [
16360
- styles5.roleBtn,
16444
+ styles6.roleBtn,
16361
16445
  isActive && { backgroundColor: role.color + "20", borderColor: role.color + "60", borderWidth: 1 }
16362
16446
  ],
16363
16447
  onPress: () => setRoleFilter(isActive ? null : role.id)
16364
16448
  },
16365
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles5.roleDot, { backgroundColor: role.color }] }),
16366
- /* @__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)
16367
16451
  );
16368
- })), 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(
16369
16453
  import_react_native6.TextInput,
16370
16454
  {
16371
16455
  value: searchQuery,
16372
16456
  onChangeText: setSearchQuery,
16373
16457
  placeholder: "Search tests...",
16374
16458
  placeholderTextColor: colors.textMuted,
16375
- style: styles5.searchInput
16459
+ style: styles6.searchInput
16376
16460
  }
16377
- )), /* @__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(
16378
16462
  import_react_native6.TouchableOpacity,
16379
16463
  {
16380
- style: [styles5.platformBtn, !platformFilter && styles5.platformBtnActive],
16464
+ style: [styles6.platformBtn, !platformFilter && styles6.platformBtnActive],
16381
16465
  onPress: () => setPlatformFilter(null)
16382
16466
  },
16383
- /* @__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")
16384
16468
  ), [
16385
16469
  { key: "web", label: "Web", icon: "\u{1F310}" },
16386
16470
  { key: "ios", label: "iOS", icon: "\u{1F4F1}" },
@@ -16392,32 +16476,32 @@ function TestListScreen({ nav }) {
16392
16476
  {
16393
16477
  key: p.key,
16394
16478
  style: [
16395
- styles5.platformBtn,
16479
+ styles6.platformBtn,
16396
16480
  isActive && { backgroundColor: colors.blue + "20", borderColor: colors.blue + "60", borderWidth: 1 }
16397
16481
  ],
16398
16482
  onPress: () => setPlatformFilter(isActive ? null : p.key)
16399
16483
  },
16400
- /* @__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)
16401
16485
  );
16402
- })), /* @__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(
16403
16487
  import_react_native6.TouchableOpacity,
16404
16488
  {
16405
- style: [styles5.trackBtn, !trackFilter && styles5.trackBtnActive],
16489
+ style: [styles6.trackBtn, !trackFilter && styles6.trackBtnActive],
16406
16490
  onPress: () => setTrackFilter(null)
16407
16491
  },
16408
- /* @__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")
16409
16493
  ), availableTracks.map((track) => {
16410
16494
  const isActive = trackFilter === track.id;
16411
16495
  return /* @__PURE__ */ import_react6.default.createElement(
16412
16496
  import_react_native6.TouchableOpacity,
16413
16497
  {
16414
16498
  key: track.id,
16415
- 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 }],
16416
16500
  onPress: () => setTrackFilter(isActive ? null : track.id)
16417
16501
  },
16418
- /* @__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)
16419
16503
  );
16420
- })), /* @__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 }, [
16421
16505
  { key: "priority", label: "\u2195 Priority" },
16422
16506
  { key: "recent", label: "\u{1F550} Recent" },
16423
16507
  { key: "alpha", label: "A-Z" }
@@ -16425,41 +16509,41 @@ function TestListScreen({ nav }) {
16425
16509
  import_react_native6.TouchableOpacity,
16426
16510
  {
16427
16511
  key: s2.key,
16428
- style: [styles5.sortBtn, sortMode === s2.key && styles5.sortBtnActive],
16512
+ style: [styles6.sortBtn, sortMode === s2.key && styles6.sortBtnActive],
16429
16513
  onPress: () => setSortMode(s2.key)
16430
16514
  },
16431
- /* @__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)
16432
16516
  )))), groupedAssignments.map((folder) => {
16433
16517
  const folderId = folder.group?.id || "ungrouped";
16434
16518
  const isCollapsed = collapsedFolders.has(folderId);
16435
16519
  const filtered = folder.assignments.filter(filterAssignment);
16436
16520
  if (filtered.length === 0 && filter !== "all") return null;
16437
- 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) => {
16438
16522
  const badge = getStatusBadge(assignment.status);
16439
16523
  const isCurrent = currentAssignment?.id === assignment.id;
16440
16524
  return /* @__PURE__ */ import_react6.default.createElement(
16441
16525
  import_react_native6.TouchableOpacity,
16442
16526
  {
16443
16527
  key: assignment.id,
16444
- style: [styles5.testItem, isCurrent && styles5.testItemCurrent],
16528
+ style: [styles6.testItem, isCurrent && styles6.testItemCurrent],
16445
16529
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
16446
16530
  },
16447
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.testBadge }, badge.icon),
16448
- /* @__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: [
16449
- 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,
16450
16534
  assignment.status === "passed" && { backgroundColor: colors.greenDark, borderColor: colors.greenBorder }
16451
16535
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16452
- styles5.retestTagText,
16536
+ styles6.retestTagText,
16453
16537
  assignment.status === "passed" && { color: colors.greenLight }
16454
- ] }, 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)))),
16455
16539
  /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16456
- styles5.statusPill,
16540
+ styles6.statusPill,
16457
16541
  {
16458
16542
  backgroundColor: assignment.status === "passed" ? colors.greenDark : assignment.status === "failed" ? colors.redSurface : assignment.status === "in_progress" ? colors.blueSurface : colors.card,
16459
16543
  borderColor: assignment.status === "passed" ? colors.greenBorder : assignment.status === "failed" ? colors.redDark : assignment.status === "in_progress" ? colors.blueDark : colors.border
16460
16544
  }
16461
16545
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16462
- styles5.statusPillText,
16546
+ styles6.statusPillText,
16463
16547
  {
16464
16548
  color: assignment.status === "passed" ? colors.greenMed : assignment.status === "failed" ? colors.redMed : assignment.status === "in_progress" ? colors.blueLight : colors.zincLight
16465
16549
  }
@@ -16469,12 +16553,12 @@ function TestListScreen({ nav }) {
16469
16553
  }), dashboardUrl && /* @__PURE__ */ import_react6.default.createElement(
16470
16554
  import_react_native6.TouchableOpacity,
16471
16555
  {
16472
- style: styles5.dashboardLink,
16556
+ style: styles6.dashboardLink,
16473
16557
  onPress: () => import_react_native6.Linking.openURL(`${dashboardUrl}/test-cases`),
16474
16558
  activeOpacity: 0.7
16475
16559
  },
16476
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles5.dashboardLinkText }, "\u{1F310}", " Manage on Dashboard ", "\u2192")
16477
- ), /* @__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")));
16478
16562
  }
16479
16563
  function createStyles3() {
16480
16564
  return import_react_native6.StyleSheet.create({
@@ -16794,7 +16878,7 @@ var styles2 = import_react_native8.StyleSheet.create({
16794
16878
  // src/widget/screens/TestFeedbackScreen.tsx
16795
16879
  function TestFeedbackScreen({ status, assignmentId, nav }) {
16796
16880
  const { client, assignments, refreshAssignments, uploadImage, widgetColorScheme } = useBugBear();
16797
- const styles5 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16881
+ const styles6 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16798
16882
  const images = useImageAttachments(uploadImage, 3, "screenshots");
16799
16883
  const [rating, setRating] = (0, import_react10.useState)(5);
16800
16884
  const [note, setNote] = (0, import_react10.useState)("");
@@ -16854,7 +16938,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16854
16938
  }
16855
16939
  }
16856
16940
  };
16857
- 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?"), [
16858
16942
  { key: "isOutdated", label: "Test is outdated" },
16859
16943
  { key: "needsMoreDetail", label: "Needs more detail" },
16860
16944
  { key: "stepsUnclear", label: "Steps are unclear" },
@@ -16863,15 +16947,15 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16863
16947
  import_react_native9.TouchableOpacity,
16864
16948
  {
16865
16949
  key,
16866
- style: [styles5.flagItem, flags[key] && styles5.flagItemActive],
16950
+ style: [styles6.flagItem, flags[key] && styles6.flagItemActive],
16867
16951
  onPress: () => setFlags((prev) => ({ ...prev, [key]: !prev[key] }))
16868
16952
  },
16869
- /* @__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")),
16870
- /* @__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)
16871
16955
  ))), /* @__PURE__ */ import_react10.default.createElement(
16872
16956
  import_react_native9.TextInput,
16873
16957
  {
16874
- style: styles5.noteInput,
16958
+ style: styles6.noteInput,
16875
16959
  value: note,
16876
16960
  onChangeText: setNote,
16877
16961
  placeholder: "Add a note (optional)",
@@ -16888,7 +16972,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16888
16972
  onRemove: images.removeImage,
16889
16973
  label: "Screenshots (optional)"
16890
16974
  }
16891
- ), /* @__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"))));
16892
16976
  }
16893
16977
  function createStyles4() {
16894
16978
  return import_react_native9.StyleSheet.create({
@@ -17077,7 +17161,7 @@ var styles3 = import_react_native10.StyleSheet.create({
17077
17161
  // src/widget/screens/ReportScreen.tsx
17078
17162
  function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17079
17163
  const { client, getDeviceInfo, uploadImage, refreshAssignments, widgetColorScheme } = useBugBear();
17080
- const styles5 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17164
+ const styles6 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17081
17165
  const [reportType, setReportType] = (0, import_react12.useState)(prefill?.type || "bug");
17082
17166
  const [severity, setSeverity] = (0, import_react12.useState)("medium");
17083
17167
  const [category, setCategory] = (0, import_react12.useState)(null);
@@ -17183,7 +17267,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17183
17267
  submittingRef.current = false;
17184
17268
  }
17185
17269
  };
17186
- 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 }, [
17187
17271
  { sev: "critical", color: colors.red },
17188
17272
  { sev: "high", color: colors.orange },
17189
17273
  { sev: "medium", color: colors.yellow },
@@ -17192,14 +17276,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17192
17276
  import_react_native11.TouchableOpacity,
17193
17277
  {
17194
17278
  key: sev,
17195
- style: [styles5.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17279
+ style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17196
17280
  onPress: () => setSeverity(sev)
17197
17281
  },
17198
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles5.sevText, severity === sev && { color }] }, sev)
17199
- )))), /* @__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(
17200
17284
  import_react_native11.TextInput,
17201
17285
  {
17202
- style: styles5.descInput,
17286
+ style: styles6.descInput,
17203
17287
  value: description,
17204
17288
  onChangeText: setDescription,
17205
17289
  placeholder: "Describe what you observed. What still doesn't work?",
@@ -17252,15 +17336,15 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17252
17336
  onRemove: images.removeImage,
17253
17337
  label: "Attachments (optional)"
17254
17338
  }
17255
- ), 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(
17256
17340
  import_react_native11.TouchableOpacity,
17257
17341
  {
17258
- 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 }],
17259
17343
  onPress: handleSubmit,
17260
17344
  disabled: !description.trim() || submitting || images.isUploading
17261
17345
  },
17262
17346
  /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest")
17263
- )) : /* @__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 }, [
17264
17348
  { type: "bug", label: "Bug", icon: "\u{1F41B}" },
17265
17349
  { type: "feedback", label: "Feedback", icon: "\u{1F4A1}" },
17266
17350
  { type: "suggestion", label: "Idea", icon: "\u2728" }
@@ -17268,12 +17352,12 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17268
17352
  import_react_native11.TouchableOpacity,
17269
17353
  {
17270
17354
  key: type,
17271
- style: [styles5.typeCard, reportType === type && styles5.typeCardActive],
17355
+ style: [styles6.typeCard, reportType === type && styles6.typeCardActive],
17272
17356
  onPress: () => setReportType(type)
17273
17357
  },
17274
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles5.typeIcon }, icon),
17275
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles5.typeLabel, reportType === type && styles5.typeLabelActive] }, label)
17276
- ))), 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 }, [
17277
17361
  { sev: "critical", color: colors.red },
17278
17362
  { sev: "high", color: colors.orange },
17279
17363
  { sev: "medium", color: colors.yellow },
@@ -17282,14 +17366,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17282
17366
  import_react_native11.TouchableOpacity,
17283
17367
  {
17284
17368
  key: sev,
17285
- style: [styles5.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17369
+ style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17286
17370
  onPress: () => setSeverity(sev)
17287
17371
  },
17288
- /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles5.sevText, severity === sev && { color }] }, sev)
17289
- )))), 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(
17290
17374
  import_react_native11.TextInput,
17291
17375
  {
17292
- style: styles5.descInput,
17376
+ style: styles6.descInput,
17293
17377
  value: description,
17294
17378
  onChangeText: setDescription,
17295
17379
  placeholder: "Describe the issue...",
@@ -17332,16 +17416,16 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17332
17416
  issue.title
17333
17417
  ),
17334
17418
  /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: { fontSize: 11, color: colors.textMuted } }, issue.status)
17335
- )))), 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(
17336
17420
  import_react_native11.TextInput,
17337
17421
  {
17338
- style: styles5.screenInput,
17422
+ style: styles6.screenInput,
17339
17423
  value: affectedScreen,
17340
17424
  onChangeText: setAffectedScreen,
17341
17425
  placeholder: "e.g. Reservations, Settings...",
17342
17426
  placeholderTextColor: colors.textMuted
17343
17427
  }
17344
- ), /* @__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(
17345
17429
  ImagePickerButtons,
17346
17430
  {
17347
17431
  images: images.images,
@@ -17351,7 +17435,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17351
17435
  onRemove: images.removeImage,
17352
17436
  label: "Screenshots (optional)"
17353
17437
  }
17354
- ), 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(
17355
17439
  import_react_native11.TouchableOpacity,
17356
17440
  {
17357
17441
  style: [shared.primaryButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
@@ -17391,12 +17475,12 @@ var import_react13 = __toESM(require("react"));
17391
17475
  var import_react_native12 = require("react-native");
17392
17476
  function ReportSuccessScreen({ nav }) {
17393
17477
  const { widgetColorScheme } = useBugBear();
17394
- const styles5 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17478
+ const styles6 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17395
17479
  (0, import_react13.useEffect)(() => {
17396
17480
  const timer = setTimeout(() => nav.reset(), 2e3);
17397
17481
  return () => clearTimeout(timer);
17398
17482
  }, [nav]);
17399
- 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"));
17400
17484
  }
17401
17485
  function createStyles6() {
17402
17486
  return import_react_native12.StyleSheet.create({
@@ -17412,7 +17496,7 @@ var import_react14 = __toESM(require("react"));
17412
17496
  var import_react_native13 = require("react-native");
17413
17497
  function MessageListScreen({ nav }) {
17414
17498
  const { threads, unreadCount, refreshThreads, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
17415
- const styles5 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17499
+ const styles6 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17416
17500
  const [activeFilter, setActiveFilter] = (0, import_react14.useState)("all");
17417
17501
  const filteredThreads = threads.filter((thread) => {
17418
17502
  if (activeFilter === "all") return true;
@@ -17430,10 +17514,10 @@ function MessageListScreen({ nav }) {
17430
17514
  return /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, null, /* @__PURE__ */ import_react14.default.createElement(
17431
17515
  import_react_native13.TouchableOpacity,
17432
17516
  {
17433
- style: styles5.newMsgButton,
17517
+ style: styles6.newMsgButton,
17434
17518
  onPress: () => nav.push({ name: "COMPOSE_MESSAGE" })
17435
17519
  },
17436
- /* @__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")
17437
17521
  ), /* @__PURE__ */ import_react14.default.createElement(
17438
17522
  import_react_native13.ScrollView,
17439
17523
  {
@@ -17478,20 +17562,20 @@ function MessageListScreen({ nav }) {
17478
17562
  import_react_native13.TouchableOpacity,
17479
17563
  {
17480
17564
  key: thread.id,
17481
- style: [styles5.threadItem, thread.unreadCount > 0 && styles5.threadItemUnread],
17565
+ style: [styles6.threadItem, thread.unreadCount > 0 && styles6.threadItemUnread],
17482
17566
  onPress: () => nav.push({ name: "THREAD_DETAIL", thread })
17483
17567
  },
17484
- /* @__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))),
17485
- /* @__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) }] }))
17486
17570
  ))), dashboardUrl && /* @__PURE__ */ import_react14.default.createElement(
17487
17571
  import_react_native13.TouchableOpacity,
17488
17572
  {
17489
- style: styles5.dashboardLink,
17573
+ style: styles6.dashboardLink,
17490
17574
  onPress: () => import_react_native13.Linking.openURL(`${dashboardUrl}/discussions`),
17491
17575
  activeOpacity: 0.7
17492
17576
  },
17493
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles5.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
17494
- ), /* @__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"))));
17495
17579
  }
17496
17580
  function createStyles7() {
17497
17581
  return import_react_native13.StyleSheet.create({
@@ -17524,7 +17608,7 @@ var import_react15 = __toESM(require("react"));
17524
17608
  var import_react_native14 = require("react-native");
17525
17609
  function ThreadDetailScreen({ thread, nav }) {
17526
17610
  const { getThreadMessages, sendMessage, markAsRead, uploadImage, widgetColorScheme } = useBugBear();
17527
- const styles5 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17611
+ const styles6 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17528
17612
  const [messages, setMessages] = (0, import_react15.useState)([]);
17529
17613
  const [loading, setLoading] = (0, import_react15.useState)(true);
17530
17614
  const [replyText, setReplyText] = (0, import_react15.useState)("");
@@ -17576,20 +17660,20 @@ function ThreadDetailScreen({ thread, nav }) {
17576
17660
  }
17577
17661
  setSending(false);
17578
17662
  };
17579
- 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(
17580
17664
  import_react_native14.View,
17581
17665
  {
17582
17666
  key: msg.id,
17583
- style: [styles5.bubble, msg.senderType === "tester" ? styles5.bubbleTester : styles5.bubbleAdmin]
17667
+ style: [styles6.bubble, msg.senderType === "tester" ? styles6.bubbleTester : styles6.bubbleAdmin]
17584
17668
  },
17585
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles5.sender, msg.senderType === "tester" && styles5.senderTester] }, msg.senderType === "tester" ? "You" : msg.senderName),
17586
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles5.content, msg.senderType === "tester" && styles5.contentTester] }, msg.content),
17587
- 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" }))),
17588
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles5.time, msg.senderType === "tester" && styles5.timeTester] }, formatMessageTime(msg.createdAt))
17589
- ))), 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(
17590
17674
  import_react_native14.TextInput,
17591
17675
  {
17592
- style: styles5.replyInput,
17676
+ style: styles6.replyInput,
17593
17677
  value: replyText,
17594
17678
  onChangeText: setReplyText,
17595
17679
  placeholder: "Type a reply...",
@@ -17600,11 +17684,11 @@ function ThreadDetailScreen({ thread, nav }) {
17600
17684
  ), /* @__PURE__ */ import_react15.default.createElement(
17601
17685
  import_react_native14.TouchableOpacity,
17602
17686
  {
17603
- 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],
17604
17688
  onPress: handleSend,
17605
17689
  disabled: !replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading
17606
17690
  },
17607
- /* @__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")
17608
17692
  )));
17609
17693
  }
17610
17694
  function createStyles8() {
@@ -17645,7 +17729,7 @@ var import_react16 = __toESM(require("react"));
17645
17729
  var import_react_native15 = require("react-native");
17646
17730
  function ComposeMessageScreen({ nav }) {
17647
17731
  const { createThread, uploadImage, widgetColorScheme } = useBugBear();
17648
- const styles5 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17732
+ const styles6 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17649
17733
  const [subject, setSubject] = (0, import_react16.useState)("");
17650
17734
  const [message, setMessage] = (0, import_react16.useState)("");
17651
17735
  const [sending, setSending] = (0, import_react16.useState)(false);
@@ -17664,10 +17748,10 @@ function ComposeMessageScreen({ nav }) {
17664
17748
  nav.pop();
17665
17749
  }
17666
17750
  };
17667
- 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(
17668
17752
  import_react_native15.TextInput,
17669
17753
  {
17670
- style: styles5.subjectInput,
17754
+ style: styles6.subjectInput,
17671
17755
  value: subject,
17672
17756
  onChangeText: setSubject,
17673
17757
  placeholder: "What's this about?",
@@ -17677,7 +17761,7 @@ function ComposeMessageScreen({ nav }) {
17677
17761
  ), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: [shared.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ import_react16.default.createElement(
17678
17762
  import_react_native15.TextInput,
17679
17763
  {
17680
- style: styles5.messageInput,
17764
+ style: styles6.messageInput,
17681
17765
  value: message,
17682
17766
  onChangeText: setMessage,
17683
17767
  placeholder: "Write your message...",
@@ -17722,7 +17806,7 @@ var import_react17 = __toESM(require("react"));
17722
17806
  var import_react_native16 = require("react-native");
17723
17807
  function ProfileScreen({ nav }) {
17724
17808
  const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo, widgetColorScheme } = useBugBear();
17725
- const styles5 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17809
+ const styles6 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17726
17810
  const [editing, setEditing] = (0, import_react17.useState)(false);
17727
17811
  const [name, setName] = (0, import_react17.useState)(testerInfo?.name || "");
17728
17812
  const [additionalEmails, setAdditionalEmails] = (0, import_react17.useState)(testerInfo?.additionalEmails || []);
@@ -17773,13 +17857,13 @@ function ProfileScreen({ nav }) {
17773
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"));
17774
17858
  }
17775
17859
  if (editing) {
17776
- 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: () => {
17777
17861
  setEditing(false);
17778
17862
  setNewEmailInput("");
17779
- } }, /* @__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(
17780
17864
  import_react_native16.TextInput,
17781
17865
  {
17782
- style: [styles5.input, { flex: 1, marginRight: 8 }],
17866
+ style: [styles6.input, { flex: 1, marginRight: 8 }],
17783
17867
  value: newEmailInput,
17784
17868
  onChangeText: setNewEmailInput,
17785
17869
  placeholder: "Add email",
@@ -17787,17 +17871,17 @@ function ProfileScreen({ nav }) {
17787
17871
  keyboardType: "email-address",
17788
17872
  autoCapitalize: "none"
17789
17873
  }
17790
- ), /* @__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(
17791
17875
  import_react_native16.TouchableOpacity,
17792
17876
  {
17793
17877
  key,
17794
- style: [styles5.platformBtn, platforms.includes(key) && styles5.platformBtnActive],
17878
+ style: [styles6.platformBtn, platforms.includes(key) && styles6.platformBtnActive],
17795
17879
  onPress: () => setPlatforms((prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key])
17796
17880
  },
17797
- /* @__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)
17798
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")));
17799
17883
  }
17800
- 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(
17801
17885
  import_react_native16.TouchableOpacity,
17802
17886
  {
17803
17887
  style: [shared.primaryButton, { marginTop: 20 }],
@@ -17855,7 +17939,7 @@ var CATEGORIES = ["open", "done", "reopened"];
17855
17939
  var SEVERITY_ORDER2 = { critical: 0, high: 1, medium: 2, low: 3 };
17856
17940
  function IssueListScreen({ nav, category }) {
17857
17941
  const { client, widgetColorScheme } = useBugBear();
17858
- const styles5 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
17942
+ const styles6 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
17859
17943
  const CATEGORY_CONFIG = (0, import_react18.useMemo)(() => ({
17860
17944
  open: { label: "Open", accent: colors.orange, emptyIcon: "\u2705", emptyText: "No open issues" },
17861
17945
  done: { label: "Done", accent: colors.green, emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
@@ -17925,7 +18009,7 @@ function IssueListScreen({ nav, category }) {
17925
18009
  const searchFilteredIssues = debouncedQuery ? sortedIssues.filter(
17926
18010
  (issue) => (issue.title || "").toLowerCase().includes(debouncedQuery.toLowerCase()) || (issue.description || "").toLowerCase().includes(debouncedQuery.toLowerCase())
17927
18011
  ) : sortedIssues;
17928
- 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) => {
17929
18013
  const catConfig = CATEGORY_CONFIG[cat];
17930
18014
  const isActive = activeCategory === cat;
17931
18015
  const count = counts?.[cat];
@@ -17934,27 +18018,30 @@ function IssueListScreen({ nav, category }) {
17934
18018
  {
17935
18019
  key: cat,
17936
18020
  style: [
17937
- styles5.tab,
18021
+ styles6.tab,
17938
18022
  { borderBottomColor: isActive ? catConfig.accent : "transparent" }
17939
18023
  ],
17940
- onPress: () => setActiveCategory(cat),
18024
+ onPress: () => {
18025
+ setActiveCategory(cat);
18026
+ nav.replace({ name: "ISSUE_LIST", category: cat });
18027
+ },
17941
18028
  activeOpacity: 0.7
17942
18029
  },
17943
18030
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
17944
- styles5.tabLabel,
18031
+ styles6.tabLabel,
17945
18032
  isActive && { fontWeight: "600", color: colors.textPrimary }
17946
18033
  ] }, catConfig.label),
17947
18034
  count !== void 0 && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [
17948
- styles5.countBadge,
18035
+ styles6.countBadge,
17949
18036
  {
17950
18037
  backgroundColor: isActive ? catConfig.accent + "18" : colors.card
17951
18038
  }
17952
18039
  ] }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
17953
- styles5.countText,
18040
+ styles6.countText,
17954
18041
  { color: isActive ? catConfig.accent : colors.textDim }
17955
18042
  ] }, count))
17956
18043
  );
17957
- })), /* @__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 }, [
17958
18045
  { key: "severity", label: "Severity" },
17959
18046
  { key: "recent", label: "Recent" }
17960
18047
  ].map((s2) => /* @__PURE__ */ import_react18.default.createElement(
@@ -17962,14 +18049,14 @@ function IssueListScreen({ nav, category }) {
17962
18049
  {
17963
18050
  key: s2.key,
17964
18051
  style: [
17965
- styles5.sortBtn,
17966
- sortMode === s2.key && styles5.sortBtnActive
18052
+ styles6.sortBtn,
18053
+ sortMode === s2.key && styles6.sortBtnActive
17967
18054
  ],
17968
18055
  onPress: () => setSortMode(s2.key)
17969
18056
  },
17970
18057
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
17971
- styles5.sortBtnText,
17972
- sortMode === s2.key && styles5.sortBtnTextActive
18058
+ styles6.sortBtnText,
18059
+ sortMode === s2.key && styles6.sortBtnTextActive
17973
18060
  ] }, s2.label)
17974
18061
  ))), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: { paddingHorizontal: 16, paddingBottom: 12 } }, /* @__PURE__ */ import_react18.default.createElement(
17975
18062
  import_react_native17.TextInput,
@@ -17989,18 +18076,18 @@ function IssueListScreen({ nav, category }) {
17989
18076
  fontSize: 13
17990
18077
  }
17991
18078
  }
17992
- )), 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(
17993
18080
  import_react_native17.TouchableOpacity,
17994
18081
  {
17995
18082
  key: issue.id,
17996
- style: styles5.issueCard,
18083
+ style: styles6.issueCard,
17997
18084
  onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
17998
18085
  activeOpacity: 0.7
17999
18086
  },
18000
- /* @__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)),
18001
- /* @__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))),
18002
- 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)),
18003
- 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))
18004
18091
  )));
18005
18092
  }
18006
18093
  function createStyles11() {
@@ -18159,7 +18246,7 @@ var import_react_native18 = require("react-native");
18159
18246
  var DONE_STATUSES = ["verified", "resolved", "closed", "reviewed"];
18160
18247
  function IssueDetailScreen({ nav, issue }) {
18161
18248
  const { dashboardUrl, widgetColorScheme, reopenReport } = useBugBear();
18162
- const styles5 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18249
+ const styles6 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18163
18250
  const [showReopenForm, setShowReopenForm] = (0, import_react19.useState)(false);
18164
18251
  const [reopenReason, setReopenReason] = (0, import_react19.useState)("");
18165
18252
  const [isSubmitting, setIsSubmitting] = (0, import_react19.useState)(false);
@@ -18201,44 +18288,44 @@ function IssueDetailScreen({ nav, issue }) {
18201
18288
  setReopenError(result.error || "Failed to reopen");
18202
18289
  }
18203
18290
  }, [reopenReason, reopenReport, issue.id]);
18204
- 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(
18205
18292
  import_react_native18.TouchableOpacity,
18206
18293
  {
18207
- style: styles5.reopenButton,
18294
+ style: styles6.reopenButton,
18208
18295
  onPress: () => setShowReopenForm(true),
18209
18296
  activeOpacity: 0.7
18210
18297
  },
18211
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenButtonText }, "\u{1F504}", " Not Fixed \u2014 Reopen Issue")
18212
- ), 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(
18213
18300
  import_react_native18.TextInput,
18214
18301
  {
18215
18302
  value: reopenReason,
18216
18303
  onChangeText: setReopenReason,
18217
18304
  placeholder: "Describe what you're still seeing...",
18218
18305
  placeholderTextColor: colors.textMuted,
18219
- style: styles5.reopenInput,
18306
+ style: styles6.reopenInput,
18220
18307
  multiline: true,
18221
18308
  autoFocus: true
18222
18309
  }
18223
- ), 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(
18224
18311
  import_react_native18.TouchableOpacity,
18225
18312
  {
18226
18313
  style: [
18227
- styles5.reopenSubmitButton,
18228
- (!reopenReason.trim() || isSubmitting) && styles5.reopenSubmitDisabled
18314
+ styles6.reopenSubmitButton,
18315
+ (!reopenReason.trim() || isSubmitting) && styles6.reopenSubmitDisabled
18229
18316
  ],
18230
18317
  onPress: handleReopen,
18231
18318
  disabled: isSubmitting || !reopenReason.trim(),
18232
18319
  activeOpacity: 0.7
18233
18320
  },
18234
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: [
18235
- styles5.reopenSubmitText,
18236
- !reopenReason.trim() && styles5.reopenSubmitTextDisabled
18322
+ styles6.reopenSubmitText,
18323
+ !reopenReason.trim() && styles6.reopenSubmitTextDisabled
18237
18324
  ] }, "Reopen Issue")
18238
18325
  ), /* @__PURE__ */ import_react19.default.createElement(
18239
18326
  import_react_native18.TouchableOpacity,
18240
18327
  {
18241
- style: styles5.reopenCancelButton,
18328
+ style: styles6.reopenCancelButton,
18242
18329
  onPress: () => {
18243
18330
  setShowReopenForm(false);
18244
18331
  setReopenReason("");
@@ -18247,15 +18334,22 @@ function IssueDetailScreen({ nav, issue }) {
18247
18334
  disabled: isSubmitting,
18248
18335
  activeOpacity: 0.7
18249
18336
  },
18250
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles5.reopenCancelText }, "Cancel")
18251
- ))), 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(
18337
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenCancelText }, "Cancel")
18338
+ ))), issue.status === "ready_to_test" && (issue.fixCommitSha || issue.resolutionNotes) && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: {
18339
+ backgroundColor: "rgba(59, 130, 246, 0.1)",
18340
+ borderWidth: 1,
18341
+ borderColor: "rgba(96, 165, 250, 0.2)",
18342
+ borderRadius: 8,
18343
+ padding: 12,
18344
+ marginBottom: 12
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(
18252
18346
  import_react_native18.TouchableOpacity,
18253
18347
  {
18254
- style: styles5.dashboardLink,
18348
+ style: styles6.dashboardLink,
18255
18349
  onPress: () => import_react_native18.Linking.openURL(`${dashboardUrl}/reports`),
18256
18350
  activeOpacity: 0.7
18257
18351
  },
18258
- /* @__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")
18259
18353
  ));
18260
18354
  }
18261
18355
  function createStyles12() {
@@ -18512,7 +18606,7 @@ var import_react20 = __toESM(require("react"));
18512
18606
  var import_react_native19 = require("react-native");
18513
18607
  function SessionStartScreen({ nav }) {
18514
18608
  const { startSession, assignments, widgetColorScheme } = useBugBear();
18515
- const styles5 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18609
+ const styles6 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18516
18610
  const [focusArea, setFocusArea] = (0, import_react20.useState)("");
18517
18611
  const [isStarting, setIsStarting] = (0, import_react20.useState)(false);
18518
18612
  const [error, setError] = (0, import_react20.useState)(null);
@@ -18539,35 +18633,35 @@ function SessionStartScreen({ nav }) {
18539
18633
  setIsStarting(false);
18540
18634
  }
18541
18635
  };
18542
- 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(
18543
18637
  import_react_native19.TextInput,
18544
18638
  {
18545
18639
  value: focusArea,
18546
18640
  onChangeText: setFocusArea,
18547
18641
  placeholder: "e.g. Checkout flow, Settings page...",
18548
18642
  placeholderTextColor: colors.textMuted,
18549
- style: styles5.input,
18643
+ style: styles6.input,
18550
18644
  returnKeyType: "done",
18551
18645
  onSubmitEditing: handleStart
18552
18646
  }
18553
- )), 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(
18554
18648
  import_react_native19.TouchableOpacity,
18555
18649
  {
18556
18650
  key: name,
18557
- style: [styles5.chip, focusArea === name && styles5.chipActive],
18651
+ style: [styles6.chip, focusArea === name && styles6.chipActive],
18558
18652
  onPress: () => setFocusArea(name),
18559
18653
  activeOpacity: 0.7
18560
18654
  },
18561
- /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: [styles5.chipText, focusArea === name && styles5.chipTextActive] }, name)
18562
- )))), 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(
18563
18657
  import_react_native19.TouchableOpacity,
18564
18658
  {
18565
- style: [styles5.startBtn, isStarting && styles5.startBtnDisabled],
18659
+ style: [styles6.startBtn, isStarting && styles6.startBtnDisabled],
18566
18660
  onPress: handleStart,
18567
18661
  disabled: isStarting,
18568
18662
  activeOpacity: 0.8
18569
18663
  },
18570
- /* @__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")
18571
18665
  ));
18572
18666
  }
18573
18667
  function createStyles13() {
@@ -18676,7 +18770,7 @@ var import_react21 = __toESM(require("react"));
18676
18770
  var import_react_native20 = require("react-native");
18677
18771
  function SessionActiveScreen({ nav }) {
18678
18772
  const { activeSession, sessionFindings, endSession, refreshSession, widgetColorScheme } = useBugBear();
18679
- const styles5 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18773
+ const styles6 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18680
18774
  const FINDING_TYPE_CONFIG = (0, import_react21.useMemo)(() => ({
18681
18775
  bug: { icon: "\u{1F41B}", label: "Bug", color: colors.red },
18682
18776
  concern: { icon: "\u26A0\uFE0F", label: "Concern", color: colors.amber },
@@ -18718,30 +18812,30 @@ function SessionActiveScreen({ nav }) {
18718
18812
  }
18719
18813
  };
18720
18814
  if (!activeSession) {
18721
- 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")));
18722
18816
  }
18723
18817
  const renderFinding = (finding) => {
18724
18818
  const config = FINDING_TYPE_CONFIG[finding.type] || FINDING_TYPE_CONFIG.bug;
18725
- 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"))));
18726
18820
  };
18727
- 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(
18728
18822
  import_react_native20.TouchableOpacity,
18729
18823
  {
18730
- style: styles5.addFindingBtn,
18824
+ style: styles6.addFindingBtn,
18731
18825
  onPress: () => nav.push({ name: "SESSION_FINDING" }),
18732
18826
  activeOpacity: 0.8
18733
18827
  },
18734
- /* @__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")
18735
18829
  ), /* @__PURE__ */ import_react21.default.createElement(
18736
18830
  import_react_native20.TouchableOpacity,
18737
18831
  {
18738
- style: [styles5.endBtn, isEnding && styles5.endBtnDisabled],
18832
+ style: [styles6.endBtn, isEnding && styles6.endBtnDisabled],
18739
18833
  onPress: handleEnd,
18740
18834
  disabled: isEnding,
18741
18835
  activeOpacity: 0.8
18742
18836
  },
18743
- /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles5.endBtnText }, isEnding ? "..." : "End")
18744
- )), /* @__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)));
18745
18839
  }
18746
18840
  function createStyles14() {
18747
18841
  return import_react_native20.StyleSheet.create({
@@ -18919,7 +19013,7 @@ var FINDING_TYPES = [
18919
19013
  ];
18920
19014
  function SessionFindingScreen({ nav }) {
18921
19015
  const { addFinding, widgetColorScheme } = useBugBear();
18922
- const styles5 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
19016
+ const styles6 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
18923
19017
  const SEVERITIES = (0, import_react22.useMemo)(() => [
18924
19018
  { value: "critical", label: "Critical", color: colors.red },
18925
19019
  { value: "high", label: "High", color: colors.orange },
@@ -18951,46 +19045,46 @@ function SessionFindingScreen({ nav }) {
18951
19045
  }
18952
19046
  };
18953
19047
  const canSubmit = title.trim().length > 0 && !isSubmitting;
18954
- 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(
18955
19049
  import_react_native21.TouchableOpacity,
18956
19050
  {
18957
19051
  key: ft.value,
18958
- style: [styles5.typePill, type === ft.value && styles5.typePillActive],
19052
+ style: [styles6.typePill, type === ft.value && styles6.typePillActive],
18959
19053
  onPress: () => setType(ft.value),
18960
19054
  activeOpacity: 0.7
18961
19055
  },
18962
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles5.typePillIcon }, ft.icon),
18963
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles5.typePillLabel, type === ft.value && styles5.typePillLabelActive] }, ft.label)
18964
- )))), /* @__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(
18965
19059
  import_react_native21.TouchableOpacity,
18966
19060
  {
18967
19061
  key: s2.value,
18968
19062
  style: [
18969
- styles5.severityPill,
19063
+ styles6.severityPill,
18970
19064
  severity === s2.value && { backgroundColor: `${s2.color}20`, borderColor: s2.color }
18971
19065
  ],
18972
19066
  onPress: () => setSeverity(s2.value),
18973
19067
  activeOpacity: 0.7
18974
19068
  },
18975
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles5.severityText, severity === s2.value && { color: s2.color }] }, s2.label)
18976
- )))), /* @__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(
18977
19071
  import_react_native21.TextInput,
18978
19072
  {
18979
19073
  value: title,
18980
19074
  onChangeText: setTitle,
18981
19075
  placeholder: "What did you find?",
18982
19076
  placeholderTextColor: colors.textMuted,
18983
- style: styles5.titleInput,
19077
+ style: styles6.titleInput,
18984
19078
  returnKeyType: "next"
18985
19079
  }
18986
- )), /* @__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(
18987
19081
  import_react_native21.TextInput,
18988
19082
  {
18989
19083
  value: description,
18990
19084
  onChangeText: setDescription,
18991
19085
  placeholder: "Details (optional)",
18992
19086
  placeholderTextColor: colors.textMuted,
18993
- style: styles5.descInput,
19087
+ style: styles6.descInput,
18994
19088
  multiline: true,
18995
19089
  numberOfLines: 3,
18996
19090
  textAlignVertical: "top"
@@ -18998,12 +19092,12 @@ function SessionFindingScreen({ nav }) {
18998
19092
  )), /* @__PURE__ */ import_react22.default.createElement(
18999
19093
  import_react_native21.TouchableOpacity,
19000
19094
  {
19001
- style: [styles5.submitBtn, !canSubmit && styles5.submitBtnDisabled],
19095
+ style: [styles6.submitBtn, !canSubmit && styles6.submitBtnDisabled],
19002
19096
  onPress: handleSubmit,
19003
19097
  disabled: !canSubmit,
19004
19098
  activeOpacity: 0.8
19005
19099
  },
19006
- /* @__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")
19007
19101
  ));
19008
19102
  }
19009
19103
  function createStyles15() {
@@ -19115,9 +19209,278 @@ function createStyles15() {
19115
19209
  });
19116
19210
  }
19117
19211
 
19118
- // src/BugBearButton.tsx
19212
+ // src/widget/MiniTestRunner.tsx
19213
+ var import_react23 = __toESM(require("react"));
19214
+ var import_react_native22 = require("react-native");
19119
19215
  var screenWidth = import_react_native22.Dimensions.get("window").width;
19120
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;
19121
19484
  function BugBearButton({
19122
19485
  position = "bottom-right",
19123
19486
  buttonStyle,
@@ -19129,16 +19492,18 @@ function BugBearButton({
19129
19492
  }) {
19130
19493
  const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments, widgetMode, widgetColorScheme } = useBugBear();
19131
19494
  const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
19132
- const [panelVisible, setPanelVisible] = (0, import_react23.useState)(false);
19133
- const panelAnim = (0, import_react23.useRef)(new import_react_native22.Animated.Value(0)).current;
19134
- const styles5 = (0, import_react23.useMemo)(() => createStyles16(), [widgetColorScheme]);
19135
- 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);
19136
19501
  const openPanel = () => {
19137
19502
  captureAppScreen().then((uri) => {
19138
19503
  screenCaptureRef.current = uri;
19139
19504
  });
19140
- setPanelVisible(true);
19141
- import_react_native22.Animated.spring(panelAnim, {
19505
+ setViewMode("panel");
19506
+ import_react_native23.Animated.spring(panelAnim, {
19142
19507
  toValue: 1,
19143
19508
  useNativeDriver: true,
19144
19509
  friction: 8,
@@ -19146,13 +19511,13 @@ function BugBearButton({
19146
19511
  }).start();
19147
19512
  };
19148
19513
  const closePanel = () => {
19149
- import_react_native22.Keyboard.dismiss();
19150
- import_react_native22.Animated.timing(panelAnim, {
19514
+ import_react_native23.Keyboard.dismiss();
19515
+ import_react_native23.Animated.timing(panelAnim, {
19151
19516
  toValue: 0,
19152
19517
  duration: 250,
19153
19518
  useNativeDriver: true
19154
19519
  }).start(() => {
19155
- setPanelVisible(false);
19520
+ setViewMode("closed");
19156
19521
  });
19157
19522
  };
19158
19523
  const getInitialPosition = () => {
@@ -19161,22 +19526,22 @@ function BugBearButton({
19161
19526
  if (initialX !== void 0 && initialY !== void 0) {
19162
19527
  return { x: initialX, y: initialY };
19163
19528
  }
19164
- const x = position === "bottom-right" ? screenWidth - buttonSize - margin : margin;
19165
- const y = screenHeight - 160;
19529
+ const x = position === "bottom-right" ? screenWidth2 - buttonSize - margin : margin;
19530
+ const y = screenHeight2 - 160;
19166
19531
  return { x, y };
19167
19532
  };
19168
19533
  const initialPos = getInitialPosition();
19169
- const pan = (0, import_react23.useRef)(new import_react_native22.Animated.ValueXY(initialPos)).current;
19170
- const isDragging = (0, import_react23.useRef)(false);
19171
- const panResponder = (0, import_react23.useRef)(
19172
- 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({
19173
19538
  onStartShouldSetPanResponder: () => draggable,
19174
19539
  onMoveShouldSetPanResponder: (_, gs) => draggable && (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5),
19175
19540
  onPanResponderGrant: () => {
19176
19541
  isDragging.current = false;
19177
19542
  pan.setOffset({
19178
- x: pan.x._value,
19179
- y: pan.y._value
19543
+ x: getAnimatedValue(pan.x),
19544
+ y: getAnimatedValue(pan.y)
19180
19545
  });
19181
19546
  pan.setValue({ x: 0, y: 0 });
19182
19547
  },
@@ -19184,20 +19549,20 @@ function BugBearButton({
19184
19549
  if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {
19185
19550
  isDragging.current = true;
19186
19551
  }
19187
- import_react_native22.Animated.event(
19552
+ import_react_native23.Animated.event(
19188
19553
  [null, { dx: pan.x, dy: pan.y }],
19189
19554
  { useNativeDriver: false }
19190
19555
  )(_, gs);
19191
19556
  },
19192
19557
  onPanResponderRelease: (_, gs) => {
19193
19558
  pan.flattenOffset();
19194
- const currentX = pan.x._value;
19195
- const currentY = pan.y._value;
19559
+ const currentX = getAnimatedValue(pan.x);
19560
+ const currentY = getAnimatedValue(pan.y);
19196
19561
  const buttonSize = 56;
19197
19562
  const margin = 16;
19198
- const snapX = currentX < screenWidth / 2 ? margin : screenWidth - buttonSize - margin;
19199
- const snapY = Math.max(minY, Math.min(currentY, screenHeight - maxYOffset));
19200
- 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, {
19201
19566
  toValue: { x: snapX, y: snapY },
19202
19567
  useNativeDriver: false,
19203
19568
  friction: 7,
@@ -19212,11 +19577,11 @@ function BugBearButton({
19212
19577
  ).current;
19213
19578
  const pendingTests = widgetMode === "qa" ? assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length : 0;
19214
19579
  const badgeCount = pendingTests + unreadCount;
19215
- (0, import_react23.useEffect)(() => {
19216
- if (!panelVisible || import_react_native22.Platform.OS !== "android") return;
19217
- 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", () => {
19218
19583
  if (canGoBack) {
19219
- import_react_native22.Keyboard.dismiss();
19584
+ import_react_native23.Keyboard.dismiss();
19220
19585
  pop();
19221
19586
  } else {
19222
19587
  closePanel();
@@ -19225,6 +19590,51 @@ function BugBearButton({
19225
19590
  });
19226
19591
  return () => handler.remove();
19227
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]);
19228
19638
  if (!shouldShowWidget) return null;
19229
19639
  const getHeaderTitle = () => {
19230
19640
  switch (currentScreen.name) {
@@ -19267,40 +19677,41 @@ function BugBearButton({
19267
19677
  };
19268
19678
  const nav = {
19269
19679
  push: (screen) => {
19270
- import_react_native22.Keyboard.dismiss();
19680
+ import_react_native23.Keyboard.dismiss();
19271
19681
  push(screen);
19272
19682
  },
19273
19683
  pop: () => {
19274
- import_react_native22.Keyboard.dismiss();
19684
+ import_react_native23.Keyboard.dismiss();
19275
19685
  pop();
19276
19686
  },
19277
19687
  replace: (screen) => {
19278
- import_react_native22.Keyboard.dismiss();
19688
+ import_react_native23.Keyboard.dismiss();
19279
19689
  replace(screen);
19280
19690
  },
19281
19691
  reset: () => {
19282
- import_react_native22.Keyboard.dismiss();
19692
+ import_react_native23.Keyboard.dismiss();
19283
19693
  reset();
19284
19694
  },
19285
19695
  canGoBack,
19286
- closeWidget: handleClose
19696
+ closeWidget: handleClose,
19697
+ startMiniRunner
19287
19698
  };
19288
19699
  const QA_ONLY_SCREENS = ["TEST_DETAIL", "TEST_LIST", "TEST_FEEDBACK", "SESSION_START", "SESSION_ACTIVE", "SESSION_FINDING"];
19289
19700
  const renderScreen = () => {
19290
19701
  if (widgetMode === "feedback" && QA_ONLY_SCREENS.includes(currentScreen.name)) {
19291
- return /* @__PURE__ */ import_react23.default.createElement(HomeScreen, { nav });
19702
+ return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
19292
19703
  }
19293
19704
  switch (currentScreen.name) {
19294
19705
  case "HOME":
19295
- return /* @__PURE__ */ import_react23.default.createElement(HomeScreen, { nav });
19706
+ return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
19296
19707
  case "TEST_DETAIL":
19297
- return /* @__PURE__ */ import_react23.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
19708
+ return /* @__PURE__ */ import_react24.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
19298
19709
  case "TEST_LIST":
19299
- return /* @__PURE__ */ import_react23.default.createElement(TestListScreen, { nav });
19710
+ return /* @__PURE__ */ import_react24.default.createElement(TestListScreen, { nav });
19300
19711
  case "TEST_FEEDBACK":
19301
- 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 });
19302
19713
  case "REPORT":
19303
- return /* @__PURE__ */ import_react23.default.createElement(
19714
+ return /* @__PURE__ */ import_react24.default.createElement(
19304
19715
  ReportScreen,
19305
19716
  {
19306
19717
  nav,
@@ -19312,84 +19723,93 @@ function BugBearButton({
19312
19723
  }
19313
19724
  );
19314
19725
  case "REPORT_SUCCESS":
19315
- return /* @__PURE__ */ import_react23.default.createElement(ReportSuccessScreen, { nav });
19726
+ return /* @__PURE__ */ import_react24.default.createElement(ReportSuccessScreen, { nav });
19316
19727
  case "MESSAGE_LIST":
19317
- return /* @__PURE__ */ import_react23.default.createElement(MessageListScreen, { nav });
19728
+ return /* @__PURE__ */ import_react24.default.createElement(MessageListScreen, { nav });
19318
19729
  case "THREAD_DETAIL":
19319
- return /* @__PURE__ */ import_react23.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
19730
+ return /* @__PURE__ */ import_react24.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
19320
19731
  case "COMPOSE_MESSAGE":
19321
- return /* @__PURE__ */ import_react23.default.createElement(ComposeMessageScreen, { nav });
19732
+ return /* @__PURE__ */ import_react24.default.createElement(ComposeMessageScreen, { nav });
19322
19733
  case "ISSUE_LIST":
19323
- return /* @__PURE__ */ import_react23.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
19734
+ return /* @__PURE__ */ import_react24.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
19324
19735
  case "ISSUE_DETAIL":
19325
- return /* @__PURE__ */ import_react23.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
19736
+ return /* @__PURE__ */ import_react24.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
19326
19737
  case "PROFILE":
19327
- return /* @__PURE__ */ import_react23.default.createElement(ProfileScreen, { nav });
19738
+ return /* @__PURE__ */ import_react24.default.createElement(ProfileScreen, { nav });
19328
19739
  case "SESSION_START":
19329
- return /* @__PURE__ */ import_react23.default.createElement(SessionStartScreen, { nav });
19740
+ return /* @__PURE__ */ import_react24.default.createElement(SessionStartScreen, { nav });
19330
19741
  case "SESSION_ACTIVE":
19331
- return /* @__PURE__ */ import_react23.default.createElement(SessionActiveScreen, { nav });
19742
+ return /* @__PURE__ */ import_react24.default.createElement(SessionActiveScreen, { nav });
19332
19743
  case "SESSION_FINDING":
19333
- return /* @__PURE__ */ import_react23.default.createElement(SessionFindingScreen, { nav });
19744
+ return /* @__PURE__ */ import_react24.default.createElement(SessionFindingScreen, { nav });
19334
19745
  default:
19335
- return /* @__PURE__ */ import_react23.default.createElement(HomeScreen, { nav });
19746
+ return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
19336
19747
  }
19337
19748
  };
19338
- return /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, !panelVisible && /* @__PURE__ */ import_react23.default.createElement(
19339
- 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,
19340
19760
  {
19341
- style: [styles5.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
19761
+ style: [styles6.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
19342
19762
  ...panResponder.panHandlers
19343
19763
  },
19344
- /* @__PURE__ */ import_react23.default.createElement(
19345
- import_react_native22.TouchableOpacity,
19764
+ /* @__PURE__ */ import_react24.default.createElement(
19765
+ import_react_native23.TouchableOpacity,
19346
19766
  {
19347
- style: styles5.fab,
19767
+ style: styles6.fab,
19348
19768
  onPress: openPanel,
19349
19769
  activeOpacity: draggable ? 1 : 0.7
19350
19770
  },
19351
- /* @__PURE__ */ import_react23.default.createElement(import_react_native22.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles5.fabIcon }),
19352
- 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))
19353
19773
  )
19354
- ), panelVisible && /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react23.default.createElement(
19355
- 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,
19356
19776
  {
19357
- behavior: import_react_native22.Platform.OS === "ios" ? "padding" : "height",
19358
- style: styles5.panelKeyboardAvoid,
19777
+ behavior: import_react_native23.Platform.OS === "ios" ? "padding" : "height",
19778
+ style: styles6.panelKeyboardAvoid,
19359
19779
  pointerEvents: "box-none"
19360
19780
  },
19361
- /* @__PURE__ */ import_react23.default.createElement(
19362
- import_react_native22.Animated.View,
19781
+ /* @__PURE__ */ import_react24.default.createElement(
19782
+ import_react_native23.Animated.View,
19363
19783
  {
19364
19784
  style: [
19365
- styles5.panelContainer,
19785
+ styles6.panelContainer,
19366
19786
  {
19367
19787
  transform: [{
19368
19788
  translateY: panelAnim.interpolate({
19369
19789
  inputRange: [0, 1],
19370
- outputRange: [screenHeight, 0]
19790
+ outputRange: [screenHeight2, 0]
19371
19791
  })
19372
19792
  }]
19373
19793
  }
19374
19794
  ]
19375
19795
  },
19376
- /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.panelHandle }, /* @__PURE__ */ import_react23.default.createElement(import_react_native22.View, { style: styles5.panelHandleBar })),
19377
- /* @__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")))),
19378
- /* @__PURE__ */ import_react23.default.createElement(
19379
- 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,
19380
19800
  {
19381
- style: styles5.content,
19382
- contentContainerStyle: styles5.contentContainer,
19801
+ style: styles6.content,
19802
+ contentContainerStyle: styles6.contentContainer,
19383
19803
  keyboardShouldPersistTaps: "handled",
19384
19804
  showsVerticalScrollIndicator: false
19385
19805
  },
19386
- 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()
19387
19807
  )
19388
19808
  )
19389
19809
  )));
19390
19810
  }
19391
19811
  function createStyles16() {
19392
- return import_react_native22.StyleSheet.create({
19812
+ return import_react_native23.StyleSheet.create({
19393
19813
  // FAB
19394
19814
  fabContainer: {
19395
19815
  position: "absolute",
@@ -19548,7 +19968,7 @@ function createStyles16() {
19548
19968
  },
19549
19969
  contentContainer: {
19550
19970
  padding: 16,
19551
- paddingBottom: import_react_native22.Platform.OS === "ios" ? 50 : 28
19971
+ paddingBottom: import_react_native23.Platform.OS === "ios" ? 50 : 28
19552
19972
  },
19553
19973
  // Loading
19554
19974
  loadingContainer: {
@@ -19564,9 +19984,9 @@ function createStyles16() {
19564
19984
  }
19565
19985
 
19566
19986
  // src/BugBearErrorBoundary.tsx
19567
- var import_react24 = __toESM(require("react"));
19568
- var import_react_native23 = require("react-native");
19569
- 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 {
19570
19990
  constructor(props) {
19571
19991
  super(props);
19572
19992
  this.reset = () => {
@@ -19610,7 +20030,7 @@ var BugBearErrorBoundary = class extends import_react24.Component {
19610
20030
  if (fallback) {
19611
20031
  return fallback;
19612
20032
  }
19613
- 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"));
19614
20034
  }
19615
20035
  return children;
19616
20036
  }
@@ -19621,7 +20041,7 @@ function useErrorContext() {
19621
20041
  getEnhancedContext: () => contextCapture.getEnhancedContext()
19622
20042
  };
19623
20043
  }
19624
- var styles4 = import_react_native23.StyleSheet.create({
20044
+ var styles5 = import_react_native24.StyleSheet.create({
19625
20045
  container: {
19626
20046
  padding: 20,
19627
20047
  margin: 20,