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.
Files changed (186) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  3. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  6. package/android/.gradle/8.9/gc.properties +0 -0
  7. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  8. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  9. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  10. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  11. package/android/.gradle/9.2.0/gc.properties +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  14. package/android/.gradle/vcs-1/gc.properties +0 -0
  15. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  16. package/android/src/main/AndroidManifest.xml +11 -0
  17. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +379 -19
  18. package/android/src/main/res/xml/inappinspector_file_paths.xml +7 -0
  19. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +47 -49
  20. package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  21. package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +76 -0
  22. package/dist/commonjs/components/Inspector/ConsoleExportModal.js +51 -51
  23. package/dist/commonjs/components/Inspector/CrashTab.js +17 -17
  24. package/dist/commonjs/components/Inspector/DebuggingTab.js +24 -24
  25. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +2 -2
  26. package/dist/commonjs/components/Inspector/FabLauncher.js +2 -2
  27. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +2 -2
  28. package/dist/commonjs/components/Inspector/InspectorHeader.js +10 -10
  29. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +10 -10
  30. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +1 -0
  31. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +222 -222
  32. package/dist/commonjs/components/Inspector/NetworkExportModal.d.ts +10 -0
  33. package/dist/commonjs/components/Inspector/NetworkExportModal.js +333 -0
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +48 -41
  35. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +11 -12
  36. package/dist/commonjs/components/Inspector/ReduxDetail.js +17 -19
  37. package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
  38. package/dist/commonjs/components/Inspector/SettingsPanel.js +3 -6
  39. package/dist/commonjs/components/Inspector/SocketCard.js +2 -2
  40. package/dist/commonjs/components/Inspector/SupportPage.js +5 -5
  41. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  42. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +97 -0
  43. package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +2 -0
  44. package/dist/commonjs/components/Inspector/UiInspectorDetail.js +485 -0
  45. package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  46. package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +199 -0
  47. package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +2 -0
  48. package/dist/commonjs/components/Inspector/UiInspectorTab.js +117 -0
  49. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  50. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +148 -0
  51. package/dist/commonjs/components/Inspector/index.d.ts +28 -0
  52. package/dist/commonjs/components/Inspector/index.js +1 -0
  53. package/dist/commonjs/components/LogCard.js +9 -7
  54. package/dist/commonjs/constants/index.js +1 -1
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  56. package/dist/commonjs/constants/telemetryConfig.js +1 -1
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -1
  59. package/dist/commonjs/customHooks/crashHandler.d.ts +1 -1
  60. package/dist/commonjs/customHooks/crashHandler.js +6 -6
  61. package/dist/commonjs/customHooks/uiInspectorManager.d.ts +22 -0
  62. package/dist/commonjs/customHooks/uiInspectorManager.js +1 -0
  63. package/dist/commonjs/helpers/index.js +1 -3
  64. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -0
  65. package/dist/commonjs/helpers/searchQueryParser.js +7 -5
  66. package/dist/commonjs/helpers/shareFormatter.d.ts +16 -0
  67. package/dist/commonjs/helpers/shareFormatter.js +16 -9
  68. package/dist/commonjs/helpers/uiInspectorEngine.d.ts +62 -0
  69. package/dist/commonjs/helpers/uiInspectorEngine.js +19 -0
  70. package/dist/commonjs/i18n/locales/ar.json +1 -1
  71. package/dist/commonjs/i18n/locales/bn.json +1 -1
  72. package/dist/commonjs/i18n/locales/de.json +1 -1
  73. package/dist/commonjs/i18n/locales/en.json +1 -1
  74. package/dist/commonjs/i18n/locales/es.json +1 -1
  75. package/dist/commonjs/i18n/locales/fr.json +1 -1
  76. package/dist/commonjs/i18n/locales/gu.json +1 -1
  77. package/dist/commonjs/i18n/locales/hi.json +1 -1
  78. package/dist/commonjs/i18n/locales/id.json +1 -1
  79. package/dist/commonjs/i18n/locales/it.json +1 -1
  80. package/dist/commonjs/i18n/locales/ja.json +1 -1
  81. package/dist/commonjs/i18n/locales/kn.json +1 -1
  82. package/dist/commonjs/i18n/locales/ko.json +1 -1
  83. package/dist/commonjs/i18n/locales/ml.json +1 -1
  84. package/dist/commonjs/i18n/locales/mr.json +1 -1
  85. package/dist/commonjs/i18n/locales/nl.json +1 -1
  86. package/dist/commonjs/i18n/locales/pa.json +1 -1
  87. package/dist/commonjs/i18n/locales/pl.json +1 -1
  88. package/dist/commonjs/i18n/locales/pt.json +1 -1
  89. package/dist/commonjs/i18n/locales/ru.json +1 -1
  90. package/dist/commonjs/i18n/locales/ta.json +1 -1
  91. package/dist/commonjs/i18n/locales/te.json +1 -1
  92. package/dist/commonjs/i18n/locales/tr.json +1 -1
  93. package/dist/commonjs/i18n/locales/vi.json +1 -1
  94. package/dist/commonjs/i18n/locales/zh.json +1 -1
  95. package/dist/commonjs/index.d.ts +3 -1
  96. package/dist/commonjs/index.js +3 -3
  97. package/dist/commonjs/native/NativeInspector.d.ts +2 -0
  98. package/dist/commonjs/native/NativeInspector.js +1 -1
  99. package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
  100. package/dist/commonjs/types/editor.d.ts +31 -0
  101. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +73 -75
  102. package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  103. package/dist/esm/components/Inspector/BoxModelVisualizer.js +76 -0
  104. package/dist/esm/components/Inspector/ConsoleExportModal.js +67 -67
  105. package/dist/esm/components/Inspector/CrashTab.js +58 -58
  106. package/dist/esm/components/Inspector/DebuggingTab.js +89 -89
  107. package/dist/esm/components/Inspector/DeviceInfoTab.js +2 -2
  108. package/dist/esm/components/Inspector/FabLauncher.js +21 -21
  109. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +23 -23
  110. package/dist/esm/components/Inspector/InspectorHeader.js +26 -26
  111. package/dist/esm/components/Inspector/MediaGalleryTab.js +151 -151
  112. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +1 -0
  113. package/dist/esm/components/Inspector/MediaPreviewModal.js +468 -468
  114. package/dist/esm/components/Inspector/NetworkExportModal.d.ts +10 -0
  115. package/dist/esm/components/Inspector/NetworkExportModal.js +333 -0
  116. package/dist/esm/components/Inspector/NetworkTab.js +118 -111
  117. package/dist/esm/components/Inspector/NpmStarPrompt.js +32 -33
  118. package/dist/esm/components/Inspector/ReduxDetail.js +54 -56
  119. package/dist/esm/components/Inspector/ReduxTab.js +9 -9
  120. package/dist/esm/components/Inspector/SettingsPanel.js +3 -6
  121. package/dist/esm/components/Inspector/SocketCard.js +13 -13
  122. package/dist/esm/components/Inspector/SupportPage.js +5 -5
  123. package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  124. package/dist/esm/components/Inspector/UiA11yAuditPanel.js +97 -0
  125. package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +2 -0
  126. package/dist/esm/components/Inspector/UiInspectorDetail.js +422 -0
  127. package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  128. package/dist/esm/components/Inspector/UiInspectorOverlay.js +138 -0
  129. package/dist/esm/components/Inspector/UiInspectorTab.d.ts +2 -0
  130. package/dist/esm/components/Inspector/UiInspectorTab.js +117 -0
  131. package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  132. package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +148 -0
  133. package/dist/esm/components/Inspector/index.d.ts +28 -0
  134. package/dist/esm/components/Inspector/index.js +1 -0
  135. package/dist/esm/components/LogCard.js +57 -55
  136. package/dist/esm/constants/index.js +1 -1
  137. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  138. package/dist/esm/constants/telemetryConfig.js +1 -1
  139. package/dist/esm/constants/version.d.ts +1 -1
  140. package/dist/esm/constants/version.js +1 -1
  141. package/dist/esm/customHooks/crashHandler.d.ts +1 -1
  142. package/dist/esm/customHooks/crashHandler.js +6 -6
  143. package/dist/esm/customHooks/uiInspectorManager.d.ts +22 -0
  144. package/dist/esm/customHooks/uiInspectorManager.js +1 -0
  145. package/dist/esm/helpers/index.js +4 -6
  146. package/dist/esm/helpers/searchQueryParser.d.ts +1 -0
  147. package/dist/esm/helpers/searchQueryParser.js +7 -5
  148. package/dist/esm/helpers/shareFormatter.d.ts +16 -0
  149. package/dist/esm/helpers/shareFormatter.js +20 -13
  150. package/dist/esm/helpers/uiInspectorEngine.d.ts +48 -0
  151. package/dist/esm/helpers/uiInspectorEngine.js +19 -0
  152. package/dist/esm/i18n/locales/ar.json +1 -1
  153. package/dist/esm/i18n/locales/bn.json +1 -1
  154. package/dist/esm/i18n/locales/de.json +1 -1
  155. package/dist/esm/i18n/locales/en.json +1 -1
  156. package/dist/esm/i18n/locales/es.json +1 -1
  157. package/dist/esm/i18n/locales/fr.json +1 -1
  158. package/dist/esm/i18n/locales/gu.json +1 -1
  159. package/dist/esm/i18n/locales/hi.json +1 -1
  160. package/dist/esm/i18n/locales/id.json +1 -1
  161. package/dist/esm/i18n/locales/it.json +1 -1
  162. package/dist/esm/i18n/locales/ja.json +1 -1
  163. package/dist/esm/i18n/locales/kn.json +1 -1
  164. package/dist/esm/i18n/locales/ko.json +1 -1
  165. package/dist/esm/i18n/locales/ml.json +1 -1
  166. package/dist/esm/i18n/locales/mr.json +1 -1
  167. package/dist/esm/i18n/locales/nl.json +1 -1
  168. package/dist/esm/i18n/locales/pa.json +1 -1
  169. package/dist/esm/i18n/locales/pl.json +1 -1
  170. package/dist/esm/i18n/locales/pt.json +1 -1
  171. package/dist/esm/i18n/locales/ru.json +1 -1
  172. package/dist/esm/i18n/locales/ta.json +1 -1
  173. package/dist/esm/i18n/locales/te.json +1 -1
  174. package/dist/esm/i18n/locales/tr.json +1 -1
  175. package/dist/esm/i18n/locales/vi.json +1 -1
  176. package/dist/esm/i18n/locales/zh.json +1 -1
  177. package/dist/esm/index.d.ts +3 -1
  178. package/dist/esm/index.js +7 -7
  179. package/dist/esm/native/NativeInspector.d.ts +2 -0
  180. package/dist/esm/native/NativeInspector.js +1 -1
  181. package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
  182. package/dist/esm/types/editor.d.ts +31 -0
  183. package/ios/NetworkInspectorModule.mm +314 -16
  184. package/package.json +1 -1
  185. package/src/native/NativeInspector.ts +37 -0
  186. package/src/native/NativeNetworkInspector.ts +2 -0
@@ -29,13 +29,13 @@ https://github.com/vengatmacuser/react-native-inapp-inspector`,url:"https://gith
29
29
 
30
30
  <T style={e.pillRow}>
31
31
  <T style={e.pillBadge}>
32
- <C style={e.pillBadgeText}>MIT LICENSE</C>
32
+ <C style={e.pillBadgeText}>{S("support.mitLicense","MIT LICENSE")}</C>
33
33
  </T>
34
34
  <T style={e.pillBadge}>
35
- <C style={e.pillBadgeText}>ZERO CONFIG</C>
35
+ <C style={e.pillBadgeText}>{S("support.zeroConfig","ZERO CONFIG")}</C>
36
36
  </T>
37
37
  <T style={e.pillBadge}>
38
- <C style={e.pillBadgeText}>FABRIC & TURBO</C>
38
+ <C style={e.pillBadgeText}>{S("support.fabricTurbo","FABRIC & TURBO")}</C>
39
39
  </T>
40
40
  </T>
41
41
  </T>
@@ -99,7 +99,7 @@ https://github.com/vengatmacuser/react-native-inapp-inspector`,url:"https://gith
99
99
  {S("support.star","Star on GitHub")}
100
100
  </C>
101
101
  <T style={e.badgeAmber}>
102
- <C style={e.badgeAmberText}>RECOMMENDED</C>
102
+ <C style={e.badgeAmberText}>{S("support.recommended","RECOMMENDED")}</C>
103
103
  </T>
104
104
  </T>
105
105
  <C style={e.itemDesc}>
@@ -196,7 +196,7 @@ https://github.com/vengatmacuser/react-native-inapp-inspector`,url:"https://gith
196
196
  <T style={e.authorTextCol}>
197
197
  <C style={e.authorName}>Vengateswaran Balakrishnan</C>
198
198
  <C style={e.authorRole}>
199
- Creator & Core Maintainer • @vengatmacuser
199
+ {S("support.creatorMaintainer","Creator & Core Maintainer \u2022 @vengatmacuser")}
200
200
  </C>
201
201
  <C style={e.authorEmail}>vengatmacuser@gmail.com</C>
202
202
  </T>
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { A11yAuditResult } from '../../types';
3
+ interface UiA11yAuditPanelProps {
4
+ a11y: A11yAuditResult;
5
+ }
6
+ export declare const UiA11yAuditPanel: React.FC<UiA11yAuditPanelProps>;
7
+ export {};
@@ -0,0 +1,97 @@
1
+ import"react";import{StyleSheet as L,Text as T,View as S}from"react-native";import{AppColors as f}from"../../styles/AppColors";import{AppFonts as x}from"../../styles/AppFonts";import{AccessibilityIcon as H,AlertTriangleIcon as P}from"../NetworkIcons";export const UiA11yAuditPanel=({a11y:W})=>{const{hasValidTouchTarget:C,touchTargetWidth:R,touchTargetHeight:k,recommendedMinSize:h,contrastRatio:p,contrastScore:A,textColor:D,backgroundColor:V,hasAccessibilityLabel:w,accessibilityRole:B,accessibilityHint:z,issues:F}=W;return<S style={e.container}>
2
+
3
+ <S style={e.card}>
4
+ <S style={e.cardHeader}>
5
+ <S style={e.cardTitleRow}>
6
+ <H color={f.brandPurple}size={18}/>
7
+ <T style={e.cardTitle}>Touch Target Size</T>
8
+ </S>
9
+ <S style={[e.badge,C?e.badgeSuccess:e.badgeWarning]}>
10
+ <T style={[e.badgeText,C?e.badgeTextSuccess:e.badgeTextWarning]}>
11
+ {C?"COMPLIANT":"SUB-OPTIMAL"}
12
+ </T>
13
+ </S>
14
+ </S>
15
+
16
+ <S style={e.metricRow}>
17
+ <S style={e.metricItem}>
18
+ <T style={e.metricLabel}>Actual Size</T>
19
+ <T style={e.metricValue}>
20
+ {Math.round(R)} × {Math.round(k)} pt
21
+ </T>
22
+ </S>
23
+ <S style={e.metricItem}>
24
+ <T style={e.metricLabel}>Target Guideline</T>
25
+ <T style={e.metricValue}>
26
+ ≥ {h} × {h} pt
27
+ </T>
28
+ </S>
29
+ </S>
30
+ </S>
31
+
32
+
33
+ <S style={e.card}>
34
+ <S style={e.cardHeader}>
35
+ <S style={e.cardTitleRow}>
36
+ <T style={e.cardTitle}>WCAG Color Contrast</T>
37
+ </S>
38
+ <S style={[e.badge,A==="AAA"||A==="AA"?e.badgeSuccess:A==="Fail"?e.badgeError:e.badgeNeutral]}>
39
+ <T style={[e.badgeText,A==="AAA"||A==="AA"?e.badgeTextSuccess:A==="Fail"?e.badgeTextError:e.badgeTextNeutral]}>
40
+ {A==="N/A"?"NOT APPLICABLE":`WCAG ${A}`}
41
+ </T>
42
+ </S>
43
+ </S>
44
+
45
+ {p!==void 0?<S style={e.contrastPreview}>
46
+ <S style={[e.contrastSwatch,{backgroundColor:V||"#FFFFFF"}]}>
47
+ <T style={[e.contrastSampleText,{color:D||"#000000"}]}>
48
+ Sample Text
49
+ </T>
50
+ </S>
51
+ <S style={e.contrastDetails}>
52
+ <T style={e.contrastRatioValue}>{p}:1</T>
53
+ <T style={e.contrastSubtext}>
54
+ {p>=7?"Passes AAA (Enhanced Contrast)":p>=4.5?"Passes AA (Minimum Standard)":"Fails AA (Low Contrast Warning)"}
55
+ </T>
56
+ </S>
57
+ </S>:<T style={e.naSubtext}>
58
+ Text or background color is transparent or dynamically inherited.
59
+ </T>}
60
+ </S>
61
+
62
+
63
+ <S style={e.card}>
64
+ <T style={[e.cardTitle,{marginBottom:10}]}>Accessibility Attributes</T>
65
+
66
+ <S style={e.attributeRow}>
67
+ <T style={e.attributeLabel}>accessibilityLabel:</T>
68
+ <T style={[e.attributeValue,!w&&{color:f.grayTextWeak,fontStyle:"italic"}]}>
69
+ {w?"Provided":"None specified"}
70
+ </T>
71
+ </S>
72
+
73
+ <S style={e.attributeRow}>
74
+ <T style={e.attributeLabel}>accessibilityRole:</T>
75
+ <T style={[e.attributeValue,!B&&{color:f.grayTextWeak,fontStyle:"italic"}]}>
76
+ {B||"None"}
77
+ </T>
78
+ </S>
79
+
80
+ {z&&<S style={e.attributeRow}>
81
+ <T style={e.attributeLabel}>accessibilityHint:</T>
82
+ <T style={e.attributeValue}>{z}</T>
83
+ </S>}
84
+ </S>
85
+
86
+
87
+ {F.length>0&&<S style={[e.card,e.issuesCard]}>
88
+ <S style={e.issuesHeader}>
89
+ <P color="#D97706"size={16}/>
90
+ <T style={e.issuesTitle}>Recommendations ({F.length})</T>
91
+ </S>
92
+ {F.map((I,E)=><S key={E}style={e.issueItem}>
93
+ <T style={e.issueBullet}>•</T>
94
+ <T style={e.issueText}>{I}</T>
95
+ </S>)}
96
+ </S>}
97
+ </S>};const e=L.create({container:{gap:10,paddingVertical:4},card:{backgroundColor:f.white,borderRadius:12,padding:14,borderWidth:1,borderColor:f.grayBorderSecondary},cardHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10},cardTitleRow:{flexDirection:"row",alignItems:"center",gap:8},cardTitle:{fontSize:14,fontFamily:x.semiBold,color:f.slate900},badge:{paddingHorizontal:8,paddingVertical:3,borderRadius:6},badgeSuccess:{backgroundColor:"#10B9811A",borderColor:"#10B98144",borderWidth:1},badgeWarning:{backgroundColor:"#F59E0B1A",borderColor:"#F59E0B44",borderWidth:1},badgeError:{backgroundColor:"#E11D481A",borderColor:"#E11D4844",borderWidth:1},badgeNeutral:{backgroundColor:f.slate100},badgeText:{fontSize:10,fontFamily:x.bold},badgeTextSuccess:{color:"#059669"},badgeTextWarning:{color:"#D97706"},badgeTextError:{color:"#E11D48"},badgeTextNeutral:{color:f.slate600},metricRow:{flexDirection:"row",gap:16},metricItem:{flex:1,backgroundColor:f.slate50,padding:10,borderRadius:8},metricLabel:{fontSize:11,fontFamily:x.medium,color:f.grayTextWeak,marginBottom:4},metricValue:{fontSize:13,fontFamily:x.semiBold,color:f.slate900},contrastPreview:{flexDirection:"row",alignItems:"center",gap:12},contrastSwatch:{paddingVertical:12,paddingHorizontal:16,borderRadius:8,borderWidth:1,borderColor:f.grayBorderSecondary},contrastSampleText:{fontSize:13,fontFamily:x.semiBold},contrastDetails:{flex:1},contrastRatioValue:{fontSize:16,fontFamily:x.bold,color:f.slate900},contrastSubtext:{fontSize:11,fontFamily:x.medium,color:f.grayTextWeak,marginTop:2},naSubtext:{fontSize:12,fontFamily:x.medium,color:f.grayTextWeak},attributeRow:{flexDirection:"row",justifyContent:"space-between",paddingVertical:6,borderBottomWidth:1,borderBottomColor:f.slate100},attributeLabel:{fontSize:12,fontFamily:x.medium,color:f.slate600},attributeValue:{fontSize:12,fontFamily:x.semiBold,color:f.slate900},issuesCard:{backgroundColor:"#FEF3C722",borderColor:"#F59E0B44"},issuesHeader:{flexDirection:"row",alignItems:"center",gap:6,marginBottom:8},issuesTitle:{fontSize:13,fontFamily:x.semiBold,color:"#D97706"},issueItem:{flexDirection:"row",alignItems:"flex-start",gap:6,marginVertical:3},issueBullet:{fontSize:12,color:"#D97706"},issueText:{fontSize:12,fontFamily:x.medium,color:f.slate700,flex:1,lineHeight:16}});
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const UiInspectorDetail: React.FC;
@@ -0,0 +1,422 @@
1
+ import qe,{useRef as Qe,useState as Y}from"react";import{Dimensions as Ze,Image as Ie,Modal as _e,ScrollView as Q,StyleSheet as ze,Text as C,TextInput as Ct,TouchableOpacity as A,View as T}from"react-native";import{useInspector as gt}from"./InspectorContext";import{auditAccessibility as ut,categorizeStyles as ht,extractBoxModel as Tt,generateCssSnippet as Ee,generateFullJsxSegmentSnippet as Ft,generateStyleSheetSnippet as Z}from"../../helpers/uiInspectorEngine";import{BoxModelVisualizer as St}from"./BoxModelVisualizer";import{UiA11yAuditPanel as Bt}from"./UiA11yAuditPanel";import It from"../JsonViewer";import _ from"../TouchableScale";import{AccessibilityIcon as zt,BoxModelIcon as Et,ChevronIcon as Re,CloseIcon as Ae,CodeBracketsIcon as Ce,CopyIcon as O,LayersIcon as Rt,SearchIcon as Pe}from"../NetworkIcons";import{AppColors as f}from"../../styles/AppColors";import{AppFonts as F}from"../../styles/AppFonts";import{triggerNativeHaptic as D}from"../../native/NativeInspector";import{showToast as G}from"../../helpers/toast";import U from"@react-native-clipboard/clipboard";export const UiInspectorDetail=()=>{const{selectedUiElement:M,setSelectedUiElement:ge,uiActiveSubTab:V,setUiActiveSubTab:He}=gt(),[$,Le]=Y(""),[De,q]=Y(!1),[Ve,ue]=Y(null),[v,he]=Y("rn"),ve=Qe(null);if(!M)return null;const{componentName:z,hierarchy:W,props:X,flattenedStyles:je,boxModel:E,a11y:Ne,layout:B,snapshotUri:J}=M,K=Ze.get("window"),Te=K.width*K.height,Fe=B.width*B.height,Me=Te>0?(Fe/Te*100).toFixed(1):"0.0",We=B.height>0?(B.width/B.height).toFixed(2):"1.00",P={...je},R=ht(P),Oe=typeof z=="string"&&(z.startsWith("RCT")||["View","Text","Image","ScrollView","TextInput","Modal"].includes(z)),k=Ft(z,X,P),fe=()=>{U.setString(k.code),D(),G("Copied full JSX to clipboard")},Ge=()=>{k.sourceFile&&(U.setString(`${k.sourceFile}:${k.lineNumber||1}`),D(),G("Copied source location"))},we=()=>{const w=v==="rn"?Z(z,P):Ee(z,P);U.setString(w),D(),G(v==="rn"?"Copied StyleSheet":"Copied CSS")},Ue=()=>{U.setString(JSON.stringify(X,null,2)),D(),G("Copied props as JSON")},$e=(w,x)=>{U.setString(String(x)),D(),ue(w),G(`Copied "${w}: ${x}"`),setTimeout(()=>ue(null),1500)},xe=w=>{if(w.componentName===z)return;D();const x=w.props||{},S=w.styles||(x.style?ze.flatten(x.style):{})||{},I=w.layout||{...B,width:S.width||B.width,height:S.height||B.height},H=Tt(S,I),L=ut(x,I,S);ge({...M,componentName:w.componentName,displayName:w.displayName,props:x,originalStyles:S,flattenedStyles:S,tweakedStyles:{},layout:I,boxModel:H,a11y:L})},Xe=(w,x)=>{if(typeof x!="string")return!1;const S=w.toLowerCase();return S.includes("color")||S.includes("background")||x.startsWith("#")||x.startsWith("rgb")||x.startsWith("hsl")},j=(w,x,S,I)=>{const H=Object.entries(x);return H.length===0?null:<T key={w}style={[e.styleGroupCard,{borderLeftColor:I}]}>
2
+ <T style={e.styleGroupHeader}>
3
+ <T style={e.styleGroupTitleRow}>
4
+ <C style={e.styleGroupIcon}>{S}</C>
5
+ <C style={[e.styleGroupTitle,{color:I}]}>{w.toUpperCase()}</C>
6
+ </T>
7
+ <T style={[e.styleGroupBadge,{backgroundColor:`${I}18`}]}>
8
+ <C style={[e.styleGroupBadgeText,{color:I}]}>{H.length}</C>
9
+ </T>
10
+ </T>
11
+
12
+ <T style={e.styleRowsContainer}>
13
+ {H.map(([L,N])=>{const Be=Xe(L,N),Ye=Ve===L;return<A key={L}activeOpacity={.7}style={[e.styleRow,Ye&&e.styleRowCopied]}onPress={()=>$e(L,N)}>
14
+ <C style={e.stylePropKey}>{L}</C>
15
+ <T style={e.styleValueContainer}>
16
+ {Be&&<T style={[e.colorSwatchPreview,{backgroundColor:String(N)}]}/>}
17
+ <C style={[e.stylePropValue,Be&&e.stylePropColorValue]}>
18
+ {typeof N=="object"?JSON.stringify(N):String(N)}
19
+ </C>
20
+ {typeof N=="number"&&<C style={e.styleUnitText}>pt</C>}
21
+ </T>
22
+ </A>})}
23
+ </T>
24
+ </T>},Se=Object.entries(X).filter(([w,x])=>{if(!$)return!0;const S=$.toLowerCase();return w.toLowerCase().includes(S)||String(x).toLowerCase().includes(S)}),Je=[{key:"styles",label:"Styles",icon:Rt},{key:"jsx",label:"JSX Code",icon:Ce},{key:"boxmodel",label:"Box Model",icon:Et},{key:"tree",label:`Hierarchy (${W.length})`,icon:Re},{key:"props",label:`Props (${Object.keys(X).length})`,icon:Pe},{key:"a11y",label:"A11y",icon:zt}],Ke=Object.keys(R.layout).length>0||Object.keys(R.spacing).length>0||Object.keys(R.appearance).length>0||Object.keys(R.typography).length>0||Object.keys(R.borders).length>0||Object.keys(R.transforms).length>0||Object.keys(R.other).length>0;return<T style={e.container}>
25
+
26
+ <T style={e.topControlBar}>
27
+ <T style={e.elementTagRow}>
28
+ <T style={e.componentPill}>
29
+ <C style={e.componentTagBracket}>&lt;</C>
30
+ <C style={e.componentTagName}>{z}</C>
31
+ <C style={e.componentTagBracket}> /&gt;</C>
32
+ <T style={e.typeBadge}>
33
+ <C style={e.typeBadgeText}>
34
+ {Oe?"Native":"React"}
35
+ </C>
36
+ </T>
37
+ </T>
38
+
39
+
40
+ <Q horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={e.breadcrumbScroll}>
41
+ {W.map((w,x)=>{const S=x===W.length-1||w.componentName===z;return<qe.Fragment key={w.id||x}>
42
+ <Re color="#94A3B8"size={8}direction="right"/>
43
+ <A style={[e.crumbChip,S&&e.crumbChipActive]}onPress={()=>xe(w)}>
44
+ <C style={[e.crumbChipText,S&&e.crumbChipTextActive]}numberOfLines={1}>
45
+ {w.displayName}
46
+ </C>
47
+ </A>
48
+ </qe.Fragment>})}
49
+ </Q>
50
+ </T>
51
+
52
+ <T style={e.topActions}>
53
+ <_ style={e.quickActionBtn}onPress={fe}>
54
+ <Ce color={f.brandPurple}size={11}/>
55
+ <C style={e.quickActionBtnText}>JSX</C>
56
+ </_>
57
+ <_ style={e.closeBtn}onPress={()=>{D(),ge(null)}}>
58
+ <Ae color={f.slate600}size={12}/>
59
+ </_>
60
+ </T>
61
+ </T>
62
+
63
+
64
+ <_e visible={De}transparent animationType="fade"onRequestClose={()=>q(!1)}>
65
+ <T style={e.modalBackdrop}>
66
+ <T style={e.modalCard}>
67
+ <T style={e.modalHeader}>
68
+ <C style={e.modalTitle}>
69
+ &lt;{z}&gt; Preview ({Math.round(B.width)} × {Math.round(B.height)} pt)
70
+ </C>
71
+ <A style={e.modalCloseBtn}onPress={()=>q(!1)}>
72
+ <Ae color={f.white}size={15}/>
73
+ </A>
74
+ </T>
75
+ {J&&<T style={e.modalImageContainer}>
76
+ <Ie source={{uri:J}}style={e.modalImage}resizeMode="contain"/>
77
+ </T>}
78
+ </T>
79
+ </T>
80
+ </_e>
81
+
82
+
83
+ <T style={e.subTabBarWrapper}>
84
+ <Q ref={ve}horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={e.subTabBarContent}>
85
+ {Je.map(w=>{const x=V===w.key,S=w.icon;return<A key={w.key}style={[e.subTabItem,x&&e.subTabItemActive]}onPress={()=>{D(),He(w.key)}}>
86
+ <S color={x?f.white:"#64748B"}size={12}/>
87
+ <C style={[e.subTabText,x&&e.subTabTextActive]}>
88
+ {w.label}
89
+ </C>
90
+ </A>})}
91
+ </Q>
92
+ </T>
93
+
94
+
95
+ <Q style={e.tabScrollContent}contentContainerStyle={e.tabScrollInner}showsVerticalScrollIndicator={!1}>
96
+
97
+ {V==="styles"&&<T style={e.stylesTabContainer}>
98
+
99
+ <T style={e.heroSnapshotCard}>
100
+ <T style={e.heroImageFrame}>
101
+ {J?<A activeOpacity={.9}style={e.heroImageTouchable}onPress={()=>q(!0)}>
102
+ <Ie source={{uri:J}}style={e.heroImage}resizeMode="contain"/>
103
+ <T style={e.zoomGlassBadge}>
104
+ <C style={e.zoomGlassBadgeText}>🔍 Zoom Lightbox</C>
105
+ </T>
106
+ </A>:<T style={e.heroPlaceholder}>
107
+ <C style={e.heroPlaceholderIcon}>🎨</C>
108
+ <C style={e.heroPlaceholderText}>Rendered Component Frame</C>
109
+ </T>}
110
+ </T>
111
+
112
+
113
+ <T style={e.metricsGrid}>
114
+ <T style={e.metricCell}>
115
+ <C style={e.metricCellLabel}>WIDTH</C>
116
+ <C style={e.metricCellValue}>{Math.round(B.width)}<C style={e.metricUnit}> pt</C></C>
117
+ </T>
118
+ <T style={e.metricCell}>
119
+ <C style={e.metricCellLabel}>HEIGHT</C>
120
+ <C style={e.metricCellValue}>{Math.round(B.height)}<C style={e.metricUnit}> pt</C></C>
121
+ </T>
122
+ <T style={e.metricCell}>
123
+ <C style={e.metricCellLabel}>PAGE X</C>
124
+ <C style={e.metricCellValue}>{Math.round(B.pageX)}<C style={e.metricUnit}> pt</C></C>
125
+ </T>
126
+ <T style={e.metricCell}>
127
+ <C style={e.metricCellLabel}>PAGE Y</C>
128
+ <C style={e.metricCellValue}>{Math.round(B.pageY)}<C style={e.metricUnit}> pt</C></C>
129
+ </T>
130
+ </T>
131
+
132
+
133
+ <T style={e.specsBar}>
134
+ <T style={e.specsTag}>
135
+ <C style={e.specsTagLabel}>Coverage</C>
136
+ <C style={e.specsTagVal}>{Me}% ({We}:1)</C>
137
+ </T>
138
+ <T style={e.specsTag}>
139
+ <C style={e.specsTagLabel}>Tag ID</C>
140
+ <C style={e.specsTagVal}>{M.nativeTag?`#${M.nativeTag}`:"Virtual Fiber"}</C>
141
+ </T>
142
+ </T>
143
+ </T>
144
+
145
+
146
+ <T style={e.computedLayoutCard}>
147
+ <T style={e.computedLayoutHeader}>
148
+ <C style={e.computedLayoutTitle}>⚡ COMPUTED CONSTRAINTS</C>
149
+ <C style={e.computedLayoutSub}>Resolved Frame & Insets</C>
150
+ </T>
151
+ <T style={e.computedGrid}>
152
+ <T style={e.computedItem}>
153
+ <C style={e.computedItemKey}>Display</C>
154
+ <C style={e.computedItemVal}>{P.display||"flex"}</C>
155
+ </T>
156
+ <T style={e.computedItem}>
157
+ <C style={e.computedItemKey}>Position</C>
158
+ <C style={e.computedItemVal}>{P.position||"relative"}</C>
159
+ </T>
160
+ <T style={e.computedItem}>
161
+ <C style={e.computedItemKey}>Flex Direction</C>
162
+ <C style={e.computedItemVal}>{P.flexDirection||"column"}</C>
163
+ </T>
164
+ <T style={e.computedItem}>
165
+ <C style={e.computedItemKey}>Box Sizing</C>
166
+ <C style={e.computedItemVal}>border-box</C>
167
+ </T>
168
+ </T>
169
+ </T>
170
+
171
+
172
+ {Ke&&<>
173
+ {j("Flex Layout",R.layout,"\u26A1","#8B5CF6")}
174
+ {j("Spacing & Margins",R.spacing,"\u{1F4E6}","#10B981")}
175
+ {j("Appearance & Color",R.appearance,"\u{1F3A8}","#F43F5E")}
176
+ {j("Typography",R.typography,"\u{1F524}","#F59E0B")}
177
+ {j("Borders & Corners",R.borders,"\u{1F532}","#0D9488")}
178
+ {j("Transforms",R.transforms,"\u{1F504}","#EC4899")}
179
+ {j("Other Properties",R.other,"\u2699\uFE0F","#64748B")}
180
+ </>}
181
+
182
+
183
+ <T style={e.codeSnippetCard}>
184
+ <T style={e.codeSnippetHeader}>
185
+ <T style={e.codeSnippetTabs}>
186
+ <A style={[e.codeFormatBtn,v==="rn"&&e.codeFormatBtnActive]}onPress={()=>he("rn")}>
187
+ <C style={[e.codeFormatBtnText,v==="rn"&&e.codeFormatBtnTextActive]}>
188
+ React Native StyleSheet
189
+ </C>
190
+ </A>
191
+ <A style={[e.codeFormatBtn,v==="css"&&e.codeFormatBtnActive]}onPress={()=>he("css")}>
192
+ <C style={[e.codeFormatBtnText,v==="css"&&e.codeFormatBtnTextActive]}>
193
+ Web CSS
194
+ </C>
195
+ </A>
196
+ </T>
197
+
198
+ <A style={e.codeCopyBtn}onPress={we}>
199
+ <O color={f.brandPurple}size={11}/>
200
+ <C style={e.codeCopyBtnText}>Copy</C>
201
+ </A>
202
+ </T>
203
+ <T style={e.codeSnippetBody}>
204
+ <C style={e.codeSnippetText}numberOfLines={14}>
205
+ {v==="rn"?Z(z,P):Ee(z,P)}
206
+ </C>
207
+ </T>
208
+ </T>
209
+ </T>}
210
+
211
+
212
+ {V==="jsx"&&<T style={e.jsxTabContainer}>
213
+
214
+ <T style={e.sourceLocationCard}>
215
+ <T style={e.sourceLocationHeader}>
216
+ <C style={e.sourceLocationTitle}>📍 CODEBASE LOCATION</C>
217
+ {k.sourceFile&&<A style={e.copyPathBtn}onPress={Ge}>
218
+ <O color={f.brandPurple}size={11}/>
219
+ <C style={e.copyPathBtnText}>Copy Path</C>
220
+ </A>}
221
+ </T>
222
+ <T style={e.sourceLocationBody}>
223
+ <C style={e.sourceLocationText}>
224
+ {k.sourceLocation||(k.sourceFile?`${k.sourceFile}:${k.lineNumber||1}`:`${z}.tsx (Rendered React Node)`)}
225
+ </C>
226
+ {k.lineNumber!=null&&<T style={e.lineNumberBadge}>
227
+ <C style={e.lineNumberBadgeText}>Line {k.lineNumber}</C>
228
+ </T>}
229
+ </T>
230
+ </T>
231
+
232
+
233
+ <T style={e.jsxCodeCard}>
234
+ <T style={e.jsxCodeHeader}>
235
+ <T style={e.jsxCodeTitleRow}>
236
+ <Ce color={f.brandPurple}size={14}/>
237
+ <C style={e.jsxCodeTitle}>FULL JSX CODE</C>
238
+ </T>
239
+ <A style={e.jsxCopyActionBtn}onPress={fe}>
240
+ <O color={f.white}size={11}/>
241
+ <C style={e.jsxCopyActionBtnText}>Copy JSX</C>
242
+ </A>
243
+ </T>
244
+
245
+ <T style={e.jsxCodeBody}>
246
+ <C style={e.jsxCodeContent}selectable>
247
+ {k.code}
248
+ </C>
249
+ </T>
250
+ </T>
251
+
252
+
253
+ <T style={e.codeSnippetCard}>
254
+ <T style={e.codeSnippetHeader}>
255
+ <C style={e.connectedStyleTitle}>🎨 CONNECTED STYLESHEET</C>
256
+ <A style={e.codeCopyBtn}onPress={we}>
257
+ <O color={f.brandPurple}size={11}/>
258
+ <C style={e.codeCopyBtnText}>Copy Styles</C>
259
+ </A>
260
+ </T>
261
+ <T style={e.codeSnippetBody}>
262
+ <C style={e.codeSnippetText}numberOfLines={14}>
263
+ {Z(z,P)}
264
+ </C>
265
+ </T>
266
+ </T>
267
+ </T>}
268
+
269
+
270
+ {V==="boxmodel"&&<T style={e.boxModelTabContainer}>
271
+ <T style={e.boxModelCard}>
272
+ <C style={e.boxModelSectionTitle}>📦 VISUAL BOX MODEL (CSS METRICS)</C>
273
+ <St boxModel={E}/>
274
+ </T>
275
+
276
+
277
+ <T style={e.boxModelMetricsTable}>
278
+ <C style={e.tableTitle}>SPACING SUMMARY</C>
279
+ <T style={e.tableRow}>
280
+ <C style={e.tableHeaderCell}>Layer</C>
281
+ <C style={e.tableHeaderCell}>Top</C>
282
+ <C style={e.tableHeaderCell}>Right</C>
283
+ <C style={e.tableHeaderCell}>Bottom</C>
284
+ <C style={e.tableHeaderCell}>Left</C>
285
+ </T>
286
+ <T style={e.tableRow}>
287
+ <C style={[e.tableCell,{color:"#D97706",fontFamily:F.bold}]}>Margin</C>
288
+ <C style={e.tableCell}>{E.margin.top} pt</C>
289
+ <C style={e.tableCell}>{E.margin.right} pt</C>
290
+ <C style={e.tableCell}>{E.margin.bottom} pt</C>
291
+ <C style={e.tableCell}>{E.margin.left} pt</C>
292
+ </T>
293
+ <T style={e.tableRow}>
294
+ <C style={[e.tableCell,{color:"#CA8A04",fontFamily:F.bold}]}>Border</C>
295
+ <C style={e.tableCell}>{E.border.top} pt</C>
296
+ <C style={e.tableCell}>{E.border.right} pt</C>
297
+ <C style={e.tableCell}>{E.border.bottom} pt</C>
298
+ <C style={e.tableCell}>{E.border.left} pt</C>
299
+ </T>
300
+ <T style={e.tableRow}>
301
+ <C style={[e.tableCell,{color:"#059669",fontFamily:F.bold}]}>Padding</C>
302
+ <C style={e.tableCell}>{E.padding.top} pt</C>
303
+ <C style={e.tableCell}>{E.padding.right} pt</C>
304
+ <C style={e.tableCell}>{E.padding.bottom} pt</C>
305
+ <C style={e.tableCell}>{E.padding.left} pt</C>
306
+ </T>
307
+ <T style={e.tableRow}>
308
+ <C style={[e.tableCell,{color:"#4F46E5",fontFamily:F.bold}]}>Content</C>
309
+ <C style={[e.tableCell,{flex:4}]}>
310
+ {E.content.width} × {E.content.height} pt (Area: {Math.round(Fe)} pt²)
311
+ </C>
312
+ </T>
313
+ </T>
314
+
315
+
316
+ <T style={e.insetsCard}>
317
+ <C style={e.tableTitle}>SCREEN INSETS & EDGES</C>
318
+ <T style={e.insetsGrid}>
319
+ <T style={e.insetRow}>
320
+ <C style={e.insetLabel}>Distance from Screen Top:</C>
321
+ <C style={e.insetValue}>{Math.round(B.pageY)} pt</C>
322
+ </T>
323
+ <T style={e.insetRow}>
324
+ <C style={e.insetLabel}>Distance from Screen Left:</C>
325
+ <C style={e.insetValue}>{Math.round(B.pageX)} pt</C>
326
+ </T>
327
+ <T style={e.insetRow}>
328
+ <C style={e.insetLabel}>Distance from Screen Bottom:</C>
329
+ <C style={e.insetValue}>
330
+ {Math.max(0,Math.round(K.height-(B.pageY+B.height)))} pt
331
+ </C>
332
+ </T>
333
+ <T style={e.insetRow}>
334
+ <C style={e.insetLabel}>Distance from Screen Right:</C>
335
+ <C style={e.insetValue}>
336
+ {Math.max(0,Math.round(K.width-(B.pageX+B.width)))} pt
337
+ </C>
338
+ </T>
339
+ </T>
340
+ </T>
341
+ </T>}
342
+
343
+
344
+ {V==="tree"&&<T style={e.treeTabContainer}>
345
+ <T style={e.treeHeaderCard}>
346
+ <C style={e.treeHeaderTitle}>COMPONENT ANCESTOR TREE</C>
347
+ <C style={e.treeHeaderSubtitle}>
348
+ Tap any parent or child node in the hierarchy to inspect its styles, props, and box model.
349
+ </C>
350
+ </T>
351
+
352
+ <T style={e.treeList}>
353
+ {W.map((w,x)=>{const S=x===W.length-1||w.componentName===z,I=x;return<A key={w.id||x}activeOpacity={.7}style={[e.treeItemCard,{marginLeft:I*14},S&&e.treeItemCardActive]}onPress={()=>xe(w)}>
354
+ <T style={e.treeItemTopRow}>
355
+ <T style={e.treeTagRow}>
356
+ <T style={[e.depthBadge,S&&e.depthBadgeActive]}>
357
+ <C style={[e.depthBadgeText,S&&e.depthBadgeTextActive]}>
358
+ L{I}
359
+ </C>
360
+ </T>
361
+ <C style={[e.treeTagName,S&&e.treeTagNameActive]}>
362
+ &lt;{w.displayName}&gt;
363
+ </C>
364
+ </T>
365
+
366
+ {S?<T style={e.activePillBadge}>
367
+ <C style={e.activePillBadgeText}>CURRENT</C>
368
+ </T>:<T style={e.inspectArrowBtn}>
369
+ <C style={e.inspectArrowBtnText}>Inspect →</C>
370
+ </T>}
371
+ </T>
372
+
373
+ {w.layout&&<T style={e.treeItemBottomRow}>
374
+ <C style={e.treeItemMetric}>
375
+ Frame: {Math.round(w.layout.width)} × {Math.round(w.layout.height)} pt
376
+ </C>
377
+ {w.isHostComponent&&<C style={e.treeItemHostBadge}>Native</C>}
378
+ </T>}
379
+ </A>})}
380
+ </T>
381
+ </T>}
382
+
383
+
384
+ {V==="props"&&<T style={e.propsTabContainer}>
385
+ <T style={e.propsSearchRow}>
386
+ <T style={e.searchBar}>
387
+ <Pe color={f.slate400}size={14}/>
388
+ <Ct style={e.searchInput}placeholder="Filter props by name or value..."placeholderTextColor={f.slate400}value={$}onChangeText={Le}/>
389
+ </T>
390
+
391
+ <_ style={e.copyPropsBtn}onPress={Ue}>
392
+ <O color={f.white}size={11}/>
393
+ <C style={e.copyPropsBtnText}>Copy All</C>
394
+ </_>
395
+ </T>
396
+
397
+ {Se.length===0?<T style={e.emptyPropsBox}>
398
+ <C style={e.emptyPropsText}>No props match "{$}"</C>
399
+ </T>:<T style={e.propsList}>
400
+ {Se.map(([w,x])=>{const S=typeof x,I=S==="function",H=S==="object"&&x!==null,L=!I&&!H;return<T key={w}style={e.propItemCard}>
401
+ <T style={e.propHeader}>
402
+ <C style={e.propKeyName}>{w}</C>
403
+ <T style={[e.typeBadgePrimary,I&&e.typeBadgeFn,H&&e.typeBadgeObj,L&&e.typeBadgePrim]}>
404
+ <C style={e.typeBadgePrimaryText}>
405
+ {I?"function":H?"object":S}
406
+ </C>
407
+ </T>
408
+ </T>
409
+
410
+ {H?<T style={e.jsonViewerWrapper}>
411
+ <It data={x}defaultExpandDepth={1}/>
412
+ </T>:<C style={e.propValueText}numberOfLines={3}>
413
+ {I?"\u0192 () { [native / custom handler] }":String(x)}
414
+ </C>}
415
+ </T>})}
416
+ </T>}
417
+ </T>}
418
+
419
+
420
+ {V==="a11y"&&<Bt a11y={Ne}/>}
421
+ </Q>
422
+ </T>};const e=ze.create({container:{flex:1,backgroundColor:"#F8FAFC"},topControlBar:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",backgroundColor:f.white,paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:"#E2E8F0"},elementTagRow:{flex:1,flexDirection:"row",alignItems:"center",gap:6,marginRight:8},componentPill:{flexDirection:"row",alignItems:"center",backgroundColor:"#EEF2FF",paddingHorizontal:8,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:"#C7D2FE"},componentTagBracket:{fontSize:12,fontFamily:F.bold,color:"#D97706"},componentTagName:{fontSize:12,fontFamily:F.bold,color:f.brandPurple,paddingHorizontal:2},typeBadge:{backgroundColor:"#FFFFFF",paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,marginLeft:5,borderWidth:1,borderColor:"#E2E8F0"},typeBadgeText:{fontSize:9,fontFamily:F.semiBold,color:"#64748B"},breadcrumbScroll:{alignItems:"center",gap:4},crumbChip:{paddingHorizontal:6,paddingVertical:2.5,borderRadius:4,backgroundColor:"#F1F5F9"},crumbChipActive:{backgroundColor:f.brandPurple},crumbChipText:{fontSize:10,fontFamily:F.medium,color:"#64748B"},crumbChipTextActive:{color:f.white,fontFamily:F.bold},topActions:{flexDirection:"row",alignItems:"center",gap:6},quickActionBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:"#EEF2FF",paddingHorizontal:8,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:"#C7D2FE"},quickActionBtnText:{fontSize:10,fontFamily:F.bold,color:f.brandPurple},closeBtn:{padding:5,borderRadius:6,backgroundColor:"#F1F5F9",borderWidth:1,borderColor:"#E2E8F0"},subTabBarWrapper:{backgroundColor:f.white,borderBottomWidth:1,borderBottomColor:"#E2E8F0",paddingVertical:6},subTabBarContent:{paddingHorizontal:10,gap:6,alignItems:"center"},subTabItem:{flexDirection:"row",alignItems:"center",paddingHorizontal:10,paddingVertical:5,borderRadius:7,backgroundColor:"#F1F5F9",gap:4.5,borderWidth:1,borderColor:"#E2E8F0"},subTabItemActive:{backgroundColor:f.brandPurple,borderColor:"#4338CA",shadowColor:f.brandPurple,shadowOffset:{width:0,height:1.5},shadowOpacity:.2,shadowRadius:2,elevation:2},subTabText:{fontSize:11,fontFamily:F.medium,color:"#475569"},subTabTextActive:{color:f.white,fontFamily:F.bold},tabScrollContent:{flex:1},tabScrollInner:{padding:12,paddingBottom:32},stylesTabContainer:{gap:10},heroSnapshotCard:{backgroundColor:f.white,borderRadius:12,borderWidth:1,borderColor:"#E2E8F0",overflow:"hidden",shadowColor:"#0F172A",shadowOffset:{width:0,height:2},shadowOpacity:.06,shadowRadius:4,elevation:2},heroImageFrame:{width:"100%",height:125,backgroundColor:"#0F172A",justifyContent:"center",alignItems:"center",position:"relative"},heroImageTouchable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center",padding:10},heroImage:{width:"100%",height:"100%"},zoomGlassBadge:{position:"absolute",top:8,right:8,backgroundColor:"rgba(15, 23, 42, 0.75)",paddingHorizontal:8,paddingVertical:3.5,borderRadius:6,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.2)"},zoomGlassBadgeText:{fontSize:9.5,fontFamily:F.bold,color:"#FFFFFF"},heroPlaceholder:{alignItems:"center",justifyContent:"center"},heroPlaceholderIcon:{fontSize:24,marginBottom:4},heroPlaceholderText:{fontSize:10,fontFamily:F.bold,color:"#94A3B8"},metricsGrid:{flexDirection:"row",borderTopWidth:1,borderTopColor:"#E2E8F0",backgroundColor:"#FFFFFF"},metricCell:{flex:1,paddingVertical:8,paddingHorizontal:6,alignItems:"center",borderRightWidth:1,borderRightColor:"#F1F5F9"},metricCellLabel:{fontSize:8.5,fontFamily:F.bold,color:"#94A3B8",letterSpacing:.5},metricCellValue:{fontSize:12.5,fontFamily:F.bold,color:"#0F172A",marginTop:2},metricUnit:{fontSize:9,fontFamily:F.regular,color:"#64748B"},specsBar:{flexDirection:"row",justifyContent:"space-between",backgroundColor:"#F8FAFC",paddingHorizontal:12,paddingVertical:6.5,borderTopWidth:1,borderTopColor:"#E2E8F0"},specsTag:{flexDirection:"row",alignItems:"center",gap:4},specsTagLabel:{fontSize:9.5,fontFamily:F.medium,color:"#64748B"},specsTagVal:{fontSize:9.5,fontFamily:F.bold,color:"#0F172A"},computedLayoutCard:{backgroundColor:f.white,borderRadius:10,padding:12,borderWidth:1,borderColor:"#E2E8F0"},computedLayoutHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:8,paddingBottom:6,borderBottomWidth:1,borderBottomColor:"#F1F5F9"},computedLayoutTitle:{fontSize:10.5,fontFamily:F.bold,color:"#6366F1",letterSpacing:.6},computedLayoutSub:{fontSize:9.5,fontFamily:F.medium,color:"#94A3B8"},computedGrid:{flexDirection:"row",flexWrap:"wrap",gap:8},computedItem:{width:"48%",backgroundColor:"#F8FAFC",paddingHorizontal:8,paddingVertical:6,borderRadius:6,borderWidth:1,borderColor:"#E2E8F0",flexDirection:"row",justifyContent:"space-between",alignItems:"center"},computedItemKey:{fontSize:10,fontFamily:F.medium,color:"#64748B"},computedItemVal:{fontSize:10.5,fontFamily:F.bold,color:"#0F172A"},styleGroupCard:{backgroundColor:f.white,borderRadius:10,padding:12,borderWidth:1,borderColor:"#E2E8F0",borderLeftWidth:3.5,shadowColor:"#0F172A",shadowOffset:{width:0,height:1},shadowOpacity:.04,shadowRadius:2,elevation:1},styleGroupHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:8,paddingBottom:6,borderBottomWidth:1,borderBottomColor:"#F1F5F9"},styleGroupTitleRow:{flexDirection:"row",alignItems:"center",gap:6},styleGroupIcon:{fontSize:13},styleGroupTitle:{fontSize:11,fontFamily:F.bold,letterSpacing:.6},styleGroupBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:10},styleGroupBadgeText:{fontSize:9.5,fontFamily:F.bold},styleRowsContainer:{gap:2},styleRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4.5,paddingHorizontal:6,borderRadius:6},styleRowCopied:{backgroundColor:"#ECFDF5"},stylePropKey:{fontSize:11.5,fontFamily:F.medium,color:"#475569"},styleValueContainer:{flexDirection:"row",alignItems:"center",gap:6},colorSwatchPreview:{width:13,height:13,borderRadius:3,borderWidth:1,borderColor:"rgba(0,0,0,0.15)"},stylePropValue:{fontSize:11.5,fontFamily:F.semiBold,color:"#0F172A"},stylePropColorValue:{fontFamily:F.bold,color:"#6366F1"},styleUnitText:{fontSize:9.5,fontFamily:F.regular,color:"#94A3B8"},codeSnippetCard:{backgroundColor:"#F8FAFC",borderRadius:10,borderWidth:1,borderColor:"#E2E8F0",overflow:"hidden"},codeSnippetHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingHorizontal:10,paddingVertical:6,borderBottomWidth:1,borderBottomColor:"#E2E8F0",backgroundColor:"#EEF2FF"},codeSnippetTabs:{flexDirection:"row",gap:4},codeFormatBtn:{paddingHorizontal:8,paddingVertical:3,borderRadius:5},codeFormatBtnActive:{backgroundColor:f.white,shadowColor:"#000",shadowOffset:{width:0,height:1},shadowOpacity:.1,shadowRadius:1,elevation:1},codeFormatBtnText:{fontSize:9.5,fontFamily:F.medium,color:"#64748B"},codeFormatBtnTextActive:{color:f.brandPurple,fontFamily:F.bold},codeCopyBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:f.white,paddingHorizontal:8,paddingVertical:3,borderRadius:5,borderWidth:1,borderColor:"#C7D2FE"},codeCopyBtnText:{fontSize:10,fontFamily:F.bold,color:f.brandPurple},codeSnippetBody:{padding:10,backgroundColor:"#FFFFFF"},codeSnippetText:{fontSize:11,fontFamily:"Courier",color:"#334155",lineHeight:16},jsxTabContainer:{gap:12},sourceLocationCard:{backgroundColor:f.white,borderRadius:10,borderWidth:1,borderColor:"#E2E8F0",overflow:"hidden"},sourceLocationHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",backgroundColor:"#EEF2FF",paddingHorizontal:12,paddingVertical:7,borderBottomWidth:1,borderBottomColor:"#E0E7FF"},sourceLocationTitle:{fontSize:10,fontFamily:F.bold,color:f.brandPurple,letterSpacing:.6},copyPathBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:f.white,paddingHorizontal:7,paddingVertical:2.5,borderRadius:4,borderWidth:1,borderColor:"#C7D2FE"},copyPathBtnText:{fontSize:9.5,fontFamily:F.bold,color:f.brandPurple},sourceLocationBody:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",padding:10},sourceLocationText:{flex:1,fontSize:11.5,fontFamily:F.bold,color:"#1E293B"},lineNumberBadge:{backgroundColor:"#F1F5F9",paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1,borderColor:"#E2E8F0"},lineNumberBadgeText:{fontSize:9.5,fontFamily:F.semiBold,color:"#64748B"},jsxCodeCard:{backgroundColor:f.white,borderRadius:10,borderWidth:1,borderColor:"#C7D2FE",overflow:"hidden"},jsxCodeHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",backgroundColor:"#EEF2FF",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:"#E0E7FF"},jsxCodeTitleRow:{flexDirection:"row",alignItems:"center",gap:6},jsxCodeTitle:{fontSize:10.5,fontFamily:F.bold,color:f.brandPurple,letterSpacing:.6},jsxCopyActionBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:f.brandPurple,paddingHorizontal:9,paddingVertical:4,borderRadius:6},jsxCopyActionBtnText:{fontSize:10.5,fontFamily:F.bold,color:f.white},jsxCodeBody:{padding:12,backgroundColor:"#FAF5FF"},jsxCodeContent:{fontSize:12,fontFamily:"Courier",color:"#4C1D95",lineHeight:18},connectedStyleTitle:{fontSize:10,fontFamily:F.bold,color:f.brandPurple,letterSpacing:.6},boxModelTabContainer:{gap:12},boxModelCard:{backgroundColor:f.white,borderRadius:10,padding:12,borderWidth:1,borderColor:"#E2E8F0"},boxModelSectionTitle:{fontSize:10.5,fontFamily:F.bold,color:"#64748B",letterSpacing:.5,marginBottom:8},boxModelMetricsTable:{backgroundColor:f.white,borderRadius:10,padding:12,borderWidth:1,borderColor:"#E2E8F0"},tableTitle:{fontSize:10,fontFamily:F.bold,color:"#64748B",letterSpacing:.5,marginBottom:8},tableRow:{flexDirection:"row",borderBottomWidth:1,borderBottomColor:"#F1F5F9",paddingVertical:6},tableHeaderCell:{flex:1,fontSize:10,fontFamily:F.bold,color:"#94A3B8",textAlign:"center"},tableCell:{flex:1,fontSize:11,fontFamily:F.medium,color:"#334155",textAlign:"center"},insetsCard:{backgroundColor:f.white,borderRadius:10,padding:12,borderWidth:1,borderColor:"#E2E8F0"},insetsGrid:{gap:6},insetRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4,borderBottomWidth:1,borderBottomColor:"#F8FAFC"},insetLabel:{fontSize:11,fontFamily:F.medium,color:"#64748B"},insetValue:{fontSize:11.5,fontFamily:F.bold,color:"#0F172A"},treeTabContainer:{gap:10},treeHeaderCard:{backgroundColor:f.white,borderRadius:10,padding:12,borderWidth:1,borderColor:"#E2E8F0"},treeHeaderTitle:{fontSize:10.5,fontFamily:F.bold,color:"#64748B",letterSpacing:.5,marginBottom:4},treeHeaderSubtitle:{fontSize:11,fontFamily:F.regular,color:"#94A3B8",lineHeight:16},treeList:{gap:6},treeItemCard:{backgroundColor:f.white,borderRadius:8,padding:10,borderWidth:1,borderColor:"#E2E8F0"},treeItemCardActive:{backgroundColor:"#EEF2FF",borderColor:"#6366F1",borderLeftWidth:3.5,borderLeftColor:f.brandPurple},treeItemTopRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},treeTagRow:{flexDirection:"row",alignItems:"center",gap:6},depthBadge:{backgroundColor:"#F1F5F9",paddingHorizontal:5,paddingVertical:2,borderRadius:4},depthBadgeActive:{backgroundColor:f.brandPurple},depthBadgeText:{fontSize:9,fontFamily:F.bold,color:"#64748B"},depthBadgeTextActive:{color:f.white},treeTagName:{fontSize:12,fontFamily:F.bold,color:"#334155"},treeTagNameActive:{color:f.brandPurple},activePillBadge:{backgroundColor:"#10B98118",paddingHorizontal:6,paddingVertical:2,borderRadius:4},activePillBadgeText:{fontSize:9,fontFamily:F.bold,color:"#059669"},inspectArrowBtn:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,backgroundColor:"#F8FAFC"},inspectArrowBtnText:{fontSize:10,fontFamily:F.medium,color:"#64748B"},treeItemBottomRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginTop:6,paddingTop:4,borderTopWidth:1,borderTopColor:"#F1F5F9"},treeItemMetric:{fontSize:9.5,fontFamily:F.regular,color:"#94A3B8"},treeItemHostBadge:{fontSize:9,fontFamily:F.semiBold,color:"#6366F1"},propsTabContainer:{gap:10},propsSearchRow:{flexDirection:"row",gap:8,alignItems:"center"},searchBar:{flex:1,flexDirection:"row",alignItems:"center",gap:8,backgroundColor:f.white,paddingHorizontal:10,borderRadius:8,borderWidth:1,borderColor:"#E2E8F0",height:36},searchInput:{flex:1,fontSize:11.5,fontFamily:F.regular,color:"#0F172A",padding:0},copyPropsBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:f.brandPurple,paddingHorizontal:10,height:36,borderRadius:8},copyPropsBtnText:{fontSize:10.5,fontFamily:F.bold,color:f.white},emptyPropsBox:{padding:24,alignItems:"center",backgroundColor:f.white,borderRadius:8,borderWidth:1,borderColor:"#E2E8F0"},emptyPropsText:{fontSize:12,fontFamily:F.medium,color:"#94A3B8"},propsList:{gap:6},propItemCard:{backgroundColor:f.white,borderRadius:8,padding:10,borderWidth:1,borderColor:"#E2E8F0"},propHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:4},propKeyName:{fontSize:12,fontFamily:F.bold,color:"#1E293B"},typeBadgePrimary:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,backgroundColor:"#F1F5F9"},typeBadgeFn:{backgroundColor:"#EEF2FF"},typeBadgeObj:{backgroundColor:"#FEF3C7"},typeBadgePrim:{backgroundColor:"#ECFDF5"},typeBadgePrimaryText:{fontSize:9,fontFamily:F.bold,color:"#475569"},propValueText:{fontSize:11,fontFamily:"Courier",color:"#334155",marginTop:2},jsonViewerWrapper:{marginTop:4},modalBackdrop:{flex:1,backgroundColor:"rgba(15, 23, 42, 0.85)",justifyContent:"center",alignItems:"center",padding:20},modalCard:{width:"100%",maxHeight:"80%",backgroundColor:"#1E293B",borderRadius:14,overflow:"hidden",borderWidth:1,borderColor:"#334155"},modalHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingHorizontal:14,paddingVertical:10,borderBottomWidth:1,borderBottomColor:"#334155"},modalTitle:{fontSize:12,fontFamily:F.bold,color:f.white},modalCloseBtn:{padding:4},modalImageContainer:{padding:12,alignItems:"center",justifyContent:"center"},modalImage:{width:"100%",height:260}});
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const UiInspectorOverlay: React.FC;