react-native-inapp-inspector 1.1.25 → 1.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +36 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.java +114 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.java +28 -0
- package/dist/commonjs/components/ErrorBoundary.d.ts +1 -1
- package/dist/commonjs/components/ErrorBoundary.js +9 -145
- package/dist/commonjs/components/Inspector/CrashDetail.d.ts +3 -0
- package/dist/commonjs/components/Inspector/CrashDetail.js +796 -0
- package/dist/commonjs/components/Inspector/CrashFilterModal.d.ts +20 -0
- package/dist/commonjs/components/Inspector/CrashFilterModal.js +597 -0
- package/dist/commonjs/components/Inspector/CrashTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/CrashTab.js +727 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +52 -23
- package/dist/commonjs/components/Inspector/LogDetail.js +4 -3
- package/dist/commonjs/components/Inspector/MainScreen.js +12 -3
- package/dist/commonjs/components/Inspector/SettingsPanel.js +90 -1
- package/dist/commonjs/components/Inspector/TabBar.js +15 -3
- package/dist/commonjs/components/NetworkIcons.d.ts +11 -0
- package/dist/commonjs/components/NetworkIcons.js +96 -1
- package/dist/commonjs/components/SegmentedTabs.js +2 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/analyticsLogger.js +70 -44
- package/dist/commonjs/customHooks/consoleLogger.d.ts +1 -0
- package/dist/commonjs/customHooks/consoleLogger.js +70 -6
- package/dist/commonjs/customHooks/crashHandler.d.ts +64 -0
- package/dist/commonjs/customHooks/crashHandler.js +681 -0
- package/dist/commonjs/customHooks/networkLogger.js +64 -48
- package/dist/commonjs/helpers/gaAnalyticsRegistry.js +1 -1
- package/dist/commonjs/i18n/locales/en.json +131 -0
- package/dist/commonjs/index.d.ts +3 -1
- package/dist/commonjs/index.js +95 -1
- package/dist/commonjs/types/enums.d.ts +41 -0
- package/dist/commonjs/types/enums.js +37 -1
- package/dist/commonjs/types/interfaces.d.ts +51 -1
- package/dist/esm/components/ErrorBoundary.d.ts +1 -1
- package/dist/esm/components/ErrorBoundary.js +10 -113
- package/dist/esm/components/Inspector/CrashDetail.d.ts +3 -0
- package/dist/esm/components/Inspector/CrashDetail.js +758 -0
- package/dist/esm/components/Inspector/CrashFilterModal.d.ts +20 -0
- package/dist/esm/components/Inspector/CrashFilterModal.js +557 -0
- package/dist/esm/components/Inspector/CrashTab.d.ts +3 -0
- package/dist/esm/components/Inspector/CrashTab.js +689 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +52 -23
- package/dist/esm/components/Inspector/LogDetail.js +4 -3
- package/dist/esm/components/Inspector/MainScreen.js +12 -3
- package/dist/esm/components/Inspector/SettingsPanel.js +91 -2
- package/dist/esm/components/Inspector/TabBar.js +16 -4
- package/dist/esm/components/NetworkIcons.d.ts +11 -0
- package/dist/esm/components/NetworkIcons.js +83 -0
- package/dist/esm/components/SegmentedTabs.js +2 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/analyticsLogger.js +70 -44
- package/dist/esm/customHooks/consoleLogger.d.ts +1 -0
- package/dist/esm/customHooks/consoleLogger.js +68 -5
- package/dist/esm/customHooks/crashHandler.d.ts +64 -0
- package/dist/esm/customHooks/crashHandler.js +659 -0
- package/dist/esm/customHooks/networkLogger.js +64 -48
- package/dist/esm/helpers/gaAnalyticsRegistry.js +1 -1
- package/dist/esm/i18n/locales/en.json +131 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +73 -1
- package/dist/esm/types/enums.d.ts +41 -0
- package/dist/esm/types/enums.js +36 -0
- package/dist/esm/types/interfaces.d.ts +51 -1
- package/ios/NetworkInspectorModule.h +6 -0
- package/ios/NetworkInspectorModule.m +125 -0
- package/package.json +5 -2
- package/react-native-inapp-inspector.podspec +18 -0
|
@@ -50,7 +50,7 @@ const constants_2 = require("../../constants");
|
|
|
50
50
|
const helpers_1 = require("../../helpers");
|
|
51
51
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
52
52
|
const InspectorHeader = react_1.default.memo(() => {
|
|
53
|
-
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, setSettingsPage, closeModal, detailTitle, activeTab, environment, } = (0, InspectorContext_1.useInspector)();
|
|
53
|
+
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, setSettingsPage, closeModal, detailTitle, activeTab, environment, selectedCrash, setSelectedCrash, } = (0, InspectorContext_1.useInspector)();
|
|
54
54
|
const envConfig = (0, react_1.useMemo)(() => {
|
|
55
55
|
const rawEnv = (environment || (__DEV__ ? 'DEV' : 'PROD')).trim();
|
|
56
56
|
const clean = rawEnv.toUpperCase();
|
|
@@ -89,7 +89,8 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
89
89
|
const isDetailView = (activeTab === 'apis' && selected != null) ||
|
|
90
90
|
(activeTab === 'analytics' && selectedEvent != null) ||
|
|
91
91
|
(activeTab === 'logs' && selectedLog != null) ||
|
|
92
|
-
(activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null))
|
|
92
|
+
(activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null)) ||
|
|
93
|
+
(activeTab === 'crash' && selectedCrash != null);
|
|
93
94
|
const isAnySelected = isDetailView;
|
|
94
95
|
const headerTopPadding = react_native_1.Platform.OS === 'ios' && modalHeightPercent >= 95 ? 44 : 0;
|
|
95
96
|
return (<react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.purple, AppColors_1.AppColors.brandPurple]} style={styles_1.default.headerGradient}>
|
|
@@ -100,8 +101,9 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
100
101
|
{
|
|
101
102
|
flexDirection: 'row',
|
|
102
103
|
alignItems: 'center',
|
|
103
|
-
gap:
|
|
104
|
-
flex: !isDetailView ?
|
|
104
|
+
gap: 12,
|
|
105
|
+
flex: !isDetailView ? 1 : 0,
|
|
106
|
+
minWidth: 0,
|
|
105
107
|
},
|
|
106
108
|
]}>
|
|
107
109
|
<TouchableScale_1.default onPress={() => {
|
|
@@ -111,6 +113,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
111
113
|
setSelectedLog(null);
|
|
112
114
|
setSelectedReduxSlice(null);
|
|
113
115
|
setSelectedReduxAction(null);
|
|
116
|
+
setSelectedCrash(null);
|
|
114
117
|
});
|
|
115
118
|
}} hitSlop={15} style={[
|
|
116
119
|
{
|
|
@@ -524,18 +527,58 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
524
527
|
{selectedReduxAction.timestamp || 'Dispatched'}
|
|
525
528
|
</react_native_1.Text>
|
|
526
529
|
</react_native_1.View>
|
|
530
|
+
</react_native_1.View>) : activeTab === 'crash' && selectedCrash != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
|
|
531
|
+
<react_native_1.View style={styles_1.default.headerDetailRow}>
|
|
532
|
+
<react_native_1.View style={[
|
|
533
|
+
styles_1.default.headerMethodBadge,
|
|
534
|
+
{
|
|
535
|
+
backgroundColor: selectedCrash.isFatal
|
|
536
|
+
? '#DC2626'
|
|
537
|
+
: '#D97706',
|
|
538
|
+
},
|
|
539
|
+
]}>
|
|
540
|
+
<react_native_1.Text style={styles_1.default.headerMethodText}>
|
|
541
|
+
{selectedCrash.isFatal ? 'FATAL' : selectedCrash.type.toUpperCase()}
|
|
542
|
+
</react_native_1.Text>
|
|
543
|
+
</react_native_1.View>
|
|
544
|
+
<react_native_1.Text style={styles_1.default.headerDetailTitle} numberOfLines={1} ellipsizeMode="middle">
|
|
545
|
+
{selectedCrash.name || selectedCrash.message}
|
|
546
|
+
</react_native_1.Text>
|
|
547
|
+
</react_native_1.View>
|
|
548
|
+
<react_native_1.View style={styles_1.default.headerDetailSubRow}>
|
|
549
|
+
<react_native_1.View style={[
|
|
550
|
+
styles_1.default.headerStatusDot,
|
|
551
|
+
{
|
|
552
|
+
backgroundColor: selectedCrash.isFatal
|
|
553
|
+
? '#DC2626'
|
|
554
|
+
: '#F59E0B',
|
|
555
|
+
},
|
|
556
|
+
]}/>
|
|
557
|
+
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
558
|
+
{selectedCrash.timeStr || new Date(selectedCrash.timestamp).toLocaleTimeString()}
|
|
559
|
+
</react_native_1.Text>
|
|
560
|
+
{selectedCrash.deviceInfo?.platform && (<>
|
|
561
|
+
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}>•</react_native_1.Text>
|
|
562
|
+
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
563
|
+
{selectedCrash.deviceInfo.platform.toUpperCase()}
|
|
564
|
+
</react_native_1.Text>
|
|
565
|
+
</>)}
|
|
566
|
+
</react_native_1.View>
|
|
527
567
|
</react_native_1.View>) : null}
|
|
528
568
|
</react_native_1.View>)}
|
|
529
569
|
|
|
530
570
|
<react_native_1.View style={[
|
|
531
571
|
styles_1.default.headerRight,
|
|
532
|
-
|
|
572
|
+
{
|
|
573
|
+
flexDirection: 'row',
|
|
574
|
+
alignItems: 'center',
|
|
575
|
+
justifyContent: 'flex-end',
|
|
533
576
|
flexShrink: 0,
|
|
534
|
-
|
|
577
|
+
gap: 8,
|
|
535
578
|
},
|
|
536
579
|
]}>
|
|
537
580
|
{!isAnySelected && (<TouchableScale_1.default onPress={() => {
|
|
538
|
-
react_native_1.Alert.alert('Clear Everything', 'This clears all tabs — APIs, Logs, Analytics and
|
|
581
|
+
react_native_1.Alert.alert('Clear Everything', 'This clears all tabs — APIs, Logs, Analytics, Redux timeline and Crash history. Continue?', [
|
|
539
582
|
{ text: 'Cancel', style: 'cancel' },
|
|
540
583
|
{
|
|
541
584
|
text: 'Clear All',
|
|
@@ -543,13 +586,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
543
586
|
style: 'destructive',
|
|
544
587
|
},
|
|
545
588
|
]);
|
|
546
|
-
}} hitSlop={15} style={
|
|
547
|
-
styles_1.default.closeButtonSquare,
|
|
548
|
-
{
|
|
549
|
-
marginRight: 8,
|
|
550
|
-
backgroundColor: `${AppColors_1.AppColors.white}26`,
|
|
551
|
-
},
|
|
552
|
-
]}>
|
|
589
|
+
}} hitSlop={15} style={styles_1.default.closeButtonSquare}>
|
|
553
590
|
<react_native_1.Animated.View style={{
|
|
554
591
|
transform: [
|
|
555
592
|
{
|
|
@@ -570,15 +607,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
570
607
|
</react_native_1.Animated.View>
|
|
571
608
|
</TouchableScale_1.default>)}
|
|
572
609
|
|
|
573
|
-
{
|
|
574
|
-
selectedEvent == null &&
|
|
575
|
-
selectedLog == null && (<TouchableScale_1.default onPress={() => setSettingsPage('main')} hitSlop={15} style={[
|
|
576
|
-
styles_1.default.closeButtonSquare,
|
|
577
|
-
{
|
|
578
|
-
marginRight: 8,
|
|
579
|
-
backgroundColor: `${AppColors_1.AppColors.white}26`,
|
|
580
|
-
},
|
|
581
|
-
]}>
|
|
610
|
+
{!isAnySelected && (<TouchableScale_1.default onPress={() => setSettingsPage('main')} hitSlop={15} style={styles_1.default.closeButtonSquare}>
|
|
582
611
|
<NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.white} size={16}/>
|
|
583
612
|
</TouchableScale_1.default>)}
|
|
584
613
|
|
|
@@ -300,7 +300,8 @@ const LogDetail = react_1.default.memo(() => {
|
|
|
300
300
|
fontSize: 13,
|
|
301
301
|
color: AppColors_1.AppColors.primaryBlack,
|
|
302
302
|
lineHeight: 18,
|
|
303
|
-
|
|
303
|
+
flexShrink: 1,
|
|
304
|
+
}}>
|
|
304
305
|
{originFrame?.functionName && originFrame.functionName !== '<anonymous>'
|
|
305
306
|
? `${originFrame.functionName}()`
|
|
306
307
|
: originFrame?.fileName || t('console.consoleLog')}
|
|
@@ -315,11 +316,11 @@ const LogDetail = react_1.default.memo(() => {
|
|
|
315
316
|
paddingVertical: 2,
|
|
316
317
|
},
|
|
317
318
|
]}>
|
|
318
|
-
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 3 }}>
|
|
319
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 3, flexWrap: 'wrap', flexShrink: 1 }}>
|
|
319
320
|
<NetworkIcons_1.DocIcon color={AppColors_1.AppColors.brandPurple} size={10}/>
|
|
320
321
|
<react_native_1.Text style={[
|
|
321
322
|
styles_1.default.metaChipText,
|
|
322
|
-
{ color: AppColors_1.AppColors.brandPurple, fontSize: 10, fontFamily: AppFonts_1.AppFonts.interBold },
|
|
323
|
+
{ color: AppColors_1.AppColors.brandPurple, fontSize: 10, fontFamily: AppFonts_1.AppFonts.interBold, flexShrink: 1 },
|
|
323
324
|
]}>
|
|
324
325
|
{originFrame.fileName}
|
|
325
326
|
{originFrame.lineNumber ? `:${originFrame.lineNumber}` : ''}
|
|
@@ -53,12 +53,14 @@ const ReduxTab_1 = __importDefault(require("./ReduxTab"));
|
|
|
53
53
|
const ReduxDetail_1 = __importDefault(require("./ReduxDetail"));
|
|
54
54
|
const BundleTab_1 = __importDefault(require("./BundleTab"));
|
|
55
55
|
const PerformanceTab_1 = __importDefault(require("./PerformanceTab"));
|
|
56
|
+
const CrashTab_1 = __importDefault(require("./CrashTab"));
|
|
57
|
+
const CrashDetail_1 = __importDefault(require("./CrashDetail"));
|
|
56
58
|
const SettingsPanel_1 = __importDefault(require("./SettingsPanel"));
|
|
57
59
|
const styles_1 = __importDefault(require("../../styles"));
|
|
58
60
|
const AppColors_1 = require("../../styles/AppColors");
|
|
59
61
|
const NavigationTracker_1 = __importDefault(require("./NavigationTracker"));
|
|
60
62
|
const MainScreen = () => {
|
|
61
|
-
const { visible, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, settingsPage, activeTab, isReady, isEnabled, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
63
|
+
const { visible, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, selectedCrash, settingsPage, activeTab, isReady, isEnabled, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
62
64
|
// Lazy-mount each tab on first visit and cache it in memory for 0ms instantaneous switching
|
|
63
65
|
const [mountedTabs, setMountedTabs] = (0, react_1.useState)({
|
|
64
66
|
[activeTab]: true,
|
|
@@ -73,7 +75,8 @@ const MainScreen = () => {
|
|
|
73
75
|
const isDetailActive = (activeTab === 'apis' && selected != null) ||
|
|
74
76
|
(activeTab === 'analytics' && selectedEvent != null) ||
|
|
75
77
|
(activeTab === 'logs' && selectedLog != null) ||
|
|
76
|
-
(activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null))
|
|
78
|
+
(activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null)) ||
|
|
79
|
+
(activeTab === 'crash' && selectedCrash != null);
|
|
77
80
|
return (<>
|
|
78
81
|
{(react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') && isEnabled && <FabLauncher_1.default />}
|
|
79
82
|
<react_native_1.Modal visible={visible} animationType={modalAnimationType} transparent>
|
|
@@ -91,7 +94,7 @@ const MainScreen = () => {
|
|
|
91
94
|
{/* ─── Horizontal Scrollable Tab Bar inside Content ─── */}
|
|
92
95
|
{!isDetailActive && settingsPage === null ? (<TabBar_1.default />) : null}
|
|
93
96
|
|
|
94
|
-
{isReady ? (isDetailActive ? (activeTab === 'apis' && selected != null ? (<NetworkDetail_1.default />) : activeTab === 'analytics' && selectedEvent != null ? (<AnalyticsDetail_1.default event={selectedEvent}/>) : activeTab === 'logs' && selectedLog != null ? (<LogDetail_1.default />) : activeTab === 'redux' ? (<ReduxDetail_1.default />) : null) : (<>
|
|
97
|
+
{isReady ? (isDetailActive ? (activeTab === 'apis' && selected != null ? (<NetworkDetail_1.default />) : activeTab === 'analytics' && selectedEvent != null ? (<AnalyticsDetail_1.default event={selectedEvent}/>) : activeTab === 'logs' && selectedLog != null ? (<LogDetail_1.default />) : activeTab === 'redux' ? (<ReduxDetail_1.default />) : activeTab === 'crash' && selectedCrash != null ? (<CrashDetail_1.default />) : null) : (<>
|
|
95
98
|
<react_native_1.View style={{
|
|
96
99
|
flex: 1,
|
|
97
100
|
display: activeTab === 'apis' ? 'flex' : 'none',
|
|
@@ -128,6 +131,12 @@ const MainScreen = () => {
|
|
|
128
131
|
}}>
|
|
129
132
|
{mountedTabs.performance && <PerformanceTab_1.default />}
|
|
130
133
|
</react_native_1.View>
|
|
134
|
+
<react_native_1.View style={{
|
|
135
|
+
flex: 1,
|
|
136
|
+
display: activeTab === 'crash' ? 'flex' : 'none',
|
|
137
|
+
}}>
|
|
138
|
+
{mountedTabs.crash && <CrashTab_1.default />}
|
|
139
|
+
</react_native_1.View>
|
|
131
140
|
</>)) : (<react_native_1.View style={styles_1.default.empty}>
|
|
132
141
|
<react_native_1.ActivityIndicator size="large" color={AppColors_1.AppColors.purple}/>
|
|
133
142
|
<react_native_1.Text style={[styles_1.default.emptySub, { marginTop: 12 }]}>
|
|
@@ -50,9 +50,10 @@ const settingsStore_1 = require("../../helpers/settingsStore");
|
|
|
50
50
|
const networkLogger_1 = require("../../customHooks/networkLogger");
|
|
51
51
|
const consoleLogger_1 = require("../../customHooks/consoleLogger");
|
|
52
52
|
const analyticsLogger_1 = require("../../customHooks/analyticsLogger");
|
|
53
|
+
const crashHandler_1 = require("../../customHooks/crashHandler");
|
|
53
54
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
54
55
|
const SettingsPanel = () => {
|
|
55
|
-
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, } = (0, InspectorContext_1.useInspector)();
|
|
56
|
+
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)();
|
|
56
57
|
const isPersistent = (0, settingsStore_1.isPersistentStorageAvailable)();
|
|
57
58
|
const headerTopPadding = react_native_1.Platform.OS === 'ios' && modalHeightPercent >= 95 ? 44 : 0;
|
|
58
59
|
if (settingsPage === 'main') {
|
|
@@ -63,6 +64,7 @@ const SettingsPanel = () => {
|
|
|
63
64
|
{ key: 'redux', label: 'Redux', icon: 'redux' },
|
|
64
65
|
{ key: 'bundle', label: 'Bundle', icon: 'bundle' },
|
|
65
66
|
{ key: 'performance', label: 'Performance', icon: 'performance' },
|
|
67
|
+
{ key: 'crash', label: 'Crash', icon: 'crash' },
|
|
66
68
|
];
|
|
67
69
|
return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
|
|
68
70
|
{/* Settings Header with back button */}
|
|
@@ -273,6 +275,9 @@ const SettingsPanel = () => {
|
|
|
273
275
|
{tab.icon === 'performance' && (<NetworkIcons_1.PerformanceIcon color={isLocked
|
|
274
276
|
? AppColors_1.AppColors.grayTextWeak
|
|
275
277
|
: AppColors_1.AppColors.purple} size={11}/>)}
|
|
278
|
+
{tab.icon === 'crash' && (<NetworkIcons_1.CrashIcon color={isLocked
|
|
279
|
+
? AppColors_1.AppColors.grayTextWeak
|
|
280
|
+
: AppColors_1.AppColors.purple} size={11}/>)}
|
|
276
281
|
</react_native_1.View>
|
|
277
282
|
{/* Label + Required badge */}
|
|
278
283
|
<react_native_1.Text style={{
|
|
@@ -712,6 +717,7 @@ const SettingsPanel = () => {
|
|
|
712
717
|
{tab.icon === 'redux' && (<NetworkIcons_1.ReduxIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
713
718
|
{tab.icon === 'bundle' && (<NetworkIcons_1.PackageIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
714
719
|
{tab.icon === 'performance' && (<NetworkIcons_1.PerformanceIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
720
|
+
{tab.icon === 'crash' && (<NetworkIcons_1.CrashIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
|
|
715
721
|
</react_native_1.View>
|
|
716
722
|
<react_native_1.Text style={{
|
|
717
723
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -1430,6 +1436,89 @@ const SettingsPanel = () => {
|
|
|
1430
1436
|
</react_native_1.View>
|
|
1431
1437
|
</react_native_1.ScrollView>);
|
|
1432
1438
|
}
|
|
1439
|
+
else if (settingsPage === 'crash') {
|
|
1440
|
+
title = 'Crash Settings';
|
|
1441
|
+
icon = <NetworkIcons_1.CrashIcon color={AppColors_1.AppColors.white} size={16}/>;
|
|
1442
|
+
rightInfo = `Total: ${crashRecords?.length || 0}`;
|
|
1443
|
+
content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
|
|
1444
|
+
<react_native_1.View style={{
|
|
1445
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1446
|
+
padding: 16,
|
|
1447
|
+
borderRadius: 12,
|
|
1448
|
+
borderWidth: 1,
|
|
1449
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1450
|
+
gap: 4,
|
|
1451
|
+
}}>
|
|
1452
|
+
{renderSettingRow({
|
|
1453
|
+
icon: <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={16}/>,
|
|
1454
|
+
label: 'Max Crash Logs',
|
|
1455
|
+
description: 'How many crash records to preserve in history',
|
|
1456
|
+
picker: {
|
|
1457
|
+
options: [25, 50, 100, 200],
|
|
1458
|
+
selectedValue: maxCrashLogs || 100,
|
|
1459
|
+
onSelect: val => setMaxCrashLogs(val),
|
|
1460
|
+
},
|
|
1461
|
+
})}
|
|
1462
|
+
<react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
|
|
1463
|
+
{renderSettingRow({
|
|
1464
|
+
icon: <NetworkIcons_1.ShieldAlertIcon color={AppColors_1.AppColors.greenColor} size={16}/>,
|
|
1465
|
+
label: 'Global Crash Guard',
|
|
1466
|
+
description: 'Intercepts native, JS, and render errors directly',
|
|
1467
|
+
isLast: true,
|
|
1468
|
+
right: (<react_native_1.View style={{
|
|
1469
|
+
paddingHorizontal: 8,
|
|
1470
|
+
paddingVertical: 4,
|
|
1471
|
+
borderRadius: 6,
|
|
1472
|
+
backgroundColor: `${AppColors_1.AppColors.greenColor}1F`,
|
|
1473
|
+
}}>
|
|
1474
|
+
<react_native_1.Text style={{
|
|
1475
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1476
|
+
fontSize: 10,
|
|
1477
|
+
color: AppColors_1.AppColors.greenColor,
|
|
1478
|
+
}}>
|
|
1479
|
+
PROTECTED
|
|
1480
|
+
</react_native_1.Text>
|
|
1481
|
+
</react_native_1.View>),
|
|
1482
|
+
})}
|
|
1483
|
+
</react_native_1.View>
|
|
1484
|
+
|
|
1485
|
+
<react_native_1.View style={{
|
|
1486
|
+
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1487
|
+
borderRadius: 12,
|
|
1488
|
+
borderWidth: 1,
|
|
1489
|
+
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1490
|
+
padding: 16,
|
|
1491
|
+
marginTop: 12,
|
|
1492
|
+
}}>
|
|
1493
|
+
{renderSettingRow({
|
|
1494
|
+
icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
|
|
1495
|
+
label: 'Clear Crash History',
|
|
1496
|
+
description: `${crashRecords?.length || 0} crash logs stored`,
|
|
1497
|
+
isLast: true,
|
|
1498
|
+
onPress: () => {
|
|
1499
|
+
(0, crashHandler_1.clearCrashRecords)();
|
|
1500
|
+
react_native_1.Alert.alert('Success', 'Crash logs cleared.');
|
|
1501
|
+
},
|
|
1502
|
+
right: (<react_native_1.View style={{
|
|
1503
|
+
paddingHorizontal: 10,
|
|
1504
|
+
paddingVertical: 5,
|
|
1505
|
+
borderRadius: 7,
|
|
1506
|
+
backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
|
|
1507
|
+
borderWidth: 1,
|
|
1508
|
+
borderColor: `${AppColors_1.AppColors.errorColor}33`,
|
|
1509
|
+
}}>
|
|
1510
|
+
<react_native_1.Text style={{
|
|
1511
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1512
|
+
fontSize: 11,
|
|
1513
|
+
color: AppColors_1.AppColors.errorColor,
|
|
1514
|
+
}}>
|
|
1515
|
+
Clear
|
|
1516
|
+
</react_native_1.Text>
|
|
1517
|
+
</react_native_1.View>),
|
|
1518
|
+
})}
|
|
1519
|
+
</react_native_1.View>
|
|
1520
|
+
</react_native_1.ScrollView>);
|
|
1521
|
+
}
|
|
1433
1522
|
return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
|
|
1434
1523
|
<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}>
|
|
1435
1524
|
<react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
|
|
@@ -11,7 +11,7 @@ const styles_1 = __importDefault(require("../../styles"));
|
|
|
11
11
|
const AppColors_1 = require("../../styles/AppColors");
|
|
12
12
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
13
13
|
const TabBar = react_1.default.memo(() => {
|
|
14
|
-
const { activeTab, switchActiveTab, tabVisibility, logs, consoleLogs, analyticsEvents, lastReadApisCount, lastReadLogsCount, unreadPulseAnim, } = (0, InspectorContext_1.useInspector)();
|
|
14
|
+
const { activeTab, switchActiveTab, tabVisibility, logs, consoleLogs, analyticsEvents, crashRecords, lastReadApisCount, lastReadLogsCount, lastReadCrashesCount, unreadPulseAnim, } = (0, InspectorContext_1.useInspector)();
|
|
15
15
|
return (<react_native_1.View style={styles_1.default.tabBarContainer}>
|
|
16
16
|
<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{ paddingRight: 16 }}>
|
|
17
17
|
{[
|
|
@@ -51,18 +51,28 @@ const TabBar = react_1.default.memo(() => {
|
|
|
51
51
|
count: 0,
|
|
52
52
|
icon: 'performance',
|
|
53
53
|
},
|
|
54
|
+
{
|
|
55
|
+
key: 'crash',
|
|
56
|
+
label: 'Crash',
|
|
57
|
+
count: crashRecords?.length || 0,
|
|
58
|
+
icon: 'crash',
|
|
59
|
+
},
|
|
54
60
|
]
|
|
55
61
|
.filter(tab => tabVisibility?.[tab.key])
|
|
56
62
|
.map(tab => {
|
|
57
63
|
const isActive = activeTab === tab.key;
|
|
58
64
|
const iconColor = isActive
|
|
59
65
|
? AppColors_1.AppColors.white
|
|
60
|
-
:
|
|
66
|
+
: tab.key === 'crash' && tab.count > 0
|
|
67
|
+
? AppColors_1.AppColors.errorColor
|
|
68
|
+
: AppColors_1.AppColors.grayText;
|
|
61
69
|
const countLabel = tab.count > 9 ? '9+' : String(tab.count);
|
|
62
70
|
const hasUnreadApis = activeTab !== 'apis' &&
|
|
63
71
|
logs.length > lastReadApisCount;
|
|
64
72
|
const hasUnreadLogs = activeTab !== 'logs' &&
|
|
65
73
|
consoleLogs.length > lastReadLogsCount;
|
|
74
|
+
const hasUnreadCrashes = activeTab !== 'crash' &&
|
|
75
|
+
(crashRecords?.length || 0) > (lastReadCrashesCount || 0);
|
|
66
76
|
return (<TouchableScale_1.default key={tab.key} onPress={() => switchActiveTab(tab.key)} style={[
|
|
67
77
|
styles_1.default.contentTabButton,
|
|
68
78
|
isActive && styles_1.default.contentTabButtonActive,
|
|
@@ -78,6 +88,7 @@ const TabBar = react_1.default.memo(() => {
|
|
|
78
88
|
{tab.icon === 'redux' && (<NetworkIcons_1.ReduxIcon color={iconColor} size={14}/>)}
|
|
79
89
|
{tab.icon === 'bundle' && (<NetworkIcons_1.PackageIcon color={iconColor} size={14}/>)}
|
|
80
90
|
{tab.icon === 'performance' && (<NetworkIcons_1.PerformanceIcon color={iconColor} size={14}/>)}
|
|
91
|
+
{tab.icon === 'crash' && (<NetworkIcons_1.CrashIcon color={iconColor} size={14}/>)}
|
|
81
92
|
<react_native_1.Text numberOfLines={1} ellipsizeMode="tail" style={[
|
|
82
93
|
styles_1.default.contentTabButtonText,
|
|
83
94
|
isActive &&
|
|
@@ -87,7 +98,8 @@ const TabBar = react_1.default.memo(() => {
|
|
|
87
98
|
{tab.count > 0 ? `(${countLabel})` : ''}
|
|
88
99
|
</react_native_1.Text>
|
|
89
100
|
{((tab.key === 'apis' && hasUnreadApis) ||
|
|
90
|
-
(tab.key === 'logs' && hasUnreadLogs)
|
|
101
|
+
(tab.key === 'logs' && hasUnreadLogs) ||
|
|
102
|
+
(tab.key === 'crash' && hasUnreadCrashes)) && (<react_native_1.Animated.View style={{
|
|
91
103
|
width: 6,
|
|
92
104
|
height: 6,
|
|
93
105
|
borderRadius: 3,
|
|
@@ -92,3 +92,14 @@ export declare const PinIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
|
92
92
|
export declare const RepeatIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
93
93
|
export declare const TargetGoalIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
94
94
|
export declare const UserCheckIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
95
|
+
export declare const CrashIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
96
|
+
export declare const ShieldAlertIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
97
|
+
export declare const SkullIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
98
|
+
export declare const ChipIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
99
|
+
export declare const LayoutIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
100
|
+
export declare const StackTraceIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
101
|
+
export declare const DiagnosticsIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
102
|
+
export declare const TrailIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
103
|
+
export declare const RawJsonIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
104
|
+
export declare const AppFramesIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
105
|
+
export declare const AllFramesIcon: ({ color, size, }: any) => React.JSX.Element;
|
|
@@ -37,7 +37,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.InfoCircleIcon = exports.UserIcon = exports.LayersIcon = exports.WipeIcon = exports.FolderIcon = exports.SettingsIcon = exports.EyeIcon = exports.JsIcon = exports.CssIcon = exports.HtmlIcon = exports.BrandSquareIcon = exports.BrandCircleIcon = exports.MoonIcon = exports.SunIcon = exports.DebugIcon = exports.InsightsIcon = exports.AnalyticsIcon = exports.WhiteBackNavigation = exports.CloseWhite = exports.DownloadIcon = exports.FilterIcon = exports.ChevronIcon = exports.SortArrowIcon = exports.GlobeIcon = exports.DiffIcon = exports.SignalIcon = exports.ExportIcon = exports.HeaderPauseIcon = exports.TrashIcon = exports.FailIcon = exports.CircleAlertIcon = exports.CircleXIcon = exports.CircleCheckIcon = exports.CheckIcon = exports.TerminalIcon = exports.FetchIcon = exports.CopyIcon = exports.HeadersIcon = exports.ResponseIcon = exports.RequestIcon = exports.SizeIcon = exports.StatusIcon = exports.CalendarIcon = exports.ClockIcon = exports.ClearIcon = exports.SearchIcon = exports.ExpandCollapseIcon = exports.ScreenIcon = exports.MapPinIcon = exports.EmptyRadarIcon = void 0;
|
|
40
|
-
exports.UserCheckIcon = exports.TargetGoalIcon = exports.RepeatIcon = exports.PinIcon = exports.HourglassIcon = exports.FlameIcon = exports.CodeBracketsIcon = exports.AndroidIcon = exports.AppleIcon = exports.LinkChainIcon = exports.GitHubIcon = exports.PackageBoxIcon = exports.ExternalLinkIcon = exports.MoneyIcon = exports.CartIcon = exports.TextAaIcon = exports.BrainIcon = exports.AtomIcon = exports.MapIcon = exports.SparkleIcon = exports.LightbulbIcon = exports.DocIcon = exports.FolderOpenIcon = exports.BanIcon = exports.BoltIcon = exports.PerformanceIcon = exports.ReduxIcon = exports.MetadataIcon = exports.StorageIcon = exports.RefreshCcwIcon = exports.TimelineIcon = exports.LiveStateIcon = exports.BundleIcon = exports.ForwardChevronIcon = exports.PackageIcon = exports.TableIcon = exports.RawIcon = exports.PrettyIcon = exports.SortIcon = exports.MotionIcon = exports.TrendingUpIcon = exports.ErrorCircleIcon = exports.WarningTriangleIcon = void 0;
|
|
40
|
+
exports.DiagnosticsIcon = exports.StackTraceIcon = exports.LayoutIcon = exports.ChipIcon = exports.SkullIcon = exports.ShieldAlertIcon = exports.CrashIcon = exports.UserCheckIcon = exports.TargetGoalIcon = exports.RepeatIcon = exports.PinIcon = exports.HourglassIcon = exports.FlameIcon = exports.CodeBracketsIcon = exports.AndroidIcon = exports.AppleIcon = exports.LinkChainIcon = exports.GitHubIcon = exports.PackageBoxIcon = exports.ExternalLinkIcon = exports.MoneyIcon = exports.CartIcon = exports.TextAaIcon = exports.BrainIcon = exports.AtomIcon = exports.MapIcon = exports.SparkleIcon = exports.LightbulbIcon = exports.DocIcon = exports.FolderOpenIcon = exports.BanIcon = exports.BoltIcon = exports.PerformanceIcon = exports.ReduxIcon = exports.MetadataIcon = exports.StorageIcon = exports.RefreshCcwIcon = exports.TimelineIcon = exports.LiveStateIcon = exports.BundleIcon = exports.ForwardChevronIcon = exports.PackageIcon = exports.TableIcon = exports.RawIcon = exports.PrettyIcon = exports.SortIcon = exports.MotionIcon = exports.TrendingUpIcon = exports.ErrorCircleIcon = exports.WarningTriangleIcon = void 0;
|
|
41
|
+
exports.AllFramesIcon = exports.AppFramesIcon = exports.RawJsonIcon = exports.TrailIcon = void 0;
|
|
41
42
|
const react_1 = __importDefault(require("react"));
|
|
42
43
|
const react_native_svg_1 = __importStar(require("react-native-svg"));
|
|
43
44
|
// Stylesheet
|
|
@@ -691,3 +692,97 @@ const UserCheckIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14,
|
|
|
691
692
|
</react_native_svg_1.default>);
|
|
692
693
|
};
|
|
693
694
|
exports.UserCheckIcon = UserCheckIcon;
|
|
695
|
+
const CrashIcon = ({ color = AppColors_1.AppColors.errorColor, size = 14, }) => {
|
|
696
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
697
|
+
{/* Bug / Crash Hybrid Icon */}
|
|
698
|
+
<react_native_svg_1.Path d="M12 2v3M4.93 4.93l2.12 2.12M19.07 4.93l-2.12 2.12M9 10h6M8 14h8M9 18h6" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
|
|
699
|
+
<react_native_svg_1.Path d="M12 8a6 6 0 0 1 6 6v3a6 6 0 0 1-12 0v-3a6 6 0 0 1 6-6z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
|
|
700
|
+
<react_native_svg_1.Path d="M3 13h3M18 13h3M4 19l2.5-1.5M20 19l-2.5-1.5M4 9l2.5 1.5M20 9l-2.5 1.5" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
|
|
701
|
+
</react_native_svg_1.default>);
|
|
702
|
+
};
|
|
703
|
+
exports.CrashIcon = CrashIcon;
|
|
704
|
+
const ShieldAlertIcon = ({ color = AppColors_1.AppColors.errorColor, size = 14, }) => {
|
|
705
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
706
|
+
<react_native_svg_1.Path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
|
|
707
|
+
<react_native_svg_1.Line x1="12" y1="8" x2="12" y2="12" stroke={color} strokeWidth="2" strokeLinecap="round"/>
|
|
708
|
+
<react_native_svg_1.Circle cx="12" cy="16" r="1" fill={color}/>
|
|
709
|
+
</react_native_svg_1.default>);
|
|
710
|
+
};
|
|
711
|
+
exports.ShieldAlertIcon = ShieldAlertIcon;
|
|
712
|
+
const SkullIcon = ({ color = AppColors_1.AppColors.errorColor, size = 14, }) => {
|
|
713
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
714
|
+
<react_native_svg_1.Circle cx="12" cy="12" r="9" stroke={color} strokeWidth="1.8"/>
|
|
715
|
+
<react_native_svg_1.Circle cx="9" cy="11" r="1.6" fill={color}/>
|
|
716
|
+
<react_native_svg_1.Circle cx="15" cy="11" r="1.6" fill={color}/>
|
|
717
|
+
<react_native_svg_1.Path d="M8 16c1.2 1 3.2 1.2 4 1.2.8 0 2.8-.2 4-1.2" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
|
|
718
|
+
<react_native_svg_1.Line x1="12" y1="16" x2="12" y2="18" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
|
|
719
|
+
</react_native_svg_1.default>);
|
|
720
|
+
};
|
|
721
|
+
exports.SkullIcon = SkullIcon;
|
|
722
|
+
const ChipIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
723
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
724
|
+
<react_native_svg_1.Rect x="7" y="7" width="10" height="10" rx="2" stroke={color} strokeWidth="1.8"/>
|
|
725
|
+
<react_native_svg_1.Rect x="10" y="10" width="4" height="4" fill={color}/>
|
|
726
|
+
<react_native_svg_1.Line x1="9" y1="3" x2="9" y2="7" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
727
|
+
<react_native_svg_1.Line x1="15" y1="3" x2="15" y2="7" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
728
|
+
<react_native_svg_1.Line x1="9" y1="17" x2="9" y2="21" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
729
|
+
<react_native_svg_1.Line x1="15" y1="17" x2="15" y2="21" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
730
|
+
<react_native_svg_1.Line x1="3" y1="9" x2="7" y2="9" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
731
|
+
<react_native_svg_1.Line x1="3" y1="15" x2="7" y2="15" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
732
|
+
<react_native_svg_1.Line x1="17" y1="9" x2="21" y2="9" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
733
|
+
<react_native_svg_1.Line x1="17" y1="15" x2="21" y2="15" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
734
|
+
</react_native_svg_1.default>);
|
|
735
|
+
};
|
|
736
|
+
exports.ChipIcon = ChipIcon;
|
|
737
|
+
const LayoutIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
738
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
739
|
+
<react_native_svg_1.Rect x="3" y="3" width="18" height="18" rx="2" stroke={color} strokeWidth="1.8"/>
|
|
740
|
+
<react_native_svg_1.Line x1="3" y1="9" x2="21" y2="9" stroke={color} strokeWidth="1.8"/>
|
|
741
|
+
<react_native_svg_1.Line x1="9" y1="9" x2="9" y2="21" stroke={color} strokeWidth="1.8"/>
|
|
742
|
+
<react_native_svg_1.Rect x="12" y="12" width="6" height="6" fill={color}/>
|
|
743
|
+
</react_native_svg_1.default>);
|
|
744
|
+
};
|
|
745
|
+
exports.LayoutIcon = LayoutIcon;
|
|
746
|
+
const StackTraceIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
747
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
748
|
+
<react_native_svg_1.Path d="M4 6h16M4 10h11M4 14h16M4 18h9" stroke={color} strokeWidth="2" strokeLinecap="round"/>
|
|
749
|
+
<react_native_svg_1.Path d="M7.5 12.5 4 14l3.5 1.5" stroke={color} strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round"/>
|
|
750
|
+
</react_native_svg_1.default>);
|
|
751
|
+
};
|
|
752
|
+
exports.StackTraceIcon = StackTraceIcon;
|
|
753
|
+
const DiagnosticsIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
754
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
755
|
+
<react_native_svg_1.Path d="M3 12h3l2-5 3 9 2-6 1.5 2H21" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
|
|
756
|
+
<react_native_svg_1.Line x1="4" y1="19" x2="20" y2="19" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
757
|
+
</react_native_svg_1.default>);
|
|
758
|
+
};
|
|
759
|
+
exports.DiagnosticsIcon = DiagnosticsIcon;
|
|
760
|
+
const TrailIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
761
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
762
|
+
<react_native_svg_1.Circle cx="5" cy="18" r="2" fill={color}/>
|
|
763
|
+
<react_native_svg_1.Circle cx="12" cy="12" r="2" fill={color}/>
|
|
764
|
+
<react_native_svg_1.Circle cx="19" cy="6" r="2" fill={color}/>
|
|
765
|
+
<react_native_svg_1.Path d="M6.5 16.5 10.5 13.5M13.5 10.5 17.5 7.5" stroke={color} strokeWidth="1.6" strokeLinecap="round"/>
|
|
766
|
+
</react_native_svg_1.default>);
|
|
767
|
+
};
|
|
768
|
+
exports.TrailIcon = TrailIcon;
|
|
769
|
+
const RawJsonIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
770
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
771
|
+
<react_native_svg_1.Path d="M8 3c-2 1-3 2.5-3 5 0 2-1 3.5-2 4 1 .5 2 2 2 4 0 2.5 1 4 3 5M16 3c2 1 3 2.5 3 5 0 2 1 3.5 2 4-1 .5-2 2-2 4 0 2.5-1 4-3 5" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
|
|
772
|
+
</react_native_svg_1.default>);
|
|
773
|
+
};
|
|
774
|
+
exports.RawJsonIcon = RawJsonIcon;
|
|
775
|
+
const AppFramesIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
776
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
777
|
+
<react_native_svg_1.Path d="M4 6h16M4 10h11M4 14h16M4 18h9" stroke={color} strokeWidth="2" strokeLinecap="round"/>
|
|
778
|
+
<react_native_svg_1.Path d="M18 12.5l2 2 3-3.5" stroke="#059669" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
|
|
779
|
+
</react_native_svg_1.default>);
|
|
780
|
+
};
|
|
781
|
+
exports.AppFramesIcon = AppFramesIcon;
|
|
782
|
+
const AllFramesIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
|
|
783
|
+
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
784
|
+
<react_native_svg_1.Path d="M4 4h16M4 8h16M4 12h16M4 16h16M4 20h10" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
|
|
785
|
+
<react_native_svg_1.Rect x="16" y="16" width="4" height="4" rx="1" fill={color}/>
|
|
786
|
+
</react_native_svg_1.default>);
|
|
787
|
+
};
|
|
788
|
+
exports.AllFramesIcon = AllFramesIcon;
|
|
@@ -45,7 +45,8 @@ const SegmentedTabs = react_1.default.memo(({ tabs, activeKey, onChange, style }
|
|
|
45
45
|
},
|
|
46
46
|
]}>
|
|
47
47
|
{tab.icon ? tab.icon(isActive) : null}
|
|
48
|
-
<react_native_1.Text style={{
|
|
48
|
+
<react_native_1.Text numberOfLines={1} ellipsizeMode="tail" style={{
|
|
49
|
+
flexShrink: 1,
|
|
49
50
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
50
51
|
fontSize: 10.5,
|
|
51
52
|
color: isActive
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "1.1.
|
|
1
|
+
export declare const LIB_VERSION = "1.1.26";
|
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LIB_VERSION = void 0;
|
|
4
4
|
// AUTO-GENERATED FILE — do not edit by hand.
|
|
5
5
|
// Regenerated from package.json on every build by scripts/gen-version.js.
|
|
6
|
-
exports.LIB_VERSION = '1.1.
|
|
6
|
+
exports.LIB_VERSION = '1.1.26';
|