react-native-inapp-inspector 2.3.14 → 2.3.15

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 (65) hide show
  1. package/dist/commonjs/components/AnimatedEntrance.js +3 -3
  2. package/dist/commonjs/components/ConsoleLogCard.js +174 -100
  3. package/dist/commonjs/components/Inspector/ConsoleTab.js +25 -16
  4. package/dist/commonjs/components/Inspector/CrashTab.js +19 -5
  5. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +198 -98
  6. package/dist/commonjs/components/Inspector/InspectorHeader.js +2 -2
  7. package/dist/commonjs/components/Inspector/MainScreen.js +56 -56
  8. package/dist/commonjs/components/Inspector/NetworkTab.js +1 -335
  9. package/dist/commonjs/components/Inspector/PerformanceTab.js +32 -6
  10. package/dist/commonjs/components/Inspector/ReduxTab.js +3 -1
  11. package/dist/commonjs/components/Inspector/StorageTab.js +23 -5
  12. package/dist/commonjs/components/JsonViewer.js +14 -2
  13. package/dist/commonjs/components/LogCard.js +428 -227
  14. package/dist/commonjs/constants/version.d.ts +1 -1
  15. package/dist/commonjs/constants/version.js +1 -1
  16. package/dist/commonjs/customHooks/analyticsLogger.js +1 -1
  17. package/dist/commonjs/customHooks/consoleLogger.js +34 -2
  18. package/dist/commonjs/customHooks/crashHandler.js +1 -1
  19. package/dist/commonjs/customHooks/networkLogger.js +184 -26
  20. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  21. package/dist/commonjs/helpers/searchQueryParser.js +37 -291
  22. package/dist/commonjs/index.js +141 -27
  23. package/dist/esm/components/AnimatedEntrance.js +3 -3
  24. package/dist/esm/components/ConsoleLogCard.js +141 -100
  25. package/dist/esm/components/Inspector/ConsoleTab.js +25 -16
  26. package/dist/esm/components/Inspector/CrashTab.js +19 -5
  27. package/dist/esm/components/Inspector/DeviceInfoTab.js +198 -98
  28. package/dist/esm/components/Inspector/InspectorHeader.js +3 -3
  29. package/dist/esm/components/Inspector/MainScreen.js +56 -56
  30. package/dist/esm/components/Inspector/NetworkTab.js +2 -336
  31. package/dist/esm/components/Inspector/PerformanceTab.js +32 -6
  32. package/dist/esm/components/Inspector/ReduxTab.js +3 -1
  33. package/dist/esm/components/Inspector/StorageTab.js +23 -5
  34. package/dist/esm/components/JsonViewer.js +14 -2
  35. package/dist/esm/components/LogCard.js +422 -221
  36. package/dist/esm/constants/version.d.ts +1 -1
  37. package/dist/esm/constants/version.js +1 -1
  38. package/dist/esm/customHooks/analyticsLogger.js +1 -1
  39. package/dist/esm/customHooks/consoleLogger.js +34 -2
  40. package/dist/esm/customHooks/crashHandler.js +1 -1
  41. package/dist/esm/customHooks/networkLogger.js +184 -26
  42. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  43. package/dist/esm/helpers/searchQueryParser.js +37 -291
  44. package/dist/esm/index.js +141 -27
  45. package/package.json +1 -1
  46. package/src/components/AnimatedEntrance.tsx +3 -3
  47. package/src/components/ConsoleLogCard.tsx +154 -103
  48. package/src/components/Inspector/ConsoleTab.tsx +27 -18
  49. package/src/components/Inspector/CrashTab.tsx +19 -5
  50. package/src/components/Inspector/DeviceInfoTab.tsx +224 -102
  51. package/src/components/Inspector/InspectorHeader.tsx +5 -3
  52. package/src/components/Inspector/MainScreen.tsx +2 -3
  53. package/src/components/Inspector/NetworkTab.tsx +1 -402
  54. package/src/components/Inspector/PerformanceTab.tsx +36 -7
  55. package/src/components/Inspector/ReduxTab.tsx +9 -1
  56. package/src/components/Inspector/StorageTab.tsx +27 -7
  57. package/src/components/JsonViewer.tsx +15 -2
  58. package/src/components/LogCard.tsx +528 -339
  59. package/src/constants/version.ts +1 -1
  60. package/src/customHooks/analyticsLogger.ts +1 -1
  61. package/src/customHooks/consoleLogger.ts +36 -3
  62. package/src/customHooks/crashHandler.ts +1 -1
  63. package/src/customHooks/networkLogger.ts +214 -26
  64. package/src/helpers/searchQueryParser.ts +40 -285
  65. package/src/index.tsx +332 -211
@@ -377,19 +377,119 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
377
377
  (0, helpers_1.copyToClipboard)(md, 'Device Markdown Report');
378
378
  (0, toast_1.showToast)('Copied Markdown Report to Clipboard!');
379
379
  };
380
- const isMatch = (text) => {
380
+ const isMatch = (0, react_1.useCallback)((label, value, subtext) => {
381
381
  if (!search.trim())
382
382
  return true;
383
- return text.toLowerCase().includes(search.toLowerCase().trim());
384
- };
383
+ const query = search.toLowerCase().trim();
384
+ const strVal = value != null
385
+ ? typeof value === 'object'
386
+ ? JSON.stringify(value)
387
+ : String(value)
388
+ : '';
389
+ const strSub = subtext != null ? String(subtext) : '';
390
+ return (label.toLowerCase().includes(query) ||
391
+ strVal.toLowerCase().includes(query) ||
392
+ strSub.toLowerCase().includes(query));
393
+ }, [search]);
394
+ const hasHeroMatch = (0, react_1.useMemo)(() => {
395
+ if (!search.trim())
396
+ return true;
397
+ return (isMatch('Model', deviceMetrics?.deviceModel || react_native_1.Platform.constants?.Model) ||
398
+ isMatch('OS', react_native_1.Platform.OS) ||
399
+ isMatch('IP Address', ipAddress) ||
400
+ isMatch('RAM', `${usedRamMb}/${totalRamMb}`) ||
401
+ isMatch('Uptime', deviceUptime));
402
+ }, [search, isMatch, deviceMetrics, ipAddress, usedRamMb, totalRamMb, deviceUptime]);
403
+ const hasOverviewMatch = (0, react_1.useMemo)(() => {
404
+ if (!search.trim())
405
+ return true;
406
+ return (isMatch('Device Model', fullDeviceData.hardware.model) ||
407
+ isMatch('Manufacturer', fullDeviceData.hardware.brand) ||
408
+ isMatch('Operating System', fullDeviceData.hardware.osVersion) ||
409
+ isMatch('IP Address', ipAddress) ||
410
+ isMatch('RAM Memory', `${usedRamMb} MB / ${totalRamMb} MB (${ramUsagePct}%)`, `Free Memory: ${freeRamMb} MB`) ||
411
+ isMatch('Storage Capacity', `${freeStorageGb} GB Free / ${totalStorageGb} GB Total`) ||
412
+ isMatch('App Version', `v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`) ||
413
+ isMatch('JavaScript Engine', isHermes ? 'Hermes Bytecode Engine' : 'JavaScriptCore (JSC)') ||
414
+ isMatch('UDID Identifier', pseudoUDID));
415
+ }, [search, isMatch, fullDeviceData, ipAddress, usedRamMb, totalRamMb, ramUsagePct, freeRamMb, freeStorageGb, totalStorageGb, isHermes, pseudoUDID]);
416
+ const hasHardwareMatch = (0, react_1.useMemo)(() => {
417
+ if (!search.trim())
418
+ return true;
419
+ return (isMatch('CPU Architecture', fullDeviceData.hardware.cpuAbi) ||
420
+ isMatch('Total RAM', `${totalRamMb} MB`) ||
421
+ isMatch('Free RAM', `${freeRamMb} MB`) ||
422
+ isMatch('Storage Capacity', `${totalStorageGb} GB`) ||
423
+ isMatch('Available Storage', `${freeStorageGb} GB`) ||
424
+ isMatch('Battery', `${deviceMetrics?.batteryPercent ?? 100}%`) ||
425
+ isMatch('API Level', `API ${deviceMetrics?.apiLevel || react_native_1.Platform.Version}`) ||
426
+ isMatch('Thermal State', 'Nominal (Cool)'));
427
+ }, [search, isMatch, fullDeviceData, totalRamMb, freeRamMb, totalStorageGb, freeStorageGb, deviceMetrics]);
428
+ const hasNetworkMatch = (0, react_1.useMemo)(() => {
429
+ if (!search.trim())
430
+ return true;
431
+ return (isMatch('IP Address', ipAddress) ||
432
+ isMatch('Internet Reachability', 'Connected') ||
433
+ isMatch('Connection Type', 'Wi-Fi / Local Area Network') ||
434
+ isMatch('Metro Dev Server', react_native_1.NativeModules?.PlatformConstants?.serverHost || react_native_1.NativeModules?.AndroidConstants?.serverHost || 'localhost:8081') ||
435
+ isMatch('WebSocket Protocol', 'Active & Enabled') ||
436
+ isMatch('Network Inspector Interceptor', 'Intercepting XHR & Fetch'));
437
+ }, [search, isMatch, ipAddress]);
438
+ const hasDisplayMatch = (0, react_1.useMemo)(() => {
439
+ if (!search.trim())
440
+ return true;
441
+ return (isMatch('Window Resolution', `${windowDims.width.toFixed(0)} × ${windowDims.height.toFixed(0)} pt`) ||
442
+ isMatch('Screen Physical Size', `${(screenDims.width * pixelRatio).toFixed(0)} × ${(screenDims.height * pixelRatio).toFixed(0)} px`) ||
443
+ isMatch('Pixel Density', `@${pixelRatio}x (${Math.round(pixelRatio * 160)} dpi)`) ||
444
+ isMatch('Font Scale', `${fontScale}x`) ||
445
+ isMatch('Form Factor', isTablet ? 'Tablet' : 'Smartphone') ||
446
+ isMatch('Orientation', isLandscape ? 'Landscape' : 'Portrait') ||
447
+ isMatch('Status Bar Height', `${statusBarHeight} pt`));
448
+ }, [search, isMatch, windowDims, screenDims, pixelRatio, fontScale, isTablet, isLandscape, statusBarHeight]);
449
+ const hasRuntimeMatch = (0, react_1.useMemo)(() => {
450
+ if (!search.trim())
451
+ return true;
452
+ return (isMatch('App Name', fullDeviceData.runtime.appName) ||
453
+ isMatch('Bundle ID', fullDeviceData.identifiers.bundleId) ||
454
+ isMatch('App Version', `v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`) ||
455
+ isMatch('React Native', `v${reactNativeVersion}`) ||
456
+ isMatch('In-App Inspector Version', `v${constants_1.LIB_VERSION}`) ||
457
+ isMatch('Hermes Engine', isHermes ? 'Enabled (AOT Bytecode)' : 'Disabled (JSC)') ||
458
+ isMatch('New Architecture', isTurboModule ? 'Enabled' : 'Legacy Bridge') ||
459
+ isMatch('Build Type', __DEV__ ? 'Debug (__DEV__ = true)' : 'Release / Production') ||
460
+ isMatch('Timezone', fullDeviceData.runtime.timezone) ||
461
+ isMatch('Locale', fullDeviceData.runtime.locale) ||
462
+ isMatch('Session Uptime', deviceUptime));
463
+ }, [search, isMatch, fullDeviceData, reactNativeVersion, isHermes, isTurboModule, deviceUptime]);
464
+ const hasSecurityMatch = (0, react_1.useMemo)(() => {
465
+ if (!search.trim())
466
+ return true;
467
+ return (isMatch('Pseudo-UDID', pseudoUDID) ||
468
+ isMatch('Bundle ID', fullDeviceData.identifiers.bundleId) ||
469
+ isMatch('Root / Jailbreak', 'Clean (Standard Sandbox)') ||
470
+ isMatch('Simulator / Emulator', react_native_1.Platform.constants?.Model?.includes?.('sdk') || react_native_1.Platform.constants?.Model?.includes?.('Emulator') || react_native_1.Platform.constants?.Model?.includes?.('Simulator') ? 'Virtual Simulator' : 'Physical Device') ||
471
+ isMatch('Sandbox Integrity', 'Enforced by OS Kernel'));
472
+ }, [search, isMatch, pseudoUDID, fullDeviceData]);
385
473
  const hasAnyMatch = (0, react_1.useMemo)(() => {
386
474
  if (!search.trim())
387
475
  return true;
388
- const query = search.toLowerCase().trim();
389
- return (JSON.stringify(fullDeviceData).toLowerCase().includes(query) ||
390
- ipAddress.toLowerCase().includes(query) ||
391
- pseudoUDID.toLowerCase().includes(query));
392
- }, [search, fullDeviceData, ipAddress, pseudoUDID]);
476
+ return (hasHeroMatch ||
477
+ hasOverviewMatch ||
478
+ hasHardwareMatch ||
479
+ hasNetworkMatch ||
480
+ hasDisplayMatch ||
481
+ hasRuntimeMatch ||
482
+ hasSecurityMatch);
483
+ }, [
484
+ search,
485
+ hasHeroMatch,
486
+ hasOverviewMatch,
487
+ hasHardwareMatch,
488
+ hasNetworkMatch,
489
+ hasDisplayMatch,
490
+ hasRuntimeMatch,
491
+ hasSecurityMatch,
492
+ ]);
393
493
  return (<react_native_1.View style={styles.container}>
394
494
 
395
495
  <react_native_1.View style={styles.subTabsWrapper}>
@@ -434,154 +534,154 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
434
534
 
435
535
  <react_native_1.ScrollView style={styles.scrollArea} contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={false}>
436
536
 
437
- <react_native_1.View style={styles.heroCard}>
438
- <react_native_1.View style={styles.heroHeader}>
439
- <react_native_1.View style={styles.heroIconWrap}>
440
- {react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon size={20} color={AppColors_1.AppColors.white}/>) : (<NetworkIcons_1.AndroidIcon size={20} color={AppColors_1.AppColors.white}/>)}
441
- </react_native_1.View>
442
- <react_native_1.View style={{ flex: 1, minWidth: 0 }}>
443
- <react_native_1.Text style={styles.heroTitle} numberOfLines={1} ellipsizeMode="tail">
444
- {deviceMetrics?.deviceModel || react_native_1.Platform.constants?.Model || (react_native_1.Platform.OS === 'ios' ? 'Apple iPhone' : 'Android Device')}
445
- </react_native_1.Text>
446
- <react_native_1.Text style={styles.heroSubtitle} numberOfLines={1} ellipsizeMode="tail">
447
- {react_native_1.Platform.OS === 'ios' ? `iOS ${react_native_1.Platform.Version}` : `Android ${react_native_1.Platform.Version} (API ${deviceMetrics?.apiLevel || react_native_1.Platform.Version})`}
448
- </react_native_1.Text>
449
- </react_native_1.View>
450
- <react_native_1.View style={styles.heroBadge}>
451
- <react_native_1.View style={styles.pulseDot}/>
452
- <react_native_1.Text style={styles.heroBadgeText}>LIVE</react_native_1.Text>
537
+ {(!search.trim() || hasHeroMatch) && (<react_native_1.View style={styles.heroCard}>
538
+ <react_native_1.View style={styles.heroHeader}>
539
+ <react_native_1.View style={styles.heroIconWrap}>
540
+ {react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon size={20} color={AppColors_1.AppColors.white}/>) : (<NetworkIcons_1.AndroidIcon size={20} color={AppColors_1.AppColors.white}/>)}
541
+ </react_native_1.View>
542
+ <react_native_1.View style={{ flex: 1, minWidth: 0 }}>
543
+ <react_native_1.Text style={styles.heroTitle} numberOfLines={1} ellipsizeMode="tail">
544
+ {deviceMetrics?.deviceModel || react_native_1.Platform.constants?.Model || (react_native_1.Platform.OS === 'ios' ? 'Apple iPhone' : 'Android Device')}
545
+ </react_native_1.Text>
546
+ <react_native_1.Text style={styles.heroSubtitle} numberOfLines={1} ellipsizeMode="tail">
547
+ {react_native_1.Platform.OS === 'ios' ? `iOS ${react_native_1.Platform.Version}` : `Android ${react_native_1.Platform.Version} (API ${deviceMetrics?.apiLevel || react_native_1.Platform.Version})`}
548
+ </react_native_1.Text>
549
+ </react_native_1.View>
550
+ <react_native_1.View style={styles.heroBadge}>
551
+ <react_native_1.View style={styles.pulseDot}/>
552
+ <react_native_1.Text style={styles.heroBadgeText}>LIVE</react_native_1.Text>
553
+ </react_native_1.View>
453
554
  </react_native_1.View>
454
- </react_native_1.View>
455
555
 
456
-
457
- <react_native_1.View style={styles.heroMetricsStrip}>
458
- <react_native_1.View style={styles.heroMetricItem}>
459
- <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">IP ADDRESS</react_native_1.Text>
460
- <react_native_1.Text style={styles.heroMetricValue} numberOfLines={1} ellipsizeMode="tail">
461
- {ipAddress}
462
- </react_native_1.Text>
463
- </react_native_1.View>
464
- <react_native_1.View style={styles.heroMetricDivider}/>
465
- <react_native_1.View style={styles.heroMetricItem}>
466
- <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">RAM (USED/TOTAL)</react_native_1.Text>
467
- <react_native_1.Text style={styles.heroMetricValue} numberOfLines={1} ellipsizeMode="tail">
468
- {usedRamMb}/{totalRamMb} MB
469
- </react_native_1.Text>
470
- </react_native_1.View>
471
- <react_native_1.View style={styles.heroMetricDivider}/>
472
- <react_native_1.View style={styles.heroMetricItem}>
473
- <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">UPTIME</react_native_1.Text>
474
- <react_native_1.Text style={styles.heroMetricValue} numberOfLines={1} ellipsizeMode="tail">{deviceUptime}</react_native_1.Text>
556
+
557
+ <react_native_1.View style={styles.heroMetricsStrip}>
558
+ <react_native_1.View style={styles.heroMetricItem}>
559
+ <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">IP ADDRESS</react_native_1.Text>
560
+ <react_native_1.Text style={styles.heroMetricValue} numberOfLines={1} ellipsizeMode="tail">
561
+ {ipAddress}
562
+ </react_native_1.Text>
563
+ </react_native_1.View>
564
+ <react_native_1.View style={styles.heroMetricDivider}/>
565
+ <react_native_1.View style={styles.heroMetricItem}>
566
+ <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">RAM (USED/TOTAL)</react_native_1.Text>
567
+ <react_native_1.Text style={styles.heroMetricValue} numberOfLines={1} ellipsizeMode="tail">
568
+ {usedRamMb}/{totalRamMb} MB
569
+ </react_native_1.Text>
570
+ </react_native_1.View>
571
+ <react_native_1.View style={styles.heroMetricDivider}/>
572
+ <react_native_1.View style={styles.heroMetricItem}>
573
+ <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">UPTIME</react_native_1.Text>
574
+ <react_native_1.Text style={styles.heroMetricValue} numberOfLines={1} ellipsizeMode="tail">{deviceUptime}</react_native_1.Text>
575
+ </react_native_1.View>
475
576
  </react_native_1.View>
476
- </react_native_1.View>
477
- </react_native_1.View>
577
+ </react_native_1.View>)}
478
578
 
479
579
 
480
- {(activeSubTab === 'overview' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
580
+ {(activeSubTab === 'overview' || search.length > 0) && hasOverviewMatch && (<react_native_1.View style={styles.sectionCard}>
481
581
  <react_native_1.Text style={styles.sectionTitle}>DEVICE OVERVIEW</react_native_1.Text>
482
- {isMatch('Device Model') && (<InfoRow label="Device Model" value={fullDeviceData.hardware.model}/>)}
483
- {isMatch('Manufacturer') && (<InfoRow label="Manufacturer / Brand" value={fullDeviceData.hardware.brand}/>)}
484
- {isMatch('Operating System') && (<InfoRow label="Operating System" value={fullDeviceData.hardware.osVersion} badge={{ text: react_native_1.Platform.OS.toUpperCase(), color: AppColors_1.AppColors.blue500, bg: `${AppColors_1.AppColors.blue500}18` }}/>)}
485
- {isMatch('IP Address') && (<InfoRow label="Local IP Address" value={ipAddress} badge={{ text: 'ONLINE', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }}/>)}
486
- {isMatch('RAM Memory') && (<InfoRow label="RAM Memory" value={`${usedRamMb} MB / ${totalRamMb} MB (${ramUsagePct}%)`} subtext={`Free Memory: ${freeRamMb} MB`}/>)}
487
- {isMatch('Storage Capacity') && (<InfoRow label="Internal Storage" value={`${freeStorageGb} GB Free / ${totalStorageGb} GB Total`}/>)}
488
- {isMatch('App Version') && (<InfoRow label="Host App Version" value={`v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`}/>)}
489
- {isMatch('JavaScript Engine') && (<InfoRow label="JS Runtime Engine" value={isHermes ? 'Hermes Bytecode Engine' : 'JavaScriptCore (JSC)'} badge={isHermes
582
+ {isMatch('Device Model', fullDeviceData.hardware.model) && (<InfoRow label="Device Model" value={fullDeviceData.hardware.model}/>)}
583
+ {isMatch('Manufacturer', fullDeviceData.hardware.brand) && (<InfoRow label="Manufacturer / Brand" value={fullDeviceData.hardware.brand}/>)}
584
+ {isMatch('Operating System', fullDeviceData.hardware.osVersion) && (<InfoRow label="Operating System" value={fullDeviceData.hardware.osVersion} badge={{ text: react_native_1.Platform.OS.toUpperCase(), color: AppColors_1.AppColors.blue500, bg: `${AppColors_1.AppColors.blue500}18` }}/>)}
585
+ {isMatch('IP Address', ipAddress) && (<InfoRow label="Local IP Address" value={ipAddress} badge={{ text: 'ONLINE', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }}/>)}
586
+ {isMatch('RAM Memory', `${usedRamMb} MB / ${totalRamMb} MB (${ramUsagePct}%)`, `Free Memory: ${freeRamMb} MB`) && (<InfoRow label="RAM Memory" value={`${usedRamMb} MB / ${totalRamMb} MB (${ramUsagePct}%)`} subtext={`Free Memory: ${freeRamMb} MB`}/>)}
587
+ {isMatch('Storage Capacity', `${freeStorageGb} GB Free / ${totalStorageGb} GB Total`) && (<InfoRow label="Internal Storage" value={`${freeStorageGb} GB Free / ${totalStorageGb} GB Total`}/>)}
588
+ {isMatch('App Version', `v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`) && (<InfoRow label="Host App Version" value={`v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`}/>)}
589
+ {isMatch('JavaScript Engine', isHermes ? 'Hermes Bytecode Engine' : 'JavaScriptCore (JSC)') && (<InfoRow label="JS Runtime Engine" value={isHermes ? 'Hermes Bytecode Engine' : 'JavaScriptCore (JSC)'} badge={isHermes
490
590
  ? { text: 'HERMES', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }
491
591
  : { text: 'JSC', color: AppColors_1.AppColors.sky500, bg: `${AppColors_1.AppColors.sky500}18` }}/>)}
492
- {isMatch('UDID Identifier') && (<InfoRow label="Pseudo-UDID" value={pseudoUDID} isLast/>)}
592
+ {isMatch('UDID Identifier', pseudoUDID) && (<InfoRow label="Pseudo-UDID" value={pseudoUDID} isLast/>)}
493
593
  </react_native_1.View>)}
494
594
 
495
595
 
496
- {(activeSubTab === 'hardware' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
596
+ {(activeSubTab === 'hardware' || search.length > 0) && hasHardwareMatch && (<react_native_1.View style={styles.sectionCard}>
497
597
  <react_native_1.Text style={styles.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</react_native_1.Text>
498
- {isMatch('CPU Architecture') && (<InfoRow label="CPU Architecture / ABI" value={fullDeviceData.hardware.cpuAbi} badge={{ text: '64-BIT', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
499
- {isMatch('Total RAM') && (<InfoRow label="Total Physical RAM" value={`${totalRamMb} MB`}/>)}
500
- {isMatch('Free RAM') && (<InfoRow label="Available Free RAM" value={`${freeRamMb} MB`} badge={{
598
+ {isMatch('CPU Architecture', fullDeviceData.hardware.cpuAbi) && (<InfoRow label="CPU Architecture / ABI" value={fullDeviceData.hardware.cpuAbi} badge={{ text: '64-BIT', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
599
+ {isMatch('Total RAM', `${totalRamMb} MB`) && (<InfoRow label="Total Physical RAM" value={`${totalRamMb} MB`}/>)}
600
+ {isMatch('Free RAM', `${freeRamMb} MB`) && (<InfoRow label="Available Free RAM" value={`${freeRamMb} MB`} badge={{
501
601
  text: freeRamMb < 500 ? 'LOW' : 'HEALTHY',
502
602
  color: freeRamMb < 500 ? AppColors_1.AppColors.errorColor : AppColors_1.AppColors.emerald500,
503
603
  bg: freeRamMb < 500 ? `${AppColors_1.AppColors.errorColor}18` : `${AppColors_1.AppColors.emerald500}18`,
504
604
  }}/>)}
505
- {isMatch('Storage Capacity') && (<InfoRow label="Disk Storage Total" value={`${totalStorageGb} GB`}/>)}
506
- {isMatch('Available Storage') && (<InfoRow label="Disk Storage Available" value={`${freeStorageGb} GB`}/>)}
507
- {isMatch('Battery') && (<InfoRow label="Battery Level" value={`${deviceMetrics?.batteryPercent ?? 100}%`} badge={{
605
+ {isMatch('Storage Capacity', `${totalStorageGb} GB`) && (<InfoRow label="Disk Storage Total" value={`${totalStorageGb} GB`}/>)}
606
+ {isMatch('Available Storage', `${freeStorageGb} GB`) && (<InfoRow label="Disk Storage Available" value={`${freeStorageGb} GB`}/>)}
607
+ {isMatch('Battery', `${deviceMetrics?.batteryPercent ?? 100}%`) && (<InfoRow label="Battery Level" value={`${deviceMetrics?.batteryPercent ?? 100}%`} badge={{
508
608
  text: deviceMetrics?.isCharging ? 'CHARGING' : 'DISCHARGING',
509
609
  color: deviceMetrics?.isCharging ? AppColors_1.AppColors.emerald500 : AppColors_1.AppColors.grayText,
510
610
  bg: deviceMetrics?.isCharging ? `${AppColors_1.AppColors.emerald500}18` : `${AppColors_1.AppColors.grayText}18`,
511
611
  }}/>)}
512
- {isMatch('API Level') && react_native_1.Platform.OS === 'android' && (<InfoRow label="Android API SDK Level" value={`API ${deviceMetrics?.apiLevel || react_native_1.Platform.Version}`}/>)}
513
- {isMatch('Thermal State') && (<InfoRow label="Thermal State" value="Nominal (Cool)" badge={{ text: 'OPTIMAL', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }} isLast/>)}
612
+ {isMatch('API Level', `API ${deviceMetrics?.apiLevel || react_native_1.Platform.Version}`) && react_native_1.Platform.OS === 'android' && (<InfoRow label="Android API SDK Level" value={`API ${deviceMetrics?.apiLevel || react_native_1.Platform.Version}`}/>)}
613
+ {isMatch('Thermal State', 'Nominal (Cool)') && (<InfoRow label="Thermal State" value="Nominal (Cool)" badge={{ text: 'OPTIMAL', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }} isLast/>)}
514
614
  </react_native_1.View>)}
515
615
 
516
616
 
517
- {(activeSubTab === 'network' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
617
+ {(activeSubTab === 'network' || search.length > 0) && hasNetworkMatch && (<react_native_1.View style={styles.sectionCard}>
518
618
  <react_native_1.Text style={styles.sectionTitle}>NETWORK & CONNECTIVITY</react_native_1.Text>
519
- {isMatch('IP Address') && (<InfoRow label="Local Device IP" value={ipAddress} badge={{ text: 'IPV4', color: AppColors_1.AppColors.blue500, bg: `${AppColors_1.AppColors.blue500}18` }}/>)}
520
- {isMatch('Internet Reachability') && (<InfoRow label="Internet Reachability" value="Connected" badge={{ text: 'ONLINE', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }}/>)}
521
- {isMatch('Connection Type') && (<InfoRow label="Active Connection Type" value="Wi-Fi / Local Area Network"/>)}
522
- {isMatch('Metro Dev Server') && (<InfoRow label="Metro Packager Host" value={react_native_1.NativeModules?.PlatformConstants?.serverHost ||
619
+ {isMatch('IP Address', ipAddress) && (<InfoRow label="Local Device IP" value={ipAddress} badge={{ text: 'IPV4', color: AppColors_1.AppColors.blue500, bg: `${AppColors_1.AppColors.blue500}18` }}/>)}
620
+ {isMatch('Internet Reachability', 'Connected') && (<InfoRow label="Internet Reachability" value="Connected" badge={{ text: 'ONLINE', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }}/>)}
621
+ {isMatch('Connection Type', 'Wi-Fi / Local Area Network') && (<InfoRow label="Active Connection Type" value="Wi-Fi / Local Area Network"/>)}
622
+ {isMatch('Metro Dev Server', react_native_1.NativeModules?.PlatformConstants?.serverHost || react_native_1.NativeModules?.AndroidConstants?.serverHost || 'localhost:8081') && (<InfoRow label="Metro Packager Host" value={react_native_1.NativeModules?.PlatformConstants?.serverHost ||
523
623
  react_native_1.NativeModules?.AndroidConstants?.serverHost ||
524
624
  'localhost:8081'}/>)}
525
- {isMatch('WebSocket Protocol') && (<InfoRow label="WebSocket (WSS) Support" value="Active & Enabled"/>)}
526
- {isMatch('Network Inspector Interceptor') && (<InfoRow label="Network Interceptor Status" value="Intercepting XHR & Fetch" badge={{ text: 'MONITORING', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }} isLast/>)}
625
+ {isMatch('WebSocket Protocol', 'Active & Enabled') && (<InfoRow label="WebSocket (WSS) Support" value="Active & Enabled"/>)}
626
+ {isMatch('Network Inspector Interceptor', 'Intercepting XHR & Fetch') && (<InfoRow label="Network Interceptor Status" value="Intercepting XHR & Fetch" badge={{ text: 'MONITORING', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }} isLast/>)}
527
627
  </react_native_1.View>)}
528
628
 
529
629
 
530
- {(activeSubTab === 'display' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
630
+ {(activeSubTab === 'display' || search.length > 0) && hasDisplayMatch && (<react_native_1.View style={styles.sectionCard}>
531
631
  <react_native_1.Text style={styles.sectionTitle}>DISPLAY & SCREEN GEOMETRY</react_native_1.Text>
532
- {isMatch('Window Resolution') && (<InfoRow label="Window Logical Size" value={`${windowDims.width.toFixed(0)} × ${windowDims.height.toFixed(0)} pt`}/>)}
533
- {isMatch('Screen Physical Size') && (<InfoRow label="Physical Screen Size" value={`${(screenDims.width * pixelRatio).toFixed(0)} × ${(screenDims.height * pixelRatio).toFixed(0)} px`}/>)}
534
- {isMatch('Pixel Density') && (<InfoRow label="Pixel Ratio (DPI Scale)" value={`@${pixelRatio}x (${Math.round(pixelRatio * 160)} dpi)`} badge={{ text: `@${pixelRatio}x`, color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
535
- {isMatch('Font Scale') && (<InfoRow label="User Font Scale" value={`${fontScale}x (${fontScale === 1 ? 'Default' : fontScale > 1 ? 'Enlarged' : 'Compact'})`}/>)}
536
- {isMatch('Form Factor') && (<InfoRow label="Device Form Factor" value={isTablet ? 'Tablet' : 'Smartphone'} badge={{
632
+ {isMatch('Window Resolution', `${windowDims.width.toFixed(0)} × ${windowDims.height.toFixed(0)} pt`) && (<InfoRow label="Window Logical Size" value={`${windowDims.width.toFixed(0)} × ${windowDims.height.toFixed(0)} pt`}/>)}
633
+ {isMatch('Screen Physical Size', `${(screenDims.width * pixelRatio).toFixed(0)} × ${(screenDims.height * pixelRatio).toFixed(0)} px`) && (<InfoRow label="Physical Screen Size" value={`${(screenDims.width * pixelRatio).toFixed(0)} × ${(screenDims.height * pixelRatio).toFixed(0)} px`}/>)}
634
+ {isMatch('Pixel Density', `@${pixelRatio}x (${Math.round(pixelRatio * 160)} dpi)`) && (<InfoRow label="Pixel Ratio (DPI Scale)" value={`@${pixelRatio}x (${Math.round(pixelRatio * 160)} dpi)`} badge={{ text: `@${pixelRatio}x`, color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
635
+ {isMatch('Font Scale', `${fontScale}x`) && (<InfoRow label="User Font Scale" value={`${fontScale}x (${fontScale === 1 ? 'Default' : fontScale > 1 ? 'Enlarged' : 'Compact'})`}/>)}
636
+ {isMatch('Form Factor', isTablet ? 'Tablet' : 'Smartphone') && (<InfoRow label="Device Form Factor" value={isTablet ? 'Tablet' : 'Smartphone'} badge={{
537
637
  text: isTablet ? 'TABLET' : 'PHONE',
538
638
  color: isTablet ? AppColors_1.AppColors.blue500 : AppColors_1.AppColors.purple,
539
639
  bg: isTablet ? `${AppColors_1.AppColors.blue500}18` : `${AppColors_1.AppColors.purple}18`,
540
640
  }}/>)}
541
- {isMatch('Orientation') && (<InfoRow label="Screen Orientation" value={isLandscape ? 'Landscape' : 'Portrait'}/>)}
542
- {isMatch('Status Bar Height') && (<InfoRow label="Status Bar Inset" value={`${statusBarHeight} pt`} isLast/>)}
641
+ {isMatch('Orientation', isLandscape ? 'Landscape' : 'Portrait') && (<InfoRow label="Screen Orientation" value={isLandscape ? 'Landscape' : 'Portrait'}/>)}
642
+ {isMatch('Status Bar Height', `${statusBarHeight} pt`) && (<InfoRow label="Status Bar Inset" value={`${statusBarHeight} pt`} isLast/>)}
543
643
  </react_native_1.View>)}
544
644
 
545
645
 
546
- {(activeSubTab === 'runtime' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
646
+ {(activeSubTab === 'runtime' || search.length > 0) && hasRuntimeMatch && (<react_native_1.View style={styles.sectionCard}>
547
647
  <react_native_1.Text style={styles.sectionTitle}>RUNTIME & APPLICATION</react_native_1.Text>
548
- {isMatch('App Name') && (<InfoRow label="Application Name" value={fullDeviceData.runtime.appName}/>)}
549
- {isMatch('Bundle ID') && (<InfoRow label="Bundle Identifier / Package" value={fullDeviceData.identifiers.bundleId}/>)}
550
- {isMatch('App Version') && (<InfoRow label="Application Version" value={`v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`}/>)}
551
- {isMatch('React Native') && (<InfoRow label="React Native Framework" value={`v${reactNativeVersion}`} badge={{ text: 'RN', color: AppColors_1.AppColors.sky500, bg: `${AppColors_1.AppColors.sky500}18` }}/>)}
552
- {isMatch('In-App Inspector Version') && (<InfoRow label="In-App Inspector Library" value={`v${constants_1.LIB_VERSION}`} badge={{ text: 'LATEST', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
553
- {isMatch('Hermes Engine') && (<InfoRow label="Hermes JavaScript Engine" value={isHermes ? 'Enabled (AOT Bytecode)' : 'Disabled (JSC)'} badge={{
648
+ {isMatch('App Name', fullDeviceData.runtime.appName) && (<InfoRow label="Application Name" value={fullDeviceData.runtime.appName}/>)}
649
+ {isMatch('Bundle ID', fullDeviceData.identifiers.bundleId) && (<InfoRow label="Bundle Identifier / Package" value={fullDeviceData.identifiers.bundleId}/>)}
650
+ {isMatch('App Version', `v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`) && (<InfoRow label="Application Version" value={`v${fullDeviceData.runtime.appVersion} (${fullDeviceData.runtime.appBuild})`}/>)}
651
+ {isMatch('React Native', `v${reactNativeVersion}`) && (<InfoRow label="React Native Framework" value={`v${reactNativeVersion}`} badge={{ text: 'RN', color: AppColors_1.AppColors.sky500, bg: `${AppColors_1.AppColors.sky500}18` }}/>)}
652
+ {isMatch('In-App Inspector Version', `v${constants_1.LIB_VERSION}`) && (<InfoRow label="In-App Inspector Library" value={`v${constants_1.LIB_VERSION}`} badge={{ text: 'LATEST', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
653
+ {isMatch('Hermes Engine', isHermes ? 'Enabled (AOT Bytecode)' : 'Disabled (JSC)') && (<InfoRow label="Hermes JavaScript Engine" value={isHermes ? 'Enabled (AOT Bytecode)' : 'Disabled (JSC)'} badge={{
554
654
  text: isHermes ? 'HERMES' : 'JSC',
555
655
  color: isHermes ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayText,
556
656
  bg: isHermes ? `${AppColors_1.AppColors.purple}18` : `${AppColors_1.AppColors.grayText}18`,
557
657
  }}/>)}
558
- {isMatch('New Architecture') && (<InfoRow label="Bridgeless TurboModules (New Arch)" value={isTurboModule ? 'Enabled' : 'Legacy Bridge'} badge={{
658
+ {isMatch('New Architecture', isTurboModule ? 'Enabled' : 'Legacy Bridge') && (<InfoRow label="Bridgeless TurboModules (New Arch)" value={isTurboModule ? 'Enabled' : 'Legacy Bridge'} badge={{
559
659
  text: isTurboModule ? 'NEW ARCH' : 'LEGACY',
560
660
  color: isTurboModule ? AppColors_1.AppColors.emerald500 : AppColors_1.AppColors.blue500,
561
661
  bg: isTurboModule ? `${AppColors_1.AppColors.emerald500}18` : `${AppColors_1.AppColors.blue500}18`,
562
662
  }}/>)}
563
- {isMatch('Build Type') && (<InfoRow label="Build Configuration" value={__DEV__ ? 'Debug (__DEV__ = true)' : 'Release / Production'} badge={{
663
+ {isMatch('Build Type', __DEV__ ? 'Debug (__DEV__ = true)' : 'Release / Production') && (<InfoRow label="Build Configuration" value={__DEV__ ? 'Debug (__DEV__ = true)' : 'Release / Production'} badge={{
564
664
  text: __DEV__ ? 'DEBUG' : 'RELEASE',
565
665
  color: __DEV__ ? AppColors_1.AppColors.warningIconGold : AppColors_1.AppColors.emerald500,
566
666
  bg: __DEV__ ? `${AppColors_1.AppColors.warningIconGold}18` : `${AppColors_1.AppColors.emerald500}18`,
567
667
  }}/>)}
568
- {isMatch('Timezone') && (<InfoRow label="System Timezone" value={fullDeviceData.runtime.timezone}/>)}
569
- {isMatch('Locale') && (<InfoRow label="System Language & Locale" value={fullDeviceData.runtime.locale}/>)}
570
- {isMatch('Session Uptime') && (<InfoRow label="Inspector Session Uptime" value={deviceUptime} isLast/>)}
668
+ {isMatch('Timezone', fullDeviceData.runtime.timezone) && (<InfoRow label="System Timezone" value={fullDeviceData.runtime.timezone}/>)}
669
+ {isMatch('Locale', fullDeviceData.runtime.locale) && (<InfoRow label="System Language & Locale" value={fullDeviceData.runtime.locale}/>)}
670
+ {isMatch('Session Uptime', deviceUptime) && (<InfoRow label="Inspector Session Uptime" value={deviceUptime} isLast/>)}
571
671
  </react_native_1.View>)}
572
672
 
573
673
 
574
- {(activeSubTab === 'security' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
674
+ {(activeSubTab === 'security' || search.length > 0) && hasSecurityMatch && (<react_native_1.View style={styles.sectionCard}>
575
675
  <react_native_1.Text style={styles.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</react_native_1.Text>
576
- {isMatch('Pseudo-UDID') && (<InfoRow label="Deterministic Pseudo-UDID" value={pseudoUDID} subtext="Stable hardware signature hash for testing & diagnostics" badge={{ text: 'PERSISTENT', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
577
- {isMatch('Bundle ID') && (<InfoRow label="Application Bundle ID" value={fullDeviceData.identifiers.bundleId}/>)}
578
- {isMatch('Root / Jailbreak') && (<InfoRow label="Root / Jailbreak Heuristic" value="Clean (Standard Sandbox)" badge={{ text: 'SECURE', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }}/>)}
579
- {isMatch('Simulator / Emulator') && (<InfoRow label="Emulator / Physical Device" value={react_native_1.Platform.constants?.Model?.includes?.('sdk') ||
676
+ {isMatch('Pseudo-UDID', pseudoUDID) && (<InfoRow label="Deterministic Pseudo-UDID" value={pseudoUDID} subtext="Stable hardware signature hash for testing & diagnostics" badge={{ text: 'PERSISTENT', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
677
+ {isMatch('Bundle ID', fullDeviceData.identifiers.bundleId) && (<InfoRow label="Application Bundle ID" value={fullDeviceData.identifiers.bundleId}/>)}
678
+ {isMatch('Root / Jailbreak', 'Clean (Standard Sandbox)') && (<InfoRow label="Root / Jailbreak Heuristic" value="Clean (Standard Sandbox)" badge={{ text: 'SECURE', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }}/>)}
679
+ {isMatch('Simulator / Emulator', react_native_1.Platform.constants?.Model?.includes?.('sdk') || react_native_1.Platform.constants?.Model?.includes?.('Emulator') || react_native_1.Platform.constants?.Model?.includes?.('Simulator') ? 'Virtual Simulator' : 'Physical Device') && (<InfoRow label="Emulator / Physical Device" value={react_native_1.Platform.constants?.Model?.includes?.('sdk') ||
580
680
  react_native_1.Platform.constants?.Model?.includes?.('Emulator') ||
581
681
  react_native_1.Platform.constants?.Model?.includes?.('Simulator')
582
682
  ? 'Virtual Simulator'
583
683
  : 'Physical Device'}/>)}
584
- {isMatch('Sandbox Integrity') && (<InfoRow label="App Sandbox File Isolation" value="Enforced by OS Kernel" isLast/>)}
684
+ {isMatch('Sandbox Integrity', 'Enforced by OS Kernel') && (<InfoRow label="App Sandbox File Isolation" value="Enforced by OS Kernel" isLast/>)}
585
685
  </react_native_1.View>)}
586
686
 
587
687
 
@@ -802,7 +802,7 @@ const InspectorHeader = react_1.default.memo(() => {
802
802
  <NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
803
803
  </TouchableScale_1.default>)}
804
804
 
805
- <TouchableScale_1.default onPress={closeModal} hitSlop={15} style={[
805
+ <react_native_1.TouchableOpacity onPress={closeModal} hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }} activeOpacity={0.6} style={[
806
806
  styles_1.default.closeButtonSquare,
807
807
  {
808
808
  width: buttonSize,
@@ -811,7 +811,7 @@ const InspectorHeader = react_1.default.memo(() => {
811
811
  },
812
812
  ]}>
813
813
  <NetworkIcons_1.CloseWhite size={isNarrow ? 12 : 14}/>
814
- </TouchableScale_1.default>
814
+ </react_native_1.TouchableOpacity>
815
815
  </react_native_1.View>
816
816
  </react_native_1.View>
817
817
  </react_native_1.View>
@@ -110,18 +110,18 @@ const MainScreen = () => {
110
110
  enabled &&
111
111
  !visible &&
112
112
  !useNativeFab && <FabLauncher_1.default />}
113
- <react_native_1.Modal visible={visible} animationType={modalAnimationType} transparent statusBarTranslucent={true}>
114
- {visible && (<ErrorBoundary_1.default onClose={closeModal}>
113
+ <react_native_1.Modal visible={visible} animationType={modalAnimationType} transparent statusBarTranslucent={true} onRequestClose={closeModal}>
114
+ <ErrorBoundary_1.default onClose={closeModal}>
115
115
  <react_native_1.View style={styles_1.default.modalBackdrop}>
116
116
  <react_native_1.Pressable style={styles_1.default.modalBackdropPressable} onPress={closeModal}/>
117
117
  <react_native_1.View style={[
118
- styles_1.default.modalContentCard,
119
- {
120
- height: `${modalHeightPercent}%`,
121
- borderTopLeftRadius: modalHeightPercent >= 100 ? 0 : 20,
122
- borderTopRightRadius: modalHeightPercent >= 100 ? 0 : 20,
123
- },
124
- ]}>
118
+ styles_1.default.modalContentCard,
119
+ {
120
+ height: `${modalHeightPercent}%`,
121
+ borderTopLeftRadius: modalHeightPercent >= 100 ? 0 : 20,
122
+ borderTopRightRadius: modalHeightPercent >= 100 ? 0 : 20,
123
+ },
124
+ ]}>
125
125
  <react_native_1.StatusBar translucent backgroundColor="transparent" barStyle="light-content"/>
126
126
 
127
127
  <InspectorHeader_1.default />
@@ -133,22 +133,22 @@ const MainScreen = () => {
133
133
  {isReady ? (<react_native_1.View style={{ flex: 1 }}>
134
134
 
135
135
  <react_native_1.Animated.View style={[
136
- {
137
- flex: 1,
138
- opacity: tabAnim,
139
- transform: [
140
- {
141
- translateY: tabAnim.interpolate({
142
- inputRange: [0, 1],
143
- outputRange: [6, 0],
144
- }),
145
- },
146
- ],
147
- },
148
- (isDetailActive || settingsPage !== null) && {
149
- pointerEvents: 'none',
150
- },
151
- ]}>
136
+ {
137
+ flex: 1,
138
+ opacity: tabAnim,
139
+ transform: [
140
+ {
141
+ translateY: tabAnim.interpolate({
142
+ inputRange: [0, 1],
143
+ outputRange: [6, 0],
144
+ }),
145
+ },
146
+ ],
147
+ },
148
+ (isDetailActive || settingsPage !== null) && {
149
+ pointerEvents: 'none',
150
+ },
151
+ ]}>
152
152
  {activeTab === 'apis' && <NetworkTab_1.default />}
153
153
  {activeTab === 'logs' && <ConsoleTab_1.default />}
154
154
  {activeTab === 'analytics' && <AnalyticsTab_1.default />}
@@ -159,50 +159,50 @@ const MainScreen = () => {
159
159
  {activeTab === 'device' && <DeviceInfoTab_1.default />}
160
160
  {activeTab === 'storage' && <StorageTab_1.default />}
161
161
  {react_native_1.Platform.OS === 'android' &&
162
- (0, helpers_1.isLocalDebugEnvironment)() &&
163
- activeTab === 'debugging' && <DebuggingTab_1.default />}
162
+ (0, helpers_1.isLocalDebugEnvironment)() &&
163
+ activeTab === 'debugging' && <DebuggingTab_1.default />}
164
164
  </react_native_1.Animated.View>
165
165
 
166
166
 
167
167
  {isDetailActive && (<react_native_1.Animated.View style={[
168
- react_native_1.StyleSheet.absoluteFill,
169
- {
170
- backgroundColor: AppColors_1.AppColors.contentBg,
171
- opacity: detailAnim,
172
- transform: [
173
- {
174
- translateX: detailAnim.interpolate({
175
- inputRange: [0, 1],
176
- outputRange: [32, 0],
177
- }),
178
- },
179
- ],
180
- },
181
- ]}>
182
- {activeTab === 'apis' && selected != null && (<NetworkDetail_1.default />)}
183
- {activeTab === 'analytics' && selectedEvent != null && (<AnalyticsDetail_1.default event={selectedEvent}/>)}
184
- {activeTab === 'logs' && selectedLog != null && (<LogDetail_1.default />)}
185
- {activeTab === 'redux' && <ReduxDetail_1.default />}
186
- {activeTab === 'crash' && selectedCrash != null && (<CrashDetail_1.default />)}
187
- </react_native_1.Animated.View>)}
188
- </react_native_1.View>) : (<MainScreenSkeleton />)}
189
-
190
-
191
- {settingsPage !== null && (<react_native_1.Animated.View style={[
192
168
  react_native_1.StyleSheet.absoluteFill,
193
169
  {
194
- backgroundColor: AppColors_1.AppColors.grayBackground,
195
- opacity: settingsAnim,
170
+ backgroundColor: AppColors_1.AppColors.contentBg,
171
+ opacity: detailAnim,
196
172
  transform: [
197
173
  {
198
- translateY: settingsAnim.interpolate({
174
+ translateX: detailAnim.interpolate({
199
175
  inputRange: [0, 1],
200
- outputRange: [24, 0],
176
+ outputRange: [32, 0],
201
177
  }),
202
178
  },
203
179
  ],
204
180
  },
205
181
  ]}>
182
+ {activeTab === 'apis' && selected != null && (<NetworkDetail_1.default />)}
183
+ {activeTab === 'analytics' && selectedEvent != null && (<AnalyticsDetail_1.default event={selectedEvent}/>)}
184
+ {activeTab === 'logs' && selectedLog != null && (<LogDetail_1.default />)}
185
+ {activeTab === 'redux' && <ReduxDetail_1.default />}
186
+ {activeTab === 'crash' && selectedCrash != null && (<CrashDetail_1.default />)}
187
+ </react_native_1.Animated.View>)}
188
+ </react_native_1.View>) : (<MainScreenSkeleton />)}
189
+
190
+
191
+ {settingsPage !== null && (<react_native_1.Animated.View style={[
192
+ react_native_1.StyleSheet.absoluteFill,
193
+ {
194
+ backgroundColor: AppColors_1.AppColors.grayBackground,
195
+ opacity: settingsAnim,
196
+ transform: [
197
+ {
198
+ translateY: settingsAnim.interpolate({
199
+ inputRange: [0, 1],
200
+ outputRange: [24, 0],
201
+ }),
202
+ },
203
+ ],
204
+ },
205
+ ]}>
206
206
  <SettingsPanel_1.default />
207
207
  </react_native_1.Animated.View>)}
208
208
  </react_native_1.View>
@@ -214,7 +214,7 @@ const MainScreen = () => {
214
214
  <NpmUpdateToast_1.default />
215
215
  </react_native_1.View>
216
216
  </react_native_1.View>
217
- </ErrorBoundary_1.default>)}
217
+ </ErrorBoundary_1.default>
218
218
  {hasNavigationContext && (<NavigationTracker_1.default onStateChange={setNavState}/>)}
219
219
  </react_native_1.Modal>
220
220
  </>);