react-native-inapp-inspector 2.3.20 → 2.3.22
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.md +14 -14
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +58 -1
- package/dist/commonjs/components/AppHeaderLogo.js +2 -2
- package/dist/commonjs/components/ConsoleLogCard.js +1 -1
- package/dist/commonjs/components/HighlightText.js +13 -13
- package/dist/commonjs/components/Inspector/AboutModal.js +143 -251
- package/dist/commonjs/components/Inspector/DebuggingTab.js +19 -13
- package/dist/commonjs/components/Inspector/InspectorHeader.js +54 -80
- package/dist/commonjs/components/Inspector/MainScreen.js +13 -23
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +4 -4
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +1 -1
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +1 -1
- package/dist/commonjs/components/Inspector/TabBar.js +7 -7
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +23 -24
- package/dist/commonjs/components/LogCard.js +16 -16
- package/dist/commonjs/components/NetworkIcons.d.ts +10 -0
- package/dist/commonjs/components/NetworkIcons.js +46 -4
- package/dist/commonjs/components/QRCodeView.js +2 -2
- package/dist/commonjs/components/TreeNode.js +16 -16
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/bundleAnalyzer.js +1 -1
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +2 -2
- package/dist/commonjs/index.js +1 -1
- package/dist/commonjs/native/NativeInspector.d.ts +1 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/types/interfaces.d.ts +0 -2
- package/dist/esm/components/AppHeaderLogo.js +6 -6
- package/dist/esm/components/ConsoleLogCard.js +6 -6
- package/dist/esm/components/HighlightText.js +17 -17
- package/dist/esm/components/Inspector/AboutModal.js +205 -313
- package/dist/esm/components/Inspector/DebuggingTab.js +32 -26
- package/dist/esm/components/Inspector/InspectorHeader.js +96 -122
- package/dist/esm/components/Inspector/MainScreen.js +66 -76
- package/dist/esm/components/Inspector/MediaGalleryTab.js +19 -19
- package/dist/esm/components/Inspector/MediaPreviewModal.js +18 -18
- package/dist/esm/components/Inspector/NpmStarPrompt.js +1 -1
- package/dist/esm/components/Inspector/TabBar.js +21 -21
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +65 -66
- package/dist/esm/components/LogCard.js +43 -43
- package/dist/esm/components/NetworkIcons.d.ts +10 -0
- package/dist/esm/components/NetworkIcons.js +191 -149
- package/dist/esm/components/QRCodeView.js +4 -4
- package/dist/esm/components/TreeNode.js +53 -53
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/bundleAnalyzer.js +1 -1
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/index.js +7 -7
- package/dist/esm/native/NativeInspector.d.ts +1 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/types/interfaces.d.ts +0 -2
- package/ios/NetworkInspectorModule.mm +39 -3
- package/package.json +1 -1
- package/src/native/NativeInspector.ts +18 -0
- package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +0 -16
- package/dist/commonjs/components/Inspector/FeedbackModal.js +0 -198
- package/dist/esm/components/Inspector/FeedbackModal.d.ts +0 -16
- package/dist/esm/components/Inspector/FeedbackModal.js +0 -198
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{useState as
|
|
2
|
-
<
|
|
3
|
-
</
|
|
1
|
+
import{useState as M,useEffect as G,useMemo as Le,useCallback as ie,useRef as X}from"react";import{View as T,Text as C,ScrollView as Te,StyleSheet as We,NativeModules as Pe,Share as He,TouchableOpacity as U,ActivityIndicator as Ce,Animated as Z}from"react-native";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as S}from"../../styles/AppFonts";import Ee from"../QRCodeView";import Be from"../TouchableScale";import{showToast as J}from"../../helpers/toast";import{triggerNativeHaptic as L}from"../../native/NativeInspector";import{InfoCircleIcon as $e,CheckIcon as Se,BoltIcon as Re,CircleXIcon as Ie,SparkleIcon as Ne,AndroidIcon as Ue,RepeatIcon as _e,WrenchIcon as Ge}from"../NetworkIcons";import Ke,{Path as Qe}from"react-native-svg";const Xe=({color:I=e.purple,size:$=13})=><Ke width={$}height={$}viewBox="0 0 24 24"fill="none">
|
|
2
|
+
<Qe d="M4 17l6-6-6-6M12 19h8"stroke={I}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
|
|
3
|
+
</Ke>;export const DebuggingTab=()=>{const I=Le(()=>{const k=Pe.SourceCode?.scriptURL||"";let V="localhost",B=8081;try{if(k.includes("://")){const A=k.split("://")[1].split("/")[0];if(A.includes(":")){const v=A.split(":");V=v[0];const P=parseInt(v[1],10);isNaN(P)||(B=P)}else V=A}}catch{}return{host:V,port:B,scriptURL:k}},[]),[$,Ve]=M(()=>I.host&&I.host!=="localhost"&&I.host!=="127.0.0.1"&&I.host!=="10.0.2.2"?I.host:"192.168.1.2"),[H,ze]=M(I.port||8083),[De,Y]=M("app-debug.apk"),[q,ee]=M(null),[F,oe]=M("assembleRelease"),[W,Ae]=M(!0),[R,_]=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,ve]=M(!0),te=X(null);G(()=>{Z.timing(K,{toValue:Math.max(0,Math.min(100,R.progress)),duration:350,useNativeDriver:!1}).start()},[R.progress,K]),G(()=>{R.logs&&R.logs.length>0&&setTimeout(()=>{te.current?.scrollToEnd({animated:!0})},50)},[R.logs]);const N=ie(async()=>{const k=Array.from(new Set([I.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),V=Array.from(new Set([I.port,8083,8081,8082].filter(Boolean)));for(const B of k)for(const O of V)try{const A=new AbortController,v=setTimeout(()=>A.abort(),1200),P=await fetch(`http://${B}:${O}/__inapp_inspector/apk-info`,{signal:A.signal});if(clearTimeout(v),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&&Y(z.apkName),z.apkSize&&ee((z.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[I.host,I.port]);G(()=>{N()},[N]),G(()=>()=>{D.current&&clearInterval(D.current)},[]);const Fe=ie(()=>{D.current&&clearInterval(D.current);const k=I.host||"10.0.2.2";D.current=setInterval(async()=>{try{const V=await fetch(`http://${k}:${H}/__inapp_inspector/build-status`);if(V.ok){const B=await V.json();_(B),B.status==="completed"?(D.current&&clearInterval(D.current),L("success"),J("\u2713 APK Build Generated Successfully!"),B.apkSize&&ee((B.apkSize/(1024*1024)).toFixed(1)),B.apkName&&Y(B.apkName),N()):B.status==="failed"&&(D.current&&clearInterval(D.current),L("error"),J("\u2715 Build Failed: "+(B.error||"Gradle error")))}}catch{}},1e3)},[I.host,H,N]),Oe=async()=>{L("medium"),_({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([I.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),V=Array.from(new Set([H,8083,8081,8082].filter(Boolean)));let B=!1;for(const O of k)for(const A of V)try{const v=new AbortController,P=setTimeout(()=>v.abort(),2e3),z=await fetch(`http://${O}:${A}/__inapp_inspector/build-apk?scheme=${F}&clean=${W}`,{signal:v.signal});if(clearTimeout(P),z.ok){B=!0,Fe();return}}catch{}B||_(O=>({...O,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},Me=async()=>{L("warning"),D.current&&clearInterval(D.current);const k=Array.from(new Set([I.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),V=Array.from(new Set([H,8083,8081,8082].filter(Boolean)));for(const B of k)for(const O of V)try{const A=new AbortController,v=setTimeout(()=>A.abort(),1500);await fetch(`http://${B}:${O}/__inapp_inspector/stop-build`,{signal:A.signal}),clearTimeout(v)}catch{}_(B=>({...B,status:"idle",currentTask:"Build cancelled by user",logs:[...B.logs||[],"\u{1F6D1} Build cancelled by user."]})),J("Build cancelled")},re=`http://${$}:${H}/${De.replace(/^\/+/,"")}`,Ze=()=>{L("light"),He.share({message:re,title:"Install Android APK"})},E=R.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}>
|
|
@@ -32,7 +32,7 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
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}>{H}</C>
|
|
36
36
|
</T>
|
|
37
37
|
<T style={o.heroMetricDivider}/>
|
|
38
38
|
<T style={o.heroMetricItem}>
|
|
@@ -64,7 +64,7 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
64
64
|
|
|
65
65
|
<T style={o.qrCenteredWrapper}>
|
|
66
66
|
<T style={o.qrInnerFrame}>
|
|
67
|
-
<
|
|
67
|
+
<Ee value={re}size={235}color={e.primaryBlack}backgroundColor={e.white}/>
|
|
68
68
|
</T>
|
|
69
69
|
</T>
|
|
70
70
|
</T>
|
|
@@ -73,7 +73,7 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
73
73
|
<T style={o.sectionCard}>
|
|
74
74
|
<T style={o.sectionHeaderRow}>
|
|
75
75
|
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
76
|
-
|
|
76
|
+
<Re size={13}color={e.purple}/>
|
|
77
77
|
<C style={o.sectionTitle}>BUILD GENERATOR (GRADLE)</C>
|
|
78
78
|
</T>
|
|
79
79
|
{R.status==="completed"&&<T style={o.completedBadge}>
|
|
@@ -84,23 +84,29 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
<T style={o.subTabStrip}>
|
|
87
|
-
<U disabled={E}activeOpacity={.7}onPress={()=>{
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
<U disabled={E}activeOpacity={.7}onPress={()=>{L("light"),oe("assembleRelease")}}style={[o.subTabItem,F==="assembleRelease"&&o.subTabItemActive]}>
|
|
88
|
+
<T style={{flexDirection:"row",alignItems:"center",gap:5}}>
|
|
89
|
+
<Re size={12}color={F==="assembleRelease"?e.white:e.grayText}/>
|
|
90
|
+
<C style={[o.subTabText,F==="assembleRelease"&&o.subTabTextActive]}>
|
|
91
|
+
Release (assembleRelease)
|
|
92
|
+
</C>
|
|
93
|
+
</T>
|
|
91
94
|
</U>
|
|
92
95
|
|
|
93
|
-
<U disabled={E}activeOpacity={.7}onPress={()=>{
|
|
94
|
-
<
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
<U disabled={E}activeOpacity={.7}onPress={()=>{L("light"),oe("assembleDebug")}}style={[o.subTabItem,F==="assembleDebug"&&o.subTabItemActive]}>
|
|
97
|
+
<T style={{flexDirection:"row",alignItems:"center",gap:5}}>
|
|
98
|
+
<Ge size={12}color={F==="assembleDebug"?e.white:e.grayText}/>
|
|
99
|
+
<C style={[o.subTabText,F==="assembleDebug"&&o.subTabTextActive]}>
|
|
100
|
+
Debug (assembleDebug)
|
|
101
|
+
</C>
|
|
102
|
+
</T>
|
|
97
103
|
</U>
|
|
98
104
|
</T>
|
|
99
105
|
|
|
100
106
|
|
|
101
|
-
<U disabled={E}activeOpacity={.7}onPress={()=>{
|
|
102
|
-
<T style={[o.checkboxBox,
|
|
103
|
-
{
|
|
107
|
+
<U disabled={E}activeOpacity={.7}onPress={()=>{L("light"),Ae(!W)}}style={o.cleanRow}>
|
|
108
|
+
<T style={[o.checkboxBox,W&&o.checkboxBoxActive]}>
|
|
109
|
+
{W&&<Se size={11}color={e.white}/>}
|
|
104
110
|
</T>
|
|
105
111
|
<C style={o.cleanLabel}>
|
|
106
112
|
Clean build cache <C style={o.cleanCode}>(./gradlew clean)</C>
|
|
@@ -129,7 +135,7 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
129
135
|
|
|
130
136
|
|
|
131
137
|
{R.status==="failed"&&<T style={o.errorContainer}>
|
|
132
|
-
<
|
|
138
|
+
<Ie size={13}color={e.errorColor}/>
|
|
133
139
|
<C style={o.errorText}numberOfLines={2}>
|
|
134
140
|
{R.error||"Build execution failed."}
|
|
135
141
|
</C>
|
|
@@ -139,10 +145,10 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
139
145
|
{(R.logs&&R.logs.length>0||E)&&<T style={o.consoleContainer}>
|
|
140
146
|
<T style={o.consoleHeaderRow}>
|
|
141
147
|
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
142
|
-
<
|
|
148
|
+
<Xe color="#38BDF8"size={12}/>
|
|
143
149
|
<C style={o.consoleHeaderTitle}>GRADLE VERBOSE OUTPUT</C>
|
|
144
150
|
</T>
|
|
145
|
-
<U activeOpacity={.7}onPress={()=>
|
|
151
|
+
<U activeOpacity={.7}onPress={()=>ve(!Q)}style={o.consoleToggleBtn}>
|
|
146
152
|
<C style={o.consoleToggleText}>
|
|
147
153
|
{Q?"Hide Console":"Show Console"}
|
|
148
154
|
</C>
|
|
@@ -167,15 +173,15 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
167
173
|
</C>
|
|
168
174
|
</T>
|
|
169
175
|
|
|
170
|
-
<Be onPress={
|
|
171
|
-
<
|
|
176
|
+
<Be onPress={Me}style={o.stopBtn}>
|
|
177
|
+
<Ie size={13}color={e.white}/>
|
|
172
178
|
<C style={o.stopBtnText}>Stop Build</C>
|
|
173
179
|
</Be>
|
|
174
|
-
</T>:<Be onPress={
|
|
180
|
+
</T>:<Be onPress={Oe}style={o.generateBtn}>
|
|
175
181
|
<T style={o.ctaContentRow}>
|
|
176
182
|
<Ne size={14}color={e.white}/>
|
|
177
183
|
<C style={o.generateBtnText}>
|
|
178
|
-
{
|
|
184
|
+
{W?"Clean & Generate Build":"Generate Build"}
|
|
179
185
|
</C>
|
|
180
186
|
</T>
|
|
181
187
|
</Be>}
|
|
@@ -183,9 +189,9 @@ import{useState as O,useEffect as G,useMemo as Me,useCallback as ie,useRef as X}
|
|
|
183
189
|
|
|
184
190
|
|
|
185
191
|
<T style={o.footerNoteRow}>
|
|
186
|
-
|
|
192
|
+
<$e size={13}color={e.grayTextWeak}/>
|
|
187
193
|
<C style={o.footerNoteText}>
|
|
188
194
|
Ensure both Android devices are connected to the same Wi-Fi network.
|
|
189
195
|
</C>
|
|
190
196
|
</T>
|
|
191
|
-
</Te>};const o=
|
|
197
|
+
</Te>};const o=We.create({scrollArea:{flex:1,backgroundColor:e.contentBg},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:S.interBold,fontSize:15,color:e.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:S.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:S.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:S.interBold,fontSize:8.5,color:e.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:S.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,gap:12},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},sectionTitle:{fontFamily:S.interBold,fontSize:10.5,color:e.grayTextWeak,letterSpacing:.8,textTransform:"uppercase"},refreshBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:3,borderRadius:6,backgroundColor:`${e.purple}12`},refreshBtnText:{fontFamily:S.interBold,fontSize:10,color:e.purple},qrCenteredWrapper:{alignItems:"center",justifyContent:"center",backgroundColor:e.grayBackground,padding:12,borderRadius:12,borderWidth:1,borderColor:e.grayBorderSecondary},qrInnerFrame:{backgroundColor:e.white,padding:6,borderRadius:8},urlBox:{flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:10,paddingLeft:10,paddingRight:6,paddingVertical:6,borderWidth:1,borderColor:e.grayBorderSecondary,gap:8},urlText:{flex:1,fontFamily:S.interMedium,fontSize:11.5,color:e.skyBlue},actionsRow:{flexDirection:"row",gap:10},actionBtnSecondary:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:9,borderRadius:10,borderWidth:1,borderColor:e.grayBorderSecondary,backgroundColor:e.grayBackground},actionBtnSecondaryText:{fontFamily:S.interBold,fontSize:12,color:e.grayTextStrong},actionBtnPrimary:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:9,borderRadius:10,backgroundColor:e.purple,shadowColor:e.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},actionBtnPrimaryText:{fontFamily:S.interBold,fontSize:12,color:e.white},completedBadge:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:`${e.emerald500}18`,paddingHorizontal:6,paddingVertical:2,borderRadius:5},completedBadgeText:{fontFamily:S.interBold,fontSize:9.5,color:e.emerald500},subTabStrip:{flexDirection:"row",backgroundColor:e.grayBackground,borderRadius:8,padding:2,borderWidth:1,borderColor:e.grayBorderSecondary},subTabItem:{flex:1,paddingVertical:7,borderRadius:6,alignItems:"center",justifyContent:"center"},subTabItemActive:{backgroundColor:e.purple,shadowColor:e.purple,shadowOpacity:.2,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},subTabText:{fontFamily:S.interMedium,fontSize:11,color:e.grayText},subTabTextActive:{fontFamily:S.interBold,color:e.white},cleanRow:{flexDirection:"row",alignItems:"center",gap:8,paddingVertical:2},checkboxBox:{width:18,height:18,borderRadius:4,borderWidth:1.5,borderColor:e.grayBorderSecondary,backgroundColor:e.grayBackground,alignItems:"center",justifyContent:"center"},checkboxBoxActive:{backgroundColor:e.purple,borderColor:e.purple},cleanLabel:{fontFamily:S.interMedium,fontSize:11.5,color:e.grayTextStrong},cleanCode:{fontFamily:S.interRegular,color:e.grayTextWeak,fontSize:10.5},progressContainer:{backgroundColor:e.grayBackground,borderRadius:10,padding:10,gap:6,borderWidth:1,borderColor:e.grayBorderSecondary},progressTopRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},progressTaskGroup:{flexDirection:"row",alignItems:"center",gap:6,flex:1,paddingRight:8},progressTaskText:{fontFamily:S.interMedium,fontSize:11,color:e.primaryBlack,flex:1},progressPercentageText:{fontFamily:S.interBold,fontSize:11.5,color:e.purple},progressBarTrack:{width:"100%",height:6,borderRadius:3,backgroundColor:e.grayBorderSecondary,overflow:"hidden"},progressBarFill:{height:"100%",backgroundColor:e.purple,borderRadius:3},errorContainer:{flexDirection:"row",alignItems:"center",gap:6,backgroundColor:`${e.errorColor}12`,padding:8,borderRadius:8,borderWidth:1,borderColor:`${e.errorColor}25`},errorText:{fontFamily:S.interRegular,fontSize:11,color:e.errorColor,flex:1},consoleContainer:{backgroundColor:"#0F172A",borderRadius:10,borderWidth:1,borderColor:"#1E293B",overflow:"hidden",marginTop:4},consoleHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:"#1E293B",paddingHorizontal:10,paddingVertical:6},consoleHeaderTitle:{fontFamily:S.interBold,fontSize:10,color:"#38BDF8",letterSpacing:.5},consoleToggleBtn:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,backgroundColor:"rgba(255,255,255,0.1)"},consoleToggleText:{fontFamily:S.interMedium,fontSize:9.5,color:"#94A3B8"},consoleLogBox:{maxHeight:140,paddingHorizontal:10,paddingVertical:8},consoleLogContent:{gap:3},consoleLogLine:{fontFamily:S.interRegular,fontSize:10,lineHeight:14},consoleLogPlaceholder:{fontFamily:S.interRegular,fontSize:10,color:"#64748B",fontStyle:"italic"},generateBtn:{backgroundColor:e.purple,borderRadius:10,paddingVertical:10,alignItems:"center",justifyContent:"center",shadowColor:e.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},generateBtnDisabled:{opacity:.7},buildingActionsRow:{flexDirection:"row",alignItems:"center",gap:10},buildingStatusPill:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:8,backgroundColor:`${e.purple}14`,borderRadius:10,paddingVertical:10,borderWidth:1,borderColor:`${e.purple}30`},buildingStatusPillText:{fontFamily:S.interBold,fontSize:12,color:e.purple},stopBtn:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:e.errorColor,borderRadius:10,paddingHorizontal:16,paddingVertical:10,shadowColor:e.errorColor,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},stopBtnText:{fontFamily:S.interBold,fontSize:12,color:e.white},ctaContentRow:{flexDirection:"row",alignItems:"center",gap:6},generateBtnText:{fontFamily:S.interBold,fontSize:12.5,color:e.white},footerNoteRow:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:8},footerNoteText:{fontFamily:S.interRegular,fontSize:11,color:e.grayTextWeak,textAlign:"center",flex:1}});export default DebuggingTab;
|