@bbearai/react-native 0.5.2 → 0.5.3

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.mjs CHANGED
@@ -13086,6 +13086,10 @@ var BugBearContext = createContext({
13086
13086
  updateTesterProfile: async () => ({ success: false }),
13087
13087
  refreshTesterInfo: async () => {
13088
13088
  },
13089
+ // Issue tracking
13090
+ issueCounts: { open: 0, done: 0, reopened: 0 },
13091
+ refreshIssueCounts: async () => {
13092
+ },
13089
13093
  dashboardUrl: void 0,
13090
13094
  onError: void 0
13091
13095
  });
@@ -13101,6 +13105,7 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
13101
13105
  const [isLoading, setIsLoading] = useState(true);
13102
13106
  const [threads, setThreads] = useState([]);
13103
13107
  const [unreadCount, setUnreadCount] = useState(0);
13108
+ const [issueCounts, setIssueCounts] = useState({ open: 0, done: 0, reopened: 0 });
13104
13109
  const [activeSession, setActiveSession] = useState(null);
13105
13110
  const [sessionFindings, setSessionFindings] = useState([]);
13106
13111
  const hasInitialized = useRef(false);
@@ -13207,6 +13212,11 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
13207
13212
  if (!client) return null;
13208
13213
  return client.uploadImageFromUri(uri, void 0, bucket);
13209
13214
  }, [client]);
13215
+ const refreshIssueCounts = useCallback(async () => {
13216
+ if (!client) return;
13217
+ const counts = await client.getIssueCounts();
13218
+ setIssueCounts(counts);
13219
+ }, [client]);
13210
13220
  const initializeBugBear = useCallback(async (bugBearClient) => {
13211
13221
  setIsLoading(true);
13212
13222
  try {
@@ -13219,16 +13229,18 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
13219
13229
  setTesterInfo(info);
13220
13230
  setIsTester(!!info);
13221
13231
  if (info && qaEnabled) {
13222
- const [newAssignments, newThreads, session] = await Promise.all([
13232
+ const [newAssignments, newThreads, session, counts] = await Promise.all([
13223
13233
  bugBearClient.getAssignedTests(),
13224
13234
  bugBearClient.getThreadsForTester(),
13225
- bugBearClient.getActiveSession()
13235
+ bugBearClient.getActiveSession(),
13236
+ bugBearClient.getIssueCounts()
13226
13237
  ]);
13227
13238
  setAssignments(newAssignments);
13228
13239
  setThreads(newThreads);
13229
13240
  const totalUnread = newThreads.reduce((sum, t) => sum + t.unreadCount, 0);
13230
13241
  setUnreadCount(totalUnread);
13231
13242
  setActiveSession(session);
13243
+ setIssueCounts(counts);
13232
13244
  if (session) {
13233
13245
  const findings = await bugBearClient.getSessionFindings(session.id);
13234
13246
  setSessionFindings(findings);
@@ -13296,6 +13308,9 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
13296
13308
  refreshTesterStatus,
13297
13309
  updateTesterProfile,
13298
13310
  refreshTesterInfo,
13311
+ // Issue tracking
13312
+ issueCounts,
13313
+ refreshIssueCounts,
13299
13314
  dashboardUrl: config.dashboardUrl,
13300
13315
  onError: config.onError
13301
13316
  }
@@ -13305,21 +13320,21 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
13305
13320
  }
13306
13321
 
13307
13322
  // src/BugBearButton.tsx
13308
- import React14, { useState as useState10, useRef as useRef3 } from "react";
13323
+ import React16, { useState as useState11, useRef as useRef3 } from "react";
13309
13324
  import {
13310
- View as View13,
13311
- Text as Text13,
13312
- Image as Image3,
13313
- TouchableOpacity as TouchableOpacity12,
13325
+ View as View15,
13326
+ Text as Text15,
13327
+ Image as Image4,
13328
+ TouchableOpacity as TouchableOpacity14,
13314
13329
  Modal as Modal2,
13315
13330
  ScrollView as ScrollView3,
13316
- StyleSheet as StyleSheet14,
13331
+ StyleSheet as StyleSheet16,
13317
13332
  Dimensions as Dimensions2,
13318
13333
  KeyboardAvoidingView,
13319
13334
  Platform as Platform4,
13320
13335
  PanResponder,
13321
13336
  Animated,
13322
- ActivityIndicator as ActivityIndicator2,
13337
+ ActivityIndicator as ActivityIndicator3,
13323
13338
  Keyboard as Keyboard2
13324
13339
  } from "react-native";
13325
13340
 
@@ -13542,10 +13557,11 @@ var templateInfo = {
13542
13557
  import React2, { useEffect as useEffect2 } from "react";
13543
13558
  import { View, Text, TouchableOpacity, StyleSheet as StyleSheet2, Linking } from "react-native";
13544
13559
  function HomeScreen({ nav }) {
13545
- const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, dashboardUrl } = useBugBear();
13560
+ const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl } = useBugBear();
13546
13561
  useEffect2(() => {
13547
13562
  refreshAssignments();
13548
13563
  refreshThreads();
13564
+ refreshIssueCounts();
13549
13565
  }, []);
13550
13566
  const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
13551
13567
  const pendingCount = pendingAssignments.length;
@@ -13611,6 +13627,33 @@ function HomeScreen({ nav }) {
13611
13627
  /* @__PURE__ */ React2.createElement(Text, { style: styles.actionIcon }, "\u{1F4AC}"),
13612
13628
  /* @__PURE__ */ React2.createElement(Text, { style: styles.actionLabel }, "Messages"),
13613
13629
  unreadCount > 0 && /* @__PURE__ */ React2.createElement(View, { style: [styles.actionBadge, styles.actionBadgeMsg] }, /* @__PURE__ */ React2.createElement(Text, { style: styles.actionBadgeText }, unreadCount))
13630
+ )), /* @__PURE__ */ React2.createElement(View, { style: styles.issueGrid }, /* @__PURE__ */ React2.createElement(
13631
+ TouchableOpacity,
13632
+ {
13633
+ style: [styles.issueCard, styles.issueCardOpen],
13634
+ onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
13635
+ activeOpacity: 0.7
13636
+ },
13637
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.issueCountOpen }, issueCounts.open),
13638
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.issueLabel }, "Open")
13639
+ ), /* @__PURE__ */ React2.createElement(
13640
+ TouchableOpacity,
13641
+ {
13642
+ style: [styles.issueCard, styles.issueCardDone],
13643
+ onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
13644
+ activeOpacity: 0.7
13645
+ },
13646
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.issueCountDone }, issueCounts.done),
13647
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.issueLabel }, "Done")
13648
+ ), /* @__PURE__ */ React2.createElement(
13649
+ TouchableOpacity,
13650
+ {
13651
+ style: [styles.issueCard, styles.issueCardReopened],
13652
+ onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
13653
+ activeOpacity: 0.7
13654
+ },
13655
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.issueCountReopened }, issueCounts.reopened),
13656
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.issueLabel }, "Reopened")
13614
13657
  )), totalTests > 0 && /* @__PURE__ */ React2.createElement(View, { style: styles.progressSection }, /* @__PURE__ */ React2.createElement(View, { style: styles.progressBar }, /* @__PURE__ */ React2.createElement(View, { style: [styles.progressFill, { width: `${Math.round(completedCount / totalTests * 100)}%` }] })), /* @__PURE__ */ React2.createElement(Text, { style: styles.progressText }, completedCount, "/", totalTests, " tests completed")), dashboardUrl && /* @__PURE__ */ React2.createElement(
13615
13658
  TouchableOpacity,
13616
13659
  {
@@ -13628,6 +13671,7 @@ function HomeScreen({ nav }) {
13628
13671
  onPress: () => {
13629
13672
  refreshAssignments();
13630
13673
  refreshThreads();
13674
+ refreshIssueCounts();
13631
13675
  }
13632
13676
  },
13633
13677
  /* @__PURE__ */ React2.createElement(Text, { style: styles.refreshText }, "\u21BB Refresh")
@@ -13798,6 +13842,54 @@ var styles = StyleSheet2.create({
13798
13842
  color: colors.textMuted,
13799
13843
  marginLeft: 8
13800
13844
  },
13845
+ issueGrid: {
13846
+ flexDirection: "row",
13847
+ gap: 10,
13848
+ marginBottom: 20
13849
+ },
13850
+ issueCard: {
13851
+ flex: 1,
13852
+ backgroundColor: colors.card,
13853
+ borderWidth: 1,
13854
+ borderColor: colors.border,
13855
+ borderRadius: 10,
13856
+ paddingVertical: 12,
13857
+ paddingHorizontal: 8,
13858
+ alignItems: "center"
13859
+ },
13860
+ issueCardOpen: {
13861
+ borderTopWidth: 3,
13862
+ borderTopColor: "#f97316"
13863
+ },
13864
+ issueCardDone: {
13865
+ borderTopWidth: 3,
13866
+ borderTopColor: "#22c55e"
13867
+ },
13868
+ issueCardReopened: {
13869
+ borderTopWidth: 3,
13870
+ borderTopColor: "#ef4444"
13871
+ },
13872
+ issueCountOpen: {
13873
+ fontSize: 22,
13874
+ fontWeight: "700",
13875
+ color: "#f97316"
13876
+ },
13877
+ issueCountDone: {
13878
+ fontSize: 22,
13879
+ fontWeight: "700",
13880
+ color: "#22c55e"
13881
+ },
13882
+ issueCountReopened: {
13883
+ fontSize: 22,
13884
+ fontWeight: "700",
13885
+ color: "#ef4444"
13886
+ },
13887
+ issueLabel: {
13888
+ fontSize: 11,
13889
+ fontWeight: "600",
13890
+ color: colors.textSecondary,
13891
+ marginTop: 2
13892
+ },
13801
13893
  refreshButton: {
13802
13894
  alignItems: "center",
13803
13895
  paddingVertical: 8
@@ -14153,10 +14245,16 @@ function TestListScreen({ nav }) {
14153
14245
  const filterAssignment = (a) => {
14154
14246
  if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
14155
14247
  if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
14156
- if (filter === "completed") return a.status === "passed" || a.status === "failed";
14248
+ if (filter === "done") return a.status === "passed";
14249
+ if (filter === "reopened") return a.status === "failed";
14157
14250
  return true;
14158
14251
  };
14159
- return /* @__PURE__ */ React4.createElement(View3, null, /* @__PURE__ */ React4.createElement(View3, { style: styles3.filterBar }, ["all", "pending", "completed"].map((f) => /* @__PURE__ */ React4.createElement(TouchableOpacity3, { key: f, style: [styles3.filterBtn, filter === f && styles3.filterBtnActive], onPress: () => setFilter(f) }, /* @__PURE__ */ React4.createElement(Text3, { style: [styles3.filterBtnText, filter === f && styles3.filterBtnTextActive] }, f === "all" ? `All (${assignments.length})` : f === "pending" ? `To Do (${assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length})` : `Done (${assignments.filter((a) => a.status === "passed" || a.status === "failed").length})`)))), availableRoles.length >= 2 && /* @__PURE__ */ React4.createElement(View3, { style: styles3.roleSection }, /* @__PURE__ */ React4.createElement(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles3.roleBar }, /* @__PURE__ */ React4.createElement(
14252
+ return /* @__PURE__ */ React4.createElement(View3, null, /* @__PURE__ */ React4.createElement(View3, { style: styles3.filterBar }, [
14253
+ { key: "all", label: "All", count: assignments.length },
14254
+ { key: "pending", label: "To Do", count: assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length },
14255
+ { key: "done", label: "Done", count: assignments.filter((a) => a.status === "passed").length },
14256
+ { key: "reopened", label: "Re Opened", count: assignments.filter((a) => a.status === "failed").length }
14257
+ ].map((f) => /* @__PURE__ */ React4.createElement(TouchableOpacity3, { key: f.key, style: [styles3.filterBtn, filter === f.key && styles3.filterBtnActive], onPress: () => setFilter(f.key) }, /* @__PURE__ */ React4.createElement(Text3, { style: [styles3.filterBtnText, filter === f.key && styles3.filterBtnTextActive] }, f.label, " (", f.count, ")")))), availableRoles.length >= 2 && /* @__PURE__ */ React4.createElement(View3, { style: styles3.roleSection }, /* @__PURE__ */ React4.createElement(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles3.roleBar }, /* @__PURE__ */ React4.createElement(
14160
14258
  TouchableOpacity3,
14161
14259
  {
14162
14260
  style: [styles3.roleBtn, !roleFilter && styles3.roleBtnActive],
@@ -14194,7 +14292,19 @@ function TestListScreen({ nav }) {
14194
14292
  onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
14195
14293
  },
14196
14294
  /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testBadge }, badge.icon),
14197
- /* @__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.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ React4.createElement(View3, { style: styles3.roleBadgeRow }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testMeta }, " \xB7 "), /* @__PURE__ */ React4.createElement(View3, { style: [styles3.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ React4.createElement(Text3, { style: [styles3.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name))))
14295
+ /* @__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.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ React4.createElement(View3, { style: styles3.roleBadgeRow }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testMeta }, " \xB7 "), /* @__PURE__ */ React4.createElement(View3, { style: [styles3.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ React4.createElement(Text3, { style: [styles3.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name)))),
14296
+ /* @__PURE__ */ React4.createElement(View3, { style: [
14297
+ styles3.statusPill,
14298
+ {
14299
+ backgroundColor: assignment.status === "passed" ? "#14532d" : assignment.status === "failed" ? "#450a0a" : assignment.status === "in_progress" ? "#172554" : "#27272a",
14300
+ borderColor: assignment.status === "passed" ? "#166534" : assignment.status === "failed" ? "#7f1d1d" : assignment.status === "in_progress" ? "#1e3a5f" : "#3f3f46"
14301
+ }
14302
+ ] }, /* @__PURE__ */ React4.createElement(Text3, { style: [
14303
+ styles3.statusPillText,
14304
+ {
14305
+ color: assignment.status === "passed" ? "#4ade80" : assignment.status === "failed" ? "#f87171" : assignment.status === "in_progress" ? "#60a5fa" : "#d4d4d8"
14306
+ }
14307
+ ] }, badge.label))
14198
14308
  );
14199
14309
  }));
14200
14310
  }), /* @__PURE__ */ React4.createElement(TouchableOpacity3, { style: styles3.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.refreshText }, "\u21BB", " Refresh")));
@@ -14232,6 +14342,8 @@ var styles3 = StyleSheet4.create({
14232
14342
  retestTag: { backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 4, paddingHorizontal: 5, paddingVertical: 1 },
14233
14343
  retestTagText: { fontSize: 10, fontWeight: "600", color: "#fbbf24" },
14234
14344
  testMeta: { fontSize: 11, color: colors.textDim },
14345
+ statusPill: { paddingHorizontal: 8, paddingVertical: 3, borderRadius: 6, borderWidth: 1, marginLeft: 8 },
14346
+ statusPillText: { fontSize: 10, fontWeight: "600" },
14235
14347
  refreshBtn: { alignItems: "center", paddingVertical: 12 },
14236
14348
  refreshText: { fontSize: 13, color: colors.blue }
14237
14349
  });
@@ -15116,6 +15228,308 @@ var styles12 = StyleSheet13.create({
15116
15228
  platformTextActive: { color: colors.blueLight }
15117
15229
  });
15118
15230
 
15231
+ // src/widget/screens/IssueListScreen.tsx
15232
+ import React14, { useState as useState10, useEffect as useEffect8 } from "react";
15233
+ import { View as View13, Text as Text13, TouchableOpacity as TouchableOpacity12, StyleSheet as StyleSheet14, ActivityIndicator as ActivityIndicator2 } from "react-native";
15234
+ var CATEGORY_CONFIG = {
15235
+ open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
15236
+ done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
15237
+ reopened: { label: "Reopened", accent: "#ef4444", emptyIcon: "\u{1F44D}", emptyText: "No reopened issues" }
15238
+ };
15239
+ var SEVERITY_COLORS = {
15240
+ critical: "#ef4444",
15241
+ high: "#f97316",
15242
+ medium: "#eab308",
15243
+ low: "#71717a"
15244
+ };
15245
+ function IssueListScreen({ nav, category }) {
15246
+ const { client } = useBugBear();
15247
+ const [issues, setIssues] = useState10([]);
15248
+ const [loading, setLoading] = useState10(true);
15249
+ const config = CATEGORY_CONFIG[category];
15250
+ useEffect8(() => {
15251
+ let cancelled = false;
15252
+ setLoading(true);
15253
+ (async () => {
15254
+ if (!client) return;
15255
+ const data = await client.getIssues(category);
15256
+ if (!cancelled) {
15257
+ setIssues(data);
15258
+ setLoading(false);
15259
+ }
15260
+ })();
15261
+ return () => {
15262
+ cancelled = true;
15263
+ };
15264
+ }, [client, category]);
15265
+ if (loading) {
15266
+ return /* @__PURE__ */ React14.createElement(View13, { style: styles13.emptyContainer }, /* @__PURE__ */ React14.createElement(ActivityIndicator2, { size: "small", color: colors.textMuted }), /* @__PURE__ */ React14.createElement(Text13, { style: styles13.emptyText }, "Loading..."));
15267
+ }
15268
+ if (issues.length === 0) {
15269
+ return /* @__PURE__ */ React14.createElement(View13, { style: styles13.emptyContainer }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.emptyIcon }, config.emptyIcon), /* @__PURE__ */ React14.createElement(Text13, { style: styles13.emptyText }, config.emptyText));
15270
+ }
15271
+ return /* @__PURE__ */ React14.createElement(View13, null, issues.map((issue) => /* @__PURE__ */ React14.createElement(
15272
+ TouchableOpacity12,
15273
+ {
15274
+ key: issue.id,
15275
+ style: styles13.issueCard,
15276
+ onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
15277
+ activeOpacity: 0.7
15278
+ },
15279
+ /* @__PURE__ */ React14.createElement(View13, { style: styles13.topRow }, issue.severity && /* @__PURE__ */ React14.createElement(View13, { style: [styles13.severityDot, { backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim }] }), /* @__PURE__ */ React14.createElement(Text13, { style: styles13.issueTitle, numberOfLines: 1 }, issue.title)),
15280
+ /* @__PURE__ */ React14.createElement(View13, { style: styles13.bottomRow }, issue.route && /* @__PURE__ */ React14.createElement(Text13, { style: styles13.routeText, numberOfLines: 1 }, issue.route), /* @__PURE__ */ React14.createElement(Text13, { style: styles13.timeText }, formatRelativeTime(issue.updatedAt))),
15281
+ category === "done" && issue.verifiedByName && /* @__PURE__ */ React14.createElement(View13, { style: styles13.verifiedBadge }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.verifiedBadgeText }, "\u2714", " Verified by ", issue.verifiedByName)),
15282
+ category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ React14.createElement(View13, { style: styles13.reopenedBadge }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.reopenedBadgeText, numberOfLines: 1 }, "\u{1F504}", " Retest of: ", issue.originalBugTitle))
15283
+ )));
15284
+ }
15285
+ var styles13 = StyleSheet14.create({
15286
+ emptyContainer: {
15287
+ alignItems: "center",
15288
+ paddingVertical: 40
15289
+ },
15290
+ emptyIcon: {
15291
+ fontSize: 36,
15292
+ marginBottom: 8
15293
+ },
15294
+ emptyText: {
15295
+ color: colors.textMuted,
15296
+ fontSize: 14,
15297
+ marginTop: 4
15298
+ },
15299
+ issueCard: {
15300
+ backgroundColor: colors.card,
15301
+ borderWidth: 1,
15302
+ borderColor: colors.border,
15303
+ borderRadius: 10,
15304
+ padding: 14,
15305
+ marginBottom: 8
15306
+ },
15307
+ topRow: {
15308
+ flexDirection: "row",
15309
+ alignItems: "flex-start",
15310
+ gap: 8
15311
+ },
15312
+ severityDot: {
15313
+ width: 8,
15314
+ height: 8,
15315
+ borderRadius: 4,
15316
+ marginTop: 5
15317
+ },
15318
+ issueTitle: {
15319
+ fontSize: 13,
15320
+ fontWeight: "600",
15321
+ color: colors.textPrimary,
15322
+ flex: 1
15323
+ },
15324
+ bottomRow: {
15325
+ flexDirection: "row",
15326
+ justifyContent: "space-between",
15327
+ marginTop: 6
15328
+ },
15329
+ routeText: {
15330
+ fontSize: 11,
15331
+ color: colors.textDim,
15332
+ maxWidth: "60%"
15333
+ },
15334
+ timeText: {
15335
+ fontSize: 11,
15336
+ color: colors.textDim,
15337
+ marginLeft: "auto"
15338
+ },
15339
+ verifiedBadge: {
15340
+ flexDirection: "row",
15341
+ alignItems: "center",
15342
+ backgroundColor: "#14532d",
15343
+ borderWidth: 1,
15344
+ borderColor: "#166534",
15345
+ borderRadius: 6,
15346
+ paddingHorizontal: 8,
15347
+ paddingVertical: 2,
15348
+ marginTop: 6,
15349
+ alignSelf: "flex-start"
15350
+ },
15351
+ verifiedBadgeText: {
15352
+ fontSize: 10,
15353
+ fontWeight: "600",
15354
+ color: "#4ade80"
15355
+ },
15356
+ reopenedBadge: {
15357
+ flexDirection: "row",
15358
+ alignItems: "center",
15359
+ backgroundColor: "#422006",
15360
+ borderWidth: 1,
15361
+ borderColor: "#854d0e",
15362
+ borderRadius: 6,
15363
+ paddingHorizontal: 8,
15364
+ paddingVertical: 2,
15365
+ marginTop: 6,
15366
+ alignSelf: "flex-start"
15367
+ },
15368
+ reopenedBadgeText: {
15369
+ fontSize: 10,
15370
+ fontWeight: "600",
15371
+ color: "#fbbf24"
15372
+ }
15373
+ });
15374
+
15375
+ // src/widget/screens/IssueDetailScreen.tsx
15376
+ import React15 from "react";
15377
+ import { View as View14, Text as Text14, Image as Image3, StyleSheet as StyleSheet15, Linking as Linking2, TouchableOpacity as TouchableOpacity13 } from "react-native";
15378
+ var STATUS_LABELS = {
15379
+ new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
15380
+ triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
15381
+ confirmed: { label: "Confirmed", bg: "#422006", color: "#fbbf24" },
15382
+ in_progress: { label: "In Progress", bg: "#1e3a5f", color: "#60a5fa" },
15383
+ fixed: { label: "Fixed", bg: "#14532d", color: "#4ade80" },
15384
+ ready_to_test: { label: "Ready to Test", bg: "#422006", color: "#fbbf24" },
15385
+ verified: { label: "Verified", bg: "#14532d", color: "#4ade80" },
15386
+ resolved: { label: "Resolved", bg: "#14532d", color: "#4ade80" },
15387
+ reviewed: { label: "Reviewed", bg: "#14532d", color: "#4ade80" },
15388
+ closed: { label: "Closed", bg: "#27272a", color: "#71717a" },
15389
+ wont_fix: { label: "Won't Fix", bg: "#27272a", color: "#71717a" },
15390
+ duplicate: { label: "Duplicate", bg: "#27272a", color: "#71717a" }
15391
+ };
15392
+ var SEVERITY_CONFIG = {
15393
+ critical: { label: "Critical", color: "#ef4444", bg: "#7f1d1d" },
15394
+ high: { label: "High", color: "#f97316", bg: "#431407" },
15395
+ medium: { label: "Medium", color: "#eab308", bg: "#422006" },
15396
+ low: { label: "Low", color: "#71717a", bg: "#27272a" }
15397
+ };
15398
+ function IssueDetailScreen({ nav, issue }) {
15399
+ const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
15400
+ const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
15401
+ return /* @__PURE__ */ React15.createElement(View14, null, /* @__PURE__ */ React15.createElement(View14, { style: styles14.badgeRow }, /* @__PURE__ */ React15.createElement(View14, { style: [styles14.badge, { backgroundColor: statusConfig.bg }] }, /* @__PURE__ */ React15.createElement(Text14, { style: [styles14.badgeText, { color: statusConfig.color }] }, statusConfig.label)), severityConfig && /* @__PURE__ */ React15.createElement(View14, { style: [styles14.badge, { backgroundColor: severityConfig.bg }] }, /* @__PURE__ */ React15.createElement(Text14, { style: [styles14.badgeText, { color: severityConfig.color }] }, severityConfig.label))), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.title }, issue.title), issue.route && /* @__PURE__ */ React15.createElement(Text14, { style: styles14.route }, issue.route), issue.description && /* @__PURE__ */ React15.createElement(View14, { style: styles14.descriptionCard }, /* @__PURE__ */ React15.createElement(Text14, { style: styles14.descriptionText }, issue.description)), issue.verifiedByName && /* @__PURE__ */ React15.createElement(View14, { style: styles14.verifiedCard }, /* @__PURE__ */ React15.createElement(View14, { style: styles14.verifiedHeader }, /* @__PURE__ */ React15.createElement(Text14, { style: styles14.verifiedIcon }, "\u2705"), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.verifiedTitle }, "Retesting Proof")), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.verifiedBody }, "Verified by ", issue.verifiedByName, issue.verifiedAt && ` on ${new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })}`)), issue.originalBugTitle && /* @__PURE__ */ React15.createElement(View14, { style: styles14.originalBugCard }, /* @__PURE__ */ React15.createElement(View14, { style: styles14.originalBugHeader }, /* @__PURE__ */ React15.createElement(Text14, { style: styles14.originalBugIcon }, "\u{1F504}"), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.originalBugTitle }, "Original Bug")), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.originalBugBody }, "Retest of: ", issue.originalBugTitle)), issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ React15.createElement(View14, { style: styles14.screenshotSection }, /* @__PURE__ */ React15.createElement(Text14, { style: styles14.screenshotLabel }, "Screenshots (", issue.screenshotUrls.length, ")"), /* @__PURE__ */ React15.createElement(View14, { style: styles14.screenshotRow }, issue.screenshotUrls.map((url, i) => /* @__PURE__ */ React15.createElement(TouchableOpacity13, { key: i, onPress: () => Linking2.openURL(url), activeOpacity: 0.7 }, /* @__PURE__ */ React15.createElement(Image3, { source: { uri: url }, style: styles14.screenshotThumb }))))), /* @__PURE__ */ React15.createElement(View14, { style: styles14.metaSection }, issue.reporterName && /* @__PURE__ */ React15.createElement(Text14, { style: styles14.metaText }, "Reported by ", issue.reporterName), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.metaTextSmall }, "Created ", formatRelativeTime(issue.createdAt), " ", "\xB7", " Updated ", formatRelativeTime(issue.updatedAt))));
15402
+ }
15403
+ var styles14 = StyleSheet15.create({
15404
+ badgeRow: {
15405
+ flexDirection: "row",
15406
+ gap: 8,
15407
+ flexWrap: "wrap",
15408
+ marginBottom: 12
15409
+ },
15410
+ badge: {
15411
+ paddingHorizontal: 10,
15412
+ paddingVertical: 3,
15413
+ borderRadius: 6
15414
+ },
15415
+ badgeText: {
15416
+ fontSize: 11,
15417
+ fontWeight: "600"
15418
+ },
15419
+ title: {
15420
+ fontSize: 16,
15421
+ fontWeight: "700",
15422
+ color: colors.textPrimary,
15423
+ marginBottom: 8,
15424
+ lineHeight: 21
15425
+ },
15426
+ route: {
15427
+ fontSize: 12,
15428
+ color: colors.textDim,
15429
+ marginBottom: 12
15430
+ },
15431
+ descriptionCard: {
15432
+ backgroundColor: colors.card,
15433
+ borderWidth: 1,
15434
+ borderColor: colors.border,
15435
+ borderRadius: 8,
15436
+ padding: 12,
15437
+ marginBottom: 12
15438
+ },
15439
+ descriptionText: {
15440
+ fontSize: 13,
15441
+ color: colors.textSecondary,
15442
+ lineHeight: 19
15443
+ },
15444
+ verifiedCard: {
15445
+ backgroundColor: "#14532d",
15446
+ borderWidth: 1,
15447
+ borderColor: "#166534",
15448
+ borderRadius: 8,
15449
+ padding: 12,
15450
+ marginBottom: 12
15451
+ },
15452
+ verifiedHeader: {
15453
+ flexDirection: "row",
15454
+ alignItems: "center",
15455
+ gap: 8,
15456
+ marginBottom: 4
15457
+ },
15458
+ verifiedIcon: {
15459
+ fontSize: 16
15460
+ },
15461
+ verifiedTitle: {
15462
+ fontSize: 13,
15463
+ fontWeight: "600",
15464
+ color: "#4ade80"
15465
+ },
15466
+ verifiedBody: {
15467
+ fontSize: 12,
15468
+ color: "#86efac"
15469
+ },
15470
+ originalBugCard: {
15471
+ backgroundColor: "#422006",
15472
+ borderWidth: 1,
15473
+ borderColor: "#854d0e",
15474
+ borderRadius: 8,
15475
+ padding: 12,
15476
+ marginBottom: 12
15477
+ },
15478
+ originalBugHeader: {
15479
+ flexDirection: "row",
15480
+ alignItems: "center",
15481
+ gap: 8,
15482
+ marginBottom: 4
15483
+ },
15484
+ originalBugIcon: {
15485
+ fontSize: 16
15486
+ },
15487
+ originalBugTitle: {
15488
+ fontSize: 13,
15489
+ fontWeight: "600",
15490
+ color: "#fbbf24"
15491
+ },
15492
+ originalBugBody: {
15493
+ fontSize: 12,
15494
+ color: "#fde68a"
15495
+ },
15496
+ screenshotSection: {
15497
+ marginBottom: 12
15498
+ },
15499
+ screenshotLabel: {
15500
+ fontSize: 12,
15501
+ fontWeight: "600",
15502
+ color: colors.textMuted,
15503
+ marginBottom: 8
15504
+ },
15505
+ screenshotRow: {
15506
+ flexDirection: "row",
15507
+ gap: 8
15508
+ },
15509
+ screenshotThumb: {
15510
+ width: 80,
15511
+ height: 60,
15512
+ borderRadius: 6,
15513
+ borderWidth: 1,
15514
+ borderColor: colors.border
15515
+ },
15516
+ metaSection: {
15517
+ borderTopWidth: 1,
15518
+ borderTopColor: colors.border,
15519
+ paddingTop: 12,
15520
+ marginTop: 4
15521
+ },
15522
+ metaText: {
15523
+ fontSize: 12,
15524
+ color: colors.textDim,
15525
+ marginBottom: 4
15526
+ },
15527
+ metaTextSmall: {
15528
+ fontSize: 11,
15529
+ color: colors.textDim
15530
+ }
15531
+ });
15532
+
15119
15533
  // src/BugBearButton.tsx
15120
15534
  var screenWidth = Dimensions2.get("window").width;
15121
15535
  var screenHeight = Dimensions2.get("window").height;
@@ -15130,7 +15544,7 @@ function BugBearButton({
15130
15544
  }) {
15131
15545
  const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments } = useBugBear();
15132
15546
  const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
15133
- const [modalVisible, setModalVisible] = useState10(false);
15547
+ const [modalVisible, setModalVisible] = useState11(false);
15134
15548
  const getInitialPosition = () => {
15135
15549
  const buttonSize = 56;
15136
15550
  const margin = 16;
@@ -15209,6 +15623,10 @@ function BugBearButton({
15209
15623
  return currentScreen.thread.subject || "Thread";
15210
15624
  case "COMPOSE_MESSAGE":
15211
15625
  return "New Message";
15626
+ case "ISSUE_LIST":
15627
+ return currentScreen.category === "open" ? "Open Issues" : currentScreen.category === "done" ? "Done" : "Reopened";
15628
+ case "ISSUE_DETAIL":
15629
+ return "Issue Detail";
15212
15630
  case "PROFILE":
15213
15631
  return "Profile";
15214
15632
  default:
@@ -15242,46 +15660,50 @@ function BugBearButton({
15242
15660
  const renderScreen = () => {
15243
15661
  switch (currentScreen.name) {
15244
15662
  case "HOME":
15245
- return /* @__PURE__ */ React14.createElement(HomeScreen, { nav });
15663
+ return /* @__PURE__ */ React16.createElement(HomeScreen, { nav });
15246
15664
  case "TEST_DETAIL":
15247
- return /* @__PURE__ */ React14.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
15665
+ return /* @__PURE__ */ React16.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
15248
15666
  case "TEST_LIST":
15249
- return /* @__PURE__ */ React14.createElement(TestListScreen, { nav });
15667
+ return /* @__PURE__ */ React16.createElement(TestListScreen, { nav });
15250
15668
  case "TEST_FEEDBACK":
15251
- return /* @__PURE__ */ React14.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
15669
+ return /* @__PURE__ */ React16.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
15252
15670
  case "REPORT":
15253
- return /* @__PURE__ */ React14.createElement(ReportScreen, { nav, prefill: currentScreen.prefill });
15671
+ return /* @__PURE__ */ React16.createElement(ReportScreen, { nav, prefill: currentScreen.prefill });
15254
15672
  case "REPORT_SUCCESS":
15255
- return /* @__PURE__ */ React14.createElement(ReportSuccessScreen, { nav });
15673
+ return /* @__PURE__ */ React16.createElement(ReportSuccessScreen, { nav });
15256
15674
  case "MESSAGE_LIST":
15257
- return /* @__PURE__ */ React14.createElement(MessageListScreen, { nav });
15675
+ return /* @__PURE__ */ React16.createElement(MessageListScreen, { nav });
15258
15676
  case "THREAD_DETAIL":
15259
- return /* @__PURE__ */ React14.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
15677
+ return /* @__PURE__ */ React16.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
15260
15678
  case "COMPOSE_MESSAGE":
15261
- return /* @__PURE__ */ React14.createElement(ComposeMessageScreen, { nav });
15679
+ return /* @__PURE__ */ React16.createElement(ComposeMessageScreen, { nav });
15680
+ case "ISSUE_LIST":
15681
+ return /* @__PURE__ */ React16.createElement(IssueListScreen, { nav, category: currentScreen.category });
15682
+ case "ISSUE_DETAIL":
15683
+ return /* @__PURE__ */ React16.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
15262
15684
  case "PROFILE":
15263
- return /* @__PURE__ */ React14.createElement(ProfileScreen, { nav });
15685
+ return /* @__PURE__ */ React16.createElement(ProfileScreen, { nav });
15264
15686
  default:
15265
- return /* @__PURE__ */ React14.createElement(HomeScreen, { nav });
15687
+ return /* @__PURE__ */ React16.createElement(HomeScreen, { nav });
15266
15688
  }
15267
15689
  };
15268
- return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
15690
+ return /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(
15269
15691
  Animated.View,
15270
15692
  {
15271
- style: [styles13.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
15693
+ style: [styles15.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
15272
15694
  ...panResponder.panHandlers
15273
15695
  },
15274
- /* @__PURE__ */ React14.createElement(
15275
- TouchableOpacity12,
15696
+ /* @__PURE__ */ React16.createElement(
15697
+ TouchableOpacity14,
15276
15698
  {
15277
- style: styles13.fab,
15699
+ style: styles15.fab,
15278
15700
  onPress: () => setModalVisible(true),
15279
15701
  activeOpacity: draggable ? 1 : 0.7
15280
15702
  },
15281
- /* @__PURE__ */ React14.createElement(Image3, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles13.fabIcon }),
15282
- badgeCount > 0 && /* @__PURE__ */ React14.createElement(View13, { style: styles13.badge }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
15703
+ /* @__PURE__ */ React16.createElement(Image4, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles15.fabIcon }),
15704
+ badgeCount > 0 && /* @__PURE__ */ React16.createElement(View15, { style: styles15.badge }, /* @__PURE__ */ React16.createElement(Text15, { style: styles15.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
15283
15705
  )
15284
- ), /* @__PURE__ */ React14.createElement(
15706
+ ), /* @__PURE__ */ React16.createElement(
15285
15707
  Modal2,
15286
15708
  {
15287
15709
  visible: modalVisible,
@@ -15289,26 +15711,26 @@ function BugBearButton({
15289
15711
  transparent: true,
15290
15712
  onRequestClose: handleClose
15291
15713
  },
15292
- /* @__PURE__ */ React14.createElement(
15714
+ /* @__PURE__ */ React16.createElement(
15293
15715
  KeyboardAvoidingView,
15294
15716
  {
15295
15717
  behavior: Platform4.OS === "ios" ? "padding" : "height",
15296
- style: styles13.modalOverlay
15718
+ style: styles15.modalOverlay
15297
15719
  },
15298
- /* @__PURE__ */ React14.createElement(View13, { style: styles13.modalContainer }, /* @__PURE__ */ React14.createElement(View13, { style: styles13.header }, /* @__PURE__ */ React14.createElement(View13, { style: styles13.headerLeft }, canGoBack ? /* @__PURE__ */ React14.createElement(View13, { style: styles13.headerNavRow }, /* @__PURE__ */ React14.createElement(TouchableOpacity12, { onPress: () => nav.pop(), style: styles13.backButton }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.backText }, "\u2190 Back")), /* @__PURE__ */ React14.createElement(TouchableOpacity12, { onPress: () => nav.reset(), style: styles13.homeButton }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.homeText }, "\u{1F3E0}"))) : /* @__PURE__ */ React14.createElement(View13, { style: styles13.headerTitleRow }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ React14.createElement(TouchableOpacity12, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ React14.createElement(Text13, { style: styles13.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ React14.createElement(TouchableOpacity12, { onPress: handleClose, style: styles13.closeButton }, /* @__PURE__ */ React14.createElement(Text13, { style: styles13.closeText }, "\u2715"))), /* @__PURE__ */ React14.createElement(
15720
+ /* @__PURE__ */ React16.createElement(View15, { style: styles15.modalContainer }, /* @__PURE__ */ React16.createElement(View15, { style: styles15.header }, /* @__PURE__ */ React16.createElement(View15, { style: styles15.headerLeft }, canGoBack ? /* @__PURE__ */ React16.createElement(View15, { style: styles15.headerNavRow }, /* @__PURE__ */ React16.createElement(TouchableOpacity14, { onPress: () => nav.pop(), style: styles15.backButton }, /* @__PURE__ */ React16.createElement(Text15, { style: styles15.backText }, "\u2190 Back")), /* @__PURE__ */ React16.createElement(TouchableOpacity14, { onPress: () => nav.reset(), style: styles15.homeButton }, /* @__PURE__ */ React16.createElement(Text15, { style: styles15.homeText }, "\u{1F3E0}"))) : /* @__PURE__ */ React16.createElement(View15, { style: styles15.headerTitleRow }, /* @__PURE__ */ React16.createElement(Text15, { style: styles15.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ React16.createElement(TouchableOpacity14, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ React16.createElement(Text15, { style: styles15.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ React16.createElement(Text15, { style: styles15.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ React16.createElement(TouchableOpacity14, { onPress: handleClose, style: styles15.closeButton }, /* @__PURE__ */ React16.createElement(Text15, { style: styles15.closeText }, "\u2715"))), /* @__PURE__ */ React16.createElement(
15299
15721
  ScrollView3,
15300
15722
  {
15301
- style: styles13.content,
15302
- contentContainerStyle: styles13.contentContainer,
15723
+ style: styles15.content,
15724
+ contentContainerStyle: styles15.contentContainer,
15303
15725
  keyboardShouldPersistTaps: "handled",
15304
15726
  showsVerticalScrollIndicator: false
15305
15727
  },
15306
- isLoading ? /* @__PURE__ */ React14.createElement(View13, { style: styles13.loadingContainer }, /* @__PURE__ */ React14.createElement(ActivityIndicator2, { size: "large", color: colors.blue }), /* @__PURE__ */ React14.createElement(Text13, { style: styles13.loadingText }, "Loading...")) : renderScreen()
15728
+ isLoading ? /* @__PURE__ */ React16.createElement(View15, { style: styles15.loadingContainer }, /* @__PURE__ */ React16.createElement(ActivityIndicator3, { size: "large", color: colors.blue }), /* @__PURE__ */ React16.createElement(Text15, { style: styles15.loadingText }, "Loading...")) : renderScreen()
15307
15729
  ))
15308
15730
  )
15309
15731
  ));
15310
15732
  }
15311
- var styles13 = StyleSheet14.create({
15733
+ var styles15 = StyleSheet16.create({
15312
15734
  // FAB
15313
15735
  fabContainer: {
15314
15736
  position: "absolute",
@@ -15450,8 +15872,8 @@ var styles13 = StyleSheet14.create({
15450
15872
  });
15451
15873
 
15452
15874
  // src/BugBearErrorBoundary.tsx
15453
- import React15, { Component } from "react";
15454
- import { View as View14, Text as Text14, TouchableOpacity as TouchableOpacity13, StyleSheet as StyleSheet15 } from "react-native";
15875
+ import React17, { Component } from "react";
15876
+ import { View as View16, Text as Text16, TouchableOpacity as TouchableOpacity15, StyleSheet as StyleSheet17 } from "react-native";
15455
15877
  var BugBearErrorBoundary = class extends Component {
15456
15878
  constructor(props) {
15457
15879
  super(props);
@@ -15496,7 +15918,7 @@ var BugBearErrorBoundary = class extends Component {
15496
15918
  if (fallback) {
15497
15919
  return fallback;
15498
15920
  }
15499
- return /* @__PURE__ */ React15.createElement(View14, { style: styles14.container }, /* @__PURE__ */ React15.createElement(Text14, { style: styles14.title }, "Something went wrong"), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.message }, error.message), /* @__PURE__ */ React15.createElement(TouchableOpacity13, { style: styles14.button, onPress: this.reset }, /* @__PURE__ */ React15.createElement(Text14, { style: styles14.buttonText }, "Try Again")), /* @__PURE__ */ React15.createElement(Text14, { style: styles14.caption }, "The error has been captured by BugBear"));
15921
+ return /* @__PURE__ */ React17.createElement(View16, { style: styles16.container }, /* @__PURE__ */ React17.createElement(Text16, { style: styles16.title }, "Something went wrong"), /* @__PURE__ */ React17.createElement(Text16, { style: styles16.message }, error.message), /* @__PURE__ */ React17.createElement(TouchableOpacity15, { style: styles16.button, onPress: this.reset }, /* @__PURE__ */ React17.createElement(Text16, { style: styles16.buttonText }, "Try Again")), /* @__PURE__ */ React17.createElement(Text16, { style: styles16.caption }, "The error has been captured by BugBear"));
15500
15922
  }
15501
15923
  return children;
15502
15924
  }
@@ -15507,7 +15929,7 @@ function useErrorContext() {
15507
15929
  getEnhancedContext: () => contextCapture.getEnhancedContext()
15508
15930
  };
15509
15931
  }
15510
- var styles14 = StyleSheet15.create({
15932
+ var styles16 = StyleSheet17.create({
15511
15933
  container: {
15512
15934
  padding: 20,
15513
15935
  margin: 20,