react-native-inapp-inspector 2.3.5 → 2.3.6

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 (226) hide show
  1. package/dist/commonjs/analytics.d.ts +0 -4
  2. package/dist/commonjs/analytics.js +0 -4
  3. package/dist/commonjs/bundle.d.ts +0 -4
  4. package/dist/commonjs/bundle.js +0 -4
  5. package/dist/commonjs/components/AnalyticsDetail.js +18 -27
  6. package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
  7. package/dist/commonjs/components/AnalyticsGraph.js +10 -15
  8. package/dist/commonjs/components/AppHeaderLogo.js +0 -3
  9. package/dist/commonjs/components/BrandCircleIcon.js +15 -15
  10. package/dist/commonjs/components/BrandSquareIcon.js +20 -20
  11. package/dist/commonjs/components/CodeSnippet.js +6 -19
  12. package/dist/commonjs/components/ConsoleLogCard.js +0 -1
  13. package/dist/commonjs/components/CopyButton.js +0 -4
  14. package/dist/commonjs/components/DiffViewer.js +0 -2
  15. package/dist/commonjs/components/DomainHeader.js +0 -4
  16. package/dist/commonjs/components/EmptyState.js +0 -3
  17. package/dist/commonjs/components/ErrorBoundary.js +5 -10
  18. package/dist/commonjs/components/HeadersSection.js +0 -5
  19. package/dist/commonjs/components/HighlightText.js +1 -4
  20. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
  21. package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
  22. package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
  23. package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
  24. package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
  25. package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
  26. package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
  27. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
  28. package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
  29. package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
  30. package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
  31. package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
  32. package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
  33. package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
  35. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
  36. package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
  37. package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
  38. package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
  39. package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
  40. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
  41. package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
  42. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
  43. package/dist/commonjs/components/JsonViewer.js +3 -10
  44. package/dist/commonjs/components/LogCard.js +7 -7
  45. package/dist/commonjs/components/MetaAccordion.js +1 -7
  46. package/dist/commonjs/components/NetworkIcons.js +12 -16
  47. package/dist/commonjs/components/SectionHeader.js +0 -4
  48. package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
  49. package/dist/commonjs/components/Slider.js +6 -6
  50. package/dist/commonjs/components/SourcePageCard.js +0 -4
  51. package/dist/commonjs/components/TreeNode.js +0 -4
  52. package/dist/commonjs/console.d.ts +0 -4
  53. package/dist/commonjs/console.js +0 -4
  54. package/dist/commonjs/constants/index.js +6 -9
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +7 -0
  56. package/dist/commonjs/constants/telemetryConfig.js +10 -0
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -3
  59. package/dist/commonjs/crash.d.ts +0 -4
  60. package/dist/commonjs/crash.js +0 -4
  61. package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
  62. package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
  63. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
  64. package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
  65. package/dist/commonjs/customHooks/consoleLogger.js +0 -16
  66. package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
  67. package/dist/commonjs/customHooks/crashHandler.js +0 -55
  68. package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
  69. package/dist/commonjs/customHooks/logFilters.js +0 -11
  70. package/dist/commonjs/customHooks/networkLogger.js +2 -13
  71. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
  72. package/dist/commonjs/customHooks/performanceTracker.js +0 -31
  73. package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
  74. package/dist/commonjs/customHooks/reduxLogger.js +0 -51
  75. package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
  76. package/dist/commonjs/customHooks/storageInspector.js +1 -56
  77. package/dist/commonjs/decorators/index.d.ts +0 -37
  78. package/dist/commonjs/decorators/index.js +0 -42
  79. package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
  80. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
  81. package/dist/commonjs/helpers/index.d.ts +0 -7
  82. package/dist/commonjs/helpers/index.js +1 -42
  83. package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
  84. package/dist/commonjs/helpers/memoryManager.js +0 -13
  85. package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
  86. package/dist/commonjs/helpers/searchQueryParser.js +0 -18
  87. package/dist/commonjs/helpers/settingsStore.js +0 -8
  88. package/dist/commonjs/helpers/telemetry.d.ts +2 -0
  89. package/dist/commonjs/helpers/telemetry.js +302 -0
  90. package/dist/commonjs/i18n/index.d.ts +0 -9
  91. package/dist/commonjs/i18n/index.js +0 -15
  92. package/dist/commonjs/index.js +15 -97
  93. package/dist/commonjs/native/NativeInspector.d.ts +0 -54
  94. package/dist/commonjs/native/NativeInspector.js +0 -56
  95. package/dist/commonjs/network.d.ts +0 -4
  96. package/dist/commonjs/network.js +0 -4
  97. package/dist/commonjs/performance.d.ts +0 -4
  98. package/dist/commonjs/performance.js +0 -4
  99. package/dist/commonjs/redux.d.ts +0 -4
  100. package/dist/commonjs/redux.js +0 -4
  101. package/dist/commonjs/storage.d.ts +0 -4
  102. package/dist/commonjs/storage.js +0 -4
  103. package/dist/commonjs/styles/AppColors.d.ts +0 -3
  104. package/dist/commonjs/styles/AppColors.js +15 -30
  105. package/dist/commonjs/styles/AppFonts.d.ts +0 -4
  106. package/dist/commonjs/styles/AppFonts.js +0 -4
  107. package/dist/commonjs/styles/common.js +0 -11
  108. package/dist/commonjs/styles/index.js +0 -8
  109. package/dist/commonjs/types/enums.js +0 -3
  110. package/dist/commonjs/types/interfaces.d.ts +3 -3
  111. package/dist/esm/analytics.d.ts +0 -4
  112. package/dist/esm/analytics.js +0 -4
  113. package/dist/esm/bundle.d.ts +0 -4
  114. package/dist/esm/bundle.js +0 -4
  115. package/dist/esm/components/AnalyticsDetail.js +18 -27
  116. package/dist/esm/components/AnalyticsEventCard.js +9 -12
  117. package/dist/esm/components/AnalyticsGraph.js +10 -15
  118. package/dist/esm/components/AppHeaderLogo.js +0 -3
  119. package/dist/esm/components/BrandCircleIcon.js +15 -15
  120. package/dist/esm/components/BrandSquareIcon.js +20 -20
  121. package/dist/esm/components/CodeSnippet.js +6 -19
  122. package/dist/esm/components/ConsoleLogCard.js +0 -1
  123. package/dist/esm/components/CopyButton.js +0 -4
  124. package/dist/esm/components/DiffViewer.js +0 -2
  125. package/dist/esm/components/DomainHeader.js +0 -4
  126. package/dist/esm/components/EmptyState.js +0 -3
  127. package/dist/esm/components/ErrorBoundary.js +5 -10
  128. package/dist/esm/components/HeadersSection.js +0 -5
  129. package/dist/esm/components/HighlightText.js +1 -4
  130. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
  131. package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
  132. package/dist/esm/components/Inspector/BundleTab.js +56 -84
  133. package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
  134. package/dist/esm/components/Inspector/CrashDetail.js +18 -20
  135. package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
  136. package/dist/esm/components/Inspector/CrashTab.js +11 -20
  137. package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
  138. package/dist/esm/components/Inspector/FabLauncher.js +1 -1
  139. package/dist/esm/components/Inspector/InspectorContext.js +0 -2
  140. package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
  141. package/dist/esm/components/Inspector/LogDetail.js +27 -29
  142. package/dist/esm/components/Inspector/MainScreen.js +9 -10
  143. package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
  144. package/dist/esm/components/Inspector/NetworkTab.js +14 -14
  145. package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
  146. package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
  147. package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
  148. package/dist/esm/components/Inspector/ReduxTab.js +11 -20
  149. package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
  150. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
  151. package/dist/esm/components/Inspector/StorageTab.js +14 -26
  152. package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
  153. package/dist/esm/components/JsonViewer.js +3 -10
  154. package/dist/esm/components/LogCard.js +7 -7
  155. package/dist/esm/components/MetaAccordion.js +1 -7
  156. package/dist/esm/components/NetworkIcons.js +12 -16
  157. package/dist/esm/components/SectionHeader.js +0 -4
  158. package/dist/esm/components/SkeletonPlaceholder.js +6 -6
  159. package/dist/esm/components/Slider.js +6 -6
  160. package/dist/esm/components/SourcePageCard.js +0 -4
  161. package/dist/esm/components/TreeNode.js +0 -4
  162. package/dist/esm/console.d.ts +0 -4
  163. package/dist/esm/console.js +0 -4
  164. package/dist/esm/constants/index.js +6 -9
  165. package/dist/esm/constants/telemetryConfig.d.ts +7 -0
  166. package/dist/esm/constants/telemetryConfig.js +7 -0
  167. package/dist/esm/constants/version.d.ts +1 -1
  168. package/dist/esm/constants/version.js +1 -3
  169. package/dist/esm/crash.d.ts +0 -4
  170. package/dist/esm/crash.js +0 -4
  171. package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
  172. package/dist/esm/customHooks/analyticsLogger.js +3 -59
  173. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
  174. package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
  175. package/dist/esm/customHooks/consoleLogger.js +0 -16
  176. package/dist/esm/customHooks/crashHandler.d.ts +0 -28
  177. package/dist/esm/customHooks/crashHandler.js +0 -55
  178. package/dist/esm/customHooks/logFilters.d.ts +0 -4
  179. package/dist/esm/customHooks/logFilters.js +0 -11
  180. package/dist/esm/customHooks/networkLogger.js +2 -13
  181. package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
  182. package/dist/esm/customHooks/performanceTracker.js +0 -31
  183. package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
  184. package/dist/esm/customHooks/reduxLogger.js +0 -51
  185. package/dist/esm/customHooks/storageInspector.d.ts +0 -40
  186. package/dist/esm/customHooks/storageInspector.js +1 -56
  187. package/dist/esm/decorators/index.d.ts +0 -37
  188. package/dist/esm/decorators/index.js +0 -42
  189. package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
  190. package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
  191. package/dist/esm/helpers/index.d.ts +0 -7
  192. package/dist/esm/helpers/index.js +1 -42
  193. package/dist/esm/helpers/memoryManager.d.ts +0 -11
  194. package/dist/esm/helpers/memoryManager.js +0 -13
  195. package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
  196. package/dist/esm/helpers/searchQueryParser.js +0 -18
  197. package/dist/esm/helpers/settingsStore.js +0 -8
  198. package/dist/esm/helpers/telemetry.d.ts +2 -0
  199. package/dist/esm/helpers/telemetry.js +298 -0
  200. package/dist/esm/i18n/index.d.ts +0 -9
  201. package/dist/esm/i18n/index.js +0 -15
  202. package/dist/esm/index.js +15 -97
  203. package/dist/esm/native/NativeInspector.d.ts +0 -54
  204. package/dist/esm/native/NativeInspector.js +0 -56
  205. package/dist/esm/network.d.ts +0 -4
  206. package/dist/esm/network.js +0 -4
  207. package/dist/esm/performance.d.ts +0 -4
  208. package/dist/esm/performance.js +0 -4
  209. package/dist/esm/redux.d.ts +0 -4
  210. package/dist/esm/redux.js +0 -4
  211. package/dist/esm/storage.d.ts +0 -4
  212. package/dist/esm/storage.js +0 -4
  213. package/dist/esm/styles/AppColors.d.ts +0 -3
  214. package/dist/esm/styles/AppColors.js +15 -30
  215. package/dist/esm/styles/AppFonts.d.ts +0 -4
  216. package/dist/esm/styles/AppFonts.js +0 -4
  217. package/dist/esm/styles/common.js +0 -11
  218. package/dist/esm/styles/index.js +0 -8
  219. package/dist/esm/types/enums.js +0 -3
  220. package/dist/esm/types/interfaces.d.ts +3 -3
  221. package/package.json +2 -2
  222. package/src/constants/telemetryConfig.ts +16 -0
  223. package/src/constants/version.ts +1 -1
  224. package/src/helpers/telemetry.ts +341 -0
  225. package/src/index.tsx +15 -1
  226. package/src/types/interfaces.ts +3 -0
@@ -170,10 +170,10 @@ const LogDetail = React.memo(() => {
170
170
  },
171
171
  ];
172
172
  return (<View style={{ flex: 1 }}>
173
- {/* Enhanced details header bar */}
173
+
174
174
  <View style={styles.detailInfoBar}>
175
175
  <View style={{ flexDirection: 'column', gap: 10 }}>
176
- {/* Top Row: Type badge, method, content pill & Copy button */}
176
+
177
177
  <View style={{
178
178
  flexDirection: 'row',
179
179
  alignItems: 'center',
@@ -187,7 +187,7 @@ const LogDetail = React.memo(() => {
187
187
  flex: 1,
188
188
  flexWrap: 'wrap',
189
189
  }}>
190
- {/* Type Badge */}
190
+
191
191
  <View style={[
192
192
  styles.typeChip,
193
193
  {
@@ -210,7 +210,7 @@ const LogDetail = React.memo(() => {
210
210
  </Text>
211
211
  </View>
212
212
 
213
- {/* Method chip */}
213
+
214
214
  <View style={[
215
215
  styles.metaChip,
216
216
  {
@@ -227,7 +227,7 @@ const LogDetail = React.memo(() => {
227
227
  </Text>
228
228
  </View>
229
229
 
230
- {/* JSON content type chip */}
230
+
231
231
  {jsonContent && (<View style={[
232
232
  styles.metaChip,
233
233
  {
@@ -245,7 +245,7 @@ const LogDetail = React.memo(() => {
245
245
  </Text>
246
246
  </View>)}
247
247
 
248
- {/* Duplicate count chip */}
248
+
249
249
  {selectedLog.duplicateCount != null &&
250
250
  selectedLog.duplicateCount > 1 && (<View style={[
251
251
  styles.metaChip,
@@ -265,11 +265,11 @@ const LogDetail = React.memo(() => {
265
265
  </View>)}
266
266
  </View>
267
267
 
268
- {/* Quick Copy button */}
268
+
269
269
  <CopyButton value={selectedLog.message} label={t('console.logMessage')}/>
270
270
  </View>
271
271
 
272
- {/* Caller & Trace origin info */}
272
+
273
273
  <View style={{ gap: 4 }}>
274
274
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
275
275
  {originFrame?.fileExt && originFrame.fileExt !== 'other' && (<View style={{
@@ -328,7 +328,7 @@ const LogDetail = React.memo(() => {
328
328
  </Pressable>)}
329
329
  </View>
330
330
 
331
- {/* Enhanced metadata metrics row */}
331
+
332
332
  <View style={{
333
333
  flexDirection: 'row',
334
334
  alignItems: 'center',
@@ -363,12 +363,12 @@ const LogDetail = React.memo(() => {
363
363
  </View>
364
364
  </View>
365
365
 
366
- {/* Sub-tabs header */}
366
+
367
367
  <View style={detailStyles.tabsHeaderWrap}>
368
368
  <SegmentedTabs tabs={subTabs} activeKey={activeTab} onChange={key => setActiveTab(key)}/>
369
369
  </View>
370
370
 
371
- {/* Search row (only for output/arguments/stack tabs) */}
371
+
372
372
  {activeTab !== 'metadata' && (<View style={{ paddingHorizontal: 12, paddingTop: 6, paddingBottom: 4 }}>
373
373
  <View style={[styles.detailSearchRow, { marginBottom: 0 }]}>
374
374
  <View style={[
@@ -390,14 +390,14 @@ const LogDetail = React.memo(() => {
390
390
  </View>
391
391
  </View>)}
392
392
 
393
- {/* Tab Content Container */}
393
+
394
394
  <ScrollView style={{ flex: 1 }} contentContainerStyle={{
395
395
  paddingHorizontal: 12,
396
396
  paddingTop: 6,
397
397
  paddingBottom: 28,
398
398
  flexGrow: 1,
399
399
  }} showsVerticalScrollIndicator={true} keyboardShouldPersistTaps="handled">
400
- {/* Tab 1: Output / Message */}
400
+
401
401
  {activeTab === 'output' && (<View style={[
402
402
  styles.sectionContainer,
403
403
  {
@@ -411,7 +411,7 @@ const LogDetail = React.memo(() => {
411
411
  flex: 1,
412
412
  },
413
413
  ]}>
414
- {/* Section Header with View Modes */}
414
+
415
415
  <View style={{
416
416
  flexDirection: 'column',
417
417
  gap: 8,
@@ -467,7 +467,7 @@ const LogDetail = React.memo(() => {
467
467
  ]} activeKey={viewMode} onChange={key => setViewMode(key)}/>)}
468
468
  </View>
469
469
 
470
- {/* Content Body */}
470
+
471
471
  <View style={{ padding: 12, flex: 1 }}>
472
472
  {jsonContent ? (<>
473
473
  {jsonContent.header ? (<View style={{
@@ -514,7 +514,7 @@ const LogDetail = React.memo(() => {
514
514
  </View>
515
515
  </View>)}
516
516
 
517
- {/* Tab 2: Individual Arguments */}
517
+
518
518
  {activeTab === 'arguments' && selectedLog.rawArgs && (<View style={{ gap: 10 }}>
519
519
  {selectedLog.rawArgs.map((arg, idx) => {
520
520
  const argType = arg === null
@@ -596,7 +596,7 @@ const LogDetail = React.memo(() => {
596
596
  })}
597
597
  </View>)}
598
598
 
599
- {/* Tab 3: Call Stack Trace */}
599
+
600
600
  {activeTab === 'stack' && (<View style={[
601
601
  styles.sectionContainer,
602
602
  {
@@ -609,7 +609,7 @@ const LogDetail = React.memo(() => {
609
609
  overflow: 'hidden',
610
610
  },
611
611
  ]}>
612
- {/* Section Header with Mode Switch */}
612
+
613
613
  <View style={{
614
614
  flexDirection: 'column',
615
615
  gap: 8,
@@ -621,7 +621,7 @@ const LogDetail = React.memo(() => {
621
621
  ? AppColors.primaryLight
622
622
  : AppColors.grayBackground,
623
623
  }}>
624
- {/* Header Top Row: Title, Mode switcher & Full copy */}
624
+
625
625
  <View style={{
626
626
  flexDirection: 'row',
627
627
  alignItems: 'center',
@@ -704,7 +704,7 @@ const LogDetail = React.memo(() => {
704
704
  </View>
705
705
  </View>
706
706
 
707
- {/* Source Switcher if Error Stack exists */}
707
+
708
708
  {selectedLog.errorStack && (<SegmentedTabs tabs={[
709
709
  {
710
710
  key: 'caller',
@@ -716,7 +716,7 @@ const LogDetail = React.memo(() => {
716
716
  },
717
717
  ]} activeKey={stackSource} onChange={key => setStackSource(key)}/>)}
718
718
 
719
- {/* Scope Filter Tabs (Full Width) */}
719
+
720
720
  <SegmentedTabs tabs={[
721
721
  {
722
722
  key: 'app',
@@ -729,7 +729,7 @@ const LogDetail = React.memo(() => {
729
729
  ]} activeKey={stackFilter} onChange={key => setStackFilter(key)}/>
730
730
  </View>
731
731
 
732
- {/* Stack Content: Structured Cards or Raw Full Trace */}
732
+
733
733
  {stackViewMode === 'structured' ? (<View style={{ padding: 12, gap: 10 }}>
734
734
  {displayedFrames.length > 0 ? (displayedFrames.map((frame, frameIdx) => {
735
735
  const isTopFrame = frameIdx === 0;
@@ -759,7 +759,7 @@ const LogDetail = React.memo(() => {
759
759
  padding: 11,
760
760
  gap: 6,
761
761
  }}>
762
- {/* Frame Top Row: Origin / Category, File, Line badge, Copy */}
762
+
763
763
  <View style={{
764
764
  flexDirection: 'row',
765
765
  alignItems: 'center',
@@ -833,7 +833,7 @@ const LogDetail = React.memo(() => {
833
833
  </View>
834
834
  </View>
835
835
 
836
- {/* Middle Row: Function / Symbol Invocation */}
836
+
837
837
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
838
838
  <HighlightText text={frame.functionName !== '<anonymous>' ? `${frame.functionName}()` : '<anonymous>'} search={detailSearch} style={{
839
839
  fontFamily: AppFonts.interBold,
@@ -845,7 +845,7 @@ const LogDetail = React.memo(() => {
845
845
  }}/>
846
846
  </View>
847
847
 
848
- {/* Bottom Row: Clean Relative Path & Execution Scope Tag */}
848
+
849
849
  <View style={{
850
850
  flexDirection: 'row',
851
851
  alignItems: 'center',
@@ -899,9 +899,7 @@ const LogDetail = React.memo(() => {
899
899
  }}>
900
900
  {t('console.noStackAvailable')}
901
901
  </Text>)}
902
- </View>) : (
903
- /* Raw Full Trace Monospace Block */
904
- <View style={{
902
+ </View>) : (<View style={{
905
903
  backgroundColor: AppColors.primaryLight,
906
904
  padding: 12,
907
905
  }}>
@@ -935,7 +933,7 @@ const LogDetail = React.memo(() => {
935
933
  </View>)}
936
934
  </View>)}
937
935
 
938
- {/* Tab 4: Structured Metadata */}
936
+
939
937
  {activeTab === 'metadata' && (<View style={[
940
938
  styles.sectionContainer,
941
939
  {
@@ -32,7 +32,6 @@ const MainScreen = () => {
32
32
  (activeTab === 'logs' && selectedLog != null) ||
33
33
  (activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null)) ||
34
34
  (activeTab === 'crash' && selectedCrash != null);
35
- // ─── 60 FPS Transition Animations ──────────────────────────────────────────
36
35
  const detailAnim = useRef(new Animated.Value(0)).current;
37
36
  useEffect(() => {
38
37
  if (isDetailActive) {
@@ -88,11 +87,11 @@ const MainScreen = () => {
88
87
  <InspectorHeader />
89
88
 
90
89
  <View style={{ flex: 1 }}>
91
- {/* ─── Horizontal Scrollable Tab Bar inside Content (Always visible) ─── */}
90
+
92
91
  {!isDetailActive && <TabBar />}
93
92
 
94
93
  {isReady ? (<View style={{ flex: 1 }}>
95
- {/* Persistent List Layer - Never unmounted, preserves 100% native scroll with smooth tab transition */}
94
+
96
95
  <Animated.View style={[
97
96
  {
98
97
  flex: 1,
@@ -121,7 +120,7 @@ const MainScreen = () => {
121
120
  {activeTab === 'storage' && <StorageTab />}
122
121
  </Animated.View>
123
122
 
124
- {/* Detail View Layer - Rendered on top with smooth slide & spring transition */}
123
+
125
124
  {isDetailActive && (<Animated.View style={[
126
125
  StyleSheet.absoluteFill,
127
126
  {
@@ -145,7 +144,7 @@ const MainScreen = () => {
145
144
  </Animated.View>)}
146
145
  </View>) : (<MainScreenSkeleton />)}
147
146
 
148
- {/* Settings Panel Layer - Rendered on top with smooth slide & spring transition */}
147
+
149
148
  {settingsPage !== null && (<Animated.View style={[
150
149
  StyleSheet.absoluteFill,
151
150
  {
@@ -165,10 +164,10 @@ const MainScreen = () => {
165
164
  </Animated.View>)}
166
165
  </View>
167
166
 
168
- {/* Bottom floating toast notification */}
167
+
169
168
  <Toast />
170
169
 
171
- {/* NPM Version Update Toast with timeout progress bar */}
170
+
172
171
  <NpmUpdateToast />
173
172
  </View>
174
173
  </View>
@@ -196,7 +195,7 @@ const MainScreenSkeleton = React.memo(function MainScreenSkeleton() {
196
195
  return () => animation.stop();
197
196
  }, [shimmerAnim]);
198
197
  return (<View style={skeletonStyles.container}>
199
- {/* ─── Search & Scope Toolbar Skeleton ─── */}
198
+
200
199
  <View style={skeletonStyles.toolbarSkeleton}>
201
200
  <Animated.View style={[skeletonStyles.searchBarSkeleton, { opacity: shimmerAnim }]}/>
202
201
  <View style={skeletonStyles.actionButtonsRow}>
@@ -205,7 +204,7 @@ const MainScreenSkeleton = React.memo(function MainScreenSkeleton() {
205
204
  </View>
206
205
  </View>
207
206
 
208
- {/* ─── Quick Filter Chips Skeleton Strip ─── */}
207
+
209
208
  <View style={skeletonStyles.chipStripSkeleton}>
210
209
  <Animated.View style={[skeletonStyles.chipSkeleton, { width: 48, opacity: shimmerAnim }]}/>
211
210
  <Animated.View style={[skeletonStyles.chipSkeleton, { width: 68, opacity: shimmerAnim }]}/>
@@ -213,7 +212,7 @@ const MainScreenSkeleton = React.memo(function MainScreenSkeleton() {
213
212
  <Animated.View style={[skeletonStyles.chipSkeleton, { width: 58, opacity: shimmerAnim }]}/>
214
213
  </View>
215
214
 
216
- {/* ─── List Cards Skeleton ─── */}
215
+
217
216
  {[0, 1, 2, 3].map(i => (<Animated.View key={`skeleton_card_${i}`} style={[skeletonStyles.cardSkeleton, { opacity: shimmerAnim }]}>
218
217
  <View style={skeletonStyles.cardTopRow}>
219
218
  <View style={skeletonStyles.badgeGroup}>
@@ -43,7 +43,7 @@ const NetworkDetail = React.memo(() => {
43
43
  if (!selected)
44
44
  return null;
45
45
  return (<View style={{ flex: 1 }}>
46
- {/* Non-scrollable details header */}
46
+
47
47
  <View style={{ paddingHorizontal: 6, paddingTop: 4 }}>
48
48
  <View style={styles.detailInfoBar}>
49
49
  {(() => {
@@ -52,7 +52,6 @@ const NetworkDetail = React.memo(() => {
52
52
  let pathStr = detailDisplayUrl;
53
53
  let queryStr = '';
54
54
  try {
55
- // Simple parsing fallback for React Native environments
56
55
  const qIndex = detailDisplayUrl.indexOf('?');
57
56
  let cleanUrlForParsing = detailDisplayUrl;
58
57
  if (qIndex !== -1) {
@@ -96,7 +95,7 @@ const NetworkDetail = React.memo(() => {
96
95
  flexWrap: 'wrap',
97
96
  flex: 1,
98
97
  }}>
99
- {/* Method Chip */}
98
+
100
99
  <View style={[
101
100
  styles.methodBadge,
102
101
  {
@@ -117,7 +116,7 @@ const NetworkDetail = React.memo(() => {
117
116
  </Text>
118
117
  </View>
119
118
 
120
- {/* Client Chip (AXIOS / FETCH / XHR) */}
119
+
121
120
  {selected.client && (<View style={[
122
121
  styles.chip,
123
122
  {
@@ -158,7 +157,7 @@ const NetworkDetail = React.memo(() => {
158
157
  </Text>
159
158
  </View>)}
160
159
 
161
- {/* Status Pill */}
160
+
162
161
  {selected.status != null && (<View style={[
163
162
  styles.chip,
164
163
  {
@@ -195,7 +194,7 @@ const NetworkDetail = React.memo(() => {
195
194
  </Text>
196
195
  </View>)}
197
196
 
198
- {/* Duration Pill */}
197
+
199
198
  {selected.duration != null && (<View style={[
200
199
  styles.chip,
201
200
  {
@@ -220,7 +219,7 @@ const NetworkDetail = React.memo(() => {
220
219
  </Text>
221
220
  </View>)}
222
221
 
223
- {/* Size Pill */}
222
+
224
223
  {selected.response != null && (<View style={[
225
224
  styles.chip,
226
225
  {
@@ -256,7 +255,7 @@ const NetworkDetail = React.memo(() => {
256
255
  </View>
257
256
  </View>
258
257
 
259
- {/* Full Live URL Analysis Card */}
258
+
260
259
  <Pressable style={{
261
260
  backgroundColor: AppColors.grayBackground,
262
261
  borderRadius: 10,
@@ -339,7 +338,7 @@ const NetworkDetail = React.memo(() => {
339
338
  </View>
340
339
  </View>
341
340
 
342
- {/* Full Clickable Hyperlink */}
341
+
343
342
  <Text selectable={true} style={{
344
343
  fontFamily: AppFonts.interMedium,
345
344
  fontSize: 12.5,
@@ -355,7 +354,7 @@ const NetworkDetail = React.memo(() => {
355
354
  </View>
356
355
  </View>
357
356
 
358
- {/* Sticky Segment Control */}
357
+
359
358
  <SegmentedTabs tabs={[
360
359
  {
361
360
  key: 'metadata',
@@ -386,7 +385,7 @@ const NetworkDetail = React.memo(() => {
386
385
  setApiDetailActiveTab(tab);
387
386
  }} style={{ marginHorizontal: 6, marginBottom: 10, marginTop: 6 }}/>
388
387
 
389
- {/* Scrollable Tab Content */}
388
+
390
389
  <ScrollView style={styles.detailScroll} contentContainerStyle={{
391
390
  paddingHorizontal: 6,
392
391
  paddingBottom: 24,
@@ -333,7 +333,7 @@ const NetworkTab = React.memo(() => {
333
333
  ]);
334
334
  return (<View style={{ flex: 1 }}>
335
335
  <FlatList ref={apisListRef} data={groupedData} keyExtractor={item => item?.id?.toString()} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListHeaderComponent={<View style={{ marginTop: 6 }}>
336
- {/* Network Health & Telemetry Strip */}
336
+
337
337
  {networkMetrics != null && networkMetrics.totalCount > 0 && (<View style={{
338
338
  flexDirection: 'row',
339
339
  alignItems: 'center',
@@ -347,7 +347,7 @@ const NetworkTab = React.memo(() => {
347
347
  borderWidth: 1,
348
348
  borderColor: AppColors.dividerColor,
349
349
  }}>
350
- {/* Success Rate */}
350
+
351
351
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4.5 }}>
352
352
  <View style={{
353
353
  width: 6,
@@ -369,7 +369,7 @@ const NetworkTab = React.memo(() => {
369
369
 
370
370
  <View style={{ width: 1, height: 11, backgroundColor: AppColors.dividerColor }}/>
371
371
 
372
- {/* Avg Latency */}
372
+
373
373
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
374
374
  <ClockIcon color={AppColors.purple} size={10}/>
375
375
  <Text style={{ fontFamily: AppFonts.interBold, fontSize: 10.5, color: AppColors.purple }}>
@@ -382,7 +382,7 @@ const NetworkTab = React.memo(() => {
382
382
 
383
383
  <View style={{ width: 1, height: 11, backgroundColor: AppColors.dividerColor }}/>
384
384
 
385
- {/* P95 Latency */}
385
+
386
386
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
387
387
  <Text style={{ fontFamily: AppFonts.interBold, fontSize: 10.5, color: AppColors.primaryBlack }}>
388
388
  {networkMetrics.p95}ms
@@ -393,7 +393,7 @@ const NetworkTab = React.memo(() => {
393
393
  </View>
394
394
  </View>)}
395
395
 
396
- {/* Toolbar Row with Search & Actions */}
396
+
397
397
  <View style={styles.toolbarRow}>
398
398
  <View style={[
399
399
  styles.searchContainer,
@@ -407,7 +407,7 @@ const NetworkTab = React.memo(() => {
407
407
  : AppColors.grayTextWeak} size={15}/>
408
408
  <TextInput placeholder="Search url, body, is:error, slow:>1s..." placeholderTextColor={AppColors.grayTextWeak} value={search} onChangeText={setSearch} onFocus={() => setIsSearchFocused(true)} onBlur={() => setIsSearchFocused(false)} style={styles.searchInput} autoCorrect={false} autoCapitalize="none"/>
409
409
 
410
- {/* Match Case (Aa) & Regex (.*) Quick Toggles */}
410
+
411
411
  <View style={{
412
412
  flexDirection: 'row',
413
413
  alignItems: 'center',
@@ -532,7 +532,7 @@ const NetworkTab = React.memo(() => {
532
532
  </View>
533
533
  </View>
534
534
 
535
- {/* Quick Search Scope & Filter Tags Row */}
535
+
536
536
  <View style={{ paddingBottom: 4 }}>
537
537
  <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
538
538
  paddingHorizontal: 12,
@@ -541,7 +541,7 @@ const NetworkTab = React.memo(() => {
541
541
  gap: 5,
542
542
  paddingVertical: 2,
543
543
  }}>
544
- {/* Search Scopes */}
544
+
545
545
  {SEARCH_SCOPES.map(s => {
546
546
  const isActive = searchScope === s.id;
547
547
  return (<TouchableScale key={`scope_${s.id}`} onPress={() => setSearchScope(s.id)} hitSlop={6} style={{
@@ -577,7 +577,7 @@ const NetworkTab = React.memo(() => {
577
577
  marginHorizontal: 3,
578
578
  }}/>
579
579
 
580
- {/* Quick Query Suggestions */}
580
+
581
581
  {QUICK_API_QUERY_TAGS.map(q => {
582
582
  const isActive = search.includes(q.query);
583
583
  return (<TouchableScale key={`quick_${q.query}`} onPress={() => {
@@ -620,7 +620,7 @@ const NetworkTab = React.memo(() => {
620
620
  </ScrollView>
621
621
  </View>
622
622
 
623
- {/* Quick Filter Horizontal Chips Bar with Live Counts */}
623
+
624
624
  <View style={{ marginBottom: 8 }}>
625
625
  <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
626
626
  paddingHorizontal: 12,
@@ -688,7 +688,7 @@ const NetworkTab = React.memo(() => {
688
688
  </ScrollView>
689
689
  </View>
690
690
 
691
- {/* Search Scope Selector Bar (Visible on search or focus) */}
691
+
692
692
  {(isSearchFocused || search.length > 0) && (<View style={{
693
693
  flexDirection: 'row',
694
694
  alignItems: 'center',
@@ -745,7 +745,7 @@ const NetworkTab = React.memo(() => {
745
745
  </ScrollView>
746
746
  </View>)}
747
747
 
748
- {/* Advanced Search Quick Query Suggestions Bar */}
748
+
749
749
  {(isSearchFocused || search.length > 0) && (<ScrollView horizontal showsHorizontalScrollIndicator={false} style={{ marginBottom: 8, maxHeight: 28 }} contentContainerStyle={{
750
750
  paddingHorizontal: 12,
751
751
  flexDirection: 'row',
@@ -792,7 +792,7 @@ const NetworkTab = React.memo(() => {
792
792
  })}
793
793
  </ScrollView>)}
794
794
 
795
- {/* Active Filter Helper Status Bar */}
795
+
796
796
  {(quickFilter !== 'all' ||
797
797
  search.trim().length > 0 ||
798
798
  statusFilters.size > 0 ||
@@ -918,7 +918,7 @@ const NetworkTab = React.memo(() => {
918
918
  styles.listContent,
919
919
  filteredLogs.length === 0 && { flexGrow: 1 },
920
920
  ]} keyboardShouldPersistTaps="handled"/>
921
- {/* #2 — always-visible scroll-to-top, bottom right */}
921
+
922
922
  <TouchableScale onPress={() => {
923
923
  try {
924
924
  apisListRef.current?.scrollToOffset({
@@ -34,7 +34,6 @@ export const NpmUpdateToast = () => {
34
34
  useEffect(() => {
35
35
  if (showUpdateToast && updateAvailable && latestNpmVersion && !dismissed) {
36
36
  setVisible(true);
37
- // Slide and fade in
38
37
  Animated.parallel([
39
38
  Animated.spring(translateYAnim, {
40
39
  toValue: 0,
@@ -48,14 +47,12 @@ export const NpmUpdateToast = () => {
48
47
  useNativeDriver: true,
49
48
  }),
50
49
  ]).start();
51
- // Progress bar countdown from 1 to 0
52
50
  progressAnim.setValue(1);
53
51
  Animated.timing(progressAnim, {
54
52
  toValue: 0,
55
53
  duration: TOAST_TIMEOUT_MS,
56
54
  useNativeDriver: false,
57
55
  }).start();
58
- // Auto-hide after timeout
59
56
  timerRef.current = setTimeout(() => {
60
57
  handleDismiss();
61
58
  }, TOAST_TIMEOUT_MS);
@@ -109,12 +106,12 @@ export const NpmUpdateToast = () => {
109
106
  },
110
107
  ]}>
111
108
  <View style={styles.contentRow}>
112
- {/* Left NPM Badge Icon */}
109
+
113
110
  <View style={styles.npmIconContainer}>
114
111
  <NpmIcon size={15} color="#CB3837"/>
115
112
  </View>
116
113
 
117
- {/* Text Details */}
114
+
118
115
  <View style={styles.textContainer}>
119
116
  <View style={styles.titleRow}>
120
117
  <Text style={styles.titleText}>Update Available</Text>
@@ -127,7 +124,7 @@ export const NpmUpdateToast = () => {
127
124
  </Text>
128
125
  </View>
129
126
 
130
- {/* Copy command quick button */}
127
+
131
128
  <TouchableOpacity style={styles.copyButton} onPress={handleCopyCommand} hitSlop={6} activeOpacity={0.75}>
132
129
  {copied ? <CheckSvg size={11} color="#10B981"/> : <CopySvg size={11} color="#94A3B8"/>}
133
130
  <Text style={[styles.copyButtonText, copied && { color: '#10B981' }]}>
@@ -135,19 +132,19 @@ export const NpmUpdateToast = () => {
135
132
  </Text>
136
133
  </TouchableOpacity>
137
134
 
138
- {/* Action Button: View */}
135
+
139
136
  <TouchableOpacity style={styles.actionButton} onPress={handleOpenNpm} activeOpacity={0.8}>
140
137
  <Text style={styles.actionButtonText}>View</Text>
141
138
  <ExternalLinkSvg size={10} color="#FFFFFF"/>
142
139
  </TouchableOpacity>
143
140
 
144
- {/* Close Button */}
141
+
145
142
  <TouchableOpacity style={styles.closeButton} onPress={handleDismiss} hitSlop={8} activeOpacity={0.7}>
146
143
  <CloseSvg size={12} color="#94A3B8"/>
147
144
  </TouchableOpacity>
148
145
  </View>
149
146
 
150
- {/* Animated Linear Timeout Progress Bar */}
147
+
151
148
  <View style={styles.progressBarTrack}>
152
149
  <Animated.View style={[styles.progressBarFill, { width: progressWidth }]}/>
153
150
  </View>