react-native-inapp-inspector 2.3.25 → 2.4.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.
Files changed (123) hide show
  1. package/README.md +26 -5
  2. package/dist/commonjs/components/AnalyticsDetail.js +9 -6
  3. package/dist/commonjs/components/AppHeaderLogo.js +4 -6
  4. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1 -1
  5. package/dist/commonjs/components/Inspector/AnalyticsTab.js +11 -15
  6. package/dist/commonjs/components/Inspector/ConsoleTab.js +11 -14
  7. package/dist/commonjs/components/Inspector/CrashDetail.js +7 -6
  8. package/dist/commonjs/components/Inspector/CrashTab.js +14 -14
  9. package/dist/commonjs/components/Inspector/DebuggingTab.js +6 -6
  10. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +77 -43
  11. package/dist/commonjs/components/Inspector/FabLauncher.js +8 -9
  12. package/dist/commonjs/components/Inspector/InspectorHeader.js +93 -70
  13. package/dist/commonjs/components/Inspector/LogDetail.js +10 -7
  14. package/dist/commonjs/components/Inspector/MainScreen.js +67 -29
  15. package/dist/commonjs/components/Inspector/NetworkDetail.js +29 -28
  16. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +1 -1
  17. package/dist/commonjs/components/Inspector/NetworkTab.js +87 -85
  18. package/dist/commonjs/components/Inspector/PushCard.d.ts +4 -0
  19. package/dist/commonjs/components/Inspector/PushCard.js +89 -0
  20. package/dist/commonjs/components/Inspector/PushDetail.d.ts +4 -0
  21. package/dist/commonjs/components/Inspector/PushDetail.js +190 -0
  22. package/dist/commonjs/components/Inspector/PushTab.d.ts +3 -0
  23. package/dist/commonjs/components/Inspector/PushTab.js +45 -0
  24. package/dist/commonjs/components/Inspector/ReduxDetail.js +16 -13
  25. package/dist/commonjs/components/Inspector/ReduxTab.js +13 -23
  26. package/dist/commonjs/components/Inspector/SettingsPanel.js +253 -105
  27. package/dist/commonjs/components/Inspector/StorageTab.js +35 -35
  28. package/dist/commonjs/components/Inspector/TabBar.js +9 -8
  29. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +2 -2
  30. package/dist/commonjs/components/JsonViewer.js +77 -90
  31. package/dist/commonjs/components/ModuleErrorBoundary.d.ts +24 -0
  32. package/dist/commonjs/components/ModuleErrorBoundary.js +33 -0
  33. package/dist/commonjs/components/NetworkIcons.d.ts +3 -3
  34. package/dist/commonjs/components/NetworkIcons.js +10 -6
  35. package/dist/commonjs/components/SegmentedTabs.d.ts +4 -1
  36. package/dist/commonjs/components/SegmentedTabs.js +12 -8
  37. package/dist/commonjs/components/ShareButton.d.ts +11 -0
  38. package/dist/commonjs/components/ShareButton.js +6 -0
  39. package/dist/commonjs/constants/version.d.ts +1 -1
  40. package/dist/commonjs/constants/version.js +1 -1
  41. package/dist/commonjs/customHooks/crashHandler.js +4 -4
  42. package/dist/commonjs/customHooks/networkLogger.js +1 -1
  43. package/dist/commonjs/customHooks/pushNotificationLogger.d.ts +19 -0
  44. package/dist/commonjs/customHooks/pushNotificationLogger.js +1 -0
  45. package/dist/commonjs/helpers/memoryManager.d.ts +2 -1
  46. package/dist/commonjs/helpers/memoryManager.js +1 -1
  47. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  48. package/dist/commonjs/helpers/settingsStore.js +1 -1
  49. package/dist/commonjs/helpers/shareFormatter.d.ts +13 -0
  50. package/dist/commonjs/helpers/shareFormatter.js +7 -0
  51. package/dist/commonjs/i18n/locales/en.json +1 -1
  52. package/dist/commonjs/index.d.ts +5 -2
  53. package/dist/commonjs/index.js +4 -4
  54. package/dist/commonjs/push.d.ts +4 -0
  55. package/dist/commonjs/push.js +1 -0
  56. package/dist/commonjs/types/enums.d.ts +30 -0
  57. package/dist/commonjs/types/enums.js +1 -1
  58. package/dist/commonjs/types/index.d.ts +10 -0
  59. package/dist/commonjs/types/interfaces.d.ts +63 -7
  60. package/dist/esm/components/AnalyticsDetail.js +28 -25
  61. package/dist/esm/components/AppHeaderLogo.js +5 -7
  62. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +14 -14
  63. package/dist/esm/components/Inspector/AnalyticsTab.js +35 -39
  64. package/dist/esm/components/Inspector/ConsoleTab.js +50 -53
  65. package/dist/esm/components/Inspector/CrashDetail.js +11 -10
  66. package/dist/esm/components/Inspector/CrashTab.js +14 -14
  67. package/dist/esm/components/Inspector/DebuggingTab.js +10 -10
  68. package/dist/esm/components/Inspector/DeviceInfoTab.js +208 -174
  69. package/dist/esm/components/Inspector/FabLauncher.js +41 -42
  70. package/dist/esm/components/Inspector/InspectorHeader.js +138 -115
  71. package/dist/esm/components/Inspector/LogDetail.js +24 -21
  72. package/dist/esm/components/Inspector/MainScreen.js +100 -62
  73. package/dist/esm/components/Inspector/NetworkDetail.js +88 -87
  74. package/dist/esm/components/Inspector/NetworkFilterModal.js +8 -8
  75. package/dist/esm/components/Inspector/NetworkTab.js +136 -134
  76. package/dist/esm/components/Inspector/PushCard.d.ts +4 -0
  77. package/dist/esm/components/Inspector/PushCard.js +89 -0
  78. package/dist/esm/components/Inspector/PushDetail.d.ts +4 -0
  79. package/dist/esm/components/Inspector/PushDetail.js +190 -0
  80. package/dist/esm/components/Inspector/PushTab.d.ts +3 -0
  81. package/dist/esm/components/Inspector/PushTab.js +45 -0
  82. package/dist/esm/components/Inspector/ReduxDetail.js +40 -37
  83. package/dist/esm/components/Inspector/ReduxTab.js +103 -113
  84. package/dist/esm/components/Inspector/SettingsPanel.js +406 -258
  85. package/dist/esm/components/Inspector/StorageTab.js +158 -158
  86. package/dist/esm/components/Inspector/TabBar.js +28 -27
  87. package/dist/esm/components/Inspector/UpdateAvailableModal.js +1 -1
  88. package/dist/esm/components/JsonViewer.js +101 -114
  89. package/dist/esm/components/ModuleErrorBoundary.d.ts +24 -0
  90. package/dist/esm/components/ModuleErrorBoundary.js +33 -0
  91. package/dist/esm/components/NetworkIcons.d.ts +3 -3
  92. package/dist/esm/components/NetworkIcons.js +7 -3
  93. package/dist/esm/components/SegmentedTabs.d.ts +4 -1
  94. package/dist/esm/components/SegmentedTabs.js +12 -8
  95. package/dist/esm/components/ShareButton.d.ts +11 -0
  96. package/dist/esm/components/ShareButton.js +6 -0
  97. package/dist/esm/constants/version.d.ts +1 -1
  98. package/dist/esm/constants/version.js +1 -1
  99. package/dist/esm/customHooks/crashHandler.js +6 -6
  100. package/dist/esm/customHooks/networkLogger.js +1 -1
  101. package/dist/esm/customHooks/pushNotificationLogger.d.ts +19 -0
  102. package/dist/esm/customHooks/pushNotificationLogger.js +1 -0
  103. package/dist/esm/helpers/memoryManager.d.ts +2 -1
  104. package/dist/esm/helpers/memoryManager.js +1 -1
  105. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  106. package/dist/esm/helpers/settingsStore.js +1 -1
  107. package/dist/esm/helpers/shareFormatter.d.ts +13 -0
  108. package/dist/esm/helpers/shareFormatter.js +7 -0
  109. package/dist/esm/i18n/locales/en.json +1 -1
  110. package/dist/esm/index.d.ts +5 -2
  111. package/dist/esm/index.js +7 -7
  112. package/dist/esm/push.d.ts +4 -0
  113. package/dist/esm/push.js +1 -0
  114. package/dist/esm/types/enums.d.ts +30 -0
  115. package/dist/esm/types/enums.js +1 -1
  116. package/dist/esm/types/index.d.ts +10 -0
  117. package/dist/esm/types/interfaces.d.ts +63 -7
  118. package/package.json +53 -10
  119. package/src/native/NativeInspector.ts +0 -1
  120. package/dist/commonjs/components/BrandSquareIcon.d.ts +0 -5
  121. package/dist/commonjs/components/BrandSquareIcon.js +0 -112
  122. package/dist/esm/components/BrandSquareIcon.d.ts +0 -5
  123. package/dist/esm/components/BrandSquareIcon.js +0 -112
@@ -1,6 +1,6 @@
1
1
  "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,o,n,r){r===void 0&&(r=n);var l=Object.getOwnPropertyDescriptor(o,n);(!l||("get"in l?!o.__esModule:l.writable||l.configurable))&&(l={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,r,l)}):(function(e,o,n,r){r===void 0&&(r=n),e[r]=o[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}):function(e,o){e.default=o}),__importStar=this&&this.__importStar||(function(){var e=function(o){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(r[r.length]=l);return r},e(o)};return function(o){if(o&&o.__esModule)return o;var n={};if(o!=null)for(var r=e(o),l=0;l<r.length;l++)r[l]!=="default"&&__createBinding(n,o,r[l]);return __setModuleDefault(n,o),n}})(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DebuggingTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),QRCodeView_1=__importDefault(require("../QRCodeView")),TouchableScale_1=__importDefault(require("../TouchableScale")),toast_1=require("../../helpers/toast"),NativeInspector_1=require("../../native/NativeInspector"),NetworkIcons_1=require("../NetworkIcons"),react_native_svg_1=__importStar(require("react-native-svg")),TerminalConsoleIcon=({color:e=AppColors_1.AppColors.purple,size:o=13})=><react_native_svg_1.default width={o}height={o}viewBox="0 0 24 24"fill="none">
2
2
  <react_native_svg_1.Path d="M4 17l6-6-6-6M12 19h8"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
3
- </react_native_svg_1.default>,DebuggingTab=()=>{const e=(0,react_1.useMemo)(()=>{const a=react_native_1.NativeModules.SourceCode?.scriptURL||"";let s="localhost",t=8081;try{if(a.includes("://")){const d=a.split("://")[1].split("/")[0];if(d.includes(":")){const u=d.split(":");s=u[0];const y=parseInt(u[1],10);isNaN(y)||(t=y)}else s=d}}catch{}return{host:s,port:t,scriptURL:a}},[]),[o,n]=(0,react_1.useState)(()=>e.host&&e.host!=="localhost"&&e.host!=="127.0.0.1"&&e.host!=="10.0.2.2"?e.host:"192.168.1.2"),[r,l]=(0,react_1.useState)(e.port||8083),[V,m]=(0,react_1.useState)("app-debug.apk"),[T,x]=(0,react_1.useState)(null),[g,v]=(0,react_1.useState)("assembleRelease"),[f,k]=(0,react_1.useState)(!0),[i,w]=(0,react_1.useState)({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),p=(0,react_1.useRef)(null),_=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,[A,I]=(0,react_1.useState)(!0),S=(0,react_1.useRef)(null);(0,react_1.useEffect)(()=>{react_native_1.Animated.timing(_,{toValue:Math.max(0,Math.min(100,i.progress)),duration:350,useNativeDriver:!1}).start()},[i.progress,_]),(0,react_1.useEffect)(()=>{i.logs&&i.logs.length>0&&setTimeout(()=>{S.current?.scrollToEnd({animated:!0})},50)},[i.logs]);const C=(0,react_1.useCallback)(async()=>{const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([e.port,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1200),y=await fetch(`http://${t}:${h}/__inapp_inspector/apk-info`,{signal:d.signal});if(clearTimeout(u),y.ok){const c=await y.json();c.hostIp&&c.hostIp!=="127.0.0.1"&&c.hostIp!=="localhost"&&c.hostIp!=="10.0.2.2"&&n(c.hostIp),c.port&&l(c.port),c.apkName&&m(c.apkName),c.apkSize&&x((c.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[e.host,e.port]);(0,react_1.useEffect)(()=>{C()},[C]),(0,react_1.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);const R=(0,react_1.useCallback)(()=>{p.current&&clearInterval(p.current);const a=e.host||"10.0.2.2";p.current=setInterval(async()=>{try{const s=await fetch(`http://${a}:${r}/__inapp_inspector/build-status`);if(s.ok){const t=await s.json();w(t),t.status==="completed"?(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("success"),(0,toast_1.showToast)("\u2713 APK Build Generated Successfully!"),t.apkSize&&x((t.apkSize/(1024*1024)).toFixed(1)),t.apkName&&m(t.apkName),C()):t.status==="failed"&&(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("error"),(0,toast_1.showToast)("\u2715 Build Failed: "+(t.error||"Gradle error")))}}catch{}},1e3)},[e.host,r,C]),F=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),w({status:"running",scheme:g,clean:f,progress:5,currentTask:f?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));let t=!1;for(const h of a)for(const d of s)try{const u=new AbortController,y=setTimeout(()=>u.abort(),2e3),c=await fetch(`http://${h}:${d}/__inapp_inspector/build-apk?scheme=${g}&clean=${f}`,{signal:u.signal});if(clearTimeout(y),c.ok){t=!0,R();return}}catch{}t||w(h=>({...h,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},D=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("warning"),p.current&&clearInterval(p.current);const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1500);await fetch(`http://${t}:${h}/__inapp_inspector/stop-build`,{signal:d.signal}),clearTimeout(u)}catch{}w(t=>({...t,status:"idle",currentTask:"Build cancelled by user",logs:[...t.logs||[],"\u{1F6D1} Build cancelled by user."]})),(0,toast_1.showToast)("Build cancelled")},B=`http://${o}:${r}/${V.replace(/^\/+/,"")}`,z=()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),react_native_1.Share.share({message:B,title:"Install Android APK"})},b=i.status==="running";return<react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
3
+ </react_native_svg_1.default>,DebuggingTab=()=>{const e=(0,react_1.useMemo)(()=>{const a=react_native_1.NativeModules.SourceCode?.scriptURL||"";let s="localhost",t=8081;try{if(a.includes("://")){const d=a.split("://")[1].split("/")[0];if(d.includes(":")){const u=d.split(":");s=u[0];const y=parseInt(u[1],10);isNaN(y)||(t=y)}else s=d}}catch{}return{host:s,port:t,scriptURL:a}},[]),[o,n]=(0,react_1.useState)(()=>e.host&&e.host!=="localhost"&&e.host!=="127.0.0.1"&&e.host!=="10.0.2.2"?e.host:"192.168.1.2"),[r,l]=(0,react_1.useState)(e.port||8083),[B,m]=(0,react_1.useState)("app-debug.apk"),[T,x]=(0,react_1.useState)(null),[g,v]=(0,react_1.useState)("assembleRelease"),[f,V]=(0,react_1.useState)(!0),[i,w]=(0,react_1.useState)({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),p=(0,react_1.useRef)(null),_=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,[A,k]=(0,react_1.useState)(!0),S=(0,react_1.useRef)(null);(0,react_1.useEffect)(()=>{react_native_1.Animated.timing(_,{toValue:Math.max(0,Math.min(100,i.progress)),duration:350,useNativeDriver:!1}).start()},[i.progress,_]),(0,react_1.useEffect)(()=>{i.logs&&i.logs.length>0&&setTimeout(()=>{S.current?.scrollToEnd({animated:!0})},50)},[i.logs]);const C=(0,react_1.useCallback)(async()=>{const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([e.port,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1200),y=await fetch(`http://${t}:${h}/__inapp_inspector/apk-info`,{signal:d.signal});if(clearTimeout(u),y.ok){const c=await y.json();c.hostIp&&c.hostIp!=="127.0.0.1"&&c.hostIp!=="localhost"&&c.hostIp!=="10.0.2.2"&&n(c.hostIp),c.port&&l(c.port),c.apkName&&m(c.apkName),c.apkSize&&x((c.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[e.host,e.port]);(0,react_1.useEffect)(()=>{C()},[C]),(0,react_1.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);const I=(0,react_1.useCallback)(()=>{p.current&&clearInterval(p.current);const a=e.host||"10.0.2.2";p.current=setInterval(async()=>{try{const s=await fetch(`http://${a}:${r}/__inapp_inspector/build-status`);if(s.ok){const t=await s.json();w(t),t.status==="completed"?(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("success"),(0,toast_1.showToast)("\u2713 APK Build Generated Successfully!"),t.apkSize&&x((t.apkSize/(1024*1024)).toFixed(1)),t.apkName&&m(t.apkName),C()):t.status==="failed"&&(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("error"),(0,toast_1.showToast)("\u2715 Build Failed: "+(t.error||"Gradle error")))}}catch{}},1e3)},[e.host,r,C]),R=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),w({status:"running",scheme:g,clean:f,progress:5,currentTask:f?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));let t=!1;for(const h of a)for(const d of s)try{const u=new AbortController,y=setTimeout(()=>u.abort(),2e3),c=await fetch(`http://${h}:${d}/__inapp_inspector/build-apk?scheme=${g}&clean=${f}`,{signal:u.signal});if(clearTimeout(y),c.ok){t=!0,I();return}}catch{}t||w(h=>({...h,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},F=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("warning"),p.current&&clearInterval(p.current);const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1500);await fetch(`http://${t}:${h}/__inapp_inspector/stop-build`,{signal:d.signal}),clearTimeout(u)}catch{}w(t=>({...t,status:"idle",currentTask:"Build cancelled by user",logs:[...t.logs||[],"\u{1F6D1} Build cancelled by user."]})),(0,toast_1.showToast)("Build cancelled")},D=`http://${o}:${r}/${B.replace(/^\/+/,"")}`,b=i.status==="running";return<react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
4
4
 
5
5
  <react_native_1.View style={styles.heroCard}>
6
6
  <react_native_1.View style={styles.heroHeader}>
@@ -64,7 +64,7 @@
64
64
 
65
65
  <react_native_1.View style={styles.qrCenteredWrapper}>
66
66
  <react_native_1.View style={styles.qrInnerFrame}>
67
- <QRCodeView_1.default value={B}size={235}color={AppColors_1.AppColors.primaryBlack}backgroundColor={AppColors_1.AppColors.white}/>
67
+ <QRCodeView_1.default value={D}size={235}color={AppColors_1.AppColors.primaryBlack}backgroundColor={AppColors_1.AppColors.white}/>
68
68
  </react_native_1.View>
69
69
  </react_native_1.View>
70
70
  </react_native_1.View>
@@ -104,7 +104,7 @@
104
104
  </react_native_1.View>
105
105
 
106
106
 
107
- <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),k(!f)}}style={styles.cleanRow}>
107
+ <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),V(!f)}}style={styles.cleanRow}>
108
108
  <react_native_1.View style={[styles.checkboxBox,f&&styles.checkboxBoxActive]}>
109
109
  {f&&<NetworkIcons_1.CheckIcon size={11}color={AppColors_1.AppColors.white}/>}
110
110
  </react_native_1.View>
@@ -148,7 +148,7 @@
148
148
  <TerminalConsoleIcon color={AppColors_1.AppColors.sky400}size={12}/>
149
149
  <react_native_1.Text style={styles.consoleHeaderTitle}>GRADLE VERBOSE OUTPUT</react_native_1.Text>
150
150
  </react_native_1.View>
151
- <react_native_1.TouchableOpacity activeOpacity={.7}onPress={()=>I(!A)}style={styles.consoleToggleBtn}>
151
+ <react_native_1.TouchableOpacity activeOpacity={.7}onPress={()=>k(!A)}style={styles.consoleToggleBtn}>
152
152
  <react_native_1.Text style={styles.consoleToggleText}>
153
153
  {A?"Hide Console":"Show Console"}
154
154
  </react_native_1.Text>
@@ -173,11 +173,11 @@
173
173
  </react_native_1.Text>
174
174
  </react_native_1.View>
175
175
 
176
- <TouchableScale_1.default onPress={D}style={styles.stopBtn}>
176
+ <TouchableScale_1.default onPress={F}style={styles.stopBtn}>
177
177
  <NetworkIcons_1.CircleXIcon size={13}color={AppColors_1.AppColors.white}/>
178
178
  <react_native_1.Text style={styles.stopBtnText}>Stop Build</react_native_1.Text>
179
179
  </TouchableScale_1.default>
180
- </react_native_1.View>:<TouchableScale_1.default onPress={F}style={styles.generateBtn}>
180
+ </react_native_1.View>:<TouchableScale_1.default onPress={R}style={styles.generateBtn}>
181
181
  <react_native_1.View style={styles.ctaContentRow}>
182
182
  <NetworkIcons_1.SparkleIcon size={14}color={AppColors_1.AppColors.white}/>
183
183
  <react_native_1.Text style={styles.generateBtnText}>
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,a,m,o){o===void 0&&(o=m);var s=Object.getOwnPropertyDescriptor(a,m);(!s||("get"in s?!a.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return a[m]}}),Object.defineProperty(i,o,s)}):(function(i,a,m,o){o===void 0&&(o=m),i[o]=a[m]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,a){Object.defineProperty(i,"default",{enumerable:!0,value:a})}):function(i,a){i.default=a}),__importStar=this&&this.__importStar||(function(){var i=function(a){return i=Object.getOwnPropertyNames||function(m){var o=[];for(var s in m)Object.prototype.hasOwnProperty.call(m,s)&&(o[o.length]=s);return o},i(a)};return function(a){if(a&&a.__esModule)return a;var m={};if(a!=null)for(var o=i(a),s=0;s<o.length;s++)o[s]!=="default"&&__createBinding(m,a,o[s]);return __setModuleDefault(m,a),m}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DeviceInfoTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),NetworkIcons_1=require("../NetworkIcons"),NativeInspector_1=require("../../native/NativeInspector"),helpers_1=require("../../helpers"),toast_1=require("../../helpers/toast"),constants_1=require("../../constants"),InfoRow=react_1.default.memo(({label:i,value:a,copyable:m=!0,badge:o,subtext:s,isLast:U=!1})=>{const P=a==null?"\u2014":typeof a=="boolean"?a?"Yes":"No":String(a);return<react_native_1.View style={[styles.infoRow,U&&{borderBottomWidth:0}]}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,a,g,o){o===void 0&&(o=g);var s=Object.getOwnPropertyDescriptor(a,g);(!s||("get"in s?!a.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return a[g]}}),Object.defineProperty(i,o,s)}):(function(i,a,g,o){o===void 0&&(o=g),i[o]=a[g]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,a){Object.defineProperty(i,"default",{enumerable:!0,value:a})}):function(i,a){i.default=a}),__importStar=this&&this.__importStar||(function(){var i=function(a){return i=Object.getOwnPropertyNames||function(g){var o=[];for(var s in g)Object.prototype.hasOwnProperty.call(g,s)&&(o[o.length]=s);return o},i(a)};return function(a){if(a&&a.__esModule)return a;var g={};if(a!=null)for(var o=i(a),s=0;s<o.length;s++)o[s]!=="default"&&__createBinding(g,a,o[s]);return __setModuleDefault(g,a),g}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DeviceInfoTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),NetworkIcons_1=require("../NetworkIcons"),NativeInspector_1=require("../../native/NativeInspector"),helpers_1=require("../../helpers"),toast_1=require("../../helpers/toast"),constants_1=require("../../constants"),InfoRow=react_1.default.memo(({label:i,value:a,copyable:g=!0,badge:o,subtext:s,isLast:l=!1})=>{const P=a==null?"\u2014":typeof a=="boolean"?a?"Yes":"No":typeof a=="number"?a.toLocaleString():String(a);return<react_native_1.View style={[styles.infoRow,l&&{borderBottomWidth:0}]}>
2
2
  <react_native_1.View style={{flex:1,paddingRight:8,minWidth:0}}>
3
3
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:6}}>
4
4
  <react_native_1.Text style={styles.infoLabel}numberOfLines={2}>{i}</react_native_1.Text>
@@ -14,11 +14,11 @@
14
14
  <react_native_1.Text style={[styles.infoValue,typeof a=="boolean"&&{color:a?AppColors_1.AppColors.emerald500:AppColors_1.AppColors.errorColor}]}numberOfLines={3}selectable>
15
15
  {P}
16
16
  </react_native_1.Text>
17
- {m&&a!==null&&a!==void 0&&<TouchableScale_1.default hitSlop={8}onPress={()=>{(0,helpers_1.copyToClipboard)(P,i),(0,toast_1.showToast)(`Copied ${i}`)}}style={styles.rowCopyBtn}>
17
+ {g&&a!==null&&a!==void 0&&<TouchableScale_1.default hitSlop={8}onPress={()=>{(0,helpers_1.copyToClipboard)(P,i),(0,toast_1.showToast)(`Copied ${i}`)}}style={styles.rowCopyBtn}>
18
18
  <NetworkIcons_1.CopyIcon size={11}color={AppColors_1.AppColors.grayTextWeak}/>
19
19
  </TouchableScale_1.default>}
20
20
  </react_native_1.View>
21
- </react_native_1.View>});exports.DeviceInfoTab=react_1.default.memo(()=>{const{t:i}=(0,i18n_1.useTranslation)(),[a,m]=(0,react_1.useState)("overview"),[o,s]=(0,react_1.useState)(""),[U,P]=(0,react_1.useState)(!0),[l,J]=(0,react_1.useState)(null),[G,j]=(0,react_1.useState)(null),[f,R]=(0,react_1.useState)("Detecting..."),[S,E]=(0,react_1.useState)("0s"),q=react_1.default.useRef(Date.now()),k=(0,react_1.useCallback)(async()=>{try{const[r,c]=await Promise.all([(0,NativeInspector_1.getNativeDeviceMetrics)(),(0,NativeInspector_1.getNativeSystemMetrics)()]);J(r),j(c)}catch{}finally{P(!1)}},[]);(0,react_1.useEffect)(()=>{k();const r=setInterval(k,3e3);return()=>clearInterval(r)},[k]),(0,react_1.useEffect)(()=>{let r=!0;return(async()=>{try{const n=react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||react_native_1.NativeModules?.DevSettings?.serverHost;if(n&&typeof n=="string"){const d=n.split(":")[0].replace(/https?:\/\//,"");if(d&&d!=="localhost"&&d!=="127.0.0.1"){r&&R(d);return}}}catch{}try{const n=new AbortController,d=setTimeout(()=>n.abort(),1200),M=await fetch("https://api.ipify.org?format=json",{signal:n.signal});if(clearTimeout(d),M.ok){const x=await M.json();if(x&&x.ip&&r){R(x.ip);return}}}catch{}r&&R(react_native_1.Platform.OS==="android"?"10.0.2.15 (Local)":"127.0.0.1 (Local)")})(),()=>{r=!1}},[]),(0,react_1.useEffect)(()=>{const r=()=>{const n=Math.floor((Date.now()-q.current)/1e3),d=Math.floor(n/3600),M=Math.floor(n%3600/60),x=n%60;d>0?E(`${d}h ${M}m ${x}s`):M>0?E(`${M}m ${x}s`):E(`${x}s`)},c=setInterval(r,1e3);return r(),()=>clearInterval(c)},[]);const b=react_native_1.Dimensions.get("window"),h=react_native_1.Dimensions.get("screen"),p=react_native_1.PixelRatio.get(),I=react_native_1.PixelRatio.getFontScale(),w=b.width>=600||b.height>=1e3,$=b.width>b.height,B=react_native_1.Platform.OS==="android"?react_native_1.StatusBar.currentHeight||24:b.height>=812?44:20,y=(0,react_1.useMemo)(()=>{const r=`${react_native_1.Platform.OS}-${react_native_1.Platform.Version}-${h.width}x${h.height}-${p}-${react_native_1.Platform.constants?.Brand||"generic"}`;let c=0;for(let d=0;d<r.length;d++)c=(c<<5)-c+r.charCodeAt(d),c|=0;const n=Math.abs(c).toString(16).padStart(8,"0");return`UDID-${react_native_1.Platform.OS.toUpperCase()}-${n.slice(0,4)}-${n.slice(4,8)}-${Date.now().toString(16).slice(-4)}`.toUpperCase()},[h.width,h.height,p]),g=!!global?.HermesInternal,_=!!globalThis?.__turboModuleProxy,V=(0,react_1.useMemo)(()=>{const r=react_native_1.Platform.constants?.reactNativeVersion;return r?`${r.major}.${r.minor}.${r.patch}${r.prerelease!=null?`-${r.prerelease}`:""}`:"0.74+"},[]),u=l?.totalRAM?Math.round(l.totalRAM/(1024*1024)):G?.totalPhysicalRamMb||4096,C=l?.freeRAM?Math.round(l.freeRAM/(1024*1024)):Math.max(0,u-(G?.residentRamMb||1200)),T=Math.max(0,u-C),D=u>0?Math.round(T/u*100):45,A=l?.totalStorage?(l.totalStorage/(1024*1024*1024)).toFixed(1):"128.0",v=l?.freeStorage?(l.freeStorage/(1024*1024*1024)).toFixed(1):"64.2",Y=(0,react_1.useMemo)(()=>[{key:"overview",label:i("device.subTabs.overview","Overview"),themeColor:AppColors_1.AppColors.sky600,icon:r=><NetworkIcons_1.LayersIcon size={12}color={r}/>},{key:"hardware",label:i("device.subTabs.hardware","Hardware"),themeColor:AppColors_1.AppColors.orange600,icon:r=><NetworkIcons_1.CpuIcon size={12}color={r}/>},{key:"network",label:i("device.subTabs.network","Network & IP"),themeColor:AppColors_1.AppColors.teal600,icon:r=><NetworkIcons_1.WifiIcon size={12}color={r}/>},{key:"display",label:i("device.subTabs.display","Display"),themeColor:AppColors_1.AppColors.pink600,icon:r=><NetworkIcons_1.ScreenIcon size={12}color={r}/>},{key:"runtime",label:i("device.subTabs.runtime","Runtime & App"),themeColor:AppColors_1.AppColors.amber600,icon:r=><NetworkIcons_1.BoltIcon size={12}color={r}/>},{key:"security",label:i("device.subTabs.security","Security & IDs"),themeColor:AppColors_1.AppColors.errorColor,icon:r=><NetworkIcons_1.KeyIcon size={12}color={r}/>}],[i]),t=(0,react_1.useMemo)(()=>({identifiers:{pseudoUDID:y,bundleId:l?.appBundleId||l?.appPackageName||"com.app.inspector"},hardware:{model:l?.deviceModel||react_native_1.Platform.constants?.Model||"Unknown Device",brand:l?.deviceBrand||react_native_1.Platform.constants?.Brand||(react_native_1.Platform.OS==="ios"?"Apple":"Android"),osVersion:`${react_native_1.Platform.OS} ${react_native_1.Platform.Version}`,apiLevel:l?.apiLevel||react_native_1.Platform.constants?.Version||null,cpuAbi:l?.cpuAbi||react_native_1.Platform.constants?.ServerHost||"arm64-v8a",totalRamMb:u,freeRamMb:C,usedRamMb:T,totalStorageGb:`${A} GB`,freeStorageGb:`${v} GB`,batteryPercent:l?.batteryPercent??100,isCharging:l?.isCharging??!1},network:{ipAddress:f,isWifi:!0,reachability:"Online"},display:{windowWidth:b.width,windowHeight:b.height,screenWidth:h.width,screenHeight:h.height,pixelRatio:p,fontScale:I,statusBarHeight:B,isTablet:w,orientation:$?"Landscape":"Portrait"},runtime:{appName:(0,helpers_1.getAppName)(),appVersion:l?.appVersion||"1.0.0",appBuild:l?.appBuild||"1",reactNativeVersion:V,inspectorVersion:constants_1.LIB_VERSION,isHermes:g,isTurboModule:_,isDev:__DEV__,jsEngine:g?"Hermes":"JSC",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:Intl.DateTimeFormat().resolvedOptions().locale,sessionUptime:S}}),[y,l,u,C,T,A,v,f,b,h,p,I,B,w,$,V,g,_,S]),K=()=>{(0,helpers_1.copyToClipboard)(JSON.stringify(t,null,2),"Device Full Report"),(0,toast_1.showToast)(i("device.copiedJson","Copied Full Device JSON Report!"))},X=()=>{const r=`# Device Information Report
21
+ </react_native_1.View>});exports.DeviceInfoTab=react_1.default.memo(()=>{const{t:i}=(0,i18n_1.useTranslation)(),[a,g]=(0,react_1.useState)("overview"),[o,s]=(0,react_1.useState)(""),[l,P]=(0,react_1.useState)(null),[J,j]=(0,react_1.useState)(null),[y,R]=(0,react_1.useState)("Detecting..."),[_,E]=(0,react_1.useState)("0s"),q=react_1.default.useRef(Date.now()),k=(0,react_1.useCallback)(async()=>{try{const[r,d]=await Promise.all([(0,NativeInspector_1.getNativeDeviceMetrics)(),(0,NativeInspector_1.getNativeSystemMetrics)()]);P(r),j(d)}catch{}},[]);(0,react_1.useEffect)(()=>{k();const r=setInterval(k,3e3);return()=>clearInterval(r)},[k]),(0,react_1.useEffect)(()=>{let r=!0;return(async()=>{try{const n=react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||react_native_1.NativeModules?.DevSettings?.serverHost;if(n&&typeof n=="string"){const c=n.split(":")[0].replace(/https?:\/\//,"");if(c&&c!=="localhost"&&c!=="127.0.0.1"){r&&R(c);return}}}catch{}try{const n=new AbortController,c=setTimeout(()=>n.abort(),1200),S=await fetch("https://api.ipify.org?format=json",{signal:n.signal});if(clearTimeout(c),S.ok){const w=await S.json();if(w&&w.ip&&r){R(w.ip);return}}}catch{}r&&R(react_native_1.Platform.OS==="android"?"10.0.2.15 (Local)":"127.0.0.1 (Local)")})(),()=>{r=!1}},[]),(0,react_1.useEffect)(()=>{const r=()=>{const n=Math.floor((Date.now()-q.current)/1e3),c=Math.floor(n/3600),S=Math.floor(n%3600/60),w=n%60;c>0?E(`${c}h ${S}m ${w}s`):S>0?E(`${S}m ${w}s`):E(`${w}s`)},d=setInterval(r,1e3);return r(),()=>clearInterval(d)},[]);const f=react_native_1.Dimensions.get("window"),h=react_native_1.Dimensions.get("screen"),p=react_native_1.PixelRatio.get(),M=react_native_1.PixelRatio.getFontScale(),T=f.width>=600||f.height>=1e3,$=f.width>f.height,B=react_native_1.Platform.OS==="android"?react_native_1.StatusBar.currentHeight||24:f.height>=812?44:20,b=(0,react_1.useMemo)(()=>{const r=`${react_native_1.Platform.OS}-${react_native_1.Platform.Version}-${h.width}x${h.height}-${p}-${react_native_1.Platform.constants?.Brand||"generic"}-${react_native_1.Platform.constants?.Model||"device"}`;let d=3735928559,n=1103547991,c=305419896,S=2271560481;for(let G=0;G<r.length;G++){const L=r.charCodeAt(G);d=Math.imul(d^L,2654435761)>>>0,n=Math.imul(n^L,1597334677)>>>0,c=Math.imul(c^L,374761393)>>>0,S=Math.imul(S^L,668265263)>>>0}const w=d.toString(16).padStart(8,"0").toUpperCase(),Q=(n&65535).toString(16).padStart(4,"0").toUpperCase(),ee=(n>>>16&4095|16384).toString(16).padStart(4,"0").toUpperCase(),te=(c>>>16&16383|32768).toString(16).padStart(4,"0").toUpperCase(),oe=(c.toString(16).padStart(8,"0")+(S&65535).toString(16).padStart(4,"0")).slice(0,12).toUpperCase();return`${w}-${Q}-${ee}-${te}-${oe}`},[h.width,h.height,p]),m=!!global?.HermesInternal,x=!!globalThis?.__turboModuleProxy,V=(0,react_1.useMemo)(()=>{const r=react_native_1.Platform.constants?.reactNativeVersion;return r?`${r.major}.${r.minor}.${r.patch}${r.prerelease!=null?`-${r.prerelease}`:""}`:"0.74+"},[]),u=l?.totalRAM?Math.round(l.totalRAM/(1024*1024)):J?.totalPhysicalRamMb||4096,C=l?.freeRAM?Math.round(l.freeRAM/(1024*1024)):Math.max(0,u-(J?.residentRamMb||1200)),I=Math.max(0,u-C),D=u>0?Math.round(I/u*100):45,v=l?.totalStorage?(l.totalStorage/(1024*1024*1024)).toFixed(1):"128.0",A=l?.freeStorage?(l.freeStorage/(1024*1024*1024)).toFixed(1):"64.2",Y=(0,react_1.useMemo)(()=>[{key:"overview",label:i("device.subTabs.overview","Overview"),themeColor:AppColors_1.AppColors.sky600,icon:r=><NetworkIcons_1.LayersIcon size={12}color={r}/>},{key:"hardware",label:i("device.subTabs.hardware","Hardware"),themeColor:AppColors_1.AppColors.orange600,icon:r=><NetworkIcons_1.CpuIcon size={12}color={r}/>},{key:"network",label:i("device.subTabs.network","Network & IP"),themeColor:AppColors_1.AppColors.teal600,icon:r=><NetworkIcons_1.WifiIcon size={12}color={r}/>},{key:"display",label:i("device.subTabs.display","Display"),themeColor:AppColors_1.AppColors.pink600,icon:r=><NetworkIcons_1.ScreenIcon size={12}color={r}/>},{key:"runtime",label:i("device.subTabs.runtime","Runtime & App"),themeColor:AppColors_1.AppColors.amber600,icon:r=><NetworkIcons_1.BoltIcon size={12}color={r}/>},{key:"security",label:i("device.subTabs.security","Security & IDs"),themeColor:AppColors_1.AppColors.errorColor,icon:r=><NetworkIcons_1.KeyIcon size={12}color={r}/>}],[i]),t=(0,react_1.useMemo)(()=>({identifiers:{pseudoUDID:b,bundleId:l?.appBundleId||l?.appPackageName||"com.app.inspector"},hardware:{model:l?.deviceModel||react_native_1.Platform.constants?.Model||"Unknown Device",brand:l?.deviceBrand||react_native_1.Platform.constants?.Brand||(react_native_1.Platform.OS==="ios"?"Apple":"Android"),osVersion:`${react_native_1.Platform.OS} ${react_native_1.Platform.Version}`,apiLevel:l?.apiLevel||react_native_1.Platform.constants?.Version||null,cpuAbi:l?.cpuAbi||react_native_1.Platform.constants?.ServerHost||"arm64-v8a",totalRamMb:u,freeRamMb:C,usedRamMb:I,totalStorageGb:`${v} GB`,freeStorageGb:`${A} GB`,batteryPercent:l?.batteryPercent??100,isCharging:l?.isCharging??!1},network:{ipAddress:y,isWifi:!0,reachability:"Online"},display:{windowWidth:f.width,windowHeight:f.height,screenWidth:h.width,screenHeight:h.height,pixelRatio:p,fontScale:M,statusBarHeight:B,isTablet:T,orientation:$?"Landscape":"Portrait"},runtime:{appName:(0,helpers_1.getAppName)(),appVersion:l?.appVersion||"1.0.0",appBuild:l?.appBuild||"1",reactNativeVersion:V,inspectorVersion:constants_1.LIB_VERSION,isHermes:m,isTurboModule:x,isDev:__DEV__,jsEngine:m?"Hermes":"JSC",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:Intl.DateTimeFormat().resolvedOptions().locale,sessionUptime:_}}),[b,l,u,C,I,v,A,y,f,h,p,M,B,T,$,V,m,x,_]),K=()=>{(0,helpers_1.copyToClipboard)(JSON.stringify(t,null,2),"Device Full Report"),(0,toast_1.showToast)(i("device.copiedJson","Copied Full Device JSON Report!"))},X=()=>{const r=`# Device Information Report
22
22
  **Generated by React Native In-App Inspector v${constants_1.LIB_VERSION}**
23
23
 
24
24
  ## \u{1F4F1} Hardware & System
@@ -27,31 +27,31 @@
27
27
  - **OS Version:** ${t.hardware.osVersion}
28
28
  - **CPU Architecture:** ${t.hardware.cpuAbi}
29
29
  - **Total RAM:** ${u} MB (Free: ${C} MB)
30
- - **Total Storage:** ${A} GB (Free: ${v} GB)
30
+ - **Total Storage:** ${v} GB (Free: ${A} GB)
31
31
  - **Battery:** ${t.hardware.batteryPercent}% (${t.hardware.isCharging?"Charging":"Unplugged"})
32
32
 
33
33
  ## \u{1F310} Network & Connectivity
34
- - **IP Address:** ${f}
34
+ - **IP Address:** ${y}
35
35
  - **Status:** Online
36
36
 
37
37
  ## \u{1F5A5} Display & Geometry
38
38
  - **Resolution:** ${h.width} \xD7 ${h.height} pt (@${p}x)
39
- - **Form Factor:** ${w?"Tablet":"Phone"} (${$?"Landscape":"Portrait"})
39
+ - **Form Factor:** ${T?"Tablet":"Phone"} (${$?"Landscape":"Portrait"})
40
40
  - **Status Bar Height:** ${B} pt
41
41
 
42
42
  ## \u2699\uFE0F Runtime & App
43
43
  - **App Name:** ${t.runtime.appName}
44
44
  - **App Version:** ${t.runtime.appVersion} (${t.runtime.appBuild})
45
45
  - **React Native:** v${V}
46
- - **JS Engine:** ${g?"Hermes":"JSC"} (Bridgeless TurboModule: ${_?"Yes":"No"})
46
+ - **JS Engine:** ${m?"Hermes":"JSC"} (Bridgeless TurboModule: ${x?"Yes":"No"})
47
47
  - **Environment:** ${__DEV__?"Development (__DEV__)":"Production (Release)"}
48
48
  - **Timezone:** ${t.runtime.timezone}
49
- - **Session Uptime:** ${S}
49
+ - **Session Uptime:** ${_}
50
50
 
51
51
  ## \u{1F511} Identifiers & Security
52
- - **Pseudo-UDID:** \`${y}\`
52
+ - **Pseudo-UDID:** \`${b}\`
53
53
  - **Bundle ID:** \`${t.identifiers.bundleId}\`
54
- `;(0,helpers_1.copyToClipboard)(r,"Device Markdown Report"),(0,toast_1.showToast)(i("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},e=(0,react_1.useCallback)((r,c,n)=>{if(!o.trim())return!0;const d=o.toLowerCase().trim(),M=c!=null?typeof c=="object"?JSON.stringify(c):String(c):"",x=n!=null?String(n):"";return r.toLowerCase().includes(d)||M.toLowerCase().includes(d)||x.toLowerCase().includes(d)},[o]),F=(0,react_1.useMemo)(()=>o.trim()?e("Model",l?.deviceModel||react_native_1.Platform.constants?.Model)||e("OS",react_native_1.Platform.OS)||e("IP Address",f)||e("RAM",`${T}/${u}`)||e("Uptime",S):!0,[o,e,l,f,T,u,S]),L=(0,react_1.useMemo)(()=>o.trim()?e("Device Model",t.hardware.model)||e("Manufacturer",t.hardware.brand)||e("Operating System",t.hardware.osVersion)||e("IP Address",f)||e("RAM Memory",`${T} MB / ${u} MB (${D}%)`,`Free Memory: ${C} MB`)||e("Storage Capacity",`${v} GB Free / ${A} GB Total`)||e("App Version",`v${t.runtime.appVersion} (${t.runtime.appBuild})`)||e("JavaScript Engine",g?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")||e("UDID Identifier",y):!0,[o,e,t,f,T,u,D,C,v,A,g,y]),O=(0,react_1.useMemo)(()=>o.trim()?e("CPU Architecture",t.hardware.cpuAbi)||e("Total RAM",`${u} MB`)||e("Free RAM",`${C} MB`)||e("Storage Capacity",`${A} GB`)||e("Available Storage",`${v} GB`)||e("Battery",`${l?.batteryPercent??100}%`)||e("API Level",`API ${l?.apiLevel||react_native_1.Platform.Version}`)||e("Thermal State","Nominal (Cool)"):!0,[o,e,t,u,C,A,v,l]),N=(0,react_1.useMemo)(()=>o.trim()?e("IP Address",f)||e("Internet Reachability","Connected")||e("Connection Type","Wi-Fi / Local Area Network")||e("Metro Dev Server",react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||"localhost:8081")||e("WebSocket Protocol","Active & Enabled")||e("Network Inspector Interceptor","Intercepting XHR & Fetch"):!0,[o,e,f]),z=(0,react_1.useMemo)(()=>o.trim()?e("Window Resolution",`${b.width.toFixed(0)} \xD7 ${b.height.toFixed(0)} pt`)||e("Screen Physical Size",`${(h.width*p).toFixed(0)} \xD7 ${(h.height*p).toFixed(0)} px`)||e("Pixel Density",`@${p}x (${Math.round(p*160)} dpi)`)||e("Font Scale",`${I}x`)||e("Form Factor",w?"Tablet":"Smartphone")||e("Orientation",$?"Landscape":"Portrait")||e("Status Bar Height",`${B} pt`):!0,[o,e,b,h,p,I,w,$,B]),H=(0,react_1.useMemo)(()=>o.trim()?e("App Name",t.runtime.appName)||e("Bundle ID",t.identifiers.bundleId)||e("App Version",`v${t.runtime.appVersion} (${t.runtime.appBuild})`)||e("React Native",`v${V}`)||e("In-App Inspector Version",`v${constants_1.LIB_VERSION}`)||e("Hermes Engine",g?"Enabled (AOT Bytecode)":"Disabled (JSC)")||e("New Architecture",_?"Enabled":"Legacy Bridge")||e("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")||e("Timezone",t.runtime.timezone)||e("Locale",t.runtime.locale)||e("Session Uptime",S):!0,[o,e,t,V,g,_,S]),W=(0,react_1.useMemo)(()=>o.trim()?e("Pseudo-UDID",y)||e("Bundle ID",t.identifiers.bundleId)||e("Root / Jailbreak","Clean (Standard Sandbox)")||e("Simulator / Emulator",react_native_1.Platform.constants?.Model?.includes?.("sdk")||react_native_1.Platform.constants?.Model?.includes?.("Emulator")||react_native_1.Platform.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")||e("Sandbox Integrity","Enforced by OS Kernel"):!0,[o,e,y,t]),Z=(0,react_1.useMemo)(()=>o.trim()?F||L||O||N||z||H||W:!0,[o,F,L,O,N,z,H,W]);return<react_native_1.View style={styles.container}>
54
+ `;(0,helpers_1.copyToClipboard)(r,"Device Markdown Report"),(0,toast_1.showToast)(i("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},e=(0,react_1.useCallback)((r,d,n)=>{if(!o.trim())return!0;const c=o.toLowerCase().trim(),S=d!=null?typeof d=="object"?JSON.stringify(d):String(d):"",w=n!=null?String(n):"";return r.toLowerCase().includes(c)||S.toLowerCase().includes(c)||w.toLowerCase().includes(c)},[o]),O=(0,react_1.useMemo)(()=>o.trim()?e("Model",l?.deviceModel||react_native_1.Platform.constants?.Model)||e("OS",react_native_1.Platform.OS)||e("IP Address",y)||e("RAM",`${I.toLocaleString()}/${u.toLocaleString()}`)||e("Uptime",_):!0,[o,e,l,y,I,u,_]),F=(0,react_1.useMemo)(()=>o.trim()?e("Device Model",t.hardware.model)||e("Manufacturer",t.hardware.brand)||e("Operating System",t.hardware.osVersion)||e("IP Address",y)||e("RAM Memory",`${I.toLocaleString()} MB / ${u.toLocaleString()} MB (${D}%)`,`Free Memory: ${C.toLocaleString()} MB`)||e("Storage Capacity",`${A} GB Free / ${v} GB Total`)||e("App Version",`v${t.runtime.appVersion} (${t.runtime.appBuild})`)||e("JavaScript Engine",m?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")||e("UDID Identifier",b):!0,[o,e,t,y,I,u,D,C,A,v,m,b]),N=(0,react_1.useMemo)(()=>o.trim()?e("CPU Architecture",t.hardware.cpuAbi)||e("Total RAM",`${u.toLocaleString()} MB`)||e("Free RAM",`${C.toLocaleString()} MB`)||e("Storage Capacity",`${v} GB`)||e("Available Storage",`${A} GB`)||e("Battery",`${l?.batteryPercent??100}%`)||e("API Level",`API ${l?.apiLevel||react_native_1.Platform.Version}`)||e("Thermal State","Nominal (Cool)"):!0,[o,e,t,u,C,v,A,l]),U=(0,react_1.useMemo)(()=>o.trim()?e("IP Address",y)||e("Internet Reachability","Connected")||e("Connection Type","Wi-Fi / Local Area Network")||e("Metro Dev Server",react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||"localhost:8081")||e("WebSocket Protocol","Active & Enabled")||e("Network Inspector Interceptor","Intercepting XHR & Fetch"):!0,[o,e,y]),z=(0,react_1.useMemo)(()=>o.trim()?e("Window Resolution",`${Math.round(f.width).toLocaleString()} \xD7 ${Math.round(f.height).toLocaleString()} pt`)||e("Screen Physical Size",`${Math.round(h.width*p).toLocaleString()} \xD7 ${Math.round(h.height*p).toLocaleString()} px`)||e("Pixel Density",`@${p}x (${Math.round(p*160).toLocaleString()} dpi)`)||e("Font Scale",`${M}x`)||e("Form Factor",T?"Tablet":"Smartphone")||e("Orientation",$?"Landscape":"Portrait")||e("Status Bar Height",`${B} pt`):!0,[o,e,f,h,p,M,T,$,B]),H=(0,react_1.useMemo)(()=>o.trim()?e("App Name",t.runtime.appName)||e("Bundle ID",t.identifiers.bundleId)||e("App Version",`v${t.runtime.appVersion} (${t.runtime.appBuild})`)||e("React Native",`v${V}`)||e("In-App Inspector Version",`v${constants_1.LIB_VERSION}`)||e("Hermes Engine",m?"Enabled (AOT Bytecode)":"Disabled (JSC)")||e("New Architecture",x?"Enabled":"Legacy Bridge")||e("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")||e("Timezone",t.runtime.timezone)||e("Locale",t.runtime.locale)||e("Session Uptime",_):!0,[o,e,t,V,m,x,_]),W=(0,react_1.useMemo)(()=>o.trim()?e("Pseudo-UDID",b)||e("Bundle ID",t.identifiers.bundleId)||e("Root / Jailbreak","Clean (Standard Sandbox)")||e("Simulator / Emulator",react_native_1.Platform.constants?.Model?.includes?.("sdk")||react_native_1.Platform.constants?.Model?.includes?.("Emulator")||react_native_1.Platform.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")||e("Sandbox Integrity","Enforced by OS Kernel"):!0,[o,e,b,t]),Z=(0,react_1.useMemo)(()=>o.trim()?O||F||N||U||z||H||W:!0,[o,O,F,N,U,z,H,W]);return<react_native_1.View style={styles.container}>
55
55
 
56
56
  <react_native_1.View style={styles.actionBar}>
57
57
  <react_native_1.View style={styles.searchBar}>
@@ -74,12 +74,12 @@
74
74
  </react_native_1.View>
75
75
 
76
76
 
77
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:12,gap:6}}>
78
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
79
- {Y.map(r=>{const c=a===r.key,n=r.themeColor||AppColors_1.AppColors.purple,d=c?AppColors_1.AppColors.white:n;return<TouchableScale_1.default key={r.key}onPress={()=>m(r.key)}>
80
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:c?n:`${n}12`,borderWidth:1,borderColor:c?n:`${n}30`,gap:5}}>
81
- {r.icon(d)}
82
- <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:c?AppColors_1.AppColors.white:AppColors_1.AppColors.primaryBlack}}>
77
+ <react_native_1.View style={styles.subTabsWrapper}>
78
+ <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={styles.subTabsContainer}>
79
+ {Y.map(r=>{const d=a===r.key,n=r.themeColor||AppColors_1.AppColors.purple,c=d?AppColors_1.AppColors.white:n;return<TouchableScale_1.default key={r.key}onPress={()=>g(r.key)}>
80
+ <react_native_1.View style={[styles.subTabPill,d&&{backgroundColor:n,borderColor:n},!d&&{backgroundColor:`${n}12`,borderColor:`${n}30`}]}>
81
+ {r.icon(c)}
82
+ <react_native_1.Text style={[styles.subTabPillText,d&&{color:AppColors_1.AppColors.white},!d&&{color:AppColors_1.AppColors.primaryBlack}]}>
83
83
  {r.label}
84
84
  </react_native_1.Text>
85
85
  </react_native_1.View>
@@ -90,7 +90,41 @@
90
90
 
91
91
  <react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
92
92
 
93
- {(!o.trim()||F)&&<react_native_1.View style={styles.heroCard}>
93
+ {(!o.trim()||e("UDID Identifier",b)||e("UUID",b)||e("Device UUID",b))&&<react_native_1.View style={styles.featuredUuidCard}>
94
+ <react_native_1.View style={styles.featuredUuidHeader}>
95
+ <react_native_1.View style={styles.featuredUuidTitleRow}>
96
+ <react_native_1.View style={styles.featuredUuidIconWrap}>
97
+ <NetworkIcons_1.KeyIcon size={14}color={AppColors_1.AppColors.white}/>
98
+ </react_native_1.View>
99
+ <react_native_1.View style={{flex:1,minWidth:0}}>
100
+ <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
101
+ <react_native_1.Text style={styles.featuredUuidLabel}>DEVICE UUID</react_native_1.Text>
102
+ <react_native_1.View style={styles.featuredBadge}>
103
+ <react_native_1.Text style={styles.featuredBadgeText}>FEATURED</react_native_1.Text>
104
+ </react_native_1.View>
105
+ </react_native_1.View>
106
+ <react_native_1.Text style={styles.featuredUuidSubtext}>
107
+ Deterministic hardware pseudo-identifier
108
+ </react_native_1.Text>
109
+ </react_native_1.View>
110
+ </react_native_1.View>
111
+
112
+ <TouchableScale_1.default onPress={()=>{(0,helpers_1.copyToClipboard)(b,"Device UUID"),(0,toast_1.showToast)(i("device.copiedUuid","Copied Device UUID to clipboard!"))}}style={styles.featuredCopyBtn}hitSlop={6}accessibilityRole="button"accessibilityLabel="Copy Device UUID">
113
+ <NetworkIcons_1.CopyIcon size={11}color={AppColors_1.AppColors.white}/>
114
+ <react_native_1.Text style={styles.featuredCopyBtnText}>Copy</react_native_1.Text>
115
+ </TouchableScale_1.default>
116
+ </react_native_1.View>
117
+
118
+ <TouchableScale_1.default onPress={()=>{(0,helpers_1.copyToClipboard)(b,"Device UUID"),(0,toast_1.showToast)(i("device.copiedUuid","Copied Device UUID to clipboard!"))}}style={styles.featuredUuidValueBox}hitSlop={4}accessibilityRole="button"accessibilityLabel="Tap to copy UUID">
119
+ <react_native_1.Text style={styles.featuredUuidValueText}numberOfLines={1}ellipsizeMode="middle"selectable>
120
+ {b}
121
+ </react_native_1.Text>
122
+ <NetworkIcons_1.CopyIcon size={12}color={AppColors_1.AppColors.brandPurple}/>
123
+ </TouchableScale_1.default>
124
+ </react_native_1.View>}
125
+
126
+
127
+ {(!o.trim()||O)&&<react_native_1.View style={styles.heroCard}>
94
128
  <react_native_1.View style={styles.heroHeader}>
95
129
  <react_native_1.View style={styles.heroIconWrap}>
96
130
  {react_native_1.Platform.OS==="ios"?<NetworkIcons_1.AppleIcon size={20}color={AppColors_1.AppColors.white}/>:<NetworkIcons_1.AndroidIcon size={20}color={AppColors_1.AppColors.white}/>}
@@ -114,55 +148,55 @@
114
148
  <react_native_1.View style={styles.heroMetricItem}>
115
149
  <react_native_1.Text style={styles.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{i("device.ipAddress","IP ADDRESS")}</react_native_1.Text>
116
150
  <react_native_1.Text style={styles.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
117
- {f}
151
+ {y}
118
152
  </react_native_1.Text>
119
153
  </react_native_1.View>
120
154
  <react_native_1.View style={styles.heroMetricDivider}/>
121
155
  <react_native_1.View style={styles.heroMetricItem}>
122
156
  <react_native_1.Text style={styles.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{i("device.ramUsedTotal","RAM (USED/TOTAL)")}</react_native_1.Text>
123
157
  <react_native_1.Text style={styles.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
124
- {T}/{u} MB
158
+ {I.toLocaleString()}/{u.toLocaleString()} MB
125
159
  </react_native_1.Text>
126
160
  </react_native_1.View>
127
161
  <react_native_1.View style={styles.heroMetricDivider}/>
128
162
  <react_native_1.View style={styles.heroMetricItem}>
129
163
  <react_native_1.Text style={styles.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{i("device.uptime","UPTIME")}</react_native_1.Text>
130
- <react_native_1.Text style={styles.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">{S}</react_native_1.Text>
164
+ <react_native_1.Text style={styles.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">{_}</react_native_1.Text>
131
165
  </react_native_1.View>
132
166
  </react_native_1.View>
133
167
  </react_native_1.View>}
134
168
 
135
169
 
136
- {(a==="overview"||o.length>0)&&L&&<react_native_1.View style={styles.sectionCard}>
170
+ {(a==="overview"||o.length>0)&&F&&<react_native_1.View style={styles.sectionCard}>
137
171
  <react_native_1.Text style={styles.sectionTitle}>DEVICE OVERVIEW</react_native_1.Text>
138
172
  {e("Device Model",t.hardware.model)&&<InfoRow label="Device Model"value={t.hardware.model}/>}
139
173
  {e("Manufacturer",t.hardware.brand)&&<InfoRow label="Manufacturer / Brand"value={t.hardware.brand}/>}
140
174
  {e("Operating System",t.hardware.osVersion)&&<InfoRow label="Operating System"value={t.hardware.osVersion}badge={{text:react_native_1.Platform.OS.toUpperCase(),color:AppColors_1.AppColors.blue500,bg:`${AppColors_1.AppColors.blue500}18`}}/>}
141
- {e("IP Address",f)&&<InfoRow label="Local IP Address"value={f}badge={{text:"ONLINE",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}18`}}/>}
142
- {e("RAM Memory",`${T} MB / ${u} MB (${D}%)`,`Free Memory: ${C} MB`)&&<InfoRow label="RAM Memory"value={`${T} MB / ${u} MB (${D}%)`}subtext={`Free Memory: ${C} MB`}/>}
143
- {e("Storage Capacity",`${v} GB Free / ${A} GB Total`)&&<InfoRow label="Internal Storage"value={`${v} GB Free / ${A} GB Total`}/>}
175
+ {e("IP Address",y)&&<InfoRow label="Local IP Address"value={y}badge={{text:"ONLINE",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}18`}}/>}
176
+ {e("RAM Memory",`${I.toLocaleString()} MB / ${u.toLocaleString()} MB (${D}%)`,`Free Memory: ${C.toLocaleString()} MB`)&&<InfoRow label="RAM Memory"value={`${I.toLocaleString()} MB / ${u.toLocaleString()} MB (${D}%)`}subtext={`Free Memory: ${C.toLocaleString()} MB`}/>}
177
+ {e("Storage Capacity",`${A} GB Free / ${v} GB Total`)&&<InfoRow label="Internal Storage"value={`${A} GB Free / ${v} GB Total`}/>}
144
178
  {e("App Version",`v${t.runtime.appVersion} (${t.runtime.appBuild})`)&&<InfoRow label="Host App Version"value={`v${t.runtime.appVersion} (${t.runtime.appBuild})`}/>}
145
- {e("JavaScript Engine",g?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")&&<InfoRow label="JS Runtime Engine"value={g?"Hermes Bytecode Engine":"JavaScriptCore (JSC)"}badge={g?{text:"HERMES",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}:{text:"JSC",color:AppColors_1.AppColors.sky500,bg:`${AppColors_1.AppColors.sky500}18`}}/>}
146
- {e("UDID Identifier",y)&&<InfoRow label="Pseudo-UDID"value={y}isLast/>}
179
+ {e("JavaScript Engine",m?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")&&<InfoRow label="JS Runtime Engine"value={m?"Hermes Bytecode Engine":"JavaScriptCore (JSC)"}badge={m?{text:"HERMES",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}:{text:"JSC",color:AppColors_1.AppColors.sky500,bg:`${AppColors_1.AppColors.sky500}18`}}/>}
180
+ {e("UDID Identifier",b)&&<InfoRow label="Pseudo-UDID"value={b}isLast/>}
147
181
  </react_native_1.View>}
148
182
 
149
183
 
150
- {(a==="hardware"||o.length>0)&&O&&<react_native_1.View style={styles.sectionCard}>
184
+ {(a==="hardware"||o.length>0)&&N&&<react_native_1.View style={styles.sectionCard}>
151
185
  <react_native_1.Text style={styles.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</react_native_1.Text>
152
186
  {e("CPU Architecture",t.hardware.cpuAbi)&&<InfoRow label="CPU Architecture / ABI"value={t.hardware.cpuAbi}badge={{text:"64-BIT",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}}/>}
153
- {e("Total RAM",`${u} MB`)&&<InfoRow label="Total Physical RAM"value={`${u} MB`}/>}
154
- {e("Free RAM",`${C} MB`)&&<InfoRow label="Available Free RAM"value={`${C} MB`}badge={{text:C<500?"LOW":"HEALTHY",color:C<500?AppColors_1.AppColors.errorColor:AppColors_1.AppColors.emerald500,bg:C<500?`${AppColors_1.AppColors.errorColor}18`:`${AppColors_1.AppColors.emerald500}18`}}/>}
155
- {e("Storage Capacity",`${A} GB`)&&<InfoRow label="Disk Storage Total"value={`${A} GB`}/>}
156
- {e("Available Storage",`${v} GB`)&&<InfoRow label="Disk Storage Available"value={`${v} GB`}/>}
187
+ {e("Total RAM",`${u.toLocaleString()} MB`)&&<InfoRow label="Total Physical RAM"value={`${u.toLocaleString()} MB`}/>}
188
+ {e("Free RAM",`${C.toLocaleString()} MB`)&&<InfoRow label="Available Free RAM"value={`${C.toLocaleString()} MB`}badge={{text:C<500?"LOW":"HEALTHY",color:C<500?AppColors_1.AppColors.errorColor:AppColors_1.AppColors.emerald500,bg:C<500?`${AppColors_1.AppColors.errorColor}18`:`${AppColors_1.AppColors.emerald500}18`}}/>}
189
+ {e("Storage Capacity",`${v} GB`)&&<InfoRow label="Disk Storage Total"value={`${v} GB`}/>}
190
+ {e("Available Storage",`${A} GB`)&&<InfoRow label="Disk Storage Available"value={`${A} GB`}/>}
157
191
  {e("Battery",`${l?.batteryPercent??100}%`)&&<InfoRow label="Battery Level"value={`${l?.batteryPercent??100}%`}badge={{text:l?.isCharging?"CHARGING":"DISCHARGING",color:l?.isCharging?AppColors_1.AppColors.emerald500:AppColors_1.AppColors.grayText,bg:l?.isCharging?`${AppColors_1.AppColors.emerald500}18`:`${AppColors_1.AppColors.grayText}18`}}/>}
158
192
  {e("API Level",`API ${l?.apiLevel||react_native_1.Platform.Version}`)&&react_native_1.Platform.OS==="android"&&<InfoRow label="Android API SDK Level"value={`API ${l?.apiLevel||react_native_1.Platform.Version}`}/>}
159
193
  {e("Thermal State","Nominal (Cool)")&&<InfoRow label="Thermal State"value="Nominal (Cool)"badge={{text:"OPTIMAL",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}18`}}isLast/>}
160
194
  </react_native_1.View>}
161
195
 
162
196
 
163
- {(a==="network"||o.length>0)&&N&&<react_native_1.View style={styles.sectionCard}>
197
+ {(a==="network"||o.length>0)&&U&&<react_native_1.View style={styles.sectionCard}>
164
198
  <react_native_1.Text style={styles.sectionTitle}>NETWORK & CONNECTIVITY</react_native_1.Text>
165
- {e("IP Address",f)&&<InfoRow label="Local Device IP"value={f}badge={{text:"IPV4",color:AppColors_1.AppColors.blue500,bg:`${AppColors_1.AppColors.blue500}18`}}/>}
199
+ {e("IP Address",y)&&<InfoRow label="Local Device IP"value={y}badge={{text:"IPV4",color:AppColors_1.AppColors.blue500,bg:`${AppColors_1.AppColors.blue500}18`}}/>}
166
200
  {e("Internet Reachability","Connected")&&<InfoRow label="Internet Reachability"value="Connected"badge={{text:"ONLINE",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}18`}}/>}
167
201
  {e("Connection Type","Wi-Fi / Local Area Network")&&<InfoRow label="Active Connection Type"value="Wi-Fi / Local Area Network"/>}
168
202
  {e("Metro Dev Server",react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||"localhost:8081")&&<InfoRow label="Metro Packager Host"value={react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||"localhost:8081"}/>}
@@ -173,11 +207,11 @@
173
207
 
174
208
  {(a==="display"||o.length>0)&&z&&<react_native_1.View style={styles.sectionCard}>
175
209
  <react_native_1.Text style={styles.sectionTitle}>DISPLAY & SCREEN GEOMETRY</react_native_1.Text>
176
- {e("Window Resolution",`${b.width.toFixed(0)} \xD7 ${b.height.toFixed(0)} pt`)&&<InfoRow label="Window Logical Size"value={`${b.width.toFixed(0)} \xD7 ${b.height.toFixed(0)} pt`}/>}
177
- {e("Screen Physical Size",`${(h.width*p).toFixed(0)} \xD7 ${(h.height*p).toFixed(0)} px`)&&<InfoRow label="Physical Screen Size"value={`${(h.width*p).toFixed(0)} \xD7 ${(h.height*p).toFixed(0)} px`}/>}
178
- {e("Pixel Density",`@${p}x (${Math.round(p*160)} dpi)`)&&<InfoRow label="Pixel Ratio (DPI Scale)"value={`@${p}x (${Math.round(p*160)} dpi)`}badge={{text:`@${p}x`,color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}}/>}
179
- {e("Font Scale",`${I}x`)&&<InfoRow label="User Font Scale"value={`${I}x (${I===1?"Default":I>1?"Enlarged":"Compact"})`}/>}
180
- {e("Form Factor",w?"Tablet":"Smartphone")&&<InfoRow label="Device Form Factor"value={w?"Tablet":"Smartphone"}badge={{text:w?"TABLET":"PHONE",color:w?AppColors_1.AppColors.blue500:AppColors_1.AppColors.purple,bg:w?`${AppColors_1.AppColors.blue500}18`:`${AppColors_1.AppColors.purple}18`}}/>}
210
+ {e("Window Resolution",`${Math.round(f.width).toLocaleString()} \xD7 ${Math.round(f.height).toLocaleString()} pt`)&&<InfoRow label="Window Logical Size"value={`${Math.round(f.width).toLocaleString()} \xD7 ${Math.round(f.height).toLocaleString()} pt`}/>}
211
+ {e("Screen Physical Size",`${Math.round(h.width*p).toLocaleString()} \xD7 ${Math.round(h.height*p).toLocaleString()} px`)&&<InfoRow label="Physical Screen Size"value={`${Math.round(h.width*p).toLocaleString()} \xD7 ${Math.round(h.height*p).toLocaleString()} px`}/>}
212
+ {e("Pixel Density",`@${p}x (${Math.round(p*160).toLocaleString()} dpi)`)&&<InfoRow label="Pixel Ratio (DPI Scale)"value={`@${p}x (${Math.round(p*160).toLocaleString()} dpi)`}badge={{text:`@${p}x`,color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}}/>}
213
+ {e("Font Scale",`${M}x`)&&<InfoRow label="User Font Scale"value={`${M}x (${M===1?"Default":M>1?"Enlarged":"Compact"})`}/>}
214
+ {e("Form Factor",T?"Tablet":"Smartphone")&&<InfoRow label="Device Form Factor"value={T?"Tablet":"Smartphone"}badge={{text:T?"TABLET":"PHONE",color:T?AppColors_1.AppColors.blue500:AppColors_1.AppColors.purple,bg:T?`${AppColors_1.AppColors.blue500}18`:`${AppColors_1.AppColors.purple}18`}}/>}
181
215
  {e("Orientation",$?"Landscape":"Portrait")&&<InfoRow label="Screen Orientation"value={$?"Landscape":"Portrait"}/>}
182
216
  {e("Status Bar Height",`${B} pt`)&&<InfoRow label="Status Bar Inset"value={`${B} pt`}isLast/>}
183
217
  </react_native_1.View>}
@@ -190,18 +224,18 @@
190
224
  {e("App Version",`v${t.runtime.appVersion} (${t.runtime.appBuild})`)&&<InfoRow label="Application Version"value={`v${t.runtime.appVersion} (${t.runtime.appBuild})`}/>}
191
225
  {e("React Native",`v${V}`)&&<InfoRow label="React Native Framework"value={`v${V}`}badge={{text:"RN",color:AppColors_1.AppColors.sky500,bg:`${AppColors_1.AppColors.sky500}18`}}/>}
192
226
  {e("In-App Inspector Version",`v${constants_1.LIB_VERSION}`)&&<InfoRow label="In-App Inspector Library"value={`v${constants_1.LIB_VERSION}`}badge={{text:"LATEST",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}}/>}
193
- {e("Hermes Engine",g?"Enabled (AOT Bytecode)":"Disabled (JSC)")&&<InfoRow label="Hermes JavaScript Engine"value={g?"Enabled (AOT Bytecode)":"Disabled (JSC)"}badge={{text:g?"HERMES":"JSC",color:g?AppColors_1.AppColors.purple:AppColors_1.AppColors.grayText,bg:g?`${AppColors_1.AppColors.purple}18`:`${AppColors_1.AppColors.grayText}18`}}/>}
194
- {e("New Architecture",_?"Enabled":"Legacy Bridge")&&<InfoRow label="Bridgeless TurboModules (New Arch)"value={_?"Enabled":"Legacy Bridge"}badge={{text:_?"NEW ARCH":"LEGACY",color:_?AppColors_1.AppColors.emerald500:AppColors_1.AppColors.blue500,bg:_?`${AppColors_1.AppColors.emerald500}18`:`${AppColors_1.AppColors.blue500}18`}}/>}
227
+ {e("Hermes Engine",m?"Enabled (AOT Bytecode)":"Disabled (JSC)")&&<InfoRow label="Hermes JavaScript Engine"value={m?"Enabled (AOT Bytecode)":"Disabled (JSC)"}badge={{text:m?"HERMES":"JSC",color:m?AppColors_1.AppColors.purple:AppColors_1.AppColors.grayText,bg:m?`${AppColors_1.AppColors.purple}18`:`${AppColors_1.AppColors.grayText}18`}}/>}
228
+ {e("New Architecture",x?"Enabled":"Legacy Bridge")&&<InfoRow label="Bridgeless TurboModules (New Arch)"value={x?"Enabled":"Legacy Bridge"}badge={{text:x?"NEW ARCH":"LEGACY",color:x?AppColors_1.AppColors.emerald500:AppColors_1.AppColors.blue500,bg:x?`${AppColors_1.AppColors.emerald500}18`:`${AppColors_1.AppColors.blue500}18`}}/>}
195
229
  {e("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")&&<InfoRow label="Build Configuration"value={__DEV__?"Debug (__DEV__ = true)":"Release / Production"}badge={{text:__DEV__?"DEBUG":"RELEASE",color:__DEV__?AppColors_1.AppColors.warningIconGold:AppColors_1.AppColors.emerald500,bg:__DEV__?`${AppColors_1.AppColors.warningIconGold}18`:`${AppColors_1.AppColors.emerald500}18`}}/>}
196
230
  {e("Timezone",t.runtime.timezone)&&<InfoRow label="System Timezone"value={t.runtime.timezone}/>}
197
231
  {e("Locale",t.runtime.locale)&&<InfoRow label="System Language & Locale"value={t.runtime.locale}/>}
198
- {e("Session Uptime",S)&&<InfoRow label="Inspector Session Uptime"value={S}isLast/>}
232
+ {e("Session Uptime",_)&&<InfoRow label="Inspector Session Uptime"value={_}isLast/>}
199
233
  </react_native_1.View>}
200
234
 
201
235
 
202
236
  {(a==="security"||o.length>0)&&W&&<react_native_1.View style={styles.sectionCard}>
203
237
  <react_native_1.Text style={styles.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</react_native_1.Text>
204
- {e("Pseudo-UDID",y)&&<InfoRow label="Deterministic Pseudo-UDID"value={y}subtext="Stable hardware signature hash for testing & diagnostics"badge={{text:"PERSISTENT",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}}/>}
238
+ {e("Pseudo-UDID",b)&&<InfoRow label="Deterministic Pseudo-UDID"value={b}subtext="Stable hardware signature hash for testing & diagnostics"badge={{text:"PERSISTENT",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}18`}}/>}
205
239
  {e("Bundle ID",t.identifiers.bundleId)&&<InfoRow label="Application Bundle ID"value={t.identifiers.bundleId}/>}
206
240
  {e("Root / Jailbreak","Clean (Standard Sandbox)")&&<InfoRow label="Root / Jailbreak Heuristic"value="Clean (Standard Sandbox)"badge={{text:"SECURE",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}18`}}/>}
207
241
  {e("Simulator / Emulator",react_native_1.Platform.constants?.Model?.includes?.("sdk")||react_native_1.Platform.constants?.Model?.includes?.("Emulator")||react_native_1.Platform.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")&&<InfoRow label="Emulator / Physical Device"value={react_native_1.Platform.constants?.Model?.includes?.("sdk")||react_native_1.Platform.constants?.Model?.includes?.("Emulator")||react_native_1.Platform.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device"}/>}
@@ -222,4 +256,4 @@
222
256
 
223
257
  <react_native_1.View style={{height:48}}/>
224
258
  </react_native_1.ScrollView>
225
- </react_native_1.View>});const styles=react_native_1.StyleSheet.create({container:{flex:1,backgroundColor:AppColors_1.AppColors.grayBackground},subTabsWrapper:{backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.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:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},subTabPillActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},subTabPillText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.grayText},subTabPillTextActive:{color:AppColors_1.AppColors.white},actionBar:{flexDirection:"row",alignItems:"center",paddingHorizontal:12,paddingVertical:8,backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,gap:8},searchBar:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,paddingHorizontal:9,paddingVertical:react_native_1.Platform.OS==="ios"?6:2,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.primaryBlack,padding:0},exportButton:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:9,paddingVertical:6,borderRadius:8,backgroundColor:`${AppColors_1.AppColors.purple}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}33`},exportButtonText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.purple},scrollArea:{flex:1},scrollContent:{padding:12,gap:12,paddingBottom:100},heroCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.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:AppColors_1.AppColors.purple,alignItems:"center",justifyContent:"center",shadowColor:AppColors_1.AppColors.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},heroTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:15,color:AppColors_1.AppColors.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayText,marginTop:1},heroBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${AppColors_1.AppColors.emerald500}18`,paddingHorizontal:7,paddingVertical:3,borderRadius:6},pulseDot:{width:6,height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.emerald500},heroBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.emerald500},heroMetricsStrip:{flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:10,paddingVertical:8,paddingHorizontal:10},heroMetricItem:{flex:1,alignItems:"center",paddingHorizontal:2,minWidth:0},heroMetricLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.primaryBlack,marginTop:2},heroMetricDivider:{width:1,height:20,backgroundColor:AppColors_1.AppColors.dividerColor},sectionCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.black,shadowOpacity:.03,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},sectionTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.8,marginBottom:8,textTransform:"uppercase"},infoRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:9,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor},infoLabel:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},infoSubtext:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.grayTextWeak,marginTop:1},infoBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},infoBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8.5},infoValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.primaryBlack,flexShrink:1,textAlign:"right"},rowCopyBtn:{padding:4,borderRadius:4,backgroundColor:AppColors_1.AppColors.grayBackground},emptySearchCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:24,alignItems:"center",justifyContent:"center",gap:8,marginTop:8},emptySearchTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.primaryBlack,textAlign:"center"},emptySearchSubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayTextWeak,textAlign:"center"},clearSearchBtn:{marginTop:6,paddingHorizontal:14,paddingVertical:6.5,borderRadius:8,backgroundColor:AppColors_1.AppColors.purple},clearSearchBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.white}});exports.default=exports.DeviceInfoTab;
259
+ </react_native_1.View>});const styles=react_native_1.StyleSheet.create({container:{flex:1,backgroundColor:AppColors_1.AppColors.grayBackground},subTabsWrapper:{backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.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:AppFonts_1.AppFonts.interBold,fontSize:10.5},featuredUuidCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1.5,borderColor:`${AppColors_1.AppColors.brandPurple}40`,padding:12,gap:10,shadowColor:AppColors_1.AppColors.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:AppColors_1.AppColors.brandPurple,alignItems:"center",justifyContent:"center"},featuredUuidLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.primaryBlack,letterSpacing:.3},featuredUuidSubtext:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:9.5,color:AppColors_1.AppColors.grayTextWeak,marginTop:.5},featuredBadge:{backgroundColor:`${AppColors_1.AppColors.brandPurple}18`,paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,borderWidth:1,borderColor:`${AppColors_1.AppColors.brandPurple}30`},featuredBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8,color:AppColors_1.AppColors.brandPurple,letterSpacing:.4},featuredCopyBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:AppColors_1.AppColors.brandPurple,paddingHorizontal:10,paddingVertical:5.5,borderRadius:7,shadowColor:AppColors_1.AppColors.brandPurple,shadowOpacity:.25,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},featuredCopyBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.white},featuredUuidValueBox:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:`${AppColors_1.AppColors.brandPurple}0C`,borderRadius:8,borderWidth:1,borderColor:`${AppColors_1.AppColors.brandPurple}28`,paddingHorizontal:10,paddingVertical:7,gap:8},featuredUuidValueText:{flex:1,fontFamily:react_native_1.Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),fontSize:11.5,color:AppColors_1.AppColors.brandPurple,letterSpacing:.5},actionBar:{flexDirection:"row",alignItems:"center",paddingHorizontal:12,paddingVertical:8,backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,gap:8},searchBar:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,paddingHorizontal:9,paddingVertical:react_native_1.Platform.OS==="ios"?6:2,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.primaryBlack,padding:0},exportButton:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:9,paddingVertical:6,borderRadius:8,backgroundColor:`${AppColors_1.AppColors.purple}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}33`},exportButtonText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.purple},scrollArea:{flex:1},scrollContent:{padding:12,gap:12,paddingBottom:100},heroCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.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:AppColors_1.AppColors.purple,alignItems:"center",justifyContent:"center",shadowColor:AppColors_1.AppColors.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},heroTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:15,color:AppColors_1.AppColors.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayText,marginTop:1},heroBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${AppColors_1.AppColors.emerald500}18`,paddingHorizontal:7,paddingVertical:3,borderRadius:6},pulseDot:{width:6,height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.emerald500},heroBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.emerald500},heroMetricsStrip:{flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:10,paddingVertical:8,paddingHorizontal:10},heroMetricItem:{flex:1,alignItems:"center",paddingHorizontal:2,minWidth:0},heroMetricLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.primaryBlack,marginTop:2},heroMetricDivider:{width:1,height:20,backgroundColor:AppColors_1.AppColors.dividerColor},sectionCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.black,shadowOpacity:.03,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},sectionTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.8,marginBottom:8,textTransform:"uppercase"},infoRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:9,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor},infoLabel:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},infoSubtext:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.grayTextWeak,marginTop:1},infoBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},infoBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8.5},infoValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.primaryBlack,flexShrink:1,textAlign:"right"},rowCopyBtn:{padding:4,borderRadius:4,backgroundColor:AppColors_1.AppColors.grayBackground},emptySearchCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:24,alignItems:"center",justifyContent:"center",gap:8,marginTop:8},emptySearchTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.primaryBlack,textAlign:"center"},emptySearchSubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayTextWeak,textAlign:"center"},clearSearchBtn:{marginTop:6,paddingHorizontal:14,paddingVertical:6.5,borderRadius:8,backgroundColor:AppColors_1.AppColors.purple},clearSearchBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.white}});exports.default=exports.DeviceInfoTab;
@@ -1,12 +1,12 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,a,n){n===void 0&&(n=a);var o=Object.getOwnPropertyDescriptor(r,a);(!o||("get"in o?!r.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return r[a]}}),Object.defineProperty(t,n,o)}):(function(t,r,a,n){n===void 0&&(n=a),t[n]=r[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),__importStar=this&&this.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(a){var n=[];for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(n[n.length]=o);return n},t(r)};return function(r){if(r&&r.__esModule)return r;var a={};if(r!=null)for(var n=t(r),o=0;o<n.length;o++)n[o]!=="default"&&__createBinding(a,r,n[o]);return __setModuleDefault(a,r),a}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppHeaderLogo_1=__importDefault(require("../AppHeaderLogo")),BrandCircleIcon_1=__importDefault(require("../BrandCircleIcon")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),helpers_1=require("../../helpers"),constants_1=require("../../constants"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),styles_1=__importDefault(require("../../styles")),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FabLauncher=()=>{const{setVisible:t,isMinimized:r,setIsMinimized:a,appIcon:n,fabPan:o,fabPanResponder:v,fabDraggedRef:C,pulseAnim:S,fabShineAnim:y,unreadPulseAnim:x,logs:R,analyticsEvents:A,refreshMediaCount:u}=(0,InspectorContext_1.useInspector)(),{width:T}=(0,react_native_1.useWindowDimensions)(),{t:s}=(0,i18n_1.useTranslation)(),[I]=(0,react_1.useState)(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),[c,g]=(0,react_1.useState)(!1),[V,b]=(0,react_1.useState)(0),p=(0,react_1.useRef)(null),[_,h]=(0,react_1.useState)(null),l=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,m=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(f=>m.current.x=f.value),i=l.y.addListener(f=>m.current.y=f.value);return()=>{l.x.removeListener(e),l.y.removeListener(i)}},[l]);const d=(0,react_1.useRef)(!1),P=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,i)=>Math.abs(i.dx)>4||Math.abs(i.dy)>4,onPanResponderGrant:()=>{d.current=!0,l.setOffset({x:m.current.x,y:m.current.y}),l.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:l.x,dy:l.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{l.flattenOffset(),setTimeout(()=>{d.current=!1},50)},onPanResponderTerminate:()=>{l.flattenOffset(),d.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{g(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(c?(b(0),p.current=setInterval(()=>{b(e=>e+1)},1e3)):(p.current&&(clearInterval(p.current),p.current=null),b(0)),()=>{p.current&&clearInterval(p.current)}),[c]);const M=(0,react_1.useCallback)(async()=>{if(!d.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const i={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};h(i),u?.().catch(()=>{}),(0,toast_1.showToast)(s("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(s("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(s("header.screenshotError","Error capturing screenshot"))}},[u,s]),B=(0,react_1.useCallback)(async()=>{if(!d.current)try{if(c){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(g(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const i={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};h(i),u?.().catch(()=>{}),(0,toast_1.showToast)(s("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(g(!0),(0,toast_1.showToast)(s("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(s("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(s("header.recordingError","Error during screen recording")),g(!1)}},[c,u,s]),w=(0,react_1.useCallback)(()=>{d.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),t(!0))},[a,t]),z=(0,react_1.useCallback)(()=>{d.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),t(!1))},[a,t]),O=e=>{const i=Math.floor(e/60),f=e%60;return`${i}:${f<10?"0":""}${f}`};return<>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,a,n){n===void 0&&(n=a);var o=Object.getOwnPropertyDescriptor(r,a);(!o||("get"in o?!r.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return r[a]}}),Object.defineProperty(t,n,o)}):(function(t,r,a,n){n===void 0&&(n=a),t[n]=r[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),__importStar=this&&this.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(a){var n=[];for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(n[n.length]=o);return n},t(r)};return function(r){if(r&&r.__esModule)return r;var a={};if(r!=null)for(var n=t(r),o=0;o<n.length;o++)n[o]!=="default"&&__createBinding(a,r,n[o]);return __setModuleDefault(a,r),a}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppHeaderLogo_1=__importDefault(require("../AppHeaderLogo")),BrandCircleIcon_1=__importDefault(require("../BrandCircleIcon")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),helpers_1=require("../../helpers"),constants_1=require("../../constants"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),styles_1=__importDefault(require("../../styles")),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FabLauncher=()=>{const{setVisible:t,isMinimized:r,setIsMinimized:a,appIcon:n,fabPan:o,fabPanResponder:v,fabDraggedRef:C,pulseAnim:S,fabShineAnim:y,refreshMediaCount:u}=(0,InspectorContext_1.useInspector)(),{width:x}=(0,react_native_1.useWindowDimensions)(),{t:s}=(0,i18n_1.useTranslation)(),[R]=(0,react_1.useState)(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),[c,g]=(0,react_1.useState)(!1),[A,b]=(0,react_1.useState)(0),p=(0,react_1.useRef)(null),[_,h]=(0,react_1.useState)(null),l=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,m=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(f=>m.current.x=f.value),i=l.y.addListener(f=>m.current.y=f.value);return()=>{l.x.removeListener(e),l.y.removeListener(i)}},[l]);const d=(0,react_1.useRef)(!1),T=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,i)=>Math.abs(i.dx)>4||Math.abs(i.dy)>4,onPanResponderGrant:()=>{d.current=!0,l.setOffset({x:m.current.x,y:m.current.y}),l.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:l.x,dy:l.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{l.flattenOffset(),setTimeout(()=>{d.current=!1},50)},onPanResponderTerminate:()=>{l.flattenOffset(),d.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{g(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(c?(b(0),p.current=setInterval(()=>{b(e=>e+1)},1e3)):(p.current&&(clearInterval(p.current),p.current=null),b(0)),()=>{p.current&&clearInterval(p.current)}),[c]);const I=(0,react_1.useCallback)(async()=>{if(!d.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const i={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};h(i),u?.().catch(()=>{}),(0,toast_1.showToast)(s("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(s("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(s("header.screenshotError","Error capturing screenshot"))}},[u,s]),V=(0,react_1.useCallback)(async()=>{if(!d.current)try{if(c){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(g(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const i={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};h(i),u?.().catch(()=>{}),(0,toast_1.showToast)(s("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(g(!0),(0,toast_1.showToast)(s("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(s("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(s("header.recordingError","Error during screen recording")),g(!1)}},[c,u,s]),w=(0,react_1.useCallback)(()=>{d.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),t(!0))},[a,t]),P=(0,react_1.useCallback)(()=>{d.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),t(!1))},[a,t]),M=e=>{const i=Math.floor(e/60),f=e%60;return`${i}:${f<10?"0":""}${f}`};return<>
2
2
 
3
- {r?<react_native_1.Animated.View style={[fabStyles.playerContainer,{transform:l.getTranslateTransform()}]}{...P.panHandlers}>
3
+ {r?<react_native_1.Animated.View style={[fabStyles.playerContainer,{transform:l.getTranslateTransform()}]}{...T.panHandlers}>
4
4
 
5
5
  <react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.indigo600,AppColors_1.AppColors.violet600]}start={{x:0,y:0}}end={{x:1,y:1}}style={fabStyles.gradientBg}pointerEvents="none"/>
6
6
 
7
7
 
8
8
  <react_native_1.View pointerEvents="none"style={fabStyles.playerShineClip}>
9
- <react_native_1.Animated.View style={[fabStyles.playerShineStreak,{transform:[{translateX:y.interpolate({inputRange:[0,1],outputRange:[-80,T+80]})},{rotate:"28deg"}]}]}>
9
+ <react_native_1.Animated.View style={[fabStyles.playerShineStreak,{transform:[{translateX:y.interpolate({inputRange:[0,1],outputRange:[-80,x+80]})},{rotate:"28deg"}]}]}>
10
10
  <react_native_linear_gradient_1.default colors={["rgba(255, 255, 255, 0)","rgba(255, 255, 255, 0.18)","rgba(255, 255, 255, 0.70)","rgba(255, 255, 255, 1)","rgba(255, 255, 255, 0.70)","rgba(255, 255, 255, 0.18)","rgba(255, 255, 255, 0)"]}locations={[0,.22,.44,.5,.56,.78,1]}start={{x:0,y:.5}}end={{x:1,y:.5}}style={{flex:1}}/>
11
11
  </react_native_1.Animated.View>
12
12
  </react_native_1.View>
@@ -23,7 +23,7 @@
23
23
  <react_native_1.View style={fabStyles.versionChip}>
24
24
  {react_native_1.Platform.OS==="ios"?<NetworkIcons_1.AppleIcon color={`${AppColors_1.AppColors.white}E6`}size={9}/>:<NetworkIcons_1.AndroidIcon color={`${AppColors_1.AppColors.white}E6`}size={9}/>}
25
25
  <react_native_1.Text style={fabStyles.versionChipText}numberOfLines={1}>
26
- {I}
26
+ {R}
27
27
  </react_native_1.Text>
28
28
  </react_native_1.View>
29
29
 
@@ -41,7 +41,7 @@
41
41
 
42
42
  <react_native_1.View style={fabStyles.actionsRow}>
43
43
 
44
- <TouchableScale_1.default onPress={M}hitSlop={{top:6,bottom:6,left:4,right:4}}style={fabStyles.actionBtn}>
44
+ <TouchableScale_1.default onPress={I}hitSlop={{top:6,bottom:6,left:4,right:4}}style={fabStyles.actionBtn}>
45
45
  <NetworkIcons_1.CameraIcon size={12}color={AppColors_1.AppColors.white}/>
46
46
  <react_native_1.Text style={fabStyles.actionText}>
47
47
  {s("header.photo","Photo")}
@@ -49,10 +49,10 @@
49
49
  </TouchableScale_1.default>
50
50
 
51
51
 
52
- <TouchableScale_1.default onPress={B}hitSlop={{top:6,bottom:6,left:4,right:4}}style={[fabStyles.actionBtn,c&&fabStyles.recordingBtnActive]}>
52
+ <TouchableScale_1.default onPress={V}hitSlop={{top:6,bottom:6,left:4,right:4}}style={[fabStyles.actionBtn,c&&fabStyles.recordingBtnActive]}>
53
53
  {c?<react_native_1.View style={fabStyles.recordingDot}/>:<NetworkIcons_1.VideoCameraIcon size={12}color={AppColors_1.AppColors.white}/>}
54
54
  <react_native_1.Text style={[fabStyles.actionText,c&&{color:AppColors_1.AppColors.red300}]}>
55
- {c?`${s("header.rec","REC")} ${O(V)}`:s("header.record","Record")}
55
+ {c?`${s("header.rec","REC")} ${M(A)}`:s("header.record","Record")}
56
56
  </react_native_1.Text>
57
57
  </TouchableScale_1.default>
58
58
 
@@ -62,7 +62,7 @@
62
62
  </TouchableScale_1.default>
63
63
 
64
64
 
65
- <TouchableScale_1.default onPress={z}hitSlop={{top:6,bottom:6,left:4,right:6}}accessibilityRole="button"accessibilityLabel={s("common.close","Close")}style={fabStyles.actionBtnSquare}>
65
+ <TouchableScale_1.default onPress={P}hitSlop={{top:6,bottom:6,left:4,right:6}}accessibilityRole="button"accessibilityLabel={s("common.close","Close")}style={fabStyles.actionBtnSquare}>
66
66
  <NetworkIcons_1.CloseWhite size={10}color={AppColors_1.AppColors.white}/>
67
67
  </TouchableScale_1.default>
68
68
  </react_native_1.View>
@@ -76,7 +76,6 @@
76
76
  <react_native_linear_gradient_1.default colors={["rgba(255, 255, 255, 0)","rgba(255, 255, 255, 0.25)","rgba(255, 255, 255, 0.95)","rgba(255, 255, 255, 0.25)","rgba(255, 255, 255, 0)"]}locations={[0,.25,.5,.75,1]}start={{x:0,y:.5}}end={{x:1,y:.5}}style={{flex:1}}/>
77
77
  </react_native_1.Animated.View>
78
78
  </react_native_1.View>
79
- {(R.length>0||A.length>0)&&<react_native_1.Animated.View style={[styles_1.default.fabGreenDot,{transform:[{scale:x}]}]}/>}
80
79
  </TouchableScale_1.default>
81
80
  </react_native_1.Animated.View>}
82
81