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.
Files changed (177) 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 +20 -9
  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.web.js +1 -1
  14. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  15. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  16. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  17. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
  18. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  19. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  20. package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
  21. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  22. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
  23. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
  24. package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
  25. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  26. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
  27. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  28. package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
  29. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  30. package/lib/commonjs/web/handlers/GestureHandler.js +282 -79
  31. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  32. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
  33. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  34. package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
  35. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
  36. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
  37. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  38. package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
  39. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  40. package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
  41. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  42. package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
  43. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  44. package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
  45. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  46. package/lib/commonjs/web/interfaces.js +22 -1
  47. package/lib/commonjs/web/interfaces.js.map +1 -1
  48. package/lib/commonjs/web/tools/EventManager.js +40 -96
  49. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  50. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
  51. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  52. package/lib/commonjs/web/tools/InteractionManager.js +24 -10
  53. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  54. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  55. package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
  56. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
  57. package/lib/commonjs/web/tools/PointerTracker.js +97 -7
  58. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  59. package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
  60. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
  61. package/lib/commonjs/web/utils.js +15 -0
  62. package/lib/commonjs/web/utils.js.map +1 -0
  63. package/lib/module/EnableExperimentalWebImplementation.js +5 -0
  64. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
  65. package/lib/module/RNGestureHandlerModule.js +1 -1
  66. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  67. package/lib/module/RNGestureHandlerModule.macos.js +19 -10
  68. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  69. package/lib/module/RNGestureHandlerModule.web.js +22 -11
  70. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  71. package/lib/module/components/GestureComponents.web.js +1 -1
  72. package/lib/module/components/GestureComponents.web.js.map +1 -1
  73. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  74. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  75. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
  76. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  77. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  78. package/lib/module/handlers/gestures/eventReceiver.js +14 -20
  79. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  80. package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
  81. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
  82. package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
  83. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  84. package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
  85. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  86. package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
  87. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  88. package/lib/module/web/handlers/GestureHandler.js +276 -79
  89. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  90. package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
  91. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  92. package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
  93. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
  94. package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
  95. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  96. package/lib/module/web/handlers/PanGestureHandler.js +57 -41
  97. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  98. package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
  99. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  100. package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
  101. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  102. package/lib/module/web/handlers/TapGestureHandler.js +52 -50
  103. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  104. package/lib/module/web/interfaces.js +19 -0
  105. package/lib/module/web/interfaces.js.map +1 -1
  106. package/lib/module/web/tools/EventManager.js +39 -95
  107. package/lib/module/web/tools/EventManager.js.map +1 -1
  108. package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
  109. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  110. package/lib/module/web/tools/InteractionManager.js +24 -10
  111. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  112. package/lib/module/web/tools/NodeManager.js.map +1 -1
  113. package/lib/module/web/tools/PointerEventManager.js +116 -0
  114. package/lib/module/web/tools/PointerEventManager.js.map +1 -0
  115. package/lib/module/web/tools/PointerTracker.js +97 -7
  116. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  117. package/lib/module/web/tools/TouchEventManager.js +124 -0
  118. package/lib/module/web/tools/TouchEventManager.js.map +1 -0
  119. package/lib/module/web/utils.js +8 -0
  120. package/lib/module/web/utils.js.map +1 -0
  121. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +5 -2
  122. package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
  123. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  124. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
  125. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
  126. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
  127. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
  128. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
  129. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
  130. package/lib/typescript/web/handlers/GestureHandler.d.ts +41 -32
  131. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
  132. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
  133. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
  134. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
  135. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
  136. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
  137. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
  138. package/lib/typescript/web/interfaces.d.ts +50 -10
  139. package/lib/typescript/web/tools/EventManager.d.ts +28 -26
  140. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
  141. package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
  142. package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
  143. package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
  144. package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
  145. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
  146. package/lib/typescript/web/utils.d.ts +4 -0
  147. package/package.json +2 -2
  148. package/src/EnableExperimentalWebImplementation.ts +9 -0
  149. package/src/RNGestureHandlerModule.macos.ts +25 -10
  150. package/src/RNGestureHandlerModule.ts +4 -1
  151. package/src/RNGestureHandlerModule.web.ts +20 -7
  152. package/src/components/GestureComponents.web.tsx +1 -1
  153. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
  154. package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
  155. package/src/handlers/gestures/GestureDetector.tsx +0 -1
  156. package/src/handlers/gestures/eventReceiver.ts +23 -24
  157. package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
  158. package/src/web/detectors/RotationGestureDetector.ts +20 -52
  159. package/src/web/detectors/ScaleGestureDetector.ts +9 -45
  160. package/src/web/handlers/FlingGestureHandler.ts +45 -22
  161. package/src/web/handlers/GestureHandler.ts +306 -97
  162. package/src/web/handlers/LongPressGestureHandler.ts +30 -24
  163. package/src/web/handlers/ManualGestureHandler.ts +39 -0
  164. package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
  165. package/src/web/handlers/PanGestureHandler.ts +68 -53
  166. package/src/web/handlers/PinchGestureHandler.ts +47 -44
  167. package/src/web/handlers/RotationGestureHandler.ts +52 -51
  168. package/src/web/handlers/TapGestureHandler.ts +74 -56
  169. package/src/web/interfaces.ts +57 -10
  170. package/src/web/tools/EventManager.ts +58 -148
  171. package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
  172. package/src/web/tools/InteractionManager.ts +25 -9
  173. package/src/web/tools/NodeManager.ts +6 -6
  174. package/src/web/tools/PointerEventManager.ts +134 -0
  175. package/src/web/tools/PointerTracker.ts +120 -10
  176. package/src/web/tools/TouchEventManager.ts +167 -0
  177. 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.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.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,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)) 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
  );
@@ -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, {
@@ -1,19 +1,9 @@
1
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
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, HostComponent } from 'react-native';
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
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
2
- import codegenNativeComponentUntyped from 'react-native/Libraries/Utilities/codegenNativeComponent';
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
 
@@ -152,7 +152,6 @@ function attachHandlers({
152
152
 
153
153
  for (const handler of gesture) {
154
154
  checkGestureCallbacksForWorklets(handler);
155
-
156
155
  RNGestureHandlerModule.createGestureHandler(
157
156
  handler.handlerName,
158
157
  handler.handlerTag,