react-native-inapp-inspector 2.3.5 → 2.3.7
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/analytics.d.ts +0 -4
- package/dist/commonjs/analytics.js +0 -4
- package/dist/commonjs/bundle.d.ts +0 -4
- package/dist/commonjs/bundle.js +0 -4
- package/dist/commonjs/components/AnalyticsDetail.js +18 -27
- package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
- package/dist/commonjs/components/AnalyticsGraph.js +10 -15
- package/dist/commonjs/components/AppHeaderLogo.js +0 -3
- package/dist/commonjs/components/BrandCircleIcon.js +15 -15
- package/dist/commonjs/components/BrandSquareIcon.js +20 -20
- package/dist/commonjs/components/CodeSnippet.js +6 -19
- package/dist/commonjs/components/ConsoleLogCard.js +0 -1
- package/dist/commonjs/components/CopyButton.js +0 -4
- package/dist/commonjs/components/DiffViewer.js +0 -2
- package/dist/commonjs/components/DomainHeader.js +0 -4
- package/dist/commonjs/components/EmptyState.js +0 -3
- package/dist/commonjs/components/ErrorBoundary.js +5 -10
- package/dist/commonjs/components/HeadersSection.js +0 -5
- package/dist/commonjs/components/HighlightText.js +1 -4
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
- package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
- package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
- package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
- package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
- package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
- package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
- package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
- package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
- package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
- package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
- package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
- package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
- package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/commonjs/components/JsonViewer.js +3 -10
- package/dist/commonjs/components/LogCard.js +7 -7
- package/dist/commonjs/components/MetaAccordion.js +1 -7
- package/dist/commonjs/components/NetworkIcons.js +12 -16
- package/dist/commonjs/components/SectionHeader.js +0 -4
- package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Slider.js +6 -6
- package/dist/commonjs/components/SourcePageCard.js +0 -4
- package/dist/commonjs/components/TreeNode.js +0 -4
- package/dist/commonjs/console.d.ts +0 -4
- package/dist/commonjs/console.js +0 -4
- package/dist/commonjs/constants/index.js +6 -9
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -0
- package/dist/commonjs/constants/telemetryConfig.js +6 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -3
- package/dist/commonjs/crash.d.ts +0 -4
- package/dist/commonjs/crash.js +0 -4
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
- package/dist/commonjs/customHooks/consoleLogger.js +0 -16
- package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
- package/dist/commonjs/customHooks/crashHandler.js +0 -55
- package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
- package/dist/commonjs/customHooks/logFilters.js +0 -11
- package/dist/commonjs/customHooks/networkLogger.js +2 -13
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
- package/dist/commonjs/customHooks/performanceTracker.js +0 -31
- package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
- package/dist/commonjs/customHooks/reduxLogger.js +0 -51
- package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
- package/dist/commonjs/customHooks/storageInspector.js +1 -56
- package/dist/commonjs/decorators/index.d.ts +0 -37
- package/dist/commonjs/decorators/index.js +0 -42
- package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/commonjs/helpers/index.d.ts +0 -7
- package/dist/commonjs/helpers/index.js +1 -42
- package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
- package/dist/commonjs/helpers/memoryManager.js +0 -13
- package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
- package/dist/commonjs/helpers/searchQueryParser.js +0 -18
- package/dist/commonjs/helpers/settingsStore.js +0 -8
- package/dist/commonjs/helpers/telemetry.d.ts +2 -0
- package/dist/commonjs/helpers/telemetry.js +136 -0
- package/dist/commonjs/i18n/index.d.ts +0 -9
- package/dist/commonjs/i18n/index.js +0 -15
- package/dist/commonjs/index.js +15 -97
- package/dist/commonjs/native/NativeInspector.d.ts +0 -54
- package/dist/commonjs/native/NativeInspector.js +0 -56
- package/dist/commonjs/network.d.ts +0 -4
- package/dist/commonjs/network.js +0 -4
- package/dist/commonjs/performance.d.ts +0 -4
- package/dist/commonjs/performance.js +0 -4
- package/dist/commonjs/redux.d.ts +0 -4
- package/dist/commonjs/redux.js +0 -4
- package/dist/commonjs/storage.d.ts +0 -4
- package/dist/commonjs/storage.js +0 -4
- package/dist/commonjs/styles/AppColors.d.ts +0 -3
- package/dist/commonjs/styles/AppColors.js +15 -30
- package/dist/commonjs/styles/AppFonts.d.ts +0 -4
- package/dist/commonjs/styles/AppFonts.js +0 -4
- package/dist/commonjs/styles/common.js +0 -11
- package/dist/commonjs/styles/index.js +0 -8
- package/dist/commonjs/types/enums.js +0 -3
- package/dist/commonjs/types/interfaces.d.ts +3 -3
- package/dist/esm/analytics.d.ts +0 -4
- package/dist/esm/analytics.js +0 -4
- package/dist/esm/bundle.d.ts +0 -4
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/components/AnalyticsDetail.js +18 -27
- package/dist/esm/components/AnalyticsEventCard.js +9 -12
- package/dist/esm/components/AnalyticsGraph.js +10 -15
- package/dist/esm/components/AppHeaderLogo.js +0 -3
- package/dist/esm/components/BrandCircleIcon.js +15 -15
- package/dist/esm/components/BrandSquareIcon.js +20 -20
- package/dist/esm/components/CodeSnippet.js +6 -19
- package/dist/esm/components/ConsoleLogCard.js +0 -1
- package/dist/esm/components/CopyButton.js +0 -4
- package/dist/esm/components/DiffViewer.js +0 -2
- package/dist/esm/components/DomainHeader.js +0 -4
- package/dist/esm/components/EmptyState.js +0 -3
- package/dist/esm/components/ErrorBoundary.js +5 -10
- package/dist/esm/components/HeadersSection.js +0 -5
- package/dist/esm/components/HighlightText.js +1 -4
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/esm/components/Inspector/BundleTab.js +56 -84
- package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
- package/dist/esm/components/Inspector/CrashDetail.js +18 -20
- package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/esm/components/Inspector/CrashTab.js +11 -20
- package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/esm/components/Inspector/FabLauncher.js +1 -1
- package/dist/esm/components/Inspector/InspectorContext.js +0 -2
- package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
- package/dist/esm/components/Inspector/LogDetail.js +27 -29
- package/dist/esm/components/Inspector/MainScreen.js +9 -10
- package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
- package/dist/esm/components/Inspector/NetworkTab.js +14 -14
- package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
- package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
- package/dist/esm/components/Inspector/ReduxTab.js +11 -20
- package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
- package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Inspector/StorageTab.js +14 -26
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/esm/components/JsonViewer.js +3 -10
- package/dist/esm/components/LogCard.js +7 -7
- package/dist/esm/components/MetaAccordion.js +1 -7
- package/dist/esm/components/NetworkIcons.js +12 -16
- package/dist/esm/components/SectionHeader.js +0 -4
- package/dist/esm/components/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Slider.js +6 -6
- package/dist/esm/components/SourcePageCard.js +0 -4
- package/dist/esm/components/TreeNode.js +0 -4
- package/dist/esm/console.d.ts +0 -4
- package/dist/esm/console.js +0 -4
- package/dist/esm/constants/index.js +6 -9
- package/dist/esm/constants/telemetryConfig.d.ts +3 -0
- package/dist/esm/constants/telemetryConfig.js +3 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -3
- package/dist/esm/crash.d.ts +0 -4
- package/dist/esm/crash.js +0 -4
- package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/esm/customHooks/analyticsLogger.js +3 -59
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
- package/dist/esm/customHooks/consoleLogger.js +0 -16
- package/dist/esm/customHooks/crashHandler.d.ts +0 -28
- package/dist/esm/customHooks/crashHandler.js +0 -55
- package/dist/esm/customHooks/logFilters.d.ts +0 -4
- package/dist/esm/customHooks/logFilters.js +0 -11
- package/dist/esm/customHooks/networkLogger.js +2 -13
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
- package/dist/esm/customHooks/performanceTracker.js +0 -31
- package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
- package/dist/esm/customHooks/reduxLogger.js +0 -51
- package/dist/esm/customHooks/storageInspector.d.ts +0 -40
- package/dist/esm/customHooks/storageInspector.js +1 -56
- package/dist/esm/decorators/index.d.ts +0 -37
- package/dist/esm/decorators/index.js +0 -42
- package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/esm/helpers/index.d.ts +0 -7
- package/dist/esm/helpers/index.js +1 -42
- package/dist/esm/helpers/memoryManager.d.ts +0 -11
- package/dist/esm/helpers/memoryManager.js +0 -13
- package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
- package/dist/esm/helpers/searchQueryParser.js +0 -18
- package/dist/esm/helpers/settingsStore.js +0 -8
- package/dist/esm/helpers/telemetry.d.ts +2 -0
- package/dist/esm/helpers/telemetry.js +132 -0
- package/dist/esm/i18n/index.d.ts +0 -9
- package/dist/esm/i18n/index.js +0 -15
- package/dist/esm/index.js +15 -97
- package/dist/esm/native/NativeInspector.d.ts +0 -54
- package/dist/esm/native/NativeInspector.js +0 -56
- package/dist/esm/network.d.ts +0 -4
- package/dist/esm/network.js +0 -4
- package/dist/esm/performance.d.ts +0 -4
- package/dist/esm/performance.js +0 -4
- package/dist/esm/redux.d.ts +0 -4
- package/dist/esm/redux.js +0 -4
- package/dist/esm/storage.d.ts +0 -4
- package/dist/esm/storage.js +0 -4
- package/dist/esm/styles/AppColors.d.ts +0 -3
- package/dist/esm/styles/AppColors.js +15 -30
- package/dist/esm/styles/AppFonts.d.ts +0 -4
- package/dist/esm/styles/AppFonts.js +0 -4
- package/dist/esm/styles/common.js +0 -11
- package/dist/esm/styles/index.js +0 -8
- package/dist/esm/types/enums.js +0 -3
- package/dist/esm/types/interfaces.d.ts +3 -3
- package/package.json +2 -2
- package/src/constants/telemetryConfig.ts +6 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/telemetry.ts +161 -0
- package/src/index.tsx +15 -1
- package/src/types/interfaces.ts +3 -0
|
@@ -10,10 +10,8 @@ import { copyToClipboard } from '../../helpers';
|
|
|
10
10
|
import { PackageIcon, SearchIcon, ClearIcon, CircleAlertIcon, LayersIcon, TimelineIcon, LiveStateIcon, StorageIcon, MetadataIcon, FolderIcon, FolderOpenIcon, TrashIcon, LightbulbIcon, SparkleIcon, ClockIcon, RefreshCcwIcon, ExternalLinkIcon, DownloadIcon, } from '../NetworkIcons';
|
|
11
11
|
import Svg, { Path, Rect, Circle, Ellipse, G, Defs, LinearGradient, Stop, } from 'react-native-svg';
|
|
12
12
|
import { analyzeHostAppBundle, getCachedBundleAnalysis, getInitialBundleAnalysis, getHostScriptURL, } from '../../customHooks/bundleAnalyzer';
|
|
13
|
-
// ─── High-Fidelity Vector Package & NPM Logos ────────────────────────────────
|
|
14
13
|
const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
15
14
|
const lowerName = name.toLowerCase();
|
|
16
|
-
// 1. React & React Native (Official Cyan Atom Orbital)
|
|
17
15
|
if (lowerName === 'react' ||
|
|
18
16
|
(lowerName.includes('react-native') &&
|
|
19
17
|
!lowerName.includes('svg') &&
|
|
@@ -31,7 +29,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
31
29
|
</Svg>
|
|
32
30
|
</View>);
|
|
33
31
|
}
|
|
34
|
-
// 2. React Navigation (Official Violet/Cyan Compass)
|
|
35
32
|
if (lowerName.includes('navigation')) {
|
|
36
33
|
return (<View style={[
|
|
37
34
|
bundleStyles.pkgLogoWrap,
|
|
@@ -44,7 +41,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
44
41
|
</Svg>
|
|
45
42
|
</View>);
|
|
46
43
|
}
|
|
47
|
-
// 3. React Native SVG (Bezier Path Vector Art)
|
|
48
44
|
if (lowerName.includes('svg')) {
|
|
49
45
|
return (<View style={[
|
|
50
46
|
bundleStyles.pkgLogoWrap,
|
|
@@ -58,7 +54,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
58
54
|
</Svg>
|
|
59
55
|
</View>);
|
|
60
56
|
}
|
|
61
|
-
// 4. Axios (Official Indigo & Cyan Network Adapter)
|
|
62
57
|
if (lowerName.includes('axios')) {
|
|
63
58
|
return (<View style={[
|
|
64
59
|
bundleStyles.pkgLogoWrap,
|
|
@@ -70,7 +65,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
70
65
|
</Svg>
|
|
71
66
|
</View>);
|
|
72
67
|
}
|
|
73
|
-
// 5. React Native Screens (Software Mansion Deep Indigo Stack)
|
|
74
68
|
if (lowerName.includes('screens') || lowerName.includes('software-mansion')) {
|
|
75
69
|
return (<View style={[
|
|
76
70
|
bundleStyles.pkgLogoWrap,
|
|
@@ -87,7 +81,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
87
81
|
</Svg>
|
|
88
82
|
</View>);
|
|
89
83
|
}
|
|
90
|
-
// 6. Linear Gradient (Vibrant Color Spectrum)
|
|
91
84
|
if (lowerName.includes('gradient')) {
|
|
92
85
|
return (<View style={[
|
|
93
86
|
bundleStyles.pkgLogoWrap,
|
|
@@ -105,7 +98,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
105
98
|
</Svg>
|
|
106
99
|
</View>);
|
|
107
100
|
}
|
|
108
|
-
// 7. i18next & Translations (Emerald Globe)
|
|
109
101
|
if (lowerName.includes('i18n')) {
|
|
110
102
|
return (<View style={[
|
|
111
103
|
bundleStyles.pkgLogoWrap,
|
|
@@ -118,7 +110,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
|
|
|
118
110
|
</Svg>
|
|
119
111
|
</View>);
|
|
120
112
|
}
|
|
121
|
-
// 8. Official Red NPM Logo Box (Universal Default NPM Branding)
|
|
122
113
|
return (<View style={[
|
|
123
114
|
bundleStyles.pkgLogoWrap,
|
|
124
115
|
{ width: size, height: size, backgroundColor: AppColors.npmRed },
|
|
@@ -205,10 +196,8 @@ const BundleCategoryIcon = ({ type, size = 16, color = AppColors.purple }) => {
|
|
|
205
196
|
{renderGlyph()}
|
|
206
197
|
</Svg>);
|
|
207
198
|
};
|
|
208
|
-
// ─── Media File Thumbnail Component ──────────────────────────────────────────
|
|
209
199
|
const MediaPreviewThumbnail = ({ file }) => {
|
|
210
200
|
const [loadError, setLoadError] = useState(false);
|
|
211
|
-
// 1. If it's an SVG file, render an inline vector thumbnail preview
|
|
212
201
|
if (file.ext === 'SVG' || file.name.toLowerCase().endsWith('.svg')) {
|
|
213
202
|
return (<View style={[
|
|
214
203
|
bundleStyles.mediaThumbWrap,
|
|
@@ -227,7 +216,7 @@ const MediaPreviewThumbnail = ({ file }) => {
|
|
|
227
216
|
</LinearGradient>
|
|
228
217
|
</Defs>
|
|
229
218
|
<Circle cx="50" cy="50" r="44" fill="url(#svgGradThumb)"/>
|
|
230
|
-
|
|
219
|
+
|
|
231
220
|
<Path d="M25 70 C35 30, 65 30, 75 70" stroke={AppColors.white} strokeWidth="8" strokeLinecap="round"/>
|
|
232
221
|
<Circle cx="25" cy="70" r="7" fill={AppColors.white}/>
|
|
233
222
|
<Circle cx="75" cy="70" r="7" fill={AppColors.white}/>
|
|
@@ -235,7 +224,6 @@ const MediaPreviewThumbnail = ({ file }) => {
|
|
|
235
224
|
</Svg>
|
|
236
225
|
</View>);
|
|
237
226
|
}
|
|
238
|
-
// 2. Raster Image (PNG, JPG, WebP) with valid preview URI
|
|
239
227
|
if (file.category === 'image' && file.previewUri && !loadError) {
|
|
240
228
|
return (<View style={bundleStyles.mediaThumbWrap}>
|
|
241
229
|
<Image source={{ uri: file.previewUri }} style={bundleStyles.mediaThumbImg} resizeMode="cover" onError={() => setLoadError(true)}/>
|
|
@@ -303,7 +291,6 @@ function buildBundleFileTree(files) {
|
|
|
303
291
|
children,
|
|
304
292
|
});
|
|
305
293
|
}
|
|
306
|
-
// Sort folders first, then files alphabetically
|
|
307
294
|
return nodes.sort((a, b) => {
|
|
308
295
|
if (a.isFolder && !b.isFolder)
|
|
309
296
|
return -1;
|
|
@@ -316,7 +303,6 @@ function buildBundleFileTree(files) {
|
|
|
316
303
|
}
|
|
317
304
|
export const downloadBundleFile = async (file, scriptURL) => {
|
|
318
305
|
let content = '';
|
|
319
|
-
// 1. Attempt to fetch real source code from Metro dev server dynamically
|
|
320
306
|
try {
|
|
321
307
|
let devServerOrigin = '';
|
|
322
308
|
const activeUrl = scriptURL || getHostScriptURL();
|
|
@@ -339,7 +325,6 @@ export const downloadBundleFile = async (file, scriptURL) => {
|
|
|
339
325
|
}
|
|
340
326
|
}
|
|
341
327
|
catch { }
|
|
342
|
-
// 2. If dev server direct fetch is unavailable, provide structured module descriptor with full path
|
|
343
328
|
if (!content) {
|
|
344
329
|
content = `// ─────────────────────────────────────────────────────────────
|
|
345
330
|
// File: ${file.name}
|
|
@@ -363,7 +348,6 @@ export default {
|
|
|
363
348
|
};
|
|
364
349
|
`;
|
|
365
350
|
}
|
|
366
|
-
// 3. Trigger native Share / Download sheet
|
|
367
351
|
try {
|
|
368
352
|
await Share.share(Platform.OS === 'ios'
|
|
369
353
|
? {
|
|
@@ -378,7 +362,6 @@ export default {
|
|
|
378
362
|
});
|
|
379
363
|
}
|
|
380
364
|
catch { }
|
|
381
|
-
// 4. Also copy directly to clipboard for quick paste in VS Code or external editor
|
|
382
365
|
try {
|
|
383
366
|
copyToClipboard(content, file.name);
|
|
384
367
|
}
|
|
@@ -428,7 +411,6 @@ const BundleTreeNodeView = ({ node, level, search, totalBundleKb, expandedFolder
|
|
|
428
411
|
</View>)}
|
|
429
412
|
</View>);
|
|
430
413
|
}
|
|
431
|
-
// File item inside tree
|
|
432
414
|
const file = node.fileItem;
|
|
433
415
|
if (!file)
|
|
434
416
|
return null;
|
|
@@ -527,7 +509,6 @@ const BundleTab = React.memo(() => {
|
|
|
527
509
|
const [prodPlatform, setProdPlatform] = useState('ios');
|
|
528
510
|
const [search, setSearch] = useState('');
|
|
529
511
|
const [activeCategory, setActiveCategory] = useState('ALL');
|
|
530
|
-
// ─── Live Host App Bundle Analysis (fetched from Metro / runtime) ─────────
|
|
531
512
|
const [analysis, setAnalysis] = useState(() => getCachedBundleAnalysis() || getInitialBundleAnalysis());
|
|
532
513
|
const [isAnalyzing, setIsAnalyzing] = useState(false);
|
|
533
514
|
const refreshAnalysis = useCallback(() => {
|
|
@@ -559,12 +540,9 @@ const BundleTab = React.memo(() => {
|
|
|
559
540
|
mounted = false;
|
|
560
541
|
};
|
|
561
542
|
}, []);
|
|
562
|
-
// Check if Hermes is running
|
|
563
543
|
const isHermes = Boolean(global.HermesInternal);
|
|
564
|
-
// Dynamic files & packages derived from the analyzed host bundle
|
|
565
544
|
const bundleFiles = useMemo(() => (analysis ? analysis.files : []), [analysis]);
|
|
566
545
|
const bundlePackages = useMemo(() => (analysis ? analysis.packages : []), [analysis]);
|
|
567
|
-
// Comprehensive bundle summary (full Metro bundle calculation e.g. 6.0 MB)
|
|
568
546
|
const summary = useMemo(() => {
|
|
569
547
|
const totalKb = analysis?.totalDevKb ||
|
|
570
548
|
(analysis?.totalDevBytes
|
|
@@ -673,7 +651,6 @@ const BundleTab = React.memo(() => {
|
|
|
673
651
|
},
|
|
674
652
|
};
|
|
675
653
|
}, [analysis, bundleFiles, bundlePackages]);
|
|
676
|
-
// Filtered files
|
|
677
654
|
const filteredFiles = useMemo(() => {
|
|
678
655
|
return bundleFiles.filter(file => {
|
|
679
656
|
const matchSearch = !search ||
|
|
@@ -694,7 +671,6 @@ const BundleTab = React.memo(() => {
|
|
|
694
671
|
const filteredTotalKb = useMemo(() => {
|
|
695
672
|
return filteredFiles.reduce((acc, f) => acc + f.sizeKb, 0);
|
|
696
673
|
}, [filteredFiles]);
|
|
697
|
-
// Tree View State & Node Generation (Top folders expanded by default)
|
|
698
674
|
const [filesViewMode, setFilesViewMode] = useState('tree');
|
|
699
675
|
const [expandedFolders, setExpandedFolders] = useState({});
|
|
700
676
|
const fileTreeNodes = useMemo(() => {
|
|
@@ -738,7 +714,6 @@ const BundleTab = React.memo(() => {
|
|
|
738
714
|
const collapseAllFolders = useCallback(() => {
|
|
739
715
|
setExpandedFolders({});
|
|
740
716
|
}, []);
|
|
741
|
-
// Filtered Packages
|
|
742
717
|
const filteredPackages = useMemo(() => {
|
|
743
718
|
if (!search)
|
|
744
719
|
return bundlePackages;
|
|
@@ -750,7 +725,6 @@ const BundleTab = React.memo(() => {
|
|
|
750
725
|
const packagesTotalKb = useMemo(() => {
|
|
751
726
|
return filteredPackages.reduce((acc, p) => acc + p.sizeKb, 0);
|
|
752
727
|
}, [filteredPackages]);
|
|
753
|
-
// Media files (Images + Fonts)
|
|
754
728
|
const mediaFiles = useMemo(() => {
|
|
755
729
|
return bundleFiles.filter(f => f.category === 'image' || f.category === 'font');
|
|
756
730
|
}, [bundleFiles]);
|
|
@@ -790,7 +764,7 @@ const BundleTab = React.memo(() => {
|
|
|
790
764
|
},
|
|
791
765
|
];
|
|
792
766
|
return (<View style={{ flex: 1, backgroundColor: AppColors.grayBackground }}>
|
|
793
|
-
|
|
767
|
+
|
|
794
768
|
<View style={bundleStyles.topTabWrap}>
|
|
795
769
|
<ScrollView horizontal showsHorizontalScrollIndicator={false} style={{ flex: 1 }} contentContainerStyle={bundleStyles.subTabsScroll}>
|
|
796
770
|
{subTabs.map(tab => {
|
|
@@ -814,11 +788,11 @@ const BundleTab = React.memo(() => {
|
|
|
814
788
|
</TouchableScale>
|
|
815
789
|
</View>
|
|
816
790
|
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
|
|
820
794
|
{activeSubTab === 'overview' && (<ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
821
|
-
|
|
795
|
+
|
|
822
796
|
<View style={bundleStyles.heroCard}>
|
|
823
797
|
<View style={bundleStyles.heroTopRow}>
|
|
824
798
|
<View style={bundleStyles.heroIconWrap}>
|
|
@@ -887,7 +861,7 @@ const BundleTab = React.memo(() => {
|
|
|
887
861
|
<CopyButton value={() => ({ ...summary, bundle: analysis })} label={t('bundle.bundleOverviewJson')}/>
|
|
888
862
|
</View>
|
|
889
863
|
|
|
890
|
-
|
|
864
|
+
|
|
891
865
|
<View style={bundleStyles.metricsGrid}>
|
|
892
866
|
<View style={bundleStyles.metricBox}>
|
|
893
867
|
<Text style={bundleStyles.metricLabel}>
|
|
@@ -968,7 +942,7 @@ const BundleTab = React.memo(() => {
|
|
|
968
942
|
</View>
|
|
969
943
|
</View>
|
|
970
944
|
|
|
971
|
-
|
|
945
|
+
|
|
972
946
|
{analysis && !analysis.isLive && (<View style={bundleStyles.liveWarningCard}>
|
|
973
947
|
<View style={{
|
|
974
948
|
flexDirection: 'row',
|
|
@@ -1010,7 +984,7 @@ const BundleTab = React.memo(() => {
|
|
|
1010
984
|
</View>
|
|
1011
985
|
</View>)}
|
|
1012
986
|
|
|
1013
|
-
|
|
987
|
+
|
|
1014
988
|
<View style={bundleStyles.sectionCard}>
|
|
1015
989
|
<View style={bundleStyles.sectionHeaderRow}>
|
|
1016
990
|
<View style={{ flex: 1, paddingRight: 4 }}>
|
|
@@ -1040,7 +1014,7 @@ const BundleTab = React.memo(() => {
|
|
|
1040
1014
|
})} label={t('bundle.treemapJson')}/>
|
|
1041
1015
|
</View>
|
|
1042
1016
|
|
|
1043
|
-
|
|
1017
|
+
|
|
1044
1018
|
<View style={bundleStyles.treemapBar}>
|
|
1045
1019
|
<View style={{
|
|
1046
1020
|
flex: summary.nodeModulesPct,
|
|
@@ -1064,7 +1038,7 @@ const BundleTab = React.memo(() => {
|
|
|
1064
1038
|
}}/>
|
|
1065
1039
|
</View>
|
|
1066
1040
|
|
|
1067
|
-
|
|
1041
|
+
|
|
1068
1042
|
<View style={bundleStyles.legendGrid}>
|
|
1069
1043
|
<View style={bundleStyles.legendItem}>
|
|
1070
1044
|
<BundleCategoryIcon type="javascript" size={13} color={AppColors.indigo500}/>
|
|
@@ -1117,7 +1091,7 @@ const BundleTab = React.memo(() => {
|
|
|
1117
1091
|
</View>
|
|
1118
1092
|
</View>
|
|
1119
1093
|
|
|
1120
|
-
|
|
1094
|
+
|
|
1121
1095
|
<View style={bundleStyles.sectionCard}>
|
|
1122
1096
|
<View style={bundleStyles.sectionHeaderRow}>
|
|
1123
1097
|
<Text style={bundleStyles.sectionTitle}>
|
|
@@ -1181,7 +1155,7 @@ const BundleTab = React.memo(() => {
|
|
|
1181
1155
|
</View>
|
|
1182
1156
|
</View>
|
|
1183
1157
|
|
|
1184
|
-
|
|
1158
|
+
|
|
1185
1159
|
<View style={bundleStyles.catProgressTrack}>
|
|
1186
1160
|
<View style={[
|
|
1187
1161
|
bundleStyles.catProgressBar,
|
|
@@ -1190,7 +1164,7 @@ const BundleTab = React.memo(() => {
|
|
|
1190
1164
|
</View>
|
|
1191
1165
|
</Pressable>))}
|
|
1192
1166
|
|
|
1193
|
-
|
|
1167
|
+
|
|
1194
1168
|
<View style={bundleStyles.totalSummaryCard}>
|
|
1195
1169
|
<View style={bundleStyles.totalSummaryRow}>
|
|
1196
1170
|
<View style={bundleStyles.totalSummaryLabelWrap}>
|
|
@@ -1216,7 +1190,7 @@ const BundleTab = React.memo(() => {
|
|
|
1216
1190
|
</View>
|
|
1217
1191
|
</View>
|
|
1218
1192
|
|
|
1219
|
-
|
|
1193
|
+
|
|
1220
1194
|
<View style={bundleStyles.totalFormulaGrid}>
|
|
1221
1195
|
<View style={bundleStyles.totalChip}>
|
|
1222
1196
|
<View style={[
|
|
@@ -1261,7 +1235,7 @@ const BundleTab = React.memo(() => {
|
|
|
1261
1235
|
</View>
|
|
1262
1236
|
</View>
|
|
1263
1237
|
|
|
1264
|
-
|
|
1238
|
+
|
|
1265
1239
|
<View style={bundleStyles.sectionCard}>
|
|
1266
1240
|
<View style={bundleStyles.sectionHeaderRow}>
|
|
1267
1241
|
<View style={{ flex: 1, paddingRight: 4 }}>
|
|
@@ -1287,7 +1261,7 @@ const BundleTab = React.memo(() => {
|
|
|
1287
1261
|
})} label="Subsystem Split JSON"/>
|
|
1288
1262
|
</View>
|
|
1289
1263
|
|
|
1290
|
-
|
|
1264
|
+
|
|
1291
1265
|
<View style={bundleStyles.subsystemCard}>
|
|
1292
1266
|
<View style={bundleStyles.subsystemHeader}>
|
|
1293
1267
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -1342,7 +1316,7 @@ const BundleTab = React.memo(() => {
|
|
|
1342
1316
|
</View>
|
|
1343
1317
|
</View>
|
|
1344
1318
|
|
|
1345
|
-
|
|
1319
|
+
|
|
1346
1320
|
<View style={bundleStyles.subsystemCard}>
|
|
1347
1321
|
<View style={bundleStyles.subsystemHeader}>
|
|
1348
1322
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -1396,7 +1370,7 @@ const BundleTab = React.memo(() => {
|
|
|
1396
1370
|
</View>
|
|
1397
1371
|
</View>
|
|
1398
1372
|
|
|
1399
|
-
|
|
1373
|
+
|
|
1400
1374
|
<View style={bundleStyles.subsystemCard}>
|
|
1401
1375
|
<View style={bundleStyles.subsystemHeader}>
|
|
1402
1376
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -1445,7 +1419,7 @@ const BundleTab = React.memo(() => {
|
|
|
1445
1419
|
</View>
|
|
1446
1420
|
</View>
|
|
1447
1421
|
|
|
1448
|
-
|
|
1422
|
+
|
|
1449
1423
|
<View style={bundleStyles.subsystemCard}>
|
|
1450
1424
|
<View style={bundleStyles.subsystemHeader}>
|
|
1451
1425
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -1502,11 +1476,11 @@ const BundleTab = React.memo(() => {
|
|
|
1502
1476
|
</View>
|
|
1503
1477
|
</ScrollView>)}
|
|
1504
1478
|
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1479
|
+
|
|
1480
|
+
|
|
1481
|
+
|
|
1508
1482
|
{activeSubTab === 'production' && (<ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
1509
|
-
|
|
1483
|
+
|
|
1510
1484
|
<ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={bundleStyles.prodPlatformScroll}>
|
|
1511
1485
|
{[
|
|
1512
1486
|
{
|
|
@@ -1551,7 +1525,7 @@ const BundleTab = React.memo(() => {
|
|
|
1551
1525
|
})}
|
|
1552
1526
|
</ScrollView>
|
|
1553
1527
|
|
|
1554
|
-
|
|
1528
|
+
|
|
1555
1529
|
{analysis && (<View style={bundleStyles.heroCard}>
|
|
1556
1530
|
<View style={bundleStyles.heroTopRow}>
|
|
1557
1531
|
<View style={bundleStyles.heroIconWrap}>
|
|
@@ -1576,7 +1550,7 @@ const BundleTab = React.memo(() => {
|
|
|
1576
1550
|
<CopyButton value={() => analysis.production[prodPlatform]} label="Production Binary JSON"/>
|
|
1577
1551
|
</View>
|
|
1578
1552
|
|
|
1579
|
-
|
|
1553
|
+
|
|
1580
1554
|
<View style={bundleStyles.metricsGrid}>
|
|
1581
1555
|
<View style={bundleStyles.metricBox}>
|
|
1582
1556
|
<Text style={bundleStyles.metricLabel}>INSTALL SIZE</Text>
|
|
@@ -1642,7 +1616,7 @@ const BundleTab = React.memo(() => {
|
|
|
1642
1616
|
</View>
|
|
1643
1617
|
</View>)}
|
|
1644
1618
|
|
|
1645
|
-
|
|
1619
|
+
|
|
1646
1620
|
{analysis && (<View style={bundleStyles.sectionCard}>
|
|
1647
1621
|
<View style={bundleStyles.sectionHeaderRow}>
|
|
1648
1622
|
<View style={{ flex: 1, paddingRight: 4 }}>
|
|
@@ -1657,7 +1631,7 @@ const BundleTab = React.memo(() => {
|
|
|
1657
1631
|
<CopyButton value={() => analysis.production[prodPlatform].components} label="Components JSON"/>
|
|
1658
1632
|
</View>
|
|
1659
1633
|
|
|
1660
|
-
|
|
1634
|
+
|
|
1661
1635
|
<View style={bundleStyles.prodTreemapBar}>
|
|
1662
1636
|
{analysis.production[prodPlatform].components.map((comp, cIdx) => (<View key={cIdx} style={{
|
|
1663
1637
|
flex: Math.max(comp.pct, 2),
|
|
@@ -1666,7 +1640,7 @@ const BundleTab = React.memo(() => {
|
|
|
1666
1640
|
}}/>))}
|
|
1667
1641
|
</View>
|
|
1668
1642
|
|
|
1669
|
-
|
|
1643
|
+
|
|
1670
1644
|
<View style={[bundleStyles.legendGrid, { marginBottom: 12 }]}>
|
|
1671
1645
|
{analysis.production[prodPlatform].components.map((comp, cIdx) => (<View key={cIdx} style={bundleStyles.legendItem}>
|
|
1672
1646
|
<View style={{
|
|
@@ -1764,7 +1738,7 @@ const BundleTab = React.memo(() => {
|
|
|
1764
1738
|
</View>) : null}
|
|
1765
1739
|
</View>))}
|
|
1766
1740
|
|
|
1767
|
-
|
|
1741
|
+
|
|
1768
1742
|
<View style={bundleStyles.totalSummaryCard}>
|
|
1769
1743
|
<View style={bundleStyles.totalSummaryRow}>
|
|
1770
1744
|
<View style={bundleStyles.totalSummaryLabelWrap}>
|
|
@@ -1790,7 +1764,7 @@ const BundleTab = React.memo(() => {
|
|
|
1790
1764
|
</View>
|
|
1791
1765
|
</View>
|
|
1792
1766
|
|
|
1793
|
-
|
|
1767
|
+
|
|
1794
1768
|
<View style={bundleStyles.totalFormulaGrid}>
|
|
1795
1769
|
<View style={bundleStyles.totalChip}>
|
|
1796
1770
|
<View style={[
|
|
@@ -1827,11 +1801,11 @@ const BundleTab = React.memo(() => {
|
|
|
1827
1801
|
</View>)}
|
|
1828
1802
|
</ScrollView>)}
|
|
1829
1803
|
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1804
|
+
|
|
1805
|
+
|
|
1806
|
+
|
|
1833
1807
|
{activeSubTab === 'files' && (<View style={{ flex: 1 }}>
|
|
1834
|
-
|
|
1808
|
+
|
|
1835
1809
|
<View style={bundleStyles.filterContainer}>
|
|
1836
1810
|
<View style={bundleStyles.searchRow}>
|
|
1837
1811
|
<SearchIcon color={AppColors.grayTextWeak} size={15}/>
|
|
@@ -1842,7 +1816,7 @@ const BundleTab = React.memo(() => {
|
|
|
1842
1816
|
<CopyButton value={() => filteredFiles} label={t('bundle.filteredFilesJson')}/>
|
|
1843
1817
|
</View>
|
|
1844
1818
|
|
|
1845
|
-
|
|
1819
|
+
|
|
1846
1820
|
<ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={bundleStyles.categoryPillsScroll}>
|
|
1847
1821
|
{CATEGORY_TABS.map(tab => {
|
|
1848
1822
|
const isActive = activeCategory === tab.key;
|
|
@@ -1879,9 +1853,9 @@ const BundleTab = React.memo(() => {
|
|
|
1879
1853
|
</ScrollView>
|
|
1880
1854
|
</View>
|
|
1881
1855
|
|
|
1882
|
-
|
|
1856
|
+
|
|
1883
1857
|
<ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
1884
|
-
|
|
1858
|
+
|
|
1885
1859
|
<View style={bundleStyles.treeHeaderRow}>
|
|
1886
1860
|
<View style={bundleStyles.viewModeToggleGroup}>
|
|
1887
1861
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel="Tree folder view" accessibilityState={{ selected: filesViewMode === 'tree' }} onPress={() => setFilesViewMode('tree')} style={[
|
|
@@ -1932,12 +1906,10 @@ const BundleTab = React.memo(() => {
|
|
|
1932
1906
|
</Text>)}
|
|
1933
1907
|
</View>
|
|
1934
1908
|
|
|
1935
|
-
|
|
1909
|
+
|
|
1936
1910
|
{filesViewMode === 'tree' ? (<View style={bundleStyles.treeRootCard}>
|
|
1937
1911
|
{fileTreeNodes.map((node, nIdx) => (<BundleTreeNodeView key={node.id} node={node} level={0} search={search} totalBundleKb={summary.totalKb} expandedFolders={expandedFolders} toggleFolder={toggleFolder} isLastChild={nIdx === fileTreeNodes.length - 1} onDownload={f => downloadBundleFile(f, analysis?.scriptURL)}/>))}
|
|
1938
|
-
</View>) : (
|
|
1939
|
-
/* ── MODE 2: FLAT LIST VIEW ── */
|
|
1940
|
-
filteredFiles.map((file, index) => {
|
|
1912
|
+
</View>) : (filteredFiles.map((file, index) => {
|
|
1941
1913
|
const categoryMeta = CATEGORY_COLORS[file.category] || CATEGORY_COLORS.typescript;
|
|
1942
1914
|
const pctOfTotal = ((file.sizeKb / summary.totalKb) *
|
|
1943
1915
|
100).toFixed(1);
|
|
@@ -2042,7 +2014,7 @@ const BundleTab = React.memo(() => {
|
|
|
2042
2014
|
}))}
|
|
2043
2015
|
</ScrollView>
|
|
2044
2016
|
|
|
2045
|
-
|
|
2017
|
+
|
|
2046
2018
|
<View style={bundleStyles.stickyFooterBar}>
|
|
2047
2019
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
2048
2020
|
<LayersIcon color={AppColors.purple} size={14}/>
|
|
@@ -2062,9 +2034,9 @@ const BundleTab = React.memo(() => {
|
|
|
2062
2034
|
</View>
|
|
2063
2035
|
</View>)}
|
|
2064
2036
|
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2037
|
+
|
|
2038
|
+
|
|
2039
|
+
|
|
2068
2040
|
{activeSubTab === 'packages' && (<View style={{ flex: 1 }}>
|
|
2069
2041
|
<ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
2070
2042
|
<View style={bundleStyles.filterContainer}>
|
|
@@ -2098,7 +2070,7 @@ const BundleTab = React.memo(() => {
|
|
|
2098
2070
|
backgroundColor: AppColors.errorCardBg,
|
|
2099
2071
|
},
|
|
2100
2072
|
]}>
|
|
2101
|
-
|
|
2073
|
+
|
|
2102
2074
|
<View style={bundleStyles.fileCardTop}>
|
|
2103
2075
|
<View style={bundleStyles.sNoBadge}>
|
|
2104
2076
|
<Text style={bundleStyles.sNoText}>#{index + 1}</Text>
|
|
@@ -2181,7 +2153,7 @@ const BundleTab = React.memo(() => {
|
|
|
2181
2153
|
</View>
|
|
2182
2154
|
</View>
|
|
2183
2155
|
|
|
2184
|
-
|
|
2156
|
+
|
|
2185
2157
|
<View style={{
|
|
2186
2158
|
flexDirection: 'row',
|
|
2187
2159
|
alignItems: 'center',
|
|
@@ -2205,7 +2177,7 @@ const BundleTab = React.memo(() => {
|
|
|
2205
2177
|
</Text>
|
|
2206
2178
|
</View>
|
|
2207
2179
|
|
|
2208
|
-
|
|
2180
|
+
|
|
2209
2181
|
{pkg.isDeprecated && pkg.deprecationReason && (<View style={bundleStyles.deprecationBox}>
|
|
2210
2182
|
<View style={{
|
|
2211
2183
|
flexDirection: 'row',
|
|
@@ -2231,7 +2203,7 @@ const BundleTab = React.memo(() => {
|
|
|
2231
2203
|
]}/>
|
|
2232
2204
|
</View>
|
|
2233
2205
|
|
|
2234
|
-
|
|
2206
|
+
|
|
2235
2207
|
<View style={{
|
|
2236
2208
|
flexDirection: 'row',
|
|
2237
2209
|
justifyContent: 'space-between',
|
|
@@ -2285,7 +2257,7 @@ const BundleTab = React.memo(() => {
|
|
|
2285
2257
|
})}
|
|
2286
2258
|
</ScrollView>
|
|
2287
2259
|
|
|
2288
|
-
|
|
2260
|
+
|
|
2289
2261
|
<View style={bundleStyles.stickyFooterBar}>
|
|
2290
2262
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
2291
2263
|
<PackageIcon color={AppColors.purple} size={14}/>
|
|
@@ -2304,9 +2276,9 @@ const BundleTab = React.memo(() => {
|
|
|
2304
2276
|
</View>
|
|
2305
2277
|
</View>)}
|
|
2306
2278
|
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2279
|
+
|
|
2280
|
+
|
|
2281
|
+
|
|
2310
2282
|
{activeSubTab === 'media' && (<View style={{ flex: 1 }}>
|
|
2311
2283
|
<ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
2312
2284
|
<View style={bundleStyles.tipsCard}>
|
|
@@ -2403,7 +2375,7 @@ const BundleTab = React.memo(() => {
|
|
|
2403
2375
|
</View>))}
|
|
2404
2376
|
</ScrollView>
|
|
2405
2377
|
|
|
2406
|
-
|
|
2378
|
+
|
|
2407
2379
|
<View style={bundleStyles.stickyFooterBar}>
|
|
2408
2380
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
2409
2381
|
<StorageIcon color={AppColors.purple} size={14}/>
|
|
@@ -2420,9 +2392,9 @@ const BundleTab = React.memo(() => {
|
|
|
2420
2392
|
</View>
|
|
2421
2393
|
</View>)}
|
|
2422
2394
|
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2395
|
+
|
|
2396
|
+
|
|
2397
|
+
|
|
2426
2398
|
{activeSubTab === 'optimizer' && (<ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
2427
2399
|
<View style={bundleStyles.tipsCard}>
|
|
2428
2400
|
<View style={{
|
|
@@ -125,7 +125,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
125
125
|
</View>
|
|
126
126
|
</View>
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
|
|
129
129
|
{(isSearchFocused || logSearch.length > 0) && (<ScrollView horizontal showsHorizontalScrollIndicator={false} style={{ marginBottom: 6, maxHeight: 30 }} contentContainerStyle={{
|
|
130
130
|
paddingHorizontal: 16,
|
|
131
131
|
flexDirection: 'row',
|
|
@@ -175,7 +175,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
175
175
|
alignItems: 'center',
|
|
176
176
|
gap: 8,
|
|
177
177
|
}}>
|
|
178
|
-
|
|
178
|
+
|
|
179
179
|
{(() => {
|
|
180
180
|
const active = logFilters.has('all');
|
|
181
181
|
return (<TouchableScale onPress={() => {
|
|
@@ -218,7 +218,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
218
218
|
</TouchableScale>);
|
|
219
219
|
})()}
|
|
220
220
|
|
|
221
|
-
|
|
221
|
+
|
|
222
222
|
{(() => {
|
|
223
223
|
const active = logFilters.has('user-log');
|
|
224
224
|
return (<TouchableScale onPress={() => {
|
|
@@ -270,7 +270,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
270
270
|
</TouchableScale>);
|
|
271
271
|
})()}
|
|
272
272
|
|
|
273
|
-
|
|
273
|
+
|
|
274
274
|
{(() => {
|
|
275
275
|
const active = logFilters.has('info');
|
|
276
276
|
return (<TouchableScale onPress={() => {
|
|
@@ -322,7 +322,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
322
322
|
</TouchableScale>);
|
|
323
323
|
})()}
|
|
324
324
|
|
|
325
|
-
|
|
325
|
+
|
|
326
326
|
{(() => {
|
|
327
327
|
const active = logFilters.has('warn');
|
|
328
328
|
return (<TouchableScale onPress={() => {
|
|
@@ -374,7 +374,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
374
374
|
</TouchableScale>);
|
|
375
375
|
})()}
|
|
376
376
|
|
|
377
|
-
|
|
377
|
+
|
|
378
378
|
{(() => {
|
|
379
379
|
const active = logFilters.has('error');
|
|
380
380
|
return (<TouchableScale onPress={() => {
|
|
@@ -426,7 +426,7 @@ const ConsoleTab = React.memo(() => {
|
|
|
426
426
|
</TouchableScale>);
|
|
427
427
|
})()}
|
|
428
428
|
|
|
429
|
-
|
|
429
|
+
|
|
430
430
|
{(() => {
|
|
431
431
|
const active = logFilters.has('analytics');
|
|
432
432
|
return (<TouchableScale onPress={() => {
|