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.
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +0 -11
- package/dist/commonjs/components/Inspector/InspectorHeader.js +25 -28
- package/dist/commonjs/components/Inspector/MainScreen.js +2 -15
- package/dist/commonjs/components/Inspector/NetworkDetail.js +0 -15
- package/dist/commonjs/components/Inspector/PerformanceTab.js +18 -30
- package/dist/commonjs/components/Inspector/SettingsPanel.js +15 -326
- package/dist/commonjs/components/Inspector/TabBar.js +2 -23
- package/dist/commonjs/components/NetworkIcons.d.ts +0 -12
- package/dist/commonjs/components/NetworkIcons.js +3 -72
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/helpers/index.d.ts +0 -2
- package/dist/commonjs/helpers/index.js +1 -12
- package/dist/commonjs/helpers/telemetry.js +4 -4
- package/dist/commonjs/i18n/locales/en.json +2 -3
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +9 -113
- package/dist/commonjs/native/NativeInspector.d.ts +0 -1
- package/dist/commonjs/types/enums.d.ts +0 -7
- package/dist/commonjs/types/enums.js +0 -7
- package/dist/commonjs/types/interfaces.d.ts +0 -73
- package/dist/esm/components/Inspector/InspectorHeader.js +25 -28
- package/dist/esm/components/Inspector/MainScreen.js +2 -15
- package/dist/esm/components/Inspector/NetworkDetail.js +1 -16
- package/dist/esm/components/Inspector/PerformanceTab.js +19 -31
- package/dist/esm/components/Inspector/SettingsPanel.js +16 -327
- package/dist/esm/components/Inspector/TabBar.js +3 -24
- package/dist/esm/components/NetworkIcons.d.ts +0 -12
- package/dist/esm/components/NetworkIcons.js +0 -57
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/helpers/index.d.ts +0 -2
- package/dist/esm/helpers/index.js +0 -10
- package/dist/esm/helpers/telemetry.js +4 -4
- package/dist/esm/i18n/locales/en.json +2 -3
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +8 -109
- package/dist/esm/native/NativeInspector.d.ts +0 -1
- package/dist/esm/types/enums.d.ts +0 -7
- package/dist/esm/types/enums.js +0 -7
- package/dist/esm/types/interfaces.d.ts +0 -73
- package/ios/NetworkInspectorModule.mm +5 -12
- package/package.json +1 -4
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build/reports/problems/problems-report.html +0 -659
- package/dist/commonjs/components/Inspector/AuditTab.d.ts +0 -3
- package/dist/commonjs/components/Inspector/AuditTab.js +0 -741
- package/dist/commonjs/components/Inspector/DeviceTab.d.ts +0 -3
- package/dist/commonjs/components/Inspector/DeviceTab.js +0 -717
- package/dist/commonjs/components/Inspector/PerformanceHud.d.ts +0 -7
- package/dist/commonjs/components/Inspector/PerformanceHud.js +0 -210
- package/dist/commonjs/components/Inspector/RequestReplayModal.d.ts +0 -9
- package/dist/commonjs/components/Inspector/RequestReplayModal.js +0 -792
- package/dist/commonjs/components/Inspector/RequestReplayView.d.ts +0 -8
- package/dist/commonjs/components/Inspector/RequestReplayView.js +0 -871
- package/dist/commonjs/components/Inspector/StorageTab.d.ts +0 -3
- package/dist/commonjs/components/Inspector/StorageTab.js +0 -610
- package/dist/commonjs/customHooks/storageInspector.d.ts +0 -13
- package/dist/commonjs/customHooks/storageInspector.js +0 -179
- package/dist/commonjs/helpers/deviceInfo.d.ts +0 -4
- package/dist/commonjs/helpers/deviceInfo.js +0 -94
- package/dist/commonjs/helpers/packageAuditor.d.ts +0 -5
- package/dist/commonjs/helpers/packageAuditor.js +0 -182
- package/dist/esm/components/Inspector/AuditTab.d.ts +0 -3
- package/dist/esm/components/Inspector/AuditTab.js +0 -702
- package/dist/esm/components/Inspector/DeviceTab.d.ts +0 -3
- package/dist/esm/components/Inspector/DeviceTab.js +0 -678
- package/dist/esm/components/Inspector/PerformanceHud.d.ts +0 -7
- package/dist/esm/components/Inspector/PerformanceHud.js +0 -170
- package/dist/esm/components/Inspector/RequestReplayModal.d.ts +0 -9
- package/dist/esm/components/Inspector/RequestReplayModal.js +0 -752
- package/dist/esm/components/Inspector/RequestReplayView.d.ts +0 -8
- package/dist/esm/components/Inspector/RequestReplayView.js +0 -831
- package/dist/esm/components/Inspector/StorageTab.d.ts +0 -3
- package/dist/esm/components/Inspector/StorageTab.js +0 -571
- package/dist/esm/customHooks/storageInspector.d.ts +0 -13
- package/dist/esm/customHooks/storageInspector.js +0 -170
- package/dist/esm/helpers/deviceInfo.d.ts +0 -4
- package/dist/esm/helpers/deviceInfo.js +0 -89
- package/dist/esm/helpers/packageAuditor.d.ts +0 -5
- 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,
|
|
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,
|
|
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')
|
|
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')
|
|
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
|
-
<
|
|
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
|
-
|
|
401
|
-
|
|
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:
|
|
414
|
-
<PerformanceIcon color={AppColors.purple} size={
|
|
415
|
-
<View
|
|
416
|
-
<Text style={perfStyles.heroTitle}
|
|
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}
|
|
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
|
-
|
|
1138
|
-
marginLeft: 8,
|
|
1127
|
+
gap: 8,
|
|
1139
1128
|
},
|
|
1140
1129
|
statItem: {
|
|
1141
1130
|
alignItems: 'center',
|
|
1142
|
-
|
|
1131
|
+
minWidth: 50,
|
|
1143
1132
|
},
|
|
1144
1133
|
statLabel: {
|
|
1145
|
-
fontFamily: AppFonts.
|
|
1146
|
-
fontSize:
|
|
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,
|
|
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,
|
|
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:
|
|
295
|
+
paddingVertical: 9,
|
|
324
296
|
flexDirection: 'row',
|
|
325
297
|
alignItems: 'center',
|
|
326
298
|
justifyContent: 'center',
|
|
327
|
-
gap:
|
|
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={
|
|
307
|
+
: AppColors.grayText} size={13}/>
|
|
336
308
|
<Text style={{
|
|
337
309
|
fontFamily: AppFonts.interBold,
|
|
338
|
-
fontSize:
|
|
339
|
-
lineHeight:
|
|
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:
|
|
325
|
+
paddingVertical: 9,
|
|
386
326
|
flexDirection: 'row',
|
|
387
327
|
alignItems: 'center',
|
|
388
328
|
justifyContent: 'center',
|
|
389
|
-
gap:
|
|
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={
|
|
337
|
+
: AppColors.grayText} size={13}/>
|
|
398
338
|
<Text style={{
|
|
399
339
|
fontFamily: AppFonts.interBold,
|
|
400
|
-
fontSize:
|
|
401
|
-
lineHeight:
|
|
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'
|
|
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
|
-
|
|
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-
|
|
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,
|
|
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,
|
|
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]
|
|
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}/>)}
|