execbro 1.10.12 → 1.10.14
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/build/__tests__/unit/screenState.test.js +204 -6
- package/build/__tests__/unit/screenState.test.js.map +1 -1
- package/build/__tests__/unit/swipeDirection.test.d.ts +2 -0
- package/build/__tests__/unit/swipeDirection.test.d.ts.map +1 -0
- package/build/__tests__/unit/swipeDirection.test.js +70 -0
- package/build/__tests__/unit/swipeDirection.test.js.map +1 -0
- package/build/__tests__/unit/tap.test.js +0 -2
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/core/guides.js +1 -1
- package/build/core/screenState.d.ts +78 -10
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +303 -40
- package/build/core/screenState.js.map +1 -1
- package/build/pro/tap.d.ts +15 -4
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +43 -96
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +11 -10
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +57 -9
- package/build/tools/interactionTools.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,32 +15,68 @@ export function markPressablesCoveredByOverlay(pressables, overlayBounds) {
|
|
|
15
15
|
}
|
|
16
16
|
return pressables;
|
|
17
17
|
}
|
|
18
|
+
/** A count badge such as "1" or "99+" — the only "label" an icon button like a cart carries. */
|
|
19
|
+
const COUNT_BADGE_LABEL = /^\d{1,3}\+?$/;
|
|
18
20
|
/**
|
|
19
21
|
* Replace component-name fallback labels with semantic icon labels when the
|
|
20
22
|
* pressable's icon child name carries recognizable semantics:
|
|
21
23
|
* { label: "[FloatingHeader]", icon: "SvgChevronBackward" }
|
|
22
24
|
* → label "[SvgChevronBackward — possibly back button]"
|
|
25
|
+
* An icon button whose only text is a count badge (cart with "1") keeps that
|
|
26
|
+
* count as nearby context while the label is upgraded to the icon's meaning:
|
|
27
|
+
* { label: "1", icon: "SvgCartNew" } → label "[SvgCartNew — possibly cart button]", nearbyText "1"
|
|
23
28
|
* Labels from text/a11y are never touched (icon is null for those).
|
|
24
29
|
*/
|
|
25
30
|
export function applyIconHintToLabel(p) {
|
|
26
31
|
if (!p.icon)
|
|
27
32
|
return p;
|
|
28
33
|
const hint = iconSemanticHint(p.icon);
|
|
29
|
-
if (hint)
|
|
34
|
+
if (hint) {
|
|
35
|
+
if (p.label && COUNT_BADGE_LABEL.test(p.label.trim()) && !p.nearbyText) {
|
|
36
|
+
p.nearbyText = p.label;
|
|
37
|
+
}
|
|
30
38
|
p.label = `[${p.icon} — ${hint}]`;
|
|
31
|
-
|
|
39
|
+
}
|
|
40
|
+
else if (!p.label) {
|
|
32
41
|
p.label = `[${p.icon}]`;
|
|
42
|
+
}
|
|
33
43
|
return p;
|
|
34
44
|
}
|
|
35
|
-
const identityCoords = (
|
|
45
|
+
const identityCoords = (item) => ({ center: item.center, frame: item.bounds });
|
|
46
|
+
const TEXT_DISPLAY_MAX = 80;
|
|
47
|
+
const IMAGE_SRC_DISPLAY_MAX = 60;
|
|
48
|
+
function truncate(s, max) {
|
|
49
|
+
return s.length > max ? s.slice(0, max) + "…" : s;
|
|
50
|
+
}
|
|
51
|
+
/** One merged-list line for a static text node — coordinates match pressable lines. */
|
|
52
|
+
export function formatTextEntry(t, convert = identityCoords, opts = {}) {
|
|
53
|
+
const { center, frame } = convert(t);
|
|
54
|
+
const body = opts.fullText ? t.text : truncate(t.text, TEXT_DISPLAY_MAX);
|
|
55
|
+
return ` (${center.x}, ${center.y}) 📝 "${body}" frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})`;
|
|
56
|
+
}
|
|
57
|
+
/** One merged-list line for an image node — coordinates match pressable lines. */
|
|
58
|
+
export function formatImageEntry(img, convert = identityCoords) {
|
|
59
|
+
const { center, frame } = convert(img);
|
|
60
|
+
const src = img.src ? ` src="${truncate(img.src, IMAGE_SRC_DISPLAY_MAX)}"` : "";
|
|
61
|
+
const alt = img.alt ? ` alt="${img.alt}"` : "";
|
|
62
|
+
return ` (${center.x}, ${center.y}) 🖼 Image ${frame.width}x${frame.height}${src}${alt} frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})`;
|
|
63
|
+
}
|
|
64
|
+
const TEXT_CAP = 60;
|
|
65
|
+
const IMAGE_CAP = 40;
|
|
36
66
|
/**
|
|
37
|
-
* Render a ScreenState as the
|
|
38
|
-
*
|
|
39
|
-
*
|
|
67
|
+
* Render a ScreenState as the orientation summary used by get_screen_state and the
|
|
68
|
+
* screenshot tools. By default it merges pressables, static text (📝), and images
|
|
69
|
+
* (🖼) into one spatially-ordered list per reachability group — enough to read and
|
|
70
|
+
* navigate the screen without a screenshot:
|
|
71
|
+
* 📍 Detail [Detail]
|
|
40
72
|
* 🎯 Pressables:
|
|
41
|
-
* (
|
|
73
|
+
* (210, 175) 🖼 Image 420x350 src="…"
|
|
74
|
+
* (146, 394) 📝 "Valya product" frame:(20,382 251x24)
|
|
75
|
+
* (210, 838) <Button /> "In cart" frame:(20,810 380x56)
|
|
76
|
+
* pressablesOnly restores the lean pressable-only snapshot; fullText disables the
|
|
77
|
+
* 80-char text truncation.
|
|
42
78
|
*/
|
|
43
|
-
export function formatScreenStateSummary(ss, convert = identityCoords) {
|
|
79
|
+
export function formatScreenStateSummary(ss, convert = identityCoords, opts = {}) {
|
|
44
80
|
const lines = [];
|
|
45
81
|
if (ss.route) {
|
|
46
82
|
lines.push(`📍 Currently focused screen: "${ss.route.name}" [navigation stack: ${ss.route.stack.join(" > ")}]`);
|
|
@@ -54,38 +90,75 @@ export function formatScreenStateSummary(ss, convert = identityCoords) {
|
|
|
54
90
|
}
|
|
55
91
|
const formatPressable = (p) => {
|
|
56
92
|
const { center, frame } = convert(p);
|
|
57
|
-
|
|
93
|
+
// 🔘 marks tap targets in the enriched view (where 📝 text / 🖼 images also
|
|
94
|
+
// appear); omitted under pressablesOnly to keep the lean legacy lines.
|
|
95
|
+
const marker = opts.pressablesOnly ? "" : " 🔘";
|
|
96
|
+
return ` (${center.x}, ${center.y})${marker}${p.component ? ` <${p.component} />` : ""} ${p.label ? `"${p.label}"` : "(unlabeled)"}` +
|
|
58
97
|
`${p.nearbyText ? ` near "${p.nearbyText}"` : ""}${p.onPressHint ? ` ${p.onPressHint}` : ""}` +
|
|
59
98
|
`${p.testID ? ` testID="${p.testID}"` : ""}${p.isInput ? " [input]" : ""}` +
|
|
60
99
|
` frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})`;
|
|
61
100
|
};
|
|
101
|
+
// Merge pressables + (unless pressablesOnly) texts + images for one reachability
|
|
102
|
+
// group, sorted spatially (top→bottom, then left→right). A text duplicating a
|
|
103
|
+
// pressable's nearbyText is dropped; texts/images cap with an explicit marker.
|
|
104
|
+
const renderGroup = (pressables, texts, images) => {
|
|
105
|
+
const out = [];
|
|
106
|
+
const nearby = new Set(pressables.map((p) => (p.nearbyText || "").trim()).filter(Boolean));
|
|
107
|
+
const freshTexts = opts.pressablesOnly ? [] : texts.filter((t) => !nearby.has(t.text.trim()));
|
|
108
|
+
const useTexts = freshTexts.slice(0, TEXT_CAP);
|
|
109
|
+
const useImages = opts.pressablesOnly ? [] : images.slice(0, IMAGE_CAP);
|
|
110
|
+
const rows = [
|
|
111
|
+
...pressables.map((p) => ({ y: p.center.y, x: p.center.x, line: formatPressable(p) })),
|
|
112
|
+
...useTexts.map((t) => ({ y: t.center.y, x: t.center.x, line: formatTextEntry(t, convert, opts) })),
|
|
113
|
+
...useImages.map((img) => ({ y: img.center.y, x: img.center.x, line: formatImageEntry(img, convert) })),
|
|
114
|
+
];
|
|
115
|
+
rows.sort((a, b) => (a.y !== b.y ? a.y - b.y : a.x - b.x));
|
|
116
|
+
rows.forEach((r) => out.push(r.line));
|
|
117
|
+
if (!opts.pressablesOnly) {
|
|
118
|
+
const droppedT = freshTexts.length - useTexts.length;
|
|
119
|
+
const droppedI = images.length - useImages.length;
|
|
120
|
+
if (droppedT > 0)
|
|
121
|
+
out.push(` … +${droppedT} more text`);
|
|
122
|
+
if (droppedI > 0)
|
|
123
|
+
out.push(` … +${droppedI} more images`);
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
};
|
|
62
127
|
if (ss.overlays.length > 0) {
|
|
63
128
|
for (const overlay of ss.overlays) {
|
|
64
129
|
lines.push(`\n🔲 ${overlay.type}${overlay.title ? ` — "${overlay.title}"` : ""}:`);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
else
|
|
130
|
+
const body = renderGroup(overlay.pressables, overlay.texts ?? [], overlay.images ?? []);
|
|
131
|
+
if (body.length > 0)
|
|
132
|
+
body.forEach((l) => lines.push(l));
|
|
133
|
+
else
|
|
69
134
|
lines.push(" (no pressables)");
|
|
70
|
-
}
|
|
71
135
|
}
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
136
|
+
const reachableP = ss.pressables.filter((p) => !p.blockedByOverlay);
|
|
137
|
+
const blockedP = ss.pressables.filter((p) => p.blockedByOverlay);
|
|
138
|
+
const reachableT = ss.texts.filter((t) => !t.blockedByOverlay);
|
|
139
|
+
const blockedT = ss.texts.filter((t) => t.blockedByOverlay);
|
|
140
|
+
const reachableI = ss.images.filter((i) => !i.blockedByOverlay);
|
|
141
|
+
const blockedI = ss.images.filter((i) => i.blockedByOverlay);
|
|
142
|
+
const rootBody = renderGroup(reachableP, reachableT, reachableI);
|
|
143
|
+
if (opts.pressablesOnly) {
|
|
144
|
+
lines.push(`\n🎯 Root pressables: ${reachableP.length > 0 ? "" : "(none reachable)"}`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
lines.push(`\n🎯 Reachable (outside any overlay):${rootBody.length > 0 ? "" : " (nothing reachable)"}`);
|
|
148
|
+
}
|
|
149
|
+
rootBody.forEach((l) => lines.push(l));
|
|
150
|
+
if (blockedP.length > 0 || blockedT.length > 0 || blockedI.length > 0) {
|
|
77
151
|
lines.push(`\n🚫 Blocked by overlay (visible on the underlying screen but taps will NOT reach them until the overlay closes):`);
|
|
78
|
-
|
|
152
|
+
renderGroup(blockedP, blockedT, blockedI).forEach((l) => lines.push(l));
|
|
79
153
|
}
|
|
80
154
|
}
|
|
81
155
|
else {
|
|
82
|
-
lines.push("\n🎯 Pressables:");
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
else
|
|
156
|
+
lines.push(opts.pressablesOnly ? "\n🎯 Pressables:" : "\n🎯 On screen:");
|
|
157
|
+
const body = renderGroup(ss.pressables, ss.texts, ss.images);
|
|
158
|
+
if (body.length > 0)
|
|
159
|
+
body.forEach((l) => lines.push(l));
|
|
160
|
+
else
|
|
87
161
|
lines.push(" (none)");
|
|
88
|
-
}
|
|
89
162
|
}
|
|
90
163
|
return lines.join("\n");
|
|
91
164
|
}
|
|
@@ -124,8 +197,10 @@ export function describePressHandler(raw) {
|
|
|
124
197
|
* Fallback handler context from the custom component's on* props, for when the
|
|
125
198
|
* direct onPress is anonymous (Hermes discards source even in dev bundles, and
|
|
126
199
|
* names like navigation.goBack are lost to computed assignment):
|
|
127
|
-
* -
|
|
128
|
-
*
|
|
200
|
+
* - only trust the prop whose value IS the touchable's onPress (pass-through);
|
|
201
|
+
* a non-matched candidate is an unverifiable guess that mislabels every button
|
|
202
|
+
* in a multi-button container (FloatingHeader exposes only onBack, but its menu
|
|
203
|
+
* and cart buttons run internal handlers) — so it yields null
|
|
129
204
|
* - named fn → "onBack=goBack()"; nameless → "onPress→onBack" (the prop name
|
|
130
205
|
* alone is greppable context); a bare nameless "onPress" prop adds nothing → null
|
|
131
206
|
*/
|
|
@@ -133,7 +208,7 @@ export function describePropHandlers(raw) {
|
|
|
133
208
|
if (!Array.isArray(raw) || raw.length === 0)
|
|
134
209
|
return null;
|
|
135
210
|
const entries = raw.filter((e) => !!e && typeof e === "object" && typeof e.p === "string");
|
|
136
|
-
const pick = entries.find((e) => e.same) ??
|
|
211
|
+
const pick = entries.find((e) => e.same) ?? null;
|
|
137
212
|
if (!pick)
|
|
138
213
|
return null;
|
|
139
214
|
const name = meaningfulHandlerName(pick.n);
|
|
@@ -153,6 +228,8 @@ export function parseScreenStateResponse(raw) {
|
|
|
153
228
|
route: r.route ?? null,
|
|
154
229
|
overlays: r.overlays ?? [],
|
|
155
230
|
pressables: r.pressables ?? [],
|
|
231
|
+
texts: r.texts ?? [],
|
|
232
|
+
images: r.images ?? [],
|
|
156
233
|
};
|
|
157
234
|
}
|
|
158
235
|
// ============================================================================
|
|
@@ -410,6 +487,10 @@ export async function getScreenState(options = {}) {
|
|
|
410
487
|
// ------------------------------------------------------------------
|
|
411
488
|
|
|
412
489
|
var OVERLAY_NAMES = /^(Modal|BottomSheet|BottomSheetModal|BottomSheetView|ActionSheet|Alert)$/;
|
|
490
|
+
// react-native-screens native-stack presentations that opaquely cover the screens
|
|
491
|
+
// beneath them. transparentModal / containedTransparentModal are excluded — the
|
|
492
|
+
// underlying screen genuinely shows through, so its elements stay reachable.
|
|
493
|
+
var COVERING_PRESENTATIONS = /^(modal|fullScreenModal|containedModal|formSheet)$/;
|
|
413
494
|
var overlayFiberMeta = []; // { type, fiberRoot, hostFibers }
|
|
414
495
|
|
|
415
496
|
function classifyOverlay(name) {
|
|
@@ -440,6 +521,28 @@ export async function getScreenState(options = {}) {
|
|
|
440
521
|
return;
|
|
441
522
|
}
|
|
442
523
|
|
|
524
|
+
// Native-stack modal (react-native-screens): a route presented as a modal /
|
|
525
|
+
// formSheet covers the screens beneath it, but its component name ("Screen",
|
|
526
|
+
// "RNSModalScreen") never matches OVERLAY_NAMES — so without this branch the
|
|
527
|
+
// underlying route's pressables/text leak into the reachable list as if visible.
|
|
528
|
+
// Detect via the stackPresentation prop. activityState === 0 means the screen is
|
|
529
|
+
// inactive/offscreen (e.g. mid-dismiss) — skip it; undefined is treated as active.
|
|
530
|
+
var sp = props.stackPresentation;
|
|
531
|
+
if (typeof sp === 'string' && COVERING_PRESENTATIONS.test(sp) && props.activityState !== 0) {
|
|
532
|
+
var modalHosts = [];
|
|
533
|
+
findHostsInSubtree(fiber, 0, modalHosts, 64);
|
|
534
|
+
if (modalHosts.length > 0) {
|
|
535
|
+
// fullCover: a native covering modal occludes the entire screen beneath
|
|
536
|
+
// it, so its block region is the whole viewport — not just its measured
|
|
537
|
+
// content frame, which can sit inset from the screen edges (e.g. the tab
|
|
538
|
+
// bar peeks past the modal's measured bottom and would wrongly read as
|
|
539
|
+
// reachable). Resolved against viewport bounds in the resolve pass.
|
|
540
|
+
overlayFiberMeta.push({ type: 'Modal', fiber: fiber, hostFibers: modalHosts, fullCover: true });
|
|
541
|
+
// Don't recurse — the modal's own subtree is its content, captured above.
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
443
546
|
// Heuristic: absolute-positioned node with high zIndex covering > 40% screen
|
|
444
547
|
// Only fires if it has at least one pressable child
|
|
445
548
|
if (typeof fiber.type === 'string') {
|
|
@@ -488,6 +591,9 @@ export async function getScreenState(options = {}) {
|
|
|
488
591
|
|
|
489
592
|
var hostFibers = [];
|
|
490
593
|
var fiberMeta = [];
|
|
594
|
+
// A count badge ("1", "99+") is the only text on icon buttons like a cart — treat it
|
|
595
|
+
// as no-own-label so the icon child still surfaces (the count is kept as nearby text).
|
|
596
|
+
var COUNT_BADGE = /^\\d{1,3}\\+?$/;
|
|
491
597
|
|
|
492
598
|
var RN_PRIMITIVES = /^(Animated\\(.*|withAnimated.*|AnimatedComponent.*|ForwardRef.*|memo\\(.*|Context\\.Consumer|Context\\.Provider|ScrollViewContext(Base)?|VirtualizedListContext(Resetter)?|TextInputContext|KeyboardAvoidingViewContext|RCT.*|RNS.*|RNC.*|ViewManagerAdapter_.*|VirtualizedList.*|CellRenderer.*|FrameSizeProvider.*|MaybeScreenContainer|MaybeScreen|Navigation.*|Screen$|ScreenStack|ScreenContainer|ScreenContentWrapper|SceneView|DelayedFreeze|Freeze|Suspender|DebugContainer|StaticContainer|SafeAreaProvider.*|SafeAreaFrameContext|SafeAreaInsetsContext|ExpoRoot|ExpoRootComponent|GestureHandler.*|NativeViewGestureHandler|GestureDetector|PanGestureHandler|Reanimated.*|BottomTabNavigator|TabLayout|RouteNode|Route$|KeyboardProvider|PortalProviderComponent|BottomSheetModalProviderWrapper|ThemeContext|ThemeProvider|TextAncestorContext|PressabilityDebugView|TouchableHighlightImpl|StatusBarOverlay|BottomSheetHostingContainerComponent|BottomSheetGestureHandlersProvider|BottomSheetBackdropContainerComponent|BottomSheetContainerComponent|BottomSheetDraggableViewComponent|BottomSheetHandleContainerComponent|BottomSheetBackgroundContainerComponent|DebuggingOverlay|InspectorDeferred|Inspector|InspectorOverlay|InspectorPanel|StyleInspector|BoxInspector|BoxContainer|ElementBox|BorderBox|InspectorPanelButton)$/;
|
|
493
599
|
var GENERIC_COMPONENT = /^(View|TouchableOpacity|TouchableHighlight|TouchableWithoutFeedback|Pressable|TouchableNativeFeedback|Text|RCTView|RCTText|Unknown)$/;
|
|
@@ -663,7 +769,8 @@ export async function getScreenState(options = {}) {
|
|
|
663
769
|
var a11y = hProps.accessibilityLabel || pProps.accessibilityLabel || null;
|
|
664
770
|
var baseLabel = a11y || (text && text.length > 0 ? text.slice(0, 80) : null) || null;
|
|
665
771
|
var label = resolveLabel(pressableFiber, hostFiber, baseLabel, testID);
|
|
666
|
-
var
|
|
772
|
+
var badgeOnly = baseLabel ? COUNT_BADGE.test(baseLabel.trim()) : false;
|
|
773
|
+
var icon = (baseLabel && !badgeOnly) ? null : findMeaningfulChildName(pressableFiber);
|
|
667
774
|
if (!baseLabel && !icon) {
|
|
668
775
|
var ownName = getComponentName(pressableFiber);
|
|
669
776
|
if (ownName && !GENERIC_COMPONENT.test(ownName) && !RN_PRIMITIVES.test(ownName)) icon = ownName;
|
|
@@ -687,7 +794,8 @@ export async function getScreenState(options = {}) {
|
|
|
687
794
|
var testID2 = p2.testID || p2.nativeID || null;
|
|
688
795
|
var baseLabel2 = a11y2 || (text2 && text2.length > 0 ? text2.slice(0, 80) : null) || null;
|
|
689
796
|
var label2 = resolveLabel(fiber, hosts3[0], baseLabel2, testID2);
|
|
690
|
-
var
|
|
797
|
+
var badgeOnly2 = baseLabel2 ? COUNT_BADGE.test(baseLabel2.trim()) : false;
|
|
798
|
+
var icon2 = (baseLabel2 && !badgeOnly2) ? null : findMeaningfulChildName(fiber);
|
|
691
799
|
if (!baseLabel2 && !icon2) {
|
|
692
800
|
var ownName2 = getComponentName(fiber);
|
|
693
801
|
if (ownName2 && !GENERIC_COMPONENT.test(ownName2) && !RN_PRIMITIVES.test(ownName2)) icon2 = ownName2;
|
|
@@ -733,6 +841,7 @@ export async function getScreenState(options = {}) {
|
|
|
733
841
|
|
|
734
842
|
var textFibers = [];
|
|
735
843
|
var textContents = [];
|
|
844
|
+
var textOverlayIdx = [];
|
|
736
845
|
|
|
737
846
|
function extractTextString(fiber) {
|
|
738
847
|
var p = fiber.memoizedProps;
|
|
@@ -751,12 +860,20 @@ export async function getScreenState(options = {}) {
|
|
|
751
860
|
return '';
|
|
752
861
|
}
|
|
753
862
|
|
|
754
|
-
function walkTexts(fiber, depth, insidePressable, inHidden) {
|
|
863
|
+
function walkTexts(fiber, depth, insidePressable, inHidden, ovIdx) {
|
|
755
864
|
if (!fiber || depth > 5000) return;
|
|
756
865
|
var name = getComponentName(fiber);
|
|
757
866
|
var props = fiber.memoizedProps;
|
|
758
867
|
var nextHidden = inHidden || isScreenHidden(name, props);
|
|
759
868
|
|
|
869
|
+
// Overlay membership by ancestry (same as the pressable walk) so a sheet's
|
|
870
|
+
// text is grouped with the sheet, not flagged as blocked behind it.
|
|
871
|
+
if (ovIdx == null) {
|
|
872
|
+
for (var ofiT = 0; ofiT < overlayFiberMeta.length; ofiT++) {
|
|
873
|
+
if (overlayFiberMeta[ofiT].fiber === fiber) { ovIdx = ofiT; break; }
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
|
|
760
877
|
var hasOnPress = props && typeof props.onPress === 'function';
|
|
761
878
|
var isInputHere = props && (typeof props.onChangeText === 'function' || typeof props.onFocus === 'function');
|
|
762
879
|
var nextInside = insidePressable || !!hasOnPress || !!isInputHere;
|
|
@@ -766,7 +883,7 @@ export async function getScreenState(options = {}) {
|
|
|
766
883
|
// for proxy bounds (Fabric RCTText has no publicInstance).
|
|
767
884
|
if (!insidePressable && !nextHidden && name !== 'RCTText' && typeof fiber.type !== 'string') {
|
|
768
885
|
var str = extractTextString(fiber);
|
|
769
|
-
if (str && str.length > 0 && str.length <=
|
|
886
|
+
if (str && str.length > 0 && str.length <= 300) {
|
|
770
887
|
var up = fiber;
|
|
771
888
|
var upDepth = 0;
|
|
772
889
|
var measurableT = null;
|
|
@@ -781,17 +898,73 @@ export async function getScreenState(options = {}) {
|
|
|
781
898
|
if (measurableT) {
|
|
782
899
|
textFibers.push(measurableT);
|
|
783
900
|
textContents.push(str);
|
|
901
|
+
textOverlayIdx.push(ovIdx);
|
|
784
902
|
}
|
|
785
903
|
}
|
|
786
904
|
}
|
|
787
905
|
|
|
788
906
|
var child = fiber.child;
|
|
789
907
|
while (child) {
|
|
790
|
-
walkTexts(child, depth + 1, nextInside, nextHidden);
|
|
908
|
+
walkTexts(child, depth + 1, nextInside, nextHidden, ovIdx);
|
|
791
909
|
child = child.sibling;
|
|
792
910
|
}
|
|
793
911
|
}
|
|
794
|
-
walkTexts(roots[0].current, 0, false, false);
|
|
912
|
+
walkTexts(roots[0].current, 0, false, false, null);
|
|
913
|
+
|
|
914
|
+
// ------------------------------------------------------------------
|
|
915
|
+
// 3c. Images — host image components, with source + a11y label. Climb to
|
|
916
|
+
// the nearest measurable host (same proxy-bounds trick as text).
|
|
917
|
+
// ------------------------------------------------------------------
|
|
918
|
+
|
|
919
|
+
var imageFibers = [];
|
|
920
|
+
var imageMeta = []; // { src, alt }
|
|
921
|
+
var IMG_NAME = /^(Image|RCTImageView|ExpoImage|FastImage|ImageBackground)$/;
|
|
922
|
+
|
|
923
|
+
function imageSource(props) {
|
|
924
|
+
if (!props) return null;
|
|
925
|
+
var s = props.source;
|
|
926
|
+
if (s == null) return null;
|
|
927
|
+
if (Array.isArray(s)) s = s[0];
|
|
928
|
+
if (typeof s === 'number') return 'asset#' + s;
|
|
929
|
+
if (s && typeof s === 'object' && typeof s.uri === 'string') {
|
|
930
|
+
return s.uri.length > 200 ? s.uri.slice(0, 200) : s.uri;
|
|
931
|
+
}
|
|
932
|
+
if (typeof s === 'string') return s.length > 200 ? s.slice(0, 200) : s;
|
|
933
|
+
return null;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
function walkImages(fiber, depth, inHidden, ovIdx) {
|
|
937
|
+
if (!fiber || depth > 5000) return;
|
|
938
|
+
var name = getComponentName(fiber);
|
|
939
|
+
var props = fiber.memoizedProps;
|
|
940
|
+
var nextHidden = inHidden || isScreenHidden(name, props);
|
|
941
|
+
if (ovIdx == null) {
|
|
942
|
+
for (var ofiI = 0; ofiI < overlayFiberMeta.length; ofiI++) {
|
|
943
|
+
if (overlayFiberMeta[ofiI].fiber === fiber) { ovIdx = ofiI; break; }
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
if (!nextHidden && name && IMG_NAME.test(name) && typeof fiber.type !== 'string') {
|
|
947
|
+
var up = fiber;
|
|
948
|
+
var upD = 0;
|
|
949
|
+
var measurableI = null;
|
|
950
|
+
while (up && upD < 20) {
|
|
951
|
+
if (typeof up.type === 'string' && getMeasurable(up)) { measurableI = up; break; }
|
|
952
|
+
up = up.return;
|
|
953
|
+
upD++;
|
|
954
|
+
}
|
|
955
|
+
if (measurableI) {
|
|
956
|
+
imageFibers.push(measurableI);
|
|
957
|
+
imageMeta.push({
|
|
958
|
+
src: imageSource(props),
|
|
959
|
+
alt: (props && typeof props.accessibilityLabel === 'string') ? props.accessibilityLabel.slice(0, 80) : null,
|
|
960
|
+
overlayIdx: ovIdx
|
|
961
|
+
});
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
var child = fiber.child;
|
|
965
|
+
while (child) { walkImages(child, depth + 1, nextHidden, ovIdx); child = child.sibling; }
|
|
966
|
+
}
|
|
967
|
+
walkImages(roots[0].current, 0, false, null);
|
|
795
968
|
|
|
796
969
|
// ------------------------------------------------------------------
|
|
797
970
|
// 4. Store everything in globalThis for the resolve call
|
|
@@ -809,7 +982,8 @@ export async function getScreenState(options = {}) {
|
|
|
809
982
|
type: om.type,
|
|
810
983
|
title: (title && title.length > 2) ? title.slice(0, 60) : null,
|
|
811
984
|
hostStart: startIdx,
|
|
812
|
-
hostEnd: overlayHostFibers.length
|
|
985
|
+
hostEnd: overlayHostFibers.length,
|
|
986
|
+
fullCover: !!om.fullCover
|
|
813
987
|
};
|
|
814
988
|
});
|
|
815
989
|
|
|
@@ -830,6 +1004,9 @@ export async function getScreenState(options = {}) {
|
|
|
830
1004
|
globalThis.__screenStateOverlayMeasurements = new Array(overlayHostFibers.length).fill(null);
|
|
831
1005
|
globalThis.__screenStateTextContents = textContents;
|
|
832
1006
|
globalThis.__screenStateTextMeasurements = new Array(textFibers.length).fill(null);
|
|
1007
|
+
globalThis.__screenStateTextOverlayIdx = textOverlayIdx;
|
|
1008
|
+
globalThis.__screenStateImageMeta = imageMeta;
|
|
1009
|
+
globalThis.__screenStateImageMeasurements = new Array(imageFibers.length).fill(null);
|
|
833
1010
|
|
|
834
1011
|
// Dispatch all measureInWindow calls (pressables + root + overlay hosts)
|
|
835
1012
|
for (var i = 0; i < hostFibers.length; i++) {
|
|
@@ -859,6 +1036,15 @@ export async function getScreenState(options = {}) {
|
|
|
859
1036
|
})(txi);
|
|
860
1037
|
} catch(e) {}
|
|
861
1038
|
}
|
|
1039
|
+
for (var imi = 0; imi < imageFibers.length; imi++) {
|
|
1040
|
+
try {
|
|
1041
|
+
(function(idx) {
|
|
1042
|
+
getMeasurable(imageFibers[idx]).measureInWindow(function(fx, fy, fw, fh) {
|
|
1043
|
+
globalThis.__screenStateImageMeasurements[idx] = { x: fx, y: fy, width: fw, height: fh };
|
|
1044
|
+
});
|
|
1045
|
+
})(imi);
|
|
1046
|
+
} catch(e) {}
|
|
1047
|
+
}
|
|
862
1048
|
|
|
863
1049
|
return { count: hostFibers.length, overlayCount: overlayFiberMeta.length };
|
|
864
1050
|
})()
|
|
@@ -884,8 +1070,14 @@ export async function getScreenState(options = {}) {
|
|
|
884
1070
|
var overlayMeasurements = globalThis.__screenStateOverlayMeasurements || [];
|
|
885
1071
|
var textContents = globalThis.__screenStateTextContents || [];
|
|
886
1072
|
var textMeasurements = globalThis.__screenStateTextMeasurements || [];
|
|
1073
|
+
var textOverlayIdx = globalThis.__screenStateTextOverlayIdx || [];
|
|
1074
|
+
var imageMeta = globalThis.__screenStateImageMeta || [];
|
|
1075
|
+
var imageMeasurements = globalThis.__screenStateImageMeasurements || [];
|
|
887
1076
|
globalThis.__screenStateTextContents = null;
|
|
888
1077
|
globalThis.__screenStateTextMeasurements = null;
|
|
1078
|
+
globalThis.__screenStateTextOverlayIdx = null;
|
|
1079
|
+
globalThis.__screenStateImageMeta = null;
|
|
1080
|
+
globalThis.__screenStateImageMeasurements = null;
|
|
889
1081
|
globalThis.__screenStateFibers = null;
|
|
890
1082
|
globalThis.__screenStateMeta = null;
|
|
891
1083
|
globalThis.__screenStateMeasurements = null;
|
|
@@ -934,7 +1126,12 @@ export async function getScreenState(options = {}) {
|
|
|
934
1126
|
if (mm.y + mm.height > cMaxY) cMaxY = mm.y + mm.height;
|
|
935
1127
|
}
|
|
936
1128
|
if (!bValid) continue;
|
|
937
|
-
|
|
1129
|
+
// Native covering modals occlude the whole screen — expand their block region to
|
|
1130
|
+
// the full viewport so elements that extend past the modal's measured content
|
|
1131
|
+
// frame (e.g. the bottom tab bar) are still flagged as blocked, not reachable.
|
|
1132
|
+
var blockBounds = om.fullCover
|
|
1133
|
+
? { x: 0, y: 0, width: Math.round(viewportW), height: Math.round(viewportH) }
|
|
1134
|
+
: { x: Math.round(bMinX), y: Math.round(bMinY), width: Math.round(bMaxX - bMinX), height: Math.round(bMaxY - bMinY) };
|
|
938
1135
|
// When every host is backdrop-sized (gorhom sheets measure only full-screen
|
|
939
1136
|
// containers), there is no usable content rect — geometric fallback would
|
|
940
1137
|
// swallow the underlying screen's pressables, so it is disabled (hasContent).
|
|
@@ -1043,6 +1240,46 @@ export async function getScreenState(options = {}) {
|
|
|
1043
1240
|
delete allPressables[si].hasOwnLabel;
|
|
1044
1241
|
}
|
|
1045
1242
|
|
|
1243
|
+
// Build typed text/image lists (pair each measurement with its meta by index,
|
|
1244
|
+
// viewport-filter) and assign each to a reachability group via the same overlay
|
|
1245
|
+
// logic used for pressables (content containment vs blocking backdrop).
|
|
1246
|
+
var rootTexts = [], rootImages = [];
|
|
1247
|
+
for (var ov = 0; ov < overlays.length; ov++) { overlays[ov].texts = []; overlays[ov].images = []; }
|
|
1248
|
+
// Group an item: by fiber ancestry (overlayIdx) first — a sheet's own text/image
|
|
1249
|
+
// belongs to the sheet; else geometric containment in an overlay's content; else
|
|
1250
|
+
// root, flagged blocked when it sits under a blocking overlay (the screen behind).
|
|
1251
|
+
function pushClassified(entry, kind, ovIdx) {
|
|
1252
|
+
for (var a = 0; a < overlays.length; a++) {
|
|
1253
|
+
if (ovIdx != null && ovIdx === overlays[a].origIdx) { overlays[a][kind].push(entry); return; }
|
|
1254
|
+
}
|
|
1255
|
+
for (var c = 0; c < overlays.length; c++) {
|
|
1256
|
+
if (overlays[c].hasContent && inside(entry.bounds, overlays[c].contentBounds)) { overlays[c][kind].push(entry); return; }
|
|
1257
|
+
}
|
|
1258
|
+
var blk = false;
|
|
1259
|
+
for (var b = 0; b < overlays.length; b++) { if (inside(entry.bounds, overlays[b].blockBounds)) { blk = true; break; } }
|
|
1260
|
+
if (blk) entry.blockedByOverlay = true;
|
|
1261
|
+
(kind === 'texts' ? rootTexts : rootImages).push(entry);
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
for (var ti = 0; ti < textContents.length; ti++) {
|
|
1265
|
+
var tm = textMeasurements[ti];
|
|
1266
|
+
if (!tm || tm.width <= 0 || tm.height <= 0) continue;
|
|
1267
|
+
if (tm.x + tm.width < 0 || tm.y + tm.height < 0) continue;
|
|
1268
|
+
if (tm.x > viewportW || tm.y > viewportH) continue;
|
|
1269
|
+
pushClassified({ text: textContents[ti],
|
|
1270
|
+
center: { x: Math.round(tm.x + tm.width/2), y: Math.round(tm.y + tm.height/2) },
|
|
1271
|
+
bounds: { x: Math.round(tm.x), y: Math.round(tm.y), width: Math.round(tm.width), height: Math.round(tm.height) } }, 'texts', textOverlayIdx[ti]);
|
|
1272
|
+
}
|
|
1273
|
+
for (var ii = 0; ii < imageMeta.length; ii++) {
|
|
1274
|
+
var im = imageMeasurements[ii];
|
|
1275
|
+
if (!im || im.width <= 0 || im.height <= 0) continue;
|
|
1276
|
+
if (im.x + im.width < 0 || im.y + im.height < 0) continue;
|
|
1277
|
+
if (im.x > viewportW || im.y > viewportH) continue;
|
|
1278
|
+
pushClassified({ src: imageMeta[ii].src, alt: imageMeta[ii].alt,
|
|
1279
|
+
center: { x: Math.round(im.x + im.width/2), y: Math.round(im.y + im.height/2) },
|
|
1280
|
+
bounds: { x: Math.round(im.x), y: Math.round(im.y), width: Math.round(im.width), height: Math.round(im.height) } }, 'images', imageMeta[ii].overlayIdx);
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1046
1283
|
// Sort visually (top-to-bottom, left-to-right) — walk order is mount order,
|
|
1047
1284
|
// which puts late-mounted overlays like floating headers at the end.
|
|
1048
1285
|
function byPosition(a, b) {
|
|
@@ -1050,14 +1287,20 @@ export async function getScreenState(options = {}) {
|
|
|
1050
1287
|
return a.center.x - b.center.x;
|
|
1051
1288
|
}
|
|
1052
1289
|
rootPressables.sort(byPosition);
|
|
1053
|
-
|
|
1290
|
+
rootTexts.sort(byPosition);
|
|
1291
|
+
rootImages.sort(byPosition);
|
|
1292
|
+
for (var so = 0; so < overlays.length; so++) {
|
|
1293
|
+
overlays[so].pressables.sort(byPosition);
|
|
1294
|
+
overlays[so].texts.sort(byPosition);
|
|
1295
|
+
overlays[so].images.sort(byPosition);
|
|
1296
|
+
}
|
|
1054
1297
|
|
|
1055
1298
|
// Strip bounds from overlay objects (not in public interface)
|
|
1056
1299
|
var cleanOverlays = overlays.map(function(o) {
|
|
1057
|
-
return { type: o.type, title: o.title, pressables: o.pressables };
|
|
1300
|
+
return { type: o.type, title: o.title, pressables: o.pressables, texts: o.texts, images: o.images };
|
|
1058
1301
|
});
|
|
1059
1302
|
|
|
1060
|
-
return { route: route, overlays: cleanOverlays, pressables: rootPressables };
|
|
1303
|
+
return { route: route, overlays: cleanOverlays, pressables: rootPressables, texts: rootTexts, images: rootImages };
|
|
1061
1304
|
})()
|
|
1062
1305
|
`;
|
|
1063
1306
|
const resolveResult = await executeInApp(resolveExpression, false, { timeoutMs: 15000, originatingToolName: "get_screen_state" }, device);
|
|
@@ -1090,6 +1333,26 @@ export async function getScreenState(options = {}) {
|
|
|
1090
1333
|
for (const overlay of screenState.overlays) {
|
|
1091
1334
|
overlay.pressables = dedupPressables(overlay.pressables);
|
|
1092
1335
|
}
|
|
1336
|
+
// Dedup texts/images: a single visual element often maps to nested host nodes
|
|
1337
|
+
// (Image > ExpoImage) or repeated text spans that all measure to the same box.
|
|
1338
|
+
const dedupBy = (list, keyExtra) => {
|
|
1339
|
+
const seen = new Set();
|
|
1340
|
+
return list.filter((item) => {
|
|
1341
|
+
const key = `${item.center.x},${item.center.y}|${keyExtra(item)}`;
|
|
1342
|
+
if (seen.has(key))
|
|
1343
|
+
return false;
|
|
1344
|
+
seen.add(key);
|
|
1345
|
+
return true;
|
|
1346
|
+
});
|
|
1347
|
+
};
|
|
1348
|
+
screenState.texts = dedupBy(screenState.texts, (t) => t.text);
|
|
1349
|
+
screenState.images = dedupBy(screenState.images, (i) => i.src ?? "");
|
|
1350
|
+
for (const overlay of screenState.overlays) {
|
|
1351
|
+
if (overlay.texts)
|
|
1352
|
+
overlay.texts = dedupBy(overlay.texts, (t) => t.text);
|
|
1353
|
+
if (overlay.images)
|
|
1354
|
+
overlay.images = dedupBy(overlay.images, (i) => i.src ?? "");
|
|
1355
|
+
}
|
|
1093
1356
|
// Semantic icon hints + onPress handler hints
|
|
1094
1357
|
const decorate = (p) => {
|
|
1095
1358
|
applyIconHintToLabel(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenState.js","sourceRoot":"","sources":["../../src/core/screenState.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"screenState.js","sourceRoot":"","sources":["../../src/core/screenState.ts"],"names":[],"mappings":"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"}
|