react-native-inapp-inspector 2.3.18 → 2.3.19

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 (79) hide show
  1. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +47 -0
  2. package/dist/commonjs/capture.d.ts +2 -0
  3. package/dist/commonjs/capture.js +3 -0
  4. package/dist/commonjs/components/EmptyState.d.ts +1 -0
  5. package/dist/commonjs/components/EmptyState.js +2 -2
  6. package/dist/commonjs/components/Inspector/FabLauncher.js +494 -39
  7. package/dist/commonjs/components/Inspector/InspectorHeader.js +45 -26
  8. package/dist/commonjs/components/Inspector/MainScreen.js +4 -3
  9. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +418 -13
  10. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +376 -88
  11. package/dist/commonjs/components/Inspector/NetworkDetail.js +49 -63
  12. package/dist/commonjs/components/Inspector/SettingsPanel.js +499 -119
  13. package/dist/commonjs/components/Inspector/TabBar.js +166 -4
  14. package/dist/commonjs/components/JsonViewer.js +4 -3
  15. package/dist/commonjs/components/NetworkIcons.d.ts +4 -0
  16. package/dist/commonjs/components/NetworkIcons.js +26 -1
  17. package/dist/commonjs/components/SegmentedTabs.js +1 -0
  18. package/dist/commonjs/constants/version.d.ts +1 -1
  19. package/dist/commonjs/constants/version.js +1 -1
  20. package/dist/commonjs/i18n/locales/en.json +20 -2
  21. package/dist/commonjs/index.js +45 -30
  22. package/dist/commonjs/native/NativeInspector.d.ts +3 -0
  23. package/dist/commonjs/native/NativeInspector.js +14 -1
  24. package/dist/commonjs/native/NativeNetworkInspector.d.ts +1 -0
  25. package/dist/commonjs/styles/AppColors.js +78 -78
  26. package/dist/commonjs/types/enums.d.ts +2 -0
  27. package/dist/commonjs/types/enums.js +2 -0
  28. package/dist/commonjs/types/interfaces.d.ts +5 -0
  29. package/dist/esm/capture.d.ts +2 -0
  30. package/dist/esm/capture.js +4 -1
  31. package/dist/esm/components/EmptyState.d.ts +1 -0
  32. package/dist/esm/components/EmptyState.js +2 -2
  33. package/dist/esm/components/Inspector/FabLauncher.js +462 -40
  34. package/dist/esm/components/Inspector/InspectorHeader.js +46 -27
  35. package/dist/esm/components/Inspector/MainScreen.js +4 -3
  36. package/dist/esm/components/Inspector/MediaGalleryTab.js +419 -14
  37. package/dist/esm/components/Inspector/MediaPreviewModal.js +379 -91
  38. package/dist/esm/components/Inspector/NetworkDetail.js +49 -63
  39. package/dist/esm/components/Inspector/SettingsPanel.js +500 -120
  40. package/dist/esm/components/Inspector/TabBar.js +135 -6
  41. package/dist/esm/components/JsonViewer.js +4 -3
  42. package/dist/esm/components/NetworkIcons.d.ts +4 -0
  43. package/dist/esm/components/NetworkIcons.js +21 -0
  44. package/dist/esm/components/SegmentedTabs.js +1 -0
  45. package/dist/esm/constants/version.d.ts +1 -1
  46. package/dist/esm/constants/version.js +1 -1
  47. package/dist/esm/i18n/locales/en.json +20 -2
  48. package/dist/esm/index.js +44 -29
  49. package/dist/esm/native/NativeInspector.d.ts +3 -0
  50. package/dist/esm/native/NativeInspector.js +12 -0
  51. package/dist/esm/native/NativeNetworkInspector.d.ts +1 -0
  52. package/dist/esm/styles/AppColors.js +78 -78
  53. package/dist/esm/types/enums.d.ts +2 -0
  54. package/dist/esm/types/enums.js +2 -0
  55. package/dist/esm/types/interfaces.d.ts +5 -0
  56. package/ios/NetworkInspectorModule.mm +241 -136
  57. package/package.json +1 -1
  58. package/react-native-inapp-inspector.podspec +1 -1
  59. package/src/capture.ts +8 -0
  60. package/src/components/EmptyState.tsx +3 -1
  61. package/src/components/Inspector/FabLauncher.tsx +562 -52
  62. package/src/components/Inspector/InspectorHeader.tsx +60 -22
  63. package/src/components/Inspector/MainScreen.tsx +3 -2
  64. package/src/components/Inspector/MediaGalleryTab.tsx +502 -28
  65. package/src/components/Inspector/MediaPreviewModal.tsx +465 -117
  66. package/src/components/Inspector/NetworkDetail.tsx +80 -97
  67. package/src/components/Inspector/SettingsPanel.tsx +708 -152
  68. package/src/components/Inspector/TabBar.tsx +174 -6
  69. package/src/components/JsonViewer.tsx +4 -2
  70. package/src/components/NetworkIcons.tsx +56 -0
  71. package/src/components/SegmentedTabs.tsx +1 -0
  72. package/src/constants/version.ts +1 -1
  73. package/src/i18n/locales/en.json +20 -4
  74. package/src/index.tsx +46 -31
  75. package/src/native/NativeInspector.ts +17 -0
  76. package/src/native/NativeNetworkInspector.ts +1 -0
  77. package/src/styles/AppColors.ts +80 -80
  78. package/src/types/enums.ts +2 -0
  79. package/src/types/interfaces.ts +5 -0
@@ -65,6 +65,7 @@ import {
65
65
  InfoCircleIcon,
66
66
  CopyIcon,
67
67
  FilmIcon,
68
+ ScreencastIcon,
68
69
  CameraIcon,
69
70
  VideoCameraIcon,
70
71
  MicrophoneIcon,
@@ -237,6 +238,14 @@ const SettingsPanel = () => {
237
238
  icon: 'debugging',
238
239
  desc: 'QR Code bridge for direct Debug APK download & Metro live-reload sync',
239
240
  },
241
+ {
242
+ id: 11,
243
+ key: 'media',
244
+ label: 'Screencast',
245
+ category: 'diagnostic',
246
+ icon: 'media',
247
+ desc: 'Screenshots, video recordings, audio narration & animated GIFs',
248
+ },
240
249
  ] as const
241
250
  ).filter(m =>
242
251
  m.key === 'debugging'
@@ -260,6 +269,7 @@ const SettingsPanel = () => {
260
269
  bundle: Boolean(tabVisibility?.bundle),
261
270
  performance: Boolean(tabVisibility?.performance),
262
271
  debugging: Boolean(tabVisibility?.debugging),
272
+ media: Boolean(tabVisibility?.media ?? true),
263
273
  }));
264
274
 
265
275
  // Synchronize staged state with tabVisibility when tabVisibility updates
@@ -275,10 +285,10 @@ const SettingsPanel = () => {
275
285
  bundle: Boolean(tabVisibility?.bundle),
276
286
  performance: Boolean(tabVisibility?.performance),
277
287
  debugging: Boolean(tabVisibility?.debugging),
288
+ media: Boolean(tabVisibility?.media ?? true),
278
289
  });
279
290
  }, [tabVisibility]);
280
291
 
281
-
282
292
  const hasUnsavedChanges = useMemo(() => {
283
293
  return allModules.some(
284
294
  m =>
@@ -314,8 +324,8 @@ const SettingsPanel = () => {
314
324
  bundle: Boolean(tabVisibility?.bundle),
315
325
  performance: Boolean(tabVisibility?.performance),
316
326
  debugging: Boolean(tabVisibility?.debugging),
327
+ media: Boolean(tabVisibility?.media ?? true),
317
328
  });
318
-
319
329
  },
320
330
  },
321
331
  {
@@ -325,8 +335,12 @@ const SettingsPanel = () => {
325
335
  animateNextLayout();
326
336
  allModules.forEach(m => {
327
337
  if (m.key !== 'apis') {
328
- const isStagedOn = Boolean(stagedTabVisibility[m.key as ActiveTab]);
329
- const isCurrentOn = Boolean(tabVisibility?.[m.key as ActiveTab]);
338
+ const isStagedOn = Boolean(
339
+ stagedTabVisibility[m.key as ActiveTab],
340
+ );
341
+ const isCurrentOn = Boolean(
342
+ tabVisibility?.[m.key as ActiveTab],
343
+ );
330
344
  if (isStagedOn !== isCurrentOn) {
331
345
  toggleTabVisibility(m.key as ActiveTab);
332
346
  }
@@ -577,7 +591,13 @@ const SettingsPanel = () => {
577
591
  key: 'module' as const,
578
592
  label: t('settings.modulesAndTools', 'Modules & Tools'),
579
593
  Icon: LayersIcon,
580
- badge: `${allModules.filter(m => stagedTabVisibility?.[m.key as ActiveTab] || m.key === 'apis').length}/${allModules.length}`,
594
+ badge: `${
595
+ allModules.filter(
596
+ m =>
597
+ stagedTabVisibility?.[m.key as ActiveTab] ||
598
+ m.key === 'apis',
599
+ ).length
600
+ }/${allModules.length}`,
581
601
  },
582
602
  {
583
603
  key: 'ui' as const,
@@ -591,7 +611,10 @@ const SettingsPanel = () => {
591
611
  },
592
612
  {
593
613
  key: 'capture' as const,
594
- label: t('settings.screenVideoCapture', 'Screen & Video Capture'),
614
+ label: t(
615
+ 'settings.screenVideoCapture',
616
+ 'Screen & Video Capture',
617
+ ),
595
618
  Icon: CameraIcon,
596
619
  },
597
620
  {
@@ -634,9 +657,7 @@ const SettingsPanel = () => {
634
657
  fontFamily: AppFonts.interBold,
635
658
  fontSize: 12.5,
636
659
  lineHeight: 16,
637
- color: isActive
638
- ? AppColors.white
639
- : AppColors.grayText,
660
+ color: isActive ? AppColors.white : AppColors.grayText,
640
661
  }}>
641
662
  {tab.label}
642
663
  </Text>
@@ -654,9 +675,7 @@ const SettingsPanel = () => {
654
675
  style={{
655
676
  fontFamily: AppFonts.interBold,
656
677
  fontSize: 9.5,
657
- color: isActive
658
- ? AppColors.white
659
- : AppColors.purple,
678
+ color: isActive ? AppColors.white : AppColors.purple,
660
679
  }}>
661
680
  {tab.badge}
662
681
  </Text>
@@ -935,6 +954,16 @@ const SettingsPanel = () => {
935
954
  size={16}
936
955
  />
937
956
  )}
957
+ {moduleItem.icon === 'media' && (
958
+ <ScreencastIcon
959
+ color={
960
+ isChecked
961
+ ? AppColors.purple
962
+ : AppColors.grayTextWeak
963
+ }
964
+ size={16}
965
+ />
966
+ )}
938
967
  </View>
939
968
 
940
969
  {/* Titles & Status Pill */}
@@ -1642,7 +1671,9 @@ const SettingsPanel = () => {
1642
1671
  color: AppColors.primaryBlack,
1643
1672
  }}>
1644
1673
  {allModules.find(m => m.key === defaultTab)
1645
- ? `#${allModules.find(m => m.key === defaultTab)?.id} ${allModules.find(m => m.key === defaultTab)?.label}`
1674
+ ? `#${allModules.find(m => m.key === defaultTab)?.id} ${
1675
+ allModules.find(m => m.key === defaultTab)?.label
1676
+ }`
1646
1677
  : '#1 APIs (Network)'}
1647
1678
  </Text>
1648
1679
  <View
@@ -1933,7 +1964,8 @@ const SettingsPanel = () => {
1933
1964
  color: AppColors.grayText,
1934
1965
  marginTop: 1,
1935
1966
  }}>
1936
- Dynamically sets log limits according to available device memory
1967
+ Dynamically sets log limits according to available device
1968
+ memory
1937
1969
  </Text>
1938
1970
  </View>
1939
1971
  </View>
@@ -2096,7 +2128,12 @@ const SettingsPanel = () => {
2096
2128
  </View>
2097
2129
 
2098
2130
  <View
2099
- style={{flexDirection: 'row', flexWrap: 'wrap', gap: 8, marginTop: 4}}>
2131
+ style={{
2132
+ flexDirection: 'row',
2133
+ flexWrap: 'wrap',
2134
+ gap: 8,
2135
+ marginTop: 4,
2136
+ }}>
2100
2137
  {[
2101
2138
  {
2102
2139
  label: 'APIs',
@@ -2217,7 +2254,8 @@ const SettingsPanel = () => {
2217
2254
  color: AppColors.grayText,
2218
2255
  marginTop: 1,
2219
2256
  }}>
2220
- Automatically prunes in-memory buffers by 50% when the OS signals low memory
2257
+ Automatically prunes in-memory buffers by 50% when the OS
2258
+ signals low memory
2221
2259
  </Text>
2222
2260
  </View>
2223
2261
  <View
@@ -2311,7 +2349,8 @@ const SettingsPanel = () => {
2311
2349
  borderColor: AppColors.grayBorderSecondary,
2312
2350
  gap: 12,
2313
2351
  }}>
2314
- <View style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
2352
+ <View
2353
+ style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
2315
2354
  <View
2316
2355
  style={{
2317
2356
  width: 36,
@@ -2331,7 +2370,10 @@ const SettingsPanel = () => {
2331
2370
  lineHeight: 18,
2332
2371
  color: AppColors.primaryBlack,
2333
2372
  }}>
2334
- {t('settings.media.screenshotCardTitle', 'Screenshot Capture Settings')}
2373
+ {t(
2374
+ 'settings.media.screenshotCardTitle',
2375
+ 'Screenshot Capture Settings',
2376
+ )}
2335
2377
  </Text>
2336
2378
  <Text
2337
2379
  style={{
@@ -2341,7 +2383,10 @@ const SettingsPanel = () => {
2341
2383
  color: AppColors.grayText,
2342
2384
  marginTop: 1,
2343
2385
  }}>
2344
- {t('settings.media.screenshotCardDesc', 'Image encoding format, compression quality and overlay auto-hide')}
2386
+ {t(
2387
+ 'settings.media.screenshotCardDesc',
2388
+ 'Image encoding format, compression quality and overlay auto-hide',
2389
+ )}
2345
2390
  </Text>
2346
2391
  </View>
2347
2392
  </View>
@@ -2349,7 +2394,10 @@ const SettingsPanel = () => {
2349
2394
  {renderSettingRow({
2350
2395
  icon: <ImageIcon color={AppColors.purple} size={16} />,
2351
2396
  label: t('settings.media.imageFormat', 'Image Format'),
2352
- description: t('settings.media.imageFormatDesc', 'Export formats (PNG lossless, JPEG lossy, WebP)'),
2397
+ description: t(
2398
+ 'settings.media.imageFormatDesc',
2399
+ 'Export formats (PNG lossless, JPEG lossy, WebP)',
2400
+ ),
2353
2401
  right: (
2354
2402
  <View style={{flexDirection: 'row', gap: 4}}>
2355
2403
  {['PNG', 'JPEG', 'WEBP'].map(fmt => (
@@ -2359,13 +2407,19 @@ const SettingsPanel = () => {
2359
2407
  paddingHorizontal: 8,
2360
2408
  paddingVertical: 4,
2361
2409
  borderRadius: 6,
2362
- backgroundColor: fmt === 'PNG' ? AppColors.purple : `${AppColors.purple}1A`,
2410
+ backgroundColor:
2411
+ fmt === 'PNG'
2412
+ ? AppColors.purple
2413
+ : `${AppColors.purple}1A`,
2363
2414
  }}>
2364
2415
  <Text
2365
2416
  style={{
2366
2417
  fontFamily: AppFonts.interBold,
2367
2418
  fontSize: 10,
2368
- color: fmt === 'PNG' ? AppColors.white : AppColors.purple,
2419
+ color:
2420
+ fmt === 'PNG'
2421
+ ? AppColors.white
2422
+ : AppColors.purple,
2369
2423
  }}>
2370
2424
  {fmt}
2371
2425
  </Text>
@@ -2377,8 +2431,14 @@ const SettingsPanel = () => {
2377
2431
 
2378
2432
  {renderSettingRow({
2379
2433
  icon: <EyeIcon color={AppColors.purple} size={16} />,
2380
- label: t('settings.media.autoHide', 'Auto-Hide Inspector During Capture'),
2381
- description: t('settings.media.autoHideDesc', 'Temporarily hides the inspector overlay during screen capture'),
2434
+ label: t(
2435
+ 'settings.media.autoHide',
2436
+ 'Auto-Hide Inspector During Capture',
2437
+ ),
2438
+ description: t(
2439
+ 'settings.media.autoHideDesc',
2440
+ 'Temporarily hides the inspector overlay during screen capture',
2441
+ ),
2382
2442
  isLast: true,
2383
2443
  right: (
2384
2444
  <View
@@ -2411,7 +2471,8 @@ const SettingsPanel = () => {
2411
2471
  borderColor: AppColors.grayBorderSecondary,
2412
2472
  gap: 12,
2413
2473
  }}>
2414
- <View style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
2474
+ <View
2475
+ style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
2415
2476
  <View
2416
2477
  style={{
2417
2478
  width: 36,
@@ -2431,7 +2492,10 @@ const SettingsPanel = () => {
2431
2492
  lineHeight: 18,
2432
2493
  color: AppColors.primaryBlack,
2433
2494
  }}>
2434
- {t('settings.media.videoCardTitle', 'Video Recording & GIF Conversion')}
2495
+ {t(
2496
+ 'settings.media.videoCardTitle',
2497
+ 'Video Recording & GIF Conversion',
2498
+ )}
2435
2499
  </Text>
2436
2500
  <Text
2437
2501
  style={{
@@ -2441,7 +2505,10 @@ const SettingsPanel = () => {
2441
2505
  color: AppColors.grayText,
2442
2506
  marginTop: 1,
2443
2507
  }}>
2444
- {t('settings.media.videoCardDesc', 'ReplayKit hardware encoding, frame capture fallback and GIF generation')}
2508
+ {t(
2509
+ 'settings.media.videoCardDesc',
2510
+ 'ReplayKit hardware encoding, frame capture fallback and GIF generation',
2511
+ )}
2445
2512
  </Text>
2446
2513
  </View>
2447
2514
  </View>
@@ -2449,7 +2516,10 @@ const SettingsPanel = () => {
2449
2516
  {renderSettingRow({
2450
2517
  icon: <MicrophoneIcon color={AppColors.purple} size={16} />,
2451
2518
  label: t('settings.media.audioMode', 'Audio Source'),
2452
- description: t('settings.media.audioModeDesc', 'Record video with muted, app audio, or microphone commentary'),
2519
+ description: t(
2520
+ 'settings.media.audioModeDesc',
2521
+ 'Record video with muted, app audio, or microphone commentary',
2522
+ ),
2453
2523
  right: (
2454
2524
  <View style={{flexDirection: 'row', gap: 4}}>
2455
2525
  {['Muted', 'App', 'Mic'].map((aud, i) => (
@@ -2459,7 +2529,10 @@ const SettingsPanel = () => {
2459
2529
  paddingHorizontal: 7,
2460
2530
  paddingVertical: 4,
2461
2531
  borderRadius: 6,
2462
- backgroundColor: i === 0 ? AppColors.purple : `${AppColors.purple}1A`,
2532
+ backgroundColor:
2533
+ i === 0
2534
+ ? AppColors.purple
2535
+ : `${AppColors.purple}1A`,
2463
2536
  }}>
2464
2537
  <Text
2465
2538
  style={{
@@ -2477,8 +2550,14 @@ const SettingsPanel = () => {
2477
2550
 
2478
2551
  {renderSettingRow({
2479
2552
  icon: <FilmIcon color={AppColors.purple} size={16} />,
2480
- label: t('settings.media.frameRate', 'Recording Frame Rate (FPS)'),
2481
- description: t('settings.media.frameRateDesc', 'Target video smoothness: 15, 24, 30, or 60 FPS'),
2553
+ label: t(
2554
+ 'settings.media.frameRate',
2555
+ 'Recording Frame Rate (FPS)',
2556
+ ),
2557
+ description: t(
2558
+ 'settings.media.frameRateDesc',
2559
+ 'Target video smoothness: 15, 24, 30, or 60 FPS',
2560
+ ),
2482
2561
  right: (
2483
2562
  <View style={{flexDirection: 'row', gap: 4}}>
2484
2563
  {['15', '24', '30', '60'].map(fps => (
@@ -2488,13 +2567,17 @@ const SettingsPanel = () => {
2488
2567
  paddingHorizontal: 6,
2489
2568
  paddingVertical: 4,
2490
2569
  borderRadius: 6,
2491
- backgroundColor: fps === '24' ? AppColors.purple : `${AppColors.purple}1A`,
2570
+ backgroundColor:
2571
+ fps === '24'
2572
+ ? AppColors.purple
2573
+ : `${AppColors.purple}1A`,
2492
2574
  }}>
2493
2575
  <Text
2494
2576
  style={{
2495
2577
  fontFamily: AppFonts.interBold,
2496
2578
  fontSize: 10,
2497
- color: fps === '24' ? AppColors.white : AppColors.purple,
2579
+ color:
2580
+ fps === '24' ? AppColors.white : AppColors.purple,
2498
2581
  }}>
2499
2582
  {fps}fps
2500
2583
  </Text>
@@ -2507,7 +2590,10 @@ const SettingsPanel = () => {
2507
2590
  {renderSettingRow({
2508
2591
  icon: <GifIcon color={AppColors.purple} size={16} />,
2509
2592
  label: t('settings.media.gifAutoOpt', 'Auto GIF Optimization'),
2510
- description: t('settings.media.gifAutoOptDesc', 'Automatic palette reduction and frame skip for lightweight animated GIFs'),
2593
+ description: t(
2594
+ 'settings.media.gifAutoOptDesc',
2595
+ 'Automatic palette reduction and frame skip for lightweight animated GIFs',
2596
+ ),
2511
2597
  isLast: true,
2512
2598
  right: (
2513
2599
  <View
@@ -2541,13 +2627,25 @@ const SettingsPanel = () => {
2541
2627
  }}>
2542
2628
  {renderSettingRow({
2543
2629
  icon: <TrashIcon color={AppColors.errorColor} size={16} />,
2544
- label: t('settings.media.purgeAll', 'Purge Captured Media Cache'),
2545
- description: t('settings.media.purgeAllDesc', 'Delete all local screenshots, screen recordings and converted GIFs'),
2630
+ label: t(
2631
+ 'settings.media.purgeAll',
2632
+ 'Purge Captured Media Cache',
2633
+ ),
2634
+ description: t(
2635
+ 'settings.media.purgeAllDesc',
2636
+ 'Delete all local screenshots, screen recordings and converted GIFs',
2637
+ ),
2546
2638
  isLast: true,
2547
2639
  onPress: () => {
2548
2640
  Alert.alert(
2549
- t('settings.media.purgeConfirmTitle', 'Purge Media Storage?'),
2550
- t('settings.media.purgeConfirmMessage', 'This will permanently delete all captured screenshots and videos from disk.'),
2641
+ t(
2642
+ 'settings.media.purgeConfirmTitle',
2643
+ 'Purge Media Storage?',
2644
+ ),
2645
+ t(
2646
+ 'settings.media.purgeConfirmMessage',
2647
+ 'This will permanently delete all captured screenshots and videos from disk.',
2648
+ ),
2551
2649
  [
2552
2650
  {text: t('common.cancel', 'Cancel'), style: 'cancel'},
2553
2651
  {
@@ -2555,7 +2653,12 @@ const SettingsPanel = () => {
2555
2653
  style: 'destructive',
2556
2654
  onPress: async () => {
2557
2655
  await ScreenCapture.clearAllMedia();
2558
- showToast(t('settings.media.purgedSuccess', 'Media cache cleared successfully'));
2656
+ showToast(
2657
+ t(
2658
+ 'settings.media.purgedSuccess',
2659
+ 'Media cache cleared successfully',
2660
+ ),
2661
+ );
2559
2662
  },
2560
2663
  },
2561
2664
  ],
@@ -2724,7 +2827,9 @@ const SettingsPanel = () => {
2724
2827
  lineHeight: 16,
2725
2828
  color: AppColors.grayText,
2726
2829
  }}>
2727
- High-performance in-app debugging, network logging, console inspection, performance profiling, storage viewer & telemetry diagnostics for React Native.
2830
+ High-performance in-app debugging, network logging, console
2831
+ inspection, performance profiling, storage viewer & telemetry
2832
+ diagnostics for React Native.
2728
2833
  </Text>
2729
2834
 
2730
2835
  {updateAvailable && (
@@ -2975,38 +3080,67 @@ const SettingsPanel = () => {
2975
3080
  package: {
2976
3081
  name: 'react-native-inapp-inspector',
2977
3082
  version: `v${LIB_VERSION}`,
2978
- latestNpmVersion: latestNpmVersion ? `v${latestNpmVersion}` : 'Checking...',
3083
+ latestNpmVersion: latestNpmVersion
3084
+ ? `v${latestNpmVersion}`
3085
+ : 'Checking...',
2979
3086
  license: 'MIT',
2980
- repository: 'https://github.com/vengatmacuser/react-native-inapp-inspector',
3087
+ repository:
3088
+ 'https://github.com/vengatmacuser/react-native-inapp-inspector',
2981
3089
  },
2982
3090
  hostApp: {
2983
3091
  name: getAppName(),
2984
3092
  bundleId: getBundleIdentifier(),
2985
3093
  versionAndBuild: getAppVersionAndBuild().formatted,
2986
- buildVariant: __DEV__ ? 'Development (Debug)' : 'Production (Release)',
3094
+ buildVariant: __DEV__
3095
+ ? 'Development (Debug)'
3096
+ : 'Production (Release)',
2987
3097
  metroConnected: isLocalDebugEnvironment(),
2988
3098
  },
2989
3099
  runtime: {
2990
- reactNativeVersion: rnVer ? `${rnVer.major}.${rnVer.minor}.${rnVer.patch}` : '0.74+',
3100
+ reactNativeVersion: rnVer
3101
+ ? `${rnVer.major}.${rnVer.minor}.${rnVer.patch}`
3102
+ : '0.74+',
2991
3103
  reactVersion: React.version,
2992
- jsEngine: Boolean((global as any)?.HermesInternal) ? 'Hermes' : 'JavaScriptCore (JSC)',
2993
- architecture: Boolean((global as any)?.nativeFabricUIManager) ? 'Fabric (New Architecture)' : 'Paper (Legacy Bridge)',
2994
- turboModules: Boolean((global as any)?.__turboModuleProxy || (global as any)?.TurboModuleRegistry),
3104
+ jsEngine: Boolean((global as any)?.HermesInternal)
3105
+ ? 'Hermes'
3106
+ : 'JavaScriptCore (JSC)',
3107
+ architecture: Boolean(
3108
+ (global as any)?.nativeFabricUIManager,
3109
+ )
3110
+ ? 'Fabric (New Architecture)'
3111
+ : 'Paper (Legacy Bridge)',
3112
+ turboModules: Boolean(
3113
+ (global as any)?.__turboModuleProxy ||
3114
+ (global as any)?.TurboModuleRegistry,
3115
+ ),
2995
3116
  },
2996
3117
  device: {
2997
3118
  platform: Platform.OS,
2998
3119
  osVersion: Platform.Version,
2999
- deviceModel: (Platform.constants as any)?.Model || 'Unknown Device',
3000
- windowDimensions: `${Math.round(win.width)}x${Math.round(win.height)} pt`,
3001
- screenDimensions: `${Math.round(scr.width)}x${Math.round(scr.height)} pt`,
3120
+ deviceModel:
3121
+ (Platform.constants as any)?.Model || 'Unknown Device',
3122
+ windowDimensions: `${Math.round(win.width)}x${Math.round(
3123
+ win.height,
3124
+ )} pt`,
3125
+ screenDimensions: `${Math.round(scr.width)}x${Math.round(
3126
+ scr.height,
3127
+ )} pt`,
3002
3128
  pixelRatio: PixelRatio.get(),
3003
3129
  fontScale: PixelRatio.getFontScale(),
3004
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || 'Unknown',
3005
- locale: Intl.DateTimeFormat().resolvedOptions().locale || 'en',
3130
+ timezone:
3131
+ Intl.DateTimeFormat().resolvedOptions().timeZone ||
3132
+ 'Unknown',
3133
+ locale:
3134
+ Intl.DateTimeFormat().resolvedOptions().locale || 'en',
3006
3135
  },
3007
3136
  storageAndCapabilities: {
3008
- storageEngine: isPersistentStorageAvailable() ? 'MMKV (Fast Native Storage)' : 'In-Memory State',
3009
- hasNativeModule: Boolean((global as any)?.NativeInspectorModule || (global as any)?.__IN_APP_INSPECTOR_NATIVE__),
3137
+ storageEngine: isPersistentStorageAvailable()
3138
+ ? 'MMKV (Fast Native Storage)'
3139
+ : 'In-Memory State',
3140
+ hasNativeModule: Boolean(
3141
+ (global as any)?.NativeInspectorModule ||
3142
+ (global as any)?.__IN_APP_INSPECTOR_NATIVE__,
3143
+ ),
3010
3144
  reduxConnected: isReduxConnected(),
3011
3145
  analyticsConnected: isAnalyticsConnected(),
3012
3146
  },
@@ -3184,7 +3318,9 @@ const SettingsPanel = () => {
3184
3318
  showToast('Copied npm install command!');
3185
3319
  }}
3186
3320
  style={{
3187
- backgroundColor: updateAvailable ? AppColors.purple : `${AppColors.purple}18`,
3321
+ backgroundColor: updateAvailable
3322
+ ? AppColors.purple
3323
+ : `${AppColors.purple}18`,
3188
3324
  paddingVertical: 7,
3189
3325
  paddingHorizontal: 11,
3190
3326
  borderRadius: 8,
@@ -3192,12 +3328,17 @@ const SettingsPanel = () => {
3192
3328
  alignItems: 'center',
3193
3329
  gap: 5,
3194
3330
  }}>
3195
- <CopyIcon color={updateAvailable ? AppColors.white : AppColors.purple} size={12} />
3331
+ <CopyIcon
3332
+ color={updateAvailable ? AppColors.white : AppColors.purple}
3333
+ size={12}
3334
+ />
3196
3335
  <Text
3197
3336
  style={{
3198
3337
  fontFamily: AppFonts.interBold,
3199
3338
  fontSize: 11,
3200
- color: updateAvailable ? AppColors.white : AppColors.purple,
3339
+ color: updateAvailable
3340
+ ? AppColors.white
3341
+ : AppColors.purple,
3201
3342
  }}>
3202
3343
  {updateAvailable ? 'Copy Upgrade' : 'Copy Install'}
3203
3344
  </Text>
@@ -3227,68 +3368,143 @@ const SettingsPanel = () => {
3227
3368
  </Text>
3228
3369
 
3229
3370
  <View style={{gap: 8}}>
3230
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3231
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3371
+ <View
3372
+ style={{
3373
+ flexDirection: 'row',
3374
+ justifyContent: 'space-between',
3375
+ alignItems: 'center',
3376
+ }}>
3377
+ <Text
3378
+ style={{
3379
+ fontFamily: AppFonts.interRegular,
3380
+ fontSize: 11.5,
3381
+ color: AppColors.grayText,
3382
+ }}>
3232
3383
  Application Name
3233
3384
  </Text>
3234
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3385
+ <Text
3386
+ style={{
3387
+ fontFamily: AppFonts.interBold,
3388
+ fontSize: 11.5,
3389
+ color: AppColors.primaryBlack,
3390
+ }}>
3235
3391
  {getAppName()}
3236
3392
  </Text>
3237
3393
  </View>
3238
3394
 
3239
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3240
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3395
+ <View
3396
+ style={{
3397
+ flexDirection: 'row',
3398
+ justifyContent: 'space-between',
3399
+ alignItems: 'center',
3400
+ }}>
3401
+ <Text
3402
+ style={{
3403
+ fontFamily: AppFonts.interRegular,
3404
+ fontSize: 11.5,
3405
+ color: AppColors.grayText,
3406
+ }}>
3241
3407
  Bundle ID / Package
3242
3408
  </Text>
3243
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11, color: AppColors.primaryBlack}}>
3409
+ <Text
3410
+ style={{
3411
+ fontFamily: AppFonts.interRegular,
3412
+ fontSize: 11,
3413
+ color: AppColors.primaryBlack,
3414
+ }}>
3244
3415
  {getBundleIdentifier()}
3245
3416
  </Text>
3246
3417
  </View>
3247
3418
 
3248
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3249
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3419
+ <View
3420
+ style={{
3421
+ flexDirection: 'row',
3422
+ justifyContent: 'space-between',
3423
+ alignItems: 'center',
3424
+ }}>
3425
+ <Text
3426
+ style={{
3427
+ fontFamily: AppFonts.interRegular,
3428
+ fontSize: 11.5,
3429
+ color: AppColors.grayText,
3430
+ }}>
3250
3431
  Version & Build Number
3251
3432
  </Text>
3252
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3433
+ <Text
3434
+ style={{
3435
+ fontFamily: AppFonts.interBold,
3436
+ fontSize: 11.5,
3437
+ color: AppColors.primaryBlack,
3438
+ }}>
3253
3439
  {getAppVersionAndBuild().formatted}
3254
3440
  </Text>
3255
3441
  </View>
3256
3442
 
3257
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3258
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3443
+ <View
3444
+ style={{
3445
+ flexDirection: 'row',
3446
+ justifyContent: 'space-between',
3447
+ alignItems: 'center',
3448
+ }}>
3449
+ <Text
3450
+ style={{
3451
+ fontFamily: AppFonts.interRegular,
3452
+ fontSize: 11.5,
3453
+ color: AppColors.grayText,
3454
+ }}>
3259
3455
  Build Variant
3260
3456
  </Text>
3261
3457
  <View
3262
3458
  style={{
3263
- backgroundColor: __DEV__ ? `${AppColors.amber500}20` : `${AppColors.emerald500}20`,
3459
+ backgroundColor: __DEV__
3460
+ ? `${AppColors.amber500}20`
3461
+ : `${AppColors.emerald500}20`,
3264
3462
  paddingHorizontal: 6,
3265
3463
  paddingVertical: 1.5,
3266
3464
  borderRadius: 5,
3267
3465
  borderWidth: 1,
3268
- borderColor: __DEV__ ? `${AppColors.amber500}50` : `${AppColors.emerald500}50`,
3466
+ borderColor: __DEV__
3467
+ ? `${AppColors.amber500}50`
3468
+ : `${AppColors.emerald500}50`,
3269
3469
  }}>
3270
3470
  <Text
3271
3471
  style={{
3272
3472
  fontFamily: AppFonts.interBold,
3273
3473
  fontSize: 10,
3274
- color: __DEV__ ? AppColors.amber500 : AppColors.emerald600,
3474
+ color: __DEV__
3475
+ ? AppColors.amber500
3476
+ : AppColors.emerald600,
3275
3477
  }}>
3276
3478
  {__DEV__ ? 'Development (Debug)' : 'Production (Release)'}
3277
3479
  </Text>
3278
3480
  </View>
3279
3481
  </View>
3280
3482
 
3281
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3282
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3483
+ <View
3484
+ style={{
3485
+ flexDirection: 'row',
3486
+ justifyContent: 'space-between',
3487
+ alignItems: 'center',
3488
+ }}>
3489
+ <Text
3490
+ style={{
3491
+ fontFamily: AppFonts.interRegular,
3492
+ fontSize: 11.5,
3493
+ color: AppColors.grayText,
3494
+ }}>
3283
3495
  Metro Bundler Connection
3284
3496
  </Text>
3285
3497
  <Text
3286
3498
  style={{
3287
3499
  fontFamily: AppFonts.interBold,
3288
3500
  fontSize: 11.5,
3289
- color: isLocalDebugEnvironment() ? AppColors.emerald600 : AppColors.grayText,
3501
+ color: isLocalDebugEnvironment()
3502
+ ? AppColors.emerald600
3503
+ : AppColors.grayText,
3290
3504
  }}>
3291
- {isLocalDebugEnvironment() ? 'Connected (Hot Reload Active)' : 'Offline / Standalone'}
3505
+ {isLocalDebugEnvironment()
3506
+ ? 'Connected (Hot Reload Active)'
3507
+ : 'Offline / Standalone'}
3292
3508
  </Text>
3293
3509
  </View>
3294
3510
  </View>
@@ -3316,28 +3532,76 @@ const SettingsPanel = () => {
3316
3532
  </Text>
3317
3533
 
3318
3534
  <View style={{gap: 8}}>
3319
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3320
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3535
+ <View
3536
+ style={{
3537
+ flexDirection: 'row',
3538
+ justifyContent: 'space-between',
3539
+ alignItems: 'center',
3540
+ }}>
3541
+ <Text
3542
+ style={{
3543
+ fontFamily: AppFonts.interRegular,
3544
+ fontSize: 11.5,
3545
+ color: AppColors.grayText,
3546
+ }}>
3321
3547
  React Native Version
3322
3548
  </Text>
3323
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3324
- v{((Platform.constants as any)?.reactNativeVersion?.major != null)
3325
- ? `${(Platform.constants as any).reactNativeVersion.major}.${(Platform.constants as any).reactNativeVersion.minor}.${(Platform.constants as any).reactNativeVersion.patch}`
3549
+ <Text
3550
+ style={{
3551
+ fontFamily: AppFonts.interBold,
3552
+ fontSize: 11.5,
3553
+ color: AppColors.primaryBlack,
3554
+ }}>
3555
+ v
3556
+ {(Platform.constants as any)?.reactNativeVersion?.major !=
3557
+ null
3558
+ ? `${
3559
+ (Platform.constants as any).reactNativeVersion.major
3560
+ }.${
3561
+ (Platform.constants as any).reactNativeVersion.minor
3562
+ }.${
3563
+ (Platform.constants as any).reactNativeVersion.patch
3564
+ }`
3326
3565
  : '0.74+'}
3327
3566
  </Text>
3328
3567
  </View>
3329
3568
 
3330
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3331
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3569
+ <View
3570
+ style={{
3571
+ flexDirection: 'row',
3572
+ justifyContent: 'space-between',
3573
+ alignItems: 'center',
3574
+ }}>
3575
+ <Text
3576
+ style={{
3577
+ fontFamily: AppFonts.interRegular,
3578
+ fontSize: 11.5,
3579
+ color: AppColors.grayText,
3580
+ }}>
3332
3581
  React Core Version
3333
3582
  </Text>
3334
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3583
+ <Text
3584
+ style={{
3585
+ fontFamily: AppFonts.interBold,
3586
+ fontSize: 11.5,
3587
+ color: AppColors.primaryBlack,
3588
+ }}>
3335
3589
  v{React.version}
3336
3590
  </Text>
3337
3591
  </View>
3338
3592
 
3339
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3340
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3593
+ <View
3594
+ style={{
3595
+ flexDirection: 'row',
3596
+ justifyContent: 'space-between',
3597
+ alignItems: 'center',
3598
+ }}>
3599
+ <Text
3600
+ style={{
3601
+ fontFamily: AppFonts.interRegular,
3602
+ fontSize: 11.5,
3603
+ color: AppColors.grayText,
3604
+ }}>
3341
3605
  JavaScript Engine
3342
3606
  </Text>
3343
3607
  <View
@@ -3349,27 +3613,69 @@ const SettingsPanel = () => {
3349
3613
  borderWidth: 1,
3350
3614
  borderColor: `${AppColors.purple}40`,
3351
3615
  }}>
3352
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 10.5, color: AppColors.purple}}>
3353
- {Boolean((global as any)?.HermesInternal) ? 'Hermes Engine (Active)' : 'JavaScriptCore (JSC)'}
3616
+ <Text
3617
+ style={{
3618
+ fontFamily: AppFonts.interBold,
3619
+ fontSize: 10.5,
3620
+ color: AppColors.purple,
3621
+ }}>
3622
+ {Boolean((global as any)?.HermesInternal)
3623
+ ? 'Hermes Engine (Active)'
3624
+ : 'JavaScriptCore (JSC)'}
3354
3625
  </Text>
3355
3626
  </View>
3356
3627
  </View>
3357
3628
 
3358
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3359
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3629
+ <View
3630
+ style={{
3631
+ flexDirection: 'row',
3632
+ justifyContent: 'space-between',
3633
+ alignItems: 'center',
3634
+ }}>
3635
+ <Text
3636
+ style={{
3637
+ fontFamily: AppFonts.interRegular,
3638
+ fontSize: 11.5,
3639
+ color: AppColors.grayText,
3640
+ }}>
3360
3641
  Rendering Architecture
3361
3642
  </Text>
3362
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3363
- {Boolean((global as any)?.nativeFabricUIManager) ? 'Fabric (New Architecture)' : 'Paper (Legacy Bridge)'}
3643
+ <Text
3644
+ style={{
3645
+ fontFamily: AppFonts.interBold,
3646
+ fontSize: 11.5,
3647
+ color: AppColors.primaryBlack,
3648
+ }}>
3649
+ {Boolean((global as any)?.nativeFabricUIManager)
3650
+ ? 'Fabric (New Architecture)'
3651
+ : 'Paper (Legacy Bridge)'}
3364
3652
  </Text>
3365
3653
  </View>
3366
3654
 
3367
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3368
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3655
+ <View
3656
+ style={{
3657
+ flexDirection: 'row',
3658
+ justifyContent: 'space-between',
3659
+ alignItems: 'center',
3660
+ }}>
3661
+ <Text
3662
+ style={{
3663
+ fontFamily: AppFonts.interRegular,
3664
+ fontSize: 11.5,
3665
+ color: AppColors.grayText,
3666
+ }}>
3369
3667
  TurboModules Support
3370
3668
  </Text>
3371
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3372
- {Boolean((global as any)?.__turboModuleProxy || (global as any)?.TurboModuleRegistry)
3669
+ <Text
3670
+ style={{
3671
+ fontFamily: AppFonts.interBold,
3672
+ fontSize: 11.5,
3673
+ color: AppColors.primaryBlack,
3674
+ }}>
3675
+ {Boolean(
3676
+ (global as any)?.__turboModuleProxy ||
3677
+ (global as any)?.TurboModuleRegistry,
3678
+ )
3373
3679
  ? 'Enabled (C++ JSI)'
3374
3680
  : 'Standard Bridge'}
3375
3681
  </Text>
@@ -3399,59 +3705,171 @@ const SettingsPanel = () => {
3399
3705
  </Text>
3400
3706
 
3401
3707
  <View style={{gap: 8}}>
3402
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3403
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3708
+ <View
3709
+ style={{
3710
+ flexDirection: 'row',
3711
+ justifyContent: 'space-between',
3712
+ alignItems: 'center',
3713
+ }}>
3714
+ <Text
3715
+ style={{
3716
+ fontFamily: AppFonts.interRegular,
3717
+ fontSize: 11.5,
3718
+ color: AppColors.grayText,
3719
+ }}>
3404
3720
  Operating System
3405
3721
  </Text>
3406
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3407
- {Platform.OS === 'ios' ? 'Apple iOS' : Platform.OS === 'android' ? 'Google Android' : Platform.OS}{' '}
3722
+ <Text
3723
+ style={{
3724
+ fontFamily: AppFonts.interBold,
3725
+ fontSize: 11.5,
3726
+ color: AppColors.primaryBlack,
3727
+ }}>
3728
+ {Platform.OS === 'ios'
3729
+ ? 'Apple iOS'
3730
+ : Platform.OS === 'android'
3731
+ ? 'Google Android'
3732
+ : Platform.OS}{' '}
3408
3733
  {Platform.Version}
3409
3734
  </Text>
3410
3735
  </View>
3411
3736
 
3412
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3413
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3737
+ <View
3738
+ style={{
3739
+ flexDirection: 'row',
3740
+ justifyContent: 'space-between',
3741
+ alignItems: 'center',
3742
+ }}>
3743
+ <Text
3744
+ style={{
3745
+ fontFamily: AppFonts.interRegular,
3746
+ fontSize: 11.5,
3747
+ color: AppColors.grayText,
3748
+ }}>
3414
3749
  Device Hardware Model
3415
3750
  </Text>
3416
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3751
+ <Text
3752
+ style={{
3753
+ fontFamily: AppFonts.interBold,
3754
+ fontSize: 11.5,
3755
+ color: AppColors.primaryBlack,
3756
+ }}>
3417
3757
  {(Platform.constants as any)?.Model ||
3418
- (Platform.OS === 'ios' ? 'Apple Device' : 'Android Device')}
3758
+ (Platform.OS === 'ios'
3759
+ ? 'Apple Device'
3760
+ : 'Android Device')}
3419
3761
  </Text>
3420
3762
  </View>
3421
3763
 
3422
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3423
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3764
+ <View
3765
+ style={{
3766
+ flexDirection: 'row',
3767
+ justifyContent: 'space-between',
3768
+ alignItems: 'center',
3769
+ }}>
3770
+ <Text
3771
+ style={{
3772
+ fontFamily: AppFonts.interRegular,
3773
+ fontSize: 11.5,
3774
+ color: AppColors.grayText,
3775
+ }}>
3424
3776
  Window Viewport (Points)
3425
3777
  </Text>
3426
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3427
- {Math.round(Dimensions.get('window').width)} × {Math.round(Dimensions.get('window').height)} pt
3778
+ <Text
3779
+ style={{
3780
+ fontFamily: AppFonts.interBold,
3781
+ fontSize: 11.5,
3782
+ color: AppColors.primaryBlack,
3783
+ }}>
3784
+ {Math.round(Dimensions.get('window').width)} ×{' '}
3785
+ {Math.round(Dimensions.get('window').height)} pt
3428
3786
  </Text>
3429
3787
  </View>
3430
3788
 
3431
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3432
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3789
+ <View
3790
+ style={{
3791
+ flexDirection: 'row',
3792
+ justifyContent: 'space-between',
3793
+ alignItems: 'center',
3794
+ }}>
3795
+ <Text
3796
+ style={{
3797
+ fontFamily: AppFonts.interRegular,
3798
+ fontSize: 11.5,
3799
+ color: AppColors.grayText,
3800
+ }}>
3433
3801
  Native Physical Resolution
3434
3802
  </Text>
3435
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3436
- {Math.round(Dimensions.get('screen').width * PixelRatio.get())} × {Math.round(Dimensions.get('screen').height * PixelRatio.get())} px
3803
+ <Text
3804
+ style={{
3805
+ fontFamily: AppFonts.interBold,
3806
+ fontSize: 11.5,
3807
+ color: AppColors.primaryBlack,
3808
+ }}>
3809
+ {Math.round(
3810
+ Dimensions.get('screen').width * PixelRatio.get(),
3811
+ )}{' '}
3812
+ ×{' '}
3813
+ {Math.round(
3814
+ Dimensions.get('screen').height * PixelRatio.get(),
3815
+ )}{' '}
3816
+ px
3437
3817
  </Text>
3438
3818
  </View>
3439
3819
 
3440
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3441
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3820
+ <View
3821
+ style={{
3822
+ flexDirection: 'row',
3823
+ justifyContent: 'space-between',
3824
+ alignItems: 'center',
3825
+ }}>
3826
+ <Text
3827
+ style={{
3828
+ fontFamily: AppFonts.interRegular,
3829
+ fontSize: 11.5,
3830
+ color: AppColors.grayText,
3831
+ }}>
3442
3832
  Pixel Density & Font Scale
3443
3833
  </Text>
3444
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3445
- {PixelRatio.get().toFixed(1)}x ({PixelRatio.get() >= 3 ? '@3x' : PixelRatio.get() >= 2 ? '@2x' : '@1x'}) • Font: {PixelRatio.getFontScale().toFixed(2)}x
3834
+ <Text
3835
+ style={{
3836
+ fontFamily: AppFonts.interBold,
3837
+ fontSize: 11.5,
3838
+ color: AppColors.primaryBlack,
3839
+ }}>
3840
+ {PixelRatio.get().toFixed(1)}x (
3841
+ {PixelRatio.get() >= 3
3842
+ ? '@3x'
3843
+ : PixelRatio.get() >= 2
3844
+ ? '@2x'
3845
+ : '@1x'}
3846
+ ) • Font: {PixelRatio.getFontScale().toFixed(2)}x
3446
3847
  </Text>
3447
3848
  </View>
3448
3849
 
3449
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3450
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3850
+ <View
3851
+ style={{
3852
+ flexDirection: 'row',
3853
+ justifyContent: 'space-between',
3854
+ alignItems: 'center',
3855
+ }}>
3856
+ <Text
3857
+ style={{
3858
+ fontFamily: AppFonts.interRegular,
3859
+ fontSize: 11.5,
3860
+ color: AppColors.grayText,
3861
+ }}>
3451
3862
  Timezone & Locale
3452
3863
  </Text>
3453
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3454
- {Intl.DateTimeFormat().resolvedOptions().timeZone || 'System'} ({Intl.DateTimeFormat().resolvedOptions().locale || 'en'})
3864
+ <Text
3865
+ style={{
3866
+ fontFamily: AppFonts.interBold,
3867
+ fontSize: 11.5,
3868
+ color: AppColors.primaryBlack,
3869
+ }}>
3870
+ {Intl.DateTimeFormat().resolvedOptions().timeZone ||
3871
+ 'System'}{' '}
3872
+ ({Intl.DateTimeFormat().resolvedOptions().locale || 'en'})
3455
3873
  </Text>
3456
3874
  </View>
3457
3875
  </View>
@@ -3479,76 +3897,170 @@ const SettingsPanel = () => {
3479
3897
  </Text>
3480
3898
 
3481
3899
  <View style={{gap: 8}}>
3482
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3483
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3900
+ <View
3901
+ style={{
3902
+ flexDirection: 'row',
3903
+ justifyContent: 'space-between',
3904
+ alignItems: 'center',
3905
+ }}>
3906
+ <Text
3907
+ style={{
3908
+ fontFamily: AppFonts.interRegular,
3909
+ fontSize: 11.5,
3910
+ color: AppColors.grayText,
3911
+ }}>
3484
3912
  Storage Persistence Engine
3485
3913
  </Text>
3486
3914
  <View
3487
3915
  style={{
3488
- backgroundColor: isPersistentStorageAvailable() ? `${AppColors.emerald500}18` : `${AppColors.amber500}18`,
3916
+ backgroundColor: isPersistentStorageAvailable()
3917
+ ? `${AppColors.emerald500}18`
3918
+ : `${AppColors.amber500}18`,
3489
3919
  paddingHorizontal: 6,
3490
3920
  paddingVertical: 1.5,
3491
3921
  borderRadius: 5,
3492
3922
  borderWidth: 1,
3493
- borderColor: isPersistentStorageAvailable() ? `${AppColors.emerald500}50` : `${AppColors.amber500}50`,
3923
+ borderColor: isPersistentStorageAvailable()
3924
+ ? `${AppColors.emerald500}50`
3925
+ : `${AppColors.amber500}50`,
3494
3926
  }}>
3495
3927
  <Text
3496
3928
  style={{
3497
3929
  fontFamily: AppFonts.interBold,
3498
3930
  fontSize: 10.5,
3499
- color: isPersistentStorageAvailable() ? AppColors.emerald600 : AppColors.amber500,
3931
+ color: isPersistentStorageAvailable()
3932
+ ? AppColors.emerald600
3933
+ : AppColors.amber500,
3500
3934
  }}>
3501
- {isPersistentStorageAvailable() ? 'MMKV Fast Native Storage' : 'In-Memory State'}
3935
+ {isPersistentStorageAvailable()
3936
+ ? 'MMKV Fast Native Storage'
3937
+ : 'In-Memory State'}
3502
3938
  </Text>
3503
3939
  </View>
3504
3940
  </View>
3505
3941
 
3506
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3507
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3942
+ <View
3943
+ style={{
3944
+ flexDirection: 'row',
3945
+ justifyContent: 'space-between',
3946
+ alignItems: 'center',
3947
+ }}>
3948
+ <Text
3949
+ style={{
3950
+ fontFamily: AppFonts.interRegular,
3951
+ fontSize: 11.5,
3952
+ color: AppColors.grayText,
3953
+ }}>
3508
3954
  Native Module Status
3509
3955
  </Text>
3510
3956
  <Text
3511
3957
  style={{
3512
3958
  fontFamily: AppFonts.interBold,
3513
3959
  fontSize: 11.5,
3514
- color: Boolean((global as any)?.NativeInspectorModule) ? AppColors.emerald600 : AppColors.grayText,
3960
+ color: Boolean((global as any)?.NativeInspectorModule)
3961
+ ? AppColors.emerald600
3962
+ : AppColors.grayText,
3515
3963
  }}>
3516
- {Boolean((global as any)?.NativeInspectorModule) ? 'Linked & Active' : 'JavaScript Only'}
3964
+ {Boolean((global as any)?.NativeInspectorModule)
3965
+ ? 'Linked & Active'
3966
+ : 'JavaScript Only'}
3517
3967
  </Text>
3518
3968
  </View>
3519
3969
 
3520
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3521
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3970
+ <View
3971
+ style={{
3972
+ flexDirection: 'row',
3973
+ justifyContent: 'space-between',
3974
+ alignItems: 'center',
3975
+ }}>
3976
+ <Text
3977
+ style={{
3978
+ fontFamily: AppFonts.interRegular,
3979
+ fontSize: 11.5,
3980
+ color: AppColors.grayText,
3981
+ }}>
3522
3982
  Network Logger Interceptor
3523
3983
  </Text>
3524
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
3984
+ <Text
3985
+ style={{
3986
+ fontFamily: AppFonts.interBold,
3987
+ fontSize: 11.5,
3988
+ color: AppColors.emerald600,
3989
+ }}>
3525
3990
  Active (XMLHttpRequest & Fetch Hooked)
3526
3991
  </Text>
3527
3992
  </View>
3528
3993
 
3529
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3530
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3994
+ <View
3995
+ style={{
3996
+ flexDirection: 'row',
3997
+ justifyContent: 'space-between',
3998
+ alignItems: 'center',
3999
+ }}>
4000
+ <Text
4001
+ style={{
4002
+ fontFamily: AppFonts.interRegular,
4003
+ fontSize: 11.5,
4004
+ color: AppColors.grayText,
4005
+ }}>
3531
4006
  Redux & Analytics Watchers
3532
4007
  </Text>
3533
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3534
- Redux: {isReduxConnected() ? 'Connected' : 'Listening'} • Analytics: {isAnalyticsConnected() ? 'Connected' : 'Listening'}
4008
+ <Text
4009
+ style={{
4010
+ fontFamily: AppFonts.interBold,
4011
+ fontSize: 11.5,
4012
+ color: AppColors.primaryBlack,
4013
+ }}>
4014
+ Redux: {isReduxConnected() ? 'Connected' : 'Listening'} •
4015
+ Analytics:{' '}
4016
+ {isAnalyticsConnected() ? 'Connected' : 'Listening'}
3535
4017
  </Text>
3536
4018
  </View>
3537
4019
 
3538
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3539
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
4020
+ <View
4021
+ style={{
4022
+ flexDirection: 'row',
4023
+ justifyContent: 'space-between',
4024
+ alignItems: 'center',
4025
+ }}>
4026
+ <Text
4027
+ style={{
4028
+ fontFamily: AppFonts.interRegular,
4029
+ fontSize: 11.5,
4030
+ color: AppColors.grayText,
4031
+ }}>
3540
4032
  Crash & Exception Boundary
3541
4033
  </Text>
3542
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
4034
+ <Text
4035
+ style={{
4036
+ fontFamily: AppFonts.interBold,
4037
+ fontSize: 11.5,
4038
+ color: AppColors.emerald600,
4039
+ }}>
3543
4040
  Global JS Exception Handler Active
3544
4041
  </Text>
3545
4042
  </View>
3546
4043
 
3547
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3548
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
4044
+ <View
4045
+ style={{
4046
+ flexDirection: 'row',
4047
+ justifyContent: 'space-between',
4048
+ alignItems: 'center',
4049
+ }}>
4050
+ <Text
4051
+ style={{
4052
+ fontFamily: AppFonts.interRegular,
4053
+ fontSize: 11.5,
4054
+ color: AppColors.grayText,
4055
+ }}>
3549
4056
  Memory Management
3550
4057
  </Text>
3551
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
4058
+ <Text
4059
+ style={{
4060
+ fontFamily: AppFonts.interBold,
4061
+ fontSize: 11.5,
4062
+ color: AppColors.emerald600,
4063
+ }}>
3552
4064
  Dynamic Auto RAM Tiering Active
3553
4065
  </Text>
3554
4066
  </View>
@@ -3576,29 +4088,74 @@ const SettingsPanel = () => {
3576
4088
  LICENSE & CREDITS
3577
4089
  </Text>
3578
4090
 
3579
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3580
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
4091
+ <View
4092
+ style={{
4093
+ flexDirection: 'row',
4094
+ justifyContent: 'space-between',
4095
+ alignItems: 'center',
4096
+ }}>
4097
+ <Text
4098
+ style={{
4099
+ fontFamily: AppFonts.interRegular,
4100
+ fontSize: 11.5,
4101
+ color: AppColors.grayText,
4102
+ }}>
3581
4103
  License
3582
4104
  </Text>
3583
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
4105
+ <Text
4106
+ style={{
4107
+ fontFamily: AppFonts.interBold,
4108
+ fontSize: 11.5,
4109
+ color: AppColors.emerald600,
4110
+ }}>
3584
4111
  MIT Permissive Open Source
3585
4112
  </Text>
3586
4113
  </View>
3587
4114
 
3588
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3589
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
4115
+ <View
4116
+ style={{
4117
+ flexDirection: 'row',
4118
+ justifyContent: 'space-between',
4119
+ alignItems: 'center',
4120
+ }}>
4121
+ <Text
4122
+ style={{
4123
+ fontFamily: AppFonts.interRegular,
4124
+ fontSize: 11.5,
4125
+ color: AppColors.grayText,
4126
+ }}>
3590
4127
  Created & Maintained By
3591
4128
  </Text>
3592
- <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
4129
+ <Text
4130
+ style={{
4131
+ fontFamily: AppFonts.interBold,
4132
+ fontSize: 11.5,
4133
+ color: AppColors.primaryBlack,
4134
+ }}>
3593
4135
  Vengateswaran
3594
4136
  </Text>
3595
4137
  </View>
3596
4138
 
3597
- <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3598
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
4139
+ <View
4140
+ style={{
4141
+ flexDirection: 'row',
4142
+ justifyContent: 'space-between',
4143
+ alignItems: 'center',
4144
+ }}>
4145
+ <Text
4146
+ style={{
4147
+ fontFamily: AppFonts.interRegular,
4148
+ fontSize: 11.5,
4149
+ color: AppColors.grayText,
4150
+ }}>
3599
4151
  Repository
3600
4152
  </Text>
3601
- <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11, color: AppColors.purple}}>
4153
+ <Text
4154
+ style={{
4155
+ fontFamily: AppFonts.interRegular,
4156
+ fontSize: 11,
4157
+ color: AppColors.purple,
4158
+ }}>
3602
4159
  github.com/vengatmacuser/react-native-inapp-inspector
3603
4160
  </Text>
3604
4161
  </View>
@@ -4523,7 +5080,6 @@ const SettingsPanel = () => {
4523
5080
  );
4524
5081
  }
4525
5082
 
4526
-
4527
5083
  const subPageAnim = useRef(new Animated.Value(0)).current;
4528
5084
  useEffect(() => {
4529
5085
  if (settingsPage !== 'main') {