react-native-gesture-handler 2.12.0 → 2.13.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/RNGestureHandler.podspec +0 -15
- package/android/build.gradle +5 -76
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +16 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +43 -18
- package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +120 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +7 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +5 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +43 -16
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +21 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +9 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +10 -0
- package/ios/Handlers/RNHoverHandler.h +12 -0
- package/ios/Handlers/RNHoverHandler.m +152 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
- package/ios/RNGestureHandlerEvents.h +1 -0
- package/ios/RNGestureHandlerEvents.m +10 -0
- package/ios/RNGestureHandlerManager.mm +2 -0
- package/ios/RNManualActivationRecognizer.m +2 -1
- package/ios/RNRootViewGestureRecognizer.m +7 -2
- package/lib/commonjs/RNGestureHandlerModule.macos.js +3 -1
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +7 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +3 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +1 -2
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/components/touchables/index.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +4 -4
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +4 -2
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +5 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureObjects.js +5 -0
- package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -1
- package/lib/commonjs/handlers/gestures/hoverGesture.js +74 -0
- package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -0
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -10
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +61 -88
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/HoverGestureHandler.js +62 -0
- package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +6 -7
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +12 -4
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -7
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -10
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +18 -4
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerDelegate.js +6 -0
- package/lib/commonjs/web/tools/GestureHandlerDelegate.js.map +1 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +5 -7
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +118 -0
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -0
- package/lib/commonjs/web/tools/PointerEventManager.js +38 -5
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +2 -2
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js +2 -1
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +6 -3
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +2 -1
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +1 -2
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/components/touchables/index.js.map +1 -1
- package/lib/module/handlers/createHandler.js +4 -4
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +3 -2
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +5 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureObjects.js +4 -0
- package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
- package/lib/module/handlers/gestures/hoverGesture.js +62 -0
- package/lib/module/handlers/gestures/hoverGesture.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +0 -10
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +61 -84
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/HoverGestureHandler.js +47 -0
- package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js +5 -7
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +11 -4
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +2 -7
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -10
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +18 -4
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerDelegate.js +2 -0
- package/lib/module/web/tools/GestureHandlerDelegate.js.map +1 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +5 -6
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +102 -0
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -0
- package/lib/module/web/tools/PointerEventManager.js +39 -6
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +2 -2
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +3 -1
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +7 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +3 -2
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +3 -2
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +4 -5
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -0
- package/lib/typescript/components/touchables/index.d.ts +3 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gestureObjects.d.ts +2 -0
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +32 -0
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -6
- package/lib/typescript/web/handlers/GestureHandler.d.ts +12 -17
- package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +10 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +0 -4
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -4
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -6
- package/lib/typescript/web/interfaces.d.ts +4 -3
- package/lib/typescript/web/tools/EventManager.d.ts +9 -5
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +22 -0
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +21 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
- package/lib/typescript/web/tools/PointerEventManager.d.ts +1 -1
- package/lib/typescript/web/tools/TouchEventManager.d.ts +1 -1
- package/package.json +2 -2
- package/src/RNGestureHandlerModule.macos.ts +5 -1
- package/src/RNGestureHandlerModule.web.ts +7 -1
- package/src/RNGestureHandlerModule.windows.ts +5 -1
- package/src/components/DrawerLayout.tsx +9 -0
- package/src/components/touchables/GenericTouchable.tsx +4 -4
- package/src/components/touchables/TouchableHighlight.tsx +6 -3
- package/src/components/touchables/TouchableNativeFeedback.android.tsx +5 -4
- package/src/components/touchables/TouchableOpacity.tsx +6 -7
- package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -1
- package/src/components/touchables/index.ts +3 -0
- package/src/handlers/createHandler.tsx +5 -3
- package/src/handlers/gestureHandlerCommon.ts +39 -0
- package/src/handlers/gestures/GestureDetector.tsx +3 -1
- package/src/handlers/gestures/gesture.ts +6 -0
- package/src/handlers/gestures/gestureObjects.ts +5 -0
- package/src/handlers/gestures/hoverGesture.ts +83 -0
- package/src/index.ts +8 -0
- package/src/web/handlers/FlingGestureHandler.ts +0 -11
- package/src/web/handlers/GestureHandler.ts +68 -88
- package/src/web/handlers/HoverGestureHandler.ts +43 -0
- package/src/web/handlers/LongPressGestureHandler.ts +5 -7
- package/src/web/handlers/NativeViewGestureHandler.ts +11 -4
- package/src/web/handlers/PanGestureHandler.ts +1 -6
- package/src/web/handlers/TapGestureHandler.ts +0 -11
- package/src/web/interfaces.ts +4 -2
- package/src/web/tools/EventManager.ts +15 -7
- package/src/web/tools/GestureHandlerDelegate.ts +23 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +7 -6
- package/src/web/tools/GestureHandlerWebDelegate.ts +115 -0
- package/src/web/tools/PointerEventManager.ts +46 -16
- package/src/web/tools/TouchEventManager.ts +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Platform,
|
|
3
|
-
TouchableNativeFeedbackProps,
|
|
3
|
+
TouchableNativeFeedbackProps as RNTouchableNativeFeedbackProps,
|
|
4
4
|
ColorValue,
|
|
5
5
|
} from 'react-native';
|
|
6
6
|
import * as React from 'react';
|
|
@@ -14,15 +14,16 @@ export type TouchableNativeFeedbackExtraProps = {
|
|
|
14
14
|
foreground?: boolean;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
export type TouchableNativeFeedbackProps = RNTouchableNativeFeedbackProps &
|
|
18
|
+
GenericTouchableProps;
|
|
19
|
+
|
|
17
20
|
/**
|
|
18
21
|
* TouchableNativeFeedback behaves slightly different than RN's TouchableNativeFeedback.
|
|
19
22
|
* There's small difference with handling long press ripple since RN's implementation calls
|
|
20
23
|
* ripple animation via bridge. This solution leaves all animations' handling for native components so
|
|
21
24
|
* it follows native behaviours.
|
|
22
25
|
*/
|
|
23
|
-
export default class TouchableNativeFeedback extends Component<
|
|
24
|
-
TouchableNativeFeedbackProps & GenericTouchableProps
|
|
25
|
-
> {
|
|
26
|
+
export default class TouchableNativeFeedback extends Component<TouchableNativeFeedbackProps> {
|
|
26
27
|
static defaultProps = {
|
|
27
28
|
...GenericTouchable.defaultProps,
|
|
28
29
|
useForeground: true,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
Easing,
|
|
4
4
|
StyleSheet,
|
|
5
5
|
View,
|
|
6
|
-
TouchableOpacityProps,
|
|
6
|
+
TouchableOpacityProps as RNTouchableOpacityProps,
|
|
7
7
|
} from 'react-native';
|
|
8
8
|
import GenericTouchable, {
|
|
9
9
|
TOUCHABLE_STATE,
|
|
@@ -12,16 +12,15 @@ import GenericTouchable, {
|
|
|
12
12
|
import * as React from 'react';
|
|
13
13
|
import { Component } from 'react';
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
export type TouchableOpacityProps = RNTouchableOpacityProps &
|
|
16
|
+
GenericTouchableProps & {
|
|
17
|
+
useNativeAnimations?: boolean;
|
|
18
|
+
};
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* TouchableOpacity bases on timing animation which has been used in RN's core
|
|
21
22
|
*/
|
|
22
|
-
export default class TouchableOpacity extends Component<
|
|
23
|
-
TouchableOpacityProps & GenericTouchableProps & GHTouchableOpacityProps
|
|
24
|
-
> {
|
|
23
|
+
export default class TouchableOpacity extends Component<TouchableOpacityProps> {
|
|
25
24
|
static defaultProps = {
|
|
26
25
|
...GenericTouchable.defaultProps,
|
|
27
26
|
activeOpacity: 0.2,
|
|
@@ -2,8 +2,10 @@ import * as React from 'react';
|
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
|
3
3
|
import GenericTouchable, { GenericTouchableProps } from './GenericTouchable';
|
|
4
4
|
|
|
5
|
+
export type TouchableWithoutFeedbackProps = GenericTouchable;
|
|
6
|
+
|
|
5
7
|
const TouchableWithoutFeedback = React.forwardRef<
|
|
6
|
-
|
|
8
|
+
TouchableWithoutFeedbackProps,
|
|
7
9
|
PropsWithChildren<GenericTouchableProps>
|
|
8
10
|
>((props, ref) => <GenericTouchable ref={ref} {...props} />);
|
|
9
11
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export type { TouchableHighlightProps } from './TouchableHighlight';
|
|
2
|
+
export type { TouchableOpacityProps } from './TouchableOpacity';
|
|
3
|
+
export type { TouchableWithoutFeedbackProps } from './TouchableWithoutFeedback';
|
|
1
4
|
export { default as TouchableNativeFeedback } from './TouchableNativeFeedback';
|
|
2
5
|
export { default as TouchableWithoutFeedback } from './TouchableWithoutFeedback';
|
|
3
6
|
export { default as TouchableOpacity } from './TouchableOpacity';
|
|
@@ -329,8 +329,10 @@ export default function createHandler<
|
|
|
329
329
|
|
|
330
330
|
const actionType = (() => {
|
|
331
331
|
if (
|
|
332
|
-
this.props?.onGestureEvent &&
|
|
333
|
-
|
|
332
|
+
(this.props?.onGestureEvent &&
|
|
333
|
+
'current' in this.props.onGestureEvent) ||
|
|
334
|
+
(this.props?.onHandlerStateChange &&
|
|
335
|
+
'current' in this.props.onHandlerStateChange)
|
|
334
336
|
) {
|
|
335
337
|
// Reanimated worklet
|
|
336
338
|
return ActionType.REANIMATED_WORKLET;
|
|
@@ -402,7 +404,7 @@ export default function createHandler<
|
|
|
402
404
|
}
|
|
403
405
|
|
|
404
406
|
render() {
|
|
405
|
-
if (__DEV__ && !this.context && !isJestEnv()) {
|
|
407
|
+
if (__DEV__ && !this.context && !isJestEnv() && Platform.OS !== 'web') {
|
|
406
408
|
throw new Error(
|
|
407
409
|
name +
|
|
408
410
|
' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
|
|
@@ -19,6 +19,7 @@ const commonProps = [
|
|
|
19
19
|
'hitSlop',
|
|
20
20
|
'cancelsTouchesInView',
|
|
21
21
|
'userSelect',
|
|
22
|
+
'activeCursor',
|
|
22
23
|
] as const;
|
|
23
24
|
|
|
24
25
|
const componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;
|
|
@@ -64,6 +65,43 @@ export type HitSlop =
|
|
|
64
65
|
| Record<'height' | 'bottom', number>;
|
|
65
66
|
|
|
66
67
|
export type UserSelect = 'none' | 'auto' | 'text';
|
|
68
|
+
export type ActiveCursor =
|
|
69
|
+
| 'auto'
|
|
70
|
+
| 'default'
|
|
71
|
+
| 'none'
|
|
72
|
+
| 'context-menu'
|
|
73
|
+
| 'help'
|
|
74
|
+
| 'pointer'
|
|
75
|
+
| 'progress'
|
|
76
|
+
| 'wait'
|
|
77
|
+
| 'cell'
|
|
78
|
+
| 'crosshair'
|
|
79
|
+
| 'text'
|
|
80
|
+
| 'vertical-text'
|
|
81
|
+
| 'alias'
|
|
82
|
+
| 'copy'
|
|
83
|
+
| 'move'
|
|
84
|
+
| 'no-drop'
|
|
85
|
+
| 'not-allowed'
|
|
86
|
+
| 'grab'
|
|
87
|
+
| 'grabbing'
|
|
88
|
+
| 'e-resize'
|
|
89
|
+
| 'n-resize'
|
|
90
|
+
| 'ne-resize'
|
|
91
|
+
| 'nw-resize'
|
|
92
|
+
| 's-resize'
|
|
93
|
+
| 'se-resize'
|
|
94
|
+
| 'sw-resize'
|
|
95
|
+
| 'w-resize'
|
|
96
|
+
| 'ew-resize'
|
|
97
|
+
| 'ns-resize'
|
|
98
|
+
| 'nesw-resize'
|
|
99
|
+
| 'nwse-resize'
|
|
100
|
+
| 'col-resize'
|
|
101
|
+
| 'row-resize'
|
|
102
|
+
| 'all-scroll'
|
|
103
|
+
| 'zoom-in'
|
|
104
|
+
| 'zoom-out';
|
|
67
105
|
|
|
68
106
|
//TODO(TS) events in handlers
|
|
69
107
|
|
|
@@ -105,6 +143,7 @@ export type CommonGestureConfig = {
|
|
|
105
143
|
shouldCancelWhenOutside?: boolean;
|
|
106
144
|
hitSlop?: HitSlop;
|
|
107
145
|
userSelect?: UserSelect;
|
|
146
|
+
activeCursor?: ActiveCursor;
|
|
108
147
|
};
|
|
109
148
|
|
|
110
149
|
// Events payloads are types instead of interfaces due to TS limitation.
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
panGestureHandlerCustomNativeProps,
|
|
33
33
|
} from '../PanGestureHandler';
|
|
34
34
|
import { tapGestureHandlerProps } from '../TapGestureHandler';
|
|
35
|
+
import { hoverGestureHandlerProps } from './hoverGesture';
|
|
35
36
|
import { State } from '../../State';
|
|
36
37
|
import { TouchEventType } from '../../TouchEventType';
|
|
37
38
|
import { ComposedGesture } from './gestureComposition';
|
|
@@ -63,6 +64,7 @@ const ALLOWED_PROPS = [
|
|
|
63
64
|
...longPressGestureHandlerProps,
|
|
64
65
|
...forceTouchGestureHandlerProps,
|
|
65
66
|
...flingGestureHandlerProps,
|
|
67
|
+
...hoverGestureHandlerProps,
|
|
66
68
|
...nativeViewGestureHandlerProps,
|
|
67
69
|
];
|
|
68
70
|
|
|
@@ -612,7 +614,7 @@ interface GestureDetectorState {
|
|
|
612
614
|
}
|
|
613
615
|
export const GestureDetector = (props: GestureDetectorProps) => {
|
|
614
616
|
const rootViewContext = useContext(GestureHandlerRootViewContext);
|
|
615
|
-
if (__DEV__ && !rootViewContext && !isJestEnv()) {
|
|
617
|
+
if (__DEV__ && !rootViewContext && !isJestEnv() && Platform.OS !== 'web') {
|
|
616
618
|
throw new Error(
|
|
617
619
|
'GestureDetector must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
|
|
618
620
|
);
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
GestureTouchEvent,
|
|
7
7
|
GestureStateChangeEvent,
|
|
8
8
|
GestureUpdateEvent,
|
|
9
|
+
ActiveCursor,
|
|
9
10
|
} from '../gestureHandlerCommon';
|
|
10
11
|
import { getNextHandlerTag } from '../handlersRegistry';
|
|
11
12
|
import { GestureStateManagerType } from './gestureStateManager';
|
|
@@ -250,6 +251,11 @@ export abstract class BaseGesture<
|
|
|
250
251
|
return this;
|
|
251
252
|
}
|
|
252
253
|
|
|
254
|
+
activeCursor(activeCursor: ActiveCursor) {
|
|
255
|
+
this.config.activeCursor = activeCursor;
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
|
|
253
259
|
runOnJS(runOnJS: boolean) {
|
|
254
260
|
this.config.runOnJS = runOnJS;
|
|
255
261
|
return this;
|
|
@@ -13,6 +13,7 @@ import { RotationGesture } from './rotationGesture';
|
|
|
13
13
|
import { TapGesture } from './tapGesture';
|
|
14
14
|
import { NativeGesture } from './nativeGesture';
|
|
15
15
|
import { ManualGesture } from './manualGesture';
|
|
16
|
+
import { HoverGesture } from './hoverGesture';
|
|
16
17
|
|
|
17
18
|
export const GestureObjects = {
|
|
18
19
|
Tap: () => {
|
|
@@ -51,6 +52,10 @@ export const GestureObjects = {
|
|
|
51
52
|
return new ManualGesture();
|
|
52
53
|
},
|
|
53
54
|
|
|
55
|
+
Hover: () => {
|
|
56
|
+
return new HoverGesture();
|
|
57
|
+
},
|
|
58
|
+
|
|
54
59
|
/**
|
|
55
60
|
* Builds a composed gesture consisting of gestures provided as parameters.
|
|
56
61
|
* The first one that becomes active cancels the rest of gestures.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { BaseGestureConfig, ContinousBaseGesture } from './gesture';
|
|
2
|
+
import { GestureUpdateEvent } from '../gestureHandlerCommon';
|
|
3
|
+
|
|
4
|
+
export type HoverGestureHandlerEventPayload = {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
absoluteX: number;
|
|
8
|
+
absoluteY: number;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type HoverGestureChangeEventPayload = {
|
|
12
|
+
changeX: number;
|
|
13
|
+
changeY: number;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export enum HoverEffect {
|
|
17
|
+
NONE = 0,
|
|
18
|
+
LIFT = 1,
|
|
19
|
+
HIGHLIGHT = 2,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface HoverGestureConfig {
|
|
23
|
+
hoverEffect?: HoverEffect;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const hoverGestureHandlerProps = ['hoverEffect'] as const;
|
|
27
|
+
|
|
28
|
+
function changeEventCalculator(
|
|
29
|
+
current: GestureUpdateEvent<HoverGestureHandlerEventPayload>,
|
|
30
|
+
previous?: GestureUpdateEvent<HoverGestureHandlerEventPayload>
|
|
31
|
+
) {
|
|
32
|
+
'worklet';
|
|
33
|
+
let changePayload: HoverGestureChangeEventPayload;
|
|
34
|
+
if (previous === undefined) {
|
|
35
|
+
changePayload = {
|
|
36
|
+
changeX: current.x,
|
|
37
|
+
changeY: current.y,
|
|
38
|
+
};
|
|
39
|
+
} else {
|
|
40
|
+
changePayload = {
|
|
41
|
+
changeX: current.x - previous.x,
|
|
42
|
+
changeY: current.y - previous.y,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return { ...current, ...changePayload };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export class HoverGesture extends ContinousBaseGesture<
|
|
50
|
+
HoverGestureHandlerEventPayload,
|
|
51
|
+
HoverGestureChangeEventPayload
|
|
52
|
+
> {
|
|
53
|
+
public config: BaseGestureConfig & HoverGestureConfig = {};
|
|
54
|
+
|
|
55
|
+
constructor() {
|
|
56
|
+
super();
|
|
57
|
+
|
|
58
|
+
this.handlerName = 'HoverGestureHandler';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Sets the visual hover effect.
|
|
63
|
+
* iOS only
|
|
64
|
+
*/
|
|
65
|
+
effect(effect: HoverEffect) {
|
|
66
|
+
this.config.hoverEffect = effect;
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
onChange(
|
|
71
|
+
callback: (
|
|
72
|
+
event: GestureUpdateEvent<
|
|
73
|
+
HoverGestureHandlerEventPayload & HoverGestureChangeEventPayload
|
|
74
|
+
>
|
|
75
|
+
) => void
|
|
76
|
+
) {
|
|
77
|
+
// @ts-ignore TS being overprotective, HoverGestureHandlerEventPayload is Record
|
|
78
|
+
this.handlers.changeEventCalculator = changeEventCalculator;
|
|
79
|
+
return super.onChange(callback);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export type HoverGestureType = InstanceType<typeof HoverGesture>;
|
package/src/index.ts
CHANGED
|
@@ -73,6 +73,7 @@ export type { RotationGestureType as RotationGesture } from './handlers/gestures
|
|
|
73
73
|
export type { ForceTouchGestureType as ForceTouchGesture } from './handlers/gestures/forceTouchGesture';
|
|
74
74
|
export type { NativeGestureType as NativeGesture } from './handlers/gestures/nativeGesture';
|
|
75
75
|
export type { ManualGestureType as ManualGesture } from './handlers/gestures/manualGesture';
|
|
76
|
+
export type { HoverGestureType as HoverGesture } from './handlers/gestures/hoverGesture';
|
|
76
77
|
export type {
|
|
77
78
|
ComposedGestureType as ComposedGesture,
|
|
78
79
|
RaceGestureType as RaceGesture,
|
|
@@ -94,6 +95,11 @@ export {
|
|
|
94
95
|
BorderlessButton,
|
|
95
96
|
PureNativeButton,
|
|
96
97
|
} from './components/GestureButtons';
|
|
98
|
+
export type {
|
|
99
|
+
TouchableHighlightProps,
|
|
100
|
+
TouchableOpacityProps,
|
|
101
|
+
TouchableWithoutFeedbackProps,
|
|
102
|
+
} from './components/touchables';
|
|
97
103
|
export {
|
|
98
104
|
TouchableHighlight,
|
|
99
105
|
TouchableNativeFeedback,
|
|
@@ -108,6 +114,7 @@ export {
|
|
|
108
114
|
FlatList,
|
|
109
115
|
RefreshControl,
|
|
110
116
|
} from './components/GestureComponents';
|
|
117
|
+
export { HoverEffect } from './handlers/gestures/hoverGesture';
|
|
111
118
|
export type {
|
|
112
119
|
//events
|
|
113
120
|
GestureHandlerGestureEvent,
|
|
@@ -147,6 +154,7 @@ export type {
|
|
|
147
154
|
BorderlessButtonProperties,
|
|
148
155
|
} from './handlers/gestureHandlerTypesCompat';
|
|
149
156
|
|
|
157
|
+
export type { SwipeableProps } from './components/Swipeable';
|
|
150
158
|
export { default as Swipeable } from './components/Swipeable';
|
|
151
159
|
export type {
|
|
152
160
|
DrawerLayoutProps,
|
|
@@ -39,17 +39,6 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
protected transformNativeEvent() {
|
|
43
|
-
const rect: DOMRect = this.view.getBoundingClientRect();
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
x: this.tracker.getLastAvgX() - rect.left,
|
|
47
|
-
y: this.tracker.getLastAvgY() - rect.top,
|
|
48
|
-
absoluteX: this.tracker.getLastAvgX(),
|
|
49
|
-
absoluteY: this.tracker.getLastAvgY(),
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
42
|
private startFling(): void {
|
|
54
43
|
this.startX = this.tracker.getLastX(this.keyPointer);
|
|
55
44
|
this.startY = this.tracker.getLastY(this.keyPointer);
|