react-native-inapp-inspector 2.0.6 → 2.1.0

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 (96) hide show
  1. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +0 -11
  2. package/dist/commonjs/components/Inspector/InspectorHeader.js +25 -28
  3. package/dist/commonjs/components/Inspector/MainScreen.js +2 -15
  4. package/dist/commonjs/components/Inspector/NetworkDetail.js +0 -15
  5. package/dist/commonjs/components/Inspector/PerformanceTab.js +18 -30
  6. package/dist/commonjs/components/Inspector/SettingsPanel.js +15 -326
  7. package/dist/commonjs/components/Inspector/TabBar.js +2 -23
  8. package/dist/commonjs/components/NetworkIcons.d.ts +0 -12
  9. package/dist/commonjs/components/NetworkIcons.js +3 -72
  10. package/dist/commonjs/constants/version.d.ts +1 -1
  11. package/dist/commonjs/constants/version.js +1 -1
  12. package/dist/commonjs/helpers/index.d.ts +0 -2
  13. package/dist/commonjs/helpers/index.js +1 -12
  14. package/dist/commonjs/helpers/telemetry.js +4 -4
  15. package/dist/commonjs/i18n/locales/en.json +2 -3
  16. package/dist/commonjs/index.d.ts +0 -1
  17. package/dist/commonjs/index.js +9 -113
  18. package/dist/commonjs/native/NativeInspector.d.ts +0 -1
  19. package/dist/commonjs/types/enums.d.ts +0 -7
  20. package/dist/commonjs/types/enums.js +0 -7
  21. package/dist/commonjs/types/interfaces.d.ts +0 -73
  22. package/dist/esm/components/Inspector/InspectorHeader.js +25 -28
  23. package/dist/esm/components/Inspector/MainScreen.js +2 -15
  24. package/dist/esm/components/Inspector/NetworkDetail.js +1 -16
  25. package/dist/esm/components/Inspector/PerformanceTab.js +19 -31
  26. package/dist/esm/components/Inspector/SettingsPanel.js +16 -327
  27. package/dist/esm/components/Inspector/TabBar.js +3 -24
  28. package/dist/esm/components/NetworkIcons.d.ts +0 -12
  29. package/dist/esm/components/NetworkIcons.js +0 -57
  30. package/dist/esm/constants/version.d.ts +1 -1
  31. package/dist/esm/constants/version.js +1 -1
  32. package/dist/esm/helpers/index.d.ts +0 -2
  33. package/dist/esm/helpers/index.js +0 -10
  34. package/dist/esm/helpers/telemetry.js +4 -4
  35. package/dist/esm/i18n/locales/en.json +2 -3
  36. package/dist/esm/index.d.ts +0 -1
  37. package/dist/esm/index.js +8 -109
  38. package/dist/esm/native/NativeInspector.d.ts +0 -1
  39. package/dist/esm/types/enums.d.ts +0 -7
  40. package/dist/esm/types/enums.js +0 -7
  41. package/dist/esm/types/interfaces.d.ts +0 -73
  42. package/ios/NetworkInspectorModule.mm +5 -12
  43. package/package.json +1 -4
  44. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  45. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  46. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  47. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  48. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  49. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  50. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  51. package/android/.gradle/8.9/gc.properties +0 -0
  52. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  53. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  54. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  55. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  56. package/android/.gradle/9.2.0/gc.properties +0 -0
  57. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  58. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  59. package/android/.gradle/vcs-1/gc.properties +0 -0
  60. package/android/build/reports/problems/problems-report.html +0 -659
  61. package/dist/commonjs/components/Inspector/AuditTab.d.ts +0 -3
  62. package/dist/commonjs/components/Inspector/AuditTab.js +0 -741
  63. package/dist/commonjs/components/Inspector/DeviceTab.d.ts +0 -3
  64. package/dist/commonjs/components/Inspector/DeviceTab.js +0 -717
  65. package/dist/commonjs/components/Inspector/PerformanceHud.d.ts +0 -7
  66. package/dist/commonjs/components/Inspector/PerformanceHud.js +0 -210
  67. package/dist/commonjs/components/Inspector/RequestReplayModal.d.ts +0 -9
  68. package/dist/commonjs/components/Inspector/RequestReplayModal.js +0 -792
  69. package/dist/commonjs/components/Inspector/RequestReplayView.d.ts +0 -8
  70. package/dist/commonjs/components/Inspector/RequestReplayView.js +0 -871
  71. package/dist/commonjs/components/Inspector/StorageTab.d.ts +0 -3
  72. package/dist/commonjs/components/Inspector/StorageTab.js +0 -610
  73. package/dist/commonjs/customHooks/storageInspector.d.ts +0 -13
  74. package/dist/commonjs/customHooks/storageInspector.js +0 -179
  75. package/dist/commonjs/helpers/deviceInfo.d.ts +0 -4
  76. package/dist/commonjs/helpers/deviceInfo.js +0 -94
  77. package/dist/commonjs/helpers/packageAuditor.d.ts +0 -5
  78. package/dist/commonjs/helpers/packageAuditor.js +0 -182
  79. package/dist/esm/components/Inspector/AuditTab.d.ts +0 -3
  80. package/dist/esm/components/Inspector/AuditTab.js +0 -702
  81. package/dist/esm/components/Inspector/DeviceTab.d.ts +0 -3
  82. package/dist/esm/components/Inspector/DeviceTab.js +0 -678
  83. package/dist/esm/components/Inspector/PerformanceHud.d.ts +0 -7
  84. package/dist/esm/components/Inspector/PerformanceHud.js +0 -170
  85. package/dist/esm/components/Inspector/RequestReplayModal.d.ts +0 -9
  86. package/dist/esm/components/Inspector/RequestReplayModal.js +0 -752
  87. package/dist/esm/components/Inspector/RequestReplayView.d.ts +0 -8
  88. package/dist/esm/components/Inspector/RequestReplayView.js +0 -831
  89. package/dist/esm/components/Inspector/StorageTab.d.ts +0 -3
  90. package/dist/esm/components/Inspector/StorageTab.js +0 -571
  91. package/dist/esm/customHooks/storageInspector.d.ts +0 -13
  92. package/dist/esm/customHooks/storageInspector.js +0 -170
  93. package/dist/esm/helpers/deviceInfo.d.ts +0 -4
  94. package/dist/esm/helpers/deviceInfo.js +0 -89
  95. package/dist/esm/helpers/packageAuditor.d.ts +0 -5
  96. package/dist/esm/helpers/packageAuditor.js +0 -173
@@ -16,11 +16,9 @@ import { AppColors } from '../../styles/AppColors';
16
16
  import { AppFonts } from '../../styles/AppFonts';
17
17
  import { METHOD_COLORS } from '../../constants';
18
18
  import { getStatusColor, getSize, formatDateTime, getFetchCommand, getCurlCommand, } from '../../helpers';
19
- import { FailIcon, StatusIcon, HeadersIcon, RequestIcon, ResponseIcon, DownloadIcon, ClearIcon, SizeIcon, ExternalLinkIcon, ClockIcon, ReplayIcon, } from '../NetworkIcons';
20
- import RequestReplayView from './RequestReplayView';
19
+ import { FailIcon, StatusIcon, HeadersIcon, RequestIcon, ResponseIcon, DownloadIcon, ClearIcon, SizeIcon, ExternalLinkIcon, ClockIcon, } from '../NetworkIcons';
21
20
  const NetworkDetail = React.memo(() => {
22
21
  const { t } = useTranslation();
23
- const [isReplayScreenActive, setIsReplayScreenActive] = React.useState(false);
24
22
  const { selected, detailDisplayUrl, apiDetailActiveTab, setApiDetailActiveTab, detailSearch, setDetailSearch, reqExpanded, setReqExpanded, resExpanded, setResExpanded, showReqDiff, setShowReqDiff, showResDiff, setShowResDiff, prevRequestData, prevResponseData, logRouteMapRef, } = useInspector();
25
23
  const handleOpenUrl = () => {
26
24
  Alert.alert(t('common.openInBrowser') || 'Open in Browser', `${t('common.openInBrowserPrompt') || 'Are you sure you want to open this URL in your external browser?'}\n\n${detailDisplayUrl}`, [
@@ -44,9 +42,6 @@ const NetworkDetail = React.memo(() => {
44
42
  };
45
43
  if (!selected)
46
44
  return null;
47
- if (isReplayScreenActive) {
48
- return (<RequestReplayView request={selected} onBack={() => setIsReplayScreenActive(false)}/>);
49
- }
50
45
  return (<View style={{ flex: 1 }}>
51
46
  {/* Non-scrollable details header */}
52
47
  <View style={{ paddingHorizontal: 6, paddingTop: 4 }}>
@@ -252,16 +247,6 @@ const NetworkDetail = React.memo(() => {
252
247
  </View>
253
248
 
254
249
  <View style={styles.detailInfoRight}>
255
- <TouchableScale style={[
256
- styles.iconSquareBtn,
257
- {
258
- backgroundColor: `${AppColors.purple}15`,
259
- borderColor: `${AppColors.purple}30`,
260
- borderWidth: 1,
261
- },
262
- ]} onPress={() => setIsReplayScreenActive(true)} accessible={true} accessibilityRole="button" accessibilityLabel="Edit & Resend Request" hitSlop={12}>
263
- <ReplayIcon color={AppColors.purple} size={14}/>
264
- </TouchableScale>
265
250
  <TouchableScale style={[styles.iconSquareBtn, { backgroundColor: `${AppColors.sky600}15` }]} onPress={handleOpenUrl} hitSlop={12}>
266
251
  <ExternalLinkIcon color={AppColors.sky600} size={14}/>
267
252
  </TouchableScale>
@@ -9,7 +9,7 @@ import { AppColors } from '../../styles/AppColors';
9
9
  import { AppFonts } from '../../styles/AppFonts';
10
10
  import { useTranslation } from '../../i18n';
11
11
  import { getRuntimeDiagnostics } from '../../helpers';
12
- import { SearchIcon, CircleXIcon, PerformanceIcon, BoltIcon, LightbulbIcon, WarningTriangleIcon, MapIcon, AtomIcon, BrainIcon, GlobeIcon, SparklesIcon, } from '../NetworkIcons';
12
+ import { SearchIcon, CircleXIcon, PerformanceIcon, BoltIcon, LightbulbIcon, } from '../NetworkIcons';
13
13
  import { getPerformanceEvents, subscribePerformanceEvents, logPerformanceEvent, clearPerformanceEvents, } from '../../customHooks/performanceTracker';
14
14
  import { startNativeFpsMonitoring, stopNativeFpsMonitoring, getNativeFpsMetrics, getNativeSystemMetrics, isNativeModuleAvailable, } from '../../native/NativeInspector';
15
15
  const PerformanceTab = React.memo(() => {
@@ -373,33 +373,24 @@ const PerformanceTab = React.memo(() => {
373
373
  <View style={perfStyles.categoryScrollWrapper}>
374
374
  <ScrollView horizontal showsHorizontalScrollIndicator={false} style={perfStyles.categoryScrollView} contentContainerStyle={perfStyles.categoryScroll}>
375
375
  {[
376
- { key: 'ALL', label: t('performance.catAll'), icon: 'all' },
377
- { key: 'JANKY', label: t('performance.catJanky'), icon: 'janky' },
378
- { key: 'NAVIGATION', label: t('performance.catNavigation'), icon: 'nav' },
379
- { key: 'RENDER', label: t('performance.catRender'), icon: 'render' },
380
- { key: 'MEMORY', label: t('performance.catMemory'), icon: 'memory' },
381
- { key: 'IO', label: t('performance.catIo'), icon: 'io' },
376
+ { key: 'ALL', label: t('performance.catAll') },
377
+ { key: 'JANKY', label: t('performance.catJanky') },
378
+ { key: 'NAVIGATION', label: t('performance.catNavigation') },
379
+ { key: 'RENDER', label: t('performance.catRender') },
380
+ { key: 'MEMORY', label: t('performance.catMemory') },
381
+ { key: 'IO', label: t('performance.catIo') },
382
382
  ].map(cat => {
383
383
  const isSelected = filterCategory === cat.key;
384
- const iconColor = isSelected ? AppColors.white : AppColors.grayText;
385
384
  return (<TouchableScale key={cat.key} onPress={() => setFilterCategory(cat.key)} style={[
386
385
  perfStyles.categoryChip,
387
386
  isSelected && perfStyles.categoryChipActive,
388
387
  ]}>
389
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
390
- {cat.icon === 'all' && <SparklesIcon size={12} color={iconColor}/>}
391
- {cat.icon === 'janky' && <WarningTriangleIcon size={12} color={isSelected ? AppColors.white : AppColors.errorColor}/>}
392
- {cat.icon === 'nav' && <MapIcon size={12} color={iconColor}/>}
393
- {cat.icon === 'render' && <AtomIcon size={12} color={iconColor}/>}
394
- {cat.icon === 'memory' && <BrainIcon size={12} color={iconColor}/>}
395
- {cat.icon === 'io' && <GlobeIcon size={12} color={iconColor}/>}
396
- <Text style={[
388
+ <Text style={[
397
389
  perfStyles.categoryChipText,
398
390
  isSelected && perfStyles.categoryChipTextActive,
399
391
  ]}>
400
- {cat.label}
401
- </Text>
402
- </View>
392
+ {cat.label}
393
+ </Text>
403
394
  </TouchableScale>);
404
395
  })}
405
396
  </ScrollView>
@@ -410,13 +401,13 @@ const PerformanceTab = React.memo(() => {
410
401
  {/* ── 1. REAL-TIME FPS SCORECARD & SMOOTH AREA GRAPH ── */}
411
402
  <View style={perfStyles.heroCard}>
412
403
  <View style={perfStyles.heroHeaderRow}>
413
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8, flex: 1 }}>
414
- <PerformanceIcon color={AppColors.purple} size={18}/>
415
- <View style={{ flex: 1 }}>
416
- <Text style={perfStyles.heroTitle} numberOfLines={1}>
404
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
405
+ <PerformanceIcon color={AppColors.purple} size={17}/>
406
+ <View>
407
+ <Text style={perfStyles.heroTitle}>
417
408
  {t('performance.fpsAreaChartTitle')}
418
409
  </Text>
419
- <Text style={perfStyles.heroSubTitle} numberOfLines={1}>
410
+ <Text style={perfStyles.heroSubTitle}>
420
411
  {t('performance.fpsAreaChartSub')}
421
412
  </Text>
422
413
  </View>
@@ -1131,21 +1122,18 @@ const perfStyles = StyleSheet.create({
1131
1122
  color: AppColors.grayTextWeak,
1132
1123
  },
1133
1124
  fpsStatsGrid: {
1134
- flex: 1,
1135
1125
  flexDirection: 'row',
1136
1126
  alignItems: 'center',
1137
- justifyContent: 'space-around',
1138
- marginLeft: 8,
1127
+ gap: 8,
1139
1128
  },
1140
1129
  statItem: {
1141
1130
  alignItems: 'center',
1142
- flex: 1,
1131
+ minWidth: 50,
1143
1132
  },
1144
1133
  statLabel: {
1145
- fontFamily: AppFonts.interMedium,
1146
- fontSize: 9.5,
1134
+ fontFamily: AppFonts.interRegular,
1135
+ fontSize: 10,
1147
1136
  color: AppColors.grayTextWeak,
1148
- textAlign: 'center',
1149
1137
  },
1150
1138
  statValue: {
1151
1139
  fontFamily: AppFonts.interBold,
@@ -18,13 +18,13 @@ import { isReduxConnected } from '../../customHooks/reduxLogger';
18
18
  import { isAnalyticsConnected } from '../../customHooks/analyticsLogger';
19
19
  import { useTranslation } from '../../i18n';
20
20
  import { getTelemetryConsentStatus, setTelemetryConsent, sendSessionTelemetryPing, } from '../../helpers/telemetry';
21
- import { SignalIcon, TerminalIcon, AnalyticsIcon, SettingsIcon, SunIcon, MoonIcon, ScreenIcon, MotionIcon, LayersIcon, EyeIcon, CheckIcon, TrashIcon, PackageIcon, ReduxIcon, PerformanceIcon, CrashIcon, ShieldAlertIcon, ForwardChevronIcon, ChevronDownIcon, NpmIcon, DatabaseIcon, DevicePhoneIcon, ShieldCheckIcon, CpuIcon, } from '../NetworkIcons';
21
+ import { SignalIcon, TerminalIcon, AnalyticsIcon, SettingsIcon, SunIcon, MoonIcon, ScreenIcon, MotionIcon, LayersIcon, EyeIcon, CheckIcon, TrashIcon, PackageIcon, ReduxIcon, PerformanceIcon, CrashIcon, ShieldAlertIcon, ForwardChevronIcon, ChevronDownIcon, NpmIcon, } from '../NetworkIcons';
22
22
  import { LIB_VERSION } from '../../constants';
23
23
  import { copyToClipboard } from '../../helpers';
24
24
  import { showToast } from '../../helpers/toast';
25
25
  const SettingsPanel = () => {
26
26
  const { t } = useTranslation();
27
- const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, showUpdateToast, setShowUpdateToast, showConsoleLevels, setShowConsoleLevels, resetToDefaults, storage, logs, consoleLogs, analyticsEvents, reduxState, maxNetworkLogs, setMaxNetworkLogs, maxConsoleLogs, setMaxConsoleLogs, maxAnalyticsEventsLimit, setMaxAnalyticsEventsLimit, isAutoRamLimitEnabled, setIsAutoRamLimitEnabled, deviceFreeRamMb, isPerformanceHudEnabled, setIsPerformanceHudEnabled, reduxAutoRefresh, setReduxAutoRefreshState, reduxExpandDepth, setReduxExpandDepth, switchActiveTab, setSelected, setSelectedEvent, setReduxState, crashRecords, maxCrashLogs, setMaxCrashLogs, updateAvailable, latestNpmVersion, } = useInspector();
27
+ const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, showUpdateToast, setShowUpdateToast, showConsoleLevels, setShowConsoleLevels, resetToDefaults, storage, logs, consoleLogs, analyticsEvents, reduxState, maxNetworkLogs, setMaxNetworkLogs, maxConsoleLogs, setMaxConsoleLogs, maxAnalyticsEventsLimit, setMaxAnalyticsEventsLimit, isAutoRamLimitEnabled, setIsAutoRamLimitEnabled, deviceFreeRamMb, reduxAutoRefresh, setReduxAutoRefreshState, reduxExpandDepth, setReduxExpandDepth, switchActiveTab, setSelected, setSelectedEvent, setReduxState, crashRecords, maxCrashLogs, setMaxCrashLogs, updateAvailable, latestNpmVersion, } = useInspector();
28
28
  const [stagedHeight, setStagedHeight] = useState(modalHeightPercent);
29
29
  const [telemetryConsent, setTelemetryConsentState] = useState(true);
30
30
  useEffect(() => {
@@ -63,27 +63,6 @@ const SettingsPanel = () => {
63
63
  icon: 'logs',
64
64
  desc: 'Terminal console logs, warnings, errors & stack traces',
65
65
  },
66
- {
67
- key: 'storage',
68
- label: 'Storage (AsyncStorage)',
69
- category: 'core',
70
- icon: 'storage',
71
- desc: 'Browse, edit, create and delete local key-value storage & JSON',
72
- },
73
- {
74
- key: 'device',
75
- label: 'Device & System Info',
76
- category: 'diagnostic',
77
- icon: 'device',
78
- desc: 'Hermes runtime, Fabric New Arch, screen metrics & build info',
79
- },
80
- {
81
- key: 'audit',
82
- label: 'Code Quality & Package Audit',
83
- category: 'diagnostic',
84
- icon: 'audit',
85
- desc: 'Audit dependencies, peer conflicts, TS schema errors & React Native anti-patterns',
86
- },
87
66
  {
88
67
  key: 'performance',
89
68
  label: 'Performance Tracker',
@@ -126,9 +105,6 @@ const SettingsPanel = () => {
126
105
  logs: Boolean(tabVisibility?.logs),
127
106
  analytics: Boolean(tabVisibility?.analytics),
128
107
  redux: Boolean(tabVisibility?.redux),
129
- storage: Boolean(tabVisibility?.storage),
130
- device: Boolean(tabVisibility?.device),
131
- audit: Boolean(tabVisibility?.audit),
132
108
  bundle: Boolean(tabVisibility?.bundle),
133
109
  performance: Boolean(tabVisibility?.performance),
134
110
  crash: Boolean(tabVisibility?.crash),
@@ -140,9 +116,6 @@ const SettingsPanel = () => {
140
116
  logs: Boolean(tabVisibility?.logs),
141
117
  analytics: Boolean(tabVisibility?.analytics),
142
118
  redux: Boolean(tabVisibility?.redux),
143
- storage: Boolean(tabVisibility?.storage),
144
- device: Boolean(tabVisibility?.device),
145
- audit: Boolean(tabVisibility?.audit),
146
119
  bundle: Boolean(tabVisibility?.bundle),
147
120
  performance: Boolean(tabVisibility?.performance),
148
121
  crash: Boolean(tabVisibility?.crash),
@@ -314,17 +287,16 @@ const SettingsPanel = () => {
314
287
  shadowRadius: 4,
315
288
  shadowOffset: { width: 0, height: 2 },
316
289
  }}>
317
- {/* Tab 1: Modules & Tabs */}
318
290
  <TouchableScale accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.modulesAndTools')} accessibilityState={{ selected: settingsActiveSubTab === 'module' }} onPress={() => {
319
291
  animateNextLayout();
320
292
  setSettingsActiveSubTab('module');
321
293
  }} style={{
322
294
  flex: 1,
323
- paddingVertical: 8,
295
+ paddingVertical: 9,
324
296
  flexDirection: 'row',
325
297
  alignItems: 'center',
326
298
  justifyContent: 'center',
327
- gap: 5,
299
+ gap: 6,
328
300
  borderRadius: 9,
329
301
  backgroundColor: settingsActiveSubTab === 'module'
330
302
  ? AppColors.purple
@@ -332,11 +304,11 @@ const SettingsPanel = () => {
332
304
  }}>
333
305
  <LayersIcon color={settingsActiveSubTab === 'module'
334
306
  ? AppColors.white
335
- : AppColors.grayText} size={12.5}/>
307
+ : AppColors.grayText} size={13}/>
336
308
  <Text style={{
337
309
  fontFamily: AppFonts.interBold,
338
- fontSize: 11.5,
339
- lineHeight: 15,
310
+ fontSize: 12.5,
311
+ lineHeight: 16,
340
312
  color: settingsActiveSubTab === 'module'
341
313
  ? AppColors.white
342
314
  : AppColors.grayText,
@@ -345,48 +317,16 @@ const SettingsPanel = () => {
345
317
  </Text>
346
318
  </TouchableScale>
347
319
 
348
- {/* Tab 2: RAM & Limits */}
349
- <TouchableScale accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.ramLimits')} accessibilityState={{ selected: settingsActiveSubTab === 'limits' }} onPress={() => {
350
- animateNextLayout();
351
- setSettingsActiveSubTab('limits');
352
- }} style={{
353
- flex: 1,
354
- paddingVertical: 8,
355
- flexDirection: 'row',
356
- alignItems: 'center',
357
- justifyContent: 'center',
358
- gap: 5,
359
- borderRadius: 9,
360
- backgroundColor: settingsActiveSubTab === 'limits'
361
- ? AppColors.purple
362
- : 'transparent',
363
- }}>
364
- <CpuIcon color={settingsActiveSubTab === 'limits'
365
- ? AppColors.white
366
- : AppColors.grayText} size={12.5}/>
367
- <Text style={{
368
- fontFamily: AppFonts.interBold,
369
- fontSize: 11.5,
370
- lineHeight: 15,
371
- color: settingsActiveSubTab === 'limits'
372
- ? AppColors.white
373
- : AppColors.grayText,
374
- }}>
375
- {t('settings.ramLimits')}
376
- </Text>
377
- </TouchableScale>
378
-
379
- {/* Tab 3: UI & Appearance */}
380
320
  <TouchableScale accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.uiPreferences')} accessibilityState={{ selected: settingsActiveSubTab === 'ui' }} onPress={() => {
381
321
  animateNextLayout();
382
322
  setSettingsActiveSubTab('ui');
383
323
  }} style={{
384
324
  flex: 1,
385
- paddingVertical: 8,
325
+ paddingVertical: 9,
386
326
  flexDirection: 'row',
387
327
  alignItems: 'center',
388
328
  justifyContent: 'center',
389
- gap: 5,
329
+ gap: 6,
390
330
  borderRadius: 9,
391
331
  backgroundColor: settingsActiveSubTab === 'ui'
392
332
  ? AppColors.purple
@@ -394,11 +334,11 @@ const SettingsPanel = () => {
394
334
  }}>
395
335
  <ScreenIcon color={settingsActiveSubTab === 'ui'
396
336
  ? AppColors.white
397
- : AppColors.grayText} size={12.5}/>
337
+ : AppColors.grayText} size={13}/>
398
338
  <Text style={{
399
339
  fontFamily: AppFonts.interBold,
400
- fontSize: 11.5,
401
- lineHeight: 15,
340
+ fontSize: 12.5,
341
+ lineHeight: 16,
402
342
  color: settingsActiveSubTab === 'ui'
403
343
  ? AppColors.white
404
344
  : AppColors.grayText,
@@ -408,7 +348,7 @@ const SettingsPanel = () => {
408
348
  </TouchableScale>
409
349
  </View>
410
350
 
411
- {settingsActiveSubTab === 'module' && (<View style={{ gap: 12 }}>
351
+ {settingsActiveSubTab === 'module' ? (<View style={{ gap: 12 }}>
412
352
  {/* Individual Module Cards with Left Checkboxes */}
413
353
  <View style={{ gap: 10 }}>
414
354
  {allModules.map(moduleItem => {
@@ -543,15 +483,6 @@ const SettingsPanel = () => {
543
483
  {moduleItem.icon === 'analytics' && (<AnalyticsIcon color={isChecked
544
484
  ? AppColors.purple
545
485
  : AppColors.grayTextWeak} size={16}/>)}
546
- {moduleItem.icon === 'storage' && (<DatabaseIcon color={isChecked
547
- ? AppColors.purple
548
- : AppColors.grayTextWeak} size={16}/>)}
549
- {moduleItem.icon === 'device' && (<DevicePhoneIcon color={isChecked
550
- ? AppColors.purple
551
- : AppColors.grayTextWeak} size={16}/>)}
552
- {moduleItem.icon === 'audit' && (<ShieldCheckIcon color={isChecked
553
- ? AppColors.purple
554
- : AppColors.grayTextWeak} size={16}/>)}
555
486
  {moduleItem.icon === 'redux' && (<ReduxIcon color={isChecked
556
487
  ? AppColors.purple
557
488
  : AppColors.grayTextWeak} size={16}/>)}
@@ -757,11 +688,8 @@ const SettingsPanel = () => {
757
688
  </View>);
758
689
  })}
759
690
  </View>
760
- </View>)}
761
691
 
762
- {/* ─── TAB 2: RAM & RESOURCE LIMITS ──────────────────────────────────── */}
763
- {settingsActiveSubTab === 'limits' && (<View style={{ gap: 14 }}>
764
- {/* Section 1: RAM-Based Auto Limits */}
692
+ {/* Section 3.5: RAM-Based Auto Limits */}
765
693
  <View style={{
766
694
  backgroundColor: AppColors.primaryLight,
767
695
  borderRadius: 14,
@@ -778,7 +706,7 @@ const SettingsPanel = () => {
778
706
  color: AppColors.grayTextWeak,
779
707
  letterSpacing: 0.8,
780
708
  }}>
781
- RAM-BASED AUTO TUNING
709
+ RAM-Based Auto Limits
782
710
  </Text>
783
711
 
784
712
  {/* Auto RAM Limit Toggle */}
@@ -983,247 +911,8 @@ const SettingsPanel = () => {
983
911
  </View>))}
984
912
  </View>
985
913
  </View>)}
986
-
987
- <View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
988
-
989
- {/* Floating Mini Performance HUD Toggle */}
990
- {renderSettingRow({
991
- icon: <PerformanceIcon color={AppColors.purple} size={16}/>,
992
- label: 'Show Mini Performance HUD Overlay',
993
- description: 'Floating on-screen real-time FPS and Memory/Heap widget',
994
- right: (<TouchableScale accessible={true} accessibilityRole="switch" accessibilityLabel="Toggle mini performance HUD overlay" accessibilityState={{ checked: isPerformanceHudEnabled }} onPress={() => setIsPerformanceHudEnabled(prev => !prev)} style={{
995
- width: 42,
996
- height: 24,
997
- borderRadius: 12,
998
- backgroundColor: isPerformanceHudEnabled
999
- ? AppColors.purple
1000
- : AppColors.grayBorderSecondary,
1001
- padding: 2,
1002
- justifyContent: 'center',
1003
- alignItems: isPerformanceHudEnabled
1004
- ? 'flex-end'
1005
- : 'flex-start',
1006
- }}>
1007
- <View style={{
1008
- width: 20,
1009
- height: 20,
1010
- borderRadius: 10,
1011
- backgroundColor: AppColors.white,
1012
- shadowColor: AppColors.black,
1013
- shadowOpacity: 0.18,
1014
- shadowRadius: 2,
1015
- shadowOffset: { width: 0, height: 1 },
1016
- }}/>
1017
- </TouchableScale>),
1018
- isLast: true,
1019
- })}
1020
- </View>
1021
-
1022
- {/* Section 2: Fine-Tuned Resource Limits */}
1023
- <View style={{
1024
- backgroundColor: AppColors.primaryLight,
1025
- borderRadius: 14,
1026
- borderWidth: 1,
1027
- borderColor: AppColors.grayBorderSecondary,
1028
- overflow: 'hidden',
1029
- padding: 14,
1030
- gap: 12,
1031
- }}>
1032
- <Text style={{
1033
- fontFamily: AppFonts.interBold,
1034
- fontSize: 11,
1035
- lineHeight: 14,
1036
- color: AppColors.grayTextWeak,
1037
- letterSpacing: 0.8,
1038
- }}>
1039
- MANUAL RESOURCE THRESHOLDS
1040
- </Text>
1041
-
1042
- {renderSettingRow({
1043
- icon: <SignalIcon color={AppColors.purple} size={16}/>,
1044
- label: 'Max Network / API Logs',
1045
- description: 'Maximum in-memory API requests tracked before rotation',
1046
- numericInput: {
1047
- value: maxNetworkLogs,
1048
- onChange: setMaxNetworkLogs,
1049
- min: 10,
1050
- max: 100,
1051
- placeholder: '10 - 100',
1052
- },
1053
- })}
1054
-
1055
- {renderSettingRow({
1056
- icon: <TerminalIcon color={AppColors.purple} size={16}/>,
1057
- label: 'Max Console Logs',
1058
- description: 'Maximum log entries kept across info/warn/error streams',
1059
- numericInput: {
1060
- value: maxConsoleLogs,
1061
- onChange: setMaxConsoleLogs,
1062
- min: 20,
1063
- max: 300,
1064
- placeholder: '20 - 300',
1065
- },
1066
- })}
1067
-
1068
- {renderSettingRow({
1069
- icon: <AnalyticsIcon color={AppColors.purple} size={16}/>,
1070
- label: 'Max Analytics Events',
1071
- description: 'Capacity for captured analytics payloads & telemetry pings',
1072
- numericInput: {
1073
- value: maxAnalyticsEventsLimit,
1074
- onChange: setMaxAnalyticsEventsLimit,
1075
- min: 20,
1076
- max: 200,
1077
- placeholder: '20 - 200',
1078
- },
1079
- })}
1080
-
1081
- {renderSettingRow({
1082
- icon: <CrashIcon color={AppColors.errorColor} size={16}/>,
1083
- label: 'Max Crash Records',
1084
- description: 'Stored fatal exceptions and crash diagnostics logs',
1085
- numericInput: {
1086
- value: maxCrashLogs,
1087
- onChange: setMaxCrashLogs,
1088
- min: 5,
1089
- max: 50,
1090
- placeholder: '5 - 50',
1091
- },
1092
- isLast: true,
1093
- })}
1094
914
  </View>
1095
-
1096
- {/* Section 3: Storage & Cache Cleansing */}
1097
- <View style={{
1098
- backgroundColor: AppColors.primaryLight,
1099
- borderRadius: 14,
1100
- borderWidth: 1,
1101
- borderColor: AppColors.grayBorderSecondary,
1102
- overflow: 'hidden',
1103
- padding: 14,
1104
- gap: 12,
1105
- }}>
1106
- <Text style={{
1107
- fontFamily: AppFonts.interBold,
1108
- fontSize: 11,
1109
- lineHeight: 14,
1110
- color: AppColors.grayTextWeak,
1111
- letterSpacing: 0.8,
1112
- }}>
1113
- STORAGE & CACHE CLEANSING
1114
- </Text>
1115
-
1116
- {renderSettingRow({
1117
- icon: <TrashIcon color={AppColors.errorColor} size={16}/>,
1118
- label: 'Clear All Network Logs',
1119
- description: `${logs.length} requests in memory`,
1120
- onPress: () => {
1121
- clearNetworkLogs();
1122
- setSelected(null);
1123
- Alert.alert(t('common.success'), 'Network logs cleared successfully.');
1124
- },
1125
- right: (<View style={{
1126
- paddingHorizontal: 10,
1127
- paddingVertical: 4,
1128
- borderRadius: 6,
1129
- backgroundColor: `${AppColors.errorColor}14`,
1130
- borderWidth: 1,
1131
- borderColor: `${AppColors.errorColor}33`,
1132
- }}>
1133
- <Text style={{
1134
- fontFamily: AppFonts.interBold,
1135
- fontSize: 11,
1136
- color: AppColors.errorColor,
1137
- }}>
1138
- Clear ({logs.length})
1139
- </Text>
1140
- </View>),
1141
- })}
1142
-
1143
- {renderSettingRow({
1144
- icon: <TrashIcon color={AppColors.errorColor} size={16}/>,
1145
- label: 'Clear All Console Logs',
1146
- description: `${consoleLogs.length} logs in memory`,
1147
- onPress: () => {
1148
- clearConsoleLogs();
1149
- Alert.alert(t('common.success'), 'Console logs cleared successfully.');
1150
- },
1151
- right: (<View style={{
1152
- paddingHorizontal: 10,
1153
- paddingVertical: 4,
1154
- borderRadius: 6,
1155
- backgroundColor: `${AppColors.errorColor}14`,
1156
- borderWidth: 1,
1157
- borderColor: `${AppColors.errorColor}33`,
1158
- }}>
1159
- <Text style={{
1160
- fontFamily: AppFonts.interBold,
1161
- fontSize: 11,
1162
- color: AppColors.errorColor,
1163
- }}>
1164
- Clear ({consoleLogs.length})
1165
- </Text>
1166
- </View>),
1167
- })}
1168
-
1169
- {renderSettingRow({
1170
- icon: <TrashIcon color={AppColors.errorColor} size={16}/>,
1171
- label: 'Clear Analytics Events',
1172
- description: `${analyticsEvents.length} events recorded`,
1173
- onPress: () => {
1174
- clearAnalyticsEvents();
1175
- setSelectedEvent(null);
1176
- Alert.alert(t('common.success'), 'Analytics events cleared successfully.');
1177
- },
1178
- right: (<View style={{
1179
- paddingHorizontal: 10,
1180
- paddingVertical: 4,
1181
- borderRadius: 6,
1182
- backgroundColor: `${AppColors.errorColor}14`,
1183
- borderWidth: 1,
1184
- borderColor: `${AppColors.errorColor}33`,
1185
- }}>
1186
- <Text style={{
1187
- fontFamily: AppFonts.interBold,
1188
- fontSize: 11,
1189
- color: AppColors.errorColor,
1190
- }}>
1191
- Clear ({analyticsEvents.length})
1192
- </Text>
1193
- </View>),
1194
- })}
1195
-
1196
- {renderSettingRow({
1197
- icon: <TrashIcon color={AppColors.errorColor} size={16}/>,
1198
- label: 'Clear Crash Logs',
1199
- description: `${crashRecords.length} crash dumps recorded`,
1200
- onPress: () => {
1201
- clearCrashRecords();
1202
- Alert.alert(t('common.success'), 'Crash records cleared successfully.');
1203
- },
1204
- isLast: true,
1205
- right: (<View style={{
1206
- paddingHorizontal: 10,
1207
- paddingVertical: 4,
1208
- borderRadius: 6,
1209
- backgroundColor: `${AppColors.errorColor}14`,
1210
- borderWidth: 1,
1211
- borderColor: `${AppColors.errorColor}33`,
1212
- }}>
1213
- <Text style={{
1214
- fontFamily: AppFonts.interBold,
1215
- fontSize: 11,
1216
- color: AppColors.errorColor,
1217
- }}>
1218
- Clear ({crashRecords.length})
1219
- </Text>
1220
- </View>),
1221
- })}
1222
- </View>
1223
- </View>)}
1224
-
1225
- {/* ─── TAB 3: UI & APPEARANCE ────────────────────────────────────────── */}
1226
- {settingsActiveSubTab === 'ui' && (<View style={{ gap: 14 }}>
915
+ </View>) : (<View style={{ gap: 14 }}>
1227
916
  {/* Section 1: Appearance */}
1228
917
  <View style={{
1229
918
  backgroundColor: AppColors.primaryLight,
@@ -4,11 +4,11 @@ import { useInspector } from './InspectorContext';
4
4
  import styles from '../../styles';
5
5
  import { AppColors } from '../../styles/AppColors';
6
6
  import TouchableScale from '../TouchableScale';
7
- import { SignalIcon, TerminalIcon, AnalyticsIcon, PackageIcon, ReduxIcon, PerformanceIcon, CrashIcon, DatabaseIcon, DevicePhoneIcon, ShieldCheckIcon, } from '../NetworkIcons';
7
+ import { SignalIcon, TerminalIcon, AnalyticsIcon, PackageIcon, ReduxIcon, PerformanceIcon, CrashIcon, } from '../NetworkIcons';
8
8
  import { isReduxConnected } from '../../customHooks/reduxLogger';
9
9
  import { isAnalyticsConnected } from '../../customHooks/analyticsLogger';
10
10
  const TabBar = React.memo(() => {
11
- const { activeTab, switchActiveTab, tabVisibility, logs, consoleLogs, analyticsEvents, crashRecords, storageEntries, auditReport, lastReadApisCount, lastReadLogsCount, lastReadCrashesCount, unreadPulseAnim, } = useInspector();
11
+ const { activeTab, switchActiveTab, tabVisibility, logs, consoleLogs, analyticsEvents, crashRecords, lastReadApisCount, lastReadLogsCount, lastReadCrashesCount, unreadPulseAnim, } = useInspector();
12
12
  const isReduxAvail = isReduxConnected();
13
13
  const isAnalyticsAvail = isAnalyticsConnected();
14
14
  return (<View style={styles.tabBarContainer}>
@@ -38,24 +38,6 @@ const TabBar = React.memo(() => {
38
38
  count: 0,
39
39
  icon: 'redux',
40
40
  },
41
- {
42
- key: 'storage',
43
- label: 'Storage',
44
- count: storageEntries.length,
45
- icon: 'storage',
46
- },
47
- {
48
- key: 'device',
49
- label: 'Device',
50
- count: 0,
51
- icon: 'device',
52
- },
53
- {
54
- key: 'audit',
55
- label: 'Audit',
56
- count: auditReport?.totalIssues || 0,
57
- icon: 'audit',
58
- },
59
41
  {
60
42
  key: 'bundle',
61
43
  label: 'Bundle',
@@ -76,7 +58,7 @@ const TabBar = React.memo(() => {
76
58
  },
77
59
  ]
78
60
  .filter(tab => {
79
- if (!tabVisibility?.[tab.key] && activeTab !== tab.key)
61
+ if (!tabVisibility?.[tab.key])
80
62
  return false;
81
63
  if (tab.key === 'redux' && !isReduxAvail)
82
64
  return false;
@@ -113,9 +95,6 @@ const TabBar = React.memo(() => {
113
95
  {tab.icon === 'logs' && (<TerminalIcon color={iconColor} size={14}/>)}
114
96
  {tab.icon === 'analytics' && (<AnalyticsIcon color={iconColor} size={14}/>)}
115
97
  {tab.icon === 'redux' && (<ReduxIcon color={iconColor} size={14}/>)}
116
- {tab.icon === 'storage' && (<DatabaseIcon color={iconColor} size={14}/>)}
117
- {tab.icon === 'device' && (<DevicePhoneIcon color={iconColor} size={14}/>)}
118
- {tab.icon === 'audit' && (<ShieldCheckIcon color={iconColor} size={14}/>)}
119
98
  {tab.icon === 'bundle' && (<PackageIcon color={iconColor} size={14}/>)}
120
99
  {tab.icon === 'performance' && (<PerformanceIcon color={iconColor} size={14}/>)}
121
100
  {tab.icon === 'crash' && (<CrashIcon color={iconColor} size={14}/>)}