react-native-inapp-inspector 2.0.7 → 2.2.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 -19
- 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 +49 -448
- 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/settingsStore.d.ts +1 -1
- package/dist/commonjs/helpers/settingsStore.js +2 -4
- package/dist/commonjs/i18n/locales/en.json +2 -3
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +9 -127
- 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 -77
- package/dist/esm/components/Inspector/InspectorHeader.js +25 -28
- package/dist/esm/components/Inspector/MainScreen.js +2 -19
- 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 +50 -449
- 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/settingsStore.d.ts +1 -1
- package/dist/esm/helpers/settingsStore.js +2 -4
- package/dist/esm/i18n/locales/en.json +2 -3
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +8 -123
- 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 -77
- package/ios/NetworkInspectorModule.mm +5 -12
- package/package.json +1 -4
- 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/FirstTimeWalkthroughModal.d.ts +0 -7
- package/dist/commonjs/components/Inspector/FirstTimeWalkthroughModal.js +0 -600
- 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/FirstTimeWalkthroughModal.d.ts +0 -7
- package/dist/esm/components/Inspector/FirstTimeWalkthroughModal.js +0 -560
- 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
|
@@ -9,7 +9,6 @@ import android.os.Build
|
|
|
9
9
|
import android.os.Debug
|
|
10
10
|
import android.os.Environment
|
|
11
11
|
import android.os.StatFs
|
|
12
|
-
import android.provider.Settings
|
|
13
12
|
import android.util.Log
|
|
14
13
|
import com.facebook.react.bridge.Arguments
|
|
15
14
|
import com.facebook.react.bridge.Promise
|
|
@@ -176,16 +175,6 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
176
175
|
map.putInt("apiLevel", Build.VERSION.SDK_INT)
|
|
177
176
|
val cpuAbi = if (Build.SUPPORTED_ABIS.isNotEmpty()) Build.SUPPORTED_ABIS[0] else "unknown"
|
|
178
177
|
map.putString("cpuAbi", cpuAbi)
|
|
179
|
-
try {
|
|
180
|
-
val androidId = Settings.Secure.getString(reactContext.contentResolver, Settings.Secure.ANDROID_ID)
|
|
181
|
-
if (!androidId.isNullOrEmpty()) {
|
|
182
|
-
map.putString("deviceId", androidId)
|
|
183
|
-
} else {
|
|
184
|
-
map.putString("deviceId", Build.FINGERPRINT)
|
|
185
|
-
}
|
|
186
|
-
} catch (e: Exception) {
|
|
187
|
-
map.putString("deviceId", Build.FINGERPRINT)
|
|
188
|
-
}
|
|
189
178
|
|
|
190
179
|
// 6. Application Identifiers (Legal & Non-PII)
|
|
191
180
|
try {
|
|
@@ -52,7 +52,7 @@ const telemetry_1 = require("../../helpers/telemetry");
|
|
|
52
52
|
const UpdateAvailableModal_1 = require("./UpdateAvailableModal");
|
|
53
53
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
54
54
|
const InspectorHeader = react_1.default.memo(() => {
|
|
55
|
-
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash,
|
|
55
|
+
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = (0, InspectorContext_1.useInspector)();
|
|
56
56
|
const [showUpdateModal, setShowUpdateModal] = react_1.default.useState(false);
|
|
57
57
|
const [isTelemetryActive, setIsTelemetryActive] = react_1.default.useState(false);
|
|
58
58
|
const telemetryPulseAnim = react_1.default.useRef(new react_native_1.Animated.Value(1)).current;
|
|
@@ -302,44 +302,38 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
302
302
|
</react_native_1.Pressable>)}
|
|
303
303
|
</react_native_1.View>
|
|
304
304
|
|
|
305
|
-
{/* OS & NPM Version
|
|
305
|
+
{/* OS & NPM Version Representation */}
|
|
306
306
|
<react_native_1.View style={{
|
|
307
307
|
flexDirection: 'row',
|
|
308
308
|
alignItems: 'center',
|
|
309
309
|
gap: 5,
|
|
310
310
|
minWidth: 0,
|
|
311
311
|
}}>
|
|
312
|
-
{/* Unified Platform & Build Chip */}
|
|
313
312
|
<react_native_1.View style={{
|
|
314
313
|
flexDirection: 'row',
|
|
315
314
|
alignItems: 'center',
|
|
316
|
-
backgroundColor:
|
|
317
|
-
borderRadius:
|
|
318
|
-
paddingHorizontal: 6
|
|
319
|
-
paddingVertical: 2
|
|
320
|
-
gap: 4
|
|
315
|
+
backgroundColor: `${AppColors_1.AppColors.white}1F`,
|
|
316
|
+
borderRadius: 5,
|
|
317
|
+
paddingHorizontal: 6,
|
|
318
|
+
paddingVertical: 2,
|
|
319
|
+
gap: 4,
|
|
321
320
|
borderWidth: 1,
|
|
322
|
-
borderColor:
|
|
321
|
+
borderColor: `${AppColors_1.AppColors.white}2E`,
|
|
323
322
|
flexShrink: 0,
|
|
324
323
|
}}>
|
|
325
|
-
{react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon color=
|
|
324
|
+
{react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon color={`${AppColors_1.AppColors.white}E6`} size={10}/>) : (<NetworkIcons_1.AndroidIcon color={`${AppColors_1.AppColors.white}E6`} size={10}/>)}
|
|
326
325
|
<react_native_1.Text style={{
|
|
327
|
-
fontFamily: AppFonts_1.AppFonts.
|
|
326
|
+
fontFamily: AppFonts_1.AppFonts.interMedium,
|
|
328
327
|
fontSize: 9.5,
|
|
329
|
-
color:
|
|
328
|
+
color: `${AppColors_1.AppColors.white}EB`,
|
|
330
329
|
letterSpacing: 0.1,
|
|
331
330
|
}} numberOfLines={1}>
|
|
332
331
|
{react_native_1.Platform.OS === 'ios'
|
|
333
|
-
? `iOS ${
|
|
334
|
-
|
|
335
|
-
: ''}`
|
|
336
|
-
: `Android ${String(deviceInfo?.osVersion || react_native_1.Platform.Version).replace(/^(android\s*)+/i, '').trim()}${deviceInfo?.buildNumber || deviceInfo?.appVersion
|
|
337
|
-
? ` (${deviceInfo.buildNumber || deviceInfo.appVersion})`
|
|
338
|
-
: ''}`}
|
|
332
|
+
? `iOS ${react_native_1.Platform.Version}`
|
|
333
|
+
: `Android ${react_native_1.Platform.Version}`}
|
|
339
334
|
</react_native_1.Text>
|
|
340
335
|
</react_native_1.View>
|
|
341
336
|
|
|
342
|
-
{/* Unified NPM Version Chip */}
|
|
343
337
|
<react_native_1.Pressable onPress={() => {
|
|
344
338
|
if (updateAvailable) {
|
|
345
339
|
setShowUpdateModal(true);
|
|
@@ -348,23 +342,26 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
348
342
|
react_native_1.Linking.openURL('https://www.npmjs.com/package/react-native-inapp-inspector').catch(() => { });
|
|
349
343
|
}
|
|
350
344
|
}} style={{
|
|
351
|
-
backgroundColor: '
|
|
352
|
-
borderRadius:
|
|
353
|
-
paddingHorizontal: 6
|
|
354
|
-
paddingVertical: 2
|
|
345
|
+
backgroundColor: '#FFFFFF',
|
|
346
|
+
borderRadius: 5,
|
|
347
|
+
paddingHorizontal: 6,
|
|
348
|
+
paddingVertical: 2,
|
|
355
349
|
flexDirection: 'row',
|
|
356
350
|
alignItems: 'center',
|
|
357
351
|
gap: 4,
|
|
358
|
-
borderWidth: 1,
|
|
359
|
-
borderColor: 'rgba(255, 255, 255, 0.28)',
|
|
360
352
|
flexShrink: 0,
|
|
353
|
+
shadowColor: '#000000',
|
|
354
|
+
shadowOffset: { width: 0, height: 1 },
|
|
355
|
+
shadowOpacity: 0.15,
|
|
356
|
+
shadowRadius: 2,
|
|
357
|
+
elevation: 2,
|
|
361
358
|
}}>
|
|
362
|
-
<NetworkIcons_1.NpmIcon size={11} color="#
|
|
359
|
+
<NetworkIcons_1.NpmIcon size={11} color="#CB3837"/>
|
|
363
360
|
<react_native_1.Text style={{
|
|
364
361
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
365
362
|
fontSize: 9.5,
|
|
366
|
-
color: '#
|
|
367
|
-
letterSpacing: 0.
|
|
363
|
+
color: '#CB3837',
|
|
364
|
+
letterSpacing: 0.2,
|
|
368
365
|
}} numberOfLines={1}>
|
|
369
366
|
v{constants_2.LIB_VERSION}
|
|
370
367
|
</react_native_1.Text>
|
|
@@ -55,20 +55,15 @@ const BundleTab_1 = __importDefault(require("./BundleTab"));
|
|
|
55
55
|
const PerformanceTab_1 = __importDefault(require("./PerformanceTab"));
|
|
56
56
|
const CrashTab_1 = __importDefault(require("./CrashTab"));
|
|
57
57
|
const CrashDetail_1 = __importDefault(require("./CrashDetail"));
|
|
58
|
-
const StorageTab_1 = __importDefault(require("./StorageTab"));
|
|
59
|
-
const DeviceTab_1 = __importDefault(require("./DeviceTab"));
|
|
60
|
-
const AuditTab_1 = __importDefault(require("./AuditTab"));
|
|
61
58
|
const SettingsPanel_1 = __importDefault(require("./SettingsPanel"));
|
|
62
59
|
const TelemetryConsentModal_1 = __importDefault(require("./TelemetryConsentModal"));
|
|
63
|
-
const FirstTimeWalkthroughModal_1 = __importDefault(require("./FirstTimeWalkthroughModal"));
|
|
64
60
|
const NpmUpdateToast_1 = __importDefault(require("./NpmUpdateToast"));
|
|
65
61
|
const Toast_1 = __importDefault(require("../Toast"));
|
|
66
62
|
const styles_1 = __importDefault(require("../../styles"));
|
|
67
63
|
const AppColors_1 = require("../../styles/AppColors");
|
|
68
64
|
const NavigationTracker_1 = __importDefault(require("./NavigationTracker"));
|
|
69
|
-
const PerformanceHud_1 = __importDefault(require("./PerformanceHud"));
|
|
70
65
|
const MainScreen = () => {
|
|
71
|
-
const { visible,
|
|
66
|
+
const { visible, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, selectedCrash, settingsPage, activeTab, isReady, isEnabled, useNativeFab, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
72
67
|
const isDetailActive = (activeTab === 'apis' && selected != null) ||
|
|
73
68
|
(activeTab === 'analytics' && selectedEvent != null) ||
|
|
74
69
|
(activeTab === 'logs' && selectedLog != null) ||
|
|
@@ -109,16 +104,10 @@ const MainScreen = () => {
|
|
|
109
104
|
}).start();
|
|
110
105
|
}, [activeTab]);
|
|
111
106
|
return (<>
|
|
112
|
-
|
|
113
|
-
{(react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') &&
|
|
107
|
+
{(react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') &&
|
|
114
108
|
isEnabled &&
|
|
115
109
|
!visible &&
|
|
116
110
|
!useNativeFab && <FabLauncher_1.default />}
|
|
117
|
-
{isEnabled && !visible && isPerformanceHudEnabled && (<PerformanceHud_1.default visible={true} onPress={() => {
|
|
118
|
-
setVisible(true);
|
|
119
|
-
switchActiveTab('performance');
|
|
120
|
-
}}/>)}
|
|
121
|
-
</react_native_1.View>
|
|
122
111
|
<react_native_1.Modal visible={visible} animationType={modalAnimationType} transparent statusBarTranslucent={true}>
|
|
123
112
|
{visible && (<ErrorBoundary_1.default onClose={closeModal}>
|
|
124
113
|
<react_native_1.View style={styles_1.default.modalBackdrop}>
|
|
@@ -162,9 +151,6 @@ const MainScreen = () => {
|
|
|
162
151
|
{activeTab === 'logs' && <ConsoleTab_1.default />}
|
|
163
152
|
{activeTab === 'analytics' && <AnalyticsTab_1.default />}
|
|
164
153
|
{activeTab === 'redux' && <ReduxTab_1.default />}
|
|
165
|
-
{activeTab === 'storage' && <StorageTab_1.default />}
|
|
166
|
-
{activeTab === 'device' && <DeviceTab_1.default />}
|
|
167
|
-
{activeTab === 'audit' && <AuditTab_1.default />}
|
|
168
154
|
{activeTab === 'bundle' && <BundleTab_1.default />}
|
|
169
155
|
{activeTab === 'performance' && <PerformanceTab_1.default />}
|
|
170
156
|
{activeTab === 'crash' && <CrashTab_1.default />}
|
|
@@ -224,9 +210,6 @@ const MainScreen = () => {
|
|
|
224
210
|
|
|
225
211
|
{/* NPM Version Update Toast with timeout progress bar */}
|
|
226
212
|
<NpmUpdateToast_1.default />
|
|
227
|
-
|
|
228
|
-
{/* First-Time Walkthrough & Quick Guide Modal */}
|
|
229
|
-
<FirstTimeWalkthroughModal_1.default visible={isWalkthroughVisible} onClose={() => setIsWalkthroughVisible(false)}/>
|
|
230
213
|
</react_native_1.View>
|
|
231
214
|
</react_native_1.View>
|
|
232
215
|
</ErrorBoundary_1.default>)}
|
|
@@ -22,10 +22,8 @@ const AppFonts_1 = require("../../styles/AppFonts");
|
|
|
22
22
|
const constants_1 = require("../../constants");
|
|
23
23
|
const helpers_1 = require("../../helpers");
|
|
24
24
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
25
|
-
const RequestReplayView_1 = __importDefault(require("./RequestReplayView"));
|
|
26
25
|
const NetworkDetail = react_1.default.memo(() => {
|
|
27
26
|
const { t } = (0, i18n_1.useTranslation)();
|
|
28
|
-
const [isReplayScreenActive, setIsReplayScreenActive] = react_1.default.useState(false);
|
|
29
27
|
const { selected, detailDisplayUrl, apiDetailActiveTab, setApiDetailActiveTab, detailSearch, setDetailSearch, reqExpanded, setReqExpanded, resExpanded, setResExpanded, showReqDiff, setShowReqDiff, showResDiff, setShowResDiff, prevRequestData, prevResponseData, logRouteMapRef, } = (0, InspectorContext_1.useInspector)();
|
|
30
28
|
const handleOpenUrl = () => {
|
|
31
29
|
react_native_1.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}`, [
|
|
@@ -49,9 +47,6 @@ const NetworkDetail = react_1.default.memo(() => {
|
|
|
49
47
|
};
|
|
50
48
|
if (!selected)
|
|
51
49
|
return null;
|
|
52
|
-
if (isReplayScreenActive) {
|
|
53
|
-
return (<RequestReplayView_1.default request={selected} onBack={() => setIsReplayScreenActive(false)}/>);
|
|
54
|
-
}
|
|
55
50
|
return (<react_native_1.View style={{ flex: 1 }}>
|
|
56
51
|
{/* Non-scrollable details header */}
|
|
57
52
|
<react_native_1.View style={{ paddingHorizontal: 6, paddingTop: 4 }}>
|
|
@@ -257,16 +252,6 @@ const NetworkDetail = react_1.default.memo(() => {
|
|
|
257
252
|
</react_native_1.View>
|
|
258
253
|
|
|
259
254
|
<react_native_1.View style={styles_1.default.detailInfoRight}>
|
|
260
|
-
<TouchableScale_1.default style={[
|
|
261
|
-
styles_1.default.iconSquareBtn,
|
|
262
|
-
{
|
|
263
|
-
backgroundColor: `${AppColors_1.AppColors.purple}15`,
|
|
264
|
-
borderColor: `${AppColors_1.AppColors.purple}30`,
|
|
265
|
-
borderWidth: 1,
|
|
266
|
-
},
|
|
267
|
-
]} onPress={() => setIsReplayScreenActive(true)} accessible={true} accessibilityRole="button" accessibilityLabel="Edit & Resend Request" hitSlop={12}>
|
|
268
|
-
<NetworkIcons_1.ReplayIcon color={AppColors_1.AppColors.purple} size={14}/>
|
|
269
|
-
</TouchableScale_1.default>
|
|
270
255
|
<TouchableScale_1.default style={[styles_1.default.iconSquareBtn, { backgroundColor: `${AppColors_1.AppColors.sky600}15` }]} onPress={handleOpenUrl} hitSlop={12}>
|
|
271
256
|
<NetworkIcons_1.ExternalLinkIcon color={AppColors_1.AppColors.sky600} size={14}/>
|
|
272
257
|
</TouchableScale_1.default>
|
|
@@ -411,33 +411,24 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
411
411
|
<react_native_1.View style={perfStyles.categoryScrollWrapper}>
|
|
412
412
|
<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={perfStyles.categoryScrollView} contentContainerStyle={perfStyles.categoryScroll}>
|
|
413
413
|
{[
|
|
414
|
-
{ key: 'ALL', label: t('performance.catAll')
|
|
415
|
-
{ key: 'JANKY', label: t('performance.catJanky')
|
|
416
|
-
{ key: 'NAVIGATION', label: t('performance.catNavigation')
|
|
417
|
-
{ key: 'RENDER', label: t('performance.catRender')
|
|
418
|
-
{ key: 'MEMORY', label: t('performance.catMemory')
|
|
419
|
-
{ key: 'IO', label: t('performance.catIo')
|
|
414
|
+
{ key: 'ALL', label: t('performance.catAll') },
|
|
415
|
+
{ key: 'JANKY', label: t('performance.catJanky') },
|
|
416
|
+
{ key: 'NAVIGATION', label: t('performance.catNavigation') },
|
|
417
|
+
{ key: 'RENDER', label: t('performance.catRender') },
|
|
418
|
+
{ key: 'MEMORY', label: t('performance.catMemory') },
|
|
419
|
+
{ key: 'IO', label: t('performance.catIo') },
|
|
420
420
|
].map(cat => {
|
|
421
421
|
const isSelected = filterCategory === cat.key;
|
|
422
|
-
const iconColor = isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayText;
|
|
423
422
|
return (<TouchableScale_1.default key={cat.key} onPress={() => setFilterCategory(cat.key)} style={[
|
|
424
423
|
perfStyles.categoryChip,
|
|
425
424
|
isSelected && perfStyles.categoryChipActive,
|
|
426
425
|
]}>
|
|
427
|
-
<react_native_1.
|
|
428
|
-
{cat.icon === 'all' && <NetworkIcons_1.SparklesIcon size={12} color={iconColor}/>}
|
|
429
|
-
{cat.icon === 'janky' && <NetworkIcons_1.WarningTriangleIcon size={12} color={isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.errorColor}/>}
|
|
430
|
-
{cat.icon === 'nav' && <NetworkIcons_1.MapIcon size={12} color={iconColor}/>}
|
|
431
|
-
{cat.icon === 'render' && <NetworkIcons_1.AtomIcon size={12} color={iconColor}/>}
|
|
432
|
-
{cat.icon === 'memory' && <NetworkIcons_1.BrainIcon size={12} color={iconColor}/>}
|
|
433
|
-
{cat.icon === 'io' && <NetworkIcons_1.GlobeIcon size={12} color={iconColor}/>}
|
|
434
|
-
<react_native_1.Text style={[
|
|
426
|
+
<react_native_1.Text style={[
|
|
435
427
|
perfStyles.categoryChipText,
|
|
436
428
|
isSelected && perfStyles.categoryChipTextActive,
|
|
437
429
|
]}>
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
</react_native_1.View>
|
|
430
|
+
{cat.label}
|
|
431
|
+
</react_native_1.Text>
|
|
441
432
|
</TouchableScale_1.default>);
|
|
442
433
|
})}
|
|
443
434
|
</react_native_1.ScrollView>
|
|
@@ -448,13 +439,13 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
448
439
|
{/* ── 1. REAL-TIME FPS SCORECARD & SMOOTH AREA GRAPH ── */}
|
|
449
440
|
<react_native_1.View style={perfStyles.heroCard}>
|
|
450
441
|
<react_native_1.View style={perfStyles.heroHeaderRow}>
|
|
451
|
-
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap:
|
|
452
|
-
<NetworkIcons_1.PerformanceIcon color={AppColors_1.AppColors.purple} size={
|
|
453
|
-
<react_native_1.View
|
|
454
|
-
<react_native_1.Text style={perfStyles.heroTitle}
|
|
442
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
443
|
+
<NetworkIcons_1.PerformanceIcon color={AppColors_1.AppColors.purple} size={17}/>
|
|
444
|
+
<react_native_1.View>
|
|
445
|
+
<react_native_1.Text style={perfStyles.heroTitle}>
|
|
455
446
|
{t('performance.fpsAreaChartTitle')}
|
|
456
447
|
</react_native_1.Text>
|
|
457
|
-
<react_native_1.Text style={perfStyles.heroSubTitle}
|
|
448
|
+
<react_native_1.Text style={perfStyles.heroSubTitle}>
|
|
458
449
|
{t('performance.fpsAreaChartSub')}
|
|
459
450
|
</react_native_1.Text>
|
|
460
451
|
</react_native_1.View>
|
|
@@ -1169,21 +1160,18 @@ const perfStyles = react_native_1.StyleSheet.create({
|
|
|
1169
1160
|
color: AppColors_1.AppColors.grayTextWeak,
|
|
1170
1161
|
},
|
|
1171
1162
|
fpsStatsGrid: {
|
|
1172
|
-
flex: 1,
|
|
1173
1163
|
flexDirection: 'row',
|
|
1174
1164
|
alignItems: 'center',
|
|
1175
|
-
|
|
1176
|
-
marginLeft: 8,
|
|
1165
|
+
gap: 8,
|
|
1177
1166
|
},
|
|
1178
1167
|
statItem: {
|
|
1179
1168
|
alignItems: 'center',
|
|
1180
|
-
|
|
1169
|
+
minWidth: 50,
|
|
1181
1170
|
},
|
|
1182
1171
|
statLabel: {
|
|
1183
|
-
fontFamily: AppFonts_1.AppFonts.
|
|
1184
|
-
fontSize:
|
|
1172
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1173
|
+
fontSize: 10,
|
|
1185
1174
|
color: AppColors_1.AppColors.grayTextWeak,
|
|
1186
|
-
textAlign: 'center',
|
|
1187
1175
|
},
|
|
1188
1176
|
statValue: {
|
|
1189
1177
|
fontFamily: AppFonts_1.AppFonts.interBold,
|