react-native-inapp-inspector 2.3.24 → 2.3.25

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.
Files changed (145) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +8 -8
  2. package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
  3. package/dist/commonjs/components/AppHeaderLogo.js +1 -1
  4. package/dist/commonjs/components/BrandSquareIcon.js +12 -12
  5. package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
  6. package/dist/commonjs/components/ConsoleLogCard.js +92 -80
  7. package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
  8. package/dist/commonjs/components/EndOfListFooter.js +27 -5
  9. package/dist/commonjs/components/Inspector/AnalyticsTab.js +30 -298
  10. package/dist/commonjs/components/Inspector/ConsoleTab.js +38 -93
  11. package/dist/commonjs/components/Inspector/CrashDetail.js +12 -12
  12. package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
  13. package/dist/commonjs/components/Inspector/DebuggingTab.js +9 -9
  14. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +54 -52
  15. package/dist/commonjs/components/Inspector/InspectorHeader.js +1 -1
  16. package/dist/commonjs/components/Inspector/MainScreen.js +23 -25
  17. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
  18. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
  19. package/dist/commonjs/components/Inspector/NetworkTab.js +31 -31
  20. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
  21. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
  22. package/dist/commonjs/components/Inspector/ReduxTab.js +110 -97
  23. package/dist/commonjs/components/Inspector/SettingsPanel.js +48 -100
  24. package/dist/commonjs/components/Inspector/StorageTab.js +56 -52
  25. package/dist/commonjs/components/Inspector/TabBar.js +29 -26
  26. package/dist/commonjs/components/JsonViewer.js +169 -164
  27. package/dist/commonjs/components/LogCard.js +34 -38
  28. package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
  29. package/dist/commonjs/components/SegmentedTabs.d.ts +4 -1
  30. package/dist/commonjs/components/SegmentedTabs.js +8 -8
  31. package/dist/commonjs/constants/index.js +1 -1
  32. package/dist/commonjs/constants/version.d.ts +1 -1
  33. package/dist/commonjs/constants/version.js +1 -1
  34. package/dist/commonjs/customHooks/networkLogger.js +1 -2
  35. package/dist/commonjs/helpers/index.d.ts +6 -0
  36. package/dist/commonjs/helpers/index.js +4 -4
  37. package/dist/commonjs/helpers/memoryManager.d.ts +0 -1
  38. package/dist/commonjs/helpers/memoryManager.js +1 -1
  39. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  40. package/dist/commonjs/helpers/settingsStore.js +1 -1
  41. package/dist/commonjs/i18n/index.d.ts +35 -0
  42. package/dist/commonjs/i18n/index.js +1 -1
  43. package/dist/commonjs/i18n/locales/ar.json +1 -0
  44. package/dist/commonjs/i18n/locales/de.json +1 -0
  45. package/dist/commonjs/i18n/locales/en.json +1 -1
  46. package/dist/commonjs/i18n/locales/es.json +1 -0
  47. package/dist/commonjs/i18n/locales/fr.json +1 -0
  48. package/dist/commonjs/i18n/locales/hi.json +1 -0
  49. package/dist/commonjs/i18n/locales/ja.json +1 -0
  50. package/dist/commonjs/i18n/locales/ko.json +1 -0
  51. package/dist/commonjs/i18n/locales/pt.json +1 -0
  52. package/dist/commonjs/i18n/locales/ru.json +1 -0
  53. package/dist/commonjs/i18n/locales/zh.json +1 -0
  54. package/dist/commonjs/index.d.ts +2 -4
  55. package/dist/commonjs/index.js +2 -2
  56. package/dist/commonjs/styles/AppColors.d.ts +40 -0
  57. package/dist/commonjs/styles/AppColors.js +1 -1
  58. package/dist/commonjs/styles/index.js +1 -1
  59. package/dist/commonjs/types/enums.d.ts +0 -20
  60. package/dist/commonjs/types/enums.js +1 -1
  61. package/dist/esm/components/AnalyticsDetail.js +75 -75
  62. package/dist/esm/components/AnalyticsEventCard.js +20 -17
  63. package/dist/esm/components/AppHeaderLogo.js +5 -5
  64. package/dist/esm/components/BrandSquareIcon.js +39 -39
  65. package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
  66. package/dist/esm/components/ConsoleLogCard.js +98 -86
  67. package/dist/esm/components/EndOfListFooter.d.ts +5 -1
  68. package/dist/esm/components/EndOfListFooter.js +36 -14
  69. package/dist/esm/components/Inspector/AnalyticsTab.js +47 -315
  70. package/dist/esm/components/Inspector/ConsoleTab.js +61 -116
  71. package/dist/esm/components/Inspector/CrashDetail.js +49 -49
  72. package/dist/esm/components/Inspector/CrashTab.js +75 -65
  73. package/dist/esm/components/Inspector/DebuggingTab.js +31 -31
  74. package/dist/esm/components/Inspector/DeviceInfoTab.js +146 -144
  75. package/dist/esm/components/Inspector/InspectorHeader.js +5 -5
  76. package/dist/esm/components/Inspector/MainScreen.js +51 -53
  77. package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
  78. package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
  79. package/dist/esm/components/Inspector/NetworkTab.js +63 -63
  80. package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
  81. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
  82. package/dist/esm/components/Inspector/ReduxTab.js +163 -150
  83. package/dist/esm/components/Inspector/SettingsPanel.js +136 -188
  84. package/dist/esm/components/Inspector/StorageTab.js +88 -84
  85. package/dist/esm/components/Inspector/TabBar.js +37 -34
  86. package/dist/esm/components/JsonViewer.js +173 -168
  87. package/dist/esm/components/LogCard.js +38 -42
  88. package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
  89. package/dist/esm/components/SegmentedTabs.d.ts +4 -1
  90. package/dist/esm/components/SegmentedTabs.js +8 -8
  91. package/dist/esm/constants/index.js +1 -1
  92. package/dist/esm/constants/version.d.ts +1 -1
  93. package/dist/esm/constants/version.js +1 -1
  94. package/dist/esm/customHooks/networkLogger.js +1 -2
  95. package/dist/esm/helpers/index.d.ts +6 -0
  96. package/dist/esm/helpers/index.js +4 -4
  97. package/dist/esm/helpers/memoryManager.d.ts +0 -1
  98. package/dist/esm/helpers/memoryManager.js +1 -1
  99. package/dist/esm/helpers/remoteConfig.js +1 -1
  100. package/dist/esm/helpers/settingsStore.js +1 -1
  101. package/dist/esm/i18n/index.d.ts +35 -0
  102. package/dist/esm/i18n/index.js +1 -1
  103. package/dist/esm/i18n/locales/ar.json +1 -0
  104. package/dist/esm/i18n/locales/de.json +1 -0
  105. package/dist/esm/i18n/locales/en.json +1 -1
  106. package/dist/esm/i18n/locales/es.json +1 -0
  107. package/dist/esm/i18n/locales/fr.json +1 -0
  108. package/dist/esm/i18n/locales/hi.json +1 -0
  109. package/dist/esm/i18n/locales/ja.json +1 -0
  110. package/dist/esm/i18n/locales/ko.json +1 -0
  111. package/dist/esm/i18n/locales/pt.json +1 -0
  112. package/dist/esm/i18n/locales/ru.json +1 -0
  113. package/dist/esm/i18n/locales/zh.json +1 -0
  114. package/dist/esm/index.d.ts +2 -4
  115. package/dist/esm/index.js +5 -5
  116. package/dist/esm/styles/AppColors.d.ts +40 -0
  117. package/dist/esm/styles/AppColors.js +1 -1
  118. package/dist/esm/styles/index.js +1 -1
  119. package/dist/esm/types/enums.d.ts +0 -20
  120. package/dist/esm/types/enums.js +1 -1
  121. package/package.json +1 -15
  122. package/dist/commonjs/bundle.d.ts +0 -2
  123. package/dist/commonjs/bundle.js +0 -1
  124. package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
  125. package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
  126. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
  127. package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
  128. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
  129. package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
  130. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
  131. package/dist/commonjs/customHooks/performanceTracker.js +0 -63
  132. package/dist/commonjs/performance.d.ts +0 -2
  133. package/dist/commonjs/performance.js +0 -1
  134. package/dist/esm/bundle.d.ts +0 -2
  135. package/dist/esm/bundle.js +0 -1
  136. package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
  137. package/dist/esm/components/Inspector/BundleTab.js +0 -1297
  138. package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
  139. package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
  140. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
  141. package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
  142. package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
  143. package/dist/esm/customHooks/performanceTracker.js +0 -63
  144. package/dist/esm/performance.d.ts +0 -2
  145. package/dist/esm/performance.js +0 -1
@@ -1,223 +1,225 @@
1
- import Ee,{useState as Q,useEffect as ke,useMemo as F,useCallback as ze}from"react";import{View as T,Text as I,ScrollView as He,TextInput as Qe,Dimensions as _e,Platform as $,PixelRatio as We,StatusBar as et,StyleSheet as tt,NativeModules as j}from"react-native";import Se from"../TouchableScale";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as E}from"../../styles/AppFonts";import{useTranslation as rt}from"../../i18n";import{CpuIcon as St,WifiIcon as $t,ScreenIcon as Tt,LayersIcon as It,KeyIcon as Ct,SearchIcon as Ue,ClearIcon as Bt,CopyIcon as Ge,BoltIcon as Mt,AppleIcon as At,AndroidIcon as Dt,ExportIcon as Vt}from"../NetworkIcons";import{getNativeDeviceMetrics as Rt,getNativeSystemMetrics as Pt}from"../../native/NativeInspector";import{copyToClipboard as Le,getAppName as Et}from"../../helpers";import{showToast as Oe}from"../../helpers/toast";import{LIB_VERSION as fe}from"../../constants";const S=Ee.memo(({label:$e,value:D,copyable:Te=!0,badge:v,subtext:ee,isLast:Fe=!1})=>{const ve=D==null?"\u2014":typeof D=="boolean"?D?"Yes":"No":String(D);return<T style={[r.infoRow,Fe&&{borderBottomWidth:0}]}>
2
- <T style={{flex:1,paddingRight:8,minWidth:0}}>
3
- <T style={{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:6}}>
4
- <I style={r.infoLabel}numberOfLines={2}>{$e}</I>
5
- {v&&<T style={[r.infoBadge,{backgroundColor:v.bg,borderColor:`${v.color}33`}]}>
6
- <I style={[r.infoBadgeText,{color:v.color}]}>
7
- {v.text}
1
+ import ke,{useState as Q,useEffect as Ee,useMemo as F,useCallback as ze}from"react";import{View as C,Text as I,ScrollView as Ne,TextInput as Ze,Dimensions as He,Platform as v,PixelRatio as _e,StatusBar as Qe,StyleSheet as et,NativeModules as j}from"react-native";import Se from"../TouchableScale";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as R}from"../../styles/AppFonts";import{useTranslation as tt}from"../../i18n";import{CpuIcon as St,WifiIcon as $t,ScreenIcon as Ct,LayersIcon as It,KeyIcon as Tt,SearchIcon as We,ClearIcon as Bt,CopyIcon as Ue,BoltIcon as Mt,AppleIcon as At,AndroidIcon as Dt,ExportIcon as Vt}from"../NetworkIcons";import{getNativeDeviceMetrics as Rt,getNativeSystemMetrics as kt}from"../../native/NativeInspector";import{copyToClipboard as Pe,getAppName as Et}from"../../helpers";import{showToast as Le}from"../../helpers/toast";import{LIB_VERSION as fe}from"../../constants";const S=ke.memo(({label:D,value:V,copyable:we=!0,badge:$,subtext:ee,isLast:Oe=!1})=>{const ve=V==null?"\u2014":typeof V=="boolean"?V?"Yes":"No":String(V);return<C style={[o.infoRow,Oe&&{borderBottomWidth:0}]}>
2
+ <C style={{flex:1,paddingRight:8,minWidth:0}}>
3
+ <C style={{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:6}}>
4
+ <I style={o.infoLabel}numberOfLines={2}>{D}</I>
5
+ {$&&<C style={[o.infoBadge,{backgroundColor:$.bg,borderColor:`${$.color}33`}]}>
6
+ <I style={[o.infoBadgeText,{color:$.color}]}>
7
+ {$.text}
8
8
  </I>
9
- </T>}
10
- </T>
11
- {ee&&<I style={r.infoSubtext}numberOfLines={2}>{ee}</I>}
12
- </T>
13
- <T style={{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0,maxWidth:"58%",justifyContent:"flex-end"}}>
14
- <I style={[r.infoValue,typeof D=="boolean"&&{color:D?e.emerald500:e.errorColor}]}numberOfLines={3}selectable>
9
+ </C>}
10
+ </C>
11
+ {ee&&<I style={o.infoSubtext}numberOfLines={2}>{ee}</I>}
12
+ </C>
13
+ <C style={{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0,maxWidth:"58%",justifyContent:"flex-end"}}>
14
+ <I style={[o.infoValue,typeof V=="boolean"&&{color:V?e.emerald500:e.errorColor}]}numberOfLines={3}selectable>
15
15
  {ve}
16
16
  </I>
17
- {Te&&D!==null&&D!==void 0&&<Se hitSlop={8}onPress={()=>{Le(ve,$e),Oe(`Copied ${$e}`)}}style={r.rowCopyBtn}>
18
- <Ge size={11}color={e.grayTextWeak}/>
17
+ {we&&V!==null&&V!==void 0&&<Se hitSlop={8}onPress={()=>{Pe(ve,D),Le(`Copied ${D}`)}}style={o.rowCopyBtn}>
18
+ <Ue size={11}color={e.grayTextWeak}/>
19
19
  </Se>}
20
- </T>
21
- </T>});export const DeviceInfoTab=Ee.memo(()=>{const{t:$e}=rt(),[D,Te]=Q("overview"),[v,ee]=Q(""),[Fe,ve]=Q(!0),[w,Je]=Q(null),[Ne,je]=Q(null),[O,xe]=Q("Detecting..."),[_,Ie]=Q("0s"),Ye=Ee.useRef(Date.now()),Ce=ze(async()=>{try{const[f,B]=await Promise.all([Rt(),Pt()]);Je(f),je(B)}catch{}finally{ve(!1)}},[]);ke(()=>{Ce();const f=setInterval(Ce,3e3);return()=>clearInterval(f)},[Ce]),ke(()=>{let f=!0;return(async()=>{try{const A=j?.PlatformConstants?.serverHost||j?.AndroidConstants?.serverHost||j?.DevSettings?.serverHost;if(A&&typeof A=="string"){const V=A.split(":")[0].replace(/https?:\/\//,"");if(V&&V!=="localhost"&&V!=="127.0.0.1"){f&&xe(V);return}}}catch{}try{const A=new AbortController,V=setTimeout(()=>A.abort(),1200),K=await fetch("https://api.ipify.org?format=json",{signal:A.signal});if(clearTimeout(V),K.ok){const J=await K.json();if(J&&J.ip&&f){xe(J.ip);return}}}catch{}f&&xe($.OS==="android"?"10.0.2.15 (Local)":"127.0.0.1 (Local)")})(),()=>{f=!1}},[]),ke(()=>{const f=()=>{const A=Math.floor((Date.now()-Ye.current)/1e3),V=Math.floor(A/3600),K=Math.floor(A%3600/60),J=A%60;V>0?Ie(`${V}h ${K}m ${J}s`):K>0?Ie(`${K}m ${J}s`):Ie(`${J}s`)},B=setInterval(f,1e3);return f(),()=>clearInterval(B)},[]);const k=_e.get("window"),R=_e.get("screen"),C=We.get(),Y=We.getFontScale(),W=k.width>=600||k.height>=1e3,q=k.width>k.height,X=$.OS==="android"?et.currentHeight||24:k.height>=812?44:20,N=F(()=>{const f=`${$.OS}-${$.Version}-${R.width}x${R.height}-${C}-${$.constants?.Brand||"generic"}`;let B=0;for(let V=0;V<f.length;V++)B=(B<<5)-B+f.charCodeAt(V),B|=0;const A=Math.abs(B).toString(16).padStart(8,"0");return`UDID-${$.OS.toUpperCase()}-${A.slice(0,4)}-${A.slice(4,8)}-${Date.now().toString(16).slice(-4)}`.toUpperCase()},[R.width,R.height,C]),P=!!global?.HermesInternal,U=!!globalThis?.__turboModuleProxy,Z=F(()=>{const f=$.constants?.reactNativeVersion;return f?`${f.major}.${f.minor}.${f.patch}${f.prerelease!=null?`-${f.prerelease}`:""}`:"0.74+"},[]),M=w?.totalRAM?Math.round(w.totalRAM/(1024*1024)):Ne?.totalPhysicalRamMb||4096,L=w?.freeRAM?Math.round(w.freeRAM/(1024*1024)):Math.max(0,M-(Ne?.residentRamMb||1200)),G=Math.max(0,M-L),we=M>0?Math.round(G/M*100):45,z=w?.totalStorage?(w.totalStorage/(1024*1024*1024)).toFixed(1):"128.0",H=w?.freeStorage?(w.freeStorage/(1024*1024*1024)).toFixed(1):"64.2",Ke=F(()=>[{key:"overview",label:"Overview",icon:f=><It size={12}color={f}/>},{key:"hardware",label:"Hardware",icon:f=><St size={12}color={f}/>},{key:"network",label:"Network & IP",icon:f=><$t size={12}color={f}/>},{key:"display",label:"Display",icon:f=><Tt size={12}color={f}/>},{key:"runtime",label:"Runtime & App",icon:f=><Mt size={12}color={f}/>},{key:"security",label:"Security & IDs",icon:f=><Ct size={12}color={f}/>}],[]),o=F(()=>({identifiers:{pseudoUDID:N,bundleId:w?.appBundleId||w?.appPackageName||"com.app.inspector"},hardware:{model:w?.deviceModel||$.constants?.Model||"Unknown Device",brand:w?.deviceBrand||$.constants?.Brand||($.OS==="ios"?"Apple":"Android"),osVersion:`${$.OS} ${$.Version}`,apiLevel:w?.apiLevel||$.constants?.Version||null,cpuAbi:w?.cpuAbi||$.constants?.ServerHost||"arm64-v8a",totalRamMb:M,freeRamMb:L,usedRamMb:G,totalStorageGb:`${z} GB`,freeStorageGb:`${H} GB`,batteryPercent:w?.batteryPercent??100,isCharging:w?.isCharging??!1},network:{ipAddress:O,isWifi:!0,reachability:"Online"},display:{windowWidth:k.width,windowHeight:k.height,screenWidth:R.width,screenHeight:R.height,pixelRatio:C,fontScale:Y,statusBarHeight:X,isTablet:W,orientation:q?"Landscape":"Portrait"},runtime:{appName:Et(),appVersion:w?.appVersion||"1.0.0",appBuild:w?.appBuild||"1",reactNativeVersion:Z,inspectorVersion:fe,isHermes:P,isTurboModule:U,isDev:__DEV__,jsEngine:P?"Hermes":"JSC",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:Intl.DateTimeFormat().resolvedOptions().locale,sessionUptime:_}}),[N,w,M,L,G,z,H,O,k,R,C,Y,X,W,q,Z,P,U,_]),qe=()=>{Le(JSON.stringify(o,null,2),"Device Full Report"),Oe("Copied Full Device JSON Report!")},Xe=()=>{const f=`# Device Information Report
20
+ </C>
21
+ </C>});export const DeviceInfoTab=ke.memo(()=>{const{t:D}=tt(),[V,we]=Q("overview"),[$,ee]=Q(""),[Oe,ve]=Q(!0),[w,Ge]=Q(null),[Fe,Je]=Q(null),[O,Ce]=Q("Detecting..."),[_,Ie]=Q("0s"),je=ke.useRef(Date.now()),xe=ze(async()=>{try{const[f,T]=await Promise.all([Rt(),kt()]);Ge(f),Je(T)}catch{}finally{ve(!1)}},[]);Ee(()=>{xe();const f=setInterval(xe,3e3);return()=>clearInterval(f)},[xe]),Ee(()=>{let f=!0;return(async()=>{try{const x=j?.PlatformConstants?.serverHost||j?.AndroidConstants?.serverHost||j?.DevSettings?.serverHost;if(x&&typeof x=="string"){const M=x.split(":")[0].replace(/https?:\/\//,"");if(M&&M!=="localhost"&&M!=="127.0.0.1"){f&&Ce(M);return}}}catch{}try{const x=new AbortController,M=setTimeout(()=>x.abort(),1200),K=await fetch("https://api.ipify.org?format=json",{signal:x.signal});if(clearTimeout(M),K.ok){const J=await K.json();if(J&&J.ip&&f){Ce(J.ip);return}}}catch{}f&&Ce(v.OS==="android"?"10.0.2.15 (Local)":"127.0.0.1 (Local)")})(),()=>{f=!1}},[]),Ee(()=>{const f=()=>{const x=Math.floor((Date.now()-je.current)/1e3),M=Math.floor(x/3600),K=Math.floor(x%3600/60),J=x%60;M>0?Ie(`${M}h ${K}m ${J}s`):K>0?Ie(`${K}m ${J}s`):Ie(`${J}s`)},T=setInterval(f,1e3);return f(),()=>clearInterval(T)},[]);const P=He.get("window"),k=He.get("screen"),B=_e.get(),Y=_e.getFontScale(),W=P.width>=600||P.height>=1e3,q=P.width>P.height,X=v.OS==="android"?Qe.currentHeight||24:P.height>=812?44:20,z=F(()=>{const f=`${v.OS}-${v.Version}-${k.width}x${k.height}-${B}-${v.constants?.Brand||"generic"}`;let T=0;for(let M=0;M<f.length;M++)T=(T<<5)-T+f.charCodeAt(M),T|=0;const x=Math.abs(T).toString(16).padStart(8,"0");return`UDID-${v.OS.toUpperCase()}-${x.slice(0,4)}-${x.slice(4,8)}-${Date.now().toString(16).slice(-4)}`.toUpperCase()},[k.width,k.height,B]),E=!!global?.HermesInternal,U=!!globalThis?.__turboModuleProxy,Z=F(()=>{const f=v.constants?.reactNativeVersion;return f?`${f.major}.${f.minor}.${f.patch}${f.prerelease!=null?`-${f.prerelease}`:""}`:"0.74+"},[]),A=w?.totalRAM?Math.round(w.totalRAM/(1024*1024)):Fe?.totalPhysicalRamMb||4096,L=w?.freeRAM?Math.round(w.freeRAM/(1024*1024)):Math.max(0,A-(Fe?.residentRamMb||1200)),G=Math.max(0,A-L),$e=A>0?Math.round(G/A*100):45,N=w?.totalStorage?(w.totalStorage/(1024*1024*1024)).toFixed(1):"128.0",H=w?.freeStorage?(w.freeStorage/(1024*1024*1024)).toFixed(1):"64.2",Ye=F(()=>[{key:"overview",label:D("device.subTabs.overview","Overview"),themeColor:e.sky600,icon:f=><It size={12}color={f}/>},{key:"hardware",label:D("device.subTabs.hardware","Hardware"),themeColor:e.orange600,icon:f=><St size={12}color={f}/>},{key:"network",label:D("device.subTabs.network","Network & IP"),themeColor:e.teal600,icon:f=><$t size={12}color={f}/>},{key:"display",label:D("device.subTabs.display","Display"),themeColor:e.pink600,icon:f=><Ct size={12}color={f}/>},{key:"runtime",label:D("device.subTabs.runtime","Runtime & App"),themeColor:e.amber600,icon:f=><Mt size={12}color={f}/>},{key:"security",label:D("device.subTabs.security","Security & IDs"),themeColor:e.errorColor,icon:f=><Tt size={12}color={f}/>}],[D]),r=F(()=>({identifiers:{pseudoUDID:z,bundleId:w?.appBundleId||w?.appPackageName||"com.app.inspector"},hardware:{model:w?.deviceModel||v.constants?.Model||"Unknown Device",brand:w?.deviceBrand||v.constants?.Brand||(v.OS==="ios"?"Apple":"Android"),osVersion:`${v.OS} ${v.Version}`,apiLevel:w?.apiLevel||v.constants?.Version||null,cpuAbi:w?.cpuAbi||v.constants?.ServerHost||"arm64-v8a",totalRamMb:A,freeRamMb:L,usedRamMb:G,totalStorageGb:`${N} GB`,freeStorageGb:`${H} GB`,batteryPercent:w?.batteryPercent??100,isCharging:w?.isCharging??!1},network:{ipAddress:O,isWifi:!0,reachability:"Online"},display:{windowWidth:P.width,windowHeight:P.height,screenWidth:k.width,screenHeight:k.height,pixelRatio:B,fontScale:Y,statusBarHeight:X,isTablet:W,orientation:q?"Landscape":"Portrait"},runtime:{appName:Et(),appVersion:w?.appVersion||"1.0.0",appBuild:w?.appBuild||"1",reactNativeVersion:Z,inspectorVersion:fe,isHermes:E,isTurboModule:U,isDev:__DEV__,jsEngine:E?"Hermes":"JSC",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:Intl.DateTimeFormat().resolvedOptions().locale,sessionUptime:_}}),[z,w,A,L,G,N,H,O,P,k,B,Y,X,W,q,Z,E,U,_]),Ke=()=>{Pe(JSON.stringify(r,null,2),"Device Full Report"),Le(D("device.copiedJson","Copied Full Device JSON Report!"))},qe=()=>{const f=`# Device Information Report
22
22
  **Generated by React Native In-App Inspector v${fe}**
23
23
 
24
24
  ## \u{1F4F1} Hardware & System
25
- - **Device Model:** ${o.hardware.model}
26
- - **Brand / Manufacturer:** ${o.hardware.brand}
27
- - **OS Version:** ${o.hardware.osVersion}
28
- - **CPU Architecture:** ${o.hardware.cpuAbi}
29
- - **Total RAM:** ${M} MB (Free: ${L} MB)
30
- - **Total Storage:** ${z} GB (Free: ${H} GB)
31
- - **Battery:** ${o.hardware.batteryPercent}% (${o.hardware.isCharging?"Charging":"Unplugged"})
25
+ - **Device Model:** ${r.hardware.model}
26
+ - **Brand / Manufacturer:** ${r.hardware.brand}
27
+ - **OS Version:** ${r.hardware.osVersion}
28
+ - **CPU Architecture:** ${r.hardware.cpuAbi}
29
+ - **Total RAM:** ${A} MB (Free: ${L} MB)
30
+ - **Total Storage:** ${N} GB (Free: ${H} GB)
31
+ - **Battery:** ${r.hardware.batteryPercent}% (${r.hardware.isCharging?"Charging":"Unplugged"})
32
32
 
33
33
  ## \u{1F310} Network & Connectivity
34
34
  - **IP Address:** ${O}
35
35
  - **Status:** Online
36
36
 
37
37
  ## \u{1F5A5} Display & Geometry
38
- - **Resolution:** ${R.width} \xD7 ${R.height} pt (@${C}x)
38
+ - **Resolution:** ${k.width} \xD7 ${k.height} pt (@${B}x)
39
39
  - **Form Factor:** ${W?"Tablet":"Phone"} (${q?"Landscape":"Portrait"})
40
40
  - **Status Bar Height:** ${X} pt
41
41
 
42
42
  ## \u2699\uFE0F Runtime & App
43
- - **App Name:** ${o.runtime.appName}
44
- - **App Version:** ${o.runtime.appVersion} (${o.runtime.appBuild})
43
+ - **App Name:** ${r.runtime.appName}
44
+ - **App Version:** ${r.runtime.appVersion} (${r.runtime.appBuild})
45
45
  - **React Native:** v${Z}
46
- - **JS Engine:** ${P?"Hermes":"JSC"} (Bridgeless TurboModule: ${U?"Yes":"No"})
46
+ - **JS Engine:** ${E?"Hermes":"JSC"} (Bridgeless TurboModule: ${U?"Yes":"No"})
47
47
  - **Environment:** ${__DEV__?"Development (__DEV__)":"Production (Release)"}
48
- - **Timezone:** ${o.runtime.timezone}
48
+ - **Timezone:** ${r.runtime.timezone}
49
49
  - **Session Uptime:** ${_}
50
50
 
51
51
  ## \u{1F511} Identifiers & Security
52
- - **Pseudo-UDID:** \`${N}\`
53
- - **Bundle ID:** \`${o.identifiers.bundleId}\`
54
- `;Le(f,"Device Markdown Report"),Oe("Copied Markdown Report to Clipboard!")},t=ze((f,B,A)=>{if(!v.trim())return!0;const V=v.toLowerCase().trim(),K=B!=null?typeof B=="object"?JSON.stringify(B):String(B):"",J=A!=null?String(A):"";return f.toLowerCase().includes(V)||K.toLowerCase().includes(V)||J.toLowerCase().includes(V)},[v]),Be=F(()=>v.trim()?t("Model",w?.deviceModel||$.constants?.Model)||t("OS",$.OS)||t("IP Address",O)||t("RAM",`${G}/${M}`)||t("Uptime",_):!0,[v,t,w,O,G,M,_]),Me=F(()=>v.trim()?t("Device Model",o.hardware.model)||t("Manufacturer",o.hardware.brand)||t("Operating System",o.hardware.osVersion)||t("IP Address",O)||t("RAM Memory",`${G} MB / ${M} MB (${we}%)`,`Free Memory: ${L} MB`)||t("Storage Capacity",`${H} GB Free / ${z} GB Total`)||t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)||t("JavaScript Engine",P?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")||t("UDID Identifier",N):!0,[v,t,o,O,G,M,we,L,H,z,P,N]),Ae=F(()=>v.trim()?t("CPU Architecture",o.hardware.cpuAbi)||t("Total RAM",`${M} MB`)||t("Free RAM",`${L} MB`)||t("Storage Capacity",`${z} GB`)||t("Available Storage",`${H} GB`)||t("Battery",`${w?.batteryPercent??100}%`)||t("API Level",`API ${w?.apiLevel||$.Version}`)||t("Thermal State","Nominal (Cool)"):!0,[v,t,o,M,L,z,H,w]),De=F(()=>v.trim()?t("IP Address",O)||t("Internet Reachability","Connected")||t("Connection Type","Wi-Fi / Local Area Network")||t("Metro Dev Server",j?.PlatformConstants?.serverHost||j?.AndroidConstants?.serverHost||"localhost:8081")||t("WebSocket Protocol","Active & Enabled")||t("Network Inspector Interceptor","Intercepting XHR & Fetch"):!0,[v,t,O]),Ve=F(()=>v.trim()?t("Window Resolution",`${k.width.toFixed(0)} \xD7 ${k.height.toFixed(0)} pt`)||t("Screen Physical Size",`${(R.width*C).toFixed(0)} \xD7 ${(R.height*C).toFixed(0)} px`)||t("Pixel Density",`@${C}x (${Math.round(C*160)} dpi)`)||t("Font Scale",`${Y}x`)||t("Form Factor",W?"Tablet":"Smartphone")||t("Orientation",q?"Landscape":"Portrait")||t("Status Bar Height",`${X} pt`):!0,[v,t,k,R,C,Y,W,q,X]),Re=F(()=>v.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${Z}`)||t("In-App Inspector Version",`v${fe}`)||t("Hermes Engine",P?"Enabled (AOT Bytecode)":"Disabled (JSC)")||t("New Architecture",U?"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",_):!0,[v,t,o,Z,P,U,_]),Pe=F(()=>v.trim()?t("Pseudo-UDID",N)||t("Bundle ID",o.identifiers.bundleId)||t("Root / Jailbreak","Clean (Standard Sandbox)")||t("Simulator / Emulator",$.constants?.Model?.includes?.("sdk")||$.constants?.Model?.includes?.("Emulator")||$.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")||t("Sandbox Integrity","Enforced by OS Kernel"):!0,[v,t,N,o]),Ze=F(()=>v.trim()?Be||Me||Ae||De||Ve||Re||Pe:!0,[v,Be,Me,Ae,De,Ve,Re,Pe]);return<T style={r.container}>
52
+ - **Pseudo-UDID:** \`${z}\`
53
+ - **Bundle ID:** \`${r.identifiers.bundleId}\`
54
+ `;Pe(f,"Device Markdown Report"),Le(D("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},t=ze((f,T,x)=>{if(!$.trim())return!0;const M=$.toLowerCase().trim(),K=T!=null?typeof T=="object"?JSON.stringify(T):String(T):"",J=x!=null?String(x):"";return f.toLowerCase().includes(M)||K.toLowerCase().includes(M)||J.toLowerCase().includes(M)},[$]),Te=F(()=>$.trim()?t("Model",w?.deviceModel||v.constants?.Model)||t("OS",v.OS)||t("IP Address",O)||t("RAM",`${G}/${A}`)||t("Uptime",_):!0,[$,t,w,O,G,A,_]),Be=F(()=>$.trim()?t("Device Model",r.hardware.model)||t("Manufacturer",r.hardware.brand)||t("Operating System",r.hardware.osVersion)||t("IP Address",O)||t("RAM Memory",`${G} MB / ${A} MB (${$e}%)`,`Free Memory: ${L} MB`)||t("Storage Capacity",`${H} GB Free / ${N} GB Total`)||t("App Version",`v${r.runtime.appVersion} (${r.runtime.appBuild})`)||t("JavaScript Engine",E?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")||t("UDID Identifier",z):!0,[$,t,r,O,G,A,$e,L,H,N,E,z]),Me=F(()=>$.trim()?t("CPU Architecture",r.hardware.cpuAbi)||t("Total RAM",`${A} MB`)||t("Free RAM",`${L} MB`)||t("Storage Capacity",`${N} GB`)||t("Available Storage",`${H} GB`)||t("Battery",`${w?.batteryPercent??100}%`)||t("API Level",`API ${w?.apiLevel||v.Version}`)||t("Thermal State","Nominal (Cool)"):!0,[$,t,r,A,L,N,H,w]),Ae=F(()=>$.trim()?t("IP Address",O)||t("Internet Reachability","Connected")||t("Connection Type","Wi-Fi / Local Area Network")||t("Metro Dev Server",j?.PlatformConstants?.serverHost||j?.AndroidConstants?.serverHost||"localhost:8081")||t("WebSocket Protocol","Active & Enabled")||t("Network Inspector Interceptor","Intercepting XHR & Fetch"):!0,[$,t,O]),De=F(()=>$.trim()?t("Window Resolution",`${P.width.toFixed(0)} \xD7 ${P.height.toFixed(0)} pt`)||t("Screen Physical Size",`${(k.width*B).toFixed(0)} \xD7 ${(k.height*B).toFixed(0)} px`)||t("Pixel Density",`@${B}x (${Math.round(B*160)} dpi)`)||t("Font Scale",`${Y}x`)||t("Form Factor",W?"Tablet":"Smartphone")||t("Orientation",q?"Landscape":"Portrait")||t("Status Bar Height",`${X} pt`):!0,[$,t,P,k,B,Y,W,q,X]),Ve=F(()=>$.trim()?t("App Name",r.runtime.appName)||t("Bundle ID",r.identifiers.bundleId)||t("App Version",`v${r.runtime.appVersion} (${r.runtime.appBuild})`)||t("React Native",`v${Z}`)||t("In-App Inspector Version",`v${fe}`)||t("Hermes Engine",E?"Enabled (AOT Bytecode)":"Disabled (JSC)")||t("New Architecture",U?"Enabled":"Legacy Bridge")||t("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")||t("Timezone",r.runtime.timezone)||t("Locale",r.runtime.locale)||t("Session Uptime",_):!0,[$,t,r,Z,E,U,_]),Re=F(()=>$.trim()?t("Pseudo-UDID",z)||t("Bundle ID",r.identifiers.bundleId)||t("Root / Jailbreak","Clean (Standard Sandbox)")||t("Simulator / Emulator",v.constants?.Model?.includes?.("sdk")||v.constants?.Model?.includes?.("Emulator")||v.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")||t("Sandbox Integrity","Enforced by OS Kernel"):!0,[$,t,z,r]),Xe=F(()=>$.trim()?Te||Be||Me||Ae||De||Ve||Re:!0,[$,Te,Be,Me,Ae,De,Ve,Re]);return<C style={o.container}>
55
55
 
56
- <T style={r.subTabsWrapper}>
57
- <He horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.subTabsContainer}>
58
- {Ke.map(f=>{const B=D===f.key,A=B?e.white:e.grayText;return<Se key={f.key}onPress={()=>Te(f.key)}style={[r.subTabPill,B&&r.subTabPillActive]}>
59
- {f.icon(A)}
60
- <I style={[r.subTabPillText,B&&r.subTabPillTextActive]}>
61
- {f.label}
62
- </I>
63
- </Se>})}
64
- </He>
65
- </T>
66
-
67
-
68
- <T style={r.actionBar}>
69
- <T style={r.searchBar}>
70
- <Ue size={14}color={e.grayTextWeak}/>
71
- <Qe value={v}onChangeText={ee}placeholder="Search specs, UDID, IP, screen..."placeholderTextColor={e.grayTextWeak}style={r.searchInput}clearButtonMode="while-editing"/>
72
- {v.length>0&&<Se onPress={()=>ee("")}hitSlop={8}>
56
+ <C style={o.actionBar}>
57
+ <C style={o.searchBar}>
58
+ <We size={14}color={e.grayTextWeak}/>
59
+ <Ze value={$}onChangeText={ee}placeholder={D("device.searchPlaceholder","Search specs, UDID, IP, screen...")}placeholderTextColor={e.grayTextWeak}style={o.searchInput}clearButtonMode="while-editing"/>
60
+ {$.length>0&&<Se onPress={()=>ee("")}hitSlop={8}>
73
61
  <Bt size={13}color={e.grayTextWeak}/>
74
62
  </Se>}
75
- </T>
63
+ </C>
76
64
 
77
- <Se onPress={qe}style={r.exportButton}hitSlop={6}>
65
+ <Se onPress={Ke}style={o.exportButton}hitSlop={6}>
78
66
  <Vt size={12}color={e.purple}/>
79
- <I style={r.exportButtonText}>JSON</I>
67
+ <I style={o.exportButtonText}>JSON</I>
80
68
  </Se>
81
69
 
82
- <Se onPress={Xe}style={[r.exportButton,{backgroundColor:`${e.emerald500}14`,borderColor:`${e.emerald500}33`}]}hitSlop={6}>
83
- <Ge size={12}color={e.emerald500}/>
84
- <I style={[r.exportButtonText,{color:e.emerald500}]}>MD</I>
70
+ <Se onPress={qe}style={[o.exportButton,{backgroundColor:`${e.emerald500}14`,borderColor:`${e.emerald500}33`}]}hitSlop={6}>
71
+ <Ue size={12}color={e.emerald500}/>
72
+ <I style={[o.exportButtonText,{color:e.emerald500}]}>MD</I>
85
73
  </Se>
86
- </T>
74
+ </C>
75
+
76
+
77
+ <C style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:12,gap:6}}>
78
+ <Ne horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
79
+ {Ye.map(f=>{const T=V===f.key,x=f.themeColor||e.purple,M=T?e.white:x;return<Se key={f.key}onPress={()=>we(f.key)}>
80
+ <C style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:T?x:`${x}12`,borderWidth:1,borderColor:T?x:`${x}30`,gap:5}}>
81
+ {f.icon(M)}
82
+ <I style={{fontFamily:R.interBold,fontSize:10.5,color:T?e.white:e.primaryBlack}}>
83
+ {f.label}
84
+ </I>
85
+ </C>
86
+ </Se>})}
87
+ </Ne>
88
+ </C>
87
89
 
88
90
 
89
- <He style={r.scrollArea}contentContainerStyle={r.scrollContent}showsVerticalScrollIndicator={!1}>
91
+ <Ne style={o.scrollArea}contentContainerStyle={o.scrollContent}showsVerticalScrollIndicator={!1}>
90
92
 
91
- {(!v.trim()||Be)&&<T style={r.heroCard}>
92
- <T style={r.heroHeader}>
93
- <T style={r.heroIconWrap}>
94
- {$.OS==="ios"?<At size={20}color={e.white}/>:<Dt size={20}color={e.white}/>}
95
- </T>
96
- <T style={{flex:1,minWidth:0}}>
97
- <I style={r.heroTitle}numberOfLines={1}ellipsizeMode="tail">
98
- {w?.deviceModel||$.constants?.Model||($.OS==="ios"?"Apple iPhone":"Android Device")}
93
+ {(!$.trim()||Te)&&<C style={o.heroCard}>
94
+ <C style={o.heroHeader}>
95
+ <C style={o.heroIconWrap}>
96
+ {v.OS==="ios"?<At size={20}color={e.white}/>:<Dt size={20}color={e.white}/>}
97
+ </C>
98
+ <C style={{flex:1,minWidth:0}}>
99
+ <I style={o.heroTitle}numberOfLines={1}ellipsizeMode="tail">
100
+ {w?.deviceModel||v.constants?.Model||(v.OS==="ios"?"Apple iPhone":"Android Device")}
99
101
  </I>
100
- <I style={r.heroSubtitle}numberOfLines={1}ellipsizeMode="tail">
101
- {$.OS==="ios"?`iOS ${$.Version}`:`Android ${$.Version} (API ${w?.apiLevel||$.Version})`}
102
+ <I style={o.heroSubtitle}numberOfLines={1}ellipsizeMode="tail">
103
+ {v.OS==="ios"?`iOS ${v.Version}`:`Android ${v.Version} (API ${w?.apiLevel||v.Version})`}
102
104
  </I>
103
- </T>
104
- <T style={r.heroBadge}>
105
- <T style={r.pulseDot}/>
106
- <I style={r.heroBadgeText}>LIVE</I>
107
- </T>
108
- </T>
105
+ </C>
106
+ <C style={o.heroBadge}>
107
+ <C style={o.pulseDot}/>
108
+ <I style={o.heroBadgeText}>LIVE</I>
109
+ </C>
110
+ </C>
109
111
 
110
112
 
111
- <T style={r.heroMetricsStrip}>
112
- <T style={r.heroMetricItem}>
113
- <I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">IP ADDRESS</I>
114
- <I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
113
+ <C style={o.heroMetricsStrip}>
114
+ <C style={o.heroMetricItem}>
115
+ <I style={o.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{D("device.ipAddress","IP ADDRESS")}</I>
116
+ <I style={o.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
115
117
  {O}
116
118
  </I>
117
- </T>
118
- <T style={r.heroMetricDivider}/>
119
- <T style={r.heroMetricItem}>
120
- <I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">RAM (USED/TOTAL)</I>
121
- <I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
122
- {G}/{M} MB
119
+ </C>
120
+ <C style={o.heroMetricDivider}/>
121
+ <C style={o.heroMetricItem}>
122
+ <I style={o.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{D("device.ramUsedTotal","RAM (USED/TOTAL)")}</I>
123
+ <I style={o.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
124
+ {G}/{A} MB
123
125
  </I>
124
- </T>
125
- <T style={r.heroMetricDivider}/>
126
- <T style={r.heroMetricItem}>
127
- <I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">UPTIME</I>
128
- <I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">{_}</I>
129
- </T>
130
- </T>
131
- </T>}
126
+ </C>
127
+ <C style={o.heroMetricDivider}/>
128
+ <C style={o.heroMetricItem}>
129
+ <I style={o.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{D("device.uptime","UPTIME")}</I>
130
+ <I style={o.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">{_}</I>
131
+ </C>
132
+ </C>
133
+ </C>}
132
134
 
133
135
 
134
- {(D==="overview"||v.length>0)&&Me&&<T style={r.sectionCard}>
135
- <I style={r.sectionTitle}>DEVICE OVERVIEW</I>
136
- {t("Device Model",o.hardware.model)&&<S label="Device Model"value={o.hardware.model}/>}
137
- {t("Manufacturer",o.hardware.brand)&&<S label="Manufacturer / Brand"value={o.hardware.brand}/>}
138
- {t("Operating System",o.hardware.osVersion)&&<S label="Operating System"value={o.hardware.osVersion}badge={{text:$.OS.toUpperCase(),color:e.blue500,bg:`${e.blue500}18`}}/>}
136
+ {(V==="overview"||$.length>0)&&Be&&<C style={o.sectionCard}>
137
+ <I style={o.sectionTitle}>DEVICE OVERVIEW</I>
138
+ {t("Device Model",r.hardware.model)&&<S label="Device Model"value={r.hardware.model}/>}
139
+ {t("Manufacturer",r.hardware.brand)&&<S label="Manufacturer / Brand"value={r.hardware.brand}/>}
140
+ {t("Operating System",r.hardware.osVersion)&&<S label="Operating System"value={r.hardware.osVersion}badge={{text:v.OS.toUpperCase(),color:e.blue500,bg:`${e.blue500}18`}}/>}
139
141
  {t("IP Address",O)&&<S label="Local IP Address"value={O}badge={{text:"ONLINE",color:e.emerald500,bg:`${e.emerald500}18`}}/>}
140
- {t("RAM Memory",`${G} MB / ${M} MB (${we}%)`,`Free Memory: ${L} MB`)&&<S label="RAM Memory"value={`${G} MB / ${M} MB (${we}%)`}subtext={`Free Memory: ${L} MB`}/>}
141
- {t("Storage Capacity",`${H} GB Free / ${z} GB Total`)&&<S label="Internal Storage"value={`${H} GB Free / ${z} GB Total`}/>}
142
- {t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)&&<S label="Host App Version"value={`v${o.runtime.appVersion} (${o.runtime.appBuild})`}/>}
143
- {t("JavaScript Engine",P?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")&&<S label="JS Runtime Engine"value={P?"Hermes Bytecode Engine":"JavaScriptCore (JSC)"}badge={P?{text:"HERMES",color:e.purple,bg:`${e.purple}18`}:{text:"JSC",color:e.sky500,bg:`${e.sky500}18`}}/>}
144
- {t("UDID Identifier",N)&&<S label="Pseudo-UDID"value={N}isLast/>}
145
- </T>}
142
+ {t("RAM Memory",`${G} MB / ${A} MB (${$e}%)`,`Free Memory: ${L} MB`)&&<S label="RAM Memory"value={`${G} MB / ${A} MB (${$e}%)`}subtext={`Free Memory: ${L} MB`}/>}
143
+ {t("Storage Capacity",`${H} GB Free / ${N} GB Total`)&&<S label="Internal Storage"value={`${H} GB Free / ${N} GB Total`}/>}
144
+ {t("App Version",`v${r.runtime.appVersion} (${r.runtime.appBuild})`)&&<S label="Host App Version"value={`v${r.runtime.appVersion} (${r.runtime.appBuild})`}/>}
145
+ {t("JavaScript Engine",E?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")&&<S label="JS Runtime Engine"value={E?"Hermes Bytecode Engine":"JavaScriptCore (JSC)"}badge={E?{text:"HERMES",color:e.purple,bg:`${e.purple}18`}:{text:"JSC",color:e.sky500,bg:`${e.sky500}18`}}/>}
146
+ {t("UDID Identifier",z)&&<S label="Pseudo-UDID"value={z}isLast/>}
147
+ </C>}
146
148
 
147
149
 
148
- {(D==="hardware"||v.length>0)&&Ae&&<T style={r.sectionCard}>
149
- <I style={r.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</I>
150
- {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`}}/>}
151
- {t("Total RAM",`${M} MB`)&&<S label="Total Physical RAM"value={`${M} MB`}/>}
150
+ {(V==="hardware"||$.length>0)&&Me&&<C style={o.sectionCard}>
151
+ <I style={o.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</I>
152
+ {t("CPU Architecture",r.hardware.cpuAbi)&&<S label="CPU Architecture / ABI"value={r.hardware.cpuAbi}badge={{text:"64-BIT",color:e.purple,bg:`${e.purple}18`}}/>}
153
+ {t("Total RAM",`${A} MB`)&&<S label="Total Physical RAM"value={`${A} MB`}/>}
152
154
  {t("Free RAM",`${L} MB`)&&<S label="Available Free RAM"value={`${L} MB`}badge={{text:L<500?"LOW":"HEALTHY",color:L<500?e.errorColor:e.emerald500,bg:L<500?`${e.errorColor}18`:`${e.emerald500}18`}}/>}
153
- {t("Storage Capacity",`${z} GB`)&&<S label="Disk Storage Total"value={`${z} GB`}/>}
155
+ {t("Storage Capacity",`${N} GB`)&&<S label="Disk Storage Total"value={`${N} GB`}/>}
154
156
  {t("Available Storage",`${H} GB`)&&<S label="Disk Storage Available"value={`${H} GB`}/>}
155
157
  {t("Battery",`${w?.batteryPercent??100}%`)&&<S label="Battery Level"value={`${w?.batteryPercent??100}%`}badge={{text:w?.isCharging?"CHARGING":"DISCHARGING",color:w?.isCharging?e.emerald500:e.grayText,bg:w?.isCharging?`${e.emerald500}18`:`${e.grayText}18`}}/>}
156
- {t("API Level",`API ${w?.apiLevel||$.Version}`)&&$.OS==="android"&&<S label="Android API SDK Level"value={`API ${w?.apiLevel||$.Version}`}/>}
158
+ {t("API Level",`API ${w?.apiLevel||v.Version}`)&&v.OS==="android"&&<S label="Android API SDK Level"value={`API ${w?.apiLevel||v.Version}`}/>}
157
159
  {t("Thermal State","Nominal (Cool)")&&<S label="Thermal State"value="Nominal (Cool)"badge={{text:"OPTIMAL",color:e.emerald500,bg:`${e.emerald500}18`}}isLast/>}
158
- </T>}
160
+ </C>}
159
161
 
160
162
 
161
- {(D==="network"||v.length>0)&&De&&<T style={r.sectionCard}>
162
- <I style={r.sectionTitle}>NETWORK & CONNECTIVITY</I>
163
+ {(V==="network"||$.length>0)&&Ae&&<C style={o.sectionCard}>
164
+ <I style={o.sectionTitle}>NETWORK & CONNECTIVITY</I>
163
165
  {t("IP Address",O)&&<S label="Local Device IP"value={O}badge={{text:"IPV4",color:e.blue500,bg:`${e.blue500}18`}}/>}
164
166
  {t("Internet Reachability","Connected")&&<S label="Internet Reachability"value="Connected"badge={{text:"ONLINE",color:e.emerald500,bg:`${e.emerald500}18`}}/>}
165
167
  {t("Connection Type","Wi-Fi / Local Area Network")&&<S label="Active Connection Type"value="Wi-Fi / Local Area Network"/>}
166
168
  {t("Metro Dev Server",j?.PlatformConstants?.serverHost||j?.AndroidConstants?.serverHost||"localhost:8081")&&<S label="Metro Packager Host"value={j?.PlatformConstants?.serverHost||j?.AndroidConstants?.serverHost||"localhost:8081"}/>}
167
169
  {t("WebSocket Protocol","Active & Enabled")&&<S label="WebSocket (WSS) Support"value="Active & Enabled"/>}
168
170
  {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/>}
169
- </T>}
171
+ </C>}
170
172
 
171
173
 
172
- {(D==="display"||v.length>0)&&Ve&&<T style={r.sectionCard}>
173
- <I style={r.sectionTitle}>DISPLAY & SCREEN GEOMETRY</I>
174
- {t("Window Resolution",`${k.width.toFixed(0)} \xD7 ${k.height.toFixed(0)} pt`)&&<S label="Window Logical Size"value={`${k.width.toFixed(0)} \xD7 ${k.height.toFixed(0)} pt`}/>}
175
- {t("Screen Physical Size",`${(R.width*C).toFixed(0)} \xD7 ${(R.height*C).toFixed(0)} px`)&&<S label="Physical Screen Size"value={`${(R.width*C).toFixed(0)} \xD7 ${(R.height*C).toFixed(0)} px`}/>}
176
- {t("Pixel Density",`@${C}x (${Math.round(C*160)} dpi)`)&&<S label="Pixel Ratio (DPI Scale)"value={`@${C}x (${Math.round(C*160)} dpi)`}badge={{text:`@${C}x`,color:e.purple,bg:`${e.purple}18`}}/>}
174
+ {(V==="display"||$.length>0)&&De&&<C style={o.sectionCard}>
175
+ <I style={o.sectionTitle}>DISPLAY & SCREEN GEOMETRY</I>
176
+ {t("Window Resolution",`${P.width.toFixed(0)} \xD7 ${P.height.toFixed(0)} pt`)&&<S label="Window Logical Size"value={`${P.width.toFixed(0)} \xD7 ${P.height.toFixed(0)} pt`}/>}
177
+ {t("Screen Physical Size",`${(k.width*B).toFixed(0)} \xD7 ${(k.height*B).toFixed(0)} px`)&&<S label="Physical Screen Size"value={`${(k.width*B).toFixed(0)} \xD7 ${(k.height*B).toFixed(0)} px`}/>}
178
+ {t("Pixel Density",`@${B}x (${Math.round(B*160)} dpi)`)&&<S label="Pixel Ratio (DPI Scale)"value={`@${B}x (${Math.round(B*160)} dpi)`}badge={{text:`@${B}x`,color:e.purple,bg:`${e.purple}18`}}/>}
177
179
  {t("Font Scale",`${Y}x`)&&<S label="User Font Scale"value={`${Y}x (${Y===1?"Default":Y>1?"Enlarged":"Compact"})`}/>}
178
180
  {t("Form Factor",W?"Tablet":"Smartphone")&&<S label="Device Form Factor"value={W?"Tablet":"Smartphone"}badge={{text:W?"TABLET":"PHONE",color:W?e.blue500:e.purple,bg:W?`${e.blue500}18`:`${e.purple}18`}}/>}
179
181
  {t("Orientation",q?"Landscape":"Portrait")&&<S label="Screen Orientation"value={q?"Landscape":"Portrait"}/>}
180
182
  {t("Status Bar Height",`${X} pt`)&&<S label="Status Bar Inset"value={`${X} pt`}isLast/>}
181
- </T>}
183
+ </C>}
182
184
 
183
185
 
184
- {(D==="runtime"||v.length>0)&&Re&&<T style={r.sectionCard}>
185
- <I style={r.sectionTitle}>RUNTIME & APPLICATION</I>
186
- {t("App Name",o.runtime.appName)&&<S label="Application Name"value={o.runtime.appName}/>}
187
- {t("Bundle ID",o.identifiers.bundleId)&&<S label="Bundle Identifier / Package"value={o.identifiers.bundleId}/>}
188
- {t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)&&<S label="Application Version"value={`v${o.runtime.appVersion} (${o.runtime.appBuild})`}/>}
186
+ {(V==="runtime"||$.length>0)&&Ve&&<C style={o.sectionCard}>
187
+ <I style={o.sectionTitle}>RUNTIME & APPLICATION</I>
188
+ {t("App Name",r.runtime.appName)&&<S label="Application Name"value={r.runtime.appName}/>}
189
+ {t("Bundle ID",r.identifiers.bundleId)&&<S label="Bundle Identifier / Package"value={r.identifiers.bundleId}/>}
190
+ {t("App Version",`v${r.runtime.appVersion} (${r.runtime.appBuild})`)&&<S label="Application Version"value={`v${r.runtime.appVersion} (${r.runtime.appBuild})`}/>}
189
191
  {t("React Native",`v${Z}`)&&<S label="React Native Framework"value={`v${Z}`}badge={{text:"RN",color:e.sky500,bg:`${e.sky500}18`}}/>}
190
192
  {t("In-App Inspector Version",`v${fe}`)&&<S label="In-App Inspector Library"value={`v${fe}`}badge={{text:"LATEST",color:e.purple,bg:`${e.purple}18`}}/>}
191
- {t("Hermes Engine",P?"Enabled (AOT Bytecode)":"Disabled (JSC)")&&<S label="Hermes JavaScript Engine"value={P?"Enabled (AOT Bytecode)":"Disabled (JSC)"}badge={{text:P?"HERMES":"JSC",color:P?e.purple:e.grayText,bg:P?`${e.purple}18`:`${e.grayText}18`}}/>}
193
+ {t("Hermes Engine",E?"Enabled (AOT Bytecode)":"Disabled (JSC)")&&<S label="Hermes JavaScript Engine"value={E?"Enabled (AOT Bytecode)":"Disabled (JSC)"}badge={{text:E?"HERMES":"JSC",color:E?e.purple:e.grayText,bg:E?`${e.purple}18`:`${e.grayText}18`}}/>}
192
194
  {t("New Architecture",U?"Enabled":"Legacy Bridge")&&<S label="Bridgeless TurboModules (New Arch)"value={U?"Enabled":"Legacy Bridge"}badge={{text:U?"NEW ARCH":"LEGACY",color:U?e.emerald500:e.blue500,bg:U?`${e.emerald500}18`:`${e.blue500}18`}}/>}
193
195
  {t("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")&&<S label="Build Configuration"value={__DEV__?"Debug (__DEV__ = true)":"Release / Production"}badge={{text:__DEV__?"DEBUG":"RELEASE",color:__DEV__?e.warningIconGold:e.emerald500,bg:__DEV__?`${e.warningIconGold}18`:`${e.emerald500}18`}}/>}
194
- {t("Timezone",o.runtime.timezone)&&<S label="System Timezone"value={o.runtime.timezone}/>}
195
- {t("Locale",o.runtime.locale)&&<S label="System Language & Locale"value={o.runtime.locale}/>}
196
+ {t("Timezone",r.runtime.timezone)&&<S label="System Timezone"value={r.runtime.timezone}/>}
197
+ {t("Locale",r.runtime.locale)&&<S label="System Language & Locale"value={r.runtime.locale}/>}
196
198
  {t("Session Uptime",_)&&<S label="Inspector Session Uptime"value={_}isLast/>}
197
- </T>}
199
+ </C>}
198
200
 
199
201
 
200
- {(D==="security"||v.length>0)&&Pe&&<T style={r.sectionCard}>
201
- <I style={r.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</I>
202
- {t("Pseudo-UDID",N)&&<S label="Deterministic Pseudo-UDID"value={N}subtext="Stable hardware signature hash for testing & diagnostics"badge={{text:"PERSISTENT",color:e.purple,bg:`${e.purple}18`}}/>}
203
- {t("Bundle ID",o.identifiers.bundleId)&&<S label="Application Bundle ID"value={o.identifiers.bundleId}/>}
202
+ {(V==="security"||$.length>0)&&Re&&<C style={o.sectionCard}>
203
+ <I style={o.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</I>
204
+ {t("Pseudo-UDID",z)&&<S label="Deterministic Pseudo-UDID"value={z}subtext="Stable hardware signature hash for testing & diagnostics"badge={{text:"PERSISTENT",color:e.purple,bg:`${e.purple}18`}}/>}
205
+ {t("Bundle ID",r.identifiers.bundleId)&&<S label="Application Bundle ID"value={r.identifiers.bundleId}/>}
204
206
  {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`}}/>}
205
- {t("Simulator / Emulator",$.constants?.Model?.includes?.("sdk")||$.constants?.Model?.includes?.("Emulator")||$.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")&&<S label="Emulator / Physical Device"value={$.constants?.Model?.includes?.("sdk")||$.constants?.Model?.includes?.("Emulator")||$.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device"}/>}
207
+ {t("Simulator / Emulator",v.constants?.Model?.includes?.("sdk")||v.constants?.Model?.includes?.("Emulator")||v.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")&&<S label="Emulator / Physical Device"value={v.constants?.Model?.includes?.("sdk")||v.constants?.Model?.includes?.("Emulator")||v.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device"}/>}
206
208
  {t("Sandbox Integrity","Enforced by OS Kernel")&&<S label="App Sandbox File Isolation"value="Enforced by OS Kernel"isLast/>}
207
- </T>}
209
+ </C>}
208
210
 
209
211
 
210
- {v.trim().length>0&&!Ze&&<T style={r.emptySearchCard}>
211
- <Ue size={26}color={e.grayTextWeak}/>
212
- <I style={r.emptySearchTitle}>No matching device specifications</I>
213
- <I style={r.emptySearchSubtitle}>
214
- No properties matched &ldquo;{v}&rdquo;
212
+ {$.trim().length>0&&!Xe&&<C style={o.emptySearchCard}>
213
+ <We size={26}color={e.grayTextWeak}/>
214
+ <I style={o.emptySearchTitle}>No matching device specifications</I>
215
+ <I style={o.emptySearchSubtitle}>
216
+ No properties matched &ldquo;{$}&rdquo;
215
217
  </I>
216
- <Se onPress={()=>ee("")}style={r.clearSearchBtn}>
217
- <I style={r.clearSearchBtnText}>Clear Search</I>
218
+ <Se onPress={()=>ee("")}style={o.clearSearchBtn}>
219
+ <I style={o.clearSearchBtnText}>Clear Search</I>
218
220
  </Se>
219
- </T>}
221
+ </C>}
220
222
 
221
- <T style={{height:48}}/>
222
- </He>
223
- </T>});const r=tt.create({container:{flex:1,backgroundColor:e.grayBackground},subTabsWrapper:{backgroundColor:e.primaryLight,borderBottomWidth:1,borderBottomColor:e.dividerColor,paddingVertical:8},subTabsContainer:{paddingHorizontal:12,flexDirection:"row",alignItems:"center",gap:6},subTabPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5.5,borderRadius:8,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.grayBorderSecondary},subTabPillActive:{backgroundColor:e.purple,borderColor:e.purple},subTabPillText:{fontFamily:E.interBold,fontSize:11,color:e.grayText},subTabPillTextActive:{color:e.white},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:$.OS==="ios"?6:2,borderWidth:1,borderColor:e.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:E.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:E.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:E.interBold,fontSize:15,color:e.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:E.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:E.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:E.interBold,fontSize:8.5,color:e.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:E.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:E.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:E.interMedium,fontSize:12.5,color:e.primaryBlack},infoSubtext:{fontFamily:E.interRegular,fontSize:10,color:e.grayTextWeak,marginTop:1},infoBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},infoBadgeText:{fontFamily:E.interBold,fontSize:8.5},infoValue:{fontFamily:E.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:E.interBold,fontSize:13.5,color:e.primaryBlack,textAlign:"center"},emptySearchSubtitle:{fontFamily:E.interRegular,fontSize:11.5,color:e.grayTextWeak,textAlign:"center"},clearSearchBtn:{marginTop:6,paddingHorizontal:14,paddingVertical:6.5,borderRadius:8,backgroundColor:e.purple},clearSearchBtnText:{fontFamily:E.interBold,fontSize:11,color:e.white}});export default DeviceInfoTab;
223
+ <C style={{height:48}}/>
224
+ </Ne>
225
+ </C>});const o=et.create({container:{flex:1,backgroundColor:e.grayBackground},subTabsWrapper:{backgroundColor:e.primaryLight,borderBottomWidth:1,borderBottomColor:e.dividerColor,paddingVertical:8},subTabsContainer:{paddingHorizontal:12,flexDirection:"row",alignItems:"center",gap:6},subTabPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5.5,borderRadius:8,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.grayBorderSecondary},subTabPillActive:{backgroundColor:e.purple,borderColor:e.purple},subTabPillText:{fontFamily:R.interBold,fontSize:11,color:e.grayText},subTabPillTextActive:{color:e.white},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:v.OS==="ios"?6:2,borderWidth:1,borderColor:e.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:R.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:R.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:R.interBold,fontSize:15,color:e.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:R.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:R.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:R.interBold,fontSize:8.5,color:e.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:R.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:R.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:R.interMedium,fontSize:12.5,color:e.primaryBlack},infoSubtext:{fontFamily:R.interRegular,fontSize:10,color:e.grayTextWeak,marginTop:1},infoBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},infoBadgeText:{fontFamily:R.interBold,fontSize:8.5},infoValue:{fontFamily:R.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:R.interBold,fontSize:13.5,color:e.primaryBlack,textAlign:"center"},emptySearchSubtitle:{fontFamily:R.interRegular,fontSize:11.5,color:e.grayTextWeak,textAlign:"center"},clearSearchBtn:{marginTop:6,paddingHorizontal:14,paddingVertical:6.5,borderRadius:8,backgroundColor:e.purple},clearSearchBtnText:{fontFamily:R.interBold,fontSize:11,color:e.white}});export default DeviceInfoTab;
@@ -1,4 +1,4 @@
1
- import v,{useMemo as ne}from"react";import{Alert as Re,Animated as le,Linking as rt,Platform as se,Pressable as $e,StatusBar as ot,Text as C,TouchableOpacity as Ae,useWindowDimensions as at,View as S}from"react-native";import St from"react-native-linear-gradient";import{useInspector as Tt}from"./InspectorContext";import O from"../TouchableScale";import Ct from"../AppHeaderLogo";import i from"../../styles";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as I}from"../../styles/AppFonts";import{METHOD_COLORS as Vt}from"../../constants";import{LIB_VERSION as de}from"../../constants";import{getStatusColor as ce,getAppName as Dt,formatTime as It,getSize as ve,getAppVersionAndBuild as Rt}from"../../helpers";import{triggerNativeHaptic as U}from"../../native/NativeInspector";import{ScreenCapture as F}from"../../capture";import{showToast as L}from"../../helpers/toast";import{UpdateAvailableModal as $t}from"./UpdateAvailableModal";import{MediaPreviewModal as At}from"./MediaPreviewModal";import{WhiteBackNavigation as Ht,TrashIcon as Mt,SettingsIcon as Bt,CloseWhite as Ot,ChevronDownIcon as Lt,ClockIcon as Se,SizeIcon as Pt,AppleIcon as Et,AndroidIcon as Ft,NpmIcon as Wt,ResetIcon as _t,BoltIcon as Nt,InfoCircleIcon as Ut,CameraIcon as Gt,VideoCameraIcon as Qt}from"../NetworkIcons";import{useTranslation as Jt}from"../../i18n";const Kt=v.memo(()=>{const{t:D}=Jt(),{modalHeightPercent:Z,appIcon:He,selected:R,setSelected:Me,selectedEvent:k,setSelectedEvent:Be,selectedLog:H,setSelectedLog:Oe,selectedReduxSlice:W,setSelectedReduxSlice:Le,selectedReduxAction:G,setSelectedReduxAction:Pe,reduxState:Ee,reduxLastActionMap:Fe,showHeaderInfo:Xt,setShowHeaderInfo:Yt,updateAvailable:ee,latestNpmVersion:We,clearAnim:Te,activePulseAnim:je,unreadPulseAnim:_e,runClearAllWithAnimation:Ne,settingsPage:P,setSettingsPage:te,isAboutOpen:ie,setIsAboutOpen:xe,resetToDefaults:Ue,closeModal:ze,minimizeInspector:Ge,detailTitle:qe,activeTab:A,environment:Ce,visible:Zt,selectedCrash:$,setSelectedCrash:Qe,refreshMediaCount:j}=Tt(),{width:_}=at(),e=_<360,q=_<400,ei=_>=600,[Je,re]=v.useState(!1),[Ke,ti]=v.useState(()=>Rt().formatted),[M,Q]=v.useState(!1),[Xe,oe]=v.useState(0),E=v.useRef(null);v.useEffect(()=>{F.isRecording().then(T=>{Q(T)}).catch(()=>{})},[]),v.useEffect(()=>(M?(oe(0),E.current=setInterval(()=>{oe(T=>T+1)},1e3)):(E.current&&(clearInterval(E.current),E.current=null),oe(0)),()=>{E.current&&clearInterval(E.current)}),[M]);const[Ve,N]=v.useState(null),Ye=v.useCallback(async()=>{try{U("light");const T=await F.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(T){U("success");const V={id:`screenshot_${T.timestamp}.png`,type:"image",format:T.format,uri:T.uri,filename:T.uri.split("/").pop()||`screenshot_${T.timestamp}.png`,sizeBytes:T.sizeBytes,timestamp:T.timestamp,width:T.width,height:T.height};N(V),j?.().catch(()=>{}),L(D("header.screenshotCaptured"))}else L(D("header.screenshotFailed"))}catch{L(D("header.screenshotError"))}},[j,D]),Ze=v.useCallback(async()=>{try{if(M){U("medium");const T=await F.stopRecording();if(Q(!1),T){U("success");const V={id:`video_${T.timestamp}.${T.format}`,type:T.format==="gif"?"gif":"video",format:T.format,uri:T.uri,filename:T.uri.split("/").pop()||`video_${T.timestamp}.${T.format}`,sizeBytes:T.sizeBytes,timestamp:T.timestamp,durationMs:T.durationMs,width:T.width,height:T.height,hasAudio:T.hasAudio};N(V),j?.().catch(()=>{}),L(D("header.recordingSaved",{duration:(T.durationMs/1e3).toFixed(1)}))}}else U("medium"),await F.startRecording({fps:24,audioSource:"none"})?(Q(!0),L(D("header.recordingStarted"))):L(D("header.recordingStartFailed"))}catch{L(D("header.recordingError")),Q(!1)}},[M,D]),et=T=>{const V=Math.floor(T/60),ae=T%60;return`${V.toString().padStart(2,"0")}:${ae.toString().padStart(2,"0")}`},J=ne(()=>{const T=(Ce||(__DEV__?"DEV":"PROD")).trim(),V=T.toUpperCase();return V==="DEV"||V.includes("DEV")||V==="LOCAL"?{label:T,bg:`${t.emerald500}40`,border:`${t.emerald400}8C`,text:t.mintGreenBorder}:V==="UAT"||V==="QA"||V==="TEST"?{label:T,bg:`${t.amber500}47`,border:`${t.amber400}99`,text:t.amberWarmBorder}:V==="PREPROD"||V==="STAGE"||V==="STAGING"?{label:T,bg:`${t.purple500}47`,border:`${t.purple400}99`,text:t.violetSoftBorder}:{label:T,bg:`${t.rose500}40`,border:`${t.roseBorder}8C`,text:t.errorBorder}},[Ce]),K=A==="apis"&&R!=null||A==="analytics"&&k!=null||A==="logs"&&H!=null||A==="redux"&&(W!=null||G!=null)||A==="crash"&&$!=null,X=P!==null,Y=K||X||ie,tt=ne(()=>{switch(P){case"apis":return"APIs (Network)";case"logs":return"Console Logs";case"performance":return"Performance Tracker";case"bundle":return"Bundle Analyzer";case"crash":return"Crash Protection";case"analytics":return"Analytics Logger";case"redux":return"Redux Inspector";default:return"Settings & Modules"}},[P]),De=ne(()=>se.OS==="ios"?Z>=98?_>=390?50:44:0:se.OS==="android"&&Z>=98?ot.currentHeight||24:0,[Z,_]),B=e?28:q?30:32,it=e?42:q?46:50;return<>
1
+ import v,{useMemo as le}from"react";import{Alert as Re,Animated as ne,Linking as rt,Platform as se,Pressable as $e,StatusBar as ot,Text as C,TouchableOpacity as Ae,useWindowDimensions as at,View as S}from"react-native";import St from"react-native-linear-gradient";import{useInspector as Tt}from"./InspectorContext";import O from"../TouchableScale";import Ct from"../AppHeaderLogo";import i from"../../styles";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as I}from"../../styles/AppFonts";import{METHOD_COLORS as Vt}from"../../constants";import{LIB_VERSION as de}from"../../constants";import{getStatusColor as ce,getAppName as Dt,formatTime as It,getSize as ve,getAppVersionAndBuild as Rt}from"../../helpers";import{triggerNativeHaptic as U}from"../../native/NativeInspector";import{ScreenCapture as F}from"../../capture";import{showToast as L}from"../../helpers/toast";import{UpdateAvailableModal as $t}from"./UpdateAvailableModal";import{MediaPreviewModal as At}from"./MediaPreviewModal";import{WhiteBackNavigation as Ht,TrashIcon as Mt,SettingsIcon as Bt,CloseWhite as Ot,ChevronDownIcon as Lt,ClockIcon as Se,SizeIcon as Pt,AppleIcon as Et,AndroidIcon as Ft,NpmIcon as Wt,ResetIcon as _t,BoltIcon as Nt,InfoCircleIcon as Ut,CameraIcon as Gt,VideoCameraIcon as Qt}from"../NetworkIcons";import{useTranslation as Jt}from"../../i18n";const Kt=v.memo(()=>{const{t:D}=Jt(),{modalHeightPercent:Z,appIcon:He,selected:R,setSelected:Me,selectedEvent:k,setSelectedEvent:Be,selectedLog:H,setSelectedLog:Oe,selectedReduxSlice:W,setSelectedReduxSlice:Le,selectedReduxAction:G,setSelectedReduxAction:Pe,reduxState:Ee,reduxLastActionMap:Fe,showHeaderInfo:Xt,setShowHeaderInfo:Yt,updateAvailable:ee,latestNpmVersion:We,clearAnim:Te,activePulseAnim:je,unreadPulseAnim:_e,runClearAllWithAnimation:Ne,settingsPage:P,setSettingsPage:te,isAboutOpen:ie,setIsAboutOpen:xe,resetToDefaults:Ue,closeModal:ze,minimizeInspector:Ge,detailTitle:qe,activeTab:A,environment:Ce,visible:Zt,selectedCrash:$,setSelectedCrash:Qe,refreshMediaCount:j}=Tt(),{width:_}=at(),e=_<360,q=_<400,ei=_>=600,[Je,re]=v.useState(!1),[Ke,ti]=v.useState(()=>Rt().formatted),[M,Q]=v.useState(!1),[Xe,oe]=v.useState(0),E=v.useRef(null);v.useEffect(()=>{F.isRecording().then(T=>{Q(T)}).catch(()=>{})},[]),v.useEffect(()=>(M?(oe(0),E.current=setInterval(()=>{oe(T=>T+1)},1e3)):(E.current&&(clearInterval(E.current),E.current=null),oe(0)),()=>{E.current&&clearInterval(E.current)}),[M]);const[Ve,N]=v.useState(null),Ye=v.useCallback(async()=>{try{U("light");const T=await F.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(T){U("success");const V={id:`screenshot_${T.timestamp}.png`,type:"image",format:T.format,uri:T.uri,filename:T.uri.split("/").pop()||`screenshot_${T.timestamp}.png`,sizeBytes:T.sizeBytes,timestamp:T.timestamp,width:T.width,height:T.height};N(V),j?.().catch(()=>{}),L(D("header.screenshotCaptured"))}else L(D("header.screenshotFailed"))}catch{L(D("header.screenshotError"))}},[j,D]),Ze=v.useCallback(async()=>{try{if(M){U("medium");const T=await F.stopRecording();if(Q(!1),T){U("success");const V={id:`video_${T.timestamp}.${T.format}`,type:T.format==="gif"?"gif":"video",format:T.format,uri:T.uri,filename:T.uri.split("/").pop()||`video_${T.timestamp}.${T.format}`,sizeBytes:T.sizeBytes,timestamp:T.timestamp,durationMs:T.durationMs,width:T.width,height:T.height,hasAudio:T.hasAudio};N(V),j?.().catch(()=>{}),L(D("header.recordingSaved",{duration:(T.durationMs/1e3).toFixed(1)}))}}else U("medium"),await F.startRecording({fps:24,audioSource:"none"})?(Q(!0),L(D("header.recordingStarted"))):L(D("header.recordingStartFailed"))}catch{L(D("header.recordingError")),Q(!1)}},[M,D]),et=T=>{const V=Math.floor(T/60),ae=T%60;return`${V.toString().padStart(2,"0")}:${ae.toString().padStart(2,"0")}`},J=le(()=>{const T=(Ce||(__DEV__?"DEV":"PROD")).trim(),V=T.toUpperCase();return V==="DEV"||V.includes("DEV")||V==="LOCAL"?{label:T,bg:`${t.emerald500}40`,border:`${t.emerald400}8C`,text:t.mintGreenBorder}:V==="UAT"||V==="QA"||V==="TEST"?{label:T,bg:`${t.amber500}47`,border:`${t.amber400}99`,text:t.amberWarmBorder}:V==="PREPROD"||V==="STAGE"||V==="STAGING"?{label:T,bg:`${t.purple500}47`,border:`${t.purple400}99`,text:t.violetSoftBorder}:{label:T,bg:`${t.rose500}40`,border:`${t.roseBorder}8C`,text:t.errorBorder}},[Ce]),K=A==="apis"&&R!=null||A==="analytics"&&k!=null||A==="logs"&&H!=null||A==="redux"&&(W!=null||G!=null)||A==="crash"&&$!=null,X=P!==null,Y=K||X||ie,tt=le(()=>{switch(P){case"apis":return"APIs (Network)";case"logs":return"Console Logs";case"crash":return"Crash Protection";case"analytics":return"Analytics Logger";case"redux":return"Redux Inspector";default:return"Settings & Modules"}},[P]),De=le(()=>se.OS==="ios"?Z>=98?_>=390?50:44:0:se.OS==="android"&&Z>=98?ot.currentHeight||24:0,[Z,_]),B=e?28:q?30:32,it=e?42:q?46:50;return<>
2
2
  <S style={[i.headerGradient,{minHeight:(e?58:62)+De}]}>
3
3
 
4
4
  <St colors={[t.indigo600,t.violet600]}start={{x:0,y:0}}end={{x:1,y:1}}style={{position:"absolute",top:0,left:0,right:0,bottom:0,borderTopLeftRadius:20,borderTopRightRadius:20}}pointerEvents="none"/>
@@ -51,7 +51,7 @@ import v,{useMemo as ne}from"react";import{Alert as Re,Animated as le,Linking as
51
51
  </C>
52
52
  </S>
53
53
  {ee&&<$e hitSlop={10}onPress={()=>re(!0)}style={{flexDirection:"row",alignItems:"center",backgroundColor:t.warningAmber,borderRadius:6,paddingHorizontal:e?5:6.5,paddingVertical:2.5,gap:3.5,shadowColor:t.warningAmber,shadowOffset:{width:0,height:1.5},shadowOpacity:.35,shadowRadius:3,elevation:3,flexShrink:0}}>
54
- <le.View style={{width:5,height:5,borderRadius:2.5,backgroundColor:t.white,opacity:je,transform:[{scale:_e}]}}/>
54
+ <ne.View style={{width:5,height:5,borderRadius:2.5,backgroundColor:t.white,opacity:je,transform:[{scale:_e}]}}/>
55
55
  {!e&&<C style={{fontFamily:I.interBold,fontSize:8.5,lineHeight:11,color:t.white,letterSpacing:.3}}>
56
56
  UPDATE
57
57
  </C>}
@@ -276,7 +276,7 @@ import v,{useMemo as ne}from"react";import{Alert as Re,Animated as le,Linking as
276
276
 
277
277
 
278
278
  <O onPress={Ze}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:M?`${t.red500}33`:`${t.white}24`,paddingHorizontal:e?9:11,paddingVertical:e?5:6,borderRadius:7,borderWidth:1,borderColor:M?t.red500:`${t.white}33`}}>
279
- {M?<le.View style={{width:6,height:6,borderRadius:3,backgroundColor:t.red500}}/>:<Qt size={e?12:13}color={t.white}/>}
279
+ {M?<ne.View style={{width:6,height:6,borderRadius:3,backgroundColor:t.red500}}/>:<Qt size={e?12:13}color={t.white}/>}
280
280
  <C style={{fontFamily:I.interSemiBold,fontSize:e?10.5:11.5,lineHeight:e?13:14,color:M?t.red300:t.white}}>
281
281
  {M?`${D("header.rec")} ${et(Xe)}`:D("header.record")}
282
282
  </C>
@@ -286,9 +286,9 @@ import v,{useMemo as ne}from"react";import{Alert as Re,Animated as le,Linking as
286
286
  <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
287
287
 
288
288
  <O accessible={!0}accessibilityRole="button"accessibilityLabel={D("common.clearAll")}onPress={()=>{Re.alert(D("header.clearEverythingTitle"),D("header.clearEverythingMessage"),[{text:D("common.cancel"),style:"cancel"},{text:D("common.clearAll"),onPress:Ne,style:"destructive"}])}}hitSlop={10}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${t.white}24`,paddingHorizontal:e?9:11,paddingVertical:e?5:6,borderRadius:7,borderWidth:1,borderColor:`${t.white}33`}}>
289
- <le.View style={{transform:[{rotate:Te.interpolate({inputRange:[0,1],outputRange:["0deg","-25deg"]})},{scale:Te.interpolate({inputRange:[0,.5,1],outputRange:[1,1.25,1]})}]}}>
289
+ <ne.View style={{transform:[{rotate:Te.interpolate({inputRange:[0,1],outputRange:["0deg","-25deg"]})},{scale:Te.interpolate({inputRange:[0,.5,1],outputRange:[1,1.25,1]})}]}}>
290
290
  <Mt color={t.white}size={e?12:13}/>
291
- </le.View>
291
+ </ne.View>
292
292
  <C style={{fontFamily:I.interSemiBold,fontSize:e?10.5:11.5,lineHeight:e?13:14,color:t.white}}>
293
293
  {D("common.clearAll")}
294
294
  </C>