@bbearai/react-native 0.9.3 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +918 -382
  2. package/dist/index.mjs +933 -386
  3. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -14118,7 +14118,9 @@ var BugBearClient = class {
14118
14118
  p_tester_id: testerInfo.id,
14119
14119
  p_focus_area: options.focusArea || null,
14120
14120
  p_track: options.track || null,
14121
- p_platform: options.platform || null
14121
+ p_platform: options.platform || null,
14122
+ p_session_type: options.sessionType || "exploratory",
14123
+ p_task_id: options.taskId || null
14122
14124
  });
14123
14125
  if (error) {
14124
14126
  console.error("BugBear: Failed to start session", formatPgError(error));
@@ -14302,6 +14304,45 @@ var BugBearClient = class {
14302
14304
  return { success: false, error: message };
14303
14305
  }
14304
14306
  }
14307
+ // ============================================
14308
+ // QA Tasks (Ad Hoc Testing)
14309
+ // ============================================
14310
+ /**
14311
+ * Get active QA tasks for the project
14312
+ */
14313
+ async getTasks(status = "active") {
14314
+ try {
14315
+ await this.ensureReady();
14316
+ const { data, error } = await this.supabase.rpc("list_qa_tasks", {
14317
+ p_project_id: this.config.projectId,
14318
+ p_status: status
14319
+ });
14320
+ if (error) {
14321
+ console.error("BugBear: Failed to fetch tasks", formatPgError(error));
14322
+ return [];
14323
+ }
14324
+ return (data || []).map((t) => this.transformTask(t));
14325
+ } catch (err) {
14326
+ console.error("BugBear: Error fetching tasks", err);
14327
+ return [];
14328
+ }
14329
+ }
14330
+ /**
14331
+ * Transform database task to QATask type
14332
+ */
14333
+ transformTask(data) {
14334
+ return {
14335
+ id: data.id,
14336
+ projectId: data.project_id,
14337
+ title: data.title,
14338
+ description: data.description || void 0,
14339
+ trackId: data.track_id || void 0,
14340
+ priority: data.priority,
14341
+ status: data.status,
14342
+ createdAt: data.created_at,
14343
+ updatedAt: data.updated_at
14344
+ };
14345
+ }
14305
14346
  /**
14306
14347
  * Transform database session to QASession type
14307
14348
  */
@@ -14313,6 +14354,8 @@ var BugBearClient = class {
14313
14354
  focusArea: data.focus_area,
14314
14355
  track: data.track,
14315
14356
  platform: data.platform,
14357
+ sessionType: data.session_type || "exploratory",
14358
+ taskId: data.task_id || void 0,
14316
14359
  startedAt: data.started_at,
14317
14360
  endedAt: data.ended_at,
14318
14361
  notes: data.notes,
@@ -14894,7 +14937,13 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
14894
14937
  }, [client, activeSession]);
14895
14938
  const addFinding = (0, import_react.useCallback)(async (options) => {
14896
14939
  if (!client || !activeSession) return { success: false, error: "No active session" };
14897
- const result = await client.addFinding(activeSession.id, options);
14940
+ const enhanced = contextCapture.getEnhancedContext();
14941
+ const enriched = {
14942
+ ...options,
14943
+ consoleLogs: options.consoleLogs ?? enhanced.consoleLogs,
14944
+ networkSnapshot: options.networkSnapshot ?? enhanced.networkRequests
14945
+ };
14946
+ const result = await client.addFinding(activeSession.id, enriched);
14898
14947
  if (result.success && result.finding) {
14899
14948
  setSessionFindings((prev) => [...prev, result.finding]);
14900
14949
  setActiveSession((prev) => prev ? { ...prev, findingsCount: prev.findingsCount + 1 } : null);
@@ -15195,8 +15244,8 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
15195
15244
  }
15196
15245
 
15197
15246
  // src/BugBearButton.tsx
15198
- var import_react24 = __toESM(require("react"));
15199
- var import_react_native23 = require("react-native");
15247
+ var import_react25 = __toESM(require("react"));
15248
+ var import_react_native24 = require("react-native");
15200
15249
 
15201
15250
  // src/widget/logo.ts
15202
15251
  var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
@@ -15339,8 +15388,9 @@ var s = import_react_native3.StyleSheet.create({
15339
15388
 
15340
15389
  // src/widget/screens/HomeScreen.tsx
15341
15390
  function HomeScreen({ nav }) {
15342
- const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl, isLoading, activeSession, sessionFindings, refreshSession, widgetMode, widgetColorScheme } = useBugBear();
15343
- const styles6 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15391
+ const { client, assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl, isLoading, activeSession, sessionFindings, refreshSession, widgetMode, widgetColorScheme } = useBugBear();
15392
+ const [tasks, setTasks] = (0, import_react4.useState)([]);
15393
+ const styles7 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15344
15394
  const [sessionElapsed, setSessionElapsed] = (0, import_react4.useState)(0);
15345
15395
  const timerRef = (0, import_react4.useRef)(null);
15346
15396
  (0, import_react4.useEffect)(() => {
@@ -15360,6 +15410,10 @@ function HomeScreen({ nav }) {
15360
15410
  if (widgetMode === "qa") {
15361
15411
  refreshAssignments();
15362
15412
  refreshSession();
15413
+ if (client?.getTasks) {
15414
+ client.getTasks().then(setTasks).catch(() => {
15415
+ });
15416
+ }
15363
15417
  }
15364
15418
  refreshThreads();
15365
15419
  refreshIssueCounts();
@@ -15369,98 +15423,98 @@ function HomeScreen({ nav }) {
15369
15423
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15370
15424
  import_react_native4.TouchableOpacity,
15371
15425
  {
15372
- style: [styles6.heroBanner, styles6.heroBannerMessages],
15426
+ style: [styles7.heroBanner, styles7.heroBannerMessages],
15373
15427
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15374
15428
  activeOpacity: 0.8
15375
15429
  },
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(
15430
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroCount }, unreadCount),
15431
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15432
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroAction }, "View Messages \u2192")
15433
+ ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles7.heroBanner, styles7.heroBannerClear] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroClearEmoji }, "\u{1F4AC}"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroClearTitle }, "Help us improve"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroClearSub }, "Report bugs, share ideas, and track your submissions")), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15380
15434
  import_react_native4.TouchableOpacity,
15381
15435
  {
15382
- style: styles6.actionCard,
15436
+ style: styles7.actionCard,
15383
15437
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15384
15438
  activeOpacity: 0.7
15385
15439
  },
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")
15440
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F41B}"),
15441
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Report Bug")
15388
15442
  ), /* @__PURE__ */ import_react4.default.createElement(
15389
15443
  import_react_native4.TouchableOpacity,
15390
15444
  {
15391
- style: styles6.actionCard,
15445
+ style: styles7.actionCard,
15392
15446
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15393
15447
  activeOpacity: 0.7
15394
15448
  },
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")
15449
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4A1}"),
15450
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Share Feedback")
15397
15451
  ), /* @__PURE__ */ import_react4.default.createElement(
15398
15452
  import_react_native4.TouchableOpacity,
15399
15453
  {
15400
- style: styles6.actionCard,
15454
+ style: styles7.actionCard,
15401
15455
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15402
15456
  activeOpacity: 0.7
15403
15457
  },
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))
15458
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4AC}"),
15459
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Messages"),
15460
+ unreadCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles7.actionBadge, styles7.actionBadgeMsg] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionBadgeText }, unreadCount))
15407
15461
  ), /* @__PURE__ */ import_react4.default.createElement(
15408
15462
  import_react_native4.TouchableOpacity,
15409
15463
  {
15410
- style: styles6.actionCard,
15464
+ style: styles7.actionCard,
15411
15465
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15412
15466
  activeOpacity: 0.7
15413
15467
  },
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(
15468
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4CB}"),
15469
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "My Issues"),
15470
+ issueCounts.open > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles7.actionBadge, styles7.actionBadgeIssue] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionBadgeText }, issueCounts.open))
15471
+ )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15418
15472
  import_react_native4.TouchableOpacity,
15419
15473
  {
15420
- style: [styles6.issueCard, styles6.issueCardOpen],
15474
+ style: [styles7.issueCard, styles7.issueCardOpen],
15421
15475
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15422
15476
  activeOpacity: 0.7
15423
15477
  },
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")
15478
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountOpen }, issueCounts.open),
15479
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Open")
15426
15480
  ), /* @__PURE__ */ import_react4.default.createElement(
15427
15481
  import_react_native4.TouchableOpacity,
15428
15482
  {
15429
- style: [styles6.issueCard, styles6.issueCardDone],
15483
+ style: [styles7.issueCard, styles7.issueCardDone],
15430
15484
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15431
15485
  activeOpacity: 0.7
15432
15486
  },
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")
15487
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountDone }, issueCounts.done),
15488
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Done")
15435
15489
  ), /* @__PURE__ */ import_react4.default.createElement(
15436
15490
  import_react_native4.TouchableOpacity,
15437
15491
  {
15438
- style: [styles6.issueCard, styles6.issueCardReopened],
15492
+ style: [styles7.issueCard, styles7.issueCardReopened],
15439
15493
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15440
15494
  activeOpacity: 0.7
15441
15495
  },
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")
15496
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountReopened }, issueCounts.reopened),
15497
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Reopened")
15444
15498
  )), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15445
15499
  import_react_native4.TouchableOpacity,
15446
15500
  {
15447
- style: styles6.webAppLink,
15501
+ style: styles7.webAppLink,
15448
15502
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15449
15503
  activeOpacity: 0.7
15450
15504
  },
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")
15505
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppIcon }, "\u{1F310}"),
15506
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.webAppTextWrap }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppTitle }, "Open Web Dashboard"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppSub }, "View your submissions & updates")),
15507
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppArrow }, "\u2192")
15454
15508
  ), /* @__PURE__ */ import_react4.default.createElement(
15455
15509
  import_react_native4.TouchableOpacity,
15456
15510
  {
15457
- style: styles6.refreshButton,
15511
+ style: styles7.refreshButton,
15458
15512
  onPress: () => {
15459
15513
  refreshThreads();
15460
15514
  refreshIssueCounts();
15461
15515
  }
15462
15516
  },
15463
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.refreshText }, "\u21BB Refresh")
15517
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.refreshText }, "\u21BB Refresh")
15464
15518
  ));
15465
15519
  }
15466
15520
  const formatTimer = (s2) => {
@@ -15477,130 +15531,151 @@ function HomeScreen({ nav }) {
15477
15531
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, pendingCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15478
15532
  import_react_native4.TouchableOpacity,
15479
15533
  {
15480
- style: [styles6.heroBanner, styles6.heroBannerTests],
15534
+ style: [styles7.heroBanner, styles7.heroBannerTests],
15481
15535
  onPress: () => nav.push({ name: "TEST_DETAIL" }),
15482
15536
  activeOpacity: 0.8
15483
15537
  },
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")
15538
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroCount }, pendingCount),
15539
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
15540
+ retestCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.retestPill }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
15541
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroAction }, "Start Testing \u2192")
15488
15542
  ) : unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15489
15543
  import_react_native4.TouchableOpacity,
15490
15544
  {
15491
- style: [styles6.heroBanner, styles6.heroBannerMessages],
15545
+ style: [styles7.heroBanner, styles7.heroBannerMessages],
15492
15546
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15493
15547
  activeOpacity: 0.8
15494
15548
  },
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(
15549
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroCount }, unreadCount),
15550
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15551
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroAction }, "View Messages \u2192")
15552
+ ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles7.heroBanner, styles7.heroBannerClear] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroClearEmoji }, "\u2705"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroClearTitle }, "All caught up!"), totalTests > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroClearSub }, completedCount, "/", totalTests, " tests completed")), activeSession && activeSession.status === "active" ? /* @__PURE__ */ import_react4.default.createElement(
15499
15553
  import_react_native4.TouchableOpacity,
15500
15554
  {
15501
- style: styles6.sessionCardActive,
15555
+ style: styles7.sessionCardActive,
15502
15556
  onPress: () => nav.push({ name: "SESSION_ACTIVE" }),
15503
15557
  activeOpacity: 0.8
15504
15558
  },
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")
15559
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.sessionDot }),
15560
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.sessionCardContent }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardTitle, numberOfLines: 1 }, activeSession.focusArea || "QA Session"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardMeta }, formatTimer(sessionElapsed), " \xB7 ", sessionFindings.length, " finding", sessionFindings.length !== 1 ? "s" : "")),
15561
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardAction }, "Resume \u2192")
15508
15562
  ) : /* @__PURE__ */ import_react4.default.createElement(
15509
15563
  import_react_native4.TouchableOpacity,
15510
15564
  {
15511
- style: styles6.sessionCardInactive,
15565
+ style: styles7.sessionCardInactive,
15512
15566
  onPress: () => nav.push({ name: "SESSION_START" }),
15513
15567
  activeOpacity: 0.7
15514
15568
  },
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(
15569
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardIcon }, "\u{1F50D}"),
15570
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardLabel }, "Start QA Session"),
15571
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardArrow }, "\u2192")
15572
+ ), !activeSession && nav.startAdHoc && /* @__PURE__ */ import_react4.default.createElement(
15573
+ import_react_native4.TouchableOpacity,
15574
+ {
15575
+ style: styles7.quickTestCard,
15576
+ onPress: () => nav.startAdHoc?.(),
15577
+ activeOpacity: 0.7
15578
+ },
15579
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.quickTestIcon }, "\u26A1"),
15580
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.quickTestContent }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.quickTestTitle }, "Quick Test"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.quickTestSub }, "Ad hoc explore & report")),
15581
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardArrow }, "\u2192")
15582
+ ), !activeSession && tasks.length > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: { marginBottom: 20 } }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: { fontSize: 12, fontWeight: "600", color: colors.textSecondary, textTransform: "uppercase", letterSpacing: 0.5, marginBottom: 8 } }, "Task Checklist"), tasks.map((task) => /* @__PURE__ */ import_react4.default.createElement(
15583
+ import_react_native4.TouchableOpacity,
15584
+ {
15585
+ key: task.id,
15586
+ style: { backgroundColor: colors.card, borderWidth: 1, borderColor: colors.border, borderRadius: 10, padding: 12, paddingHorizontal: 14, flexDirection: "row", alignItems: "center", gap: 10, marginBottom: 4 },
15587
+ onPress: () => nav.startAdHoc?.(task.id, task.title),
15588
+ activeOpacity: 0.7
15589
+ },
15590
+ task.priority === "high" && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: { width: 6, height: 6, borderRadius: 3, backgroundColor: colors.red } }),
15591
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: { flex: 1 } }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: { fontSize: 13, fontWeight: "500", color: colors.textPrimary }, numberOfLines: 1 }, task.title), task.description ? /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: { fontSize: 11, color: colors.textMuted, marginTop: 2 }, numberOfLines: 1 }, task.description) : null),
15592
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: { fontSize: 11, fontWeight: "600", color: colors.blue } }, "Go")
15593
+ ))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15519
15594
  import_react_native4.TouchableOpacity,
15520
15595
  {
15521
- style: styles6.actionCard,
15596
+ style: styles7.actionCard,
15522
15597
  onPress: () => nav.push({ name: "TEST_LIST" }),
15523
15598
  activeOpacity: 0.7
15524
15599
  },
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))
15600
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u2705"),
15601
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Tests"),
15602
+ pendingCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.actionBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionBadgeText }, pendingCount))
15528
15603
  ), /* @__PURE__ */ import_react4.default.createElement(
15529
15604
  import_react_native4.TouchableOpacity,
15530
15605
  {
15531
- style: styles6.actionCard,
15606
+ style: styles7.actionCard,
15532
15607
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15533
15608
  activeOpacity: 0.7
15534
15609
  },
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")
15610
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F41B}"),
15611
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Report Bug")
15537
15612
  ), /* @__PURE__ */ import_react4.default.createElement(
15538
15613
  import_react_native4.TouchableOpacity,
15539
15614
  {
15540
- style: styles6.actionCard,
15615
+ style: styles7.actionCard,
15541
15616
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15542
15617
  activeOpacity: 0.7
15543
15618
  },
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")
15619
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4A1}"),
15620
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Feedback")
15546
15621
  ), /* @__PURE__ */ import_react4.default.createElement(
15547
15622
  import_react_native4.TouchableOpacity,
15548
15623
  {
15549
- style: styles6.actionCard,
15624
+ style: styles7.actionCard,
15550
15625
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15551
15626
  activeOpacity: 0.7
15552
15627
  },
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(
15628
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4AC}"),
15629
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Messages"),
15630
+ unreadCount > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles7.actionBadge, styles7.actionBadgeMsg] }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionBadgeText }, unreadCount))
15631
+ )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15557
15632
  import_react_native4.TouchableOpacity,
15558
15633
  {
15559
- style: [styles6.issueCard, styles6.issueCardOpen],
15634
+ style: [styles7.issueCard, styles7.issueCardOpen],
15560
15635
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15561
15636
  activeOpacity: 0.7
15562
15637
  },
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")
15638
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountOpen }, issueCounts.open),
15639
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Open")
15565
15640
  ), /* @__PURE__ */ import_react4.default.createElement(
15566
15641
  import_react_native4.TouchableOpacity,
15567
15642
  {
15568
- style: [styles6.issueCard, styles6.issueCardDone],
15643
+ style: [styles7.issueCard, styles7.issueCardDone],
15569
15644
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15570
15645
  activeOpacity: 0.7
15571
15646
  },
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")
15647
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountDone }, issueCounts.done),
15648
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Done")
15574
15649
  ), /* @__PURE__ */ import_react4.default.createElement(
15575
15650
  import_react_native4.TouchableOpacity,
15576
15651
  {
15577
- style: [styles6.issueCard, styles6.issueCardReopened],
15652
+ style: [styles7.issueCard, styles7.issueCardReopened],
15578
15653
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15579
15654
  activeOpacity: 0.7
15580
15655
  },
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(
15656
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountReopened }, issueCounts.reopened),
15657
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Reopened")
15658
+ )), totalTests > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.progressSection }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.progressBar }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: [styles7.progressFill, { width: `${Math.round(completedCount / totalTests * 100)}%` }] })), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.progressText }, completedCount, "/", totalTests, " tests completed")), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15584
15659
  import_react_native4.TouchableOpacity,
15585
15660
  {
15586
- style: styles6.webAppLink,
15661
+ style: styles7.webAppLink,
15587
15662
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15588
15663
  activeOpacity: 0.7
15589
15664
  },
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")
15665
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppIcon }, "\u{1F310}"),
15666
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.webAppTextWrap }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppTitle }, "Open Web Dashboard"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppSub }, "View analytics, history & more")),
15667
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppArrow }, "\u2192")
15593
15668
  ), /* @__PURE__ */ import_react4.default.createElement(
15594
15669
  import_react_native4.TouchableOpacity,
15595
15670
  {
15596
- style: styles6.refreshButton,
15671
+ style: styles7.refreshButton,
15597
15672
  onPress: () => {
15598
15673
  refreshAssignments();
15599
15674
  refreshThreads();
15600
15675
  refreshIssueCounts();
15601
15676
  }
15602
15677
  },
15603
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.refreshText }, "\u21BB Refresh")
15678
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.refreshText }, "\u21BB Refresh")
15604
15679
  ));
15605
15680
  }
15606
15681
  function createStyles() {
@@ -15889,6 +15964,35 @@ function createStyles() {
15889
15964
  sessionCardArrow: {
15890
15965
  fontSize: 13,
15891
15966
  color: colors.textMuted
15967
+ },
15968
+ // Quick Test card
15969
+ quickTestCard: {
15970
+ flexDirection: "row",
15971
+ alignItems: "center",
15972
+ backgroundColor: colors.card,
15973
+ borderWidth: 1,
15974
+ borderColor: colors.border,
15975
+ borderRadius: 12,
15976
+ padding: 12,
15977
+ paddingHorizontal: 16,
15978
+ gap: 12,
15979
+ marginBottom: 16
15980
+ },
15981
+ quickTestIcon: {
15982
+ fontSize: 22
15983
+ },
15984
+ quickTestContent: {
15985
+ flex: 1
15986
+ },
15987
+ quickTestTitle: {
15988
+ fontSize: 14,
15989
+ fontWeight: "600",
15990
+ color: colors.textPrimary
15991
+ },
15992
+ quickTestSub: {
15993
+ fontSize: 12,
15994
+ color: colors.textMuted,
15995
+ marginTop: 2
15892
15996
  }
15893
15997
  });
15894
15998
  }
@@ -15898,7 +16002,7 @@ var import_react5 = __toESM(require("react"));
15898
16002
  var import_react_native5 = require("react-native");
15899
16003
  function TestDetailScreen({ testId, nav }) {
15900
16004
  const { client, assignments, currentAssignment, refreshAssignments, getDeviceInfo, onNavigate, widgetColorScheme } = useBugBear();
15901
- const styles6 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
16005
+ const styles7 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15902
16006
  const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
15903
16007
  const [showSteps, setShowSteps] = (0, import_react5.useState)(true);
15904
16008
  const [showDetails, setShowDetails] = (0, import_react5.useState)(false);
@@ -16076,7 +16180,7 @@ function TestDetailScreen({ testId, nav }) {
16076
16180
  const steps = testCase.steps;
16077
16181
  const info = templateInfo[template] || templateInfo.steps;
16078
16182
  const rubricMode = testCase.track?.rubricMode || "pass_fail";
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(
16183
+ return /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.container }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.topRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.positionInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.timerBadge }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.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: styles7.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.retestBanner }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.retestLabel }, "Retest"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.testKey }, testCase.key), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles7.sectionHeader }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.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: styles7.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { key: idx, style: styles7.step }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.stepNumber }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.stepBody }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.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(
16080
16184
  import_react_native5.TouchableOpacity,
16081
16185
  {
16082
16186
  key: idx,
@@ -16086,86 +16190,86 @@ function TestDetailScreen({ testId, nav }) {
16086
16190
  else next[idx] = true;
16087
16191
  return next;
16088
16192
  }),
16089
- style: [styles6.checklistItem, criteriaResults[idx] === true && styles6.checklistItemChecked]
16193
+ style: [styles7.checklistItem, criteriaResults[idx] === true && styles7.checklistItemChecked]
16090
16194
  },
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(
16195
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles7.checkbox, criteriaResults[idx] === true && styles7.checkboxChecked] }, criteriaResults[idx] === true && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.checkmark }, "\u2713")),
16196
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.checklistText, criteriaResults[idx] === true && styles7.checklistTextDone] }, step.action)
16197
+ )), Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setCriteriaResults({}), style: styles7.resetRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.resetText }, "\u21BA Reset"))), template === "rubric" && steps.map((step, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { key: idx, style: styles7.rubricItem }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.rubricTitle }, idx + 1, ". ", step.action), step.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.rubricExpected }, step.expectedResult), rubricMode === "pass_fail" ? /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.passFailRow }, /* @__PURE__ */ import_react5.default.createElement(
16094
16198
  import_react_native5.TouchableOpacity,
16095
16199
  {
16096
16200
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: true })),
16097
- style: [styles6.pfButton, criteriaResults[idx] === true && styles6.pfButtonPass]
16201
+ style: [styles7.pfButton, criteriaResults[idx] === true && styles7.pfButtonPass]
16098
16202
  },
16099
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.pfButtonText, criteriaResults[idx] === true && styles6.pfButtonTextActive] }, "\u2713 Pass")
16203
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.pfButtonText, criteriaResults[idx] === true && styles7.pfButtonTextActive] }, "\u2713 Pass")
16100
16204
  ), /* @__PURE__ */ import_react5.default.createElement(
16101
16205
  import_react_native5.TouchableOpacity,
16102
16206
  {
16103
16207
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: false })),
16104
- style: [styles6.pfButton, criteriaResults[idx] === false && styles6.pfButtonFail]
16208
+ style: [styles7.pfButton, criteriaResults[idx] === false && styles7.pfButtonFail]
16105
16209
  },
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(
16210
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.pfButtonText, criteriaResults[idx] === false && styles7.pfButtonTextActive] }, "\u2717 Fail")
16211
+ )) : /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.ratingRow }, [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ import_react5.default.createElement(
16108
16212
  import_react_native5.TouchableOpacity,
16109
16213
  {
16110
16214
  key: n,
16111
16215
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: n })),
16112
- style: [styles6.ratingBtn, criteriaResults[idx] === n && styles6.ratingBtnActive]
16216
+ style: [styles7.ratingBtn, criteriaResults[idx] === n && styles7.ratingBtnActive]
16113
16217
  },
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(
16218
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.ratingBtnText, criteriaResults[idx] === n && styles7.ratingBtnTextActive] }, n)
16219
+ ))))), template === "freeform" && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.freeformBox }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.freeformText }, "Review the area and note:"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.freeformBullet }, "\u2022 What works well"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.freeformBullet }, "\u2022 Issues or concerns"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.freeformBullet }, "\u2022 Suggestions"))), testCase.expectedResult && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.expectedBox }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.expectedLabel }, "\u2705 Expected Result"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.expectedText }, testCase.expectedResult)), testCase.targetRoute && onNavigate && /* @__PURE__ */ import_react5.default.createElement(
16116
16220
  import_react_native5.TouchableOpacity,
16117
16221
  {
16118
- style: styles6.navigateButton,
16222
+ style: styles7.navigateButton,
16119
16223
  onPress: () => {
16120
16224
  import_react_native5.Keyboard.dismiss();
16121
16225
  onNavigate(testCase.targetRoute);
16122
16226
  nav.closeWidget?.();
16123
16227
  }
16124
16228
  },
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(
16229
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.navigateText }, "\u{1F9ED} Go to test location")
16230
+ ), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles7.detailsToggle }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.detailsSection }, testCase.key && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.detailMeta }, testCase.key, " \xB7 ", testCase.priority, " \xB7 ", info.name), testCase.track && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.detailMeta }, testCase.track.icon, " ", testCase.track.name), testCase.description && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.detailDesc }, testCase.description), testCase.group && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.folderProgress }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.folderName }, "\u{1F4C1} ", testCase.group.name))), displayedAssignment.status === "in_progress" && nav.startMiniRunner && /* @__PURE__ */ import_react5.default.createElement(
16127
16231
  import_react_native5.TouchableOpacity,
16128
16232
  {
16129
- style: styles6.startTestBtn,
16233
+ style: styles7.startTestBtn,
16130
16234
  onPress: () => nav.startMiniRunner(displayedAssignment.id)
16131
16235
  },
16132
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.startTestText }, "\u25B6 Start Test")
16236
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.startTestText }, "\u25B6 Start Test")
16133
16237
  ), 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,
16238
+ styles7.completedBanner,
16239
+ displayedAssignment.status === "passed" && styles7.completedBannerPass,
16240
+ displayedAssignment.status === "failed" && styles7.completedBannerFail
16241
+ ] }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.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: [
16242
+ styles7.completedLabel,
16139
16243
  displayedAssignment.status === "passed" && { color: colors.green },
16140
16244
  displayedAssignment.status === "failed" && { color: colors.redLight }
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(
16245
+ ] }, "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: [styles7.actionButtons, { marginTop: 4 }] }, /* @__PURE__ */ import_react5.default.createElement(
16142
16246
  import_react_native5.TouchableOpacity,
16143
16247
  {
16144
- style: [styles6.actionBtn, styles6.reopenBtn, isSubmitting && { opacity: 0.5 }],
16248
+ style: [styles7.actionBtn, styles7.reopenBtn, isSubmitting && { opacity: 0.5 }],
16145
16249
  onPress: handleReopen,
16146
16250
  disabled: isSubmitting
16147
16251
  },
16148
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.reopenBtnText }, isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test")
16252
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.reopenBtnText }, isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test")
16149
16253
  ), displayedAssignment.status === "passed" && /* @__PURE__ */ import_react5.default.createElement(
16150
16254
  import_react_native5.TouchableOpacity,
16151
16255
  {
16152
- style: [styles6.actionBtn, styles6.failBtn, isSubmitting && { opacity: 0.5 }],
16256
+ style: [styles7.actionBtn, styles7.failBtn, isSubmitting && { opacity: 0.5 }],
16153
16257
  onPress: () => handleChangeResult("failed"),
16154
16258
  disabled: isSubmitting
16155
16259
  },
16156
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.failBtnText }, "Change to Fail")
16260
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.failBtnText }, "Change to Fail")
16157
16261
  ), displayedAssignment.status === "failed" && /* @__PURE__ */ import_react5.default.createElement(
16158
16262
  import_react_native5.TouchableOpacity,
16159
16263
  {
16160
- style: [styles6.actionBtn, styles6.passBtn, isSubmitting && { opacity: 0.5 }],
16264
+ style: [styles7.actionBtn, styles7.passBtn, isSubmitting && { opacity: 0.5 }],
16161
16265
  onPress: () => handleChangeResult("passed"),
16162
16266
  disabled: isSubmitting
16163
16267
  },
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(
16268
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passBtnText }, "Change to Pass")
16269
+ ))) : /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.actionButtons }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles7.actionBtn, styles7.failBtn, isSubmitting && { opacity: 0.5 }], onPress: handleFail, disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.failBtnText }, isSubmitting ? displayedAssignment.isVerification ? "Reporting..." : "Failing..." : displayedAssignment.isVerification ? "\u2717 Still Broken" : "Fail")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles7.actionBtn, styles7.skipBtn, isSubmitting && { opacity: 0.5 }], onPress: () => setShowSkipModal(true), disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.skipBtnText }, "Skip")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: [styles7.actionBtn, styles7.passBtn, isSubmitting && { opacity: 0.5 }], onPress: handlePass, disabled: isSubmitting }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passBtnText }, isSubmitting ? displayedAssignment.isVerification ? "Verifying..." : "Passing..." : displayedAssignment.isVerification ? "\u2713 Fix Verified" : "Pass"))), feedbackToastAssignmentId && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Animated.View, { style: [styles7.passToast, { transform: [{ translateY: toastSlideAnim }] }] }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.passToastContent }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passToastIcon }, "\u2705"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passToastText }, "Test passed!")), /* @__PURE__ */ import_react5.default.createElement(
16166
16270
  import_react_native5.TouchableOpacity,
16167
16271
  {
16168
- style: styles6.passToastButton,
16272
+ style: styles7.passToastButton,
16169
16273
  onPress: () => {
16170
16274
  if (toastTimerRef.current) clearTimeout(toastTimerRef.current);
16171
16275
  const toastId = feedbackToastAssignmentId;
@@ -16173,8 +16277,8 @@ function TestDetailScreen({ testId, nav }) {
16173
16277
  nav.push({ name: "TEST_FEEDBACK", status: "passed", assignmentId: toastId });
16174
16278
  }
16175
16279
  },
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:"), [
16280
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passToastButtonText }, "Rate this test")
16281
+ )), /* @__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: styles7.modalOverlay }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.modalContent }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.modalTitle }, "Skip this test?"), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.modalSubtitle }, "Select a reason:"), [
16178
16282
  { reason: "blocked", label: "\u{1F6AB} Blocked by a bug" },
16179
16283
  { reason: "not_ready", label: "\u{1F6A7} Feature not ready" },
16180
16284
  { reason: "dependency", label: "\u{1F517} Needs another test first" },
@@ -16183,32 +16287,32 @@ function TestDetailScreen({ testId, nav }) {
16183
16287
  import_react_native5.TouchableOpacity,
16184
16288
  {
16185
16289
  key: reason,
16186
- style: [styles6.skipOption, selectedSkipReason === reason && styles6.skipOptionActive],
16290
+ style: [styles7.skipOption, selectedSkipReason === reason && styles7.skipOptionActive],
16187
16291
  onPress: () => setSelectedSkipReason(reason)
16188
16292
  },
16189
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.skipOptionText, selectedSkipReason === reason && styles6.skipOptionTextActive] }, label)
16293
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.skipOptionText, selectedSkipReason === reason && styles7.skipOptionTextActive] }, label)
16190
16294
  )), /* @__PURE__ */ import_react5.default.createElement(
16191
16295
  import_react_native5.TextInput,
16192
16296
  {
16193
- style: styles6.skipNotes,
16297
+ style: styles7.skipNotes,
16194
16298
  value: skipNotes,
16195
16299
  onChangeText: setSkipNotes,
16196
16300
  placeholder: "Additional notes (optional)",
16197
16301
  placeholderTextColor: colors.textMuted,
16198
16302
  multiline: true
16199
16303
  }
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: () => {
16304
+ ), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles7.skipActions }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: styles7.skipCancel, onPress: () => {
16201
16305
  setShowSkipModal(false);
16202
16306
  setSelectedSkipReason(null);
16203
16307
  setSkipNotes("");
16204
- } }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipCancelText }, "Cancel")), /* @__PURE__ */ import_react5.default.createElement(
16308
+ } }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.skipCancelText }, "Cancel")), /* @__PURE__ */ import_react5.default.createElement(
16205
16309
  import_react_native5.TouchableOpacity,
16206
16310
  {
16207
- style: [styles6.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16311
+ style: [styles7.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16208
16312
  onPress: handleSkip,
16209
16313
  disabled: !selectedSkipReason || skipping
16210
16314
  },
16211
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipConfirmText }, skipping ? "Skipping..." : "Skip Test")
16315
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.skipConfirmText }, skipping ? "Skipping..." : "Skip Test")
16212
16316
  ))))));
16213
16317
  }
16214
16318
  function createStyles2() {
@@ -16330,7 +16434,7 @@ var import_react6 = __toESM(require("react"));
16330
16434
  var import_react_native6 = require("react-native");
16331
16435
  function TestListScreen({ nav }) {
16332
16436
  const { assignments, currentAssignment, refreshAssignments, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
16333
- const styles6 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16437
+ const styles7 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16334
16438
  const [filter, setFilter] = (0, import_react6.useState)("all");
16335
16439
  const [roleFilter, setRoleFilter] = (0, import_react6.useState)(null);
16336
16440
  const [trackFilter, setTrackFilter] = (0, import_react6.useState)(null);
@@ -16422,18 +16526,18 @@ function TestListScreen({ nav }) {
16422
16526
  return true;
16423
16527
  }, [platformFilter, roleFilter, trackFilter, searchQuery, filter]);
16424
16528
  if (isLoading) return /* @__PURE__ */ import_react6.default.createElement(TestListScreenSkeleton, null);
16425
- return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, null, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.filterBar }, [
16529
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, null, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.filterBar }, [
16426
16530
  { key: "all", label: "All", count: assignments.length },
16427
16531
  { key: "todo", label: "To Do", count: assignments.filter((a) => !a.isVerification && (a.status === "pending" || a.status === "in_progress" || a.status === "failed")).length },
16428
16532
  { key: "retest", label: "Retest", count: assignments.filter((a) => !!a.isVerification && (a.status === "pending" || a.status === "in_progress")).length },
16429
16533
  { key: "done", label: "Done", count: assignments.filter((a) => a.status === "passed" || a.status === "skipped" || a.status === "blocked").length }
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(
16534
+ ].map((f) => /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { key: f.key, style: [styles7.filterBtn, filter === f.key && styles7.filterBtnActive], onPress: () => setFilter(f.key) }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.filterBtnText, filter === f.key && styles7.filterBtnTextActive] }, f.label, " (", f.count, ")")))), availableRoles.length >= 2 && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.roleSection }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles7.roleBar }, /* @__PURE__ */ import_react6.default.createElement(
16431
16535
  import_react_native6.TouchableOpacity,
16432
16536
  {
16433
- style: [styles6.roleBtn, !roleFilter && styles6.roleBtnActive],
16537
+ style: [styles7.roleBtn, !roleFilter && styles7.roleBtnActive],
16434
16538
  onPress: () => setRoleFilter(null)
16435
16539
  },
16436
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.roleBtnText, !roleFilter && styles6.roleBtnTextActive] }, "All Roles")
16540
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.roleBtnText, !roleFilter && styles7.roleBtnTextActive] }, "All Roles")
16437
16541
  ), availableRoles.map((role) => {
16438
16542
  const isActive = roleFilter === role.id;
16439
16543
  return /* @__PURE__ */ import_react6.default.createElement(
@@ -16441,30 +16545,30 @@ function TestListScreen({ nav }) {
16441
16545
  {
16442
16546
  key: role.id,
16443
16547
  style: [
16444
- styles6.roleBtn,
16548
+ styles7.roleBtn,
16445
16549
  isActive && { backgroundColor: role.color + "20", borderColor: role.color + "60", borderWidth: 1 }
16446
16550
  ],
16447
16551
  onPress: () => setRoleFilter(isActive ? null : role.id)
16448
16552
  },
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)
16553
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles7.roleDot, { backgroundColor: role.color }] }),
16554
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.roleBtnText, isActive && { color: role.color, fontWeight: "600" }] }, role.name)
16451
16555
  );
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(
16556
+ })), selectedRole?.loginHint && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles7.loginHint, { backgroundColor: selectedRole.color + "10", borderColor: selectedRole.color + "30" }] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.loginHintText }, "Log in as: ", selectedRole.loginHint))), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.searchContainer }, /* @__PURE__ */ import_react6.default.createElement(
16453
16557
  import_react_native6.TextInput,
16454
16558
  {
16455
16559
  value: searchQuery,
16456
16560
  onChangeText: setSearchQuery,
16457
16561
  placeholder: "Search tests...",
16458
16562
  placeholderTextColor: colors.textMuted,
16459
- style: styles6.searchInput
16563
+ style: styles7.searchInput
16460
16564
  }
16461
- )), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles6.platformBar }, /* @__PURE__ */ import_react6.default.createElement(
16565
+ )), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles7.platformBar }, /* @__PURE__ */ import_react6.default.createElement(
16462
16566
  import_react_native6.TouchableOpacity,
16463
16567
  {
16464
- style: [styles6.platformBtn, !platformFilter && styles6.platformBtnActive],
16568
+ style: [styles7.platformBtn, !platformFilter && styles7.platformBtnActive],
16465
16569
  onPress: () => setPlatformFilter(null)
16466
16570
  },
16467
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.platformBtnText, !platformFilter && styles6.platformBtnTextActive] }, "All")
16571
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.platformBtnText, !platformFilter && styles7.platformBtnTextActive] }, "All")
16468
16572
  ), [
16469
16573
  { key: "web", label: "Web", icon: "\u{1F310}" },
16470
16574
  { key: "ios", label: "iOS", icon: "\u{1F4F1}" },
@@ -16476,32 +16580,32 @@ function TestListScreen({ nav }) {
16476
16580
  {
16477
16581
  key: p.key,
16478
16582
  style: [
16479
- styles6.platformBtn,
16583
+ styles7.platformBtn,
16480
16584
  isActive && { backgroundColor: colors.blue + "20", borderColor: colors.blue + "60", borderWidth: 1 }
16481
16585
  ],
16482
16586
  onPress: () => setPlatformFilter(isActive ? null : p.key)
16483
16587
  },
16484
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.platformBtnText, isActive && { color: colors.blue, fontWeight: "600" }] }, p.icon, " ", p.label)
16588
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.platformBtnText, isActive && { color: colors.blue, fontWeight: "600" }] }, p.icon, " ", p.label)
16485
16589
  );
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(
16590
+ })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.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(
16487
16591
  import_react_native6.TouchableOpacity,
16488
16592
  {
16489
- style: [styles6.trackBtn, !trackFilter && styles6.trackBtnActive],
16593
+ style: [styles7.trackBtn, !trackFilter && styles7.trackBtnActive],
16490
16594
  onPress: () => setTrackFilter(null)
16491
16595
  },
16492
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.trackBtnText, !trackFilter && styles6.trackBtnTextActive] }, "All Tracks")
16596
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.trackBtnText, !trackFilter && styles7.trackBtnTextActive] }, "All Tracks")
16493
16597
  ), availableTracks.map((track) => {
16494
16598
  const isActive = trackFilter === track.id;
16495
16599
  return /* @__PURE__ */ import_react6.default.createElement(
16496
16600
  import_react_native6.TouchableOpacity,
16497
16601
  {
16498
16602
  key: track.id,
16499
- style: [styles6.trackBtn, isActive && { backgroundColor: track.color + "20", borderColor: track.color + "60", borderWidth: 1 }],
16603
+ style: [styles7.trackBtn, isActive && { backgroundColor: track.color + "20", borderColor: track.color + "60", borderWidth: 1 }],
16500
16604
  onPress: () => setTrackFilter(isActive ? null : track.id)
16501
16605
  },
16502
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.trackBtnText, isActive && { color: track.color, fontWeight: "600" }] }, track.icon, " ", track.name)
16606
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.trackBtnText, isActive && { color: track.color, fontWeight: "600" }] }, track.icon, " ", track.name)
16503
16607
  );
16504
- })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.sortGroup }, [
16608
+ })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.sortGroup }, [
16505
16609
  { key: "priority", label: "\u2195 Priority" },
16506
16610
  { key: "recent", label: "\u{1F550} Recent" },
16507
16611
  { key: "alpha", label: "A-Z" }
@@ -16509,41 +16613,41 @@ function TestListScreen({ nav }) {
16509
16613
  import_react_native6.TouchableOpacity,
16510
16614
  {
16511
16615
  key: s2.key,
16512
- style: [styles6.sortBtn, sortMode === s2.key && styles6.sortBtnActive],
16616
+ style: [styles7.sortBtn, sortMode === s2.key && styles7.sortBtnActive],
16513
16617
  onPress: () => setSortMode(s2.key)
16514
16618
  },
16515
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.sortBtnText, sortMode === s2.key && styles6.sortBtnTextActive] }, s2.label)
16619
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.sortBtnText, sortMode === s2.key && styles7.sortBtnTextActive] }, s2.label)
16516
16620
  )))), groupedAssignments.map((folder) => {
16517
16621
  const folderId = folder.group?.id || "ungrouped";
16518
16622
  const isCollapsed = collapsedFolders.has(folderId);
16519
16623
  const filtered = folder.assignments.filter(filterAssignment);
16520
16624
  if (filtered.length === 0 && filter !== "all") return null;
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) => {
16625
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { key: folderId, style: styles7.folder }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { style: styles7.folderHeader, onPress: () => toggleFolder(folderId) }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.folderToggle }, isCollapsed ? "\u25B6" : "\u25BC"), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.folderName, numberOfLines: 1 }, folder.group?.name || "Ungrouped"), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.folderProgress }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles7.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: styles7.folderCount }, folder.stats.passed + folder.stats.failed, "/", folder.stats.total)), !isCollapsed && filtered.map((assignment) => {
16522
16626
  const badge = getStatusBadge(assignment.status);
16523
16627
  const isCurrent = currentAssignment?.id === assignment.id;
16524
16628
  return /* @__PURE__ */ import_react6.default.createElement(
16525
16629
  import_react_native6.TouchableOpacity,
16526
16630
  {
16527
16631
  key: assignment.id,
16528
- style: [styles6.testItem, isCurrent && styles6.testItemCurrent],
16632
+ style: [styles7.testItem, isCurrent && styles7.testItemCurrent],
16529
16633
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
16530
16634
  },
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,
16635
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.testBadge }, badge.icon),
16636
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.testInfo }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.testMetaRow }, assignment.isVerification && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16637
+ styles7.retestTag,
16534
16638
  assignment.status === "passed" && { backgroundColor: colors.greenDark, borderColor: colors.greenBorder }
16535
16639
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16536
- styles6.retestTagText,
16640
+ styles7.retestTagText,
16537
16641
  assignment.status === "passed" && { color: colors.greenLight }
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)))),
16642
+ ] }, assignment.status === "passed" ? "Verified" : "Retest")), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.testMeta }, assignment.testCase.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.roleBadgeRow }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.testMeta }, " \xB7 "), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles7.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name)))),
16539
16643
  /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16540
- styles6.statusPill,
16644
+ styles7.statusPill,
16541
16645
  {
16542
16646
  backgroundColor: assignment.status === "passed" ? colors.greenDark : assignment.status === "failed" ? colors.redSurface : assignment.status === "in_progress" ? colors.blueSurface : colors.card,
16543
16647
  borderColor: assignment.status === "passed" ? colors.greenBorder : assignment.status === "failed" ? colors.redDark : assignment.status === "in_progress" ? colors.blueDark : colors.border
16544
16648
  }
16545
16649
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16546
- styles6.statusPillText,
16650
+ styles7.statusPillText,
16547
16651
  {
16548
16652
  color: assignment.status === "passed" ? colors.greenMed : assignment.status === "failed" ? colors.redMed : assignment.status === "in_progress" ? colors.blueLight : colors.zincLight
16549
16653
  }
@@ -16553,12 +16657,12 @@ function TestListScreen({ nav }) {
16553
16657
  }), dashboardUrl && /* @__PURE__ */ import_react6.default.createElement(
16554
16658
  import_react_native6.TouchableOpacity,
16555
16659
  {
16556
- style: styles6.dashboardLink,
16660
+ style: styles7.dashboardLink,
16557
16661
  onPress: () => import_react_native6.Linking.openURL(`${dashboardUrl}/test-cases`),
16558
16662
  activeOpacity: 0.7
16559
16663
  },
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")));
16664
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.dashboardLinkText }, "\u{1F310}", " Manage on Dashboard ", "\u2192")
16665
+ ), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.TouchableOpacity, { style: styles7.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.refreshText }, "\u21BB", " Refresh")));
16562
16666
  }
16563
16667
  function createStyles3() {
16564
16668
  return import_react_native6.StyleSheet.create({
@@ -16878,7 +16982,7 @@ var styles2 = import_react_native8.StyleSheet.create({
16878
16982
  // src/widget/screens/TestFeedbackScreen.tsx
16879
16983
  function TestFeedbackScreen({ status, assignmentId, nav }) {
16880
16984
  const { client, assignments, refreshAssignments, uploadImage, widgetColorScheme } = useBugBear();
16881
- const styles6 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16985
+ const styles7 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16882
16986
  const images = useImageAttachments(uploadImage, 3, "screenshots");
16883
16987
  const [rating, setRating] = (0, import_react10.useState)(5);
16884
16988
  const [note, setNote] = (0, import_react10.useState)("");
@@ -16938,7 +17042,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16938
17042
  }
16939
17043
  }
16940
17044
  };
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?"), [
17045
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles7.container }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.header }, status === "passed" ? "\u2705 Test Passed!" : "\u274C Test Failed"), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.subheader }, "Rate this test case"), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles7.starRow }, [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { key: n, onPress: () => setRating(n), style: styles7.starButton }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles7.star, n <= rating && styles7.starActive] }, n <= rating ? "\u2605" : "\u2606")))), showFlags && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles7.flagsSection }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.flagsLabel }, "What could be improved?"), [
16942
17046
  { key: "isOutdated", label: "Test is outdated" },
16943
17047
  { key: "needsMoreDetail", label: "Needs more detail" },
16944
17048
  { key: "stepsUnclear", label: "Steps are unclear" },
@@ -16947,15 +17051,15 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16947
17051
  import_react_native9.TouchableOpacity,
16948
17052
  {
16949
17053
  key,
16950
- style: [styles6.flagItem, flags[key] && styles6.flagItemActive],
17054
+ style: [styles7.flagItem, flags[key] && styles7.flagItemActive],
16951
17055
  onPress: () => setFlags((prev) => ({ ...prev, [key]: !prev[key] }))
16952
17056
  },
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)
17057
+ /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: [styles7.flagCheck, flags[key] && styles7.flagCheckActive] }, flags[key] && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.flagCheckmark }, "\u2713")),
17058
+ /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles7.flagText, flags[key] && styles7.flagTextActive] }, label)
16955
17059
  ))), /* @__PURE__ */ import_react10.default.createElement(
16956
17060
  import_react_native9.TextInput,
16957
17061
  {
16958
- style: styles6.noteInput,
17062
+ style: styles7.noteInput,
16959
17063
  value: note,
16960
17064
  onChangeText: setNote,
16961
17065
  placeholder: "Add a note (optional)",
@@ -16972,7 +17076,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16972
17076
  onRemove: images.removeImage,
16973
17077
  label: "Screenshots (optional)"
16974
17078
  }
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"))));
17079
+ ), /* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles7.actions }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.TouchableOpacity, { style: styles7.skipButton, onPress: handleSkip }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.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"))));
16976
17080
  }
16977
17081
  function createStyles4() {
16978
17082
  return import_react_native9.StyleSheet.create({
@@ -17161,7 +17265,7 @@ var styles3 = import_react_native10.StyleSheet.create({
17161
17265
  // src/widget/screens/ReportScreen.tsx
17162
17266
  function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17163
17267
  const { client, getDeviceInfo, uploadImage, refreshAssignments, widgetColorScheme } = useBugBear();
17164
- const styles6 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17268
+ const styles7 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17165
17269
  const [reportType, setReportType] = (0, import_react12.useState)(prefill?.type || "bug");
17166
17270
  const [severity, setSeverity] = (0, import_react12.useState)("medium");
17167
17271
  const [category, setCategory] = (0, import_react12.useState)(null);
@@ -17267,7 +17371,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17267
17371
  submittingRef.current = false;
17268
17372
  }
17269
17373
  };
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 }, [
17374
+ 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: styles7.retestBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.retestTitle }, "Bug Still Present"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.retestSubtitle }, "The fix did not resolve this issue"))), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.severityRow }, [
17271
17375
  { sev: "critical", color: colors.red },
17272
17376
  { sev: "high", color: colors.orange },
17273
17377
  { sev: "medium", color: colors.yellow },
@@ -17276,14 +17380,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17276
17380
  import_react_native11.TouchableOpacity,
17277
17381
  {
17278
17382
  key: sev,
17279
- style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17383
+ style: [styles7.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17280
17384
  onPress: () => setSeverity(sev)
17281
17385
  },
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(
17386
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles7.sevText, severity === sev && { color }] }, sev)
17387
+ )))), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.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: styles7.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What went wrong?"), /* @__PURE__ */ import_react12.default.createElement(
17284
17388
  import_react_native11.TextInput,
17285
17389
  {
17286
- style: styles6.descInput,
17390
+ style: styles7.descInput,
17287
17391
  value: description,
17288
17392
  onChangeText: setDescription,
17289
17393
  placeholder: "Describe what you observed. What still doesn't work?",
@@ -17336,15 +17440,15 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17336
17440
  onRemove: images.removeImage,
17337
17441
  label: "Attachments (optional)"
17338
17442
  }
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(
17443
+ ), error && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.errorBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.errorText }, error)), /* @__PURE__ */ import_react12.default.createElement(
17340
17444
  import_react_native11.TouchableOpacity,
17341
17445
  {
17342
- style: [shared.primaryButton, styles6.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
17446
+ style: [shared.primaryButton, styles7.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
17343
17447
  onPress: handleSubmit,
17344
17448
  disabled: !description.trim() || submitting || images.isUploading
17345
17449
  },
17346
17450
  /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest")
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 }, [
17451
+ )) : /* @__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: styles7.typeRow }, [
17348
17452
  { type: "bug", label: "Bug", icon: "\u{1F41B}" },
17349
17453
  { type: "feedback", label: "Feedback", icon: "\u{1F4A1}" },
17350
17454
  { type: "suggestion", label: "Idea", icon: "\u2728" }
@@ -17352,12 +17456,12 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17352
17456
  import_react_native11.TouchableOpacity,
17353
17457
  {
17354
17458
  key: type,
17355
- style: [styles6.typeCard, reportType === type && styles6.typeCardActive],
17459
+ style: [styles7.typeCard, reportType === type && styles7.typeCardActive],
17356
17460
  onPress: () => setReportType(type)
17357
17461
  },
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 }, [
17462
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.typeIcon }, icon),
17463
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles7.typeLabel, reportType === type && styles7.typeLabelActive] }, label)
17464
+ ))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.severityRow }, [
17361
17465
  { sev: "critical", color: colors.red },
17362
17466
  { sev: "high", color: colors.orange },
17363
17467
  { sev: "medium", color: colors.yellow },
@@ -17366,14 +17470,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17366
17470
  import_react_native11.TouchableOpacity,
17367
17471
  {
17368
17472
  key: sev,
17369
- style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17473
+ style: [styles7.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17370
17474
  onPress: () => setSeverity(sev)
17371
17475
  },
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(
17476
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles7.sevText, severity === sev && { color }] }, sev)
17477
+ )))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.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: styles7.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "What happened?"), /* @__PURE__ */ import_react12.default.createElement(
17374
17478
  import_react_native11.TextInput,
17375
17479
  {
17376
- style: styles6.descInput,
17480
+ style: styles7.descInput,
17377
17481
  value: description,
17378
17482
  onChangeText: setDescription,
17379
17483
  placeholder: "Describe the issue...",
@@ -17416,16 +17520,16 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17416
17520
  issue.title
17417
17521
  ),
17418
17522
  /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: { fontSize: 11, color: colors.textMuted } }, issue.status)
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(
17523
+ )))), isBugType && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.section }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: shared.label }, "Which screen?"), /* @__PURE__ */ import_react12.default.createElement(
17420
17524
  import_react_native11.TextInput,
17421
17525
  {
17422
- style: styles6.screenInput,
17526
+ style: styles7.screenInput,
17423
17527
  value: affectedScreen,
17424
17528
  onChangeText: setAffectedScreen,
17425
17529
  placeholder: "e.g. Reservations, Settings...",
17426
17530
  placeholderTextColor: colors.textMuted
17427
17531
  }
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(
17532
+ ), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.screenHint }, "Which screen or area was the bug on? (optional)")), /* @__PURE__ */ import_react12.default.createElement(
17429
17533
  ImagePickerButtons,
17430
17534
  {
17431
17535
  images: images.images,
@@ -17435,7 +17539,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17435
17539
  onRemove: images.removeImage,
17436
17540
  label: "Screenshots (optional)"
17437
17541
  }
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(
17542
+ ), error && /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles7.errorBanner }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.errorText }, error)), /* @__PURE__ */ import_react12.default.createElement(
17439
17543
  import_react_native11.TouchableOpacity,
17440
17544
  {
17441
17545
  style: [shared.primaryButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
@@ -17475,12 +17579,12 @@ var import_react13 = __toESM(require("react"));
17475
17579
  var import_react_native12 = require("react-native");
17476
17580
  function ReportSuccessScreen({ nav }) {
17477
17581
  const { widgetColorScheme } = useBugBear();
17478
- const styles6 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17582
+ const styles7 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17479
17583
  (0, import_react13.useEffect)(() => {
17480
17584
  const timer = setTimeout(() => nav.reset(), 2e3);
17481
17585
  return () => clearTimeout(timer);
17482
17586
  }, [nav]);
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"));
17587
+ return /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles7.container }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles7.emoji }, "\u{1F389}"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles7.title }, "Report submitted!"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles7.subtitle }, "Thank you for your feedback"));
17484
17588
  }
17485
17589
  function createStyles6() {
17486
17590
  return import_react_native12.StyleSheet.create({
@@ -17496,7 +17600,7 @@ var import_react14 = __toESM(require("react"));
17496
17600
  var import_react_native13 = require("react-native");
17497
17601
  function MessageListScreen({ nav }) {
17498
17602
  const { threads, unreadCount, refreshThreads, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
17499
- const styles6 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17603
+ const styles7 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17500
17604
  const [activeFilter, setActiveFilter] = (0, import_react14.useState)("all");
17501
17605
  const filteredThreads = threads.filter((thread) => {
17502
17606
  if (activeFilter === "all") return true;
@@ -17514,10 +17618,10 @@ function MessageListScreen({ nav }) {
17514
17618
  return /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, null, /* @__PURE__ */ import_react14.default.createElement(
17515
17619
  import_react_native13.TouchableOpacity,
17516
17620
  {
17517
- style: styles6.newMsgButton,
17621
+ style: styles7.newMsgButton,
17518
17622
  onPress: () => nav.push({ name: "COMPOSE_MESSAGE" })
17519
17623
  },
17520
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.newMsgText }, "\u2709\uFE0F New Message")
17624
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.newMsgText }, "\u2709\uFE0F New Message")
17521
17625
  ), /* @__PURE__ */ import_react14.default.createElement(
17522
17626
  import_react_native13.ScrollView,
17523
17627
  {
@@ -17562,20 +17666,20 @@ function MessageListScreen({ nav }) {
17562
17666
  import_react_native13.TouchableOpacity,
17563
17667
  {
17564
17668
  key: thread.id,
17565
- style: [styles6.threadItem, thread.unreadCount > 0 && styles6.threadItemUnread],
17669
+ style: [styles7.threadItem, thread.unreadCount > 0 && styles7.threadItemUnread],
17566
17670
  onPress: () => nav.push({ name: "THREAD_DETAIL", thread })
17567
17671
  },
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) }] }))
17672
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles7.threadLeft }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.threadIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles7.threadInfo }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles7.threadTitleRow }, thread.isPinned && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.pinIcon }, "\u{1F4CC}"), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.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: styles7.threadPreview, numberOfLines: 1 }, thread.lastMessage.senderName, ": ", thread.lastMessage.content))),
17673
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles7.threadRight }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.threadTime }, formatRelativeTime(thread.lastMessageAt)), thread.unreadCount > 0 && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles7.unreadBadge }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.unreadText }, thread.unreadCount)), thread.priority !== "normal" && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: [styles7.priorityDot, { backgroundColor: getPriorityColor(thread.priority) }] }))
17570
17674
  ))), dashboardUrl && /* @__PURE__ */ import_react14.default.createElement(
17571
17675
  import_react_native13.TouchableOpacity,
17572
17676
  {
17573
- style: styles6.dashboardLink,
17677
+ style: styles7.dashboardLink,
17574
17678
  onPress: () => import_react_native13.Linking.openURL(`${dashboardUrl}/discussions`),
17575
17679
  activeOpacity: 0.7
17576
17680
  },
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"))));
17681
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
17682
+ ), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles7.footer }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.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: styles7.refreshText }, "\u21BB Refresh"))));
17579
17683
  }
17580
17684
  function createStyles7() {
17581
17685
  return import_react_native13.StyleSheet.create({
@@ -17608,7 +17712,7 @@ var import_react15 = __toESM(require("react"));
17608
17712
  var import_react_native14 = require("react-native");
17609
17713
  function ThreadDetailScreen({ thread, nav }) {
17610
17714
  const { getThreadMessages, sendMessage, markAsRead, uploadImage, widgetColorScheme } = useBugBear();
17611
- const styles6 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17715
+ const styles7 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17612
17716
  const [messages, setMessages] = (0, import_react15.useState)([]);
17613
17717
  const [loading, setLoading] = (0, import_react15.useState)(true);
17614
17718
  const [replyText, setReplyText] = (0, import_react15.useState)("");
@@ -17660,20 +17764,20 @@ function ThreadDetailScreen({ thread, nav }) {
17660
17764
  }
17661
17765
  setSending(false);
17662
17766
  };
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(
17767
+ return /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.container }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.header }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.headerIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.headerSubject, numberOfLines: 2 }, thread.subject || "No subject")), loading ? /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.loadingContainer }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.loadingText }, "Loading messages...")) : /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.messagesContainer }, messages.map((msg) => /* @__PURE__ */ import_react15.default.createElement(
17664
17768
  import_react_native14.View,
17665
17769
  {
17666
17770
  key: msg.id,
17667
- style: [styles6.bubble, msg.senderType === "tester" ? styles6.bubbleTester : styles6.bubbleAdmin]
17771
+ style: [styles7.bubble, msg.senderType === "tester" ? styles7.bubbleTester : styles7.bubbleAdmin]
17668
17772
  },
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(
17773
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles7.sender, msg.senderType === "tester" && styles7.senderTester] }, msg.senderType === "tester" ? "You" : msg.senderName),
17774
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles7.content, msg.senderType === "tester" && styles7.contentTester] }, msg.content),
17775
+ msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.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: styles7.attachmentImage, resizeMode: "cover" }))),
17776
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles7.time, msg.senderType === "tester" && styles7.timeTester] }, formatMessageTime(msg.createdAt))
17777
+ ))), sendError && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.errorBar }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.errorText }, "Failed to send. Tap Send to retry.")), replyImages.images.length > 0 && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.replyPreview }, /* @__PURE__ */ import_react15.default.createElement(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage })), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles7.composer }, IMAGE_PICKER_AVAILABLE && /* @__PURE__ */ import_react15.default.createElement(import_react_native14.TouchableOpacity, { style: styles7.attachBtn, onPress: replyImages.pickFromGallery, disabled: replyImages.images.length >= 3 }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.attachBtnText }, "\u{1F4CE}")), /* @__PURE__ */ import_react15.default.createElement(
17674
17778
  import_react_native14.TextInput,
17675
17779
  {
17676
- style: styles6.replyInput,
17780
+ style: styles7.replyInput,
17677
17781
  value: replyText,
17678
17782
  onChangeText: setReplyText,
17679
17783
  placeholder: "Type a reply...",
@@ -17684,11 +17788,11 @@ function ThreadDetailScreen({ thread, nav }) {
17684
17788
  ), /* @__PURE__ */ import_react15.default.createElement(
17685
17789
  import_react_native14.TouchableOpacity,
17686
17790
  {
17687
- style: [styles6.sendBtn, (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) && styles6.sendBtnDisabled],
17791
+ style: [styles7.sendBtn, (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) && styles7.sendBtnDisabled],
17688
17792
  onPress: handleSend,
17689
17793
  disabled: !replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading
17690
17794
  },
17691
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.sendBtnText }, sending ? "..." : "Send")
17795
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.sendBtnText }, sending ? "..." : "Send")
17692
17796
  )));
17693
17797
  }
17694
17798
  function createStyles8() {
@@ -17729,7 +17833,7 @@ var import_react16 = __toESM(require("react"));
17729
17833
  var import_react_native15 = require("react-native");
17730
17834
  function ComposeMessageScreen({ nav }) {
17731
17835
  const { createThread, uploadImage, widgetColorScheme } = useBugBear();
17732
- const styles6 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17836
+ const styles7 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17733
17837
  const [subject, setSubject] = (0, import_react16.useState)("");
17734
17838
  const [message, setMessage] = (0, import_react16.useState)("");
17735
17839
  const [sending, setSending] = (0, import_react16.useState)(false);
@@ -17748,10 +17852,10 @@ function ComposeMessageScreen({ nav }) {
17748
17852
  nav.pop();
17749
17853
  }
17750
17854
  };
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(
17855
+ return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles7.header }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles7.title }, "New Message"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles7.subtitle }, "Send a message to the QA team")), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles7.form }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Subject"), /* @__PURE__ */ import_react16.default.createElement(
17752
17856
  import_react_native15.TextInput,
17753
17857
  {
17754
- style: styles6.subjectInput,
17858
+ style: styles7.subjectInput,
17755
17859
  value: subject,
17756
17860
  onChangeText: setSubject,
17757
17861
  placeholder: "What's this about?",
@@ -17761,7 +17865,7 @@ function ComposeMessageScreen({ nav }) {
17761
17865
  ), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: [shared.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ import_react16.default.createElement(
17762
17866
  import_react_native15.TextInput,
17763
17867
  {
17764
- style: styles6.messageInput,
17868
+ style: styles7.messageInput,
17765
17869
  value: message,
17766
17870
  onChangeText: setMessage,
17767
17871
  placeholder: "Write your message...",
@@ -17806,7 +17910,7 @@ var import_react17 = __toESM(require("react"));
17806
17910
  var import_react_native16 = require("react-native");
17807
17911
  function ProfileScreen({ nav }) {
17808
17912
  const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo, widgetColorScheme } = useBugBear();
17809
- const styles6 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17913
+ const styles7 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17810
17914
  const [editing, setEditing] = (0, import_react17.useState)(false);
17811
17915
  const [name, setName] = (0, import_react17.useState)(testerInfo?.name || "");
17812
17916
  const [additionalEmails, setAdditionalEmails] = (0, import_react17.useState)(testerInfo?.additionalEmails || []);
@@ -17857,13 +17961,13 @@ function ProfileScreen({ nav }) {
17857
17961
  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"));
17858
17962
  }
17859
17963
  if (editing) {
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: () => {
17964
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.editHeader }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.editTitle }, "Edit Profile"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => {
17861
17965
  setEditing(false);
17862
17966
  setNewEmailInput("");
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(
17967
+ } }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.cancelText }, "Cancel"))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.field }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: shared.label }, "Name"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TextInput, { style: styles7.input, value: name, onChangeText: setName, placeholder: "Your name", placeholderTextColor: colors.textMuted })), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.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: styles7.emailFixed }, testerInfo.email)), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.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: styles7.emailRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.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: styles7.removeEmail }, "\u2715")))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.addEmailRow }, /* @__PURE__ */ import_react17.default.createElement(
17864
17968
  import_react_native16.TextInput,
17865
17969
  {
17866
- style: [styles6.input, { flex: 1, marginRight: 8 }],
17970
+ style: [styles7.input, { flex: 1, marginRight: 8 }],
17867
17971
  value: newEmailInput,
17868
17972
  onChangeText: setNewEmailInput,
17869
17973
  placeholder: "Add email",
@@ -17871,17 +17975,17 @@ function ProfileScreen({ nav }) {
17871
17975
  keyboardType: "email-address",
17872
17976
  autoCapitalize: "none"
17873
17977
  }
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(
17978
+ ), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { style: styles7.addButton, onPress: handleAddEmail }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.addButtonText }, "Add")))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.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: styles7.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(
17875
17979
  import_react_native16.TouchableOpacity,
17876
17980
  {
17877
17981
  key,
17878
- style: [styles6.platformBtn, platforms.includes(key) && styles6.platformBtnActive],
17982
+ style: [styles7.platformBtn, platforms.includes(key) && styles7.platformBtnActive],
17879
17983
  onPress: () => setPlatforms((prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key])
17880
17984
  },
17881
- /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles6.platformText, platforms.includes(key) && styles6.platformTextActive] }, label)
17985
+ /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles7.platformText, platforms.includes(key) && styles7.platformTextActive] }, label)
17882
17986
  )))), /* @__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")));
17883
17987
  }
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(
17988
+ return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.profileCard }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.avatar }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.avatarText }, testerInfo.name.charAt(0).toUpperCase())), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.profileName }, testerInfo.name), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.profileEmail }, testerInfo.email)), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.statsRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.statItem }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.statNumber }, completedCount), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.statLabel }, "Completed")), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.statDivider }), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.statItem }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.statNumber }, assignments.length), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.statLabel }, "Total Assigned"))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles7.detailsToggle }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.detailsSection }, additionalEmails.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.detailBlock }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.detailLabel }, "Additional Emails"), additionalEmails.map((e) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { key: e, style: styles7.detailValue }, e))), platforms.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.detailBlock }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.detailLabel }, "Platforms"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles7.platformTags }, platforms.map((p) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { key: p, style: styles7.platformTag }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles7.platformTagText }, p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web")))))), /* @__PURE__ */ import_react17.default.createElement(
17885
17989
  import_react_native16.TouchableOpacity,
17886
17990
  {
17887
17991
  style: [shared.primaryButton, { marginTop: 20 }],
@@ -17939,7 +18043,7 @@ var CATEGORIES = ["open", "done", "reopened"];
17939
18043
  var SEVERITY_ORDER2 = { critical: 0, high: 1, medium: 2, low: 3 };
17940
18044
  function IssueListScreen({ nav, category }) {
17941
18045
  const { client, widgetColorScheme } = useBugBear();
17942
- const styles6 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
18046
+ const styles7 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
17943
18047
  const CATEGORY_CONFIG = (0, import_react18.useMemo)(() => ({
17944
18048
  open: { label: "Open", accent: colors.orange, emptyIcon: "\u2705", emptyText: "No open issues" },
17945
18049
  done: { label: "Done", accent: colors.green, emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
@@ -18009,7 +18113,7 @@ function IssueListScreen({ nav, category }) {
18009
18113
  const searchFilteredIssues = debouncedQuery ? sortedIssues.filter(
18010
18114
  (issue) => (issue.title || "").toLowerCase().includes(debouncedQuery.toLowerCase()) || (issue.description || "").toLowerCase().includes(debouncedQuery.toLowerCase())
18011
18115
  ) : sortedIssues;
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) => {
18116
+ return /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, null, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.tabBar }, CATEGORIES.map((cat) => {
18013
18117
  const catConfig = CATEGORY_CONFIG[cat];
18014
18118
  const isActive = activeCategory === cat;
18015
18119
  const count = counts?.[cat];
@@ -18018,7 +18122,7 @@ function IssueListScreen({ nav, category }) {
18018
18122
  {
18019
18123
  key: cat,
18020
18124
  style: [
18021
- styles6.tab,
18125
+ styles7.tab,
18022
18126
  { borderBottomColor: isActive ? catConfig.accent : "transparent" }
18023
18127
  ],
18024
18128
  onPress: () => {
@@ -18028,20 +18132,20 @@ function IssueListScreen({ nav, category }) {
18028
18132
  activeOpacity: 0.7
18029
18133
  },
18030
18134
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
18031
- styles6.tabLabel,
18135
+ styles7.tabLabel,
18032
18136
  isActive && { fontWeight: "600", color: colors.textPrimary }
18033
18137
  ] }, catConfig.label),
18034
18138
  count !== void 0 && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [
18035
- styles6.countBadge,
18139
+ styles7.countBadge,
18036
18140
  {
18037
18141
  backgroundColor: isActive ? catConfig.accent + "18" : colors.card
18038
18142
  }
18039
18143
  ] }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
18040
- styles6.countText,
18144
+ styles7.countText,
18041
18145
  { color: isActive ? catConfig.accent : colors.textDim }
18042
18146
  ] }, count))
18043
18147
  );
18044
- })), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.sortRow }, [
18148
+ })), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.sortRow }, [
18045
18149
  { key: "severity", label: "Severity" },
18046
18150
  { key: "recent", label: "Recent" }
18047
18151
  ].map((s2) => /* @__PURE__ */ import_react18.default.createElement(
@@ -18049,14 +18153,14 @@ function IssueListScreen({ nav, category }) {
18049
18153
  {
18050
18154
  key: s2.key,
18051
18155
  style: [
18052
- styles6.sortBtn,
18053
- sortMode === s2.key && styles6.sortBtnActive
18156
+ styles7.sortBtn,
18157
+ sortMode === s2.key && styles7.sortBtnActive
18054
18158
  ],
18055
18159
  onPress: () => setSortMode(s2.key)
18056
18160
  },
18057
18161
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
18058
- styles6.sortBtnText,
18059
- sortMode === s2.key && styles6.sortBtnTextActive
18162
+ styles7.sortBtnText,
18163
+ sortMode === s2.key && styles7.sortBtnTextActive
18060
18164
  ] }, s2.label)
18061
18165
  ))), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: { paddingHorizontal: 16, paddingBottom: 12 } }, /* @__PURE__ */ import_react18.default.createElement(
18062
18166
  import_react_native17.TextInput,
@@ -18076,18 +18180,18 @@ function IssueListScreen({ nav, category }) {
18076
18180
  fontSize: 13
18077
18181
  }
18078
18182
  }
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(
18183
+ )), loading ? /* @__PURE__ */ import_react18.default.createElement(IssueListScreenSkeleton, null) : searchFilteredIssues.length === 0 ? /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.emptyContainer }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.emptyIcon }, debouncedQuery ? "\u{1F50D}" : config.emptyIcon), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.emptyText }, debouncedQuery ? "No matching issues" : config.emptyText)) : searchFilteredIssues.map((issue) => /* @__PURE__ */ import_react18.default.createElement(
18080
18184
  import_react_native17.TouchableOpacity,
18081
18185
  {
18082
18186
  key: issue.id,
18083
- style: styles6.issueCard,
18187
+ style: styles7.issueCard,
18084
18188
  onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
18085
18189
  activeOpacity: 0.7
18086
18190
  },
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))
18191
+ /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.topRow }, issue.severity && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [styles7.severityDot, { backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim }] }), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.issueTitle, numberOfLines: 1 }, issue.title)),
18192
+ /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.bottomRow }, issue.route && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.routeText, numberOfLines: 1 }, issue.route), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.timeText }, formatRelativeTime(issue.updatedAt))),
18193
+ activeCategory === "done" && issue.verifiedByName && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.verifiedBadge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.verifiedBadgeText }, "\u2714", " Verified by ", issue.verifiedByName)),
18194
+ activeCategory === "reopened" && issue.originalBugTitle && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.reopenedBadge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles7.reopenedBadgeText, numberOfLines: 1 }, "\u{1F504}", " Retest of: ", issue.originalBugTitle))
18091
18195
  )));
18092
18196
  }
18093
18197
  function createStyles11() {
@@ -18246,7 +18350,7 @@ var import_react_native18 = require("react-native");
18246
18350
  var DONE_STATUSES = ["verified", "resolved", "closed", "reviewed"];
18247
18351
  function IssueDetailScreen({ nav, issue }) {
18248
18352
  const { dashboardUrl, widgetColorScheme, reopenReport } = useBugBear();
18249
- const styles6 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18353
+ const styles7 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18250
18354
  const [showReopenForm, setShowReopenForm] = (0, import_react19.useState)(false);
18251
18355
  const [reopenReason, setReopenReason] = (0, import_react19.useState)("");
18252
18356
  const [isSubmitting, setIsSubmitting] = (0, import_react19.useState)(false);
@@ -18288,44 +18392,44 @@ function IssueDetailScreen({ nav, issue }) {
18288
18392
  setReopenError(result.error || "Failed to reopen");
18289
18393
  }
18290
18394
  }, [reopenReason, reopenReport, issue.id]);
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(
18395
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, null, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.badgeRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: [styles7.badge, { backgroundColor: wasReopened ? colors.yellowDark : statusConfig.bg }] }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [styles7.badgeText, { color: wasReopened ? colors.yellowLight : statusConfig.color }] }, wasReopened ? "Reopened" : statusConfig.label)), severityConfig && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: [styles7.badge, { backgroundColor: severityConfig.bg }] }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [styles7.badgeText, { color: severityConfig.color }] }, severityConfig.label))), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.title }, issue.title), issue.route && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.route }, issue.route), issue.description && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.descriptionCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.descriptionText }, issue.description)), wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.reopenedCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.reopenedRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenedIcon }, "\u{1F504}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenedText }, "Issue reopened \u2014 your team has been notified"))), issue.verifiedByName && !wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.verifiedCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.verifiedHeader }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.verifiedIcon }, "\u2705"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.verifiedTitle }, "Retesting Proof")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.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: styles7.originalBugCard }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.originalBugHeader }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.originalBugIcon }, "\u{1F504}"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.originalBugTitleText }, "Original Bug")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.originalBugBody }, "Retest of: ", issue.originalBugTitle)), isDone && !wasReopened && !showReopenForm && /* @__PURE__ */ import_react19.default.createElement(
18292
18396
  import_react_native18.TouchableOpacity,
18293
18397
  {
18294
- style: styles6.reopenButton,
18398
+ style: styles7.reopenButton,
18295
18399
  onPress: () => setShowReopenForm(true),
18296
18400
  activeOpacity: 0.7
18297
18401
  },
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(
18402
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenButtonText }, "\u{1F504}", " Not Fixed \u2014 Reopen Issue")
18403
+ ), showReopenForm && !wasReopened && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.reopenForm }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenFormTitle }, "Why isn't this fixed?"), /* @__PURE__ */ import_react19.default.createElement(
18300
18404
  import_react_native18.TextInput,
18301
18405
  {
18302
18406
  value: reopenReason,
18303
18407
  onChangeText: setReopenReason,
18304
18408
  placeholder: "Describe what you're still seeing...",
18305
18409
  placeholderTextColor: colors.textMuted,
18306
- style: styles6.reopenInput,
18410
+ style: styles7.reopenInput,
18307
18411
  multiline: true,
18308
18412
  autoFocus: true
18309
18413
  }
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(
18414
+ ), reopenError && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenErrorText }, reopenError), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.reopenActions }, /* @__PURE__ */ import_react19.default.createElement(
18311
18415
  import_react_native18.TouchableOpacity,
18312
18416
  {
18313
18417
  style: [
18314
- styles6.reopenSubmitButton,
18315
- (!reopenReason.trim() || isSubmitting) && styles6.reopenSubmitDisabled
18418
+ styles7.reopenSubmitButton,
18419
+ (!reopenReason.trim() || isSubmitting) && styles7.reopenSubmitDisabled
18316
18420
  ],
18317
18421
  onPress: handleReopen,
18318
18422
  disabled: isSubmitting || !reopenReason.trim(),
18319
18423
  activeOpacity: 0.7
18320
18424
  },
18321
18425
  isSubmitting ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.ActivityIndicator, { size: "small", color: "#fff" }) : /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: [
18322
- styles6.reopenSubmitText,
18323
- !reopenReason.trim() && styles6.reopenSubmitTextDisabled
18426
+ styles7.reopenSubmitText,
18427
+ !reopenReason.trim() && styles7.reopenSubmitTextDisabled
18324
18428
  ] }, "Reopen Issue")
18325
18429
  ), /* @__PURE__ */ import_react19.default.createElement(
18326
18430
  import_react_native18.TouchableOpacity,
18327
18431
  {
18328
- style: styles6.reopenCancelButton,
18432
+ style: styles7.reopenCancelButton,
18329
18433
  onPress: () => {
18330
18434
  setShowReopenForm(false);
18331
18435
  setReopenReason("");
@@ -18334,7 +18438,7 @@ function IssueDetailScreen({ nav, issue }) {
18334
18438
  disabled: isSubmitting,
18335
18439
  activeOpacity: 0.7
18336
18440
  },
18337
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenCancelText }, "Cancel")
18441
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenCancelText }, "Cancel")
18338
18442
  ))), issue.status === "ready_to_test" && (issue.fixCommitSha || issue.resolutionNotes) && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: {
18339
18443
  backgroundColor: "rgba(59, 130, 246, 0.1)",
18340
18444
  borderWidth: 1,
@@ -18342,14 +18446,14 @@ function IssueDetailScreen({ nav, issue }) {
18342
18446
  borderRadius: 8,
18343
18447
  padding: 12,
18344
18448
  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(
18449
+ } }, /* @__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: styles7.screenshotSection }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.screenshotLabel }, "Screenshots (", issue.screenshotUrls.length, ")"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.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: styles7.screenshotThumb }))))), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles7.metaSection }, issue.reporterName && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.metaText }, "Reported by ", issue.reporterName), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.metaTextSmall }, "Created ", formatRelativeTime(issue.createdAt), " ", "\xB7", " Updated ", formatRelativeTime(issue.updatedAt))), dashboardUrl && /* @__PURE__ */ import_react19.default.createElement(
18346
18450
  import_react_native18.TouchableOpacity,
18347
18451
  {
18348
- style: styles6.dashboardLink,
18452
+ style: styles7.dashboardLink,
18349
18453
  onPress: () => import_react_native18.Linking.openURL(`${dashboardUrl}/reports`),
18350
18454
  activeOpacity: 0.7
18351
18455
  },
18352
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
18456
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
18353
18457
  ));
18354
18458
  }
18355
18459
  function createStyles12() {
@@ -18606,7 +18710,7 @@ var import_react20 = __toESM(require("react"));
18606
18710
  var import_react_native19 = require("react-native");
18607
18711
  function SessionStartScreen({ nav }) {
18608
18712
  const { startSession, assignments, widgetColorScheme } = useBugBear();
18609
- const styles6 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18713
+ const styles7 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18610
18714
  const [focusArea, setFocusArea] = (0, import_react20.useState)("");
18611
18715
  const [isStarting, setIsStarting] = (0, import_react20.useState)(false);
18612
18716
  const [error, setError] = (0, import_react20.useState)(null);
@@ -18633,35 +18737,35 @@ function SessionStartScreen({ nav }) {
18633
18737
  setIsStarting(false);
18634
18738
  }
18635
18739
  };
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(
18740
+ return /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles7.header }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.headerIcon }, "\u{1F50D}"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.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: styles7.inputSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.label }, "What are you testing?"), /* @__PURE__ */ import_react20.default.createElement(
18637
18741
  import_react_native19.TextInput,
18638
18742
  {
18639
18743
  value: focusArea,
18640
18744
  onChangeText: setFocusArea,
18641
18745
  placeholder: "e.g. Checkout flow, Settings page...",
18642
18746
  placeholderTextColor: colors.textMuted,
18643
- style: styles6.input,
18747
+ style: styles7.input,
18644
18748
  returnKeyType: "done",
18645
18749
  onSubmitEditing: handleStart
18646
18750
  }
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(
18751
+ )), trackNames.length > 0 && /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles7.chipsSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.chipsLabel }, "Quick pick:"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles7.chipsRow }, trackNames.map((name) => /* @__PURE__ */ import_react20.default.createElement(
18648
18752
  import_react_native19.TouchableOpacity,
18649
18753
  {
18650
18754
  key: name,
18651
- style: [styles6.chip, focusArea === name && styles6.chipActive],
18755
+ style: [styles7.chip, focusArea === name && styles7.chipActive],
18652
18756
  onPress: () => setFocusArea(name),
18653
18757
  activeOpacity: 0.7
18654
18758
  },
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(
18759
+ /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: [styles7.chipText, focusArea === name && styles7.chipTextActive] }, name)
18760
+ )))), error && /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles7.errorBox }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.errorText }, error)), /* @__PURE__ */ import_react20.default.createElement(
18657
18761
  import_react_native19.TouchableOpacity,
18658
18762
  {
18659
- style: [styles6.startBtn, isStarting && styles6.startBtnDisabled],
18763
+ style: [styles7.startBtn, isStarting && styles7.startBtnDisabled],
18660
18764
  onPress: handleStart,
18661
18765
  disabled: isStarting,
18662
18766
  activeOpacity: 0.8
18663
18767
  },
18664
- /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.startBtnText }, isStarting ? "Starting..." : "\u25B6 Start Session")
18768
+ /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.startBtnText }, isStarting ? "Starting..." : "\u25B6 Start Session")
18665
18769
  ));
18666
18770
  }
18667
18771
  function createStyles13() {
@@ -18770,7 +18874,7 @@ var import_react21 = __toESM(require("react"));
18770
18874
  var import_react_native20 = require("react-native");
18771
18875
  function SessionActiveScreen({ nav }) {
18772
18876
  const { activeSession, sessionFindings, endSession, refreshSession, widgetColorScheme } = useBugBear();
18773
- const styles6 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18877
+ const styles7 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18774
18878
  const FINDING_TYPE_CONFIG = (0, import_react21.useMemo)(() => ({
18775
18879
  bug: { icon: "\u{1F41B}", label: "Bug", color: colors.red },
18776
18880
  concern: { icon: "\u26A0\uFE0F", label: "Concern", color: colors.amber },
@@ -18812,30 +18916,38 @@ function SessionActiveScreen({ nav }) {
18812
18916
  }
18813
18917
  };
18814
18918
  if (!activeSession) {
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")));
18919
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.emptyContainer }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.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: styles7.emptyLink }, "Start a new session")));
18816
18920
  }
18817
18921
  const renderFinding = (finding) => {
18818
18922
  const config = FINDING_TYPE_CONFIG[finding.type] || FINDING_TYPE_CONFIG.bug;
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"))));
18923
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { key: finding.id, style: styles7.findingRow }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.findingIcon }, config.icon), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.findingContent }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.findingTitle, numberOfLines: 1 }, finding.title), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.findingMeta }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: [styles7.findingType, { color: config.color }] }, config.label), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.findingSeverity }, finding.severity), finding.convertedToBugId && /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.findingConverted }, "\u2192 Bug filed"))));
18820
18924
  };
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(
18925
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, null, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.timerCard }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.recordingRow }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.recordingDot }), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.recordingLabel }, "Recording")), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.timerText }, formatTimer(elapsed)), activeSession.focusArea ? /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.focusArea }, activeSession.focusArea) : null), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.actionRow }, /* @__PURE__ */ import_react21.default.createElement(
18822
18926
  import_react_native20.TouchableOpacity,
18823
18927
  {
18824
- style: styles6.addFindingBtn,
18928
+ style: styles7.addFindingBtn,
18825
18929
  onPress: () => nav.push({ name: "SESSION_FINDING" }),
18826
18930
  activeOpacity: 0.8
18827
18931
  },
18828
- /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.addFindingText }, "+ Add Finding")
18932
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.addFindingText }, "+ Add Finding")
18933
+ ), nav.minimizeToAdHoc && /* @__PURE__ */ import_react21.default.createElement(
18934
+ import_react_native20.TouchableOpacity,
18935
+ {
18936
+ style: styles7.minimizeBtn,
18937
+ onPress: nav.minimizeToAdHoc,
18938
+ activeOpacity: 0.8
18939
+ },
18940
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.minimizeBtnText }, "\u2199")
18829
18941
  ), /* @__PURE__ */ import_react21.default.createElement(
18830
18942
  import_react_native20.TouchableOpacity,
18831
18943
  {
18832
- style: [styles6.endBtn, isEnding && styles6.endBtnDisabled],
18944
+ style: [styles7.endBtn, isEnding && styles7.endBtnDisabled],
18833
18945
  onPress: handleEnd,
18834
18946
  disabled: isEnding,
18835
18947
  activeOpacity: 0.8
18836
18948
  },
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)));
18949
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.endBtnText }, isEnding ? "..." : "End")
18950
+ )), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.sectionTitle }, "Findings (", sessionFindings.length, ")"), sessionFindings.length === 0 ? /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.emptyFindings }, /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.emptyFindingsIcon }, "\u{1F4CB}"), /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.emptyFindingsText }, 'No findings yet. Tap "Add Finding" to log something.')) : /* @__PURE__ */ import_react21.default.createElement(import_react_native20.View, { style: styles7.findingsList }, sessionFindings.map(renderFinding)));
18839
18951
  }
18840
18952
  function createStyles14() {
18841
18953
  return import_react_native20.StyleSheet.create({
@@ -18912,6 +19024,21 @@ function createStyles14() {
18912
19024
  fontWeight: "600",
18913
19025
  color: colors.blueLight
18914
19026
  },
19027
+ minimizeBtn: {
19028
+ paddingVertical: 12,
19029
+ paddingHorizontal: 16,
19030
+ backgroundColor: colors.card,
19031
+ borderWidth: 1,
19032
+ borderColor: colors.border,
19033
+ borderRadius: 10,
19034
+ alignItems: "center",
19035
+ justifyContent: "center"
19036
+ },
19037
+ minimizeBtnText: {
19038
+ fontSize: 14,
19039
+ fontWeight: "600",
19040
+ color: colors.textSecondary
19041
+ },
18915
19042
  endBtn: {
18916
19043
  paddingVertical: 12,
18917
19044
  paddingHorizontal: 16,
@@ -19013,7 +19140,7 @@ var FINDING_TYPES = [
19013
19140
  ];
19014
19141
  function SessionFindingScreen({ nav }) {
19015
19142
  const { addFinding, widgetColorScheme } = useBugBear();
19016
- const styles6 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
19143
+ const styles7 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
19017
19144
  const SEVERITIES = (0, import_react22.useMemo)(() => [
19018
19145
  { value: "critical", label: "Critical", color: colors.red },
19019
19146
  { value: "high", label: "High", color: colors.orange },
@@ -19045,46 +19172,46 @@ function SessionFindingScreen({ nav }) {
19045
19172
  }
19046
19173
  };
19047
19174
  const canSubmit = title.trim().length > 0 && !isSubmitting;
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(
19175
+ return /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, null, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.section }, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles7.sectionLabel }, "Type"), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.typeRow }, FINDING_TYPES.map((ft) => /* @__PURE__ */ import_react22.default.createElement(
19049
19176
  import_react_native21.TouchableOpacity,
19050
19177
  {
19051
19178
  key: ft.value,
19052
- style: [styles6.typePill, type === ft.value && styles6.typePillActive],
19179
+ style: [styles7.typePill, type === ft.value && styles7.typePillActive],
19053
19180
  onPress: () => setType(ft.value),
19054
19181
  activeOpacity: 0.7
19055
19182
  },
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(
19183
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles7.typePillIcon }, ft.icon),
19184
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles7.typePillLabel, type === ft.value && styles7.typePillLabelActive] }, ft.label)
19185
+ )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.section }, /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles7.sectionLabel }, "Severity"), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.severityRow }, SEVERITIES.map((s2) => /* @__PURE__ */ import_react22.default.createElement(
19059
19186
  import_react_native21.TouchableOpacity,
19060
19187
  {
19061
19188
  key: s2.value,
19062
19189
  style: [
19063
- styles6.severityPill,
19190
+ styles7.severityPill,
19064
19191
  severity === s2.value && { backgroundColor: `${s2.color}20`, borderColor: s2.color }
19065
19192
  ],
19066
19193
  onPress: () => setSeverity(s2.value),
19067
19194
  activeOpacity: 0.7
19068
19195
  },
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(
19196
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles7.severityText, severity === s2.value && { color: s2.color }] }, s2.label)
19197
+ )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19071
19198
  import_react_native21.TextInput,
19072
19199
  {
19073
19200
  value: title,
19074
19201
  onChangeText: setTitle,
19075
19202
  placeholder: "What did you find?",
19076
19203
  placeholderTextColor: colors.textMuted,
19077
- style: styles6.titleInput,
19204
+ style: styles7.titleInput,
19078
19205
  returnKeyType: "next"
19079
19206
  }
19080
- )), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19207
+ )), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19081
19208
  import_react_native21.TextInput,
19082
19209
  {
19083
19210
  value: description,
19084
19211
  onChangeText: setDescription,
19085
19212
  placeholder: "Details (optional)",
19086
19213
  placeholderTextColor: colors.textMuted,
19087
- style: styles6.descInput,
19214
+ style: styles7.descInput,
19088
19215
  multiline: true,
19089
19216
  numberOfLines: 3,
19090
19217
  textAlignVertical: "top"
@@ -19092,12 +19219,12 @@ function SessionFindingScreen({ nav }) {
19092
19219
  )), /* @__PURE__ */ import_react22.default.createElement(
19093
19220
  import_react_native21.TouchableOpacity,
19094
19221
  {
19095
- style: [styles6.submitBtn, !canSubmit && styles6.submitBtnDisabled],
19222
+ style: [styles7.submitBtn, !canSubmit && styles7.submitBtnDisabled],
19096
19223
  onPress: handleSubmit,
19097
19224
  disabled: !canSubmit,
19098
19225
  activeOpacity: 0.8
19099
19226
  },
19100
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles6.submitBtnText, !canSubmit && styles6.submitBtnTextDisabled] }, isSubmitting ? "Saving..." : "Save Finding")
19227
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles7.submitBtnText, !canSubmit && styles7.submitBtnTextDisabled] }, isSubmitting ? "Saving..." : "Save Finding")
19101
19228
  ));
19102
19229
  }
19103
19230
  function createStyles15() {
@@ -19482,10 +19609,365 @@ var styles4 = import_react_native22.StyleSheet.create({
19482
19609
  }
19483
19610
  });
19484
19611
 
19485
- // src/BugBearButton.tsx
19612
+ // src/widget/AdHocOverlay.tsx
19613
+ var import_react24 = __toESM(require("react"));
19614
+ var import_react_native23 = require("react-native");
19486
19615
  var screenWidth2 = import_react_native23.Dimensions.get("window").width;
19487
19616
  var screenHeight2 = import_react_native23.Dimensions.get("window").height;
19617
+ var OVERLAY_WIDTH = 280;
19618
+ var OVERLAY_MARGIN = 16;
19619
+ var MIN_Y2 = 80;
19488
19620
  var BOTTOM_SAFE_PADDING2 = import_react_native23.Platform.OS === "ios" ? 34 : 24;
19621
+ var SAFE_MAX_Y2 = screenHeight2 - 200 - BOTTOM_SAFE_PADDING2;
19622
+ function AdHocOverlay({ sessionId, focusArea, startedAt, onExpand, onComplete }) {
19623
+ const { client, addFinding, endSession, activeSession } = useBugBear();
19624
+ const [inputMode, setInputMode] = (0, import_react24.useState)("closed");
19625
+ const [inputText, setInputText] = (0, import_react24.useState)("");
19626
+ const [isSubmitting, setIsSubmitting] = (0, import_react24.useState)(false);
19627
+ const [flashMessage, setFlashMessage] = (0, import_react24.useState)(null);
19628
+ const [elapsedTime, setElapsedTime] = (0, import_react24.useState)(0);
19629
+ const inputRef = (0, import_react24.useRef)(null);
19630
+ const screenshotRef = (0, import_react24.useRef)(null);
19631
+ const mountAnim = (0, import_react24.useRef)(new import_react_native23.Animated.Value(0)).current;
19632
+ (0, import_react24.useEffect)(() => {
19633
+ import_react_native23.Animated.spring(mountAnim, { toValue: 1, useNativeDriver: true, tension: 80, friction: 10 }).start();
19634
+ }, []);
19635
+ const pan = (0, import_react24.useRef)(new import_react_native23.Animated.ValueXY({
19636
+ x: screenWidth2 - OVERLAY_WIDTH - OVERLAY_MARGIN,
19637
+ y: SAFE_MAX_Y2
19638
+ })).current;
19639
+ const panResponder = (0, import_react24.useRef)(
19640
+ import_react_native23.PanResponder.create({
19641
+ onStartShouldSetPanResponder: () => true,
19642
+ onMoveShouldSetPanResponder: (_, gs) => Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5,
19643
+ onPanResponderGrant: () => {
19644
+ pan.setOffset({
19645
+ x: Math.max(OVERLAY_MARGIN, Math.min(getAnimatedValue(pan.x), screenWidth2 - OVERLAY_WIDTH - OVERLAY_MARGIN)),
19646
+ y: Math.max(MIN_Y2, Math.min(getAnimatedValue(pan.y), SAFE_MAX_Y2))
19647
+ });
19648
+ pan.setValue({ x: 0, y: 0 });
19649
+ },
19650
+ onPanResponderMove: import_react_native23.Animated.event(
19651
+ [null, { dx: pan.x, dy: pan.y }],
19652
+ { useNativeDriver: false }
19653
+ ),
19654
+ onPanResponderRelease: () => {
19655
+ pan.flattenOffset();
19656
+ const currentX = getAnimatedValue(pan.x);
19657
+ const currentY = getAnimatedValue(pan.y);
19658
+ const snapX = currentX < screenWidth2 / 2 ? OVERLAY_MARGIN : screenWidth2 - OVERLAY_WIDTH - OVERLAY_MARGIN;
19659
+ const snapY = Math.max(MIN_Y2, Math.min(currentY, SAFE_MAX_Y2));
19660
+ import_react_native23.Animated.spring(pan, {
19661
+ toValue: { x: snapX, y: snapY },
19662
+ useNativeDriver: false,
19663
+ friction: 7,
19664
+ tension: 40
19665
+ }).start();
19666
+ }
19667
+ })
19668
+ ).current;
19669
+ (0, import_react24.useEffect)(() => {
19670
+ const startTime = new Date(startedAt).getTime();
19671
+ setElapsedTime(Math.floor((Date.now() - startTime) / 1e3));
19672
+ const interval = setInterval(() => {
19673
+ setElapsedTime(Math.floor((Date.now() - startTime) / 1e3));
19674
+ }, 1e3);
19675
+ return () => clearInterval(interval);
19676
+ }, [startedAt]);
19677
+ (0, import_react24.useEffect)(() => {
19678
+ if (inputMode !== "closed") {
19679
+ setTimeout(() => inputRef.current?.focus(), 50);
19680
+ }
19681
+ }, [inputMode]);
19682
+ const handleOpenInput = (0, import_react24.useCallback)(async (mode) => {
19683
+ import_react_native23.Keyboard.dismiss();
19684
+ const uri = await captureAppScreen();
19685
+ screenshotRef.current = uri;
19686
+ setInputMode(mode);
19687
+ setInputText("");
19688
+ }, []);
19689
+ const handleCancel = (0, import_react24.useCallback)(() => {
19690
+ import_react_native23.Keyboard.dismiss();
19691
+ setInputMode("closed");
19692
+ setInputText("");
19693
+ screenshotRef.current = null;
19694
+ }, []);
19695
+ const handleSend = (0, import_react24.useCallback)(async () => {
19696
+ if (!inputText.trim() || isSubmitting) return;
19697
+ import_react_native23.Keyboard.dismiss();
19698
+ setIsSubmitting(true);
19699
+ try {
19700
+ let screenshotUrl;
19701
+ if (screenshotRef.current && client) {
19702
+ screenshotUrl = await client.uploadImageFromUri(screenshotRef.current) || void 0;
19703
+ }
19704
+ const enhanced = contextCapture.getEnhancedContext();
19705
+ await addFinding({
19706
+ type: inputMode === "bug" ? "bug" : "concern",
19707
+ title: inputText.trim(),
19708
+ severity: inputMode === "bug" ? "medium" : "observation",
19709
+ screenshotUrl,
19710
+ consoleLogs: enhanced.consoleLogs,
19711
+ networkSnapshot: enhanced.networkRequests
19712
+ });
19713
+ setFlashMessage("Saved!");
19714
+ setInputMode("closed");
19715
+ setInputText("");
19716
+ screenshotRef.current = null;
19717
+ setTimeout(() => setFlashMessage(null), 1500);
19718
+ } finally {
19719
+ setIsSubmitting(false);
19720
+ }
19721
+ }, [inputText, isSubmitting, inputMode, client, addFinding]);
19722
+ const handleComplete = (0, import_react24.useCallback)(async () => {
19723
+ if (isSubmitting) return;
19724
+ import_react_native23.Keyboard.dismiss();
19725
+ setIsSubmitting(true);
19726
+ try {
19727
+ const result = await endSession();
19728
+ if (result.success) {
19729
+ const mins = activeSession?.durationMinutes ?? Math.round(elapsedTime / 60);
19730
+ const findings = activeSession?.findingsCount ?? 0;
19731
+ setFlashMessage(`Session complete! ${mins} min, ${findings} finding${findings !== 1 ? "s" : ""}`);
19732
+ setTimeout(() => {
19733
+ setFlashMessage(null);
19734
+ onComplete();
19735
+ }, 2e3);
19736
+ }
19737
+ } finally {
19738
+ setIsSubmitting(false);
19739
+ }
19740
+ }, [isSubmitting, endSession, activeSession, elapsedTime, onComplete]);
19741
+ return /* @__PURE__ */ import_react24.default.createElement(
19742
+ import_react_native23.Animated.View,
19743
+ {
19744
+ style: [
19745
+ styles5.container,
19746
+ {
19747
+ opacity: mountAnim,
19748
+ transform: [
19749
+ ...pan.getTranslateTransform(),
19750
+ { scale: mountAnim.interpolate({ inputRange: [0, 1], outputRange: [0.8, 1] }) }
19751
+ ]
19752
+ }
19753
+ ],
19754
+ ...panResponder.panHandlers
19755
+ },
19756
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.header }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.headerLeft }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.headerLabel }, "Ad Hoc"), focusArea ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.focusText, numberOfLines: 1 }, "\xB7 ", focusArea) : null, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.timer }, formatElapsedTime(elapsedTime))), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: onExpand, style: styles5.expandButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.expandText }, "\u2197"))),
19757
+ flashMessage ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.flash }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.flashText }, flashMessage)) : null,
19758
+ inputMode !== "closed" && !flashMessage ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.inputArea }, /* @__PURE__ */ import_react24.default.createElement(
19759
+ import_react_native23.TextInput,
19760
+ {
19761
+ ref: inputRef,
19762
+ value: inputText,
19763
+ onChangeText: setInputText,
19764
+ placeholder: inputMode === "bug" ? "What went wrong?" : "What did you notice?",
19765
+ placeholderTextColor: colors.textDim,
19766
+ multiline: true,
19767
+ numberOfLines: 2,
19768
+ style: styles5.textInput
19769
+ }
19770
+ ), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.inputActions }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: handleCancel }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.cancelText }, "Cancel")), /* @__PURE__ */ import_react24.default.createElement(
19771
+ import_react_native23.TouchableOpacity,
19772
+ {
19773
+ onPress: handleSend,
19774
+ disabled: !inputText.trim() || isSubmitting,
19775
+ style: [
19776
+ styles5.sendBtn,
19777
+ { backgroundColor: inputMode === "bug" ? colors.red : colors.blue },
19778
+ (!inputText.trim() || isSubmitting) && { opacity: 0.5 }
19779
+ ]
19780
+ },
19781
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.sendText }, isSubmitting ? "Sending..." : "Send \u2192")
19782
+ ))) : null,
19783
+ inputMode === "closed" && !flashMessage ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.actions }, /* @__PURE__ */ import_react24.default.createElement(
19784
+ import_react_native23.TouchableOpacity,
19785
+ {
19786
+ style: [styles5.feedbackBtn, isSubmitting && { opacity: 0.5 }],
19787
+ onPress: () => handleOpenInput("feedback"),
19788
+ disabled: isSubmitting
19789
+ },
19790
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.feedbackText }, "Feedback")
19791
+ ), /* @__PURE__ */ import_react24.default.createElement(
19792
+ import_react_native23.TouchableOpacity,
19793
+ {
19794
+ style: [styles5.bugBtn, isSubmitting && { opacity: 0.5 }],
19795
+ onPress: () => handleOpenInput("bug"),
19796
+ disabled: isSubmitting
19797
+ },
19798
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.bugText }, "Bug")
19799
+ ), /* @__PURE__ */ import_react24.default.createElement(
19800
+ import_react_native23.TouchableOpacity,
19801
+ {
19802
+ style: [styles5.completeBtn, isSubmitting && { opacity: 0.5 }],
19803
+ onPress: handleComplete,
19804
+ disabled: isSubmitting
19805
+ },
19806
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.completeText }, "Complete")
19807
+ )) : null
19808
+ );
19809
+ }
19810
+ var styles5 = import_react_native23.StyleSheet.create({
19811
+ container: {
19812
+ position: "absolute",
19813
+ width: OVERLAY_WIDTH,
19814
+ zIndex: 9999,
19815
+ backgroundColor: colors.bg,
19816
+ borderRadius: 12,
19817
+ borderWidth: 1,
19818
+ borderColor: colors.border,
19819
+ shadowColor: "#000",
19820
+ shadowOffset: { width: 0, height: 8 },
19821
+ shadowOpacity: 0.4,
19822
+ shadowRadius: 16,
19823
+ elevation: 20,
19824
+ overflow: "hidden"
19825
+ },
19826
+ header: {
19827
+ backgroundColor: colors.bgDarker,
19828
+ paddingVertical: 6,
19829
+ paddingHorizontal: 12,
19830
+ flexDirection: "row",
19831
+ alignItems: "center",
19832
+ justifyContent: "space-between",
19833
+ borderBottomWidth: 1,
19834
+ borderBottomColor: colors.border
19835
+ },
19836
+ headerLeft: {
19837
+ flexDirection: "row",
19838
+ alignItems: "center",
19839
+ gap: 6,
19840
+ flex: 1
19841
+ },
19842
+ headerLabel: {
19843
+ fontSize: 11,
19844
+ color: colors.textMuted,
19845
+ fontWeight: "600"
19846
+ },
19847
+ focusText: {
19848
+ fontSize: 10,
19849
+ color: colors.textDim,
19850
+ maxWidth: 100
19851
+ },
19852
+ timer: {
19853
+ fontSize: 10,
19854
+ color: colors.green,
19855
+ fontWeight: "600",
19856
+ fontVariant: ["tabular-nums"]
19857
+ },
19858
+ expandButton: {
19859
+ paddingVertical: 2,
19860
+ paddingHorizontal: 4
19861
+ },
19862
+ expandText: {
19863
+ fontSize: 12,
19864
+ color: colors.blue,
19865
+ fontWeight: "500"
19866
+ },
19867
+ flash: {
19868
+ paddingVertical: 6,
19869
+ paddingHorizontal: 12,
19870
+ backgroundColor: colors.greenDark,
19871
+ alignItems: "center"
19872
+ },
19873
+ flashText: {
19874
+ fontSize: 12,
19875
+ fontWeight: "600",
19876
+ color: colors.greenLight
19877
+ },
19878
+ inputArea: {
19879
+ padding: 8,
19880
+ paddingHorizontal: 10
19881
+ },
19882
+ textInput: {
19883
+ backgroundColor: colors.card,
19884
+ borderWidth: 1,
19885
+ borderColor: colors.border,
19886
+ borderRadius: 8,
19887
+ padding: 6,
19888
+ paddingHorizontal: 8,
19889
+ color: colors.textPrimary,
19890
+ fontSize: 12,
19891
+ lineHeight: 16,
19892
+ minHeight: 40,
19893
+ textAlignVertical: "top"
19894
+ },
19895
+ inputActions: {
19896
+ flexDirection: "row",
19897
+ justifyContent: "space-between",
19898
+ marginTop: 6
19899
+ },
19900
+ cancelText: {
19901
+ fontSize: 11,
19902
+ color: colors.textMuted,
19903
+ paddingVertical: 4,
19904
+ paddingHorizontal: 8
19905
+ },
19906
+ sendBtn: {
19907
+ paddingVertical: 4,
19908
+ paddingHorizontal: 14,
19909
+ borderRadius: 6
19910
+ },
19911
+ sendText: {
19912
+ fontSize: 11,
19913
+ fontWeight: "600",
19914
+ color: "#fff"
19915
+ },
19916
+ actions: {
19917
+ flexDirection: "row",
19918
+ gap: 6,
19919
+ padding: 8,
19920
+ paddingHorizontal: 10,
19921
+ paddingBottom: 10
19922
+ },
19923
+ feedbackBtn: {
19924
+ flex: 1,
19925
+ paddingVertical: 8,
19926
+ borderRadius: 8,
19927
+ backgroundColor: colors.blueDark,
19928
+ borderWidth: 1,
19929
+ borderColor: `${colors.blue}40`,
19930
+ alignItems: "center"
19931
+ },
19932
+ feedbackText: {
19933
+ fontSize: 11,
19934
+ fontWeight: "600",
19935
+ color: colors.blueLight
19936
+ },
19937
+ bugBtn: {
19938
+ flex: 1,
19939
+ paddingVertical: 8,
19940
+ borderRadius: 8,
19941
+ backgroundColor: colors.redDark,
19942
+ borderWidth: 1,
19943
+ borderColor: colors.red,
19944
+ alignItems: "center"
19945
+ },
19946
+ bugText: {
19947
+ fontSize: 11,
19948
+ fontWeight: "600",
19949
+ color: colors.redLight
19950
+ },
19951
+ completeBtn: {
19952
+ flex: 1,
19953
+ paddingVertical: 8,
19954
+ borderRadius: 8,
19955
+ backgroundColor: colors.greenDark,
19956
+ borderWidth: 1,
19957
+ borderColor: colors.green,
19958
+ alignItems: "center"
19959
+ },
19960
+ completeText: {
19961
+ fontSize: 11,
19962
+ fontWeight: "600",
19963
+ color: colors.greenLight
19964
+ }
19965
+ });
19966
+
19967
+ // src/BugBearButton.tsx
19968
+ var screenWidth3 = import_react_native24.Dimensions.get("window").width;
19969
+ var screenHeight3 = import_react_native24.Dimensions.get("window").height;
19970
+ var BOTTOM_SAFE_PADDING3 = import_react_native24.Platform.OS === "ios" ? 34 : 24;
19489
19971
  function BugBearButton({
19490
19972
  position = "bottom-right",
19491
19973
  buttonStyle,
@@ -19495,20 +19977,20 @@ function BugBearButton({
19495
19977
  minY = 100,
19496
19978
  maxYOffset = 160
19497
19979
  }) {
19498
- const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments, widgetMode, widgetColorScheme } = useBugBear();
19980
+ const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments, widgetMode, widgetColorScheme, activeSession, startSession } = useBugBear();
19499
19981
  const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
19500
- const [viewMode, setViewMode] = (0, import_react24.useState)("closed");
19501
- const [miniRunnerAssignmentId, setMiniRunnerAssignmentId] = (0, import_react24.useState)(null);
19502
- const panelAnim = (0, import_react24.useRef)(new import_react_native23.Animated.Value(0)).current;
19503
- const styles6 = (0, import_react24.useMemo)(() => createStyles16(), [widgetColorScheme]);
19982
+ const [viewMode, setViewMode] = (0, import_react25.useState)("closed");
19983
+ const [miniRunnerAssignmentId, setMiniRunnerAssignmentId] = (0, import_react25.useState)(null);
19984
+ const panelAnim = (0, import_react25.useRef)(new import_react_native24.Animated.Value(0)).current;
19985
+ const styles7 = (0, import_react25.useMemo)(() => createStyles16(), [widgetColorScheme]);
19504
19986
  const panelVisible = viewMode === "panel";
19505
- const screenCaptureRef = (0, import_react24.useRef)(null);
19987
+ const screenCaptureRef = (0, import_react25.useRef)(null);
19506
19988
  const openPanel = () => {
19507
19989
  captureAppScreen().then((uri) => {
19508
19990
  screenCaptureRef.current = uri;
19509
19991
  });
19510
19992
  setViewMode("panel");
19511
- import_react_native23.Animated.spring(panelAnim, {
19993
+ import_react_native24.Animated.spring(panelAnim, {
19512
19994
  toValue: 1,
19513
19995
  useNativeDriver: true,
19514
19996
  friction: 8,
@@ -19516,8 +19998,8 @@ function BugBearButton({
19516
19998
  }).start();
19517
19999
  };
19518
20000
  const closePanel = () => {
19519
- import_react_native23.Keyboard.dismiss();
19520
- import_react_native23.Animated.timing(panelAnim, {
20001
+ import_react_native24.Keyboard.dismiss();
20002
+ import_react_native24.Animated.timing(panelAnim, {
19521
20003
  toValue: 0,
19522
20004
  duration: 250,
19523
20005
  useNativeDriver: true
@@ -19527,26 +20009,26 @@ function BugBearButton({
19527
20009
  };
19528
20010
  const buttonSize = 56;
19529
20011
  const margin = 16;
19530
- const safeMaxY = screenHeight2 - maxYOffset - BOTTOM_SAFE_PADDING2;
20012
+ const safeMaxY = screenHeight3 - maxYOffset - BOTTOM_SAFE_PADDING3;
19531
20013
  const getInitialPosition = () => {
19532
20014
  if (initialX !== void 0 && initialY !== void 0) {
19533
20015
  return { x: initialX, y: initialY };
19534
20016
  }
19535
- const x = position === "bottom-right" ? screenWidth2 - buttonSize - margin : margin;
19536
- const y = screenHeight2 - maxYOffset - BOTTOM_SAFE_PADDING2;
20017
+ const x = position === "bottom-right" ? screenWidth3 - buttonSize - margin : margin;
20018
+ const y = screenHeight3 - maxYOffset - BOTTOM_SAFE_PADDING3;
19537
20019
  return { x, y };
19538
20020
  };
19539
20021
  const initialPos = getInitialPosition();
19540
- const pan = (0, import_react24.useRef)(new import_react_native23.Animated.ValueXY(initialPos)).current;
19541
- const isDragging = (0, import_react24.useRef)(false);
19542
- const panResponder = (0, import_react24.useRef)(
19543
- import_react_native23.PanResponder.create({
20022
+ const pan = (0, import_react25.useRef)(new import_react_native24.Animated.ValueXY(initialPos)).current;
20023
+ const isDragging = (0, import_react25.useRef)(false);
20024
+ const panResponder = (0, import_react25.useRef)(
20025
+ import_react_native24.PanResponder.create({
19544
20026
  onStartShouldSetPanResponder: () => draggable,
19545
20027
  onMoveShouldSetPanResponder: (_, gs) => draggable && (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5),
19546
20028
  onPanResponderGrant: () => {
19547
20029
  isDragging.current = false;
19548
20030
  pan.setOffset({
19549
- x: Math.max(margin, Math.min(getAnimatedValue(pan.x), screenWidth2 - buttonSize - margin)),
20031
+ x: Math.max(margin, Math.min(getAnimatedValue(pan.x), screenWidth3 - buttonSize - margin)),
19550
20032
  y: Math.max(minY, Math.min(getAnimatedValue(pan.y), safeMaxY))
19551
20033
  });
19552
20034
  pan.setValue({ x: 0, y: 0 });
@@ -19555,7 +20037,7 @@ function BugBearButton({
19555
20037
  if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {
19556
20038
  isDragging.current = true;
19557
20039
  }
19558
- import_react_native23.Animated.event(
20040
+ import_react_native24.Animated.event(
19559
20041
  [null, { dx: pan.x, dy: pan.y }],
19560
20042
  { useNativeDriver: false }
19561
20043
  )(_, gs);
@@ -19564,9 +20046,9 @@ function BugBearButton({
19564
20046
  pan.flattenOffset();
19565
20047
  const currentX = getAnimatedValue(pan.x);
19566
20048
  const currentY = getAnimatedValue(pan.y);
19567
- const snapX = currentX < screenWidth2 / 2 ? margin : screenWidth2 - buttonSize - margin;
20049
+ const snapX = currentX < screenWidth3 / 2 ? margin : screenWidth3 - buttonSize - margin;
19568
20050
  const snapY = Math.max(minY, Math.min(currentY, safeMaxY));
19569
- import_react_native23.Animated.spring(pan, {
20051
+ import_react_native24.Animated.spring(pan, {
19570
20052
  toValue: { x: snapX, y: snapY },
19571
20053
  useNativeDriver: false,
19572
20054
  friction: 7,
@@ -19581,11 +20063,11 @@ function BugBearButton({
19581
20063
  ).current;
19582
20064
  const pendingTests = widgetMode === "qa" ? assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length : 0;
19583
20065
  const badgeCount = pendingTests + unreadCount;
19584
- (0, import_react24.useEffect)(() => {
19585
- if (!panelVisible || import_react_native23.Platform.OS !== "android") return;
19586
- const handler = import_react_native23.BackHandler.addEventListener("hardwareBackPress", () => {
20066
+ (0, import_react25.useEffect)(() => {
20067
+ if (!panelVisible || import_react_native24.Platform.OS !== "android") return;
20068
+ const handler = import_react_native24.BackHandler.addEventListener("hardwareBackPress", () => {
19587
20069
  if (canGoBack) {
19588
- import_react_native23.Keyboard.dismiss();
20070
+ import_react_native24.Keyboard.dismiss();
19589
20071
  pop();
19590
20072
  } else {
19591
20073
  closePanel();
@@ -19594,9 +20076,9 @@ function BugBearButton({
19594
20076
  });
19595
20077
  return () => handler.remove();
19596
20078
  }, [panelVisible, canGoBack]);
19597
- const startMiniRunner = (0, import_react24.useCallback)((assignId) => {
19598
- import_react_native23.Keyboard.dismiss();
19599
- import_react_native23.Animated.timing(panelAnim, {
20079
+ const startMiniRunner = (0, import_react25.useCallback)((assignId) => {
20080
+ import_react_native24.Keyboard.dismiss();
20081
+ import_react_native24.Animated.timing(panelAnim, {
19600
20082
  toValue: 0,
19601
20083
  duration: 200,
19602
20084
  useNativeDriver: true
@@ -19605,40 +20087,83 @@ function BugBearButton({
19605
20087
  setViewMode("mini-runner");
19606
20088
  });
19607
20089
  }, [panelAnim]);
19608
- const expandFromMiniRunner = (0, import_react24.useCallback)(() => {
20090
+ const expandFromMiniRunner = (0, import_react25.useCallback)(() => {
19609
20091
  setViewMode("panel");
19610
20092
  if (miniRunnerAssignmentId) {
19611
20093
  replace({ name: "TEST_DETAIL", testId: miniRunnerAssignmentId });
19612
20094
  }
19613
20095
  setMiniRunnerAssignmentId(null);
19614
- import_react_native23.Animated.spring(panelAnim, {
20096
+ import_react_native24.Animated.spring(panelAnim, {
19615
20097
  toValue: 1,
19616
20098
  useNativeDriver: true,
19617
20099
  friction: 8,
19618
20100
  tension: 65
19619
20101
  }).start();
19620
20102
  }, [miniRunnerAssignmentId, replace, panelAnim]);
19621
- const handleMiniRunnerAdvance = (0, import_react24.useCallback)((nextId) => {
20103
+ const handleMiniRunnerAdvance = (0, import_react25.useCallback)((nextId) => {
19622
20104
  setMiniRunnerAssignmentId(nextId);
19623
20105
  }, []);
19624
- const handleMiniRunnerComplete = (0, import_react24.useCallback)(() => {
20106
+ const handleMiniRunnerComplete = (0, import_react25.useCallback)(() => {
19625
20107
  setMiniRunnerAssignmentId(null);
19626
20108
  setViewMode("closed");
19627
20109
  }, []);
19628
- const handleMiniRunnerReport = (0, import_react24.useCallback)((assignId, testCaseId) => {
20110
+ const handleMiniRunnerReport = (0, import_react25.useCallback)((assignId, testCaseId) => {
19629
20111
  setMiniRunnerAssignmentId(null);
19630
20112
  setViewMode("panel");
19631
20113
  replace({
19632
20114
  name: "REPORT",
19633
20115
  prefill: { type: "test_fail", assignmentId: assignId, testCaseId }
19634
20116
  });
19635
- import_react_native23.Animated.spring(panelAnim, {
20117
+ import_react_native24.Animated.spring(panelAnim, {
19636
20118
  toValue: 1,
19637
20119
  useNativeDriver: true,
19638
20120
  friction: 8,
19639
20121
  tension: 65
19640
20122
  }).start();
19641
20123
  }, [replace, panelAnim]);
20124
+ const startAdHoc = (0, import_react25.useCallback)(async (taskId, focusArea) => {
20125
+ import_react_native24.Keyboard.dismiss();
20126
+ const result = await startSession({
20127
+ sessionType: "ad_hoc",
20128
+ taskId,
20129
+ focusArea,
20130
+ platform: "ios"
20131
+ });
20132
+ if (result.success) {
20133
+ import_react_native24.Animated.timing(panelAnim, {
20134
+ toValue: 0,
20135
+ duration: 200,
20136
+ useNativeDriver: true
20137
+ }).start(() => {
20138
+ setViewMode("ad-hoc");
20139
+ });
20140
+ }
20141
+ }, [startSession, panelAnim]);
20142
+ const expandFromAdHoc = (0, import_react25.useCallback)(() => {
20143
+ setViewMode("panel");
20144
+ replace({ name: "SESSION_ACTIVE" });
20145
+ import_react_native24.Animated.spring(panelAnim, {
20146
+ toValue: 1,
20147
+ useNativeDriver: true,
20148
+ friction: 8,
20149
+ tension: 65
20150
+ }).start();
20151
+ }, [replace, panelAnim]);
20152
+ const handleAdHocComplete = (0, import_react25.useCallback)(() => {
20153
+ setViewMode("closed");
20154
+ }, []);
20155
+ const minimizeToAdHoc = (0, import_react25.useCallback)(() => {
20156
+ if (activeSession?.sessionType === "ad_hoc") {
20157
+ import_react_native24.Keyboard.dismiss();
20158
+ import_react_native24.Animated.timing(panelAnim, {
20159
+ toValue: 0,
20160
+ duration: 200,
20161
+ useNativeDriver: true
20162
+ }).start(() => {
20163
+ setViewMode("ad-hoc");
20164
+ });
20165
+ }
20166
+ }, [activeSession, panelAnim]);
19642
20167
  if (!shouldShowWidget) return null;
19643
20168
  const getHeaderTitle = () => {
19644
20169
  switch (currentScreen.name) {
@@ -19681,41 +20206,43 @@ function BugBearButton({
19681
20206
  };
19682
20207
  const nav = {
19683
20208
  push: (screen) => {
19684
- import_react_native23.Keyboard.dismiss();
20209
+ import_react_native24.Keyboard.dismiss();
19685
20210
  push(screen);
19686
20211
  },
19687
20212
  pop: () => {
19688
- import_react_native23.Keyboard.dismiss();
20213
+ import_react_native24.Keyboard.dismiss();
19689
20214
  pop();
19690
20215
  },
19691
20216
  replace: (screen) => {
19692
- import_react_native23.Keyboard.dismiss();
20217
+ import_react_native24.Keyboard.dismiss();
19693
20218
  replace(screen);
19694
20219
  },
19695
20220
  reset: () => {
19696
- import_react_native23.Keyboard.dismiss();
20221
+ import_react_native24.Keyboard.dismiss();
19697
20222
  reset();
19698
20223
  },
19699
20224
  canGoBack,
19700
20225
  closeWidget: handleClose,
19701
- startMiniRunner
20226
+ startMiniRunner,
20227
+ startAdHoc,
20228
+ minimizeToAdHoc: activeSession?.sessionType === "ad_hoc" ? minimizeToAdHoc : void 0
19702
20229
  };
19703
20230
  const QA_ONLY_SCREENS = ["TEST_DETAIL", "TEST_LIST", "TEST_FEEDBACK", "SESSION_START", "SESSION_ACTIVE", "SESSION_FINDING"];
19704
20231
  const renderScreen = () => {
19705
20232
  if (widgetMode === "feedback" && QA_ONLY_SCREENS.includes(currentScreen.name)) {
19706
- return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
20233
+ return /* @__PURE__ */ import_react25.default.createElement(HomeScreen, { nav });
19707
20234
  }
19708
20235
  switch (currentScreen.name) {
19709
20236
  case "HOME":
19710
- return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
20237
+ return /* @__PURE__ */ import_react25.default.createElement(HomeScreen, { nav });
19711
20238
  case "TEST_DETAIL":
19712
- return /* @__PURE__ */ import_react24.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
20239
+ return /* @__PURE__ */ import_react25.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
19713
20240
  case "TEST_LIST":
19714
- return /* @__PURE__ */ import_react24.default.createElement(TestListScreen, { nav });
20241
+ return /* @__PURE__ */ import_react25.default.createElement(TestListScreen, { nav });
19715
20242
  case "TEST_FEEDBACK":
19716
- return /* @__PURE__ */ import_react24.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
20243
+ return /* @__PURE__ */ import_react25.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
19717
20244
  case "REPORT":
19718
- return /* @__PURE__ */ import_react24.default.createElement(
20245
+ return /* @__PURE__ */ import_react25.default.createElement(
19719
20246
  ReportScreen,
19720
20247
  {
19721
20248
  nav,
@@ -19727,30 +20254,30 @@ function BugBearButton({
19727
20254
  }
19728
20255
  );
19729
20256
  case "REPORT_SUCCESS":
19730
- return /* @__PURE__ */ import_react24.default.createElement(ReportSuccessScreen, { nav });
20257
+ return /* @__PURE__ */ import_react25.default.createElement(ReportSuccessScreen, { nav });
19731
20258
  case "MESSAGE_LIST":
19732
- return /* @__PURE__ */ import_react24.default.createElement(MessageListScreen, { nav });
20259
+ return /* @__PURE__ */ import_react25.default.createElement(MessageListScreen, { nav });
19733
20260
  case "THREAD_DETAIL":
19734
- return /* @__PURE__ */ import_react24.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
20261
+ return /* @__PURE__ */ import_react25.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
19735
20262
  case "COMPOSE_MESSAGE":
19736
- return /* @__PURE__ */ import_react24.default.createElement(ComposeMessageScreen, { nav });
20263
+ return /* @__PURE__ */ import_react25.default.createElement(ComposeMessageScreen, { nav });
19737
20264
  case "ISSUE_LIST":
19738
- return /* @__PURE__ */ import_react24.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
20265
+ return /* @__PURE__ */ import_react25.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
19739
20266
  case "ISSUE_DETAIL":
19740
- return /* @__PURE__ */ import_react24.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
20267
+ return /* @__PURE__ */ import_react25.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
19741
20268
  case "PROFILE":
19742
- return /* @__PURE__ */ import_react24.default.createElement(ProfileScreen, { nav });
20269
+ return /* @__PURE__ */ import_react25.default.createElement(ProfileScreen, { nav });
19743
20270
  case "SESSION_START":
19744
- return /* @__PURE__ */ import_react24.default.createElement(SessionStartScreen, { nav });
20271
+ return /* @__PURE__ */ import_react25.default.createElement(SessionStartScreen, { nav });
19745
20272
  case "SESSION_ACTIVE":
19746
- return /* @__PURE__ */ import_react24.default.createElement(SessionActiveScreen, { nav });
20273
+ return /* @__PURE__ */ import_react25.default.createElement(SessionActiveScreen, { nav });
19747
20274
  case "SESSION_FINDING":
19748
- return /* @__PURE__ */ import_react24.default.createElement(SessionFindingScreen, { nav });
20275
+ return /* @__PURE__ */ import_react25.default.createElement(SessionFindingScreen, { nav });
19749
20276
  default:
19750
- return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
20277
+ return /* @__PURE__ */ import_react25.default.createElement(HomeScreen, { nav });
19751
20278
  }
19752
20279
  };
19753
- return /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, viewMode === "mini-runner" && miniRunnerAssignmentId && /* @__PURE__ */ import_react24.default.createElement(
20280
+ return /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, viewMode === "mini-runner" && miniRunnerAssignmentId && /* @__PURE__ */ import_react25.default.createElement(
19754
20281
  MiniTestRunner,
19755
20282
  {
19756
20283
  assignmentId: miniRunnerAssignmentId,
@@ -19759,61 +20286,70 @@ function BugBearButton({
19759
20286
  onComplete: handleMiniRunnerComplete,
19760
20287
  onNavigateToReport: handleMiniRunnerReport
19761
20288
  }
19762
- ), viewMode === "closed" && /* @__PURE__ */ import_react24.default.createElement(
19763
- import_react_native23.Animated.View,
20289
+ ), viewMode === "ad-hoc" && activeSession && /* @__PURE__ */ import_react25.default.createElement(
20290
+ AdHocOverlay,
19764
20291
  {
19765
- style: [styles6.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
20292
+ sessionId: activeSession.id,
20293
+ focusArea: activeSession.focusArea,
20294
+ startedAt: activeSession.startedAt,
20295
+ onExpand: expandFromAdHoc,
20296
+ onComplete: handleAdHocComplete
20297
+ }
20298
+ ), viewMode === "closed" && /* @__PURE__ */ import_react25.default.createElement(
20299
+ import_react_native24.Animated.View,
20300
+ {
20301
+ style: [styles7.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
19766
20302
  ...panResponder.panHandlers
19767
20303
  },
19768
- /* @__PURE__ */ import_react24.default.createElement(
19769
- import_react_native23.TouchableOpacity,
20304
+ /* @__PURE__ */ import_react25.default.createElement(
20305
+ import_react_native24.TouchableOpacity,
19770
20306
  {
19771
- style: styles6.fab,
20307
+ style: styles7.fab,
19772
20308
  onPress: openPanel,
19773
20309
  activeOpacity: draggable ? 1 : 0.7
19774
20310
  },
19775
- /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles6.fabIcon }),
19776
- 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))
20311
+ /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles7.fabIcon }),
20312
+ badgeCount > 0 && /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.badge }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
19777
20313
  )
19778
- ), viewMode === "panel" && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react24.default.createElement(
19779
- import_react_native23.KeyboardAvoidingView,
20314
+ ), viewMode === "panel" && /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react25.default.createElement(
20315
+ import_react_native24.KeyboardAvoidingView,
19780
20316
  {
19781
- behavior: import_react_native23.Platform.OS === "ios" ? "padding" : "height",
19782
- style: styles6.panelKeyboardAvoid,
20317
+ behavior: import_react_native24.Platform.OS === "ios" ? "padding" : "height",
20318
+ style: styles7.panelKeyboardAvoid,
19783
20319
  pointerEvents: "box-none"
19784
20320
  },
19785
- /* @__PURE__ */ import_react24.default.createElement(
19786
- import_react_native23.Animated.View,
20321
+ /* @__PURE__ */ import_react25.default.createElement(
20322
+ import_react_native24.Animated.View,
19787
20323
  {
19788
20324
  style: [
19789
- styles6.panelContainer,
20325
+ styles7.panelContainer,
19790
20326
  {
19791
20327
  transform: [{
19792
20328
  translateY: panelAnim.interpolate({
19793
20329
  inputRange: [0, 1],
19794
- outputRange: [screenHeight2, 0]
20330
+ outputRange: [screenHeight3, 0]
19795
20331
  })
19796
20332
  }]
19797
20333
  }
19798
20334
  ]
19799
20335
  },
19800
- /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelHandle }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelHandleBar })),
19801
- /* @__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")))),
19802
- /* @__PURE__ */ import_react24.default.createElement(
19803
- import_react_native23.ScrollView,
20336
+ /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.panelHandle }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.panelHandleBar })),
20337
+ /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.header }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.headerLeft }, canGoBack ? /* @__PURE__ */ import_react25.default.createElement(import_react_native24.TouchableOpacity, { onPress: () => nav.pop(), style: styles7.backButton }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.backText }, "\u2190 Back")) : /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.headerTitleRow }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ import_react25.default.createElement(import_react_native24.TouchableOpacity, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.headerActions }, currentScreen.name !== "HOME" && /* @__PURE__ */ import_react25.default.createElement(import_react_native24.TouchableOpacity, { onPress: () => nav.reset(), style: styles7.homeButton }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.homeIcon }, "\u2302")), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.TouchableOpacity, { onPress: handleClose, style: styles7.closeButton }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.closeText }, "\u2715")))),
20338
+ /* @__PURE__ */ import_react25.default.createElement(
20339
+ import_react_native24.ScrollView,
19804
20340
  {
19805
- style: styles6.content,
19806
- contentContainerStyle: styles6.contentContainer,
20341
+ style: styles7.content,
20342
+ contentContainerStyle: styles7.contentContainer,
19807
20343
  keyboardShouldPersistTaps: "handled",
19808
20344
  showsVerticalScrollIndicator: false
19809
20345
  },
19810
- 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()
20346
+ isLoading ? /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.loadingContainer }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.ActivityIndicator, { size: "large", color: colors.blue }), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles7.loadingText }, "Loading...")) : renderScreen()
19811
20347
  )
19812
20348
  )
19813
20349
  )));
19814
20350
  }
19815
20351
  function createStyles16() {
19816
- return import_react_native23.StyleSheet.create({
20352
+ return import_react_native24.StyleSheet.create({
19817
20353
  // FAB
19818
20354
  fabContainer: {
19819
20355
  position: "absolute",
@@ -19972,7 +20508,7 @@ function createStyles16() {
19972
20508
  },
19973
20509
  contentContainer: {
19974
20510
  padding: 16,
19975
- paddingBottom: import_react_native23.Platform.OS === "ios" ? 50 : 28
20511
+ paddingBottom: import_react_native24.Platform.OS === "ios" ? 50 : 28
19976
20512
  },
19977
20513
  // Loading
19978
20514
  loadingContainer: {
@@ -19988,9 +20524,9 @@ function createStyles16() {
19988
20524
  }
19989
20525
 
19990
20526
  // src/BugBearErrorBoundary.tsx
19991
- var import_react25 = __toESM(require("react"));
19992
- var import_react_native24 = require("react-native");
19993
- var BugBearErrorBoundary = class extends import_react25.Component {
20527
+ var import_react26 = __toESM(require("react"));
20528
+ var import_react_native25 = require("react-native");
20529
+ var BugBearErrorBoundary = class extends import_react26.Component {
19994
20530
  constructor(props) {
19995
20531
  super(props);
19996
20532
  this.reset = () => {
@@ -20034,7 +20570,7 @@ var BugBearErrorBoundary = class extends import_react25.Component {
20034
20570
  if (fallback) {
20035
20571
  return fallback;
20036
20572
  }
20037
- 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"));
20573
+ return /* @__PURE__ */ import_react26.default.createElement(import_react_native25.View, { style: styles6.container }, /* @__PURE__ */ import_react26.default.createElement(import_react_native25.Text, { style: styles6.title }, "Something went wrong"), /* @__PURE__ */ import_react26.default.createElement(import_react_native25.Text, { style: styles6.message }, error.message), /* @__PURE__ */ import_react26.default.createElement(import_react_native25.TouchableOpacity, { style: styles6.button, onPress: this.reset }, /* @__PURE__ */ import_react26.default.createElement(import_react_native25.Text, { style: styles6.buttonText }, "Try Again")), /* @__PURE__ */ import_react26.default.createElement(import_react_native25.Text, { style: styles6.caption }, "The error has been captured by BugBear"));
20038
20574
  }
20039
20575
  return children;
20040
20576
  }
@@ -20045,7 +20581,7 @@ function useErrorContext() {
20045
20581
  getEnhancedContext: () => contextCapture.getEnhancedContext()
20046
20582
  };
20047
20583
  }
20048
- var styles5 = import_react_native24.StyleSheet.create({
20584
+ var styles6 = import_react_native25.StyleSheet.create({
20049
20585
  container: {
20050
20586
  padding: 20,
20051
20587
  margin: 20,