react-native-inapp-inspector 1.1.34 → 1.1.35

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 (75) hide show
  1. package/dist/commonjs/components/ConsoleLogCard.js +57 -56
  2. package/dist/commonjs/components/CopyButton.js +7 -1
  3. package/dist/commonjs/components/Inspector/BundleTab.js +19 -19
  4. package/dist/commonjs/components/Inspector/CrashDetail.js +16 -12
  5. package/dist/commonjs/components/Inspector/InspectorHeader.js +16 -16
  6. package/dist/commonjs/components/Inspector/MainScreen.js +6 -2
  7. package/dist/commonjs/components/Inspector/NetworkTab.js +97 -1
  8. package/dist/commonjs/components/Inspector/ReduxDetail.js +24 -19
  9. package/dist/commonjs/components/Inspector/ReduxTab.js +12 -8
  10. package/dist/commonjs/components/Inspector/SettingsPanel.js +1243 -673
  11. package/dist/commonjs/components/LogCard.js +27 -9
  12. package/dist/commonjs/components/MetaAccordion.js +42 -0
  13. package/dist/commonjs/components/NetworkIcons.d.ts +9 -0
  14. package/dist/commonjs/components/NetworkIcons.js +48 -1
  15. package/dist/commonjs/components/Toast.js +3 -3
  16. package/dist/commonjs/components/TouchableScale.d.ts +4 -2
  17. package/dist/commonjs/components/TouchableScale.js +4 -4
  18. package/dist/commonjs/constants/version.d.ts +1 -1
  19. package/dist/commonjs/constants/version.js +1 -1
  20. package/dist/commonjs/customHooks/analyticsLogger.d.ts +2 -0
  21. package/dist/commonjs/customHooks/analyticsLogger.js +10 -1
  22. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +2 -0
  23. package/dist/commonjs/customHooks/bundleAnalyzer.js +26 -17
  24. package/dist/commonjs/customHooks/consoleLogger.d.ts +2 -0
  25. package/dist/commonjs/customHooks/consoleLogger.js +10 -1
  26. package/dist/commonjs/customHooks/crashHandler.d.ts +2 -0
  27. package/dist/commonjs/customHooks/crashHandler.js +10 -1
  28. package/dist/commonjs/customHooks/networkLogger.d.ts +2 -0
  29. package/dist/commonjs/customHooks/networkLogger.js +12 -1
  30. package/dist/commonjs/customHooks/performanceTracker.d.ts +3 -1
  31. package/dist/commonjs/customHooks/performanceTracker.js +18 -4
  32. package/dist/commonjs/customHooks/reduxLogger.d.ts +2 -0
  33. package/dist/commonjs/customHooks/reduxLogger.js +10 -1
  34. package/dist/commonjs/i18n/locales/en.json +96 -28
  35. package/dist/commonjs/index.js +78 -34
  36. package/dist/commonjs/styles/AppColors.d.ts +28 -0
  37. package/dist/commonjs/styles/AppColors.js +30 -0
  38. package/dist/esm/components/ConsoleLogCard.js +58 -57
  39. package/dist/esm/components/CopyButton.js +7 -1
  40. package/dist/esm/components/Inspector/BundleTab.js +19 -19
  41. package/dist/esm/components/Inspector/CrashDetail.js +16 -12
  42. package/dist/esm/components/Inspector/InspectorHeader.js +16 -16
  43. package/dist/esm/components/Inspector/MainScreen.js +6 -2
  44. package/dist/esm/components/Inspector/NetworkTab.js +99 -3
  45. package/dist/esm/components/Inspector/ReduxDetail.js +24 -19
  46. package/dist/esm/components/Inspector/ReduxTab.js +12 -8
  47. package/dist/esm/components/Inspector/SettingsPanel.js +1246 -676
  48. package/dist/esm/components/LogCard.js +27 -9
  49. package/dist/esm/components/MetaAccordion.js +42 -0
  50. package/dist/esm/components/NetworkIcons.d.ts +9 -0
  51. package/dist/esm/components/NetworkIcons.js +38 -0
  52. package/dist/esm/components/Toast.js +3 -3
  53. package/dist/esm/components/TouchableScale.d.ts +4 -2
  54. package/dist/esm/components/TouchableScale.js +4 -4
  55. package/dist/esm/constants/version.d.ts +1 -1
  56. package/dist/esm/constants/version.js +1 -1
  57. package/dist/esm/customHooks/analyticsLogger.d.ts +2 -0
  58. package/dist/esm/customHooks/analyticsLogger.js +7 -0
  59. package/dist/esm/customHooks/bundleAnalyzer.d.ts +2 -0
  60. package/dist/esm/customHooks/bundleAnalyzer.js +23 -16
  61. package/dist/esm/customHooks/consoleLogger.d.ts +2 -0
  62. package/dist/esm/customHooks/consoleLogger.js +7 -0
  63. package/dist/esm/customHooks/crashHandler.d.ts +2 -0
  64. package/dist/esm/customHooks/crashHandler.js +7 -0
  65. package/dist/esm/customHooks/networkLogger.d.ts +2 -0
  66. package/dist/esm/customHooks/networkLogger.js +9 -0
  67. package/dist/esm/customHooks/performanceTracker.d.ts +3 -1
  68. package/dist/esm/customHooks/performanceTracker.js +15 -3
  69. package/dist/esm/customHooks/reduxLogger.d.ts +2 -0
  70. package/dist/esm/customHooks/reduxLogger.js +7 -0
  71. package/dist/esm/i18n/locales/en.json +96 -28
  72. package/dist/esm/index.js +64 -20
  73. package/dist/esm/styles/AppColors.d.ts +28 -0
  74. package/dist/esm/styles/AppColors.js +30 -0
  75. package/package.json +3 -2
@@ -50,6 +50,7 @@ const styles_1 = __importDefault(require("../../styles"));
50
50
  const AppColors_1 = require("../../styles/AppColors");
51
51
  const AppFonts_1 = require("../../styles/AppFonts");
52
52
  const constants_1 = require("../../constants");
53
+ const i18n_1 = require("../../i18n");
53
54
  const NetworkIcons_1 = require("../NetworkIcons");
54
55
  const STATUS_META = {
55
56
  ALL: { color: AppColors_1.AppColors.grayText, Icon: NetworkIcons_1.LayersIcon },
@@ -96,8 +97,43 @@ const FilterChip = react_1.default.memo(({ label, color, Icon, badge, active, on
96
97
  });
97
98
  const NetworkTab = react_1.default.memo(() => {
98
99
  const { groupedData, search, setSearch, handleDelete, selectedLogs, sortOrder, setSortOrder, statusFilters, setStatusFilters, methodFilters, setMethodFilters, availableMethods, filteredLogs, logs, toggleSectionFilter, toggleSectionCollapse, minStart, totalRange, newLogIds, toggleSelect, setSelected, isNetworkPaused, setIsNetworkPaused, } = (0, InspectorContext_1.useInspector)();
100
+ const { t } = (0, i18n_1.useTranslation)();
99
101
  const filtersAccordion = (0, useAccordion_1.default)(false, 300, 260);
100
102
  const apisListRef = (0, react_1.useRef)(null);
103
+ const networkMetrics = (0, react_1.useMemo)(() => {
104
+ if (!logs || logs.length === 0)
105
+ return null;
106
+ let successCount = 0;
107
+ let completedCount = 0;
108
+ let totalDuration = 0;
109
+ let totalBytes = 0;
110
+ const durations = [];
111
+ logs.forEach(log => {
112
+ if (log.status != null) {
113
+ completedCount++;
114
+ const s = typeof log.status === 'number' ? log.status : parseInt(String(log.status), 10);
115
+ if (!isNaN(s)) {
116
+ if (s >= 200 && s < 400) {
117
+ successCount++;
118
+ }
119
+ }
120
+ }
121
+ if (typeof log.duration === 'number' && log.duration > 0) {
122
+ durations.push(log.duration);
123
+ totalDuration += log.duration;
124
+ }
125
+ });
126
+ durations.sort((a, b) => a - b);
127
+ const avgDuration = durations.length > 0 ? Math.round(totalDuration / durations.length) : 0;
128
+ const p95 = durations.length > 0 ? durations[Math.floor(durations.length * 0.95)] : 0;
129
+ const successRate = completedCount > 0 ? Math.round((successCount / completedCount) * 100) : 100;
130
+ return {
131
+ successRate,
132
+ avgDuration,
133
+ p95,
134
+ totalCount: logs.length,
135
+ };
136
+ }, [logs]);
101
137
  const renderItem = (0, react_1.useCallback)(({ item, index }) => {
102
138
  if (item.type === 'header') {
103
139
  return (<AnimatedEntrance_1.default index={index} distance={8}>
@@ -136,7 +172,67 @@ const NetworkTab = react_1.default.memo(() => {
136
172
  setSelected,
137
173
  ]);
138
174
  return (<react_native_1.View style={{ flex: 1 }}>
139
- <react_native_1.FlatList ref={apisListRef} data={groupedData} keyExtractor={item => item?.id?.toString()} renderItem={renderItem} initialNumToRender={10} maxToRenderPerBatch={10} windowSize={5} removeClippedSubviews={true} ListHeaderComponent={<react_native_1.View style={{ marginTop: 8 }}>
175
+ <react_native_1.FlatList ref={apisListRef} data={groupedData} keyExtractor={item => item?.id?.toString()} renderItem={renderItem} initialNumToRender={10} maxToRenderPerBatch={10} windowSize={5} removeClippedSubviews={true} ListHeaderComponent={<react_native_1.View style={{ marginTop: 6 }}>
176
+ {/* Network Health & Telemetry Strip */}
177
+ {networkMetrics != null && networkMetrics.totalCount > 0 && (<react_native_1.View style={{
178
+ flexDirection: 'row',
179
+ alignItems: 'center',
180
+ justifyContent: 'space-between',
181
+ backgroundColor: AppColors_1.AppColors.grayBackground,
182
+ borderRadius: 8,
183
+ paddingHorizontal: 10,
184
+ paddingVertical: 5.5,
185
+ marginHorizontal: 12,
186
+ marginBottom: 6,
187
+ borderWidth: 1,
188
+ borderColor: AppColors_1.AppColors.dividerColor,
189
+ }}>
190
+ {/* Success Rate */}
191
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4.5 }}>
192
+ <react_native_1.View style={{
193
+ width: 6,
194
+ height: 6,
195
+ borderRadius: 3,
196
+ backgroundColor: networkMetrics.successRate >= 95
197
+ ? AppColors_1.AppColors.greenColor
198
+ : networkMetrics.successRate >= 80
199
+ ? AppColors_1.AppColors.amber500
200
+ : AppColors_1.AppColors.errorColor,
201
+ }}/>
202
+ <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interBold, fontSize: 10.5, color: AppColors_1.AppColors.primaryBlack }}>
203
+ {networkMetrics.successRate}%
204
+ </react_native_1.Text>
205
+ <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interRegular, fontSize: 10, color: AppColors_1.AppColors.grayTextWeak }}>
206
+ {t('network.successRate')}
207
+ </react_native_1.Text>
208
+ </react_native_1.View>
209
+
210
+ <react_native_1.View style={{ width: 1, height: 11, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
211
+
212
+ {/* Avg Latency */}
213
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
214
+ <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.purple} size={10}/>
215
+ <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interBold, fontSize: 10.5, color: AppColors_1.AppColors.purple }}>
216
+ {networkMetrics.avgDuration}ms
217
+ </react_native_1.Text>
218
+ <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interRegular, fontSize: 10, color: AppColors_1.AppColors.grayTextWeak }}>
219
+ {t('network.avgLatency')}
220
+ </react_native_1.Text>
221
+ </react_native_1.View>
222
+
223
+ <react_native_1.View style={{ width: 1, height: 11, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
224
+
225
+ {/* P95 Latency */}
226
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
227
+ <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interBold, fontSize: 10.5, color: AppColors_1.AppColors.primaryBlack }}>
228
+ {networkMetrics.p95}ms
229
+ </react_native_1.Text>
230
+ <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interRegular, fontSize: 10, color: AppColors_1.AppColors.grayTextWeak }}>
231
+ P95
232
+ </react_native_1.Text>
233
+ </react_native_1.View>
234
+ </react_native_1.View>)}
235
+
140
236
  <react_native_1.View style={styles_1.default.toolbarRow}>
141
237
  <react_native_1.View style={styles_1.default.searchContainer}>
142
238
  <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={16}/>
@@ -1014,30 +1014,30 @@ const reduxDetailStyles = react_native_1.StyleSheet.create({
1014
1014
  flexDirection: 'row',
1015
1015
  alignItems: 'center',
1016
1016
  gap: 3.5,
1017
- backgroundColor: '#ECFDF5',
1017
+ backgroundColor: AppColors_1.AppColors.mintGreenBg,
1018
1018
  paddingHorizontal: 6,
1019
1019
  paddingVertical: 2,
1020
1020
  borderRadius: 4,
1021
1021
  borderWidth: 1,
1022
- borderColor: '#A7F3D0',
1022
+ borderColor: AppColors_1.AppColors.mintGreenBorder,
1023
1023
  },
1024
1024
  persistedChipText: {
1025
1025
  fontFamily: AppFonts_1.AppFonts.interBold,
1026
1026
  fontSize: 9,
1027
- color: '#047857',
1027
+ color: AppColors_1.AppColors.mintGreenText,
1028
1028
  },
1029
1029
  inMemoryChip: {
1030
- backgroundColor: '#EEF2FF',
1030
+ backgroundColor: AppColors_1.AppColors.indigo50,
1031
1031
  paddingHorizontal: 6,
1032
1032
  paddingVertical: 2,
1033
1033
  borderRadius: 4,
1034
1034
  borderWidth: 1,
1035
- borderColor: '#C7D2FE',
1035
+ borderColor: AppColors_1.AppColors.blueBorder,
1036
1036
  },
1037
1037
  inMemoryChipText: {
1038
1038
  fontFamily: AppFonts_1.AppFonts.interBold,
1039
1039
  fontSize: 9,
1040
- color: '#4338CA',
1040
+ color: AppColors_1.AppColors.indigo600Alt,
1041
1041
  },
1042
1042
  subStatsRow: {
1043
1043
  flexDirection: 'row',
@@ -1050,12 +1050,17 @@ const reduxDetailStyles = react_native_1.StyleSheet.create({
1050
1050
  alignItems: 'center',
1051
1051
  gap: 4,
1052
1052
  backgroundColor: AppColors_1.AppColors.grayBackground,
1053
- paddingHorizontal: 7,
1054
- paddingVertical: 3.5,
1055
- borderRadius: 6,
1053
+ paddingHorizontal: 6,
1054
+ paddingVertical: 2.5,
1055
+ borderRadius: 5,
1056
1056
  borderWidth: 1,
1057
1057
  borderColor: AppColors_1.AppColors.dividerColor,
1058
1058
  },
1059
+ statPillText: {
1060
+ fontFamily: AppFonts_1.AppFonts.interMedium,
1061
+ fontSize: 10,
1062
+ color: AppColors_1.AppColors.grayText,
1063
+ },
1059
1064
  statLabel: {
1060
1065
  fontFamily: AppFonts_1.AppFonts.interBold,
1061
1066
  fontSize: 10,
@@ -1105,17 +1110,17 @@ const reduxDetailStyles = react_native_1.StyleSheet.create({
1105
1110
  gap: 8,
1106
1111
  },
1107
1112
  actionBadge: {
1108
- backgroundColor: '#EEF2FF',
1113
+ backgroundColor: AppColors_1.AppColors.indigo50,
1109
1114
  paddingHorizontal: 6,
1110
1115
  paddingVertical: 2,
1111
1116
  borderRadius: 4,
1112
1117
  borderWidth: 1,
1113
- borderColor: '#C7D2FE',
1118
+ borderColor: AppColors_1.AppColors.blueBorder,
1114
1119
  },
1115
1120
  actionBadgeText: {
1116
1121
  fontFamily: AppFonts_1.AppFonts.interBold,
1117
1122
  fontSize: 9.5,
1118
- color: '#4338CA',
1123
+ color: AppColors_1.AppColors.indigo600Alt,
1119
1124
  },
1120
1125
  actionTitle: {
1121
1126
  flex: 1,
@@ -1196,22 +1201,22 @@ const reduxDetailStyles = react_native_1.StyleSheet.create({
1196
1201
  textAlign: 'right',
1197
1202
  },
1198
1203
  persistedInfoCard: {
1199
- backgroundColor: '#ECFDF5',
1204
+ backgroundColor: AppColors_1.AppColors.mintGreenBg,
1200
1205
  borderRadius: 8,
1201
1206
  borderWidth: 1,
1202
- borderColor: '#A7F3D0',
1207
+ borderColor: AppColors_1.AppColors.mintGreenBorder,
1203
1208
  padding: 10,
1204
1209
  },
1205
1210
  persistedInfoTitle: {
1206
1211
  fontFamily: AppFonts_1.AppFonts.interBold,
1207
1212
  fontSize: 11,
1208
- color: '#047857',
1213
+ color: AppColors_1.AppColors.mintGreenText,
1209
1214
  },
1210
1215
  clearPersistMiniBtn: {
1211
1216
  flexDirection: 'row',
1212
1217
  alignItems: 'center',
1213
1218
  gap: 3,
1214
- backgroundColor: '#FEE2E2',
1219
+ backgroundColor: AppColors_1.AppColors.errorCardBg,
1215
1220
  paddingHorizontal: 6,
1216
1221
  paddingVertical: 2.5,
1217
1222
  borderRadius: 4,
@@ -1228,7 +1233,7 @@ const reduxDetailStyles = react_native_1.StyleSheet.create({
1228
1233
  gap: 6,
1229
1234
  backgroundColor: AppColors_1.AppColors.errorCardBg,
1230
1235
  borderWidth: 1,
1231
- borderColor: '#FEE2E2',
1236
+ borderColor: AppColors_1.AppColors.errorBorder,
1232
1237
  borderRadius: 8,
1233
1238
  paddingVertical: 10,
1234
1239
  marginTop: 14,
@@ -1262,8 +1267,8 @@ const reduxDetailStyles = react_native_1.StyleSheet.create({
1262
1267
  lineHeight: 18,
1263
1268
  },
1264
1269
  highlight: {
1265
- backgroundColor: '#FEF08A',
1266
- color: '#854D0E',
1270
+ backgroundColor: AppColors_1.AppColors.yellowHighlight,
1271
+ color: AppColors_1.AppColors.amber800Warm,
1267
1272
  fontFamily: AppFonts_1.AppFonts.interBold,
1268
1273
  },
1269
1274
  });
@@ -425,14 +425,16 @@ const ReduxTab = react_1.default.memo(() => {
425
425
  <react_native_1.View style={reduxTabStyles.searchRow}>
426
426
  <react_native_1.View style={styles_1.default.searchContainer}>
427
427
  <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={15}/>
428
- <react_native_1.TextInput placeholder="Search Redux slices or actions..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={reduxSearch} onChangeText={setReduxSearch} style={styles_1.default.searchInput} autoCorrect={false} autoCapitalize="none"/>
429
- {reduxSearch.length > 0 && (<react_native_1.Pressable onPress={() => setReduxSearch('')} hitSlop={10}>
428
+ <react_native_1.TextInput accessible={true} accessibilityRole="search" accessibilityLabel="Search Redux slices or actions" accessibilityHint="Type to filter state slices in real time" placeholder="Search Redux slices or actions..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={reduxSearch} onChangeText={setReduxSearch} style={styles_1.default.searchInput} autoCorrect={false} autoCapitalize="none"/>
429
+ {reduxSearch.length > 0 && (<react_native_1.Pressable accessible={true} accessibilityRole="button" accessibilityLabel="Clear search input" onPress={() => setReduxSearch('')} hitSlop={10}>
430
430
  <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
431
431
  </react_native_1.Pressable>)}
432
432
  </react_native_1.View>
433
433
 
434
434
  {/* Pause / Resume Live Updates Button */}
435
- <react_native_1.TouchableOpacity style={[
435
+ <react_native_1.TouchableOpacity accessible={true} accessibilityRole="button" accessibilityLabel={isReduxPaused
436
+ ? 'Resume live Redux updates'
437
+ : 'Pause live Redux updates'} accessibilityHint="Toggles automatic recording of Redux state updates" style={[
436
438
  styles_1.default.toolbarBtn,
437
439
  isReduxPaused && {
438
440
  backgroundColor: `${AppColors_1.AppColors.darkOrange}1F`,
@@ -445,7 +447,9 @@ const ReduxTab = react_1.default.memo(() => {
445
447
  </react_native_1.TouchableOpacity>
446
448
 
447
449
  {/* Sort Button */}
448
- <react_native_1.TouchableOpacity style={[
450
+ <react_native_1.TouchableOpacity accessible={true} accessibilityRole="button" accessibilityLabel={`Sort order: ${sortMode === 'latest'
451
+ ? 'Recently updated first'
452
+ : 'Alphabetical A to Z'}`} accessibilityHint="Switches sorting between recently updated and alphabetical" style={[
449
453
  styles_1.default.toolbarBtn,
450
454
  sortMode === 'latest' && { backgroundColor: `${AppColors_1.AppColors.brandPurple}1F`, borderColor: AppColors_1.AppColors.brandPurple },
451
455
  ]} onPress={() => setSortMode(prev => (prev === 'latest' ? 'alpha' : 'latest'))} hitSlop={6}>
@@ -577,7 +581,7 @@ const reduxTabStyles = react_native_1.StyleSheet.create({
577
581
  },
578
582
  cardRecentlyUpdated: {
579
583
  borderColor: `${AppColors_1.AppColors.brandPurple}66`,
580
- backgroundColor: '#FAFAFF',
584
+ backgroundColor: AppColors_1.AppColors.purpleTintBg,
581
585
  },
582
586
  cardHeader: {
583
587
  flexDirection: 'row',
@@ -586,17 +590,17 @@ const reduxTabStyles = react_native_1.StyleSheet.create({
586
590
  marginBottom: 8,
587
591
  },
588
592
  sliceBadge: {
589
- backgroundColor: '#EDE9FE',
593
+ backgroundColor: AppColors_1.AppColors.violetSoftBg,
590
594
  paddingHorizontal: 6,
591
595
  paddingVertical: 3,
592
596
  borderRadius: 5,
593
597
  borderWidth: 1,
594
- borderColor: '#DDD6FE',
598
+ borderColor: AppColors_1.AppColors.violetSoftBorder,
595
599
  },
596
600
  sliceBadgeText: {
597
601
  fontFamily: AppFonts_1.AppFonts.interBold,
598
602
  fontSize: 9.5,
599
- color: '#6D28D9',
603
+ color: AppColors_1.AppColors.purple700,
600
604
  letterSpacing: 0.4,
601
605
  },
602
606
  sliceName: {