react-native-inapp-inspector 2.2.9 → 2.3.1
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/dist/commonjs/components/AppHeaderLogo.js +45 -12
- package/dist/commonjs/components/BrandSquareIcon.js +92 -49
- package/dist/commonjs/components/EmptyState.d.ts +7 -2
- package/dist/commonjs/components/EmptyState.js +11 -5
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +29 -18
- package/dist/commonjs/components/Inspector/ConsoleTab.js +6 -1
- package/dist/commonjs/components/Inspector/CrashDetail.js +43 -9
- package/dist/commonjs/components/Inspector/CrashTab.js +34 -3
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +80 -16
- package/dist/commonjs/components/Inspector/InspectorHeader.js +16 -3
- package/dist/commonjs/components/Inspector/MainScreen.js +7 -11
- package/dist/commonjs/components/Inspector/NetworkDetail.js +3 -2
- package/dist/commonjs/components/Inspector/NetworkTab.js +103 -4
- package/dist/commonjs/components/Inspector/ReduxTab.js +19 -3
- package/dist/commonjs/components/Inspector/SettingsPanel.js +4 -4
- package/dist/commonjs/components/Inspector/StorageTab.js +123 -92
- package/dist/commonjs/components/JsonViewer.js +2 -0
- package/dist/commonjs/components/MetaAccordion.js +15 -3
- package/dist/commonjs/components/SkeletonPlaceholder.d.ts +6 -0
- package/dist/commonjs/components/SkeletonPlaceholder.js +208 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/networkLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/networkLogger.js +10 -1
- package/dist/commonjs/customHooks/storageInspector.d.ts +2 -2
- package/dist/commonjs/customHooks/storageInspector.js +17 -13
- package/dist/commonjs/helpers/index.d.ts +6 -0
- package/dist/commonjs/helpers/index.js +196 -6
- package/dist/commonjs/helpers/searchQueryParser.js +62 -20
- package/dist/commonjs/i18n/index.d.ts +13 -0
- package/dist/commonjs/i18n/index.js +35 -2
- package/dist/commonjs/index.d.ts +3 -0
- package/dist/commonjs/index.js +108 -35
- package/dist/commonjs/styles/AppColors.d.ts +4 -0
- package/dist/commonjs/styles/AppColors.js +11 -1
- package/dist/commonjs/styles/AppFonts.d.ts +11 -0
- package/dist/commonjs/styles/AppFonts.js +11 -1
- package/dist/commonjs/types/interfaces.d.ts +2 -2
- package/dist/esm/components/AppHeaderLogo.js +45 -12
- package/dist/esm/components/BrandSquareIcon.js +92 -49
- package/dist/esm/components/EmptyState.d.ts +7 -2
- package/dist/esm/components/EmptyState.js +11 -5
- package/dist/esm/components/Inspector/AnalyticsTab.js +30 -19
- package/dist/esm/components/Inspector/ConsoleTab.js +6 -1
- package/dist/esm/components/Inspector/CrashDetail.js +43 -9
- package/dist/esm/components/Inspector/CrashTab.js +34 -3
- package/dist/esm/components/Inspector/DeviceInfoTab.js +80 -16
- package/dist/esm/components/Inspector/InspectorHeader.js +17 -4
- package/dist/esm/components/Inspector/MainScreen.js +8 -12
- package/dist/esm/components/Inspector/NetworkDetail.js +3 -2
- package/dist/esm/components/Inspector/NetworkTab.js +103 -4
- package/dist/esm/components/Inspector/ReduxTab.js +19 -3
- package/dist/esm/components/Inspector/SettingsPanel.js +4 -4
- package/dist/esm/components/Inspector/StorageTab.js +124 -93
- package/dist/esm/components/JsonViewer.js +2 -0
- package/dist/esm/components/MetaAccordion.js +15 -3
- package/dist/esm/components/SkeletonPlaceholder.d.ts +6 -0
- package/dist/esm/components/SkeletonPlaceholder.js +173 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/networkLogger.d.ts +3 -0
- package/dist/esm/customHooks/networkLogger.js +8 -0
- package/dist/esm/customHooks/storageInspector.d.ts +2 -2
- package/dist/esm/customHooks/storageInspector.js +17 -13
- package/dist/esm/helpers/index.d.ts +6 -0
- package/dist/esm/helpers/index.js +193 -5
- package/dist/esm/helpers/searchQueryParser.js +62 -20
- package/dist/esm/i18n/index.d.ts +13 -0
- package/dist/esm/i18n/index.js +33 -3
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +97 -37
- package/dist/esm/styles/AppColors.d.ts +4 -0
- package/dist/esm/styles/AppColors.js +9 -0
- package/dist/esm/styles/AppFonts.d.ts +11 -0
- package/dist/esm/styles/AppFonts.js +9 -0
- package/dist/esm/types/interfaces.d.ts +2 -2
- package/package.json +1 -1
- package/src/components/AppHeaderLogo.tsx +46 -12
- package/src/components/BrandSquareIcon.tsx +127 -78
- package/src/components/EmptyState.tsx +27 -5
- package/src/components/Inspector/AnalyticsTab.tsx +48 -27
- package/src/components/Inspector/ConsoleTab.tsx +10 -0
- package/src/components/Inspector/CrashDetail.tsx +65 -9
- package/src/components/Inspector/CrashTab.tsx +41 -3
- package/src/components/Inspector/DeviceInfoTab.tsx +87 -16
- package/src/components/Inspector/InspectorHeader.tsx +24 -4
- package/src/components/Inspector/MainScreen.tsx +7 -11
- package/src/components/Inspector/NetworkDetail.tsx +4 -4
- package/src/components/Inspector/NetworkTab.tsx +129 -4
- package/src/components/Inspector/ReduxTab.tsx +26 -8
- package/src/components/Inspector/SettingsPanel.tsx +4 -4
- package/src/components/Inspector/StorageTab.tsx +191 -117
- package/src/components/JsonViewer.tsx +2 -0
- package/src/components/MetaAccordion.tsx +18 -3
- package/src/components/SkeletonPlaceholder.tsx +206 -0
- package/src/constants/version.ts +1 -1
- package/src/customHooks/networkLogger.ts +15 -0
- package/src/customHooks/storageInspector.ts +18 -14
- package/src/helpers/index.ts +213 -5
- package/src/helpers/searchQueryParser.ts +63 -20
- package/src/i18n/index.ts +38 -3
- package/src/index.tsx +124 -37
- package/src/styles/AppColors.ts +9 -0
- package/src/styles/AppFonts.ts +16 -0
- package/src/types/interfaces.ts +2 -2
|
@@ -51,15 +51,23 @@ const AppHeaderLogo = ({ size = 46, customIcon, }) => {
|
|
|
51
51
|
height: size,
|
|
52
52
|
});
|
|
53
53
|
return (<react_native_1.View style={[
|
|
54
|
-
logoStyles.
|
|
55
|
-
{
|
|
54
|
+
logoStyles.svgContainer,
|
|
55
|
+
{
|
|
56
|
+
width: size,
|
|
57
|
+
height: size,
|
|
58
|
+
borderRadius: Math.round(size * 0.23),
|
|
59
|
+
},
|
|
56
60
|
]}>
|
|
57
61
|
{clonedIcon}
|
|
58
62
|
</react_native_1.View>);
|
|
59
63
|
}
|
|
60
64
|
return (<react_native_1.View style={[
|
|
61
|
-
logoStyles.
|
|
62
|
-
{
|
|
65
|
+
logoStyles.imageContainer,
|
|
66
|
+
{
|
|
67
|
+
width: size,
|
|
68
|
+
height: size,
|
|
69
|
+
borderRadius: Math.round(size * 0.23),
|
|
70
|
+
},
|
|
63
71
|
]}>
|
|
64
72
|
<react_native_1.Image source={customIcon} style={logoStyles.image} resizeMode="cover"/>
|
|
65
73
|
</react_native_1.View>);
|
|
@@ -71,34 +79,59 @@ const AppHeaderLogo = ({ size = 46, customIcon, }) => {
|
|
|
71
79
|
android: { uri: 'ic_launcher' },
|
|
72
80
|
default: { uri: 'AppIcon' },
|
|
73
81
|
});
|
|
74
|
-
return (<react_native_1.View style={[
|
|
82
|
+
return (<react_native_1.View style={[
|
|
83
|
+
logoStyles.imageContainer,
|
|
84
|
+
{
|
|
85
|
+
width: size,
|
|
86
|
+
height: size,
|
|
87
|
+
borderRadius: Math.round(size * 0.23),
|
|
88
|
+
},
|
|
89
|
+
]}>
|
|
75
90
|
<react_native_1.Image source={nativeSource} style={logoStyles.image} resizeMode="cover" onError={() => setLoadError(true)}/>
|
|
76
91
|
</react_native_1.View>);
|
|
77
92
|
}
|
|
78
93
|
// 3. Fallback: Inspector's Signature Owl Brand Logo
|
|
79
94
|
return (<react_native_1.View style={[
|
|
80
|
-
logoStyles.
|
|
81
|
-
{
|
|
95
|
+
logoStyles.svgContainer,
|
|
96
|
+
{
|
|
97
|
+
width: size,
|
|
98
|
+
height: size,
|
|
99
|
+
borderRadius: Math.round(size * 0.23),
|
|
100
|
+
},
|
|
82
101
|
]}>
|
|
83
102
|
<BrandSquareIcon_1.default size={size}/>
|
|
84
103
|
</react_native_1.View>);
|
|
85
104
|
};
|
|
86
105
|
exports.AppHeaderLogo = AppHeaderLogo;
|
|
87
106
|
const logoStyles = react_native_1.StyleSheet.create({
|
|
88
|
-
|
|
89
|
-
|
|
107
|
+
svgContainer: {
|
|
108
|
+
overflow: 'hidden',
|
|
109
|
+
alignItems: 'center',
|
|
110
|
+
justifyContent: 'center',
|
|
111
|
+
shadowColor: '#000',
|
|
112
|
+
shadowOffset: { width: 0, height: 2 },
|
|
113
|
+
shadowOpacity: 0.25,
|
|
114
|
+
shadowRadius: 3,
|
|
115
|
+
elevation: 3,
|
|
116
|
+
},
|
|
117
|
+
imageContainer: {
|
|
90
118
|
overflow: 'hidden',
|
|
91
119
|
backgroundColor: 'rgba(255, 255, 255, 0.15)',
|
|
92
120
|
borderWidth: 1,
|
|
93
|
-
borderColor: 'rgba(255, 255, 255, 0.
|
|
94
|
-
padding: 2
|
|
121
|
+
borderColor: 'rgba(255, 255, 255, 0.35)',
|
|
122
|
+
padding: 2,
|
|
95
123
|
alignItems: 'center',
|
|
96
124
|
justifyContent: 'center',
|
|
125
|
+
shadowColor: '#000',
|
|
126
|
+
shadowOffset: { width: 0, height: 2 },
|
|
127
|
+
shadowOpacity: 0.25,
|
|
128
|
+
shadowRadius: 3,
|
|
129
|
+
elevation: 3,
|
|
97
130
|
},
|
|
98
131
|
image: {
|
|
99
132
|
width: '100%',
|
|
100
133
|
height: '100%',
|
|
101
|
-
borderRadius:
|
|
134
|
+
borderRadius: 8,
|
|
102
135
|
},
|
|
103
136
|
});
|
|
104
137
|
exports.default = exports.AppHeaderLogo;
|
|
@@ -42,72 +42,115 @@ const react_native_svg_1 = __importStar(require("react-native-svg"));
|
|
|
42
42
|
const BrandSquareIcon = ({ size = 56 }) => {
|
|
43
43
|
return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 256 256" fill="none">
|
|
44
44
|
<react_native_svg_1.Defs>
|
|
45
|
+
{/* App Tile Background - Crisp Royal Deep Violet to Midnight */}
|
|
45
46
|
<react_native_svg_1.LinearGradient id="bs_tile" x1="0" y1="0" x2="256" y2="256" gradientUnits="userSpaceOnUse">
|
|
46
|
-
<react_native_svg_1.Stop offset="0" stopColor="#1E1B4B"/>
|
|
47
|
-
<react_native_svg_1.Stop offset="
|
|
47
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#1E1B4B"/>
|
|
48
|
+
<react_native_svg_1.Stop offset="50%" stopColor="#18182F"/>
|
|
49
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#0B0F19"/>
|
|
48
50
|
</react_native_svg_1.LinearGradient>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<react_native_svg_1.Stop offset="
|
|
51
|
+
|
|
52
|
+
{/* Outer Neon Cyber Border */}
|
|
53
|
+
<react_native_svg_1.LinearGradient id="bs_border" x1="0" y1="0" x2="256" y2="256" gradientUnits="userSpaceOnUse">
|
|
54
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#818CF8" stopOpacity={0.9}/>
|
|
55
|
+
<react_native_svg_1.Stop offset="45%" stopColor="#C084FC" stopOpacity={0.8}/>
|
|
56
|
+
<react_native_svg_1.Stop offset="80%" stopColor="#F472B6" stopOpacity={0.85}/>
|
|
57
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#38BDF8" stopOpacity={0.9}/>
|
|
58
|
+
</react_native_svg_1.LinearGradient>
|
|
59
|
+
|
|
60
|
+
{/* Ambient Top Glow */}
|
|
61
|
+
<react_native_svg_1.RadialGradient id="bs_top_glow" cx="50%" cy="15%" r="65%">
|
|
62
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#818CF8" stopOpacity={0.35}/>
|
|
63
|
+
<react_native_svg_1.Stop offset="60%" stopColor="#A855F7" stopOpacity={0.12}/>
|
|
64
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#1E1B4B" stopOpacity={0}/>
|
|
65
|
+
</react_native_svg_1.RadialGradient>
|
|
66
|
+
|
|
67
|
+
{/* Owl Outer Body Gradient - High Contrast */}
|
|
68
|
+
<react_native_svg_1.LinearGradient id="bs_body" x1="64" y1="40" x2="192" y2="220" gradientUnits="userSpaceOnUse">
|
|
69
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#3730A3"/>
|
|
70
|
+
<react_native_svg_1.Stop offset="50%" stopColor="#2E1065"/>
|
|
71
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#17123A"/>
|
|
53
72
|
</react_native_svg_1.LinearGradient>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
73
|
+
|
|
74
|
+
{/* Neon Cyber Beam Stroke */}
|
|
75
|
+
<react_native_svg_1.LinearGradient id="bs_beam" x1="40" y1="40" x2="220" y2="220" gradientUnits="userSpaceOnUse">
|
|
76
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#67E8F9"/>
|
|
77
|
+
<react_native_svg_1.Stop offset="35%" stopColor="#818CF8"/>
|
|
78
|
+
<react_native_svg_1.Stop offset="70%" stopColor="#C084FC"/>
|
|
79
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#F472B6"/>
|
|
57
80
|
</react_native_svg_1.LinearGradient>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<react_native_svg_1.Stop offset="
|
|
81
|
+
|
|
82
|
+
{/* Eyes Radiant Iris */}
|
|
83
|
+
<react_native_svg_1.RadialGradient id="bs_iris" cx="38%" cy="36%" r="65%">
|
|
84
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#FEF08A"/>
|
|
85
|
+
<react_native_svg_1.Stop offset="40%" stopColor="#FBBF24"/>
|
|
86
|
+
<react_native_svg_1.Stop offset="80%" stopColor="#F59E0B"/>
|
|
87
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#D97706"/>
|
|
62
88
|
</react_native_svg_1.RadialGradient>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
89
|
+
|
|
90
|
+
{/* Beak Gradient */}
|
|
91
|
+
<react_native_svg_1.LinearGradient id="bs_beak" x1="124" y1="120" x2="132" y2="136" gradientUnits="userSpaceOnUse">
|
|
92
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#FDE047"/>
|
|
93
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#EA580C"/>
|
|
66
94
|
</react_native_svg_1.LinearGradient>
|
|
95
|
+
|
|
96
|
+
{/* Diagnostic Lens Glass Flare */}
|
|
97
|
+
<react_native_svg_1.RadialGradient id="bs_lens" cx="40%" cy="35%" r="65%">
|
|
98
|
+
<react_native_svg_1.Stop offset="0%" stopColor="#A5F3FC" stopOpacity={0.4}/>
|
|
99
|
+
<react_native_svg_1.Stop offset="50%" stopColor="#38BDF8" stopOpacity={0.18}/>
|
|
100
|
+
<react_native_svg_1.Stop offset="100%" stopColor="#0284C7" stopOpacity={0.05}/>
|
|
101
|
+
</react_native_svg_1.RadialGradient>
|
|
67
102
|
</react_native_svg_1.Defs>
|
|
68
103
|
|
|
69
|
-
{/* Rounded App Tile
|
|
70
|
-
<react_native_svg_1.Rect x="
|
|
71
|
-
<react_native_svg_1.Rect x="
|
|
104
|
+
{/* ── 1. Rounded App Tile Base (Full Edge-to-Edge) ── */}
|
|
105
|
+
<react_native_svg_1.Rect x="2" y="2" width="252" height="252" rx="58" fill="url(#bs_tile)"/>
|
|
106
|
+
<react_native_svg_1.Rect x="2" y="2" width="252" height="252" rx="58" fill="url(#bs_top_glow)"/>
|
|
107
|
+
<react_native_svg_1.Rect x="2" y="2" width="252" height="252" rx="58" fill="none" stroke="url(#bs_border)" strokeWidth="3.5"/>
|
|
108
|
+
|
|
109
|
+
{/* ── 2. Owl Outer Wings (Layered behind) ── */}
|
|
110
|
+
<react_native_svg_1.Path d="M62 120 C42 152 46 194 76 210 C68 178 66 146 80 120 Z" fill="#1E1B4B" stroke="url(#bs_beam)" strokeWidth="3" strokeOpacity={0.75}/>
|
|
111
|
+
<react_native_svg_1.Path d="M194 120 C214 152 210 194 180 210 C188 178 190 146 176 120 Z" fill="#1E1B4B" stroke="url(#bs_beam)" strokeWidth="3" strokeOpacity={0.75}/>
|
|
72
112
|
|
|
73
|
-
{/* Owl
|
|
74
|
-
<react_native_svg_1.Path d="
|
|
113
|
+
{/* ── 3. Owl Body Contour ── */}
|
|
114
|
+
<react_native_svg_1.Path d="M58 146 C54 98 68 64 88 52 L98 34 L118 56 Q128 50 138 56 L158 34 L168 52 C188 64 202 98 198 146 C202 180 186 208 152 216 C140 220 116 220 104 216 C70 208 54 180 58 146 Z" fill="url(#bs_body)" stroke="url(#bs_beam)" strokeWidth="4.5" strokeLinejoin="round"/>
|
|
75
115
|
|
|
76
|
-
{/*
|
|
77
|
-
<react_native_svg_1.Path d="
|
|
78
|
-
<react_native_svg_1.Path d="
|
|
116
|
+
{/* Inner Ear Highlights */}
|
|
117
|
+
<react_native_svg_1.Path d="M98 42 L112 56 L102 57 Z" fill="#67E8F9" opacity={0.6}/>
|
|
118
|
+
<react_native_svg_1.Path d="M158 42 L144 56 L154 57 Z" fill="#F472B6" opacity={0.6}/>
|
|
79
119
|
|
|
80
|
-
{/*
|
|
81
|
-
<react_native_svg_1.Rect x="
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
<react_native_svg_1.Path d="
|
|
85
|
-
<react_native_svg_1.Path d="
|
|
86
|
-
<react_native_svg_1.Path d="M130 169 L126 185" stroke="#EC4899"/>
|
|
120
|
+
{/* ── 4. Chest Terminal & Code Braces ── */}
|
|
121
|
+
<react_native_svg_1.Rect x="98" y="162" width="60" height="38" rx="10" fill="#050811" stroke="url(#bs_beam)" strokeWidth="2.5"/>
|
|
122
|
+
<react_native_svg_1.G strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" fill="none">
|
|
123
|
+
<react_native_svg_1.Path d="M116 174 L108 181 L116 188" stroke="#38BDF8"/>
|
|
124
|
+
<react_native_svg_1.Path d="M140 174 L148 181 L140 188" stroke="#38BDF8"/>
|
|
125
|
+
<react_native_svg_1.Path d="M131 171 L125 191" stroke="#F43F5E"/>
|
|
87
126
|
</react_native_svg_1.G>
|
|
88
127
|
|
|
89
|
-
{/*
|
|
90
|
-
<react_native_svg_1.Path d="M128
|
|
128
|
+
{/* ── 5. Facial Mask Plate ── */}
|
|
129
|
+
<react_native_svg_1.Path d="M128 88 C152 64 192 72 192 104 C192 132 162 152 128 152 C94 152 64 132 64 104 C64 72 104 64 128 88 Z" fill="#1E1B4B" stroke="url(#bs_beam)" strokeWidth="2.8"/>
|
|
130
|
+
|
|
131
|
+
{/* ── 6. Right Eye (Glowing Owl Eye) ── */}
|
|
132
|
+
<react_native_svg_1.Circle cx="156" cy="106" r="19" fill="url(#bs_iris)" stroke="#0F172A" strokeWidth="2.5"/>
|
|
133
|
+
<react_native_svg_1.Circle cx="156" cy="106" r="9.5" fill="#0B0F19"/>
|
|
134
|
+
<react_native_svg_1.Circle cx="159.5" cy="102.5" r="3.5" fill="#FFFFFF"/>
|
|
135
|
+
<react_native_svg_1.Circle cx="153" cy="109.5" r="1.8" fill="#FFFFFF" opacity={0.85}/>
|
|
91
136
|
|
|
92
|
-
{/*
|
|
93
|
-
|
|
94
|
-
<react_native_svg_1.Circle cx="
|
|
95
|
-
<react_native_svg_1.
|
|
96
|
-
<react_native_svg_1.
|
|
137
|
+
{/* ── 7. Left Eye (Diagnostic Magnifier Lens) ── */}
|
|
138
|
+
{/* Magnifier Glass Glow */}
|
|
139
|
+
<react_native_svg_1.Circle cx="94" cy="104" r="30" fill="url(#bs_lens)" stroke="url(#bs_beam)" strokeWidth="6"/>
|
|
140
|
+
<react_native_svg_1.Line x1="72" y1="126" x2="48" y2="152" stroke="#0B0F19" strokeWidth="13" strokeLinecap="round"/>
|
|
141
|
+
<react_native_svg_1.Line x1="72" y1="126" x2="48" y2="152" stroke="url(#bs_beam)" strokeWidth="8" strokeLinecap="round"/>
|
|
97
142
|
|
|
98
|
-
{/*
|
|
99
|
-
<react_native_svg_1.Circle cx="
|
|
100
|
-
<react_native_svg_1.Circle cx="
|
|
101
|
-
<react_native_svg_1.Circle cx="
|
|
102
|
-
<react_native_svg_1.Circle cx="
|
|
143
|
+
{/* Eye Inside Magnifier */}
|
|
144
|
+
<react_native_svg_1.Circle cx="94" cy="104" r="21" fill="url(#bs_iris)" stroke="#0F172A" strokeWidth="2.5"/>
|
|
145
|
+
<react_native_svg_1.Circle cx="94" cy="104" r="10.5" fill="#0B0F19"/>
|
|
146
|
+
<react_native_svg_1.Circle cx="98" cy="100" r="4" fill="#FFFFFF"/>
|
|
147
|
+
<react_native_svg_1.Circle cx="90.5" cy="107.5" r="2" fill="#FFFFFF" opacity={0.85}/>
|
|
103
148
|
|
|
104
|
-
{/*
|
|
105
|
-
<react_native_svg_1.
|
|
106
|
-
<react_native_svg_1.Line x1="76" y1="124" x2="55" y2="148" stroke="url(#bs_beam)" strokeWidth="7" strokeLinecap="round"/>
|
|
107
|
-
<react_native_svg_1.Circle cx="96" cy="104" r="28" fill="#38BDF8" fillOpacity={0.12} stroke="url(#bs_beam)" strokeWidth="6"/>
|
|
149
|
+
{/* Lens Reflection Highlight */}
|
|
150
|
+
<react_native_svg_1.Path d="M74 94 A26 26 0 0 1 106 78" stroke="#FFFFFF" strokeWidth="3" strokeLinecap="round" opacity={0.65} fill="none"/>
|
|
108
151
|
|
|
109
|
-
{/* Beak */}
|
|
110
|
-
<react_native_svg_1.Path d="M123
|
|
152
|
+
{/* ── 8. Beak ── */}
|
|
153
|
+
<react_native_svg_1.Path d="M123 120 Q128 118 133 120 Q131.5 133 128 137 Q124.5 133 123 120 Z" fill="url(#bs_beak)" stroke="#78350F" strokeWidth="1"/>
|
|
111
154
|
</react_native_svg_1.default>);
|
|
112
155
|
};
|
|
113
156
|
exports.BrandSquareIcon = BrandSquareIcon;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
interface EmptyStateProps {
|
|
3
3
|
isSearch?: boolean;
|
|
4
|
-
|
|
4
|
+
searchQuery?: string;
|
|
5
|
+
customTitle?: string;
|
|
6
|
+
customSub?: string;
|
|
7
|
+
onClearSearch?: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const EmptyState: React.NamedExoticComponent<EmptyStateProps>;
|
|
5
10
|
export default EmptyState;
|
|
@@ -46,7 +46,7 @@ const NetworkIcons_1 = require("./NetworkIcons");
|
|
|
46
46
|
// Stylesheet
|
|
47
47
|
const AppColors_1 = require("../styles/AppColors");
|
|
48
48
|
const styles_1 = __importDefault(require("../styles"));
|
|
49
|
-
const EmptyState = react_1.default.memo(function EmptyState({ isSearch }) {
|
|
49
|
+
const EmptyState = react_1.default.memo(function EmptyState({ isSearch, searchQuery, customTitle, customSub, onClearSearch, }) {
|
|
50
50
|
const iconPulse = (0, react_1.useRef)(new react_native_1.Animated.Value(1)).current;
|
|
51
51
|
(0, react_1.useEffect)(() => {
|
|
52
52
|
const loop = react_native_1.Animated.loop(react_native_1.Animated.sequence([
|
|
@@ -76,13 +76,19 @@ const EmptyState = react_1.default.memo(function EmptyState({ isSearch }) {
|
|
|
76
76
|
<NetworkIcons_1.EmptyRadarIcon color={AppColors_1.AppColors.purple} size={32}/>
|
|
77
77
|
</react_native_1.Animated.View>
|
|
78
78
|
<react_native_1.Text style={styles_1.default.emptyTitle}>
|
|
79
|
-
{isSearch ? 'No matching
|
|
79
|
+
{customTitle || (isSearch ? 'No matching results' : 'No network activity')}
|
|
80
80
|
</react_native_1.Text>
|
|
81
81
|
<react_native_1.Text style={styles_1.default.emptySub}>
|
|
82
|
-
{
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
{customSub ||
|
|
83
|
+
(isSearch
|
|
84
|
+
? searchQuery
|
|
85
|
+
? `No items matched "${searchQuery}"`
|
|
86
|
+
: 'Try adjusting your filters or search keywords.'
|
|
87
|
+
: 'Listening for incoming API calls...')}
|
|
85
88
|
</react_native_1.Text>
|
|
89
|
+
{isSearch && onClearSearch && (<TouchableScale_1.default style={styles_1.default.reloadBtn} onPress={onClearSearch}>
|
|
90
|
+
<react_native_1.Text style={styles_1.default.reloadBtnText}>Clear Search & Filters</react_native_1.Text>
|
|
91
|
+
</TouchableScale_1.default>)}
|
|
86
92
|
{!isSearch && (<TouchableScale_1.default style={styles_1.default.reloadBtn} onPress={handleReload}>
|
|
87
93
|
<react_native_1.Text style={styles_1.default.reloadBtnText}>Reload App</react_native_1.Text>
|
|
88
94
|
</TouchableScale_1.default>)}
|
|
@@ -42,6 +42,7 @@ const InspectorContext_1 = require("./InspectorContext");
|
|
|
42
42
|
const AnalyticsEventCard_1 = __importDefault(require("../AnalyticsEventCard"));
|
|
43
43
|
const AnalyticsFilterModal_1 = __importDefault(require("./AnalyticsFilterModal"));
|
|
44
44
|
const EndOfListFooter_1 = __importDefault(require("../EndOfListFooter"));
|
|
45
|
+
const EmptyState_1 = __importDefault(require("../EmptyState"));
|
|
45
46
|
const styles_1 = __importDefault(require("../../styles"));
|
|
46
47
|
const AppColors_1 = require("../../styles/AppColors");
|
|
47
48
|
const AppFonts_1 = require("../../styles/AppFonts");
|
|
@@ -888,9 +889,29 @@ const AnalyticsTab = react_1.default.memo(() => {
|
|
|
888
889
|
<react_native_1.View style={styles_1.default.searchContainer}>
|
|
889
890
|
<NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={16}/>
|
|
890
891
|
<react_native_1.TextInput placeholder="Search events..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={analyticsSearch} onChangeText={setAnalyticsSearch} style={styles_1.default.searchInput} autoCorrect={false} autoCapitalize="none"/>
|
|
891
|
-
{analyticsSearch.length > 0 && (<react_native_1.
|
|
892
|
-
|
|
893
|
-
|
|
892
|
+
{analyticsSearch.length > 0 && (<react_native_1.View style={{
|
|
893
|
+
flexDirection: 'row',
|
|
894
|
+
alignItems: 'center',
|
|
895
|
+
gap: 4,
|
|
896
|
+
}}>
|
|
897
|
+
<react_native_1.View style={{
|
|
898
|
+
backgroundColor: `${AppColors_1.AppColors.purple}20`,
|
|
899
|
+
borderRadius: 10,
|
|
900
|
+
paddingHorizontal: 6,
|
|
901
|
+
paddingVertical: 1.5,
|
|
902
|
+
}}>
|
|
903
|
+
<react_native_1.Text style={{
|
|
904
|
+
color: AppColors_1.AppColors.purple,
|
|
905
|
+
fontSize: 9.5,
|
|
906
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
907
|
+
}}>
|
|
908
|
+
{filteredAnalyticsEvents.length}
|
|
909
|
+
</react_native_1.Text>
|
|
910
|
+
</react_native_1.View>
|
|
911
|
+
<react_native_1.Pressable onPress={() => setAnalyticsSearch('')} hitSlop={10} style={styles_1.default.clearBtn}>
|
|
912
|
+
<NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={13}/>
|
|
913
|
+
</react_native_1.Pressable>
|
|
914
|
+
</react_native_1.View>)}
|
|
894
915
|
</react_native_1.View>
|
|
895
916
|
<react_native_1.View style={styles_1.default.toolbarRight}>
|
|
896
917
|
<react_native_1.TouchableOpacity style={[
|
|
@@ -945,21 +966,11 @@ const AnalyticsTab = react_1.default.memo(() => {
|
|
|
945
966
|
<AnalyticsFilterModal_1.default visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)}/>
|
|
946
967
|
|
|
947
968
|
<react_native_1.View style={{ flex: 1 }} onLayout={() => setIsAnalyticsLayoutReady(true)}>
|
|
948
|
-
{isAnalyticsLayoutReady ? (<react_native_1.FlatList data={filteredAnalyticsEvents} keyExtractor={keyExtractor} ListHeaderComponent={AnalyticsHeader} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
{analyticsSearch.length > 0
|
|
954
|
-
? 'No matching events'
|
|
955
|
-
: 'No analytics events yet'}
|
|
956
|
-
</react_native_1.Text>
|
|
957
|
-
<react_native_1.Text style={styles_1.default.emptySub}>
|
|
958
|
-
{analyticsSearch.length > 0
|
|
959
|
-
? 'Try adjusting your search.'
|
|
960
|
-
: 'Call setupAnalyticsLogger(analytics()) at app start.'}
|
|
961
|
-
</react_native_1.Text>
|
|
962
|
-
</react_native_1.View>} ListFooterComponent={filteredAnalyticsEvents.length > 0 ? (<EndOfListFooter_1.default count={filteredAnalyticsEvents.length} label="events"/>) : null} contentContainerStyle={[
|
|
969
|
+
{isAnalyticsLayoutReady ? (<react_native_1.FlatList data={filteredAnalyticsEvents} keyExtractor={keyExtractor} ListHeaderComponent={AnalyticsHeader} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<EmptyState_1.default isSearch={analyticsSearch.length > 0} searchQuery={analyticsSearch} customTitle={analyticsSearch.length > 0
|
|
970
|
+
? 'No matching analytics events'
|
|
971
|
+
: 'No analytics events yet'} customSub={analyticsSearch.length > 0
|
|
972
|
+
? `No events matched "${analyticsSearch}"`
|
|
973
|
+
: 'Call setupAnalyticsLogger(analytics()) at app start.'} onClearSearch={() => setAnalyticsSearch('')}/>} ListFooterComponent={filteredAnalyticsEvents.length > 0 ? (<EndOfListFooter_1.default count={filteredAnalyticsEvents.length} label="events"/>) : null} contentContainerStyle={[
|
|
963
974
|
styles_1.default.listContent,
|
|
964
975
|
filteredAnalyticsEvents.length === 0 && {
|
|
965
976
|
flexGrow: 1,
|
|
@@ -518,7 +518,12 @@ const ConsoleTab = react_1.default.memo(() => {
|
|
|
518
518
|
</react_native_1.ScrollView>
|
|
519
519
|
</react_native_1.View>
|
|
520
520
|
|
|
521
|
-
<react_native_1.FlatList data={filteredConsoleLogs} keyExtractor={keyExtractor} ListHeaderComponent={listHeader} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<EmptyState_1.default isSearch={logSearch.length > 0 || logFilters.size > 0}
|
|
521
|
+
<react_native_1.FlatList data={filteredConsoleLogs} keyExtractor={keyExtractor} ListHeaderComponent={listHeader} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<EmptyState_1.default isSearch={logSearch.length > 0 || logFilters.size > 0} searchQuery={logSearch} customTitle={logSearch.length > 0
|
|
522
|
+
? 'No matching console logs'
|
|
523
|
+
: 'No console logs'} onClearSearch={() => {
|
|
524
|
+
setLogSearch('');
|
|
525
|
+
setLogFilters(new Set());
|
|
526
|
+
}}/>} ListFooterComponent={filteredConsoleLogs.length > 0 ? (<EndOfListFooter_1.default count={filteredConsoleLogs.length} label="logs"/>) : null} contentContainerStyle={[
|
|
522
527
|
styles_1.default.listContent,
|
|
523
528
|
filteredConsoleLogs.length === 0 && { flexGrow: 1 },
|
|
524
529
|
]} keyboardShouldPersistTaps="handled"/>
|
|
@@ -44,6 +44,7 @@ const TouchableScale_1 = __importDefault(require("../TouchableScale"));
|
|
|
44
44
|
const SegmentedTabs_1 = __importDefault(require("../SegmentedTabs"));
|
|
45
45
|
const HighlightText_1 = __importDefault(require("../HighlightText"));
|
|
46
46
|
const JsonViewer_1 = __importDefault(require("../JsonViewer"));
|
|
47
|
+
const CopyButton_1 = __importDefault(require("../CopyButton"));
|
|
47
48
|
const AppColors_1 = require("../../styles/AppColors");
|
|
48
49
|
const AppFonts_1 = require("../../styles/AppFonts");
|
|
49
50
|
const crashHandler_1 = require("../../customHooks/crashHandler");
|
|
@@ -366,9 +367,20 @@ const CrashDetail = react_1.default.memo(() => {
|
|
|
366
367
|
{activeSubTab === 'diagnostics' && (<react_native_1.View style={{ gap: 12 }}>
|
|
367
368
|
{/* Device & OS Diagnostics Card */}
|
|
368
369
|
<react_native_1.View style={localStyles.sectionCard}>
|
|
369
|
-
<react_native_1.View style={
|
|
370
|
-
|
|
371
|
-
|
|
370
|
+
<react_native_1.View style={[
|
|
371
|
+
localStyles.sectionCardHeader,
|
|
372
|
+
{ justifyContent: 'space-between' },
|
|
373
|
+
]}>
|
|
374
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
375
|
+
<NetworkIcons_1.GlobeIcon color={AppColors_1.AppColors.purple} size={14}/>
|
|
376
|
+
<react_native_1.Text style={localStyles.sectionCardTitle}>
|
|
377
|
+
{t('crash.deviceEnvironment')}
|
|
378
|
+
</react_native_1.Text>
|
|
379
|
+
</react_native_1.View>
|
|
380
|
+
<CopyButton_1.default value={selectedCrash.deviceInfo || {
|
|
381
|
+
platform: react_native_1.Platform.OS,
|
|
382
|
+
osVersion: String(react_native_1.Platform.Version),
|
|
383
|
+
}} label="Diagnostics"/>
|
|
372
384
|
</react_native_1.View>
|
|
373
385
|
|
|
374
386
|
<react_native_1.View style={localStyles.diagGrid}>
|
|
@@ -418,9 +430,17 @@ const CrashDetail = react_1.default.memo(() => {
|
|
|
418
430
|
|
|
419
431
|
{/* Memory Metrics Card */}
|
|
420
432
|
{selectedCrash.memoryInfo && (<react_native_1.View style={localStyles.sectionCard}>
|
|
421
|
-
<react_native_1.View style={
|
|
422
|
-
|
|
423
|
-
|
|
433
|
+
<react_native_1.View style={[
|
|
434
|
+
localStyles.sectionCardHeader,
|
|
435
|
+
{ justifyContent: 'space-between' },
|
|
436
|
+
]}>
|
|
437
|
+
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
438
|
+
<NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={14}/>
|
|
439
|
+
<react_native_1.Text style={localStyles.sectionCardTitle}>
|
|
440
|
+
{t('crash.jsHeapMemory')}
|
|
441
|
+
</react_native_1.Text>
|
|
442
|
+
</react_native_1.View>
|
|
443
|
+
<CopyButton_1.default value={selectedCrash.memoryInfo} label="Memory Info"/>
|
|
424
444
|
</react_native_1.View>
|
|
425
445
|
|
|
426
446
|
<react_native_1.View style={localStyles.diagGrid}>
|
|
@@ -443,6 +463,13 @@ const CrashDetail = react_1.default.memo(() => {
|
|
|
443
463
|
|
|
444
464
|
{/* 3. BREADCRUMBS TAB */}
|
|
445
465
|
{activeSubTab === 'breadcrumbs' && (<react_native_1.View style={{ gap: 10 }}>
|
|
466
|
+
{selectedCrash.breadcrumbs && selectedCrash.breadcrumbs.length > 0 && (<react_native_1.View style={{
|
|
467
|
+
flexDirection: 'row',
|
|
468
|
+
justifyContent: 'flex-end',
|
|
469
|
+
marginBottom: 2,
|
|
470
|
+
}}>
|
|
471
|
+
<CopyButton_1.default value={selectedCrash.breadcrumbs} label="All Breadcrumbs"/>
|
|
472
|
+
</react_native_1.View>)}
|
|
446
473
|
{selectedCrash.breadcrumbs && selectedCrash.breadcrumbs.length > 0 ? (selectedCrash.breadcrumbs.map((b, idx) => (<react_native_1.View key={`crumb_${idx}`} style={localStyles.breadcrumbCard}>
|
|
447
474
|
<react_native_1.View style={localStyles.breadcrumbHeader}>
|
|
448
475
|
<react_native_1.View style={localStyles.breadcrumbTag}>
|
|
@@ -450,9 +477,16 @@ const CrashDetail = react_1.default.memo(() => {
|
|
|
450
477
|
{b.type.toUpperCase()}
|
|
451
478
|
</react_native_1.Text>
|
|
452
479
|
</react_native_1.View>
|
|
453
|
-
<react_native_1.
|
|
454
|
-
|
|
455
|
-
|
|
480
|
+
<react_native_1.View style={{
|
|
481
|
+
flexDirection: 'row',
|
|
482
|
+
alignItems: 'center',
|
|
483
|
+
gap: 8,
|
|
484
|
+
}}>
|
|
485
|
+
<react_native_1.Text style={localStyles.breadcrumbTime}>
|
|
486
|
+
{new Date(b.timestamp).toLocaleTimeString()}
|
|
487
|
+
</react_native_1.Text>
|
|
488
|
+
<CopyButton_1.default value={`${new Date(b.timestamp).toLocaleTimeString()} [${b.type.toUpperCase()}] ${b.message}${b.data ? ' ' + JSON.stringify(b.data) : ''}`} label="Breadcrumb"/>
|
|
489
|
+
</react_native_1.View>
|
|
456
490
|
</react_native_1.View>
|
|
457
491
|
<react_native_1.Text style={localStyles.breadcrumbMessage}>{b.message}</react_native_1.Text>
|
|
458
492
|
{b.data && (<react_native_1.View style={{ marginTop: 6 }}>
|
|
@@ -345,9 +345,25 @@ const CrashTab = react_1.default.memo(() => {
|
|
|
345
345
|
<react_native_1.View style={localStyles.searchInputWrapper}>
|
|
346
346
|
<NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
|
|
347
347
|
<react_native_1.TextInput value={searchQuery} onChangeText={setSearchQuery} placeholder={t('crash.searchPlaceholder')} placeholderTextColor={AppColors_1.AppColors.grayTextWeak} style={localStyles.searchInput} autoCapitalize="none" autoCorrect={false}/>
|
|
348
|
-
{searchQuery.length > 0 && (<react_native_1.
|
|
349
|
-
<
|
|
350
|
-
|
|
348
|
+
{searchQuery.length > 0 && (<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
|
|
349
|
+
<react_native_1.View style={{
|
|
350
|
+
backgroundColor: `${AppColors_1.AppColors.purple}20`,
|
|
351
|
+
borderRadius: 10,
|
|
352
|
+
paddingHorizontal: 6,
|
|
353
|
+
paddingVertical: 1.5,
|
|
354
|
+
}}>
|
|
355
|
+
<react_native_1.Text style={{
|
|
356
|
+
color: AppColors_1.AppColors.purple,
|
|
357
|
+
fontSize: 9.5,
|
|
358
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
359
|
+
}}>
|
|
360
|
+
{filteredList.length}
|
|
361
|
+
</react_native_1.Text>
|
|
362
|
+
</react_native_1.View>
|
|
363
|
+
<react_native_1.TouchableOpacity onPress={() => setSearchQuery('')} hitSlop={8}>
|
|
364
|
+
<NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
|
|
365
|
+
</react_native_1.TouchableOpacity>
|
|
366
|
+
</react_native_1.View>)}
|
|
351
367
|
</react_native_1.View>
|
|
352
368
|
|
|
353
369
|
{/* Crash Filters */}
|
|
@@ -419,6 +435,21 @@ const CrashTab = react_1.default.memo(() => {
|
|
|
419
435
|
? t('crash.emptySearchSubtitle')
|
|
420
436
|
: t('crash.emptySubtitle')}
|
|
421
437
|
</react_native_1.Text>
|
|
438
|
+
{searchQuery.length > 0 && (<TouchableScale_1.default onPress={() => setSearchQuery('')} style={{
|
|
439
|
+
marginTop: 10,
|
|
440
|
+
paddingHorizontal: 14,
|
|
441
|
+
paddingVertical: 7,
|
|
442
|
+
borderRadius: 8,
|
|
443
|
+
backgroundColor: AppColors_1.AppColors.purple,
|
|
444
|
+
}}>
|
|
445
|
+
<react_native_1.Text style={{
|
|
446
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
447
|
+
fontSize: 11.5,
|
|
448
|
+
color: AppColors_1.AppColors.white,
|
|
449
|
+
}}>
|
|
450
|
+
Clear Search
|
|
451
|
+
</react_native_1.Text>
|
|
452
|
+
</TouchableScale_1.default>)}
|
|
422
453
|
</react_native_1.ScrollView>) : (<react_native_1.FlatList data={filteredList} keyExtractor={item => item.id} renderItem={renderCard} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} contentContainerStyle={localStyles.listContent} showsVerticalScrollIndicator={false} ListFooterComponent={<EndOfListFooter_1.default />}/>)}
|
|
423
454
|
|
|
424
455
|
{/* Filter Modal */}
|