react-native-inapp-inspector 2.5.12 → 2.5.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/src/main/AndroidManifest.xml +11 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +379 -19
- package/android/src/main/res/xml/inappinspector_file_paths.xml +7 -0
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +47 -49
- package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +8 -0
- package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +76 -0
- package/dist/commonjs/components/Inspector/ConsoleExportModal.js +51 -51
- package/dist/commonjs/components/Inspector/CrashTab.js +17 -17
- package/dist/commonjs/components/Inspector/DebuggingTab.js +24 -24
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +2 -2
- package/dist/commonjs/components/Inspector/FabLauncher.js +2 -2
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +2 -2
- package/dist/commonjs/components/Inspector/InspectorHeader.js +10 -10
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +10 -10
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +1 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +222 -222
- package/dist/commonjs/components/Inspector/NetworkExportModal.d.ts +10 -0
- package/dist/commonjs/components/Inspector/NetworkExportModal.js +333 -0
- package/dist/commonjs/components/Inspector/NetworkTab.js +48 -41
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +11 -12
- package/dist/commonjs/components/Inspector/ReduxDetail.js +17 -19
- package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
- package/dist/commonjs/components/Inspector/SettingsPanel.js +3 -6
- package/dist/commonjs/components/Inspector/SocketCard.js +2 -2
- package/dist/commonjs/components/Inspector/SupportPage.js +5 -5
- package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
- package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +97 -0
- package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +2 -0
- package/dist/commonjs/components/Inspector/UiInspectorDetail.js +485 -0
- package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +2 -0
- package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +199 -0
- package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +2 -0
- package/dist/commonjs/components/Inspector/UiInspectorTab.js +117 -0
- package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
- package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +148 -0
- package/dist/commonjs/components/Inspector/index.d.ts +28 -0
- package/dist/commonjs/components/Inspector/index.js +1 -0
- package/dist/commonjs/components/LogCard.js +9 -7
- package/dist/commonjs/constants/index.js +1 -1
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
- package/dist/commonjs/constants/telemetryConfig.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +1 -1
- package/dist/commonjs/customHooks/crashHandler.js +6 -6
- package/dist/commonjs/customHooks/uiInspectorManager.d.ts +22 -0
- package/dist/commonjs/customHooks/uiInspectorManager.js +1 -0
- package/dist/commonjs/helpers/index.js +1 -3
- package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -0
- package/dist/commonjs/helpers/searchQueryParser.js +7 -5
- package/dist/commonjs/helpers/shareFormatter.d.ts +16 -0
- package/dist/commonjs/helpers/shareFormatter.js +16 -9
- package/dist/commonjs/helpers/uiInspectorEngine.d.ts +62 -0
- package/dist/commonjs/helpers/uiInspectorEngine.js +19 -0
- package/dist/commonjs/i18n/locales/ar.json +1 -1
- package/dist/commonjs/i18n/locales/bn.json +1 -1
- package/dist/commonjs/i18n/locales/de.json +1 -1
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -1
- package/dist/commonjs/i18n/locales/fr.json +1 -1
- package/dist/commonjs/i18n/locales/gu.json +1 -1
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -1
- package/dist/commonjs/i18n/locales/it.json +1 -1
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -1
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -1
- package/dist/commonjs/i18n/locales/mr.json +1 -1
- package/dist/commonjs/i18n/locales/nl.json +1 -1
- package/dist/commonjs/i18n/locales/pa.json +1 -1
- package/dist/commonjs/i18n/locales/pl.json +1 -1
- package/dist/commonjs/i18n/locales/pt.json +1 -1
- package/dist/commonjs/i18n/locales/ru.json +1 -1
- package/dist/commonjs/i18n/locales/ta.json +1 -1
- package/dist/commonjs/i18n/locales/te.json +1 -1
- package/dist/commonjs/i18n/locales/tr.json +1 -1
- package/dist/commonjs/i18n/locales/vi.json +1 -1
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +3 -1
- package/dist/commonjs/index.js +3 -3
- package/dist/commonjs/native/NativeInspector.d.ts +2 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
- package/dist/commonjs/types/editor.d.ts +31 -0
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +73 -75
- package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +8 -0
- package/dist/esm/components/Inspector/BoxModelVisualizer.js +76 -0
- package/dist/esm/components/Inspector/ConsoleExportModal.js +67 -67
- package/dist/esm/components/Inspector/CrashTab.js +58 -58
- package/dist/esm/components/Inspector/DebuggingTab.js +89 -89
- package/dist/esm/components/Inspector/DeviceInfoTab.js +2 -2
- package/dist/esm/components/Inspector/FabLauncher.js +21 -21
- package/dist/esm/components/Inspector/FloatingCaptureWidget.js +23 -23
- package/dist/esm/components/Inspector/InspectorHeader.js +26 -26
- package/dist/esm/components/Inspector/MediaGalleryTab.js +151 -151
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +1 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +468 -468
- package/dist/esm/components/Inspector/NetworkExportModal.d.ts +10 -0
- package/dist/esm/components/Inspector/NetworkExportModal.js +333 -0
- package/dist/esm/components/Inspector/NetworkTab.js +118 -111
- package/dist/esm/components/Inspector/NpmStarPrompt.js +32 -33
- package/dist/esm/components/Inspector/ReduxDetail.js +54 -56
- package/dist/esm/components/Inspector/ReduxTab.js +9 -9
- package/dist/esm/components/Inspector/SettingsPanel.js +3 -6
- package/dist/esm/components/Inspector/SocketCard.js +13 -13
- package/dist/esm/components/Inspector/SupportPage.js +5 -5
- package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
- package/dist/esm/components/Inspector/UiA11yAuditPanel.js +97 -0
- package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +2 -0
- package/dist/esm/components/Inspector/UiInspectorDetail.js +422 -0
- package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +2 -0
- package/dist/esm/components/Inspector/UiInspectorOverlay.js +138 -0
- package/dist/esm/components/Inspector/UiInspectorTab.d.ts +2 -0
- package/dist/esm/components/Inspector/UiInspectorTab.js +117 -0
- package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
- package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +148 -0
- package/dist/esm/components/Inspector/index.d.ts +28 -0
- package/dist/esm/components/Inspector/index.js +1 -0
- package/dist/esm/components/LogCard.js +57 -55
- package/dist/esm/constants/index.js +1 -1
- package/dist/esm/constants/telemetryConfig.d.ts +3 -3
- package/dist/esm/constants/telemetryConfig.js +1 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/crashHandler.d.ts +1 -1
- package/dist/esm/customHooks/crashHandler.js +6 -6
- package/dist/esm/customHooks/uiInspectorManager.d.ts +22 -0
- package/dist/esm/customHooks/uiInspectorManager.js +1 -0
- package/dist/esm/helpers/index.js +4 -6
- package/dist/esm/helpers/searchQueryParser.d.ts +1 -0
- package/dist/esm/helpers/searchQueryParser.js +7 -5
- package/dist/esm/helpers/shareFormatter.d.ts +16 -0
- package/dist/esm/helpers/shareFormatter.js +20 -13
- package/dist/esm/helpers/uiInspectorEngine.d.ts +48 -0
- package/dist/esm/helpers/uiInspectorEngine.js +19 -0
- package/dist/esm/i18n/locales/ar.json +1 -1
- package/dist/esm/i18n/locales/bn.json +1 -1
- package/dist/esm/i18n/locales/de.json +1 -1
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -1
- package/dist/esm/i18n/locales/fr.json +1 -1
- package/dist/esm/i18n/locales/gu.json +1 -1
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -1
- package/dist/esm/i18n/locales/it.json +1 -1
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -1
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -1
- package/dist/esm/i18n/locales/mr.json +1 -1
- package/dist/esm/i18n/locales/nl.json +1 -1
- package/dist/esm/i18n/locales/pa.json +1 -1
- package/dist/esm/i18n/locales/pl.json +1 -1
- package/dist/esm/i18n/locales/pt.json +1 -1
- package/dist/esm/i18n/locales/ru.json +1 -1
- package/dist/esm/i18n/locales/ta.json +1 -1
- package/dist/esm/i18n/locales/te.json +1 -1
- package/dist/esm/i18n/locales/tr.json +1 -1
- package/dist/esm/i18n/locales/vi.json +1 -1
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +7 -7
- package/dist/esm/native/NativeInspector.d.ts +2 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
- package/dist/esm/types/editor.d.ts +31 -0
- package/ios/NetworkInspectorModule.mm +314 -16
- package/package.json +1 -1
- package/src/native/NativeInspector.ts +37 -0
- package/src/native/NativeNetworkInspector.ts +2 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import ye,{useCallback as pe,useRef as be,useState as U}from"react";import{Dimensions as fe,PanResponder as Be,Platform as xe,ScrollView as Me,StyleSheet as E,Text as B,TouchableOpacity as O,View as M}from"react-native";import{useInspector as we}from"./InspectorContext";import{createInspectedElement as Ce,extractBoxModel as Se,getDynamicInspectorDataForPoint as Fe,auditAccessibility as ve}from"../../helpers/uiInspectorEngine";import{ActiveTab as Pe}from"../../types";import{AppColors as P}from"../../styles/AppColors";import{AppFonts as S}from"../../styles/AppFonts";import{CloseIcon as Ie,LayersIcon as Te,RulerIcon as Ae}from"../NetworkIcons";import J from"../TouchableScale";import{takeNativeScreenshot as oe,triggerNativeHaptic as T}from"../../native/NativeInspector";export const UiInspectorOverlay=()=>{const{isInspectModeActive:ne,setIsInspectModeActive:K,selectedUiElement:t,setSelectedUiElement:V,showAlignmentGrid:W,setShowAlignmentGrid:ie,showDistanceGuides:ae,setShowDistanceGuides:Re,setVisible:re,switchActiveTab:le}=we(),[q,de]=U("top"),[N,Q]=U(!1),[se,G]=U(null),R=fe.get("window"),Z=pe(async x=>{const{pageX:F,pageY:v,locationX:I,locationY:Y}=x.nativeEvent,A=F??I??0,$=v??Y??0;try{const w=await Fe(A,$);if(w&&w.layout&&(w.layout.width>0||w.layout.height>0)){try{const te=await oe({rect:{x:Math.max(0,w.layout.pageX),y:Math.max(0,w.layout.pageY),width:Math.max(1,w.layout.width),height:Math.max(1,w.layout.height)},quality:.95,format:"png"});te?.uri&&(w.snapshotUri=te.uri)}catch{}G({x:w.layout.x,y:w.layout.y,width:w.layout.width,height:w.layout.height,componentName:w.displayName||w.componentName}),V(w),T();return}}catch{}const D=Math.round(Math.min(R.width-32,Math.max(48,A>R.width/2?(R.width-A)*1.5:A*1.5))),k=44,L=Math.max(0,Math.min(A-D/2,R.width-D)),H=Math.max(0,Math.min($-k/2,R.height-k));let ee;try{const w=await oe({rect:{x:Math.max(0,L),y:Math.max(0,H),width:Math.max(1,D),height:Math.max(1,k)},quality:.95,format:"png"});w?.uri&&(ee=w.uri)}catch{}const ce=Ce("View",{accessible:!0,style:{position:"absolute",left:Math.round(L),top:Math.round(H),width:D,height:k}},{x:Math.round(L),y:Math.round(H),width:D,height:k,pageX:Math.round(L),pageY:Math.round(H)},void 0,void 0,ee);G({x:Math.round(L),y:Math.round(H),width:D,height:k,componentName:"View"}),V(ce),T()},[R,V]),he=be(Be.create({onStartShouldSetPanResponder:()=>!0,onMoveShouldSetPanResponder:()=>!0,onPanResponderGrant:x=>Z(x),onPanResponderMove:x=>Z(x)})).current;if(!ne)return null;const C=se||(t?{x:t.layout.pageX,y:t.layout.pageY,width:t.layout.width,height:t.layout.height,componentName:t.componentName}:null),X=t?.hierarchy||[],ue=t?.flattenedStyles||{},z=t?.boxModel||{margin:{top:0,right:0,bottom:0,left:0},border:{top:0,right:0,bottom:0,left:0},padding:{top:0,right:0,bottom:0,left:0},content:{width:t?.layout.width||0,height:t?.layout.height||0}},_=Object.entries(ue).filter(([x,F])=>F==null||typeof F=="object"?!1:["overflow","fontSize","fontWeight","color","letterSpacing","lineHeight","backgroundColor","borderRadius","flexDirection","justifyContent","alignItems","flex","opacity","zIndex"].includes(x)),ge=x=>{if(!t||x.componentName===t.componentName)return;T();const F=x.props||{},v=x.styles||(F.style?E.flatten(F.style):{})||{},I=x.layout||{...t.layout,width:v.width||t.layout.width,height:v.height||t.layout.height},Y=Se(v,I),A=ve(F,I,v);V({...t,componentName:x.componentName,displayName:x.displayName,props:F,originalStyles:v,flattenedStyles:v,tweakedStyles:{},layout:I,boxModel:Y,a11y:A}),G({x:I.x??t.layout.x,y:I.y??t.layout.y,width:I.width,height:I.height,componentName:x.displayName||x.componentName})},me=()=>{T(),K(!1),le(Pe.Ui),re(!0)};return<M style={[E.absoluteFill,e.overlayContainer]}pointerEvents="box-none">
|
|
2
|
+
|
|
3
|
+
<M style={E.absoluteFill}{...he.panHandlers}/>
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
{W&&<M style={[E.absoluteFill,e.gridPattern]}pointerEvents="none"/>}
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
{t&&<M style={[e.devToolsHudContainer,q==="top"?e.hudTop:e.hudBottom]}pointerEvents="box-none">
|
|
10
|
+
|
|
11
|
+
<M style={e.hudBreadcrumbBar}>
|
|
12
|
+
<Me horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={e.hudBreadcrumbContent}>
|
|
13
|
+
{X.length>0?X.map((x,F)=>{const v=F===X.length-1||x.componentName===t.componentName;return<ye.Fragment key={x.id||F}>
|
|
14
|
+
{F>0&&<B style={e.hudDotSeparator}>•</B>}
|
|
15
|
+
<O style={[e.hudBreadcrumbChip,v&&e.hudBreadcrumbChipActive]}onPress={()=>ge(x)}>
|
|
16
|
+
<B style={[e.hudBreadcrumbText,v&&e.hudBreadcrumbTextActive]}>
|
|
17
|
+
{x.displayName||x.componentName}
|
|
18
|
+
</B>
|
|
19
|
+
</O>
|
|
20
|
+
</ye.Fragment>}):<M style={e.hudBreadcrumbChipActive}>
|
|
21
|
+
<B style={e.hudBreadcrumbTextActive}>
|
|
22
|
+
{t.componentName}
|
|
23
|
+
</B>
|
|
24
|
+
</M>}
|
|
25
|
+
</Me>
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
<O style={e.hudFlipBtn}onPress={()=>{T(),de(q==="top"?"bottom":"top")}}>
|
|
29
|
+
<B style={e.hudFlipBtnText}>🔄</B>
|
|
30
|
+
</O>
|
|
31
|
+
</M>
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
<M style={e.hudBodyRow}pointerEvents="none">
|
|
35
|
+
|
|
36
|
+
<M style={e.hudStylesColumn}>
|
|
37
|
+
{_.length>0?_.slice(0,7).map(([x,F])=><M key={x}style={e.hudStyleRow}>
|
|
38
|
+
<B style={e.hudStyleKey}>{x}:</B>
|
|
39
|
+
<B style={e.hudStyleVal}numberOfLines={1}>
|
|
40
|
+
{String(F)}
|
|
41
|
+
</B>
|
|
42
|
+
</M>):<M style={e.hudStyleRow}>
|
|
43
|
+
<B style={e.hudStyleKey}>layout:</B>
|
|
44
|
+
<B style={e.hudStyleVal}>default</B>
|
|
45
|
+
</M>}
|
|
46
|
+
</M>
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
<M style={e.hudBoxModelWrapper}>
|
|
50
|
+
<M style={e.boxModelMarginLayer}>
|
|
51
|
+
<B style={e.boxModelMarginLabel}>margin</B>
|
|
52
|
+
<B style={e.boxModelInsetTop}>{z.margin.top}</B>
|
|
53
|
+
<B style={e.boxModelInsetRight}>{z.margin.right}</B>
|
|
54
|
+
<B style={e.boxModelInsetBottom}>{z.margin.bottom}</B>
|
|
55
|
+
<B style={e.boxModelInsetLeft}>{z.margin.left}</B>
|
|
56
|
+
|
|
57
|
+
<M style={e.boxModelPaddingLayer}>
|
|
58
|
+
<B style={e.boxModelPaddingLabel}>padding</B>
|
|
59
|
+
<B style={e.boxModelInsetTop}>{z.padding.top}</B>
|
|
60
|
+
<B style={e.boxModelInsetRight}>{z.padding.right}</B>
|
|
61
|
+
<B style={e.boxModelInsetBottom}>{z.padding.bottom}</B>
|
|
62
|
+
<B style={e.boxModelInsetLeft}>{z.padding.left}</B>
|
|
63
|
+
|
|
64
|
+
<M style={e.boxModelContentLayer}>
|
|
65
|
+
<B style={e.boxModelCoords}>
|
|
66
|
+
({Math.round(t.layout.pageX)},{" "}
|
|
67
|
+
{Math.round(t.layout.pageY)})
|
|
68
|
+
</B>
|
|
69
|
+
<B style={e.boxModelDimensions}>
|
|
70
|
+
{Math.round(t.layout.width)} ×{" "}
|
|
71
|
+
{Math.round(t.layout.height)}
|
|
72
|
+
</B>
|
|
73
|
+
</M>
|
|
74
|
+
</M>
|
|
75
|
+
</M>
|
|
76
|
+
</M>
|
|
77
|
+
</M>
|
|
78
|
+
</M>}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
{C&&<M pointerEvents="none"style={[e.highlightBox,{top:C.y,left:C.x,width:C.width,height:C.height}]}>
|
|
82
|
+
|
|
83
|
+
<M style={e.contentTint}/>
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
<M style={[e.elementBadge,C.y<50?e.elementBadgeBottom:e.elementBadgeTop]}>
|
|
87
|
+
<B style={e.elementBadgeTag}><{C.componentName}></B>
|
|
88
|
+
<B style={e.elementBadgeDim}>
|
|
89
|
+
{Math.round(C.width)} × {Math.round(C.height)} pt
|
|
90
|
+
</B>
|
|
91
|
+
</M>
|
|
92
|
+
</M>}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
{ae&&C&&<M style={E.absoluteFill}pointerEvents="none">
|
|
96
|
+
|
|
97
|
+
<M style={[e.guideLineV,{top:0,left:C.x+C.width/2,height:C.y}]}>
|
|
98
|
+
<B style={e.guideBadge}>{Math.round(C.y)} pt</B>
|
|
99
|
+
</M>
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
<M style={[e.guideLineH,{top:C.y+C.height/2,left:0,width:C.x}]}>
|
|
103
|
+
<B style={e.guideBadge}>{Math.round(C.x)} pt</B>
|
|
104
|
+
</M>
|
|
105
|
+
</M>}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
<M style={e.hudToolbar}>
|
|
109
|
+
<M style={e.hudLeftGroup}>
|
|
110
|
+
<O style={[e.modePillBtn,!N&&e.modePillBtnActive]}onPress={()=>{T(),Q(!1)}}>
|
|
111
|
+
<B style={[e.modePillText,!N&&e.modePillTextActive]}>
|
|
112
|
+
Inspect
|
|
113
|
+
</B>
|
|
114
|
+
</O>
|
|
115
|
+
|
|
116
|
+
<O style={[e.modePillBtn,N&&e.modePillBtnActive]}onPress={()=>{T(),Q(!N)}}>
|
|
117
|
+
<B style={[e.modePillText,N&&e.modePillTextActive]}>
|
|
118
|
+
Touchables
|
|
119
|
+
</B>
|
|
120
|
+
</O>
|
|
121
|
+
</M>
|
|
122
|
+
|
|
123
|
+
<M style={e.hudActions}>
|
|
124
|
+
<J style={[e.hudBtn,W&&e.hudBtnActive]}onPress={()=>{T(),ie(!W)}}>
|
|
125
|
+
<Ae color={W?P.white:"#CBD5E1"}size={14}/>
|
|
126
|
+
</J>
|
|
127
|
+
|
|
128
|
+
{t&&<J style={[e.hudBtn,e.hudBtnPrimary]}onPress={me}>
|
|
129
|
+
<Te color={P.white}size={13}/>
|
|
130
|
+
<B style={e.hudBtnPrimaryText}>Full JSX & Specs</B>
|
|
131
|
+
</J>}
|
|
132
|
+
|
|
133
|
+
<J style={[e.hudBtn,e.hudBtnClose]}onPress={()=>{T(),K(!1)}}>
|
|
134
|
+
<Ie color={P.white}size={13}/>
|
|
135
|
+
</J>
|
|
136
|
+
</M>
|
|
137
|
+
</M>
|
|
138
|
+
</M>};const e=E.create({overlayContainer:{zIndex:99999999,elevation:99999999},gridPattern:{backgroundColor:"transparent",borderWidth:0,opacity:.15},devToolsHudContainer:{position:"absolute",left:0,right:0,backgroundColor:"rgba(15, 23, 42, 0.88)",paddingTop:xe.OS==="ios"?44:20,paddingBottom:10,paddingHorizontal:12,borderBottomWidth:1,borderBottomColor:"rgba(255, 255, 255, 0.12)",zIndex:999999999,shadowColor:"#000",shadowOffset:{width:0,height:4},shadowOpacity:.4,shadowRadius:8,elevation:12},hudTop:{top:0},hudBottom:{bottom:60,borderTopWidth:1,borderTopColor:"rgba(255, 255, 255, 0.12)",paddingTop:10},hudBreadcrumbBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8},hudBreadcrumbContent:{alignItems:"center",gap:4,paddingRight:10},hudDotSeparator:{color:"#94A3B8",fontSize:12,paddingHorizontal:2},hudBreadcrumbChip:{paddingHorizontal:6,paddingVertical:2.5,borderRadius:4},hudBreadcrumbChipActive:{backgroundColor:"rgba(255, 255, 255, 0.18)",borderWidth:1,borderColor:"rgba(255, 255, 255, 0.35)"},hudBreadcrumbText:{color:"#CBD5E1",fontSize:11,fontFamily:S.medium},hudBreadcrumbTextActive:{color:"#FFFFFF",fontFamily:S.bold},hudFlipBtn:{padding:4,borderRadius:4,backgroundColor:"rgba(255, 255, 255, 0.12)"},hudFlipBtnText:{fontSize:12},hudBodyRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"flex-start",marginTop:4},hudStylesColumn:{flex:1,paddingRight:8,gap:2},hudStyleRow:{flexDirection:"row",alignItems:"center",gap:4},hudStyleKey:{color:"#94A3B8",fontSize:10,fontFamily:S.regular},hudStyleVal:{color:"#F8FAFC",fontSize:10,fontFamily:S.bold},hudBoxModelWrapper:{width:140,height:90,alignItems:"center",justifyContent:"center"},boxModelMarginLayer:{width:"100%",height:"100%",borderWidth:1,borderColor:"rgba(245, 158, 11, 0.6)",backgroundColor:"rgba(245, 158, 11, 0.08)",borderRadius:4,alignItems:"center",justifyContent:"center",position:"relative",padding:12},boxModelMarginLabel:{position:"absolute",top:2,left:4,fontSize:8,fontFamily:S.bold,color:"#F59E0B"},boxModelPaddingLayer:{width:"100%",height:"100%",borderWidth:1,borderColor:"rgba(251, 191, 36, 0.6)",backgroundColor:"rgba(251, 191, 36, 0.08)",borderRadius:3,alignItems:"center",justifyContent:"center",position:"relative",padding:6},boxModelPaddingLabel:{position:"absolute",top:1,left:3,fontSize:7.5,fontFamily:S.bold,color:"#FBBF24"},boxModelContentLayer:{alignItems:"center",justifyContent:"center"},boxModelCoords:{color:"#FACC15",fontSize:8,fontFamily:S.bold},boxModelDimensions:{color:"#FACC15",fontSize:9,fontFamily:S.bold},boxModelInsetTop:{position:"absolute",top:1,alignSelf:"center",fontSize:7.5,color:"#CBD5E1",fontFamily:S.medium},boxModelInsetBottom:{position:"absolute",bottom:1,alignSelf:"center",fontSize:7.5,color:"#CBD5E1",fontFamily:S.medium},boxModelInsetLeft:{position:"absolute",left:2,alignSelf:"center",fontSize:7.5,color:"#CBD5E1",fontFamily:S.medium},boxModelInsetRight:{position:"absolute",right:2,alignSelf:"center",fontSize:7.5,color:"#CBD5E1",fontFamily:S.medium},highlightBox:{position:"absolute",borderWidth:1.5,borderColor:"#4F46E5",backgroundColor:"rgba(79, 70, 229, 0.15)",borderRadius:4,zIndex:100},contentTint:{flex:1,backgroundColor:"rgba(16, 185, 129, 0.1)",margin:3,borderRadius:2,borderWidth:1,borderColor:"rgba(16, 185, 129, 0.35)",borderStyle:"dashed"},elementBadge:{position:"absolute",flexDirection:"row",alignItems:"center",gap:6,backgroundColor:"rgba(15, 23, 42, 0.85)",paddingHorizontal:7,paddingVertical:3.5,borderRadius:5,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.2)"},elementBadgeTop:{top:-26,left:0},elementBadgeBottom:{bottom:-26,left:0},elementBadgeTag:{fontSize:10.5,fontFamily:S.bold,color:"#818CF8"},elementBadgeDim:{fontSize:9.5,fontFamily:S.medium,color:"#E2E8F0"},guideLineV:{position:"absolute",width:1,backgroundColor:"#EF4444",alignItems:"center",justifyContent:"center"},guideLineH:{position:"absolute",height:1,backgroundColor:"#EF4444",alignItems:"center",justifyContent:"center"},guideBadge:{backgroundColor:"#EF4444",color:P.white,fontSize:9,fontFamily:S.bold,paddingHorizontal:4,paddingVertical:1,borderRadius:3},hudToolbar:{position:"absolute",bottom:24,left:14,right:14,backgroundColor:"rgba(15, 23, 42, 0.92)",borderRadius:12,paddingHorizontal:12,paddingVertical:8,flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderWidth:1,borderColor:"rgba(255, 255, 255, 0.15)",shadowColor:"#000",shadowOffset:{width:0,height:4},shadowOpacity:.4,shadowRadius:8,elevation:10},hudLeftGroup:{flexDirection:"row",alignItems:"center",gap:4},modePillBtn:{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:"rgba(255, 255, 255, 0.08)"},modePillBtnActive:{backgroundColor:P.brandPurple},modePillText:{fontSize:10.5,fontFamily:S.medium,color:"#94A3B8"},modePillTextActive:{color:P.white,fontFamily:S.bold},hudActions:{flexDirection:"row",alignItems:"center",gap:6},hudBtn:{paddingHorizontal:8,paddingVertical:5,borderRadius:6,backgroundColor:"rgba(255, 255, 255, 0.1)",borderWidth:1,borderColor:"rgba(255, 255, 255, 0.15)",alignItems:"center",justifyContent:"center"},hudBtnActive:{backgroundColor:P.brandPurple,borderColor:P.brandPurple},hudBtnPrimary:{flexDirection:"row",gap:4,backgroundColor:P.brandPurple,borderColor:P.brandPurple},hudBtnPrimaryText:{fontSize:10.5,fontFamily:S.bold,color:P.white},hudBtnClose:{backgroundColor:"#E11D48",borderColor:"#E11D48"}});
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import"react";import{ScrollView as G,StyleSheet as A,Text as C,TouchableOpacity as B,View as T}from"react-native";import{useInspector as v}from"./InspectorContext";import{ChevronIcon as M,EmptyRadarIcon as N,InspectPointerIcon as O,LayersIcon as U,RulerIcon as J,SlidersIcon as X,TrashIcon as Y}from"../NetworkIcons";import P from"../TouchableScale";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as f}from"../../styles/AppFonts";import{triggerNativeHaptic as w}from"../../native/NativeInspector";import{showToast as W}from"../../helpers/toast";import{BoxModelVisualizer as K}from"./BoxModelVisualizer";export const UiInspectorTab=()=>{const{selectedUiElement:S,setSelectedUiElement:D,setIsInspectModeActive:E,setVisible:H,showAlignmentGrid:I,setShowAlignmentGrid:L,uiInspectorHistory:F,clearUiInspectorHistory:V}=v(),z=()=>{w(),H(!1),E(!0),W("Touch anywhere to inspect JSX components")};return<G showsVerticalScrollIndicator={!1}contentContainerStyle={e.container}>
|
|
2
|
+
|
|
3
|
+
<T style={e.heroCard}>
|
|
4
|
+
<T style={e.heroLeft}>
|
|
5
|
+
<T style={e.heroIconBadge}>
|
|
6
|
+
<O color={t.white}size={22}/>
|
|
7
|
+
</T>
|
|
8
|
+
<T style={e.heroTextGroup}>
|
|
9
|
+
<C style={e.heroTitle}>Inspect Elements On Screen</C>
|
|
10
|
+
<C style={e.heroSubtitle}>
|
|
11
|
+
Tap, drag, and highlight rendered JSX components to inspect styles, props & box model in real-time.
|
|
12
|
+
</C>
|
|
13
|
+
</T>
|
|
14
|
+
</T>
|
|
15
|
+
|
|
16
|
+
<P style={e.heroButton}onPress={z}>
|
|
17
|
+
<U color={t.brandPurple}size={16}/>
|
|
18
|
+
<C style={e.heroButtonText}>Start Inspect Mode</C>
|
|
19
|
+
</P>
|
|
20
|
+
</T>
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
{S?<T style={e.selectedCard}>
|
|
24
|
+
<T style={e.selectedHeader}>
|
|
25
|
+
<T style={e.selectedTitleGroup}>
|
|
26
|
+
<T style={e.tagBadge}>
|
|
27
|
+
<C style={e.tagBadgeText}><{S.componentName}></C>
|
|
28
|
+
</T>
|
|
29
|
+
<C style={e.dimensionsBadge}>
|
|
30
|
+
{Math.round(S.layout.width)} × {Math.round(S.layout.height)} pt
|
|
31
|
+
</C>
|
|
32
|
+
</T>
|
|
33
|
+
|
|
34
|
+
<T style={e.a11yScoreBadge}>
|
|
35
|
+
<C style={[e.a11yScoreText,S.a11y.hasValidTouchTarget?e.a11yScoreTextPass:e.a11yScoreTextWarn]}>
|
|
36
|
+
{S.a11y.hasValidTouchTarget?"A11y Pass":"A11y Warning"}
|
|
37
|
+
</C>
|
|
38
|
+
</T>
|
|
39
|
+
</T>
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
<K boxModel={S.boxModel}compact/>
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
<T style={e.metricsBar}>
|
|
46
|
+
<T style={e.metricChip}>
|
|
47
|
+
<C style={e.metricChipLabel}>Props:</C>
|
|
48
|
+
<C style={e.metricChipValue}>
|
|
49
|
+
{Object.keys(S.props).length}
|
|
50
|
+
</C>
|
|
51
|
+
</T>
|
|
52
|
+
<T style={e.metricChip}>
|
|
53
|
+
<C style={e.metricChipLabel}>Styles:</C>
|
|
54
|
+
<C style={e.metricChipValue}>
|
|
55
|
+
{Object.keys(S.flattenedStyles).length}
|
|
56
|
+
</C>
|
|
57
|
+
</T>
|
|
58
|
+
<T style={e.metricChip}>
|
|
59
|
+
<C style={e.metricChipLabel}>Depth:</C>
|
|
60
|
+
<C style={e.metricChipValue}>
|
|
61
|
+
{S.hierarchy.length} levels
|
|
62
|
+
</C>
|
|
63
|
+
</T>
|
|
64
|
+
</T>
|
|
65
|
+
</T>:<T style={e.emptyCard}>
|
|
66
|
+
<N color={t.grayTextWeak}size={32}/>
|
|
67
|
+
<C style={e.emptyCardTitle}>No Element Selected</C>
|
|
68
|
+
<C style={e.emptyCardSubtitle}>
|
|
69
|
+
Launch Inspect Mode to select an on-screen JSX component.
|
|
70
|
+
</C>
|
|
71
|
+
</T>}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
<T style={e.toolsSection}>
|
|
75
|
+
<C style={e.sectionHeader}>DESIGN & ALIGNMENT TOOLS</C>
|
|
76
|
+
<T style={e.toolsGrid}>
|
|
77
|
+
<B style={[e.toolCard,I&&e.toolCardActive]}onPress={()=>{w(),L(!I)}}>
|
|
78
|
+
<J color={I?t.brandPurple:t.slate600}size={18}/>
|
|
79
|
+
<C style={[e.toolCardTitle,I&&e.toolCardTitleActive]}>
|
|
80
|
+
8pt Grid Guide
|
|
81
|
+
</C>
|
|
82
|
+
<C style={e.toolCardSub}>
|
|
83
|
+
{I?"Enabled":"Disabled"}
|
|
84
|
+
</C>
|
|
85
|
+
</B>
|
|
86
|
+
|
|
87
|
+
<B style={e.toolCard}onPress={z}>
|
|
88
|
+
<X color={t.brandPurple}size={18}/>
|
|
89
|
+
<C style={e.toolCardTitle}>Live Tweaker</C>
|
|
90
|
+
<C style={e.toolCardSub}>Sandbox Styles</C>
|
|
91
|
+
</B>
|
|
92
|
+
</T>
|
|
93
|
+
</T>
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
{F.length>0&&<T style={e.historySection}>
|
|
97
|
+
<T style={e.historyHeader}>
|
|
98
|
+
<C style={e.sectionHeader}>RECENTLY INSPECTED ({F.length})</C>
|
|
99
|
+
<P style={e.clearHistoryBtn}onPress={()=>{w(),V(),W("Cleared inspection history")}}>
|
|
100
|
+
<Y color={t.grayTextWeak}size={12}/>
|
|
101
|
+
<C style={e.clearHistoryBtnText}>Clear</C>
|
|
102
|
+
</P>
|
|
103
|
+
</T>
|
|
104
|
+
|
|
105
|
+
<T style={e.historyList}>
|
|
106
|
+
{F.map((x,R)=><B key={x.id||R}style={e.historyItem}onPress={()=>{w(),D(x)}}>
|
|
107
|
+
<T style={e.historyItemLeft}>
|
|
108
|
+
<C style={e.historyItemTag}><{x.componentName}></C>
|
|
109
|
+
<C style={e.historyItemDim}>
|
|
110
|
+
{Math.round(x.layout.width)} × {Math.round(x.layout.height)} pt
|
|
111
|
+
</C>
|
|
112
|
+
</T>
|
|
113
|
+
<M color={t.grayTextWeak}size={12}direction="right"/>
|
|
114
|
+
</B>)}
|
|
115
|
+
</T>
|
|
116
|
+
</T>}
|
|
117
|
+
</G>};const e=A.create({container:{padding:12,gap:12},heroCard:{backgroundColor:t.brandPurple,borderRadius:14,padding:16,gap:14,shadowColor:t.brandPurple,shadowOffset:{width:0,height:4},shadowOpacity:.25,shadowRadius:8,elevation:4},heroLeft:{flexDirection:"row",gap:12,alignItems:"flex-start"},heroIconBadge:{width:40,height:40,borderRadius:10,backgroundColor:"#FFFFFF22",alignItems:"center",justifyContent:"center"},heroTextGroup:{flex:1},heroTitle:{fontSize:16,fontFamily:f.bold,color:t.white,marginBottom:4},heroSubtitle:{fontSize:12,fontFamily:f.medium,color:"#EEF2FF",lineHeight:17},heroButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",backgroundColor:t.white,paddingVertical:10,borderRadius:10,gap:8},heroButtonText:{fontSize:13,fontFamily:f.bold,color:t.brandPurple},selectedCard:{backgroundColor:t.white,borderRadius:12,padding:14,borderWidth:1,borderColor:t.grayBorderSecondary,gap:10},selectedHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},selectedTitleGroup:{flexDirection:"row",alignItems:"center",gap:8},tagBadge:{backgroundColor:"#4F46E518",paddingHorizontal:8,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:"#4F46E533"},tagBadgeText:{fontSize:13,fontFamily:f.bold,color:t.brandPurple},dimensionsBadge:{fontSize:12,fontFamily:f.medium,color:t.grayTextWeak},a11yScoreBadge:{paddingHorizontal:8,paddingVertical:3,borderRadius:5,backgroundColor:t.slate100},a11yScoreText:{fontSize:10,fontFamily:f.bold},a11yScoreTextPass:{color:"#059669"},a11yScoreTextWarn:{color:"#D97706"},metricsBar:{flexDirection:"row",backgroundColor:t.slate50,borderRadius:8,padding:8,justifyContent:"space-around"},metricChip:{flexDirection:"row",gap:4,alignItems:"center"},metricChipLabel:{fontSize:11,fontFamily:f.medium,color:t.grayTextWeak},metricChipValue:{fontSize:11,fontFamily:f.bold,color:t.slate900},emptyCard:{backgroundColor:t.white,borderRadius:12,padding:24,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:t.grayBorderSecondary,borderStyle:"dashed",gap:6},emptyCardTitle:{fontSize:14,fontFamily:f.semiBold,color:t.slate700,marginTop:4},emptyCardSubtitle:{fontSize:12,fontFamily:f.medium,color:t.grayTextWeak,textAlign:"center"},sectionHeader:{fontSize:10,fontFamily:f.bold,color:t.grayTextWeak,letterSpacing:.8},toolsSection:{gap:8},toolsGrid:{flexDirection:"row",gap:10},toolCard:{flex:1,backgroundColor:t.white,borderRadius:10,padding:12,borderWidth:1,borderColor:t.grayBorderSecondary,gap:4},toolCardActive:{borderColor:t.brandPurple,backgroundColor:"#EEF2FF"},toolCardTitle:{fontSize:12,fontFamily:f.semiBold,color:t.slate900,marginTop:4},toolCardTitleActive:{color:t.brandPurple},toolCardSub:{fontSize:10,fontFamily:f.medium,color:t.grayTextWeak},historySection:{gap:8,marginTop:4},historyHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},clearHistoryBtn:{flexDirection:"row",alignItems:"center",gap:4},clearHistoryBtnText:{fontSize:10,fontFamily:f.medium,color:t.grayTextWeak},historyList:{backgroundColor:t.white,borderRadius:10,borderWidth:1,borderColor:t.grayBorderSecondary,overflow:"hidden"},historyItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingHorizontal:12,paddingVertical:10,borderBottomWidth:1,borderBottomColor:t.slate100},historyItemLeft:{flexDirection:"row",alignItems:"center",gap:8},historyItemTag:{fontSize:12,fontFamily:f.bold,color:t.brandPurple},historyItemDim:{fontSize:11,fontFamily:f.medium,color:t.grayTextWeak}});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface UiLiveStyleTweakerProps {
|
|
3
|
+
componentName: string;
|
|
4
|
+
originalStyles: Record<string, any>;
|
|
5
|
+
tweakedStyles: Record<string, any>;
|
|
6
|
+
onApplyStyle: (key: string, value: any) => void;
|
|
7
|
+
onResetStyles: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const UiLiveStyleTweaker: React.FC<UiLiveStyleTweakerProps>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import"react";import{ScrollView as G,StyleSheet as M,Text as B,TouchableOpacity as R,View as T}from"react-native";import{AppColors as w}from"../../styles/AppColors";import{AppFonts as S}from"../../styles/AppFonts";import{RotateCcwIcon as O,SlidersIcon as N,CopyIcon as U}from"../NetworkIcons";import W from"../TouchableScale";import{generateStyleSheetSnippet as q}from"../../helpers/uiInspectorEngine";import{triggerNativeHaptic as C}from"../../native/NativeInspector";import{showToast as P}from"../../helpers/toast";import J from"@react-native-clipboard/clipboard";const K=["#4F46E5","#7C3AED","#2563EB","#0D9488","#10B981","#F59E0B","#E11D48","#0F172A","#F8FAFC","#FFFFFF","transparent"];export const UiLiveStyleTweaker=({componentName:k,originalStyles:z,tweakedStyles:D,onApplyStyle:F,onResetStyles:A})=>{const f={...z,...D},I=Object.keys(D).length>0,V=()=>{const x=q(k,f);J.setString(x),C(),P("Copied tweaked StyleSheet to clipboard")},h=(x,E,v=0)=>{const H=typeof f[x]=="number"?f[x]:0,L=Math.max(v,H+E);F(x,L),C()};return<G showsVerticalScrollIndicator={!1}contentContainerStyle={e.container}>
|
|
2
|
+
|
|
3
|
+
<T style={e.topActionsRow}>
|
|
4
|
+
<T style={e.titleWithBadge}>
|
|
5
|
+
<N color={w.brandPurple}size={18}/>
|
|
6
|
+
<B style={e.sectionTitle}>Live Style Sandbox</B>
|
|
7
|
+
{I&&<T style={e.modifiedBadge}>
|
|
8
|
+
<B style={e.modifiedBadgeText}>MODIFIED</B>
|
|
9
|
+
</T>}
|
|
10
|
+
</T>
|
|
11
|
+
|
|
12
|
+
<T style={e.actionButtonsGroup}>
|
|
13
|
+
{I&&<W style={e.resetButton}onPress={()=>{A(),C(),P("Reset styles to original")}}>
|
|
14
|
+
<O color="#E11D48"size={14}/>
|
|
15
|
+
<B style={e.resetButtonText}>Reset</B>
|
|
16
|
+
</W>}
|
|
17
|
+
|
|
18
|
+
<W style={e.exportButton}onPress={V}>
|
|
19
|
+
<U color={w.white}size={14}/>
|
|
20
|
+
<B style={e.exportButtonText}>Copy CSS</B>
|
|
21
|
+
</W>
|
|
22
|
+
</T>
|
|
23
|
+
</T>
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
<T style={e.card}>
|
|
27
|
+
<B style={e.cardHeader}>Padding & Margin</B>
|
|
28
|
+
|
|
29
|
+
<T style={e.controlRow}>
|
|
30
|
+
<B style={e.controlLabel}>Padding</B>
|
|
31
|
+
<T style={e.stepperContainer}>
|
|
32
|
+
<R style={e.stepperBtn}onPress={()=>h("padding",-2)}>
|
|
33
|
+
<B style={e.stepperBtnText}>-</B>
|
|
34
|
+
</R>
|
|
35
|
+
<B style={e.stepperValue}>{f.padding??0} pt</B>
|
|
36
|
+
<R style={e.stepperBtn}onPress={()=>h("padding",2)}>
|
|
37
|
+
<B style={e.stepperBtnText}>+</B>
|
|
38
|
+
</R>
|
|
39
|
+
</T>
|
|
40
|
+
</T>
|
|
41
|
+
|
|
42
|
+
<T style={e.controlRow}>
|
|
43
|
+
<B style={e.controlLabel}>Margin</B>
|
|
44
|
+
<T style={e.stepperContainer}>
|
|
45
|
+
<R style={e.stepperBtn}onPress={()=>h("margin",-2)}>
|
|
46
|
+
<B style={e.stepperBtnText}>-</B>
|
|
47
|
+
</R>
|
|
48
|
+
<B style={e.stepperValue}>{f.margin??0} pt</B>
|
|
49
|
+
<R style={e.stepperBtn}onPress={()=>h("margin",2)}>
|
|
50
|
+
<B style={e.stepperBtnText}>+</B>
|
|
51
|
+
</R>
|
|
52
|
+
</T>
|
|
53
|
+
</T>
|
|
54
|
+
|
|
55
|
+
<T style={e.controlRow}>
|
|
56
|
+
<B style={e.controlLabel}>Gap</B>
|
|
57
|
+
<T style={e.stepperContainer}>
|
|
58
|
+
<R style={e.stepperBtn}onPress={()=>h("gap",-2)}>
|
|
59
|
+
<B style={e.stepperBtnText}>-</B>
|
|
60
|
+
</R>
|
|
61
|
+
<B style={e.stepperValue}>{f.gap??0} pt</B>
|
|
62
|
+
<R style={e.stepperBtn}onPress={()=>h("gap",2)}>
|
|
63
|
+
<B style={e.stepperBtnText}>+</B>
|
|
64
|
+
</R>
|
|
65
|
+
</T>
|
|
66
|
+
</T>
|
|
67
|
+
</T>
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
<T style={e.card}>
|
|
71
|
+
<B style={e.cardHeader}>Borders & Corners</B>
|
|
72
|
+
|
|
73
|
+
<T style={e.controlRow}>
|
|
74
|
+
<B style={e.controlLabel}>Border Radius</B>
|
|
75
|
+
<T style={e.stepperContainer}>
|
|
76
|
+
<R style={e.stepperBtn}onPress={()=>h("borderRadius",-2)}>
|
|
77
|
+
<B style={e.stepperBtnText}>-</B>
|
|
78
|
+
</R>
|
|
79
|
+
<B style={e.stepperValue}>{f.borderRadius??0} pt</B>
|
|
80
|
+
<R style={e.stepperBtn}onPress={()=>h("borderRadius",2)}>
|
|
81
|
+
<B style={e.stepperBtnText}>+</B>
|
|
82
|
+
</R>
|
|
83
|
+
</T>
|
|
84
|
+
</T>
|
|
85
|
+
|
|
86
|
+
<T style={e.controlRow}>
|
|
87
|
+
<B style={e.controlLabel}>Border Width</B>
|
|
88
|
+
<T style={e.stepperContainer}>
|
|
89
|
+
<R style={e.stepperBtn}onPress={()=>h("borderWidth",-1)}>
|
|
90
|
+
<B style={e.stepperBtnText}>-</B>
|
|
91
|
+
</R>
|
|
92
|
+
<B style={e.stepperValue}>{f.borderWidth??0} pt</B>
|
|
93
|
+
<R style={e.stepperBtn}onPress={()=>h("borderWidth",1)}>
|
|
94
|
+
<B style={e.stepperBtnText}>+</B>
|
|
95
|
+
</R>
|
|
96
|
+
</T>
|
|
97
|
+
</T>
|
|
98
|
+
</T>
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
<T style={e.card}>
|
|
102
|
+
<B style={e.cardHeader}>Typography</B>
|
|
103
|
+
|
|
104
|
+
<T style={e.controlRow}>
|
|
105
|
+
<B style={e.controlLabel}>Font Size</B>
|
|
106
|
+
<T style={e.stepperContainer}>
|
|
107
|
+
<R style={e.stepperBtn}onPress={()=>h("fontSize",-1,8)}>
|
|
108
|
+
<B style={e.stepperBtnText}>-</B>
|
|
109
|
+
</R>
|
|
110
|
+
<B style={e.stepperValue}>{f.fontSize??14} pt</B>
|
|
111
|
+
<R style={e.stepperBtn}onPress={()=>h("fontSize",1)}>
|
|
112
|
+
<B style={e.stepperBtnText}>+</B>
|
|
113
|
+
</R>
|
|
114
|
+
</T>
|
|
115
|
+
</T>
|
|
116
|
+
|
|
117
|
+
<T style={e.segmentedRow}>
|
|
118
|
+
<B style={e.controlLabel}>Weight</B>
|
|
119
|
+
<T style={e.segmentedGroup}>
|
|
120
|
+
{["normal","500","600","bold"].map(x=><R key={x}style={[e.segmentItem,f.fontWeight===x&&e.segmentItemActive]}onPress={()=>{F("fontWeight",x),C()}}>
|
|
121
|
+
<B style={[e.segmentText,f.fontWeight===x&&e.segmentTextActive]}>
|
|
122
|
+
{x}
|
|
123
|
+
</B>
|
|
124
|
+
</R>)}
|
|
125
|
+
</T>
|
|
126
|
+
</T>
|
|
127
|
+
</T>
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
<T style={e.card}>
|
|
131
|
+
<B style={e.cardHeader}>Background Color</B>
|
|
132
|
+
<T style={e.paletteGrid}>
|
|
133
|
+
{K.map(x=><R key={x}style={[e.colorSwatch,{backgroundColor:x},f.backgroundColor===x&&e.colorSwatchActive]}onPress={()=>{F("backgroundColor",x),C()}}/>)}
|
|
134
|
+
</T>
|
|
135
|
+
</T>
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
<T style={e.card}>
|
|
139
|
+
<B style={e.cardHeader}>Opacity & Elevation</B>
|
|
140
|
+
<T style={e.segmentedGroup}>
|
|
141
|
+
{[1,.8,.6,.4,.2].map(x=><R key={x}style={[e.segmentItem,f.opacity===x&&e.segmentItemActive]}onPress={()=>{F("opacity",x),C()}}>
|
|
142
|
+
<B style={[e.segmentText,f.opacity===x&&e.segmentTextActive]}>
|
|
143
|
+
{Math.round(x*100)}%
|
|
144
|
+
</B>
|
|
145
|
+
</R>)}
|
|
146
|
+
</T>
|
|
147
|
+
</T>
|
|
148
|
+
</G>};const e=M.create({container:{paddingVertical:6,gap:10},topActionsRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:4},titleWithBadge:{flexDirection:"row",alignItems:"center",gap:6},sectionTitle:{fontSize:14,fontFamily:S.semiBold,color:w.slate900},modifiedBadge:{backgroundColor:"#F59E0B22",paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1,borderColor:"#F59E0B55"},modifiedBadgeText:{fontSize:9,fontFamily:S.bold,color:"#D97706"},actionButtonsGroup:{flexDirection:"row",gap:8},resetButton:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:"#E11D4811",borderWidth:1,borderColor:"#E11D4833",paddingHorizontal:8,paddingVertical:5,borderRadius:6},resetButtonText:{fontSize:11,fontFamily:S.semiBold,color:"#E11D48"},exportButton:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:w.brandPurple,paddingHorizontal:10,paddingVertical:5,borderRadius:6},exportButtonText:{fontSize:11,fontFamily:S.semiBold,color:w.white},card:{backgroundColor:w.white,borderRadius:12,padding:12,borderWidth:1,borderColor:w.grayBorderSecondary,gap:8},cardHeader:{fontSize:12,fontFamily:S.semiBold,color:w.slate700,marginBottom:2},controlRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},controlLabel:{fontSize:12,fontFamily:S.medium,color:w.slate600},stepperContainer:{flexDirection:"row",alignItems:"center",gap:8,backgroundColor:w.slate50,borderRadius:6,padding:2},stepperBtn:{width:28,height:28,backgroundColor:w.white,borderRadius:5,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:w.grayBorderSecondary},stepperBtnText:{fontSize:15,fontFamily:S.bold,color:w.slate900},stepperValue:{fontSize:12,fontFamily:S.semiBold,color:w.slate900,minWidth:44,textAlign:"center"},segmentedRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},segmentedGroup:{flexDirection:"row",backgroundColor:w.slate100,borderRadius:8,padding:2,gap:2},segmentItem:{paddingHorizontal:10,paddingVertical:5,borderRadius:6},segmentItemActive:{backgroundColor:w.brandPurple},segmentText:{fontSize:11,fontFamily:S.medium,color:w.slate600},segmentTextActive:{color:w.white,fontFamily:S.semiBold},paletteGrid:{flexDirection:"row",flexWrap:"wrap",gap:8},colorSwatch:{width:28,height:28,borderRadius:6,borderWidth:1,borderColor:w.grayBorderSecondary},colorSwatchActive:{borderColor:w.brandPurple,borderWidth:3}});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { default as MainScreen } from './MainScreen';
|
|
2
|
+
export { default as TabBar } from './TabBar';
|
|
3
|
+
export { default as InspectorHeader } from './InspectorHeader';
|
|
4
|
+
export { default as FabLauncher } from './FabLauncher';
|
|
5
|
+
export { default as NetworkTab } from './NetworkTab';
|
|
6
|
+
export { default as NetworkDetail } from './NetworkDetail';
|
|
7
|
+
export { default as ConsoleTab } from './ConsoleTab';
|
|
8
|
+
export { default as LogDetail } from './LogDetail';
|
|
9
|
+
export { PerformanceTab } from './PerformanceTab';
|
|
10
|
+
export { default as AnalyticsTab } from './AnalyticsTab';
|
|
11
|
+
export { default as ReduxTab } from './ReduxTab';
|
|
12
|
+
export { default as ReduxDetail } from './ReduxDetail';
|
|
13
|
+
export { default as CrashTab } from './CrashTab';
|
|
14
|
+
export { default as CrashDetail } from './CrashDetail';
|
|
15
|
+
export { default as PushTab } from './PushTab';
|
|
16
|
+
export { default as PushDetail } from './PushDetail';
|
|
17
|
+
export { default as SocketTab } from './SocketTab';
|
|
18
|
+
export { default as SocketDetail } from './SocketDetail';
|
|
19
|
+
export { default as DeviceInfoTab } from './DeviceInfoTab';
|
|
20
|
+
export { default as StorageTab } from './StorageTab';
|
|
21
|
+
export { default as DebuggingTab } from './DebuggingTab';
|
|
22
|
+
export { MediaGalleryTab } from './MediaGalleryTab';
|
|
23
|
+
export { default as SettingsPanel } from './SettingsPanel';
|
|
24
|
+
export { UiInspectorTab } from './UiInspectorTab';
|
|
25
|
+
export { UiInspectorDetail } from './UiInspectorDetail';
|
|
26
|
+
export { UiInspectorOverlay } from './UiInspectorOverlay';
|
|
27
|
+
export { BoxModelVisualizer } from './BoxModelVisualizer';
|
|
28
|
+
export { UiA11yAuditPanel } from './UiA11yAuditPanel';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default as MainScreen}from"./MainScreen";export{default as TabBar}from"./TabBar";export{default as InspectorHeader}from"./InspectorHeader";export{default as FabLauncher}from"./FabLauncher";export{default as NetworkTab}from"./NetworkTab";export{default as NetworkDetail}from"./NetworkDetail";export{default as ConsoleTab}from"./ConsoleTab";export{default as LogDetail}from"./LogDetail";export{PerformanceTab}from"./PerformanceTab";export{default as AnalyticsTab}from"./AnalyticsTab";export{default as ReduxTab}from"./ReduxTab";export{default as ReduxDetail}from"./ReduxDetail";export{default as CrashTab}from"./CrashTab";export{default as CrashDetail}from"./CrashDetail";export{default as PushTab}from"./PushTab";export{default as PushDetail}from"./PushDetail";export{default as SocketTab}from"./SocketTab";export{default as SocketDetail}from"./SocketDetail";export{default as DeviceInfoTab}from"./DeviceInfoTab";export{default as StorageTab}from"./StorageTab";export{default as DebuggingTab}from"./DebuggingTab";export{MediaGalleryTab}from"./MediaGalleryTab";export{default as SettingsPanel}from"./SettingsPanel";export{UiInspectorTab}from"./UiInspectorTab";export{UiInspectorDetail}from"./UiInspectorDetail";export{UiInspectorOverlay}from"./UiInspectorOverlay";export{BoxModelVisualizer}from"./BoxModelVisualizer";export{UiA11yAuditPanel}from"./UiA11yAuditPanel";
|