react-native-gesture-handler 2.16.0-rc.0 → 2.16.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 (399) hide show
  1. package/README.md +1 -0
  2. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
  3. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
  4. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +2 -2
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +61 -24
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +17 -22
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +30 -11
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
  11. package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +4 -2
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
  19. package/apple/Handlers/RNLongPressHandler.m +5 -13
  20. package/apple/Handlers/RNPinchHandler.m +12 -1
  21. package/apple/RNGestureHandler.m +3 -1
  22. package/lib/commonjs/Directions.js +19 -6
  23. package/lib/commonjs/Directions.js.map +1 -1
  24. package/lib/commonjs/RNGestureHandlerModule.js +97 -4
  25. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  26. package/lib/commonjs/RNGestureHandlerModule.native.js +16 -0
  27. package/lib/commonjs/RNGestureHandlerModule.native.js.map +1 -0
  28. package/lib/commonjs/RNRenderer.js +5 -10
  29. package/lib/commonjs/RNRenderer.js.map +1 -1
  30. package/lib/commonjs/RNRenderer.native.js +16 -0
  31. package/lib/commonjs/RNRenderer.native.js.map +1 -0
  32. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  33. package/lib/commonjs/components/GestureComponents.js +19 -82
  34. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  35. package/lib/commonjs/components/GestureComponents.native.js +115 -0
  36. package/lib/commonjs/components/GestureComponents.native.js.map +1 -0
  37. package/lib/commonjs/components/GestureHandlerButton.js +13 -3
  38. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  39. package/lib/commonjs/components/GestureHandlerButton.native.js +14 -0
  40. package/lib/commonjs/components/GestureHandlerButton.native.js.map +1 -0
  41. package/lib/commonjs/components/GestureHandlerRootView.js +0 -6
  42. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  43. package/lib/commonjs/components/{GestureHandlerRootView.web.js → GestureHandlerRootView.native.js} +7 -1
  44. package/lib/commonjs/components/GestureHandlerRootView.native.js.map +1 -0
  45. package/lib/commonjs/components/Swipeable.js +3 -1
  46. package/lib/commonjs/components/Swipeable.js.map +1 -1
  47. package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
  48. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  49. package/lib/commonjs/getReactNativeVersion.js +1 -12
  50. package/lib/commonjs/getReactNativeVersion.js.map +1 -1
  51. package/lib/commonjs/getReactNativeVersion.native.js +22 -0
  52. package/lib/commonjs/getReactNativeVersion.native.js.map +1 -0
  53. package/lib/commonjs/getShadowNodeFromRef.js +5 -34
  54. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  55. package/lib/commonjs/getShadowNodeFromRef.native.js +44 -0
  56. package/lib/commonjs/getShadowNodeFromRef.native.js.map +1 -0
  57. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  58. package/lib/commonjs/handlers/PressabilityDebugView.js +5 -7
  59. package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -1
  60. package/lib/commonjs/handlers/PressabilityDebugView.native.js +14 -0
  61. package/lib/commonjs/handlers/PressabilityDebugView.native.js.map +1 -0
  62. package/lib/commonjs/handlers/createHandler.js +11 -5
  63. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  64. package/lib/commonjs/handlers/customDirectEventTypes.js +11 -0
  65. package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
  66. package/lib/commonjs/handlers/customDirectEventTypes.native.js +14 -0
  67. package/lib/commonjs/handlers/customDirectEventTypes.native.js.map +1 -0
  68. package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
  69. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  70. package/lib/commonjs/handlers/gestures/GestureDetector.js +25 -0
  71. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  72. package/lib/commonjs/handlers/gestures/flingGesture.js +13 -0
  73. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -1
  74. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +17 -0
  75. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  76. package/lib/commonjs/handlers/gestures/gesture.js +135 -0
  77. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  78. package/lib/commonjs/handlers/gestures/gestureObjects.js +66 -0
  79. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -1
  80. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +1 -1
  81. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -1
  82. package/lib/commonjs/handlers/gestures/hoverGesture.js +1 -1
  83. package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
  84. package/lib/commonjs/handlers/gestures/longPressGesture.js +12 -0
  85. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  86. package/lib/commonjs/handlers/gestures/nativeGesture.js +10 -0
  87. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -1
  88. package/lib/commonjs/handlers/gestures/panGesture.js +76 -0
  89. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  90. package/lib/commonjs/handlers/gestures/tapGesture.js +42 -0
  91. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
  92. package/lib/commonjs/index.js +8 -8
  93. package/lib/commonjs/index.js.map +1 -1
  94. package/lib/commonjs/mocks.js +2 -0
  95. package/lib/commonjs/mocks.js.map +1 -1
  96. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  97. package/lib/commonjs/utils.js +5 -1
  98. package/lib/commonjs/utils.js.map +1 -1
  99. package/lib/commonjs/web/Gestures.js +66 -0
  100. package/lib/commonjs/web/Gestures.js.map +1 -0
  101. package/lib/commonjs/web/constants.js +3 -8
  102. package/lib/commonjs/web/constants.js.map +1 -1
  103. package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
  104. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  105. package/lib/commonjs/web/handlers/GestureHandler.js +11 -9
  106. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  107. package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
  108. package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
  109. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
  110. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  111. package/lib/commonjs/web/handlers/PanGestureHandler.js +3 -1
  112. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  113. package/lib/commonjs/web/interfaces.js +1 -13
  114. package/lib/commonjs/web/interfaces.js.map +1 -1
  115. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  116. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +114 -115
  117. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  118. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
  119. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  120. package/lib/commonjs/web/tools/InteractionManager.js +12 -3
  121. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  122. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  123. package/lib/commonjs/web/tools/PointerEventManager.js +55 -27
  124. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  125. package/lib/commonjs/web/tools/TouchEventManager.js +26 -5
  126. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  127. package/lib/commonjs/web/tools/Vector.js +58 -0
  128. package/lib/commonjs/web/tools/Vector.js.map +1 -0
  129. package/lib/commonjs/web/utils.js +9 -1
  130. package/lib/commonjs/web/utils.js.map +1 -1
  131. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  132. package/lib/module/Directions.js +16 -4
  133. package/lib/module/Directions.js.map +1 -1
  134. package/lib/module/RNGestureHandlerModule.js +84 -4
  135. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  136. package/lib/module/RNGestureHandlerModule.native.js +5 -0
  137. package/lib/module/RNGestureHandlerModule.native.js.map +1 -0
  138. package/lib/module/RNRenderer.js +3 -3
  139. package/lib/module/RNRenderer.js.map +1 -1
  140. package/lib/module/RNRenderer.native.js +4 -0
  141. package/lib/module/RNRenderer.native.js.map +1 -0
  142. package/lib/module/components/DrawerLayout.js.map +1 -1
  143. package/lib/module/components/GestureComponents.js +18 -80
  144. package/lib/module/components/GestureComponents.js.map +1 -1
  145. package/lib/module/components/GestureComponents.native.js +90 -0
  146. package/lib/module/components/GestureComponents.native.js.map +1 -0
  147. package/lib/module/components/GestureHandlerButton.js +8 -2
  148. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  149. package/lib/module/components/GestureHandlerButton.native.js +3 -0
  150. package/lib/module/components/GestureHandlerButton.native.js.map +1 -0
  151. package/lib/module/components/GestureHandlerRootView.js +0 -5
  152. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  153. package/lib/module/components/{GestureHandlerRootView.web.js → GestureHandlerRootView.native.js} +6 -1
  154. package/lib/module/components/GestureHandlerRootView.native.js.map +1 -0
  155. package/lib/module/components/Swipeable.js +3 -1
  156. package/lib/module/components/Swipeable.js.map +1 -1
  157. package/lib/module/components/touchables/GenericTouchable.js +1 -0
  158. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  159. package/lib/module/getReactNativeVersion.js +1 -7
  160. package/lib/module/getReactNativeVersion.js.map +1 -1
  161. package/lib/module/getReactNativeVersion.native.js +10 -0
  162. package/lib/module/getReactNativeVersion.native.js.map +1 -0
  163. package/lib/module/getShadowNodeFromRef.js +4 -33
  164. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  165. package/lib/module/getShadowNodeFromRef.native.js +37 -0
  166. package/lib/module/getShadowNodeFromRef.native.js.map +1 -0
  167. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  168. package/lib/module/handlers/PressabilityDebugView.js +4 -2
  169. package/lib/module/handlers/PressabilityDebugView.js.map +1 -1
  170. package/lib/module/handlers/PressabilityDebugView.native.js +3 -0
  171. package/lib/module/handlers/PressabilityDebugView.native.js.map +1 -0
  172. package/lib/module/handlers/createHandler.js +11 -6
  173. package/lib/module/handlers/createHandler.js.map +1 -1
  174. package/lib/module/handlers/customDirectEventTypes.js +5 -0
  175. package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
  176. package/lib/module/handlers/customDirectEventTypes.native.js +3 -0
  177. package/lib/module/handlers/customDirectEventTypes.native.js.map +1 -0
  178. package/lib/module/handlers/gestureHandlerCommon.js +11 -1
  179. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  180. package/lib/module/handlers/gestures/GestureDetector.js +25 -0
  181. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  182. package/lib/module/handlers/gestures/flingGesture.js +13 -0
  183. package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
  184. package/lib/module/handlers/gestures/forceTouchGesture.js +17 -0
  185. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  186. package/lib/module/handlers/gestures/gesture.js +135 -0
  187. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  188. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  189. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
  190. package/lib/module/handlers/gestures/gestureStateManager.web.js +1 -1
  191. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -1
  192. package/lib/module/handlers/gestures/hoverGesture.js +1 -1
  193. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
  194. package/lib/module/handlers/gestures/longPressGesture.js +12 -0
  195. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  196. package/lib/module/handlers/gestures/nativeGesture.js +10 -0
  197. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
  198. package/lib/module/handlers/gestures/panGesture.js +76 -0
  199. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  200. package/lib/module/handlers/gestures/tapGesture.js +42 -0
  201. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  202. package/lib/module/index.js +1 -1
  203. package/lib/module/index.js.map +1 -1
  204. package/lib/module/mocks.js +2 -0
  205. package/lib/module/mocks.js.map +1 -1
  206. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  207. package/lib/module/utils.js +5 -1
  208. package/lib/module/utils.js.map +1 -1
  209. package/lib/module/web/Gestures.js +39 -0
  210. package/lib/module/web/Gestures.js.map +1 -0
  211. package/lib/module/web/constants.js +1 -6
  212. package/lib/module/web/constants.js.map +1 -1
  213. package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
  214. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  215. package/lib/module/web/handlers/GestureHandler.js +10 -9
  216. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  217. package/lib/module/web/handlers/IGestureHandler.js +2 -0
  218. package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
  219. package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
  220. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  221. package/lib/module/web/handlers/PanGestureHandler.js +3 -1
  222. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  223. package/lib/module/web/interfaces.js +0 -11
  224. package/lib/module/web/interfaces.js.map +1 -1
  225. package/lib/module/web/tools/EventManager.js.map +1 -1
  226. package/lib/module/web/tools/GestureHandlerOrchestrator.js +114 -115
  227. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  228. package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
  229. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  230. package/lib/module/web/tools/InteractionManager.js +9 -3
  231. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  232. package/lib/module/web/tools/NodeManager.js.map +1 -1
  233. package/lib/module/web/tools/PointerEventManager.js +53 -26
  234. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  235. package/lib/module/web/tools/TouchEventManager.js +26 -5
  236. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  237. package/lib/module/web/tools/Vector.js +47 -0
  238. package/lib/module/web/tools/Vector.js.map +1 -0
  239. package/lib/module/web/utils.js +2 -0
  240. package/lib/module/web/utils.js.map +1 -1
  241. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  242. package/lib/typescript/Directions.d.ts +7 -0
  243. package/lib/typescript/RNGestureHandlerModule.d.ts +15 -2
  244. package/lib/typescript/RNGestureHandlerModule.native.d.ts +2 -0
  245. package/lib/typescript/RNRenderer.d.ts +3 -1
  246. package/lib/typescript/RNRenderer.native.d.ts +1 -0
  247. package/lib/typescript/components/DrawerLayout.d.ts +1 -2
  248. package/lib/typescript/components/GestureComponents.d.ts +7 -21
  249. package/lib/typescript/components/GestureComponents.native.d.ts +22 -0
  250. package/lib/typescript/components/GestureHandlerButton.d.ts +3 -3
  251. package/lib/typescript/components/GestureHandlerButton.native.d.ts +4 -0
  252. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
  253. package/lib/typescript/getReactNativeVersion.d.ts +1 -4
  254. package/lib/typescript/getReactNativeVersion.native.d.ts +4 -0
  255. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
  256. package/lib/typescript/getShadowNodeFromRef.native.d.ts +1 -0
  257. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  258. package/lib/typescript/handlers/PanGestureHandler.d.ts +4 -4
  259. package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -1
  260. package/lib/typescript/handlers/PressabilityDebugView.native.d.ts +1 -0
  261. package/lib/typescript/handlers/customDirectEventTypes.d.ts +2 -0
  262. package/lib/typescript/handlers/customDirectEventTypes.native.d.ts +1 -0
  263. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -2
  264. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +38 -1
  265. package/lib/typescript/handlers/gestures/flingGesture.d.ts +11 -0
  266. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +14 -0
  267. package/lib/typescript/handlers/gestures/gesture.d.ts +114 -2
  268. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +57 -0
  269. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -1
  270. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +10 -0
  271. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +8 -0
  272. package/lib/typescript/handlers/gestures/panGesture.d.ts +67 -4
  273. package/lib/typescript/handlers/gestures/tapGesture.d.ts +35 -0
  274. package/lib/typescript/index.d.ts +1 -1
  275. package/lib/typescript/mocks.d.ts +1 -0
  276. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
  277. package/lib/typescript/web/Gestures.d.ts +36 -0
  278. package/lib/typescript/web/constants.d.ts +1 -6
  279. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
  280. package/lib/typescript/web/handlers/GestureHandler.d.ts +13 -11
  281. package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
  282. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  283. package/lib/typescript/web/interfaces.d.ts +8 -10
  284. package/lib/typescript/web/tools/EventManager.d.ts +15 -12
  285. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
  286. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
  287. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
  288. package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
  289. package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
  290. package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
  291. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
  292. package/lib/typescript/web/tools/Vector.d.ts +15 -0
  293. package/lib/typescript/web/utils.d.ts +4 -4
  294. package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
  295. package/package.json +4 -2
  296. package/src/Directions.ts +21 -4
  297. package/src/RNGestureHandlerModule.native.ts +5 -0
  298. package/src/RNGestureHandlerModule.ts +104 -4
  299. package/src/RNRenderer.native.ts +3 -0
  300. package/src/RNRenderer.ts +3 -3
  301. package/src/components/DrawerLayout.tsx +1 -1
  302. package/src/components/GestureComponents.native.tsx +148 -0
  303. package/src/components/GestureComponents.tsx +24 -131
  304. package/src/components/GestureHandlerButton.native.tsx +5 -0
  305. package/src/components/GestureHandlerButton.tsx +5 -4
  306. package/src/components/{GestureHandlerRootView.web.tsx → GestureHandlerRootView.native.tsx} +6 -0
  307. package/src/components/GestureHandlerRootView.tsx +0 -6
  308. package/src/components/Swipeable.tsx +2 -0
  309. package/src/components/touchables/GenericTouchable.tsx +3 -0
  310. package/src/getReactNativeVersion.native.ts +11 -0
  311. package/src/getReactNativeVersion.ts +1 -9
  312. package/src/getShadowNodeFromRef.native.ts +44 -0
  313. package/src/getShadowNodeFromRef.ts +4 -41
  314. package/src/handlers/PanGestureHandler.ts +8 -4
  315. package/src/handlers/PressabilityDebugView.native.tsx +2 -0
  316. package/src/handlers/PressabilityDebugView.tsx +4 -2
  317. package/src/handlers/createHandler.tsx +24 -14
  318. package/src/handlers/customDirectEventTypes.native.ts +2 -0
  319. package/src/handlers/customDirectEventTypes.ts +5 -0
  320. package/src/handlers/gestureHandlerCommon.ts +28 -1
  321. package/src/handlers/gestures/GestureDetector.tsx +62 -4
  322. package/src/handlers/gestures/flingGesture.ts +11 -0
  323. package/src/handlers/gestures/forceTouchGesture.ts +14 -0
  324. package/src/handlers/gestures/gesture.ts +114 -1
  325. package/src/handlers/gestures/gestureObjects.ts +57 -0
  326. package/src/handlers/gestures/gestureStateManager.web.ts +1 -1
  327. package/src/handlers/gestures/hoverGesture.ts +1 -1
  328. package/src/handlers/gestures/longPressGesture.ts +10 -0
  329. package/src/handlers/gestures/nativeGesture.ts +8 -0
  330. package/src/handlers/gestures/panGesture.ts +75 -4
  331. package/src/handlers/gestures/tapGesture.ts +35 -0
  332. package/src/index.ts +1 -1
  333. package/src/mocks.ts +2 -0
  334. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
  335. package/src/utils.ts +9 -2
  336. package/src/web/Gestures.ts +41 -0
  337. package/src/web/constants.ts +1 -7
  338. package/src/web/handlers/FlingGestureHandler.ts +54 -24
  339. package/src/web/handlers/GestureHandler.ts +23 -19
  340. package/src/web/handlers/IGestureHandler.ts +50 -0
  341. package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
  342. package/src/web/handlers/PanGestureHandler.ts +4 -0
  343. package/src/web/interfaces.ts +14 -10
  344. package/src/web/tools/EventManager.ts +16 -14
  345. package/src/web/tools/GestureHandlerDelegate.ts +3 -4
  346. package/src/web/tools/GestureHandlerOrchestrator.ts +160 -145
  347. package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
  348. package/src/web/tools/InteractionManager.ts +18 -12
  349. package/src/web/tools/NodeManager.ts +4 -3
  350. package/src/web/tools/PointerEventManager.ts +181 -166
  351. package/src/web/tools/TouchEventManager.ts +126 -114
  352. package/src/web/tools/Vector.ts +60 -0
  353. package/src/web/utils.ts +7 -4
  354. package/src/web_hammer/NodeManager.ts +1 -1
  355. package/lib/commonjs/RNGestureHandlerModule.web.js +0 -163
  356. package/lib/commonjs/RNGestureHandlerModule.web.js.map +0 -1
  357. package/lib/commonjs/RNRenderer.web.js +0 -11
  358. package/lib/commonjs/RNRenderer.web.js.map +0 -1
  359. package/lib/commonjs/components/GestureComponents.web.js +0 -52
  360. package/lib/commonjs/components/GestureComponents.web.js.map +0 -1
  361. package/lib/commonjs/components/GestureHandlerButton.web.js +0 -24
  362. package/lib/commonjs/components/GestureHandlerButton.web.js.map +0 -1
  363. package/lib/commonjs/components/GestureHandlerRootView.web.js.map +0 -1
  364. package/lib/commonjs/getReactNativeVersion.web.js +0 -11
  365. package/lib/commonjs/getReactNativeVersion.web.js.map +0 -1
  366. package/lib/commonjs/getShadowNodeFromRef.web.js +0 -15
  367. package/lib/commonjs/getShadowNodeFromRef.web.js.map +0 -1
  368. package/lib/commonjs/handlers/PressabilityDebugView.web.js +0 -12
  369. package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +0 -1
  370. package/lib/module/RNGestureHandlerModule.web.js +0 -122
  371. package/lib/module/RNGestureHandlerModule.web.js.map +0 -1
  372. package/lib/module/RNRenderer.web.js +0 -4
  373. package/lib/module/RNRenderer.web.js.map +0 -1
  374. package/lib/module/components/GestureComponents.web.js +0 -28
  375. package/lib/module/components/GestureComponents.web.js.map +0 -1
  376. package/lib/module/components/GestureHandlerButton.web.js +0 -9
  377. package/lib/module/components/GestureHandlerButton.web.js.map +0 -1
  378. package/lib/module/components/GestureHandlerRootView.web.js.map +0 -1
  379. package/lib/module/getReactNativeVersion.web.js +0 -4
  380. package/lib/module/getReactNativeVersion.web.js.map +0 -1
  381. package/lib/module/getShadowNodeFromRef.web.js +0 -8
  382. package/lib/module/getShadowNodeFromRef.web.js.map +0 -1
  383. package/lib/module/handlers/PressabilityDebugView.web.js +0 -5
  384. package/lib/module/handlers/PressabilityDebugView.web.js.map +0 -1
  385. package/lib/typescript/RNGestureHandlerModule.web.d.ts +0 -50
  386. package/lib/typescript/RNRenderer.web.d.ts +0 -3
  387. package/lib/typescript/components/GestureComponents.web.d.ts +0 -8
  388. package/lib/typescript/components/GestureHandlerButton.web.d.ts +0 -4
  389. package/lib/typescript/getReactNativeVersion.web.d.ts +0 -1
  390. package/lib/typescript/getShadowNodeFromRef.web.d.ts +0 -1
  391. package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +0 -1
  392. package/src/RNGestureHandlerModule.web.ts +0 -146
  393. package/src/RNRenderer.web.ts +0 -3
  394. package/src/components/GestureComponents.web.tsx +0 -41
  395. package/src/components/GestureHandlerButton.web.tsx +0 -6
  396. package/src/getReactNativeVersion.web.ts +0 -3
  397. package/src/getShadowNodeFromRef.web.ts +0 -7
  398. package/src/handlers/PressabilityDebugView.web.tsx +0 -4
  399. /package/lib/typescript/components/{GestureHandlerRootView.web.d.ts → GestureHandlerRootView.native.d.ts} +0 -0
@@ -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
  }
@@ -20,6 +20,7 @@ export default class PanGestureHandler extends GestureHandler {
20
20
  'failOffsetYEnd',
21
21
  'minVelocityX',
22
22
  'minVelocityY',
23
+ 'minVelocity',
23
24
  ];
24
25
 
25
26
  public velocityX = 0;
@@ -221,6 +222,9 @@ export default class PanGestureHandler extends GestureHandler {
221
222
  this.lastX = this.tracker.getLastAvgX();
222
223
  this.lastY = this.tracker.getLastAvgY();
223
224
 
225
+ this.startX = this.lastX;
226
+ this.startY = this.lastY;
227
+
224
228
  this.tryBegin(event);
225
229
  this.checkBegan();
226
230
  }
@@ -1,4 +1,9 @@
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';
4
9
  import { PointerType } from '../PointerType';
@@ -23,6 +28,7 @@ type ConfigArgs =
23
28
  | boolean
24
29
  | HitSlop
25
30
  | UserSelect
31
+ | TouchAction
26
32
  | ActiveCursor
27
33
  | Directions
28
34
  | Handler[]
@@ -40,6 +46,8 @@ export interface Config extends Record<string, ConfigArgs> {
40
46
  activeCursor?: ActiveCursor;
41
47
  mouseButton?: MouseButton;
42
48
  enableContextMenu?: boolean;
49
+ touchAction?: TouchAction;
50
+ manualActivation?: boolean;
43
51
 
44
52
  activateAfterLongPress?: number;
45
53
  failOffsetXStart?: number;
@@ -83,6 +91,11 @@ interface NativeEvent extends Record<string, NativeEventArgs> {
83
91
  pointerType: PointerType;
84
92
  }
85
93
 
94
+ export interface Point {
95
+ x: number;
96
+ y: number;
97
+ }
98
+
86
99
  export interface PointerData {
87
100
  id: number;
88
101
  x: number;
@@ -133,15 +146,6 @@ export interface AdaptedEvent {
133
146
  touchEventType?: TouchEventType;
134
147
  }
135
148
 
136
- export enum MouseButton {
137
- LEFT = 1,
138
- RIGHT = 2,
139
- MIDDLE = 4,
140
- BUTTON_4 = 8,
141
- BUTTON_5 = 16,
142
- ALL = 31,
143
- }
144
-
145
149
  export enum EventTypes {
146
150
  DOWN,
147
151
  ADDITIONAL_POINTER_DOWN,
@@ -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;
@@ -1,14 +1,15 @@
1
1
  import { PointerType } from '../../PointerType';
2
2
  import { State } from '../../State';
3
3
 
4
- import GestureHandler from '../handlers/GestureHandler';
4
+ import type IGestureHandler from '../handlers/IGestureHandler';
5
5
  import PointerTracker from './PointerTracker';
6
6
 
7
7
  export default class GestureHandlerOrchestrator {
8
8
  private static instance: GestureHandlerOrchestrator;
9
9
 
10
- private gestureHandlers: GestureHandler[] = [];
11
- private awaitingHandlers: GestureHandler[] = [];
10
+ private gestureHandlers: IGestureHandler[] = [];
11
+ private awaitingHandlers: IGestureHandler[] = [];
12
+ private awaitingHandlersTags: Set<number> = new Set();
12
13
 
13
14
  private handlingChangeSemaphore = 0;
14
15
  private activationIndex = 0;
@@ -23,94 +24,130 @@ export default class GestureHandlerOrchestrator {
23
24
  }
24
25
  }
25
26
 
26
- private cleanHandler(handler: GestureHandler): void {
27
+ private cleanHandler(handler: IGestureHandler): void {
27
28
  handler.reset();
28
29
  handler.setActive(false);
29
30
  handler.setAwaiting(false);
30
31
  handler.setActivationIndex(Number.MAX_VALUE);
31
32
  }
32
33
 
33
- public removeHandlerFromOrchestrator(handler: GestureHandler): void {
34
- this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);
35
- this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);
34
+ public removeHandlerFromOrchestrator(handler: IGestureHandler): void {
35
+ const indexInGestureHandlers = this.gestureHandlers.indexOf(handler);
36
+ const indexInAwaitingHandlers = this.awaitingHandlers.indexOf(handler);
37
+
38
+ if (indexInGestureHandlers >= 0) {
39
+ this.gestureHandlers.splice(indexInGestureHandlers, 1);
40
+ }
41
+
42
+ if (indexInAwaitingHandlers >= 0) {
43
+ this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);
44
+ this.awaitingHandlersTags.delete(handler.getTag());
45
+ }
36
46
  }
37
47
 
38
48
  private cleanupFinishedHandlers(): void {
49
+ const handlersToRemove = new Set<IGestureHandler>();
50
+
39
51
  for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
40
52
  const handler = this.gestureHandlers[i];
41
53
 
42
- if (!handler) {
43
- continue;
44
- }
45
54
  if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {
46
- this.gestureHandlers.splice(i, 1);
47
-
48
55
  this.cleanHandler(handler);
56
+ handlersToRemove.add(handler);
49
57
  }
50
58
  }
59
+
60
+ this.gestureHandlers = this.gestureHandlers.filter(
61
+ (handler) => !handlersToRemove.has(handler)
62
+ );
51
63
  }
52
64
 
53
- private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {
54
- let hasToWait = false;
55
- this.gestureHandlers.forEach((otherHandler) => {
56
- if (
57
- otherHandler &&
65
+ private hasOtherHandlerToWaitFor(handler: IGestureHandler): boolean {
66
+ const hasToWaitFor = (otherHandler: IGestureHandler) => {
67
+ return (
58
68
  !this.isFinished(otherHandler.getState()) &&
59
69
  this.shouldHandlerWaitForOther(handler, otherHandler)
60
- ) {
61
- hasToWait = true;
62
- return;
63
- }
64
- });
70
+ );
71
+ };
65
72
 
66
- return hasToWait;
73
+ return this.gestureHandlers.some(hasToWaitFor);
74
+ }
75
+
76
+ private shouldBeCancelledByFinishedHandler(
77
+ handler: IGestureHandler
78
+ ): boolean {
79
+ const shouldBeCancelled = (otherHandler: IGestureHandler) => {
80
+ return (
81
+ this.shouldHandlerWaitForOther(handler, otherHandler) &&
82
+ otherHandler.getState() === State.END
83
+ );
84
+ };
85
+
86
+ return this.gestureHandlers.some(shouldBeCancelled);
67
87
  }
68
88
 
69
- private tryActivate(handler: GestureHandler): void {
89
+ private tryActivate(handler: IGestureHandler): void {
90
+ if (this.shouldBeCancelledByFinishedHandler(handler)) {
91
+ handler.cancel();
92
+ return;
93
+ }
94
+
70
95
  if (this.hasOtherHandlerToWaitFor(handler)) {
71
96
  this.addAwaitingHandler(handler);
72
- } else if (
73
- handler.getState() !== State.CANCELLED &&
74
- handler.getState() !== State.FAILED
75
- ) {
76
- if (this.shouldActivate(handler)) {
77
- this.makeActive(handler);
78
- } else {
79
- switch (handler.getState()) {
80
- case State.ACTIVE:
81
- handler.fail();
82
- break;
83
- case State.BEGAN:
84
- handler.cancel();
85
- }
86
- }
97
+ return;
87
98
  }
88
- }
89
99
 
90
- private shouldActivate(handler: GestureHandler): boolean {
91
- for (const otherHandler of this.gestureHandlers) {
92
- if (this.shouldHandlerBeCancelledBy(handler, otherHandler)) {
93
- return false;
94
- }
100
+ const handlerState = handler.getState();
101
+
102
+ if (handlerState === State.CANCELLED || handlerState === State.FAILED) {
103
+ return;
95
104
  }
96
105
 
97
- return true;
106
+ if (this.shouldActivate(handler)) {
107
+ this.makeActive(handler);
108
+ return;
109
+ }
110
+
111
+ if (handlerState === State.ACTIVE) {
112
+ handler.fail();
113
+ return;
114
+ }
115
+
116
+ if (handlerState === State.BEGAN) {
117
+ handler.cancel();
118
+ }
98
119
  }
99
120
 
100
- private cleanupAwaitingHandlers(handler: GestureHandler): void {
101
- for (let i = 0; i < this.awaitingHandlers.length; ++i) {
102
- if (
103
- !this.awaitingHandlers[i].isAwaiting() &&
104
- this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)
105
- ) {
106
- this.cleanHandler(this.awaitingHandlers[i]);
107
- this.awaitingHandlers.splice(i, 1);
121
+ private shouldActivate(handler: IGestureHandler): boolean {
122
+ const shouldBeCancelledBy = (otherHandler: IGestureHandler) => {
123
+ return this.shouldHandlerBeCancelledBy(handler, otherHandler);
124
+ };
125
+
126
+ return !this.gestureHandlers.some(shouldBeCancelledBy);
127
+ }
128
+
129
+ private cleanupAwaitingHandlers(handler: IGestureHandler): void {
130
+ const shouldWait = (otherHandler: IGestureHandler) => {
131
+ return (
132
+ !otherHandler.isAwaiting() &&
133
+ this.shouldHandlerWaitForOther(otherHandler, handler)
134
+ );
135
+ };
136
+
137
+ for (const otherHandler of this.awaitingHandlers) {
138
+ if (shouldWait(otherHandler)) {
139
+ this.cleanHandler(otherHandler);
140
+ this.awaitingHandlersTags.delete(otherHandler.getTag());
108
141
  }
109
142
  }
143
+
144
+ this.awaitingHandlers = this.awaitingHandlers.filter((otherHandler) =>
145
+ this.awaitingHandlersTags.has(otherHandler.getTag())
146
+ );
110
147
  }
111
148
 
112
149
  public onHandlerStateChange(
113
- handler: GestureHandler,
150
+ handler: IGestureHandler,
114
151
  newState: State,
115
152
  oldState: State,
116
153
  sendIfDisabled?: boolean
@@ -122,23 +159,31 @@ export default class GestureHandlerOrchestrator {
122
159
  this.handlingChangeSemaphore += 1;
123
160
 
124
161
  if (this.isFinished(newState)) {
125
- this.awaitingHandlers.forEach((otherHandler) => {
126
- if (this.shouldHandlerWaitForOther(otherHandler, handler)) {
127
- if (newState === State.END) {
128
- otherHandler?.cancel();
129
- if (otherHandler.getState() === State.END) {
130
- // Handle edge case, where discrete gestures end immediately after activation thus
131
- // their state is set to END and when the gesture they are waiting for activates they
132
- // should be cancelled, however `cancel` was never sent as gestures were already in the END state.
133
- // Send synthetic BEGAN -> CANCELLED to properly handle JS logic
134
- otherHandler.sendEvent(State.CANCELLED, State.BEGAN);
135
- }
136
- otherHandler?.setAwaiting(false);
137
- } else {
138
- this.tryActivate(otherHandler);
139
- }
162
+ for (const otherHandler of this.awaitingHandlers) {
163
+ if (
164
+ !this.shouldHandlerWaitForOther(otherHandler, handler) ||
165
+ !this.awaitingHandlersTags.has(otherHandler.getTag())
166
+ ) {
167
+ continue;
168
+ }
169
+
170
+ if (newState !== State.END) {
171
+ this.tryActivate(otherHandler);
172
+ continue;
173
+ }
174
+
175
+ otherHandler.cancel();
176
+
177
+ if (otherHandler.getState() === State.END) {
178
+ // Handle edge case, where discrete gestures end immediately after activation thus
179
+ // their state is set to END and when the gesture they are waiting for activates they
180
+ // should be cancelled, however `cancel` was never sent as gestures were already in the END state.
181
+ // Send synthetic BEGAN -> CANCELLED to properly handle JS logic
182
+ otherHandler.sendEvent(State.CANCELLED, State.BEGAN);
140
183
  }
141
- });
184
+
185
+ otherHandler.setAwaiting(false);
186
+ }
142
187
  }
143
188
 
144
189
  if (newState === State.ACTIVE) {
@@ -163,12 +208,12 @@ export default class GestureHandlerOrchestrator {
163
208
 
164
209
  this.scheduleFinishedHandlersCleanup();
165
210
 
166
- if (this.awaitingHandlers.indexOf(handler) < 0) {
211
+ if (!this.awaitingHandlers.includes(handler)) {
167
212
  this.cleanupAwaitingHandlers(handler);
168
213
  }
169
214
  }
170
215
 
171
- private makeActive(handler: GestureHandler): void {
216
+ private makeActive(handler: IGestureHandler): void {
172
217
  const currentState = handler.getState();
173
218
 
174
219
  handler.setActive(true);
@@ -181,12 +226,11 @@ export default class GestureHandlerOrchestrator {
181
226
  }
182
227
  }
183
228
 
184
- this.awaitingHandlers.forEach((otherHandler) => {
229
+ for (const otherHandler of this.awaitingHandlers) {
185
230
  if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
186
- otherHandler?.cancel();
187
- otherHandler?.setAwaiting(true);
231
+ otherHandler.setAwaiting(false);
188
232
  }
189
- });
233
+ }
190
234
 
191
235
  handler.sendEvent(State.ACTIVE, State.BEGAN);
192
236
 
@@ -197,47 +241,31 @@ export default class GestureHandlerOrchestrator {
197
241
  }
198
242
  }
199
243
 
200
- if (handler.isAwaiting()) {
201
- handler.setAwaiting(false);
202
- for (let i = 0; i < this.awaitingHandlers.length; ++i) {
203
- if (this.awaitingHandlers[i] === handler) {
204
- this.awaitingHandlers.splice(i, 1);
205
- }
206
- }
244
+ if (!handler.isAwaiting()) {
245
+ return;
207
246
  }
208
- }
209
247
 
210
- private addAwaitingHandler(handler: GestureHandler): void {
211
- let alreadyExists = false;
248
+ handler.setAwaiting(false);
212
249
 
213
- this.awaitingHandlers.forEach((otherHandler) => {
214
- if (otherHandler === handler) {
215
- alreadyExists = true;
216
- return;
217
- }
218
- });
250
+ this.awaitingHandlers = this.awaitingHandlers.filter(
251
+ (otherHandler) => otherHandler !== handler
252
+ );
253
+ }
219
254
 
220
- if (alreadyExists) {
255
+ private addAwaitingHandler(handler: IGestureHandler): void {
256
+ if (this.awaitingHandlers.includes(handler)) {
221
257
  return;
222
258
  }
223
259
 
224
260
  this.awaitingHandlers.push(handler);
261
+ this.awaitingHandlersTags.add(handler.getTag());
225
262
 
226
263
  handler.setAwaiting(true);
227
264
  handler.setActivationIndex(this.activationIndex++);
228
265
  }
229
266
 
230
- public recordHandlerIfNotPresent(handler: GestureHandler): void {
231
- let alreadyExists = false;
232
-
233
- this.gestureHandlers.forEach((otherHandler) => {
234
- if (otherHandler === handler) {
235
- alreadyExists = true;
236
- return;
237
- }
238
- });
239
-
240
- if (alreadyExists) {
267
+ public recordHandlerIfNotPresent(handler: IGestureHandler): void {
268
+ if (this.gestureHandlers.includes(handler)) {
241
269
  return;
242
270
  }
243
271
 
@@ -249,8 +277,8 @@ export default class GestureHandlerOrchestrator {
249
277
  }
250
278
 
251
279
  private shouldHandlerWaitForOther(
252
- handler: GestureHandler,
253
- otherHandler: GestureHandler
280
+ handler: IGestureHandler,
281
+ otherHandler: IGestureHandler
254
282
  ): boolean {
255
283
  return (
256
284
  handler !== otherHandler &&
@@ -260,8 +288,8 @@ export default class GestureHandlerOrchestrator {
260
288
  }
261
289
 
262
290
  private canRunSimultaneously(
263
- gh1: GestureHandler,
264
- gh2: GestureHandler
291
+ gh1: IGestureHandler,
292
+ gh2: IGestureHandler
265
293
  ): boolean {
266
294
  return (
267
295
  gh1 === gh2 ||
@@ -271,17 +299,14 @@ export default class GestureHandlerOrchestrator {
271
299
  }
272
300
 
273
301
  private shouldHandlerBeCancelledBy(
274
- handler: GestureHandler,
275
- otherHandler: GestureHandler
302
+ handler: IGestureHandler,
303
+ otherHandler: IGestureHandler
276
304
  ): boolean {
277
305
  if (this.canRunSimultaneously(handler, otherHandler)) {
278
306
  return false;
279
307
  }
280
308
 
281
- if (
282
- handler !== otherHandler &&
283
- (handler.isAwaiting() || handler.getState() === State.ACTIVE)
284
- ) {
309
+ if (handler.isAwaiting() || handler.getState() === State.ACTIVE) {
285
310
  // For now it always returns false
286
311
  return handler.shouldBeCancelledByOther(otherHandler);
287
312
  }
@@ -300,8 +325,8 @@ export default class GestureHandlerOrchestrator {
300
325
  }
301
326
 
302
327
  private checkOverlap(
303
- handler: GestureHandler,
304
- otherHandler: GestureHandler
328
+ handler: IGestureHandler,
329
+ otherHandler: IGestureHandler
305
330
  ): boolean {
306
331
  // If handlers don't have common pointers, default return value is false.
307
332
  // However, if at least on pointer overlaps with both handlers, we return true
@@ -309,38 +334,28 @@ export default class GestureHandlerOrchestrator {
309
334
 
310
335
  // TODO: Find better way to handle that issue, for example by activation order and handler cancelling
311
336
 
312
- const handlerPointers: number[] = handler.getTrackedPointersID();
313
- const otherPointers: number[] = otherHandler.getTrackedPointersID();
314
-
315
- let overlap = false;
316
-
317
- handlerPointers.forEach((pointer: number) => {
337
+ const isPointerWithinBothBounds = (pointer: number) => {
318
338
  const handlerX: number = handler.getTracker().getLastX(pointer);
319
339
  const handlerY: number = handler.getTracker().getLastY(pointer);
320
340
 
321
- if (
322
- handler.getDelegate().isPointerInBounds({ x: handlerX, y: handlerY }) &&
323
- otherHandler
324
- .getDelegate()
325
- .isPointerInBounds({ x: handlerX, y: handlerY })
326
- ) {
327
- overlap = true;
328
- }
329
- });
341
+ const point = {
342
+ x: handlerX,
343
+ y: handlerY,
344
+ };
330
345
 
331
- otherPointers.forEach((pointer: number) => {
332
- const otherX: number = otherHandler.getTracker().getLastX(pointer);
333
- const otherY: number = otherHandler.getTracker().getLastY(pointer);
346
+ return (
347
+ handler.getDelegate().isPointerInBounds(point) &&
348
+ otherHandler.getDelegate().isPointerInBounds(point)
349
+ );
350
+ };
334
351
 
335
- if (
336
- handler.getDelegate().isPointerInBounds({ x: otherX, y: otherY }) &&
337
- otherHandler.getDelegate().isPointerInBounds({ x: otherX, y: otherY })
338
- ) {
339
- overlap = true;
340
- }
341
- });
352
+ const handlerPointers: number[] = handler.getTrackedPointersID();
353
+ const otherPointers: number[] = otherHandler.getTrackedPointersID();
342
354
 
343
- return overlap;
355
+ return (
356
+ handlerPointers.some(isPointerWithinBothBounds) ||
357
+ otherPointers.some(isPointerWithinBothBounds)
358
+ );
344
359
  }
345
360
 
346
361
  private isFinished(state: State): boolean {
@@ -355,8 +370,8 @@ export default class GestureHandlerOrchestrator {
355
370
  // This became a problem because handler was left at active state without any signal to end or fail
356
371
  // To handle this, when new touch event is received, we loop through active handlers and check which type of
357
372
  // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them
358
- public cancelMouseAndPenGestures(currentHandler: GestureHandler): void {
359
- this.gestureHandlers.forEach((handler: GestureHandler) => {
373
+ public cancelMouseAndPenGestures(currentHandler: IGestureHandler): void {
374
+ this.gestureHandlers.forEach((handler: IGestureHandler) => {
360
375
  if (
361
376
  handler.getPointerType() !== PointerType.MOUSE &&
362
377
  handler.getPointerType() !== PointerType.STYLUS