@bbearai/react-native 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -11543,7 +11543,7 @@ var BugBearClient = class {
11543
11543
  console.error("BugBear: Failed to fetch assignments", error);
11544
11544
  return [];
11545
11545
  }
11546
- return (data || []).map((item) => ({
11546
+ const mapped = (data || []).map((item) => ({
11547
11547
  id: item.id,
11548
11548
  status: item.status,
11549
11549
  startedAt: item.started_at,
@@ -11576,6 +11576,12 @@ var BugBearClient = class {
11576
11576
  } : void 0
11577
11577
  }
11578
11578
  }));
11579
+ mapped.sort((a, b) => {
11580
+ if (a.isVerification && !b.isVerification) return -1;
11581
+ if (!a.isVerification && b.isVerification) return 1;
11582
+ return 0;
11583
+ });
11584
+ return mapped;
11579
11585
  } catch (err) {
11580
11586
  console.error("BugBear: Error fetching assignments", err);
11581
11587
  return [];
@@ -13344,7 +13350,9 @@ function HomeScreen({ nav }) {
13344
13350
  refreshAssignments();
13345
13351
  refreshThreads();
13346
13352
  }, []);
13347
- const pendingCount = assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length;
13353
+ const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
13354
+ const pendingCount = pendingAssignments.length;
13355
+ const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
13348
13356
  const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
13349
13357
  const totalTests = assignments.length;
13350
13358
  return /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, null, pendingCount > 0 ? /* @__PURE__ */ import_react3.default.createElement(
@@ -13356,6 +13364,7 @@ function HomeScreen({ nav }) {
13356
13364
  },
13357
13365
  /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.heroCount }, pendingCount),
13358
13366
  /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
13367
+ retestCount > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: styles.retestPill }, /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
13359
13368
  /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.heroAction }, "Start Testing \u2192")
13360
13369
  ) : unreadCount > 0 ? /* @__PURE__ */ import_react3.default.createElement(
13361
13370
  import_react_native3.TouchableOpacity,
@@ -13459,6 +13468,22 @@ var styles = import_react_native3.StyleSheet.create({
13459
13468
  color: colors.blueText,
13460
13469
  marginTop: 2
13461
13470
  },
13471
+ retestPill: {
13472
+ flexDirection: "row",
13473
+ alignItems: "center",
13474
+ backgroundColor: "#422006",
13475
+ borderWidth: 1,
13476
+ borderColor: "#854d0e",
13477
+ borderRadius: 6,
13478
+ paddingHorizontal: 8,
13479
+ paddingVertical: 3,
13480
+ marginTop: 8
13481
+ },
13482
+ retestPillText: {
13483
+ fontSize: 12,
13484
+ fontWeight: "600",
13485
+ color: "#fbbf24"
13486
+ },
13462
13487
  heroAction: {
13463
13488
  fontSize: 14,
13464
13489
  fontWeight: "600",
@@ -13669,7 +13694,7 @@ function TestDetailScreen({ testId, nav }) {
13669
13694
  const steps = testCase.steps;
13670
13695
  const info = templateInfo[template] || templateInfo.steps;
13671
13696
  const rubricMode = testCase.track?.rubricMode || "pass_fail";
13672
- return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.container }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.topRow }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.positionInfo }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.timerBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.viewAllLink }, "View All \u2192"))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { key: idx, style: styles2.step }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepNumber }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepBody }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(
13697
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.container }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.topRow }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.positionInfo }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.timerBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.retestBanner }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.retestLabel }, "Retest"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { key: idx, style: styles2.step }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepNumber }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepBody }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(
13673
13698
  import_react_native4.TouchableOpacity,
13674
13699
  {
13675
13700
  key: idx,
@@ -13753,6 +13778,10 @@ function TestDetailScreen({ testId, nav }) {
13753
13778
  }
13754
13779
  var styles2 = import_react_native4.StyleSheet.create({
13755
13780
  container: { paddingBottom: 16 },
13781
+ retestBanner: { flexDirection: "row", alignItems: "center", gap: 6, backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 8, paddingVertical: 6, paddingHorizontal: 10, marginBottom: 10 },
13782
+ retestIcon: { fontSize: 14 },
13783
+ retestLabel: { fontSize: 13, fontWeight: "600", color: "#fbbf24" },
13784
+ retestSub: { fontSize: 12, color: "#d97706" },
13756
13785
  topRow: { flexDirection: "row", justifyContent: "space-between", alignItems: "center", marginBottom: 12 },
13757
13786
  positionInfo: { flexDirection: "row", alignItems: "center", gap: 8 },
13758
13787
  positionText: { fontSize: 13, color: colors.textMuted },
@@ -13868,6 +13897,8 @@ function TestListScreen({ nav }) {
13868
13897
  const statusOrder = { in_progress: 0, pending: 1, failed: 2, skipped: 3, passed: 4 };
13869
13898
  for (const folder of groups.values()) {
13870
13899
  folder.assignments.sort((a, b) => {
13900
+ if (a.isVerification && !b.isVerification) return -1;
13901
+ if (!a.isVerification && b.isVerification) return 1;
13871
13902
  const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
13872
13903
  if (sd !== 0) return sd;
13873
13904
  return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
@@ -13909,7 +13940,7 @@ function TestListScreen({ nav }) {
13909
13940
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
13910
13941
  },
13911
13942
  /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testBadge }, badge.icon),
13912
- /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.testInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority))
13943
+ /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.testInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.testMetaRow }, assignment.isVerification && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.retestTag }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.retestTagText }, "Retest")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority)))
13913
13944
  );
13914
13945
  }));
13915
13946
  }), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: styles3.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.refreshText }, "\u21BB Refresh")));
@@ -13932,6 +13963,9 @@ var styles3 = import_react_native5.StyleSheet.create({
13932
13963
  testBadge: { fontSize: 16, marginRight: 10, width: 20 },
13933
13964
  testInfo: { flex: 1 },
13934
13965
  testTitle: { fontSize: 14, color: colors.textPrimary, marginBottom: 2 },
13966
+ testMetaRow: { flexDirection: "row", alignItems: "center", gap: 6 },
13967
+ retestTag: { backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 4, paddingHorizontal: 5, paddingVertical: 1 },
13968
+ retestTagText: { fontSize: 10, fontWeight: "600", color: "#fbbf24" },
13935
13969
  testMeta: { fontSize: 11, color: colors.textDim },
13936
13970
  refreshBtn: { alignItems: "center", paddingVertical: 12 },
13937
13971
  refreshText: { fontSize: 13, color: colors.blue }
package/dist/index.mjs CHANGED
@@ -11512,7 +11512,7 @@ var BugBearClient = class {
11512
11512
  console.error("BugBear: Failed to fetch assignments", error);
11513
11513
  return [];
11514
11514
  }
11515
- return (data || []).map((item) => ({
11515
+ const mapped = (data || []).map((item) => ({
11516
11516
  id: item.id,
11517
11517
  status: item.status,
11518
11518
  startedAt: item.started_at,
@@ -11545,6 +11545,12 @@ var BugBearClient = class {
11545
11545
  } : void 0
11546
11546
  }
11547
11547
  }));
11548
+ mapped.sort((a, b) => {
11549
+ if (a.isVerification && !b.isVerification) return -1;
11550
+ if (!a.isVerification && b.isVerification) return 1;
11551
+ return 0;
11552
+ });
11553
+ return mapped;
11548
11554
  } catch (err) {
11549
11555
  console.error("BugBear: Error fetching assignments", err);
11550
11556
  return [];
@@ -13327,7 +13333,9 @@ function HomeScreen({ nav }) {
13327
13333
  refreshAssignments();
13328
13334
  refreshThreads();
13329
13335
  }, []);
13330
- const pendingCount = assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length;
13336
+ const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
13337
+ const pendingCount = pendingAssignments.length;
13338
+ const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
13331
13339
  const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
13332
13340
  const totalTests = assignments.length;
13333
13341
  return /* @__PURE__ */ React2.createElement(View, null, pendingCount > 0 ? /* @__PURE__ */ React2.createElement(
@@ -13339,6 +13347,7 @@ function HomeScreen({ nav }) {
13339
13347
  },
13340
13348
  /* @__PURE__ */ React2.createElement(Text, { style: styles.heroCount }, pendingCount),
13341
13349
  /* @__PURE__ */ React2.createElement(Text, { style: styles.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
13350
+ retestCount > 0 && /* @__PURE__ */ React2.createElement(View, { style: styles.retestPill }, /* @__PURE__ */ React2.createElement(Text, { style: styles.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
13342
13351
  /* @__PURE__ */ React2.createElement(Text, { style: styles.heroAction }, "Start Testing \u2192")
13343
13352
  ) : unreadCount > 0 ? /* @__PURE__ */ React2.createElement(
13344
13353
  TouchableOpacity,
@@ -13442,6 +13451,22 @@ var styles = StyleSheet2.create({
13442
13451
  color: colors.blueText,
13443
13452
  marginTop: 2
13444
13453
  },
13454
+ retestPill: {
13455
+ flexDirection: "row",
13456
+ alignItems: "center",
13457
+ backgroundColor: "#422006",
13458
+ borderWidth: 1,
13459
+ borderColor: "#854d0e",
13460
+ borderRadius: 6,
13461
+ paddingHorizontal: 8,
13462
+ paddingVertical: 3,
13463
+ marginTop: 8
13464
+ },
13465
+ retestPillText: {
13466
+ fontSize: 12,
13467
+ fontWeight: "600",
13468
+ color: "#fbbf24"
13469
+ },
13445
13470
  heroAction: {
13446
13471
  fontSize: 14,
13447
13472
  fontWeight: "600",
@@ -13652,7 +13677,7 @@ function TestDetailScreen({ testId, nav }) {
13652
13677
  const steps = testCase.steps;
13653
13678
  const info = templateInfo[template] || templateInfo.steps;
13654
13679
  const rubricMode = testCase.track?.rubricMode || "pass_fail";
13655
- return /* @__PURE__ */ React3.createElement(View2, { style: styles2.container }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.topRow }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.positionInfo }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ React3.createElement(View2, { style: styles2.timerBadge }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.viewAllLink }, "View All \u2192"))), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ React3.createElement(View2, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ React3.createElement(View2, { key: idx, style: styles2.step }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepNumber }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepBody }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ React3.createElement(React3.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ React3.createElement(
13680
+ return /* @__PURE__ */ React3.createElement(View2, { style: styles2.container }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.topRow }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.positionInfo }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ React3.createElement(View2, { style: styles2.timerBadge }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ React3.createElement(View2, { style: styles2.retestBanner }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.retestIcon }, "\u{1F504}"), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.retestLabel }, "Retest"), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ React3.createElement(View2, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ React3.createElement(View2, { key: idx, style: styles2.step }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepNumber }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepBody }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ React3.createElement(React3.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ React3.createElement(
13656
13681
  TouchableOpacity2,
13657
13682
  {
13658
13683
  key: idx,
@@ -13736,6 +13761,10 @@ function TestDetailScreen({ testId, nav }) {
13736
13761
  }
13737
13762
  var styles2 = StyleSheet3.create({
13738
13763
  container: { paddingBottom: 16 },
13764
+ retestBanner: { flexDirection: "row", alignItems: "center", gap: 6, backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 8, paddingVertical: 6, paddingHorizontal: 10, marginBottom: 10 },
13765
+ retestIcon: { fontSize: 14 },
13766
+ retestLabel: { fontSize: 13, fontWeight: "600", color: "#fbbf24" },
13767
+ retestSub: { fontSize: 12, color: "#d97706" },
13739
13768
  topRow: { flexDirection: "row", justifyContent: "space-between", alignItems: "center", marginBottom: 12 },
13740
13769
  positionInfo: { flexDirection: "row", alignItems: "center", gap: 8 },
13741
13770
  positionText: { fontSize: 13, color: colors.textMuted },
@@ -13851,6 +13880,8 @@ function TestListScreen({ nav }) {
13851
13880
  const statusOrder = { in_progress: 0, pending: 1, failed: 2, skipped: 3, passed: 4 };
13852
13881
  for (const folder of groups.values()) {
13853
13882
  folder.assignments.sort((a, b) => {
13883
+ if (a.isVerification && !b.isVerification) return -1;
13884
+ if (!a.isVerification && b.isVerification) return 1;
13854
13885
  const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
13855
13886
  if (sd !== 0) return sd;
13856
13887
  return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
@@ -13892,7 +13923,7 @@ function TestListScreen({ nav }) {
13892
13923
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
13893
13924
  },
13894
13925
  /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testBadge }, badge.icon),
13895
- /* @__PURE__ */ React4.createElement(View3, { style: styles3.testInfo }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority))
13926
+ /* @__PURE__ */ React4.createElement(View3, { style: styles3.testInfo }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ React4.createElement(View3, { style: styles3.testMetaRow }, assignment.isVerification && /* @__PURE__ */ React4.createElement(View3, { style: styles3.retestTag }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.retestTagText }, "Retest")), /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority)))
13896
13927
  );
13897
13928
  }));
13898
13929
  }), /* @__PURE__ */ React4.createElement(TouchableOpacity3, { style: styles3.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.refreshText }, "\u21BB Refresh")));
@@ -13915,6 +13946,9 @@ var styles3 = StyleSheet4.create({
13915
13946
  testBadge: { fontSize: 16, marginRight: 10, width: 20 },
13916
13947
  testInfo: { flex: 1 },
13917
13948
  testTitle: { fontSize: 14, color: colors.textPrimary, marginBottom: 2 },
13949
+ testMetaRow: { flexDirection: "row", alignItems: "center", gap: 6 },
13950
+ retestTag: { backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 4, paddingHorizontal: 5, paddingVertical: 1 },
13951
+ retestTagText: { fontSize: 10, fontWeight: "600", color: "#fbbf24" },
13918
13952
  testMeta: { fontSize: 11, color: colors.textDim },
13919
13953
  refreshBtn: { alignItems: "center", paddingVertical: 12 },
13920
13954
  refreshText: { fontSize: 13, color: colors.blue }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bbearai/react-native",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "BugBear React Native components for mobile apps",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",