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
@@ -21,14 +21,12 @@ const AnalyticsHeader = React.memo(() => {
21
21
  const userProperties = getCurrentUserProperties();
22
22
  const defaultParams = getDefaultEventParameters();
23
23
  const isTrackingEnabled = getCollectionEnabled();
24
- // If there are no analytics events in the session, hide the graph, category breakdown, and realtime card
25
24
  if (analyticsEvents.length === 0) {
26
25
  return null;
27
26
  }
28
27
  const hasUserProps = Object.keys(userProperties).length > 0;
29
28
  const hasDefaultParams = Object.keys(defaultParams).length > 0;
30
29
  const totalEvents = filteredAnalyticsEvents.length;
31
- // Category counts & breakdown across all session events
32
30
  const categoryStats = useMemo(() => {
33
31
  let ecommerce = 0;
34
32
  let page_view = 0;
@@ -69,7 +67,6 @@ const AnalyticsHeader = React.memo(() => {
69
67
  totalCount: total,
70
68
  };
71
69
  }, [analyticsEvents]);
72
- // Top Screen Views Leaderboard (GA4 Realtime Card)
73
70
  const topScreens = useMemo(() => {
74
71
  const screenMap = new Map();
75
72
  for (const e of filteredAnalyticsEvents) {
@@ -91,7 +88,6 @@ const AnalyticsHeader = React.memo(() => {
91
88
  barWidthPct: Math.round((count / maxVal) * 100),
92
89
  }));
93
90
  }, [filteredAnalyticsEvents]);
94
- // Multi-select category toggle from top button group
95
91
  const toggleCategoryFilter = (cat) => {
96
92
  animateNextLayout();
97
93
  setAnalyticsFilters(prev => {
@@ -123,7 +119,6 @@ const AnalyticsHeader = React.memo(() => {
123
119
  return { ...prev, categories: nextCategories };
124
120
  });
125
121
  };
126
- // 12-Bucket GA4 Realtime Stacked Histogram & Spline Wave Graph (60s live rolling stream)
127
122
  const BUCKET_COUNT = 12;
128
123
  const chartHeight = 64;
129
124
  const svgWidth = 320;
@@ -140,8 +135,8 @@ const AnalyticsHeader = React.memo(() => {
140
135
  const histogramData = useMemo(() => {
141
136
  const buckets = [];
142
137
  const now = Date.now();
143
- const windowMs = 60000; // 60s live rolling window
144
- const bucketDuration = windowMs / BUCKET_COUNT; // 5s per bucket
138
+ const windowMs = 60000;
139
+ const bucketDuration = windowMs / BUCKET_COUNT;
145
140
  for (let i = 0; i < BUCKET_COUNT; i++) {
146
141
  const bucketAgeSec = Math.round(((BUCKET_COUNT - 1 - i) * bucketDuration) / 1000);
147
142
  buckets.push({
@@ -181,7 +176,6 @@ const AnalyticsHeader = React.memo(() => {
181
176
  const normalizedH = (b.total / maxVal) * (chartHeight - 22);
182
177
  b.y = chartHeight - 10 - normalizedH;
183
178
  });
184
- // Generate Cubic Bézier Spline paths
185
179
  let linePath = `M ${buckets[0].x.toFixed(1)} ${buckets[0].y.toFixed(1)}`;
186
180
  for (let i = 0; i < buckets.length - 1; i++) {
187
181
  const p0 = buckets[Math.max(0, i - 1)];
@@ -209,7 +203,7 @@ const AnalyticsHeader = React.memo(() => {
209
203
  }, [filteredAnalyticsEvents, chartHeight, svgWidth, liveTick, t]);
210
204
  const selectedBucket = selectedBucketIdx != null ? histogramData.buckets[selectedBucketIdx] : null;
211
205
  return (<View style={styles.analyticsHeaderCard}>
212
- {/* ── 1. Top Header Row (GA4 Style) ─────────────────────────────────── */}
206
+
213
207
  <View style={styles.analyticsHeaderTop}>
214
208
  <View style={{ flex: 1 }}>
215
209
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
@@ -249,9 +243,9 @@ const AnalyticsHeader = React.memo(() => {
249
243
  </TouchableOpacity>
250
244
  </View>
251
245
 
252
- {/* ── 2. Multi-Select Category Filter Buttons (AT THE TOP) ──────────── */}
246
+
253
247
  <View style={{ marginTop: 10, marginBottom: 8 }}>
254
- {/* Multi-color Proportional Segmented Bar */}
248
+
255
249
  <View style={{
256
250
  height: 4.5,
257
251
  borderRadius: 2.5,
@@ -278,13 +272,13 @@ const AnalyticsHeader = React.memo(() => {
278
272
  }}/>)}
279
273
  </View>
280
274
 
281
- {/* Multi-Select Category Buttons */}
275
+
282
276
  <View style={{
283
277
  flexDirection: 'row',
284
278
  flexWrap: 'wrap',
285
279
  gap: 6,
286
280
  }}>
287
- {/* All Button */}
281
+
288
282
  {(() => {
289
283
  const isAllSelected = analyticsFilters.categories.has('all');
290
284
  return (<TouchableScale onPress={() => toggleCategoryFilter('all')} style={[
@@ -318,7 +312,7 @@ const AnalyticsHeader = React.memo(() => {
318
312
  </TouchableScale>);
319
313
  })()}
320
314
 
321
- {/* Ecommerce Button */}
315
+
322
316
  {(() => {
323
317
  const isSelected = !analyticsFilters.categories.has('all') &&
324
318
  analyticsFilters.categories.has('ecommerce');
@@ -353,7 +347,7 @@ const AnalyticsHeader = React.memo(() => {
353
347
  </TouchableScale>);
354
348
  })()}
355
349
 
356
- {/* Screens Button */}
350
+
357
351
  {(() => {
358
352
  const isSelected = !analyticsFilters.categories.has('all') &&
359
353
  analyticsFilters.categories.has('page_view');
@@ -388,7 +382,7 @@ const AnalyticsHeader = React.memo(() => {
388
382
  </TouchableScale>);
389
383
  })()}
390
384
 
391
- {/* System Button */}
385
+
392
386
  {(() => {
393
387
  const isSelected = !analyticsFilters.categories.has('all') &&
394
388
  analyticsFilters.categories.has('system');
@@ -423,7 +417,7 @@ const AnalyticsHeader = React.memo(() => {
423
417
  </TouchableScale>);
424
418
  })()}
425
419
 
426
- {/* Custom Button */}
420
+
427
421
  {(() => {
428
422
  const isSelected = !analyticsFilters.categories.has('all') &&
429
423
  analyticsFilters.categories.has('custom');
@@ -460,7 +454,7 @@ const AnalyticsHeader = React.memo(() => {
460
454
  </View>
461
455
  </View>
462
456
 
463
- {/* ── 3. GA4 Realtime Metric Hero & Activity Chart (UNDER CATEGORIES) ─ */}
457
+
464
458
  <View style={{
465
459
  marginTop: 2,
466
460
  marginBottom: 8,
@@ -470,7 +464,7 @@ const AnalyticsHeader = React.memo(() => {
470
464
  borderColor: AppColors.dividerColor,
471
465
  padding: 10,
472
466
  }}>
473
- {/* Hero Metric Row */}
467
+
474
468
  <View style={{
475
469
  flexDirection: 'row',
476
470
  justifyContent: 'space-between',
@@ -497,7 +491,7 @@ const AnalyticsHeader = React.memo(() => {
497
491
  </View>
498
492
  </View>
499
493
 
500
- {/* Realtime Rate Badges */}
494
+
501
495
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
502
496
  <View style={{
503
497
  flexDirection: 'row',
@@ -542,7 +536,7 @@ const AnalyticsHeader = React.memo(() => {
542
536
  </View>
543
537
  </View>
544
538
 
545
- {/* ── Crashlytics-Style Multi-Bar Histogram with Trendline Overlay ── */}
539
+
546
540
  <View style={{ height: chartHeight, position: 'relative', overflow: 'hidden', borderRadius: 8 }}>
547
541
  <Svg width="100%" height={chartHeight} viewBox={`0 0 ${svgWidth} ${chartHeight}`} preserveAspectRatio="none">
548
542
  <Defs>
@@ -557,14 +551,14 @@ const AnalyticsHeader = React.memo(() => {
557
551
  </SvgLinearGradient>
558
552
  </Defs>
559
553
 
560
- {/* Subtle Grid Guidelines */}
554
+
561
555
  <Line x1="6" y1={chartHeight - 6} x2={svgWidth - 6} y2={chartHeight - 6} stroke="#E2E8F0" strokeWidth="1"/>
562
556
  <Line x1="6" y1={chartHeight / 2} x2={svgWidth - 6} y2={chartHeight / 2} stroke="#F1F5F9" strokeWidth="1" strokeDasharray="4,4"/>
563
557
 
564
- {/* Glowing Area Underlay */}
558
+
565
559
  <Path d={histogramData.areaPath} fill="url(#crashlyticsAreaGrad)"/>
566
560
 
567
- {/* Vertical Crashlytics Histogram Bars */}
561
+
568
562
  {histogramData.buckets.map((b, idx) => {
569
563
  const isSelected = selectedBucketIdx === idx;
570
564
  const barWidth = 10;
@@ -572,28 +566,28 @@ const AnalyticsHeader = React.memo(() => {
572
566
  const barHeight = Math.max(3, chartHeight - 8 - b.y);
573
567
  const barY = chartHeight - 8 - barHeight;
574
568
  return (<G key={`bar-${b.index}`}>
575
- {/* Background slot */}
569
+
576
570
  <Rect x={barX} y={6} width={barWidth} height={chartHeight - 14} rx={3} fill={isSelected ? '#EDE9FE' : '#F8FAFC'}/>
577
571
 
578
- {/* Active Event Bar */}
572
+
579
573
  {b.total > 0 && (<Rect x={barX} y={barY} width={barWidth} height={barHeight} rx={3} fill="url(#crashlyticsBarGrad)"/>)}
580
574
 
581
- {/* Selected Cursor Line */}
575
+
582
576
  {isSelected && (<Line x1={b.x} y1={4} x2={b.x} y2={chartHeight - 6} stroke="#8B5CF6" strokeWidth="1.5" strokeDasharray="2,2"/>)}
583
577
  </G>);
584
578
  })}
585
579
 
586
- {/* Crashlytics Apex Trendline */}
580
+
587
581
  <Path d={histogramData.linePath} fill="none" stroke="#8B5CF6" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
588
582
 
589
- {/* Pulsing Dot on Current Active Time Bucket */}
583
+
590
584
  {histogramData.buckets.length > 0 && (<G>
591
585
  <Circle cx={histogramData.buckets[histogramData.buckets.length - 1].x} cy={histogramData.buckets[histogramData.buckets.length - 1].y} r="5.5" fill="#8B5CF6" opacity="0.25"/>
592
586
  <Circle cx={histogramData.buckets[histogramData.buckets.length - 1].x} cy={histogramData.buckets[histogramData.buckets.length - 1].y} r="3" fill="#7C3AED"/>
593
587
  </G>)}
594
588
  </Svg>
595
589
 
596
- {/* Invisible Touch Columns for Interactive Bucket Selection */}
590
+
597
591
  <View style={{
598
592
  position: 'absolute',
599
593
  top: 0,
@@ -606,7 +600,7 @@ const AnalyticsHeader = React.memo(() => {
606
600
  </View>
607
601
  </View>
608
602
 
609
- {/* Selected Bucket Quick Breakdown Overlay */}
603
+
610
604
  {selectedBucket && (<View style={{
611
605
  flexDirection: 'row',
612
606
  alignItems: 'center',
@@ -642,7 +636,7 @@ const AnalyticsHeader = React.memo(() => {
642
636
  </View>
643
637
  </View>)}
644
638
 
645
- {/* Timeline Axis Labels (60s Realtime Rolling Stream) */}
639
+
646
640
  <View style={{
647
641
  flexDirection: 'row',
648
642
  justifyContent: 'space-between',
@@ -680,7 +674,7 @@ const AnalyticsHeader = React.memo(() => {
680
674
  </View>
681
675
  </View>
682
676
 
683
- {/* ── Top Screens / Views Mini Leaderboard (GA4 Realtime Overview) ──── */}
677
+
684
678
  {topScreens.length > 0 && (<View style={{
685
679
  marginTop: 8,
686
680
  backgroundColor: `${AppColors.sky500}0A`,
@@ -738,7 +732,7 @@ const AnalyticsHeader = React.memo(() => {
738
732
  {scr.count} ({scr.pct}%)
739
733
  </Text>
740
734
  </View>
741
- {/* Mini Horizontal Progress Meter */}
735
+
742
736
  <View style={{
743
737
  height: 3,
744
738
  borderRadius: 1.5,
@@ -755,9 +749,9 @@ const AnalyticsHeader = React.memo(() => {
755
749
  </View>
756
750
  </View>)}
757
751
 
758
- {/* ── Expandable User Properties & Default Parameters ───────────────── */}
752
+
759
753
  {analyticsHeaderExpanded && (<>
760
- {/* Stats Row */}
754
+
761
755
  <View style={styles.analyticsStatsRow}>
762
756
  <View style={styles.analyticsStatBox}>
763
757
  <Text style={styles.analyticsStatValue}>{totalEvents}</Text>
@@ -777,7 +771,7 @@ const AnalyticsHeader = React.memo(() => {
777
771
  </View>
778
772
  </View>
779
773
 
780
- {/* Details Section */}
774
+
781
775
  {(hasUserProps || hasDefaultParams) && (<View style={styles.analyticsHeaderDetails}>
782
776
  {hasUserProps && (<View style={{ marginBottom: 10 }}>
783
777
  <Text style={styles.detailsGroupTitle}>{t('analytics.userProperties')}</Text>
@@ -843,7 +837,7 @@ const AnalyticsTab = React.memo(() => {
843
837
  })()}/>);
844
838
  }, [filteredAnalyticsEvents, analyticsSearch, newEventIds, setSelectedEvent, logRouteMapRef]);
845
839
  return (<>
846
- {/* ─── Search + Shared Toolbar for Analytics ──────────────────────── */}
840
+
847
841
  {selectedEvent == null && (<View style={[
848
842
  styles.toolbarRow,
849
843
  { marginTop: 12, marginBottom: 8 },
@@ -888,7 +882,7 @@ const AnalyticsTab = React.memo(() => {
888
882
  : AppColors.grayTextStrong} size={16}/>
889
883
  </TouchableOpacity>
890
884
 
891
- {/* GA Dashboard-style Filter Button */}
885
+
892
886
  <TouchableOpacity style={[
893
887
  styles.toolbarBtn,
894
888
  isAnalyticsFilterApplied && {
@@ -924,7 +918,7 @@ const AnalyticsTab = React.memo(() => {
924
918
  </View>
925
919
  </View>)}
926
920
 
927
- {/* Filter Modal */}
921
+
928
922
  <AnalyticsFilterModal visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)}/>
929
923
 
930
924
  <View style={{ flex: 1 }} onLayout={() => setIsAnalyticsLayoutReady(true)}>