react-native-inapp-inspector 1.1.24 → 1.1.26

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 (114) hide show
  1. package/android/build.gradle +36 -0
  2. package/android/src/main/AndroidManifest.xml +3 -0
  3. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.java +114 -0
  4. package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.java +28 -0
  5. package/dist/commonjs/components/AnalyticsEventCard.js +94 -88
  6. package/dist/commonjs/components/ConsoleLogCard.js +49 -25
  7. package/dist/commonjs/components/ErrorBoundary.d.ts +1 -1
  8. package/dist/commonjs/components/ErrorBoundary.js +9 -145
  9. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.d.ts +7 -0
  10. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1002 -0
  11. package/dist/commonjs/components/Inspector/AnalyticsTab.js +637 -10
  12. package/dist/commonjs/components/Inspector/BundleTab.d.ts +1 -1
  13. package/dist/commonjs/components/Inspector/BundleTab.js +826 -406
  14. package/dist/commonjs/components/Inspector/CrashDetail.d.ts +3 -0
  15. package/dist/commonjs/components/Inspector/CrashDetail.js +796 -0
  16. package/dist/commonjs/components/Inspector/CrashFilterModal.d.ts +20 -0
  17. package/dist/commonjs/components/Inspector/CrashFilterModal.js +597 -0
  18. package/dist/commonjs/components/Inspector/CrashTab.d.ts +3 -0
  19. package/dist/commonjs/components/Inspector/CrashTab.js +727 -0
  20. package/dist/commonjs/components/Inspector/InspectorContext.js +6 -1
  21. package/dist/commonjs/components/Inspector/InspectorHeader.js +65 -28
  22. package/dist/commonjs/components/Inspector/LogDetail.js +227 -114
  23. package/dist/commonjs/components/Inspector/MainScreen.js +13 -4
  24. package/dist/commonjs/components/Inspector/NetworkDetail.js +131 -81
  25. package/dist/commonjs/components/Inspector/PerformanceTab.js +20 -10
  26. package/dist/commonjs/components/Inspector/SettingsPanel.js +90 -1
  27. package/dist/commonjs/components/Inspector/TabBar.js +15 -3
  28. package/dist/commonjs/components/NetworkIcons.d.ts +25 -0
  29. package/dist/commonjs/components/NetworkIcons.js +188 -1
  30. package/dist/commonjs/components/SegmentedTabs.js +33 -23
  31. package/dist/commonjs/components/TreeNode.js +13 -12
  32. package/dist/commonjs/constants/version.d.ts +1 -1
  33. package/dist/commonjs/constants/version.js +1 -1
  34. package/dist/commonjs/customHooks/analyticsLogger.js +70 -44
  35. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +5 -1
  36. package/dist/commonjs/customHooks/bundleAnalyzer.js +497 -126
  37. package/dist/commonjs/customHooks/consoleLogger.d.ts +1 -0
  38. package/dist/commonjs/customHooks/consoleLogger.js +153 -51
  39. package/dist/commonjs/customHooks/crashHandler.d.ts +64 -0
  40. package/dist/commonjs/customHooks/crashHandler.js +681 -0
  41. package/dist/commonjs/customHooks/networkLogger.js +74 -49
  42. package/dist/commonjs/customHooks/performanceTracker.d.ts +8 -0
  43. package/dist/commonjs/customHooks/performanceTracker.js +44 -3
  44. package/dist/commonjs/decorators/index.d.ts +49 -0
  45. package/dist/commonjs/decorators/index.js +142 -0
  46. package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +18 -0
  47. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +174 -0
  48. package/dist/commonjs/helpers/index.d.ts +7 -4
  49. package/dist/commonjs/helpers/index.js +102 -64
  50. package/dist/commonjs/i18n/locales/en.json +182 -4
  51. package/dist/commonjs/index.d.ts +6 -0
  52. package/dist/commonjs/index.js +310 -8
  53. package/dist/commonjs/styles/index.d.ts +4 -1
  54. package/dist/commonjs/styles/index.js +22 -19
  55. package/dist/commonjs/types/enums.d.ts +156 -9
  56. package/dist/commonjs/types/enums.js +139 -2
  57. package/dist/commonjs/types/interfaces.d.ts +70 -1
  58. package/dist/esm/components/AnalyticsEventCard.js +95 -89
  59. package/dist/esm/components/ConsoleLogCard.js +49 -25
  60. package/dist/esm/components/ErrorBoundary.d.ts +1 -1
  61. package/dist/esm/components/ErrorBoundary.js +10 -113
  62. package/dist/esm/components/Inspector/AnalyticsFilterModal.d.ts +7 -0
  63. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +964 -0
  64. package/dist/esm/components/Inspector/AnalyticsTab.js +639 -12
  65. package/dist/esm/components/Inspector/BundleTab.d.ts +1 -1
  66. package/dist/esm/components/Inspector/BundleTab.js +827 -407
  67. package/dist/esm/components/Inspector/CrashDetail.d.ts +3 -0
  68. package/dist/esm/components/Inspector/CrashDetail.js +758 -0
  69. package/dist/esm/components/Inspector/CrashFilterModal.d.ts +20 -0
  70. package/dist/esm/components/Inspector/CrashFilterModal.js +557 -0
  71. package/dist/esm/components/Inspector/CrashTab.d.ts +3 -0
  72. package/dist/esm/components/Inspector/CrashTab.js +689 -0
  73. package/dist/esm/components/Inspector/InspectorContext.js +1 -0
  74. package/dist/esm/components/Inspector/InspectorHeader.js +66 -29
  75. package/dist/esm/components/Inspector/LogDetail.js +227 -114
  76. package/dist/esm/components/Inspector/MainScreen.js +14 -5
  77. package/dist/esm/components/Inspector/NetworkDetail.js +132 -49
  78. package/dist/esm/components/Inspector/PerformanceTab.js +20 -10
  79. package/dist/esm/components/Inspector/SettingsPanel.js +91 -2
  80. package/dist/esm/components/Inspector/TabBar.js +16 -4
  81. package/dist/esm/components/NetworkIcons.d.ts +25 -0
  82. package/dist/esm/components/NetworkIcons.js +161 -0
  83. package/dist/esm/components/SegmentedTabs.js +33 -23
  84. package/dist/esm/components/TreeNode.js +13 -12
  85. package/dist/esm/constants/version.d.ts +1 -1
  86. package/dist/esm/constants/version.js +1 -1
  87. package/dist/esm/customHooks/analyticsLogger.js +70 -44
  88. package/dist/esm/customHooks/bundleAnalyzer.d.ts +5 -1
  89. package/dist/esm/customHooks/bundleAnalyzer.js +493 -125
  90. package/dist/esm/customHooks/consoleLogger.d.ts +1 -0
  91. package/dist/esm/customHooks/consoleLogger.js +151 -50
  92. package/dist/esm/customHooks/crashHandler.d.ts +64 -0
  93. package/dist/esm/customHooks/crashHandler.js +659 -0
  94. package/dist/esm/customHooks/networkLogger.js +74 -49
  95. package/dist/esm/customHooks/performanceTracker.d.ts +8 -0
  96. package/dist/esm/customHooks/performanceTracker.js +38 -1
  97. package/dist/esm/decorators/index.d.ts +49 -0
  98. package/dist/esm/decorators/index.js +137 -0
  99. package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +18 -0
  100. package/dist/esm/helpers/gaAnalyticsRegistry.js +169 -0
  101. package/dist/esm/helpers/index.d.ts +7 -4
  102. package/dist/esm/helpers/index.js +100 -63
  103. package/dist/esm/i18n/locales/en.json +182 -4
  104. package/dist/esm/index.d.ts +6 -0
  105. package/dist/esm/index.js +262 -8
  106. package/dist/esm/styles/index.d.ts +4 -1
  107. package/dist/esm/styles/index.js +22 -19
  108. package/dist/esm/types/enums.d.ts +156 -9
  109. package/dist/esm/types/enums.js +138 -3
  110. package/dist/esm/types/interfaces.d.ts +70 -1
  111. package/ios/NetworkInspectorModule.h +6 -0
  112. package/ios/NetworkInspectorModule.m +125 -0
  113. package/package.json +5 -2
  114. package/react-native-inapp-inspector.podspec +18 -0
@@ -373,6 +373,11 @@ export const TimelineIcon = ({ color = AppColors.purple, size = 14, }) => {
373
373
  <Path d="M12 7.5v4.5l3 2" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
374
374
  </Svg>);
375
375
  };
376
+ export const RefreshCcwIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
377
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
378
+ <Path d="M3 12a9 9 0 0 1 15-6.7L21 8M21 3v5h-5M21 12a9 9 0 0 1-15 6.7L3 16M3 21v-5h5" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
379
+ </Svg>);
380
+ };
376
381
  export const StorageIcon = ({ color = AppColors.purple, size = 14, }) => {
377
382
  return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
378
383
  <Ellipse cx="12" cy="6" rx="8" ry="2.8" stroke={color} strokeWidth="1.8"/>
@@ -481,3 +486,159 @@ export const MoneyIcon = ({ color = AppColors.emerald500, size = 14 }) => {
481
486
  <Path d="M12 7v10M14.5 9.5c-.6-1-1.5-1.5-2.5-1.5-1.5 0-2.5.9-2.5 2s1 1.8 2.5 2 2.5.8 2.5 2-1 2-2.5 2c-1 0-1.9-.5-2.5-1.5" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
482
487
  </Svg>);
483
488
  };
489
+ export const ExternalLinkIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
490
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
491
+ <Path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
492
+ <Path d="M15 3h6v6M10 14L21 3" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
493
+ </Svg>);
494
+ };
495
+ export const PackageBoxIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
496
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
497
+ <Path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
498
+ <Path d="M3.27 6.96L12 12.01l8.73-5.05M12 22.08V12" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
499
+ </Svg>);
500
+ };
501
+ export const GitHubIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
502
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
503
+ <Path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
504
+ </Svg>);
505
+ };
506
+ export const LinkChainIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
507
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
508
+ <Path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
509
+ <Path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
510
+ </Svg>);
511
+ };
512
+ export const AppleIcon = ({ color = AppColors.white, size = 12, }) => {
513
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill={color}>
514
+ <Path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M15.97 6.37c.61-.75 1.04-1.8 0.92-2.87-.9.04-1.99.6-2.63 1.35-.56.65-1.06 1.71-.93 2.74 1.01.08 2.03-.47 2.64-1.22z"/>
515
+ </Svg>);
516
+ };
517
+ export const AndroidIcon = ({ color = AppColors.white, size = 12, }) => {
518
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill={color}>
519
+ <Path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v10zM3.5 8C2.67 8 2 8.67 2 9.5v6c0 .83.67 1.5 1.5 1.5S5 16.33 5 15.5v-6C5 8.67 4.33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v6c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-6c0-.83-.67-1.5-1.5-1.5zm-4.97-4.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l-1.48 1.48C13.85 2.23 12.95 2 12 2c-.96 0-1.86.23-2.66.63L7.85 1.15c-.2-.2-.51-.2-.71 0-.2.2-.2.51 0 .71l1.31 1.31C6.73 4.26 5.54 6 5.16 8h13.68c-.38-2-1.57-3.74-3.31-4.84zM9 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"/>
520
+ </Svg>);
521
+ };
522
+ export const CodeBracketsIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
523
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
524
+ <Path d="M16 18l6-6-6-6M8 6l-6 6 6 6" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
525
+ </Svg>);
526
+ };
527
+ export const FlameIcon = ({ color = AppColors.darkOrange, size = 14, }) => {
528
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
529
+ <Path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 3z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
530
+ </Svg>);
531
+ };
532
+ export const HourglassIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
533
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
534
+ <Path d="M5 22h14M5 2h14M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
535
+ </Svg>);
536
+ };
537
+ export const PinIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
538
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
539
+ <Path d="M12 21s-6-5.333-6-10a6 6 0 0 1 12 0c0 4.667-6 10-6 10z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
540
+ <Circle cx="12" cy="11" r="2" fill={color}/>
541
+ </Svg>);
542
+ };
543
+ export const RepeatIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
544
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
545
+ <Path d="M17 2l4 4-4 4M3 11v-1a4 4 0 0 1 4-4h14M7 22l-4-4 4-4M21 13v1a4 4 0 0 1-4 4H3" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
546
+ </Svg>);
547
+ };
548
+ export const TargetGoalIcon = ({ color = AppColors.brandPurple, size = 14, }) => {
549
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
550
+ <Circle cx="12" cy="12" r="10" stroke={color} strokeWidth="1.8"/>
551
+ <Circle cx="12" cy="12" r="6" stroke={color} strokeWidth="1.8"/>
552
+ <Circle cx="12" cy="12" r="2" fill={color}/>
553
+ </Svg>);
554
+ };
555
+ export const UserCheckIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
556
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
557
+ <Path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
558
+ <Circle cx="9" cy="7" r="4" stroke={color} strokeWidth="1.8"/>
559
+ <Path d="M16 11l2 2 4-4" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
560
+ </Svg>);
561
+ };
562
+ export const CrashIcon = ({ color = AppColors.errorColor, size = 14, }) => {
563
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
564
+ {/* Bug / Crash Hybrid Icon */}
565
+ <Path d="M12 2v3M4.93 4.93l2.12 2.12M19.07 4.93l-2.12 2.12M9 10h6M8 14h8M9 18h6" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
566
+ <Path d="M12 8a6 6 0 0 1 6 6v3a6 6 0 0 1-12 0v-3a6 6 0 0 1 6-6z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
567
+ <Path d="M3 13h3M18 13h3M4 19l2.5-1.5M20 19l-2.5-1.5M4 9l2.5 1.5M20 9l-2.5 1.5" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
568
+ </Svg>);
569
+ };
570
+ export const ShieldAlertIcon = ({ color = AppColors.errorColor, size = 14, }) => {
571
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
572
+ <Path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
573
+ <Line x1="12" y1="8" x2="12" y2="12" stroke={color} strokeWidth="2" strokeLinecap="round"/>
574
+ <Circle cx="12" cy="16" r="1" fill={color}/>
575
+ </Svg>);
576
+ };
577
+ export const SkullIcon = ({ color = AppColors.errorColor, size = 14, }) => {
578
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
579
+ <Circle cx="12" cy="12" r="9" stroke={color} strokeWidth="1.8"/>
580
+ <Circle cx="9" cy="11" r="1.6" fill={color}/>
581
+ <Circle cx="15" cy="11" r="1.6" fill={color}/>
582
+ <Path d="M8 16c1.2 1 3.2 1.2 4 1.2.8 0 2.8-.2 4-1.2" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
583
+ <Line x1="12" y1="16" x2="12" y2="18" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
584
+ </Svg>);
585
+ };
586
+ export const ChipIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
587
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
588
+ <Rect x="7" y="7" width="10" height="10" rx="2" stroke={color} strokeWidth="1.8"/>
589
+ <Rect x="10" y="10" width="4" height="4" fill={color}/>
590
+ <Line x1="9" y1="3" x2="9" y2="7" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
591
+ <Line x1="15" y1="3" x2="15" y2="7" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
592
+ <Line x1="9" y1="17" x2="9" y2="21" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
593
+ <Line x1="15" y1="17" x2="15" y2="21" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
594
+ <Line x1="3" y1="9" x2="7" y2="9" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
595
+ <Line x1="3" y1="15" x2="7" y2="15" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
596
+ <Line x1="17" y1="9" x2="21" y2="9" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
597
+ <Line x1="17" y1="15" x2="21" y2="15" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
598
+ </Svg>);
599
+ };
600
+ export const LayoutIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
601
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
602
+ <Rect x="3" y="3" width="18" height="18" rx="2" stroke={color} strokeWidth="1.8"/>
603
+ <Line x1="3" y1="9" x2="21" y2="9" stroke={color} strokeWidth="1.8"/>
604
+ <Line x1="9" y1="9" x2="9" y2="21" stroke={color} strokeWidth="1.8"/>
605
+ <Rect x="12" y="12" width="6" height="6" fill={color}/>
606
+ </Svg>);
607
+ };
608
+ export const StackTraceIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
609
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
610
+ <Path d="M4 6h16M4 10h11M4 14h16M4 18h9" stroke={color} strokeWidth="2" strokeLinecap="round"/>
611
+ <Path d="M7.5 12.5 4 14l3.5 1.5" stroke={color} strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round"/>
612
+ </Svg>);
613
+ };
614
+ export const DiagnosticsIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
615
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
616
+ <Path d="M3 12h3l2-5 3 9 2-6 1.5 2H21" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
617
+ <Line x1="4" y1="19" x2="20" y2="19" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
618
+ </Svg>);
619
+ };
620
+ export const TrailIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
621
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
622
+ <Circle cx="5" cy="18" r="2" fill={color}/>
623
+ <Circle cx="12" cy="12" r="2" fill={color}/>
624
+ <Circle cx="19" cy="6" r="2" fill={color}/>
625
+ <Path d="M6.5 16.5 10.5 13.5M13.5 10.5 17.5 7.5" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
626
+ </Svg>);
627
+ };
628
+ export const RawJsonIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
629
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
630
+ <Path d="M8 3c-2 1-3 2.5-3 5 0 2-1 3.5-2 4 1 .5 2 2 2 4 0 2.5 1 4 3 5M16 3c2 1 3 2.5 3 5 0 2 1 3.5 2 4-1 .5-2 2-2 4 0 2.5-1 4-3 5" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
631
+ </Svg>);
632
+ };
633
+ export const AppFramesIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
634
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
635
+ <Path d="M4 6h16M4 10h11M4 14h16M4 18h9" stroke={color} strokeWidth="2" strokeLinecap="round"/>
636
+ <Path d="M18 12.5l2 2 3-3.5" stroke="#059669" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
637
+ </Svg>);
638
+ };
639
+ export const AllFramesIcon = ({ color = AppColors.grayTextWeak, size = 14, }) => {
640
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
641
+ <Path d="M4 4h16M4 8h16M4 12h16M4 16h16M4 20h10" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
642
+ <Rect x="16" y="16" width="4" height="4" rx="1" fill={color}/>
643
+ </Svg>);
644
+ };
@@ -5,39 +5,49 @@ import { AppFonts } from '../styles/AppFonts';
5
5
  const SegmentedTabs = React.memo(({ tabs, activeKey, onChange, style }) => (<View style={[
6
6
  {
7
7
  flexDirection: 'row',
8
- borderRadius: 8,
9
- overflow: 'hidden',
8
+ borderRadius: 10,
9
+ backgroundColor: `${AppColors.slate200}80`,
10
+ padding: 3,
10
11
  borderWidth: 1,
11
12
  borderColor: AppColors.dividerColor,
12
- backgroundColor: AppColors.primaryLight,
13
+ gap: 3,
13
14
  },
14
15
  style,
15
16
  ]}>
16
- {tabs.map((tab, index) => {
17
+ {tabs.map((tab) => {
17
18
  const isActive = activeKey === tab.key;
18
- return (<Pressable key={tab.key} onPress={() => onChange(tab.key)} style={{
19
- flex: 1,
20
- paddingVertical: 8,
21
- paddingHorizontal: 8,
22
- backgroundColor: isActive
23
- ? AppColors.brandPurple
24
- : AppColors.primaryLight,
25
- borderRightWidth: index < tabs.length - 1 ? 1 : 0,
26
- borderRightColor: AppColors.dividerColor,
27
- alignItems: 'center',
28
- justifyContent: 'center',
29
- gap: 4,
30
- flexDirection: 'row',
31
- }}>
19
+ return (<Pressable key={tab.key} onPress={() => onChange(tab.key)} style={({ pressed }) => [
20
+ {
21
+ flex: 1,
22
+ paddingVertical: 7,
23
+ paddingHorizontal: 6,
24
+ borderRadius: 7,
25
+ backgroundColor: isActive
26
+ ? AppColors.brandPurple
27
+ : 'transparent',
28
+ alignItems: 'center',
29
+ justifyContent: 'center',
30
+ gap: 4.5,
31
+ flexDirection: 'row',
32
+ opacity: pressed ? 0.8 : 1,
33
+ },
34
+ isActive && {
35
+ shadowColor: AppColors.brandPurple,
36
+ shadowOffset: { width: 0, height: 1 },
37
+ shadowOpacity: 0.25,
38
+ shadowRadius: 3,
39
+ elevation: 2,
40
+ },
41
+ ]}>
32
42
  {tab.icon ? tab.icon(isActive) : null}
33
- <Text style={{
43
+ <Text numberOfLines={1} ellipsizeMode="tail" style={{
44
+ flexShrink: 1,
34
45
  fontFamily: AppFonts.interBold,
35
- fontSize: 10,
46
+ fontSize: 10.5,
36
47
  color: isActive
37
48
  ? AppColors.white
38
- : AppColors.grayTextWeak,
39
- textTransform: 'capitalize',
40
- letterSpacing: 0.3,
49
+ : AppColors.grayText,
50
+ letterSpacing: 0.2,
41
51
  }}>
42
52
  {tab.label}
43
53
  </Text>
@@ -12,6 +12,19 @@ const TreeNode = React.memo(function TreeNode({ data, name, level = 0, search, f
12
12
  const open = localOpen;
13
13
  const isObject = typeof data === 'object' && data !== null;
14
14
  const isArray = Array.isArray(data);
15
+ // Declare all hooks at the top unconditionally (prevents "Rendered fewer hooks than expected" error)
16
+ const treeChevronAnim = useRef(new Animated.Value(open ? 1 : 0)).current;
17
+ useEffect(() => {
18
+ Animated.timing(treeChevronAnim, {
19
+ toValue: open ? 1 : 0,
20
+ duration: 160,
21
+ useNativeDriver: true,
22
+ }).start();
23
+ }, [open]);
24
+ const treeChevronRotate = treeChevronAnim.interpolate({
25
+ inputRange: [0, 1],
26
+ outputRange: ['0deg', '180deg'],
27
+ });
15
28
  function renderHighlighted(text) {
16
29
  if (text === 'null' || text === 'undefined') {
17
30
  return [
@@ -68,18 +81,6 @@ const TreeNode = React.memo(function TreeNode({ data, name, level = 0, search, f
68
81
  ? data.map((v, i) => [i, v])
69
82
  : Object.entries(data);
70
83
  const countLabel = isArray ? `[${entries.length}]` : `{${entries.length}}`;
71
- const treeChevronAnim = useRef(new Animated.Value(open ? 1 : 0)).current;
72
- useEffect(() => {
73
- Animated.timing(treeChevronAnim, {
74
- toValue: open ? 1 : 0,
75
- duration: 160,
76
- useNativeDriver: true,
77
- }).start();
78
- }, [open]);
79
- const treeChevronRotate = treeChevronAnim.interpolate({
80
- inputRange: [0, 1],
81
- outputRange: ['0deg', '180deg'],
82
- });
83
84
  return (<View style={indentStyle}>
84
85
  <Pressable style={styles.treeRow} onPress={() => setLocalOpen(v => !v)} hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}>
85
86
  <Animated.View style={{ transform: [{ rotate: treeChevronRotate }], marginRight: 6 }}>
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "1.1.24";
1
+ export declare const LIB_VERSION = "1.1.26";
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED FILE — do not edit by hand.
2
2
  // Regenerated from package.json on every build by scripts/gen-version.js.
3
- export const LIB_VERSION = '1.1.24';
3
+ export const LIB_VERSION = '1.1.26';
@@ -98,70 +98,90 @@ export const setupAnalyticsLogger = (analyticsInstance) => {
98
98
  // ── logEvent ──────────────────────────────────────────────────────────────
99
99
  const originalLogEvent = analyticsInstance.logEvent.bind(analyticsInstance);
100
100
  analyticsInstance.logEvent = async (name, params) => {
101
- addEvent({
102
- id: counter++,
103
- name,
104
- params: params ?? {},
105
- userProperties: { ...currentUserProperties },
106
- timestamp: Date.now(),
107
- source: 'firebase',
108
- userId: currentUserId ?? '',
109
- screenName: '',
110
- screenClass: '',
111
- });
101
+ try {
102
+ addEvent({
103
+ id: counter++,
104
+ name,
105
+ params: params ?? {},
106
+ userProperties: { ...currentUserProperties },
107
+ timestamp: Date.now(),
108
+ source: 'firebase',
109
+ userId: currentUserId ?? '',
110
+ screenName: '',
111
+ screenClass: '',
112
+ });
113
+ }
114
+ catch { }
112
115
  return originalLogEvent(name, params);
113
116
  };
114
117
  // ── logScreenView ─────────────────────────────────────────────────────────
115
118
  const originalLogScreenView = analyticsInstance.logScreenView.bind(analyticsInstance);
116
119
  analyticsInstance.logScreenView = async (params) => {
117
- addEvent({
118
- id: counter++,
119
- name: 'screen_view',
120
- params: params ?? {},
121
- userProperties: { ...currentUserProperties },
122
- timestamp: Date.now(),
123
- source: 'firebase',
124
- screenName: params?.screen_name ?? '',
125
- screenClass: params?.screen_class ?? '',
126
- userId: currentUserId ?? '',
127
- });
120
+ try {
121
+ addEvent({
122
+ id: counter++,
123
+ name: 'screen_view',
124
+ params: params ?? {},
125
+ userProperties: { ...currentUserProperties },
126
+ timestamp: Date.now(),
127
+ source: 'firebase',
128
+ screenName: params?.screen_name ?? '',
129
+ screenClass: params?.screen_class ?? '',
130
+ userId: currentUserId ?? '',
131
+ });
132
+ }
133
+ catch { }
128
134
  return originalLogScreenView(params);
129
135
  };
130
136
  // ── setUserProperty ───────────────────────────────────────────────────────
131
137
  const originalSetUserProperty = analyticsInstance.setUserProperty.bind(analyticsInstance);
132
138
  analyticsInstance.setUserProperty = async (name, value) => {
133
- if (value === null) {
134
- delete currentUserProperties[name];
135
- }
136
- else {
137
- currentUserProperties[name] = value;
139
+ try {
140
+ if (value === null) {
141
+ delete currentUserProperties[name];
142
+ }
143
+ else {
144
+ currentUserProperties[name] = value;
145
+ }
138
146
  }
147
+ catch { }
139
148
  return originalSetUserProperty(name, value);
140
149
  };
141
150
  // ── setUserProperties ─────────────────────────────────────────────────────
142
151
  const originalSetUserProperties = analyticsInstance.setUserProperties.bind(analyticsInstance);
143
152
  analyticsInstance.setUserProperties = async (properties) => {
144
- Object.entries(properties).forEach(([k, v]) => {
145
- if (v === null)
146
- delete currentUserProperties[k];
147
- else
148
- currentUserProperties[k] = v;
149
- });
153
+ try {
154
+ if (properties && typeof properties === 'object') {
155
+ Object.entries(properties).forEach(([k, v]) => {
156
+ if (v === null)
157
+ delete currentUserProperties[k];
158
+ else
159
+ currentUserProperties[k] = v;
160
+ });
161
+ }
162
+ }
163
+ catch { }
150
164
  return originalSetUserProperties(properties);
151
165
  };
152
166
  // ── setUserId ─────────────────────────────────────────────────────────────
153
167
  const originalSetUserId = analyticsInstance.setUserId.bind(analyticsInstance);
154
168
  analyticsInstance.setUserId = async (id) => {
155
- currentUserId = id ?? undefined;
156
- notify();
169
+ try {
170
+ currentUserId = id ?? undefined;
171
+ notify();
172
+ }
173
+ catch { }
157
174
  return originalSetUserId(id);
158
175
  };
159
176
  // ── setDefaultEventParameters ──────────────────────────────────────────────
160
177
  if (typeof analyticsInstance.setDefaultEventParameters === 'function') {
161
178
  const originalSetDefaultEventParameters = analyticsInstance.setDefaultEventParameters.bind(analyticsInstance);
162
179
  analyticsInstance.setDefaultEventParameters = async (params) => {
163
- currentDefaultEventParameters = params ?? {};
164
- notify();
180
+ try {
181
+ currentDefaultEventParameters = params ?? {};
182
+ notify();
183
+ }
184
+ catch { }
165
185
  return originalSetDefaultEventParameters(params);
166
186
  };
167
187
  }
@@ -169,8 +189,11 @@ export const setupAnalyticsLogger = (analyticsInstance) => {
169
189
  if (typeof analyticsInstance.setAnalyticsCollectionEnabled === 'function') {
170
190
  const originalSetAnalyticsCollectionEnabled = analyticsInstance.setAnalyticsCollectionEnabled.bind(analyticsInstance);
171
191
  analyticsInstance.setAnalyticsCollectionEnabled = async (enabled) => {
172
- isCollectionEnabled = enabled;
173
- notify();
192
+ try {
193
+ isCollectionEnabled = enabled;
194
+ notify();
195
+ }
196
+ catch { }
174
197
  return originalSetAnalyticsCollectionEnabled(enabled);
175
198
  };
176
199
  }
@@ -178,11 +201,14 @@ export const setupAnalyticsLogger = (analyticsInstance) => {
178
201
  if (typeof analyticsInstance.resetAnalyticsData === 'function') {
179
202
  const originalResetAnalyticsData = analyticsInstance.resetAnalyticsData.bind(analyticsInstance);
180
203
  analyticsInstance.resetAnalyticsData = async () => {
181
- clearAnalyticsEvents();
182
- currentUserProperties = {};
183
- currentUserId = undefined;
184
- currentDefaultEventParameters = {};
185
- notify();
204
+ try {
205
+ clearAnalyticsEvents();
206
+ currentUserProperties = {};
207
+ currentUserId = undefined;
208
+ currentDefaultEventParameters = {};
209
+ notify();
210
+ }
211
+ catch { }
186
212
  return originalResetAnalyticsData();
187
213
  };
188
214
  }
@@ -104,12 +104,16 @@ export interface HostBundleAnalysisResult {
104
104
  };
105
105
  }
106
106
  export declare const getHostScriptURL: () => string;
107
+ export declare const trackRuntimeModuleExecution: () => void;
108
+ export declare const trackRuntimeDefine: () => void;
107
109
  /**
108
110
  * Parses raw Metro bundle source code to discover real modules and packages in the host app.
109
111
  */
110
112
  export declare const parseBundleSource: (bundleText: string, totalBytes: number, scriptURL: string, isLive?: boolean) => HostBundleAnalysisResult;
111
113
  /**
112
114
  * Automatically fetch and analyze the real running bundle for the host app.
115
+ * Supports dynamic port detection (8081, 8082, 8083, etc.) and parallel dev server probing.
113
116
  */
114
- export declare const analyzeHostAppBundle: () => Promise<HostBundleAnalysisResult>;
117
+ export declare const analyzeHostAppBundle: (forceRefresh?: boolean) => Promise<HostBundleAnalysisResult>;
118
+ export declare const clearCachedBundleAnalysis: () => void;
115
119
  export declare const getCachedBundleAnalysis: () => HostBundleAnalysisResult | null;