react-native-inapp-inspector 2.0.5 → 2.0.6
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.
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +11 -0
- package/dist/commonjs/components/Inspector/AuditTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/AuditTab.js +741 -0
- package/dist/commonjs/components/Inspector/DeviceTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/DeviceTab.js +717 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +28 -25
- package/dist/commonjs/components/Inspector/MainScreen.js +15 -2
- package/dist/commonjs/components/Inspector/NetworkDetail.js +15 -0
- package/dist/commonjs/components/Inspector/PerformanceHud.d.ts +7 -0
- package/dist/commonjs/components/Inspector/PerformanceHud.js +210 -0
- package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -18
- package/dist/commonjs/components/Inspector/RequestReplayModal.d.ts +9 -0
- package/dist/commonjs/components/Inspector/RequestReplayModal.js +792 -0
- package/dist/commonjs/components/Inspector/RequestReplayView.d.ts +8 -0
- package/dist/commonjs/components/Inspector/RequestReplayView.js +871 -0
- package/dist/commonjs/components/Inspector/SettingsPanel.js +326 -15
- package/dist/commonjs/components/Inspector/StorageTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/StorageTab.js +610 -0
- package/dist/commonjs/components/Inspector/TabBar.js +23 -2
- package/dist/commonjs/components/NetworkIcons.d.ts +12 -0
- package/dist/commonjs/components/NetworkIcons.js +72 -3
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/storageInspector.d.ts +13 -0
- package/dist/commonjs/customHooks/storageInspector.js +179 -0
- package/dist/commonjs/helpers/deviceInfo.d.ts +4 -0
- package/dist/commonjs/helpers/deviceInfo.js +94 -0
- package/dist/commonjs/helpers/index.d.ts +2 -0
- package/dist/commonjs/helpers/index.js +12 -1
- package/dist/commonjs/helpers/packageAuditor.d.ts +5 -0
- package/dist/commonjs/helpers/packageAuditor.js +182 -0
- package/dist/commonjs/i18n/locales/en.json +3 -2
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +113 -9
- package/dist/commonjs/native/NativeInspector.d.ts +1 -0
- package/dist/commonjs/types/enums.d.ts +7 -0
- package/dist/commonjs/types/enums.js +7 -0
- package/dist/commonjs/types/interfaces.d.ts +73 -0
- package/dist/esm/components/Inspector/AuditTab.d.ts +3 -0
- package/dist/esm/components/Inspector/AuditTab.js +702 -0
- package/dist/esm/components/Inspector/DeviceTab.d.ts +3 -0
- package/dist/esm/components/Inspector/DeviceTab.js +678 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +28 -25
- package/dist/esm/components/Inspector/MainScreen.js +15 -2
- package/dist/esm/components/Inspector/NetworkDetail.js +16 -1
- package/dist/esm/components/Inspector/PerformanceHud.d.ts +7 -0
- package/dist/esm/components/Inspector/PerformanceHud.js +170 -0
- package/dist/esm/components/Inspector/PerformanceTab.js +31 -19
- package/dist/esm/components/Inspector/RequestReplayModal.d.ts +9 -0
- package/dist/esm/components/Inspector/RequestReplayModal.js +752 -0
- package/dist/esm/components/Inspector/RequestReplayView.d.ts +8 -0
- package/dist/esm/components/Inspector/RequestReplayView.js +831 -0
- package/dist/esm/components/Inspector/SettingsPanel.js +327 -16
- package/dist/esm/components/Inspector/StorageTab.d.ts +3 -0
- package/dist/esm/components/Inspector/StorageTab.js +571 -0
- package/dist/esm/components/Inspector/TabBar.js +24 -3
- package/dist/esm/components/NetworkIcons.d.ts +12 -0
- package/dist/esm/components/NetworkIcons.js +57 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/storageInspector.d.ts +13 -0
- package/dist/esm/customHooks/storageInspector.js +170 -0
- package/dist/esm/helpers/deviceInfo.d.ts +4 -0
- package/dist/esm/helpers/deviceInfo.js +89 -0
- package/dist/esm/helpers/index.d.ts +2 -0
- package/dist/esm/helpers/index.js +10 -0
- package/dist/esm/helpers/packageAuditor.d.ts +5 -0
- package/dist/esm/helpers/packageAuditor.js +173 -0
- package/dist/esm/i18n/locales/en.json +3 -2
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +109 -8
- package/dist/esm/native/NativeInspector.d.ts +1 -0
- package/dist/esm/types/enums.d.ts +7 -0
- package/dist/esm/types/enums.js +7 -0
- package/dist/esm/types/interfaces.d.ts +73 -0
- package/ios/NetworkInspectorModule.mm +12 -5
- package/package.json +4 -1
|
@@ -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, } from '../NetworkIcons';
|
|
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';
|
|
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, 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, isPerformanceHudEnabled, setIsPerformanceHudEnabled, 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,6 +63,27 @@ 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
|
+
},
|
|
66
87
|
{
|
|
67
88
|
key: 'performance',
|
|
68
89
|
label: 'Performance Tracker',
|
|
@@ -105,6 +126,9 @@ const SettingsPanel = () => {
|
|
|
105
126
|
logs: Boolean(tabVisibility?.logs),
|
|
106
127
|
analytics: Boolean(tabVisibility?.analytics),
|
|
107
128
|
redux: Boolean(tabVisibility?.redux),
|
|
129
|
+
storage: Boolean(tabVisibility?.storage),
|
|
130
|
+
device: Boolean(tabVisibility?.device),
|
|
131
|
+
audit: Boolean(tabVisibility?.audit),
|
|
108
132
|
bundle: Boolean(tabVisibility?.bundle),
|
|
109
133
|
performance: Boolean(tabVisibility?.performance),
|
|
110
134
|
crash: Boolean(tabVisibility?.crash),
|
|
@@ -116,6 +140,9 @@ const SettingsPanel = () => {
|
|
|
116
140
|
logs: Boolean(tabVisibility?.logs),
|
|
117
141
|
analytics: Boolean(tabVisibility?.analytics),
|
|
118
142
|
redux: Boolean(tabVisibility?.redux),
|
|
143
|
+
storage: Boolean(tabVisibility?.storage),
|
|
144
|
+
device: Boolean(tabVisibility?.device),
|
|
145
|
+
audit: Boolean(tabVisibility?.audit),
|
|
119
146
|
bundle: Boolean(tabVisibility?.bundle),
|
|
120
147
|
performance: Boolean(tabVisibility?.performance),
|
|
121
148
|
crash: Boolean(tabVisibility?.crash),
|
|
@@ -287,16 +314,17 @@ const SettingsPanel = () => {
|
|
|
287
314
|
shadowRadius: 4,
|
|
288
315
|
shadowOffset: { width: 0, height: 2 },
|
|
289
316
|
}}>
|
|
317
|
+
{/* Tab 1: Modules & Tabs */}
|
|
290
318
|
<TouchableScale accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.modulesAndTools')} accessibilityState={{ selected: settingsActiveSubTab === 'module' }} onPress={() => {
|
|
291
319
|
animateNextLayout();
|
|
292
320
|
setSettingsActiveSubTab('module');
|
|
293
321
|
}} style={{
|
|
294
322
|
flex: 1,
|
|
295
|
-
paddingVertical:
|
|
323
|
+
paddingVertical: 8,
|
|
296
324
|
flexDirection: 'row',
|
|
297
325
|
alignItems: 'center',
|
|
298
326
|
justifyContent: 'center',
|
|
299
|
-
gap:
|
|
327
|
+
gap: 5,
|
|
300
328
|
borderRadius: 9,
|
|
301
329
|
backgroundColor: settingsActiveSubTab === 'module'
|
|
302
330
|
? AppColors.purple
|
|
@@ -304,11 +332,11 @@ const SettingsPanel = () => {
|
|
|
304
332
|
}}>
|
|
305
333
|
<LayersIcon color={settingsActiveSubTab === 'module'
|
|
306
334
|
? AppColors.white
|
|
307
|
-
: AppColors.grayText} size={
|
|
335
|
+
: AppColors.grayText} size={12.5}/>
|
|
308
336
|
<Text style={{
|
|
309
337
|
fontFamily: AppFonts.interBold,
|
|
310
|
-
fontSize:
|
|
311
|
-
lineHeight:
|
|
338
|
+
fontSize: 11.5,
|
|
339
|
+
lineHeight: 15,
|
|
312
340
|
color: settingsActiveSubTab === 'module'
|
|
313
341
|
? AppColors.white
|
|
314
342
|
: AppColors.grayText,
|
|
@@ -317,16 +345,48 @@ const SettingsPanel = () => {
|
|
|
317
345
|
</Text>
|
|
318
346
|
</TouchableScale>
|
|
319
347
|
|
|
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 */}
|
|
320
380
|
<TouchableScale accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.uiPreferences')} accessibilityState={{ selected: settingsActiveSubTab === 'ui' }} onPress={() => {
|
|
321
381
|
animateNextLayout();
|
|
322
382
|
setSettingsActiveSubTab('ui');
|
|
323
383
|
}} style={{
|
|
324
384
|
flex: 1,
|
|
325
|
-
paddingVertical:
|
|
385
|
+
paddingVertical: 8,
|
|
326
386
|
flexDirection: 'row',
|
|
327
387
|
alignItems: 'center',
|
|
328
388
|
justifyContent: 'center',
|
|
329
|
-
gap:
|
|
389
|
+
gap: 5,
|
|
330
390
|
borderRadius: 9,
|
|
331
391
|
backgroundColor: settingsActiveSubTab === 'ui'
|
|
332
392
|
? AppColors.purple
|
|
@@ -334,11 +394,11 @@ const SettingsPanel = () => {
|
|
|
334
394
|
}}>
|
|
335
395
|
<ScreenIcon color={settingsActiveSubTab === 'ui'
|
|
336
396
|
? AppColors.white
|
|
337
|
-
: AppColors.grayText} size={
|
|
397
|
+
: AppColors.grayText} size={12.5}/>
|
|
338
398
|
<Text style={{
|
|
339
399
|
fontFamily: AppFonts.interBold,
|
|
340
|
-
fontSize:
|
|
341
|
-
lineHeight:
|
|
400
|
+
fontSize: 11.5,
|
|
401
|
+
lineHeight: 15,
|
|
342
402
|
color: settingsActiveSubTab === 'ui'
|
|
343
403
|
? AppColors.white
|
|
344
404
|
: AppColors.grayText,
|
|
@@ -348,7 +408,7 @@ const SettingsPanel = () => {
|
|
|
348
408
|
</TouchableScale>
|
|
349
409
|
</View>
|
|
350
410
|
|
|
351
|
-
{settingsActiveSubTab === 'module'
|
|
411
|
+
{settingsActiveSubTab === 'module' && (<View style={{ gap: 12 }}>
|
|
352
412
|
{/* Individual Module Cards with Left Checkboxes */}
|
|
353
413
|
<View style={{ gap: 10 }}>
|
|
354
414
|
{allModules.map(moduleItem => {
|
|
@@ -483,6 +543,15 @@ const SettingsPanel = () => {
|
|
|
483
543
|
{moduleItem.icon === 'analytics' && (<AnalyticsIcon color={isChecked
|
|
484
544
|
? AppColors.purple
|
|
485
545
|
: 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}/>)}
|
|
486
555
|
{moduleItem.icon === 'redux' && (<ReduxIcon color={isChecked
|
|
487
556
|
? AppColors.purple
|
|
488
557
|
: AppColors.grayTextWeak} size={16}/>)}
|
|
@@ -688,8 +757,11 @@ const SettingsPanel = () => {
|
|
|
688
757
|
</View>);
|
|
689
758
|
})}
|
|
690
759
|
</View>
|
|
760
|
+
</View>)}
|
|
691
761
|
|
|
692
|
-
|
|
762
|
+
{/* ─── TAB 2: RAM & RESOURCE LIMITS ──────────────────────────────────── */}
|
|
763
|
+
{settingsActiveSubTab === 'limits' && (<View style={{ gap: 14 }}>
|
|
764
|
+
{/* Section 1: RAM-Based Auto Limits */}
|
|
693
765
|
<View style={{
|
|
694
766
|
backgroundColor: AppColors.primaryLight,
|
|
695
767
|
borderRadius: 14,
|
|
@@ -706,7 +778,7 @@ const SettingsPanel = () => {
|
|
|
706
778
|
color: AppColors.grayTextWeak,
|
|
707
779
|
letterSpacing: 0.8,
|
|
708
780
|
}}>
|
|
709
|
-
RAM-
|
|
781
|
+
RAM-BASED AUTO TUNING
|
|
710
782
|
</Text>
|
|
711
783
|
|
|
712
784
|
{/* Auto RAM Limit Toggle */}
|
|
@@ -911,8 +983,247 @@ const SettingsPanel = () => {
|
|
|
911
983
|
</View>))}
|
|
912
984
|
</View>
|
|
913
985
|
</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
|
+
})}
|
|
914
1094
|
</View>
|
|
915
|
-
|
|
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 }}>
|
|
916
1227
|
{/* Section 1: Appearance */}
|
|
917
1228
|
<View style={{
|
|
918
1229
|
backgroundColor: AppColors.primaryLight,
|