react-native-gesture-handler 3.2.0-nightly-20260811-cc704f09a → 3.2.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/android/build.gradle +21 -6
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +30 -66
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerDetectorView.kt +1 -2
- package/apple/RNGestureHandler.mm +31 -23
- package/apple/RNGestureHandlerButtonComponentView.mm +10 -6
- package/lib/module/components/GestureHandlerButton.web.js +3 -2
- package/lib/module/components/GestureHandlerButton.web.js.map +1 -1
- package/lib/module/components/ReanimatedDrawerLayout.js +3 -0
- package/lib/module/components/ReanimatedDrawerLayout.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js +1 -0
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/handlers/hitSlop.js +101 -0
- package/lib/module/handlers/hitSlop.js.map +1 -0
- package/lib/module/handlers/utils.js +3 -7
- package/lib/module/handlers/utils.js.map +1 -1
- package/lib/module/specs/RNGestureHandlerDetectorNativeComponent.ts +1 -1
- package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.ts +1 -1
- package/lib/module/v3/components/Pressable.js +23 -312
- package/lib/module/v3/components/Pressable.js.map +1 -1
- package/lib/module/v3/components/PressableWithTouchable.js +259 -0
- package/lib/module/v3/components/PressableWithTouchable.js.map +1 -0
- package/lib/module/v3/components/StatefulPressable.js +338 -0
- package/lib/module/v3/components/StatefulPressable.js.map +1 -0
- package/lib/module/v3/components/pointerStyle.js +6 -0
- package/lib/module/v3/components/pointerStyle.js.map +1 -0
- package/lib/module/v3/components/pointerStyle.web.js +9 -0
- package/lib/module/v3/components/pointerStyle.web.js.map +1 -0
- package/lib/module/v3/hooks/utils/configUtils.js +3 -1
- package/lib/module/v3/hooks/utils/configUtils.js.map +1 -1
- package/lib/module/v3/hooks/utils/reanimatedUtils.js +14 -3
- package/lib/module/v3/hooks/utils/reanimatedUtils.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +21 -44
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/typescript/components/GestureComponents.web.d.ts +12 -4
- package/lib/typescript/components/GestureComponents.web.d.ts.map +1 -1
- package/lib/typescript/components/GestureHandlerButton.web.d.ts.map +1 -1
- package/lib/typescript/components/ReanimatedDrawerLayout.d.ts.map +1 -1
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -1
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts.map +1 -1
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts.map +1 -1
- package/lib/typescript/handlers/hitSlop.d.ts +51 -0
- package/lib/typescript/handlers/hitSlop.d.ts.map +1 -0
- package/lib/typescript/handlers/utils.d.ts.map +1 -1
- package/lib/typescript/mocks/hostDetector.d.ts +5 -2
- package/lib/typescript/mocks/hostDetector.d.ts.map +1 -1
- package/lib/typescript/specs/RNGestureHandlerDetectorNativeComponent.d.ts +1 -1
- package/lib/typescript/specs/RNGestureHandlerDetectorNativeComponent.d.ts.map +1 -1
- package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +1 -1
- package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/v3/components/GestureComponents.web.d.ts +16 -8
- package/lib/typescript/v3/components/GestureComponents.web.d.ts.map +1 -1
- package/lib/typescript/v3/components/Pressable.d.ts +13 -0
- package/lib/typescript/v3/components/Pressable.d.ts.map +1 -1
- package/lib/typescript/v3/components/PressableWithTouchable.d.ts +5 -0
- package/lib/typescript/v3/components/PressableWithTouchable.d.ts.map +1 -0
- package/lib/typescript/v3/components/StatefulPressable.d.ts +5 -0
- package/lib/typescript/v3/components/StatefulPressable.d.ts.map +1 -0
- package/lib/typescript/v3/components/pointerStyle.d.ts +3 -0
- package/lib/typescript/v3/components/pointerStyle.d.ts.map +1 -0
- package/lib/typescript/v3/components/pointerStyle.web.d.ts +3 -0
- package/lib/typescript/v3/components/pointerStyle.web.d.ts.map +1 -0
- package/lib/typescript/v3/detectors/ReanimatedNativeDetector.d.ts +3 -1
- package/lib/typescript/v3/detectors/ReanimatedNativeDetector.d.ts.map +1 -1
- package/lib/typescript/v3/detectors/ReanimatedNativeDetector.web.d.ts +3 -1
- package/lib/typescript/v3/detectors/ReanimatedNativeDetector.web.d.ts.map +1 -1
- package/lib/typescript/v3/detectors/common.d.ts +2 -2
- package/lib/typescript/v3/detectors/common.d.ts.map +1 -1
- package/lib/typescript/v3/hooks/utils/configUtils.d.ts.map +1 -1
- package/lib/typescript/v3/hooks/utils/reanimatedUtils.d.ts.map +1 -1
- package/lib/typescript/v3/types/ConfigTypes.d.ts +2 -1
- package/lib/typescript/v3/types/ConfigTypes.d.ts.map +1 -1
- package/lib/typescript/v3/types/EventTypes.d.ts +3 -2
- package/lib/typescript/v3/types/EventTypes.d.ts.map +1 -1
- package/lib/typescript/web/handlers/GestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/GestureHandler.d.ts.map +1 -1
- package/lib/typescript/web/interfaces.d.ts +3 -12
- package/lib/typescript/web/interfaces.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/components/GestureHandlerButton.web.tsx +3 -2
- package/src/components/ReanimatedDrawerLayout.tsx +3 -0
- package/src/components/touchables/TouchableOpacity.tsx +1 -0
- package/src/handlers/hitSlop.ts +146 -0
- package/src/handlers/utils.ts +4 -2
- package/src/specs/RNGestureHandlerDetectorNativeComponent.ts +1 -1
- package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +1 -1
- package/src/v3/components/Pressable.tsx +28 -448
- package/src/v3/components/PressableWithTouchable.tsx +326 -0
- package/src/v3/components/StatefulPressable.tsx +476 -0
- package/src/v3/components/pointerStyle.ts +5 -0
- package/src/v3/components/pointerStyle.web.ts +6 -0
- package/src/v3/hooks/utils/configUtils.ts +7 -1
- package/src/v3/hooks/utils/reanimatedUtils.ts +17 -8
- package/src/v3/types/ConfigTypes.ts +2 -1
- package/src/v3/types/EventTypes.ts +7 -3
- package/src/web/handlers/GestureHandler.ts +26 -77
- package/src/web/interfaces.ts +3 -13
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { addInsets, isTouchWithinInset, numberAsInset } from '../../components/Pressable/utils';
|
|
5
|
+
import { PressabilityDebugView } from '../../handlers/PressabilityDebugView';
|
|
6
|
+
import { pointerStyle } from './pointerStyle';
|
|
7
|
+
import { Touchable } from './Touchable/Touchable';
|
|
8
|
+
|
|
9
|
+
// RN's Pressable default. Touchable's own default is 600ms
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
const DEFAULT_LONG_PRESS_DURATION = 500;
|
|
12
|
+
function normalizeInset(value) {
|
|
13
|
+
return typeof value === 'number' ? numberAsInset(value) : value ?? numberAsInset(0);
|
|
14
|
+
}
|
|
15
|
+
function buttonToInner(event) {
|
|
16
|
+
return {
|
|
17
|
+
identifier: 0,
|
|
18
|
+
locationX: event.x,
|
|
19
|
+
locationY: event.y,
|
|
20
|
+
pageX: event.absoluteX,
|
|
21
|
+
pageY: event.absoluteY,
|
|
22
|
+
target: 0,
|
|
23
|
+
timestamp: Date.now(),
|
|
24
|
+
touches: [],
|
|
25
|
+
changedTouches: [],
|
|
26
|
+
force: undefined
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function buttonToPressableEvent(event) {
|
|
30
|
+
const inner = buttonToInner(event);
|
|
31
|
+
return {
|
|
32
|
+
nativeEvent: {
|
|
33
|
+
...inner,
|
|
34
|
+
touches: [inner],
|
|
35
|
+
changedTouches: [inner]
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const PressableWithTouchable = props => {
|
|
40
|
+
const {
|
|
41
|
+
testOnly_pressed,
|
|
42
|
+
hitSlop,
|
|
43
|
+
pressRetentionOffset,
|
|
44
|
+
delayHoverIn,
|
|
45
|
+
delayHoverOut,
|
|
46
|
+
delayLongPress,
|
|
47
|
+
unstable_pressDelay,
|
|
48
|
+
onHoverIn,
|
|
49
|
+
onHoverOut,
|
|
50
|
+
onPress,
|
|
51
|
+
onPressIn,
|
|
52
|
+
onPressOut,
|
|
53
|
+
onLongPress,
|
|
54
|
+
onLayout,
|
|
55
|
+
style,
|
|
56
|
+
children,
|
|
57
|
+
android_disableSound,
|
|
58
|
+
android_ripple,
|
|
59
|
+
disabled,
|
|
60
|
+
accessible,
|
|
61
|
+
ref,
|
|
62
|
+
...rest
|
|
63
|
+
} = props;
|
|
64
|
+
|
|
65
|
+
// Drop props Touchable doesn't take: `cancelable`/`dimensionsAfterResize` are
|
|
66
|
+
// unsupported; the relation props are handled by the wrapper.
|
|
67
|
+
//
|
|
68
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
69
|
+
const {
|
|
70
|
+
cancelable,
|
|
71
|
+
dimensionsAfterResize,
|
|
72
|
+
simultaneousWith,
|
|
73
|
+
requireToFail,
|
|
74
|
+
block,
|
|
75
|
+
...remainingProps
|
|
76
|
+
} = rest;
|
|
77
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
78
|
+
|
|
79
|
+
const [pressed, setPressed] = useState(false);
|
|
80
|
+
const timers = useRef({
|
|
81
|
+
press: null,
|
|
82
|
+
hoverIn: null,
|
|
83
|
+
hoverOut: null
|
|
84
|
+
});
|
|
85
|
+
const dimensions = useRef({
|
|
86
|
+
width: 0,
|
|
87
|
+
height: 0
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// Whether the in-progress press activated within hitSlop (see handlePressIn).
|
|
91
|
+
const isActive = useRef(false);
|
|
92
|
+
useEffect(() => () => {
|
|
93
|
+
const pending = timers.current;
|
|
94
|
+
if (pending.press) {
|
|
95
|
+
clearTimeout(pending.press);
|
|
96
|
+
}
|
|
97
|
+
if (pending.hoverIn) {
|
|
98
|
+
clearTimeout(pending.hoverIn);
|
|
99
|
+
}
|
|
100
|
+
if (pending.hoverOut) {
|
|
101
|
+
clearTimeout(pending.hoverOut);
|
|
102
|
+
}
|
|
103
|
+
}, []);
|
|
104
|
+
|
|
105
|
+
// RN's ripple config allows `null` on every field; Touchable's excludes it.
|
|
106
|
+
// Normalize `null` → `undefined` so the types line up.
|
|
107
|
+
const androidRipple = android_ripple ? {
|
|
108
|
+
color: android_ripple.color ?? undefined,
|
|
109
|
+
borderless: android_ripple.borderless ?? undefined,
|
|
110
|
+
radius: android_ripple.radius ?? undefined,
|
|
111
|
+
foreground: android_ripple.foreground ?? undefined
|
|
112
|
+
} : undefined;
|
|
113
|
+
|
|
114
|
+
// Activation is gated to `normalizedHitSlop` (see handlePressIn); the native
|
|
115
|
+
// button gets the wider `appliedHitSlop` so an active press is retained out
|
|
116
|
+
// to hitSlop + pressRetentionOffset before it cancels.
|
|
117
|
+
const normalizedHitSlop = normalizeInset(hitSlop);
|
|
118
|
+
const appliedHitSlop = addInsets(normalizedHitSlop, normalizeInset(pressRetentionOffset));
|
|
119
|
+
|
|
120
|
+
// Long press is measured from onPressIn, which `unstable_pressDelay` defers,
|
|
121
|
+
// so fold it in to match RN / StatefulPressable.
|
|
122
|
+
const resolvedDelayLongPress = (delayLongPress ?? DEFAULT_LONG_PRESS_DURATION) + (unstable_pressDelay ?? 0);
|
|
123
|
+
const handleLayout = event => {
|
|
124
|
+
onLayout?.(event);
|
|
125
|
+
dimensions.current = event.nativeEvent.layout;
|
|
126
|
+
};
|
|
127
|
+
const firePressIn = event => {
|
|
128
|
+
setPressed(true);
|
|
129
|
+
onPressIn?.(buttonToPressableEvent(event));
|
|
130
|
+
};
|
|
131
|
+
const handlePressIn = event => {
|
|
132
|
+
// A down in the retention-only zone is held by the button but isn't a press.
|
|
133
|
+
isActive.current = isTouchWithinInset(dimensions.current, normalizedHitSlop, buttonToInner(event));
|
|
134
|
+
if (!isActive.current) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (unstable_pressDelay) {
|
|
138
|
+
// Drop a still-pending timer so a re-entrant press can't double-fire.
|
|
139
|
+
if (timers.current.press) {
|
|
140
|
+
clearTimeout(timers.current.press);
|
|
141
|
+
}
|
|
142
|
+
timers.current.press = setTimeout(() => {
|
|
143
|
+
timers.current.press = null;
|
|
144
|
+
firePressIn(event);
|
|
145
|
+
}, unstable_pressDelay);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
firePressIn(event);
|
|
149
|
+
};
|
|
150
|
+
const handlePressOut = event => {
|
|
151
|
+
// Not cleared here: onPress fires after onPressOut and must stay suppressed
|
|
152
|
+
// too; isActive resets on the next press-in.
|
|
153
|
+
if (!isActive.current) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// If the touch is released before `unstable_pressDelay` elapses, RN still
|
|
158
|
+
// emits the deferred `onPressIn` before `onPressOut` — flush it now.
|
|
159
|
+
if (timers.current.press) {
|
|
160
|
+
clearTimeout(timers.current.press);
|
|
161
|
+
timers.current.press = null;
|
|
162
|
+
firePressIn(event);
|
|
163
|
+
}
|
|
164
|
+
setPressed(false);
|
|
165
|
+
onPressOut?.(buttonToPressableEvent(event));
|
|
166
|
+
};
|
|
167
|
+
const handlePress = onPress ? event => {
|
|
168
|
+
if (isActive.current) {
|
|
169
|
+
onPress(buttonToPressableEvent(event));
|
|
170
|
+
}
|
|
171
|
+
} : undefined;
|
|
172
|
+
const handleLongPress = onLongPress ? event => {
|
|
173
|
+
if (!isActive.current) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Flush the deferred onPressIn so it can't arrive after onLongPress
|
|
177
|
+
// (e.g. delayLongPress={0} makes the two timers coincide).
|
|
178
|
+
if (timers.current.press) {
|
|
179
|
+
clearTimeout(timers.current.press);
|
|
180
|
+
timers.current.press = null;
|
|
181
|
+
firePressIn(event);
|
|
182
|
+
}
|
|
183
|
+
onLongPress(buttonToPressableEvent(event));
|
|
184
|
+
} : undefined;
|
|
185
|
+
|
|
186
|
+
// Wire each handler whenever the opposite side can leave a pending timer, so a
|
|
187
|
+
// delayed hover callback is cancelled once the pointer leaves/re-enters.
|
|
188
|
+
const needsHoverIn = onHoverIn != null || onHoverOut != null && !!delayHoverOut;
|
|
189
|
+
const needsHoverOut = onHoverOut != null || onHoverIn != null && !!delayHoverIn;
|
|
190
|
+
const handleHoverIn = needsHoverIn ? event => {
|
|
191
|
+
if (timers.current.hoverOut) {
|
|
192
|
+
clearTimeout(timers.current.hoverOut);
|
|
193
|
+
timers.current.hoverOut = null;
|
|
194
|
+
}
|
|
195
|
+
if (!onHoverIn) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (delayHoverIn) {
|
|
199
|
+
timers.current.hoverIn = setTimeout(() => {
|
|
200
|
+
timers.current.hoverIn = null;
|
|
201
|
+
onHoverIn(buttonToPressableEvent(event));
|
|
202
|
+
}, delayHoverIn);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
onHoverIn(buttonToPressableEvent(event));
|
|
206
|
+
} : undefined;
|
|
207
|
+
const handleHoverOut = needsHoverOut ? event => {
|
|
208
|
+
if (timers.current.hoverIn) {
|
|
209
|
+
clearTimeout(timers.current.hoverIn);
|
|
210
|
+
timers.current.hoverIn = null;
|
|
211
|
+
}
|
|
212
|
+
if (!onHoverOut) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (delayHoverOut) {
|
|
216
|
+
timers.current.hoverOut = setTimeout(() => {
|
|
217
|
+
timers.current.hoverOut = null;
|
|
218
|
+
onHoverOut(buttonToPressableEvent(event));
|
|
219
|
+
}, delayHoverOut);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
onHoverOut(buttonToPressableEvent(event));
|
|
223
|
+
} : undefined;
|
|
224
|
+
|
|
225
|
+
// `testOnly_pressed` forces the pressed state for snapshots/tests. Derive the
|
|
226
|
+
// displayed value from it each render, keeping the interactive `pressed` state
|
|
227
|
+
// independent (seeded to false) so clearing the prop doesn't leave it stuck.
|
|
228
|
+
const displayPressed = testOnly_pressed ?? pressed;
|
|
229
|
+
const resolvedStyle = typeof style === 'function' ? style({
|
|
230
|
+
pressed: displayPressed
|
|
231
|
+
}) : style;
|
|
232
|
+
const resolvedChildren = typeof children === 'function' ? children({
|
|
233
|
+
pressed: displayPressed
|
|
234
|
+
}) : children;
|
|
235
|
+
return /*#__PURE__*/_jsxs(Touchable, {
|
|
236
|
+
...remainingProps,
|
|
237
|
+
ref: ref,
|
|
238
|
+
accessible: accessible !== false,
|
|
239
|
+
disabled: disabled === true,
|
|
240
|
+
hitSlop: appliedHitSlop,
|
|
241
|
+
onLayout: handleLayout,
|
|
242
|
+
androidRipple: androidRipple,
|
|
243
|
+
touchSoundDisabled: android_disableSound ?? undefined,
|
|
244
|
+
delayLongPress: resolvedDelayLongPress,
|
|
245
|
+
style: [pointerStyle, resolvedStyle],
|
|
246
|
+
onPressIn: handlePressIn,
|
|
247
|
+
onPressOut: handlePressOut,
|
|
248
|
+
onPress: handlePress,
|
|
249
|
+
onLongPress: handleLongPress,
|
|
250
|
+
onHoverIn: handleHoverIn,
|
|
251
|
+
onHoverOut: handleHoverOut,
|
|
252
|
+
children: [resolvedChildren, __DEV__ ? /*#__PURE__*/_jsx(PressabilityDebugView, {
|
|
253
|
+
color: "red",
|
|
254
|
+
hitSlop: normalizedHitSlop
|
|
255
|
+
}) : null]
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
export default PressableWithTouchable;
|
|
259
|
+
//# sourceMappingURL=PressableWithTouchable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","addInsets","isTouchWithinInset","numberAsInset","PressabilityDebugView","pointerStyle","Touchable","jsx","_jsx","jsxs","_jsxs","DEFAULT_LONG_PRESS_DURATION","normalizeInset","value","buttonToInner","event","identifier","locationX","x","locationY","y","pageX","absoluteX","pageY","absoluteY","target","timestamp","Date","now","touches","changedTouches","force","undefined","buttonToPressableEvent","inner","nativeEvent","PressableWithTouchable","props","testOnly_pressed","hitSlop","pressRetentionOffset","delayHoverIn","delayHoverOut","delayLongPress","unstable_pressDelay","onHoverIn","onHoverOut","onPress","onPressIn","onPressOut","onLongPress","onLayout","style","children","android_disableSound","android_ripple","disabled","accessible","ref","rest","cancelable","dimensionsAfterResize","simultaneousWith","requireToFail","block","remainingProps","pressed","setPressed","timers","press","hoverIn","hoverOut","dimensions","width","height","isActive","pending","current","clearTimeout","androidRipple","color","borderless","radius","foreground","normalizedHitSlop","appliedHitSlop","resolvedDelayLongPress","handleLayout","layout","firePressIn","handlePressIn","setTimeout","handlePressOut","handlePress","handleLongPress","needsHoverIn","needsHoverOut","handleHoverIn","handleHoverOut","displayPressed","resolvedStyle","resolvedChildren","touchSoundDisabled","__DEV__"],"sourceRoot":"../../../../src","sources":["v3/components/PressableWithTouchable.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { use, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { getStatesConfig, StateMachineEvent } from '../../components/Pressable/stateDefinitions';
|
|
6
|
+
import { PressableStateMachine } from '../../components/Pressable/StateMachine';
|
|
7
|
+
import { addInsets, gestureToPressableEvent, gestureTouchToPressableEvent, isTouchWithinInset, numberAsInset, viewCenterToPressableEvent } from '../../components/Pressable/utils';
|
|
8
|
+
import { getTVProps } from '../../components/utils';
|
|
9
|
+
import { PressabilityDebugView } from '../../handlers/PressabilityDebugView';
|
|
10
|
+
import { useIsScreenReaderEnabled } from '../../useIsScreenReaderEnabled';
|
|
11
|
+
import { INT32_MAX, isTestEnv } from '../../utils';
|
|
12
|
+
import { GestureDetector } from '../detectors';
|
|
13
|
+
import { useHoverGesture, useLongPressGesture, useNativeGesture, useSimultaneousGestures } from '../hooks';
|
|
14
|
+
import { isKeyboardDismissingTap, JSResponderContext } from '../scrollViewInterop';
|
|
15
|
+
import { PureNativeButton } from './GestureButtons';
|
|
16
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
const DEFAULT_LONG_PRESS_DURATION = 500;
|
|
18
|
+
const IS_TEST_ENV = isTestEnv();
|
|
19
|
+
const StatefulPressable = props => {
|
|
20
|
+
const {
|
|
21
|
+
testOnly_pressed,
|
|
22
|
+
hitSlop,
|
|
23
|
+
pressRetentionOffset,
|
|
24
|
+
delayHoverIn,
|
|
25
|
+
delayHoverOut,
|
|
26
|
+
delayLongPress,
|
|
27
|
+
unstable_pressDelay,
|
|
28
|
+
onHoverIn,
|
|
29
|
+
onHoverOut,
|
|
30
|
+
onPress,
|
|
31
|
+
onPressIn,
|
|
32
|
+
onPressOut,
|
|
33
|
+
onLongPress,
|
|
34
|
+
onLayout,
|
|
35
|
+
style,
|
|
36
|
+
children,
|
|
37
|
+
android_disableSound,
|
|
38
|
+
android_ripple,
|
|
39
|
+
disabled,
|
|
40
|
+
accessible,
|
|
41
|
+
simultaneousWith,
|
|
42
|
+
requireToFail,
|
|
43
|
+
block,
|
|
44
|
+
ref,
|
|
45
|
+
...remainingProps
|
|
46
|
+
} = props;
|
|
47
|
+
const [pressedState, setPressedState] = useState(false);
|
|
48
|
+
const longPressTimeoutRef = useRef(null);
|
|
49
|
+
const pressDelayTimeoutRef = useRef(null);
|
|
50
|
+
const isOnPressAllowed = useRef(true);
|
|
51
|
+
const jsResponderContext = use(JSResponderContext);
|
|
52
|
+
const isCurrentlyPressed = useRef(false);
|
|
53
|
+
const dimensions = useRef({
|
|
54
|
+
width: 0,
|
|
55
|
+
height: 0
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// When the touch that begins a press is the one dismissing the keyboard
|
|
59
|
+
// (keyboardShouldPersistTaps="never"), the press is swallowed to match RN's
|
|
60
|
+
// touchables.
|
|
61
|
+
const dropKeyboardTapRef = useRef(null);
|
|
62
|
+
const normalizedHitSlop = useMemo(() => typeof hitSlop === 'number' ? numberAsInset(hitSlop) : hitSlop ?? numberAsInset(0), [hitSlop]);
|
|
63
|
+
const normalizedPressRetentionOffset = useMemo(() => typeof pressRetentionOffset === 'number' ? numberAsInset(pressRetentionOffset) : pressRetentionOffset ?? {}, [pressRetentionOffset]);
|
|
64
|
+
const appliedHitSlop = addInsets(normalizedHitSlop, normalizedPressRetentionOffset);
|
|
65
|
+
const cancelLongPress = useCallback(() => {
|
|
66
|
+
if (longPressTimeoutRef.current) {
|
|
67
|
+
clearTimeout(longPressTimeoutRef.current);
|
|
68
|
+
longPressTimeoutRef.current = null;
|
|
69
|
+
isOnPressAllowed.current = true;
|
|
70
|
+
}
|
|
71
|
+
}, []);
|
|
72
|
+
const cancelDelayedPress = useCallback(() => {
|
|
73
|
+
if (pressDelayTimeoutRef.current) {
|
|
74
|
+
clearTimeout(pressDelayTimeoutRef.current);
|
|
75
|
+
pressDelayTimeoutRef.current = null;
|
|
76
|
+
}
|
|
77
|
+
}, []);
|
|
78
|
+
const startLongPress = useCallback(event => {
|
|
79
|
+
if (onLongPress) {
|
|
80
|
+
cancelLongPress();
|
|
81
|
+
longPressTimeoutRef.current = setTimeout(() => {
|
|
82
|
+
isOnPressAllowed.current = false;
|
|
83
|
+
onLongPress(event);
|
|
84
|
+
}, delayLongPress ?? DEFAULT_LONG_PRESS_DURATION);
|
|
85
|
+
}
|
|
86
|
+
}, [onLongPress, cancelLongPress, delayLongPress]);
|
|
87
|
+
const innerHandlePressIn = useCallback(event => {
|
|
88
|
+
onPressIn?.(event);
|
|
89
|
+
startLongPress(event);
|
|
90
|
+
setPressedState(true);
|
|
91
|
+
if (pressDelayTimeoutRef.current) {
|
|
92
|
+
clearTimeout(pressDelayTimeoutRef.current);
|
|
93
|
+
pressDelayTimeoutRef.current = null;
|
|
94
|
+
}
|
|
95
|
+
}, [onPressIn, startLongPress]);
|
|
96
|
+
const handleFinalize = useCallback(() => {
|
|
97
|
+
isCurrentlyPressed.current = false;
|
|
98
|
+
dropKeyboardTapRef.current = null;
|
|
99
|
+
cancelLongPress();
|
|
100
|
+
cancelDelayedPress();
|
|
101
|
+
setPressedState(false);
|
|
102
|
+
}, [cancelDelayedPress, cancelLongPress]);
|
|
103
|
+
const captureKeyboardDismiss = useCallback(() => {
|
|
104
|
+
dropKeyboardTapRef.current ??= isKeyboardDismissingTap(jsResponderContext);
|
|
105
|
+
}, [jsResponderContext]);
|
|
106
|
+
const handlePressIn = useCallback((event, skipBoundsCheck = false) => {
|
|
107
|
+
if (!skipBoundsCheck && !isTouchWithinInset(dimensions.current, normalizedHitSlop, event.nativeEvent.changedTouches.at(-1))) {
|
|
108
|
+
// Ignoring pressIn within pressRetentionOffset
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
isCurrentlyPressed.current = true;
|
|
112
|
+
if (unstable_pressDelay) {
|
|
113
|
+
pressDelayTimeoutRef.current = setTimeout(() => {
|
|
114
|
+
innerHandlePressIn(event);
|
|
115
|
+
}, unstable_pressDelay);
|
|
116
|
+
} else {
|
|
117
|
+
innerHandlePressIn(event);
|
|
118
|
+
}
|
|
119
|
+
}, [innerHandlePressIn, normalizedHitSlop, unstable_pressDelay]);
|
|
120
|
+
const handlePressOut = useCallback((event, success = true) => {
|
|
121
|
+
if (!isCurrentlyPressed.current) {
|
|
122
|
+
// Some prop configurations may lead to handlePressOut being called multiple times.
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
isCurrentlyPressed.current = false;
|
|
126
|
+
if (pressDelayTimeoutRef.current) {
|
|
127
|
+
innerHandlePressIn(event);
|
|
128
|
+
}
|
|
129
|
+
onPressOut?.(event);
|
|
130
|
+
if (isOnPressAllowed.current && success) {
|
|
131
|
+
onPress?.(event);
|
|
132
|
+
}
|
|
133
|
+
handleFinalize();
|
|
134
|
+
}, [handleFinalize, innerHandlePressIn, onPress, onPressOut]);
|
|
135
|
+
const stateMachine = useMemo(() => new PressableStateMachine(), []);
|
|
136
|
+
const isScreenReaderEnabled = useIsScreenReaderEnabled();
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
const configuration = getStatesConfig(handlePressIn, handlePressOut, isScreenReaderEnabled);
|
|
139
|
+
stateMachine.setStates(configuration);
|
|
140
|
+
}, [handlePressIn, handlePressOut, stateMachine, isScreenReaderEnabled]);
|
|
141
|
+
const hoverInTimeout = useRef(null);
|
|
142
|
+
const hoverOutTimeout = useRef(null);
|
|
143
|
+
useEffect(() => () => {
|
|
144
|
+
if (longPressTimeoutRef.current) {
|
|
145
|
+
clearTimeout(longPressTimeoutRef.current);
|
|
146
|
+
}
|
|
147
|
+
if (pressDelayTimeoutRef.current) {
|
|
148
|
+
clearTimeout(pressDelayTimeoutRef.current);
|
|
149
|
+
}
|
|
150
|
+
if (hoverInTimeout.current) {
|
|
151
|
+
clearTimeout(hoverInTimeout.current);
|
|
152
|
+
}
|
|
153
|
+
if (hoverOutTimeout.current) {
|
|
154
|
+
clearTimeout(hoverOutTimeout.current);
|
|
155
|
+
}
|
|
156
|
+
}, []);
|
|
157
|
+
const hoverGesture = useHoverGesture({
|
|
158
|
+
manualActivation: true,
|
|
159
|
+
// Prevents Hover blocking Native gesture on web
|
|
160
|
+
cancelsTouchesInView: false,
|
|
161
|
+
onBegin: event => {
|
|
162
|
+
if (hoverOutTimeout.current) {
|
|
163
|
+
clearTimeout(hoverOutTimeout.current);
|
|
164
|
+
}
|
|
165
|
+
if (delayHoverIn) {
|
|
166
|
+
hoverInTimeout.current = setTimeout(() => onHoverIn?.(gestureToPressableEvent(event)), delayHoverIn);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
onHoverIn?.(gestureToPressableEvent(event));
|
|
170
|
+
},
|
|
171
|
+
onFinalize: event => {
|
|
172
|
+
if (hoverInTimeout.current) {
|
|
173
|
+
clearTimeout(hoverInTimeout.current);
|
|
174
|
+
}
|
|
175
|
+
if (delayHoverOut) {
|
|
176
|
+
hoverOutTimeout.current = setTimeout(() => onHoverOut?.(gestureToPressableEvent(event)), delayHoverOut);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
onHoverOut?.(gestureToPressableEvent(event));
|
|
180
|
+
},
|
|
181
|
+
enabled: disabled !== true,
|
|
182
|
+
disableReanimated: true,
|
|
183
|
+
simultaneousWith,
|
|
184
|
+
block,
|
|
185
|
+
requireToFail,
|
|
186
|
+
hitSlop: appliedHitSlop
|
|
187
|
+
});
|
|
188
|
+
const pressAndTouchGesture = useLongPressGesture({
|
|
189
|
+
minDuration: Platform.OS === 'web' ? 0 : INT32_MAX,
|
|
190
|
+
// Long press handles finalize on web, thus it must activate right away
|
|
191
|
+
maxDistance: INT32_MAX,
|
|
192
|
+
// Stops long press from cancelling on touch move
|
|
193
|
+
cancelsTouchesInView: false,
|
|
194
|
+
onTouchesDown: event => {
|
|
195
|
+
captureKeyboardDismiss();
|
|
196
|
+
if (dropKeyboardTapRef.current) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const pressableEvent = gestureTouchToPressableEvent(event);
|
|
200
|
+
stateMachine.handleEvent(StateMachineEvent.LONG_PRESS_TOUCHES_DOWN, pressableEvent);
|
|
201
|
+
},
|
|
202
|
+
onTouchesUp: () => {
|
|
203
|
+
if (Platform.OS === 'android' && !isScreenReaderEnabled) {
|
|
204
|
+
// Prevents potential soft-locks
|
|
205
|
+
stateMachine.reset();
|
|
206
|
+
handleFinalize();
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
onTouchesCancel: event => {
|
|
210
|
+
const pressableEvent = gestureTouchToPressableEvent(event);
|
|
211
|
+
stateMachine.reset();
|
|
212
|
+
handlePressOut(pressableEvent, false);
|
|
213
|
+
},
|
|
214
|
+
onFinalize: event => {
|
|
215
|
+
if (Platform.OS !== 'web') {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
stateMachine.handleEvent(event.canceled ? StateMachineEvent.CANCEL : StateMachineEvent.FINALIZE);
|
|
219
|
+
handleFinalize();
|
|
220
|
+
},
|
|
221
|
+
enabled: disabled !== true,
|
|
222
|
+
disableReanimated: true,
|
|
223
|
+
simultaneousWith: simultaneousWith,
|
|
224
|
+
block: block,
|
|
225
|
+
requireToFail: requireToFail,
|
|
226
|
+
hitSlop: appliedHitSlop
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events
|
|
230
|
+
const buttonGesture = useNativeGesture({
|
|
231
|
+
onTouchesCancel: event => {
|
|
232
|
+
if (Platform.OS !== 'macos' && Platform.OS !== 'web') {
|
|
233
|
+
// On MacOS cancel occurs in middle of gesture
|
|
234
|
+
// On Web cancel occurs on mouse move, which is unwanted
|
|
235
|
+
const pressableEvent = gestureTouchToPressableEvent(event);
|
|
236
|
+
stateMachine.reset();
|
|
237
|
+
handlePressOut(pressableEvent, false);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
onBegin: () => {
|
|
241
|
+
captureKeyboardDismiss();
|
|
242
|
+
if (dropKeyboardTapRef.current) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (Platform.isTV) {
|
|
246
|
+
// tvOS drives this native gesture from the focus-engine Select press.
|
|
247
|
+
// The press state machine is touch-based and never
|
|
248
|
+
// receives LONG_PRESS_TOUCHES_DOWN here, so bypass it and drive the press handlers directly.
|
|
249
|
+
// A focus-driven press has no coordinates, so skip the hit-slop bounds check entirely.
|
|
250
|
+
handlePressIn(viewCenterToPressableEvent(dimensions.current), true);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (Platform.OS === 'android' && isScreenReaderEnabled) {
|
|
254
|
+
stateMachine.handleEvent(StateMachineEvent.NATIVE_BEGIN, viewCenterToPressableEvent(dimensions.current));
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
stateMachine.handleEvent(StateMachineEvent.NATIVE_BEGIN);
|
|
258
|
+
},
|
|
259
|
+
onActivate: () => {
|
|
260
|
+
if (!Platform.isTV && Platform.OS !== 'android') {
|
|
261
|
+
stateMachine.handleEvent(StateMachineEvent.NATIVE_START);
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
onFinalize: event => {
|
|
265
|
+
// On Web we use LongPress.onFinalize instead of Native.onFinalize,
|
|
266
|
+
// as Native cancels on mouse move, and LongPress does not.
|
|
267
|
+
if (Platform.OS === 'web') {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (Platform.isTV) {
|
|
271
|
+
handlePressOut(viewCenterToPressableEvent(dimensions.current), !event.canceled);
|
|
272
|
+
handleFinalize();
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
stateMachine.handleEvent(event.canceled ? StateMachineEvent.CANCEL : StateMachineEvent.FINALIZE);
|
|
276
|
+
handleFinalize();
|
|
277
|
+
},
|
|
278
|
+
enabled: disabled !== true,
|
|
279
|
+
disableReanimated: true,
|
|
280
|
+
simultaneousWith,
|
|
281
|
+
block,
|
|
282
|
+
requireToFail,
|
|
283
|
+
hitSlop: appliedHitSlop,
|
|
284
|
+
shouldActivateOnStart: Platform.OS === 'web'
|
|
285
|
+
});
|
|
286
|
+
const gesture = useSimultaneousGestures(buttonGesture, pressAndTouchGesture, hoverGesture);
|
|
287
|
+
|
|
288
|
+
// `cursor: 'pointer'` on `RNButton` crashes iOS
|
|
289
|
+
const pointerStyle = Platform.OS === 'web' ? {
|
|
290
|
+
cursor: 'pointer'
|
|
291
|
+
} : {};
|
|
292
|
+
|
|
293
|
+
// `testOnly_pressed` forces the pressed state for snapshots/tests. Derive the
|
|
294
|
+
// displayed value from it each render, keeping the interactive `pressedState`
|
|
295
|
+
// independent (seeded to false) so clearing the prop doesn't leave it stuck.
|
|
296
|
+
const displayPressed = testOnly_pressed ?? pressedState;
|
|
297
|
+
const styleProp = typeof style === 'function' ? style({
|
|
298
|
+
pressed: displayPressed
|
|
299
|
+
}) : style;
|
|
300
|
+
const childrenProp = typeof children === 'function' ? children({
|
|
301
|
+
pressed: displayPressed
|
|
302
|
+
}) : children;
|
|
303
|
+
const rippleColor = useMemo(() => {
|
|
304
|
+
const defaultRippleColor = android_ripple ? undefined : 'transparent';
|
|
305
|
+
return android_ripple?.color ?? defaultRippleColor;
|
|
306
|
+
}, [android_ripple]);
|
|
307
|
+
const setDimensions = useCallback(event => {
|
|
308
|
+
onLayout?.(event);
|
|
309
|
+
dimensions.current = event.nativeEvent.layout;
|
|
310
|
+
}, [onLayout]);
|
|
311
|
+
const tvProps = getTVProps(remainingProps);
|
|
312
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
313
|
+
gesture: gesture,
|
|
314
|
+
children: /*#__PURE__*/_jsxs(PureNativeButton, {
|
|
315
|
+
...remainingProps,
|
|
316
|
+
ref: ref,
|
|
317
|
+
...tvProps,
|
|
318
|
+
onLayout: setDimensions,
|
|
319
|
+
accessible: accessible !== false,
|
|
320
|
+
hitSlop: appliedHitSlop,
|
|
321
|
+
enabled: disabled !== true,
|
|
322
|
+
touchSoundDisabled: android_disableSound ?? undefined,
|
|
323
|
+
rippleColor: rippleColor,
|
|
324
|
+
rippleRadius: android_ripple?.radius ?? undefined,
|
|
325
|
+
style: [pointerStyle, styleProp],
|
|
326
|
+
testOnly_onPress: IS_TEST_ENV ? onPress : undefined,
|
|
327
|
+
testOnly_onPressIn: IS_TEST_ENV ? onPressIn : undefined,
|
|
328
|
+
testOnly_onPressOut: IS_TEST_ENV ? onPressOut : undefined,
|
|
329
|
+
testOnly_onLongPress: IS_TEST_ENV ? onLongPress : undefined,
|
|
330
|
+
children: [childrenProp, __DEV__ ? /*#__PURE__*/_jsx(PressabilityDebugView, {
|
|
331
|
+
color: "red",
|
|
332
|
+
hitSlop: normalizedHitSlop
|
|
333
|
+
}) : null]
|
|
334
|
+
})
|
|
335
|
+
});
|
|
336
|
+
};
|
|
337
|
+
export default StatefulPressable;
|
|
338
|
+
//# sourceMappingURL=StatefulPressable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","use","useCallback","useEffect","useMemo","useRef","useState","Platform","getStatesConfig","StateMachineEvent","PressableStateMachine","addInsets","gestureToPressableEvent","gestureTouchToPressableEvent","isTouchWithinInset","numberAsInset","viewCenterToPressableEvent","getTVProps","PressabilityDebugView","useIsScreenReaderEnabled","INT32_MAX","isTestEnv","GestureDetector","useHoverGesture","useLongPressGesture","useNativeGesture","useSimultaneousGestures","isKeyboardDismissingTap","JSResponderContext","PureNativeButton","jsx","_jsx","jsxs","_jsxs","DEFAULT_LONG_PRESS_DURATION","IS_TEST_ENV","StatefulPressable","props","testOnly_pressed","hitSlop","pressRetentionOffset","delayHoverIn","delayHoverOut","delayLongPress","unstable_pressDelay","onHoverIn","onHoverOut","onPress","onPressIn","onPressOut","onLongPress","onLayout","style","children","android_disableSound","android_ripple","disabled","accessible","simultaneousWith","requireToFail","block","ref","remainingProps","pressedState","setPressedState","longPressTimeoutRef","pressDelayTimeoutRef","isOnPressAllowed","jsResponderContext","isCurrentlyPressed","dimensions","width","height","dropKeyboardTapRef","normalizedHitSlop","normalizedPressRetentionOffset","appliedHitSlop","cancelLongPress","current","clearTimeout","cancelDelayedPress","startLongPress","event","setTimeout","innerHandlePressIn","handleFinalize","captureKeyboardDismiss","handlePressIn","skipBoundsCheck","nativeEvent","changedTouches","at","handlePressOut","success","stateMachine","isScreenReaderEnabled","configuration","setStates","hoverInTimeout","hoverOutTimeout","hoverGesture","manualActivation","cancelsTouchesInView","onBegin","onFinalize","enabled","disableReanimated","pressAndTouchGesture","minDuration","OS","maxDistance","onTouchesDown","pressableEvent","handleEvent","LONG_PRESS_TOUCHES_DOWN","onTouchesUp","reset","onTouchesCancel","canceled","CANCEL","FINALIZE","buttonGesture","isTV","NATIVE_BEGIN","onActivate","NATIVE_START","shouldActivateOnStart","gesture","pointerStyle","cursor","displayPressed","styleProp","pressed","childrenProp","rippleColor","defaultRippleColor","undefined","color","setDimensions","layout","tvProps","touchSoundDisabled","rippleRadius","radius","testOnly_onPress","testOnly_onPressIn","testOnly_onPressOut","testOnly_onLongPress","__DEV__"],"sourceRoot":"../../../../src","sources":["v3/components/StatefulPressable.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["pointerStyle"],"sourceRoot":"../../../../src","sources":["v3/components/pointerStyle.ts"],"mappings":";;AAEA;AACA;AACA,OAAO,MAAMA,YAAuB,GAAG,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// react-native-web sets `cursor: 'pointer'` on its interactive components
|
|
4
|
+
// (Pressable, TouchableOpacity, …) but not on `View`, which the native button
|
|
5
|
+
// renders — so the Touchable-based Pressable adds it here to match RN Pressable.
|
|
6
|
+
export const pointerStyle = {
|
|
7
|
+
cursor: 'pointer'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=pointerStyle.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["pointerStyle","cursor"],"sourceRoot":"../../../../src","sources":["v3/components/pointerStyle.web.ts"],"mappings":";;AAEA;AACA;AACA;AACA,OAAO,MAAMA,YAAuB,GAAG;EAAEC,MAAM,EAAE;AAAU,CAAC","ignoreList":[]}
|