react-native-gesture-handler 2.6.0 → 2.6.2

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.
Files changed (196) hide show
  1. package/android/build.gradle +2 -2
  2. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  3. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  4. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  5. package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
  6. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
  7. package/lib/commonjs/RNGestureHandlerModule.js +1 -1
  8. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  9. package/lib/commonjs/RNGestureHandlerModule.macos.js +22 -13
  10. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  11. package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
  12. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  13. package/lib/commonjs/components/GestureComponents.js +6 -4
  14. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  15. package/lib/commonjs/components/GestureComponents.web.js +1 -1
  16. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  17. package/lib/commonjs/components/Swipeable.js +4 -4
  18. package/lib/commonjs/components/Swipeable.js.map +1 -1
  19. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  20. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  21. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
  22. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  23. package/lib/commonjs/handlers/gestures/GestureDetector.js +4 -2
  24. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  25. package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
  26. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  27. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
  28. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
  29. package/lib/commonjs/utils.js +10 -6
  30. package/lib/commonjs/utils.js.map +1 -1
  31. package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
  32. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  33. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
  34. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  35. package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
  36. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  37. package/lib/commonjs/web/handlers/GestureHandler.js +330 -79
  38. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  39. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
  40. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  41. package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
  42. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
  43. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
  44. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  45. package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
  46. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  47. package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
  48. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  49. package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
  50. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  51. package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
  52. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/interfaces.js +22 -1
  54. package/lib/commonjs/web/interfaces.js.map +1 -1
  55. package/lib/commonjs/web/tools/EventManager.js +40 -96
  56. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  57. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
  58. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  59. package/lib/commonjs/web/tools/InteractionManager.js +24 -10
  60. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  61. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  62. package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
  63. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
  64. package/lib/commonjs/web/tools/PointerTracker.js +97 -7
  65. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  66. package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
  67. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
  68. package/lib/commonjs/web/utils.js +15 -0
  69. package/lib/commonjs/web/utils.js.map +1 -0
  70. package/lib/module/EnableExperimentalWebImplementation.js +5 -0
  71. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
  72. package/lib/module/RNGestureHandlerModule.js +1 -1
  73. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/module/RNGestureHandlerModule.macos.js +21 -14
  75. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  76. package/lib/module/RNGestureHandlerModule.web.js +22 -11
  77. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  78. package/lib/module/components/GestureComponents.js +6 -4
  79. package/lib/module/components/GestureComponents.js.map +1 -1
  80. package/lib/module/components/GestureComponents.web.js +1 -1
  81. package/lib/module/components/GestureComponents.web.js.map +1 -1
  82. package/lib/module/components/Swipeable.js +4 -4
  83. package/lib/module/components/Swipeable.js.map +1 -1
  84. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  85. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  86. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
  87. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  88. package/lib/module/handlers/gestures/GestureDetector.js +5 -3
  89. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  90. package/lib/module/handlers/gestures/eventReceiver.js +14 -20
  91. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  92. package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
  93. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
  94. package/lib/module/utils.js +7 -6
  95. package/lib/module/utils.js.map +1 -1
  96. package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
  97. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  98. package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
  99. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  100. package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
  101. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  102. package/lib/module/web/handlers/GestureHandler.js +324 -79
  103. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  104. package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
  105. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  106. package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
  107. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
  108. package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
  109. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  110. package/lib/module/web/handlers/PanGestureHandler.js +57 -41
  111. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  112. package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
  113. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  114. package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
  115. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  116. package/lib/module/web/handlers/TapGestureHandler.js +52 -50
  117. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  118. package/lib/module/web/interfaces.js +19 -0
  119. package/lib/module/web/interfaces.js.map +1 -1
  120. package/lib/module/web/tools/EventManager.js +39 -95
  121. package/lib/module/web/tools/EventManager.js.map +1 -1
  122. package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
  123. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  124. package/lib/module/web/tools/InteractionManager.js +24 -10
  125. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  126. package/lib/module/web/tools/NodeManager.js.map +1 -1
  127. package/lib/module/web/tools/PointerEventManager.js +116 -0
  128. package/lib/module/web/tools/PointerEventManager.js.map +1 -0
  129. package/lib/module/web/tools/PointerTracker.js +97 -7
  130. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  131. package/lib/module/web/tools/TouchEventManager.js +124 -0
  132. package/lib/module/web/tools/TouchEventManager.js.map +1 -0
  133. package/lib/module/web/utils.js +8 -0
  134. package/lib/module/web/utils.js.map +1 -0
  135. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +6 -3
  136. package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
  137. package/lib/typescript/components/Swipeable.d.ts +3 -3
  138. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  139. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
  140. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
  141. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
  142. package/lib/typescript/utils.d.ts +4 -0
  143. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
  144. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
  145. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
  146. package/lib/typescript/web/handlers/GestureHandler.d.ts +42 -32
  147. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
  148. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
  149. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
  150. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
  151. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
  152. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
  153. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
  154. package/lib/typescript/web/interfaces.d.ts +50 -10
  155. package/lib/typescript/web/tools/EventManager.d.ts +28 -26
  156. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
  157. package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
  158. package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
  159. package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
  160. package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
  161. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
  162. package/lib/typescript/web/utils.d.ts +4 -0
  163. package/package.json +2 -2
  164. package/src/EnableExperimentalWebImplementation.ts +9 -0
  165. package/src/RNGestureHandlerModule.macos.ts +28 -13
  166. package/src/RNGestureHandlerModule.ts +4 -1
  167. package/src/RNGestureHandlerModule.web.ts +20 -7
  168. package/src/components/GestureComponents.tsx +12 -16
  169. package/src/components/GestureComponents.web.tsx +1 -1
  170. package/src/components/Swipeable.tsx +11 -7
  171. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
  172. package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
  173. package/src/handlers/gestures/GestureDetector.tsx +8 -4
  174. package/src/handlers/gestures/eventReceiver.ts +23 -24
  175. package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
  176. package/src/utils.ts +6 -6
  177. package/src/web/detectors/RotationGestureDetector.ts +20 -52
  178. package/src/web/detectors/ScaleGestureDetector.ts +9 -45
  179. package/src/web/handlers/FlingGestureHandler.ts +45 -22
  180. package/src/web/handlers/GestureHandler.ts +365 -97
  181. package/src/web/handlers/LongPressGestureHandler.ts +30 -24
  182. package/src/web/handlers/ManualGestureHandler.ts +39 -0
  183. package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
  184. package/src/web/handlers/PanGestureHandler.ts +68 -53
  185. package/src/web/handlers/PinchGestureHandler.ts +47 -44
  186. package/src/web/handlers/RotationGestureHandler.ts +52 -51
  187. package/src/web/handlers/TapGestureHandler.ts +74 -56
  188. package/src/web/interfaces.ts +57 -10
  189. package/src/web/tools/EventManager.ts +58 -148
  190. package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
  191. package/src/web/tools/InteractionManager.ts +25 -9
  192. package/src/web/tools/NodeManager.ts +6 -6
  193. package/src/web/tools/PointerEventManager.ts +134 -0
  194. package/src/web/tools/PointerTracker.ts +120 -10
  195. package/src/web/tools/TouchEventManager.ts +167 -0
  196. 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 AdaptedPointerEvent {
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: string;
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 { AdaptedPointerEvent } from '../interfaces';
2
- export default class EventManager {
3
- private activePointers;
4
- private readonly view;
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
- private onPointerDown;
8
- private onPointerUp;
9
- private onPointerMove;
10
- private onPointerOut;
11
- private onPointerEnter;
12
- private onPointerCancel;
13
- private onPointerOutOfBounds;
14
- setOnPointerDown(callback: (event: AdaptedPointerEvent) => void): void;
15
- setOnPointerUp(callback: (event: AdaptedPointerEvent) => void): void;
16
- setOnPointerMove(callback: (event: AdaptedPointerEvent) => void): void;
17
- setOnPointerOut(callback: (event: AdaptedPointerEvent) => void): void;
18
- setOnPointerEnter(callback: (event: AdaptedPointerEvent) => void): void;
19
- setOnPointerCancel(callback: (event: AdaptedPointerEvent) => void): void;
20
- setOnPointerOutOfBounds(callback: (event: AdaptedPointerEvent) => void): void;
21
- private mapEvent;
22
- isPointerInBounds({ x, y }: {
23
- x: number;
24
- y: number;
25
- }): boolean;
26
- private addActivePointer;
27
- private removeActivePointer;
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, event: AdaptedPointerEvent): void;
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 { AdaptedPointerEvent } from '../interfaces';
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
- addToTracker(event: AdaptedPointerEvent): void;
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: AdaptedPointerEvent): void;
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
+ }
@@ -0,0 +1,4 @@
1
+ export declare function isPointerInBounds(view: HTMLElement, { x, y }: {
2
+ x: number;
3
+ y: number;
4
+ }): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.6.0",
3
+ "version": "2.6.2",
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.64.2",
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 './web_hammer/GestureHandler';
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,12 +46,11 @@ export const HammerGestures = {
44
46
  };
45
47
 
46
48
  export default {
47
- // Direction,
48
- handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
49
- console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
49
+ handleSetJSResponder(_tag: number, _blockNativeResponder: boolean) {
50
+ // NO-OP
50
51
  },
51
52
  handleClearJSResponder() {
52
- console.warn('handleClearJSResponder: ');
53
+ // NO-OP
53
54
  },
54
55
  createGestureHandler<T>(
55
56
  handlerName: keyof typeof Gestures,
@@ -57,28 +58,37 @@ export default {
57
58
  config: T
58
59
  ) {
59
60
  if (isExperimentalWebImplementationEnabled()) {
60
- if (!(handlerName in Gestures)) return;
61
-
62
- const interactionManager = new InteractionManager();
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
- interactionManager.configureInteractions(
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)) return;
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, //ref
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: any) {
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 (RNGestureHandlerModule.flushOperations === undefined) {
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
- interactionManager.configureInteractions(
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
- newView: number,
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
- interactionManager.configureInteractions(
116
+ InteractionManager.getInstance().configureInteractions(
104
117
  NodeManager.getHandler(handlerTag),
105
118
  newConfig
106
119
  );
@@ -57,14 +57,12 @@ export const ScrollView = React.forwardRef<
57
57
  waitFor={[...toArray(waitFor ?? []), refreshControlGestureRef]}
58
58
  // @ts-ignore we don't pass `refreshing` prop as we only want to override the ref
59
59
  refreshControl={
60
- refreshControl ? (
61
- <RefreshControl
62
- {...refreshControl.props}
63
- ref={refreshControlGestureRef}
64
- />
65
- ) : (
66
- refreshControl
67
- )
60
+ refreshControl
61
+ ? React.cloneElement(refreshControl, {
62
+ // @ts-ignore for reasons unknown to me, `ref` doesn't exist on the type inferred by TS
63
+ ref: refreshControlGestureRef,
64
+ })
65
+ : undefined
68
66
  }
69
67
  />
70
68
  );
@@ -129,14 +127,12 @@ export const FlatList = React.forwardRef((props, ref) => {
129
127
  )}
130
128
  // @ts-ignore we don't pass `refreshing` prop as we only want to override the ref
131
129
  refreshControl={
132
- refreshControl ? (
133
- <RefreshControl
134
- {...refreshControl.props}
135
- ref={refreshControlGestureRef}
136
- />
137
- ) : (
138
- refreshControl
139
- )
130
+ refreshControl
131
+ ? React.cloneElement(refreshControl, {
132
+ // @ts-ignore for reasons unknown to me, `ref` doesn't exist on the type inferred by TS
133
+ ref: refreshControlGestureRef,
134
+ })
135
+ : undefined
140
136
  }
141
137
  />
142
138
  );
@@ -12,7 +12,7 @@ import {
12
12
  import createNativeWrapper from '../handlers/createNativeWrapper';
13
13
 
14
14
  export const ScrollView = createNativeWrapper(RNScrollView, {
15
- disallowInterruption: true,
15
+ disallowInterruption: false,
16
16
  });
17
17
 
18
18
  export const Switch = createNativeWrapper(RNSwitch, {
@@ -106,12 +106,15 @@ export interface SwipeableProps
106
106
  /**
107
107
  * Called when action panel gets open (either right or left).
108
108
  */
109
- onSwipeableOpen?: (direction: 'left' | 'right') => void;
109
+ onSwipeableOpen?: (direction: 'left' | 'right', swipeable: Swipeable) => void;
110
110
 
111
111
  /**
112
112
  * Called when action panel is closed.
113
113
  */
114
- onSwipeableClose?: (direction: 'left' | 'right') => void;
114
+ onSwipeableClose?: (
115
+ direction: 'left' | 'right',
116
+ swipeable: Swipeable
117
+ ) => void;
115
118
 
116
119
  /**
117
120
  * @deprecated Use `direction` argument of onSwipeableWillOpen()
@@ -161,7 +164,8 @@ export interface SwipeableProps
161
164
  * */
162
165
  renderRightActions?: (
163
166
  progressAnimatedValue: Animated.AnimatedInterpolation,
164
- dragAnimatedValue: Animated.AnimatedInterpolation
167
+ dragAnimatedValue: Animated.AnimatedInterpolation,
168
+ swipeable: Swipeable
165
169
  ) => React.ReactNode;
166
170
 
167
171
  useNativeAnimations?: boolean;
@@ -381,13 +385,13 @@ export default class Swipeable extends Component<
381
385
  if (finished) {
382
386
  if (toValue > 0) {
383
387
  this.props.onSwipeableLeftOpen?.();
384
- this.props.onSwipeableOpen?.('left');
388
+ this.props.onSwipeableOpen?.('left', this);
385
389
  } else if (toValue < 0) {
386
390
  this.props.onSwipeableRightOpen?.();
387
- this.props.onSwipeableOpen?.('right');
391
+ this.props.onSwipeableOpen?.('right', this);
388
392
  } else {
389
393
  const closingDirection = fromValue > 0 ? 'left' : 'right';
390
- this.props.onSwipeableClose?.(closingDirection);
394
+ this.props.onSwipeableClose?.(closingDirection, this);
391
395
  }
392
396
  }
393
397
  });
@@ -463,7 +467,7 @@ export default class Swipeable extends Component<
463
467
  styles.rightActions,
464
468
  { transform: [{ translateX: this.rightActionTranslate! }] },
465
469
  ]}>
466
- {renderRightActions(this.showRightAction!, this.transX!)}
470
+ {renderRightActions(this.showRightAction!, this.transX!, this)}
467
471
  <View
468
472
  onLayout={({ nativeEvent }) =>
469
473
  this.setState({ rightOffset: nativeEvent.layout.x })