@bbearai/react-native 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +916 -392
  2. package/dist/index.mjs +932 -397
  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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";
@@ -15340,7 +15389,7 @@ var s = import_react_native3.StyleSheet.create({
15340
15389
  // src/widget/screens/HomeScreen.tsx
15341
15390
  function HomeScreen({ nav }) {
15342
15391
  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]);
15392
+ const styles7 = (0, import_react4.useMemo)(() => createStyles(), [widgetColorScheme]);
15344
15393
  const [sessionElapsed, setSessionElapsed] = (0, import_react4.useState)(0);
15345
15394
  const timerRef = (0, import_react4.useRef)(null);
15346
15395
  (0, import_react4.useEffect)(() => {
@@ -15369,98 +15418,98 @@ function HomeScreen({ nav }) {
15369
15418
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15370
15419
  import_react_native4.TouchableOpacity,
15371
15420
  {
15372
- style: [styles6.heroBanner, styles6.heroBannerMessages],
15421
+ style: [styles7.heroBanner, styles7.heroBannerMessages],
15373
15422
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15374
15423
  activeOpacity: 0.8
15375
15424
  },
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(
15425
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroCount }, unreadCount),
15426
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15427
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroAction }, "View Messages \u2192")
15428
+ ) : /* @__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
15429
  import_react_native4.TouchableOpacity,
15381
15430
  {
15382
- style: styles6.actionCard,
15431
+ style: styles7.actionCard,
15383
15432
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15384
15433
  activeOpacity: 0.7
15385
15434
  },
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")
15435
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F41B}"),
15436
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Report Bug")
15388
15437
  ), /* @__PURE__ */ import_react4.default.createElement(
15389
15438
  import_react_native4.TouchableOpacity,
15390
15439
  {
15391
- style: styles6.actionCard,
15440
+ style: styles7.actionCard,
15392
15441
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15393
15442
  activeOpacity: 0.7
15394
15443
  },
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")
15444
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4A1}"),
15445
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Share Feedback")
15397
15446
  ), /* @__PURE__ */ import_react4.default.createElement(
15398
15447
  import_react_native4.TouchableOpacity,
15399
15448
  {
15400
- style: styles6.actionCard,
15449
+ style: styles7.actionCard,
15401
15450
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15402
15451
  activeOpacity: 0.7
15403
15452
  },
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))
15453
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4AC}"),
15454
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Messages"),
15455
+ 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
15456
  ), /* @__PURE__ */ import_react4.default.createElement(
15408
15457
  import_react_native4.TouchableOpacity,
15409
15458
  {
15410
- style: styles6.actionCard,
15459
+ style: styles7.actionCard,
15411
15460
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15412
15461
  activeOpacity: 0.7
15413
15462
  },
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(
15463
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4CB}"),
15464
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "My Issues"),
15465
+ 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))
15466
+ )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15418
15467
  import_react_native4.TouchableOpacity,
15419
15468
  {
15420
- style: [styles6.issueCard, styles6.issueCardOpen],
15469
+ style: [styles7.issueCard, styles7.issueCardOpen],
15421
15470
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15422
15471
  activeOpacity: 0.7
15423
15472
  },
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")
15473
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountOpen }, issueCounts.open),
15474
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Open")
15426
15475
  ), /* @__PURE__ */ import_react4.default.createElement(
15427
15476
  import_react_native4.TouchableOpacity,
15428
15477
  {
15429
- style: [styles6.issueCard, styles6.issueCardDone],
15478
+ style: [styles7.issueCard, styles7.issueCardDone],
15430
15479
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15431
15480
  activeOpacity: 0.7
15432
15481
  },
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")
15482
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountDone }, issueCounts.done),
15483
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Done")
15435
15484
  ), /* @__PURE__ */ import_react4.default.createElement(
15436
15485
  import_react_native4.TouchableOpacity,
15437
15486
  {
15438
- style: [styles6.issueCard, styles6.issueCardReopened],
15487
+ style: [styles7.issueCard, styles7.issueCardReopened],
15439
15488
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15440
15489
  activeOpacity: 0.7
15441
15490
  },
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")
15491
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountReopened }, issueCounts.reopened),
15492
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Reopened")
15444
15493
  )), dashboardUrl && /* @__PURE__ */ import_react4.default.createElement(
15445
15494
  import_react_native4.TouchableOpacity,
15446
15495
  {
15447
- style: styles6.webAppLink,
15496
+ style: styles7.webAppLink,
15448
15497
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15449
15498
  activeOpacity: 0.7
15450
15499
  },
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")
15500
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppIcon }, "\u{1F310}"),
15501
+ /* @__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")),
15502
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppArrow }, "\u2192")
15454
15503
  ), /* @__PURE__ */ import_react4.default.createElement(
15455
15504
  import_react_native4.TouchableOpacity,
15456
15505
  {
15457
- style: styles6.refreshButton,
15506
+ style: styles7.refreshButton,
15458
15507
  onPress: () => {
15459
15508
  refreshThreads();
15460
15509
  refreshIssueCounts();
15461
15510
  }
15462
15511
  },
15463
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.refreshText }, "\u21BB Refresh")
15512
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.refreshText }, "\u21BB Refresh")
15464
15513
  ));
15465
15514
  }
15466
15515
  const formatTimer = (s2) => {
@@ -15477,130 +15526,140 @@ function HomeScreen({ nav }) {
15477
15526
  return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, null, pendingCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15478
15527
  import_react_native4.TouchableOpacity,
15479
15528
  {
15480
- style: [styles6.heroBanner, styles6.heroBannerTests],
15529
+ style: [styles7.heroBanner, styles7.heroBannerTests],
15481
15530
  onPress: () => nav.push({ name: "TEST_DETAIL" }),
15482
15531
  activeOpacity: 0.8
15483
15532
  },
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")
15533
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroCount }, pendingCount),
15534
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
15535
+ 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" : "")),
15536
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroAction }, "Start Testing \u2192")
15488
15537
  ) : unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement(
15489
15538
  import_react_native4.TouchableOpacity,
15490
15539
  {
15491
- style: [styles6.heroBanner, styles6.heroBannerMessages],
15540
+ style: [styles7.heroBanner, styles7.heroBannerMessages],
15492
15541
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15493
15542
  activeOpacity: 0.8
15494
15543
  },
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(
15544
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroCount }, unreadCount),
15545
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroLabel }, "unread message", unreadCount !== 1 ? "s" : ""),
15546
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.heroAction }, "View Messages \u2192")
15547
+ ) : /* @__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
15548
  import_react_native4.TouchableOpacity,
15500
15549
  {
15501
- style: styles6.sessionCardActive,
15550
+ style: styles7.sessionCardActive,
15502
15551
  onPress: () => nav.push({ name: "SESSION_ACTIVE" }),
15503
15552
  activeOpacity: 0.8
15504
15553
  },
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")
15554
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.sessionDot }),
15555
+ /* @__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" : "")),
15556
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardAction }, "Resume \u2192")
15508
15557
  ) : /* @__PURE__ */ import_react4.default.createElement(
15509
15558
  import_react_native4.TouchableOpacity,
15510
15559
  {
15511
- style: styles6.sessionCardInactive,
15560
+ style: styles7.sessionCardInactive,
15512
15561
  onPress: () => nav.push({ name: "SESSION_START" }),
15513
15562
  activeOpacity: 0.7
15514
15563
  },
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(
15564
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardIcon }, "\u{1F50D}"),
15565
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardLabel }, "Start QA Session"),
15566
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardArrow }, "\u2192")
15567
+ ), !activeSession && nav.startAdHoc && /* @__PURE__ */ import_react4.default.createElement(
15568
+ import_react_native4.TouchableOpacity,
15569
+ {
15570
+ style: styles7.quickTestCard,
15571
+ onPress: () => nav.startAdHoc?.(),
15572
+ activeOpacity: 0.7
15573
+ },
15574
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.quickTestIcon }, "\u26A1"),
15575
+ /* @__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")),
15576
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.sessionCardArrow }, "\u2192")
15577
+ ), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.actionGrid }, /* @__PURE__ */ import_react4.default.createElement(
15519
15578
  import_react_native4.TouchableOpacity,
15520
15579
  {
15521
- style: styles6.actionCard,
15580
+ style: styles7.actionCard,
15522
15581
  onPress: () => nav.push({ name: "TEST_LIST" }),
15523
15582
  activeOpacity: 0.7
15524
15583
  },
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))
15584
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u2705"),
15585
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Tests"),
15586
+ 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
15587
  ), /* @__PURE__ */ import_react4.default.createElement(
15529
15588
  import_react_native4.TouchableOpacity,
15530
15589
  {
15531
- style: styles6.actionCard,
15590
+ style: styles7.actionCard,
15532
15591
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "bug" } }),
15533
15592
  activeOpacity: 0.7
15534
15593
  },
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")
15594
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F41B}"),
15595
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Report Bug")
15537
15596
  ), /* @__PURE__ */ import_react4.default.createElement(
15538
15597
  import_react_native4.TouchableOpacity,
15539
15598
  {
15540
- style: styles6.actionCard,
15599
+ style: styles7.actionCard,
15541
15600
  onPress: () => nav.push({ name: "REPORT", prefill: { type: "feedback" } }),
15542
15601
  activeOpacity: 0.7
15543
15602
  },
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")
15603
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4A1}"),
15604
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Feedback")
15546
15605
  ), /* @__PURE__ */ import_react4.default.createElement(
15547
15606
  import_react_native4.TouchableOpacity,
15548
15607
  {
15549
- style: styles6.actionCard,
15608
+ style: styles7.actionCard,
15550
15609
  onPress: () => nav.push({ name: "MESSAGE_LIST" }),
15551
15610
  activeOpacity: 0.7
15552
15611
  },
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(
15612
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionIcon }, "\u{1F4AC}"),
15613
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.actionLabel }, "Messages"),
15614
+ 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))
15615
+ )), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles7.issueGrid }, /* @__PURE__ */ import_react4.default.createElement(
15557
15616
  import_react_native4.TouchableOpacity,
15558
15617
  {
15559
- style: [styles6.issueCard, styles6.issueCardOpen],
15618
+ style: [styles7.issueCard, styles7.issueCardOpen],
15560
15619
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
15561
15620
  activeOpacity: 0.7
15562
15621
  },
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")
15622
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountOpen }, issueCounts.open),
15623
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Open")
15565
15624
  ), /* @__PURE__ */ import_react4.default.createElement(
15566
15625
  import_react_native4.TouchableOpacity,
15567
15626
  {
15568
- style: [styles6.issueCard, styles6.issueCardDone],
15627
+ style: [styles7.issueCard, styles7.issueCardDone],
15569
15628
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
15570
15629
  activeOpacity: 0.7
15571
15630
  },
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")
15631
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountDone }, issueCounts.done),
15632
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Done")
15574
15633
  ), /* @__PURE__ */ import_react4.default.createElement(
15575
15634
  import_react_native4.TouchableOpacity,
15576
15635
  {
15577
- style: [styles6.issueCard, styles6.issueCardReopened],
15636
+ style: [styles7.issueCard, styles7.issueCardReopened],
15578
15637
  onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
15579
15638
  activeOpacity: 0.7
15580
15639
  },
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(
15640
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueCountReopened }, issueCounts.reopened),
15641
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.issueLabel }, "Reopened")
15642
+ )), 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
15643
  import_react_native4.TouchableOpacity,
15585
15644
  {
15586
- style: styles6.webAppLink,
15645
+ style: styles7.webAppLink,
15587
15646
  onPress: () => import_react_native4.Linking.openURL(dashboardUrl),
15588
15647
  activeOpacity: 0.7
15589
15648
  },
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")
15649
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppIcon }, "\u{1F310}"),
15650
+ /* @__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")),
15651
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.webAppArrow }, "\u2192")
15593
15652
  ), /* @__PURE__ */ import_react4.default.createElement(
15594
15653
  import_react_native4.TouchableOpacity,
15595
15654
  {
15596
- style: styles6.refreshButton,
15655
+ style: styles7.refreshButton,
15597
15656
  onPress: () => {
15598
15657
  refreshAssignments();
15599
15658
  refreshThreads();
15600
15659
  refreshIssueCounts();
15601
15660
  }
15602
15661
  },
15603
- /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles6.refreshText }, "\u21BB Refresh")
15662
+ /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles7.refreshText }, "\u21BB Refresh")
15604
15663
  ));
15605
15664
  }
15606
15665
  function createStyles() {
@@ -15889,6 +15948,35 @@ function createStyles() {
15889
15948
  sessionCardArrow: {
15890
15949
  fontSize: 13,
15891
15950
  color: colors.textMuted
15951
+ },
15952
+ // Quick Test card
15953
+ quickTestCard: {
15954
+ flexDirection: "row",
15955
+ alignItems: "center",
15956
+ backgroundColor: colors.card,
15957
+ borderWidth: 1,
15958
+ borderColor: colors.border,
15959
+ borderRadius: 12,
15960
+ padding: 12,
15961
+ paddingHorizontal: 16,
15962
+ gap: 12,
15963
+ marginBottom: 16
15964
+ },
15965
+ quickTestIcon: {
15966
+ fontSize: 22
15967
+ },
15968
+ quickTestContent: {
15969
+ flex: 1
15970
+ },
15971
+ quickTestTitle: {
15972
+ fontSize: 14,
15973
+ fontWeight: "600",
15974
+ color: colors.textPrimary
15975
+ },
15976
+ quickTestSub: {
15977
+ fontSize: 12,
15978
+ color: colors.textMuted,
15979
+ marginTop: 2
15892
15980
  }
15893
15981
  });
15894
15982
  }
@@ -15898,7 +15986,7 @@ var import_react5 = __toESM(require("react"));
15898
15986
  var import_react_native5 = require("react-native");
15899
15987
  function TestDetailScreen({ testId, nav }) {
15900
15988
  const { client, assignments, currentAssignment, refreshAssignments, getDeviceInfo, onNavigate, widgetColorScheme } = useBugBear();
15901
- const styles6 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15989
+ const styles7 = (0, import_react5.useMemo)(() => createStyles2(), [widgetColorScheme]);
15902
15990
  const displayedAssignment = testId ? assignments.find((a) => a.id === testId) || currentAssignment : currentAssignment;
15903
15991
  const [showSteps, setShowSteps] = (0, import_react5.useState)(true);
15904
15992
  const [showDetails, setShowDetails] = (0, import_react5.useState)(false);
@@ -16076,7 +16164,7 @@ function TestDetailScreen({ testId, nav }) {
16076
16164
  const steps = testCase.steps;
16077
16165
  const info = templateInfo[template] || templateInfo.steps;
16078
16166
  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(
16167
+ 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
16168
  import_react_native5.TouchableOpacity,
16081
16169
  {
16082
16170
  key: idx,
@@ -16086,86 +16174,86 @@ function TestDetailScreen({ testId, nav }) {
16086
16174
  else next[idx] = true;
16087
16175
  return next;
16088
16176
  }),
16089
- style: [styles6.checklistItem, criteriaResults[idx] === true && styles6.checklistItemChecked]
16177
+ style: [styles7.checklistItem, criteriaResults[idx] === true && styles7.checklistItemChecked]
16090
16178
  },
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(
16179
+ /* @__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")),
16180
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.checklistText, criteriaResults[idx] === true && styles7.checklistTextDone] }, step.action)
16181
+ )), 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
16182
  import_react_native5.TouchableOpacity,
16095
16183
  {
16096
16184
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: true })),
16097
- style: [styles6.pfButton, criteriaResults[idx] === true && styles6.pfButtonPass]
16185
+ style: [styles7.pfButton, criteriaResults[idx] === true && styles7.pfButtonPass]
16098
16186
  },
16099
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.pfButtonText, criteriaResults[idx] === true && styles6.pfButtonTextActive] }, "\u2713 Pass")
16187
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.pfButtonText, criteriaResults[idx] === true && styles7.pfButtonTextActive] }, "\u2713 Pass")
16100
16188
  ), /* @__PURE__ */ import_react5.default.createElement(
16101
16189
  import_react_native5.TouchableOpacity,
16102
16190
  {
16103
16191
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: false })),
16104
- style: [styles6.pfButton, criteriaResults[idx] === false && styles6.pfButtonFail]
16192
+ style: [styles7.pfButton, criteriaResults[idx] === false && styles7.pfButtonFail]
16105
16193
  },
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(
16194
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.pfButtonText, criteriaResults[idx] === false && styles7.pfButtonTextActive] }, "\u2717 Fail")
16195
+ )) : /* @__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
16196
  import_react_native5.TouchableOpacity,
16109
16197
  {
16110
16198
  key: n,
16111
16199
  onPress: () => setCriteriaResults((prev) => ({ ...prev, [idx]: n })),
16112
- style: [styles6.ratingBtn, criteriaResults[idx] === n && styles6.ratingBtnActive]
16200
+ style: [styles7.ratingBtn, criteriaResults[idx] === n && styles7.ratingBtnActive]
16113
16201
  },
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(
16202
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.ratingBtnText, criteriaResults[idx] === n && styles7.ratingBtnTextActive] }, n)
16203
+ ))))), 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
16204
  import_react_native5.TouchableOpacity,
16117
16205
  {
16118
- style: styles6.navigateButton,
16206
+ style: styles7.navigateButton,
16119
16207
  onPress: () => {
16120
16208
  import_react_native5.Keyboard.dismiss();
16121
16209
  onNavigate(testCase.targetRoute);
16122
16210
  nav.closeWidget?.();
16123
16211
  }
16124
16212
  },
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(
16213
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.navigateText }, "\u{1F9ED} Go to test location")
16214
+ ), /* @__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
16215
  import_react_native5.TouchableOpacity,
16128
16216
  {
16129
- style: styles6.startTestBtn,
16217
+ style: styles7.startTestBtn,
16130
16218
  onPress: () => nav.startMiniRunner(displayedAssignment.id)
16131
16219
  },
16132
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.startTestText }, "\u25B6 Start Test")
16220
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.startTestText }, "\u25B6 Start Test")
16133
16221
  ), 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,
16222
+ styles7.completedBanner,
16223
+ displayedAssignment.status === "passed" && styles7.completedBannerPass,
16224
+ displayedAssignment.status === "failed" && styles7.completedBannerFail
16225
+ ] }, /* @__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: [
16226
+ styles7.completedLabel,
16139
16227
  displayedAssignment.status === "passed" && { color: colors.green },
16140
16228
  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(
16229
+ ] }, "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
16230
  import_react_native5.TouchableOpacity,
16143
16231
  {
16144
- style: [styles6.actionBtn, styles6.reopenBtn, isSubmitting && { opacity: 0.5 }],
16232
+ style: [styles7.actionBtn, styles7.reopenBtn, isSubmitting && { opacity: 0.5 }],
16145
16233
  onPress: handleReopen,
16146
16234
  disabled: isSubmitting
16147
16235
  },
16148
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.reopenBtnText }, isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test")
16236
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.reopenBtnText }, isSubmitting ? "Reopening..." : "\u{1F504} Reopen Test")
16149
16237
  ), displayedAssignment.status === "passed" && /* @__PURE__ */ import_react5.default.createElement(
16150
16238
  import_react_native5.TouchableOpacity,
16151
16239
  {
16152
- style: [styles6.actionBtn, styles6.failBtn, isSubmitting && { opacity: 0.5 }],
16240
+ style: [styles7.actionBtn, styles7.failBtn, isSubmitting && { opacity: 0.5 }],
16153
16241
  onPress: () => handleChangeResult("failed"),
16154
16242
  disabled: isSubmitting
16155
16243
  },
16156
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.failBtnText }, "Change to Fail")
16244
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.failBtnText }, "Change to Fail")
16157
16245
  ), displayedAssignment.status === "failed" && /* @__PURE__ */ import_react5.default.createElement(
16158
16246
  import_react_native5.TouchableOpacity,
16159
16247
  {
16160
- style: [styles6.actionBtn, styles6.passBtn, isSubmitting && { opacity: 0.5 }],
16248
+ style: [styles7.actionBtn, styles7.passBtn, isSubmitting && { opacity: 0.5 }],
16161
16249
  onPress: () => handleChangeResult("passed"),
16162
16250
  disabled: isSubmitting
16163
16251
  },
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(
16252
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passBtnText }, "Change to Pass")
16253
+ ))) : /* @__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
16254
  import_react_native5.TouchableOpacity,
16167
16255
  {
16168
- style: styles6.passToastButton,
16256
+ style: styles7.passToastButton,
16169
16257
  onPress: () => {
16170
16258
  if (toastTimerRef.current) clearTimeout(toastTimerRef.current);
16171
16259
  const toastId = feedbackToastAssignmentId;
@@ -16173,8 +16261,8 @@ function TestDetailScreen({ testId, nav }) {
16173
16261
  nav.push({ name: "TEST_FEEDBACK", status: "passed", assignmentId: toastId });
16174
16262
  }
16175
16263
  },
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:"), [
16264
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.passToastButtonText }, "Rate this test")
16265
+ )), /* @__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
16266
  { reason: "blocked", label: "\u{1F6AB} Blocked by a bug" },
16179
16267
  { reason: "not_ready", label: "\u{1F6A7} Feature not ready" },
16180
16268
  { reason: "dependency", label: "\u{1F517} Needs another test first" },
@@ -16183,32 +16271,32 @@ function TestDetailScreen({ testId, nav }) {
16183
16271
  import_react_native5.TouchableOpacity,
16184
16272
  {
16185
16273
  key: reason,
16186
- style: [styles6.skipOption, selectedSkipReason === reason && styles6.skipOptionActive],
16274
+ style: [styles7.skipOption, selectedSkipReason === reason && styles7.skipOptionActive],
16187
16275
  onPress: () => setSelectedSkipReason(reason)
16188
16276
  },
16189
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles6.skipOptionText, selectedSkipReason === reason && styles6.skipOptionTextActive] }, label)
16277
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles7.skipOptionText, selectedSkipReason === reason && styles7.skipOptionTextActive] }, label)
16190
16278
  )), /* @__PURE__ */ import_react5.default.createElement(
16191
16279
  import_react_native5.TextInput,
16192
16280
  {
16193
- style: styles6.skipNotes,
16281
+ style: styles7.skipNotes,
16194
16282
  value: skipNotes,
16195
16283
  onChangeText: setSkipNotes,
16196
16284
  placeholder: "Additional notes (optional)",
16197
16285
  placeholderTextColor: colors.textMuted,
16198
16286
  multiline: true
16199
16287
  }
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: () => {
16288
+ ), /* @__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
16289
  setShowSkipModal(false);
16202
16290
  setSelectedSkipReason(null);
16203
16291
  setSkipNotes("");
16204
- } }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipCancelText }, "Cancel")), /* @__PURE__ */ import_react5.default.createElement(
16292
+ } }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.skipCancelText }, "Cancel")), /* @__PURE__ */ import_react5.default.createElement(
16205
16293
  import_react_native5.TouchableOpacity,
16206
16294
  {
16207
- style: [styles6.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16295
+ style: [styles7.skipConfirm, !selectedSkipReason && { opacity: 0.4 }],
16208
16296
  onPress: handleSkip,
16209
16297
  disabled: !selectedSkipReason || skipping
16210
16298
  },
16211
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles6.skipConfirmText }, skipping ? "Skipping..." : "Skip Test")
16299
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles7.skipConfirmText }, skipping ? "Skipping..." : "Skip Test")
16212
16300
  ))))));
16213
16301
  }
16214
16302
  function createStyles2() {
@@ -16330,7 +16418,7 @@ var import_react6 = __toESM(require("react"));
16330
16418
  var import_react_native6 = require("react-native");
16331
16419
  function TestListScreen({ nav }) {
16332
16420
  const { assignments, currentAssignment, refreshAssignments, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
16333
- const styles6 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16421
+ const styles7 = (0, import_react6.useMemo)(() => createStyles3(), [widgetColorScheme]);
16334
16422
  const [filter, setFilter] = (0, import_react6.useState)("all");
16335
16423
  const [roleFilter, setRoleFilter] = (0, import_react6.useState)(null);
16336
16424
  const [trackFilter, setTrackFilter] = (0, import_react6.useState)(null);
@@ -16422,18 +16510,18 @@ function TestListScreen({ nav }) {
16422
16510
  return true;
16423
16511
  }, [platformFilter, roleFilter, trackFilter, searchQuery, filter]);
16424
16512
  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 }, [
16513
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, null, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.filterBar }, [
16426
16514
  { key: "all", label: "All", count: assignments.length },
16427
16515
  { key: "todo", label: "To Do", count: assignments.filter((a) => !a.isVerification && (a.status === "pending" || a.status === "in_progress" || a.status === "failed")).length },
16428
16516
  { key: "retest", label: "Retest", count: assignments.filter((a) => !!a.isVerification && (a.status === "pending" || a.status === "in_progress")).length },
16429
16517
  { 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(
16518
+ ].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
16519
  import_react_native6.TouchableOpacity,
16432
16520
  {
16433
- style: [styles6.roleBtn, !roleFilter && styles6.roleBtnActive],
16521
+ style: [styles7.roleBtn, !roleFilter && styles7.roleBtnActive],
16434
16522
  onPress: () => setRoleFilter(null)
16435
16523
  },
16436
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.roleBtnText, !roleFilter && styles6.roleBtnTextActive] }, "All Roles")
16524
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.roleBtnText, !roleFilter && styles7.roleBtnTextActive] }, "All Roles")
16437
16525
  ), availableRoles.map((role) => {
16438
16526
  const isActive = roleFilter === role.id;
16439
16527
  return /* @__PURE__ */ import_react6.default.createElement(
@@ -16441,30 +16529,30 @@ function TestListScreen({ nav }) {
16441
16529
  {
16442
16530
  key: role.id,
16443
16531
  style: [
16444
- styles6.roleBtn,
16532
+ styles7.roleBtn,
16445
16533
  isActive && { backgroundColor: role.color + "20", borderColor: role.color + "60", borderWidth: 1 }
16446
16534
  ],
16447
16535
  onPress: () => setRoleFilter(isActive ? null : role.id)
16448
16536
  },
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)
16537
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [styles7.roleDot, { backgroundColor: role.color }] }),
16538
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.roleBtnText, isActive && { color: role.color, fontWeight: "600" }] }, role.name)
16451
16539
  );
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(
16540
+ })), 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
16541
  import_react_native6.TextInput,
16454
16542
  {
16455
16543
  value: searchQuery,
16456
16544
  onChangeText: setSearchQuery,
16457
16545
  placeholder: "Search tests...",
16458
16546
  placeholderTextColor: colors.textMuted,
16459
- style: styles6.searchInput
16547
+ style: styles7.searchInput
16460
16548
  }
16461
- )), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles6.platformBar }, /* @__PURE__ */ import_react6.default.createElement(
16549
+ )), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles7.platformBar }, /* @__PURE__ */ import_react6.default.createElement(
16462
16550
  import_react_native6.TouchableOpacity,
16463
16551
  {
16464
- style: [styles6.platformBtn, !platformFilter && styles6.platformBtnActive],
16552
+ style: [styles7.platformBtn, !platformFilter && styles7.platformBtnActive],
16465
16553
  onPress: () => setPlatformFilter(null)
16466
16554
  },
16467
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.platformBtnText, !platformFilter && styles6.platformBtnTextActive] }, "All")
16555
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.platformBtnText, !platformFilter && styles7.platformBtnTextActive] }, "All")
16468
16556
  ), [
16469
16557
  { key: "web", label: "Web", icon: "\u{1F310}" },
16470
16558
  { key: "ios", label: "iOS", icon: "\u{1F4F1}" },
@@ -16476,32 +16564,32 @@ function TestListScreen({ nav }) {
16476
16564
  {
16477
16565
  key: p.key,
16478
16566
  style: [
16479
- styles6.platformBtn,
16567
+ styles7.platformBtn,
16480
16568
  isActive && { backgroundColor: colors.blue + "20", borderColor: colors.blue + "60", borderWidth: 1 }
16481
16569
  ],
16482
16570
  onPress: () => setPlatformFilter(isActive ? null : p.key)
16483
16571
  },
16484
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.platformBtnText, isActive && { color: colors.blue, fontWeight: "600" }] }, p.icon, " ", p.label)
16572
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.platformBtnText, isActive && { color: colors.blue, fontWeight: "600" }] }, p.icon, " ", p.label)
16485
16573
  );
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(
16574
+ })), /* @__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
16575
  import_react_native6.TouchableOpacity,
16488
16576
  {
16489
- style: [styles6.trackBtn, !trackFilter && styles6.trackBtnActive],
16577
+ style: [styles7.trackBtn, !trackFilter && styles7.trackBtnActive],
16490
16578
  onPress: () => setTrackFilter(null)
16491
16579
  },
16492
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.trackBtnText, !trackFilter && styles6.trackBtnTextActive] }, "All Tracks")
16580
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.trackBtnText, !trackFilter && styles7.trackBtnTextActive] }, "All Tracks")
16493
16581
  ), availableTracks.map((track) => {
16494
16582
  const isActive = trackFilter === track.id;
16495
16583
  return /* @__PURE__ */ import_react6.default.createElement(
16496
16584
  import_react_native6.TouchableOpacity,
16497
16585
  {
16498
16586
  key: track.id,
16499
- style: [styles6.trackBtn, isActive && { backgroundColor: track.color + "20", borderColor: track.color + "60", borderWidth: 1 }],
16587
+ style: [styles7.trackBtn, isActive && { backgroundColor: track.color + "20", borderColor: track.color + "60", borderWidth: 1 }],
16500
16588
  onPress: () => setTrackFilter(isActive ? null : track.id)
16501
16589
  },
16502
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.trackBtnText, isActive && { color: track.color, fontWeight: "600" }] }, track.icon, " ", track.name)
16590
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.trackBtnText, isActive && { color: track.color, fontWeight: "600" }] }, track.icon, " ", track.name)
16503
16591
  );
16504
- })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles6.sortGroup }, [
16592
+ })), /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: styles7.sortGroup }, [
16505
16593
  { key: "priority", label: "\u2195 Priority" },
16506
16594
  { key: "recent", label: "\u{1F550} Recent" },
16507
16595
  { key: "alpha", label: "A-Z" }
@@ -16509,41 +16597,41 @@ function TestListScreen({ nav }) {
16509
16597
  import_react_native6.TouchableOpacity,
16510
16598
  {
16511
16599
  key: s2.key,
16512
- style: [styles6.sortBtn, sortMode === s2.key && styles6.sortBtnActive],
16600
+ style: [styles7.sortBtn, sortMode === s2.key && styles7.sortBtnActive],
16513
16601
  onPress: () => setSortMode(s2.key)
16514
16602
  },
16515
- /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles6.sortBtnText, sortMode === s2.key && styles6.sortBtnTextActive] }, s2.label)
16603
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [styles7.sortBtnText, sortMode === s2.key && styles7.sortBtnTextActive] }, s2.label)
16516
16604
  )))), groupedAssignments.map((folder) => {
16517
16605
  const folderId = folder.group?.id || "ungrouped";
16518
16606
  const isCollapsed = collapsedFolders.has(folderId);
16519
16607
  const filtered = folder.assignments.filter(filterAssignment);
16520
16608
  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) => {
16609
+ 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
16610
  const badge = getStatusBadge(assignment.status);
16523
16611
  const isCurrent = currentAssignment?.id === assignment.id;
16524
16612
  return /* @__PURE__ */ import_react6.default.createElement(
16525
16613
  import_react_native6.TouchableOpacity,
16526
16614
  {
16527
16615
  key: assignment.id,
16528
- style: [styles6.testItem, isCurrent && styles6.testItemCurrent],
16616
+ style: [styles7.testItem, isCurrent && styles7.testItemCurrent],
16529
16617
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
16530
16618
  },
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,
16619
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.testBadge }, badge.icon),
16620
+ /* @__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: [
16621
+ styles7.retestTag,
16534
16622
  assignment.status === "passed" && { backgroundColor: colors.greenDark, borderColor: colors.greenBorder }
16535
16623
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16536
- styles6.retestTagText,
16624
+ styles7.retestTagText,
16537
16625
  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)))),
16626
+ ] }, 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
16627
  /* @__PURE__ */ import_react6.default.createElement(import_react_native6.View, { style: [
16540
- styles6.statusPill,
16628
+ styles7.statusPill,
16541
16629
  {
16542
16630
  backgroundColor: assignment.status === "passed" ? colors.greenDark : assignment.status === "failed" ? colors.redSurface : assignment.status === "in_progress" ? colors.blueSurface : colors.card,
16543
16631
  borderColor: assignment.status === "passed" ? colors.greenBorder : assignment.status === "failed" ? colors.redDark : assignment.status === "in_progress" ? colors.blueDark : colors.border
16544
16632
  }
16545
16633
  ] }, /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: [
16546
- styles6.statusPillText,
16634
+ styles7.statusPillText,
16547
16635
  {
16548
16636
  color: assignment.status === "passed" ? colors.greenMed : assignment.status === "failed" ? colors.redMed : assignment.status === "in_progress" ? colors.blueLight : colors.zincLight
16549
16637
  }
@@ -16553,12 +16641,12 @@ function TestListScreen({ nav }) {
16553
16641
  }), dashboardUrl && /* @__PURE__ */ import_react6.default.createElement(
16554
16642
  import_react_native6.TouchableOpacity,
16555
16643
  {
16556
- style: styles6.dashboardLink,
16644
+ style: styles7.dashboardLink,
16557
16645
  onPress: () => import_react_native6.Linking.openURL(`${dashboardUrl}/test-cases`),
16558
16646
  activeOpacity: 0.7
16559
16647
  },
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")));
16648
+ /* @__PURE__ */ import_react6.default.createElement(import_react_native6.Text, { style: styles7.dashboardLinkText }, "\u{1F310}", " Manage on Dashboard ", "\u2192")
16649
+ ), /* @__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
16650
  }
16563
16651
  function createStyles3() {
16564
16652
  return import_react_native6.StyleSheet.create({
@@ -16878,7 +16966,7 @@ var styles2 = import_react_native8.StyleSheet.create({
16878
16966
  // src/widget/screens/TestFeedbackScreen.tsx
16879
16967
  function TestFeedbackScreen({ status, assignmentId, nav }) {
16880
16968
  const { client, assignments, refreshAssignments, uploadImage, widgetColorScheme } = useBugBear();
16881
- const styles6 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16969
+ const styles7 = (0, import_react10.useMemo)(() => createStyles4(), [widgetColorScheme]);
16882
16970
  const images = useImageAttachments(uploadImage, 3, "screenshots");
16883
16971
  const [rating, setRating] = (0, import_react10.useState)(5);
16884
16972
  const [note, setNote] = (0, import_react10.useState)("");
@@ -16938,7 +17026,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16938
17026
  }
16939
17027
  }
16940
17028
  };
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?"), [
17029
+ 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
17030
  { key: "isOutdated", label: "Test is outdated" },
16943
17031
  { key: "needsMoreDetail", label: "Needs more detail" },
16944
17032
  { key: "stepsUnclear", label: "Steps are unclear" },
@@ -16947,15 +17035,15 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16947
17035
  import_react_native9.TouchableOpacity,
16948
17036
  {
16949
17037
  key,
16950
- style: [styles6.flagItem, flags[key] && styles6.flagItemActive],
17038
+ style: [styles7.flagItem, flags[key] && styles7.flagItemActive],
16951
17039
  onPress: () => setFlags((prev) => ({ ...prev, [key]: !prev[key] }))
16952
17040
  },
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)
17041
+ /* @__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")),
17042
+ /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: [styles7.flagText, flags[key] && styles7.flagTextActive] }, label)
16955
17043
  ))), /* @__PURE__ */ import_react10.default.createElement(
16956
17044
  import_react_native9.TextInput,
16957
17045
  {
16958
- style: styles6.noteInput,
17046
+ style: styles7.noteInput,
16959
17047
  value: note,
16960
17048
  onChangeText: setNote,
16961
17049
  placeholder: "Add a note (optional)",
@@ -16972,7 +17060,7 @@ function TestFeedbackScreen({ status, assignmentId, nav }) {
16972
17060
  onRemove: images.removeImage,
16973
17061
  label: "Screenshots (optional)"
16974
17062
  }
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"))));
17063
+ ), /* @__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
17064
  }
16977
17065
  function createStyles4() {
16978
17066
  return import_react_native9.StyleSheet.create({
@@ -17161,7 +17249,7 @@ var styles3 = import_react_native10.StyleSheet.create({
17161
17249
  // src/widget/screens/ReportScreen.tsx
17162
17250
  function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17163
17251
  const { client, getDeviceInfo, uploadImage, refreshAssignments, widgetColorScheme } = useBugBear();
17164
- const styles6 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17252
+ const styles7 = (0, import_react12.useMemo)(() => createStyles5(), [widgetColorScheme]);
17165
17253
  const [reportType, setReportType] = (0, import_react12.useState)(prefill?.type || "bug");
17166
17254
  const [severity, setSeverity] = (0, import_react12.useState)("medium");
17167
17255
  const [category, setCategory] = (0, import_react12.useState)(null);
@@ -17267,7 +17355,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17267
17355
  submittingRef.current = false;
17268
17356
  }
17269
17357
  };
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 }, [
17358
+ 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
17359
  { sev: "critical", color: colors.red },
17272
17360
  { sev: "high", color: colors.orange },
17273
17361
  { sev: "medium", color: colors.yellow },
@@ -17276,14 +17364,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17276
17364
  import_react_native11.TouchableOpacity,
17277
17365
  {
17278
17366
  key: sev,
17279
- style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17367
+ style: [styles7.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17280
17368
  onPress: () => setSeverity(sev)
17281
17369
  },
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(
17370
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles7.sevText, severity === sev && { color }] }, sev)
17371
+ )))), /* @__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
17372
  import_react_native11.TextInput,
17285
17373
  {
17286
- style: styles6.descInput,
17374
+ style: styles7.descInput,
17287
17375
  value: description,
17288
17376
  onChangeText: setDescription,
17289
17377
  placeholder: "Describe what you observed. What still doesn't work?",
@@ -17336,15 +17424,15 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17336
17424
  onRemove: images.removeImage,
17337
17425
  label: "Attachments (optional)"
17338
17426
  }
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(
17427
+ ), 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
17428
  import_react_native11.TouchableOpacity,
17341
17429
  {
17342
- style: [shared.primaryButton, styles6.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
17430
+ style: [shared.primaryButton, styles7.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
17343
17431
  onPress: handleSubmit,
17344
17432
  disabled: !description.trim() || submitting || images.isUploading
17345
17433
  },
17346
17434
  /* @__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 }, [
17435
+ )) : /* @__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
17436
  { type: "bug", label: "Bug", icon: "\u{1F41B}" },
17349
17437
  { type: "feedback", label: "Feedback", icon: "\u{1F4A1}" },
17350
17438
  { type: "suggestion", label: "Idea", icon: "\u2728" }
@@ -17352,12 +17440,12 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17352
17440
  import_react_native11.TouchableOpacity,
17353
17441
  {
17354
17442
  key: type,
17355
- style: [styles6.typeCard, reportType === type && styles6.typeCardActive],
17443
+ style: [styles7.typeCard, reportType === type && styles7.typeCardActive],
17356
17444
  onPress: () => setReportType(type)
17357
17445
  },
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 }, [
17446
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles7.typeIcon }, icon),
17447
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles7.typeLabel, reportType === type && styles7.typeLabelActive] }, label)
17448
+ ))), 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
17449
  { sev: "critical", color: colors.red },
17362
17450
  { sev: "high", color: colors.orange },
17363
17451
  { sev: "medium", color: colors.yellow },
@@ -17366,14 +17454,14 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17366
17454
  import_react_native11.TouchableOpacity,
17367
17455
  {
17368
17456
  key: sev,
17369
- style: [styles6.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17457
+ style: [styles7.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
17370
17458
  onPress: () => setSeverity(sev)
17371
17459
  },
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(
17460
+ /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: [styles7.sevText, severity === sev && { color }] }, sev)
17461
+ )))), 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
17462
  import_react_native11.TextInput,
17375
17463
  {
17376
- style: styles6.descInput,
17464
+ style: styles7.descInput,
17377
17465
  value: description,
17378
17466
  onChangeText: setDescription,
17379
17467
  placeholder: "Describe the issue...",
@@ -17416,16 +17504,16 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17416
17504
  issue.title
17417
17505
  ),
17418
17506
  /* @__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(
17507
+ )))), 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
17508
  import_react_native11.TextInput,
17421
17509
  {
17422
- style: styles6.screenInput,
17510
+ style: styles7.screenInput,
17423
17511
  value: affectedScreen,
17424
17512
  onChangeText: setAffectedScreen,
17425
17513
  placeholder: "e.g. Reservations, Settings...",
17426
17514
  placeholderTextColor: colors.textMuted
17427
17515
  }
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(
17516
+ ), /* @__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
17517
  ImagePickerButtons,
17430
17518
  {
17431
17519
  images: images.images,
@@ -17435,7 +17523,7 @@ function ReportScreen({ nav, prefill, autoCaptureUri, onAutoCaptureConsumed }) {
17435
17523
  onRemove: images.removeImage,
17436
17524
  label: "Screenshots (optional)"
17437
17525
  }
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(
17526
+ ), 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
17527
  import_react_native11.TouchableOpacity,
17440
17528
  {
17441
17529
  style: [shared.primaryButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
@@ -17475,12 +17563,12 @@ var import_react13 = __toESM(require("react"));
17475
17563
  var import_react_native12 = require("react-native");
17476
17564
  function ReportSuccessScreen({ nav }) {
17477
17565
  const { widgetColorScheme } = useBugBear();
17478
- const styles6 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17566
+ const styles7 = (0, import_react13.useMemo)(() => createStyles6(), [widgetColorScheme]);
17479
17567
  (0, import_react13.useEffect)(() => {
17480
17568
  const timer = setTimeout(() => nav.reset(), 2e3);
17481
17569
  return () => clearTimeout(timer);
17482
17570
  }, [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"));
17571
+ 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
17572
  }
17485
17573
  function createStyles6() {
17486
17574
  return import_react_native12.StyleSheet.create({
@@ -17496,7 +17584,7 @@ var import_react14 = __toESM(require("react"));
17496
17584
  var import_react_native13 = require("react-native");
17497
17585
  function MessageListScreen({ nav }) {
17498
17586
  const { threads, unreadCount, refreshThreads, dashboardUrl, isLoading, widgetColorScheme } = useBugBear();
17499
- const styles6 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17587
+ const styles7 = (0, import_react14.useMemo)(() => createStyles7(), [widgetColorScheme]);
17500
17588
  const [activeFilter, setActiveFilter] = (0, import_react14.useState)("all");
17501
17589
  const filteredThreads = threads.filter((thread) => {
17502
17590
  if (activeFilter === "all") return true;
@@ -17514,10 +17602,10 @@ function MessageListScreen({ nav }) {
17514
17602
  return /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, null, /* @__PURE__ */ import_react14.default.createElement(
17515
17603
  import_react_native13.TouchableOpacity,
17516
17604
  {
17517
- style: styles6.newMsgButton,
17605
+ style: styles7.newMsgButton,
17518
17606
  onPress: () => nav.push({ name: "COMPOSE_MESSAGE" })
17519
17607
  },
17520
- /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles6.newMsgText }, "\u2709\uFE0F New Message")
17608
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.newMsgText }, "\u2709\uFE0F New Message")
17521
17609
  ), /* @__PURE__ */ import_react14.default.createElement(
17522
17610
  import_react_native13.ScrollView,
17523
17611
  {
@@ -17562,20 +17650,20 @@ function MessageListScreen({ nav }) {
17562
17650
  import_react_native13.TouchableOpacity,
17563
17651
  {
17564
17652
  key: thread.id,
17565
- style: [styles6.threadItem, thread.unreadCount > 0 && styles6.threadItemUnread],
17653
+ style: [styles7.threadItem, thread.unreadCount > 0 && styles7.threadItemUnread],
17566
17654
  onPress: () => nav.push({ name: "THREAD_DETAIL", thread })
17567
17655
  },
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) }] }))
17656
+ /* @__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))),
17657
+ /* @__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
17658
  ))), dashboardUrl && /* @__PURE__ */ import_react14.default.createElement(
17571
17659
  import_react_native13.TouchableOpacity,
17572
17660
  {
17573
- style: styles6.dashboardLink,
17661
+ style: styles7.dashboardLink,
17574
17662
  onPress: () => import_react_native13.Linking.openURL(`${dashboardUrl}/discussions`),
17575
17663
  activeOpacity: 0.7
17576
17664
  },
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"))));
17665
+ /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles7.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
17666
+ ), /* @__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
17667
  }
17580
17668
  function createStyles7() {
17581
17669
  return import_react_native13.StyleSheet.create({
@@ -17608,7 +17696,7 @@ var import_react15 = __toESM(require("react"));
17608
17696
  var import_react_native14 = require("react-native");
17609
17697
  function ThreadDetailScreen({ thread, nav }) {
17610
17698
  const { getThreadMessages, sendMessage, markAsRead, uploadImage, widgetColorScheme } = useBugBear();
17611
- const styles6 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17699
+ const styles7 = (0, import_react15.useMemo)(() => createStyles8(), [widgetColorScheme]);
17612
17700
  const [messages, setMessages] = (0, import_react15.useState)([]);
17613
17701
  const [loading, setLoading] = (0, import_react15.useState)(true);
17614
17702
  const [replyText, setReplyText] = (0, import_react15.useState)("");
@@ -17660,20 +17748,20 @@ function ThreadDetailScreen({ thread, nav }) {
17660
17748
  }
17661
17749
  setSending(false);
17662
17750
  };
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(
17751
+ 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
17752
  import_react_native14.View,
17665
17753
  {
17666
17754
  key: msg.id,
17667
- style: [styles6.bubble, msg.senderType === "tester" ? styles6.bubbleTester : styles6.bubbleAdmin]
17755
+ style: [styles7.bubble, msg.senderType === "tester" ? styles7.bubbleTester : styles7.bubbleAdmin]
17668
17756
  },
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(
17757
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles7.sender, msg.senderType === "tester" && styles7.senderTester] }, msg.senderType === "tester" ? "You" : msg.senderName),
17758
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles7.content, msg.senderType === "tester" && styles7.contentTester] }, msg.content),
17759
+ 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" }))),
17760
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [styles7.time, msg.senderType === "tester" && styles7.timeTester] }, formatMessageTime(msg.createdAt))
17761
+ ))), 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
17762
  import_react_native14.TextInput,
17675
17763
  {
17676
- style: styles6.replyInput,
17764
+ style: styles7.replyInput,
17677
17765
  value: replyText,
17678
17766
  onChangeText: setReplyText,
17679
17767
  placeholder: "Type a reply...",
@@ -17684,11 +17772,11 @@ function ThreadDetailScreen({ thread, nav }) {
17684
17772
  ), /* @__PURE__ */ import_react15.default.createElement(
17685
17773
  import_react_native14.TouchableOpacity,
17686
17774
  {
17687
- style: [styles6.sendBtn, (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) && styles6.sendBtnDisabled],
17775
+ style: [styles7.sendBtn, (!replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading) && styles7.sendBtnDisabled],
17688
17776
  onPress: handleSend,
17689
17777
  disabled: !replyText.trim() && replyImages.images.length === 0 || sending || replyImages.isUploading
17690
17778
  },
17691
- /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles6.sendBtnText }, sending ? "..." : "Send")
17779
+ /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles7.sendBtnText }, sending ? "..." : "Send")
17692
17780
  )));
17693
17781
  }
17694
17782
  function createStyles8() {
@@ -17729,7 +17817,7 @@ var import_react16 = __toESM(require("react"));
17729
17817
  var import_react_native15 = require("react-native");
17730
17818
  function ComposeMessageScreen({ nav }) {
17731
17819
  const { createThread, uploadImage, widgetColorScheme } = useBugBear();
17732
- const styles6 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17820
+ const styles7 = (0, import_react16.useMemo)(() => createStyles9(), [widgetColorScheme]);
17733
17821
  const [subject, setSubject] = (0, import_react16.useState)("");
17734
17822
  const [message, setMessage] = (0, import_react16.useState)("");
17735
17823
  const [sending, setSending] = (0, import_react16.useState)(false);
@@ -17748,10 +17836,10 @@ function ComposeMessageScreen({ nav }) {
17748
17836
  nav.pop();
17749
17837
  }
17750
17838
  };
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(
17839
+ 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
17840
  import_react_native15.TextInput,
17753
17841
  {
17754
- style: styles6.subjectInput,
17842
+ style: styles7.subjectInput,
17755
17843
  value: subject,
17756
17844
  onChangeText: setSubject,
17757
17845
  placeholder: "What's this about?",
@@ -17761,7 +17849,7 @@ function ComposeMessageScreen({ nav }) {
17761
17849
  ), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: [shared.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ import_react16.default.createElement(
17762
17850
  import_react_native15.TextInput,
17763
17851
  {
17764
- style: styles6.messageInput,
17852
+ style: styles7.messageInput,
17765
17853
  value: message,
17766
17854
  onChangeText: setMessage,
17767
17855
  placeholder: "Write your message...",
@@ -17806,7 +17894,7 @@ var import_react17 = __toESM(require("react"));
17806
17894
  var import_react_native16 = require("react-native");
17807
17895
  function ProfileScreen({ nav }) {
17808
17896
  const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo, widgetColorScheme } = useBugBear();
17809
- const styles6 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17897
+ const styles7 = (0, import_react17.useMemo)(() => createStyles10(), [widgetColorScheme]);
17810
17898
  const [editing, setEditing] = (0, import_react17.useState)(false);
17811
17899
  const [name, setName] = (0, import_react17.useState)(testerInfo?.name || "");
17812
17900
  const [additionalEmails, setAdditionalEmails] = (0, import_react17.useState)(testerInfo?.additionalEmails || []);
@@ -17857,13 +17945,13 @@ function ProfileScreen({ nav }) {
17857
17945
  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
17946
  }
17859
17947
  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: () => {
17948
+ 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
17949
  setEditing(false);
17862
17950
  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(
17951
+ } }, /* @__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
17952
  import_react_native16.TextInput,
17865
17953
  {
17866
- style: [styles6.input, { flex: 1, marginRight: 8 }],
17954
+ style: [styles7.input, { flex: 1, marginRight: 8 }],
17867
17955
  value: newEmailInput,
17868
17956
  onChangeText: setNewEmailInput,
17869
17957
  placeholder: "Add email",
@@ -17871,17 +17959,17 @@ function ProfileScreen({ nav }) {
17871
17959
  keyboardType: "email-address",
17872
17960
  autoCapitalize: "none"
17873
17961
  }
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(
17962
+ ), /* @__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
17963
  import_react_native16.TouchableOpacity,
17876
17964
  {
17877
17965
  key,
17878
- style: [styles6.platformBtn, platforms.includes(key) && styles6.platformBtnActive],
17966
+ style: [styles7.platformBtn, platforms.includes(key) && styles7.platformBtnActive],
17879
17967
  onPress: () => setPlatforms((prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key])
17880
17968
  },
17881
- /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles6.platformText, platforms.includes(key) && styles6.platformTextActive] }, label)
17969
+ /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles7.platformText, platforms.includes(key) && styles7.platformTextActive] }, label)
17882
17970
  )))), /* @__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
17971
  }
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(
17972
+ 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
17973
  import_react_native16.TouchableOpacity,
17886
17974
  {
17887
17975
  style: [shared.primaryButton, { marginTop: 20 }],
@@ -17939,7 +18027,7 @@ var CATEGORIES = ["open", "done", "reopened"];
17939
18027
  var SEVERITY_ORDER2 = { critical: 0, high: 1, medium: 2, low: 3 };
17940
18028
  function IssueListScreen({ nav, category }) {
17941
18029
  const { client, widgetColorScheme } = useBugBear();
17942
- const styles6 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
18030
+ const styles7 = (0, import_react18.useMemo)(() => createStyles11(), [widgetColorScheme]);
17943
18031
  const CATEGORY_CONFIG = (0, import_react18.useMemo)(() => ({
17944
18032
  open: { label: "Open", accent: colors.orange, emptyIcon: "\u2705", emptyText: "No open issues" },
17945
18033
  done: { label: "Done", accent: colors.green, emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
@@ -18009,7 +18097,7 @@ function IssueListScreen({ nav, category }) {
18009
18097
  const searchFilteredIssues = debouncedQuery ? sortedIssues.filter(
18010
18098
  (issue) => (issue.title || "").toLowerCase().includes(debouncedQuery.toLowerCase()) || (issue.description || "").toLowerCase().includes(debouncedQuery.toLowerCase())
18011
18099
  ) : 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) => {
18100
+ 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
18101
  const catConfig = CATEGORY_CONFIG[cat];
18014
18102
  const isActive = activeCategory === cat;
18015
18103
  const count = counts?.[cat];
@@ -18018,7 +18106,7 @@ function IssueListScreen({ nav, category }) {
18018
18106
  {
18019
18107
  key: cat,
18020
18108
  style: [
18021
- styles6.tab,
18109
+ styles7.tab,
18022
18110
  { borderBottomColor: isActive ? catConfig.accent : "transparent" }
18023
18111
  ],
18024
18112
  onPress: () => {
@@ -18028,20 +18116,20 @@ function IssueListScreen({ nav, category }) {
18028
18116
  activeOpacity: 0.7
18029
18117
  },
18030
18118
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
18031
- styles6.tabLabel,
18119
+ styles7.tabLabel,
18032
18120
  isActive && { fontWeight: "600", color: colors.textPrimary }
18033
18121
  ] }, catConfig.label),
18034
18122
  count !== void 0 && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [
18035
- styles6.countBadge,
18123
+ styles7.countBadge,
18036
18124
  {
18037
18125
  backgroundColor: isActive ? catConfig.accent + "18" : colors.card
18038
18126
  }
18039
18127
  ] }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
18040
- styles6.countText,
18128
+ styles7.countText,
18041
18129
  { color: isActive ? catConfig.accent : colors.textDim }
18042
18130
  ] }, count))
18043
18131
  );
18044
- })), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles6.sortRow }, [
18132
+ })), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles7.sortRow }, [
18045
18133
  { key: "severity", label: "Severity" },
18046
18134
  { key: "recent", label: "Recent" }
18047
18135
  ].map((s2) => /* @__PURE__ */ import_react18.default.createElement(
@@ -18049,14 +18137,14 @@ function IssueListScreen({ nav, category }) {
18049
18137
  {
18050
18138
  key: s2.key,
18051
18139
  style: [
18052
- styles6.sortBtn,
18053
- sortMode === s2.key && styles6.sortBtnActive
18140
+ styles7.sortBtn,
18141
+ sortMode === s2.key && styles7.sortBtnActive
18054
18142
  ],
18055
18143
  onPress: () => setSortMode(s2.key)
18056
18144
  },
18057
18145
  /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [
18058
- styles6.sortBtnText,
18059
- sortMode === s2.key && styles6.sortBtnTextActive
18146
+ styles7.sortBtnText,
18147
+ sortMode === s2.key && styles7.sortBtnTextActive
18060
18148
  ] }, s2.label)
18061
18149
  ))), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: { paddingHorizontal: 16, paddingBottom: 12 } }, /* @__PURE__ */ import_react18.default.createElement(
18062
18150
  import_react_native17.TextInput,
@@ -18076,18 +18164,18 @@ function IssueListScreen({ nav, category }) {
18076
18164
  fontSize: 13
18077
18165
  }
18078
18166
  }
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(
18167
+ )), 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
18168
  import_react_native17.TouchableOpacity,
18081
18169
  {
18082
18170
  key: issue.id,
18083
- style: styles6.issueCard,
18171
+ style: styles7.issueCard,
18084
18172
  onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
18085
18173
  activeOpacity: 0.7
18086
18174
  },
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))
18175
+ /* @__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)),
18176
+ /* @__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))),
18177
+ 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)),
18178
+ 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
18179
  )));
18092
18180
  }
18093
18181
  function createStyles11() {
@@ -18246,7 +18334,7 @@ var import_react_native18 = require("react-native");
18246
18334
  var DONE_STATUSES = ["verified", "resolved", "closed", "reviewed"];
18247
18335
  function IssueDetailScreen({ nav, issue }) {
18248
18336
  const { dashboardUrl, widgetColorScheme, reopenReport } = useBugBear();
18249
- const styles6 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18337
+ const styles7 = (0, import_react19.useMemo)(() => createStyles12(), [widgetColorScheme]);
18250
18338
  const [showReopenForm, setShowReopenForm] = (0, import_react19.useState)(false);
18251
18339
  const [reopenReason, setReopenReason] = (0, import_react19.useState)("");
18252
18340
  const [isSubmitting, setIsSubmitting] = (0, import_react19.useState)(false);
@@ -18288,44 +18376,44 @@ function IssueDetailScreen({ nav, issue }) {
18288
18376
  setReopenError(result.error || "Failed to reopen");
18289
18377
  }
18290
18378
  }, [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(
18379
+ 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
18380
  import_react_native18.TouchableOpacity,
18293
18381
  {
18294
- style: styles6.reopenButton,
18382
+ style: styles7.reopenButton,
18295
18383
  onPress: () => setShowReopenForm(true),
18296
18384
  activeOpacity: 0.7
18297
18385
  },
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(
18386
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenButtonText }, "\u{1F504}", " Not Fixed \u2014 Reopen Issue")
18387
+ ), 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
18388
  import_react_native18.TextInput,
18301
18389
  {
18302
18390
  value: reopenReason,
18303
18391
  onChangeText: setReopenReason,
18304
18392
  placeholder: "Describe what you're still seeing...",
18305
18393
  placeholderTextColor: colors.textMuted,
18306
- style: styles6.reopenInput,
18394
+ style: styles7.reopenInput,
18307
18395
  multiline: true,
18308
18396
  autoFocus: true
18309
18397
  }
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(
18398
+ ), 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
18399
  import_react_native18.TouchableOpacity,
18312
18400
  {
18313
18401
  style: [
18314
- styles6.reopenSubmitButton,
18315
- (!reopenReason.trim() || isSubmitting) && styles6.reopenSubmitDisabled
18402
+ styles7.reopenSubmitButton,
18403
+ (!reopenReason.trim() || isSubmitting) && styles7.reopenSubmitDisabled
18316
18404
  ],
18317
18405
  onPress: handleReopen,
18318
18406
  disabled: isSubmitting || !reopenReason.trim(),
18319
18407
  activeOpacity: 0.7
18320
18408
  },
18321
18409
  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
18410
+ styles7.reopenSubmitText,
18411
+ !reopenReason.trim() && styles7.reopenSubmitTextDisabled
18324
18412
  ] }, "Reopen Issue")
18325
18413
  ), /* @__PURE__ */ import_react19.default.createElement(
18326
18414
  import_react_native18.TouchableOpacity,
18327
18415
  {
18328
- style: styles6.reopenCancelButton,
18416
+ style: styles7.reopenCancelButton,
18329
18417
  onPress: () => {
18330
18418
  setShowReopenForm(false);
18331
18419
  setReopenReason("");
@@ -18334,7 +18422,7 @@ function IssueDetailScreen({ nav, issue }) {
18334
18422
  disabled: isSubmitting,
18335
18423
  activeOpacity: 0.7
18336
18424
  },
18337
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.reopenCancelText }, "Cancel")
18425
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.reopenCancelText }, "Cancel")
18338
18426
  ))), issue.status === "ready_to_test" && (issue.fixCommitSha || issue.resolutionNotes) && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: {
18339
18427
  backgroundColor: "rgba(59, 130, 246, 0.1)",
18340
18428
  borderWidth: 1,
@@ -18342,14 +18430,14 @@ function IssueDetailScreen({ nav, issue }) {
18342
18430
  borderRadius: 8,
18343
18431
  padding: 12,
18344
18432
  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(
18433
+ } }, /* @__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
18434
  import_react_native18.TouchableOpacity,
18347
18435
  {
18348
- style: styles6.dashboardLink,
18436
+ style: styles7.dashboardLink,
18349
18437
  onPress: () => import_react_native18.Linking.openURL(`${dashboardUrl}/reports`),
18350
18438
  activeOpacity: 0.7
18351
18439
  },
18352
- /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles6.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
18440
+ /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles7.dashboardLinkText }, "\u{1F310}", " View on Dashboard ", "\u2192")
18353
18441
  ));
18354
18442
  }
18355
18443
  function createStyles12() {
@@ -18606,7 +18694,7 @@ var import_react20 = __toESM(require("react"));
18606
18694
  var import_react_native19 = require("react-native");
18607
18695
  function SessionStartScreen({ nav }) {
18608
18696
  const { startSession, assignments, widgetColorScheme } = useBugBear();
18609
- const styles6 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18697
+ const styles7 = (0, import_react20.useMemo)(() => createStyles13(), [widgetColorScheme]);
18610
18698
  const [focusArea, setFocusArea] = (0, import_react20.useState)("");
18611
18699
  const [isStarting, setIsStarting] = (0, import_react20.useState)(false);
18612
18700
  const [error, setError] = (0, import_react20.useState)(null);
@@ -18633,35 +18721,35 @@ function SessionStartScreen({ nav }) {
18633
18721
  setIsStarting(false);
18634
18722
  }
18635
18723
  };
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(
18724
+ 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
18725
  import_react_native19.TextInput,
18638
18726
  {
18639
18727
  value: focusArea,
18640
18728
  onChangeText: setFocusArea,
18641
18729
  placeholder: "e.g. Checkout flow, Settings page...",
18642
18730
  placeholderTextColor: colors.textMuted,
18643
- style: styles6.input,
18731
+ style: styles7.input,
18644
18732
  returnKeyType: "done",
18645
18733
  onSubmitEditing: handleStart
18646
18734
  }
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(
18735
+ )), 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
18736
  import_react_native19.TouchableOpacity,
18649
18737
  {
18650
18738
  key: name,
18651
- style: [styles6.chip, focusArea === name && styles6.chipActive],
18739
+ style: [styles7.chip, focusArea === name && styles7.chipActive],
18652
18740
  onPress: () => setFocusArea(name),
18653
18741
  activeOpacity: 0.7
18654
18742
  },
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(
18743
+ /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: [styles7.chipText, focusArea === name && styles7.chipTextActive] }, name)
18744
+ )))), 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
18745
  import_react_native19.TouchableOpacity,
18658
18746
  {
18659
- style: [styles6.startBtn, isStarting && styles6.startBtnDisabled],
18747
+ style: [styles7.startBtn, isStarting && styles7.startBtnDisabled],
18660
18748
  onPress: handleStart,
18661
18749
  disabled: isStarting,
18662
18750
  activeOpacity: 0.8
18663
18751
  },
18664
- /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles6.startBtnText }, isStarting ? "Starting..." : "\u25B6 Start Session")
18752
+ /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles7.startBtnText }, isStarting ? "Starting..." : "\u25B6 Start Session")
18665
18753
  ));
18666
18754
  }
18667
18755
  function createStyles13() {
@@ -18770,7 +18858,7 @@ var import_react21 = __toESM(require("react"));
18770
18858
  var import_react_native20 = require("react-native");
18771
18859
  function SessionActiveScreen({ nav }) {
18772
18860
  const { activeSession, sessionFindings, endSession, refreshSession, widgetColorScheme } = useBugBear();
18773
- const styles6 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18861
+ const styles7 = (0, import_react21.useMemo)(() => createStyles14(), [widgetColorScheme]);
18774
18862
  const FINDING_TYPE_CONFIG = (0, import_react21.useMemo)(() => ({
18775
18863
  bug: { icon: "\u{1F41B}", label: "Bug", color: colors.red },
18776
18864
  concern: { icon: "\u26A0\uFE0F", label: "Concern", color: colors.amber },
@@ -18812,30 +18900,38 @@ function SessionActiveScreen({ nav }) {
18812
18900
  }
18813
18901
  };
18814
18902
  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")));
18903
+ 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
18904
  }
18817
18905
  const renderFinding = (finding) => {
18818
18906
  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"))));
18907
+ 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
18908
  };
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(
18909
+ 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
18910
  import_react_native20.TouchableOpacity,
18823
18911
  {
18824
- style: styles6.addFindingBtn,
18912
+ style: styles7.addFindingBtn,
18825
18913
  onPress: () => nav.push({ name: "SESSION_FINDING" }),
18826
18914
  activeOpacity: 0.8
18827
18915
  },
18828
- /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles6.addFindingText }, "+ Add Finding")
18916
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.addFindingText }, "+ Add Finding")
18917
+ ), nav.minimizeToAdHoc && /* @__PURE__ */ import_react21.default.createElement(
18918
+ import_react_native20.TouchableOpacity,
18919
+ {
18920
+ style: styles7.minimizeBtn,
18921
+ onPress: nav.minimizeToAdHoc,
18922
+ activeOpacity: 0.8
18923
+ },
18924
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.minimizeBtnText }, "\u2199")
18829
18925
  ), /* @__PURE__ */ import_react21.default.createElement(
18830
18926
  import_react_native20.TouchableOpacity,
18831
18927
  {
18832
- style: [styles6.endBtn, isEnding && styles6.endBtnDisabled],
18928
+ style: [styles7.endBtn, isEnding && styles7.endBtnDisabled],
18833
18929
  onPress: handleEnd,
18834
18930
  disabled: isEnding,
18835
18931
  activeOpacity: 0.8
18836
18932
  },
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)));
18933
+ /* @__PURE__ */ import_react21.default.createElement(import_react_native20.Text, { style: styles7.endBtnText }, isEnding ? "..." : "End")
18934
+ )), /* @__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
18935
  }
18840
18936
  function createStyles14() {
18841
18937
  return import_react_native20.StyleSheet.create({
@@ -18912,6 +19008,21 @@ function createStyles14() {
18912
19008
  fontWeight: "600",
18913
19009
  color: colors.blueLight
18914
19010
  },
19011
+ minimizeBtn: {
19012
+ paddingVertical: 12,
19013
+ paddingHorizontal: 16,
19014
+ backgroundColor: colors.card,
19015
+ borderWidth: 1,
19016
+ borderColor: colors.border,
19017
+ borderRadius: 10,
19018
+ alignItems: "center",
19019
+ justifyContent: "center"
19020
+ },
19021
+ minimizeBtnText: {
19022
+ fontSize: 14,
19023
+ fontWeight: "600",
19024
+ color: colors.textSecondary
19025
+ },
18915
19026
  endBtn: {
18916
19027
  paddingVertical: 12,
18917
19028
  paddingHorizontal: 16,
@@ -19013,7 +19124,7 @@ var FINDING_TYPES = [
19013
19124
  ];
19014
19125
  function SessionFindingScreen({ nav }) {
19015
19126
  const { addFinding, widgetColorScheme } = useBugBear();
19016
- const styles6 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
19127
+ const styles7 = (0, import_react22.useMemo)(() => createStyles15(), [widgetColorScheme]);
19017
19128
  const SEVERITIES = (0, import_react22.useMemo)(() => [
19018
19129
  { value: "critical", label: "Critical", color: colors.red },
19019
19130
  { value: "high", label: "High", color: colors.orange },
@@ -19045,46 +19156,46 @@ function SessionFindingScreen({ nav }) {
19045
19156
  }
19046
19157
  };
19047
19158
  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(
19159
+ 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
19160
  import_react_native21.TouchableOpacity,
19050
19161
  {
19051
19162
  key: ft.value,
19052
- style: [styles6.typePill, type === ft.value && styles6.typePillActive],
19163
+ style: [styles7.typePill, type === ft.value && styles7.typePillActive],
19053
19164
  onPress: () => setType(ft.value),
19054
19165
  activeOpacity: 0.7
19055
19166
  },
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(
19167
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: styles7.typePillIcon }, ft.icon),
19168
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles7.typePillLabel, type === ft.value && styles7.typePillLabelActive] }, ft.label)
19169
+ )))), /* @__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
19170
  import_react_native21.TouchableOpacity,
19060
19171
  {
19061
19172
  key: s2.value,
19062
19173
  style: [
19063
- styles6.severityPill,
19174
+ styles7.severityPill,
19064
19175
  severity === s2.value && { backgroundColor: `${s2.color}20`, borderColor: s2.color }
19065
19176
  ],
19066
19177
  onPress: () => setSeverity(s2.value),
19067
19178
  activeOpacity: 0.7
19068
19179
  },
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(
19180
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles7.severityText, severity === s2.value && { color: s2.color }] }, s2.label)
19181
+ )))), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19071
19182
  import_react_native21.TextInput,
19072
19183
  {
19073
19184
  value: title,
19074
19185
  onChangeText: setTitle,
19075
19186
  placeholder: "What did you find?",
19076
19187
  placeholderTextColor: colors.textMuted,
19077
- style: styles6.titleInput,
19188
+ style: styles7.titleInput,
19078
19189
  returnKeyType: "next"
19079
19190
  }
19080
- )), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles6.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19191
+ )), /* @__PURE__ */ import_react22.default.createElement(import_react_native21.View, { style: styles7.inputSection }, /* @__PURE__ */ import_react22.default.createElement(
19081
19192
  import_react_native21.TextInput,
19082
19193
  {
19083
19194
  value: description,
19084
19195
  onChangeText: setDescription,
19085
19196
  placeholder: "Details (optional)",
19086
19197
  placeholderTextColor: colors.textMuted,
19087
- style: styles6.descInput,
19198
+ style: styles7.descInput,
19088
19199
  multiline: true,
19089
19200
  numberOfLines: 3,
19090
19201
  textAlignVertical: "top"
@@ -19092,12 +19203,12 @@ function SessionFindingScreen({ nav }) {
19092
19203
  )), /* @__PURE__ */ import_react22.default.createElement(
19093
19204
  import_react_native21.TouchableOpacity,
19094
19205
  {
19095
- style: [styles6.submitBtn, !canSubmit && styles6.submitBtnDisabled],
19206
+ style: [styles7.submitBtn, !canSubmit && styles7.submitBtnDisabled],
19096
19207
  onPress: handleSubmit,
19097
19208
  disabled: !canSubmit,
19098
19209
  activeOpacity: 0.8
19099
19210
  },
19100
- /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles6.submitBtnText, !canSubmit && styles6.submitBtnTextDisabled] }, isSubmitting ? "Saving..." : "Save Finding")
19211
+ /* @__PURE__ */ import_react22.default.createElement(import_react_native21.Text, { style: [styles7.submitBtnText, !canSubmit && styles7.submitBtnTextDisabled] }, isSubmitting ? "Saving..." : "Save Finding")
19101
19212
  ));
19102
19213
  }
19103
19214
  function createStyles15() {
@@ -19215,6 +19326,10 @@ var import_react_native22 = require("react-native");
19215
19326
  var screenWidth = import_react_native22.Dimensions.get("window").width;
19216
19327
  var screenHeight = import_react_native22.Dimensions.get("window").height;
19217
19328
  var RUNNER_WIDTH = 280;
19329
+ var RUNNER_MARGIN = 16;
19330
+ var MIN_Y = 80;
19331
+ var BOTTOM_SAFE_PADDING = import_react_native22.Platform.OS === "ios" ? 34 : 24;
19332
+ var SAFE_MAX_Y = screenHeight - 200 - BOTTOM_SAFE_PADDING;
19218
19333
  function MiniTestRunner({ assignmentId, onExpand, onComplete, onAdvance, onNavigateToReport }) {
19219
19334
  const { client, assignments, refreshAssignments } = useBugBear();
19220
19335
  const assignment = assignments.find((a) => a.id === assignmentId);
@@ -19229,8 +19344,8 @@ function MiniTestRunner({ assignmentId, onExpand, onComplete, onAdvance, onNavig
19229
19344
  setCurrentStepIndex(0);
19230
19345
  }, [assignmentId]);
19231
19346
  const pan = (0, import_react23.useRef)(new import_react_native22.Animated.ValueXY({
19232
- x: screenWidth - RUNNER_WIDTH - 16,
19233
- y: screenHeight - 220
19347
+ x: screenWidth - RUNNER_WIDTH - RUNNER_MARGIN,
19348
+ y: SAFE_MAX_Y
19234
19349
  })).current;
19235
19350
  const panResponder = (0, import_react23.useRef)(
19236
19351
  import_react_native22.PanResponder.create({
@@ -19238,8 +19353,8 @@ function MiniTestRunner({ assignmentId, onExpand, onComplete, onAdvance, onNavig
19238
19353
  onMoveShouldSetPanResponder: (_, gs) => Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5,
19239
19354
  onPanResponderGrant: () => {
19240
19355
  pan.setOffset({
19241
- x: getAnimatedValue(pan.x),
19242
- y: getAnimatedValue(pan.y)
19356
+ x: Math.max(RUNNER_MARGIN, Math.min(getAnimatedValue(pan.x), screenWidth - RUNNER_WIDTH - RUNNER_MARGIN)),
19357
+ y: Math.max(MIN_Y, Math.min(getAnimatedValue(pan.y), SAFE_MAX_Y))
19243
19358
  });
19244
19359
  pan.setValue({ x: 0, y: 0 });
19245
19360
  },
@@ -19251,8 +19366,8 @@ function MiniTestRunner({ assignmentId, onExpand, onComplete, onAdvance, onNavig
19251
19366
  pan.flattenOffset();
19252
19367
  const currentX = getAnimatedValue(pan.x);
19253
19368
  const currentY = getAnimatedValue(pan.y);
19254
- const snapX = currentX < screenWidth / 2 ? 16 : screenWidth - RUNNER_WIDTH - 16;
19255
- const snapY = Math.max(80, Math.min(currentY, screenHeight - 200));
19369
+ const snapX = currentX < screenWidth / 2 ? RUNNER_MARGIN : screenWidth - RUNNER_WIDTH - RUNNER_MARGIN;
19370
+ const snapY = Math.max(MIN_Y, Math.min(currentY, SAFE_MAX_Y));
19256
19371
  import_react_native22.Animated.spring(pan, {
19257
19372
  toValue: { x: snapX, y: snapY },
19258
19373
  useNativeDriver: false,
@@ -19478,9 +19593,365 @@ var styles4 = import_react_native22.StyleSheet.create({
19478
19593
  }
19479
19594
  });
19480
19595
 
19481
- // src/BugBearButton.tsx
19596
+ // src/widget/AdHocOverlay.tsx
19597
+ var import_react24 = __toESM(require("react"));
19598
+ var import_react_native23 = require("react-native");
19482
19599
  var screenWidth2 = import_react_native23.Dimensions.get("window").width;
19483
19600
  var screenHeight2 = import_react_native23.Dimensions.get("window").height;
19601
+ var OVERLAY_WIDTH = 280;
19602
+ var OVERLAY_MARGIN = 16;
19603
+ var MIN_Y2 = 80;
19604
+ var BOTTOM_SAFE_PADDING2 = import_react_native23.Platform.OS === "ios" ? 34 : 24;
19605
+ var SAFE_MAX_Y2 = screenHeight2 - 200 - BOTTOM_SAFE_PADDING2;
19606
+ function AdHocOverlay({ sessionId, focusArea, startedAt, onExpand, onComplete }) {
19607
+ const { client, addFinding, endSession, activeSession } = useBugBear();
19608
+ const [inputMode, setInputMode] = (0, import_react24.useState)("closed");
19609
+ const [inputText, setInputText] = (0, import_react24.useState)("");
19610
+ const [isSubmitting, setIsSubmitting] = (0, import_react24.useState)(false);
19611
+ const [flashMessage, setFlashMessage] = (0, import_react24.useState)(null);
19612
+ const [elapsedTime, setElapsedTime] = (0, import_react24.useState)(0);
19613
+ const inputRef = (0, import_react24.useRef)(null);
19614
+ const screenshotRef = (0, import_react24.useRef)(null);
19615
+ const mountAnim = (0, import_react24.useRef)(new import_react_native23.Animated.Value(0)).current;
19616
+ (0, import_react24.useEffect)(() => {
19617
+ import_react_native23.Animated.spring(mountAnim, { toValue: 1, useNativeDriver: true, tension: 80, friction: 10 }).start();
19618
+ }, []);
19619
+ const pan = (0, import_react24.useRef)(new import_react_native23.Animated.ValueXY({
19620
+ x: screenWidth2 - OVERLAY_WIDTH - OVERLAY_MARGIN,
19621
+ y: SAFE_MAX_Y2
19622
+ })).current;
19623
+ const panResponder = (0, import_react24.useRef)(
19624
+ import_react_native23.PanResponder.create({
19625
+ onStartShouldSetPanResponder: () => true,
19626
+ onMoveShouldSetPanResponder: (_, gs) => Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5,
19627
+ onPanResponderGrant: () => {
19628
+ pan.setOffset({
19629
+ x: Math.max(OVERLAY_MARGIN, Math.min(getAnimatedValue(pan.x), screenWidth2 - OVERLAY_WIDTH - OVERLAY_MARGIN)),
19630
+ y: Math.max(MIN_Y2, Math.min(getAnimatedValue(pan.y), SAFE_MAX_Y2))
19631
+ });
19632
+ pan.setValue({ x: 0, y: 0 });
19633
+ },
19634
+ onPanResponderMove: import_react_native23.Animated.event(
19635
+ [null, { dx: pan.x, dy: pan.y }],
19636
+ { useNativeDriver: false }
19637
+ ),
19638
+ onPanResponderRelease: () => {
19639
+ pan.flattenOffset();
19640
+ const currentX = getAnimatedValue(pan.x);
19641
+ const currentY = getAnimatedValue(pan.y);
19642
+ const snapX = currentX < screenWidth2 / 2 ? OVERLAY_MARGIN : screenWidth2 - OVERLAY_WIDTH - OVERLAY_MARGIN;
19643
+ const snapY = Math.max(MIN_Y2, Math.min(currentY, SAFE_MAX_Y2));
19644
+ import_react_native23.Animated.spring(pan, {
19645
+ toValue: { x: snapX, y: snapY },
19646
+ useNativeDriver: false,
19647
+ friction: 7,
19648
+ tension: 40
19649
+ }).start();
19650
+ }
19651
+ })
19652
+ ).current;
19653
+ (0, import_react24.useEffect)(() => {
19654
+ const startTime = new Date(startedAt).getTime();
19655
+ setElapsedTime(Math.floor((Date.now() - startTime) / 1e3));
19656
+ const interval = setInterval(() => {
19657
+ setElapsedTime(Math.floor((Date.now() - startTime) / 1e3));
19658
+ }, 1e3);
19659
+ return () => clearInterval(interval);
19660
+ }, [startedAt]);
19661
+ (0, import_react24.useEffect)(() => {
19662
+ if (inputMode !== "closed") {
19663
+ setTimeout(() => inputRef.current?.focus(), 50);
19664
+ }
19665
+ }, [inputMode]);
19666
+ const handleOpenInput = (0, import_react24.useCallback)(async (mode) => {
19667
+ import_react_native23.Keyboard.dismiss();
19668
+ const uri = await captureAppScreen();
19669
+ screenshotRef.current = uri;
19670
+ setInputMode(mode);
19671
+ setInputText("");
19672
+ }, []);
19673
+ const handleCancel = (0, import_react24.useCallback)(() => {
19674
+ import_react_native23.Keyboard.dismiss();
19675
+ setInputMode("closed");
19676
+ setInputText("");
19677
+ screenshotRef.current = null;
19678
+ }, []);
19679
+ const handleSend = (0, import_react24.useCallback)(async () => {
19680
+ if (!inputText.trim() || isSubmitting) return;
19681
+ import_react_native23.Keyboard.dismiss();
19682
+ setIsSubmitting(true);
19683
+ try {
19684
+ let screenshotUrl;
19685
+ if (screenshotRef.current && client) {
19686
+ screenshotUrl = await client.uploadImageFromUri(screenshotRef.current) || void 0;
19687
+ }
19688
+ const enhanced = contextCapture.getEnhancedContext();
19689
+ await addFinding({
19690
+ type: inputMode === "bug" ? "bug" : "concern",
19691
+ title: inputText.trim(),
19692
+ severity: inputMode === "bug" ? "medium" : "observation",
19693
+ screenshotUrl,
19694
+ consoleLogs: enhanced.consoleLogs,
19695
+ networkSnapshot: enhanced.networkRequests
19696
+ });
19697
+ setFlashMessage("Saved!");
19698
+ setInputMode("closed");
19699
+ setInputText("");
19700
+ screenshotRef.current = null;
19701
+ setTimeout(() => setFlashMessage(null), 1500);
19702
+ } finally {
19703
+ setIsSubmitting(false);
19704
+ }
19705
+ }, [inputText, isSubmitting, inputMode, client, addFinding]);
19706
+ const handleComplete = (0, import_react24.useCallback)(async () => {
19707
+ if (isSubmitting) return;
19708
+ import_react_native23.Keyboard.dismiss();
19709
+ setIsSubmitting(true);
19710
+ try {
19711
+ const result = await endSession();
19712
+ if (result.success) {
19713
+ const mins = activeSession?.durationMinutes ?? Math.round(elapsedTime / 60);
19714
+ const findings = activeSession?.findingsCount ?? 0;
19715
+ setFlashMessage(`Session complete! ${mins} min, ${findings} finding${findings !== 1 ? "s" : ""}`);
19716
+ setTimeout(() => {
19717
+ setFlashMessage(null);
19718
+ onComplete();
19719
+ }, 2e3);
19720
+ }
19721
+ } finally {
19722
+ setIsSubmitting(false);
19723
+ }
19724
+ }, [isSubmitting, endSession, activeSession, elapsedTime, onComplete]);
19725
+ return /* @__PURE__ */ import_react24.default.createElement(
19726
+ import_react_native23.Animated.View,
19727
+ {
19728
+ style: [
19729
+ styles5.container,
19730
+ {
19731
+ opacity: mountAnim,
19732
+ transform: [
19733
+ ...pan.getTranslateTransform(),
19734
+ { scale: mountAnim.interpolate({ inputRange: [0, 1], outputRange: [0.8, 1] }) }
19735
+ ]
19736
+ }
19737
+ ],
19738
+ ...panResponder.panHandlers
19739
+ },
19740
+ /* @__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"))),
19741
+ 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,
19742
+ inputMode !== "closed" && !flashMessage ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.inputArea }, /* @__PURE__ */ import_react24.default.createElement(
19743
+ import_react_native23.TextInput,
19744
+ {
19745
+ ref: inputRef,
19746
+ value: inputText,
19747
+ onChangeText: setInputText,
19748
+ placeholder: inputMode === "bug" ? "What went wrong?" : "What did you notice?",
19749
+ placeholderTextColor: colors.textDim,
19750
+ multiline: true,
19751
+ numberOfLines: 2,
19752
+ style: styles5.textInput
19753
+ }
19754
+ ), /* @__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(
19755
+ import_react_native23.TouchableOpacity,
19756
+ {
19757
+ onPress: handleSend,
19758
+ disabled: !inputText.trim() || isSubmitting,
19759
+ style: [
19760
+ styles5.sendBtn,
19761
+ { backgroundColor: inputMode === "bug" ? colors.red : colors.blue },
19762
+ (!inputText.trim() || isSubmitting) && { opacity: 0.5 }
19763
+ ]
19764
+ },
19765
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.sendText }, isSubmitting ? "Sending..." : "Send \u2192")
19766
+ ))) : null,
19767
+ inputMode === "closed" && !flashMessage ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles5.actions }, /* @__PURE__ */ import_react24.default.createElement(
19768
+ import_react_native23.TouchableOpacity,
19769
+ {
19770
+ style: [styles5.feedbackBtn, isSubmitting && { opacity: 0.5 }],
19771
+ onPress: () => handleOpenInput("feedback"),
19772
+ disabled: isSubmitting
19773
+ },
19774
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.feedbackText }, "Feedback")
19775
+ ), /* @__PURE__ */ import_react24.default.createElement(
19776
+ import_react_native23.TouchableOpacity,
19777
+ {
19778
+ style: [styles5.bugBtn, isSubmitting && { opacity: 0.5 }],
19779
+ onPress: () => handleOpenInput("bug"),
19780
+ disabled: isSubmitting
19781
+ },
19782
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.bugText }, "Bug")
19783
+ ), /* @__PURE__ */ import_react24.default.createElement(
19784
+ import_react_native23.TouchableOpacity,
19785
+ {
19786
+ style: [styles5.completeBtn, isSubmitting && { opacity: 0.5 }],
19787
+ onPress: handleComplete,
19788
+ disabled: isSubmitting
19789
+ },
19790
+ /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles5.completeText }, "Complete")
19791
+ )) : null
19792
+ );
19793
+ }
19794
+ var styles5 = import_react_native23.StyleSheet.create({
19795
+ container: {
19796
+ position: "absolute",
19797
+ width: OVERLAY_WIDTH,
19798
+ zIndex: 9999,
19799
+ backgroundColor: colors.bg,
19800
+ borderRadius: 12,
19801
+ borderWidth: 1,
19802
+ borderColor: colors.border,
19803
+ shadowColor: "#000",
19804
+ shadowOffset: { width: 0, height: 8 },
19805
+ shadowOpacity: 0.4,
19806
+ shadowRadius: 16,
19807
+ elevation: 20,
19808
+ overflow: "hidden"
19809
+ },
19810
+ header: {
19811
+ backgroundColor: colors.bgDarker,
19812
+ paddingVertical: 6,
19813
+ paddingHorizontal: 12,
19814
+ flexDirection: "row",
19815
+ alignItems: "center",
19816
+ justifyContent: "space-between",
19817
+ borderBottomWidth: 1,
19818
+ borderBottomColor: colors.border
19819
+ },
19820
+ headerLeft: {
19821
+ flexDirection: "row",
19822
+ alignItems: "center",
19823
+ gap: 6,
19824
+ flex: 1
19825
+ },
19826
+ headerLabel: {
19827
+ fontSize: 11,
19828
+ color: colors.textMuted,
19829
+ fontWeight: "600"
19830
+ },
19831
+ focusText: {
19832
+ fontSize: 10,
19833
+ color: colors.textDim,
19834
+ maxWidth: 100
19835
+ },
19836
+ timer: {
19837
+ fontSize: 10,
19838
+ color: colors.green,
19839
+ fontWeight: "600",
19840
+ fontVariant: ["tabular-nums"]
19841
+ },
19842
+ expandButton: {
19843
+ paddingVertical: 2,
19844
+ paddingHorizontal: 4
19845
+ },
19846
+ expandText: {
19847
+ fontSize: 12,
19848
+ color: colors.blue,
19849
+ fontWeight: "500"
19850
+ },
19851
+ flash: {
19852
+ paddingVertical: 6,
19853
+ paddingHorizontal: 12,
19854
+ backgroundColor: colors.greenDark,
19855
+ alignItems: "center"
19856
+ },
19857
+ flashText: {
19858
+ fontSize: 12,
19859
+ fontWeight: "600",
19860
+ color: colors.greenLight
19861
+ },
19862
+ inputArea: {
19863
+ padding: 8,
19864
+ paddingHorizontal: 10
19865
+ },
19866
+ textInput: {
19867
+ backgroundColor: colors.card,
19868
+ borderWidth: 1,
19869
+ borderColor: colors.border,
19870
+ borderRadius: 8,
19871
+ padding: 6,
19872
+ paddingHorizontal: 8,
19873
+ color: colors.textPrimary,
19874
+ fontSize: 12,
19875
+ lineHeight: 16,
19876
+ minHeight: 40,
19877
+ textAlignVertical: "top"
19878
+ },
19879
+ inputActions: {
19880
+ flexDirection: "row",
19881
+ justifyContent: "space-between",
19882
+ marginTop: 6
19883
+ },
19884
+ cancelText: {
19885
+ fontSize: 11,
19886
+ color: colors.textMuted,
19887
+ paddingVertical: 4,
19888
+ paddingHorizontal: 8
19889
+ },
19890
+ sendBtn: {
19891
+ paddingVertical: 4,
19892
+ paddingHorizontal: 14,
19893
+ borderRadius: 6
19894
+ },
19895
+ sendText: {
19896
+ fontSize: 11,
19897
+ fontWeight: "600",
19898
+ color: "#fff"
19899
+ },
19900
+ actions: {
19901
+ flexDirection: "row",
19902
+ gap: 6,
19903
+ padding: 8,
19904
+ paddingHorizontal: 10,
19905
+ paddingBottom: 10
19906
+ },
19907
+ feedbackBtn: {
19908
+ flex: 1,
19909
+ paddingVertical: 8,
19910
+ borderRadius: 8,
19911
+ backgroundColor: colors.blueDark,
19912
+ borderWidth: 1,
19913
+ borderColor: `${colors.blue}40`,
19914
+ alignItems: "center"
19915
+ },
19916
+ feedbackText: {
19917
+ fontSize: 11,
19918
+ fontWeight: "600",
19919
+ color: colors.blueLight
19920
+ },
19921
+ bugBtn: {
19922
+ flex: 1,
19923
+ paddingVertical: 8,
19924
+ borderRadius: 8,
19925
+ backgroundColor: colors.redDark,
19926
+ borderWidth: 1,
19927
+ borderColor: colors.red,
19928
+ alignItems: "center"
19929
+ },
19930
+ bugText: {
19931
+ fontSize: 11,
19932
+ fontWeight: "600",
19933
+ color: colors.redLight
19934
+ },
19935
+ completeBtn: {
19936
+ flex: 1,
19937
+ paddingVertical: 8,
19938
+ borderRadius: 8,
19939
+ backgroundColor: colors.greenDark,
19940
+ borderWidth: 1,
19941
+ borderColor: colors.green,
19942
+ alignItems: "center"
19943
+ },
19944
+ completeText: {
19945
+ fontSize: 11,
19946
+ fontWeight: "600",
19947
+ color: colors.greenLight
19948
+ }
19949
+ });
19950
+
19951
+ // src/BugBearButton.tsx
19952
+ var screenWidth3 = import_react_native24.Dimensions.get("window").width;
19953
+ var screenHeight3 = import_react_native24.Dimensions.get("window").height;
19954
+ var BOTTOM_SAFE_PADDING3 = import_react_native24.Platform.OS === "ios" ? 34 : 24;
19484
19955
  function BugBearButton({
19485
19956
  position = "bottom-right",
19486
19957
  buttonStyle,
@@ -19490,20 +19961,20 @@ function BugBearButton({
19490
19961
  minY = 100,
19491
19962
  maxYOffset = 160
19492
19963
  }) {
19493
- const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments, widgetMode, widgetColorScheme } = useBugBear();
19964
+ const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments, widgetMode, widgetColorScheme, activeSession, startSession } = useBugBear();
19494
19965
  const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
19495
- const [viewMode, setViewMode] = (0, import_react24.useState)("closed");
19496
- const [miniRunnerAssignmentId, setMiniRunnerAssignmentId] = (0, import_react24.useState)(null);
19497
- const panelAnim = (0, import_react24.useRef)(new import_react_native23.Animated.Value(0)).current;
19498
- const styles6 = (0, import_react24.useMemo)(() => createStyles16(), [widgetColorScheme]);
19966
+ const [viewMode, setViewMode] = (0, import_react25.useState)("closed");
19967
+ const [miniRunnerAssignmentId, setMiniRunnerAssignmentId] = (0, import_react25.useState)(null);
19968
+ const panelAnim = (0, import_react25.useRef)(new import_react_native24.Animated.Value(0)).current;
19969
+ const styles7 = (0, import_react25.useMemo)(() => createStyles16(), [widgetColorScheme]);
19499
19970
  const panelVisible = viewMode === "panel";
19500
- const screenCaptureRef = (0, import_react24.useRef)(null);
19971
+ const screenCaptureRef = (0, import_react25.useRef)(null);
19501
19972
  const openPanel = () => {
19502
19973
  captureAppScreen().then((uri) => {
19503
19974
  screenCaptureRef.current = uri;
19504
19975
  });
19505
19976
  setViewMode("panel");
19506
- import_react_native23.Animated.spring(panelAnim, {
19977
+ import_react_native24.Animated.spring(panelAnim, {
19507
19978
  toValue: 1,
19508
19979
  useNativeDriver: true,
19509
19980
  friction: 8,
@@ -19511,8 +19982,8 @@ function BugBearButton({
19511
19982
  }).start();
19512
19983
  };
19513
19984
  const closePanel = () => {
19514
- import_react_native23.Keyboard.dismiss();
19515
- import_react_native23.Animated.timing(panelAnim, {
19985
+ import_react_native24.Keyboard.dismiss();
19986
+ import_react_native24.Animated.timing(panelAnim, {
19516
19987
  toValue: 0,
19517
19988
  duration: 250,
19518
19989
  useNativeDriver: true
@@ -19520,28 +19991,29 @@ function BugBearButton({
19520
19991
  setViewMode("closed");
19521
19992
  });
19522
19993
  };
19994
+ const buttonSize = 56;
19995
+ const margin = 16;
19996
+ const safeMaxY = screenHeight3 - maxYOffset - BOTTOM_SAFE_PADDING3;
19523
19997
  const getInitialPosition = () => {
19524
- const buttonSize = 56;
19525
- const margin = 16;
19526
19998
  if (initialX !== void 0 && initialY !== void 0) {
19527
19999
  return { x: initialX, y: initialY };
19528
20000
  }
19529
- const x = position === "bottom-right" ? screenWidth2 - buttonSize - margin : margin;
19530
- const y = screenHeight2 - 160;
20001
+ const x = position === "bottom-right" ? screenWidth3 - buttonSize - margin : margin;
20002
+ const y = screenHeight3 - maxYOffset - BOTTOM_SAFE_PADDING3;
19531
20003
  return { x, y };
19532
20004
  };
19533
20005
  const initialPos = getInitialPosition();
19534
- const pan = (0, import_react24.useRef)(new import_react_native23.Animated.ValueXY(initialPos)).current;
19535
- const isDragging = (0, import_react24.useRef)(false);
19536
- const panResponder = (0, import_react24.useRef)(
19537
- import_react_native23.PanResponder.create({
20006
+ const pan = (0, import_react25.useRef)(new import_react_native24.Animated.ValueXY(initialPos)).current;
20007
+ const isDragging = (0, import_react25.useRef)(false);
20008
+ const panResponder = (0, import_react25.useRef)(
20009
+ import_react_native24.PanResponder.create({
19538
20010
  onStartShouldSetPanResponder: () => draggable,
19539
20011
  onMoveShouldSetPanResponder: (_, gs) => draggable && (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5),
19540
20012
  onPanResponderGrant: () => {
19541
20013
  isDragging.current = false;
19542
20014
  pan.setOffset({
19543
- x: getAnimatedValue(pan.x),
19544
- y: getAnimatedValue(pan.y)
20015
+ x: Math.max(margin, Math.min(getAnimatedValue(pan.x), screenWidth3 - buttonSize - margin)),
20016
+ y: Math.max(minY, Math.min(getAnimatedValue(pan.y), safeMaxY))
19545
20017
  });
19546
20018
  pan.setValue({ x: 0, y: 0 });
19547
20019
  },
@@ -19549,7 +20021,7 @@ function BugBearButton({
19549
20021
  if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {
19550
20022
  isDragging.current = true;
19551
20023
  }
19552
- import_react_native23.Animated.event(
20024
+ import_react_native24.Animated.event(
19553
20025
  [null, { dx: pan.x, dy: pan.y }],
19554
20026
  { useNativeDriver: false }
19555
20027
  )(_, gs);
@@ -19558,11 +20030,9 @@ function BugBearButton({
19558
20030
  pan.flattenOffset();
19559
20031
  const currentX = getAnimatedValue(pan.x);
19560
20032
  const currentY = getAnimatedValue(pan.y);
19561
- const buttonSize = 56;
19562
- const margin = 16;
19563
- const snapX = currentX < screenWidth2 / 2 ? margin : screenWidth2 - buttonSize - margin;
19564
- const snapY = Math.max(minY, Math.min(currentY, screenHeight2 - maxYOffset));
19565
- import_react_native23.Animated.spring(pan, {
20033
+ const snapX = currentX < screenWidth3 / 2 ? margin : screenWidth3 - buttonSize - margin;
20034
+ const snapY = Math.max(minY, Math.min(currentY, safeMaxY));
20035
+ import_react_native24.Animated.spring(pan, {
19566
20036
  toValue: { x: snapX, y: snapY },
19567
20037
  useNativeDriver: false,
19568
20038
  friction: 7,
@@ -19577,11 +20047,11 @@ function BugBearButton({
19577
20047
  ).current;
19578
20048
  const pendingTests = widgetMode === "qa" ? assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length : 0;
19579
20049
  const badgeCount = pendingTests + unreadCount;
19580
- (0, import_react24.useEffect)(() => {
19581
- if (!panelVisible || import_react_native23.Platform.OS !== "android") return;
19582
- const handler = import_react_native23.BackHandler.addEventListener("hardwareBackPress", () => {
20050
+ (0, import_react25.useEffect)(() => {
20051
+ if (!panelVisible || import_react_native24.Platform.OS !== "android") return;
20052
+ const handler = import_react_native24.BackHandler.addEventListener("hardwareBackPress", () => {
19583
20053
  if (canGoBack) {
19584
- import_react_native23.Keyboard.dismiss();
20054
+ import_react_native24.Keyboard.dismiss();
19585
20055
  pop();
19586
20056
  } else {
19587
20057
  closePanel();
@@ -19590,9 +20060,9 @@ function BugBearButton({
19590
20060
  });
19591
20061
  return () => handler.remove();
19592
20062
  }, [panelVisible, canGoBack]);
19593
- const startMiniRunner = (0, import_react24.useCallback)((assignId) => {
19594
- import_react_native23.Keyboard.dismiss();
19595
- import_react_native23.Animated.timing(panelAnim, {
20063
+ const startMiniRunner = (0, import_react25.useCallback)((assignId) => {
20064
+ import_react_native24.Keyboard.dismiss();
20065
+ import_react_native24.Animated.timing(panelAnim, {
19596
20066
  toValue: 0,
19597
20067
  duration: 200,
19598
20068
  useNativeDriver: true
@@ -19601,40 +20071,83 @@ function BugBearButton({
19601
20071
  setViewMode("mini-runner");
19602
20072
  });
19603
20073
  }, [panelAnim]);
19604
- const expandFromMiniRunner = (0, import_react24.useCallback)(() => {
20074
+ const expandFromMiniRunner = (0, import_react25.useCallback)(() => {
19605
20075
  setViewMode("panel");
19606
20076
  if (miniRunnerAssignmentId) {
19607
20077
  replace({ name: "TEST_DETAIL", testId: miniRunnerAssignmentId });
19608
20078
  }
19609
20079
  setMiniRunnerAssignmentId(null);
19610
- import_react_native23.Animated.spring(panelAnim, {
20080
+ import_react_native24.Animated.spring(panelAnim, {
19611
20081
  toValue: 1,
19612
20082
  useNativeDriver: true,
19613
20083
  friction: 8,
19614
20084
  tension: 65
19615
20085
  }).start();
19616
20086
  }, [miniRunnerAssignmentId, replace, panelAnim]);
19617
- const handleMiniRunnerAdvance = (0, import_react24.useCallback)((nextId) => {
20087
+ const handleMiniRunnerAdvance = (0, import_react25.useCallback)((nextId) => {
19618
20088
  setMiniRunnerAssignmentId(nextId);
19619
20089
  }, []);
19620
- const handleMiniRunnerComplete = (0, import_react24.useCallback)(() => {
20090
+ const handleMiniRunnerComplete = (0, import_react25.useCallback)(() => {
19621
20091
  setMiniRunnerAssignmentId(null);
19622
20092
  setViewMode("closed");
19623
20093
  }, []);
19624
- const handleMiniRunnerReport = (0, import_react24.useCallback)((assignId, testCaseId) => {
20094
+ const handleMiniRunnerReport = (0, import_react25.useCallback)((assignId, testCaseId) => {
19625
20095
  setMiniRunnerAssignmentId(null);
19626
20096
  setViewMode("panel");
19627
20097
  replace({
19628
20098
  name: "REPORT",
19629
20099
  prefill: { type: "test_fail", assignmentId: assignId, testCaseId }
19630
20100
  });
19631
- import_react_native23.Animated.spring(panelAnim, {
20101
+ import_react_native24.Animated.spring(panelAnim, {
20102
+ toValue: 1,
20103
+ useNativeDriver: true,
20104
+ friction: 8,
20105
+ tension: 65
20106
+ }).start();
20107
+ }, [replace, panelAnim]);
20108
+ const startAdHoc = (0, import_react25.useCallback)(async (taskId, focusArea) => {
20109
+ import_react_native24.Keyboard.dismiss();
20110
+ const result = await startSession({
20111
+ sessionType: "ad_hoc",
20112
+ taskId,
20113
+ focusArea,
20114
+ platform: "ios"
20115
+ });
20116
+ if (result.success) {
20117
+ import_react_native24.Animated.timing(panelAnim, {
20118
+ toValue: 0,
20119
+ duration: 200,
20120
+ useNativeDriver: true
20121
+ }).start(() => {
20122
+ setViewMode("ad-hoc");
20123
+ });
20124
+ }
20125
+ }, [startSession, panelAnim]);
20126
+ const expandFromAdHoc = (0, import_react25.useCallback)(() => {
20127
+ setViewMode("panel");
20128
+ replace({ name: "SESSION_ACTIVE" });
20129
+ import_react_native24.Animated.spring(panelAnim, {
19632
20130
  toValue: 1,
19633
20131
  useNativeDriver: true,
19634
20132
  friction: 8,
19635
20133
  tension: 65
19636
20134
  }).start();
19637
20135
  }, [replace, panelAnim]);
20136
+ const handleAdHocComplete = (0, import_react25.useCallback)(() => {
20137
+ setViewMode("closed");
20138
+ }, []);
20139
+ const minimizeToAdHoc = (0, import_react25.useCallback)(() => {
20140
+ if (activeSession?.sessionType === "ad_hoc") {
20141
+ import_react_native24.Keyboard.dismiss();
20142
+ import_react_native24.Animated.timing(panelAnim, {
20143
+ toValue: 0,
20144
+ duration: 200,
20145
+ useNativeDriver: true
20146
+ }).start(() => {
20147
+ setViewMode("ad-hoc");
20148
+ });
20149
+ }
20150
+ }, [activeSession, panelAnim]);
19638
20151
  if (!shouldShowWidget) return null;
19639
20152
  const getHeaderTitle = () => {
19640
20153
  switch (currentScreen.name) {
@@ -19677,41 +20190,43 @@ function BugBearButton({
19677
20190
  };
19678
20191
  const nav = {
19679
20192
  push: (screen) => {
19680
- import_react_native23.Keyboard.dismiss();
20193
+ import_react_native24.Keyboard.dismiss();
19681
20194
  push(screen);
19682
20195
  },
19683
20196
  pop: () => {
19684
- import_react_native23.Keyboard.dismiss();
20197
+ import_react_native24.Keyboard.dismiss();
19685
20198
  pop();
19686
20199
  },
19687
20200
  replace: (screen) => {
19688
- import_react_native23.Keyboard.dismiss();
20201
+ import_react_native24.Keyboard.dismiss();
19689
20202
  replace(screen);
19690
20203
  },
19691
20204
  reset: () => {
19692
- import_react_native23.Keyboard.dismiss();
20205
+ import_react_native24.Keyboard.dismiss();
19693
20206
  reset();
19694
20207
  },
19695
20208
  canGoBack,
19696
20209
  closeWidget: handleClose,
19697
- startMiniRunner
20210
+ startMiniRunner,
20211
+ startAdHoc,
20212
+ minimizeToAdHoc: activeSession?.sessionType === "ad_hoc" ? minimizeToAdHoc : void 0
19698
20213
  };
19699
20214
  const QA_ONLY_SCREENS = ["TEST_DETAIL", "TEST_LIST", "TEST_FEEDBACK", "SESSION_START", "SESSION_ACTIVE", "SESSION_FINDING"];
19700
20215
  const renderScreen = () => {
19701
20216
  if (widgetMode === "feedback" && QA_ONLY_SCREENS.includes(currentScreen.name)) {
19702
- return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
20217
+ return /* @__PURE__ */ import_react25.default.createElement(HomeScreen, { nav });
19703
20218
  }
19704
20219
  switch (currentScreen.name) {
19705
20220
  case "HOME":
19706
- return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
20221
+ return /* @__PURE__ */ import_react25.default.createElement(HomeScreen, { nav });
19707
20222
  case "TEST_DETAIL":
19708
- return /* @__PURE__ */ import_react24.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
20223
+ return /* @__PURE__ */ import_react25.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
19709
20224
  case "TEST_LIST":
19710
- return /* @__PURE__ */ import_react24.default.createElement(TestListScreen, { nav });
20225
+ return /* @__PURE__ */ import_react25.default.createElement(TestListScreen, { nav });
19711
20226
  case "TEST_FEEDBACK":
19712
- return /* @__PURE__ */ import_react24.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
20227
+ return /* @__PURE__ */ import_react25.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
19713
20228
  case "REPORT":
19714
- return /* @__PURE__ */ import_react24.default.createElement(
20229
+ return /* @__PURE__ */ import_react25.default.createElement(
19715
20230
  ReportScreen,
19716
20231
  {
19717
20232
  nav,
@@ -19723,30 +20238,30 @@ function BugBearButton({
19723
20238
  }
19724
20239
  );
19725
20240
  case "REPORT_SUCCESS":
19726
- return /* @__PURE__ */ import_react24.default.createElement(ReportSuccessScreen, { nav });
20241
+ return /* @__PURE__ */ import_react25.default.createElement(ReportSuccessScreen, { nav });
19727
20242
  case "MESSAGE_LIST":
19728
- return /* @__PURE__ */ import_react24.default.createElement(MessageListScreen, { nav });
20243
+ return /* @__PURE__ */ import_react25.default.createElement(MessageListScreen, { nav });
19729
20244
  case "THREAD_DETAIL":
19730
- return /* @__PURE__ */ import_react24.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
20245
+ return /* @__PURE__ */ import_react25.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
19731
20246
  case "COMPOSE_MESSAGE":
19732
- return /* @__PURE__ */ import_react24.default.createElement(ComposeMessageScreen, { nav });
20247
+ return /* @__PURE__ */ import_react25.default.createElement(ComposeMessageScreen, { nav });
19733
20248
  case "ISSUE_LIST":
19734
- return /* @__PURE__ */ import_react24.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
20249
+ return /* @__PURE__ */ import_react25.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
19735
20250
  case "ISSUE_DETAIL":
19736
- return /* @__PURE__ */ import_react24.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
20251
+ return /* @__PURE__ */ import_react25.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
19737
20252
  case "PROFILE":
19738
- return /* @__PURE__ */ import_react24.default.createElement(ProfileScreen, { nav });
20253
+ return /* @__PURE__ */ import_react25.default.createElement(ProfileScreen, { nav });
19739
20254
  case "SESSION_START":
19740
- return /* @__PURE__ */ import_react24.default.createElement(SessionStartScreen, { nav });
20255
+ return /* @__PURE__ */ import_react25.default.createElement(SessionStartScreen, { nav });
19741
20256
  case "SESSION_ACTIVE":
19742
- return /* @__PURE__ */ import_react24.default.createElement(SessionActiveScreen, { nav });
20257
+ return /* @__PURE__ */ import_react25.default.createElement(SessionActiveScreen, { nav });
19743
20258
  case "SESSION_FINDING":
19744
- return /* @__PURE__ */ import_react24.default.createElement(SessionFindingScreen, { nav });
20259
+ return /* @__PURE__ */ import_react25.default.createElement(SessionFindingScreen, { nav });
19745
20260
  default:
19746
- return /* @__PURE__ */ import_react24.default.createElement(HomeScreen, { nav });
20261
+ return /* @__PURE__ */ import_react25.default.createElement(HomeScreen, { nav });
19747
20262
  }
19748
20263
  };
19749
- return /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, viewMode === "mini-runner" && miniRunnerAssignmentId && /* @__PURE__ */ import_react24.default.createElement(
20264
+ return /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, viewMode === "mini-runner" && miniRunnerAssignmentId && /* @__PURE__ */ import_react25.default.createElement(
19750
20265
  MiniTestRunner,
19751
20266
  {
19752
20267
  assignmentId: miniRunnerAssignmentId,
@@ -19755,61 +20270,70 @@ function BugBearButton({
19755
20270
  onComplete: handleMiniRunnerComplete,
19756
20271
  onNavigateToReport: handleMiniRunnerReport
19757
20272
  }
19758
- ), viewMode === "closed" && /* @__PURE__ */ import_react24.default.createElement(
19759
- import_react_native23.Animated.View,
20273
+ ), viewMode === "ad-hoc" && activeSession && /* @__PURE__ */ import_react25.default.createElement(
20274
+ AdHocOverlay,
19760
20275
  {
19761
- style: [styles6.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
20276
+ sessionId: activeSession.id,
20277
+ focusArea: activeSession.focusArea,
20278
+ startedAt: activeSession.startedAt,
20279
+ onExpand: expandFromAdHoc,
20280
+ onComplete: handleAdHocComplete
20281
+ }
20282
+ ), viewMode === "closed" && /* @__PURE__ */ import_react25.default.createElement(
20283
+ import_react_native24.Animated.View,
20284
+ {
20285
+ style: [styles7.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
19762
20286
  ...panResponder.panHandlers
19763
20287
  },
19764
- /* @__PURE__ */ import_react24.default.createElement(
19765
- import_react_native23.TouchableOpacity,
20288
+ /* @__PURE__ */ import_react25.default.createElement(
20289
+ import_react_native24.TouchableOpacity,
19766
20290
  {
19767
- style: styles6.fab,
20291
+ style: styles7.fab,
19768
20292
  onPress: openPanel,
19769
20293
  activeOpacity: draggable ? 1 : 0.7
19770
20294
  },
19771
- /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles6.fabIcon }),
19772
- badgeCount > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.badge }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
20295
+ /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles7.fabIcon }),
20296
+ 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))
19773
20297
  )
19774
- ), viewMode === "panel" && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react24.default.createElement(
19775
- import_react_native23.KeyboardAvoidingView,
20298
+ ), viewMode === "panel" && /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.panelWrapper, pointerEvents: "box-none" }, /* @__PURE__ */ import_react25.default.createElement(
20299
+ import_react_native24.KeyboardAvoidingView,
19776
20300
  {
19777
- behavior: import_react_native23.Platform.OS === "ios" ? "padding" : "height",
19778
- style: styles6.panelKeyboardAvoid,
20301
+ behavior: import_react_native24.Platform.OS === "ios" ? "padding" : "height",
20302
+ style: styles7.panelKeyboardAvoid,
19779
20303
  pointerEvents: "box-none"
19780
20304
  },
19781
- /* @__PURE__ */ import_react24.default.createElement(
19782
- import_react_native23.Animated.View,
20305
+ /* @__PURE__ */ import_react25.default.createElement(
20306
+ import_react_native24.Animated.View,
19783
20307
  {
19784
20308
  style: [
19785
- styles6.panelContainer,
20309
+ styles7.panelContainer,
19786
20310
  {
19787
20311
  transform: [{
19788
20312
  translateY: panelAnim.interpolate({
19789
20313
  inputRange: [0, 1],
19790
- outputRange: [screenHeight2, 0]
20314
+ outputRange: [screenHeight3, 0]
19791
20315
  })
19792
20316
  }]
19793
20317
  }
19794
20318
  ]
19795
20319
  },
19796
- /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelHandle }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.panelHandleBar })),
19797
- /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.header }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.headerLeft }, canGoBack ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => nav.pop(), style: styles6.backButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.backText }, "\u2190 Back")) : /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.headerTitleRow }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.headerActions }, currentScreen.name !== "HOME" && /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => nav.reset(), style: styles6.homeButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.homeIcon }, "\u2302")), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.TouchableOpacity, { onPress: handleClose, style: styles6.closeButton }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.closeText }, "\u2715")))),
19798
- /* @__PURE__ */ import_react24.default.createElement(
19799
- import_react_native23.ScrollView,
20320
+ /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.panelHandle }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles7.panelHandleBar })),
20321
+ /* @__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")))),
20322
+ /* @__PURE__ */ import_react25.default.createElement(
20323
+ import_react_native24.ScrollView,
19800
20324
  {
19801
- style: styles6.content,
19802
- contentContainerStyle: styles6.contentContainer,
20325
+ style: styles7.content,
20326
+ contentContainerStyle: styles7.contentContainer,
19803
20327
  keyboardShouldPersistTaps: "handled",
19804
20328
  showsVerticalScrollIndicator: false
19805
20329
  },
19806
- isLoading ? /* @__PURE__ */ import_react24.default.createElement(import_react_native23.View, { style: styles6.loadingContainer }, /* @__PURE__ */ import_react24.default.createElement(import_react_native23.ActivityIndicator, { size: "large", color: colors.blue }), /* @__PURE__ */ import_react24.default.createElement(import_react_native23.Text, { style: styles6.loadingText }, "Loading...")) : renderScreen()
20330
+ 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()
19807
20331
  )
19808
20332
  )
19809
20333
  )));
19810
20334
  }
19811
20335
  function createStyles16() {
19812
- return import_react_native23.StyleSheet.create({
20336
+ return import_react_native24.StyleSheet.create({
19813
20337
  // FAB
19814
20338
  fabContainer: {
19815
20339
  position: "absolute",
@@ -19968,7 +20492,7 @@ function createStyles16() {
19968
20492
  },
19969
20493
  contentContainer: {
19970
20494
  padding: 16,
19971
- paddingBottom: import_react_native23.Platform.OS === "ios" ? 50 : 28
20495
+ paddingBottom: import_react_native24.Platform.OS === "ios" ? 50 : 28
19972
20496
  },
19973
20497
  // Loading
19974
20498
  loadingContainer: {
@@ -19984,9 +20508,9 @@ function createStyles16() {
19984
20508
  }
19985
20509
 
19986
20510
  // src/BugBearErrorBoundary.tsx
19987
- var import_react25 = __toESM(require("react"));
19988
- var import_react_native24 = require("react-native");
19989
- var BugBearErrorBoundary = class extends import_react25.Component {
20511
+ var import_react26 = __toESM(require("react"));
20512
+ var import_react_native25 = require("react-native");
20513
+ var BugBearErrorBoundary = class extends import_react26.Component {
19990
20514
  constructor(props) {
19991
20515
  super(props);
19992
20516
  this.reset = () => {
@@ -20030,7 +20554,7 @@ var BugBearErrorBoundary = class extends import_react25.Component {
20030
20554
  if (fallback) {
20031
20555
  return fallback;
20032
20556
  }
20033
- return /* @__PURE__ */ import_react25.default.createElement(import_react_native24.View, { style: styles5.container }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.title }, "Something went wrong"), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.message }, error.message), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.TouchableOpacity, { style: styles5.button, onPress: this.reset }, /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.buttonText }, "Try Again")), /* @__PURE__ */ import_react25.default.createElement(import_react_native24.Text, { style: styles5.caption }, "The error has been captured by BugBear"));
20557
+ 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"));
20034
20558
  }
20035
20559
  return children;
20036
20560
  }
@@ -20041,7 +20565,7 @@ function useErrorContext() {
20041
20565
  getEnhancedContext: () => contextCapture.getEnhancedContext()
20042
20566
  };
20043
20567
  }
20044
- var styles5 = import_react_native24.StyleSheet.create({
20568
+ var styles6 = import_react_native25.StyleSheet.create({
20045
20569
  container: {
20046
20570
  padding: 20,
20047
20571
  margin: 20,