@userflow-tech/react-native 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +360 -70
- package/docs/anchoring.md +58 -42
- package/docs/troubleshooting.md +69 -27
- package/expo-plugin/hostDependencyWarnings.d.ts +21 -0
- package/expo-plugin/hostDependencyWarnings.d.ts.map +1 -0
- package/expo-plugin/hostDependencyWarnings.js +101 -0
- package/expo-plugin/hostDependencyWarnings.js.map +1 -0
- package/expo-plugin/withUserflow.d.ts.map +1 -1
- package/expo-plugin/withUserflow.js +16 -0
- package/expo-plugin/withUserflow.js.map +1 -1
- package/lib/commonjs/anchors/AnchorRegistry.js +7 -0
- package/lib/commonjs/anchors/AnchorRegistry.js.map +1 -1
- package/lib/commonjs/anchors/elementConditionEvaluator.js +189 -55
- package/lib/commonjs/anchors/elementConditionEvaluator.js.map +1 -1
- package/lib/commonjs/anchors/elementTapMonitor.js +92 -0
- package/lib/commonjs/anchors/elementTapMonitor.js.map +1 -0
- package/lib/commonjs/anchors/elementTargetMatch.js +85 -0
- package/lib/commonjs/anchors/elementTargetMatch.js.map +1 -0
- package/lib/commonjs/anchors/fiber/findAnchorFiber.js +64 -39
- package/lib/commonjs/anchors/fiber/findAnchorFiber.js.map +1 -1
- package/lib/commonjs/anchors/fiber/touchTargetFiber.js +105 -0
- package/lib/commonjs/anchors/fiber/touchTargetFiber.js.map +1 -0
- package/lib/commonjs/anchors/resolveAnchorHost.js +2 -1
- package/lib/commonjs/anchors/resolveAnchorHost.js.map +1 -1
- package/lib/commonjs/anchors/resolveAutoAnchorHost.js +4 -2
- package/lib/commonjs/anchors/resolveAutoAnchorHost.js.map +1 -1
- package/lib/commonjs/anchors/resolveElementTargets.js +158 -0
- package/lib/commonjs/anchors/resolveElementTargets.js.map +1 -0
- package/lib/commonjs/anchors/targetPressMonitor.js +9 -3
- package/lib/commonjs/anchors/targetPressMonitor.js.map +1 -1
- package/lib/commonjs/anchors/useUserflowAnchor.js +1 -0
- package/lib/commonjs/anchors/useUserflowAnchor.js.map +1 -1
- package/lib/commonjs/anonymousId.js +16 -7
- package/lib/commonjs/anonymousId.js.map +1 -1
- package/lib/commonjs/authoring/capturePickerScreenshot.js +9 -1
- package/lib/commonjs/authoring/capturePickerScreenshot.js.map +1 -1
- package/lib/commonjs/evalJs/getWebView.js +5 -13
- package/lib/commonjs/evalJs/getWebView.js.map +1 -1
- package/lib/commonjs/hostAppVersion.js +6 -1
- package/lib/commonjs/hostAppVersion.js.map +1 -1
- package/lib/commonjs/index.js +5 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/installCheck.js +183 -0
- package/lib/commonjs/installCheck.js.map +1 -0
- package/lib/commonjs/nativeModules.js +44 -0
- package/lib/commonjs/nativeModules.js.map +1 -0
- package/lib/commonjs/network.js +20 -7
- package/lib/commonjs/network.js.map +1 -1
- package/lib/commonjs/pairing/deviceId.js +14 -11
- package/lib/commonjs/pairing/deviceId.js.map +1 -1
- package/lib/commonjs/pairing/tokenStorage.js +17 -4
- package/lib/commonjs/pairing/tokenStorage.js.map +1 -1
- package/lib/commonjs/runtime/TargetPressBridge.js +12 -1
- package/lib/commonjs/runtime/TargetPressBridge.js.map +1 -1
- package/lib/commonjs/runtime/UserflowProvider.js +6 -3
- package/lib/commonjs/runtime/UserflowProvider.js.map +1 -1
- package/lib/commonjs/storage/asyncStorage.js +67 -0
- package/lib/commonjs/storage/asyncStorage.js.map +1 -0
- package/lib/commonjs/surfaces/BannerSurface.js +3 -1
- package/lib/commonjs/surfaces/BannerSurface.js.map +1 -1
- package/lib/commonjs/surfaces/safeArea.js +74 -28
- package/lib/commonjs/surfaces/safeArea.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/anchors/AnchorRegistry.js +7 -0
- package/lib/module/anchors/AnchorRegistry.js.map +1 -1
- package/lib/module/anchors/elementConditionEvaluator.js +189 -55
- package/lib/module/anchors/elementConditionEvaluator.js.map +1 -1
- package/lib/module/anchors/elementTapMonitor.js +87 -0
- package/lib/module/anchors/elementTapMonitor.js.map +1 -0
- package/lib/module/anchors/elementTargetMatch.js +78 -0
- package/lib/module/anchors/elementTargetMatch.js.map +1 -0
- package/lib/module/anchors/fiber/findAnchorFiber.js +62 -39
- package/lib/module/anchors/fiber/findAnchorFiber.js.map +1 -1
- package/lib/module/anchors/fiber/touchTargetFiber.js +100 -0
- package/lib/module/anchors/fiber/touchTargetFiber.js.map +1 -0
- package/lib/module/anchors/resolveAnchorHost.js +2 -1
- package/lib/module/anchors/resolveAnchorHost.js.map +1 -1
- package/lib/module/anchors/resolveAutoAnchorHost.js +3 -3
- package/lib/module/anchors/resolveAutoAnchorHost.js.map +1 -1
- package/lib/module/anchors/resolveElementTargets.js +152 -0
- package/lib/module/anchors/resolveElementTargets.js.map +1 -0
- package/lib/module/anchors/targetPressMonitor.js +8 -3
- package/lib/module/anchors/targetPressMonitor.js.map +1 -1
- package/lib/module/anchors/useUserflowAnchor.js +1 -0
- package/lib/module/anchors/useUserflowAnchor.js.map +1 -1
- package/lib/module/anonymousId.js +15 -5
- package/lib/module/anonymousId.js.map +1 -1
- package/lib/module/authoring/capturePickerScreenshot.js +9 -1
- package/lib/module/authoring/capturePickerScreenshot.js.map +1 -1
- package/lib/module/evalJs/getWebView.js +5 -13
- package/lib/module/evalJs/getWebView.js.map +1 -1
- package/lib/module/hostAppVersion.js +6 -1
- package/lib/module/hostAppVersion.js.map +1 -1
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/installCheck.js +169 -0
- package/lib/module/installCheck.js.map +1 -0
- package/lib/module/nativeModules.js +40 -0
- package/lib/module/nativeModules.js.map +1 -0
- package/lib/module/network.js +20 -7
- package/lib/module/network.js.map +1 -1
- package/lib/module/pairing/deviceId.js +14 -10
- package/lib/module/pairing/deviceId.js.map +1 -1
- package/lib/module/pairing/tokenStorage.js +17 -4
- package/lib/module/pairing/tokenStorage.js.map +1 -1
- package/lib/module/runtime/TargetPressBridge.js +12 -1
- package/lib/module/runtime/TargetPressBridge.js.map +1 -1
- package/lib/module/runtime/UserflowProvider.js +7 -4
- package/lib/module/runtime/UserflowProvider.js.map +1 -1
- package/lib/module/storage/asyncStorage.js +61 -0
- package/lib/module/storage/asyncStorage.js.map +1 -0
- package/lib/module/surfaces/BannerSurface.js +3 -1
- package/lib/module/surfaces/BannerSurface.js.map +1 -1
- package/lib/module/surfaces/safeArea.js +70 -28
- package/lib/module/surfaces/safeArea.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/src/anchors/AnchorRegistry.d.ts +7 -0
- package/lib/typescript/commonjs/src/anchors/AnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/elementConditionEvaluator.d.ts +12 -16
- package/lib/typescript/commonjs/src/anchors/elementConditionEvaluator.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/elementTapMonitor.d.ts +36 -0
- package/lib/typescript/commonjs/src/anchors/elementTapMonitor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/elementTargetMatch.d.ts +20 -0
- package/lib/typescript/commonjs/src/anchors/elementTargetMatch.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/findAnchorFiber.d.ts +17 -5
- package/lib/typescript/commonjs/src/anchors/fiber/findAnchorFiber.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/touchTargetFiber.d.ts +24 -0
- package/lib/typescript/commonjs/src/anchors/fiber/touchTargetFiber.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts +2 -1
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/resolveAutoAnchorHost.d.ts +10 -1
- package/lib/typescript/commonjs/src/anchors/resolveAutoAnchorHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/resolveElementTargets.d.ts +39 -0
- package/lib/typescript/commonjs/src/anchors/resolveElementTargets.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/targetPressMonitor.d.ts +2 -0
- package/lib/typescript/commonjs/src/anchors/targetPressMonitor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/useUserflowAnchor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anonymousId.d.ts +2 -0
- package/lib/typescript/commonjs/src/anonymousId.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/authoring/capturePickerScreenshot.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/evalJs/getWebView.d.ts +2 -1
- package/lib/typescript/commonjs/src/evalJs/getWebView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hostAppVersion.d.ts +1 -1
- package/lib/typescript/commonjs/src/hostAppVersion.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/installCheck.d.ts +48 -0
- package/lib/typescript/commonjs/src/installCheck.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/nativeModules.d.ts +13 -0
- package/lib/typescript/commonjs/src/nativeModules.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/network.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/deviceId.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/tokenStorage.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts +2 -1
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/UserflowProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/storage/asyncStorage.d.ts +15 -0
- package/lib/typescript/commonjs/src/storage/asyncStorage.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/safeArea.d.ts +6 -2
- package/lib/typescript/commonjs/src/surfaces/safeArea.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/version.d.ts +1 -1
- package/lib/typescript/module/src/anchors/AnchorRegistry.d.ts +7 -0
- package/lib/typescript/module/src/anchors/AnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/elementConditionEvaluator.d.ts +12 -16
- package/lib/typescript/module/src/anchors/elementConditionEvaluator.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/elementTapMonitor.d.ts +36 -0
- package/lib/typescript/module/src/anchors/elementTapMonitor.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/elementTargetMatch.d.ts +20 -0
- package/lib/typescript/module/src/anchors/elementTargetMatch.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/findAnchorFiber.d.ts +17 -5
- package/lib/typescript/module/src/anchors/fiber/findAnchorFiber.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/touchTargetFiber.d.ts +24 -0
- package/lib/typescript/module/src/anchors/fiber/touchTargetFiber.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts +2 -1
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/resolveAutoAnchorHost.d.ts +10 -1
- package/lib/typescript/module/src/anchors/resolveAutoAnchorHost.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/resolveElementTargets.d.ts +39 -0
- package/lib/typescript/module/src/anchors/resolveElementTargets.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/targetPressMonitor.d.ts +2 -0
- package/lib/typescript/module/src/anchors/targetPressMonitor.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/useUserflowAnchor.d.ts.map +1 -1
- package/lib/typescript/module/src/anonymousId.d.ts +2 -0
- package/lib/typescript/module/src/anonymousId.d.ts.map +1 -1
- package/lib/typescript/module/src/authoring/capturePickerScreenshot.d.ts.map +1 -1
- package/lib/typescript/module/src/evalJs/getWebView.d.ts +2 -1
- package/lib/typescript/module/src/evalJs/getWebView.d.ts.map +1 -1
- package/lib/typescript/module/src/hostAppVersion.d.ts +1 -1
- package/lib/typescript/module/src/hostAppVersion.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/installCheck.d.ts +48 -0
- package/lib/typescript/module/src/installCheck.d.ts.map +1 -0
- package/lib/typescript/module/src/nativeModules.d.ts +13 -0
- package/lib/typescript/module/src/nativeModules.d.ts.map +1 -0
- package/lib/typescript/module/src/network.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/deviceId.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/tokenStorage.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts +2 -1
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/UserflowProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/storage/asyncStorage.d.ts +15 -0
- package/lib/typescript/module/src/storage/asyncStorage.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/BannerSurface.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/safeArea.d.ts +6 -2
- package/lib/typescript/module/src/surfaces/safeArea.d.ts.map +1 -1
- package/lib/typescript/module/src/version.d.ts +1 -1
- package/package.json +25 -8
- package/src/anchors/AnchorRegistry.ts +12 -0
- package/src/anchors/elementConditionEvaluator.ts +235 -70
- package/src/anchors/elementTapMonitor.ts +95 -0
- package/src/anchors/elementTargetMatch.ts +90 -0
- package/src/anchors/fiber/findAnchorFiber.ts +66 -35
- package/src/anchors/fiber/touchTargetFiber.ts +125 -0
- package/src/anchors/resolveAnchorHost.ts +2 -1
- package/src/anchors/resolveAutoAnchorHost.ts +3 -3
- package/src/anchors/resolveElementTargets.ts +165 -0
- package/src/anchors/targetPressMonitor.ts +12 -3
- package/src/anchors/useUserflowAnchor.ts +1 -0
- package/src/anonymousId.ts +19 -8
- package/src/authoring/capturePickerScreenshot.ts +10 -1
- package/src/evalJs/getWebView.ts +6 -13
- package/src/hostAppVersion.ts +7 -1
- package/src/index.ts +10 -0
- package/src/installCheck.ts +225 -0
- package/src/nativeModules.ts +48 -0
- package/src/network.ts +27 -11
- package/src/pairing/deviceId.ts +14 -11
- package/src/pairing/tokenStorage.ts +23 -7
- package/src/runtime/TargetPressBridge.tsx +17 -1
- package/src/runtime/UserflowProvider.tsx +11 -4
- package/src/storage/asyncStorage.ts +88 -0
- package/src/surfaces/BannerSurface.tsx +7 -5
- package/src/surfaces/safeArea.ts +85 -40
- package/src/version.ts +1 -1
- package/vendor/core/dist/constants.d.ts +2 -0
- package/vendor/core/dist/constants.d.ts.map +1 -1
- package/vendor/core/dist/constants.js +2 -0
- package/vendor/core/dist/constants.js.map +1 -1
- package/vendor/core/dist/engine/ClientConditionEngine.d.ts +20 -1
- package/vendor/core/dist/engine/ClientConditionEngine.d.ts.map +1 -1
- package/vendor/core/dist/engine/ClientConditionEngine.js +13 -10
- package/vendor/core/dist/engine/ClientConditionEngine.js.map +1 -1
- package/vendor/core/dist/engine/UserflowCore.d.ts.map +1 -1
- package/vendor/core/dist/engine/UserflowCore.js +21 -2
- package/vendor/core/dist/engine/UserflowCore.js.map +1 -1
- package/vendor/core/dist/index.d.ts +1 -1
- package/vendor/core/dist/index.d.ts.map +1 -1
- package/vendor/core/dist/index.js.map +1 -1
- package/vendor/core/dist/version.d.ts +1 -1
- package/vendor/core/dist/version.js +1 -1
- package/vendor/core/package.json +1 -1
- package/vendor/protocol/package.json +1 -1
- package/docs/webview-custom-banner-poc.md +0 -64
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.ANCHOR_PROP_TIERS = void 0;
|
|
6
7
|
exports.findAnchorFiber = findAnchorFiber;
|
|
8
|
+
exports.findAnchorFibers = findAnchorFibers;
|
|
7
9
|
exports.nearestHostDescendant = nearestHostDescendant;
|
|
8
10
|
var _fiberInternals = require("./fiberInternals.js");
|
|
9
11
|
var _walkVisibleFibers = require("./walkVisibleFibers.js");
|
|
@@ -16,28 +18,62 @@ const MAX_NODES = 60_000;
|
|
|
16
18
|
|
|
17
19
|
/** One production warning per process — truncation must not look like "missing". */
|
|
18
20
|
let maxNodesWarned = false;
|
|
19
|
-
|
|
21
|
+
/** Props an anchor id can sit on, strongest first. */
|
|
22
|
+
const ANCHOR_PROP_TIERS = exports.ANCHOR_PROP_TIERS = ['userflowId', 'testID', 'nativeID', 'accessibilityLabel'];
|
|
23
|
+
|
|
24
|
+
/** Every collapsed host of the winning tier. Duplicates stay in the list. */
|
|
25
|
+
|
|
20
26
|
/**
|
|
21
27
|
* Bounded DFS under `rootFiber` looking for fibers whose memoizedProps match
|
|
22
|
-
* `id` on testID, then nativeID, then accessibilityLabel.
|
|
23
|
-
* tier that has any match so a testID hit is never made
|
|
24
|
-
* unrelated accessibilityLabel.
|
|
28
|
+
* `id` on userflowId, then testID, then nativeID, then accessibilityLabel.
|
|
29
|
+
* Uses the highest tier that has any match so a testID hit is never made
|
|
30
|
+
* ambiguous by an unrelated accessibilityLabel.
|
|
25
31
|
*
|
|
26
32
|
* A composite match resolves to the host beneath it that carries the same id
|
|
27
33
|
* (e.g. a tab item that wraps its button in a View and forwards testID to the
|
|
28
34
|
* button), else to its shallowest host descendant. Multiple matches on a single
|
|
29
35
|
* root-to-leaf chain (e.g. Pressable forwarding testID to its inner View)
|
|
30
|
-
* collapse to the outermost host. Disjoint matches
|
|
36
|
+
* collapse to the outermost host. Disjoint matches stay in the list returned by
|
|
37
|
+
* {@link findAnchorFibers}; {@link findAnchorFiber} fails closed on those.
|
|
31
38
|
*
|
|
32
39
|
* The walk never follows `rootFiber.sibling` so the Userflow overlay (a sibling
|
|
33
40
|
* of {@link FiberScanRoot} in UserflowProvider) cannot self-match SDK testIDs.
|
|
34
41
|
*/
|
|
35
|
-
function
|
|
42
|
+
function findAnchorFibers(rootFiber, id) {
|
|
36
43
|
if (!rootFiber || !id) return {
|
|
37
44
|
status: 'missing'
|
|
38
45
|
};
|
|
46
|
+
const won = winningTier(rootFiber, id);
|
|
47
|
+
if (!won) return {
|
|
48
|
+
status: 'missing'
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
status: 'found',
|
|
52
|
+
fibers: won.hosts,
|
|
53
|
+
tier: won.tier
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function findAnchorFiber(rootFiber, id) {
|
|
57
|
+
const many = findAnchorFibers(rootFiber, id);
|
|
58
|
+
if (many.status === 'missing') return {
|
|
59
|
+
status: 'missing'
|
|
60
|
+
};
|
|
61
|
+
if (many.fibers.length === 1) {
|
|
62
|
+
return {
|
|
63
|
+
status: 'found',
|
|
64
|
+
fiber: many.fibers[0],
|
|
65
|
+
tier: many.tier
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
status: 'ambiguous',
|
|
70
|
+
tier: many.tier
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function winningTier(rootFiber, id) {
|
|
39
74
|
try {
|
|
40
75
|
const byTier = {
|
|
76
|
+
userflowId: [],
|
|
41
77
|
testID: [],
|
|
42
78
|
nativeID: [],
|
|
43
79
|
accessibilityLabel: []
|
|
@@ -48,6 +84,9 @@ function findAnchorFiber(rootFiber, id) {
|
|
|
48
84
|
} = (0, _walkVisibleFibers.walkVisibleFibers)(rootFiber, fiber => {
|
|
49
85
|
const props = (0, _fiberInternals.getMemoizedProps)(fiber);
|
|
50
86
|
if (!props) return;
|
|
87
|
+
if (typeof props.userflowId === 'string' && props.userflowId === id) {
|
|
88
|
+
byTier.userflowId.push(fiber);
|
|
89
|
+
}
|
|
51
90
|
if (typeof props.testID === 'string' && props.testID === id) {
|
|
52
91
|
byTier.testID.push(fiber);
|
|
53
92
|
}
|
|
@@ -59,48 +98,34 @@ function findAnchorFiber(rootFiber, id) {
|
|
|
59
98
|
}
|
|
60
99
|
}, MAX_NODES);
|
|
61
100
|
if (truncated || visited >= MAX_NODES) {
|
|
62
|
-
|
|
63
|
-
// eslint-disable-next-line no-console -- actionable: the anchor may exist but was not reached
|
|
64
|
-
const warn = message => console.warn(message);
|
|
65
|
-
if (__DEV__) {
|
|
66
|
-
warn(`[Userflow] Anchor scan for "${id}" stopped after ${MAX_NODES} nodes. ` + `The element may exist but was not reached. Register it explicitly with ` + `useUserflowAnchor("${id}") to skip the scan.`);
|
|
67
|
-
} else if (!maxNodesWarned) {
|
|
68
|
-
maxNodesWarned = true;
|
|
69
|
-
warn(`[Userflow] Anchor scan stopped after ${MAX_NODES} nodes; some anchors may ` + `be missed. Prefer useUserflowAnchor for deep or dense trees.`);
|
|
70
|
-
}
|
|
101
|
+
warnScanTruncated(id);
|
|
71
102
|
}
|
|
72
|
-
for (const tier of
|
|
103
|
+
for (const tier of ANCHOR_PROP_TIERS) {
|
|
73
104
|
const matches = byTier[tier];
|
|
74
105
|
if (matches.length === 0) continue;
|
|
75
106
|
const hosts = uniqueHosts(matches);
|
|
76
107
|
if (hosts.length === 0) continue;
|
|
77
|
-
if (hosts.length === 1) {
|
|
78
|
-
return {
|
|
79
|
-
status: 'found',
|
|
80
|
-
fiber: hosts[0],
|
|
81
|
-
tier
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
const collapsed = collapseToChains(hosts);
|
|
85
|
-
if (collapsed.length === 1) {
|
|
86
|
-
return {
|
|
87
|
-
status: 'found',
|
|
88
|
-
fiber: collapsed[0],
|
|
89
|
-
tier
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
108
|
return {
|
|
93
|
-
|
|
94
|
-
|
|
109
|
+
tier,
|
|
110
|
+
hosts: collapseToChains(hosts)
|
|
95
111
|
};
|
|
96
112
|
}
|
|
97
|
-
return
|
|
98
|
-
status: 'missing'
|
|
99
|
-
};
|
|
113
|
+
return null;
|
|
100
114
|
} catch {
|
|
101
|
-
return
|
|
102
|
-
|
|
103
|
-
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function warnScanTruncated(id) {
|
|
119
|
+
// Truncation would otherwise look exactly like "the anchor isn't there".
|
|
120
|
+
// eslint-disable-next-line no-console -- actionable: the anchor may exist but was not reached
|
|
121
|
+
const warn = message => console.warn(message);
|
|
122
|
+
if (__DEV__) {
|
|
123
|
+
warn(`[Userflow] Anchor scan for "${id}" stopped after ${MAX_NODES} nodes. ` + `The element may exist but was not reached. Register it explicitly with ` + `useUserflowAnchor("${id}") to skip the scan.`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!maxNodesWarned) {
|
|
127
|
+
maxNodesWarned = true;
|
|
128
|
+
warn(`[Userflow] Anchor scan stopped after ${MAX_NODES} nodes; some anchors may ` + `be missed. Prefer useUserflowAnchor for deep or dense trees.`);
|
|
104
129
|
}
|
|
105
130
|
}
|
|
106
131
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_fiberInternals","require","_walkVisibleFibers","MAX_NODES","maxNodesWarned","
|
|
1
|
+
{"version":3,"names":["_fiberInternals","require","_walkVisibleFibers","MAX_NODES","maxNodesWarned","ANCHOR_PROP_TIERS","exports","findAnchorFibers","rootFiber","id","status","won","winningTier","fibers","hosts","tier","findAnchorFiber","many","length","fiber","byTier","userflowId","testID","nativeID","accessibilityLabel","visited","truncated","walkVisibleFibers","props","getMemoizedProps","push","warnScanTruncated","matches","uniqueHosts","collapseToChains","warn","message","console","__DEV__","forwarded","forwardedHostMatches","seen","Set","out","match","host","isHostFiber","compositeHost","get","identity","alternate","has","add","composite","carriers","chains","nearestHostDescendant","composites","Map","set","size","cur","getReturn","depth","MAX_ANCESTOR_WALK","maxNodes","queue","f","shift","child","getChild","getSibling","survivors","candidate","dominated","i","other","isAncestorOf","splice","ancestor","descendant"],"sourceRoot":"../../../../src","sources":["anchors/fiber/findAnchorFiber.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.touchBelongsToEvent = touchBelongsToEvent;
|
|
7
|
+
exports.touchTargetFiber = touchTargetFiber;
|
|
8
|
+
var _fiberInternals = require("./fiberInternals.js");
|
|
9
|
+
var _findAnchorFiber = require("./findAnchorFiber.js");
|
|
10
|
+
var _indexHostFibers = require("./indexHostFibers.js");
|
|
11
|
+
/**
|
|
12
|
+
* Host fiber under a touch, resolved synchronously from the responder event.
|
|
13
|
+
*
|
|
14
|
+
* Feature-detected and never throws. A renderer that does not expose any of
|
|
15
|
+
* these pointers degrades to "no target", so a click condition simply does not
|
|
16
|
+
* latch.
|
|
17
|
+
*
|
|
18
|
+
* Order:
|
|
19
|
+
* 1. `event._targetInst` (React's fiber for the touched component)
|
|
20
|
+
* 2. `event.target` public instance via {@link lookupHostFiber}
|
|
21
|
+
* 3. The touch's native tag (`changedTouches[].target`, else `nativeEvent.target`)
|
|
22
|
+
* via the scan-root host index
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
function touchTargetFiber(event, identifier) {
|
|
26
|
+
try {
|
|
27
|
+
const tag = nativeTagForTouch(event, identifier);
|
|
28
|
+
const fromInst = hostFromFiber(readTargetInst(event));
|
|
29
|
+
if (fromInst && tagMatches(fromInst, tag)) return fromInst;
|
|
30
|
+
const fromInstance = hostFromInstance(event.target);
|
|
31
|
+
if (fromInstance && tagMatches(fromInstance, tag)) return fromInstance;
|
|
32
|
+
if (tag === undefined) return null;
|
|
33
|
+
// The event-level fibers belong to another finger's view, so only the
|
|
34
|
+
// index can name this one. A miss must not fall back to theirs.
|
|
35
|
+
return (0, _indexHostFibers.createLazyHostFiberIndex)()().byNativeTag.get(tag) ?? null;
|
|
36
|
+
} catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Fabric sends one touch event per touched view, and each lists every finger
|
|
43
|
+
* that changed. True when `identifier`'s finger is on this event's own view,
|
|
44
|
+
* so a caller can record each finger once, from its own event, instead of
|
|
45
|
+
* overwriting it from another finger's. Unreadable tags count as this event's.
|
|
46
|
+
*/
|
|
47
|
+
function touchBelongsToEvent(event, identifier) {
|
|
48
|
+
try {
|
|
49
|
+
const tag = nativeTagForTouch(event, identifier);
|
|
50
|
+
if (tag === undefined) return true;
|
|
51
|
+
const own = hostFromFiber(readTargetInst(event)) ?? hostFromInstance(event.target);
|
|
52
|
+
return own == null || tagMatches(own, tag);
|
|
53
|
+
} catch {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function readTargetInst(event) {
|
|
58
|
+
return event._targetInst;
|
|
59
|
+
}
|
|
60
|
+
function nativeTagForTouch(event, identifier) {
|
|
61
|
+
const native = event.nativeEvent;
|
|
62
|
+
if (identifier != null && native.changedTouches) {
|
|
63
|
+
const touch = native.changedTouches.find(entry => entry.identifier === identifier);
|
|
64
|
+
const touchTag = asTag(touch?.target);
|
|
65
|
+
if (touchTag !== undefined) return touchTag;
|
|
66
|
+
}
|
|
67
|
+
return asTag(native.target);
|
|
68
|
+
}
|
|
69
|
+
function asTag(value) {
|
|
70
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Accept a host whose tag we cannot read (test renderer, older Paper). Reject
|
|
75
|
+
* only when both sides have a tag and they differ — that event-level fiber
|
|
76
|
+
* belongs to a different finger.
|
|
77
|
+
*/
|
|
78
|
+
function tagMatches(fiber, tag) {
|
|
79
|
+
if (tag === undefined) return true;
|
|
80
|
+
const fiberTag = (0, _fiberInternals.nativeTagFromHostFiber)(fiber);
|
|
81
|
+
if (fiberTag === undefined) return true;
|
|
82
|
+
return fiberTag === tag;
|
|
83
|
+
}
|
|
84
|
+
function hostFromFiber(value) {
|
|
85
|
+
if (!(0, _fiberInternals.isReactFiber)(value)) return null;
|
|
86
|
+
try {
|
|
87
|
+
const current = (0, _fiberInternals.resolveCurrentFiber)(value);
|
|
88
|
+
if ((0, _fiberInternals.isHostFiber)(current)) return current;
|
|
89
|
+
return (0, _findAnchorFiber.nearestHostDescendant)(current);
|
|
90
|
+
} catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function hostFromInstance(value) {
|
|
95
|
+
if (!value || typeof value !== 'object') return null;
|
|
96
|
+
try {
|
|
97
|
+
const fiber = (0, _indexHostFibers.lookupHostFiber)((0, _indexHostFibers.createLazyHostFiberIndex)(), value);
|
|
98
|
+
if (!fiber) return null;
|
|
99
|
+
if ((0, _fiberInternals.isHostFiber)(fiber)) return fiber;
|
|
100
|
+
return (0, _findAnchorFiber.nearestHostDescendant)(fiber);
|
|
101
|
+
} catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=touchTargetFiber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_fiberInternals","require","_findAnchorFiber","_indexHostFibers","touchTargetFiber","event","identifier","tag","nativeTagForTouch","fromInst","hostFromFiber","readTargetInst","tagMatches","fromInstance","hostFromInstance","target","undefined","createLazyHostFiberIndex","byNativeTag","get","touchBelongsToEvent","own","_targetInst","native","nativeEvent","changedTouches","touch","find","entry","touchTag","asTag","value","Number","isFinite","fiber","fiberTag","nativeTagFromHostFiber","isReactFiber","current","resolveCurrentFiber","isHostFiber","nearestHostDescendant","lookupHostFiber"],"sourceRoot":"../../../../src","sources":["anchors/fiber/touchTargetFiber.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -37,7 +37,8 @@ function invalidateFiberAnchor(id) {
|
|
|
37
37
|
*
|
|
38
38
|
* Tier 0: {@link anchorRegistry} (`useUserflowAnchor`) — higher priority, fails
|
|
39
39
|
* closed on ambiguous registry keys.
|
|
40
|
-
* Tier 1+: fiber scan for `testID`, then `nativeID`, then
|
|
40
|
+
* Tier 1+: fiber scan for `userflowId`, then `testID`, then `nativeID`, then
|
|
41
|
+
* `accessibilityLabel`.
|
|
41
42
|
*
|
|
42
43
|
* Synchronous (the walk is pure JS; only measurement is async via the returned
|
|
43
44
|
* host). Caches the resolved fiber per id and revalidates cheaply before reuse.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AnchorRegistry","require","_FiberScanRoot","_fiberInternals","_findAnchorFiber","_measureHostFiber","_visibleScreens","_fiberAnchorCache","notifyAnchorScreenChange","screenKey","onAnchorScreenChange","clearFiberAnchorCache","clearCache","invalidateFiberAnchor","id","dropCachedFiberAnchor","resolveAnchorHost","status","anchorRegistry","isAmbiguous","registered","get","host","cached","getCachedFiberAnchor","currentScreenKey","getFiberAnchorScreenKey","isFiberMounted","fiber","isFiberOnVisibleScreen","measureInWindow","createFiberMeasureInWindow","deleteCachedFiberAnchor","root","fiberScanRoot","getFiber","result","findAnchorFiber","setCachedFiberAnchor"],"sourceRoot":"../../../src","sources":["anchors/resolveAnchorHost.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AAeA;AACO,SAASO,wBAAwBA,CAACC,SAAwB,EAAQ;EACvE,IAAAC,0CAAoB,EAACD,SAAS,CAAC;AACjC;;AAEA;AACO,SAASE,qBAAqBA,CAAA,EAAS;EAC5C,IAAAC,uCAAU,EAAC,CAAC;AACd;;AAEA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAACC,EAAU,EAAQ;EACtD,IAAAC,uCAAqB,EAACD,EAAE,CAAC;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,iBAAiBA,CAACF,EAAU,EAAoB;EAC9D,IAAI,CAACA,EAAE,EAAE,OAAO;IAAEG,MAAM,EAAE;EAAU,CAAC;;EAErC;EACA,IAAIC,8BAAc,CAACC,WAAW,CAACL,EAAE,CAAC,EAAE;IAClC,OAAO;MAAEG,MAAM,EAAE;IAAY,CAAC;EAChC;EACA,MAAMG,UAAU,GAAGF,8BAAc,CAACG,GAAG,CAACP,EAAE,CAAC;EACzC,IAAIM,UAAU,EAAE;IACd,OAAO;MAAEH,MAAM,EAAE,OAAO;MAAEK,IAAI,EAAEF;IAAW,CAAC;EAC9C;;EAEA;EACA;EACA,MAAMG,MAAM,GAAG,IAAAC,sCAAoB,EAACV,EAAE,CAAC;EACvC,MAAMW,gBAAgB,GAAG,IAAAC,yCAAuB,EAAC,CAAC;EAClD,IACEH,MAAM,IACNA,MAAM,CAACd,SAAS,KAAKgB,gBAAgB,IACrC,IAAAE,8BAAc,EAACJ,MAAM,CAACK,KAAK,CAAC,IAC5B,IAAAC,sCAAsB,EAACN,MAAM,CAACK,KAAK,CAAC,EACpC;IACA,OAAO;MACLX,MAAM,EAAE,OAAO;MACfK,IAAI,EAAE;QAAEQ,eAAe,EAAE,IAAAC,4CAA0B,EAACR,MAAM,CAACK,KAAK;MAAE,CAAC;MACnEA,KAAK,EAAEL,MAAM,CAACK;IAChB,CAAC;EACH;EACA,IAAIL,MAAM,EAAE;IACV,IAAAS,yCAAuB,EAAClB,EAAE,CAAC;EAC7B;EAEA,MAAMmB,IAAI,GAAGC,4BAAa,CAACC,QAAQ,CAAC,CAAC;EACrC,IAAI,CAACF,IAAI,EAAE;IACT,OAAO;MAAEhB,MAAM,EAAE;IAAU,CAAC;EAC9B;EAEA,MAAMmB,MAAM,GAAG,IAAAC,gCAAe,EAACJ,IAAI,EAAEnB,EAAE,CAAC;EACxC,IAAIsB,MAAM,CAACnB,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO;MAAEA,MAAM,EAAE;IAAY,CAAC;EAChC;EACA,IAAImB,MAAM,CAACnB,MAAM,KAAK,SAAS,EAAE;IAC/B,OAAO;MAAEA,MAAM,EAAE;IAAU,CAAC;EAC9B;EAEA,IAAAqB,sCAAoB,EAACxB,EAAE,EAAEsB,MAAM,CAACR,KAAK,CAAC;EACtC,OAAO;IACLX,MAAM,EAAE,OAAO;IACfK,IAAI,EAAE;MAAEQ,eAAe,EAAE,IAAAC,4CAA0B,EAACK,MAAM,CAACR,KAAK;IAAE,CAAC;IACnEA,KAAK,EAAEQ,MAAM,CAACR;EAChB,CAAC;AACH","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_AnchorRegistry","require","_FiberScanRoot","_fiberInternals","_findAnchorFiber","_measureHostFiber","_visibleScreens","_fiberAnchorCache","notifyAnchorScreenChange","screenKey","onAnchorScreenChange","clearFiberAnchorCache","clearCache","invalidateFiberAnchor","id","dropCachedFiberAnchor","resolveAnchorHost","status","anchorRegistry","isAmbiguous","registered","get","host","cached","getCachedFiberAnchor","currentScreenKey","getFiberAnchorScreenKey","isFiberMounted","fiber","isFiberOnVisibleScreen","measureInWindow","createFiberMeasureInWindow","deleteCachedFiberAnchor","root","fiberScanRoot","getFiber","result","findAnchorFiber","setCachedFiberAnchor"],"sourceRoot":"../../../src","sources":["anchors/resolveAnchorHost.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AAeA;AACO,SAASO,wBAAwBA,CAACC,SAAwB,EAAQ;EACvE,IAAAC,0CAAoB,EAACD,SAAS,CAAC;AACjC;;AAEA;AACO,SAASE,qBAAqBA,CAAA,EAAS;EAC5C,IAAAC,uCAAU,EAAC,CAAC;AACd;;AAEA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAACC,EAAU,EAAQ;EACtD,IAAAC,uCAAqB,EAACD,EAAE,CAAC;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,iBAAiBA,CAACF,EAAU,EAAoB;EAC9D,IAAI,CAACA,EAAE,EAAE,OAAO;IAAEG,MAAM,EAAE;EAAU,CAAC;;EAErC;EACA,IAAIC,8BAAc,CAACC,WAAW,CAACL,EAAE,CAAC,EAAE;IAClC,OAAO;MAAEG,MAAM,EAAE;IAAY,CAAC;EAChC;EACA,MAAMG,UAAU,GAAGF,8BAAc,CAACG,GAAG,CAACP,EAAE,CAAC;EACzC,IAAIM,UAAU,EAAE;IACd,OAAO;MAAEH,MAAM,EAAE,OAAO;MAAEK,IAAI,EAAEF;IAAW,CAAC;EAC9C;;EAEA;EACA;EACA,MAAMG,MAAM,GAAG,IAAAC,sCAAoB,EAACV,EAAE,CAAC;EACvC,MAAMW,gBAAgB,GAAG,IAAAC,yCAAuB,EAAC,CAAC;EAClD,IACEH,MAAM,IACNA,MAAM,CAACd,SAAS,KAAKgB,gBAAgB,IACrC,IAAAE,8BAAc,EAACJ,MAAM,CAACK,KAAK,CAAC,IAC5B,IAAAC,sCAAsB,EAACN,MAAM,CAACK,KAAK,CAAC,EACpC;IACA,OAAO;MACLX,MAAM,EAAE,OAAO;MACfK,IAAI,EAAE;QAAEQ,eAAe,EAAE,IAAAC,4CAA0B,EAACR,MAAM,CAACK,KAAK;MAAE,CAAC;MACnEA,KAAK,EAAEL,MAAM,CAACK;IAChB,CAAC;EACH;EACA,IAAIL,MAAM,EAAE;IACV,IAAAS,yCAAuB,EAAClB,EAAE,CAAC;EAC7B;EAEA,MAAMmB,IAAI,GAAGC,4BAAa,CAACC,QAAQ,CAAC,CAAC;EACrC,IAAI,CAACF,IAAI,EAAE;IACT,OAAO;MAAEhB,MAAM,EAAE;IAAU,CAAC;EAC9B;EAEA,MAAMmB,MAAM,GAAG,IAAAC,gCAAe,EAACJ,IAAI,EAAEnB,EAAE,CAAC;EACxC,IAAIsB,MAAM,CAACnB,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO;MAAEA,MAAM,EAAE;IAAY,CAAC;EAChC;EACA,IAAImB,MAAM,CAACnB,MAAM,KAAK,SAAS,EAAE;IAC/B,OAAO;MAAEA,MAAM,EAAE;IAAU,CAAC;EAC9B;EAEA,IAAAqB,sCAAoB,EAACxB,EAAE,EAAEsB,MAAM,CAACR,KAAK,CAAC;EACtC,OAAO;IACLX,MAAM,EAAE,OAAO;IACfK,IAAI,EAAE;MAAEQ,eAAe,EAAE,IAAAC,4CAA0B,EAACK,MAAM,CAACR,KAAK;IAAE,CAAC;IACnEA,KAAK,EAAEQ,MAAM,CAACR;EAChB,CAAC;AACH","ignoreList":[]}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.exactIdFromFingerprint = exactIdFromFingerprint;
|
|
6
7
|
exports.resolveAutoAnchorHost = resolveAutoAnchorHost;
|
|
8
|
+
exports.resolveScoredAutoAnchor = resolveScoredAutoAnchor;
|
|
7
9
|
var _protocol = require("@userflow-tech/protocol");
|
|
8
10
|
var _fiberInternals = require("./fiber/fiberInternals.js");
|
|
9
11
|
var _measureHostFiber = require("./fiber/measureHostFiber.js");
|
|
@@ -101,7 +103,7 @@ function mapMatch(match) {
|
|
|
101
103
|
* scored and the unfiltered pool still has a hit, that hit is on a covered
|
|
102
104
|
* screen — `absent`, matching MANUAL covered-screen semantics.
|
|
103
105
|
*/
|
|
104
|
-
function
|
|
106
|
+
function resolveScoredAutoAnchor(fp) {
|
|
105
107
|
const visible = (0, _semanticMatcher.matchFingerprint)(fp, {
|
|
106
108
|
instanceFilter: (0, _isInstanceOnVisibleScreen.createVisibleInstanceFilter)()
|
|
107
109
|
});
|
|
@@ -173,6 +175,6 @@ function resolveAutoAnchorHost(autoData) {
|
|
|
173
175
|
};
|
|
174
176
|
}
|
|
175
177
|
}
|
|
176
|
-
return
|
|
178
|
+
return resolveScoredAutoAnchor(fp);
|
|
177
179
|
}
|
|
178
180
|
//# sourceMappingURL=resolveAutoAnchorHost.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_protocol","require","_fiberInternals","_measureHostFiber","_resolveFiberPath","_isInstanceOnVisibleScreen","_resolveAnchorHost","_semanticMatcher","isMeasurableNode","value","measureInWindow","hostFromInstance","inst","node","ref","current","callback","scrollIntoView","fiber","fiberFromInstance","createFiberMeasureInWindow","fiberFromPublicInstance","exactIdFromFingerprint","fp","userflowId","testID","nativeID","startsWith","decodeInput","autoData","trim","decodeMobileAutoData","mapMatch","match","instance","host","status","reason","
|
|
1
|
+
{"version":3,"names":["_protocol","require","_fiberInternals","_measureHostFiber","_resolveFiberPath","_isInstanceOnVisibleScreen","_resolveAnchorHost","_semanticMatcher","isMeasurableNode","value","measureInWindow","hostFromInstance","inst","node","ref","current","callback","scrollIntoView","fiber","fiberFromInstance","createFiberMeasureInWindow","fiberFromPublicInstance","exactIdFromFingerprint","fp","userflowId","testID","nativeID","startsWith","decodeInput","autoData","trim","decodeMobileAutoData","mapMatch","match","instance","host","status","reason","resolveScoredAutoAnchor","visible","matchFingerprint","instanceFilter","createVisibleInstanceFilter","any","resolveAutoAnchorHost","decoded","fingerprint","resolver","fiberPath","fiberHit","resolveFiberPath","fiberCacheId","cacheId","exactId","exact","resolveAnchorHost"],"sourceRoot":"../../../src","sources":["anchors/resolveAutoAnchorHost.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.resolveElementTargets = resolveElementTargets;
|
|
7
|
+
exports.tapMayHitSelector = tapMayHitSelector;
|
|
8
|
+
var _protocol = require("@userflow-tech/protocol");
|
|
9
|
+
var _AnchorRegistry = require("./AnchorRegistry.js");
|
|
10
|
+
var _elementTargetMatch = require("./elementTargetMatch.js");
|
|
11
|
+
var _FiberScanRoot = require("./fiber/FiberScanRoot.js");
|
|
12
|
+
var _fiberInternals = require("./fiber/fiberInternals.js");
|
|
13
|
+
var _findAnchorFiber = require("./fiber/findAnchorFiber.js");
|
|
14
|
+
var _indexHostFibers = require("./fiber/indexHostFibers.js");
|
|
15
|
+
var _measureHostFiber = require("./fiber/measureHostFiber.js");
|
|
16
|
+
var _visibleScreens = require("./fiber/visibleScreens.js");
|
|
17
|
+
var _resolveAutoAnchorHost = require("./resolveAutoAnchorHost.js");
|
|
18
|
+
var _resolveManualAnchorId = require("./resolveManualAnchorId.js");
|
|
19
|
+
/**
|
|
20
|
+
* Resolve every host an ELEMENT condition should consider.
|
|
21
|
+
*
|
|
22
|
+
* Tooltips fail closed when an id matches more than one view. Conditions follow
|
|
23
|
+
* the web SDK instead: any match counts. AUTO exact ids (`userflowId`, then
|
|
24
|
+
* `testID`, then a real `nativeID`) use that same multi-host lookup, and fall
|
|
25
|
+
* through to scoring only when nothing matched.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
function resolveElementTargets(selector) {
|
|
29
|
+
if (selector == null) return {
|
|
30
|
+
status: 'unknown'
|
|
31
|
+
};
|
|
32
|
+
if (selector.type === 'AUTO') {
|
|
33
|
+
return resolveAutoTargets(selector.autoData);
|
|
34
|
+
}
|
|
35
|
+
const anchorId = (0, _resolveManualAnchorId.resolveManualAnchorId)(selector.css);
|
|
36
|
+
if (anchorId == null) return {
|
|
37
|
+
status: 'unknown'
|
|
38
|
+
};
|
|
39
|
+
return resolveManualTargets(anchorId);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* False when no target of `selector` can contain `tap`, decided without a tree
|
|
44
|
+
* scan. A fiber-scan target carries its id itself or sits under a composite
|
|
45
|
+
* that does, so a MANUAL id that is neither registered nor on the tap's
|
|
46
|
+
* ancestor chain cannot match. AUTO selectors are not gated: only a scan tells
|
|
47
|
+
* whether the exact id or a scored match applies.
|
|
48
|
+
*/
|
|
49
|
+
function tapMayHitSelector(selector, tap) {
|
|
50
|
+
if (selector == null) return false;
|
|
51
|
+
if (selector.type === 'AUTO') return true;
|
|
52
|
+
const anchorId = (0, _resolveManualAnchorId.resolveManualAnchorId)(selector.css);
|
|
53
|
+
if (anchorId == null) return false;
|
|
54
|
+
return _AnchorRegistry.anchorRegistry.get(anchorId) != null || (0, _elementTargetMatch.anchorIdsAboveTap)(tap).has(anchorId);
|
|
55
|
+
}
|
|
56
|
+
function resolveAutoTargets(autoData) {
|
|
57
|
+
const decoded = (0, _protocol.decodeMobileAutoData)(autoData);
|
|
58
|
+
const fingerprint = decoded?.fingerprint;
|
|
59
|
+
if (!decoded || !fingerprint) return {
|
|
60
|
+
status: 'unknown'
|
|
61
|
+
};
|
|
62
|
+
if (decoded.resolver === 'fiber' && decoded.fiberPath) {
|
|
63
|
+
return fromAutoResolution((0, _resolveAutoAnchorHost.resolveAutoAnchorHost)(decoded));
|
|
64
|
+
}
|
|
65
|
+
const exactId = (0, _resolveAutoAnchorHost.exactIdFromFingerprint)(fingerprint);
|
|
66
|
+
if (exactId) {
|
|
67
|
+
const manual = resolveManualTargets(exactId);
|
|
68
|
+
if (manual.status === 'found') return manual;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// The exact id already missed above, so go straight to scoring rather than
|
|
72
|
+
// letting resolveAutoAnchorHost scan for it again.
|
|
73
|
+
return fromAutoResolution((0, _resolveAutoAnchorHost.resolveScoredAutoAnchor)(fingerprint));
|
|
74
|
+
}
|
|
75
|
+
function fromAutoResolution(resolution) {
|
|
76
|
+
if (resolution.status === 'found') {
|
|
77
|
+
// Scored matches only try the direct ref pointer, which Paper release
|
|
78
|
+
// builds null out. Without the index fallback a tap could never match.
|
|
79
|
+
const fiber = resolution.fiber ?? fiberForNode((0, _indexHostFibers.createLazyHostFiberIndex)(), resolution.match?.instance?.ref.current);
|
|
80
|
+
return {
|
|
81
|
+
status: 'found',
|
|
82
|
+
targets: [{
|
|
83
|
+
host: resolution.host,
|
|
84
|
+
...(fiber ? {
|
|
85
|
+
fiber
|
|
86
|
+
} : {})
|
|
87
|
+
}]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (resolution.status === 'absent') return {
|
|
91
|
+
status: 'absent'
|
|
92
|
+
};
|
|
93
|
+
// Ambiguous and unknown both fail closed. Ambiguous is a real tie, not a
|
|
94
|
+
// broken selector, so it does not warn.
|
|
95
|
+
if (resolution.status === 'ambiguous') return {
|
|
96
|
+
status: 'unknown',
|
|
97
|
+
silent: true
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
status: 'unknown'
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function resolveManualTargets(id) {
|
|
104
|
+
const registered = _AnchorRegistry.anchorRegistry.getAll(id);
|
|
105
|
+
if (registered.length > 0) {
|
|
106
|
+
const index = (0, _indexHostFibers.createLazyHostFiberIndex)();
|
|
107
|
+
// Registered views on a covered navigator screen still measure non-zero,
|
|
108
|
+
// so drop them here the way the fiber scan skips covered screens. A host
|
|
109
|
+
// whose fiber cannot be found is kept.
|
|
110
|
+
const targets = registered.map(host => {
|
|
111
|
+
const fiber = fiberForNode(index, host.node);
|
|
112
|
+
return fiber ? {
|
|
113
|
+
host,
|
|
114
|
+
fiber
|
|
115
|
+
} : {
|
|
116
|
+
host
|
|
117
|
+
};
|
|
118
|
+
}).filter(target => !target.fiber || (0, _visibleScreens.isFiberOnVisibleScreen)(target.fiber));
|
|
119
|
+
return targets.length > 0 ? {
|
|
120
|
+
status: 'found',
|
|
121
|
+
targets
|
|
122
|
+
} : {
|
|
123
|
+
status: 'absent'
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const root = _FiberScanRoot.fiberScanRoot.getFiber();
|
|
127
|
+
if (!root) return {
|
|
128
|
+
status: 'absent'
|
|
129
|
+
};
|
|
130
|
+
const found = (0, _findAnchorFiber.findAnchorFibers)(root, id);
|
|
131
|
+
if (found.status === 'missing') return {
|
|
132
|
+
status: 'absent'
|
|
133
|
+
};
|
|
134
|
+
return {
|
|
135
|
+
status: 'found',
|
|
136
|
+
targets: found.fibers.map(fiber => {
|
|
137
|
+
const node = (0, _fiberInternals.publicInstanceFromHostFiber)(fiber);
|
|
138
|
+
return {
|
|
139
|
+
host: {
|
|
140
|
+
measureInWindow: (0, _measureHostFiber.createFiberMeasureInWindow)(fiber),
|
|
141
|
+
...(node ? {
|
|
142
|
+
node
|
|
143
|
+
} : {})
|
|
144
|
+
},
|
|
145
|
+
fiber
|
|
146
|
+
};
|
|
147
|
+
})
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function fiberForNode(index, node) {
|
|
151
|
+
if (!node) return undefined;
|
|
152
|
+
try {
|
|
153
|
+
return (0, _indexHostFibers.lookupHostFiber)(index, node) ?? undefined;
|
|
154
|
+
} catch {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=resolveElementTargets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_protocol","require","_AnchorRegistry","_elementTargetMatch","_FiberScanRoot","_fiberInternals","_findAnchorFiber","_indexHostFibers","_measureHostFiber","_visibleScreens","_resolveAutoAnchorHost","_resolveManualAnchorId","resolveElementTargets","selector","status","type","resolveAutoTargets","autoData","anchorId","resolveManualAnchorId","css","resolveManualTargets","tapMayHitSelector","tap","anchorRegistry","get","anchorIdsAboveTap","has","decoded","decodeMobileAutoData","fingerprint","resolver","fiberPath","fromAutoResolution","resolveAutoAnchorHost","exactId","exactIdFromFingerprint","manual","resolveScoredAutoAnchor","resolution","fiber","fiberForNode","createLazyHostFiberIndex","match","instance","ref","current","targets","host","silent","id","registered","getAll","length","index","map","node","filter","target","isFiberOnVisibleScreen","root","fiberScanRoot","getFiber","found","findAnchorFibers","fibers","publicInstanceFromHostFiber","measureInWindow","createFiberMeasureInWindow","undefined","lookupHostFiber"],"sourceRoot":"../../../src","sources":["anchors/resolveElementTargets.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ exports.TargetPressMonitor = exports.TARGET_PRESS_TAP_SLOP = void 0;
|
|
|
7
7
|
exports.isTargetTap = isTargetTap;
|
|
8
8
|
exports.pointInRect = pointInRect;
|
|
9
9
|
exports.targetPressMonitor = void 0;
|
|
10
|
+
exports.withinTapSlop = withinTapSlop;
|
|
10
11
|
/**
|
|
11
12
|
* Active tooltip target-press subscription.
|
|
12
13
|
*
|
|
@@ -20,6 +21,13 @@ const TARGET_PRESS_TAP_SLOP = exports.TARGET_PRESS_TAP_SLOP = 10;
|
|
|
20
21
|
function pointInRect(x, y, rect) {
|
|
21
22
|
return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;
|
|
22
23
|
}
|
|
24
|
+
/** True when the finger moved no more than `slop` between start and end. */
|
|
25
|
+
function withinTapSlop(start, end, slop = TARGET_PRESS_TAP_SLOP) {
|
|
26
|
+
const dx = end.pageX - start.pageX;
|
|
27
|
+
const dy = end.pageY - start.pageY;
|
|
28
|
+
return dx * dx + dy * dy <= slop * slop;
|
|
29
|
+
}
|
|
30
|
+
|
|
23
31
|
/**
|
|
24
32
|
* True when start and end both land in `rect` and movement stays within tap
|
|
25
33
|
* slop — mirrors a DOM click on the target without claiming the responder.
|
|
@@ -27,9 +35,7 @@ function pointInRect(x, y, rect) {
|
|
|
27
35
|
function isTargetTap(start, end, rect, slop = TARGET_PRESS_TAP_SLOP) {
|
|
28
36
|
if (!pointInRect(start.pageX, start.pageY, rect)) return false;
|
|
29
37
|
if (!pointInRect(end.pageX, end.pageY, rect)) return false;
|
|
30
|
-
|
|
31
|
-
const dy = end.pageY - start.pageY;
|
|
32
|
-
return dx * dx + dy * dy <= slop * slop;
|
|
38
|
+
return withinTapSlop(start, end, slop);
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TARGET_PRESS_TAP_SLOP","exports","pointInRect","x","y","rect","width","height","
|
|
1
|
+
{"version":3,"names":["TARGET_PRESS_TAP_SLOP","exports","pointInRect","x","y","rect","width","height","withinTapSlop","start","end","slop","dx","pageX","dy","pageY","isTargetTap","TargetPressMonitor","subscription","touchStarts","Map","set","clear","get","handleTouchStart","identifier","handleTouchEnd","delete","sub","getRect","onPress","cancelTouch","resetForTests","targetPressMonitor"],"sourceRoot":"../../../src","sources":["anchors/targetPressMonitor.ts"],"mappings":"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","ignoreList":[]}
|