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
|
@@ -31,7 +31,6 @@ const SettingsPanel = () => {
|
|
|
31
31
|
}, [modalHeightPercent]);
|
|
32
32
|
const autoRamProfile = calculateRamBasedLimits(deviceFreeRamMb);
|
|
33
33
|
const isPersistent = isPersistentStorageAvailable();
|
|
34
|
-
// Safe Area & Status Bar Padding for All Device Form Factors
|
|
35
34
|
const statusBarHeight = Platform.OS === 'android' ? StatusBar.currentHeight || 24 : 44;
|
|
36
35
|
const headerTopPadding = modalHeightPercent >= 95 ? statusBarHeight : 0;
|
|
37
36
|
const allModules = [
|
|
@@ -99,7 +98,6 @@ const SettingsPanel = () => {
|
|
|
99
98
|
desc: 'AsyncStorage & MMKV key-value store viewer with full CRUD support',
|
|
100
99
|
},
|
|
101
100
|
];
|
|
102
|
-
// Staged selection state for checkboxes before clicking "Save Changes"
|
|
103
101
|
const [stagedTabVisibility, setStagedTabVisibility] = useState(() => ({
|
|
104
102
|
apis: true,
|
|
105
103
|
logs: Boolean(tabVisibility?.logs),
|
|
@@ -111,7 +109,6 @@ const SettingsPanel = () => {
|
|
|
111
109
|
device: Boolean(tabVisibility?.device),
|
|
112
110
|
storage: Boolean(tabVisibility?.storage),
|
|
113
111
|
}));
|
|
114
|
-
// Synchronize staged state with tabVisibility when tabVisibility updates
|
|
115
112
|
useEffect(() => {
|
|
116
113
|
setStagedTabVisibility({
|
|
117
114
|
apis: true,
|
|
@@ -148,7 +145,6 @@ const SettingsPanel = () => {
|
|
|
148
145
|
animateNextLayout();
|
|
149
146
|
setSettingsPage('main');
|
|
150
147
|
};
|
|
151
|
-
// Helper: settings row with icon + label + optional description
|
|
152
148
|
const renderSettingRow = (opts) => {
|
|
153
149
|
return (<View style={{
|
|
154
150
|
paddingVertical: 12,
|
|
@@ -278,7 +274,7 @@ const SettingsPanel = () => {
|
|
|
278
274
|
backgroundColor: AppColors.grayBackground,
|
|
279
275
|
}}>
|
|
280
276
|
<ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, paddingBottom: 100, gap: 14 }} showsVerticalScrollIndicator={false}>
|
|
281
|
-
|
|
277
|
+
|
|
282
278
|
<View style={{
|
|
283
279
|
flexDirection: 'row',
|
|
284
280
|
backgroundColor: AppColors.primaryLight,
|
|
@@ -383,7 +379,7 @@ const SettingsPanel = () => {
|
|
|
383
379
|
</View>
|
|
384
380
|
|
|
385
381
|
{settingsActiveSubTab === 'module' && (<View style={{ gap: 12 }}>
|
|
386
|
-
|
|
382
|
+
|
|
387
383
|
<View style={{ gap: 10 }}>
|
|
388
384
|
{allModules.map(moduleItem => {
|
|
389
385
|
const isReduxAvail = isReduxConnected();
|
|
@@ -423,13 +419,13 @@ const SettingsPanel = () => {
|
|
|
423
419
|
shadowRadius: 5,
|
|
424
420
|
shadowOffset: { width: 0, height: 2 },
|
|
425
421
|
}}>
|
|
426
|
-
|
|
422
|
+
|
|
427
423
|
<View style={{
|
|
428
424
|
flexDirection: 'row',
|
|
429
425
|
alignItems: 'flex-start',
|
|
430
426
|
gap: 10,
|
|
431
427
|
}}>
|
|
432
|
-
|
|
428
|
+
|
|
433
429
|
<TouchableScale accessible={true} accessibilityRole="checkbox" accessibilityLabel={`Select ${moduleItem.label}`} accessibilityState={{
|
|
434
430
|
checked: isChecked,
|
|
435
431
|
disabled: isLocked,
|
|
@@ -469,7 +465,7 @@ const SettingsPanel = () => {
|
|
|
469
465
|
</Svg>) : null}
|
|
470
466
|
</TouchableScale>
|
|
471
467
|
|
|
472
|
-
|
|
468
|
+
|
|
473
469
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel={`${moduleItem.label} settings`} disabled={isUnavailable} onPress={() => {
|
|
474
470
|
animateNextLayout();
|
|
475
471
|
setSettingsPage(moduleItem.key);
|
|
@@ -479,7 +475,7 @@ const SettingsPanel = () => {
|
|
|
479
475
|
alignItems: 'flex-start',
|
|
480
476
|
gap: 10,
|
|
481
477
|
}}>
|
|
482
|
-
|
|
478
|
+
|
|
483
479
|
<View style={{
|
|
484
480
|
width: 36,
|
|
485
481
|
height: 36,
|
|
@@ -528,7 +524,7 @@ const SettingsPanel = () => {
|
|
|
528
524
|
: AppColors.grayTextWeak} size={16}/>)}
|
|
529
525
|
</View>
|
|
530
526
|
|
|
531
|
-
|
|
527
|
+
|
|
532
528
|
<View style={{ flex: 1, gap: 2 }}>
|
|
533
529
|
<View style={{
|
|
534
530
|
flexDirection: 'row',
|
|
@@ -547,7 +543,7 @@ const SettingsPanel = () => {
|
|
|
547
543
|
{moduleItem.label}
|
|
548
544
|
</Text>
|
|
549
545
|
|
|
550
|
-
|
|
546
|
+
|
|
551
547
|
{moduleItem.key === defaultTab &&
|
|
552
548
|
!isUnavailable && (<View style={{
|
|
553
549
|
flexDirection: 'row',
|
|
@@ -577,7 +573,7 @@ const SettingsPanel = () => {
|
|
|
577
573
|
</Text>
|
|
578
574
|
</View>)}
|
|
579
575
|
|
|
580
|
-
|
|
576
|
+
|
|
581
577
|
{moduleItem.key === 'apis' ? (<View style={{
|
|
582
578
|
backgroundColor: `${AppColors.blue500}14`,
|
|
583
579
|
borderRadius: 4,
|
|
@@ -664,7 +660,7 @@ const SettingsPanel = () => {
|
|
|
664
660
|
</TouchableScale>
|
|
665
661
|
</View>
|
|
666
662
|
|
|
667
|
-
|
|
663
|
+
|
|
668
664
|
{!isUnavailable && (<View style={{
|
|
669
665
|
flexDirection: 'row',
|
|
670
666
|
alignItems: 'center',
|
|
@@ -673,7 +669,7 @@ const SettingsPanel = () => {
|
|
|
673
669
|
borderTopWidth: 1,
|
|
674
670
|
borderTopColor: AppColors.dividerColor,
|
|
675
671
|
}}>
|
|
676
|
-
|
|
672
|
+
|
|
677
673
|
<View style={{
|
|
678
674
|
flexDirection: 'row',
|
|
679
675
|
alignItems: 'center',
|
|
@@ -698,7 +694,7 @@ const SettingsPanel = () => {
|
|
|
698
694
|
</Text>
|
|
699
695
|
</View>
|
|
700
696
|
|
|
701
|
-
|
|
697
|
+
|
|
702
698
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel={`Configure ${moduleItem.label} settings`} onPress={() => {
|
|
703
699
|
animateNextLayout();
|
|
704
700
|
setSettingsPage(moduleItem.key);
|
|
@@ -731,7 +727,7 @@ const SettingsPanel = () => {
|
|
|
731
727
|
</View>)}
|
|
732
728
|
|
|
733
729
|
{settingsActiveSubTab === 'ui' && (<View style={{ gap: 14 }}>
|
|
734
|
-
|
|
730
|
+
|
|
735
731
|
<View style={{
|
|
736
732
|
backgroundColor: AppColors.primaryLight,
|
|
737
733
|
borderRadius: 14,
|
|
@@ -822,7 +818,7 @@ const SettingsPanel = () => {
|
|
|
822
818
|
</View>
|
|
823
819
|
</View>
|
|
824
820
|
|
|
825
|
-
|
|
821
|
+
|
|
826
822
|
<View style={{
|
|
827
823
|
backgroundColor: AppColors.primaryLight,
|
|
828
824
|
borderRadius: 14,
|
|
@@ -842,7 +838,7 @@ const SettingsPanel = () => {
|
|
|
842
838
|
{t('settings.windowLayout')}
|
|
843
839
|
</Text>
|
|
844
840
|
|
|
845
|
-
|
|
841
|
+
|
|
846
842
|
<View style={{ gap: 8 }}>
|
|
847
843
|
<View style={{
|
|
848
844
|
flexDirection: 'row',
|
|
@@ -921,7 +917,7 @@ const SettingsPanel = () => {
|
|
|
921
917
|
|
|
922
918
|
<View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
|
|
923
919
|
|
|
924
|
-
|
|
920
|
+
|
|
925
921
|
<View style={{ gap: 8 }}>
|
|
926
922
|
<View style={{
|
|
927
923
|
flexDirection: 'row',
|
|
@@ -998,7 +994,7 @@ const SettingsPanel = () => {
|
|
|
998
994
|
</View>
|
|
999
995
|
</View>
|
|
1000
996
|
|
|
1001
|
-
|
|
997
|
+
|
|
1002
998
|
<View style={{
|
|
1003
999
|
backgroundColor: AppColors.primaryLight,
|
|
1004
1000
|
borderRadius: 14,
|
|
@@ -1054,7 +1050,7 @@ const SettingsPanel = () => {
|
|
|
1054
1050
|
</View>
|
|
1055
1051
|
</View>
|
|
1056
1052
|
|
|
1057
|
-
|
|
1053
|
+
|
|
1058
1054
|
<View style={{ marginTop: 6, gap: 6 }}>
|
|
1059
1055
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel={`Default opening tab: ${allModules.find(m => m.key === defaultTab)?.label || 'APIs'}`} onPress={() => setIsDefaultTabDropdownOpen(prev => !prev)} style={{
|
|
1060
1056
|
flexDirection: 'row',
|
|
@@ -1115,7 +1111,7 @@ const SettingsPanel = () => {
|
|
|
1115
1111
|
</View>
|
|
1116
1112
|
</TouchableScale>
|
|
1117
1113
|
|
|
1118
|
-
|
|
1114
|
+
|
|
1119
1115
|
{isDefaultTabDropdownOpen && (<View style={{
|
|
1120
1116
|
backgroundColor: AppColors.primaryLight,
|
|
1121
1117
|
borderRadius: 10,
|
|
@@ -1182,7 +1178,7 @@ const SettingsPanel = () => {
|
|
|
1182
1178
|
</View>
|
|
1183
1179
|
</View>
|
|
1184
1180
|
|
|
1185
|
-
|
|
1181
|
+
|
|
1186
1182
|
<View style={{
|
|
1187
1183
|
backgroundColor: AppColors.primaryLight,
|
|
1188
1184
|
borderRadius: 14,
|
|
@@ -1271,7 +1267,7 @@ const SettingsPanel = () => {
|
|
|
1271
1267
|
</View>
|
|
1272
1268
|
</View>
|
|
1273
1269
|
|
|
1274
|
-
|
|
1270
|
+
|
|
1275
1271
|
<View style={{
|
|
1276
1272
|
backgroundColor: AppColors.primaryLight,
|
|
1277
1273
|
borderRadius: 14,
|
|
@@ -1399,7 +1395,7 @@ const SettingsPanel = () => {
|
|
|
1399
1395
|
</View>)}
|
|
1400
1396
|
|
|
1401
1397
|
{settingsActiveSubTab === 'limits' && (<View style={{ gap: 14 }}>
|
|
1402
|
-
|
|
1398
|
+
|
|
1403
1399
|
<View style={{
|
|
1404
1400
|
backgroundColor: AppColors.primaryLight,
|
|
1405
1401
|
borderRadius: 14,
|
|
@@ -1419,7 +1415,7 @@ const SettingsPanel = () => {
|
|
|
1419
1415
|
DEVICE MEMORY & AUTO PROFILES
|
|
1420
1416
|
</Text>
|
|
1421
1417
|
|
|
1422
|
-
|
|
1418
|
+
|
|
1423
1419
|
<View style={{
|
|
1424
1420
|
flexDirection: 'row',
|
|
1425
1421
|
alignItems: 'center',
|
|
@@ -1490,7 +1486,7 @@ const SettingsPanel = () => {
|
|
|
1490
1486
|
|
|
1491
1487
|
<View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
|
|
1492
1488
|
|
|
1493
|
-
|
|
1489
|
+
|
|
1494
1490
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 10 }}>
|
|
1495
1491
|
<View style={{
|
|
1496
1492
|
width: 32,
|
|
@@ -1552,7 +1548,7 @@ const SettingsPanel = () => {
|
|
|
1552
1548
|
</View>
|
|
1553
1549
|
</View>
|
|
1554
1550
|
|
|
1555
|
-
|
|
1551
|
+
|
|
1556
1552
|
<View style={{
|
|
1557
1553
|
marginTop: 4,
|
|
1558
1554
|
paddingTop: 8,
|
|
@@ -1655,7 +1651,7 @@ const SettingsPanel = () => {
|
|
|
1655
1651
|
</View>
|
|
1656
1652
|
</View>
|
|
1657
1653
|
|
|
1658
|
-
|
|
1654
|
+
|
|
1659
1655
|
<View style={{
|
|
1660
1656
|
backgroundColor: AppColors.primaryLight,
|
|
1661
1657
|
borderRadius: 14,
|
|
@@ -1723,7 +1719,7 @@ const SettingsPanel = () => {
|
|
|
1723
1719
|
|
|
1724
1720
|
<View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
|
|
1725
1721
|
|
|
1726
|
-
|
|
1722
|
+
|
|
1727
1723
|
<View style={{
|
|
1728
1724
|
flexDirection: 'row',
|
|
1729
1725
|
alignItems: 'center',
|
|
@@ -1774,7 +1770,7 @@ const SettingsPanel = () => {
|
|
|
1774
1770
|
<View style={{ height: 48 }}/>
|
|
1775
1771
|
</ScrollView>
|
|
1776
1772
|
|
|
1777
|
-
|
|
1773
|
+
|
|
1778
1774
|
{settingsActiveSubTab === 'module' && (<View style={{
|
|
1779
1775
|
paddingHorizontal: 16,
|
|
1780
1776
|
paddingTop: 12,
|
|
@@ -1996,7 +1992,7 @@ const SettingsPanel = () => {
|
|
|
1996
1992
|
})}
|
|
1997
1993
|
</View>
|
|
1998
1994
|
|
|
1999
|
-
|
|
1995
|
+
|
|
2000
1996
|
<View style={{
|
|
2001
1997
|
backgroundColor: AppColors.primaryLight,
|
|
2002
1998
|
borderRadius: 14,
|
|
@@ -2016,7 +2012,7 @@ const SettingsPanel = () => {
|
|
|
2016
2012
|
{t('settings.logFiltersDeduplication')}
|
|
2017
2013
|
</Text>
|
|
2018
2014
|
|
|
2019
|
-
|
|
2015
|
+
|
|
2020
2016
|
<View style={{
|
|
2021
2017
|
flexDirection: 'row',
|
|
2022
2018
|
alignItems: 'center',
|
|
@@ -2555,7 +2551,7 @@ const SettingsPanel = () => {
|
|
|
2555
2551
|
flex: 1,
|
|
2556
2552
|
backgroundColor: AppColors.grayBackground,
|
|
2557
2553
|
}}>
|
|
2558
|
-
|
|
2554
|
+
|
|
2559
2555
|
<View style={[
|
|
2560
2556
|
StyleSheet.absoluteFill,
|
|
2561
2557
|
settingsPage !== 'main' && { pointerEvents: 'none' },
|
|
@@ -2563,7 +2559,7 @@ const SettingsPanel = () => {
|
|
|
2563
2559
|
{renderMainSettingsContent()}
|
|
2564
2560
|
</View>
|
|
2565
2561
|
|
|
2566
|
-
|
|
2562
|
+
|
|
2567
2563
|
{settingsPage !== 'main' && (<Animated.View style={[
|
|
2568
2564
|
StyleSheet.absoluteFill,
|
|
2569
2565
|
{
|
|
@@ -20,7 +20,7 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
20
20
|
return () => animation.stop();
|
|
21
21
|
}, [shimmerAnim]);
|
|
22
22
|
return (<View style={skeletonStyles.container}>
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
<View style={skeletonStyles.toolbarSkeleton}>
|
|
25
25
|
<Animated.View style={[
|
|
26
26
|
skeletonStyles.searchBarSkeleton,
|
|
@@ -32,7 +32,7 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
32
32
|
</View>
|
|
33
33
|
</View>
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
<View style={skeletonStyles.chipStripSkeleton}>
|
|
37
37
|
<Animated.View style={[skeletonStyles.chipSkeleton, { width: 48, opacity: shimmerAnim }]}/>
|
|
38
38
|
<Animated.View style={[skeletonStyles.chipSkeleton, { width: 68, opacity: shimmerAnim }]}/>
|
|
@@ -40,9 +40,9 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
40
40
|
<Animated.View style={[skeletonStyles.chipSkeleton, { width: 58, opacity: shimmerAnim }]}/>
|
|
41
41
|
</View>
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
{Array.from({ length: cardCount }).map((_, i) => (<Animated.View key={`skeleton_card_${i}`} style={[skeletonStyles.cardSkeleton, { opacity: shimmerAnim }]}>
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
<View style={skeletonStyles.cardTopRow}>
|
|
47
47
|
<View style={skeletonStyles.badgeGroup}>
|
|
48
48
|
<View style={skeletonStyles.statusBadgeSkeleton}/>
|
|
@@ -51,11 +51,11 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
51
51
|
<View style={skeletonStyles.timeSkeleton}/>
|
|
52
52
|
</View>
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
<View style={skeletonStyles.urlLineLong}/>
|
|
56
56
|
<View style={skeletonStyles.urlLineShort}/>
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
<View style={skeletonStyles.cardBottomRow}>
|
|
60
60
|
<View style={skeletonStyles.metaPillSkeleton}/>
|
|
61
61
|
<View style={skeletonStyles.metaPillSkeleton}/>
|
|
@@ -28,7 +28,6 @@ const StorageEntryCard = React.memo(function StorageEntryCard({ entry, isExpande
|
|
|
28
28
|
? `${entry.byteSize} B`
|
|
29
29
|
: `${(entry.byteSize / 1024).toFixed(1)} KB`;
|
|
30
30
|
}, [entry.byteSize]);
|
|
31
|
-
// Lazy compute displayed value to avoid layout thrashing on large JSON strings
|
|
32
31
|
const displayValue = useMemo(() => {
|
|
33
32
|
if (!isExpanded) {
|
|
34
33
|
if (entry.value.length > 250) {
|
|
@@ -48,7 +47,7 @@ const StorageEntryCard = React.memo(function StorageEntryCard({ entry, isExpande
|
|
|
48
47
|
return entry.value;
|
|
49
48
|
}, [isExpanded, entry.value, entry.type, entry.parsedValue]);
|
|
50
49
|
return (<View style={styles.entryCard}>
|
|
51
|
-
|
|
50
|
+
|
|
52
51
|
<View style={styles.entryHeader}>
|
|
53
52
|
<View style={{ flex: 1, marginRight: 8 }}>
|
|
54
53
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
|
|
@@ -67,7 +66,7 @@ const StorageEntryCard = React.memo(function StorageEntryCard({ entry, isExpande
|
|
|
67
66
|
</View>
|
|
68
67
|
</View>
|
|
69
68
|
|
|
70
|
-
|
|
69
|
+
|
|
71
70
|
<View style={styles.entryActions}>
|
|
72
71
|
<TouchableScale hitSlop={6} onPress={() => onCopy(entry)} style={styles.entryActionBtn}>
|
|
73
72
|
<CopyIcon size={12} color={AppColors.grayText}/>
|
|
@@ -83,7 +82,7 @@ const StorageEntryCard = React.memo(function StorageEntryCard({ entry, isExpande
|
|
|
83
82
|
</View>
|
|
84
83
|
</View>
|
|
85
84
|
|
|
86
|
-
|
|
85
|
+
|
|
87
86
|
<TouchableScale onPress={() => onToggleExpand(entry.key)} style={styles.valuePreviewBox}>
|
|
88
87
|
<Text style={styles.valuePreviewText} numberOfLines={isExpanded ? undefined : 3} selectable={isExpanded}>
|
|
89
88
|
{displayValue}
|
|
@@ -102,7 +101,6 @@ export const StorageTab = React.memo(() => {
|
|
|
102
101
|
const [isLoading, setIsLoading] = useState(true);
|
|
103
102
|
const [search, setSearch] = useState('');
|
|
104
103
|
const [expandedKeys, setExpandedKeys] = useState({});
|
|
105
|
-
// Modal State for Create / Edit
|
|
106
104
|
const [modalVisible, setModalVisible] = useState(false);
|
|
107
105
|
const [modalMode, setModalMode] = useState('create');
|
|
108
106
|
const [editKeyName, setEditKeyName] = useState('');
|
|
@@ -110,7 +108,6 @@ export const StorageTab = React.memo(() => {
|
|
|
110
108
|
const [editType, setEditType] = useState('string');
|
|
111
109
|
const [jsonError, setJsonError] = useState(null);
|
|
112
110
|
const mmkvInstanceIds = useMemo(() => getRegisteredMMKVInstanceIds(), []);
|
|
113
|
-
// Fetch entries
|
|
114
111
|
const loadEntries = useCallback(async () => {
|
|
115
112
|
setIsLoading(true);
|
|
116
113
|
try {
|
|
@@ -129,11 +126,9 @@ export const StorageTab = React.memo(() => {
|
|
|
129
126
|
const unsubscribe = subscribeToStorageChanges(loadEntries);
|
|
130
127
|
return unsubscribe;
|
|
131
128
|
}, [loadEntries]);
|
|
132
|
-
// Toggle JSON accordion
|
|
133
129
|
const toggleExpand = (key) => {
|
|
134
130
|
setExpandedKeys(prev => ({ ...prev, [key]: !prev[key] }));
|
|
135
131
|
};
|
|
136
|
-
// Open Create Modal
|
|
137
132
|
const handleOpenCreate = () => {
|
|
138
133
|
setModalMode('create');
|
|
139
134
|
setEditKeyName('');
|
|
@@ -142,7 +137,6 @@ export const StorageTab = React.memo(() => {
|
|
|
142
137
|
setJsonError(null);
|
|
143
138
|
setModalVisible(true);
|
|
144
139
|
};
|
|
145
|
-
// Open Edit Modal
|
|
146
140
|
const handleOpenEdit = (entry) => {
|
|
147
141
|
setModalMode('edit');
|
|
148
142
|
setEditKeyName(entry.key);
|
|
@@ -151,7 +145,6 @@ export const StorageTab = React.memo(() => {
|
|
|
151
145
|
setJsonError(null);
|
|
152
146
|
setModalVisible(true);
|
|
153
147
|
};
|
|
154
|
-
// Delete single key
|
|
155
148
|
const handleDeleteKey = (key) => {
|
|
156
149
|
Alert.alert('Delete Storage Key', `Are you sure you want to permanently delete "${key}" from ${activeDriver === 'asyncStorage' ? 'AsyncStorage' : 'MMKV'}?`, [
|
|
157
150
|
{ text: 'Cancel', style: 'cancel' },
|
|
@@ -171,7 +164,6 @@ export const StorageTab = React.memo(() => {
|
|
|
171
164
|
},
|
|
172
165
|
]);
|
|
173
166
|
};
|
|
174
|
-
// Clear all keys
|
|
175
167
|
const handleClearAll = () => {
|
|
176
168
|
Alert.alert('Wipe All Storage Keys', `Are you sure you want to clear all ${entries.length} keys in ${activeDriver === 'asyncStorage' ? 'AsyncStorage' : 'MMKV'}? This cannot be undone.`, [
|
|
177
169
|
{ text: 'Cancel', style: 'cancel' },
|
|
@@ -188,7 +180,6 @@ export const StorageTab = React.memo(() => {
|
|
|
188
180
|
},
|
|
189
181
|
]);
|
|
190
182
|
};
|
|
191
|
-
// Save Modal (Create / Update)
|
|
192
183
|
const handleSaveModal = async () => {
|
|
193
184
|
if (!editKeyName.trim()) {
|
|
194
185
|
showToast('Key name cannot be empty');
|
|
@@ -197,7 +188,6 @@ export const StorageTab = React.memo(() => {
|
|
|
197
188
|
let finalVal = editValue;
|
|
198
189
|
if (editType === 'json') {
|
|
199
190
|
try {
|
|
200
|
-
// Validate JSON
|
|
201
191
|
const parsed = JSON.parse(editValue);
|
|
202
192
|
finalVal = JSON.stringify(parsed);
|
|
203
193
|
}
|
|
@@ -222,7 +212,6 @@ export const StorageTab = React.memo(() => {
|
|
|
222
212
|
showToast('Error saving storage key');
|
|
223
213
|
}
|
|
224
214
|
};
|
|
225
|
-
// Format / Beautify JSON in modal
|
|
226
215
|
const handleBeautifyJson = () => {
|
|
227
216
|
try {
|
|
228
217
|
const parsed = JSON.parse(editValue);
|
|
@@ -235,7 +224,6 @@ export const StorageTab = React.memo(() => {
|
|
|
235
224
|
setJsonError('Cannot format: invalid JSON syntax');
|
|
236
225
|
}
|
|
237
226
|
};
|
|
238
|
-
// Filter entries
|
|
239
227
|
const filteredEntries = useMemo(() => {
|
|
240
228
|
if (!search.trim())
|
|
241
229
|
return entries;
|
|
@@ -261,7 +249,7 @@ export const StorageTab = React.memo(() => {
|
|
|
261
249
|
? isAsyncStorageConnected()
|
|
262
250
|
: isMMKVConnected();
|
|
263
251
|
return (<View style={styles.container}>
|
|
264
|
-
|
|
252
|
+
|
|
265
253
|
<View style={styles.driverTabsWrapper}>
|
|
266
254
|
<ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.driverTabsContainer}>
|
|
267
255
|
<TouchableScale onPress={() => setActiveDriver('asyncStorage')} style={[
|
|
@@ -300,7 +288,7 @@ export const StorageTab = React.memo(() => {
|
|
|
300
288
|
</View>)}
|
|
301
289
|
</TouchableScale>
|
|
302
290
|
|
|
303
|
-
|
|
291
|
+
|
|
304
292
|
{activeDriver === 'mmkv' && mmkvInstanceIds.length > 1 && (<View style={{ flexDirection: 'row', alignItems: 'center', gap: 4, marginLeft: 6 }}>
|
|
305
293
|
{mmkvInstanceIds.map(id => (<TouchableScale key={id} onPress={() => setActiveMMKVId(id)} style={[
|
|
306
294
|
styles.instancePill,
|
|
@@ -317,7 +305,7 @@ export const StorageTab = React.memo(() => {
|
|
|
317
305
|
</ScrollView>
|
|
318
306
|
</View>
|
|
319
307
|
|
|
320
|
-
|
|
308
|
+
|
|
321
309
|
<View style={styles.actionBar}>
|
|
322
310
|
<View style={styles.searchBar}>
|
|
323
311
|
<SearchIcon size={14} color={AppColors.grayTextWeak}/>
|
|
@@ -343,7 +331,7 @@ export const StorageTab = React.memo(() => {
|
|
|
343
331
|
</View>)}
|
|
344
332
|
</View>
|
|
345
333
|
|
|
346
|
-
|
|
334
|
+
|
|
347
335
|
<TouchableScale onPress={handleOpenCreate} style={styles.addKeyBtn} hitSlop={6}>
|
|
348
336
|
<PlusIcon size={13} color={AppColors.white}/>
|
|
349
337
|
<Text style={styles.addKeyBtnText}>Add</Text>
|
|
@@ -358,7 +346,7 @@ export const StorageTab = React.memo(() => {
|
|
|
358
346
|
</TouchableScale>)}
|
|
359
347
|
</View>
|
|
360
348
|
|
|
361
|
-
|
|
349
|
+
|
|
362
350
|
<View style={styles.statsStrip}>
|
|
363
351
|
<Text style={styles.statsText}>
|
|
364
352
|
{filteredEntries.length} of {entries.length} Keys • {formattedTotalSize}
|
|
@@ -368,7 +356,7 @@ export const StorageTab = React.memo(() => {
|
|
|
368
356
|
</Text>
|
|
369
357
|
</View>
|
|
370
358
|
|
|
371
|
-
|
|
359
|
+
|
|
372
360
|
{isLoading ? (<View style={styles.loadingContainer}>
|
|
373
361
|
<ActivityIndicator size="small" color={AppColors.purple}/>
|
|
374
362
|
<Text style={styles.loadingText}>Loading storage entries...</Text>
|
|
@@ -386,7 +374,7 @@ export const StorageTab = React.memo(() => {
|
|
|
386
374
|
</Text>
|
|
387
375
|
</View>} ListFooterComponent={<View style={{ height: 60 }}/>}/>)}
|
|
388
376
|
|
|
389
|
-
|
|
377
|
+
|
|
390
378
|
<Modal visible={modalVisible} transparent animationType="fade" onRequestClose={() => setModalVisible(false)}>
|
|
391
379
|
<View style={styles.modalOverlay}>
|
|
392
380
|
<View style={styles.modalCard}>
|
|
@@ -399,7 +387,7 @@ export const StorageTab = React.memo(() => {
|
|
|
399
387
|
</TouchableScale>
|
|
400
388
|
</View>
|
|
401
389
|
|
|
402
|
-
|
|
390
|
+
|
|
403
391
|
<View style={styles.inputGroup}>
|
|
404
392
|
<Text style={styles.inputLabel}>KEY NAME</Text>
|
|
405
393
|
<TextInput value={editKeyName} onChangeText={setEditKeyName} placeholder="e.g. user_session, auth_token" placeholderTextColor={AppColors.grayTextWeak} editable={modalMode === 'create'} style={[
|
|
@@ -408,7 +396,7 @@ export const StorageTab = React.memo(() => {
|
|
|
408
396
|
]} autoCapitalize="none"/>
|
|
409
397
|
</View>
|
|
410
398
|
|
|
411
|
-
|
|
399
|
+
|
|
412
400
|
<View style={styles.inputGroup}>
|
|
413
401
|
<View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 4 }}>
|
|
414
402
|
<Text style={styles.inputLabel}>VALUE TYPE</Text>
|
|
@@ -437,7 +425,7 @@ export const StorageTab = React.memo(() => {
|
|
|
437
425
|
</View>
|
|
438
426
|
</View>
|
|
439
427
|
|
|
440
|
-
|
|
428
|
+
|
|
441
429
|
<View style={styles.inputGroup}>
|
|
442
430
|
<Text style={styles.inputLabel}>VALUE CONTENT</Text>
|
|
443
431
|
<TextInput value={editValue} onChangeText={v => {
|
|
@@ -454,7 +442,7 @@ export const StorageTab = React.memo(() => {
|
|
|
454
442
|
{jsonError && (<Text style={styles.errorText}>⚠️ {jsonError}</Text>)}
|
|
455
443
|
</View>
|
|
456
444
|
|
|
457
|
-
|
|
445
|
+
|
|
458
446
|
<View style={styles.modalActions}>
|
|
459
447
|
<TouchableScale onPress={() => setModalVisible(false)} style={styles.cancelBtn}>
|
|
460
448
|
<Text style={styles.cancelBtnText}>Cancel</Text>
|
|
@@ -6,7 +6,6 @@ import { NpmIcon } from '../NetworkIcons';
|
|
|
6
6
|
import { LIB_VERSION } from '../../constants';
|
|
7
7
|
import { copyToClipboard } from '../../helpers';
|
|
8
8
|
import { showToast } from '../../helpers/toast';
|
|
9
|
-
// ─── Crisp SVG Icons ─────────────────────────────────────────────────────────
|
|
10
9
|
const CopySvg = ({ size = 14, color = '#64748B' }) => (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
11
10
|
<Path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-8a2 2 0 0 0-2 2z" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
|
|
12
11
|
<Path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
|
|
@@ -90,12 +89,12 @@ export const UpdateAvailableModal = ({ visible, latestVersion, onClose, }) => {
|
|
|
90
89
|
transform: [{ scale: scaleAnim }],
|
|
91
90
|
},
|
|
92
91
|
]}>
|
|
93
|
-
|
|
92
|
+
|
|
94
93
|
<TouchableOpacity style={styles.topCloseButton} onPress={handleClose} hitSlop={10} activeOpacity={0.7}>
|
|
95
94
|
<CloseSvg size={13} color="#64748B"/>
|
|
96
95
|
</TouchableOpacity>
|
|
97
96
|
|
|
98
|
-
|
|
97
|
+
|
|
99
98
|
<View style={styles.headerSection}>
|
|
100
99
|
<View style={styles.iconHaloRing}>
|
|
101
100
|
<BrandSquareIcon size={52}/>
|
|
@@ -110,7 +109,7 @@ export const UpdateAvailableModal = ({ visible, latestVersion, onClose, }) => {
|
|
|
110
109
|
</Text>
|
|
111
110
|
</View>
|
|
112
111
|
|
|
113
|
-
|
|
112
|
+
|
|
114
113
|
<View style={styles.versionComparisonCard}>
|
|
115
114
|
<View style={styles.versionColumn}>
|
|
116
115
|
<Text style={styles.versionLabel}>INSTALLED</Text>
|
|
@@ -132,7 +131,7 @@ export const UpdateAvailableModal = ({ visible, latestVersion, onClose, }) => {
|
|
|
132
131
|
</View>
|
|
133
132
|
</View>
|
|
134
133
|
|
|
135
|
-
|
|
134
|
+
|
|
136
135
|
<View style={styles.codeSnippetBox}>
|
|
137
136
|
<View style={styles.codeSnippetHeader}>
|
|
138
137
|
<Text style={styles.codeSnippetLabel}>UPGRADE COMMAND</Text>
|
|
@@ -152,7 +151,7 @@ export const UpdateAvailableModal = ({ visible, latestVersion, onClose, }) => {
|
|
|
152
151
|
</TouchableOpacity>
|
|
153
152
|
</View>
|
|
154
153
|
|
|
155
|
-
|
|
154
|
+
|
|
156
155
|
<View style={styles.buttonRow}>
|
|
157
156
|
<TouchableOpacity style={styles.secondaryButton} onPress={handleClose} activeOpacity={0.7}>
|
|
158
157
|
<Text style={styles.secondaryButtonText}>Later</Text>
|