react-native-inapp-inspector 1.1.34 → 2.0.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/README.md +123 -101
- package/android/build.gradle +13 -1
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +904 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.kt +17 -0
- package/dist/commonjs/components/ConsoleLogCard.js +57 -56
- package/dist/commonjs/components/CopyButton.js +10 -1
- package/dist/commonjs/components/ErrorBoundary.js +3 -0
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +7 -3
- package/dist/commonjs/components/Inspector/BundleTab.js +20 -20
- package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -1
- package/dist/commonjs/components/Inspector/CrashDetail.js +16 -12
- package/dist/commonjs/components/Inspector/CrashTab.js +97 -90
- package/dist/commonjs/components/Inspector/InspectorHeader.js +28 -24
- package/dist/commonjs/components/Inspector/MainScreen.js +20 -103
- package/dist/commonjs/components/Inspector/NetworkTab.js +143 -10
- package/dist/commonjs/components/Inspector/PerformanceTab.js +96 -3
- package/dist/commonjs/components/Inspector/ReduxDetail.js +24 -19
- package/dist/commonjs/components/Inspector/ReduxTab.js +30 -18
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1578 -754
- package/dist/commonjs/components/Inspector/TabBar.js +6 -3
- package/dist/commonjs/components/LogCard.js +27 -9
- package/dist/commonjs/components/MetaAccordion.js +42 -0
- package/dist/commonjs/components/NetworkIcons.d.ts +10 -0
- package/dist/commonjs/components/NetworkIcons.js +53 -1
- package/dist/commonjs/components/Toast.js +3 -3
- package/dist/commonjs/components/TouchableScale.d.ts +5 -2
- package/dist/commonjs/components/TouchableScale.js +30 -32
- package/dist/commonjs/constants/index.d.ts +1 -2
- package/dist/commonjs/constants/index.js +4 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +6 -0
- package/dist/commonjs/customHooks/analyticsLogger.js +16 -5
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +2 -0
- package/dist/commonjs/customHooks/bundleAnalyzer.js +26 -17
- package/dist/commonjs/customHooks/consoleLogger.d.ts +2 -0
- package/dist/commonjs/customHooks/consoleLogger.js +10 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -0
- package/dist/commonjs/customHooks/crashHandler.js +17 -1
- package/dist/commonjs/customHooks/networkLogger.d.ts +2 -0
- package/dist/commonjs/customHooks/networkLogger.js +12 -1
- package/dist/commonjs/customHooks/performanceTracker.d.ts +3 -1
- package/dist/commonjs/customHooks/performanceTracker.js +18 -4
- package/dist/commonjs/customHooks/reduxLogger.d.ts +2 -0
- package/dist/commonjs/customHooks/reduxLogger.js +10 -1
- package/dist/commonjs/helpers/index.js +10 -1
- package/dist/commonjs/helpers/settingsStore.d.ts +9 -0
- package/dist/commonjs/helpers/settingsStore.js +59 -3
- package/dist/commonjs/i18n/locales/en.json +96 -28
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +307 -73
- package/dist/commonjs/native/NativeInspector.d.ts +125 -0
- package/dist/commonjs/native/NativeInspector.js +313 -0
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +22 -0
- package/dist/commonjs/native/NativeNetworkInspector.js +4 -0
- package/dist/commonjs/styles/AppColors.d.ts +28 -0
- package/dist/commonjs/styles/AppColors.js +30 -0
- package/dist/commonjs/styles/index.js +6 -6
- package/dist/commonjs/types/enums.d.ts +1 -1
- package/dist/commonjs/types/interfaces.d.ts +9 -0
- package/dist/esm/components/ConsoleLogCard.js +58 -57
- package/dist/esm/components/CopyButton.js +10 -1
- package/dist/esm/components/ErrorBoundary.js +3 -0
- package/dist/esm/components/Inspector/AnalyticsTab.js +7 -3
- package/dist/esm/components/Inspector/BundleTab.js +20 -20
- package/dist/esm/components/Inspector/ConsoleTab.js +1 -1
- package/dist/esm/components/Inspector/CrashDetail.js +16 -12
- package/dist/esm/components/Inspector/CrashTab.js +97 -90
- package/dist/esm/components/Inspector/InspectorHeader.js +29 -25
- package/dist/esm/components/Inspector/MainScreen.js +21 -71
- package/dist/esm/components/Inspector/NetworkTab.js +145 -12
- package/dist/esm/components/Inspector/PerformanceTab.js +96 -3
- package/dist/esm/components/Inspector/ReduxDetail.js +24 -19
- package/dist/esm/components/Inspector/ReduxTab.js +30 -18
- package/dist/esm/components/Inspector/SettingsPanel.js +1582 -758
- package/dist/esm/components/Inspector/TabBar.js +7 -4
- package/dist/esm/components/LogCard.js +27 -9
- package/dist/esm/components/MetaAccordion.js +42 -0
- package/dist/esm/components/NetworkIcons.d.ts +10 -0
- package/dist/esm/components/NetworkIcons.js +42 -0
- package/dist/esm/components/Toast.js +3 -3
- package/dist/esm/components/TouchableScale.d.ts +5 -2
- package/dist/esm/components/TouchableScale.js +31 -33
- package/dist/esm/constants/index.d.ts +1 -2
- package/dist/esm/constants/index.js +4 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/analyticsLogger.d.ts +6 -0
- package/dist/esm/customHooks/analyticsLogger.js +12 -4
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +2 -0
- package/dist/esm/customHooks/bundleAnalyzer.js +23 -16
- package/dist/esm/customHooks/consoleLogger.d.ts +2 -0
- package/dist/esm/customHooks/consoleLogger.js +7 -0
- package/dist/esm/customHooks/crashHandler.d.ts +2 -0
- package/dist/esm/customHooks/crashHandler.js +14 -0
- package/dist/esm/customHooks/networkLogger.d.ts +2 -0
- package/dist/esm/customHooks/networkLogger.js +9 -0
- package/dist/esm/customHooks/performanceTracker.d.ts +3 -1
- package/dist/esm/customHooks/performanceTracker.js +15 -3
- package/dist/esm/customHooks/reduxLogger.d.ts +2 -0
- package/dist/esm/customHooks/reduxLogger.js +7 -0
- package/dist/esm/helpers/index.js +10 -1
- package/dist/esm/helpers/settingsStore.d.ts +9 -0
- package/dist/esm/helpers/settingsStore.js +58 -3
- package/dist/esm/i18n/locales/en.json +96 -28
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +279 -59
- package/dist/esm/native/NativeInspector.d.ts +125 -0
- package/dist/esm/native/NativeInspector.js +289 -0
- package/dist/esm/native/NativeNetworkInspector.d.ts +22 -0
- package/dist/esm/native/NativeNetworkInspector.js +2 -0
- package/dist/esm/styles/AppColors.d.ts +28 -0
- package/dist/esm/styles/AppColors.js +30 -0
- package/dist/esm/styles/index.js +6 -6
- package/dist/esm/types/enums.d.ts +1 -1
- package/dist/esm/types/interfaces.d.ts +9 -0
- package/ios/NetworkInspectorModule.h +6 -0
- package/ios/NetworkInspectorModule.m +720 -5
- package/package.json +15 -3
- package/react-native-inapp-inspector.podspec +7 -2
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.java +0 -97
- package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.java +0 -28
|
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const react_1 =
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
40
|
const react_native_1 = require("react-native");
|
|
41
41
|
const react_native_svg_1 = __importStar(require("react-native-svg"));
|
|
42
42
|
const react_native_linear_gradient_1 = __importDefault(require("react-native-linear-gradient"));
|
|
@@ -51,31 +51,124 @@ const networkLogger_1 = require("../../customHooks/networkLogger");
|
|
|
51
51
|
const consoleLogger_1 = require("../../customHooks/consoleLogger");
|
|
52
52
|
const analyticsLogger_1 = require("../../customHooks/analyticsLogger");
|
|
53
53
|
const crashHandler_1 = require("../../customHooks/crashHandler");
|
|
54
|
+
const bundleAnalyzer_1 = require("../../customHooks/bundleAnalyzer");
|
|
55
|
+
const performanceTracker_1 = require("../../customHooks/performanceTracker");
|
|
54
56
|
const reduxLogger_1 = require("../../customHooks/reduxLogger");
|
|
55
57
|
const analyticsLogger_2 = require("../../customHooks/analyticsLogger");
|
|
56
58
|
const i18n_1 = require("../../i18n");
|
|
57
59
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
58
60
|
const SettingsPanel = () => {
|
|
59
61
|
const { t } = (0, i18n_1.useTranslation)();
|
|
60
|
-
const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, showConsoleLevels, setShowConsoleLevels, resetToDefaults, storage, logs, consoleLogs, analyticsEvents, reduxState, maxNetworkLogs, setMaxNetworkLogs, maxConsoleLogs, setMaxConsoleLogs, reduxAutoRefresh, setReduxAutoRefreshState, reduxExpandDepth, setReduxExpandDepth, switchActiveTab, setSelected, setSelectedEvent, setReduxState, crashRecords, maxCrashLogs, setMaxCrashLogs, } = (0, InspectorContext_1.useInspector)();
|
|
62
|
+
const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, 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, } = (0, InspectorContext_1.useInspector)();
|
|
63
|
+
const autoRamProfile = (0, settingsStore_1.calculateRamBasedLimits)(deviceFreeRamMb);
|
|
61
64
|
const isPersistent = (0, settingsStore_1.isPersistentStorageAvailable)();
|
|
62
|
-
|
|
65
|
+
// Safe Area & Status Bar Padding for All Device Form Factors
|
|
66
|
+
const statusBarHeight = react_native_1.Platform.OS === 'android' ? react_native_1.StatusBar.currentHeight || 24 : 44;
|
|
67
|
+
const headerTopPadding = modalHeightPercent >= 95 ? statusBarHeight : 0;
|
|
68
|
+
const allModules = [
|
|
69
|
+
{
|
|
70
|
+
key: 'apis',
|
|
71
|
+
label: 'APIs (Network)',
|
|
72
|
+
category: 'core',
|
|
73
|
+
icon: 'apis',
|
|
74
|
+
desc: 'HTTP/HTTPS requests, GraphQL, Axios & WebSocket inspector',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
key: 'logs',
|
|
78
|
+
label: 'Console Logs',
|
|
79
|
+
category: 'core',
|
|
80
|
+
icon: 'logs',
|
|
81
|
+
desc: 'Terminal console logs, warnings, errors & stack traces',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: 'performance',
|
|
85
|
+
label: 'Performance Tracker',
|
|
86
|
+
category: 'diagnostic',
|
|
87
|
+
icon: 'performance',
|
|
88
|
+
desc: '60 FPS monitor, Hermes memory telemetry & re-render profiler',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
key: 'bundle',
|
|
92
|
+
label: 'Bundle Analyzer',
|
|
93
|
+
category: 'diagnostic',
|
|
94
|
+
icon: 'bundle',
|
|
95
|
+
desc: 'Metro packager dependencies, source maps & asset breakdown',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
key: 'crash',
|
|
99
|
+
label: 'Crash Protection',
|
|
100
|
+
category: 'diagnostic',
|
|
101
|
+
icon: 'crash',
|
|
102
|
+
desc: 'Runtime exception guard, breadcrumbs & memory snapshot',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
key: 'analytics',
|
|
106
|
+
label: 'Analytics Logger',
|
|
107
|
+
category: 'telemetry',
|
|
108
|
+
icon: 'analytics',
|
|
109
|
+
desc: 'Firebase & custom analytics events, user properties & params',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
key: 'redux',
|
|
113
|
+
label: 'Redux Inspector',
|
|
114
|
+
category: 'telemetry',
|
|
115
|
+
icon: 'redux',
|
|
116
|
+
desc: 'Store state diffing, action history & reducer timeline',
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
// Staged selection state for checkboxes before clicking "Save Changes"
|
|
120
|
+
const [stagedTabVisibility, setStagedTabVisibility] = (0, react_1.useState)(() => ({
|
|
121
|
+
apis: true,
|
|
122
|
+
logs: Boolean(tabVisibility?.logs),
|
|
123
|
+
analytics: Boolean(tabVisibility?.analytics),
|
|
124
|
+
redux: Boolean(tabVisibility?.redux),
|
|
125
|
+
bundle: Boolean(tabVisibility?.bundle),
|
|
126
|
+
performance: Boolean(tabVisibility?.performance),
|
|
127
|
+
crash: Boolean(tabVisibility?.crash),
|
|
128
|
+
}));
|
|
129
|
+
// Synchronize staged state with tabVisibility when tabVisibility updates
|
|
130
|
+
(0, react_1.useEffect)(() => {
|
|
131
|
+
setStagedTabVisibility({
|
|
132
|
+
apis: true,
|
|
133
|
+
logs: Boolean(tabVisibility?.logs),
|
|
134
|
+
analytics: Boolean(tabVisibility?.analytics),
|
|
135
|
+
redux: Boolean(tabVisibility?.redux),
|
|
136
|
+
bundle: Boolean(tabVisibility?.bundle),
|
|
137
|
+
performance: Boolean(tabVisibility?.performance),
|
|
138
|
+
crash: Boolean(tabVisibility?.crash),
|
|
139
|
+
});
|
|
140
|
+
}, [tabVisibility]);
|
|
141
|
+
const hasUnsavedChanges = (0, react_1.useMemo)(() => {
|
|
142
|
+
return allModules.some(m => Boolean(stagedTabVisibility[m.key]) !==
|
|
143
|
+
Boolean(tabVisibility?.[m.key]));
|
|
144
|
+
}, [stagedTabVisibility, tabVisibility, allModules]);
|
|
145
|
+
const stagedActiveCount = allModules.filter(m => m.key === 'apis' || Boolean(stagedTabVisibility[m.key])).length;
|
|
146
|
+
const handleSaveChanges = () => {
|
|
147
|
+
(0, InspectorContext_1.animateNextLayout)();
|
|
148
|
+
allModules.forEach(m => {
|
|
149
|
+
if (m.key !== 'apis') {
|
|
150
|
+
const isStagedOn = Boolean(stagedTabVisibility[m.key]);
|
|
151
|
+
const isCurrentOn = Boolean(tabVisibility?.[m.key]);
|
|
152
|
+
if (isStagedOn !== isCurrentOn) {
|
|
153
|
+
toggleTabVisibility(m.key);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
react_native_1.Alert.alert(t('settings.settingsSaved'), t('settings.settingsSavedDesc'));
|
|
158
|
+
};
|
|
63
159
|
if (settingsPage === 'main') {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{ key: 'bundle', label: 'Bundle', icon: 'bundle' },
|
|
70
|
-
{ key: 'performance', label: 'Performance', icon: 'performance' },
|
|
71
|
-
{ key: 'crash', label: 'Crash', icon: 'crash' },
|
|
72
|
-
];
|
|
73
|
-
return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
|
|
74
|
-
{/* Settings Header with back button */}
|
|
160
|
+
return (<react_native_1.View style={{
|
|
161
|
+
flex: 1,
|
|
162
|
+
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
163
|
+
}}>
|
|
164
|
+
{/* Modern Floating Gradient Header */}
|
|
75
165
|
<react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.purple, AppColors_1.AppColors.brandPurple]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }} style={styles_1.default.headerGradient}>
|
|
76
166
|
<react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
|
|
77
|
-
<react_native_1.View style={[
|
|
78
|
-
|
|
167
|
+
<react_native_1.View style={[
|
|
168
|
+
styles_1.default.header,
|
|
169
|
+
{ paddingHorizontal: 16, paddingVertical: 12, gap: 12 },
|
|
170
|
+
]}>
|
|
171
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel={t('settings.back')} onPress={() => {
|
|
79
172
|
(0, InspectorContext_1.animateNextLayout)();
|
|
80
173
|
setSettingsPage(null);
|
|
81
174
|
switchActiveTab('apis');
|
|
@@ -84,223 +177,360 @@ const SettingsPanel = () => {
|
|
|
84
177
|
borderRadius: 10,
|
|
85
178
|
backgroundColor: `${AppColors_1.AppColors.white}26`,
|
|
86
179
|
borderWidth: 1,
|
|
87
|
-
borderColor: `${AppColors_1.AppColors.white}
|
|
180
|
+
borderColor: `${AppColors_1.AppColors.white}18`,
|
|
88
181
|
}}>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
<react_native_1.
|
|
182
|
+
<NetworkIcons_1.WhiteBackNavigation color={AppColors_1.AppColors.white} size={16}/>
|
|
183
|
+
</TouchableScale_1.default>
|
|
184
|
+
|
|
185
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
186
|
+
<react_native_1.View style={{
|
|
187
|
+
flexDirection: 'row',
|
|
188
|
+
alignItems: 'center',
|
|
189
|
+
gap: 8,
|
|
190
|
+
}}>
|
|
191
|
+
<react_native_1.Text style={{
|
|
93
192
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
94
193
|
fontSize: 17,
|
|
95
194
|
color: AppColors_1.AppColors.white,
|
|
195
|
+
letterSpacing: -0.3,
|
|
196
|
+
lineHeight: 22,
|
|
96
197
|
}}>
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
198
|
+
{t('settings.mainTitle')}
|
|
199
|
+
</react_native_1.Text>
|
|
200
|
+
<react_native_1.View style={{
|
|
201
|
+
backgroundColor: `${AppColors_1.AppColors.white}26`,
|
|
202
|
+
paddingHorizontal: 7,
|
|
203
|
+
paddingVertical: 2,
|
|
204
|
+
borderRadius: 12,
|
|
205
|
+
}}>
|
|
206
|
+
<react_native_1.Text style={{
|
|
207
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
208
|
+
fontSize: 10,
|
|
209
|
+
color: AppColors_1.AppColors.white,
|
|
210
|
+
lineHeight: 13,
|
|
211
|
+
}}>
|
|
212
|
+
{stagedActiveCount}/{allModules.length} Active
|
|
213
|
+
</react_native_1.Text>
|
|
214
|
+
</react_native_1.View>
|
|
215
|
+
</react_native_1.View>
|
|
216
|
+
<react_native_1.Text style={{
|
|
100
217
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
101
218
|
fontSize: 11,
|
|
102
|
-
color: `${AppColors_1.AppColors.white}
|
|
103
|
-
marginTop:
|
|
219
|
+
color: `${AppColors_1.AppColors.white}CC`,
|
|
220
|
+
marginTop: 2,
|
|
221
|
+
lineHeight: 15,
|
|
104
222
|
}}>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
223
|
+
{t('settings.mainSubtitle')}
|
|
224
|
+
</react_native_1.Text>
|
|
225
|
+
</react_native_1.View>
|
|
226
|
+
|
|
227
|
+
<react_native_1.View style={{
|
|
228
|
+
backgroundColor: `${AppColors_1.AppColors.white}22`,
|
|
110
229
|
paddingHorizontal: 8,
|
|
111
230
|
paddingVertical: 4,
|
|
112
231
|
borderRadius: 8,
|
|
113
232
|
borderWidth: 1,
|
|
114
233
|
borderColor: `${AppColors_1.AppColors.white}1A`,
|
|
115
234
|
}}>
|
|
116
|
-
|
|
235
|
+
<react_native_1.Text style={{
|
|
117
236
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
118
237
|
fontSize: 10.5,
|
|
119
238
|
color: AppColors_1.AppColors.white,
|
|
239
|
+
lineHeight: 14,
|
|
120
240
|
}}>
|
|
121
|
-
|
|
122
|
-
|
|
241
|
+
v{constants_1.LIB_VERSION}
|
|
242
|
+
</react_native_1.Text>
|
|
243
|
+
</react_native_1.View>
|
|
123
244
|
</react_native_1.View>
|
|
124
245
|
</react_native_1.View>
|
|
125
|
-
</
|
|
126
|
-
</react_native_linear_gradient_1.default>
|
|
246
|
+
</react_native_linear_gradient_1.default>
|
|
127
247
|
|
|
128
|
-
<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap:
|
|
129
|
-
{/* Sub
|
|
248
|
+
<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 14 }} showsVerticalScrollIndicator={false}>
|
|
249
|
+
{/* Segmented Top Navigation Sub-Tabs */}
|
|
130
250
|
<react_native_1.View style={{
|
|
131
251
|
flexDirection: 'row',
|
|
132
252
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
133
|
-
borderRadius:
|
|
134
|
-
padding:
|
|
253
|
+
borderRadius: 12,
|
|
254
|
+
padding: 4,
|
|
135
255
|
borderWidth: 1,
|
|
136
256
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
137
|
-
|
|
257
|
+
shadowColor: AppColors_1.AppColors.black,
|
|
258
|
+
shadowOpacity: 0.04,
|
|
259
|
+
shadowRadius: 4,
|
|
260
|
+
shadowOffset: { width: 0, height: 2 },
|
|
138
261
|
}}>
|
|
139
|
-
<
|
|
262
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.modulesAndTools')} accessibilityState={{ selected: settingsActiveSubTab === 'module' }} onPress={() => {
|
|
140
263
|
(0, InspectorContext_1.animateNextLayout)();
|
|
141
264
|
setSettingsActiveSubTab('module');
|
|
142
265
|
}} style={{
|
|
143
266
|
flex: 1,
|
|
144
|
-
paddingVertical:
|
|
267
|
+
paddingVertical: 9,
|
|
268
|
+
flexDirection: 'row',
|
|
145
269
|
alignItems: 'center',
|
|
146
270
|
justifyContent: 'center',
|
|
147
|
-
|
|
271
|
+
gap: 6,
|
|
272
|
+
borderRadius: 9,
|
|
148
273
|
backgroundColor: settingsActiveSubTab === 'module'
|
|
149
274
|
? AppColors_1.AppColors.purple
|
|
150
275
|
: 'transparent',
|
|
151
276
|
}}>
|
|
277
|
+
<NetworkIcons_1.LayersIcon color={settingsActiveSubTab === 'module'
|
|
278
|
+
? AppColors_1.AppColors.white
|
|
279
|
+
: AppColors_1.AppColors.grayText} size={13}/>
|
|
152
280
|
<react_native_1.Text style={{
|
|
153
281
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
154
|
-
fontSize: 12,
|
|
282
|
+
fontSize: 12.5,
|
|
283
|
+
lineHeight: 16,
|
|
155
284
|
color: settingsActiveSubTab === 'module'
|
|
156
285
|
? AppColors_1.AppColors.white
|
|
157
286
|
: AppColors_1.AppColors.grayText,
|
|
158
287
|
}}>
|
|
159
|
-
|
|
288
|
+
{t('settings.modulesAndTools')}
|
|
160
289
|
</react_native_1.Text>
|
|
161
|
-
</
|
|
162
|
-
|
|
290
|
+
</TouchableScale_1.default>
|
|
291
|
+
|
|
292
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="tab" accessibilityLabel={t('settings.uiPreferences')} accessibilityState={{ selected: settingsActiveSubTab === 'ui' }} onPress={() => {
|
|
163
293
|
(0, InspectorContext_1.animateNextLayout)();
|
|
164
294
|
setSettingsActiveSubTab('ui');
|
|
165
295
|
}} style={{
|
|
166
296
|
flex: 1,
|
|
167
|
-
paddingVertical:
|
|
297
|
+
paddingVertical: 9,
|
|
298
|
+
flexDirection: 'row',
|
|
168
299
|
alignItems: 'center',
|
|
169
300
|
justifyContent: 'center',
|
|
170
|
-
|
|
301
|
+
gap: 6,
|
|
302
|
+
borderRadius: 9,
|
|
171
303
|
backgroundColor: settingsActiveSubTab === 'ui'
|
|
172
304
|
? AppColors_1.AppColors.purple
|
|
173
305
|
: 'transparent',
|
|
174
306
|
}}>
|
|
307
|
+
<NetworkIcons_1.ScreenIcon color={settingsActiveSubTab === 'ui'
|
|
308
|
+
? AppColors_1.AppColors.white
|
|
309
|
+
: AppColors_1.AppColors.grayText} size={13}/>
|
|
175
310
|
<react_native_1.Text style={{
|
|
176
311
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
177
|
-
fontSize: 12,
|
|
312
|
+
fontSize: 12.5,
|
|
313
|
+
lineHeight: 16,
|
|
178
314
|
color: settingsActiveSubTab === 'ui'
|
|
179
315
|
? AppColors_1.AppColors.white
|
|
180
316
|
: AppColors_1.AppColors.grayText,
|
|
181
317
|
}}>
|
|
182
|
-
|
|
318
|
+
{t('settings.uiPreferences')}
|
|
183
319
|
</react_native_1.Text>
|
|
184
|
-
</
|
|
320
|
+
</TouchableScale_1.default>
|
|
185
321
|
</react_native_1.View>
|
|
186
322
|
|
|
187
|
-
{settingsActiveSubTab === 'module' ? (
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
backgroundColor: AppColors_1.AppColors.
|
|
323
|
+
{settingsActiveSubTab === 'module' ? (<react_native_1.View style={{ gap: 12 }}>
|
|
324
|
+
{/* Performance Advisory Banner */}
|
|
325
|
+
<react_native_1.View style={{
|
|
326
|
+
backgroundColor: `${AppColors_1.AppColors.purple}0A`,
|
|
191
327
|
borderRadius: 12,
|
|
328
|
+
padding: 12,
|
|
192
329
|
borderWidth: 1,
|
|
193
|
-
borderColor: AppColors_1.AppColors.
|
|
194
|
-
overflow: 'hidden',
|
|
195
|
-
}}>
|
|
196
|
-
{/* Table Header */}
|
|
197
|
-
<react_native_1.View style={{
|
|
330
|
+
borderColor: `${AppColors_1.AppColors.purple}20`,
|
|
198
331
|
flexDirection: 'row',
|
|
199
332
|
alignItems: 'center',
|
|
200
|
-
|
|
201
|
-
paddingHorizontal: 14,
|
|
202
|
-
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
203
|
-
borderBottomWidth: 1,
|
|
204
|
-
borderBottomColor: AppColors_1.AppColors.dividerColor,
|
|
205
|
-
gap: 12,
|
|
333
|
+
gap: 10,
|
|
206
334
|
}}>
|
|
207
|
-
<react_native_1.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
335
|
+
<react_native_1.View style={{
|
|
336
|
+
width: 32,
|
|
337
|
+
height: 32,
|
|
338
|
+
borderRadius: 8,
|
|
339
|
+
backgroundColor: `${AppColors_1.AppColors.purple}14`,
|
|
340
|
+
alignItems: 'center',
|
|
341
|
+
justifyContent: 'center',
|
|
213
342
|
}}>
|
|
214
|
-
|
|
215
|
-
</react_native_1.
|
|
216
|
-
<react_native_1.
|
|
343
|
+
<NetworkIcons_1.SignalIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
344
|
+
</react_native_1.View>
|
|
345
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
346
|
+
<react_native_1.Text style={{
|
|
217
347
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
218
|
-
fontSize:
|
|
219
|
-
color: AppColors_1.AppColors.
|
|
220
|
-
|
|
221
|
-
width: 90,
|
|
222
|
-
textAlign: 'right',
|
|
223
|
-
paddingRight: 4,
|
|
348
|
+
fontSize: 12,
|
|
349
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
350
|
+
lineHeight: 16,
|
|
224
351
|
}}>
|
|
225
|
-
|
|
226
|
-
|
|
352
|
+
{t('settings.zeroOverheadTitle')}
|
|
353
|
+
</react_native_1.Text>
|
|
354
|
+
<react_native_1.Text style={{
|
|
355
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
356
|
+
fontSize: 10.5,
|
|
357
|
+
color: AppColors_1.AppColors.grayText,
|
|
358
|
+
marginTop: 2,
|
|
359
|
+
lineHeight: 14,
|
|
360
|
+
}}>
|
|
361
|
+
{t('settings.zeroOverheadDesc')}
|
|
362
|
+
</react_native_1.Text>
|
|
363
|
+
</react_native_1.View>
|
|
227
364
|
</react_native_1.View>
|
|
228
365
|
|
|
229
|
-
{
|
|
366
|
+
{/* Enhanced Individual Module Cards with Decorative Checkboxes */}
|
|
367
|
+
<react_native_1.View style={{ gap: 10 }}>
|
|
368
|
+
{allModules.map(moduleItem => {
|
|
230
369
|
const isReduxAvail = (0, reduxLogger_1.isReduxConnected)();
|
|
231
370
|
const isAnalyticsAvail = (0, analyticsLogger_2.isAnalyticsConnected)();
|
|
232
|
-
const isUnavailable = (
|
|
233
|
-
(
|
|
234
|
-
const isLocked =
|
|
235
|
-
const
|
|
236
|
-
(Boolean(
|
|
237
|
-
|
|
238
|
-
|
|
371
|
+
const isUnavailable = (moduleItem.key === 'redux' && !isReduxAvail) ||
|
|
372
|
+
(moduleItem.key === 'analytics' && !isAnalyticsAvail);
|
|
373
|
+
const isLocked = moduleItem.key === 'apis' || isUnavailable;
|
|
374
|
+
const isChecked = moduleItem.key === 'apis' ||
|
|
375
|
+
(Boolean(stagedTabVisibility?.[moduleItem.key]) &&
|
|
376
|
+
!isUnavailable);
|
|
377
|
+
const liveStats = moduleItem.key === 'apis'
|
|
378
|
+
? `${logs.length} requests • Limit: ${maxNetworkLogs}`
|
|
379
|
+
: moduleItem.key === 'logs'
|
|
380
|
+
? `${consoleLogs.length} logs • Limit: ${maxConsoleLogs}`
|
|
381
|
+
: moduleItem.key === 'performance'
|
|
382
|
+
? '60 FPS Target • Memory Telemetry'
|
|
383
|
+
: moduleItem.key === 'bundle'
|
|
384
|
+
? 'Metro Packager • Dependency Map'
|
|
385
|
+
: moduleItem.key === 'crash'
|
|
386
|
+
? `${crashRecords?.length || 0} crashes recorded • Crash Guard`
|
|
387
|
+
: moduleItem.key === 'analytics'
|
|
388
|
+
? `${analyticsEvents.length} events logged`
|
|
389
|
+
: moduleItem.key === 'redux'
|
|
390
|
+
? `${Object.keys(reduxState || {}).length} slices • Depth: ${reduxExpandDepth}`
|
|
391
|
+
: '';
|
|
392
|
+
return (<react_native_1.View key={moduleItem.key} style={{
|
|
393
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
394
|
+
borderRadius: 14,
|
|
395
|
+
borderWidth: 1.5,
|
|
396
|
+
borderColor: isChecked
|
|
397
|
+
? `${AppColors_1.AppColors.purple}38`
|
|
398
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
399
|
+
padding: 14,
|
|
400
|
+
gap: 10,
|
|
401
|
+
shadowColor: AppColors_1.AppColors.black,
|
|
402
|
+
shadowOpacity: isChecked ? 0.04 : 0.02,
|
|
403
|
+
shadowRadius: 5,
|
|
404
|
+
shadowOffset: { width: 0, height: 2 },
|
|
405
|
+
}}>
|
|
406
|
+
{/* Top Row: Icon + Title & Badges + Checkbox */}
|
|
407
|
+
<react_native_1.View style={{
|
|
239
408
|
flexDirection: 'row',
|
|
240
|
-
alignItems: '
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
borderBottomWidth: isLast ? 0 : 1,
|
|
244
|
-
borderBottomColor: AppColors_1.AppColors.dividerColor,
|
|
245
|
-
gap: 12,
|
|
409
|
+
alignItems: 'flex-start',
|
|
410
|
+
justifyContent: 'space-between',
|
|
411
|
+
gap: 10,
|
|
246
412
|
}}>
|
|
247
|
-
|
|
248
|
-
|
|
413
|
+
{/* Tap Zone for Details/Settings */}
|
|
414
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel={`${moduleItem.label} settings`} disabled={isUnavailable} onPress={() => {
|
|
415
|
+
(0, InspectorContext_1.animateNextLayout)();
|
|
416
|
+
setSettingsPage(moduleItem.key);
|
|
417
|
+
}} style={{
|
|
249
418
|
flex: 1,
|
|
250
419
|
flexDirection: 'row',
|
|
251
|
-
alignItems: '
|
|
252
|
-
gap:
|
|
253
|
-
flexWrap: 'wrap',
|
|
420
|
+
alignItems: 'flex-start',
|
|
421
|
+
gap: 10,
|
|
254
422
|
}}>
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
width:
|
|
258
|
-
height:
|
|
259
|
-
borderRadius:
|
|
423
|
+
{/* Icon Tile */}
|
|
424
|
+
<react_native_1.View style={{
|
|
425
|
+
width: 36,
|
|
426
|
+
height: 36,
|
|
427
|
+
borderRadius: 10,
|
|
260
428
|
backgroundColor: isLocked
|
|
261
|
-
? AppColors_1.AppColors.grayBorderSecondary
|
|
262
|
-
:
|
|
429
|
+
? `${AppColors_1.AppColors.grayBorderSecondary}4D`
|
|
430
|
+
: isChecked
|
|
431
|
+
? `${AppColors_1.AppColors.purple}14`
|
|
432
|
+
: AppColors_1.AppColors.grayBackground,
|
|
263
433
|
borderWidth: 1,
|
|
264
434
|
borderColor: isLocked
|
|
265
435
|
? AppColors_1.AppColors.dividerColor
|
|
266
|
-
:
|
|
436
|
+
: isChecked
|
|
437
|
+
? `${AppColors_1.AppColors.purple}33`
|
|
438
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
267
439
|
alignItems: 'center',
|
|
268
440
|
justifyContent: 'center',
|
|
441
|
+
marginTop: 1,
|
|
269
442
|
}}>
|
|
270
|
-
|
|
271
|
-
? AppColors_1.AppColors.
|
|
272
|
-
: AppColors_1.AppColors.
|
|
273
|
-
|
|
274
|
-
? AppColors_1.AppColors.
|
|
275
|
-
: AppColors_1.AppColors.
|
|
276
|
-
|
|
277
|
-
? AppColors_1.AppColors.
|
|
278
|
-
: AppColors_1.AppColors.
|
|
279
|
-
|
|
280
|
-
? AppColors_1.AppColors.
|
|
281
|
-
: AppColors_1.AppColors.
|
|
282
|
-
|
|
283
|
-
? AppColors_1.AppColors.
|
|
284
|
-
: AppColors_1.AppColors.
|
|
285
|
-
|
|
286
|
-
? AppColors_1.AppColors.
|
|
287
|
-
: AppColors_1.AppColors.
|
|
288
|
-
|
|
289
|
-
? AppColors_1.AppColors.
|
|
290
|
-
: AppColors_1.AppColors.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
443
|
+
{moduleItem.icon === 'apis' && (<NetworkIcons_1.SignalIcon color={isChecked
|
|
444
|
+
? AppColors_1.AppColors.purple
|
|
445
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
446
|
+
{moduleItem.icon === 'logs' && (<NetworkIcons_1.TerminalIcon color={isChecked
|
|
447
|
+
? AppColors_1.AppColors.purple
|
|
448
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
449
|
+
{moduleItem.icon === 'performance' && (<NetworkIcons_1.PerformanceIcon color={isChecked
|
|
450
|
+
? AppColors_1.AppColors.purple
|
|
451
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
452
|
+
{moduleItem.icon === 'bundle' && (<NetworkIcons_1.PackageIcon color={isChecked
|
|
453
|
+
? AppColors_1.AppColors.purple
|
|
454
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
455
|
+
{moduleItem.icon === 'crash' && (<NetworkIcons_1.CrashIcon color={isChecked
|
|
456
|
+
? AppColors_1.AppColors.purple
|
|
457
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
458
|
+
{moduleItem.icon === 'analytics' && (<NetworkIcons_1.AnalyticsIcon color={isChecked
|
|
459
|
+
? AppColors_1.AppColors.purple
|
|
460
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
461
|
+
{moduleItem.icon === 'redux' && (<NetworkIcons_1.ReduxIcon color={isChecked
|
|
462
|
+
? AppColors_1.AppColors.purple
|
|
463
|
+
: AppColors_1.AppColors.grayTextWeak} size={16}/>)}
|
|
464
|
+
</react_native_1.View>
|
|
465
|
+
|
|
466
|
+
{/* Titles & Status Pill */}
|
|
467
|
+
<react_native_1.View style={{ flex: 1, gap: 2 }}>
|
|
468
|
+
<react_native_1.View style={{
|
|
469
|
+
flexDirection: 'row',
|
|
470
|
+
alignItems: 'center',
|
|
471
|
+
gap: 6,
|
|
472
|
+
flexWrap: 'wrap',
|
|
473
|
+
}}>
|
|
474
|
+
<react_native_1.Text style={{
|
|
294
475
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
295
|
-
fontSize:
|
|
476
|
+
fontSize: 14,
|
|
477
|
+
lineHeight: 18,
|
|
296
478
|
color: isLocked
|
|
297
479
|
? AppColors_1.AppColors.grayText
|
|
298
480
|
: AppColors_1.AppColors.primaryBlack,
|
|
299
481
|
}}>
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
482
|
+
{moduleItem.label}
|
|
483
|
+
</react_native_1.Text>
|
|
484
|
+
|
|
485
|
+
{/* Default Startup Tab Badge */}
|
|
486
|
+
{moduleItem.key === defaultTab &&
|
|
487
|
+
!isUnavailable && (<react_native_1.View style={{
|
|
488
|
+
flexDirection: 'row',
|
|
489
|
+
alignItems: 'center',
|
|
490
|
+
backgroundColor: `${AppColors_1.AppColors.purple}14`,
|
|
491
|
+
borderRadius: 12,
|
|
492
|
+
paddingHorizontal: 5,
|
|
493
|
+
paddingVertical: 1.5,
|
|
494
|
+
borderWidth: 1,
|
|
495
|
+
borderColor: `${AppColors_1.AppColors.purple}2E`,
|
|
496
|
+
gap: 3,
|
|
497
|
+
}}>
|
|
498
|
+
<react_native_1.View style={{
|
|
499
|
+
width: 4,
|
|
500
|
+
height: 4,
|
|
501
|
+
borderRadius: 2,
|
|
502
|
+
backgroundColor: AppColors_1.AppColors.purple,
|
|
503
|
+
}}/>
|
|
504
|
+
<react_native_1.Text style={{
|
|
505
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
506
|
+
fontSize: 8,
|
|
507
|
+
lineHeight: 11,
|
|
508
|
+
color: AppColors_1.AppColors.purple,
|
|
509
|
+
letterSpacing: 0.4,
|
|
510
|
+
}}>
|
|
511
|
+
{t('settings.defaultBadge')}
|
|
512
|
+
</react_native_1.Text>
|
|
513
|
+
</react_native_1.View>)}
|
|
514
|
+
|
|
515
|
+
{/* Status Pill */}
|
|
516
|
+
{moduleItem.key === 'apis' ? (<react_native_1.View style={{
|
|
517
|
+
backgroundColor: `${AppColors_1.AppColors.blue500}14`,
|
|
518
|
+
borderRadius: 4,
|
|
519
|
+
paddingHorizontal: 5,
|
|
520
|
+
paddingVertical: 1.5,
|
|
521
|
+
borderWidth: 1,
|
|
522
|
+
borderColor: `${AppColors_1.AppColors.blue500}33`,
|
|
523
|
+
}}>
|
|
524
|
+
<react_native_1.Text style={{
|
|
525
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
526
|
+
fontSize: 8,
|
|
527
|
+
lineHeight: 11,
|
|
528
|
+
color: AppColors_1.AppColors.blue500,
|
|
529
|
+
letterSpacing: 0.3,
|
|
530
|
+
}}>
|
|
531
|
+
{t('settings.coreBadge')}
|
|
532
|
+
</react_native_1.Text>
|
|
533
|
+
</react_native_1.View>) : isUnavailable ? (<react_native_1.View style={{
|
|
304
534
|
backgroundColor: `${AppColors_1.AppColors.amber500}18`,
|
|
305
535
|
borderRadius: 4,
|
|
306
536
|
paddingHorizontal: 5,
|
|
@@ -308,181 +538,439 @@ const SettingsPanel = () => {
|
|
|
308
538
|
borderWidth: 1,
|
|
309
539
|
borderColor: `${AppColors_1.AppColors.amber500}35`,
|
|
310
540
|
}}>
|
|
311
|
-
|
|
541
|
+
<react_native_1.Text style={{
|
|
312
542
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
313
543
|
fontSize: 8,
|
|
544
|
+
lineHeight: 11,
|
|
314
545
|
color: AppColors_1.AppColors.amber700,
|
|
315
546
|
letterSpacing: 0.3,
|
|
316
547
|
}}>
|
|
317
|
-
|
|
548
|
+
{moduleItem.key === 'redux'
|
|
318
549
|
? t('settings.notConnectedBadge')
|
|
319
550
|
: t('settings.notDetectedBadge')}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
backgroundColor: `${AppColors_1.AppColors.purple}14`,
|
|
327
|
-
borderRadius: 20,
|
|
328
|
-
paddingHorizontal: 6,
|
|
329
|
-
paddingVertical: 2,
|
|
551
|
+
</react_native_1.Text>
|
|
552
|
+
</react_native_1.View>) : isChecked ? (<react_native_1.View style={{
|
|
553
|
+
backgroundColor: `${AppColors_1.AppColors.liveGreen}18`,
|
|
554
|
+
borderRadius: 4,
|
|
555
|
+
paddingHorizontal: 5,
|
|
556
|
+
paddingVertical: 1.5,
|
|
330
557
|
borderWidth: 1,
|
|
331
|
-
borderColor: `${AppColors_1.AppColors.
|
|
332
|
-
gap: 3,
|
|
558
|
+
borderColor: `${AppColors_1.AppColors.liveGreen}38`,
|
|
333
559
|
}}>
|
|
334
|
-
|
|
335
|
-
width: 4,
|
|
336
|
-
height: 4,
|
|
337
|
-
borderRadius: 2,
|
|
338
|
-
backgroundColor: AppColors_1.AppColors.purple,
|
|
339
|
-
opacity: 0.7,
|
|
340
|
-
}}/>
|
|
341
|
-
<react_native_1.Text style={{
|
|
560
|
+
<react_native_1.Text style={{
|
|
342
561
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
343
|
-
fontSize: 8
|
|
344
|
-
|
|
345
|
-
|
|
562
|
+
fontSize: 8,
|
|
563
|
+
lineHeight: 11,
|
|
564
|
+
color: AppColors_1.AppColors.green700,
|
|
565
|
+
letterSpacing: 0.3,
|
|
346
566
|
}}>
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
setSettingsPage(tab.key);
|
|
355
|
-
}} hitSlop={8} style={{
|
|
356
|
-
marginLeft: 4,
|
|
357
|
-
padding: 4,
|
|
358
|
-
borderRadius: 6,
|
|
359
|
-
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
567
|
+
{t('settings.activeBadge')}
|
|
568
|
+
</react_native_1.Text>
|
|
569
|
+
</react_native_1.View>) : (<react_native_1.View style={{
|
|
570
|
+
backgroundColor: `${AppColors_1.AppColors.grayTextWeak}18`,
|
|
571
|
+
borderRadius: 4,
|
|
572
|
+
paddingHorizontal: 5,
|
|
573
|
+
paddingVertical: 1.5,
|
|
360
574
|
borderWidth: 1,
|
|
361
|
-
borderColor: `${AppColors_1.AppColors.
|
|
362
|
-
alignItems: 'center',
|
|
363
|
-
justifyContent: 'center',
|
|
575
|
+
borderColor: `${AppColors_1.AppColors.grayTextWeak}2E`,
|
|
364
576
|
}}>
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
577
|
+
<react_native_1.Text style={{
|
|
578
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
579
|
+
fontSize: 8,
|
|
580
|
+
lineHeight: 11,
|
|
581
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
582
|
+
letterSpacing: 0.3,
|
|
583
|
+
}}>
|
|
584
|
+
{t('settings.dormantBadge')}
|
|
585
|
+
</react_native_1.Text>
|
|
586
|
+
</react_native_1.View>)}
|
|
587
|
+
</react_native_1.View>
|
|
368
588
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
589
|
+
<react_native_1.Text style={{
|
|
590
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
591
|
+
fontSize: 11,
|
|
592
|
+
color: AppColors_1.AppColors.grayText,
|
|
593
|
+
lineHeight: 15,
|
|
594
|
+
marginTop: 1,
|
|
374
595
|
}}>
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
596
|
+
{moduleItem.desc}
|
|
597
|
+
</react_native_1.Text>
|
|
598
|
+
</react_native_1.View>
|
|
599
|
+
</TouchableScale_1.default>
|
|
600
|
+
|
|
601
|
+
{/* Decorative Custom Checkbox */}
|
|
602
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="checkbox" accessibilityLabel={`Select ${moduleItem.label}`} accessibilityState={{
|
|
603
|
+
checked: isChecked,
|
|
604
|
+
disabled: isLocked,
|
|
605
|
+
}} disabled={isLocked} onPress={() => {
|
|
606
|
+
if (isLocked)
|
|
607
|
+
return;
|
|
608
|
+
setStagedTabVisibility(prev => ({
|
|
609
|
+
...prev,
|
|
610
|
+
[moduleItem.key]: !prev[moduleItem.key],
|
|
611
|
+
}));
|
|
612
|
+
}} style={{
|
|
613
|
+
width: 26,
|
|
614
|
+
height: 26,
|
|
615
|
+
borderRadius: 8,
|
|
616
|
+
borderWidth: isChecked ? 0 : 2,
|
|
385
617
|
borderColor: isLocked
|
|
386
|
-
? AppColors_1.AppColors.
|
|
387
|
-
:
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
}}>
|
|
394
|
-
<react_native_1.View style={{
|
|
395
|
-
width: 18,
|
|
396
|
-
height: 18,
|
|
397
|
-
borderRadius: 9,
|
|
398
|
-
backgroundColor: isLocked
|
|
399
|
-
? AppColors_1.AppColors.grayBorderSecondary
|
|
400
|
-
: AppColors_1.AppColors.white,
|
|
618
|
+
? AppColors_1.AppColors.dividerColor
|
|
619
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
620
|
+
backgroundColor: moduleItem.key === 'apis'
|
|
621
|
+
? `${AppColors_1.AppColors.blue500}22`
|
|
622
|
+
: isChecked
|
|
623
|
+
? AppColors_1.AppColors.purple
|
|
624
|
+
: AppColors_1.AppColors.grayBackground,
|
|
401
625
|
alignItems: 'center',
|
|
402
626
|
justifyContent: 'center',
|
|
403
|
-
shadowColor:
|
|
404
|
-
|
|
405
|
-
|
|
627
|
+
shadowColor: isChecked
|
|
628
|
+
? AppColors_1.AppColors.purple
|
|
629
|
+
: 'transparent',
|
|
630
|
+
shadowOpacity: isChecked ? 0.3 : 0,
|
|
631
|
+
shadowRadius: 3,
|
|
406
632
|
shadowOffset: { width: 0, height: 1 },
|
|
633
|
+
elevation: isChecked ? 2 : 0,
|
|
407
634
|
}}>
|
|
408
|
-
{isLocked
|
|
635
|
+
{moduleItem.key === 'apis' ? (<NetworkIcons_1.CheckIcon size={14} color={AppColors_1.AppColors.blue500}/>) : isChecked ? (<NetworkIcons_1.CheckIcon size={14} color={AppColors_1.AppColors.white}/>) : isLocked ? (<react_native_svg_1.default width={10} height={10} viewBox="0 0 24 24" fill="none">
|
|
409
636
|
<react_native_svg_1.Path d="M7 10V7a5 5 0 0 1 10 0v3" stroke={AppColors_1.AppColors.grayText} strokeWidth="2.2" strokeLinecap="round"/>
|
|
410
637
|
<react_native_svg_1.Path d="M5 10h14v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1z" fill={AppColors_1.AppColors.grayText}/>
|
|
411
|
-
</react_native_svg_1.default>)}
|
|
412
|
-
</
|
|
413
|
-
</
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
638
|
+
</react_native_svg_1.default>) : null}
|
|
639
|
+
</TouchableScale_1.default>
|
|
640
|
+
</react_native_1.View>
|
|
641
|
+
|
|
642
|
+
{/* Card Footer: Live Stats + Configure Button */}
|
|
643
|
+
{!isUnavailable && (<react_native_1.View style={{
|
|
644
|
+
flexDirection: 'row',
|
|
645
|
+
alignItems: 'center',
|
|
646
|
+
justifyContent: 'space-between',
|
|
647
|
+
paddingTop: 8,
|
|
648
|
+
borderTopWidth: 1,
|
|
649
|
+
borderTopColor: AppColors_1.AppColors.dividerColor,
|
|
650
|
+
}}>
|
|
651
|
+
{/* Live Info Pill */}
|
|
652
|
+
<react_native_1.View style={{
|
|
653
|
+
flexDirection: 'row',
|
|
654
|
+
alignItems: 'center',
|
|
655
|
+
gap: 6,
|
|
656
|
+
flex: 1,
|
|
657
|
+
}}>
|
|
658
|
+
<react_native_1.View style={{
|
|
659
|
+
width: 6,
|
|
660
|
+
height: 6,
|
|
661
|
+
borderRadius: 3,
|
|
662
|
+
backgroundColor: isChecked
|
|
663
|
+
? AppColors_1.AppColors.liveGreen
|
|
419
664
|
: AppColors_1.AppColors.grayTextWeak,
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
665
|
+
}}/>
|
|
666
|
+
<react_native_1.Text style={{
|
|
667
|
+
fontFamily: AppFonts_1.AppFonts.interMedium,
|
|
668
|
+
fontSize: 11,
|
|
669
|
+
color: AppColors_1.AppColors.grayText,
|
|
670
|
+
lineHeight: 14,
|
|
423
671
|
}}>
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
672
|
+
{liveStats}
|
|
673
|
+
</react_native_1.Text>
|
|
674
|
+
</react_native_1.View>
|
|
675
|
+
|
|
676
|
+
{/* Sleek Configure Button */}
|
|
677
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel={`Configure ${moduleItem.label} settings`} onPress={() => {
|
|
678
|
+
(0, InspectorContext_1.animateNextLayout)();
|
|
679
|
+
setSettingsPage(moduleItem.key);
|
|
680
|
+
}} style={{
|
|
681
|
+
flexDirection: 'row',
|
|
682
|
+
alignItems: 'center',
|
|
683
|
+
gap: 5,
|
|
684
|
+
backgroundColor: `${AppColors_1.AppColors.purple}12`,
|
|
685
|
+
paddingHorizontal: 10,
|
|
686
|
+
paddingVertical: 5,
|
|
687
|
+
borderRadius: 8,
|
|
688
|
+
borderWidth: 1,
|
|
689
|
+
borderColor: `${AppColors_1.AppColors.purple}26`,
|
|
690
|
+
}}>
|
|
691
|
+
<NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.purple} size={11}/>
|
|
692
|
+
<react_native_1.Text style={{
|
|
693
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
694
|
+
fontSize: 11,
|
|
695
|
+
lineHeight: 14,
|
|
696
|
+
color: AppColors_1.AppColors.purple,
|
|
697
|
+
}}>
|
|
698
|
+
{t('settings.configure')}
|
|
699
|
+
</react_native_1.Text>
|
|
700
|
+
<NetworkIcons_1.ForwardChevronIcon color={AppColors_1.AppColors.purple} size={9}/>
|
|
701
|
+
</TouchableScale_1.default>
|
|
702
|
+
</react_native_1.View>)}
|
|
703
|
+
</react_native_1.View>);
|
|
430
704
|
})}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
705
|
+
</react_native_1.View>
|
|
706
|
+
|
|
707
|
+
{/* Section 3.5: RAM-Based Auto Limits */}
|
|
708
|
+
<react_native_1.View style={{
|
|
434
709
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
435
|
-
borderRadius:
|
|
710
|
+
borderRadius: 14,
|
|
436
711
|
borderWidth: 1,
|
|
437
712
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
438
713
|
overflow: 'hidden',
|
|
439
|
-
|
|
440
|
-
<react_native_1.View style={{
|
|
441
|
-
flexDirection: 'row',
|
|
442
|
-
alignItems: 'center',
|
|
443
|
-
paddingVertical: 12,
|
|
444
|
-
paddingHorizontal: 14,
|
|
714
|
+
padding: 14,
|
|
445
715
|
gap: 12,
|
|
446
716
|
}}>
|
|
447
|
-
{
|
|
717
|
+
<react_native_1.Text style={{
|
|
718
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
719
|
+
fontSize: 11,
|
|
720
|
+
lineHeight: 14,
|
|
721
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
722
|
+
letterSpacing: 0.8,
|
|
723
|
+
}}>
|
|
724
|
+
RAM-Based Auto Limits
|
|
725
|
+
</react_native_1.Text>
|
|
726
|
+
|
|
727
|
+
{/* Auto RAM Limit Toggle */}
|
|
448
728
|
<react_native_1.View style={{
|
|
449
|
-
flex: 1,
|
|
450
729
|
flexDirection: 'row',
|
|
451
730
|
alignItems: 'center',
|
|
452
|
-
|
|
731
|
+
justifyContent: 'space-between',
|
|
453
732
|
}}>
|
|
454
733
|
<react_native_1.View style={{
|
|
734
|
+
flexDirection: 'row',
|
|
735
|
+
alignItems: 'center',
|
|
736
|
+
gap: 10,
|
|
737
|
+
flex: 1,
|
|
738
|
+
}}>
|
|
739
|
+
<react_native_1.View style={{
|
|
740
|
+
width: 32,
|
|
741
|
+
height: 32,
|
|
742
|
+
borderRadius: 8,
|
|
743
|
+
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
744
|
+
alignItems: 'center',
|
|
745
|
+
justifyContent: 'center',
|
|
746
|
+
}}>
|
|
747
|
+
<NetworkIcons_1.PerformanceIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
748
|
+
</react_native_1.View>
|
|
749
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
750
|
+
<react_native_1.Text style={{
|
|
751
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
752
|
+
fontSize: 13.5,
|
|
753
|
+
lineHeight: 18,
|
|
754
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
755
|
+
}}>
|
|
756
|
+
Auto-Calculate Limits from Device RAM
|
|
757
|
+
</react_native_1.Text>
|
|
758
|
+
<react_native_1.Text style={{
|
|
759
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
760
|
+
fontSize: 11,
|
|
761
|
+
lineHeight: 15,
|
|
762
|
+
color: AppColors_1.AppColors.grayText,
|
|
763
|
+
marginTop: 1,
|
|
764
|
+
}}>
|
|
765
|
+
Automatically set API, Logs, Analytics & Crash limits based on available memory
|
|
766
|
+
</react_native_1.Text>
|
|
767
|
+
</react_native_1.View>
|
|
768
|
+
</react_native_1.View>
|
|
769
|
+
|
|
770
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="switch" accessibilityLabel="Toggle auto RAM limit calculation" accessibilityState={{ checked: isAutoRamLimitEnabled }} onPress={() => setIsAutoRamLimitEnabled(prev => !prev)} style={{
|
|
771
|
+
width: 42,
|
|
772
|
+
height: 24,
|
|
773
|
+
borderRadius: 12,
|
|
774
|
+
backgroundColor: isAutoRamLimitEnabled
|
|
775
|
+
? AppColors_1.AppColors.purple
|
|
776
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
777
|
+
padding: 2,
|
|
778
|
+
justifyContent: 'center',
|
|
779
|
+
alignItems: isAutoRamLimitEnabled ? 'flex-end' : 'flex-start',
|
|
780
|
+
}}>
|
|
781
|
+
<react_native_1.View style={{
|
|
455
782
|
width: 20,
|
|
456
783
|
height: 20,
|
|
457
|
-
borderRadius:
|
|
458
|
-
backgroundColor: AppColors_1.AppColors.
|
|
459
|
-
|
|
460
|
-
|
|
784
|
+
borderRadius: 10,
|
|
785
|
+
backgroundColor: AppColors_1.AppColors.white,
|
|
786
|
+
shadowColor: AppColors_1.AppColors.black,
|
|
787
|
+
shadowOpacity: 0.18,
|
|
788
|
+
shadowRadius: 2,
|
|
789
|
+
shadowOffset: { width: 0, height: 1 },
|
|
790
|
+
}}/>
|
|
791
|
+
</TouchableScale_1.default>
|
|
792
|
+
</react_native_1.View>
|
|
793
|
+
|
|
794
|
+
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
795
|
+
|
|
796
|
+
{/* Device Free RAM Display */}
|
|
797
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 10 }}>
|
|
798
|
+
<react_native_1.View style={{
|
|
799
|
+
width: 32,
|
|
800
|
+
height: 32,
|
|
801
|
+
borderRadius: 8,
|
|
802
|
+
backgroundColor: isAutoRamLimitEnabled
|
|
803
|
+
? `${AppColors_1.AppColors.purple}14`
|
|
804
|
+
: AppColors_1.AppColors.grayBackground,
|
|
461
805
|
alignItems: 'center',
|
|
462
806
|
justifyContent: 'center',
|
|
463
807
|
}}>
|
|
464
|
-
|
|
808
|
+
<NetworkIcons_1.SignalIcon color={isAutoRamLimitEnabled ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayTextWeak} size={15}/>
|
|
465
809
|
</react_native_1.View>
|
|
466
810
|
<react_native_1.View style={{ flex: 1 }}>
|
|
467
811
|
<react_native_1.Text style={{
|
|
468
812
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
469
|
-
fontSize: 13,
|
|
470
|
-
|
|
813
|
+
fontSize: 13.5,
|
|
814
|
+
lineHeight: 18,
|
|
815
|
+
color: isAutoRamLimitEnabled
|
|
816
|
+
? AppColors_1.AppColors.primaryBlack
|
|
817
|
+
: AppColors_1.AppColors.grayText,
|
|
818
|
+
}}>
|
|
819
|
+
Detected Free RAM
|
|
820
|
+
</react_native_1.Text>
|
|
821
|
+
<react_native_1.Text style={{
|
|
822
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
823
|
+
fontSize: 11,
|
|
824
|
+
lineHeight: 15,
|
|
825
|
+
color: AppColors_1.AppColors.grayText,
|
|
826
|
+
marginTop: 1,
|
|
471
827
|
}}>
|
|
472
|
-
|
|
828
|
+
{deviceFreeRamMb} MB available
|
|
829
|
+
</react_native_1.Text>
|
|
830
|
+
</react_native_1.View>
|
|
831
|
+
<react_native_1.View style={{
|
|
832
|
+
paddingHorizontal: 10,
|
|
833
|
+
paddingVertical: 5,
|
|
834
|
+
borderRadius: 8,
|
|
835
|
+
backgroundColor: isAutoRamLimitEnabled
|
|
836
|
+
? `${AppColors_1.AppColors.purple}12`
|
|
837
|
+
: AppColors_1.AppColors.grayBackground,
|
|
838
|
+
borderWidth: 1,
|
|
839
|
+
borderColor: isAutoRamLimitEnabled
|
|
840
|
+
? `${AppColors_1.AppColors.purple}26`
|
|
841
|
+
: AppColors_1.AppColors.dividerColor,
|
|
842
|
+
}}>
|
|
843
|
+
<react_native_1.Text style={{
|
|
844
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
845
|
+
fontSize: 12,
|
|
846
|
+
lineHeight: 15,
|
|
847
|
+
color: isAutoRamLimitEnabled
|
|
848
|
+
? AppColors_1.AppColors.purple
|
|
849
|
+
: AppColors_1.AppColors.grayText,
|
|
850
|
+
}}>
|
|
851
|
+
{deviceFreeRamMb} MB
|
|
473
852
|
</react_native_1.Text>
|
|
474
853
|
</react_native_1.View>
|
|
475
854
|
</react_native_1.View>
|
|
476
855
|
|
|
477
|
-
{/*
|
|
478
|
-
<
|
|
856
|
+
{/* Current Auto-Calculated Limits Preview */}
|
|
857
|
+
{isAutoRamLimitEnabled && (<react_native_1.View style={{ marginTop: 8, paddingTop: 8, borderTopWidth: 1, borderTopColor: AppColors_1.AppColors.dividerColor, gap: 6 }}>
|
|
858
|
+
<react_native_1.Text style={{
|
|
859
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
860
|
+
fontSize: 11.5,
|
|
861
|
+
lineHeight: 15,
|
|
862
|
+
color: AppColors_1.AppColors.purple,
|
|
863
|
+
}}>
|
|
864
|
+
Auto Profile: {autoRamProfile.profileName}
|
|
865
|
+
</react_native_1.Text>
|
|
866
|
+
<react_native_1.View style={{ flexDirection: 'row', flexWrap: 'wrap', gap: 8 }}>
|
|
867
|
+
{[
|
|
868
|
+
{ label: 'APIs', value: autoRamProfile.maxNetworkLogs, color: AppColors_1.AppColors.blue500 },
|
|
869
|
+
{ label: 'Logs', value: autoRamProfile.maxConsoleLogs, color: AppColors_1.AppColors.sky500 },
|
|
870
|
+
{ label: 'Analytics', value: autoRamProfile.maxAnalyticsEvents, color: AppColors_1.AppColors.purple },
|
|
871
|
+
{ label: 'Crash', value: autoRamProfile.maxCrashRecords, color: AppColors_1.AppColors.errorColor },
|
|
872
|
+
].map(item => (<react_native_1.View key={item.label} style={{
|
|
873
|
+
flexDirection: 'row',
|
|
874
|
+
alignItems: 'center',
|
|
875
|
+
gap: 4,
|
|
876
|
+
paddingHorizontal: 8,
|
|
877
|
+
paddingVertical: 4,
|
|
878
|
+
borderRadius: 6,
|
|
879
|
+
backgroundColor: `${item.color}14`,
|
|
880
|
+
borderWidth: 1,
|
|
881
|
+
borderColor: `${item.color}33`,
|
|
882
|
+
}}>
|
|
883
|
+
<react_native_1.Text style={{
|
|
884
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
885
|
+
fontSize: 10.5,
|
|
886
|
+
lineHeight: 14,
|
|
887
|
+
color: item.color,
|
|
888
|
+
}}>
|
|
889
|
+
{item.label}
|
|
890
|
+
</react_native_1.Text>
|
|
891
|
+
<react_native_1.Text style={{
|
|
892
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
893
|
+
fontSize: 10.5,
|
|
894
|
+
lineHeight: 14,
|
|
895
|
+
color: item.color,
|
|
896
|
+
}}>
|
|
897
|
+
{item.value}
|
|
898
|
+
</react_native_1.Text>
|
|
899
|
+
</react_native_1.View>))}
|
|
900
|
+
</react_native_1.View>
|
|
901
|
+
</react_native_1.View>)}
|
|
902
|
+
</react_native_1.View>
|
|
903
|
+
</react_native_1.View>) : (<react_native_1.View style={{ gap: 14 }}>
|
|
904
|
+
{/* Section 1: Appearance */}
|
|
905
|
+
<react_native_1.View style={{
|
|
906
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
907
|
+
borderRadius: 14,
|
|
908
|
+
borderWidth: 1,
|
|
909
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
910
|
+
overflow: 'hidden',
|
|
911
|
+
padding: 14,
|
|
912
|
+
gap: 12,
|
|
913
|
+
}}>
|
|
914
|
+
<react_native_1.Text style={{
|
|
915
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
916
|
+
fontSize: 11,
|
|
917
|
+
lineHeight: 14,
|
|
918
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
919
|
+
letterSpacing: 0.8,
|
|
920
|
+
}}>
|
|
921
|
+
{t('settings.appearanceTheme')}
|
|
922
|
+
</react_native_1.Text>
|
|
923
|
+
|
|
924
|
+
<react_native_1.View style={{
|
|
925
|
+
flexDirection: 'row',
|
|
926
|
+
alignItems: 'center',
|
|
927
|
+
justifyContent: 'space-between',
|
|
928
|
+
}}>
|
|
929
|
+
<react_native_1.View style={{
|
|
930
|
+
flexDirection: 'row',
|
|
931
|
+
alignItems: 'center',
|
|
932
|
+
gap: 10,
|
|
933
|
+
flex: 1,
|
|
934
|
+
}}>
|
|
935
|
+
<react_native_1.View style={{
|
|
936
|
+
width: 32,
|
|
937
|
+
height: 32,
|
|
938
|
+
borderRadius: 8,
|
|
939
|
+
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
940
|
+
alignItems: 'center',
|
|
941
|
+
justifyContent: 'center',
|
|
942
|
+
}}>
|
|
943
|
+
{isDark ? (<NetworkIcons_1.SunIcon color={AppColors_1.AppColors.purple} size={15}/>) : (<NetworkIcons_1.MoonIcon color={AppColors_1.AppColors.purple} size={15}/>)}
|
|
944
|
+
</react_native_1.View>
|
|
945
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
946
|
+
<react_native_1.Text style={{
|
|
947
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
948
|
+
fontSize: 13.5,
|
|
949
|
+
lineHeight: 18,
|
|
950
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
951
|
+
}}>
|
|
952
|
+
{t('settings.general.darkMode')}
|
|
953
|
+
</react_native_1.Text>
|
|
954
|
+
<react_native_1.Text style={{
|
|
955
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
956
|
+
fontSize: 11,
|
|
957
|
+
lineHeight: 15,
|
|
958
|
+
color: AppColors_1.AppColors.grayText,
|
|
959
|
+
marginTop: 1,
|
|
960
|
+
}}>
|
|
961
|
+
{t('settings.general.darkModeDescription')}
|
|
962
|
+
</react_native_1.Text>
|
|
963
|
+
</react_native_1.View>
|
|
964
|
+
</react_native_1.View>
|
|
965
|
+
|
|
966
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="switch" accessibilityLabel="Toggle Dark Theme" accessibilityState={{ checked: isDark }} onPress={() => {
|
|
479
967
|
const newTheme = !isDark;
|
|
480
968
|
setIsDark(newTheme);
|
|
481
969
|
(0, styles_1.toggleGlobalTheme)(newTheme);
|
|
482
970
|
}} style={{
|
|
483
|
-
width:
|
|
484
|
-
height:
|
|
485
|
-
borderRadius:
|
|
971
|
+
width: 42,
|
|
972
|
+
height: 24,
|
|
973
|
+
borderRadius: 12,
|
|
486
974
|
backgroundColor: isDark
|
|
487
975
|
? AppColors_1.AppColors.purple
|
|
488
976
|
: AppColors_1.AppColors.grayBorderSecondary,
|
|
@@ -490,226 +978,243 @@ const SettingsPanel = () => {
|
|
|
490
978
|
justifyContent: 'center',
|
|
491
979
|
alignItems: isDark ? 'flex-end' : 'flex-start',
|
|
492
980
|
}}>
|
|
493
|
-
|
|
494
|
-
width:
|
|
495
|
-
height:
|
|
496
|
-
borderRadius:
|
|
981
|
+
<react_native_1.View style={{
|
|
982
|
+
width: 20,
|
|
983
|
+
height: 20,
|
|
984
|
+
borderRadius: 10,
|
|
497
985
|
backgroundColor: AppColors_1.AppColors.white,
|
|
498
986
|
shadowColor: AppColors_1.AppColors.black,
|
|
499
|
-
shadowOpacity: 0.
|
|
500
|
-
shadowRadius:
|
|
987
|
+
shadowOpacity: 0.18,
|
|
988
|
+
shadowRadius: 2,
|
|
501
989
|
shadowOffset: { width: 0, height: 1 },
|
|
502
990
|
}}/>
|
|
503
|
-
|
|
991
|
+
</TouchableScale_1.default>
|
|
992
|
+
</react_native_1.View>
|
|
504
993
|
</react_native_1.View>
|
|
505
994
|
|
|
506
|
-
{/*
|
|
507
|
-
<react_native_1.View style={{
|
|
508
|
-
height: 1,
|
|
509
|
-
backgroundColor: AppColors_1.AppColors.dividerColor,
|
|
510
|
-
}}/>
|
|
511
|
-
|
|
512
|
-
{/* Modal Height */}
|
|
995
|
+
{/* Section 2: Window & Layout */}
|
|
513
996
|
<react_native_1.View style={{
|
|
514
|
-
|
|
515
|
-
|
|
997
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
998
|
+
borderRadius: 14,
|
|
999
|
+
borderWidth: 1,
|
|
1000
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1001
|
+
overflow: 'hidden',
|
|
1002
|
+
padding: 14,
|
|
1003
|
+
gap: 14,
|
|
516
1004
|
}}>
|
|
517
|
-
<react_native_1.
|
|
1005
|
+
<react_native_1.Text style={{
|
|
1006
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1007
|
+
fontSize: 11,
|
|
1008
|
+
lineHeight: 14,
|
|
1009
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
1010
|
+
letterSpacing: 0.8,
|
|
1011
|
+
}}>
|
|
1012
|
+
{t('settings.windowLayout')}
|
|
1013
|
+
</react_native_1.Text>
|
|
1014
|
+
|
|
1015
|
+
{/* Modal Height */}
|
|
1016
|
+
<react_native_1.View style={{ gap: 8 }}>
|
|
1017
|
+
<react_native_1.View style={{
|
|
518
1018
|
flexDirection: 'row',
|
|
519
1019
|
alignItems: 'center',
|
|
520
|
-
gap:
|
|
1020
|
+
gap: 10,
|
|
521
1021
|
}}>
|
|
522
|
-
|
|
523
|
-
width:
|
|
524
|
-
height:
|
|
525
|
-
borderRadius:
|
|
1022
|
+
<react_native_1.View style={{
|
|
1023
|
+
width: 32,
|
|
1024
|
+
height: 32,
|
|
1025
|
+
borderRadius: 8,
|
|
526
1026
|
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
527
|
-
borderWidth: 1,
|
|
528
|
-
borderColor: `${AppColors_1.AppColors.purple}33`,
|
|
529
1027
|
alignItems: 'center',
|
|
530
1028
|
justifyContent: 'center',
|
|
531
1029
|
}}>
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
1030
|
+
<NetworkIcons_1.ScreenIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
1031
|
+
</react_native_1.View>
|
|
1032
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1033
|
+
<react_native_1.Text style={{
|
|
536
1034
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
537
|
-
fontSize: 13,
|
|
1035
|
+
fontSize: 13.5,
|
|
1036
|
+
lineHeight: 18,
|
|
538
1037
|
color: AppColors_1.AppColors.primaryBlack,
|
|
539
1038
|
}}>
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
1039
|
+
{t('settings.general.modalHeight')}
|
|
1040
|
+
</react_native_1.Text>
|
|
1041
|
+
<react_native_1.Text style={{
|
|
543
1042
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
544
1043
|
fontSize: 11,
|
|
1044
|
+
lineHeight: 15,
|
|
545
1045
|
color: AppColors_1.AppColors.grayText,
|
|
546
1046
|
marginTop: 1,
|
|
547
1047
|
}}>
|
|
548
|
-
|
|
549
|
-
|
|
1048
|
+
{t('settings.general.modalHeightDescription')}
|
|
1049
|
+
</react_native_1.Text>
|
|
1050
|
+
</react_native_1.View>
|
|
550
1051
|
</react_native_1.View>
|
|
551
|
-
</react_native_1.View>
|
|
552
1052
|
|
|
553
|
-
|
|
554
|
-
<react_native_1.View style={{
|
|
1053
|
+
<react_native_1.View style={{
|
|
555
1054
|
flexDirection: 'row',
|
|
556
1055
|
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
557
|
-
borderRadius:
|
|
558
|
-
padding:
|
|
559
|
-
marginTop: 10,
|
|
1056
|
+
borderRadius: 10,
|
|
1057
|
+
padding: 3,
|
|
560
1058
|
borderWidth: 1,
|
|
561
1059
|
borderColor: AppColors_1.AppColors.dividerColor,
|
|
562
1060
|
}}>
|
|
563
|
-
|
|
1061
|
+
{[50, 70, 90, 100].map(opt => {
|
|
564
1062
|
const isActive = modalHeightPercent === opt;
|
|
565
|
-
return (<TouchableScale_1.default key={opt} onPress={() => setModalHeightPercent(opt)} style={{
|
|
1063
|
+
return (<TouchableScale_1.default key={opt} accessible={true} accessibilityRole="button" accessibilityLabel={`Set window height to ${opt} percent`} accessibilityState={{ selected: isActive }} onPress={() => setModalHeightPercent(opt)} style={{
|
|
566
1064
|
flex: 1,
|
|
567
|
-
paddingVertical:
|
|
1065
|
+
paddingVertical: 7,
|
|
568
1066
|
alignItems: 'center',
|
|
569
|
-
borderRadius:
|
|
1067
|
+
borderRadius: 8,
|
|
570
1068
|
backgroundColor: isActive
|
|
571
1069
|
? AppColors_1.AppColors.purple
|
|
572
1070
|
: 'transparent',
|
|
573
1071
|
}}>
|
|
574
|
-
|
|
1072
|
+
<react_native_1.Text style={{
|
|
575
1073
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
576
|
-
fontSize: 11,
|
|
577
|
-
|
|
1074
|
+
fontSize: 11.5,
|
|
1075
|
+
lineHeight: 15,
|
|
1076
|
+
color: isActive
|
|
1077
|
+
? AppColors_1.AppColors.white
|
|
1078
|
+
: AppColors_1.AppColors.grayText,
|
|
578
1079
|
}}>
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
1080
|
+
{opt}%
|
|
1081
|
+
</react_native_1.Text>
|
|
1082
|
+
</TouchableScale_1.default>);
|
|
582
1083
|
})}
|
|
1084
|
+
</react_native_1.View>
|
|
583
1085
|
</react_native_1.View>
|
|
584
|
-
</react_native_1.View>
|
|
585
1086
|
|
|
586
|
-
|
|
587
|
-
<react_native_1.View style={{
|
|
588
|
-
height: 1,
|
|
589
|
-
backgroundColor: AppColors_1.AppColors.dividerColor,
|
|
590
|
-
}}/>
|
|
1087
|
+
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
591
1088
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
paddingHorizontal: 14,
|
|
596
|
-
}}>
|
|
597
|
-
<react_native_1.View style={{
|
|
1089
|
+
{/* Modal Animation */}
|
|
1090
|
+
<react_native_1.View style={{ gap: 8 }}>
|
|
1091
|
+
<react_native_1.View style={{
|
|
598
1092
|
flexDirection: 'row',
|
|
599
1093
|
alignItems: 'center',
|
|
600
|
-
gap:
|
|
1094
|
+
gap: 10,
|
|
601
1095
|
}}>
|
|
602
|
-
|
|
603
|
-
width:
|
|
604
|
-
height:
|
|
605
|
-
borderRadius:
|
|
1096
|
+
<react_native_1.View style={{
|
|
1097
|
+
width: 32,
|
|
1098
|
+
height: 32,
|
|
1099
|
+
borderRadius: 8,
|
|
606
1100
|
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
607
|
-
borderWidth: 1,
|
|
608
|
-
borderColor: `${AppColors_1.AppColors.purple}33`,
|
|
609
1101
|
alignItems: 'center',
|
|
610
1102
|
justifyContent: 'center',
|
|
611
1103
|
}}>
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
1104
|
+
<NetworkIcons_1.MotionIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
1105
|
+
</react_native_1.View>
|
|
1106
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1107
|
+
<react_native_1.Text style={{
|
|
616
1108
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
617
|
-
fontSize: 13,
|
|
1109
|
+
fontSize: 13.5,
|
|
1110
|
+
lineHeight: 18,
|
|
618
1111
|
color: AppColors_1.AppColors.primaryBlack,
|
|
619
1112
|
}}>
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
1113
|
+
{t('settings.general.modalAnimation')}
|
|
1114
|
+
</react_native_1.Text>
|
|
1115
|
+
<react_native_1.Text style={{
|
|
623
1116
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
624
1117
|
fontSize: 11,
|
|
1118
|
+
lineHeight: 15,
|
|
625
1119
|
color: AppColors_1.AppColors.grayText,
|
|
626
1120
|
marginTop: 1,
|
|
627
1121
|
}}>
|
|
628
|
-
|
|
629
|
-
|
|
1122
|
+
{t('settings.general.modalAnimationDescription')}
|
|
1123
|
+
</react_native_1.Text>
|
|
1124
|
+
</react_native_1.View>
|
|
630
1125
|
</react_native_1.View>
|
|
631
|
-
</react_native_1.View>
|
|
632
1126
|
|
|
633
|
-
|
|
634
|
-
<react_native_1.View style={{
|
|
1127
|
+
<react_native_1.View style={{
|
|
635
1128
|
flexDirection: 'row',
|
|
636
1129
|
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
637
|
-
borderRadius:
|
|
638
|
-
padding:
|
|
639
|
-
marginTop: 10,
|
|
1130
|
+
borderRadius: 10,
|
|
1131
|
+
padding: 3,
|
|
640
1132
|
borderWidth: 1,
|
|
641
1133
|
borderColor: AppColors_1.AppColors.dividerColor,
|
|
642
1134
|
}}>
|
|
643
|
-
|
|
1135
|
+
{[
|
|
644
1136
|
{ key: 'slide', label: 'Slide Up' },
|
|
645
1137
|
{ key: 'fade', label: 'Fade' },
|
|
646
1138
|
{ key: 'none', label: 'None' },
|
|
647
|
-
]
|
|
1139
|
+
].map(opt => {
|
|
648
1140
|
const isActive = modalAnimationType === opt.key;
|
|
649
|
-
return (<TouchableScale_1.default key={opt.key} onPress={() => setModalAnimationType(opt.key)} style={{
|
|
1141
|
+
return (<TouchableScale_1.default key={opt.key} accessible={true} accessibilityRole="button" accessibilityLabel={`Set transition animation to ${opt.label}`} accessibilityState={{ selected: isActive }} onPress={() => setModalAnimationType(opt.key)} style={{
|
|
650
1142
|
flex: 1,
|
|
651
|
-
paddingVertical:
|
|
1143
|
+
paddingVertical: 7,
|
|
652
1144
|
alignItems: 'center',
|
|
653
|
-
borderRadius:
|
|
1145
|
+
borderRadius: 8,
|
|
654
1146
|
backgroundColor: isActive
|
|
655
1147
|
? AppColors_1.AppColors.purple
|
|
656
1148
|
: 'transparent',
|
|
657
1149
|
}}>
|
|
658
|
-
|
|
1150
|
+
<react_native_1.Text style={{
|
|
659
1151
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
660
|
-
fontSize: 11,
|
|
661
|
-
|
|
1152
|
+
fontSize: 11.5,
|
|
1153
|
+
lineHeight: 15,
|
|
1154
|
+
color: isActive
|
|
1155
|
+
? AppColors_1.AppColors.white
|
|
1156
|
+
: AppColors_1.AppColors.grayText,
|
|
662
1157
|
}}>
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
1158
|
+
{opt.label}
|
|
1159
|
+
</react_native_1.Text>
|
|
1160
|
+
</TouchableScale_1.default>);
|
|
666
1161
|
})}
|
|
1162
|
+
</react_native_1.View>
|
|
667
1163
|
</react_native_1.View>
|
|
668
1164
|
</react_native_1.View>
|
|
669
1165
|
|
|
670
|
-
{/*
|
|
671
|
-
<react_native_1.View style={{
|
|
672
|
-
height: 1,
|
|
673
|
-
backgroundColor: AppColors_1.AppColors.dividerColor,
|
|
674
|
-
}}/>
|
|
675
|
-
|
|
676
|
-
{/* #6 — Default Tab */}
|
|
1166
|
+
{/* Section 3: Default Startup Tab */}
|
|
677
1167
|
<react_native_1.View style={{
|
|
678
|
-
|
|
679
|
-
|
|
1168
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1169
|
+
borderRadius: 14,
|
|
1170
|
+
borderWidth: 1,
|
|
1171
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1172
|
+
overflow: 'hidden',
|
|
1173
|
+
padding: 14,
|
|
1174
|
+
gap: 12,
|
|
1175
|
+
}}>
|
|
1176
|
+
<react_native_1.Text style={{
|
|
1177
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1178
|
+
fontSize: 11,
|
|
1179
|
+
lineHeight: 14,
|
|
1180
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
1181
|
+
letterSpacing: 0.8,
|
|
680
1182
|
}}>
|
|
1183
|
+
{t('settings.startupDefault')}
|
|
1184
|
+
</react_native_1.Text>
|
|
1185
|
+
|
|
681
1186
|
<react_native_1.View style={{
|
|
682
1187
|
flexDirection: 'row',
|
|
683
1188
|
alignItems: 'center',
|
|
684
|
-
gap:
|
|
1189
|
+
gap: 10,
|
|
685
1190
|
}}>
|
|
686
1191
|
<react_native_1.View style={{
|
|
687
|
-
width:
|
|
688
|
-
height:
|
|
689
|
-
borderRadius:
|
|
1192
|
+
width: 32,
|
|
1193
|
+
height: 32,
|
|
1194
|
+
borderRadius: 8,
|
|
690
1195
|
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
691
|
-
borderWidth: 1,
|
|
692
|
-
borderColor: `${AppColors_1.AppColors.purple}33`,
|
|
693
1196
|
alignItems: 'center',
|
|
694
1197
|
justifyContent: 'center',
|
|
695
1198
|
}}>
|
|
696
|
-
<NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={
|
|
1199
|
+
<NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
697
1200
|
</react_native_1.View>
|
|
698
1201
|
<react_native_1.View style={{ flex: 1 }}>
|
|
699
1202
|
<react_native_1.Text style={{
|
|
700
1203
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
701
|
-
fontSize: 13,
|
|
1204
|
+
fontSize: 13.5,
|
|
1205
|
+
lineHeight: 18,
|
|
702
1206
|
color: AppColors_1.AppColors.primaryBlack,
|
|
703
1207
|
}}>
|
|
704
|
-
|
|
1208
|
+
{t('settings.general.defaultOpeningTab')}
|
|
705
1209
|
</react_native_1.Text>
|
|
706
1210
|
<react_native_1.Text style={{
|
|
707
1211
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
708
1212
|
fontSize: 11,
|
|
1213
|
+
lineHeight: 15,
|
|
709
1214
|
color: AppColors_1.AppColors.grayText,
|
|
710
1215
|
marginTop: 1,
|
|
711
1216
|
}}>
|
|
712
|
-
|
|
1217
|
+
{t('settings.general.defaultOpeningTabDesc')}
|
|
713
1218
|
</react_native_1.Text>
|
|
714
1219
|
</react_native_1.View>
|
|
715
1220
|
</react_native_1.View>
|
|
@@ -719,13 +1224,15 @@ const SettingsPanel = () => {
|
|
|
719
1224
|
flexDirection: 'row',
|
|
720
1225
|
flexWrap: 'wrap',
|
|
721
1226
|
gap: 8,
|
|
722
|
-
marginTop:
|
|
1227
|
+
marginTop: 4,
|
|
723
1228
|
}}>
|
|
724
|
-
{
|
|
725
|
-
.filter(tab => tab.key === 'apis' ||
|
|
1229
|
+
{allModules
|
|
1230
|
+
.filter(tab => tab.key === 'apis' ||
|
|
1231
|
+
stagedTabVisibility?.[tab.key] ||
|
|
1232
|
+
tabVisibility?.[tab.key])
|
|
726
1233
|
.map(tab => {
|
|
727
1234
|
const isActive = defaultTab === tab.key;
|
|
728
|
-
return (<TouchableScale_1.default key={tab.key} onPress={() => setDefaultTab(tab.key)} style={{
|
|
1235
|
+
return (<TouchableScale_1.default key={tab.key} accessible={true} accessibilityRole="button" accessibilityLabel={`Set ${tab.label} as default tab`} accessibilityState={{ selected: isActive }} onPress={() => setDefaultTab(tab.key)} style={{
|
|
729
1236
|
flexDirection: 'row',
|
|
730
1237
|
alignItems: 'center',
|
|
731
1238
|
gap: 8,
|
|
@@ -733,186 +1240,190 @@ const SettingsPanel = () => {
|
|
|
733
1240
|
paddingHorizontal: 12,
|
|
734
1241
|
borderRadius: 10,
|
|
735
1242
|
borderWidth: 1.5,
|
|
736
|
-
borderColor: isActive
|
|
737
|
-
|
|
1243
|
+
borderColor: isActive
|
|
1244
|
+
? AppColors_1.AppColors.purple
|
|
1245
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
1246
|
+
backgroundColor: isActive
|
|
1247
|
+
? `${AppColors_1.AppColors.purple}0F`
|
|
1248
|
+
: AppColors_1.AppColors.primaryLight,
|
|
738
1249
|
minWidth: '47%',
|
|
739
1250
|
flex: 1,
|
|
740
1251
|
}}>
|
|
741
|
-
<react_native_1.View style={{
|
|
742
|
-
width: 22,
|
|
743
|
-
height: 22,
|
|
744
|
-
borderRadius: 6,
|
|
745
|
-
backgroundColor: isActive ? AppColors_1.AppColors.purple : AppColors_1.AppColors.purpleShade50,
|
|
746
|
-
alignItems: 'center',
|
|
747
|
-
justifyContent: 'center',
|
|
748
|
-
}}>
|
|
749
|
-
{tab.icon === 'apis' && (<NetworkIcons_1.SignalIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
750
|
-
{tab.icon === 'logs' && (<NetworkIcons_1.TerminalIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
751
|
-
{tab.icon === 'analytics' && (<NetworkIcons_1.AnalyticsIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
752
|
-
{tab.icon === 'redux' && (<NetworkIcons_1.ReduxIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
753
|
-
{tab.icon === 'bundle' && (<NetworkIcons_1.PackageIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
754
|
-
{tab.icon === 'performance' && (<NetworkIcons_1.PerformanceIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
755
|
-
{tab.icon === 'crash' && (<NetworkIcons_1.CrashIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
756
|
-
</react_native_1.View>
|
|
757
1252
|
<react_native_1.Text style={{
|
|
758
1253
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
759
|
-
fontSize:
|
|
760
|
-
|
|
1254
|
+
fontSize: 12.5,
|
|
1255
|
+
lineHeight: 16,
|
|
1256
|
+
color: isActive
|
|
1257
|
+
? AppColors_1.AppColors.purple
|
|
1258
|
+
: AppColors_1.AppColors.primaryBlack,
|
|
761
1259
|
flex: 1,
|
|
762
1260
|
}}>
|
|
763
|
-
|
|
1261
|
+
{tab.label}
|
|
764
1262
|
</react_native_1.Text>
|
|
765
1263
|
{isActive && (<react_native_1.View style={{
|
|
766
|
-
width:
|
|
767
|
-
height:
|
|
768
|
-
borderRadius:
|
|
1264
|
+
width: 16,
|
|
1265
|
+
height: 16,
|
|
1266
|
+
borderRadius: 8,
|
|
769
1267
|
backgroundColor: AppColors_1.AppColors.purple,
|
|
770
1268
|
alignItems: 'center',
|
|
771
1269
|
justifyContent: 'center',
|
|
772
1270
|
}}>
|
|
773
|
-
<NetworkIcons_1.CheckIcon size={
|
|
1271
|
+
<NetworkIcons_1.CheckIcon size={9} color={AppColors_1.AppColors.white}/>
|
|
774
1272
|
</react_native_1.View>)}
|
|
775
1273
|
</TouchableScale_1.default>);
|
|
776
1274
|
})}
|
|
777
1275
|
</react_native_1.View>
|
|
778
1276
|
</react_native_1.View>
|
|
779
1277
|
|
|
780
|
-
{/*
|
|
1278
|
+
{/* Section 4: Log Deduplication & Levels */}
|
|
781
1279
|
<react_native_1.View style={{
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
1280
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1281
|
+
borderRadius: 14,
|
|
1282
|
+
borderWidth: 1,
|
|
1283
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1284
|
+
overflow: 'hidden',
|
|
1285
|
+
padding: 14,
|
|
1286
|
+
gap: 14,
|
|
1287
|
+
}}>
|
|
1288
|
+
<react_native_1.Text style={{
|
|
1289
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1290
|
+
fontSize: 11,
|
|
1291
|
+
lineHeight: 14,
|
|
1292
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
1293
|
+
letterSpacing: 0.8,
|
|
1294
|
+
}}>
|
|
1295
|
+
{t('settings.logFiltersDeduplication')}
|
|
1296
|
+
</react_native_1.Text>
|
|
785
1297
|
|
|
786
|
-
|
|
787
|
-
|
|
1298
|
+
{/* Show Duplicate Logs */}
|
|
1299
|
+
<react_native_1.View style={{
|
|
788
1300
|
flexDirection: 'row',
|
|
789
1301
|
alignItems: 'center',
|
|
790
|
-
|
|
791
|
-
paddingHorizontal: 14,
|
|
792
|
-
gap: 12,
|
|
1302
|
+
justifyContent: 'space-between',
|
|
793
1303
|
}}>
|
|
794
|
-
|
|
795
|
-
flex: 1,
|
|
1304
|
+
<react_native_1.View style={{
|
|
796
1305
|
flexDirection: 'row',
|
|
797
1306
|
alignItems: 'center',
|
|
798
|
-
gap:
|
|
1307
|
+
gap: 10,
|
|
1308
|
+
flex: 1,
|
|
799
1309
|
}}>
|
|
800
|
-
|
|
801
|
-
width:
|
|
802
|
-
height:
|
|
803
|
-
borderRadius:
|
|
1310
|
+
<react_native_1.View style={{
|
|
1311
|
+
width: 32,
|
|
1312
|
+
height: 32,
|
|
1313
|
+
borderRadius: 8,
|
|
804
1314
|
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
805
|
-
borderWidth: 1,
|
|
806
|
-
borderColor: `${AppColors_1.AppColors.purple}33`,
|
|
807
1315
|
alignItems: 'center',
|
|
808
1316
|
justifyContent: 'center',
|
|
809
1317
|
}}>
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
1318
|
+
<NetworkIcons_1.EyeIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
1319
|
+
</react_native_1.View>
|
|
1320
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1321
|
+
<react_native_1.Text style={{
|
|
814
1322
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
815
|
-
fontSize: 13,
|
|
1323
|
+
fontSize: 13.5,
|
|
1324
|
+
lineHeight: 18,
|
|
816
1325
|
color: AppColors_1.AppColors.primaryBlack,
|
|
817
1326
|
}}>
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
1327
|
+
{t('settings.general.duplicateLogs')}
|
|
1328
|
+
</react_native_1.Text>
|
|
1329
|
+
<react_native_1.Text style={{
|
|
821
1330
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
822
1331
|
fontSize: 11,
|
|
1332
|
+
lineHeight: 15,
|
|
823
1333
|
color: AppColors_1.AppColors.grayText,
|
|
824
1334
|
marginTop: 1,
|
|
825
1335
|
}}>
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
</react_native_1.
|
|
1336
|
+
{t('settings.general.duplicateLogsDescription')}
|
|
1337
|
+
</react_native_1.Text>
|
|
1338
|
+
</react_native_1.View>
|
|
829
1339
|
</react_native_1.View>
|
|
830
|
-
</react_native_1.View>
|
|
831
1340
|
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
borderRadius: 11,
|
|
1341
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="switch" accessibilityLabel="Toggle show duplicate logs" accessibilityState={{ checked: showDuplicateLogs }} onPress={() => setShowDuplicateLogs(prev => !prev)} style={{
|
|
1342
|
+
width: 42,
|
|
1343
|
+
height: 24,
|
|
1344
|
+
borderRadius: 12,
|
|
837
1345
|
backgroundColor: showDuplicateLogs
|
|
838
1346
|
? AppColors_1.AppColors.purple
|
|
839
1347
|
: AppColors_1.AppColors.grayBorderSecondary,
|
|
840
1348
|
padding: 2,
|
|
841
1349
|
justifyContent: 'center',
|
|
842
|
-
alignItems: showDuplicateLogs
|
|
1350
|
+
alignItems: showDuplicateLogs
|
|
1351
|
+
? 'flex-end'
|
|
1352
|
+
: 'flex-start',
|
|
843
1353
|
}}>
|
|
844
|
-
|
|
845
|
-
width:
|
|
846
|
-
height:
|
|
847
|
-
borderRadius:
|
|
1354
|
+
<react_native_1.View style={{
|
|
1355
|
+
width: 20,
|
|
1356
|
+
height: 20,
|
|
1357
|
+
borderRadius: 10,
|
|
848
1358
|
backgroundColor: AppColors_1.AppColors.white,
|
|
849
1359
|
shadowColor: AppColors_1.AppColors.black,
|
|
850
|
-
shadowOpacity: 0.
|
|
851
|
-
shadowRadius:
|
|
1360
|
+
shadowOpacity: 0.18,
|
|
1361
|
+
shadowRadius: 2,
|
|
852
1362
|
shadowOffset: { width: 0, height: 1 },
|
|
853
1363
|
}}/>
|
|
854
|
-
|
|
855
|
-
|
|
1364
|
+
</TouchableScale_1.default>
|
|
1365
|
+
</react_native_1.View>
|
|
856
1366
|
|
|
857
|
-
|
|
858
|
-
<react_native_1.View style={{
|
|
859
|
-
height: 1,
|
|
860
|
-
backgroundColor: AppColors_1.AppColors.dividerColor,
|
|
861
|
-
}}/>
|
|
1367
|
+
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
862
1368
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
paddingHorizontal: 14,
|
|
867
|
-
}}>
|
|
868
|
-
<react_native_1.View style={{
|
|
1369
|
+
{/* Console Log Levels */}
|
|
1370
|
+
<react_native_1.View style={{ gap: 8 }}>
|
|
1371
|
+
<react_native_1.View style={{
|
|
869
1372
|
flexDirection: 'row',
|
|
870
1373
|
alignItems: 'center',
|
|
871
|
-
gap:
|
|
1374
|
+
gap: 10,
|
|
872
1375
|
}}>
|
|
873
|
-
|
|
874
|
-
width:
|
|
875
|
-
height:
|
|
876
|
-
borderRadius:
|
|
1376
|
+
<react_native_1.View style={{
|
|
1377
|
+
width: 32,
|
|
1378
|
+
height: 32,
|
|
1379
|
+
borderRadius: 8,
|
|
877
1380
|
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
878
|
-
borderWidth: 1,
|
|
879
|
-
borderColor: `${AppColors_1.AppColors.purple}33`,
|
|
880
1381
|
alignItems: 'center',
|
|
881
1382
|
justifyContent: 'center',
|
|
882
1383
|
}}>
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
1384
|
+
<NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
1385
|
+
</react_native_1.View>
|
|
1386
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1387
|
+
<react_native_1.Text style={{
|
|
887
1388
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
888
|
-
fontSize: 13,
|
|
1389
|
+
fontSize: 13.5,
|
|
1390
|
+
lineHeight: 18,
|
|
889
1391
|
color: AppColors_1.AppColors.primaryBlack,
|
|
890
1392
|
}}>
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
1393
|
+
{t('settings.general.activeConsoleLogLevels')}
|
|
1394
|
+
</react_native_1.Text>
|
|
1395
|
+
<react_native_1.Text style={{
|
|
894
1396
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
895
1397
|
fontSize: 11,
|
|
1398
|
+
lineHeight: 15,
|
|
896
1399
|
color: AppColors_1.AppColors.grayText,
|
|
897
1400
|
marginTop: 1,
|
|
898
1401
|
}}>
|
|
899
|
-
|
|
900
|
-
|
|
1402
|
+
{t('settings.general.activeConsoleLogLevelsDesc')}
|
|
1403
|
+
</react_native_1.Text>
|
|
1404
|
+
</react_native_1.View>
|
|
901
1405
|
</react_native_1.View>
|
|
902
|
-
</react_native_1.View>
|
|
903
1406
|
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
{
|
|
912
|
-
|
|
913
|
-
|
|
1407
|
+
<react_native_1.View style={{ flexDirection: 'row', gap: 8, marginTop: 4 }}>
|
|
1408
|
+
{[
|
|
1409
|
+
{
|
|
1410
|
+
key: 'info',
|
|
1411
|
+
label: 'Info',
|
|
1412
|
+
color: AppColors_1.AppColors.blue500,
|
|
1413
|
+
},
|
|
1414
|
+
{
|
|
1415
|
+
key: 'warn',
|
|
1416
|
+
label: 'Warning',
|
|
1417
|
+
color: AppColors_1.AppColors.amber500,
|
|
1418
|
+
},
|
|
1419
|
+
{
|
|
1420
|
+
key: 'error',
|
|
1421
|
+
label: 'Error',
|
|
1422
|
+
color: AppColors_1.AppColors.errorColor,
|
|
1423
|
+
},
|
|
1424
|
+
].map(level => {
|
|
914
1425
|
const isActive = showConsoleLevels[level.key];
|
|
915
|
-
return (<TouchableScale_1.default key={level.key} onPress={() => setShowConsoleLevels(prev => ({
|
|
1426
|
+
return (<TouchableScale_1.default key={level.key} accessible={true} accessibilityRole="checkbox" accessibilityLabel={`Toggle ${level.label} logs`} accessibilityState={{ checked: isActive }} onPress={() => setShowConsoleLevels(prev => ({
|
|
916
1427
|
...prev,
|
|
917
1428
|
[level.key]: !prev[level.key],
|
|
918
1429
|
}))} style={{
|
|
@@ -922,112 +1433,113 @@ const SettingsPanel = () => {
|
|
|
922
1433
|
justifyContent: 'center',
|
|
923
1434
|
gap: 6,
|
|
924
1435
|
paddingVertical: 8,
|
|
925
|
-
borderRadius:
|
|
1436
|
+
borderRadius: 9,
|
|
926
1437
|
borderWidth: 1.5,
|
|
927
|
-
borderColor: isActive
|
|
928
|
-
|
|
1438
|
+
borderColor: isActive
|
|
1439
|
+
? level.color
|
|
1440
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
1441
|
+
backgroundColor: isActive
|
|
1442
|
+
? `${level.color}0D`
|
|
1443
|
+
: AppColors_1.AppColors.primaryLight,
|
|
929
1444
|
}}>
|
|
930
|
-
|
|
1445
|
+
<react_native_1.View style={{
|
|
931
1446
|
width: 8,
|
|
932
1447
|
height: 8,
|
|
933
1448
|
borderRadius: 4,
|
|
934
|
-
backgroundColor: isActive
|
|
1449
|
+
backgroundColor: isActive
|
|
1450
|
+
? level.color
|
|
1451
|
+
: AppColors_1.AppColors.grayBorderSecondary,
|
|
935
1452
|
}}/>
|
|
936
|
-
|
|
1453
|
+
<react_native_1.Text style={{
|
|
937
1454
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
938
|
-
fontSize: 11,
|
|
939
|
-
|
|
1455
|
+
fontSize: 11.5,
|
|
1456
|
+
lineHeight: 15,
|
|
1457
|
+
color: isActive
|
|
1458
|
+
? level.color
|
|
1459
|
+
: AppColors_1.AppColors.grayText,
|
|
940
1460
|
}}>
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
1461
|
+
{level.label}
|
|
1462
|
+
</react_native_1.Text>
|
|
1463
|
+
</TouchableScale_1.default>);
|
|
944
1464
|
})}
|
|
1465
|
+
</react_native_1.View>
|
|
945
1466
|
</react_native_1.View>
|
|
946
1467
|
</react_native_1.View>
|
|
947
1468
|
|
|
948
|
-
{/*
|
|
949
|
-
<react_native_1.View style={{
|
|
950
|
-
height: 1,
|
|
951
|
-
backgroundColor: AppColors_1.AppColors.dividerColor,
|
|
952
|
-
}}/>
|
|
953
|
-
|
|
954
|
-
{/* Reset Settings */}
|
|
1469
|
+
{/* Section 5: Reset Settings */}
|
|
955
1470
|
<react_native_1.View style={{
|
|
1471
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1472
|
+
borderRadius: 14,
|
|
1473
|
+
borderWidth: 1,
|
|
1474
|
+
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
1475
|
+
overflow: 'hidden',
|
|
1476
|
+
padding: 14,
|
|
956
1477
|
flexDirection: 'row',
|
|
957
1478
|
alignItems: 'center',
|
|
958
|
-
paddingVertical: 12,
|
|
959
|
-
paddingHorizontal: 14,
|
|
960
1479
|
gap: 12,
|
|
961
1480
|
}}>
|
|
962
1481
|
<react_native_1.View style={{
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
gap: 8,
|
|
967
|
-
}}>
|
|
968
|
-
<react_native_1.View style={{
|
|
969
|
-
width: 20,
|
|
970
|
-
height: 20,
|
|
971
|
-
borderRadius: 6,
|
|
1482
|
+
width: 34,
|
|
1483
|
+
height: 34,
|
|
1484
|
+
borderRadius: 9,
|
|
972
1485
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
973
|
-
borderWidth: 1,
|
|
974
|
-
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
975
1486
|
alignItems: 'center',
|
|
976
1487
|
justifyContent: 'center',
|
|
977
1488
|
}}>
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
1489
|
+
<NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={15}/>
|
|
1490
|
+
</react_native_1.View>
|
|
1491
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1492
|
+
<react_native_1.Text style={{
|
|
982
1493
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
983
|
-
fontSize: 13,
|
|
1494
|
+
fontSize: 13.5,
|
|
1495
|
+
lineHeight: 18,
|
|
984
1496
|
color: AppColors_1.AppColors.primaryBlack,
|
|
985
1497
|
}}>
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
1498
|
+
{t('settings.resetSettings')}
|
|
1499
|
+
</react_native_1.Text>
|
|
1500
|
+
<react_native_1.Text style={{
|
|
989
1501
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
990
1502
|
fontSize: 11,
|
|
1503
|
+
lineHeight: 15,
|
|
991
1504
|
color: AppColors_1.AppColors.grayText,
|
|
992
1505
|
marginTop: 1,
|
|
993
1506
|
}}>
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
</react_native_1.View>
|
|
1507
|
+
{t('settings.resetSettingsDesc')}
|
|
1508
|
+
</react_native_1.Text>
|
|
997
1509
|
</react_native_1.View>
|
|
998
1510
|
|
|
999
|
-
<TouchableScale_1.default onPress={resetToDefaults} style={{
|
|
1000
|
-
paddingHorizontal:
|
|
1001
|
-
paddingVertical:
|
|
1002
|
-
borderRadius:
|
|
1511
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="Reset all settings to default" onPress={resetToDefaults} style={{
|
|
1512
|
+
paddingHorizontal: 12,
|
|
1513
|
+
paddingVertical: 7,
|
|
1514
|
+
borderRadius: 8,
|
|
1003
1515
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1004
1516
|
borderWidth: 1,
|
|
1005
|
-
borderColor: `${AppColors_1.AppColors.errorColor}
|
|
1517
|
+
borderColor: `${AppColors_1.AppColors.errorColor}38`,
|
|
1006
1518
|
}}>
|
|
1007
1519
|
<react_native_1.Text style={{
|
|
1008
1520
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1009
|
-
fontSize: 11,
|
|
1521
|
+
fontSize: 11.5,
|
|
1522
|
+
lineHeight: 15,
|
|
1010
1523
|
color: AppColors_1.AppColors.errorColor,
|
|
1011
1524
|
}}>
|
|
1012
|
-
|
|
1525
|
+
{t('settings.reset')}
|
|
1013
1526
|
</react_native_1.Text>
|
|
1014
1527
|
</TouchableScale_1.default>
|
|
1015
1528
|
</react_native_1.View>
|
|
1016
1529
|
</react_native_1.View>)}
|
|
1017
1530
|
|
|
1018
|
-
|
|
1019
|
-
{/* Storage Status */}
|
|
1531
|
+
{/* Storage & Engine Status Card */}
|
|
1020
1532
|
<react_native_1.View style={{
|
|
1021
|
-
backgroundColor:
|
|
1022
|
-
? `${AppColors_1.AppColors.liveGreen}
|
|
1023
|
-
: `${AppColors_1.AppColors.amber600}
|
|
1533
|
+
backgroundColor: isPersistent
|
|
1534
|
+
? `${AppColors_1.AppColors.liveGreen}12`
|
|
1535
|
+
: `${AppColors_1.AppColors.amber600}12`,
|
|
1024
1536
|
borderRadius: 12,
|
|
1025
1537
|
borderWidth: 1,
|
|
1026
|
-
borderColor:
|
|
1538
|
+
borderColor: isPersistent
|
|
1027
1539
|
? `${AppColors_1.AppColors.liveGreen}33`
|
|
1028
1540
|
: `${AppColors_1.AppColors.amber600}33`,
|
|
1029
1541
|
padding: 12,
|
|
1030
|
-
|
|
1542
|
+
marginBottom: 10,
|
|
1031
1543
|
flexDirection: 'row',
|
|
1032
1544
|
alignItems: 'center',
|
|
1033
1545
|
gap: 10,
|
|
@@ -1036,32 +1548,106 @@ const SettingsPanel = () => {
|
|
|
1036
1548
|
width: 8,
|
|
1037
1549
|
height: 8,
|
|
1038
1550
|
borderRadius: 4,
|
|
1039
|
-
backgroundColor:
|
|
1551
|
+
backgroundColor: isPersistent
|
|
1552
|
+
? AppColors_1.AppColors.green500
|
|
1553
|
+
: AppColors_1.AppColors.amber600,
|
|
1040
1554
|
}}/>
|
|
1041
1555
|
<react_native_1.View style={{ flex: 1 }}>
|
|
1042
1556
|
<react_native_1.Text style={{
|
|
1043
1557
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1044
1558
|
fontSize: 12,
|
|
1045
|
-
|
|
1559
|
+
lineHeight: 16,
|
|
1560
|
+
color: isPersistent
|
|
1561
|
+
? AppColors_1.AppColors.green700
|
|
1562
|
+
: AppColors_1.AppColors.amber800,
|
|
1046
1563
|
}}>
|
|
1047
|
-
{
|
|
1048
|
-
?
|
|
1049
|
-
|
|
1564
|
+
{isPersistent
|
|
1565
|
+
? t('settings.general.storageStatusEnabled', {
|
|
1566
|
+
type: storage ? 'Custom Storage' : 'iOS NSUserDefaults',
|
|
1567
|
+
})
|
|
1568
|
+
: t('settings.general.storageStatusDisabled')}
|
|
1050
1569
|
</react_native_1.Text>
|
|
1051
1570
|
<react_native_1.Text style={{
|
|
1052
1571
|
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1053
1572
|
fontSize: 10.5,
|
|
1054
|
-
|
|
1573
|
+
lineHeight: 14,
|
|
1574
|
+
color: isPersistent
|
|
1575
|
+
? AppColors_1.AppColors.green800
|
|
1576
|
+
: AppColors_1.AppColors.amber800,
|
|
1055
1577
|
marginTop: 2,
|
|
1056
|
-
opacity: 0.
|
|
1578
|
+
opacity: 0.85,
|
|
1057
1579
|
}}>
|
|
1058
|
-
{
|
|
1059
|
-
? '
|
|
1060
|
-
: '
|
|
1580
|
+
{isPersistent
|
|
1581
|
+
? t('settings.general.storageStatusEnabledDesc')
|
|
1582
|
+
: t('settings.general.storageStatusDisabledDesc')}
|
|
1583
|
+
</react_native_1.Text>
|
|
1584
|
+
</react_native_1.View>
|
|
1585
|
+
</react_native_1.View>
|
|
1586
|
+
</react_native_1.ScrollView>
|
|
1587
|
+
|
|
1588
|
+
{/* Bottom Sticky Action Bar for Save Changes */}
|
|
1589
|
+
{settingsActiveSubTab === 'module' && (<react_native_1.View style={{
|
|
1590
|
+
paddingHorizontal: 16,
|
|
1591
|
+
paddingTop: 12,
|
|
1592
|
+
paddingBottom: react_native_1.Platform.OS === 'ios' ? 26 : 14,
|
|
1593
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1594
|
+
borderTopWidth: 1,
|
|
1595
|
+
borderTopColor: AppColors_1.AppColors.dividerColor,
|
|
1596
|
+
flexDirection: 'row',
|
|
1597
|
+
alignItems: 'center',
|
|
1598
|
+
gap: 12,
|
|
1599
|
+
shadowColor: AppColors_1.AppColors.black,
|
|
1600
|
+
shadowOpacity: 0.08,
|
|
1601
|
+
shadowRadius: 8,
|
|
1602
|
+
shadowOffset: { width: 0, height: -3 },
|
|
1603
|
+
elevation: 8,
|
|
1604
|
+
}}>
|
|
1605
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1606
|
+
<react_native_1.Text style={{
|
|
1607
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1608
|
+
fontSize: 13,
|
|
1609
|
+
lineHeight: 17,
|
|
1610
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
1611
|
+
}}>
|
|
1612
|
+
{stagedActiveCount} of {allModules.length} Modules Active
|
|
1613
|
+
</react_native_1.Text>
|
|
1614
|
+
<react_native_1.Text style={{
|
|
1615
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1616
|
+
fontSize: 11,
|
|
1617
|
+
lineHeight: 15,
|
|
1618
|
+
color: hasUnsavedChanges
|
|
1619
|
+
? AppColors_1.AppColors.purple
|
|
1620
|
+
: AppColors_1.AppColors.grayText,
|
|
1621
|
+
marginTop: 1,
|
|
1622
|
+
}}>
|
|
1623
|
+
{hasUnsavedChanges
|
|
1624
|
+
? t('settings.unsavedPending')
|
|
1625
|
+
: t('settings.allSynchronized')}
|
|
1626
|
+
</react_native_1.Text>
|
|
1627
|
+
</react_native_1.View>
|
|
1628
|
+
|
|
1629
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="Save Changes" onPress={handleSaveChanges} style={{
|
|
1630
|
+
flexDirection: 'row',
|
|
1631
|
+
alignItems: 'center',
|
|
1632
|
+
gap: 6,
|
|
1633
|
+
backgroundColor: hasUnsavedChanges
|
|
1634
|
+
? AppColors_1.AppColors.purple
|
|
1635
|
+
: `${AppColors_1.AppColors.purple}22`,
|
|
1636
|
+
paddingHorizontal: 18,
|
|
1637
|
+
paddingVertical: 10,
|
|
1638
|
+
borderRadius: 10,
|
|
1639
|
+
}}>
|
|
1640
|
+
<NetworkIcons_1.CheckIcon size={14} color={hasUnsavedChanges ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple}/>
|
|
1641
|
+
<react_native_1.Text style={{
|
|
1642
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1643
|
+
fontSize: 13,
|
|
1644
|
+
lineHeight: 17,
|
|
1645
|
+
color: hasUnsavedChanges ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple,
|
|
1646
|
+
}}>
|
|
1647
|
+
{t('settings.saveChanges')}
|
|
1061
1648
|
</react_native_1.Text>
|
|
1062
|
-
</
|
|
1063
|
-
</react_native_1.View>
|
|
1064
|
-
</react_native_1.ScrollView>
|
|
1649
|
+
</TouchableScale_1.default>
|
|
1650
|
+
</react_native_1.View>)}
|
|
1065
1651
|
</react_native_1.View>);
|
|
1066
1652
|
}
|
|
1067
1653
|
const goBackToMain = () => {
|
|
@@ -1069,105 +1655,154 @@ const SettingsPanel = () => {
|
|
|
1069
1655
|
setSettingsPage('main');
|
|
1070
1656
|
};
|
|
1071
1657
|
// Helper: settings row with icon + label + optional description
|
|
1072
|
-
const renderSettingRow = (opts) =>
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
<TouchableScale_1.default disabled={!opts.onPress} onPress={opts.onPress} style={{
|
|
1078
|
-
flexDirection: 'row',
|
|
1079
|
-
alignItems: 'center',
|
|
1080
|
-
gap: 12,
|
|
1081
|
-
}}>
|
|
1082
|
-
<react_native_1.View style={{
|
|
1083
|
-
width: 36,
|
|
1084
|
-
height: 36,
|
|
1085
|
-
borderRadius: 10,
|
|
1086
|
-
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
1087
|
-
borderWidth: 1,
|
|
1088
|
-
borderColor: `${AppColors_1.AppColors.purple}2E`,
|
|
1089
|
-
alignItems: 'center',
|
|
1090
|
-
justifyContent: 'center',
|
|
1091
|
-
}}>
|
|
1092
|
-
{opts.icon}
|
|
1093
|
-
</react_native_1.View>
|
|
1094
|
-
<react_native_1.View style={{ flex: 1 }}>
|
|
1095
|
-
<react_native_1.Text style={{
|
|
1096
|
-
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1097
|
-
fontSize: 14,
|
|
1098
|
-
color: AppColors_1.AppColors.primaryBlack,
|
|
1099
|
-
}}>
|
|
1100
|
-
{opts.label}
|
|
1101
|
-
</react_native_1.Text>
|
|
1102
|
-
{opts.description ? (<react_native_1.Text style={{
|
|
1103
|
-
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1104
|
-
fontSize: 11,
|
|
1105
|
-
color: AppColors_1.AppColors.grayText,
|
|
1106
|
-
marginTop: 1,
|
|
1658
|
+
const renderSettingRow = (opts) => {
|
|
1659
|
+
return (<react_native_1.View style={{
|
|
1660
|
+
paddingVertical: 12,
|
|
1661
|
+
borderBottomWidth: opts.isLast ? 0 : 1,
|
|
1662
|
+
borderBottomColor: AppColors_1.AppColors.dividerColor,
|
|
1107
1663
|
}}>
|
|
1108
|
-
|
|
1109
|
-
</react_native_1.Text>) : null}
|
|
1110
|
-
</react_native_1.View>
|
|
1111
|
-
{opts.right || null}
|
|
1112
|
-
</TouchableScale_1.default>
|
|
1113
|
-
{opts.picker && (<react_native_1.View style={{
|
|
1664
|
+
<TouchableScale_1.default disabled={!opts.onPress} onPress={opts.onPress} style={{
|
|
1114
1665
|
flexDirection: 'row',
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1666
|
+
alignItems: 'center',
|
|
1667
|
+
gap: 12,
|
|
1668
|
+
}}>
|
|
1669
|
+
<react_native_1.View style={{
|
|
1670
|
+
width: 36,
|
|
1671
|
+
height: 36,
|
|
1672
|
+
borderRadius: 10,
|
|
1673
|
+
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
1119
1674
|
borderWidth: 1,
|
|
1120
|
-
borderColor: AppColors_1.AppColors.
|
|
1675
|
+
borderColor: `${AppColors_1.AppColors.purple}2E`,
|
|
1676
|
+
alignItems: 'center',
|
|
1677
|
+
justifyContent: 'center',
|
|
1121
1678
|
}}>
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1679
|
+
{opts.icon}
|
|
1680
|
+
</react_native_1.View>
|
|
1681
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
1682
|
+
<react_native_1.Text style={{
|
|
1683
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1684
|
+
fontSize: 14,
|
|
1685
|
+
lineHeight: 18,
|
|
1686
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
1687
|
+
}}>
|
|
1688
|
+
{opts.label}
|
|
1689
|
+
</react_native_1.Text>
|
|
1690
|
+
{opts.description ? (<react_native_1.Text style={{
|
|
1691
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1692
|
+
fontSize: 11,
|
|
1693
|
+
lineHeight: 15,
|
|
1694
|
+
color: AppColors_1.AppColors.grayText,
|
|
1695
|
+
marginTop: 1,
|
|
1696
|
+
}}>
|
|
1697
|
+
{opts.description}
|
|
1698
|
+
</react_native_1.Text>) : null}
|
|
1699
|
+
</react_native_1.View>
|
|
1700
|
+
{opts.right || null}
|
|
1701
|
+
</TouchableScale_1.default>
|
|
1702
|
+
{opts.numericInput && (<react_native_1.View style={{ marginTop: 10, gap: 6 }}>
|
|
1703
|
+
<react_native_1.View style={{
|
|
1704
|
+
flexDirection: 'row',
|
|
1705
|
+
alignItems: 'center',
|
|
1706
|
+
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
1707
|
+
borderRadius: 8,
|
|
1708
|
+
borderWidth: 1,
|
|
1709
|
+
borderColor: AppColors_1.AppColors.dividerColor,
|
|
1710
|
+
paddingHorizontal: 12,
|
|
1711
|
+
paddingVertical: 4,
|
|
1712
|
+
}}>
|
|
1713
|
+
<react_native_1.TextInput style={{
|
|
1714
|
+
flex: 1,
|
|
1715
|
+
fontFamily: AppFonts_1.AppFonts.interMedium,
|
|
1716
|
+
fontSize: 14,
|
|
1717
|
+
lineHeight: 18,
|
|
1718
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
1719
|
+
paddingVertical: 6,
|
|
1720
|
+
}} value={String(opts.numericInput.value || '')} onChangeText={text => {
|
|
1721
|
+
const num = parseInt(text.replace(/[^0-9]/g, ''), 10);
|
|
1722
|
+
if (!isNaN(num)) {
|
|
1723
|
+
const clamped = Math.max(opts.numericInput?.min ?? 1, Math.min(opts.numericInput?.max ?? 10000, num));
|
|
1724
|
+
opts.numericInput?.onChange(clamped);
|
|
1725
|
+
}
|
|
1726
|
+
}} keyboardType={opts.numericInput.keyboardType ?? 'number-pad'} placeholder={opts.numericInput.placeholder} placeholderTextColor={AppColors_1.AppColors.grayTextWeak} maxLength={6} selectTextOnFocus/>
|
|
1727
|
+
<react_native_1.Text style={{
|
|
1728
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1729
|
+
fontSize: 11,
|
|
1730
|
+
color: AppColors_1.AppColors.purple,
|
|
1731
|
+
marginLeft: 6,
|
|
1732
|
+
}}>
|
|
1733
|
+
MAX
|
|
1734
|
+
</react_native_1.Text>
|
|
1735
|
+
</react_native_1.View>
|
|
1736
|
+
{opts.numericInput.min !== undefined || opts.numericInput.max !== undefined ? (<react_native_1.Text style={{
|
|
1737
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1738
|
+
fontSize: 10,
|
|
1739
|
+
lineHeight: 13,
|
|
1740
|
+
color: AppColors_1.AppColors.grayTextWeak,
|
|
1137
1741
|
}}>
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1742
|
+
Range: {opts.numericInput.min ?? 1} - {opts.numericInput.max ?? '∞'}
|
|
1743
|
+
</react_native_1.Text>) : null}
|
|
1744
|
+
</react_native_1.View>)}
|
|
1745
|
+
{opts.picker && (<react_native_1.View style={{
|
|
1746
|
+
flexDirection: 'row',
|
|
1747
|
+
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
1748
|
+
borderRadius: 8,
|
|
1749
|
+
padding: 2.5,
|
|
1750
|
+
marginTop: 10,
|
|
1751
|
+
borderWidth: 1,
|
|
1752
|
+
borderColor: AppColors_1.AppColors.dividerColor,
|
|
1753
|
+
}}>
|
|
1754
|
+
{opts.picker.options.map(opt => {
|
|
1755
|
+
const isActive = opts.picker.selectedValue === opt;
|
|
1756
|
+
return (<TouchableScale_1.default key={String(opt)} onPress={() => opts.picker.onSelect(opt)} style={{
|
|
1757
|
+
flex: 1,
|
|
1758
|
+
paddingVertical: 6,
|
|
1759
|
+
alignItems: 'center',
|
|
1760
|
+
borderRadius: 6,
|
|
1761
|
+
backgroundColor: isActive
|
|
1762
|
+
? AppColors_1.AppColors.purple
|
|
1763
|
+
: 'transparent',
|
|
1764
|
+
}}>
|
|
1765
|
+
<react_native_1.Text style={{
|
|
1766
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1767
|
+
fontSize: 11,
|
|
1768
|
+
lineHeight: 14,
|
|
1769
|
+
color: isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayText,
|
|
1770
|
+
}}>
|
|
1771
|
+
{opts.picker.formatLabel
|
|
1772
|
+
? opts.picker.formatLabel(opt)
|
|
1773
|
+
: opt}
|
|
1774
|
+
</react_native_1.Text>
|
|
1775
|
+
</TouchableScale_1.default>);
|
|
1776
|
+
})}
|
|
1777
|
+
</react_native_1.View>)}
|
|
1778
|
+
</react_native_1.View>);
|
|
1779
|
+
};
|
|
1146
1780
|
let content = null;
|
|
1147
1781
|
let title = '';
|
|
1148
1782
|
let icon = null;
|
|
1149
1783
|
let rightInfo = '';
|
|
1150
1784
|
if (settingsPage === 'apis') {
|
|
1151
|
-
title = '
|
|
1785
|
+
title = t('settings.apis.title');
|
|
1152
1786
|
icon = <NetworkIcons_1.SignalIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
1153
|
-
rightInfo =
|
|
1154
|
-
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
|
|
1787
|
+
rightInfo = t('settings.apis.total', { count: logs.length });
|
|
1788
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
1155
1789
|
<react_native_1.View style={{
|
|
1156
1790
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1157
1791
|
padding: 16,
|
|
1158
|
-
borderRadius:
|
|
1792
|
+
borderRadius: 14,
|
|
1159
1793
|
borderWidth: 1,
|
|
1160
1794
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1161
|
-
gap: 4,
|
|
1162
1795
|
}}>
|
|
1163
1796
|
{renderSettingRow({
|
|
1164
1797
|
icon: <NetworkIcons_1.SignalIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
1165
|
-
label: '
|
|
1166
|
-
description: '
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1798
|
+
label: t('settings.apis.maxRequestLogs'),
|
|
1799
|
+
description: t('settings.apis.maxRequestLogsDescription'),
|
|
1800
|
+
numericInput: {
|
|
1801
|
+
value: maxNetworkLogs,
|
|
1802
|
+
onChange: setMaxNetworkLogs,
|
|
1803
|
+
min: 10,
|
|
1804
|
+
max: 5000,
|
|
1805
|
+
placeholder: 'Enter max requests (10-5000)',
|
|
1171
1806
|
},
|
|
1172
1807
|
isLast: true,
|
|
1173
1808
|
})}
|
|
@@ -1175,26 +1810,25 @@ const SettingsPanel = () => {
|
|
|
1175
1810
|
|
|
1176
1811
|
<react_native_1.View style={{
|
|
1177
1812
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1178
|
-
borderRadius:
|
|
1813
|
+
borderRadius: 14,
|
|
1179
1814
|
borderWidth: 1,
|
|
1180
1815
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1181
1816
|
padding: 16,
|
|
1182
|
-
marginTop: 12,
|
|
1183
1817
|
}}>
|
|
1184
1818
|
{renderSettingRow({
|
|
1185
1819
|
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
1186
|
-
label: '
|
|
1187
|
-
description:
|
|
1820
|
+
label: t('settings.apis.clearNetworkLogs'),
|
|
1821
|
+
description: t('settings.apis.clearNetworkLogsDescription', { count: logs.length }),
|
|
1188
1822
|
isLast: true,
|
|
1189
1823
|
onPress: () => {
|
|
1190
1824
|
(0, networkLogger_1.clearNetworkLogs)();
|
|
1191
1825
|
setSelected(null);
|
|
1192
|
-
react_native_1.Alert.alert('
|
|
1826
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.apis.networkLogsCleared'));
|
|
1193
1827
|
},
|
|
1194
1828
|
right: (<react_native_1.View style={{
|
|
1195
|
-
paddingHorizontal:
|
|
1196
|
-
paddingVertical:
|
|
1197
|
-
borderRadius:
|
|
1829
|
+
paddingHorizontal: 12,
|
|
1830
|
+
paddingVertical: 6,
|
|
1831
|
+
borderRadius: 8,
|
|
1198
1832
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1199
1833
|
borderWidth: 1,
|
|
1200
1834
|
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
@@ -1202,9 +1836,10 @@ const SettingsPanel = () => {
|
|
|
1202
1836
|
<react_native_1.Text style={{
|
|
1203
1837
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1204
1838
|
fontSize: 11,
|
|
1839
|
+
lineHeight: 14,
|
|
1205
1840
|
color: AppColors_1.AppColors.errorColor,
|
|
1206
1841
|
}}>
|
|
1207
|
-
|
|
1842
|
+
{t('common.clear')}
|
|
1208
1843
|
</react_native_1.Text>
|
|
1209
1844
|
</react_native_1.View>),
|
|
1210
1845
|
})}
|
|
@@ -1212,36 +1847,39 @@ const SettingsPanel = () => {
|
|
|
1212
1847
|
</react_native_1.ScrollView>);
|
|
1213
1848
|
}
|
|
1214
1849
|
else if (settingsPage === 'logs') {
|
|
1215
|
-
title = '
|
|
1850
|
+
title = t('settings.logs.title');
|
|
1216
1851
|
icon = <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
1217
|
-
rightInfo =
|
|
1218
|
-
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
|
|
1852
|
+
rightInfo = t('settings.logs.total', { count: consoleLogs.length });
|
|
1853
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
1219
1854
|
<react_native_1.View style={{
|
|
1220
1855
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1221
1856
|
padding: 16,
|
|
1222
|
-
borderRadius:
|
|
1857
|
+
borderRadius: 14,
|
|
1223
1858
|
borderWidth: 1,
|
|
1224
1859
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1225
1860
|
gap: 4,
|
|
1226
1861
|
}}>
|
|
1227
1862
|
{renderSettingRow({
|
|
1228
1863
|
icon: <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
1229
|
-
label: '
|
|
1230
|
-
description: '
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1864
|
+
label: t('settings.logs.maxConsoleLogs'),
|
|
1865
|
+
description: t('settings.logs.maxConsoleLogsDescription'),
|
|
1866
|
+
numericInput: {
|
|
1867
|
+
value: maxConsoleLogs,
|
|
1868
|
+
onChange: setMaxConsoleLogs,
|
|
1869
|
+
min: 10,
|
|
1870
|
+
max: 10000,
|
|
1871
|
+
placeholder: 'Enter max logs (10-10000)',
|
|
1235
1872
|
},
|
|
1236
1873
|
})}
|
|
1237
1874
|
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
1238
1875
|
<react_native_1.Text style={{
|
|
1239
1876
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1240
1877
|
fontSize: 13,
|
|
1878
|
+
lineHeight: 17,
|
|
1241
1879
|
color: AppColors_1.AppColors.primaryBlack,
|
|
1242
|
-
paddingTop:
|
|
1880
|
+
paddingTop: 6,
|
|
1243
1881
|
}}>
|
|
1244
|
-
|
|
1882
|
+
{t('settings.logs.logLevels')}
|
|
1245
1883
|
</react_native_1.Text>
|
|
1246
1884
|
{['info', 'warn', 'error'].map(level => {
|
|
1247
1885
|
const isLvlActive = showConsoleLevels?.[level];
|
|
@@ -1250,19 +1888,25 @@ const SettingsPanel = () => {
|
|
|
1250
1888
|
: level === 'warn'
|
|
1251
1889
|
? AppColors_1.AppColors.warningIconGold
|
|
1252
1890
|
: AppColors_1.AppColors.skyBlue;
|
|
1891
|
+
const label = level === 'info'
|
|
1892
|
+
? t('settings.logs.showInfo')
|
|
1893
|
+
: level === 'warn'
|
|
1894
|
+
? t('settings.logs.showWarn')
|
|
1895
|
+
: t('settings.logs.showError');
|
|
1896
|
+
const desc = level === 'info'
|
|
1897
|
+
? t('settings.logs.showInfoDesc')
|
|
1898
|
+
: level === 'warn'
|
|
1899
|
+
? t('settings.logs.showWarnDesc')
|
|
1900
|
+
: t('settings.logs.showErrorDesc');
|
|
1253
1901
|
return renderSettingRow({
|
|
1254
1902
|
icon: (<react_native_1.View style={{
|
|
1255
|
-
width:
|
|
1256
|
-
height:
|
|
1257
|
-
borderRadius:
|
|
1903
|
+
width: 12,
|
|
1904
|
+
height: 12,
|
|
1905
|
+
borderRadius: 6,
|
|
1258
1906
|
backgroundColor: levelColor,
|
|
1259
1907
|
}}/>),
|
|
1260
|
-
label
|
|
1261
|
-
description:
|
|
1262
|
-
? 'Informational messages'
|
|
1263
|
-
: level === 'warn'
|
|
1264
|
-
? 'Warning messages'
|
|
1265
|
-
: 'Error messages',
|
|
1908
|
+
label,
|
|
1909
|
+
description: desc,
|
|
1266
1910
|
isLast: level === 'error',
|
|
1267
1911
|
onPress: () => setShowConsoleLevels(prev => ({
|
|
1268
1912
|
...prev,
|
|
@@ -1290,25 +1934,24 @@ const SettingsPanel = () => {
|
|
|
1290
1934
|
|
|
1291
1935
|
<react_native_1.View style={{
|
|
1292
1936
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1293
|
-
borderRadius:
|
|
1937
|
+
borderRadius: 14,
|
|
1294
1938
|
borderWidth: 1,
|
|
1295
1939
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1296
1940
|
padding: 16,
|
|
1297
|
-
marginTop: 12,
|
|
1298
1941
|
}}>
|
|
1299
1942
|
{renderSettingRow({
|
|
1300
1943
|
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
1301
|
-
label: '
|
|
1302
|
-
description:
|
|
1944
|
+
label: t('settings.logs.clearConsoleLogs'),
|
|
1945
|
+
description: t('settings.logs.clearConsoleLogsDescription', { count: consoleLogs.length }),
|
|
1303
1946
|
isLast: true,
|
|
1304
1947
|
onPress: () => {
|
|
1305
1948
|
(0, consoleLogger_1.clearConsoleLogs)();
|
|
1306
|
-
react_native_1.Alert.alert('
|
|
1949
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.logs.consoleLogsCleared'));
|
|
1307
1950
|
},
|
|
1308
1951
|
right: (<react_native_1.View style={{
|
|
1309
|
-
paddingHorizontal:
|
|
1310
|
-
paddingVertical:
|
|
1311
|
-
borderRadius:
|
|
1952
|
+
paddingHorizontal: 12,
|
|
1953
|
+
paddingVertical: 6,
|
|
1954
|
+
borderRadius: 8,
|
|
1312
1955
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1313
1956
|
borderWidth: 1,
|
|
1314
1957
|
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
@@ -1316,9 +1959,10 @@ const SettingsPanel = () => {
|
|
|
1316
1959
|
<react_native_1.Text style={{
|
|
1317
1960
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1318
1961
|
fontSize: 11,
|
|
1962
|
+
lineHeight: 14,
|
|
1319
1963
|
color: AppColors_1.AppColors.errorColor,
|
|
1320
1964
|
}}>
|
|
1321
|
-
|
|
1965
|
+
{t('common.clear')}
|
|
1322
1966
|
</react_native_1.Text>
|
|
1323
1967
|
</react_native_1.View>),
|
|
1324
1968
|
})}
|
|
@@ -1326,47 +1970,52 @@ const SettingsPanel = () => {
|
|
|
1326
1970
|
</react_native_1.ScrollView>);
|
|
1327
1971
|
}
|
|
1328
1972
|
else if (settingsPage === 'analytics') {
|
|
1329
|
-
title = '
|
|
1973
|
+
title = t('settings.analytics.title');
|
|
1330
1974
|
icon = <NetworkIcons_1.AnalyticsIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
1331
|
-
rightInfo =
|
|
1332
|
-
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
|
|
1975
|
+
rightInfo = t('settings.analytics.total', { count: analyticsEvents.length });
|
|
1976
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
1333
1977
|
<react_native_1.View style={{
|
|
1334
1978
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1335
1979
|
padding: 16,
|
|
1336
|
-
borderRadius:
|
|
1980
|
+
borderRadius: 14,
|
|
1337
1981
|
borderWidth: 1,
|
|
1338
1982
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1339
|
-
gap: 4,
|
|
1340
1983
|
}}>
|
|
1341
1984
|
{renderSettingRow({
|
|
1342
1985
|
icon: <NetworkIcons_1.AnalyticsIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
1343
|
-
label: '
|
|
1344
|
-
description:
|
|
1986
|
+
label: t('settings.analytics.maxAnalyticsEvents'),
|
|
1987
|
+
description: t('settings.analytics.maxAnalyticsEventsDescription', { count: analyticsEvents.length }),
|
|
1988
|
+
numericInput: {
|
|
1989
|
+
value: maxAnalyticsEventsLimit,
|
|
1990
|
+
onChange: setMaxAnalyticsEventsLimit,
|
|
1991
|
+
min: 10,
|
|
1992
|
+
max: 5000,
|
|
1993
|
+
placeholder: 'Enter max events (10-5000)',
|
|
1994
|
+
},
|
|
1345
1995
|
isLast: true,
|
|
1346
1996
|
})}
|
|
1347
1997
|
</react_native_1.View>
|
|
1348
1998
|
<react_native_1.View style={{
|
|
1349
1999
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1350
|
-
borderRadius:
|
|
2000
|
+
borderRadius: 14,
|
|
1351
2001
|
borderWidth: 1,
|
|
1352
2002
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1353
2003
|
padding: 16,
|
|
1354
|
-
marginTop: 12,
|
|
1355
2004
|
}}>
|
|
1356
2005
|
{renderSettingRow({
|
|
1357
2006
|
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
1358
|
-
label: '
|
|
1359
|
-
description: '
|
|
2007
|
+
label: t('settings.analytics.clearAnalyticsEvents'),
|
|
2008
|
+
description: t('settings.analytics.clearAnalyticsEventsDescription'),
|
|
1360
2009
|
isLast: true,
|
|
1361
2010
|
onPress: () => {
|
|
1362
2011
|
(0, analyticsLogger_1.clearAnalyticsEvents)();
|
|
1363
2012
|
setSelectedEvent(null);
|
|
1364
|
-
react_native_1.Alert.alert('
|
|
2013
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.analytics.analyticsEventsCleared'));
|
|
1365
2014
|
},
|
|
1366
2015
|
right: (<react_native_1.View style={{
|
|
1367
|
-
paddingHorizontal:
|
|
1368
|
-
paddingVertical:
|
|
1369
|
-
borderRadius:
|
|
2016
|
+
paddingHorizontal: 12,
|
|
2017
|
+
paddingVertical: 6,
|
|
2018
|
+
borderRadius: 8,
|
|
1370
2019
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1371
2020
|
borderWidth: 1,
|
|
1372
2021
|
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
@@ -1374,9 +2023,10 @@ const SettingsPanel = () => {
|
|
|
1374
2023
|
<react_native_1.Text style={{
|
|
1375
2024
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1376
2025
|
fontSize: 11,
|
|
2026
|
+
lineHeight: 14,
|
|
1377
2027
|
color: AppColors_1.AppColors.errorColor,
|
|
1378
2028
|
}}>
|
|
1379
|
-
|
|
2029
|
+
{t('common.clear')}
|
|
1380
2030
|
</react_native_1.Text>
|
|
1381
2031
|
</react_native_1.View>),
|
|
1382
2032
|
})}
|
|
@@ -1384,22 +2034,22 @@ const SettingsPanel = () => {
|
|
|
1384
2034
|
</react_native_1.ScrollView>);
|
|
1385
2035
|
}
|
|
1386
2036
|
else if (settingsPage === 'redux') {
|
|
1387
|
-
title = '
|
|
1388
|
-
icon = <NetworkIcons_1.
|
|
1389
|
-
rightInfo =
|
|
1390
|
-
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
|
|
2037
|
+
title = t('settings.redux.title');
|
|
2038
|
+
icon = <NetworkIcons_1.ReduxIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
2039
|
+
rightInfo = t('settings.redux.reducers', { count: Object.keys(reduxState || {}).length });
|
|
2040
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
1391
2041
|
<react_native_1.View style={{
|
|
1392
2042
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1393
2043
|
padding: 16,
|
|
1394
|
-
borderRadius:
|
|
2044
|
+
borderRadius: 14,
|
|
1395
2045
|
borderWidth: 1,
|
|
1396
2046
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1397
2047
|
gap: 4,
|
|
1398
2048
|
}}>
|
|
1399
2049
|
{renderSettingRow({
|
|
1400
|
-
icon: <NetworkIcons_1.
|
|
1401
|
-
label: '
|
|
1402
|
-
description: '
|
|
2050
|
+
icon: <NetworkIcons_1.ReduxIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
2051
|
+
label: t('settings.redux.autoRefresh'),
|
|
2052
|
+
description: t('settings.redux.autoRefreshDescription'),
|
|
1403
2053
|
onPress: () => setReduxAutoRefreshState(prev => !prev),
|
|
1404
2054
|
right: (<react_native_1.View style={{
|
|
1405
2055
|
width: 22,
|
|
@@ -1421,8 +2071,8 @@ const SettingsPanel = () => {
|
|
|
1421
2071
|
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
1422
2072
|
{renderSettingRow({
|
|
1423
2073
|
icon: <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
1424
|
-
label: '
|
|
1425
|
-
description: '
|
|
2074
|
+
label: t('settings.redux.defaultJsonExpandDepth'),
|
|
2075
|
+
description: t('settings.redux.defaultJsonExpandDepthDescription'),
|
|
1426
2076
|
picker: {
|
|
1427
2077
|
options: [1, 2, 3, 5],
|
|
1428
2078
|
selectedValue: reduxExpandDepth,
|
|
@@ -1434,27 +2084,26 @@ const SettingsPanel = () => {
|
|
|
1434
2084
|
|
|
1435
2085
|
<react_native_1.View style={{
|
|
1436
2086
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1437
|
-
borderRadius:
|
|
2087
|
+
borderRadius: 14,
|
|
1438
2088
|
borderWidth: 1,
|
|
1439
2089
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1440
2090
|
padding: 16,
|
|
1441
|
-
marginTop: 12,
|
|
1442
2091
|
}}>
|
|
1443
2092
|
{renderSettingRow({
|
|
1444
2093
|
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
1445
|
-
label: '
|
|
2094
|
+
label: t('settings.redux.clearReduxState'),
|
|
1446
2095
|
description: reduxState
|
|
1447
|
-
? '
|
|
1448
|
-
: '
|
|
2096
|
+
? t('settings.redux.clearReduxStateDescription')
|
|
2097
|
+
: t('settings.redux.clearReduxStateEmpty'),
|
|
1449
2098
|
isLast: true,
|
|
1450
2099
|
onPress: () => {
|
|
1451
2100
|
setReduxState(null);
|
|
1452
|
-
react_native_1.Alert.alert('
|
|
2101
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.redux.reduxStateCleared'));
|
|
1453
2102
|
},
|
|
1454
2103
|
right: (<react_native_1.View style={{
|
|
1455
|
-
paddingHorizontal:
|
|
1456
|
-
paddingVertical:
|
|
1457
|
-
borderRadius:
|
|
2104
|
+
paddingHorizontal: 12,
|
|
2105
|
+
paddingVertical: 6,
|
|
2106
|
+
borderRadius: 8,
|
|
1458
2107
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1459
2108
|
borderWidth: 1,
|
|
1460
2109
|
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
@@ -1462,9 +2111,10 @@ const SettingsPanel = () => {
|
|
|
1462
2111
|
<react_native_1.Text style={{
|
|
1463
2112
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1464
2113
|
fontSize: 11,
|
|
2114
|
+
lineHeight: 14,
|
|
1465
2115
|
color: AppColors_1.AppColors.errorColor,
|
|
1466
2116
|
}}>
|
|
1467
|
-
|
|
2117
|
+
{t('common.clear')}
|
|
1468
2118
|
</react_native_1.Text>
|
|
1469
2119
|
</react_native_1.View>),
|
|
1470
2120
|
})}
|
|
@@ -1472,33 +2122,35 @@ const SettingsPanel = () => {
|
|
|
1472
2122
|
</react_native_1.ScrollView>);
|
|
1473
2123
|
}
|
|
1474
2124
|
else if (settingsPage === 'crash') {
|
|
1475
|
-
title = '
|
|
2125
|
+
title = t('settings.crash.title');
|
|
1476
2126
|
icon = <NetworkIcons_1.CrashIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
1477
2127
|
rightInfo = `Total: ${crashRecords?.length || 0}`;
|
|
1478
|
-
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
|
|
2128
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
1479
2129
|
<react_native_1.View style={{
|
|
1480
2130
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1481
2131
|
padding: 16,
|
|
1482
|
-
borderRadius:
|
|
2132
|
+
borderRadius: 14,
|
|
1483
2133
|
borderWidth: 1,
|
|
1484
2134
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1485
2135
|
gap: 4,
|
|
1486
2136
|
}}>
|
|
1487
2137
|
{renderSettingRow({
|
|
1488
2138
|
icon: <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
1489
|
-
label: '
|
|
1490
|
-
description: '
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
2139
|
+
label: t('settings.crash.maxCrashLogs'),
|
|
2140
|
+
description: t('settings.crash.maxCrashLogsDesc'),
|
|
2141
|
+
numericInput: {
|
|
2142
|
+
value: maxCrashLogs,
|
|
2143
|
+
onChange: setMaxCrashLogs,
|
|
2144
|
+
min: 5,
|
|
2145
|
+
max: 500,
|
|
2146
|
+
placeholder: 'Enter max crashes (5-500)',
|
|
1495
2147
|
},
|
|
1496
2148
|
})}
|
|
1497
2149
|
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
1498
2150
|
{renderSettingRow({
|
|
1499
2151
|
icon: <NetworkIcons_1.ShieldAlertIcon color={AppColors_1.AppColors.greenColor} size={16}/>,
|
|
1500
|
-
label: '
|
|
1501
|
-
description: '
|
|
2152
|
+
label: t('settings.crash.globalGuard'),
|
|
2153
|
+
description: t('settings.crash.globalGuardDesc'),
|
|
1502
2154
|
isLast: true,
|
|
1503
2155
|
right: (<react_native_1.View style={{
|
|
1504
2156
|
paddingHorizontal: 8,
|
|
@@ -1509,9 +2161,10 @@ const SettingsPanel = () => {
|
|
|
1509
2161
|
<react_native_1.Text style={{
|
|
1510
2162
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1511
2163
|
fontSize: 10,
|
|
2164
|
+
lineHeight: 13,
|
|
1512
2165
|
color: AppColors_1.AppColors.greenColor,
|
|
1513
2166
|
}}>
|
|
1514
|
-
|
|
2167
|
+
{t('settings.protectedBadge')}
|
|
1515
2168
|
</react_native_1.Text>
|
|
1516
2169
|
</react_native_1.View>),
|
|
1517
2170
|
})}
|
|
@@ -1519,25 +2172,190 @@ const SettingsPanel = () => {
|
|
|
1519
2172
|
|
|
1520
2173
|
<react_native_1.View style={{
|
|
1521
2174
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1522
|
-
borderRadius:
|
|
2175
|
+
borderRadius: 14,
|
|
1523
2176
|
borderWidth: 1,
|
|
1524
2177
|
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1525
2178
|
padding: 16,
|
|
1526
|
-
marginTop: 12,
|
|
1527
2179
|
}}>
|
|
1528
2180
|
{renderSettingRow({
|
|
1529
2181
|
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
1530
|
-
label: '
|
|
1531
|
-
description:
|
|
2182
|
+
label: t('settings.crash.clearHistory'),
|
|
2183
|
+
description: t('settings.crash.clearHistoryDesc', { count: crashRecords?.length || 0 }),
|
|
1532
2184
|
isLast: true,
|
|
1533
2185
|
onPress: () => {
|
|
1534
2186
|
(0, crashHandler_1.clearCrashRecords)();
|
|
1535
|
-
react_native_1.Alert.alert('
|
|
2187
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.crash.historyCleared'));
|
|
2188
|
+
},
|
|
2189
|
+
right: (<react_native_1.View style={{
|
|
2190
|
+
paddingHorizontal: 12,
|
|
2191
|
+
paddingVertical: 6,
|
|
2192
|
+
borderRadius: 8,
|
|
2193
|
+
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
2194
|
+
borderWidth: 1,
|
|
2195
|
+
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
2196
|
+
}}>
|
|
2197
|
+
<react_native_1.Text style={{
|
|
2198
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
2199
|
+
fontSize: 11,
|
|
2200
|
+
lineHeight: 14,
|
|
2201
|
+
color: AppColors_1.AppColors.errorColor,
|
|
2202
|
+
}}>
|
|
2203
|
+
{t('common.clear')}
|
|
2204
|
+
</react_native_1.Text>
|
|
2205
|
+
</react_native_1.View>),
|
|
2206
|
+
})}
|
|
2207
|
+
</react_native_1.View>
|
|
2208
|
+
</react_native_1.ScrollView>);
|
|
2209
|
+
}
|
|
2210
|
+
else if (settingsPage === 'bundle') {
|
|
2211
|
+
title = t('settings.bundle.title');
|
|
2212
|
+
icon = <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
2213
|
+
rightInfo = 'Metro';
|
|
2214
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
2215
|
+
<react_native_1.View style={{
|
|
2216
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
2217
|
+
padding: 16,
|
|
2218
|
+
borderRadius: 14,
|
|
2219
|
+
borderWidth: 1,
|
|
2220
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
2221
|
+
gap: 8,
|
|
2222
|
+
}}>
|
|
2223
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 10 }}>
|
|
2224
|
+
<react_native_1.View style={{
|
|
2225
|
+
width: 36,
|
|
2226
|
+
height: 36,
|
|
2227
|
+
borderRadius: 10,
|
|
2228
|
+
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
2229
|
+
alignItems: 'center',
|
|
2230
|
+
justifyContent: 'center',
|
|
2231
|
+
}}>
|
|
2232
|
+
<NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.purple} size={16}/>
|
|
2233
|
+
</react_native_1.View>
|
|
2234
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
2235
|
+
<react_native_1.Text style={{
|
|
2236
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
2237
|
+
fontSize: 14,
|
|
2238
|
+
lineHeight: 18,
|
|
2239
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
2240
|
+
}}>
|
|
2241
|
+
{t('settings.bundle.sourceBundler')}
|
|
2242
|
+
</react_native_1.Text>
|
|
2243
|
+
<react_native_1.Text style={{
|
|
2244
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
2245
|
+
fontSize: 11,
|
|
2246
|
+
lineHeight: 15,
|
|
2247
|
+
color: AppColors_1.AppColors.grayText,
|
|
2248
|
+
marginTop: 1,
|
|
2249
|
+
}}>
|
|
2250
|
+
{t('settings.bundle.sourceBundlerDesc')}
|
|
2251
|
+
</react_native_1.Text>
|
|
2252
|
+
</react_native_1.View>
|
|
2253
|
+
</react_native_1.View>
|
|
2254
|
+
</react_native_1.View>
|
|
2255
|
+
|
|
2256
|
+
<react_native_1.View style={{
|
|
2257
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
2258
|
+
borderRadius: 14,
|
|
2259
|
+
borderWidth: 1,
|
|
2260
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
2261
|
+
padding: 16,
|
|
2262
|
+
}}>
|
|
2263
|
+
{renderSettingRow({
|
|
2264
|
+
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
2265
|
+
label: t('settings.bundle.clearCache'),
|
|
2266
|
+
description: t('settings.bundle.clearCacheDesc'),
|
|
2267
|
+
isLast: true,
|
|
2268
|
+
onPress: () => {
|
|
2269
|
+
(0, bundleAnalyzer_1.clearCachedBundleAnalysis)();
|
|
2270
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.bundle.cacheCleared'));
|
|
2271
|
+
},
|
|
2272
|
+
right: (<react_native_1.View style={{
|
|
2273
|
+
paddingHorizontal: 12,
|
|
2274
|
+
paddingVertical: 6,
|
|
2275
|
+
borderRadius: 8,
|
|
2276
|
+
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
2277
|
+
borderWidth: 1,
|
|
2278
|
+
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
2279
|
+
}}>
|
|
2280
|
+
<react_native_1.Text style={{
|
|
2281
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
2282
|
+
fontSize: 11,
|
|
2283
|
+
lineHeight: 14,
|
|
2284
|
+
color: AppColors_1.AppColors.errorColor,
|
|
2285
|
+
}}>
|
|
2286
|
+
{t('common.clear')}
|
|
2287
|
+
</react_native_1.Text>
|
|
2288
|
+
</react_native_1.View>),
|
|
2289
|
+
})}
|
|
2290
|
+
</react_native_1.View>
|
|
2291
|
+
</react_native_1.ScrollView>);
|
|
2292
|
+
}
|
|
2293
|
+
else if (settingsPage === 'performance') {
|
|
2294
|
+
title = t('settings.performance.title');
|
|
2295
|
+
icon = <NetworkIcons_1.PerformanceIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
2296
|
+
rightInfo = '60 FPS Target';
|
|
2297
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
|
|
2298
|
+
<react_native_1.View style={{
|
|
2299
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
2300
|
+
padding: 16,
|
|
2301
|
+
borderRadius: 14,
|
|
2302
|
+
borderWidth: 1,
|
|
2303
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
2304
|
+
gap: 8,
|
|
2305
|
+
}}>
|
|
2306
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 10 }}>
|
|
2307
|
+
<react_native_1.View style={{
|
|
2308
|
+
width: 36,
|
|
2309
|
+
height: 36,
|
|
2310
|
+
borderRadius: 10,
|
|
2311
|
+
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
2312
|
+
alignItems: 'center',
|
|
2313
|
+
justifyContent: 'center',
|
|
2314
|
+
}}>
|
|
2315
|
+
<NetworkIcons_1.PerformanceIcon color={AppColors_1.AppColors.purple} size={16}/>
|
|
2316
|
+
</react_native_1.View>
|
|
2317
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
2318
|
+
<react_native_1.Text style={{
|
|
2319
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
2320
|
+
fontSize: 14,
|
|
2321
|
+
lineHeight: 18,
|
|
2322
|
+
color: AppColors_1.AppColors.primaryBlack,
|
|
2323
|
+
}}>
|
|
2324
|
+
{t('settings.performance.frameMeasurement')}
|
|
2325
|
+
</react_native_1.Text>
|
|
2326
|
+
<react_native_1.Text style={{
|
|
2327
|
+
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
2328
|
+
fontSize: 11,
|
|
2329
|
+
lineHeight: 15,
|
|
2330
|
+
color: AppColors_1.AppColors.grayText,
|
|
2331
|
+
marginTop: 1,
|
|
2332
|
+
}}>
|
|
2333
|
+
{t('settings.performance.frameMeasurementDesc')}
|
|
2334
|
+
</react_native_1.Text>
|
|
2335
|
+
</react_native_1.View>
|
|
2336
|
+
</react_native_1.View>
|
|
2337
|
+
</react_native_1.View>
|
|
2338
|
+
|
|
2339
|
+
<react_native_1.View style={{
|
|
2340
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
2341
|
+
borderRadius: 14,
|
|
2342
|
+
borderWidth: 1,
|
|
2343
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
2344
|
+
padding: 16,
|
|
2345
|
+
}}>
|
|
2346
|
+
{renderSettingRow({
|
|
2347
|
+
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
2348
|
+
label: t('settings.performance.clearEvents'),
|
|
2349
|
+
description: t('settings.performance.clearEventsDesc'),
|
|
2350
|
+
isLast: true,
|
|
2351
|
+
onPress: () => {
|
|
2352
|
+
(0, performanceTracker_1.clearPerformanceEvents)();
|
|
2353
|
+
react_native_1.Alert.alert(t('common.success'), t('settings.performance.eventsCleared'));
|
|
1536
2354
|
},
|
|
1537
2355
|
right: (<react_native_1.View style={{
|
|
1538
|
-
paddingHorizontal:
|
|
1539
|
-
paddingVertical:
|
|
1540
|
-
borderRadius:
|
|
2356
|
+
paddingHorizontal: 12,
|
|
2357
|
+
paddingVertical: 6,
|
|
2358
|
+
borderRadius: 8,
|
|
1541
2359
|
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1542
2360
|
borderWidth: 1,
|
|
1543
2361
|
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
@@ -1545,29 +2363,33 @@ const SettingsPanel = () => {
|
|
|
1545
2363
|
<react_native_1.Text style={{
|
|
1546
2364
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1547
2365
|
fontSize: 11,
|
|
2366
|
+
lineHeight: 14,
|
|
1548
2367
|
color: AppColors_1.AppColors.errorColor,
|
|
1549
2368
|
}}>
|
|
1550
|
-
|
|
2369
|
+
{t('common.clear')}
|
|
1551
2370
|
</react_native_1.Text>
|
|
1552
2371
|
</react_native_1.View>),
|
|
1553
2372
|
})}
|
|
1554
2373
|
</react_native_1.View>
|
|
1555
2374
|
</react_native_1.ScrollView>);
|
|
1556
2375
|
}
|
|
1557
|
-
return (<react_native_1.View style={{
|
|
2376
|
+
return (<react_native_1.View style={{
|
|
2377
|
+
flex: 1,
|
|
2378
|
+
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
2379
|
+
}}>
|
|
1558
2380
|
<react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.purple, AppColors_1.AppColors.brandPurple]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }} style={styles_1.default.headerGradient}>
|
|
1559
2381
|
<react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
|
|
1560
2382
|
<react_native_1.View style={[styles_1.default.header, { paddingHorizontal: 16, gap: 12 }]}>
|
|
1561
|
-
|
|
2383
|
+
<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel={t('settings.back')} onPress={goBackToMain} hitSlop={12} style={{
|
|
1562
2384
|
padding: 8,
|
|
1563
2385
|
borderRadius: 10,
|
|
1564
2386
|
backgroundColor: `${AppColors_1.AppColors.white}26`,
|
|
1565
2387
|
borderWidth: 1,
|
|
1566
2388
|
borderColor: `${AppColors_1.AppColors.white}14`,
|
|
1567
2389
|
}}>
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
2390
|
+
<NetworkIcons_1.WhiteBackNavigation color={AppColors_1.AppColors.white} size={16}/>
|
|
2391
|
+
</TouchableScale_1.default>
|
|
2392
|
+
{icon && (<react_native_1.View style={{
|
|
1571
2393
|
width: 30,
|
|
1572
2394
|
height: 30,
|
|
1573
2395
|
borderRadius: 8,
|
|
@@ -1575,18 +2397,19 @@ const SettingsPanel = () => {
|
|
|
1575
2397
|
alignItems: 'center',
|
|
1576
2398
|
justifyContent: 'center',
|
|
1577
2399
|
}}>
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
2400
|
+
{icon}
|
|
2401
|
+
</react_native_1.View>)}
|
|
2402
|
+
<react_native_1.View style={{ flex: 1 }}>
|
|
2403
|
+
<react_native_1.Text style={{
|
|
1582
2404
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1583
2405
|
fontSize: 17,
|
|
2406
|
+
lineHeight: 22,
|
|
1584
2407
|
color: AppColors_1.AppColors.white,
|
|
1585
2408
|
}}>
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
2409
|
+
{title}
|
|
2410
|
+
</react_native_1.Text>
|
|
2411
|
+
</react_native_1.View>
|
|
2412
|
+
{rightInfo ? (<react_native_1.View style={{
|
|
1590
2413
|
backgroundColor: `${AppColors_1.AppColors.white}26`,
|
|
1591
2414
|
paddingHorizontal: 8,
|
|
1592
2415
|
paddingVertical: 4,
|
|
@@ -1594,17 +2417,18 @@ const SettingsPanel = () => {
|
|
|
1594
2417
|
borderWidth: 1,
|
|
1595
2418
|
borderColor: `${AppColors_1.AppColors.white}1A`,
|
|
1596
2419
|
}}>
|
|
1597
|
-
|
|
2420
|
+
<react_native_1.Text style={{
|
|
1598
2421
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1599
2422
|
fontSize: 11,
|
|
2423
|
+
lineHeight: 14,
|
|
1600
2424
|
color: AppColors_1.AppColors.white,
|
|
1601
2425
|
}}>
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
2426
|
+
{rightInfo}
|
|
2427
|
+
</react_native_1.Text>
|
|
2428
|
+
</react_native_1.View>) : null}
|
|
2429
|
+
</react_native_1.View>
|
|
1605
2430
|
</react_native_1.View>
|
|
1606
|
-
</
|
|
1607
|
-
</react_native_linear_gradient_1.default>
|
|
2431
|
+
</react_native_linear_gradient_1.default>
|
|
1608
2432
|
{content}
|
|
1609
2433
|
</react_native_1.View>);
|
|
1610
2434
|
};
|