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
@@ -3,9 +3,13 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3
3
  /* eslint-disable @typescript-eslint/no-empty-function */
4
4
  import { findNodeHandle } from 'react-native';
5
5
  import { State } from '../../State';
6
- import EventManager from '../tools/EventManager';
6
+ import { PointerType, TouchEventType, EventTypes } from '../interfaces';
7
7
  import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
8
+ import InteractionManager from '../tools/InteractionManager';
9
+ import PointerEventManager from '../tools/PointerEventManager';
8
10
  import PointerTracker from '../tools/PointerTracker';
11
+ import TouchEventManager from '../tools/TouchEventManager';
12
+ import { isPointerInBounds } from '../utils';
9
13
  export default class GestureHandler {
10
14
  // Orchestrator properties
11
15
  constructor() {
@@ -23,20 +27,18 @@ export default class GestureHandler {
23
27
 
24
28
  _defineProperty(this, "propsRef", void 0);
25
29
 
30
+ _defineProperty(this, "handlerTag", void 0);
31
+
26
32
  _defineProperty(this, "config", {
27
33
  enabled: false
28
34
  });
29
35
 
30
- _defineProperty(this, "handlerTag", void 0);
31
-
32
- _defineProperty(this, "view", null);
36
+ _defineProperty(this, "view", void 0);
33
37
 
34
- _defineProperty(this, "eventManager", void 0);
38
+ _defineProperty(this, "eventManagers", []);
35
39
 
36
40
  _defineProperty(this, "tracker", new PointerTracker());
37
41
 
38
- _defineProperty(this, "interactionManager", void 0);
39
-
40
42
  _defineProperty(this, "activationIndex", 0);
41
43
 
42
44
  _defineProperty(this, "awaiting", false);
@@ -45,12 +47,14 @@ export default class GestureHandler {
45
47
 
46
48
  _defineProperty(this, "shouldResetProgress", false);
47
49
 
48
- _defineProperty(this, "sendEvent", (event, newState, oldState) => {
50
+ _defineProperty(this, "pointerType", PointerType.NONE);
51
+
52
+ _defineProperty(this, "sendEvent", (newState, oldState) => {
49
53
  const {
50
54
  onGestureHandlerEvent,
51
55
  onGestureHandlerStateChange
52
56
  } = this.propsRef.current;
53
- const resultEvent = this.transformEventData(event, newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
57
+ const resultEvent = this.transformEventData(newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
54
58
  // Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
55
59
  // Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
56
60
  // However, this may cause trouble in the future (but for now we don't know that)
@@ -76,17 +80,17 @@ export default class GestureHandler {
76
80
  this.propsRef = propsRef;
77
81
  this.ref = ref;
78
82
  this.currentState = State.UNDETERMINED;
79
- this.setView(ref);
80
- this.setEventManager();
83
+ this.setView();
84
+ this.addEventManager(new PointerEventManager(this.view));
85
+ this.addEventManager(new TouchEventManager(this.view));
81
86
  }
82
87
 
83
- setView(ref) {
84
- if (!ref) {
85
- this.view = null;
86
- return;
88
+ setView() {
89
+ if (!this.ref) {
90
+ throw new Error(`Cannot find HTML Element for handler ${this.handlerTag}`);
87
91
  }
88
92
 
89
- this.view = findNodeHandle(ref);
93
+ this.view = findNodeHandle(this.ref);
90
94
  this.view.style['touchAction'] = 'none';
91
95
  this.view.style['webkitUserSelect'] = 'none';
92
96
  this.view.style['userSelect'] = 'none'; //@ts-ignore This one disables default events on Safari
@@ -94,24 +98,18 @@ export default class GestureHandler {
94
98
  this.view.style['WebkitTouchCallout'] = 'none';
95
99
  }
96
100
 
97
- setEventManager() {
98
- if (!this.view) {
99
- return;
100
- }
101
-
102
- this.eventManager = new EventManager(this.view);
103
- this.eventManager.setOnPointerDown(this.onPointerDown.bind(this));
104
- this.eventManager.setOnPointerUp(this.onPointerUp.bind(this));
105
- this.eventManager.setOnPointerMove(this.onPointerMove.bind(this));
106
- this.eventManager.setOnPointerEnter(this.onPointerEnter.bind(this));
107
- this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));
108
- this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));
109
- this.eventManager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
110
- this.eventManager.setListeners();
111
- }
112
-
113
- setInteractionManager(manager) {
114
- this.interactionManager = manager;
101
+ addEventManager(manager) {
102
+ manager.setOnPointerDown(this.onPointerDown.bind(this));
103
+ manager.setOnPointerAdd(this.onPointerAdd.bind(this));
104
+ manager.setOnPointerUp(this.onPointerUp.bind(this));
105
+ manager.setOnPointerRemove(this.onPointerRemove.bind(this));
106
+ manager.setOnPointerMove(this.onPointerMove.bind(this));
107
+ manager.setOnPointerEnter(this.onPointerEnter.bind(this));
108
+ manager.setOnPointerOut(this.onPointerOut.bind(this));
109
+ manager.setOnPointerCancel(this.onPointerCancel.bind(this));
110
+ manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
111
+ manager.setListeners();
112
+ this.eventManagers.push(manager);
115
113
  } //
116
114
  // Resetting handler
117
115
  //
@@ -126,59 +124,77 @@ export default class GestureHandler {
126
124
  reset() {
127
125
  this.tracker.resetTracker();
128
126
  this.onReset();
127
+ this.resetProgress();
128
+ this.eventManagers.forEach(manager => manager.resetManager());
129
129
  this.currentState = State.UNDETERMINED;
130
130
  } //
131
131
  // State logic
132
132
  //
133
133
 
134
134
 
135
- moveToState(newState, event) {
135
+ moveToState(newState, sendIfDisabled) {
136
136
  if (this.currentState === newState) {
137
137
  return;
138
138
  }
139
139
 
140
+ if (this.tracker.getTrackedPointersCount() > 0 && (newState === State.END || newState === State.CANCELLED || newState === State.FAILED)) {
141
+ this.cancelTouches();
142
+ }
143
+
140
144
  const oldState = this.currentState;
141
145
  this.currentState = newState;
142
- GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, event);
146
+ GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
143
147
  this.onStateChange(newState, oldState);
144
148
  }
145
149
 
146
150
  onStateChange(_newState, _oldState) {}
147
151
 
148
- begin(event) {
149
- if (!this.checkHitSlop(event)) {
152
+ begin() {
153
+ if (!this.checkHitSlop()) {
150
154
  return;
151
155
  }
152
156
 
153
157
  if (this.currentState === State.UNDETERMINED) {
154
- this.moveToState(State.BEGAN, event);
158
+ this.moveToState(State.BEGAN);
155
159
  }
156
160
  }
161
+ /**
162
+ * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
163
+ */
164
+
157
165
 
158
- fail(event) {
166
+ fail(sendIfDisabled) {
159
167
  if (this.currentState === State.ACTIVE || this.currentState === State.BEGAN) {
160
- this.moveToState(State.FAILED, event);
168
+ this.moveToState(State.FAILED, sendIfDisabled);
169
+ this.view.style.cursor = 'auto';
161
170
  }
162
171
 
163
172
  this.resetProgress();
164
173
  }
174
+ /**
175
+ * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
176
+ */
165
177
 
166
- cancel(event) {
178
+
179
+ cancel(sendIfDisabled) {
167
180
  if (this.currentState === State.ACTIVE || this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
168
181
  this.onCancel();
169
- this.moveToState(State.CANCELLED, event);
182
+ this.moveToState(State.CANCELLED, sendIfDisabled);
183
+ this.view.style.cursor = 'auto';
170
184
  }
171
185
  }
172
186
 
173
- activate(event, _force = false) {
187
+ activate(_force = false) {
174
188
  if (this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
175
- this.moveToState(State.ACTIVE, event);
189
+ this.moveToState(State.ACTIVE);
190
+ this.view.style.cursor = 'grab';
176
191
  }
177
192
  }
178
193
 
179
- end(event) {
194
+ end() {
180
195
  if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
181
- this.moveToState(State.END, event);
196
+ this.moveToState(State.END);
197
+ this.view.style.cursor = 'auto';
182
198
  }
183
199
 
184
200
  this.resetProgress();
@@ -224,7 +240,7 @@ export default class GestureHandler {
224
240
  return false;
225
241
  }
226
242
 
227
- return this.interactionManager.shouldWaitForHandlerFailure(this, handler);
243
+ return InteractionManager.getInstance().shouldWaitForHandlerFailure(this, handler);
228
244
  }
229
245
 
230
246
  shouldRequireToWaitForFailure(handler) {
@@ -232,7 +248,7 @@ export default class GestureHandler {
232
248
  return false;
233
249
  }
234
250
 
235
- return this.interactionManager.shouldRequireHandlerToWaitForFailure(this, handler);
251
+ return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(this, handler);
236
252
  }
237
253
 
238
254
  shouldRecognizeSimultaneously(handler) {
@@ -240,7 +256,7 @@ export default class GestureHandler {
240
256
  return true;
241
257
  }
242
258
 
243
- return this.interactionManager.shouldRecognizeSimultaneously(this, handler);
259
+ return InteractionManager.getInstance().shouldRecognizeSimultaneously(this, handler);
244
260
  }
245
261
 
246
262
  shouldBeCancelledByOther(handler) {
@@ -248,59 +264,113 @@ export default class GestureHandler {
248
264
  return false;
249
265
  }
250
266
 
251
- return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);
267
+ return InteractionManager.getInstance().shouldHandlerBeCancelledBy(this, handler);
252
268
  } //
253
269
  // Event actions
254
270
  //
255
271
 
256
272
 
257
- onPointerDown(_event) {
273
+ onPointerDown(event) {
258
274
  GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
275
+ this.pointerType = event.pointerType;
276
+
277
+ if (this.pointerType === PointerType.TOUCH) {
278
+ GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);
279
+ }
280
+
281
+ if (this.config.needsPointerData) {
282
+ this.sendTouchEvent(event);
283
+ }
259
284
  } // Adding another pointer to existing ones
260
285
 
261
286
 
262
- onPointerAdd(_event) {}
287
+ onPointerAdd(event) {
288
+ if (this.config.needsPointerData) {
289
+ this.sendTouchEvent(event);
290
+ }
291
+ }
263
292
 
264
- onPointerUp(_event) {} // Removing pointer, when there is more than one pointers
293
+ onPointerUp(event) {
294
+ if (this.config.needsPointerData) {
295
+ this.sendTouchEvent(event);
296
+ }
297
+ } // Removing pointer, when there is more than one pointers
265
298
 
266
299
 
267
- onPointerRemove(_event) {}
300
+ onPointerRemove(event) {
301
+ if (this.config.needsPointerData) {
302
+ this.sendTouchEvent(event);
303
+ }
304
+ }
268
305
 
269
306
  onPointerMove(event) {
270
- this.tryToSendMoveEvent(event, false);
307
+ this.tryToSendMoveEvent(false);
308
+
309
+ if (this.config.needsPointerData) {
310
+ this.sendTouchEvent(event);
311
+ }
271
312
  }
272
313
 
273
- onPointerOut(_event) {}
314
+ onPointerOut(event) {
315
+ if (this.config.needsPointerData) {
316
+ this.sendTouchEvent(event);
317
+ }
318
+ }
274
319
 
275
- onPointerEnter(_event) {}
320
+ onPointerEnter(event) {
321
+ if (this.config.needsPointerData) {
322
+ this.sendTouchEvent(event);
323
+ }
324
+ }
276
325
 
277
- onPointerCancel(_event) {}
326
+ onPointerCancel(event) {
327
+ if (this.config.needsPointerData) {
328
+ this.sendTouchEvent(event);
329
+ }
330
+ }
278
331
 
279
332
  onPointerOutOfBounds(event) {
280
- this.tryToSendMoveEvent(event, true);
333
+ this.tryToSendMoveEvent(true);
334
+
335
+ if (this.config.needsPointerData) {
336
+ this.sendTouchEvent(event);
337
+ }
338
+ }
339
+
340
+ tryToSendMoveEvent(out) {
341
+ if (this.enabled && this.active && (!out || out && !this.shouldCancellWhenOutside)) {
342
+ this.sendEvent(this.currentState, this.currentState);
343
+ }
281
344
  }
282
345
 
283
- tryToSendMoveEvent(event, out) {
284
- if (this.currentState === State.ACTIVE && (!out || out && !this.shouldCancellWhenOutside)) {
285
- this.sendEvent(event, this.currentState, this.currentState);
346
+ sendTouchEvent(event) {
347
+ if (!this.enabled) {
348
+ return;
349
+ }
350
+
351
+ const {
352
+ onGestureHandlerEvent
353
+ } = this.propsRef.current;
354
+ const touchEvent = this.transformTouchEvent(event);
355
+
356
+ if (touchEvent) {
357
+ invokeNullableMethod(onGestureHandlerEvent, touchEvent);
286
358
  }
287
359
  } //
288
360
  // Events Sending
289
361
  //
290
362
 
291
363
 
292
- transformEventData(event, newState, oldState) {
293
- var _this$eventManager;
294
-
364
+ transformEventData(newState, oldState) {
295
365
  return {
296
366
  nativeEvent: {
297
367
  numberOfPointers: this.tracker.getTrackedPointersCount(),
298
368
  state: newState,
299
- pointerInside: (_this$eventManager = this.eventManager) === null || _this$eventManager === void 0 ? void 0 : _this$eventManager.isPointerInBounds({
300
- x: event.x,
301
- y: event.y
369
+ pointerInside: isPointerInBounds(this.view, {
370
+ x: this.tracker.getLastAvgX(),
371
+ y: this.tracker.getLastAvgY()
302
372
  }),
303
- ...this.transformNativeEvent(event),
373
+ ...this.transformNativeEvent(),
304
374
  handlerTag: this.handlerTag,
305
375
  target: this.ref,
306
376
  oldState: newState !== oldState ? oldState : undefined
@@ -309,7 +379,143 @@ export default class GestureHandler {
309
379
  };
310
380
  }
311
381
 
312
- transformNativeEvent(_event) {
382
+ transformTouchEvent(event) {
383
+ var _event$touchEventType;
384
+
385
+ const rect = this.view.getBoundingClientRect();
386
+ const all = [];
387
+ const changed = [];
388
+ const trackerData = this.tracker.getData(); // This if handles edge case where all pointers have been cancelled
389
+ // When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
390
+ // The problem is, that handler will receive another pointercancel event from the rest of the pointers
391
+ // To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
392
+
393
+ if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
394
+ return;
395
+ }
396
+
397
+ trackerData.forEach((element, key) => {
398
+ const id = this.tracker.getMappedTouchEventId(key);
399
+ all.push({
400
+ id: id,
401
+ x: element.lastX - rect.left,
402
+ y: element.lastY - rect.top,
403
+ absoluteX: element.lastX,
404
+ absoluteY: element.lastY
405
+ });
406
+ }); // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
407
+ // However, if the event is cancel, we want to cancel all pointers to avoid crashes
408
+
409
+ if (event.eventType !== EventTypes.CANCEL) {
410
+ changed.push({
411
+ id: this.tracker.getMappedTouchEventId(event.pointerId),
412
+ x: event.x - rect.left,
413
+ y: event.y - rect.top,
414
+ absoluteX: event.x,
415
+ absoluteY: event.y
416
+ });
417
+ } else {
418
+ trackerData.forEach((element, key) => {
419
+ const id = this.tracker.getMappedTouchEventId(key);
420
+ changed.push({
421
+ id: id,
422
+ x: element.lastX - rect.left,
423
+ y: element.lastY - rect.top,
424
+ absoluteX: element.lastX,
425
+ absoluteY: element.lastY
426
+ });
427
+ });
428
+ }
429
+
430
+ let eventType = TouchEventType.UNDETERMINED;
431
+
432
+ switch (event.eventType) {
433
+ case EventTypes.DOWN:
434
+ case EventTypes.ADDITIONAL_POINTER_DOWN:
435
+ eventType = TouchEventType.DOWN;
436
+ break;
437
+
438
+ case EventTypes.UP:
439
+ case EventTypes.ADDITIONAL_POINTER_UP:
440
+ eventType = TouchEventType.UP;
441
+ break;
442
+
443
+ case EventTypes.MOVE:
444
+ eventType = TouchEventType.MOVE;
445
+ break;
446
+
447
+ case EventTypes.CANCEL:
448
+ eventType = TouchEventType.CANCELLED;
449
+ break;
450
+ } // Here, when we receive up event, we want to decrease number of touches
451
+ // That's because we want handler to send information that there's one pointer less
452
+ // However, we still want this pointer to be present in allTouches array, so that its data can be accessed
453
+
454
+
455
+ let numberOfTouches = all.length;
456
+
457
+ if (event.eventType === EventTypes.UP || event.eventType === EventTypes.ADDITIONAL_POINTER_UP) {
458
+ --numberOfTouches;
459
+ }
460
+
461
+ return {
462
+ nativeEvent: {
463
+ handlerTag: this.handlerTag,
464
+ state: this.currentState,
465
+ eventType: (_event$touchEventType = event.touchEventType) !== null && _event$touchEventType !== void 0 ? _event$touchEventType : eventType,
466
+ changedTouches: changed,
467
+ allTouches: all,
468
+ numberOfTouches: numberOfTouches
469
+ },
470
+ timeStamp: Date.now()
471
+ };
472
+ }
473
+
474
+ cancelTouches() {
475
+ const rect = this.view.getBoundingClientRect();
476
+ const all = [];
477
+ const changed = [];
478
+ const trackerData = this.tracker.getData();
479
+
480
+ if (trackerData.size === 0) {
481
+ return;
482
+ }
483
+
484
+ trackerData.forEach((element, key) => {
485
+ const id = this.tracker.getMappedTouchEventId(key);
486
+ all.push({
487
+ id: id,
488
+ x: element.lastX - rect.left,
489
+ y: element.lastY - rect.top,
490
+ absoluteX: element.lastX,
491
+ absoluteY: element.lastY
492
+ });
493
+ changed.push({
494
+ id: id,
495
+ x: element.lastX - rect.left,
496
+ y: element.lastY - rect.top,
497
+ absoluteX: element.lastX,
498
+ absoluteY: element.lastY
499
+ });
500
+ });
501
+ const cancelEvent = {
502
+ nativeEvent: {
503
+ handlerTag: this.handlerTag,
504
+ state: this.currentState,
505
+ eventType: TouchEventType.CANCELLED,
506
+ changedTouches: changed,
507
+ allTouches: all,
508
+ numberOfTouches: all.length
509
+ },
510
+ timeStamp: Date.now()
511
+ };
512
+ const {
513
+ onGestureHandlerEvent
514
+ } = this.propsRef.current;
515
+ invokeNullableMethod(onGestureHandlerEvent, cancelEvent);
516
+ }
517
+
518
+ transformNativeEvent() {
313
519
  return {};
314
520
  } //
315
521
  // Handling config
@@ -321,10 +527,29 @@ export default class GestureHandler {
321
527
  ...props
322
528
  }) {
323
529
  this.config = {
324
- enabled,
530
+ enabled: enabled,
325
531
  ...props
326
532
  };
533
+ this.enabled = enabled;
327
534
  this.validateHitSlops();
535
+
536
+ if (this.enabled) {
537
+ return;
538
+ }
539
+
540
+ switch (this.currentState) {
541
+ case State.ACTIVE:
542
+ this.fail(true);
543
+ break;
544
+
545
+ case State.UNDETERMINED:
546
+ GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(this);
547
+ break;
548
+
549
+ default:
550
+ this.cancel(true);
551
+ break;
552
+ }
328
553
  }
329
554
 
330
555
  checkCustomActivationCriteria(criterias) {
@@ -357,8 +582,8 @@ export default class GestureHandler {
357
582
  }
358
583
  }
359
584
 
360
- checkHitSlop(event) {
361
- if (!this.config.hitSlop || !this.view) {
585
+ checkHitSlop() {
586
+ if (!this.config.hitSlop) {
362
587
  return true;
363
588
  }
364
589
 
@@ -411,13 +636,25 @@ export default class GestureHandler {
411
636
  }
412
637
  }
413
638
 
414
- if (event.offsetX >= left && event.offsetX <= right && event.offsetY >= top && event.offsetY <= bottom) {
639
+ const rect = this.view.getBoundingClientRect();
640
+ const offsetX = this.tracker.getLastX() - rect.left;
641
+ const offsetY = this.tracker.getLastY() - rect.top;
642
+
643
+ if (offsetX >= left && offsetX <= right && offsetY >= top && offsetY <= bottom) {
415
644
  return true;
416
645
  }
417
646
 
418
647
  return false;
419
648
  }
420
649
 
650
+ isPointerInBounds({
651
+ x,
652
+ y
653
+ }) {
654
+ const rect = this.view.getBoundingClientRect();
655
+ return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
656
+ }
657
+
421
658
  resetConfig() {} //
422
659
  // Getters and setters
423
660
  //
@@ -443,8 +680,8 @@ export default class GestureHandler {
443
680
  return this.view;
444
681
  }
445
682
 
446
- getEventManager() {
447
- return this.eventManager;
683
+ getEventManagers() {
684
+ return this.eventManagers;
448
685
  }
449
686
 
450
687
  getTracker() {
@@ -459,14 +696,22 @@ export default class GestureHandler {
459
696
  return this.currentState;
460
697
  }
461
698
 
462
- setShouldCancelWhenOutside(flag) {
463
- this.shouldCancellWhenOutside = flag;
699
+ isEnabled() {
700
+ return this.enabled;
701
+ }
702
+
703
+ setShouldCancelWhenOutside(shouldCancel) {
704
+ this.shouldCancellWhenOutside = shouldCancel;
464
705
  }
465
706
 
466
707
  getShouldCancelWhenOutside() {
467
708
  return this.shouldCancellWhenOutside;
468
709
  }
469
710
 
711
+ getPointerType() {
712
+ return this.pointerType;
713
+ }
714
+
470
715
  }
471
716
 
472
717
  function invokeNullableMethod(method, event) {