react-native-inapp-inspector 2.4.2 → 2.5.0
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/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/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/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
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"react";import{View as
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"react";import{View as T,Text as I,ScrollView as Ee,TextInput as Xe,Dimensions as Ue,Platform as w,PixelRatio as ze,StatusBar as Ze,StyleSheet as Qe,NativeModules as q}from"react-native";import Z from"../TouchableScale";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as D}from"../../styles/AppFonts";import{useTranslation as et}from"../../i18n";import{CpuIcon as St,WifiIcon as Ct,ScreenIcon as Tt,LayersIcon as $t,KeyIcon as Oe,SearchIcon as He,ClearIcon as It,CopyIcon as Se,BoltIcon as Mt,AppleIcon as Bt,AndroidIcon as Dt,ExportIcon as At}from"../NetworkIcons";import{getNativeDeviceMetrics as Vt,getNativeSystemMetrics as Lt}from"../../native/NativeInspector";import{copyToClipboard as ae,getAppName as Rt}from"../../helpers";import{showToast as ie}from"../../helpers/toast";import{LIB_VERSION as le}from"../../constants";const S=Ve.memo(({label:A,value:V,copyable:fe=!0,badge:C,subtext:re,isLast:$=!1})=>{const ne=V==null?"\u2014":typeof V=="boolean"?V?"Yes":"No":typeof V=="number"?V.toLocaleString():String(V);return<T style={[r.infoRow,$&&{borderBottomWidth:0}]}>
|
|
2
|
+
<T style={{flex:1,paddingRight:8,minWidth:0}}>
|
|
3
|
+
<T style={{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:6}}>
|
|
4
4
|
<I style={r.infoLabel}numberOfLines={2}>{A}</I>
|
|
5
|
-
{C
|
|
5
|
+
{C&&<T style={[r.infoBadge,{backgroundColor:C.bg,borderColor:`${C.color}33`}]}>
|
|
6
6
|
<I style={[r.infoBadgeText,{color:C.color}]}>
|
|
7
7
|
{C.text}
|
|
8
8
|
</I>
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
</T>}
|
|
10
|
+
</T>
|
|
11
11
|
{re&&<I style={r.infoSubtext}numberOfLines={2}>{re}</I>}
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
</T>
|
|
13
|
+
<T style={{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0,maxWidth:"58%",justifyContent:"flex-end"}}>
|
|
14
14
|
<I style={[r.infoValue,typeof V=="boolean"&&{color:V?e.emerald500:e.errorColor}]}numberOfLines={3}selectable>
|
|
15
15
|
{ne}
|
|
16
16
|
</I>
|
|
17
17
|
{fe&&V!==null&&V!==void 0&&<Z hitSlop={8}onPress={()=>{ae(ne,A),ie(`Copied ${A}`)}}style={r.rowCopyBtn}>
|
|
18
18
|
<Se size={11}color={e.grayTextWeak}/>
|
|
19
19
|
</Z>}
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
</T>
|
|
21
|
+
</T>});export const DeviceInfoTab=Ve.memo(()=>{const{t:A}=et(),[V,fe]=oe("overview"),[C,re]=oe(""),[$,ne]=oe(null),[Re,Ne]=oe(null),[H,we]=oe("Detecting..."),[J,Ce]=oe("0s"),Fe=Ve.useRef(Date.now()),ve=Pe(async()=>{try{const[f,R]=await Promise.all([Vt(),Lt()]);ne(f),Ne(R)}catch{}},[]);Le(()=>{ve();const f=setInterval(ve,3e3);return()=>clearInterval(f)},[ve]),Le(()=>{let f=!0;return(async()=>{try{const M=q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||q?.DevSettings?.serverHost;if(M&&typeof M=="string"){const B=M.split(":")[0].replace(/https?:\/\//,"");if(B&&B!=="localhost"&&B!=="127.0.0.1"){f&&we(B);return}}}catch{}try{const M=new AbortController,B=setTimeout(()=>M.abort(),1200),N=await fetch("https://api.ipify.org?format=json",{signal:M.signal});if(clearTimeout(B),N.ok){const G=await N.json();if(G&&G.ip&&f){we(G.ip);return}}}catch{}f&&we(w.OS==="android"?"10.0.2.15 (Local)":"127.0.0.1 (Local)")})(),()=>{f=!1}},[]),Le(()=>{const f=()=>{const M=Math.floor((Date.now()-Fe.current)/1e3),B=Math.floor(M/3600),N=Math.floor(M%3600/60),G=M%60;B>0?Ce(`${B}h ${N}m ${G}s`):N>0?Ce(`${N}m ${G}s`):Ce(`${G}s`)},R=setInterval(f,1e3);return f(),()=>clearInterval(R)},[]);const z=Ue.get("window"),E=Ue.get("screen"),L=ze.get(),X=ze.getFontScale(),j=z.width>=600||z.height>=1e3,Q=z.width>z.height,ee=w.OS==="android"?Ze.currentHeight||24:z.height>=812?44:20,k=F(()=>{const f=`${w.OS}-${w.Version}-${E.width}x${E.height}-${L}-${w.constants?.Brand||"generic"}-${w.constants?.Model||"device"}`;let R=3735928559,M=1103547991,B=305419896,N=2271560481;for(let Ae=0;Ae<f.length;Ae++){const de=f.charCodeAt(Ae);R=Math.imul(R^de,2654435761)>>>0,M=Math.imul(M^de,1597334677)>>>0,B=Math.imul(B^de,374761393)>>>0,N=Math.imul(N^de,668265263)>>>0}const G=R.toString(16).padStart(8,"0").toUpperCase(),je=(M&65535).toString(16).padStart(4,"0").toUpperCase(),Ye=(M>>>16&4095|16384).toString(16).padStart(4,"0").toUpperCase(),Ke=(B>>>16&16383|32768).toString(16).padStart(4,"0").toUpperCase(),qe=(B.toString(16).padStart(8,"0")+(N&65535).toString(16).padStart(4,"0")).slice(0,12).toUpperCase();return`${G}-${je}-${Ye}-${Ke}-${qe}`},[E.width,E.height,L]),U=!!global?.HermesInternal,Y=!!globalThis?.__turboModuleProxy,te=F(()=>{const f=w.constants?.reactNativeVersion;return f?`${f.major}.${f.minor}.${f.patch}${f.prerelease!=null?`-${f.prerelease}`:""}`:"0.74+"},[]),P=$?.totalRAM?Math.round($.totalRAM/(1024*1024)):Re?.totalPhysicalRamMb||4096,O=$?.freeRAM?Math.round($.freeRAM/(1024*1024)):Math.max(0,P-(Re?.residentRamMb||1200)),K=Math.max(0,P-O),se=P>0?Math.round(K/P*100):45,W=$?.totalStorage?($.totalStorage/(1024*1024*1024)).toFixed(1):"128.0",_=$?.freeStorage?($.freeStorage/(1024*1024*1024)).toFixed(1):"64.2",We=F(()=>[{key:"overview",label:A("device.subTabs.overview","Overview"),themeColor:e.sky600,icon:f=><$t size={12}color={f}/>},{key:"hardware",label:A("device.subTabs.hardware","Hardware"),themeColor:e.orange600,icon:f=><St size={12}color={f}/>},{key:"network",label:A("device.subTabs.network","Network & IP"),themeColor:e.teal600,icon:f=><Ct size={12}color={f}/>},{key:"display",label:A("device.subTabs.display","Display"),themeColor:e.pink600,icon:f=><Tt size={12}color={f}/>},{key:"runtime",label:A("device.subTabs.runtime","Runtime & App"),themeColor:e.amber600,icon:f=><Mt size={12}color={f}/>},{key:"security",label:A("device.subTabs.security","Security & IDs"),themeColor:e.errorColor,icon:f=><Oe size={12}color={f}/>}],[A]),o=F(()=>({identifiers:{pseudoUDID:k,bundleId:$?.appBundleId||$?.appPackageName||"com.app.inspector"},hardware:{model:$?.deviceModel||w.constants?.Model||"Unknown Device",brand:$?.deviceBrand||w.constants?.Brand||(w.OS==="ios"?"Apple":"Android"),osVersion:`${w.OS} ${w.Version}`,apiLevel:$?.apiLevel||w.constants?.Version||null,cpuAbi:$?.cpuAbi||w.constants?.ServerHost||"arm64-v8a",totalRamMb:P,freeRamMb:O,usedRamMb:K,totalStorageGb:`${W} GB`,freeStorageGb:`${_} GB`,batteryPercent:$?.batteryPercent??100,isCharging:$?.isCharging??!1},network:{ipAddress:H,isWifi:!0,reachability:"Online"},display:{windowWidth:z.width,windowHeight:z.height,screenWidth:E.width,screenHeight:E.height,pixelRatio:L,fontScale:X,statusBarHeight:ee,isTablet:j,orientation:Q?"Landscape":"Portrait"},runtime:{appName:Rt(),appVersion:$?.appVersion||"1.0.0",appBuild:$?.appBuild||"1",reactNativeVersion:te,inspectorVersion:le,isHermes:U,isTurboModule:Y,isDev:__DEV__,jsEngine:U?"Hermes":"JSC",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:Intl.DateTimeFormat().resolvedOptions().locale,sessionUptime:J}}),[k,$,P,O,K,W,_,H,z,E,L,X,ee,j,Q,te,U,Y,J]),_e=()=>{ae(JSON.stringify(o,null,2),"Device Full Report"),ie(A("device.copiedJson","Copied Full Device JSON Report!"))},Ge=()=>{const f=`# Device Information Report
|
|
22
22
|
**Generated by React Native In-App Inspector v${le}**
|
|
23
23
|
|
|
24
24
|
## \u{1F4F1} Hardware & System
|
|
@@ -51,16 +51,16 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
51
51
|
## \u{1F511} Identifiers & Security
|
|
52
52
|
- **Pseudo-UDID:** \`${k}\`
|
|
53
53
|
- **Bundle ID:** \`${o.identifiers.bundleId}\`
|
|
54
|
-
`;ae(f,"Device Markdown Report"),ie(A("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},t=Pe((f,R,M)=>{if(!C.trim())return!0;const B=C.toLowerCase().trim(),N=R!=null?typeof R=="object"?JSON.stringify(R):String(R):"",G=M!=null?String(M):"";return f.toLowerCase().includes(B)||N.toLowerCase().includes(B)||G.toLowerCase().includes(B)},[C])
|
|
54
|
+
`;ae(f,"Device Markdown Report"),ie(A("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},t=Pe((f,R,M)=>{if(!C.trim())return!0;const B=C.toLowerCase().trim(),N=R!=null?typeof R=="object"?JSON.stringify(R):String(R):"",G=M!=null?String(M):"";return f.toLowerCase().includes(B)||N.toLowerCase().includes(B)||G.toLowerCase().includes(B)},[C]),Te=F(()=>C.trim()?t("Model",$?.deviceModel||w.constants?.Model)||t("OS",w.OS)||t("IP Address",H)||t("RAM",`${K.toLocaleString()}/${P.toLocaleString()}`)||t("Uptime",J):!0,[C,t,$,H,K,P,J]),$e=F(()=>C.trim()?t("Device Model",o.hardware.model)||t("Manufacturer",o.hardware.brand)||t("Operating System",o.hardware.osVersion)||t("IP Address",H)||t("RAM Memory",`${K.toLocaleString()} MB / ${P.toLocaleString()} MB (${se}%)`,`Free Memory: ${O.toLocaleString()} MB`)||t("Storage Capacity",`${_} GB Free / ${W} GB Total`)||t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)||t("JavaScript Engine",U?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")||t("UDID Identifier",k):!0,[C,t,o,H,K,P,se,O,_,W,U,k]),xe=F(()=>C.trim()?t("CPU Architecture",o.hardware.cpuAbi)||t("Total RAM",`${P.toLocaleString()} MB`)||t("Free RAM",`${O.toLocaleString()} MB`)||t("Storage Capacity",`${W} GB`)||t("Available Storage",`${_} GB`)||t("Battery",`${$?.batteryPercent??100}%`)||t("API Level",`API ${$?.apiLevel||w.Version}`)||t("Thermal State","Nominal (Cool)"):!0,[C,t,o,P,O,W,_,$]),Ie=F(()=>C.trim()?t("IP Address",H)||t("Internet Reachability","Connected")||t("Connection Type","Wi-Fi / Local Area Network")||t("Metro Dev Server",q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||"localhost:8081")||t("WebSocket Protocol","Active & Enabled")||t("Network Inspector Interceptor","Intercepting XHR & Fetch"):!0,[C,t,H]),Me=F(()=>C.trim()?t("Window Resolution",`${Math.round(z.width).toLocaleString()} \xD7 ${Math.round(z.height).toLocaleString()} pt`)||t("Screen Physical Size",`${Math.round(E.width*L).toLocaleString()} \xD7 ${Math.round(E.height*L).toLocaleString()} px`)||t("Pixel Density",`@${L}x (${Math.round(L*160).toLocaleString()} dpi)`)||t("Font Scale",`${X}x`)||t("Form Factor",j?"Tablet":"Smartphone")||t("Orientation",Q?"Landscape":"Portrait")||t("Status Bar Height",`${ee} pt`):!0,[C,t,z,E,L,X,j,Q,ee]),Be=F(()=>C.trim()?t("App Name",o.runtime.appName)||t("Bundle ID",o.identifiers.bundleId)||t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)||t("React Native",`v${te}`)||t("In-App Inspector Version",`v${le}`)||t("Hermes Engine",U?"Enabled (AOT Bytecode)":"Disabled (JSC)")||t("New Architecture",Y?"Enabled":"Legacy Bridge")||t("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")||t("Timezone",o.runtime.timezone)||t("Locale",o.runtime.locale)||t("Session Uptime",J):!0,[C,t,o,te,U,Y,J]),De=F(()=>C.trim()?t("Pseudo-UDID",k)||t("Bundle ID",o.identifiers.bundleId)||t("Root / Jailbreak","Clean (Standard Sandbox)")||t("Simulator / Emulator",w.constants?.Model?.includes?.("sdk")||w.constants?.Model?.includes?.("Emulator")||w.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")||t("Sandbox Integrity","Enforced by OS Kernel"):!0,[C,t,k,o]),Je=F(()=>C.trim()?Te||$e||xe||Ie||Me||Be||De:!0,[C,Te,$e,xe,Ie,Me,Be,De]);return<T style={r.container}>
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
<T style={r.actionBar}>
|
|
57
|
+
<T style={r.searchBar}>
|
|
58
58
|
<He size={14}color={e.grayTextWeak}/>
|
|
59
59
|
<Xe value={C}onChangeText={re}placeholder={A("device.searchPlaceholder","Search specs, UDID, IP, screen...")}placeholderTextColor={e.grayTextWeak}style={r.searchInput}clearButtonMode="while-editing"/>
|
|
60
60
|
{C.length>0&&<Z onPress={()=>re("")}hitSlop={8}>
|
|
61
61
|
<It size={13}color={e.grayTextWeak}/>
|
|
62
62
|
</Z>}
|
|
63
|
-
|
|
63
|
+
</T>
|
|
64
64
|
|
|
65
65
|
<Z onPress={_e}style={r.exportButton}hitSlop={6}>
|
|
66
66
|
<At size={12}color={e.purple}/>
|
|
@@ -71,49 +71,49 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
71
71
|
<Se size={12}color={e.emerald500}/>
|
|
72
72
|
<I style={[r.exportButtonText,{color:e.emerald500}]}>MD</I>
|
|
73
73
|
</Z>
|
|
74
|
-
|
|
74
|
+
</T>
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
<T style={r.subTabsWrapper}>
|
|
78
78
|
<Ee horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.subTabsContainer}>
|
|
79
79
|
{We.map(f=>{const R=V===f.key,M=f.themeColor||e.purple,B=R?e.white:M;return<Z key={f.key}onPress={()=>fe(f.key)}>
|
|
80
|
-
|
|
80
|
+
<T style={[r.subTabPill,R&&{backgroundColor:M,borderColor:M},!R&&{backgroundColor:`${M}12`,borderColor:`${M}30`}]}>
|
|
81
81
|
{f.icon(B)}
|
|
82
82
|
<I style={[r.subTabPillText,R&&{color:e.white},!R&&{color:e.primaryBlack}]}>
|
|
83
83
|
{f.label}
|
|
84
84
|
</I>
|
|
85
|
-
|
|
85
|
+
</T>
|
|
86
86
|
</Z>})}
|
|
87
87
|
</Ee>
|
|
88
|
-
|
|
88
|
+
</T>
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
<Ee style={r.scrollArea}contentContainerStyle={r.scrollContent}showsVerticalScrollIndicator={!1}>
|
|
91
|
+
<Ee style={[r.scrollArea,{flex:1}]}contentContainerStyle={[r.scrollContent,{flexGrow:1}]}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled">
|
|
92
92
|
|
|
93
|
-
{(!C.trim()||t("UDID Identifier",k)||t("UUID",k)||t("Device UUID",k))
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
{(!C.trim()||t("UDID Identifier",k)||t("UUID",k)||t("Device UUID",k))&&<T style={r.featuredUuidCard}>
|
|
94
|
+
<T style={r.featuredUuidHeader}>
|
|
95
|
+
<T style={r.featuredUuidTitleRow}>
|
|
96
|
+
<T style={r.featuredUuidIconWrap}>
|
|
97
97
|
<Oe size={14}color={e.white}/>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
</T>
|
|
99
|
+
<T style={{flex:1,minWidth:0}}>
|
|
100
|
+
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
101
101
|
<I style={r.featuredUuidLabel}>DEVICE UUID</I>
|
|
102
|
-
|
|
102
|
+
<T style={r.featuredBadge}>
|
|
103
103
|
<I style={r.featuredBadgeText}>FEATURED</I>
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
</T>
|
|
105
|
+
</T>
|
|
106
106
|
<I style={r.featuredUuidSubtext}>
|
|
107
107
|
Deterministic hardware pseudo-identifier
|
|
108
108
|
</I>
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
</T>
|
|
110
|
+
</T>
|
|
111
111
|
|
|
112
112
|
<Z onPress={()=>{ae(k,"Device UUID"),ie(A("device.copiedUuid","Copied Device UUID to clipboard!"))}}style={r.featuredCopyBtn}hitSlop={6}accessibilityRole="button"accessibilityLabel="Copy Device UUID">
|
|
113
113
|
<Se size={11}color={e.white}/>
|
|
114
114
|
<I style={r.featuredCopyBtnText}>Copy</I>
|
|
115
115
|
</Z>
|
|
116
|
-
|
|
116
|
+
</T>
|
|
117
117
|
|
|
118
118
|
<Z onPress={()=>{ae(k,"Device UUID"),ie(A("device.copiedUuid","Copied Device UUID to clipboard!"))}}style={r.featuredUuidValueBox}hitSlop={4}accessibilityRole="button"accessibilityLabel="Tap to copy UUID">
|
|
119
119
|
<I style={r.featuredUuidValueText}numberOfLines={1}ellipsizeMode="middle"selectable>
|
|
@@ -121,53 +121,53 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
121
121
|
</I>
|
|
122
122
|
<Se size={12}color={e.brandPurple}/>
|
|
123
123
|
</Z>
|
|
124
|
-
|
|
124
|
+
</T>}
|
|
125
125
|
|
|
126
126
|
|
|
127
|
-
{(!C.trim()
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
{(!C.trim()||Te)&&<T style={r.heroCard}>
|
|
128
|
+
<T style={r.heroHeader}>
|
|
129
|
+
<T style={r.heroIconWrap}>
|
|
130
130
|
{w.OS==="ios"?<Bt size={20}color={e.white}/>:<Dt size={20}color={e.white}/>}
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
</T>
|
|
132
|
+
<T style={{flex:1,minWidth:0}}>
|
|
133
133
|
<I style={r.heroTitle}numberOfLines={1}ellipsizeMode="tail">
|
|
134
|
-
{
|
|
134
|
+
{$?.deviceModel||w.constants?.Model||(w.OS==="ios"?"Apple iPhone":"Android Device")}
|
|
135
135
|
</I>
|
|
136
136
|
<I style={r.heroSubtitle}numberOfLines={1}ellipsizeMode="tail">
|
|
137
|
-
{w.OS==="ios"?`iOS ${w.Version}`:`Android ${w.Version} (API ${
|
|
137
|
+
{w.OS==="ios"?`iOS ${w.Version}`:`Android ${w.Version} (API ${$?.apiLevel||w.Version})`}
|
|
138
138
|
</I>
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
</T>
|
|
140
|
+
<T style={r.heroBadge}>
|
|
141
|
+
<T style={r.pulseDot}/>
|
|
142
142
|
<I style={r.heroBadgeText}>LIVE</I>
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
</T>
|
|
144
|
+
</T>
|
|
145
145
|
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
<T style={r.heroMetricsStrip}>
|
|
148
|
+
<T style={r.heroMetricItem}>
|
|
149
149
|
<I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{A("device.ipAddress","IP ADDRESS")}</I>
|
|
150
150
|
<I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
|
|
151
151
|
{H}
|
|
152
152
|
</I>
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
</T>
|
|
154
|
+
<T style={r.heroMetricDivider}/>
|
|
155
|
+
<T style={r.heroMetricItem}>
|
|
156
156
|
<I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{A("device.ramUsedTotal","RAM (USED/TOTAL)")}</I>
|
|
157
157
|
<I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
|
|
158
158
|
{K.toLocaleString()}/{P.toLocaleString()} MB
|
|
159
159
|
</I>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
160
|
+
</T>
|
|
161
|
+
<T style={r.heroMetricDivider}/>
|
|
162
|
+
<T style={r.heroMetricItem}>
|
|
163
163
|
<I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{A("device.uptime","UPTIME")}</I>
|
|
164
164
|
<I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">{J}</I>
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
</T>
|
|
166
|
+
</T>
|
|
167
|
+
</T>}
|
|
168
168
|
|
|
169
169
|
|
|
170
|
-
{(V==="overview"||C.length>0)
|
|
170
|
+
{(V==="overview"||C.length>0)&&$e&&<T style={r.sectionCard}>
|
|
171
171
|
<I style={r.sectionTitle}>DEVICE OVERVIEW</I>
|
|
172
172
|
{t("Device Model",o.hardware.model)&&<S label="Device Model"value={o.hardware.model}/>}
|
|
173
173
|
{t("Manufacturer",o.hardware.brand)&&<S label="Manufacturer / Brand"value={o.hardware.brand}/>}
|
|
@@ -178,23 +178,23 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
178
178
|
{t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)&&<S label="Host App Version"value={`v${o.runtime.appVersion} (${o.runtime.appBuild})`}/>}
|
|
179
179
|
{t("JavaScript Engine",U?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")&&<S label="JS Runtime Engine"value={U?"Hermes Bytecode Engine":"JavaScriptCore (JSC)"}badge={U?{text:"HERMES",color:e.purple,bg:`${e.purple}18`}:{text:"JSC",color:e.sky500,bg:`${e.sky500}18`}}/>}
|
|
180
180
|
{t("UDID Identifier",k)&&<S label="Pseudo-UDID"value={k}isLast/>}
|
|
181
|
-
|
|
181
|
+
</T>}
|
|
182
182
|
|
|
183
183
|
|
|
184
|
-
{(V==="hardware"||C.length>0)&&xe
|
|
184
|
+
{(V==="hardware"||C.length>0)&&xe&&<T style={r.sectionCard}>
|
|
185
185
|
<I style={r.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</I>
|
|
186
186
|
{t("CPU Architecture",o.hardware.cpuAbi)&&<S label="CPU Architecture / ABI"value={o.hardware.cpuAbi}badge={{text:"64-BIT",color:e.purple,bg:`${e.purple}18`}}/>}
|
|
187
187
|
{t("Total RAM",`${P.toLocaleString()} MB`)&&<S label="Total Physical RAM"value={`${P.toLocaleString()} MB`}/>}
|
|
188
188
|
{t("Free RAM",`${O.toLocaleString()} MB`)&&<S label="Available Free RAM"value={`${O.toLocaleString()} MB`}badge={{text:O<500?"LOW":"HEALTHY",color:O<500?e.errorColor:e.emerald500,bg:O<500?`${e.errorColor}18`:`${e.emerald500}18`}}/>}
|
|
189
189
|
{t("Storage Capacity",`${W} GB`)&&<S label="Disk Storage Total"value={`${W} GB`}/>}
|
|
190
190
|
{t("Available Storage",`${_} GB`)&&<S label="Disk Storage Available"value={`${_} GB`}/>}
|
|
191
|
-
{t("Battery",`${
|
|
192
|
-
{t("API Level",`API ${
|
|
191
|
+
{t("Battery",`${$?.batteryPercent??100}%`)&&<S label="Battery Level"value={`${$?.batteryPercent??100}%`}badge={{text:$?.isCharging?"CHARGING":"DISCHARGING",color:$?.isCharging?e.emerald500:e.grayText,bg:$?.isCharging?`${e.emerald500}18`:`${e.grayText}18`}}/>}
|
|
192
|
+
{t("API Level",`API ${$?.apiLevel||w.Version}`)&&w.OS==="android"&&<S label="Android API SDK Level"value={`API ${$?.apiLevel||w.Version}`}/>}
|
|
193
193
|
{t("Thermal State","Nominal (Cool)")&&<S label="Thermal State"value="Nominal (Cool)"badge={{text:"OPTIMAL",color:e.emerald500,bg:`${e.emerald500}18`}}isLast/>}
|
|
194
|
-
|
|
194
|
+
</T>}
|
|
195
195
|
|
|
196
196
|
|
|
197
|
-
{(V==="network"||C.length>0)&&Ie
|
|
197
|
+
{(V==="network"||C.length>0)&&Ie&&<T style={r.sectionCard}>
|
|
198
198
|
<I style={r.sectionTitle}>NETWORK & CONNECTIVITY</I>
|
|
199
199
|
{t("IP Address",H)&&<S label="Local Device IP"value={H}badge={{text:"IPV4",color:e.blue500,bg:`${e.blue500}18`}}/>}
|
|
200
200
|
{t("Internet Reachability","Connected")&&<S label="Internet Reachability"value="Connected"badge={{text:"ONLINE",color:e.emerald500,bg:`${e.emerald500}18`}}/>}
|
|
@@ -202,10 +202,10 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
202
202
|
{t("Metro Dev Server",q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||"localhost:8081")&&<S label="Metro Packager Host"value={q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||"localhost:8081"}/>}
|
|
203
203
|
{t("WebSocket Protocol","Active & Enabled")&&<S label="WebSocket (WSS) Support"value="Active & Enabled"/>}
|
|
204
204
|
{t("Network Inspector Interceptor","Intercepting XHR & Fetch")&&<S label="Network Interceptor Status"value="Intercepting XHR & Fetch"badge={{text:"MONITORING",color:e.purple,bg:`${e.purple}18`}}isLast/>}
|
|
205
|
-
|
|
205
|
+
</T>}
|
|
206
206
|
|
|
207
207
|
|
|
208
|
-
{(V==="display"||C.length>0)&&Me
|
|
208
|
+
{(V==="display"||C.length>0)&&Me&&<T style={r.sectionCard}>
|
|
209
209
|
<I style={r.sectionTitle}>DISPLAY & SCREEN GEOMETRY</I>
|
|
210
210
|
{t("Window Resolution",`${Math.round(z.width).toLocaleString()} \xD7 ${Math.round(z.height).toLocaleString()} pt`)&&<S label="Window Logical Size"value={`${Math.round(z.width).toLocaleString()} \xD7 ${Math.round(z.height).toLocaleString()} pt`}/>}
|
|
211
211
|
{t("Screen Physical Size",`${Math.round(E.width*L).toLocaleString()} \xD7 ${Math.round(E.height*L).toLocaleString()} px`)&&<S label="Physical Screen Size"value={`${Math.round(E.width*L).toLocaleString()} \xD7 ${Math.round(E.height*L).toLocaleString()} px`}/>}
|
|
@@ -214,10 +214,10 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
214
214
|
{t("Form Factor",j?"Tablet":"Smartphone")&&<S label="Device Form Factor"value={j?"Tablet":"Smartphone"}badge={{text:j?"TABLET":"PHONE",color:j?e.blue500:e.purple,bg:j?`${e.blue500}18`:`${e.purple}18`}}/>}
|
|
215
215
|
{t("Orientation",Q?"Landscape":"Portrait")&&<S label="Screen Orientation"value={Q?"Landscape":"Portrait"}/>}
|
|
216
216
|
{t("Status Bar Height",`${ee} pt`)&&<S label="Status Bar Inset"value={`${ee} pt`}isLast/>}
|
|
217
|
-
|
|
217
|
+
</T>}
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
{(V==="runtime"||C.length>0)&&Be
|
|
220
|
+
{(V==="runtime"||C.length>0)&&Be&&<T style={r.sectionCard}>
|
|
221
221
|
<I style={r.sectionTitle}>RUNTIME & APPLICATION</I>
|
|
222
222
|
{t("App Name",o.runtime.appName)&&<S label="Application Name"value={o.runtime.appName}/>}
|
|
223
223
|
{t("Bundle ID",o.identifiers.bundleId)&&<S label="Bundle Identifier / Package"value={o.identifiers.bundleId}/>}
|
|
@@ -230,20 +230,20 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
230
230
|
{t("Timezone",o.runtime.timezone)&&<S label="System Timezone"value={o.runtime.timezone}/>}
|
|
231
231
|
{t("Locale",o.runtime.locale)&&<S label="System Language & Locale"value={o.runtime.locale}/>}
|
|
232
232
|
{t("Session Uptime",J)&&<S label="Inspector Session Uptime"value={J}isLast/>}
|
|
233
|
-
|
|
233
|
+
</T>}
|
|
234
234
|
|
|
235
235
|
|
|
236
|
-
{(V==="security"||C.length>0)&&De
|
|
236
|
+
{(V==="security"||C.length>0)&&De&&<T style={r.sectionCard}>
|
|
237
237
|
<I style={r.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</I>
|
|
238
238
|
{t("Pseudo-UDID",k)&&<S label="Deterministic Pseudo-UDID"value={k}subtext="Stable hardware signature hash for testing & diagnostics"badge={{text:"PERSISTENT",color:e.purple,bg:`${e.purple}18`}}/>}
|
|
239
239
|
{t("Bundle ID",o.identifiers.bundleId)&&<S label="Application Bundle ID"value={o.identifiers.bundleId}/>}
|
|
240
240
|
{t("Root / Jailbreak","Clean (Standard Sandbox)")&&<S label="Root / Jailbreak Heuristic"value="Clean (Standard Sandbox)"badge={{text:"SECURE",color:e.emerald500,bg:`${e.emerald500}18`}}/>}
|
|
241
241
|
{t("Simulator / Emulator",w.constants?.Model?.includes?.("sdk")||w.constants?.Model?.includes?.("Emulator")||w.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")&&<S label="Emulator / Physical Device"value={w.constants?.Model?.includes?.("sdk")||w.constants?.Model?.includes?.("Emulator")||w.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device"}/>}
|
|
242
242
|
{t("Sandbox Integrity","Enforced by OS Kernel")&&<S label="App Sandbox File Isolation"value="Enforced by OS Kernel"isLast/>}
|
|
243
|
-
|
|
243
|
+
</T>}
|
|
244
244
|
|
|
245
245
|
|
|
246
|
-
{C.trim().length>0&&!Je
|
|
246
|
+
{C.trim().length>0&&!Je&&<T style={r.emptySearchCard}>
|
|
247
247
|
<He size={26}color={e.grayTextWeak}/>
|
|
248
248
|
<I style={r.emptySearchTitle}>No matching device specifications</I>
|
|
249
249
|
<I style={r.emptySearchSubtitle}>
|
|
@@ -252,8 +252,8 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
252
252
|
<Z onPress={()=>re("")}style={r.clearSearchBtn}>
|
|
253
253
|
<I style={r.clearSearchBtnText}>Clear Search</I>
|
|
254
254
|
</Z>
|
|
255
|
-
|
|
255
|
+
</T>}
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
<T style={{height:48}}/>
|
|
258
258
|
</Ee>
|
|
259
|
-
|
|
259
|
+
</T>});const r=Qe.create({container:{flex:1,backgroundColor:e.grayBackground},subTabsWrapper:{backgroundColor:e.primaryLight,borderBottomWidth:1,borderBottomColor:e.dividerColor,paddingVertical:6},subTabsContainer:{paddingHorizontal:12,flexDirection:"row",alignItems:"center",gap:6},subTabPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,borderWidth:1},subTabPillText:{fontFamily:D.interBold,fontSize:10.5},featuredUuidCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1.5,borderColor:`${e.brandPurple}40`,padding:12,gap:10,shadowColor:e.brandPurple,shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2},featuredUuidHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},featuredUuidTitleRow:{flexDirection:"row",alignItems:"center",gap:8,flex:1,minWidth:0},featuredUuidIconWrap:{width:28,height:28,borderRadius:7,backgroundColor:e.brandPurple,alignItems:"center",justifyContent:"center"},featuredUuidLabel:{fontFamily:D.interBold,fontSize:11,color:e.primaryBlack,letterSpacing:.3},featuredUuidSubtext:{fontFamily:D.interRegular,fontSize:9.5,color:e.grayTextWeak,marginTop:.5},featuredBadge:{backgroundColor:`${e.brandPurple}18`,paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,borderWidth:1,borderColor:`${e.brandPurple}30`},featuredBadgeText:{fontFamily:D.interBold,fontSize:8,color:e.brandPurple,letterSpacing:.4},featuredCopyBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:e.brandPurple,paddingHorizontal:10,paddingVertical:5.5,borderRadius:7,shadowColor:e.brandPurple,shadowOpacity:.25,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},featuredCopyBtnText:{fontFamily:D.interBold,fontSize:10.5,color:e.white},featuredUuidValueBox:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:`${e.brandPurple}0C`,borderRadius:8,borderWidth:1,borderColor:`${e.brandPurple}28`,paddingHorizontal:10,paddingVertical:7,gap:8},featuredUuidValueText:{flex:1,fontFamily:w.select({ios:"Menlo",android:"monospace",default:"monospace"}),fontSize:11.5,color:e.brandPurple,letterSpacing:.5},actionBar:{flexDirection:"row",alignItems:"center",paddingHorizontal:12,paddingVertical:8,backgroundColor:e.primaryLight,borderBottomWidth:1,borderBottomColor:e.dividerColor,gap:8},searchBar:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:8,paddingHorizontal:9,paddingVertical:w.OS==="ios"?6:2,borderWidth:1,borderColor:e.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:D.interMedium,fontSize:12,color:e.primaryBlack,padding:0},exportButton:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:9,paddingVertical:6,borderRadius:8,backgroundColor:`${e.purple}14`,borderWidth:1,borderColor:`${e.purple}33`},exportButtonText:{fontFamily:D.interBold,fontSize:11,color:e.purple},scrollArea:{flex:1},scrollContent:{padding:12,gap:12,paddingBottom:100},heroCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:14,shadowColor:e.black,shadowOpacity:.04,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:1,gap:12},heroHeader:{flexDirection:"row",alignItems:"center",gap:10},heroIconWrap:{width:38,height:38,borderRadius:10,backgroundColor:e.purple,alignItems:"center",justifyContent:"center",shadowColor:e.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},heroTitle:{fontFamily:D.interBold,fontSize:15,color:e.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:D.interRegular,fontSize:11.5,color:e.grayText,marginTop:1},heroBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.emerald500}18`,paddingHorizontal:7,paddingVertical:3,borderRadius:6},pulseDot:{width:6,height:6,borderRadius:3,backgroundColor:e.emerald500},heroBadgeText:{fontFamily:D.interBold,fontSize:9.5,color:e.emerald500},heroMetricsStrip:{flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:10,paddingVertical:8,paddingHorizontal:10},heroMetricItem:{flex:1,alignItems:"center",paddingHorizontal:2,minWidth:0},heroMetricLabel:{fontFamily:D.interBold,fontSize:8.5,color:e.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:D.interBold,fontSize:11,color:e.primaryBlack,marginTop:2},heroMetricDivider:{width:1,height:20,backgroundColor:e.dividerColor},sectionCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:14,shadowColor:e.black,shadowOpacity:.03,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},sectionTitle:{fontFamily:D.interBold,fontSize:10.5,color:e.grayTextWeak,letterSpacing:.8,marginBottom:8,textTransform:"uppercase"},infoRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:9,borderBottomWidth:1,borderBottomColor:e.dividerColor},infoLabel:{fontFamily:D.interMedium,fontSize:12.5,color:e.primaryBlack},infoSubtext:{fontFamily:D.interRegular,fontSize:10,color:e.grayTextWeak,marginTop:1},infoBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},infoBadgeText:{fontFamily:D.interBold,fontSize:8.5},infoValue:{fontFamily:D.interBold,fontSize:12,color:e.primaryBlack,flexShrink:1,textAlign:"right"},rowCopyBtn:{padding:4,borderRadius:4,backgroundColor:e.grayBackground},emptySearchCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:24,alignItems:"center",justifyContent:"center",gap:8,marginTop:8},emptySearchTitle:{fontFamily:D.interBold,fontSize:13.5,color:e.primaryBlack,textAlign:"center"},emptySearchSubtitle:{fontFamily:D.interRegular,fontSize:11.5,color:e.grayTextWeak,textAlign:"center"},clearSearchBtn:{marginTop:6,paddingHorizontal:14,paddingVertical:6.5,borderRadius:8,backgroundColor:e.purple},clearSearchBtnText:{fontFamily:D.interBold,fontSize:11,color:e.white}});export default DeviceInfoTab;
|
|
@@ -1,76 +1,81 @@
|
|
|
1
|
-
import{useCallback as
|
|
1
|
+
import{useCallback as E,useEffect as G,useRef as d,useState as I}from"react";import{Animated as s,PanResponder as ae,Platform as b,StyleSheet as $e,Text as V,TouchableOpacity as We,useWindowDimensions as ke,View as S}from"react-native";import Ne from"react-native-linear-gradient";import{useInspector as _e}from"./InspectorContext";import F from"../TouchableScale";import Se from"../AppHeaderLogo";import{AndroidIcon as He,AppleIcon as Ye,ScreenshotCaptureIcon as Ge,ScreenRecordIcon as Xe,CloseWhite as Re,MaximizeIcon as Ze,NpmIcon as Ue}from"../NetworkIcons";import{ScreenCapture as P}from"../../capture";import{triggerNativeHaptic as u}from"../../native/NativeInspector";import{showToast as f}from"../../helpers/toast";import{getAppName as Je,getAppVersionAndBuild as Ke}from"../../helpers";import{LIB_VERSION as Qe}from"../../constants";import{AppColors as r}from"../../styles/AppColors";import{AppFonts as $}from"../../styles/AppFonts";import Ce from"../../styles";import{useTranslation as et}from"../../i18n";import{MediaPreviewModal as St}from"./MediaPreviewModal";const vt=()=>{const{setVisible:D,isMinimized:Te,setIsMinimized:W,dismissInspector:Ie,appIcon:K,fabPan:a,fabPanResponder:xt,fabDraggedRef:k,pulseAnim:Ve,fabShineAnim:Rt,refreshMediaCount:v,captureFps:Q,captureScale:ee,captureBitrate:X,captureMaxDurationSeconds:te,captureAudioMode:re}=_e(),{width:M,height:x}=ke(),{t:o}=et(),[Pe]=I(()=>Ke().formatted),[m,N]=I(!1),[De,Z]=I(0),R=d(null),[ie,O]=I(null),[Me,j]=I(!1),[q,z]=I(!1),p=d(!1),B=d(new s.Value(0)).current,_=d(new s.Value(1)).current,C=d({x:0,y:0});G(()=>{const e=a.x.addListener(n=>C.current.x=n.value),t=a.y.addListener(n=>C.current.y=n.value);return()=>{a.x.removeListener(e),a.y.removeListener(t)}},[a]);const l=68,H=8,Oe=E(()=>{const e=C.current.x,t=C.current.y,n=20,A=180,g=M-n-l/2+e,Y=x-A-l/2+t;let U=e,J=t,L=!1;g<H+l/2?(U=e+(H+l/2-g),L=!0):g>M-H-l/2&&(U=e-(g-(M-H-l/2)),L=!0);const ne=b.OS==="ios"?60:40,se=b.OS==="ios"?40:24;Y<ne+l/2?(J=t+(ne+l/2-Y),L=!0):Y>x-se-l/2&&(J=t-(Y-(x-se-l/2)),L=!0),L&&s.spring(a,{toValue:{x:U,y:J},useNativeDriver:!1,tension:80,friction:8}).start()},[a,M,x]),ze=d(ae.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{k.current=!0,a.setOffset({x:C.current.x,y:C.current.y}),a.setValue({x:0,y:0}),p.current=!1,z(!1),j(!0),_.setValue(1),s.spring(B,{toValue:1,useNativeDriver:!0,tension:80,friction:8}).start()},onPanResponderMove:(e,t)=>{a.setValue({x:t.dx,y:t.dy});const n=t.moveY,A=t.moveX,g=n>x-140&&Math.abs(A-M/2)<85;g&&!p.current?(p.current=!0,z(!0),u("medium"),s.spring(_,{toValue:1.25,useNativeDriver:!0,tension:100,friction:6}).start()):!g&&p.current&&(p.current=!1,z(!1),s.spring(_,{toValue:1,useNativeDriver:!0,tension:100,friction:6}).start())},onPanResponderRelease:()=>{const e=p.current;a.flattenOffset(),s.timing(B,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{j(!1),z(!1),p.current=!1}),e?(u("heavy"),Ie(),f(o("common.inspectorDismissed","In-App Inspector closed for this session"))):Oe(),setTimeout(()=>{k.current=!1},100)},onPanResponderTerminate:()=>{a.flattenOffset(),k.current=!1,s.timing(B,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{j(!1),z(!1),p.current=!1})}})).current,c=d(new s.ValueXY({x:0,y:0})).current,T=d({x:0,y:0});G(()=>{const e=c.x.addListener(n=>T.current.x=n.value),t=c.y.addListener(n=>T.current.y=n.value);return()=>{c.x.removeListener(e),c.y.removeListener(t)}},[c]);const h=d(!1),Be=d(ae.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{h.current=!0,c.setOffset({x:T.current.x,y:T.current.y}),c.setValue({x:0,y:0})},onPanResponderMove:s.event([null,{dx:c.x,dy:c.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{c.flattenOffset();const e=T.current.y,t=-(x-(b.OS==="ios"?34:18)-70),n=b.OS==="ios"?34:18;if(e<t||e>n){const A=Math.max(t,Math.min(n,e));s.spring(c,{toValue:{x:T.current.x,y:A},useNativeDriver:!1,tension:80,friction:8}).start()}setTimeout(()=>{h.current=!1},50)},onPanResponderTerminate:()=>{c.flattenOffset(),h.current=!1}})).current;G(()=>{P.isRecording().then(e=>{N(!!e)}).catch(()=>{})},[]),G(()=>(m?(Z(0),R.current=setInterval(()=>{Z(e=>e+1)},1e3)):(R.current&&(clearInterval(R.current),R.current=null),Z(0)),()=>{R.current&&clearInterval(R.current)}),[m]);const Ae=E(async()=>{if(!h.current)try{u("light");const e=await P.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){u("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};O(t),v?.().catch(()=>{}),f(o("header.screenshotCaptured","Screenshot captured"))}else f(o("header.screenshotFailed","Failed to capture screenshot"))}catch{f(o("header.screenshotError","Error capturing screenshot"))}},[v,o]),Le=E(async()=>{if(!h.current)try{if(m){u("medium");const e=await P.stopRecording();if(N(!1),e){u("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};O(t),v?.().catch(()=>{}),f(o("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else u("medium"),await P.startRecording({fps:Q,scale:ee,audioSource:re,bitrate:X>0?X:void 0,maxDurationSeconds:te})?(N(!0),f(o("header.recordingStarted","Recording started"))):f(o("header.recordingStartFailed","Failed to start recording"))}catch{f(o("header.recordingError","Error during screen recording")),N(!1)}},[m,Q,ee,X,te,re,v,o]),oe=E(()=>{h.current||(u("light"),W?.(!1),D(!0))},[W,D]),Ee=E(()=>{h.current||(u("light"),W?.(!1),D(!1))},[W,D]),Fe=e=>{const t=Math.floor(e/60),n=e%60;return`${t}:${n<10?"0":""}${n}`};return<>
|
|
2
2
|
|
|
3
|
-
{
|
|
3
|
+
{Te?<s.View style={[i.playerContainer,{transform:c.getTranslateTransform()}]}{...Be.panHandlers}>
|
|
4
4
|
|
|
5
|
-
<
|
|
5
|
+
<Ne colors={[r.indigo600,r.violet600]}start={{x:0,y:0}}end={{x:1,y:1}}style={i.gradientBg}pointerEvents="none"/>
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
<S style={
|
|
11
|
-
<
|
|
12
|
-
{
|
|
13
|
-
</
|
|
14
|
-
<S style={
|
|
8
|
+
<We activeOpacity={.75}onPress={oe}style={i.brandSection}accessibilityRole="button"accessibilityLabel={o("mediaGallery.expand","Expand Inspector")}>
|
|
9
|
+
<Se size={36}customIcon={K}shape="circle"/>
|
|
10
|
+
<S style={i.titleWrapper}>
|
|
11
|
+
<V style={i.appTitle}numberOfLines={1}>
|
|
12
|
+
{Je()}
|
|
13
|
+
</V>
|
|
14
|
+
<S style={i.versionRow}>
|
|
15
15
|
|
|
16
|
-
<S style={
|
|
17
|
-
{
|
|
18
|
-
<
|
|
19
|
-
{
|
|
20
|
-
</
|
|
16
|
+
<S style={i.versionChip}>
|
|
17
|
+
{b.OS==="ios"?<Ye color={`${r.white}E6`}size={9}/>:<He color={`${r.white}E6`}size={9}/>}
|
|
18
|
+
<V style={i.versionChipText}numberOfLines={1}>
|
|
19
|
+
{Pe}
|
|
20
|
+
</V>
|
|
21
21
|
</S>
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
<S style={
|
|
25
|
-
<
|
|
26
|
-
<
|
|
27
|
-
v{
|
|
28
|
-
</
|
|
24
|
+
<S style={i.versionChip}>
|
|
25
|
+
<Ue size={9}color={r.npmRedLight}/>
|
|
26
|
+
<V style={i.versionChipText}numberOfLines={1}>
|
|
27
|
+
v{Qe}
|
|
28
|
+
</V>
|
|
29
29
|
</S>
|
|
30
30
|
</S>
|
|
31
31
|
</S>
|
|
32
|
-
</
|
|
32
|
+
</We>
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
<S style={
|
|
35
|
+
<S style={i.actionsRow}>
|
|
36
36
|
|
|
37
|
-
<
|
|
38
|
-
<
|
|
39
|
-
<
|
|
37
|
+
<F onPress={Ae}hitSlop={{top:6,bottom:6,left:4,right:4}}style={i.actionBtn}>
|
|
38
|
+
<Ge size={12}color={r.white}/>
|
|
39
|
+
<V style={i.actionText}>
|
|
40
40
|
{o("header.photo","Photo")}
|
|
41
|
-
</
|
|
42
|
-
</
|
|
41
|
+
</V>
|
|
42
|
+
</F>
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
<
|
|
46
|
-
{
|
|
47
|
-
<
|
|
48
|
-
{
|
|
49
|
-
</
|
|
50
|
-
</
|
|
45
|
+
<F onPress={Le}hitSlop={{top:6,bottom:6,left:4,right:4}}style={[i.actionBtn,m&&i.recordingBtnActive]}>
|
|
46
|
+
{m?<S style={i.recordingDot}/>:<Xe size={12}color={r.white}/>}
|
|
47
|
+
<V style={[i.actionText,m&&{color:r.red300}]}>
|
|
48
|
+
{m?`${o("header.rec","REC")} ${Fe(De)}`:o("header.record","Record")}
|
|
49
|
+
</V>
|
|
50
|
+
</F>
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
<
|
|
54
|
-
<
|
|
55
|
-
</
|
|
53
|
+
<F onPress={oe}hitSlop={{top:6,bottom:6,left:4,right:4}}accessibilityRole="button"accessibilityLabel={o("common.expand","Expand")}style={i.actionBtnSquare}>
|
|
54
|
+
<Ze size={12}color={r.white}/>
|
|
55
|
+
</F>
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
</
|
|
58
|
+
<F onPress={Ee}hitSlop={{top:6,bottom:6,left:4,right:6}}accessibilityRole="button"accessibilityLabel={o("common.close","Close")}style={i.actionBtnSquare}>
|
|
59
|
+
<Re size={10}color={r.white}/>
|
|
60
|
+
</F>
|
|
61
61
|
</S>
|
|
62
|
-
</
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
</s.View>:<s.View style={[Ce.fabWrapper,{transform:a.getTranslateTransform()}]}{...ze.panHandlers}>
|
|
63
|
+
<F style={{alignItems:"center",justifyContent:"center"}}onPress={()=>{k.current||(u("light"),D(!0))}}hitSlop={10}>
|
|
64
|
+
<s.View style={[Ce.fabPulseRing,{transform:[{scale:Ve}]}]}/>
|
|
65
|
+
<Se size={68}customIcon={K}shape="circle"/>
|
|
66
|
+
</F>
|
|
67
|
+
</s.View>}
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
|
|
70
|
+
{Me&&<s.View pointerEvents="none"style={[i.dismissTargetContainer,{opacity:B,transform:[{translateY:B.interpolate({inputRange:[0,1],outputRange:[30,0]})},{scale:_}]}]}>
|
|
71
|
+
<S style={[i.dismissTargetCircle,q&&i.dismissTargetCircleActive]}>
|
|
72
|
+
<Re size={18}color={r.white}/>
|
|
73
|
+
</S>
|
|
74
|
+
<V style={[i.dismissTargetLabel,q&&i.dismissTargetLabelActive]}>
|
|
75
|
+
{q?o("common.releaseToHide","Release to hide"):o("common.dragToHide","Drag here to hide")}
|
|
76
|
+
</V>
|
|
77
|
+
</s.View>}
|
|
73
78
|
|
|
74
79
|
|
|
75
|
-
<
|
|
76
|
-
</>},
|
|
80
|
+
<St item={ie}visible={!!ie}onClose={()=>O(null)}onDelete={async e=>{await P.deleteMedia(e.uri),v?.().catch(()=>{}),O(null)}}onConvertToGif={async e=>{const t=await P.convertToGif(e.uri,{fps:12,width:480});t&&(v?.().catch(()=>{}),O({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}))}}/>
|
|
81
|
+
</>},i=$e.create({dismissTargetContainer:{position:"absolute",bottom:b.OS==="ios"?42:26,left:0,right:0,alignItems:"center",justifyContent:"center",zIndex:999998},dismissTargetCircle:{width:54,height:54,borderRadius:27,backgroundColor:"rgba(23, 23, 37, 0.82)",borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.28)",alignItems:"center",justifyContent:"center",shadowColor:r.black,shadowOffset:{width:0,height:6},shadowOpacity:.4,shadowRadius:10,elevation:16},dismissTargetCircleActive:{backgroundColor:r.red600,borderColor:r.red300,shadowColor:r.red600,shadowOpacity:.65,shadowRadius:18,transform:[{scale:1.06}]},dismissTargetLabel:{marginTop:6,fontFamily:$.interSemiBold,fontSize:11,color:"rgba(255, 255, 255, 0.85)",textShadowColor:"rgba(0, 0, 0, 0.6)",textShadowOffset:{width:0,height:1},textShadowRadius:3},dismissTargetLabelActive:{color:r.red300,fontFamily:$.interBold},playerContainer:{position:"absolute",bottom:b.OS==="ios"?34:18,left:12,right:12,minHeight:58,flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderRadius:16,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.28)",paddingHorizontal:12,paddingVertical:7,gap:8,zIndex:99999,elevation:25,shadowColor:r.indigo600,shadowOffset:{width:0,height:8},shadowOpacity:.45,shadowRadius:14,overflow:"hidden"},gradientBg:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16},playerShineClip:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16,overflow:"hidden"},playerShineStreak:{position:"absolute",top:-60,width:75,height:200},brandSection:{flexDirection:"row",alignItems:"center",gap:9,flex:1,minWidth:0,paddingVertical:2,overflow:"hidden"},titleWrapper:{flex:1,minWidth:0,justifyContent:"center",gap:2},appTitle:{fontFamily:$.interBold,fontSize:13.5,color:r.white,letterSpacing:-.2},versionRow:{flexDirection:"row",alignItems:"center",gap:4,minWidth:0},versionChip:{flexDirection:"row",alignItems:"center",backgroundColor:`${r.white}1F`,borderRadius:5,paddingHorizontal:5,paddingVertical:1.5,gap:3,borderWidth:1,borderColor:`${r.white}2E`,flexShrink:1,minWidth:0},versionChipText:{fontFamily:$.interMedium,fontSize:8.5,color:`${r.white}EB`,letterSpacing:.1},actionsRow:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},actionBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:"rgba(255, 255, 255, 0.22)",paddingHorizontal:8,paddingVertical:5.5,borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},actionBtnSquare:{alignItems:"center",justifyContent:"center",width:27,height:27,backgroundColor:"rgba(255, 255, 255, 0.22)",borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},recordingBtnActive:{backgroundColor:"rgba(239, 68, 68, 0.32)",borderColor:r.red500},recordingDot:{width:6,height:6,borderRadius:3,backgroundColor:r.red500},actionText:{fontFamily:$.interSemiBold,fontSize:10.5,color:r.white}});export default vt;
|