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
@@ -59,14 +59,12 @@ const AnalyticsHeader = react_1.default.memo(() => {
59
59
  const userProperties = (0, analyticsLogger_1.getCurrentUserProperties)();
60
60
  const defaultParams = (0, analyticsLogger_1.getDefaultEventParameters)();
61
61
  const isTrackingEnabled = (0, analyticsLogger_1.getCollectionEnabled)();
62
- // If there are no analytics events in the session, hide the graph, category breakdown, and realtime card
63
62
  if (analyticsEvents.length === 0) {
64
63
  return null;
65
64
  }
66
65
  const hasUserProps = Object.keys(userProperties).length > 0;
67
66
  const hasDefaultParams = Object.keys(defaultParams).length > 0;
68
67
  const totalEvents = filteredAnalyticsEvents.length;
69
- // Category counts & breakdown across all session events
70
68
  const categoryStats = (0, react_1.useMemo)(() => {
71
69
  let ecommerce = 0;
72
70
  let page_view = 0;
@@ -107,7 +105,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
107
105
  totalCount: total,
108
106
  };
109
107
  }, [analyticsEvents]);
110
- // Top Screen Views Leaderboard (GA4 Realtime Card)
111
108
  const topScreens = (0, react_1.useMemo)(() => {
112
109
  const screenMap = new Map();
113
110
  for (const e of filteredAnalyticsEvents) {
@@ -129,7 +126,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
129
126
  barWidthPct: Math.round((count / maxVal) * 100),
130
127
  }));
131
128
  }, [filteredAnalyticsEvents]);
132
- // Multi-select category toggle from top button group
133
129
  const toggleCategoryFilter = (cat) => {
134
130
  (0, InspectorContext_1.animateNextLayout)();
135
131
  setAnalyticsFilters(prev => {
@@ -161,7 +157,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
161
157
  return { ...prev, categories: nextCategories };
162
158
  });
163
159
  };
164
- // 12-Bucket GA4 Realtime Stacked Histogram & Spline Wave Graph (60s live rolling stream)
165
160
  const BUCKET_COUNT = 12;
166
161
  const chartHeight = 64;
167
162
  const svgWidth = 320;
@@ -178,8 +173,8 @@ const AnalyticsHeader = react_1.default.memo(() => {
178
173
  const histogramData = (0, react_1.useMemo)(() => {
179
174
  const buckets = [];
180
175
  const now = Date.now();
181
- const windowMs = 60000; // 60s live rolling window
182
- const bucketDuration = windowMs / BUCKET_COUNT; // 5s per bucket
176
+ const windowMs = 60000;
177
+ const bucketDuration = windowMs / BUCKET_COUNT;
183
178
  for (let i = 0; i < BUCKET_COUNT; i++) {
184
179
  const bucketAgeSec = Math.round(((BUCKET_COUNT - 1 - i) * bucketDuration) / 1000);
185
180
  buckets.push({
@@ -219,7 +214,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
219
214
  const normalizedH = (b.total / maxVal) * (chartHeight - 22);
220
215
  b.y = chartHeight - 10 - normalizedH;
221
216
  });
222
- // Generate Cubic Bézier Spline paths
223
217
  let linePath = `M ${buckets[0].x.toFixed(1)} ${buckets[0].y.toFixed(1)}`;
224
218
  for (let i = 0; i < buckets.length - 1; i++) {
225
219
  const p0 = buckets[Math.max(0, i - 1)];
@@ -247,7 +241,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
247
241
  }, [filteredAnalyticsEvents, chartHeight, svgWidth, liveTick, t]);
248
242
  const selectedBucket = selectedBucketIdx != null ? histogramData.buckets[selectedBucketIdx] : null;
249
243
  return (<react_native_1.View style={styles_1.default.analyticsHeaderCard}>
250
- {/* ── 1. Top Header Row (GA4 Style) ─────────────────────────────────── */}
244
+
251
245
  <react_native_1.View style={styles_1.default.analyticsHeaderTop}>
252
246
  <react_native_1.View style={{ flex: 1 }}>
253
247
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
@@ -287,9 +281,9 @@ const AnalyticsHeader = react_1.default.memo(() => {
287
281
  </react_native_1.TouchableOpacity>
288
282
  </react_native_1.View>
289
283
 
290
- {/* ── 2. Multi-Select Category Filter Buttons (AT THE TOP) ──────────── */}
284
+
291
285
  <react_native_1.View style={{ marginTop: 10, marginBottom: 8 }}>
292
- {/* Multi-color Proportional Segmented Bar */}
286
+
293
287
  <react_native_1.View style={{
294
288
  height: 4.5,
295
289
  borderRadius: 2.5,
@@ -316,13 +310,13 @@ const AnalyticsHeader = react_1.default.memo(() => {
316
310
  }}/>)}
317
311
  </react_native_1.View>
318
312
 
319
- {/* Multi-Select Category Buttons */}
313
+
320
314
  <react_native_1.View style={{
321
315
  flexDirection: 'row',
322
316
  flexWrap: 'wrap',
323
317
  gap: 6,
324
318
  }}>
325
- {/* All Button */}
319
+
326
320
  {(() => {
327
321
  const isAllSelected = analyticsFilters.categories.has('all');
328
322
  return (<TouchableScale_1.default onPress={() => toggleCategoryFilter('all')} style={[
@@ -356,7 +350,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
356
350
  </TouchableScale_1.default>);
357
351
  })()}
358
352
 
359
- {/* Ecommerce Button */}
353
+
360
354
  {(() => {
361
355
  const isSelected = !analyticsFilters.categories.has('all') &&
362
356
  analyticsFilters.categories.has('ecommerce');
@@ -391,7 +385,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
391
385
  </TouchableScale_1.default>);
392
386
  })()}
393
387
 
394
- {/* Screens Button */}
388
+
395
389
  {(() => {
396
390
  const isSelected = !analyticsFilters.categories.has('all') &&
397
391
  analyticsFilters.categories.has('page_view');
@@ -426,7 +420,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
426
420
  </TouchableScale_1.default>);
427
421
  })()}
428
422
 
429
- {/* System Button */}
423
+
430
424
  {(() => {
431
425
  const isSelected = !analyticsFilters.categories.has('all') &&
432
426
  analyticsFilters.categories.has('system');
@@ -461,7 +455,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
461
455
  </TouchableScale_1.default>);
462
456
  })()}
463
457
 
464
- {/* Custom Button */}
458
+
465
459
  {(() => {
466
460
  const isSelected = !analyticsFilters.categories.has('all') &&
467
461
  analyticsFilters.categories.has('custom');
@@ -498,7 +492,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
498
492
  </react_native_1.View>
499
493
  </react_native_1.View>
500
494
 
501
- {/* ── 3. GA4 Realtime Metric Hero & Activity Chart (UNDER CATEGORIES) ─ */}
495
+
502
496
  <react_native_1.View style={{
503
497
  marginTop: 2,
504
498
  marginBottom: 8,
@@ -508,7 +502,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
508
502
  borderColor: AppColors_1.AppColors.dividerColor,
509
503
  padding: 10,
510
504
  }}>
511
- {/* Hero Metric Row */}
505
+
512
506
  <react_native_1.View style={{
513
507
  flexDirection: 'row',
514
508
  justifyContent: 'space-between',
@@ -535,7 +529,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
535
529
  </react_native_1.View>
536
530
  </react_native_1.View>
537
531
 
538
- {/* Realtime Rate Badges */}
532
+
539
533
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
540
534
  <react_native_1.View style={{
541
535
  flexDirection: 'row',
@@ -580,7 +574,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
580
574
  </react_native_1.View>
581
575
  </react_native_1.View>
582
576
 
583
- {/* ── Crashlytics-Style Multi-Bar Histogram with Trendline Overlay ── */}
577
+
584
578
  <react_native_1.View style={{ height: chartHeight, position: 'relative', overflow: 'hidden', borderRadius: 8 }}>
585
579
  <react_native_svg_1.default width="100%" height={chartHeight} viewBox={`0 0 ${svgWidth} ${chartHeight}`} preserveAspectRatio="none">
586
580
  <react_native_svg_1.Defs>
@@ -595,14 +589,14 @@ const AnalyticsHeader = react_1.default.memo(() => {
595
589
  </react_native_svg_1.LinearGradient>
596
590
  </react_native_svg_1.Defs>
597
591
 
598
- {/* Subtle Grid Guidelines */}
592
+
599
593
  <react_native_svg_1.Line x1="6" y1={chartHeight - 6} x2={svgWidth - 6} y2={chartHeight - 6} stroke="#E2E8F0" strokeWidth="1"/>
600
594
  <react_native_svg_1.Line x1="6" y1={chartHeight / 2} x2={svgWidth - 6} y2={chartHeight / 2} stroke="#F1F5F9" strokeWidth="1" strokeDasharray="4,4"/>
601
595
 
602
- {/* Glowing Area Underlay */}
596
+
603
597
  <react_native_svg_1.Path d={histogramData.areaPath} fill="url(#crashlyticsAreaGrad)"/>
604
598
 
605
- {/* Vertical Crashlytics Histogram Bars */}
599
+
606
600
  {histogramData.buckets.map((b, idx) => {
607
601
  const isSelected = selectedBucketIdx === idx;
608
602
  const barWidth = 10;
@@ -610,28 +604,28 @@ const AnalyticsHeader = react_1.default.memo(() => {
610
604
  const barHeight = Math.max(3, chartHeight - 8 - b.y);
611
605
  const barY = chartHeight - 8 - barHeight;
612
606
  return (<react_native_svg_1.G key={`bar-${b.index}`}>
613
- {/* Background slot */}
607
+
614
608
  <react_native_svg_1.Rect x={barX} y={6} width={barWidth} height={chartHeight - 14} rx={3} fill={isSelected ? '#EDE9FE' : '#F8FAFC'}/>
615
609
 
616
- {/* Active Event Bar */}
610
+
617
611
  {b.total > 0 && (<react_native_svg_1.Rect x={barX} y={barY} width={barWidth} height={barHeight} rx={3} fill="url(#crashlyticsBarGrad)"/>)}
618
612
 
619
- {/* Selected Cursor Line */}
613
+
620
614
  {isSelected && (<react_native_svg_1.Line x1={b.x} y1={4} x2={b.x} y2={chartHeight - 6} stroke="#8B5CF6" strokeWidth="1.5" strokeDasharray="2,2"/>)}
621
615
  </react_native_svg_1.G>);
622
616
  })}
623
617
 
624
- {/* Crashlytics Apex Trendline */}
618
+
625
619
  <react_native_svg_1.Path d={histogramData.linePath} fill="none" stroke="#8B5CF6" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
626
620
 
627
- {/* Pulsing Dot on Current Active Time Bucket */}
621
+
628
622
  {histogramData.buckets.length > 0 && (<react_native_svg_1.G>
629
623
  <react_native_svg_1.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"/>
630
624
  <react_native_svg_1.Circle cx={histogramData.buckets[histogramData.buckets.length - 1].x} cy={histogramData.buckets[histogramData.buckets.length - 1].y} r="3" fill="#7C3AED"/>
631
625
  </react_native_svg_1.G>)}
632
626
  </react_native_svg_1.default>
633
627
 
634
- {/* Invisible Touch Columns for Interactive Bucket Selection */}
628
+
635
629
  <react_native_1.View style={{
636
630
  position: 'absolute',
637
631
  top: 0,
@@ -644,7 +638,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
644
638
  </react_native_1.View>
645
639
  </react_native_1.View>
646
640
 
647
- {/* Selected Bucket Quick Breakdown Overlay */}
641
+
648
642
  {selectedBucket && (<react_native_1.View style={{
649
643
  flexDirection: 'row',
650
644
  alignItems: 'center',
@@ -680,7 +674,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
680
674
  </react_native_1.View>
681
675
  </react_native_1.View>)}
682
676
 
683
- {/* Timeline Axis Labels (60s Realtime Rolling Stream) */}
677
+
684
678
  <react_native_1.View style={{
685
679
  flexDirection: 'row',
686
680
  justifyContent: 'space-between',
@@ -718,7 +712,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
718
712
  </react_native_1.View>
719
713
  </react_native_1.View>
720
714
 
721
- {/* ── Top Screens / Views Mini Leaderboard (GA4 Realtime Overview) ──── */}
715
+
722
716
  {topScreens.length > 0 && (<react_native_1.View style={{
723
717
  marginTop: 8,
724
718
  backgroundColor: `${AppColors_1.AppColors.sky500}0A`,
@@ -776,7 +770,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
776
770
  {scr.count} ({scr.pct}%)
777
771
  </react_native_1.Text>
778
772
  </react_native_1.View>
779
- {/* Mini Horizontal Progress Meter */}
773
+
780
774
  <react_native_1.View style={{
781
775
  height: 3,
782
776
  borderRadius: 1.5,
@@ -793,9 +787,9 @@ const AnalyticsHeader = react_1.default.memo(() => {
793
787
  </react_native_1.View>
794
788
  </react_native_1.View>)}
795
789
 
796
- {/* ── Expandable User Properties & Default Parameters ───────────────── */}
790
+
797
791
  {analyticsHeaderExpanded && (<>
798
- {/* Stats Row */}
792
+
799
793
  <react_native_1.View style={styles_1.default.analyticsStatsRow}>
800
794
  <react_native_1.View style={styles_1.default.analyticsStatBox}>
801
795
  <react_native_1.Text style={styles_1.default.analyticsStatValue}>{totalEvents}</react_native_1.Text>
@@ -815,7 +809,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
815
809
  </react_native_1.View>
816
810
  </react_native_1.View>
817
811
 
818
- {/* Details Section */}
812
+
819
813
  {(hasUserProps || hasDefaultParams) && (<react_native_1.View style={styles_1.default.analyticsHeaderDetails}>
820
814
  {hasUserProps && (<react_native_1.View style={{ marginBottom: 10 }}>
821
815
  <react_native_1.Text style={styles_1.default.detailsGroupTitle}>{t('analytics.userProperties')}</react_native_1.Text>
@@ -881,7 +875,7 @@ const AnalyticsTab = react_1.default.memo(() => {
881
875
  })()}/>);
882
876
  }, [filteredAnalyticsEvents, analyticsSearch, newEventIds, setSelectedEvent, logRouteMapRef]);
883
877
  return (<>
884
- {/* ─── Search + Shared Toolbar for Analytics ──────────────────────── */}
878
+
885
879
  {selectedEvent == null && (<react_native_1.View style={[
886
880
  styles_1.default.toolbarRow,
887
881
  { marginTop: 12, marginBottom: 8 },
@@ -926,7 +920,7 @@ const AnalyticsTab = react_1.default.memo(() => {
926
920
  : AppColors_1.AppColors.grayTextStrong} size={16}/>
927
921
  </react_native_1.TouchableOpacity>
928
922
 
929
- {/* GA Dashboard-style Filter Button */}
923
+
930
924
  <react_native_1.TouchableOpacity style={[
931
925
  styles_1.default.toolbarBtn,
932
926
  isAnalyticsFilterApplied && {
@@ -962,7 +956,7 @@ const AnalyticsTab = react_1.default.memo(() => {
962
956
  </react_native_1.View>
963
957
  </react_native_1.View>)}
964
958
 
965
- {/* Filter Modal */}
959
+
966
960
  <AnalyticsFilterModal_1.default visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)}/>
967
961
 
968
962
  <react_native_1.View style={{ flex: 1 }} onLayout={() => setIsAnalyticsLayoutReady(true)}>