react-native-inapp-inspector 2.4.2 → 2.5.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/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +523 -2
- package/dist/commonjs/capture.d.ts +2 -0
- package/dist/commonjs/capture.js +1 -1
- package/dist/commonjs/components/AnalyticsDetail.js +23 -23
- package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
- package/dist/commonjs/components/AnalyticsGraph.js +44 -44
- package/dist/commonjs/components/AnimatedBrandOwl.js +32 -32
- package/dist/commonjs/components/AppHeaderLogo.js +6 -6
- package/dist/commonjs/components/BrandCircleIcon.js +28 -28
- package/dist/commonjs/components/BrandSquareIcon.js +33 -33
- package/dist/commonjs/components/ConsoleLogCard.js +1 -1
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +2 -2
- package/dist/commonjs/components/Inspector/ConfirmationModal.js +23 -25
- package/dist/commonjs/components/Inspector/ConsoleTab.js +5 -5
- package/dist/commonjs/components/Inspector/CrashTab.js +44 -11
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
- package/dist/commonjs/components/Inspector/FabLauncher.js +30 -25
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
- package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
- package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +1 -1
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +114 -32
- package/dist/commonjs/components/Inspector/MainScreen.js +26 -19
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +38 -35
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +345 -123
- package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
- package/dist/commonjs/components/Inspector/PushCard.js +1 -1
- package/dist/commonjs/components/Inspector/PushDetail.js +9 -9
- package/dist/commonjs/components/Inspector/PushTab.js +3 -3
- package/dist/commonjs/components/Inspector/ReduxTab.js +9 -7
- package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
- package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
- package/dist/commonjs/components/Inspector/SettingsPanel.js +102 -73
- package/dist/commonjs/components/Inspector/SocketCard.js +1 -1
- package/dist/commonjs/components/Inspector/SocketDetail.js +73 -63
- package/dist/commonjs/components/Inspector/SocketTab.js +4 -4
- package/dist/commonjs/components/Inspector/StorageTab.js +10 -10
- package/dist/commonjs/components/Inspector/SupportModal.js +2 -2
- package/dist/commonjs/components/Inspector/SupportPage.js +1 -1
- package/dist/commonjs/components/JsonViewer.js +47 -45
- package/dist/commonjs/components/LogCard.js +22 -20
- package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
- package/dist/commonjs/components/NetworkIcons.d.ts +27 -0
- package/dist/commonjs/components/NetworkIcons.js +103 -5
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
- package/dist/commonjs/constants/telemetryConfig.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/crash.d.ts +1 -1
- package/dist/commonjs/crash.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
- package/dist/commonjs/customHooks/crashHandler.js +7 -7
- package/dist/commonjs/editor.d.ts +13 -0
- package/dist/commonjs/editor.js +1 -0
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +1 -1
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/helpers/telemetry.js +1 -1
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -1
- package/dist/commonjs/i18n/locales/bn.json +1 -1
- package/dist/commonjs/i18n/locales/de.json +1 -1
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -1
- package/dist/commonjs/i18n/locales/fr.json +1 -1
- package/dist/commonjs/i18n/locales/gu.json +1 -1
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -1
- package/dist/commonjs/i18n/locales/it.json +1 -1
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -1
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -1
- package/dist/commonjs/i18n/locales/mr.json +1 -1
- package/dist/commonjs/i18n/locales/nl.json +1 -1
- package/dist/commonjs/i18n/locales/pa.json +1 -1
- package/dist/commonjs/i18n/locales/pl.json +1 -1
- package/dist/commonjs/i18n/locales/pt.json +1 -1
- package/dist/commonjs/i18n/locales/ru.json +1 -1
- package/dist/commonjs/i18n/locales/ta.json +1 -1
- package/dist/commonjs/i18n/locales/te.json +1 -1
- package/dist/commonjs/i18n/locales/tr.json +1 -1
- package/dist/commonjs/i18n/locales/vi.json +1 -1
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +4 -1
- package/dist/commonjs/index.js +3 -3
- package/dist/commonjs/native/NativeInspector.d.ts +3 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
- package/dist/commonjs/styles/AppColors.d.ts +42 -2
- package/dist/commonjs/styles/AppColors.js +1 -1
- package/dist/commonjs/styles/common.js +1 -1
- package/dist/commonjs/styles/index.d.ts +7 -0
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/editor.d.ts +96 -0
- package/dist/commonjs/types/editor.js +1 -0
- package/dist/commonjs/types/interfaces.d.ts +21 -0
- package/dist/esm/capture.d.ts +2 -0
- package/dist/esm/capture.js +1 -1
- package/dist/esm/components/AnalyticsDetail.js +31 -31
- package/dist/esm/components/AnalyticsEventCard.js +1 -1
- package/dist/esm/components/AnalyticsGraph.js +74 -74
- package/dist/esm/components/AnimatedBrandOwl.js +114 -114
- package/dist/esm/components/AppHeaderLogo.js +7 -7
- package/dist/esm/components/BrandCircleIcon.js +70 -70
- package/dist/esm/components/BrandSquareIcon.js +61 -61
- package/dist/esm/components/ConsoleLogCard.js +1 -1
- package/dist/esm/components/Inspector/AnalyticsTab.js +14 -14
- package/dist/esm/components/Inspector/ConfirmationModal.js +23 -25
- package/dist/esm/components/Inspector/ConsoleTab.js +17 -17
- package/dist/esm/components/Inspector/CrashTab.js +202 -169
- package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
- package/dist/esm/components/Inspector/FabLauncher.js +56 -51
- package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
- package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
- package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
- package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
- package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +1 -1
- package/dist/esm/components/Inspector/LanguageSelectorModal.js +140 -58
- package/dist/esm/components/Inspector/MainScreen.js +61 -54
- package/dist/esm/components/Inspector/MediaGalleryTab.js +55 -52
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -123
- package/dist/esm/components/Inspector/NetworkTab.js +74 -74
- package/dist/esm/components/Inspector/PushCard.js +1 -1
- package/dist/esm/components/Inspector/PushDetail.js +18 -18
- package/dist/esm/components/Inspector/PushTab.js +1 -1
- package/dist/esm/components/Inspector/ReduxTab.js +18 -16
- package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
- package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
- package/dist/esm/components/Inspector/SettingsPanel.js +224 -195
- package/dist/esm/components/Inspector/SocketCard.js +8 -8
- package/dist/esm/components/Inspector/SocketDetail.js +106 -96
- package/dist/esm/components/Inspector/SocketTab.js +18 -18
- package/dist/esm/components/Inspector/StorageTab.js +47 -47
- package/dist/esm/components/Inspector/SupportModal.js +64 -64
- package/dist/esm/components/Inspector/SupportPage.js +5 -5
- package/dist/esm/components/JsonViewer.js +51 -49
- package/dist/esm/components/LogCard.js +41 -39
- package/dist/esm/components/ModuleErrorBoundary.js +10 -10
- package/dist/esm/components/NetworkIcons.d.ts +27 -0
- package/dist/esm/components/NetworkIcons.js +101 -3
- package/dist/esm/constants/telemetryConfig.d.ts +3 -3
- package/dist/esm/constants/telemetryConfig.js +1 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/crash.d.ts +1 -1
- package/dist/esm/crash.js +1 -1
- package/dist/esm/customHooks/crashHandler.d.ts +2 -1
- package/dist/esm/customHooks/crashHandler.js +7 -7
- package/dist/esm/editor.d.ts +13 -0
- package/dist/esm/editor.js +1 -0
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/helpers/settingsStore.js +1 -1
- package/dist/esm/helpers/telemetry.js +1 -1
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -1
- package/dist/esm/i18n/locales/bn.json +1 -1
- package/dist/esm/i18n/locales/de.json +1 -1
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -1
- package/dist/esm/i18n/locales/fr.json +1 -1
- package/dist/esm/i18n/locales/gu.json +1 -1
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -1
- package/dist/esm/i18n/locales/it.json +1 -1
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -1
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -1
- package/dist/esm/i18n/locales/mr.json +1 -1
- package/dist/esm/i18n/locales/nl.json +1 -1
- package/dist/esm/i18n/locales/pa.json +1 -1
- package/dist/esm/i18n/locales/pl.json +1 -1
- package/dist/esm/i18n/locales/pt.json +1 -1
- package/dist/esm/i18n/locales/ru.json +1 -1
- package/dist/esm/i18n/locales/ta.json +1 -1
- package/dist/esm/i18n/locales/te.json +1 -1
- package/dist/esm/i18n/locales/tr.json +1 -1
- package/dist/esm/i18n/locales/vi.json +1 -1
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +4 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/native/NativeInspector.d.ts +3 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
- package/dist/esm/styles/AppColors.d.ts +42 -2
- package/dist/esm/styles/AppColors.js +1 -1
- package/dist/esm/styles/common.js +1 -1
- package/dist/esm/styles/index.d.ts +7 -0
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/editor.d.ts +96 -0
- package/dist/esm/types/editor.js +1 -0
- package/dist/esm/types/interfaces.d.ts +21 -0
- package/editor.d.ts +1 -0
- package/editor.js +1 -0
- package/ios/NetworkInspectorModule.mm +429 -0
- package/package.json +10 -1
- package/react-native-inapp-inspector.podspec +1 -1
- package/src/native/NativeInspector.ts +57 -4
- package/src/native/NativeNetworkInspector.ts +4 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import{useCallback as Z,useEffect as G,useRef as x,useState as E}from"react";import{Animated as o,Dimensions as Be,PanResponder as De,Platform as _,StyleSheet as ee,Text as W,View as S}from"react-native";import Se from"react-native-linear-gradient";import{useInspector as ze}from"./InspectorContext";import N from"../TouchableScale";import{GripVerticalIcon as Ee,ScreenshotCaptureIcon as Fe,ScreenRecordIcon as $e}from"../NetworkIcons";import{ScreenCapture as V}from"../../capture";import{triggerNativeHaptic as B}from"../../native/NativeInspector";import{showToast as v}from"../../helpers/toast";import{AppColors as s}from"../../styles/AppColors";import{AppFonts as xe}from"../../styles/AppFonts";import{useTranslation as Ae}from"../../i18n";import{MediaPreviewModal as Le}from"./MediaPreviewModal";export const FloatingCaptureWidget=()=>{const{refreshMediaCount:R,captureFps:X,captureScale:Y,captureBitrate:F,captureMaxDurationSeconds:j,captureAudioMode:q,activeTab:ve,settingsPage:Re,peekMode:Oe}=ze(),{t:n}=Ae(),[M,D]=E(!1),[Ie,$]=E(!1),[Ce,A]=E(0),I=x(null),[H,T]=E(null),k=x(new o.Value(1)).current,z=x(new o.Value(0)).current,i=x(new o.ValueXY({x:0,y:0})).current,C=x({x:0,y:0});G(()=>{const e=i.x.addListener(a=>C.current.x=a.value),t=i.y.addListener(a=>C.current.y=a.value);return()=>{i.x.removeListener(e),i.y.removeListener(t)}},[i]);const P=x(!1),Ve=x(De.create({onStartShouldSetPanResponder:()=>!1,onStartShouldSetPanResponderCapture:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>2||Math.abs(t.dy)>2,onMoveShouldSetPanResponderCapture:(e,t)=>Math.abs(t.dx)>2||Math.abs(t.dy)>2,onPanResponderGrant:()=>{P.current=!0,i.setOffset({x:C.current.x,y:C.current.y}),i.setValue({x:0,y:0})},onPanResponderMove:(e,t)=>{i.setValue({x:t.dx,y:t.dy})},onPanResponderTerminationRequest:()=>!1,onShouldBlockNativeResponder:()=>!0,onPanResponderRelease:()=>{i.flattenOffset(),setTimeout(()=>{P.current=!1},150);const{width:e,height:t}=Be.get("window"),a=e/2-30,J=-a,K=20,Q=-(t-120),L=C.current.x,O=C.current.y;if(L<J||L>a||O<Q||O>K){const ke=Math.min(Math.max(L,J),a),Pe=Math.min(Math.max(O,Q),K);o.spring(i,{toValue:{x:ke,y:Pe},friction:7,tension:50,useNativeDriver:!1}).start()}},onPanResponderTerminate:()=>{i.flattenOffset(),P.current=!1}})).current;G(()=>{V.isRecording().then(e=>{D(e)}).catch(()=>{})},[]),G(()=>{let e=null;return M?(A(0),I.current=setInterval(()=>{A(t=>t+1)},1e3),e=o.loop(o.sequence([o.timing(k,{toValue:1.15,duration:500,useNativeDriver:!0}),o.timing(k,{toValue:1,duration:500,useNativeDriver:!0})])),e.start()):(I.current&&(clearInterval(I.current),I.current=null),A(0),k.setValue(1)),()=>{I.current&&clearInterval(I.current),e&&e.stop()}},[M,k]);const Me=Z(async()=>{if(!P.current)try{B("light"),$(!0),await new Promise(t=>setTimeout(t,60));const e=await V.takeScreenshot({format:"png",quality:.9,hideInspector:!1});if($(!1),o.sequence([o.timing(z,{toValue:.65,duration:70,useNativeDriver:!0}),o.timing(z,{toValue:0,duration:200,useNativeDriver:!0})]).start(),e){B("success");const t={id:`screenshot_${e.timestamp}.png`,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`screenshot_${e.timestamp}.png`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};T(t),R?.().catch(()=>{}),v(n("header.screenshotCaptured","Screenshot captured"))}else v(n("header.screenshotFailed","Failed to capture screenshot"))}catch{$(!1),v(n("header.screenshotError","Error capturing screenshot"))}},[R,z,n]),U=Z(async()=>{if(!P.current)try{if(M){B("medium");const e=await V.stopRecording();if(D(!1),e){B("success");const t={id:`video_${e.timestamp}.${e.format}`,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`video_${e.timestamp}.${e.format}`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};T(t),R?.().catch(()=>{}),v(n("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else B("medium"),await V.startRecording({fps:X,scale:Y,audioSource:q,bitrate:F>0?F:void 0,maxDurationSeconds:j})?(D(!0),v(n("header.recordingStarted","Recording started"))):v(n("header.recordingStartFailed","Failed to start recording"))}catch{v(n("header.recordingError","Error during screen recording")),D(!1)}},[M,X,Y,F,j,q,R,n]),Te=e=>{const t=Math.floor(e/60),a=e%60;return`${t<10?"0":""}${t}:${a<10?"0":""}${a}`};return ve==="media"||Re==="media"?null:<>
|
|
2
|
+
|
|
3
|
+
<o.View pointerEvents="none"style={[r.flashOverlay,{opacity:z}]}/>
|
|
4
|
+
|
|
5
|
+
{!Ie&&<o.View{...Ve.panHandlers}style={[r.container,{transform:[{translateX:i.x},{translateY:i.y}]}]}>
|
|
6
|
+
|
|
7
|
+
{M?<S style={r.recordingShadowWrapper}>
|
|
8
|
+
<N onPress={U}style={r.recordingPillWrapper}>
|
|
9
|
+
<Se colors={["#E11D48","#BE123C"]}start={{x:0,y:0}}end={{x:1,y:0}}style={r.recordingPill}>
|
|
10
|
+
<o.View style={[r.recordingDot,{transform:[{scale:k}]}]}/>
|
|
11
|
+
<W style={r.recordingText}>
|
|
12
|
+
REC {Te(Ce)}
|
|
13
|
+
</W>
|
|
14
|
+
<S style={r.stopIconBadge}>
|
|
15
|
+
<S style={r.stopIconSquare}/>
|
|
16
|
+
</S>
|
|
17
|
+
</Se>
|
|
18
|
+
</N>
|
|
19
|
+
</S>:<S style={r.dockShadowWrapper}>
|
|
20
|
+
<Se colors={["#0E1326","#1A1E38","#0E1326"]}start={{x:0,y:0}}end={{x:1,y:0}}style={r.dockBar}>
|
|
21
|
+
|
|
22
|
+
<S style={r.dragGripArea}pointerEvents="none">
|
|
23
|
+
<Ee size={13}color="rgba(255, 255, 255, 0.45)"/>
|
|
24
|
+
</S>
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
<N onPress={Me}style={r.menuItemBtn}accessible={!0}accessibilityLabel="Take Screenshot">
|
|
28
|
+
<S style={[r.menuItemIconCircle,{backgroundColor:"rgba(56, 189, 248, 0.22)"}]}>
|
|
29
|
+
<Fe size={14}color={s.sky400}/>
|
|
30
|
+
</S>
|
|
31
|
+
<W style={r.menuItemText}>
|
|
32
|
+
{n("header.screenshot","Screenshot")}
|
|
33
|
+
</W>
|
|
34
|
+
</N>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<S style={r.dockDivider}/>
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
<N onPress={U}style={r.menuItemBtn}accessible={!0}accessibilityLabel={n("header.recordScreen","Record Screen")}>
|
|
41
|
+
<S style={[r.menuItemIconCircle,{backgroundColor:"rgba(244, 63, 94, 0.24)"}]}>
|
|
42
|
+
<$e size={14}color={s.rose400||"#FB7185"}/>
|
|
43
|
+
</S>
|
|
44
|
+
<W style={r.menuItemText}>
|
|
45
|
+
{n("header.record","Record")}
|
|
46
|
+
</W>
|
|
47
|
+
</N>
|
|
48
|
+
</Se>
|
|
49
|
+
</S>}
|
|
50
|
+
</o.View>}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
<Le item={H}visible={!!H}onClose={()=>T(null)}onDelete={async e=>{await V.deleteMedia(e.uri),R?.().catch(()=>{}),T(null)}}onConvertToGif={async e=>{const t=await V.convertToGif(e.uri,{fps:12,width:480});t&&(R?.().catch(()=>{}),T({id:`anim_${t.timestamp}.gif`,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||`anim_${t.timestamp}.gif`,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs}))}}/>
|
|
54
|
+
</>};const r=ee.create({flashOverlay:{...ee.absoluteFillObject,backgroundColor:s.white,zIndex:999999},container:{position:"absolute",bottom:_.OS==="ios"?22:16,alignSelf:"center",alignItems:"center",justifyContent:"center",zIndex:999999,elevation:999999},dockShadowWrapper:{borderRadius:24,backgroundColor:"#0D1120",..._.select({ios:{shadowColor:s.black,shadowOffset:{width:0,height:6},shadowOpacity:.45,shadowRadius:14},android:{elevation:16}})},dockBar:{flexDirection:"row",alignItems:"center",borderRadius:24,width:272,paddingVertical:0,paddingHorizontal:0,overflow:"hidden"},dragGripArea:{paddingLeft:10,paddingRight:2,paddingVertical:10,alignItems:"center",justifyContent:"center"},dockDivider:{width:1,height:20,backgroundColor:"rgba(255, 255, 255, 0.12)"},menuItemBtn:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:7,paddingVertical:9,paddingHorizontal:10},menuItemIconCircle:{width:24,height:24,borderRadius:12,alignItems:"center",justifyContent:"center"},menuItemText:{fontFamily:xe.interSemiBold,fontSize:12,color:s.white,letterSpacing:.1},recordingShadowWrapper:{borderRadius:20,..._.select({ios:{shadowColor:s.black,shadowOffset:{width:0,height:4},shadowOpacity:.4,shadowRadius:10},android:{elevation:12}})},recordingPillWrapper:{borderRadius:20,overflow:"hidden"},recordingPill:{flexDirection:"row",alignItems:"center",gap:7,paddingVertical:6.5,paddingHorizontal:12,borderRadius:20,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.35)"},recordingDot:{width:7,height:7,borderRadius:3.5,backgroundColor:s.white},recordingText:{fontFamily:xe.interBold,fontSize:11,color:s.white,letterSpacing:.3},stopIconBadge:{width:16,height:16,borderRadius:8,backgroundColor:"rgba(255, 255, 255, 0.28)",alignItems:"center",justifyContent:"center",marginLeft:2},stopIconSquare:{width:5.5,height:5.5,borderRadius:1,backgroundColor:s.white}});export default FloatingCaptureWidget;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CrashRecord } from '../../types';
|
|
3
|
+
interface GlobalCrashScreenModalProps {
|
|
4
|
+
visible: boolean;
|
|
5
|
+
crash: CrashRecord | null;
|
|
6
|
+
onDismiss: () => void;
|
|
7
|
+
onOpenInspector: () => void;
|
|
8
|
+
onRetry?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const GlobalCrashScreenModal: React.FC<GlobalCrashScreenModalProps>;
|
|
11
|
+
export default GlobalCrashScreenModal;
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import j,{useMemo as G}from"react";import{Modal as U,StyleSheet as J,Text as T,View as C,ScrollView as Y,SafeAreaView as K,Platform as X}from"react-native";import E from"react-native-linear-gradient";import F from"../TouchableScale";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as S}from"../../styles/AppFonts";import{exportCrashReport as Q}from"../../customHooks/crashHandler";import{copyToClipboard as Z}from"../../helpers";import{showToast as _}from"../../helpers/toast";import{useTranslation as ee}from"../../i18n";import{WarningTriangleIcon as Te,CopyIcon as Ce,RefreshCcwIcon as Se,CloseWhite as Be,CircleAlertIcon as Ve,TerminalIcon as Re,CodeBracketsIcon as Ie,RepeatIcon as Fe,ShieldAlertIcon as W,FlameIcon as He,ChipIcon as Le,LayoutIcon as D,HourglassIcon as Ae,JsIcon as Me}from"../NetworkIcons";export const GlobalCrashScreenModal=j.memo(({visible:H,crash:h,onDismiss:L,onOpenInspector:O,onRetry:A})=>{const{t:B}=ee(),M=G(()=>h?Q(h,"markdown"):"",[h]);if(!H||!h)return null;const z=h.isFatal,P=h.type||"js",R=h.parsedStack&&h.parsedStack.length>0?h.parsedStack.find(V=>V.isAppCode)||h.parsedStack[0]:null,N=()=>{M&&(Z(M,B("errors.errorReport","Crash Report")),_(B("common.copied","Copied crash diagnostics to clipboard")))},v=()=>{switch(P){case"native":return<Le size={12}color={e.cyan600}/>;case"render":return<D size={12}color={e.purple400}/>;case"promise":return<Ae size={12}color={e.amber400}/>;default:return<Me size={12}color={e.yellow400}/>}};return<U visible={H}transparent={!1}animationType="fade"statusBarTranslucent={!0}onRequestClose={L}>
|
|
2
|
+
<K style={t.safeArea}>
|
|
3
|
+
<C style={t.container}>
|
|
4
|
+
|
|
5
|
+
<C style={t.header}>
|
|
6
|
+
<E colors={[e.red600,e.rose600]}start={{x:0,y:0}}end={{x:1,y:1}}style={t.iconGlowWrap}>
|
|
7
|
+
<Te color={e.white}size={24}/>
|
|
8
|
+
</E>
|
|
9
|
+
|
|
10
|
+
<C style={t.headerTextCol}>
|
|
11
|
+
<C style={t.badgeRow}>
|
|
12
|
+
<C style={[t.crashBadge,z&&t.crashBadgeFatal]}>
|
|
13
|
+
{z?<He size={10}color={e.red500}/>:v()}
|
|
14
|
+
<T style={[t.crashBadgeText,z&&t.crashBadgeTextFatal]}>
|
|
15
|
+
{z?B("crash.fatalBadge","FATAL CRASH"):`${P.toUpperCase()} ERROR`}
|
|
16
|
+
</T>
|
|
17
|
+
</C>
|
|
18
|
+
|
|
19
|
+
<C style={t.shieldBadge}>
|
|
20
|
+
<W size={10}color={e.emerald400}/>
|
|
21
|
+
<T style={t.shieldBadgeText}>
|
|
22
|
+
{B("errors.protected","SHIELD PROTECTED")}
|
|
23
|
+
</T>
|
|
24
|
+
</C>
|
|
25
|
+
</C>
|
|
26
|
+
|
|
27
|
+
<T style={t.title}>
|
|
28
|
+
{B("errors.rootCauseTitle","Crash Intercepted")}
|
|
29
|
+
</T>
|
|
30
|
+
<T style={t.subtitle}numberOfLines={1}>
|
|
31
|
+
{B("errors.rootCauseSubtitle","Native crash prevented \u2022 Diagnostics captured")}
|
|
32
|
+
</T>
|
|
33
|
+
</C>
|
|
34
|
+
|
|
35
|
+
<F onPress={L}hitSlop={10}style={t.closeBtn}>
|
|
36
|
+
<Be size={12}color={e.slate400}/>
|
|
37
|
+
</F>
|
|
38
|
+
</C>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
<Y style={t.scrollArea}contentContainerStyle={t.scrollContent}showsVerticalScrollIndicator={!0}>
|
|
42
|
+
|
|
43
|
+
<C style={t.errorBox}>
|
|
44
|
+
<C style={t.errorBoxHeader}>
|
|
45
|
+
<Ve size={14}color={e.red500}/>
|
|
46
|
+
<T style={t.errorBoxTitle}>
|
|
47
|
+
{h.name||B("crash.unknownException","Exception")}
|
|
48
|
+
</T>
|
|
49
|
+
</C>
|
|
50
|
+
<T style={t.errorMessage}selectable={!0}>
|
|
51
|
+
{h.message||B("crash.unknownException","Unknown Exception")}
|
|
52
|
+
</T>
|
|
53
|
+
</C>
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
{R&&<C style={t.locationCard}>
|
|
57
|
+
<C style={t.cardHeaderRow}>
|
|
58
|
+
<Re size={13}color={e.sky400}/>
|
|
59
|
+
<T style={t.cardHeaderTitle}>
|
|
60
|
+
{B("errors.exactLocation","EXACT ROOT CAUSE")}
|
|
61
|
+
</T>
|
|
62
|
+
</C>
|
|
63
|
+
|
|
64
|
+
<C style={t.locRow}>
|
|
65
|
+
<T style={t.locLabel}>
|
|
66
|
+
{B("errors.file","File:")}
|
|
67
|
+
</T>
|
|
68
|
+
<T style={t.locValFile}numberOfLines={1}selectable={!0}>
|
|
69
|
+
{R.file}
|
|
70
|
+
</T>
|
|
71
|
+
</C>
|
|
72
|
+
|
|
73
|
+
<C style={t.locRow}>
|
|
74
|
+
<T style={t.locLabel}>
|
|
75
|
+
{B("errors.lineCol","Line / Col:")}
|
|
76
|
+
</T>
|
|
77
|
+
<T style={t.locValNum}>
|
|
78
|
+
{R.lineNumber}:{R.column}
|
|
79
|
+
</T>
|
|
80
|
+
</C>
|
|
81
|
+
|
|
82
|
+
<C style={t.locRow}>
|
|
83
|
+
<T style={t.locLabel}>
|
|
84
|
+
{B("errors.function","Function:")}
|
|
85
|
+
</T>
|
|
86
|
+
<T style={t.locValMethod}numberOfLines={1}>
|
|
87
|
+
{R.method}()
|
|
88
|
+
</T>
|
|
89
|
+
</C>
|
|
90
|
+
|
|
91
|
+
{R.raw&&<T style={t.fullPathText}numberOfLines={2}selectable={!0}>
|
|
92
|
+
{R.raw}
|
|
93
|
+
</T>}
|
|
94
|
+
</C>}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
{h.parsedStack&&h.parsedStack.length>0&&<C style={t.stackCard}>
|
|
98
|
+
<C style={t.cardHeaderRow}>
|
|
99
|
+
<Ie size={13}color={e.purple400}/>
|
|
100
|
+
<T style={t.cardHeaderTitle}>
|
|
101
|
+
{B("errors.callStack","CALL STACK")}
|
|
102
|
+
</T>
|
|
103
|
+
<T style={t.cardHeaderCount}>
|
|
104
|
+
{h.parsedStack.length} frames
|
|
105
|
+
</T>
|
|
106
|
+
</C>
|
|
107
|
+
|
|
108
|
+
{h.parsedStack.slice(0,10).map((V,I)=><C key={I}style={[t.frameItem,V.isAppCode&&t.frameItemProject]}>
|
|
109
|
+
<C style={t.frameNumBadge}>
|
|
110
|
+
<T style={[t.frameNumText,V.isAppCode&&{color:e.sky400}]}>
|
|
111
|
+
#{I+1}
|
|
112
|
+
</T>
|
|
113
|
+
</C>
|
|
114
|
+
<C style={{flex:1}}>
|
|
115
|
+
<T style={[t.frameMethod,V.isAppCode&&t.frameMethodProject]}numberOfLines={1}>
|
|
116
|
+
{V.method}
|
|
117
|
+
</T>
|
|
118
|
+
<T style={t.frameLoc}numberOfLines={1}>
|
|
119
|
+
{V.file}:{V.lineNumber}
|
|
120
|
+
</T>
|
|
121
|
+
</C>
|
|
122
|
+
{V.isAppCode&&<C style={t.appTag}>
|
|
123
|
+
<T style={t.appTagText}>APP</T>
|
|
124
|
+
</C>}
|
|
125
|
+
</C>)}
|
|
126
|
+
</C>}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
{h.componentStack&&<C style={t.stackCard}>
|
|
130
|
+
<C style={t.cardHeaderRow}>
|
|
131
|
+
<D size={13}color={e.purple400}/>
|
|
132
|
+
<T style={t.cardHeaderTitle}>
|
|
133
|
+
{B("crash.componentHierarchy","COMPONENT HIERARCHY")}
|
|
134
|
+
</T>
|
|
135
|
+
</C>
|
|
136
|
+
<T style={t.rawStackText}selectable={!0}>
|
|
137
|
+
{h.componentStack}
|
|
138
|
+
</T>
|
|
139
|
+
</C>}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
{h.breadcrumbs&&h.breadcrumbs.length>0&&<C style={t.stackCard}>
|
|
143
|
+
<C style={t.cardHeaderRow}>
|
|
144
|
+
<Fe size={13}color={e.amber400}/>
|
|
145
|
+
<T style={t.cardHeaderTitle}>
|
|
146
|
+
{B("crash.breadcrumbTrail","RECENT TRAIL")}
|
|
147
|
+
</T>
|
|
148
|
+
<T style={t.cardHeaderCount}>
|
|
149
|
+
{h.breadcrumbs.length} events
|
|
150
|
+
</T>
|
|
151
|
+
</C>
|
|
152
|
+
|
|
153
|
+
{h.breadcrumbs.slice(0,6).map((V,I)=>{const $=new Date(V.timestamp).toLocaleTimeString();return<C key={I}style={t.breadcrumbItem}>
|
|
154
|
+
<C style={t.breadcrumbTag}>
|
|
155
|
+
<T style={t.breadcrumbTagText}>
|
|
156
|
+
{V.type.toUpperCase()}
|
|
157
|
+
</T>
|
|
158
|
+
</C>
|
|
159
|
+
<T style={t.breadcrumbMsg}numberOfLines={2}>
|
|
160
|
+
{V.message}
|
|
161
|
+
</T>
|
|
162
|
+
<T style={t.breadcrumbTime}>{$}</T>
|
|
163
|
+
</C>})}
|
|
164
|
+
</C>}
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
{h.deviceInfo&&<C style={t.telemetryCard}>
|
|
168
|
+
<T style={t.telemetryTitle}>
|
|
169
|
+
{B("crash.deviceDiagnostics","HARDWARE & RUNTIME TELEMETRY")}
|
|
170
|
+
</T>
|
|
171
|
+
<C style={t.telemetryGrid}>
|
|
172
|
+
<C style={t.telemetryPill}>
|
|
173
|
+
<T style={t.telemetryLabel}>OS</T>
|
|
174
|
+
<T style={t.telemetryValue}>
|
|
175
|
+
{h.deviceInfo.platform?.toUpperCase()}{" "}
|
|
176
|
+
{h.deviceInfo.osVersion}
|
|
177
|
+
</T>
|
|
178
|
+
</C>
|
|
179
|
+
<C style={t.telemetryPill}>
|
|
180
|
+
<T style={t.telemetryLabel}>RN Version</T>
|
|
181
|
+
<T style={t.telemetryValue}>
|
|
182
|
+
{h.deviceInfo.rnVersion||"N/A"}
|
|
183
|
+
</T>
|
|
184
|
+
</C>
|
|
185
|
+
<C style={t.telemetryPill}>
|
|
186
|
+
<T style={t.telemetryLabel}>Engine</T>
|
|
187
|
+
<T style={t.telemetryValue}>
|
|
188
|
+
{h.deviceInfo.isHermes?"Hermes":"JSC"}
|
|
189
|
+
</T>
|
|
190
|
+
</C>
|
|
191
|
+
<C style={t.telemetryPill}>
|
|
192
|
+
<T style={t.telemetryLabel}>Architecture</T>
|
|
193
|
+
<T style={t.telemetryValue}>
|
|
194
|
+
{h.deviceInfo.isFabric?"Fabric (New)":"Paper"}
|
|
195
|
+
</T>
|
|
196
|
+
</C>
|
|
197
|
+
{h.memoryInfo&&<C style={t.telemetryPill}>
|
|
198
|
+
<T style={t.telemetryLabel}>JS Heap</T>
|
|
199
|
+
<T style={t.telemetryValue}>
|
|
200
|
+
{h.memoryInfo.usedJSHeapSize} / {h.memoryInfo.totalJSHeapSize} MB
|
|
201
|
+
</T>
|
|
202
|
+
</C>}
|
|
203
|
+
</C>
|
|
204
|
+
</C>}
|
|
205
|
+
</Y>
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
<C style={t.footer}>
|
|
209
|
+
{A&&<F onPress={A}style={t.retryBtn}>
|
|
210
|
+
<Se size={14}color={e.white}/>
|
|
211
|
+
<T style={t.retryBtnText}>
|
|
212
|
+
{B("errors.retry","Try Again")}
|
|
213
|
+
</T>
|
|
214
|
+
</F>}
|
|
215
|
+
|
|
216
|
+
<F onPress={O}style={t.inspectorBtn}>
|
|
217
|
+
<E colors={[e.indigo600,e.violet600]}start={{x:0,y:0}}end={{x:1,y:1}}style={t.inspectorBtnGradient}>
|
|
218
|
+
<W size={14}color={e.white}/>
|
|
219
|
+
<T style={t.inspectorBtnText}>
|
|
220
|
+
{B("crash.openInInspector","Open in Inspector")}
|
|
221
|
+
</T>
|
|
222
|
+
</E>
|
|
223
|
+
</F>
|
|
224
|
+
|
|
225
|
+
<F onPress={N}style={t.copyBtn}>
|
|
226
|
+
<Ce size={14}color={e.slate200}/>
|
|
227
|
+
<T style={t.copyBtnText}>
|
|
228
|
+
{B("errors.copy","Copy")}
|
|
229
|
+
</T>
|
|
230
|
+
</F>
|
|
231
|
+
</C>
|
|
232
|
+
</C>
|
|
233
|
+
</K>
|
|
234
|
+
</U>});const t=J.create({safeArea:{flex:1,backgroundColor:e.slate900},container:{flex:1,backgroundColor:e.slate900},header:{flexDirection:"row",alignItems:"center",paddingHorizontal:16,paddingTop:X.OS==="android"?24:12,paddingBottom:12,backgroundColor:e.slate850,borderBottomWidth:1,borderBottomColor:e.slate800,gap:12},iconGlowWrap:{width:42,height:42,borderRadius:12,alignItems:"center",justifyContent:"center",shadowColor:e.red500,shadowOffset:{width:0,height:4},shadowOpacity:.35,shadowRadius:8,elevation:4},headerTextCol:{flex:1},badgeRow:{flexDirection:"row",alignItems:"center",gap:6,marginBottom:3},crashBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.red500}22`,paddingHorizontal:6,paddingVertical:2,borderRadius:5,borderWidth:1,borderColor:`${e.red500}44`},crashBadgeFatal:{backgroundColor:`${e.red500}33`,borderColor:e.red500},crashBadgeText:{fontFamily:S.interBold,fontSize:9.5,color:e.red500,letterSpacing:.4},crashBadgeTextFatal:{color:e.red500},shieldBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.emerald500}20`,paddingHorizontal:6,paddingVertical:2,borderRadius:5,borderWidth:1,borderColor:`${e.emerald500}44`},shieldBadgeText:{fontFamily:S.interBold,fontSize:9,color:e.emerald400,letterSpacing:.4},title:{fontFamily:S.interBold,fontSize:16,color:e.white,letterSpacing:-.2},subtitle:{fontFamily:S.interRegular,fontSize:11,color:e.slate400,marginTop:1},closeBtn:{width:30,height:30,borderRadius:15,backgroundColor:e.slate800,alignItems:"center",justifyContent:"center"},scrollArea:{flex:1},scrollContent:{padding:16,gap:12,paddingBottom:24},errorBox:{backgroundColor:`${e.red500}16`,borderRadius:12,borderWidth:1,borderColor:`${e.red500}40`,padding:14,gap:6},errorBoxHeader:{flexDirection:"row",alignItems:"center",gap:6},errorBoxTitle:{fontFamily:S.interBold,fontSize:12,color:e.red500,letterSpacing:.4},errorMessage:{fontFamily:S.interBold,fontSize:13.5,color:e.red100,lineHeight:19},locationCard:{backgroundColor:e.slate850,borderRadius:12,padding:14,borderWidth:1,borderColor:e.slate800,gap:8},cardHeaderRow:{flexDirection:"row",alignItems:"center",gap:6,marginBottom:4},cardHeaderTitle:{fontFamily:S.interBold,fontSize:10.5,color:e.slate200,letterSpacing:.6,flex:1},cardHeaderCount:{fontFamily:S.interMedium,fontSize:10,color:e.slate400},locRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},locLabel:{fontFamily:S.interMedium,fontSize:11.5,color:e.slate400,minWidth:80},locValFile:{fontFamily:S.interBold,fontSize:12,color:e.sky400,flex:1,textAlign:"right"},locValNum:{fontFamily:S.interBold,fontSize:12,color:e.white},locValMethod:{fontFamily:S.interMedium,fontSize:12,color:e.purple400},fullPathText:{fontFamily:S.interRegular,fontSize:10,color:e.slate400,marginTop:4,paddingTop:6,borderTopWidth:1,borderTopColor:e.slate800},stackCard:{backgroundColor:e.slate850,borderRadius:12,padding:14,borderWidth:1,borderColor:e.slate800,gap:6},frameItem:{flexDirection:"row",alignItems:"center",backgroundColor:e.slate900,padding:9,borderRadius:8,gap:8,borderWidth:1,borderColor:e.slate800},frameItemProject:{borderColor:`${e.sky400}44`,backgroundColor:`${e.sky400}0F`},frameNumBadge:{width:22,alignItems:"center"},frameNumText:{fontFamily:S.interBold,fontSize:10,color:e.slate400},frameMethod:{fontFamily:S.interBold,fontSize:11.5,color:e.slate200},frameMethodProject:{color:e.white},frameLoc:{fontFamily:S.interRegular,fontSize:10,color:e.slate400,marginTop:1},appTag:{backgroundColor:`${e.sky400}26`,paddingHorizontal:5,paddingVertical:2,borderRadius:4},appTagText:{fontFamily:S.interBold,fontSize:8.5,color:e.sky400},rawStackText:{fontFamily:S.interRegular,fontSize:10.5,color:e.slate200,lineHeight:16,backgroundColor:e.slate900,padding:10,borderRadius:8},breadcrumbItem:{flexDirection:"row",alignItems:"center",gap:8,backgroundColor:e.slate900,padding:8,borderRadius:7,borderWidth:1,borderColor:e.slate800},breadcrumbTag:{backgroundColor:`${e.indigo600}20`,paddingHorizontal:5,paddingVertical:2,borderRadius:4},breadcrumbTagText:{fontFamily:S.interBold,fontSize:8.5,color:e.purple400},breadcrumbMsg:{flex:1,fontFamily:S.interRegular,fontSize:11,color:e.slate200},breadcrumbTime:{fontFamily:S.interMedium,fontSize:9.5,color:e.slate400},telemetryCard:{backgroundColor:e.slate850,borderRadius:12,padding:14,borderWidth:1,borderColor:e.slate800,gap:8},telemetryTitle:{fontFamily:S.interBold,fontSize:10,color:e.slate400,letterSpacing:.6},telemetryGrid:{flexDirection:"row",flexWrap:"wrap",gap:8},telemetryPill:{backgroundColor:e.slate900,paddingHorizontal:10,paddingVertical:6,borderRadius:8,borderWidth:1,borderColor:e.slate800},telemetryLabel:{fontFamily:S.interMedium,fontSize:9.5,color:e.slate400},telemetryValue:{fontFamily:S.interBold,fontSize:11,color:e.white,marginTop:2},footer:{flexDirection:"row",padding:14,backgroundColor:e.slate850,borderTopWidth:1,borderTopColor:e.slate800,gap:10,alignItems:"center"},retryBtn:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:e.red600,paddingHorizontal:14,height:42,borderRadius:10},retryBtnText:{fontFamily:S.interBold,fontSize:12.5,color:e.white},inspectorBtn:{flex:1,height:42,borderRadius:10,overflow:"hidden"},inspectorBtnGradient:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingHorizontal:12},inspectorBtnText:{fontFamily:S.interBold,fontSize:12.5,color:e.white},copyBtn:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:e.slate800,borderWidth:1,borderColor:e.slate700,paddingHorizontal:14,height:42,borderRadius:10},copyBtnText:{fontFamily:S.interBold,fontSize:12.5,color:e.slate200}});export default GlobalCrashScreenModal;
|