react-native-gesture-handler 2.15.0 → 2.16.0

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 (254) hide show
  1. package/RNGestureHandler.podspec +2 -23
  2. package/android/build.gradle +1 -1
  3. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
  4. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
  5. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +11 -6
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +65 -24
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +86 -22
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +54 -29
  11. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
  13. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
  14. package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
  15. package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +8 -5
  20. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +7 -4
  21. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  22. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
  23. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
  24. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
  25. package/android/src/main/jni/cpp-adapter.cpp +18 -22
  26. package/apple/Handlers/RNFlingHandler.m +5 -4
  27. package/apple/Handlers/RNForceTouchHandler.m +3 -1
  28. package/apple/Handlers/RNHoverHandler.m +2 -1
  29. package/apple/Handlers/RNLongPressHandler.m +8 -14
  30. package/apple/Handlers/RNManualHandler.m +1 -0
  31. package/apple/Handlers/RNNativeViewHandler.mm +9 -7
  32. package/apple/Handlers/RNPanHandler.m +7 -2
  33. package/apple/Handlers/RNPinchHandler.m +50 -26
  34. package/apple/Handlers/RNRotationHandler.m +43 -29
  35. package/apple/Handlers/RNTapHandler.m +6 -4
  36. package/apple/RNGestureHandler.h +9 -0
  37. package/apple/RNGestureHandler.m +41 -4
  38. package/apple/RNGestureHandlerEvents.h +18 -9
  39. package/apple/RNGestureHandlerEvents.m +29 -11
  40. package/apple/RNGestureHandlerManager.h +5 -0
  41. package/apple/RNGestureHandlerManager.mm +32 -6
  42. package/apple/RNGestureHandlerModule.h +5 -3
  43. package/apple/RNGestureHandlerModule.mm +33 -19
  44. package/apple/RNGestureHandlerPointerType.h +8 -0
  45. package/lib/commonjs/Directions.js +19 -6
  46. package/lib/commonjs/Directions.js.map +1 -1
  47. package/lib/commonjs/PointerType.js +16 -0
  48. package/lib/commonjs/PointerType.js.map +1 -0
  49. package/lib/commonjs/RNGestureHandlerModule.web.js +7 -61
  50. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  51. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  52. package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
  53. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
  54. package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
  55. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  56. package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
  57. package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
  58. package/lib/commonjs/components/Swipeable.js +3 -1
  59. package/lib/commonjs/components/Swipeable.js.map +1 -1
  60. package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
  61. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  62. package/lib/commonjs/getShadowNodeFromRef.js +19 -2
  63. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  64. package/lib/commonjs/handlers/createHandler.js +5 -0
  65. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  66. package/lib/commonjs/handlers/customDirectEventTypes.js +14 -0
  67. package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
  68. package/lib/commonjs/handlers/customDirectEventTypes.web.js +11 -0
  69. package/lib/commonjs/handlers/customDirectEventTypes.web.js.map +1 -0
  70. package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
  71. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  72. package/lib/commonjs/handlers/gestures/GestureDetector.js +10 -0
  73. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  74. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  75. package/lib/commonjs/index.js +11 -3
  76. package/lib/commonjs/index.js.map +1 -1
  77. package/lib/commonjs/mocks.js +2 -0
  78. package/lib/commonjs/mocks.js.map +1 -1
  79. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  80. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  81. package/lib/commonjs/web/Gestures.js +66 -0
  82. package/lib/commonjs/web/Gestures.js.map +1 -0
  83. package/lib/commonjs/web/constants.js +3 -8
  84. package/lib/commonjs/web/constants.js.map +1 -1
  85. package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
  86. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  87. package/lib/commonjs/web/handlers/GestureHandler.js +10 -5
  88. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  89. package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
  90. package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
  91. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
  92. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  93. package/lib/commonjs/web/interfaces.js +1 -23
  94. package/lib/commonjs/web/interfaces.js.map +1 -1
  95. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  96. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +117 -118
  97. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  98. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
  99. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  100. package/lib/commonjs/web/tools/InteractionManager.js +12 -3
  101. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  102. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  103. package/lib/commonjs/web/tools/PointerEventManager.js +77 -27
  104. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  105. package/lib/commonjs/web/tools/TouchEventManager.js +29 -6
  106. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  107. package/lib/commonjs/web/tools/Vector.js +58 -0
  108. package/lib/commonjs/web/tools/Vector.js.map +1 -0
  109. package/lib/commonjs/web/utils.js +14 -0
  110. package/lib/commonjs/web/utils.js.map +1 -1
  111. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  112. package/lib/module/Directions.js +16 -4
  113. package/lib/module/Directions.js.map +1 -1
  114. package/lib/module/PointerType.js +9 -0
  115. package/lib/module/PointerType.js.map +1 -0
  116. package/lib/module/RNGestureHandlerModule.web.js +2 -39
  117. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  118. package/lib/module/components/DrawerLayout.js.map +1 -1
  119. package/lib/module/components/GestureHandlerRootView.android.js +15 -2
  120. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
  121. package/lib/module/components/GestureHandlerRootView.js +15 -3
  122. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  123. package/lib/module/components/GestureHandlerRootView.web.js +15 -3
  124. package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
  125. package/lib/module/components/Swipeable.js +3 -1
  126. package/lib/module/components/Swipeable.js.map +1 -1
  127. package/lib/module/components/touchables/GenericTouchable.js +1 -0
  128. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  129. package/lib/module/getShadowNodeFromRef.js +19 -2
  130. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  131. package/lib/module/handlers/createHandler.js +5 -1
  132. package/lib/module/handlers/createHandler.js.map +1 -1
  133. package/lib/module/handlers/customDirectEventTypes.js +3 -0
  134. package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
  135. package/lib/module/handlers/customDirectEventTypes.web.js +5 -0
  136. package/lib/module/handlers/customDirectEventTypes.web.js.map +1 -0
  137. package/lib/module/handlers/gestureHandlerCommon.js +11 -1
  138. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  139. package/lib/module/handlers/gestures/GestureDetector.js +10 -0
  140. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  141. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  142. package/lib/module/index.js +2 -1
  143. package/lib/module/index.js.map +1 -1
  144. package/lib/module/mocks.js +2 -0
  145. package/lib/module/mocks.js.map +1 -1
  146. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  147. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  148. package/lib/module/web/Gestures.js +39 -0
  149. package/lib/module/web/Gestures.js.map +1 -0
  150. package/lib/module/web/constants.js +1 -6
  151. package/lib/module/web/constants.js.map +1 -1
  152. package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
  153. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  154. package/lib/module/web/handlers/GestureHandler.js +7 -4
  155. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  156. package/lib/module/web/handlers/IGestureHandler.js +2 -0
  157. package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
  158. package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
  159. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  160. package/lib/module/web/interfaces.js +0 -20
  161. package/lib/module/web/interfaces.js.map +1 -1
  162. package/lib/module/web/tools/EventManager.js.map +1 -1
  163. package/lib/module/web/tools/GestureHandlerOrchestrator.js +116 -117
  164. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  165. package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
  166. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  167. package/lib/module/web/tools/InteractionManager.js +9 -3
  168. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  169. package/lib/module/web/tools/NodeManager.js.map +1 -1
  170. package/lib/module/web/tools/PointerEventManager.js +75 -27
  171. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  172. package/lib/module/web/tools/TouchEventManager.js +28 -6
  173. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  174. package/lib/module/web/tools/Vector.js +47 -0
  175. package/lib/module/web/tools/Vector.js.map +1 -0
  176. package/lib/module/web/utils.js +4 -0
  177. package/lib/module/web/utils.js.map +1 -1
  178. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  179. package/lib/typescript/Directions.d.ts +7 -0
  180. package/lib/typescript/PointerType.d.ts +6 -0
  181. package/lib/typescript/RNGestureHandlerModule.web.d.ts +4 -39
  182. package/lib/typescript/components/DrawerLayout.d.ts +1 -2
  183. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
  184. package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
  185. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
  186. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
  187. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
  188. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  189. package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -0
  190. package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +2 -0
  191. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +13 -2
  192. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  193. package/lib/typescript/handlers/gestures/gesture.d.ts +1 -2
  194. package/lib/typescript/index.d.ts +2 -1
  195. package/lib/typescript/mocks.d.ts +1 -0
  196. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -6
  197. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
  198. package/lib/typescript/web/Gestures.d.ts +36 -0
  199. package/lib/typescript/web/constants.d.ts +1 -6
  200. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
  201. package/lib/typescript/web/handlers/GestureHandler.d.ts +12 -9
  202. package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
  203. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  204. package/lib/typescript/web/interfaces.d.ts +9 -16
  205. package/lib/typescript/web/tools/EventManager.d.ts +15 -12
  206. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
  207. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
  208. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
  209. package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
  210. package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
  211. package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
  212. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
  213. package/lib/typescript/web/tools/Vector.d.ts +15 -0
  214. package/lib/typescript/web/utils.d.ts +6 -4
  215. package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
  216. package/package.json +2 -1
  217. package/src/Directions.ts +21 -4
  218. package/src/PointerType.ts +6 -0
  219. package/src/RNGestureHandlerModule.web.ts +3 -44
  220. package/src/components/DrawerLayout.tsx +1 -1
  221. package/src/components/GestureHandlerRootView.android.tsx +13 -5
  222. package/src/components/GestureHandlerRootView.tsx +10 -5
  223. package/src/components/GestureHandlerRootView.web.tsx +10 -5
  224. package/src/components/Swipeable.tsx +2 -0
  225. package/src/components/touchables/GenericTouchable.tsx +3 -0
  226. package/src/getShadowNodeFromRef.ts +28 -6
  227. package/src/handlers/createHandler.tsx +14 -2
  228. package/src/handlers/customDirectEventTypes.ts +2 -0
  229. package/src/handlers/customDirectEventTypes.web.ts +5 -0
  230. package/src/handlers/gestureHandlerCommon.ts +30 -1
  231. package/src/handlers/gestures/GestureDetector.tsx +15 -0
  232. package/src/handlers/gestures/gesture.ts +1 -1
  233. package/src/index.ts +2 -1
  234. package/src/mocks.ts +2 -0
  235. package/src/specs/NativeRNGestureHandlerModule.ts +8 -8
  236. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
  237. package/src/web/Gestures.ts +41 -0
  238. package/src/web/constants.ts +1 -7
  239. package/src/web/handlers/FlingGestureHandler.ts +54 -24
  240. package/src/web/handlers/GestureHandler.ts +17 -12
  241. package/src/web/handlers/IGestureHandler.ts +50 -0
  242. package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
  243. package/src/web/interfaces.ts +15 -17
  244. package/src/web/tools/EventManager.ts +16 -14
  245. package/src/web/tools/GestureHandlerDelegate.ts +3 -4
  246. package/src/web/tools/GestureHandlerOrchestrator.ts +162 -147
  247. package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
  248. package/src/web/tools/InteractionManager.ts +18 -12
  249. package/src/web/tools/NodeManager.ts +4 -3
  250. package/src/web/tools/PointerEventManager.ts +189 -154
  251. package/src/web/tools/TouchEventManager.ts +128 -120
  252. package/src/web/tools/Vector.ts +60 -0
  253. package/src/web/utils.ts +16 -4
  254. package/src/web_hammer/NodeManager.ts +1 -1
@@ -1,25 +1,28 @@
1
1
  import { State } from '../../State';
2
- import { Direction } from '../constants';
2
+ import { DiagonalDirections, Directions } from '../../Directions';
3
3
  import { AdaptedEvent, Config } from '../interfaces';
4
4
 
5
5
  import GestureHandler from './GestureHandler';
6
+ import Vector from '../tools/Vector';
7
+ import { coneToDeviation } from '../utils';
6
8
 
7
9
  const DEFAULT_MAX_DURATION_MS = 800;
8
- const DEFAULT_MIN_ACCEPTABLE_DELTA = 32;
9
- const DEFAULT_DIRECTION = Direction.RIGHT;
10
+ const DEFAULT_MIN_VELOCITY = 700;
11
+ const DEFAULT_ALIGNMENT_CONE = 30;
12
+ const DEFAULT_DIRECTION = Directions.RIGHT;
10
13
  const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
11
14
 
15
+ const AXIAL_DEVIATION_COSINE = coneToDeviation(DEFAULT_ALIGNMENT_CONE);
16
+ const DIAGONAL_DEVIATION_COSINE = coneToDeviation(90 - DEFAULT_ALIGNMENT_CONE);
17
+
12
18
  export default class FlingGestureHandler extends GestureHandler {
13
19
  private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;
14
- private direction = DEFAULT_DIRECTION;
20
+ private direction: Directions = DEFAULT_DIRECTION;
15
21
 
16
22
  private maxDurationMs = DEFAULT_MAX_DURATION_MS;
17
- private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;
23
+ private minVelocity = DEFAULT_MIN_VELOCITY;
18
24
  private delayTimeout!: number;
19
25
 
20
- private startX = 0;
21
- private startY = 0;
22
-
23
26
  private maxNumberOfPointersSimultaneously = 0;
24
27
  private keyPointer = NaN;
25
28
 
@@ -40,9 +43,6 @@ export default class FlingGestureHandler extends GestureHandler {
40
43
  }
41
44
 
42
45
  private startFling(): void {
43
- this.startX = this.tracker.getLastX(this.keyPointer);
44
- this.startY = this.tracker.getLastY(this.keyPointer);
45
-
46
46
  this.begin();
47
47
 
48
48
  this.maxNumberOfPointersSimultaneously = 1;
@@ -51,21 +51,43 @@ export default class FlingGestureHandler extends GestureHandler {
51
51
  }
52
52
 
53
53
  private tryEndFling(): boolean {
54
+ const velocityVector = Vector.fromVelocity(this.tracker, this.keyPointer);
55
+
56
+ const getAlignment = (
57
+ direction: Directions | DiagonalDirections,
58
+ minimalAlignmentCosine: number
59
+ ) => {
60
+ return (
61
+ (direction & this.direction) === direction &&
62
+ velocityVector.isSimilar(
63
+ Vector.fromDirection(direction),
64
+ minimalAlignmentCosine
65
+ )
66
+ );
67
+ };
68
+
69
+ const axialDirectionsList = Object.values(Directions);
70
+ const diagonalDirectionsList = Object.values(DiagonalDirections);
71
+
72
+ // list of alignments to all activated directions
73
+ const axialAlignmentList = axialDirectionsList.map((direction) =>
74
+ getAlignment(direction, AXIAL_DEVIATION_COSINE)
75
+ );
76
+
77
+ const diagonalAlignmentList = diagonalDirectionsList.map((direction) =>
78
+ getAlignment(direction, DIAGONAL_DEVIATION_COSINE)
79
+ );
80
+
81
+ const isAligned =
82
+ axialAlignmentList.some(Boolean) || diagonalAlignmentList.some(Boolean);
83
+
84
+ const isFast = velocityVector.magnitude > this.minVelocity;
85
+
54
86
  if (
55
87
  this.maxNumberOfPointersSimultaneously ===
56
88
  this.numberOfPointersRequired &&
57
- ((this.direction & Direction.RIGHT &&
58
- this.tracker.getLastX(this.keyPointer) - this.startX >
59
- this.minAcceptableDelta) ||
60
- (this.direction & Direction.LEFT &&
61
- this.startX - this.tracker.getLastX(this.keyPointer) >
62
- this.minAcceptableDelta) ||
63
- (this.direction & Direction.UP &&
64
- this.startY - this.tracker.getLastY(this.keyPointer) >
65
- this.minAcceptableDelta) ||
66
- (this.direction & Direction.DOWN &&
67
- this.tracker.getLastY(this.keyPointer) - this.startY >
68
- this.minAcceptableDelta))
89
+ isAligned &&
90
+ isFast
69
91
  ) {
70
92
  clearTimeout(this.delayTimeout);
71
93
  this.activate();
@@ -120,7 +142,7 @@ export default class FlingGestureHandler extends GestureHandler {
120
142
  }
121
143
  }
122
144
 
123
- protected onPointerMove(event: AdaptedEvent): void {
145
+ private pointerMoveAction(event: AdaptedEvent): void {
124
146
  this.tracker.track(event);
125
147
 
126
148
  if (this.currentState !== State.BEGAN) {
@@ -128,10 +150,18 @@ export default class FlingGestureHandler extends GestureHandler {
128
150
  }
129
151
 
130
152
  this.tryEndFling();
153
+ }
131
154
 
155
+ protected onPointerMove(event: AdaptedEvent): void {
156
+ this.pointerMoveAction(event);
132
157
  super.onPointerMove(event);
133
158
  }
134
159
 
160
+ protected onPointerOutOfBounds(event: AdaptedEvent): void {
161
+ this.pointerMoveAction(event);
162
+ super.onPointerOutOfBounds(event);
163
+ }
164
+
135
165
  protected onPointerUp(event: AdaptedEvent): void {
136
166
  super.onPointerUp(event);
137
167
  this.onUp(event);
@@ -7,18 +7,19 @@ import {
7
7
  ResultEvent,
8
8
  PointerData,
9
9
  ResultTouchEvent,
10
- PointerType,
11
10
  TouchEventType,
12
11
  EventTypes,
13
- MouseButton,
14
12
  } from '../interfaces';
15
13
  import EventManager from '../tools/EventManager';
16
14
  import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
17
15
  import InteractionManager from '../tools/InteractionManager';
18
16
  import PointerTracker, { TrackerElement } from '../tools/PointerTracker';
19
17
  import { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
18
+ import IGestureHandler from './IGestureHandler';
19
+ import { MouseButton } from '../../handlers/gestureHandlerCommon';
20
+ import { PointerType } from '../../PointerType';
20
21
 
21
- export default abstract class GestureHandler {
22
+ export default abstract class GestureHandler implements IGestureHandler {
22
23
  private lastSentState: State | null = null;
23
24
  protected currentState: State = State.UNDETERMINED;
24
25
 
@@ -38,11 +39,13 @@ export default abstract class GestureHandler {
38
39
  protected awaiting = false;
39
40
  protected active = false;
40
41
  protected shouldResetProgress = false;
41
- protected pointerType: PointerType = PointerType.NONE;
42
+ protected pointerType: PointerType = PointerType.MOUSE;
42
43
 
43
- protected delegate: GestureHandlerDelegate<unknown>;
44
+ protected delegate: GestureHandlerDelegate<unknown, IGestureHandler>;
44
45
 
45
- public constructor(delegate: GestureHandlerDelegate<unknown>) {
46
+ public constructor(
47
+ delegate: GestureHandlerDelegate<unknown, IGestureHandler>
48
+ ) {
46
49
  this.delegate = delegate;
47
50
  }
48
51
 
@@ -71,7 +74,8 @@ export default abstract class GestureHandler {
71
74
  manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
72
75
  manager.setOnPointerMoveOver(this.onPointerMoveOver.bind(this));
73
76
  manager.setOnPointerMoveOut(this.onPointerMoveOut.bind(this));
74
- manager.setListeners();
77
+
78
+ manager.registerListeners();
75
79
  }
76
80
 
77
81
  //
@@ -229,7 +233,7 @@ export default abstract class GestureHandler {
229
233
  this.activationIndex = value;
230
234
  }
231
235
 
232
- public shouldWaitForHandlerFailure(handler: GestureHandler): boolean {
236
+ public shouldWaitForHandlerFailure(handler: IGestureHandler): boolean {
233
237
  if (handler === this) {
234
238
  return false;
235
239
  }
@@ -240,7 +244,7 @@ export default abstract class GestureHandler {
240
244
  );
241
245
  }
242
246
 
243
- public shouldRequireToWaitForFailure(handler: GestureHandler): boolean {
247
+ public shouldRequireToWaitForFailure(handler: IGestureHandler): boolean {
244
248
  if (handler === this) {
245
249
  return false;
246
250
  }
@@ -251,7 +255,7 @@ export default abstract class GestureHandler {
251
255
  );
252
256
  }
253
257
 
254
- public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {
258
+ public shouldRecognizeSimultaneously(handler: IGestureHandler): boolean {
255
259
  if (handler === this) {
256
260
  return true;
257
261
  }
@@ -262,7 +266,7 @@ export default abstract class GestureHandler {
262
266
  );
263
267
  }
264
268
 
265
- public shouldBeCancelledByOther(handler: GestureHandler): boolean {
269
+ public shouldBeCancelledByOther(handler: IGestureHandler): boolean {
266
270
  if (handler === this) {
267
271
  return false;
268
272
  }
@@ -421,6 +425,7 @@ export default abstract class GestureHandler {
421
425
  handlerTag: this.handlerTag,
422
426
  target: this.viewRef,
423
427
  oldState: newState !== oldState ? oldState : undefined,
428
+ pointerType: this.pointerType,
424
429
  },
425
430
  timeStamp: Date.now(),
426
431
  };
@@ -771,7 +776,7 @@ export default abstract class GestureHandler {
771
776
  return this.config;
772
777
  }
773
778
 
774
- public getDelegate(): GestureHandlerDelegate<unknown> {
779
+ public getDelegate(): GestureHandlerDelegate<unknown, IGestureHandler> {
775
780
  return this.delegate;
776
781
  }
777
782
 
@@ -0,0 +1,50 @@
1
+ import type { PointerType } from '../../PointerType';
2
+ import type { MouseButton } from '../../handlers/gestureHandlerCommon';
3
+ import type { State } from '../../State';
4
+ import type { Config } from '../interfaces';
5
+ import type EventManager from '../tools/EventManager';
6
+ import type { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
7
+ import type PointerTracker from '../tools/PointerTracker';
8
+
9
+ export default interface IGestureHandler {
10
+ getTag: () => number;
11
+ getState: () => State;
12
+ getConfig: () => Config;
13
+ getDelegate: () => GestureHandlerDelegate<unknown, this>;
14
+
15
+ attachEventManager: (manager: EventManager<unknown>) => void;
16
+
17
+ isButtonInConfig: (
18
+ mouseButton: MouseButton | undefined
19
+ ) => boolean | number | undefined;
20
+ getPointerType: () => PointerType;
21
+
22
+ getTracker: () => PointerTracker;
23
+ getTrackedPointersID: () => number[];
24
+
25
+ begin: () => void;
26
+ activate: () => void;
27
+ end: () => void;
28
+ fail: () => void;
29
+ cancel: () => void;
30
+
31
+ reset: () => void;
32
+ isEnabled: () => boolean;
33
+ isActive: () => boolean;
34
+ setActive: (value: boolean) => void;
35
+ isAwaiting: () => boolean;
36
+ setAwaiting: (value: boolean) => void;
37
+ setActivationIndex: (value: number) => void;
38
+ setShouldResetProgress: (value: boolean) => void;
39
+
40
+ shouldWaitForHandlerFailure: (handler: IGestureHandler) => boolean;
41
+ shouldRequireToWaitForFailure: (handler: IGestureHandler) => boolean;
42
+ shouldRecognizeSimultaneously: (handler: IGestureHandler) => boolean;
43
+ shouldBeCancelledByOther: (handler: IGestureHandler) => boolean;
44
+
45
+ sendEvent: (newState: State, oldState: State) => void;
46
+
47
+ updateGestureConfig: (config: Config) => void;
48
+
49
+ isButton?: () => boolean;
50
+ }
@@ -28,15 +28,10 @@ export default class NativeViewGestureHandler extends GestureHandler {
28
28
  const view = this.delegate.getView() as HTMLElement;
29
29
 
30
30
  view.style['touchAction'] = 'auto';
31
-
32
31
  //@ts-ignore Turns on defualt touch behavior on Safari
33
32
  view.style['WebkitTouchCallout'] = 'auto';
34
33
 
35
- if (view.hasAttribute('role')) {
36
- this.buttonRole = true;
37
- } else {
38
- this.buttonRole = false;
39
- }
34
+ this.buttonRole = view.getAttribute('role') === 'button';
40
35
  }
41
36
 
42
37
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
@@ -164,4 +159,8 @@ export default class NativeViewGestureHandler extends GestureHandler {
164
159
  public disallowsInterruption(): boolean {
165
160
  return this.disallowInterruption;
166
161
  }
162
+
163
+ public isButton(): boolean {
164
+ return this.buttonRole;
165
+ }
167
166
  }
@@ -1,6 +1,12 @@
1
- import { UserSelect, ActiveCursor } from '../handlers/gestureHandlerCommon';
1
+ import {
2
+ UserSelect,
3
+ ActiveCursor,
4
+ MouseButton,
5
+ TouchAction,
6
+ } from '../handlers/gestureHandlerCommon';
2
7
  import { Directions } from '../Directions';
3
8
  import { State } from '../State';
9
+ import { PointerType } from '../PointerType';
4
10
 
5
11
  export interface HitSlop {
6
12
  left?: number;
@@ -22,6 +28,7 @@ type ConfigArgs =
22
28
  | boolean
23
29
  | HitSlop
24
30
  | UserSelect
31
+ | TouchAction
25
32
  | ActiveCursor
26
33
  | Directions
27
34
  | Handler[]
@@ -39,6 +46,7 @@ export interface Config extends Record<string, ConfigArgs> {
39
46
  activeCursor?: ActiveCursor;
40
47
  mouseButton?: MouseButton;
41
48
  enableContextMenu?: boolean;
49
+ touchAction?: TouchAction;
42
50
 
43
51
  activateAfterLongPress?: number;
44
52
  failOffsetXStart?: number;
@@ -79,6 +87,12 @@ interface NativeEvent extends Record<string, NativeEventArgs> {
79
87
  handlerTag: number;
80
88
  target: number;
81
89
  oldState?: State;
90
+ pointerType: PointerType;
91
+ }
92
+
93
+ export interface Point {
94
+ x: number;
95
+ y: number;
82
96
  }
83
97
 
84
98
  export interface PointerData {
@@ -131,15 +145,6 @@ export interface AdaptedEvent {
131
145
  touchEventType?: TouchEventType;
132
146
  }
133
147
 
134
- export enum MouseButton {
135
- LEFT = 1,
136
- MIDDLE = 2,
137
- RIGHT = 4,
138
- BUTTON_4 = 8,
139
- BUTTON_5 = 16,
140
- ALL = 31,
141
- }
142
-
143
148
  export enum EventTypes {
144
149
  DOWN,
145
150
  ADDITIONAL_POINTER_DOWN,
@@ -158,10 +163,3 @@ export enum TouchEventType {
158
163
  UP,
159
164
  CANCELLED,
160
165
  }
161
-
162
- export enum PointerType {
163
- NONE = 'none',
164
- MOUSE = 'mouse',
165
- TOUCH = 'touch',
166
- PEN = 'pen',
167
- }
@@ -1,6 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/no-empty-function */
2
2
  import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
3
3
 
4
+ type PointerEventCallback = (event: AdaptedEvent) => void;
5
+
4
6
  export default abstract class EventManager<T> {
5
7
  protected readonly view: T;
6
8
  protected pointersInBounds: number[] = [];
@@ -11,7 +13,9 @@ export default abstract class EventManager<T> {
11
13
  this.activePointersCounter = 0;
12
14
  }
13
15
 
14
- public abstract setListeners(): void;
16
+ public abstract registerListeners(): void;
17
+ public abstract unregisterListeners(): void;
18
+
15
19
  protected abstract mapEvent(
16
20
  event: Event,
17
21
  eventType: EventTypes,
@@ -36,39 +40,37 @@ export default abstract class EventManager<T> {
36
40
  protected onPointerMoveOver(_event: AdaptedEvent): void {}
37
41
  protected onPointerMoveOut(_event: AdaptedEvent): void {}
38
42
 
39
- public setOnPointerDown(callback: (event: AdaptedEvent) => void): void {
43
+ public setOnPointerDown(callback: PointerEventCallback): void {
40
44
  this.onPointerDown = callback;
41
45
  }
42
- public setOnPointerAdd(callback: (event: AdaptedEvent) => void): void {
46
+ public setOnPointerAdd(callback: PointerEventCallback): void {
43
47
  this.onPointerAdd = callback;
44
48
  }
45
- public setOnPointerUp(callback: (event: AdaptedEvent) => void): void {
49
+ public setOnPointerUp(callback: PointerEventCallback): void {
46
50
  this.onPointerUp = callback;
47
51
  }
48
- public setOnPointerRemove(callback: (event: AdaptedEvent) => void): void {
52
+ public setOnPointerRemove(callback: PointerEventCallback): void {
49
53
  this.onPointerRemove = callback;
50
54
  }
51
- public setOnPointerMove(callback: (event: AdaptedEvent) => void): void {
55
+ public setOnPointerMove(callback: PointerEventCallback): void {
52
56
  this.onPointerMove = callback;
53
57
  }
54
- public setOnPointerLeave(callback: (event: AdaptedEvent) => void): void {
58
+ public setOnPointerLeave(callback: PointerEventCallback): void {
55
59
  this.onPointerLeave = callback;
56
60
  }
57
- public setOnPointerEnter(callback: (event: AdaptedEvent) => void): void {
61
+ public setOnPointerEnter(callback: PointerEventCallback): void {
58
62
  this.onPointerEnter = callback;
59
63
  }
60
- public setOnPointerCancel(callback: (event: AdaptedEvent) => void): void {
64
+ public setOnPointerCancel(callback: PointerEventCallback): void {
61
65
  this.onPointerCancel = callback;
62
66
  }
63
- public setOnPointerOutOfBounds(
64
- callback: (event: AdaptedEvent) => void
65
- ): void {
67
+ public setOnPointerOutOfBounds(callback: PointerEventCallback): void {
66
68
  this.onPointerOutOfBounds = callback;
67
69
  }
68
- public setOnPointerMoveOver(callback: (event: AdaptedEvent) => void): void {
70
+ public setOnPointerMoveOver(callback: PointerEventCallback): void {
69
71
  this.onPointerMoveOver = callback;
70
72
  }
71
- public setOnPointerMoveOut(callback: (event: AdaptedEvent) => void): void {
73
+ public setOnPointerMoveOut(callback: PointerEventCallback): void {
72
74
  this.onPointerMoveOut = callback;
73
75
  }
74
76
 
@@ -1,4 +1,3 @@
1
- import type GestureHandler from '../handlers/GestureHandler';
2
1
  import { Config } from '../interfaces';
3
2
 
4
3
  export interface MeasureResult {
@@ -8,10 +7,10 @@ export interface MeasureResult {
8
7
  height: number;
9
8
  }
10
9
 
11
- export interface GestureHandlerDelegate<T> {
12
- getView(): T;
10
+ export interface GestureHandlerDelegate<TComponent, THandler> {
11
+ getView(): TComponent;
13
12
 
14
- init(viewRef: number, handler: GestureHandler): void;
13
+ init(viewRef: number, handler: THandler): void;
15
14
  isPointerInBounds({ x, y }: { x: number; y: number }): boolean;
16
15
  measureView(): MeasureResult;
17
16
  reset(): void;