react-native-gesture-handler 2.6.0 → 2.6.2

Sign up to get free protection for your applications and to get access to all the features.
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) {