react-native-inapp-inspector 2.3.5 → 2.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +3 -0
  56. package/dist/commonjs/constants/telemetryConfig.js +6 -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 +136 -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 +3 -0
  166. package/dist/esm/constants/telemetryConfig.js +3 -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 +132 -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 +6 -0
  223. package/src/constants/version.ts +1 -1
  224. package/src/helpers/telemetry.ts +161 -0
  225. package/src/index.tsx +15 -1
  226. package/src/types/interfaces.ts +3 -0
@@ -208,10 +208,10 @@ const LogDetail = react_1.default.memo(() => {
208
208
  },
209
209
  ];
210
210
  return (<react_native_1.View style={{ flex: 1 }}>
211
- {/* Enhanced details header bar */}
211
+
212
212
  <react_native_1.View style={styles_1.default.detailInfoBar}>
213
213
  <react_native_1.View style={{ flexDirection: 'column', gap: 10 }}>
214
- {/* Top Row: Type badge, method, content pill & Copy button */}
214
+
215
215
  <react_native_1.View style={{
216
216
  flexDirection: 'row',
217
217
  alignItems: 'center',
@@ -225,7 +225,7 @@ const LogDetail = react_1.default.memo(() => {
225
225
  flex: 1,
226
226
  flexWrap: 'wrap',
227
227
  }}>
228
- {/* Type Badge */}
228
+
229
229
  <react_native_1.View style={[
230
230
  styles_1.default.typeChip,
231
231
  {
@@ -248,7 +248,7 @@ const LogDetail = react_1.default.memo(() => {
248
248
  </react_native_1.Text>
249
249
  </react_native_1.View>
250
250
 
251
- {/* Method chip */}
251
+
252
252
  <react_native_1.View style={[
253
253
  styles_1.default.metaChip,
254
254
  {
@@ -265,7 +265,7 @@ const LogDetail = react_1.default.memo(() => {
265
265
  </react_native_1.Text>
266
266
  </react_native_1.View>
267
267
 
268
- {/* JSON content type chip */}
268
+
269
269
  {jsonContent && (<react_native_1.View style={[
270
270
  styles_1.default.metaChip,
271
271
  {
@@ -283,7 +283,7 @@ const LogDetail = react_1.default.memo(() => {
283
283
  </react_native_1.Text>
284
284
  </react_native_1.View>)}
285
285
 
286
- {/* Duplicate count chip */}
286
+
287
287
  {selectedLog.duplicateCount != null &&
288
288
  selectedLog.duplicateCount > 1 && (<react_native_1.View style={[
289
289
  styles_1.default.metaChip,
@@ -303,11 +303,11 @@ const LogDetail = react_1.default.memo(() => {
303
303
  </react_native_1.View>)}
304
304
  </react_native_1.View>
305
305
 
306
- {/* Quick Copy button */}
306
+
307
307
  <CopyButton_1.default value={selectedLog.message} label={t('console.logMessage')}/>
308
308
  </react_native_1.View>
309
309
 
310
- {/* Caller & Trace origin info */}
310
+
311
311
  <react_native_1.View style={{ gap: 4 }}>
312
312
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
313
313
  {originFrame?.fileExt && originFrame.fileExt !== 'other' && (<react_native_1.View style={{
@@ -366,7 +366,7 @@ const LogDetail = react_1.default.memo(() => {
366
366
  </react_native_1.Pressable>)}
367
367
  </react_native_1.View>
368
368
 
369
- {/* Enhanced metadata metrics row */}
369
+
370
370
  <react_native_1.View style={{
371
371
  flexDirection: 'row',
372
372
  alignItems: 'center',
@@ -401,12 +401,12 @@ const LogDetail = react_1.default.memo(() => {
401
401
  </react_native_1.View>
402
402
  </react_native_1.View>
403
403
 
404
- {/* Sub-tabs header */}
404
+
405
405
  <react_native_1.View style={detailStyles.tabsHeaderWrap}>
406
406
  <SegmentedTabs_1.default tabs={subTabs} activeKey={activeTab} onChange={key => setActiveTab(key)}/>
407
407
  </react_native_1.View>
408
408
 
409
- {/* Search row (only for output/arguments/stack tabs) */}
409
+
410
410
  {activeTab !== 'metadata' && (<react_native_1.View style={{ paddingHorizontal: 12, paddingTop: 6, paddingBottom: 4 }}>
411
411
  <react_native_1.View style={[styles_1.default.detailSearchRow, { marginBottom: 0 }]}>
412
412
  <react_native_1.View style={[
@@ -428,14 +428,14 @@ const LogDetail = react_1.default.memo(() => {
428
428
  </react_native_1.View>
429
429
  </react_native_1.View>)}
430
430
 
431
- {/* Tab Content Container */}
431
+
432
432
  <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{
433
433
  paddingHorizontal: 12,
434
434
  paddingTop: 6,
435
435
  paddingBottom: 28,
436
436
  flexGrow: 1,
437
437
  }} showsVerticalScrollIndicator={true} keyboardShouldPersistTaps="handled">
438
- {/* Tab 1: Output / Message */}
438
+
439
439
  {activeTab === 'output' && (<react_native_1.View style={[
440
440
  styles_1.default.sectionContainer,
441
441
  {
@@ -449,7 +449,7 @@ const LogDetail = react_1.default.memo(() => {
449
449
  flex: 1,
450
450
  },
451
451
  ]}>
452
- {/* Section Header with View Modes */}
452
+
453
453
  <react_native_1.View style={{
454
454
  flexDirection: 'column',
455
455
  gap: 8,
@@ -505,7 +505,7 @@ const LogDetail = react_1.default.memo(() => {
505
505
  ]} activeKey={viewMode} onChange={key => setViewMode(key)}/>)}
506
506
  </react_native_1.View>
507
507
 
508
- {/* Content Body */}
508
+
509
509
  <react_native_1.View style={{ padding: 12, flex: 1 }}>
510
510
  {jsonContent ? (<>
511
511
  {jsonContent.header ? (<react_native_1.View style={{
@@ -552,7 +552,7 @@ const LogDetail = react_1.default.memo(() => {
552
552
  </react_native_1.View>
553
553
  </react_native_1.View>)}
554
554
 
555
- {/* Tab 2: Individual Arguments */}
555
+
556
556
  {activeTab === 'arguments' && selectedLog.rawArgs && (<react_native_1.View style={{ gap: 10 }}>
557
557
  {selectedLog.rawArgs.map((arg, idx) => {
558
558
  const argType = arg === null
@@ -634,7 +634,7 @@ const LogDetail = react_1.default.memo(() => {
634
634
  })}
635
635
  </react_native_1.View>)}
636
636
 
637
- {/* Tab 3: Call Stack Trace */}
637
+
638
638
  {activeTab === 'stack' && (<react_native_1.View style={[
639
639
  styles_1.default.sectionContainer,
640
640
  {
@@ -647,7 +647,7 @@ const LogDetail = react_1.default.memo(() => {
647
647
  overflow: 'hidden',
648
648
  },
649
649
  ]}>
650
- {/* Section Header with Mode Switch */}
650
+
651
651
  <react_native_1.View style={{
652
652
  flexDirection: 'column',
653
653
  gap: 8,
@@ -659,7 +659,7 @@ const LogDetail = react_1.default.memo(() => {
659
659
  ? AppColors_1.AppColors.primaryLight
660
660
  : AppColors_1.AppColors.grayBackground,
661
661
  }}>
662
- {/* Header Top Row: Title, Mode switcher & Full copy */}
662
+
663
663
  <react_native_1.View style={{
664
664
  flexDirection: 'row',
665
665
  alignItems: 'center',
@@ -742,7 +742,7 @@ const LogDetail = react_1.default.memo(() => {
742
742
  </react_native_1.View>
743
743
  </react_native_1.View>
744
744
 
745
- {/* Source Switcher if Error Stack exists */}
745
+
746
746
  {selectedLog.errorStack && (<SegmentedTabs_1.default tabs={[
747
747
  {
748
748
  key: 'caller',
@@ -754,7 +754,7 @@ const LogDetail = react_1.default.memo(() => {
754
754
  },
755
755
  ]} activeKey={stackSource} onChange={key => setStackSource(key)}/>)}
756
756
 
757
- {/* Scope Filter Tabs (Full Width) */}
757
+
758
758
  <SegmentedTabs_1.default tabs={[
759
759
  {
760
760
  key: 'app',
@@ -767,7 +767,7 @@ const LogDetail = react_1.default.memo(() => {
767
767
  ]} activeKey={stackFilter} onChange={key => setStackFilter(key)}/>
768
768
  </react_native_1.View>
769
769
 
770
- {/* Stack Content: Structured Cards or Raw Full Trace */}
770
+
771
771
  {stackViewMode === 'structured' ? (<react_native_1.View style={{ padding: 12, gap: 10 }}>
772
772
  {displayedFrames.length > 0 ? (displayedFrames.map((frame, frameIdx) => {
773
773
  const isTopFrame = frameIdx === 0;
@@ -797,7 +797,7 @@ const LogDetail = react_1.default.memo(() => {
797
797
  padding: 11,
798
798
  gap: 6,
799
799
  }}>
800
- {/* Frame Top Row: Origin / Category, File, Line badge, Copy */}
800
+
801
801
  <react_native_1.View style={{
802
802
  flexDirection: 'row',
803
803
  alignItems: 'center',
@@ -871,7 +871,7 @@ const LogDetail = react_1.default.memo(() => {
871
871
  </react_native_1.View>
872
872
  </react_native_1.View>
873
873
 
874
- {/* Middle Row: Function / Symbol Invocation */}
874
+
875
875
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
876
876
  <HighlightText_1.default text={frame.functionName !== '<anonymous>' ? `${frame.functionName}()` : '<anonymous>'} search={detailSearch} style={{
877
877
  fontFamily: AppFonts_1.AppFonts.interBold,
@@ -883,7 +883,7 @@ const LogDetail = react_1.default.memo(() => {
883
883
  }}/>
884
884
  </react_native_1.View>
885
885
 
886
- {/* Bottom Row: Clean Relative Path & Execution Scope Tag */}
886
+
887
887
  <react_native_1.View style={{
888
888
  flexDirection: 'row',
889
889
  alignItems: 'center',
@@ -937,9 +937,7 @@ const LogDetail = react_1.default.memo(() => {
937
937
  }}>
938
938
  {t('console.noStackAvailable')}
939
939
  </react_native_1.Text>)}
940
- </react_native_1.View>) : (
941
- /* Raw Full Trace Monospace Block */
942
- <react_native_1.View style={{
940
+ </react_native_1.View>) : (<react_native_1.View style={{
943
941
  backgroundColor: AppColors_1.AppColors.primaryLight,
944
942
  padding: 12,
945
943
  }}>
@@ -973,7 +971,7 @@ const LogDetail = react_1.default.memo(() => {
973
971
  </react_native_1.View>)}
974
972
  </react_native_1.View>)}
975
973
 
976
- {/* Tab 4: Structured Metadata */}
974
+
977
975
  {activeTab === 'metadata' && (<react_native_1.View style={[
978
976
  styles_1.default.sectionContainer,
979
977
  {
@@ -70,7 +70,6 @@ const MainScreen = () => {
70
70
  (activeTab === 'logs' && selectedLog != null) ||
71
71
  (activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null)) ||
72
72
  (activeTab === 'crash' && selectedCrash != null);
73
- // ─── 60 FPS Transition Animations ──────────────────────────────────────────
74
73
  const detailAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
75
74
  (0, react_1.useEffect)(() => {
76
75
  if (isDetailActive) {
@@ -126,11 +125,11 @@ const MainScreen = () => {
126
125
  <InspectorHeader_1.default />
127
126
 
128
127
  <react_native_1.View style={{ flex: 1 }}>
129
- {/* ─── Horizontal Scrollable Tab Bar inside Content (Always visible) ─── */}
128
+
130
129
  {!isDetailActive && <TabBar_1.default />}
131
130
 
132
131
  {isReady ? (<react_native_1.View style={{ flex: 1 }}>
133
- {/* Persistent List Layer - Never unmounted, preserves 100% native scroll with smooth tab transition */}
132
+
134
133
  <react_native_1.Animated.View style={[
135
134
  {
136
135
  flex: 1,
@@ -159,7 +158,7 @@ const MainScreen = () => {
159
158
  {activeTab === 'storage' && <StorageTab_1.default />}
160
159
  </react_native_1.Animated.View>
161
160
 
162
- {/* Detail View Layer - Rendered on top with smooth slide & spring transition */}
161
+
163
162
  {isDetailActive && (<react_native_1.Animated.View style={[
164
163
  react_native_1.StyleSheet.absoluteFill,
165
164
  {
@@ -183,7 +182,7 @@ const MainScreen = () => {
183
182
  </react_native_1.Animated.View>)}
184
183
  </react_native_1.View>) : (<MainScreenSkeleton />)}
185
184
 
186
- {/* Settings Panel Layer - Rendered on top with smooth slide & spring transition */}
185
+
187
186
  {settingsPage !== null && (<react_native_1.Animated.View style={[
188
187
  react_native_1.StyleSheet.absoluteFill,
189
188
  {
@@ -203,10 +202,10 @@ const MainScreen = () => {
203
202
  </react_native_1.Animated.View>)}
204
203
  </react_native_1.View>
205
204
 
206
- {/* Bottom floating toast notification */}
205
+
207
206
  <Toast_1.default />
208
207
 
209
- {/* NPM Version Update Toast with timeout progress bar */}
208
+
210
209
  <NpmUpdateToast_1.default />
211
210
  </react_native_1.View>
212
211
  </react_native_1.View>
@@ -234,7 +233,7 @@ const MainScreenSkeleton = react_1.default.memo(function MainScreenSkeleton() {
234
233
  return () => animation.stop();
235
234
  }, [shimmerAnim]);
236
235
  return (<react_native_1.View style={skeletonStyles.container}>
237
- {/* ─── Search & Scope Toolbar Skeleton ─── */}
236
+
238
237
  <react_native_1.View style={skeletonStyles.toolbarSkeleton}>
239
238
  <react_native_1.Animated.View style={[skeletonStyles.searchBarSkeleton, { opacity: shimmerAnim }]}/>
240
239
  <react_native_1.View style={skeletonStyles.actionButtonsRow}>
@@ -243,7 +242,7 @@ const MainScreenSkeleton = react_1.default.memo(function MainScreenSkeleton() {
243
242
  </react_native_1.View>
244
243
  </react_native_1.View>
245
244
 
246
- {/* ─── Quick Filter Chips Skeleton Strip ─── */}
245
+
247
246
  <react_native_1.View style={skeletonStyles.chipStripSkeleton}>
248
247
  <react_native_1.Animated.View style={[skeletonStyles.chipSkeleton, { width: 48, opacity: shimmerAnim }]}/>
249
248
  <react_native_1.Animated.View style={[skeletonStyles.chipSkeleton, { width: 68, opacity: shimmerAnim }]}/>
@@ -251,7 +250,7 @@ const MainScreenSkeleton = react_1.default.memo(function MainScreenSkeleton() {
251
250
  <react_native_1.Animated.View style={[skeletonStyles.chipSkeleton, { width: 58, opacity: shimmerAnim }]}/>
252
251
  </react_native_1.View>
253
252
 
254
- {/* ─── List Cards Skeleton ─── */}
253
+
255
254
  {[0, 1, 2, 3].map(i => (<react_native_1.Animated.View key={`skeleton_card_${i}`} style={[skeletonStyles.cardSkeleton, { opacity: shimmerAnim }]}>
256
255
  <react_native_1.View style={skeletonStyles.cardTopRow}>
257
256
  <react_native_1.View style={skeletonStyles.badgeGroup}>
@@ -48,7 +48,7 @@ const NetworkDetail = react_1.default.memo(() => {
48
48
  if (!selected)
49
49
  return null;
50
50
  return (<react_native_1.View style={{ flex: 1 }}>
51
- {/* Non-scrollable details header */}
51
+
52
52
  <react_native_1.View style={{ paddingHorizontal: 6, paddingTop: 4 }}>
53
53
  <react_native_1.View style={styles_1.default.detailInfoBar}>
54
54
  {(() => {
@@ -57,7 +57,6 @@ const NetworkDetail = react_1.default.memo(() => {
57
57
  let pathStr = detailDisplayUrl;
58
58
  let queryStr = '';
59
59
  try {
60
- // Simple parsing fallback for React Native environments
61
60
  const qIndex = detailDisplayUrl.indexOf('?');
62
61
  let cleanUrlForParsing = detailDisplayUrl;
63
62
  if (qIndex !== -1) {
@@ -101,7 +100,7 @@ const NetworkDetail = react_1.default.memo(() => {
101
100
  flexWrap: 'wrap',
102
101
  flex: 1,
103
102
  }}>
104
- {/* Method Chip */}
103
+
105
104
  <react_native_1.View style={[
106
105
  styles_1.default.methodBadge,
107
106
  {
@@ -122,7 +121,7 @@ const NetworkDetail = react_1.default.memo(() => {
122
121
  </react_native_1.Text>
123
122
  </react_native_1.View>
124
123
 
125
- {/* Client Chip (AXIOS / FETCH / XHR) */}
124
+
126
125
  {selected.client && (<react_native_1.View style={[
127
126
  styles_1.default.chip,
128
127
  {
@@ -163,7 +162,7 @@ const NetworkDetail = react_1.default.memo(() => {
163
162
  </react_native_1.Text>
164
163
  </react_native_1.View>)}
165
164
 
166
- {/* Status Pill */}
165
+
167
166
  {selected.status != null && (<react_native_1.View style={[
168
167
  styles_1.default.chip,
169
168
  {
@@ -200,7 +199,7 @@ const NetworkDetail = react_1.default.memo(() => {
200
199
  </react_native_1.Text>
201
200
  </react_native_1.View>)}
202
201
 
203
- {/* Duration Pill */}
202
+
204
203
  {selected.duration != null && (<react_native_1.View style={[
205
204
  styles_1.default.chip,
206
205
  {
@@ -225,7 +224,7 @@ const NetworkDetail = react_1.default.memo(() => {
225
224
  </react_native_1.Text>
226
225
  </react_native_1.View>)}
227
226
 
228
- {/* Size Pill */}
227
+
229
228
  {selected.response != null && (<react_native_1.View style={[
230
229
  styles_1.default.chip,
231
230
  {
@@ -261,7 +260,7 @@ const NetworkDetail = react_1.default.memo(() => {
261
260
  </react_native_1.View>
262
261
  </react_native_1.View>
263
262
 
264
- {/* Full Live URL Analysis Card */}
263
+
265
264
  <react_native_1.Pressable style={{
266
265
  backgroundColor: AppColors_1.AppColors.grayBackground,
267
266
  borderRadius: 10,
@@ -344,7 +343,7 @@ const NetworkDetail = react_1.default.memo(() => {
344
343
  </react_native_1.View>
345
344
  </react_native_1.View>
346
345
 
347
- {/* Full Clickable Hyperlink */}
346
+
348
347
  <react_native_1.Text selectable={true} style={{
349
348
  fontFamily: AppFonts_1.AppFonts.interMedium,
350
349
  fontSize: 12.5,
@@ -360,7 +359,7 @@ const NetworkDetail = react_1.default.memo(() => {
360
359
  </react_native_1.View>
361
360
  </react_native_1.View>
362
361
 
363
- {/* Sticky Segment Control */}
362
+
364
363
  <SegmentedTabs_1.default tabs={[
365
364
  {
366
365
  key: 'metadata',
@@ -391,7 +390,7 @@ const NetworkDetail = react_1.default.memo(() => {
391
390
  setApiDetailActiveTab(tab);
392
391
  }} style={{ marginHorizontal: 6, marginBottom: 10, marginTop: 6 }}/>
393
392
 
394
- {/* Scrollable Tab Content */}
393
+
395
394
  <react_native_1.ScrollView style={styles_1.default.detailScroll} contentContainerStyle={{
396
395
  paddingHorizontal: 6,
397
396
  paddingBottom: 24,
@@ -371,7 +371,7 @@ const NetworkTab = react_1.default.memo(() => {
371
371
  ]);
372
372
  return (<react_native_1.View style={{ flex: 1 }}>
373
373
  <react_native_1.FlatList ref={apisListRef} data={groupedData} keyExtractor={item => item?.id?.toString()} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListHeaderComponent={<react_native_1.View style={{ marginTop: 6 }}>
374
- {/* Network Health & Telemetry Strip */}
374
+
375
375
  {networkMetrics != null && networkMetrics.totalCount > 0 && (<react_native_1.View style={{
376
376
  flexDirection: 'row',
377
377
  alignItems: 'center',
@@ -385,7 +385,7 @@ const NetworkTab = react_1.default.memo(() => {
385
385
  borderWidth: 1,
386
386
  borderColor: AppColors_1.AppColors.dividerColor,
387
387
  }}>
388
- {/* Success Rate */}
388
+
389
389
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4.5 }}>
390
390
  <react_native_1.View style={{
391
391
  width: 6,
@@ -407,7 +407,7 @@ const NetworkTab = react_1.default.memo(() => {
407
407
 
408
408
  <react_native_1.View style={{ width: 1, height: 11, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
409
409
 
410
- {/* Avg Latency */}
410
+
411
411
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
412
412
  <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.purple} size={10}/>
413
413
  <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interBold, fontSize: 10.5, color: AppColors_1.AppColors.purple }}>
@@ -420,7 +420,7 @@ const NetworkTab = react_1.default.memo(() => {
420
420
 
421
421
  <react_native_1.View style={{ width: 1, height: 11, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
422
422
 
423
- {/* P95 Latency */}
423
+
424
424
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
425
425
  <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interBold, fontSize: 10.5, color: AppColors_1.AppColors.primaryBlack }}>
426
426
  {networkMetrics.p95}ms
@@ -431,7 +431,7 @@ const NetworkTab = react_1.default.memo(() => {
431
431
  </react_native_1.View>
432
432
  </react_native_1.View>)}
433
433
 
434
- {/* Toolbar Row with Search & Actions */}
434
+
435
435
  <react_native_1.View style={styles_1.default.toolbarRow}>
436
436
  <react_native_1.View style={[
437
437
  styles_1.default.searchContainer,
@@ -445,7 +445,7 @@ const NetworkTab = react_1.default.memo(() => {
445
445
  : AppColors_1.AppColors.grayTextWeak} size={15}/>
446
446
  <react_native_1.TextInput placeholder="Search url, body, is:error, slow:>1s..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={search} onChangeText={setSearch} onFocus={() => setIsSearchFocused(true)} onBlur={() => setIsSearchFocused(false)} style={styles_1.default.searchInput} autoCorrect={false} autoCapitalize="none"/>
447
447
 
448
- {/* Match Case (Aa) & Regex (.*) Quick Toggles */}
448
+
449
449
  <react_native_1.View style={{
450
450
  flexDirection: 'row',
451
451
  alignItems: 'center',
@@ -570,7 +570,7 @@ const NetworkTab = react_1.default.memo(() => {
570
570
  </react_native_1.View>
571
571
  </react_native_1.View>
572
572
 
573
- {/* Quick Search Scope & Filter Tags Row */}
573
+
574
574
  <react_native_1.View style={{ paddingBottom: 4 }}>
575
575
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
576
576
  paddingHorizontal: 12,
@@ -579,7 +579,7 @@ const NetworkTab = react_1.default.memo(() => {
579
579
  gap: 5,
580
580
  paddingVertical: 2,
581
581
  }}>
582
- {/* Search Scopes */}
582
+
583
583
  {SEARCH_SCOPES.map(s => {
584
584
  const isActive = searchScope === s.id;
585
585
  return (<TouchableScale_1.default key={`scope_${s.id}`} onPress={() => setSearchScope(s.id)} hitSlop={6} style={{
@@ -615,7 +615,7 @@ const NetworkTab = react_1.default.memo(() => {
615
615
  marginHorizontal: 3,
616
616
  }}/>
617
617
 
618
- {/* Quick Query Suggestions */}
618
+
619
619
  {QUICK_API_QUERY_TAGS.map(q => {
620
620
  const isActive = search.includes(q.query);
621
621
  return (<TouchableScale_1.default key={`quick_${q.query}`} onPress={() => {
@@ -658,7 +658,7 @@ const NetworkTab = react_1.default.memo(() => {
658
658
  </react_native_1.ScrollView>
659
659
  </react_native_1.View>
660
660
 
661
- {/* Quick Filter Horizontal Chips Bar with Live Counts */}
661
+
662
662
  <react_native_1.View style={{ marginBottom: 8 }}>
663
663
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
664
664
  paddingHorizontal: 12,
@@ -726,7 +726,7 @@ const NetworkTab = react_1.default.memo(() => {
726
726
  </react_native_1.ScrollView>
727
727
  </react_native_1.View>
728
728
 
729
- {/* Search Scope Selector Bar (Visible on search or focus) */}
729
+
730
730
  {(isSearchFocused || search.length > 0) && (<react_native_1.View style={{
731
731
  flexDirection: 'row',
732
732
  alignItems: 'center',
@@ -783,7 +783,7 @@ const NetworkTab = react_1.default.memo(() => {
783
783
  </react_native_1.ScrollView>
784
784
  </react_native_1.View>)}
785
785
 
786
- {/* Advanced Search Quick Query Suggestions Bar */}
786
+
787
787
  {(isSearchFocused || search.length > 0) && (<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={{ marginBottom: 8, maxHeight: 28 }} contentContainerStyle={{
788
788
  paddingHorizontal: 12,
789
789
  flexDirection: 'row',
@@ -830,7 +830,7 @@ const NetworkTab = react_1.default.memo(() => {
830
830
  })}
831
831
  </react_native_1.ScrollView>)}
832
832
 
833
- {/* Active Filter Helper Status Bar */}
833
+
834
834
  {(quickFilter !== 'all' ||
835
835
  search.trim().length > 0 ||
836
836
  statusFilters.size > 0 ||
@@ -956,7 +956,7 @@ const NetworkTab = react_1.default.memo(() => {
956
956
  styles_1.default.listContent,
957
957
  filteredLogs.length === 0 && { flexGrow: 1 },
958
958
  ]} keyboardShouldPersistTaps="handled"/>
959
- {/* #2 — always-visible scroll-to-top, bottom right */}
959
+
960
960
  <TouchableScale_1.default onPress={() => {
961
961
  try {
962
962
  apisListRef.current?.scrollToOffset({
@@ -70,7 +70,6 @@ const NpmUpdateToast = () => {
70
70
  (0, react_1.useEffect)(() => {
71
71
  if (showUpdateToast && updateAvailable && latestNpmVersion && !dismissed) {
72
72
  setVisible(true);
73
- // Slide and fade in
74
73
  react_native_1.Animated.parallel([
75
74
  react_native_1.Animated.spring(translateYAnim, {
76
75
  toValue: 0,
@@ -84,14 +83,12 @@ const NpmUpdateToast = () => {
84
83
  useNativeDriver: true,
85
84
  }),
86
85
  ]).start();
87
- // Progress bar countdown from 1 to 0
88
86
  progressAnim.setValue(1);
89
87
  react_native_1.Animated.timing(progressAnim, {
90
88
  toValue: 0,
91
89
  duration: TOAST_TIMEOUT_MS,
92
90
  useNativeDriver: false,
93
91
  }).start();
94
- // Auto-hide after timeout
95
92
  timerRef.current = setTimeout(() => {
96
93
  handleDismiss();
97
94
  }, TOAST_TIMEOUT_MS);
@@ -145,12 +142,12 @@ const NpmUpdateToast = () => {
145
142
  },
146
143
  ]}>
147
144
  <react_native_1.View style={styles.contentRow}>
148
- {/* Left NPM Badge Icon */}
145
+
149
146
  <react_native_1.View style={styles.npmIconContainer}>
150
147
  <NetworkIcons_1.NpmIcon size={15} color="#CB3837"/>
151
148
  </react_native_1.View>
152
149
 
153
- {/* Text Details */}
150
+
154
151
  <react_native_1.View style={styles.textContainer}>
155
152
  <react_native_1.View style={styles.titleRow}>
156
153
  <react_native_1.Text style={styles.titleText}>Update Available</react_native_1.Text>
@@ -163,7 +160,7 @@ const NpmUpdateToast = () => {
163
160
  </react_native_1.Text>
164
161
  </react_native_1.View>
165
162
 
166
- {/* Copy command quick button */}
163
+
167
164
  <react_native_1.TouchableOpacity style={styles.copyButton} onPress={handleCopyCommand} hitSlop={6} activeOpacity={0.75}>
168
165
  {copied ? <CheckSvg size={11} color="#10B981"/> : <CopySvg size={11} color="#94A3B8"/>}
169
166
  <react_native_1.Text style={[styles.copyButtonText, copied && { color: '#10B981' }]}>
@@ -171,19 +168,19 @@ const NpmUpdateToast = () => {
171
168
  </react_native_1.Text>
172
169
  </react_native_1.TouchableOpacity>
173
170
 
174
- {/* Action Button: View */}
171
+
175
172
  <react_native_1.TouchableOpacity style={styles.actionButton} onPress={handleOpenNpm} activeOpacity={0.8}>
176
173
  <react_native_1.Text style={styles.actionButtonText}>View</react_native_1.Text>
177
174
  <ExternalLinkSvg size={10} color="#FFFFFF"/>
178
175
  </react_native_1.TouchableOpacity>
179
176
 
180
- {/* Close Button */}
177
+
181
178
  <react_native_1.TouchableOpacity style={styles.closeButton} onPress={handleDismiss} hitSlop={8} activeOpacity={0.7}>
182
179
  <CloseSvg size={12} color="#94A3B8"/>
183
180
  </react_native_1.TouchableOpacity>
184
181
  </react_native_1.View>
185
182
 
186
- {/* Animated Linear Timeout Progress Bar */}
183
+
187
184
  <react_native_1.View style={styles.progressBarTrack}>
188
185
  <react_native_1.Animated.View style={[styles.progressBarFill, { width: progressWidth }]}/>
189
186
  </react_native_1.View>