react-native-gesture-handler 2.6.0 → 2.6.1
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 +2 -2
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.macos.js +20 -9
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +1 -1
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +282 -79
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +22 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +40 -96
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +24 -10
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +97 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
- package/lib/commonjs/web/utils.js +15 -0
- package/lib/commonjs/web/utils.js.map +1 -0
- package/lib/module/EnableExperimentalWebImplementation.js +5 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +1 -1
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js +19 -10
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +22 -11
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +1 -1
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +14 -20
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
- package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +276 -79
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +57 -41
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +52 -50
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +19 -0
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +39 -95
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +24 -10
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +116 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +97 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +124 -0
- package/lib/module/web/tools/TouchEventManager.js.map +1 -0
- package/lib/module/web/utils.js +8 -0
- package/lib/module/web/utils.js.map +1 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +5 -2
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
- package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
- package/lib/typescript/web/handlers/GestureHandler.d.ts +41 -32
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
- package/lib/typescript/web/interfaces.d.ts +50 -10
- package/lib/typescript/web/tools/EventManager.d.ts +28 -26
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
- package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
- package/lib/typescript/web/utils.d.ts +4 -0
- package/package.json +2 -2
- package/src/EnableExperimentalWebImplementation.ts +9 -0
- package/src/RNGestureHandlerModule.macos.ts +25 -10
- package/src/RNGestureHandlerModule.ts +4 -1
- package/src/RNGestureHandlerModule.web.ts +20 -7
- package/src/components/GestureComponents.web.tsx +1 -1
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
- package/src/handlers/gestures/GestureDetector.tsx +0 -1
- package/src/handlers/gestures/eventReceiver.ts +23 -24
- package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
- package/src/web/detectors/RotationGestureDetector.ts +20 -52
- package/src/web/detectors/ScaleGestureDetector.ts +9 -45
- package/src/web/handlers/FlingGestureHandler.ts +45 -22
- package/src/web/handlers/GestureHandler.ts +306 -97
- package/src/web/handlers/LongPressGestureHandler.ts +30 -24
- package/src/web/handlers/ManualGestureHandler.ts +39 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
- package/src/web/handlers/PanGestureHandler.ts +68 -53
- package/src/web/handlers/PinchGestureHandler.ts +47 -44
- package/src/web/handlers/RotationGestureHandler.ts +52 -51
- package/src/web/handlers/TapGestureHandler.ts +74 -56
- package/src/web/interfaces.ts +57 -10
- package/src/web/tools/EventManager.ts +58 -148
- package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
- package/src/web/tools/InteractionManager.ts +25 -9
- package/src/web/tools/NodeManager.ts +6 -6
- package/src/web/tools/PointerEventManager.ts +134 -0
- package/src/web/tools/PointerTracker.ts +120 -10
- package/src/web/tools/TouchEventManager.ts +167 -0
- package/src/web/utils.ts +8 -0
|
@@ -19,6 +19,16 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
|
19
19
|
simultaneousHandlers?: Handler[] | null;
|
|
20
20
|
waitFor?: Handler[] | null;
|
|
21
21
|
hitSlop?: HitSlop;
|
|
22
|
+
shouldCancelWhenOutside?: boolean;
|
|
23
|
+
activateAfterLongPress?: number;
|
|
24
|
+
failOffsetXStart?: number;
|
|
25
|
+
failOffsetYStart?: number;
|
|
26
|
+
failOffsetXEnd?: number;
|
|
27
|
+
failOffsetYEnd?: number;
|
|
28
|
+
activeOffsetXStart?: number;
|
|
29
|
+
activeOffsetXEnd?: number;
|
|
30
|
+
activeOffsetYStart?: number;
|
|
31
|
+
activeOffsetYEnd?: number;
|
|
22
32
|
minPointers?: number;
|
|
23
33
|
maxPointers?: number;
|
|
24
34
|
minDist?: number;
|
|
@@ -29,14 +39,6 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
|
29
39
|
minVelocitySq?: number;
|
|
30
40
|
maxDist?: number;
|
|
31
41
|
maxDistSq?: number;
|
|
32
|
-
failOffsetXStart?: number;
|
|
33
|
-
failOffsetYStart?: number;
|
|
34
|
-
failOffsetXEnd?: number;
|
|
35
|
-
failOffsetYEnd?: number;
|
|
36
|
-
activeOffsetXStart?: number;
|
|
37
|
-
activeOffsetXEnd?: number;
|
|
38
|
-
activeOffsetYStart?: number;
|
|
39
|
-
activeOffsetYEnd?: number;
|
|
40
42
|
numberOfPointers?: number;
|
|
41
43
|
minDurationMs?: number;
|
|
42
44
|
numberOfTaps?: number;
|
|
@@ -44,6 +46,8 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
|
44
46
|
maxDelayMs?: number;
|
|
45
47
|
maxDeltaX?: number;
|
|
46
48
|
maxDeltaY?: number;
|
|
49
|
+
shouldActivateOnStart?: boolean;
|
|
50
|
+
disallowInterruption?: boolean;
|
|
47
51
|
direction?: Directions;
|
|
48
52
|
}
|
|
49
53
|
declare type NativeEventArgs = number | State | boolean | undefined;
|
|
@@ -55,24 +59,47 @@ interface NativeEvent extends Record<string, NativeEventArgs> {
|
|
|
55
59
|
target: number;
|
|
56
60
|
oldState?: State;
|
|
57
61
|
}
|
|
62
|
+
export interface PointerData {
|
|
63
|
+
id: number;
|
|
64
|
+
x: number;
|
|
65
|
+
y: number;
|
|
66
|
+
absoluteX: number;
|
|
67
|
+
absoluteY: number;
|
|
68
|
+
}
|
|
69
|
+
declare type TouchNativeArgs = number | State | TouchEventType | PointerData[];
|
|
70
|
+
interface NativeTouchEvent extends Record<string, TouchNativeArgs> {
|
|
71
|
+
handlerTag: number;
|
|
72
|
+
state: State;
|
|
73
|
+
eventType: TouchEventType;
|
|
74
|
+
changedTouches: PointerData[];
|
|
75
|
+
allTouches: PointerData[];
|
|
76
|
+
numberOfTouches: number;
|
|
77
|
+
}
|
|
58
78
|
export interface ResultEvent extends Record<string, NativeEvent | number> {
|
|
59
79
|
nativeEvent: NativeEvent;
|
|
60
80
|
timeStamp: number;
|
|
61
81
|
}
|
|
82
|
+
export interface ResultTouchEvent extends Record<string, NativeTouchEvent | number> {
|
|
83
|
+
nativeEvent: NativeTouchEvent;
|
|
84
|
+
timeStamp: number;
|
|
85
|
+
}
|
|
62
86
|
export interface PropsRef {
|
|
63
87
|
onGestureHandlerEvent: () => void;
|
|
64
88
|
onGestureHandlerStateChange: () => void;
|
|
65
89
|
}
|
|
66
|
-
export interface
|
|
90
|
+
export interface AdaptedEvent {
|
|
67
91
|
x: number;
|
|
68
92
|
y: number;
|
|
69
93
|
offsetX: number;
|
|
70
94
|
offsetY: number;
|
|
71
95
|
pointerId: number;
|
|
72
96
|
eventType: EventTypes;
|
|
73
|
-
pointerType:
|
|
97
|
+
pointerType: PointerType;
|
|
74
98
|
buttons: number;
|
|
75
99
|
time: number;
|
|
100
|
+
allTouches?: TouchList;
|
|
101
|
+
changedTouches?: TouchList;
|
|
102
|
+
touchEventType?: TouchEventType;
|
|
76
103
|
}
|
|
77
104
|
export declare enum MouseButtons {
|
|
78
105
|
NONE = 0,
|
|
@@ -94,4 +121,17 @@ export declare enum EventTypes {
|
|
|
94
121
|
OUT = 6,
|
|
95
122
|
CANCEL = 7
|
|
96
123
|
}
|
|
124
|
+
export declare enum TouchEventType {
|
|
125
|
+
UNDETERMINED = 0,
|
|
126
|
+
DOWN = 1,
|
|
127
|
+
MOVE = 2,
|
|
128
|
+
UP = 3,
|
|
129
|
+
CANCELLED = 4
|
|
130
|
+
}
|
|
131
|
+
export declare enum PointerType {
|
|
132
|
+
NONE = "none",
|
|
133
|
+
MOUSE = "mouse",
|
|
134
|
+
TOUCH = "touch",
|
|
135
|
+
PEN = "pen"
|
|
136
|
+
}
|
|
97
137
|
export {};
|
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class EventManager {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
|
|
2
|
+
export default abstract class EventManager {
|
|
3
|
+
protected readonly view: HTMLElement;
|
|
4
|
+
protected pointersInBounds: number[];
|
|
5
|
+
protected activePointersCounter: number;
|
|
5
6
|
constructor(view: HTMLElement);
|
|
6
|
-
setListeners(): void;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
7
|
+
abstract setListeners(): void;
|
|
8
|
+
protected abstract mapEvent(event: Event, eventType: EventTypes, index?: number, touchEventType?: TouchEventType): AdaptedEvent;
|
|
9
|
+
protected onPointerDown(_event: AdaptedEvent): void;
|
|
10
|
+
protected onPointerAdd(_event: AdaptedEvent): void;
|
|
11
|
+
protected onPointerUp(_event: AdaptedEvent): void;
|
|
12
|
+
protected onPointerRemove(_event: AdaptedEvent): void;
|
|
13
|
+
protected onPointerMove(_event: AdaptedEvent): void;
|
|
14
|
+
protected onPointerOut(_event: AdaptedEvent): void;
|
|
15
|
+
protected onPointerEnter(_event: AdaptedEvent): void;
|
|
16
|
+
protected onPointerCancel(_event: AdaptedEvent): void;
|
|
17
|
+
protected onPointerOutOfBounds(_event: AdaptedEvent): void;
|
|
18
|
+
setOnPointerDown(callback: (event: AdaptedEvent) => void): void;
|
|
19
|
+
setOnPointerAdd(callback: (event: AdaptedEvent) => void): void;
|
|
20
|
+
setOnPointerUp(callback: (event: AdaptedEvent) => void): void;
|
|
21
|
+
setOnPointerRemove(callback: (event: AdaptedEvent) => void): void;
|
|
22
|
+
setOnPointerMove(callback: (event: AdaptedEvent) => void): void;
|
|
23
|
+
setOnPointerOut(callback: (event: AdaptedEvent) => void): void;
|
|
24
|
+
setOnPointerEnter(callback: (event: AdaptedEvent) => void): void;
|
|
25
|
+
setOnPointerCancel(callback: (event: AdaptedEvent) => void): void;
|
|
26
|
+
setOnPointerOutOfBounds(callback: (event: AdaptedEvent) => void): void;
|
|
27
|
+
protected markAsInBounds(pointerId: number): void;
|
|
28
|
+
protected markAsOutOfBounds(pointerId: number): void;
|
|
29
|
+
resetManager(): void;
|
|
28
30
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { State } from '../../State';
|
|
2
|
-
import { AdaptedPointerEvent } from '../interfaces';
|
|
3
2
|
import GestureHandler from '../handlers/GestureHandler';
|
|
4
3
|
export default class GestureHandlerOrchestrator {
|
|
5
4
|
private static instance;
|
|
@@ -11,11 +10,13 @@ export default class GestureHandlerOrchestrator {
|
|
|
11
10
|
private constructor();
|
|
12
11
|
private scheduleFinishedHandlersCleanup;
|
|
13
12
|
private cleanHandler;
|
|
13
|
+
removeHandlerFromOrchestrator(handler: GestureHandler): void;
|
|
14
14
|
private cleanupFinishedHandlers;
|
|
15
15
|
private hasOtherHandlerToWaitFor;
|
|
16
16
|
private tryActivate;
|
|
17
|
+
private shouldActivate;
|
|
17
18
|
private cleanupAwaitingHandlers;
|
|
18
|
-
onHandlerStateChange(handler: GestureHandler, newState: State, oldState: State,
|
|
19
|
+
onHandlerStateChange(handler: GestureHandler, newState: State, oldState: State, sendIfDisabled?: boolean): void;
|
|
19
20
|
private makeActive;
|
|
20
21
|
private addAwaitingHandler;
|
|
21
22
|
recordHandlerIfNotPresent(handler: GestureHandler): void;
|
|
@@ -24,5 +25,6 @@ export default class GestureHandlerOrchestrator {
|
|
|
24
25
|
private shouldHandlerBeCancelledBy;
|
|
25
26
|
private checkOverlap;
|
|
26
27
|
private isFinished;
|
|
28
|
+
cancelMouseAndPenGestures(currentHandler: GestureHandler): void;
|
|
27
29
|
static getInstance(): GestureHandlerOrchestrator;
|
|
28
30
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import GestureHandler from '../handlers/GestureHandler';
|
|
2
2
|
import { Config } from '../interfaces';
|
|
3
3
|
export default class InteractionManager {
|
|
4
|
+
private static instance;
|
|
4
5
|
private readonly waitForRelations;
|
|
5
6
|
private readonly simultaneousRelations;
|
|
7
|
+
private constructor();
|
|
6
8
|
configureInteractions(handler: GestureHandler, config: Config): void;
|
|
7
9
|
shouldWaitForHandlerFailure(handler: GestureHandler, otherHandler: GestureHandler): boolean;
|
|
8
10
|
shouldRecognizeSimultaneously(handler: GestureHandler, otherHandler: GestureHandler): boolean;
|
|
@@ -10,4 +12,5 @@ export default class InteractionManager {
|
|
|
10
12
|
shouldHandlerBeCancelledBy(_handler: GestureHandler, _otherHandler: GestureHandler): boolean;
|
|
11
13
|
dropRelationsForHandlerWithTag(handlerTag: number): void;
|
|
12
14
|
reset(): void;
|
|
15
|
+
static getInstance(): InteractionManager;
|
|
13
16
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ValueOf } from '../../typeUtils';
|
|
2
2
|
import { Gestures } from '../../RNGestureHandlerModule.web';
|
|
3
|
-
export default class NodeManager {
|
|
3
|
+
export default abstract class NodeManager {
|
|
4
4
|
private static gestures;
|
|
5
|
-
static getHandler(tag: number): import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/NativeViewGestureHandler").default;
|
|
5
|
+
static getHandler(tag: number): import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/NativeViewGestureHandler").default | import("../handlers/ManualGestureHandler").default;
|
|
6
6
|
static createGestureHandler(handlerTag: number, handler: InstanceType<ValueOf<typeof Gestures>>): void;
|
|
7
7
|
static dropGestureHandler(handlerTag: number): void;
|
|
8
8
|
static getNodes(): {
|
|
9
|
-
[x: number]: import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/NativeViewGestureHandler").default;
|
|
9
|
+
[x: number]: import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/NativeViewGestureHandler").default | import("../handlers/ManualGestureHandler").default;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AdaptedEvent, EventTypes } from '../interfaces';
|
|
2
|
+
import EventManager from './EventManager';
|
|
3
|
+
export default class PointerEventManager extends EventManager {
|
|
4
|
+
setListeners(): void;
|
|
5
|
+
protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent;
|
|
6
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
interface TrackerElement {
|
|
1
|
+
import { AdaptedEvent } from '../interfaces';
|
|
2
|
+
export interface TrackerElement {
|
|
3
3
|
lastX: number;
|
|
4
4
|
lastY: number;
|
|
5
5
|
timeStamp: number;
|
|
@@ -8,12 +8,37 @@ interface TrackerElement {
|
|
|
8
8
|
}
|
|
9
9
|
export default class PointerTracker {
|
|
10
10
|
private trackedPointers;
|
|
11
|
-
|
|
11
|
+
private touchEventsIds;
|
|
12
|
+
private lastMovedPointerId;
|
|
13
|
+
private cachedAverages;
|
|
14
|
+
constructor();
|
|
15
|
+
addToTracker(event: AdaptedEvent): void;
|
|
12
16
|
removeFromTracker(pointerId: number): void;
|
|
13
|
-
track(event:
|
|
17
|
+
track(event: AdaptedEvent): void;
|
|
18
|
+
private mapTouchEventId;
|
|
19
|
+
private removeMappedTouchId;
|
|
20
|
+
getMappedTouchEventId(touchEventId: number): number;
|
|
14
21
|
getVelocityX(pointerId: number): number;
|
|
15
22
|
getVelocityY(pointerId: number): number;
|
|
23
|
+
/**
|
|
24
|
+
* Returns X coordinate of last moved pointer
|
|
25
|
+
*/
|
|
26
|
+
getLastX(): number;
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @param pointerId
|
|
30
|
+
* Returns X coordinate of given pointer
|
|
31
|
+
*/
|
|
16
32
|
getLastX(pointerId: number): number;
|
|
33
|
+
/**
|
|
34
|
+
* Returns Y coordinate of last moved pointer
|
|
35
|
+
*/
|
|
36
|
+
getLastY(): number;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @param pointerId
|
|
40
|
+
* Returns Y coordinate of given pointer
|
|
41
|
+
*/
|
|
17
42
|
getLastY(pointerId: number): number;
|
|
18
43
|
getLastAvgX(): number;
|
|
19
44
|
getLastAvgY(): number;
|
|
@@ -25,4 +50,3 @@ export default class PointerTracker {
|
|
|
25
50
|
resetTracker(): void;
|
|
26
51
|
static shareCommonPointers(stPointers: number[], ndPointers: number[]): boolean;
|
|
27
52
|
}
|
|
28
|
-
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
|
|
2
|
+
import EventManager from './EventManager';
|
|
3
|
+
export default class TouchEventManager extends EventManager {
|
|
4
|
+
setListeners(): void;
|
|
5
|
+
protected mapEvent(event: TouchEvent, eventType: EventTypes, index: number, touchEventType: TouchEventType): AdaptedEvent;
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-gesture-handler",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.1",
|
|
4
4
|
"description": "Experimental implementation of a new declarative API for gesture handling in react-native",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepare": "bob build",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"@types/hoist-non-react-statics": "^3.3.1",
|
|
81
81
|
"@types/jest": "^27.0.3",
|
|
82
82
|
"@types/react": "^17.0.0",
|
|
83
|
-
"@types/react-native": "^0.
|
|
83
|
+
"@types/react-native": "^0.69.6",
|
|
84
84
|
"@types/react-test-renderer": "^17.0.0",
|
|
85
85
|
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
86
86
|
"@typescript-eslint/parser": "^4.33.0",
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
1
3
|
let EXPERIMENTAL_WEB_IMPLEMENTATION = false;
|
|
2
4
|
let getWasCalled = false;
|
|
3
5
|
|
|
4
6
|
export function enableExperimentalWebImplementation(shouldEnable = true): void {
|
|
7
|
+
if (
|
|
8
|
+
Platform.OS !== 'web' ||
|
|
9
|
+
EXPERIMENTAL_WEB_IMPLEMENTATION === shouldEnable
|
|
10
|
+
) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
5
14
|
if (getWasCalled) {
|
|
6
15
|
console.error(
|
|
7
16
|
'Some parts of this application have already started using old gesture handler implementation. No changes will be applied. You can try enabling new implementation earlier.'
|
|
@@ -11,6 +11,7 @@ import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
|
|
11
11
|
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
|
12
12
|
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
|
13
13
|
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
|
14
|
+
import ManualGestureHandler from './web/handlers/ManualGestureHandler';
|
|
14
15
|
|
|
15
16
|
//Hammer Handlers
|
|
16
17
|
import * as HammerNodeManager from './web_hammer/NodeManager';
|
|
@@ -21,7 +22,7 @@ import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler'
|
|
|
21
22
|
import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
|
|
22
23
|
import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
|
|
23
24
|
import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
|
|
24
|
-
import { Config } from './
|
|
25
|
+
import { Config } from './web/interfaces';
|
|
25
26
|
|
|
26
27
|
export const Gestures = {
|
|
27
28
|
NativeViewGestureHandler,
|
|
@@ -31,6 +32,7 @@ export const Gestures = {
|
|
|
31
32
|
PinchGestureHandler,
|
|
32
33
|
RotationGestureHandler,
|
|
33
34
|
FlingGestureHandler,
|
|
35
|
+
ManualGestureHandler,
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
export const HammerGestures = {
|
|
@@ -44,7 +46,6 @@ export const HammerGestures = {
|
|
|
44
46
|
};
|
|
45
47
|
|
|
46
48
|
export default {
|
|
47
|
-
// Direction,
|
|
48
49
|
handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
|
|
49
50
|
console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
|
|
50
51
|
},
|
|
@@ -57,28 +58,37 @@ export default {
|
|
|
57
58
|
config: T
|
|
58
59
|
) {
|
|
59
60
|
if (isExperimentalWebImplementationEnabled()) {
|
|
60
|
-
if (!(handlerName in Gestures))
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
if (!(handlerName in Gestures)) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
63
66
|
|
|
64
67
|
const GestureClass = Gestures[handlerName];
|
|
65
68
|
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
66
|
-
|
|
69
|
+
InteractionManager.getInstance().configureInteractions(
|
|
67
70
|
NodeManager.getHandler(handlerTag),
|
|
68
71
|
(config as unknown) as Config
|
|
69
72
|
);
|
|
70
73
|
} else {
|
|
71
|
-
if (!(handlerName in HammerGestures))
|
|
74
|
+
if (!(handlerName in HammerGestures)) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
72
79
|
|
|
80
|
+
// @ts-ignore If it doesn't exist, the error is thrown
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
73
82
|
const GestureClass = HammerGestures[handlerName];
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
74
84
|
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
75
85
|
}
|
|
76
86
|
|
|
77
|
-
this.updateGestureHandler(handlerTag, config);
|
|
87
|
+
this.updateGestureHandler(handlerTag, (config as unknown) as Config);
|
|
78
88
|
},
|
|
79
89
|
attachGestureHandler(
|
|
80
90
|
handlerTag: number,
|
|
81
|
-
newView: number,
|
|
91
|
+
newView: number,
|
|
82
92
|
_actionType: ActionType,
|
|
83
93
|
propsRef: React.RefObject<unknown>
|
|
84
94
|
) {
|
|
@@ -88,9 +98,14 @@ export default {
|
|
|
88
98
|
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
|
89
99
|
}
|
|
90
100
|
},
|
|
91
|
-
updateGestureHandler(handlerTag: number, newConfig:
|
|
101
|
+
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
|
92
102
|
if (isExperimentalWebImplementationEnabled()) {
|
|
93
103
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
104
|
+
|
|
105
|
+
InteractionManager.getInstance().configureInteractions(
|
|
106
|
+
NodeManager.getHandler(handlerTag),
|
|
107
|
+
newConfig
|
|
108
|
+
);
|
|
94
109
|
} else {
|
|
95
110
|
HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
96
111
|
}
|
|
@@ -16,7 +16,10 @@ if (RNGestureHandlerModule == null) {
|
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
if (
|
|
19
|
+
if (
|
|
20
|
+
RNGestureHandlerModule &&
|
|
21
|
+
RNGestureHandlerModule.flushOperations === undefined
|
|
22
|
+
) {
|
|
20
23
|
RNGestureHandlerModule.flushOperations = () => {
|
|
21
24
|
// NO-OP if not defined
|
|
22
25
|
};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
1
3
|
import { ActionType } from './ActionType';
|
|
4
|
+
import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
|
|
2
5
|
|
|
3
6
|
//GestureHandlers
|
|
4
7
|
import InteractionManager from './web/tools/InteractionManager';
|
|
@@ -10,6 +13,7 @@ import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
|
|
10
13
|
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
|
11
14
|
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
|
12
15
|
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
|
16
|
+
import ManualGestureHandler from './web/handlers/ManualGestureHandler';
|
|
13
17
|
|
|
14
18
|
//Hammer Handlers
|
|
15
19
|
import * as HammerNodeManager from './web_hammer/NodeManager';
|
|
@@ -21,7 +25,6 @@ import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
|
|
|
21
25
|
import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
|
|
22
26
|
import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
|
|
23
27
|
import { Config } from './web/interfaces';
|
|
24
|
-
import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
|
|
25
28
|
|
|
26
29
|
export const Gestures = {
|
|
27
30
|
NativeViewGestureHandler,
|
|
@@ -31,6 +34,7 @@ export const Gestures = {
|
|
|
31
34
|
PinchGestureHandler,
|
|
32
35
|
RotationGestureHandler,
|
|
33
36
|
FlingGestureHandler,
|
|
37
|
+
ManualGestureHandler,
|
|
34
38
|
};
|
|
35
39
|
|
|
36
40
|
export const HammerGestures = {
|
|
@@ -43,10 +47,7 @@ export const HammerGestures = {
|
|
|
43
47
|
FlingGestureHandler: HammerFlingGestureHandler,
|
|
44
48
|
};
|
|
45
49
|
|
|
46
|
-
const interactionManager = new InteractionManager();
|
|
47
|
-
|
|
48
50
|
export default {
|
|
49
|
-
// Direction,
|
|
50
51
|
handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
|
|
51
52
|
console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
|
|
52
53
|
},
|
|
@@ -67,7 +68,7 @@ export default {
|
|
|
67
68
|
|
|
68
69
|
const GestureClass = Gestures[handlerName];
|
|
69
70
|
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
70
|
-
|
|
71
|
+
InteractionManager.getInstance().configureInteractions(
|
|
71
72
|
NodeManager.getHandler(handlerTag),
|
|
72
73
|
(config as unknown) as Config
|
|
73
74
|
);
|
|
@@ -78,7 +79,10 @@ export default {
|
|
|
78
79
|
);
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
// @ts-ignore If it doesn't exist, the error is thrown
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
81
84
|
const GestureClass = HammerGestures[handlerName];
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
82
86
|
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
83
87
|
}
|
|
84
88
|
|
|
@@ -86,13 +90,22 @@ export default {
|
|
|
86
90
|
},
|
|
87
91
|
attachGestureHandler(
|
|
88
92
|
handlerTag: number,
|
|
89
|
-
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
94
|
+
newView: any,
|
|
90
95
|
_actionType: ActionType,
|
|
91
96
|
propsRef: React.RefObject<unknown>
|
|
92
97
|
) {
|
|
98
|
+
if (
|
|
99
|
+
!(newView instanceof HTMLElement || newView instanceof React.Component)
|
|
100
|
+
) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
93
104
|
if (isExperimentalWebImplementationEnabled()) {
|
|
105
|
+
//@ts-ignore Types should be HTMLElement or React.Component
|
|
94
106
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
|
95
107
|
} else {
|
|
108
|
+
//@ts-ignore Types should be HTMLElement or React.Component
|
|
96
109
|
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
|
97
110
|
}
|
|
98
111
|
},
|
|
@@ -100,7 +113,7 @@ export default {
|
|
|
100
113
|
if (isExperimentalWebImplementationEnabled()) {
|
|
101
114
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
102
115
|
|
|
103
|
-
|
|
116
|
+
InteractionManager.getInstance().configureInteractions(
|
|
104
117
|
NodeManager.getHandler(handlerTag),
|
|
105
118
|
newConfig
|
|
106
119
|
);
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import createNativeWrapper from '../handlers/createNativeWrapper';
|
|
13
13
|
|
|
14
14
|
export const ScrollView = createNativeWrapper(RNScrollView, {
|
|
15
|
-
disallowInterruption:
|
|
15
|
+
disallowInterruption: false,
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
export const Switch = createNativeWrapper(RNSwitch, {
|
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
import codegenNativeComponentUntyped from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
3
|
-
// @ts-ignore TODO: remove once there is a .d.ts file with definitions
|
|
1
|
+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
4
2
|
import type {
|
|
5
3
|
Int32,
|
|
6
4
|
WithDefault,
|
|
7
|
-
// @ts-ignore TODO: remove once there is a .d.ts file with definitions
|
|
8
5
|
} from 'react-native/Libraries/Types/CodegenTypes';
|
|
9
|
-
import type { ViewProps,
|
|
10
|
-
// @ts-ignore TODO: remove once there is a .d.ts file with definitions
|
|
11
|
-
import type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';
|
|
12
|
-
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
14
|
-
const codegenNativeComponent = codegenNativeComponentUntyped as <T extends {}>(
|
|
15
|
-
name: string
|
|
16
|
-
) => HostComponent<T>;
|
|
6
|
+
import type { ViewProps, ColorValue } from 'react-native';
|
|
17
7
|
|
|
18
8
|
interface NativeProps extends ViewProps {
|
|
19
9
|
exclusive?: WithDefault<boolean, true>;
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import type { ViewProps, HostComponent } from 'react-native';
|
|
4
|
-
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
6
|
-
const codegenNativeComponent = codegenNativeComponentUntyped as <T extends {}>(
|
|
7
|
-
name: string
|
|
8
|
-
) => HostComponent<T>;
|
|
1
|
+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
2
|
+
import type { ViewProps } from 'react-native';
|
|
9
3
|
|
|
10
4
|
interface NativeProps extends ViewProps {}
|
|
11
5
|
|