react-native-inapp-inspector 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ar.md +163 -0
- package/README.de.md +163 -0
- package/README.es.md +164 -0
- package/README.fr.md +163 -0
- package/README.hi.md +163 -0
- package/README.ja.md +180 -0
- package/README.ko.md +163 -0
- package/README.md +340 -243
- package/README.pt-BR.md +163 -0
- package/README.ru.md +163 -0
- package/README.zh-CN.md +387 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +605 -23
- package/assets/banner_dark.svg +186 -0
- package/assets/banner_light.svg +186 -0
- package/assets/icon_circle.svg +148 -0
- package/assets/icon_square.svg +369 -0
- package/assets/inapp_inspector_icon.gif +0 -0
- package/assets/inapp_inspector_icon_original.gif +0 -0
- package/assets/social_preview.png +0 -0
- package/assets/walkthrough.gif +0 -0
- package/dist/commonjs/capture.d.ts +2 -0
- package/dist/commonjs/capture.js +1 -1
- package/dist/commonjs/components/AnalyticsDetail.js +23 -23
- package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
- package/dist/commonjs/components/AnalyticsGraph.js +44 -44
- package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
- package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
- package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
- package/dist/commonjs/components/AppHeaderLogo.js +5 -3
- package/dist/commonjs/components/BrandCircleIcon.js +28 -28
- package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
- package/dist/commonjs/components/BrandSquareIcon.js +139 -0
- package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
- package/dist/commonjs/components/ConsoleLogCard.js +23 -39
- package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +6 -6
- package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
- package/dist/commonjs/components/Inspector/ConfirmationModal.js +30 -0
- package/dist/commonjs/components/Inspector/ConsoleTab.js +12 -12
- package/dist/commonjs/components/Inspector/CrashTab.js +44 -9
- package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
- package/dist/commonjs/components/Inspector/FabLauncher.js +30 -33
- package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
- package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
- package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +172 -0
- package/dist/commonjs/components/Inspector/MainScreen.js +55 -35
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +40 -35
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +341 -135
- package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
- package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
- package/dist/commonjs/components/Inspector/PushCard.js +5 -4
- package/dist/commonjs/components/Inspector/PushDetail.js +41 -32
- package/dist/commonjs/components/Inspector/PushTab.js +12 -12
- package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
- package/dist/commonjs/components/Inspector/ReduxTab.js +10 -8
- package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
- package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
- package/dist/commonjs/components/Inspector/SettingsPanel.js +287 -139
- package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
- package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
- package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
- package/dist/commonjs/components/Inspector/SocketDetail.js +327 -0
- package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
- package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
- package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
- package/dist/commonjs/components/Inspector/StorageTab.js +39 -37
- package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
- package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
- package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
- package/dist/commonjs/components/Inspector/TabBar.js +24 -23
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
- package/dist/commonjs/components/JsonViewer.js +50 -48
- package/dist/commonjs/components/LogCard.d.ts +3 -2
- package/dist/commonjs/components/LogCard.js +27 -25
- package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
- package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
- package/dist/commonjs/components/NetworkIcons.d.ts +42 -0
- package/dist/commonjs/components/NetworkIcons.js +139 -6
- package/dist/commonjs/components/SegmentedTabs.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/crash.d.ts +1 -1
- package/dist/commonjs/crash.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
- package/dist/commonjs/customHooks/crashHandler.js +7 -7
- package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
- package/dist/commonjs/customHooks/socketLogger.js +2 -0
- package/dist/commonjs/editor.d.ts +13 -0
- package/dist/commonjs/editor.js +1 -0
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +3 -3
- package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
- package/dist/commonjs/helpers/memoryManager.js +1 -1
- package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
- package/dist/commonjs/helpers/searchQueryParser.js +5 -1
- package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
- package/dist/commonjs/helpers/shareFormatter.js +8 -7
- package/dist/commonjs/helpers/telemetry.js +1 -1
- package/dist/commonjs/i18n/index.d.ts +99 -1
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -1
- package/dist/commonjs/i18n/locales/bn.json +1 -0
- package/dist/commonjs/i18n/locales/de.json +1 -1
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -1
- package/dist/commonjs/i18n/locales/fr.json +1 -1
- package/dist/commonjs/i18n/locales/gu.json +1 -0
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -0
- package/dist/commonjs/i18n/locales/it.json +1 -0
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -0
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -0
- package/dist/commonjs/i18n/locales/mr.json +1 -0
- package/dist/commonjs/i18n/locales/nl.json +1 -0
- package/dist/commonjs/i18n/locales/pa.json +1 -0
- package/dist/commonjs/i18n/locales/pl.json +1 -0
- package/dist/commonjs/i18n/locales/pt.json +1 -1
- package/dist/commonjs/i18n/locales/ru.json +1 -1
- package/dist/commonjs/i18n/locales/ta.json +1 -0
- package/dist/commonjs/i18n/locales/te.json +1 -0
- package/dist/commonjs/i18n/locales/tr.json +1 -0
- package/dist/commonjs/i18n/locales/vi.json +1 -0
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +16 -13
- package/dist/commonjs/index.js +5 -4
- package/dist/commonjs/native/NativeInspector.d.ts +4 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
- package/dist/commonjs/socket.d.ts +4 -0
- package/dist/commonjs/socket.js +1 -0
- package/dist/commonjs/styles/AppColors.d.ts +42 -2
- package/dist/commonjs/styles/AppColors.js +1 -1
- package/dist/commonjs/styles/common.js +1 -1
- package/dist/commonjs/styles/index.d.ts +30 -0
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/editor.d.ts +96 -0
- package/dist/commonjs/types/editor.js +1 -0
- package/dist/commonjs/types/enums.d.ts +40 -0
- package/dist/commonjs/types/enums.js +1 -1
- package/dist/commonjs/types/interfaces.d.ts +143 -1
- package/dist/esm/capture.d.ts +2 -0
- package/dist/esm/capture.js +1 -1
- package/dist/esm/components/AnalyticsDetail.js +31 -31
- package/dist/esm/components/AnalyticsEventCard.js +1 -1
- package/dist/esm/components/AnalyticsGraph.js +74 -74
- package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
- package/dist/esm/components/AnimatedBrandOwl.js +175 -0
- package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
- package/dist/esm/components/AppHeaderLogo.js +7 -5
- package/dist/esm/components/BrandCircleIcon.js +70 -70
- package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
- package/dist/esm/components/BrandSquareIcon.js +139 -0
- package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
- package/dist/esm/components/ConsoleLogCard.js +61 -77
- package/dist/esm/components/Inspector/AboutModal.js +85 -95
- package/dist/esm/components/Inspector/AnalyticsTab.js +24 -24
- package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
- package/dist/esm/components/Inspector/ConfirmationModal.js +30 -0
- package/dist/esm/components/Inspector/ConsoleTab.js +48 -48
- package/dist/esm/components/Inspector/CrashTab.js +203 -168
- package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
- package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
- package/dist/esm/components/Inspector/FabLauncher.js +57 -60
- package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
- package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
- package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
- package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
- package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
- package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
- package/dist/esm/components/Inspector/LanguageSelectorModal.js +172 -0
- package/dist/esm/components/Inspector/MainScreen.js +130 -110
- package/dist/esm/components/Inspector/MediaGalleryTab.js +83 -78
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -139
- package/dist/esm/components/Inspector/NetworkTab.js +130 -130
- package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
- package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
- package/dist/esm/components/Inspector/PushCard.js +23 -22
- package/dist/esm/components/Inspector/PushDetail.js +45 -36
- package/dist/esm/components/Inspector/PushTab.js +23 -23
- package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
- package/dist/esm/components/Inspector/ReduxTab.js +20 -18
- package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
- package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
- package/dist/esm/components/Inspector/SettingsPanel.js +526 -378
- package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
- package/dist/esm/components/Inspector/SocketCard.js +116 -0
- package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
- package/dist/esm/components/Inspector/SocketDetail.js +327 -0
- package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
- package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
- package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
- package/dist/esm/components/Inspector/SocketTab.js +112 -0
- package/dist/esm/components/Inspector/StorageTab.js +139 -137
- package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
- package/dist/esm/components/Inspector/SupportModal.js +125 -0
- package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
- package/dist/esm/components/Inspector/SupportPage.js +227 -0
- package/dist/esm/components/Inspector/TabBar.js +36 -35
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
- package/dist/esm/components/JsonViewer.js +66 -64
- package/dist/esm/components/LogCard.d.ts +3 -2
- package/dist/esm/components/LogCard.js +57 -55
- package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
- package/dist/esm/components/ModuleErrorBoundary.js +23 -23
- package/dist/esm/components/NetworkIcons.d.ts +42 -0
- package/dist/esm/components/NetworkIcons.js +139 -6
- package/dist/esm/components/SegmentedTabs.js +7 -7
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/crash.d.ts +1 -1
- package/dist/esm/crash.js +1 -1
- package/dist/esm/customHooks/crashHandler.d.ts +2 -1
- package/dist/esm/customHooks/crashHandler.js +7 -7
- package/dist/esm/customHooks/socketLogger.d.ts +26 -0
- package/dist/esm/customHooks/socketLogger.js +2 -0
- package/dist/esm/editor.d.ts +13 -0
- package/dist/esm/editor.js +1 -0
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/helpers/memoryManager.d.ts +1 -0
- package/dist/esm/helpers/memoryManager.js +1 -1
- package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
- package/dist/esm/helpers/searchQueryParser.js +5 -1
- package/dist/esm/helpers/settingsStore.d.ts +1 -0
- package/dist/esm/helpers/settingsStore.js +1 -1
- package/dist/esm/helpers/shareFormatter.d.ts +3 -1
- package/dist/esm/helpers/shareFormatter.js +8 -7
- package/dist/esm/helpers/telemetry.js +1 -1
- package/dist/esm/i18n/index.d.ts +99 -1
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -1
- package/dist/esm/i18n/locales/bn.json +1 -0
- package/dist/esm/i18n/locales/de.json +1 -1
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -1
- package/dist/esm/i18n/locales/fr.json +1 -1
- package/dist/esm/i18n/locales/gu.json +1 -0
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -0
- package/dist/esm/i18n/locales/it.json +1 -0
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -0
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -0
- package/dist/esm/i18n/locales/mr.json +1 -0
- package/dist/esm/i18n/locales/nl.json +1 -0
- package/dist/esm/i18n/locales/pa.json +1 -0
- package/dist/esm/i18n/locales/pl.json +1 -0
- package/dist/esm/i18n/locales/pt.json +1 -1
- package/dist/esm/i18n/locales/ru.json +1 -1
- package/dist/esm/i18n/locales/ta.json +1 -0
- package/dist/esm/i18n/locales/te.json +1 -0
- package/dist/esm/i18n/locales/tr.json +1 -0
- package/dist/esm/i18n/locales/vi.json +1 -0
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +16 -13
- package/dist/esm/index.js +8 -7
- package/dist/esm/native/NativeInspector.d.ts +4 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
- package/dist/esm/socket.d.ts +4 -0
- package/dist/esm/socket.js +1 -0
- package/dist/esm/styles/AppColors.d.ts +42 -2
- package/dist/esm/styles/AppColors.js +1 -1
- package/dist/esm/styles/common.js +1 -1
- package/dist/esm/styles/index.d.ts +30 -0
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/editor.d.ts +96 -0
- package/dist/esm/types/editor.js +1 -0
- package/dist/esm/types/enums.d.ts +40 -0
- package/dist/esm/types/enums.js +1 -1
- package/dist/esm/types/interfaces.d.ts +143 -1
- package/editor.d.ts +1 -0
- package/editor.js +1 -0
- package/ios/NetworkInspectorModule.mm +531 -12
- package/package.json +213 -2
- package/react-native-inapp-inspector.podspec +1 -1
- package/src/native/NativeInspector.ts +65 -4
- package/src/native/NativeNetworkInspector.ts +4 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{useState as M,useEffect as _,useMemo as We,useCallback as
|
|
2
|
-
<
|
|
3
|
-
</
|
|
1
|
+
import{useState as M,useEffect as _,useMemo as We,useCallback as ie,useRef as X}from"react";import{View as T,Text as C,ScrollView as Te,StyleSheet as Pe,NativeModules as He,TouchableOpacity as G,ActivityIndicator as Ce,Animated as Z}from"react-native";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as B}from"../../styles/AppFonts";import{useTranslation as $e}from"../../i18n";import Ne from"../QRCodeView";import Se from"../TouchableScale";import{showToast as J}from"../../helpers/toast";import{triggerNativeHaptic as H}from"../../native/NativeInspector";import{InfoCircleIcon as Ee,CheckIcon as Be,BoltIcon as Re,CircleXIcon as Ie,SparkleIcon as Ge,AndroidIcon as Ue,RepeatIcon as _e,WrenchIcon as Ke}from"../NetworkIcons";import Qe,{Path as Xe}from"react-native-svg";const Ze=({color:L=e.purple,size:R=13})=><Qe width={R}height={R}viewBox="0 0 24 24"fill="none">
|
|
2
|
+
<Xe d="M4 17l6-6-6-6M12 19h8"stroke={L}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
|
|
3
|
+
</Qe>;export const DebuggingTab=()=>{const{t:L}=$e(),R=We(()=>{const k=He.SourceCode?.scriptURL||"";let V="localhost",S=8081;try{if(k.includes("://")){const v=k.split("://")[1].split("/")[0];if(v.includes(":")){const A=v.split(":");V=A[0];const P=parseInt(A[1],10);isNaN(P)||(S=P)}else V=v}}catch{}return{host:V,port:S,scriptURL:k}},[]),[Y,Ve]=M(()=>R.host&&R.host!=="localhost"&&R.host!=="127.0.0.1"&&R.host!=="10.0.2.2"?R.host:"192.168.1.2"),[$,ze]=M(R.port||8083),[De,ee]=M("app-debug.apk"),[q,oe]=M(null),[F,te]=M("assembleRelease"),[W,ve]=M(!0),[I,U]=M({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),D=X(null),K=X(new Z.Value(0)).current,[Q,Ae]=M(!0),re=X(null);_(()=>{Z.timing(K,{toValue:Math.max(0,Math.min(100,I.progress)),duration:350,useNativeDriver:!1}).start()},[I.progress,K]),_(()=>{I.logs&&I.logs.length>0&&setTimeout(()=>{re.current?.scrollToEnd({animated:!0})},50)},[I.logs]);const E=ie(async()=>{const k=Array.from(new Set([R.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),V=Array.from(new Set([R.port,8083,8081,8082].filter(Boolean)));for(const S of k)for(const O of V)try{const v=new AbortController,A=setTimeout(()=>v.abort(),1200),P=await fetch(`http://${S}:${O}/__inapp_inspector/apk-info`,{signal:v.signal});if(clearTimeout(A),P.ok){const z=await P.json();z.hostIp&&z.hostIp!=="127.0.0.1"&&z.hostIp!=="localhost"&&z.hostIp!=="10.0.2.2"&&Ve(z.hostIp),z.port&&ze(z.port),z.apkName&&ee(z.apkName),z.apkSize&&oe((z.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[R.host,R.port]);_(()=>{E()},[E]),_(()=>()=>{D.current&&clearInterval(D.current)},[]);const Fe=ie(()=>{D.current&&clearInterval(D.current);const k=R.host||"10.0.2.2";D.current=setInterval(async()=>{try{const V=await fetch(`http://${k}:${$}/__inapp_inspector/build-status`);if(V.ok){const S=await V.json();U(S),S.status==="completed"?(D.current&&clearInterval(D.current),H("success"),J(L("debugging.buildSuccess","APK Build Generated Successfully!")),S.apkSize&&oe((S.apkSize/(1024*1024)).toFixed(1)),S.apkName&&ee(S.apkName),E()):S.status==="failed"&&(D.current&&clearInterval(D.current),H("error"),J(L("debugging.buildFailed",{error:S.error||"Gradle error"})))}}catch{}},1e3)},[R.host,$,E]),Oe=async()=>{H("medium"),U({status:"running",scheme:F,clean:W,progress:5,currentTask:W?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const k=Array.from(new Set([R.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),V=Array.from(new Set([$,8083,8081,8082].filter(Boolean)));let S=!1;for(const O of k)for(const v of V)try{const A=new AbortController,P=setTimeout(()=>A.abort(),2e3),z=await fetch(`http://${O}:${v}/__inapp_inspector/build-apk?scheme=${F}&clean=${W}`,{signal:A.signal});if(clearTimeout(P),z.ok){S=!0,Fe();return}}catch{}S||U(O=>({...O,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},Me=async()=>{H("warning"),D.current&&clearInterval(D.current);const k=Array.from(new Set([R.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),V=Array.from(new Set([$,8083,8081,8082].filter(Boolean)));for(const S of k)for(const O of V)try{const v=new AbortController,A=setTimeout(()=>v.abort(),1500);await fetch(`http://${S}:${O}/__inapp_inspector/stop-build`,{signal:v.signal}),clearTimeout(A)}catch{}U(S=>({...S,status:"idle",currentTask:L("debugging.buildCancelled","Build cancelled by user"),logs:[...S.logs||[],`[Build] ${L("debugging.buildCancelled","Build cancelled by user")}.`]})),J(L("debugging.buildCancelled","Build cancelled"))},Le=`http://${Y}:${$}/${De.replace(/^\/+/,"")}`,N=I.status==="running";return<Te style={o.scrollArea}contentContainerStyle={o.scrollContent}showsVerticalScrollIndicator={!1}>
|
|
4
4
|
|
|
5
5
|
<T style={o.heroCard}>
|
|
6
6
|
<T style={o.heroHeader}>
|
|
7
7
|
<T style={o.heroIconWrap}>
|
|
8
|
-
<
|
|
8
|
+
<Ue size={20}color={e.white}/>
|
|
9
9
|
</T>
|
|
10
10
|
<T style={{flex:1,minWidth:0}}>
|
|
11
11
|
<C style={o.heroTitle}numberOfLines={1}>
|
|
@@ -26,13 +26,13 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
26
26
|
<T style={o.heroMetricItem}>
|
|
27
27
|
<C style={o.heroMetricLabel}>HOST IP</C>
|
|
28
28
|
<C style={o.heroMetricValue}numberOfLines={1}>
|
|
29
|
-
{
|
|
29
|
+
{Y}
|
|
30
30
|
</C>
|
|
31
31
|
</T>
|
|
32
32
|
<T style={o.heroMetricDivider}/>
|
|
33
33
|
<T style={o.heroMetricItem}>
|
|
34
34
|
<C style={o.heroMetricLabel}>PORT</C>
|
|
35
|
-
<C style={o.heroMetricValue}>{
|
|
35
|
+
<C style={o.heroMetricValue}>{$}</C>
|
|
36
36
|
</T>
|
|
37
37
|
<T style={o.heroMetricDivider}/>
|
|
38
38
|
<T style={o.heroMetricItem}>
|
|
@@ -56,7 +56,7 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
56
56
|
<T style={o.sectionHeaderRow}>
|
|
57
57
|
<C style={o.sectionTitle}>QR CODE & DIRECT DOWNLOAD</C>
|
|
58
58
|
<G activeOpacity={.7}onPress={E}style={o.refreshBtn}>
|
|
59
|
-
<
|
|
59
|
+
<_e size={12}color={e.purple}/>
|
|
60
60
|
<C style={o.refreshBtnText}>Refresh</C>
|
|
61
61
|
</G>
|
|
62
62
|
</T>
|
|
@@ -64,7 +64,7 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
64
64
|
|
|
65
65
|
<T style={o.qrCenteredWrapper}>
|
|
66
66
|
<T style={o.qrInnerFrame}>
|
|
67
|
-
|
|
67
|
+
<Ne value={Le}size={235}color={e.primaryBlack}backgroundColor={e.white}/>
|
|
68
68
|
</T>
|
|
69
69
|
</T>
|
|
70
70
|
</T>
|
|
@@ -76,7 +76,7 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
76
76
|
<Re size={13}color={e.purple}/>
|
|
77
77
|
<C style={o.sectionTitle}>BUILD GENERATOR (GRADLE)</C>
|
|
78
78
|
</T>
|
|
79
|
-
{
|
|
79
|
+
{I.status==="completed"&&<T style={o.completedBadge}>
|
|
80
80
|
<Be size={10}color={e.emerald500}/>
|
|
81
81
|
<C style={o.completedBadgeText}>100% Ready</C>
|
|
82
82
|
</T>}
|
|
@@ -84,7 +84,7 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
<T style={o.subTabStrip}>
|
|
87
|
-
<G disabled={
|
|
87
|
+
<G disabled={N}activeOpacity={.7}onPress={()=>{H("light"),te("assembleRelease")}}style={[o.subTabItem,F==="assembleRelease"&&o.subTabItemActive]}>
|
|
88
88
|
<T style={{flexDirection:"row",alignItems:"center",gap:5}}>
|
|
89
89
|
<Re size={12}color={F==="assembleRelease"?e.white:e.grayText}/>
|
|
90
90
|
<C style={[o.subTabText,F==="assembleRelease"&&o.subTabTextActive]}>
|
|
@@ -93,9 +93,9 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
93
93
|
</T>
|
|
94
94
|
</G>
|
|
95
95
|
|
|
96
|
-
<G disabled={
|
|
96
|
+
<G disabled={N}activeOpacity={.7}onPress={()=>{H("light"),te("assembleDebug")}}style={[o.subTabItem,F==="assembleDebug"&&o.subTabItemActive]}>
|
|
97
97
|
<T style={{flexDirection:"row",alignItems:"center",gap:5}}>
|
|
98
|
-
<
|
|
98
|
+
<Ke size={12}color={F==="assembleDebug"?e.white:e.grayText}/>
|
|
99
99
|
<C style={[o.subTabText,F==="assembleDebug"&&o.subTabTextActive]}>
|
|
100
100
|
Debug (assembleDebug)
|
|
101
101
|
</C>
|
|
@@ -104,9 +104,9 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
104
104
|
</T>
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
<G disabled={
|
|
108
|
-
<T style={[o.checkboxBox,
|
|
109
|
-
{
|
|
107
|
+
<G disabled={N}activeOpacity={.7}onPress={()=>{H("light"),ve(!W)}}style={o.cleanRow}>
|
|
108
|
+
<T style={[o.checkboxBox,W&&o.checkboxBoxActive]}>
|
|
109
|
+
{W&&<Be size={11}color={e.white}/>}
|
|
110
110
|
</T>
|
|
111
111
|
<C style={o.cleanLabel}>
|
|
112
112
|
Clean build cache <C style={o.cleanCode}>(./gradlew clean)</C>
|
|
@@ -114,16 +114,16 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
114
114
|
</G>
|
|
115
115
|
|
|
116
116
|
|
|
117
|
-
{
|
|
117
|
+
{N&&<T style={o.progressContainer}>
|
|
118
118
|
<T style={o.progressTopRow}>
|
|
119
119
|
<T style={o.progressTaskGroup}>
|
|
120
120
|
<Ce size="small"color={e.purple}/>
|
|
121
121
|
<C style={o.progressTaskText}numberOfLines={1}>
|
|
122
|
-
{
|
|
122
|
+
{I.currentTask||"Executing Gradle tasks..."}
|
|
123
123
|
</C>
|
|
124
124
|
</T>
|
|
125
125
|
<C style={o.progressPercentageText}>
|
|
126
|
-
{
|
|
126
|
+
{I.progress}%
|
|
127
127
|
</C>
|
|
128
128
|
</T>
|
|
129
129
|
|
|
@@ -134,18 +134,18 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
134
134
|
</T>}
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
{
|
|
137
|
+
{I.status==="failed"&&<T style={o.errorContainer}>
|
|
138
138
|
<Ie size={13}color={e.errorColor}/>
|
|
139
139
|
<C style={o.errorText}numberOfLines={2}>
|
|
140
|
-
{
|
|
140
|
+
{I.error||"Build execution failed."}
|
|
141
141
|
</C>
|
|
142
142
|
</T>}
|
|
143
143
|
|
|
144
144
|
|
|
145
|
-
{(
|
|
145
|
+
{(I.logs&&I.logs.length>0||N)&&<T style={o.consoleContainer}>
|
|
146
146
|
<T style={o.consoleHeaderRow}>
|
|
147
147
|
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
148
|
-
<
|
|
148
|
+
<Ze color={e.sky400}size={12}/>
|
|
149
149
|
<C style={o.consoleHeaderTitle}>GRADLE VERBOSE OUTPUT</C>
|
|
150
150
|
</T>
|
|
151
151
|
<G activeOpacity={.7}onPress={()=>Ae(!Q)}style={o.consoleToggleBtn}>
|
|
@@ -155,8 +155,8 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
155
155
|
</G>
|
|
156
156
|
</T>
|
|
157
157
|
|
|
158
|
-
{Q&&<Te ref={
|
|
159
|
-
{
|
|
158
|
+
{Q&&<Te ref={re}style={o.consoleLogBox}contentContainerStyle={o.consoleLogContent}nestedScrollEnabled showsVerticalScrollIndicator>
|
|
159
|
+
{I.logs&&I.logs.length>0?I.logs.map((k,V)=>{let S=e.slate400;return k.startsWith("> Task :")?S=e.sky400:k.includes("BUILD SUCCESSFUL")?S=e.buildSuccessGreen:k.includes("FAILURE")||k.includes("error:")?S=e.buildFailureRed:k.includes("UP-TO-DATE")&&(S=e.purple400),<C key={V}style={[o.consoleLogLine,{color:S}]}>
|
|
160
160
|
{k}
|
|
161
161
|
</C>}):<C style={o.consoleLogPlaceholder}>
|
|
162
162
|
Waiting for Gradle daemon output...
|
|
@@ -165,11 +165,11 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
165
165
|
</T>}
|
|
166
166
|
|
|
167
167
|
|
|
168
|
-
{
|
|
168
|
+
{N?<T style={o.buildingActionsRow}>
|
|
169
169
|
<T style={o.buildingStatusPill}>
|
|
170
170
|
<Ce size="small"color={e.purple}/>
|
|
171
171
|
<C style={o.buildingStatusPillText}numberOfLines={1}>
|
|
172
|
-
Building ({
|
|
172
|
+
Building ({I.progress}%)
|
|
173
173
|
</C>
|
|
174
174
|
</T>
|
|
175
175
|
|
|
@@ -179,9 +179,9 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
179
179
|
</Se>
|
|
180
180
|
</T>:<Se onPress={Oe}style={o.generateBtn}>
|
|
181
181
|
<T style={o.ctaContentRow}>
|
|
182
|
-
<
|
|
182
|
+
<Ge size={14}color={e.white}/>
|
|
183
183
|
<C style={o.generateBtnText}>
|
|
184
|
-
{
|
|
184
|
+
{W?"Clean & Generate Build":"Generate Build"}
|
|
185
185
|
</C>
|
|
186
186
|
</T>
|
|
187
187
|
</Se>}
|
|
@@ -189,7 +189,7 @@ import{useState as M,useEffect as _,useMemo as We,useCallback as re,useRef as X}
|
|
|
189
189
|
|
|
190
190
|
|
|
191
191
|
<T style={o.footerNoteRow}>
|
|
192
|
-
<
|
|
192
|
+
<Ee size={13}color={e.grayTextWeak}/>
|
|
193
193
|
<C style={o.footerNoteText}>
|
|
194
194
|
Ensure both Android devices are connected to the same Wi-Fi network.
|
|
195
195
|
</C>
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"react";import{View as
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"react";import{View as T,Text as I,ScrollView as Ee,TextInput as Xe,Dimensions as Ue,Platform as w,PixelRatio as ze,StatusBar as Ze,StyleSheet as Qe,NativeModules as q}from"react-native";import Z from"../TouchableScale";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as D}from"../../styles/AppFonts";import{useTranslation as et}from"../../i18n";import{CpuIcon as St,WifiIcon as Ct,ScreenIcon as Tt,LayersIcon as $t,KeyIcon as Oe,SearchIcon as He,ClearIcon as It,CopyIcon as Se,BoltIcon as Mt,AppleIcon as Bt,AndroidIcon as Dt,ExportIcon as At}from"../NetworkIcons";import{getNativeDeviceMetrics as Vt,getNativeSystemMetrics as Lt}from"../../native/NativeInspector";import{copyToClipboard as ae,getAppName as Rt}from"../../helpers";import{showToast as ie}from"../../helpers/toast";import{LIB_VERSION as le}from"../../constants";const S=Ve.memo(({label:A,value:V,copyable:fe=!0,badge:C,subtext:re,isLast:$=!1})=>{const ne=V==null?"\u2014":typeof V=="boolean"?V?"Yes":"No":typeof V=="number"?V.toLocaleString():String(V);return<T style={[r.infoRow,$&&{borderBottomWidth:0}]}>
|
|
2
|
+
<T style={{flex:1,paddingRight:8,minWidth:0}}>
|
|
3
|
+
<T style={{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:6}}>
|
|
4
4
|
<I style={r.infoLabel}numberOfLines={2}>{A}</I>
|
|
5
|
-
{C
|
|
5
|
+
{C&&<T style={[r.infoBadge,{backgroundColor:C.bg,borderColor:`${C.color}33`}]}>
|
|
6
6
|
<I style={[r.infoBadgeText,{color:C.color}]}>
|
|
7
7
|
{C.text}
|
|
8
8
|
</I>
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
</T>}
|
|
10
|
+
</T>
|
|
11
11
|
{re&&<I style={r.infoSubtext}numberOfLines={2}>{re}</I>}
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
</T>
|
|
13
|
+
<T style={{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0,maxWidth:"58%",justifyContent:"flex-end"}}>
|
|
14
14
|
<I style={[r.infoValue,typeof V=="boolean"&&{color:V?e.emerald500:e.errorColor}]}numberOfLines={3}selectable>
|
|
15
15
|
{ne}
|
|
16
16
|
</I>
|
|
17
17
|
{fe&&V!==null&&V!==void 0&&<Z hitSlop={8}onPress={()=>{ae(ne,A),ie(`Copied ${A}`)}}style={r.rowCopyBtn}>
|
|
18
18
|
<Se size={11}color={e.grayTextWeak}/>
|
|
19
19
|
</Z>}
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
</T>
|
|
21
|
+
</T>});export const DeviceInfoTab=Ve.memo(()=>{const{t:A}=et(),[V,fe]=oe("overview"),[C,re]=oe(""),[$,ne]=oe(null),[Re,Ne]=oe(null),[H,we]=oe("Detecting..."),[J,Ce]=oe("0s"),Fe=Ve.useRef(Date.now()),ve=Pe(async()=>{try{const[f,R]=await Promise.all([Vt(),Lt()]);ne(f),Ne(R)}catch{}},[]);Le(()=>{ve();const f=setInterval(ve,3e3);return()=>clearInterval(f)},[ve]),Le(()=>{let f=!0;return(async()=>{try{const M=q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||q?.DevSettings?.serverHost;if(M&&typeof M=="string"){const B=M.split(":")[0].replace(/https?:\/\//,"");if(B&&B!=="localhost"&&B!=="127.0.0.1"){f&&we(B);return}}}catch{}try{const M=new AbortController,B=setTimeout(()=>M.abort(),1200),N=await fetch("https://api.ipify.org?format=json",{signal:M.signal});if(clearTimeout(B),N.ok){const G=await N.json();if(G&&G.ip&&f){we(G.ip);return}}}catch{}f&&we(w.OS==="android"?"10.0.2.15 (Local)":"127.0.0.1 (Local)")})(),()=>{f=!1}},[]),Le(()=>{const f=()=>{const M=Math.floor((Date.now()-Fe.current)/1e3),B=Math.floor(M/3600),N=Math.floor(M%3600/60),G=M%60;B>0?Ce(`${B}h ${N}m ${G}s`):N>0?Ce(`${N}m ${G}s`):Ce(`${G}s`)},R=setInterval(f,1e3);return f(),()=>clearInterval(R)},[]);const z=Ue.get("window"),E=Ue.get("screen"),L=ze.get(),X=ze.getFontScale(),j=z.width>=600||z.height>=1e3,Q=z.width>z.height,ee=w.OS==="android"?Ze.currentHeight||24:z.height>=812?44:20,k=F(()=>{const f=`${w.OS}-${w.Version}-${E.width}x${E.height}-${L}-${w.constants?.Brand||"generic"}-${w.constants?.Model||"device"}`;let R=3735928559,M=1103547991,B=305419896,N=2271560481;for(let Ae=0;Ae<f.length;Ae++){const de=f.charCodeAt(Ae);R=Math.imul(R^de,2654435761)>>>0,M=Math.imul(M^de,1597334677)>>>0,B=Math.imul(B^de,374761393)>>>0,N=Math.imul(N^de,668265263)>>>0}const G=R.toString(16).padStart(8,"0").toUpperCase(),je=(M&65535).toString(16).padStart(4,"0").toUpperCase(),Ye=(M>>>16&4095|16384).toString(16).padStart(4,"0").toUpperCase(),Ke=(B>>>16&16383|32768).toString(16).padStart(4,"0").toUpperCase(),qe=(B.toString(16).padStart(8,"0")+(N&65535).toString(16).padStart(4,"0")).slice(0,12).toUpperCase();return`${G}-${je}-${Ye}-${Ke}-${qe}`},[E.width,E.height,L]),U=!!global?.HermesInternal,Y=!!globalThis?.__turboModuleProxy,te=F(()=>{const f=w.constants?.reactNativeVersion;return f?`${f.major}.${f.minor}.${f.patch}${f.prerelease!=null?`-${f.prerelease}`:""}`:"0.74+"},[]),P=$?.totalRAM?Math.round($.totalRAM/(1024*1024)):Re?.totalPhysicalRamMb||4096,O=$?.freeRAM?Math.round($.freeRAM/(1024*1024)):Math.max(0,P-(Re?.residentRamMb||1200)),K=Math.max(0,P-O),se=P>0?Math.round(K/P*100):45,W=$?.totalStorage?($.totalStorage/(1024*1024*1024)).toFixed(1):"128.0",_=$?.freeStorage?($.freeStorage/(1024*1024*1024)).toFixed(1):"64.2",We=F(()=>[{key:"overview",label:A("device.subTabs.overview","Overview"),themeColor:e.sky600,icon:f=><$t size={12}color={f}/>},{key:"hardware",label:A("device.subTabs.hardware","Hardware"),themeColor:e.orange600,icon:f=><St size={12}color={f}/>},{key:"network",label:A("device.subTabs.network","Network & IP"),themeColor:e.teal600,icon:f=><Ct size={12}color={f}/>},{key:"display",label:A("device.subTabs.display","Display"),themeColor:e.pink600,icon:f=><Tt size={12}color={f}/>},{key:"runtime",label:A("device.subTabs.runtime","Runtime & App"),themeColor:e.amber600,icon:f=><Mt size={12}color={f}/>},{key:"security",label:A("device.subTabs.security","Security & IDs"),themeColor:e.errorColor,icon:f=><Oe size={12}color={f}/>}],[A]),o=F(()=>({identifiers:{pseudoUDID:k,bundleId:$?.appBundleId||$?.appPackageName||"com.app.inspector"},hardware:{model:$?.deviceModel||w.constants?.Model||"Unknown Device",brand:$?.deviceBrand||w.constants?.Brand||(w.OS==="ios"?"Apple":"Android"),osVersion:`${w.OS} ${w.Version}`,apiLevel:$?.apiLevel||w.constants?.Version||null,cpuAbi:$?.cpuAbi||w.constants?.ServerHost||"arm64-v8a",totalRamMb:P,freeRamMb:O,usedRamMb:K,totalStorageGb:`${W} GB`,freeStorageGb:`${_} GB`,batteryPercent:$?.batteryPercent??100,isCharging:$?.isCharging??!1},network:{ipAddress:H,isWifi:!0,reachability:"Online"},display:{windowWidth:z.width,windowHeight:z.height,screenWidth:E.width,screenHeight:E.height,pixelRatio:L,fontScale:X,statusBarHeight:ee,isTablet:j,orientation:Q?"Landscape":"Portrait"},runtime:{appName:Rt(),appVersion:$?.appVersion||"1.0.0",appBuild:$?.appBuild||"1",reactNativeVersion:te,inspectorVersion:le,isHermes:U,isTurboModule:Y,isDev:__DEV__,jsEngine:U?"Hermes":"JSC",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:Intl.DateTimeFormat().resolvedOptions().locale,sessionUptime:J}}),[k,$,P,O,K,W,_,H,z,E,L,X,ee,j,Q,te,U,Y,J]),_e=()=>{ae(JSON.stringify(o,null,2),"Device Full Report"),ie(A("device.copiedJson","Copied Full Device JSON Report!"))},Ge=()=>{const f=`# Device Information Report
|
|
22
22
|
**Generated by React Native In-App Inspector v${le}**
|
|
23
23
|
|
|
24
24
|
## \u{1F4F1} Hardware & System
|
|
@@ -51,16 +51,16 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
51
51
|
## \u{1F511} Identifiers & Security
|
|
52
52
|
- **Pseudo-UDID:** \`${k}\`
|
|
53
53
|
- **Bundle ID:** \`${o.identifiers.bundleId}\`
|
|
54
|
-
`;ae(f,"Device Markdown Report"),ie(A("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},t=Pe((f,R,M)=>{if(!C.trim())return!0;const B=C.toLowerCase().trim(),N=R!=null?typeof R=="object"?JSON.stringify(R):String(R):"",G=M!=null?String(M):"";return f.toLowerCase().includes(B)||N.toLowerCase().includes(B)||G.toLowerCase().includes(B)},[C])
|
|
54
|
+
`;ae(f,"Device Markdown Report"),ie(A("device.copiedMarkdown","Copied Markdown Report to Clipboard!"))},t=Pe((f,R,M)=>{if(!C.trim())return!0;const B=C.toLowerCase().trim(),N=R!=null?typeof R=="object"?JSON.stringify(R):String(R):"",G=M!=null?String(M):"";return f.toLowerCase().includes(B)||N.toLowerCase().includes(B)||G.toLowerCase().includes(B)},[C]),Te=F(()=>C.trim()?t("Model",$?.deviceModel||w.constants?.Model)||t("OS",w.OS)||t("IP Address",H)||t("RAM",`${K.toLocaleString()}/${P.toLocaleString()}`)||t("Uptime",J):!0,[C,t,$,H,K,P,J]),$e=F(()=>C.trim()?t("Device Model",o.hardware.model)||t("Manufacturer",o.hardware.brand)||t("Operating System",o.hardware.osVersion)||t("IP Address",H)||t("RAM Memory",`${K.toLocaleString()} MB / ${P.toLocaleString()} MB (${se}%)`,`Free Memory: ${O.toLocaleString()} MB`)||t("Storage Capacity",`${_} GB Free / ${W} GB Total`)||t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)||t("JavaScript Engine",U?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")||t("UDID Identifier",k):!0,[C,t,o,H,K,P,se,O,_,W,U,k]),xe=F(()=>C.trim()?t("CPU Architecture",o.hardware.cpuAbi)||t("Total RAM",`${P.toLocaleString()} MB`)||t("Free RAM",`${O.toLocaleString()} MB`)||t("Storage Capacity",`${W} GB`)||t("Available Storage",`${_} GB`)||t("Battery",`${$?.batteryPercent??100}%`)||t("API Level",`API ${$?.apiLevel||w.Version}`)||t("Thermal State","Nominal (Cool)"):!0,[C,t,o,P,O,W,_,$]),Ie=F(()=>C.trim()?t("IP Address",H)||t("Internet Reachability","Connected")||t("Connection Type","Wi-Fi / Local Area Network")||t("Metro Dev Server",q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||"localhost:8081")||t("WebSocket Protocol","Active & Enabled")||t("Network Inspector Interceptor","Intercepting XHR & Fetch"):!0,[C,t,H]),Me=F(()=>C.trim()?t("Window Resolution",`${Math.round(z.width).toLocaleString()} \xD7 ${Math.round(z.height).toLocaleString()} pt`)||t("Screen Physical Size",`${Math.round(E.width*L).toLocaleString()} \xD7 ${Math.round(E.height*L).toLocaleString()} px`)||t("Pixel Density",`@${L}x (${Math.round(L*160).toLocaleString()} dpi)`)||t("Font Scale",`${X}x`)||t("Form Factor",j?"Tablet":"Smartphone")||t("Orientation",Q?"Landscape":"Portrait")||t("Status Bar Height",`${ee} pt`):!0,[C,t,z,E,L,X,j,Q,ee]),Be=F(()=>C.trim()?t("App Name",o.runtime.appName)||t("Bundle ID",o.identifiers.bundleId)||t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)||t("React Native",`v${te}`)||t("In-App Inspector Version",`v${le}`)||t("Hermes Engine",U?"Enabled (AOT Bytecode)":"Disabled (JSC)")||t("New Architecture",Y?"Enabled":"Legacy Bridge")||t("Build Type",__DEV__?"Debug (__DEV__ = true)":"Release / Production")||t("Timezone",o.runtime.timezone)||t("Locale",o.runtime.locale)||t("Session Uptime",J):!0,[C,t,o,te,U,Y,J]),De=F(()=>C.trim()?t("Pseudo-UDID",k)||t("Bundle ID",o.identifiers.bundleId)||t("Root / Jailbreak","Clean (Standard Sandbox)")||t("Simulator / Emulator",w.constants?.Model?.includes?.("sdk")||w.constants?.Model?.includes?.("Emulator")||w.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")||t("Sandbox Integrity","Enforced by OS Kernel"):!0,[C,t,k,o]),Je=F(()=>C.trim()?Te||$e||xe||Ie||Me||Be||De:!0,[C,Te,$e,xe,Ie,Me,Be,De]);return<T style={r.container}>
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
<T style={r.actionBar}>
|
|
57
|
+
<T style={r.searchBar}>
|
|
58
58
|
<He size={14}color={e.grayTextWeak}/>
|
|
59
59
|
<Xe value={C}onChangeText={re}placeholder={A("device.searchPlaceholder","Search specs, UDID, IP, screen...")}placeholderTextColor={e.grayTextWeak}style={r.searchInput}clearButtonMode="while-editing"/>
|
|
60
60
|
{C.length>0&&<Z onPress={()=>re("")}hitSlop={8}>
|
|
61
61
|
<It size={13}color={e.grayTextWeak}/>
|
|
62
62
|
</Z>}
|
|
63
|
-
|
|
63
|
+
</T>
|
|
64
64
|
|
|
65
65
|
<Z onPress={_e}style={r.exportButton}hitSlop={6}>
|
|
66
66
|
<At size={12}color={e.purple}/>
|
|
@@ -71,49 +71,49 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
71
71
|
<Se size={12}color={e.emerald500}/>
|
|
72
72
|
<I style={[r.exportButtonText,{color:e.emerald500}]}>MD</I>
|
|
73
73
|
</Z>
|
|
74
|
-
|
|
74
|
+
</T>
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
<T style={r.subTabsWrapper}>
|
|
78
78
|
<Ee horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.subTabsContainer}>
|
|
79
79
|
{We.map(f=>{const R=V===f.key,M=f.themeColor||e.purple,B=R?e.white:M;return<Z key={f.key}onPress={()=>fe(f.key)}>
|
|
80
|
-
|
|
80
|
+
<T style={[r.subTabPill,R&&{backgroundColor:M,borderColor:M},!R&&{backgroundColor:`${M}12`,borderColor:`${M}30`}]}>
|
|
81
81
|
{f.icon(B)}
|
|
82
82
|
<I style={[r.subTabPillText,R&&{color:e.white},!R&&{color:e.primaryBlack}]}>
|
|
83
83
|
{f.label}
|
|
84
84
|
</I>
|
|
85
|
-
|
|
85
|
+
</T>
|
|
86
86
|
</Z>})}
|
|
87
87
|
</Ee>
|
|
88
|
-
|
|
88
|
+
</T>
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
<Ee style={r.scrollArea}contentContainerStyle={r.scrollContent}showsVerticalScrollIndicator={!1}>
|
|
91
|
+
<Ee style={[r.scrollArea,{flex:1}]}contentContainerStyle={[r.scrollContent,{flexGrow:1}]}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled">
|
|
92
92
|
|
|
93
|
-
{(!C.trim()||t("UDID Identifier",k)||t("UUID",k)||t("Device UUID",k))
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
{(!C.trim()||t("UDID Identifier",k)||t("UUID",k)||t("Device UUID",k))&&<T style={r.featuredUuidCard}>
|
|
94
|
+
<T style={r.featuredUuidHeader}>
|
|
95
|
+
<T style={r.featuredUuidTitleRow}>
|
|
96
|
+
<T style={r.featuredUuidIconWrap}>
|
|
97
97
|
<Oe size={14}color={e.white}/>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
</T>
|
|
99
|
+
<T style={{flex:1,minWidth:0}}>
|
|
100
|
+
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
101
101
|
<I style={r.featuredUuidLabel}>DEVICE UUID</I>
|
|
102
|
-
|
|
102
|
+
<T style={r.featuredBadge}>
|
|
103
103
|
<I style={r.featuredBadgeText}>FEATURED</I>
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
</T>
|
|
105
|
+
</T>
|
|
106
106
|
<I style={r.featuredUuidSubtext}>
|
|
107
107
|
Deterministic hardware pseudo-identifier
|
|
108
108
|
</I>
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
</T>
|
|
110
|
+
</T>
|
|
111
111
|
|
|
112
112
|
<Z onPress={()=>{ae(k,"Device UUID"),ie(A("device.copiedUuid","Copied Device UUID to clipboard!"))}}style={r.featuredCopyBtn}hitSlop={6}accessibilityRole="button"accessibilityLabel="Copy Device UUID">
|
|
113
113
|
<Se size={11}color={e.white}/>
|
|
114
114
|
<I style={r.featuredCopyBtnText}>Copy</I>
|
|
115
115
|
</Z>
|
|
116
|
-
|
|
116
|
+
</T>
|
|
117
117
|
|
|
118
118
|
<Z onPress={()=>{ae(k,"Device UUID"),ie(A("device.copiedUuid","Copied Device UUID to clipboard!"))}}style={r.featuredUuidValueBox}hitSlop={4}accessibilityRole="button"accessibilityLabel="Tap to copy UUID">
|
|
119
119
|
<I style={r.featuredUuidValueText}numberOfLines={1}ellipsizeMode="middle"selectable>
|
|
@@ -121,53 +121,53 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
121
121
|
</I>
|
|
122
122
|
<Se size={12}color={e.brandPurple}/>
|
|
123
123
|
</Z>
|
|
124
|
-
|
|
124
|
+
</T>}
|
|
125
125
|
|
|
126
126
|
|
|
127
|
-
{(!C.trim()
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
{(!C.trim()||Te)&&<T style={r.heroCard}>
|
|
128
|
+
<T style={r.heroHeader}>
|
|
129
|
+
<T style={r.heroIconWrap}>
|
|
130
130
|
{w.OS==="ios"?<Bt size={20}color={e.white}/>:<Dt size={20}color={e.white}/>}
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
</T>
|
|
132
|
+
<T style={{flex:1,minWidth:0}}>
|
|
133
133
|
<I style={r.heroTitle}numberOfLines={1}ellipsizeMode="tail">
|
|
134
|
-
{
|
|
134
|
+
{$?.deviceModel||w.constants?.Model||(w.OS==="ios"?"Apple iPhone":"Android Device")}
|
|
135
135
|
</I>
|
|
136
136
|
<I style={r.heroSubtitle}numberOfLines={1}ellipsizeMode="tail">
|
|
137
|
-
{w.OS==="ios"?`iOS ${w.Version}`:`Android ${w.Version} (API ${
|
|
137
|
+
{w.OS==="ios"?`iOS ${w.Version}`:`Android ${w.Version} (API ${$?.apiLevel||w.Version})`}
|
|
138
138
|
</I>
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
</T>
|
|
140
|
+
<T style={r.heroBadge}>
|
|
141
|
+
<T style={r.pulseDot}/>
|
|
142
142
|
<I style={r.heroBadgeText}>LIVE</I>
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
</T>
|
|
144
|
+
</T>
|
|
145
145
|
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
<T style={r.heroMetricsStrip}>
|
|
148
|
+
<T style={r.heroMetricItem}>
|
|
149
149
|
<I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{A("device.ipAddress","IP ADDRESS")}</I>
|
|
150
150
|
<I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
|
|
151
151
|
{H}
|
|
152
152
|
</I>
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
</T>
|
|
154
|
+
<T style={r.heroMetricDivider}/>
|
|
155
|
+
<T style={r.heroMetricItem}>
|
|
156
156
|
<I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{A("device.ramUsedTotal","RAM (USED/TOTAL)")}</I>
|
|
157
157
|
<I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">
|
|
158
158
|
{K.toLocaleString()}/{P.toLocaleString()} MB
|
|
159
159
|
</I>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
160
|
+
</T>
|
|
161
|
+
<T style={r.heroMetricDivider}/>
|
|
162
|
+
<T style={r.heroMetricItem}>
|
|
163
163
|
<I style={r.heroMetricLabel}numberOfLines={1}ellipsizeMode="tail">{A("device.uptime","UPTIME")}</I>
|
|
164
164
|
<I style={r.heroMetricValue}numberOfLines={1}ellipsizeMode="tail">{J}</I>
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
</T>
|
|
166
|
+
</T>
|
|
167
|
+
</T>}
|
|
168
168
|
|
|
169
169
|
|
|
170
|
-
{(V==="overview"||C.length>0)
|
|
170
|
+
{(V==="overview"||C.length>0)&&$e&&<T style={r.sectionCard}>
|
|
171
171
|
<I style={r.sectionTitle}>DEVICE OVERVIEW</I>
|
|
172
172
|
{t("Device Model",o.hardware.model)&&<S label="Device Model"value={o.hardware.model}/>}
|
|
173
173
|
{t("Manufacturer",o.hardware.brand)&&<S label="Manufacturer / Brand"value={o.hardware.brand}/>}
|
|
@@ -178,23 +178,23 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
178
178
|
{t("App Version",`v${o.runtime.appVersion} (${o.runtime.appBuild})`)&&<S label="Host App Version"value={`v${o.runtime.appVersion} (${o.runtime.appBuild})`}/>}
|
|
179
179
|
{t("JavaScript Engine",U?"Hermes Bytecode Engine":"JavaScriptCore (JSC)")&&<S label="JS Runtime Engine"value={U?"Hermes Bytecode Engine":"JavaScriptCore (JSC)"}badge={U?{text:"HERMES",color:e.purple,bg:`${e.purple}18`}:{text:"JSC",color:e.sky500,bg:`${e.sky500}18`}}/>}
|
|
180
180
|
{t("UDID Identifier",k)&&<S label="Pseudo-UDID"value={k}isLast/>}
|
|
181
|
-
|
|
181
|
+
</T>}
|
|
182
182
|
|
|
183
183
|
|
|
184
|
-
{(V==="hardware"||C.length>0)&&xe
|
|
184
|
+
{(V==="hardware"||C.length>0)&&xe&&<T style={r.sectionCard}>
|
|
185
185
|
<I style={r.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</I>
|
|
186
186
|
{t("CPU Architecture",o.hardware.cpuAbi)&&<S label="CPU Architecture / ABI"value={o.hardware.cpuAbi}badge={{text:"64-BIT",color:e.purple,bg:`${e.purple}18`}}/>}
|
|
187
187
|
{t("Total RAM",`${P.toLocaleString()} MB`)&&<S label="Total Physical RAM"value={`${P.toLocaleString()} MB`}/>}
|
|
188
188
|
{t("Free RAM",`${O.toLocaleString()} MB`)&&<S label="Available Free RAM"value={`${O.toLocaleString()} MB`}badge={{text:O<500?"LOW":"HEALTHY",color:O<500?e.errorColor:e.emerald500,bg:O<500?`${e.errorColor}18`:`${e.emerald500}18`}}/>}
|
|
189
189
|
{t("Storage Capacity",`${W} GB`)&&<S label="Disk Storage Total"value={`${W} GB`}/>}
|
|
190
190
|
{t("Available Storage",`${_} GB`)&&<S label="Disk Storage Available"value={`${_} GB`}/>}
|
|
191
|
-
{t("Battery",`${
|
|
192
|
-
{t("API Level",`API ${
|
|
191
|
+
{t("Battery",`${$?.batteryPercent??100}%`)&&<S label="Battery Level"value={`${$?.batteryPercent??100}%`}badge={{text:$?.isCharging?"CHARGING":"DISCHARGING",color:$?.isCharging?e.emerald500:e.grayText,bg:$?.isCharging?`${e.emerald500}18`:`${e.grayText}18`}}/>}
|
|
192
|
+
{t("API Level",`API ${$?.apiLevel||w.Version}`)&&w.OS==="android"&&<S label="Android API SDK Level"value={`API ${$?.apiLevel||w.Version}`}/>}
|
|
193
193
|
{t("Thermal State","Nominal (Cool)")&&<S label="Thermal State"value="Nominal (Cool)"badge={{text:"OPTIMAL",color:e.emerald500,bg:`${e.emerald500}18`}}isLast/>}
|
|
194
|
-
|
|
194
|
+
</T>}
|
|
195
195
|
|
|
196
196
|
|
|
197
|
-
{(V==="network"||C.length>0)&&Ie
|
|
197
|
+
{(V==="network"||C.length>0)&&Ie&&<T style={r.sectionCard}>
|
|
198
198
|
<I style={r.sectionTitle}>NETWORK & CONNECTIVITY</I>
|
|
199
199
|
{t("IP Address",H)&&<S label="Local Device IP"value={H}badge={{text:"IPV4",color:e.blue500,bg:`${e.blue500}18`}}/>}
|
|
200
200
|
{t("Internet Reachability","Connected")&&<S label="Internet Reachability"value="Connected"badge={{text:"ONLINE",color:e.emerald500,bg:`${e.emerald500}18`}}/>}
|
|
@@ -202,10 +202,10 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
202
202
|
{t("Metro Dev Server",q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||"localhost:8081")&&<S label="Metro Packager Host"value={q?.PlatformConstants?.serverHost||q?.AndroidConstants?.serverHost||"localhost:8081"}/>}
|
|
203
203
|
{t("WebSocket Protocol","Active & Enabled")&&<S label="WebSocket (WSS) Support"value="Active & Enabled"/>}
|
|
204
204
|
{t("Network Inspector Interceptor","Intercepting XHR & Fetch")&&<S label="Network Interceptor Status"value="Intercepting XHR & Fetch"badge={{text:"MONITORING",color:e.purple,bg:`${e.purple}18`}}isLast/>}
|
|
205
|
-
|
|
205
|
+
</T>}
|
|
206
206
|
|
|
207
207
|
|
|
208
|
-
{(V==="display"||C.length>0)&&Me
|
|
208
|
+
{(V==="display"||C.length>0)&&Me&&<T style={r.sectionCard}>
|
|
209
209
|
<I style={r.sectionTitle}>DISPLAY & SCREEN GEOMETRY</I>
|
|
210
210
|
{t("Window Resolution",`${Math.round(z.width).toLocaleString()} \xD7 ${Math.round(z.height).toLocaleString()} pt`)&&<S label="Window Logical Size"value={`${Math.round(z.width).toLocaleString()} \xD7 ${Math.round(z.height).toLocaleString()} pt`}/>}
|
|
211
211
|
{t("Screen Physical Size",`${Math.round(E.width*L).toLocaleString()} \xD7 ${Math.round(E.height*L).toLocaleString()} px`)&&<S label="Physical Screen Size"value={`${Math.round(E.width*L).toLocaleString()} \xD7 ${Math.round(E.height*L).toLocaleString()} px`}/>}
|
|
@@ -214,10 +214,10 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
214
214
|
{t("Form Factor",j?"Tablet":"Smartphone")&&<S label="Device Form Factor"value={j?"Tablet":"Smartphone"}badge={{text:j?"TABLET":"PHONE",color:j?e.blue500:e.purple,bg:j?`${e.blue500}18`:`${e.purple}18`}}/>}
|
|
215
215
|
{t("Orientation",Q?"Landscape":"Portrait")&&<S label="Screen Orientation"value={Q?"Landscape":"Portrait"}/>}
|
|
216
216
|
{t("Status Bar Height",`${ee} pt`)&&<S label="Status Bar Inset"value={`${ee} pt`}isLast/>}
|
|
217
|
-
|
|
217
|
+
</T>}
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
{(V==="runtime"||C.length>0)&&Be
|
|
220
|
+
{(V==="runtime"||C.length>0)&&Be&&<T style={r.sectionCard}>
|
|
221
221
|
<I style={r.sectionTitle}>RUNTIME & APPLICATION</I>
|
|
222
222
|
{t("App Name",o.runtime.appName)&&<S label="Application Name"value={o.runtime.appName}/>}
|
|
223
223
|
{t("Bundle ID",o.identifiers.bundleId)&&<S label="Bundle Identifier / Package"value={o.identifiers.bundleId}/>}
|
|
@@ -230,20 +230,20 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
230
230
|
{t("Timezone",o.runtime.timezone)&&<S label="System Timezone"value={o.runtime.timezone}/>}
|
|
231
231
|
{t("Locale",o.runtime.locale)&&<S label="System Language & Locale"value={o.runtime.locale}/>}
|
|
232
232
|
{t("Session Uptime",J)&&<S label="Inspector Session Uptime"value={J}isLast/>}
|
|
233
|
-
|
|
233
|
+
</T>}
|
|
234
234
|
|
|
235
235
|
|
|
236
|
-
{(V==="security"||C.length>0)&&De
|
|
236
|
+
{(V==="security"||C.length>0)&&De&&<T style={r.sectionCard}>
|
|
237
237
|
<I style={r.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</I>
|
|
238
238
|
{t("Pseudo-UDID",k)&&<S label="Deterministic Pseudo-UDID"value={k}subtext="Stable hardware signature hash for testing & diagnostics"badge={{text:"PERSISTENT",color:e.purple,bg:`${e.purple}18`}}/>}
|
|
239
239
|
{t("Bundle ID",o.identifiers.bundleId)&&<S label="Application Bundle ID"value={o.identifiers.bundleId}/>}
|
|
240
240
|
{t("Root / Jailbreak","Clean (Standard Sandbox)")&&<S label="Root / Jailbreak Heuristic"value="Clean (Standard Sandbox)"badge={{text:"SECURE",color:e.emerald500,bg:`${e.emerald500}18`}}/>}
|
|
241
241
|
{t("Simulator / Emulator",w.constants?.Model?.includes?.("sdk")||w.constants?.Model?.includes?.("Emulator")||w.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device")&&<S label="Emulator / Physical Device"value={w.constants?.Model?.includes?.("sdk")||w.constants?.Model?.includes?.("Emulator")||w.constants?.Model?.includes?.("Simulator")?"Virtual Simulator":"Physical Device"}/>}
|
|
242
242
|
{t("Sandbox Integrity","Enforced by OS Kernel")&&<S label="App Sandbox File Isolation"value="Enforced by OS Kernel"isLast/>}
|
|
243
|
-
|
|
243
|
+
</T>}
|
|
244
244
|
|
|
245
245
|
|
|
246
|
-
{C.trim().length>0&&!Je
|
|
246
|
+
{C.trim().length>0&&!Je&&<T style={r.emptySearchCard}>
|
|
247
247
|
<He size={26}color={e.grayTextWeak}/>
|
|
248
248
|
<I style={r.emptySearchTitle}>No matching device specifications</I>
|
|
249
249
|
<I style={r.emptySearchSubtitle}>
|
|
@@ -252,8 +252,8 @@ import Ve,{useState as oe,useEffect as Le,useMemo as F,useCallback as Pe}from"re
|
|
|
252
252
|
<Z onPress={()=>re("")}style={r.clearSearchBtn}>
|
|
253
253
|
<I style={r.clearSearchBtnText}>Clear Search</I>
|
|
254
254
|
</Z>
|
|
255
|
-
|
|
255
|
+
</T>}
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
<T style={{height:48}}/>
|
|
258
258
|
</Ee>
|
|
259
|
-
|
|
259
|
+
</T>});const r=Qe.create({container:{flex:1,backgroundColor:e.grayBackground},subTabsWrapper:{backgroundColor:e.primaryLight,borderBottomWidth:1,borderBottomColor:e.dividerColor,paddingVertical:6},subTabsContainer:{paddingHorizontal:12,flexDirection:"row",alignItems:"center",gap:6},subTabPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,borderWidth:1},subTabPillText:{fontFamily:D.interBold,fontSize:10.5},featuredUuidCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1.5,borderColor:`${e.brandPurple}40`,padding:12,gap:10,shadowColor:e.brandPurple,shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2},featuredUuidHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},featuredUuidTitleRow:{flexDirection:"row",alignItems:"center",gap:8,flex:1,minWidth:0},featuredUuidIconWrap:{width:28,height:28,borderRadius:7,backgroundColor:e.brandPurple,alignItems:"center",justifyContent:"center"},featuredUuidLabel:{fontFamily:D.interBold,fontSize:11,color:e.primaryBlack,letterSpacing:.3},featuredUuidSubtext:{fontFamily:D.interRegular,fontSize:9.5,color:e.grayTextWeak,marginTop:.5},featuredBadge:{backgroundColor:`${e.brandPurple}18`,paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,borderWidth:1,borderColor:`${e.brandPurple}30`},featuredBadgeText:{fontFamily:D.interBold,fontSize:8,color:e.brandPurple,letterSpacing:.4},featuredCopyBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:e.brandPurple,paddingHorizontal:10,paddingVertical:5.5,borderRadius:7,shadowColor:e.brandPurple,shadowOpacity:.25,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},featuredCopyBtnText:{fontFamily:D.interBold,fontSize:10.5,color:e.white},featuredUuidValueBox:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:`${e.brandPurple}0C`,borderRadius:8,borderWidth:1,borderColor:`${e.brandPurple}28`,paddingHorizontal:10,paddingVertical:7,gap:8},featuredUuidValueText:{flex:1,fontFamily:w.select({ios:"Menlo",android:"monospace",default:"monospace"}),fontSize:11.5,color:e.brandPurple,letterSpacing:.5},actionBar:{flexDirection:"row",alignItems:"center",paddingHorizontal:12,paddingVertical:8,backgroundColor:e.primaryLight,borderBottomWidth:1,borderBottomColor:e.dividerColor,gap:8},searchBar:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:8,paddingHorizontal:9,paddingVertical:w.OS==="ios"?6:2,borderWidth:1,borderColor:e.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:D.interMedium,fontSize:12,color:e.primaryBlack,padding:0},exportButton:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:9,paddingVertical:6,borderRadius:8,backgroundColor:`${e.purple}14`,borderWidth:1,borderColor:`${e.purple}33`},exportButtonText:{fontFamily:D.interBold,fontSize:11,color:e.purple},scrollArea:{flex:1},scrollContent:{padding:12,gap:12,paddingBottom:100},heroCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:14,shadowColor:e.black,shadowOpacity:.04,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:1,gap:12},heroHeader:{flexDirection:"row",alignItems:"center",gap:10},heroIconWrap:{width:38,height:38,borderRadius:10,backgroundColor:e.purple,alignItems:"center",justifyContent:"center",shadowColor:e.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},heroTitle:{fontFamily:D.interBold,fontSize:15,color:e.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:D.interRegular,fontSize:11.5,color:e.grayText,marginTop:1},heroBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.emerald500}18`,paddingHorizontal:7,paddingVertical:3,borderRadius:6},pulseDot:{width:6,height:6,borderRadius:3,backgroundColor:e.emerald500},heroBadgeText:{fontFamily:D.interBold,fontSize:9.5,color:e.emerald500},heroMetricsStrip:{flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:10,paddingVertical:8,paddingHorizontal:10},heroMetricItem:{flex:1,alignItems:"center",paddingHorizontal:2,minWidth:0},heroMetricLabel:{fontFamily:D.interBold,fontSize:8.5,color:e.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:D.interBold,fontSize:11,color:e.primaryBlack,marginTop:2},heroMetricDivider:{width:1,height:20,backgroundColor:e.dividerColor},sectionCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:14,shadowColor:e.black,shadowOpacity:.03,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},sectionTitle:{fontFamily:D.interBold,fontSize:10.5,color:e.grayTextWeak,letterSpacing:.8,marginBottom:8,textTransform:"uppercase"},infoRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:9,borderBottomWidth:1,borderBottomColor:e.dividerColor},infoLabel:{fontFamily:D.interMedium,fontSize:12.5,color:e.primaryBlack},infoSubtext:{fontFamily:D.interRegular,fontSize:10,color:e.grayTextWeak,marginTop:1},infoBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},infoBadgeText:{fontFamily:D.interBold,fontSize:8.5},infoValue:{fontFamily:D.interBold,fontSize:12,color:e.primaryBlack,flexShrink:1,textAlign:"right"},rowCopyBtn:{padding:4,borderRadius:4,backgroundColor:e.grayBackground},emptySearchCard:{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:24,alignItems:"center",justifyContent:"center",gap:8,marginTop:8},emptySearchTitle:{fontFamily:D.interBold,fontSize:13.5,color:e.primaryBlack,textAlign:"center"},emptySearchSubtitle:{fontFamily:D.interRegular,fontSize:11.5,color:e.grayTextWeak,textAlign:"center"},clearSearchBtn:{marginTop:6,paddingHorizontal:14,paddingVertical:6.5,borderRadius:8,backgroundColor:e.purple},clearSearchBtnText:{fontFamily:D.interBold,fontSize:11,color:e.white}});export default DeviceInfoTab;
|