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
@@ -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,73 @@ 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
140
  const oldState = this.currentState;
141
141
  this.currentState = newState;
142
- GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, event);
142
+ GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
143
143
  this.onStateChange(newState, oldState);
144
144
  }
145
145
 
146
146
  onStateChange(_newState, _oldState) {}
147
147
 
148
- begin(event) {
149
- if (!this.checkHitSlop(event)) {
148
+ begin() {
149
+ if (!this.checkHitSlop()) {
150
150
  return;
151
151
  }
152
152
 
153
153
  if (this.currentState === State.UNDETERMINED) {
154
- this.moveToState(State.BEGAN, event);
154
+ this.moveToState(State.BEGAN);
155
155
  }
156
156
  }
157
+ /**
158
+ * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
159
+ */
160
+
157
161
 
158
- fail(event) {
162
+ fail(sendIfDisabled) {
159
163
  if (this.currentState === State.ACTIVE || this.currentState === State.BEGAN) {
160
- this.moveToState(State.FAILED, event);
164
+ this.moveToState(State.FAILED, sendIfDisabled);
165
+ this.view.style.cursor = 'auto';
161
166
  }
162
167
 
163
168
  this.resetProgress();
164
169
  }
170
+ /**
171
+ * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
172
+ */
165
173
 
166
- cancel(event) {
174
+
175
+ cancel(sendIfDisabled) {
167
176
  if (this.currentState === State.ACTIVE || this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
168
177
  this.onCancel();
169
- this.moveToState(State.CANCELLED, event);
178
+ this.moveToState(State.CANCELLED, sendIfDisabled);
179
+ this.view.style.cursor = 'auto';
170
180
  }
171
181
  }
172
182
 
173
- activate(event, _force = false) {
183
+ activate(_force = false) {
174
184
  if (this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
175
- this.moveToState(State.ACTIVE, event);
185
+ this.moveToState(State.ACTIVE);
186
+ this.view.style.cursor = 'grab';
176
187
  }
177
188
  }
178
189
 
179
- end(event) {
190
+ end() {
180
191
  if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
181
- this.moveToState(State.END, event);
192
+ this.moveToState(State.END);
193
+ this.view.style.cursor = 'auto';
182
194
  }
183
195
 
184
196
  this.resetProgress();
@@ -224,7 +236,7 @@ export default class GestureHandler {
224
236
  return false;
225
237
  }
226
238
 
227
- return this.interactionManager.shouldWaitForHandlerFailure(this, handler);
239
+ return InteractionManager.getInstance().shouldWaitForHandlerFailure(this, handler);
228
240
  }
229
241
 
230
242
  shouldRequireToWaitForFailure(handler) {
@@ -232,7 +244,7 @@ export default class GestureHandler {
232
244
  return false;
233
245
  }
234
246
 
235
- return this.interactionManager.shouldRequireHandlerToWaitForFailure(this, handler);
247
+ return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(this, handler);
236
248
  }
237
249
 
238
250
  shouldRecognizeSimultaneously(handler) {
@@ -240,7 +252,7 @@ export default class GestureHandler {
240
252
  return true;
241
253
  }
242
254
 
243
- return this.interactionManager.shouldRecognizeSimultaneously(this, handler);
255
+ return InteractionManager.getInstance().shouldRecognizeSimultaneously(this, handler);
244
256
  }
245
257
 
246
258
  shouldBeCancelledByOther(handler) {
@@ -248,59 +260,113 @@ export default class GestureHandler {
248
260
  return false;
249
261
  }
250
262
 
251
- return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);
263
+ return InteractionManager.getInstance().shouldHandlerBeCancelledBy(this, handler);
252
264
  } //
253
265
  // Event actions
254
266
  //
255
267
 
256
268
 
257
- onPointerDown(_event) {
269
+ onPointerDown(event) {
258
270
  GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
271
+ this.pointerType = event.pointerType;
272
+
273
+ if (this.pointerType === PointerType.TOUCH) {
274
+ GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);
275
+ }
276
+
277
+ if (this.config.needsPointerData) {
278
+ this.sendTouchEvent(event);
279
+ }
259
280
  } // Adding another pointer to existing ones
260
281
 
261
282
 
262
- onPointerAdd(_event) {}
283
+ onPointerAdd(event) {
284
+ if (this.config.needsPointerData) {
285
+ this.sendTouchEvent(event);
286
+ }
287
+ }
263
288
 
264
- onPointerUp(_event) {} // Removing pointer, when there is more than one pointers
289
+ onPointerUp(event) {
290
+ if (this.config.needsPointerData) {
291
+ this.sendTouchEvent(event);
292
+ }
293
+ } // Removing pointer, when there is more than one pointers
265
294
 
266
295
 
267
- onPointerRemove(_event) {}
296
+ onPointerRemove(event) {
297
+ if (this.config.needsPointerData) {
298
+ this.sendTouchEvent(event);
299
+ }
300
+ }
268
301
 
269
302
  onPointerMove(event) {
270
- this.tryToSendMoveEvent(event, false);
303
+ this.tryToSendMoveEvent(false);
304
+
305
+ if (this.config.needsPointerData) {
306
+ this.sendTouchEvent(event);
307
+ }
271
308
  }
272
309
 
273
- onPointerOut(_event) {}
310
+ onPointerOut(event) {
311
+ if (this.config.needsPointerData) {
312
+ this.sendTouchEvent(event);
313
+ }
314
+ }
274
315
 
275
- onPointerEnter(_event) {}
316
+ onPointerEnter(event) {
317
+ if (this.config.needsPointerData) {
318
+ this.sendTouchEvent(event);
319
+ }
320
+ }
276
321
 
277
- onPointerCancel(_event) {}
322
+ onPointerCancel(event) {
323
+ if (this.config.needsPointerData) {
324
+ this.sendTouchEvent(event);
325
+ }
326
+ }
278
327
 
279
328
  onPointerOutOfBounds(event) {
280
- this.tryToSendMoveEvent(event, true);
329
+ this.tryToSendMoveEvent(true);
330
+
331
+ if (this.config.needsPointerData) {
332
+ this.sendTouchEvent(event);
333
+ }
334
+ }
335
+
336
+ tryToSendMoveEvent(out) {
337
+ if (this.enabled && this.active && (!out || out && !this.shouldCancellWhenOutside)) {
338
+ this.sendEvent(this.currentState, this.currentState);
339
+ }
281
340
  }
282
341
 
283
- tryToSendMoveEvent(event, out) {
284
- if (this.currentState === State.ACTIVE && (!out || out && !this.shouldCancellWhenOutside)) {
285
- this.sendEvent(event, this.currentState, this.currentState);
342
+ sendTouchEvent(event) {
343
+ if (!this.enabled) {
344
+ return;
345
+ }
346
+
347
+ const {
348
+ onGestureHandlerEvent
349
+ } = this.propsRef.current;
350
+ const touchEvent = this.transformTouchEvent(event);
351
+
352
+ if (touchEvent) {
353
+ invokeNullableMethod(onGestureHandlerEvent, touchEvent);
286
354
  }
287
355
  } //
288
356
  // Events Sending
289
357
  //
290
358
 
291
359
 
292
- transformEventData(event, newState, oldState) {
293
- var _this$eventManager;
294
-
360
+ transformEventData(newState, oldState) {
295
361
  return {
296
362
  nativeEvent: {
297
363
  numberOfPointers: this.tracker.getTrackedPointersCount(),
298
364
  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
365
+ pointerInside: isPointerInBounds(this.view, {
366
+ x: this.tracker.getLastAvgX(),
367
+ y: this.tracker.getLastAvgY()
302
368
  }),
303
- ...this.transformNativeEvent(event),
369
+ ...this.transformNativeEvent(),
304
370
  handlerTag: this.handlerTag,
305
371
  target: this.ref,
306
372
  oldState: newState !== oldState ? oldState : undefined
@@ -309,7 +375,99 @@ export default class GestureHandler {
309
375
  };
310
376
  }
311
377
 
312
- transformNativeEvent(_event) {
378
+ transformTouchEvent(event) {
379
+ var _event$touchEventType;
380
+
381
+ const rect = this.view.getBoundingClientRect();
382
+ const all = [];
383
+ const changed = [];
384
+ const trackerData = this.tracker.getData(); // This if handles edge case where all pointers have been cancelled
385
+ // When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
386
+ // The problem is, that handler will receive another pointercancel event from the rest of the pointers
387
+ // To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
388
+
389
+ if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
390
+ return;
391
+ }
392
+
393
+ trackerData.forEach((element, key) => {
394
+ const id = this.tracker.getMappedTouchEventId(key);
395
+ all.push({
396
+ id: id,
397
+ x: element.lastX - rect.left,
398
+ y: element.lastY - rect.top,
399
+ absoluteX: element.lastX,
400
+ absoluteY: element.lastY
401
+ });
402
+ }); // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
403
+ // However, if the event is cancel, we want to cancel all pointers to avoid crashes
404
+
405
+ if (event.eventType !== EventTypes.CANCEL) {
406
+ changed.push({
407
+ id: this.tracker.getMappedTouchEventId(event.pointerId),
408
+ x: event.x - rect.left,
409
+ y: event.y - rect.top,
410
+ absoluteX: event.x,
411
+ absoluteY: event.y
412
+ });
413
+ } else {
414
+ trackerData.forEach((element, key) => {
415
+ const id = this.tracker.getMappedTouchEventId(key);
416
+ changed.push({
417
+ id: id,
418
+ x: element.lastX - rect.left,
419
+ y: element.lastY - rect.top,
420
+ absoluteX: element.lastX,
421
+ absoluteY: element.lastY
422
+ });
423
+ });
424
+ }
425
+
426
+ let eventType = TouchEventType.UNDETERMINED;
427
+
428
+ switch (event.eventType) {
429
+ case EventTypes.DOWN:
430
+ case EventTypes.ADDITIONAL_POINTER_DOWN:
431
+ eventType = TouchEventType.DOWN;
432
+ break;
433
+
434
+ case EventTypes.UP:
435
+ case EventTypes.ADDITIONAL_POINTER_UP:
436
+ eventType = TouchEventType.UP;
437
+ break;
438
+
439
+ case EventTypes.MOVE:
440
+ eventType = TouchEventType.MOVE;
441
+ break;
442
+
443
+ case EventTypes.CANCEL:
444
+ eventType = TouchEventType.CANCELLED;
445
+ break;
446
+ } // Here, when we receive up event, we want to decrease number of touches
447
+ // That's because we want handler to send information that there's one pointer less
448
+ // However, we still want this pointer to be present in allTouches array, so that its data can be accessed
449
+
450
+
451
+ let numberOfTouches = all.length;
452
+
453
+ if (event.eventType === EventTypes.UP || event.eventType === EventTypes.ADDITIONAL_POINTER_UP) {
454
+ --numberOfTouches;
455
+ }
456
+
457
+ return {
458
+ nativeEvent: {
459
+ handlerTag: this.handlerTag,
460
+ state: this.currentState,
461
+ eventType: (_event$touchEventType = event.touchEventType) !== null && _event$touchEventType !== void 0 ? _event$touchEventType : eventType,
462
+ changedTouches: changed,
463
+ allTouches: all,
464
+ numberOfTouches: numberOfTouches
465
+ },
466
+ timeStamp: Date.now()
467
+ };
468
+ }
469
+
470
+ transformNativeEvent() {
313
471
  return {};
314
472
  } //
315
473
  // Handling config
@@ -321,10 +479,29 @@ export default class GestureHandler {
321
479
  ...props
322
480
  }) {
323
481
  this.config = {
324
- enabled,
482
+ enabled: enabled,
325
483
  ...props
326
484
  };
485
+ this.enabled = enabled;
327
486
  this.validateHitSlops();
487
+
488
+ if (this.enabled) {
489
+ return;
490
+ }
491
+
492
+ switch (this.currentState) {
493
+ case State.ACTIVE:
494
+ this.fail(true);
495
+ break;
496
+
497
+ case State.UNDETERMINED:
498
+ GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(this);
499
+ break;
500
+
501
+ default:
502
+ this.cancel(true);
503
+ break;
504
+ }
328
505
  }
329
506
 
330
507
  checkCustomActivationCriteria(criterias) {
@@ -357,8 +534,8 @@ export default class GestureHandler {
357
534
  }
358
535
  }
359
536
 
360
- checkHitSlop(event) {
361
- if (!this.config.hitSlop || !this.view) {
537
+ checkHitSlop() {
538
+ if (!this.config.hitSlop) {
362
539
  return true;
363
540
  }
364
541
 
@@ -411,13 +588,25 @@ export default class GestureHandler {
411
588
  }
412
589
  }
413
590
 
414
- if (event.offsetX >= left && event.offsetX <= right && event.offsetY >= top && event.offsetY <= bottom) {
591
+ const rect = this.view.getBoundingClientRect();
592
+ const offsetX = this.tracker.getLastX() - rect.left;
593
+ const offsetY = this.tracker.getLastY() - rect.top;
594
+
595
+ if (offsetX >= left && offsetX <= right && offsetY >= top && offsetY <= bottom) {
415
596
  return true;
416
597
  }
417
598
 
418
599
  return false;
419
600
  }
420
601
 
602
+ isPointerInBounds({
603
+ x,
604
+ y
605
+ }) {
606
+ const rect = this.view.getBoundingClientRect();
607
+ return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
608
+ }
609
+
421
610
  resetConfig() {} //
422
611
  // Getters and setters
423
612
  //
@@ -443,8 +632,8 @@ export default class GestureHandler {
443
632
  return this.view;
444
633
  }
445
634
 
446
- getEventManager() {
447
- return this.eventManager;
635
+ getEventManagers() {
636
+ return this.eventManagers;
448
637
  }
449
638
 
450
639
  getTracker() {
@@ -459,14 +648,22 @@ export default class GestureHandler {
459
648
  return this.currentState;
460
649
  }
461
650
 
462
- setShouldCancelWhenOutside(flag) {
463
- this.shouldCancellWhenOutside = flag;
651
+ isEnabled() {
652
+ return this.enabled;
653
+ }
654
+
655
+ setShouldCancelWhenOutside(shouldCancel) {
656
+ this.shouldCancellWhenOutside = shouldCancel;
464
657
  }
465
658
 
466
659
  getShouldCancelWhenOutside() {
467
660
  return this.shouldCancellWhenOutside;
468
661
  }
469
662
 
663
+ getPointerType() {
664
+ return this.pointerType;
665
+ }
666
+
470
667
  }
471
668
 
472
669
  function invokeNullableMethod(method, event) {