react-native-gesture-handler 2.16.0-rc.0 → 2.16.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,5 +1,5 @@
1
1
  import { findNodeHandle } from 'react-native';
2
- import type GestureHandler from '../handlers/GestureHandler';
2
+ import type IGestureHandler from '../handlers/IGestureHandler';
3
3
  import {
4
4
  GestureHandlerDelegate,
5
5
  MeasureResult,
@@ -9,20 +9,21 @@ import TouchEventManager from './TouchEventManager';
9
9
  import { State } from '../../State';
10
10
  import { isPointerInBounds } from '../utils';
11
11
  import EventManager from './EventManager';
12
- import { Config, MouseButton } from '../interfaces';
12
+ import { Config } from '../interfaces';
13
+ import { MouseButton } from '../../handlers/gestureHandlerCommon';
13
14
 
14
15
  export class GestureHandlerWebDelegate
15
- implements GestureHandlerDelegate<HTMLElement>
16
+ implements GestureHandlerDelegate<HTMLElement, IGestureHandler>
16
17
  {
17
18
  private view!: HTMLElement;
18
- private gestureHandler!: GestureHandler;
19
+ private gestureHandler!: IGestureHandler;
19
20
  private eventManagers: EventManager<unknown>[] = [];
20
21
 
21
22
  getView(): HTMLElement {
22
23
  return this.view;
23
24
  }
24
25
 
25
- init(viewRef: number, handler: GestureHandler): void {
26
+ init(viewRef: number, handler: IGestureHandler): void {
26
27
  if (!viewRef) {
27
28
  throw new Error(
28
29
  `Cannot find HTML Element for handler ${handler.getTag()}`
@@ -32,10 +33,6 @@ export class GestureHandlerWebDelegate
32
33
  this.gestureHandler = handler;
33
34
  this.view = findNodeHandle(viewRef) as unknown as HTMLElement;
34
35
 
35
- this.view.style['touchAction'] = 'none';
36
- //@ts-ignore This one disables default events on Safari
37
- this.view.style['WebkitTouchCallout'] = 'none';
38
-
39
36
  const config = handler.getConfig();
40
37
 
41
38
  this.addContextMenuListeners(config);
@@ -48,6 +45,10 @@ export class GestureHandlerWebDelegate
48
45
  this.view.style['userSelect'] = config.userSelect;
49
46
  }
50
47
 
48
+ this.view.style['touchAction'] = config.touchAction ?? 'none';
49
+ //@ts-ignore This one disables default events on Safari
50
+ this.view.style['WebkitTouchCallout'] = 'none';
51
+
51
52
  this.eventManagers.push(new PointerEventManager(this.view));
52
53
  this.eventManagers.push(new TouchEventManager(this.view));
53
54
 
@@ -150,5 +151,9 @@ export class GestureHandlerWebDelegate
150
151
 
151
152
  public destroy(config: Config): void {
152
153
  this.removeContextMenuListeners(config);
154
+
155
+ this.eventManagers.forEach((manager) => {
156
+ manager.unregisterListeners();
157
+ });
153
158
  }
154
159
  }
@@ -1,4 +1,5 @@
1
- import GestureHandler from '../handlers/GestureHandler';
1
+ import type IGestureHandler from '../handlers/IGestureHandler';
2
+ import { State } from '../../State';
2
3
  import { Config, Handler } from '../interfaces';
3
4
 
4
5
  export default class InteractionManager {
@@ -11,7 +12,7 @@ export default class InteractionManager {
11
12
  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
12
13
  private constructor() {}
13
14
 
14
- public configureInteractions(handler: GestureHandler, config: Config) {
15
+ public configureInteractions(handler: IGestureHandler, config: Config) {
15
16
  this.dropRelationsForHandlerWithTag(handler.getTag());
16
17
 
17
18
  if (config.waitFor) {
@@ -57,8 +58,8 @@ export default class InteractionManager {
57
58
  }
58
59
 
59
60
  public shouldWaitForHandlerFailure(
60
- handler: GestureHandler,
61
- otherHandler: GestureHandler
61
+ handler: IGestureHandler,
62
+ otherHandler: IGestureHandler
62
63
  ): boolean {
63
64
  const waitFor: number[] | undefined = this.waitForRelations.get(
64
65
  handler.getTag()
@@ -72,8 +73,8 @@ export default class InteractionManager {
72
73
  }
73
74
 
74
75
  public shouldRecognizeSimultaneously(
75
- handler: GestureHandler,
76
- otherHandler: GestureHandler
76
+ handler: IGestureHandler,
77
+ otherHandler: IGestureHandler
77
78
  ): boolean {
78
79
  const simultaneousHandlers: number[] | undefined =
79
80
  this.simultaneousRelations.get(handler.getTag());
@@ -86,8 +87,8 @@ export default class InteractionManager {
86
87
  }
87
88
 
88
89
  public shouldRequireHandlerToWaitForFailure(
89
- handler: GestureHandler,
90
- otherHandler: GestureHandler
90
+ handler: IGestureHandler,
91
+ otherHandler: IGestureHandler
91
92
  ): boolean {
92
93
  const waitFor: number[] | undefined = this.blocksHandlersRelations.get(
93
94
  handler.getTag()
@@ -101,11 +102,16 @@ export default class InteractionManager {
101
102
  }
102
103
 
103
104
  public shouldHandlerBeCancelledBy(
104
- _handler: GestureHandler,
105
- _otherHandler: GestureHandler
105
+ _handler: IGestureHandler,
106
+ otherHandler: IGestureHandler
106
107
  ): boolean {
107
- //TODO: Implement logic
108
- return false;
108
+ // We check constructor name instead of using `instanceof` in order do avoid circular dependencies
109
+ const isNativeHandler =
110
+ otherHandler.constructor.name === 'NativeViewGestureHandler';
111
+ const isActive = otherHandler.getState() === State.ACTIVE;
112
+ const isButton = otherHandler.isButton?.() === true;
113
+
114
+ return isNativeHandler && isActive && !isButton;
109
115
  }
110
116
 
111
117
  public dropRelationsForHandlerWithTag(handlerTag: number): void {
@@ -1,5 +1,6 @@
1
1
  import { ValueOf } from '../../typeUtils';
2
- import { Gestures } from '../../RNGestureHandlerModule.web';
2
+ import { Gestures } from '../Gestures';
3
+ import type IGestureHandler from '../handlers/IGestureHandler';
3
4
 
4
5
  // eslint-disable-next-line @typescript-eslint/no-extraneous-class
5
6
  export default abstract class NodeManager {
@@ -8,9 +9,9 @@ export default abstract class NodeManager {
8
9
  InstanceType<ValueOf<typeof Gestures>>
9
10
  > = {};
10
11
 
11
- public static getHandler(tag: number) {
12
+ public static getHandler(tag: number): IGestureHandler {
12
13
  if (tag in this.gestures) {
13
- return this.gestures[tag];
14
+ return this.gestures[tag] as IGestureHandler;
14
15
  }
15
16
 
16
17
  throw new Error(`No handler for tag ${tag}`);
@@ -1,5 +1,6 @@
1
- import { AdaptedEvent, EventTypes, MouseButton } from '../interfaces';
2
1
  import EventManager from './EventManager';
2
+ import { MouseButton } from '../../handlers/gestureHandlerCommon';
3
+ import { AdaptedEvent, EventTypes, Point } from '../interfaces';
3
4
  import { PointerTypeMapping, isPointerInBounds } from '../utils';
4
5
  import { PointerType } from '../../PointerType';
5
6
 
@@ -12,6 +13,7 @@ const PointerTypes = {
12
13
  export default class PointerEventManager extends EventManager<HTMLElement> {
13
14
  private trackedPointers = new Set<number>();
14
15
  private readonly mouseButtonsMapper = new Map<number, MouseButton>();
16
+ private lastPosition: Point;
15
17
 
16
18
  constructor(view: HTMLElement) {
17
19
  super(view);
@@ -21,200 +23,213 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
21
23
  this.mouseButtonsMapper.set(2, MouseButton.RIGHT);
22
24
  this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);
23
25
  this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);
26
+
27
+ this.lastPosition = {
28
+ x: -Infinity,
29
+ y: -Infinity,
30
+ };
24
31
  }
25
32
 
26
- public setListeners(): void {
27
- this.view.addEventListener('pointerdown', (event: PointerEvent): void => {
28
- if (event.pointerType === PointerTypes.Touch) {
29
- return;
30
- }
31
- if (
32
- !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })
33
- ) {
34
- return;
35
- }
33
+ private pointerDownCallback = (event: PointerEvent) => {
34
+ if (event.pointerType === PointerTypes.Touch) {
35
+ return;
36
+ }
37
+ if (!isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })) {
38
+ return;
39
+ }
40
+
41
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
42
+ const target = event.target as HTMLElement;
43
+
44
+ if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
45
+ target.setPointerCapture(adaptedEvent.pointerId);
46
+ }
47
+
48
+ this.markAsInBounds(adaptedEvent.pointerId);
49
+ this.trackedPointers.add(adaptedEvent.pointerId);
50
+
51
+ if (++this.activePointersCounter > 1) {
52
+ adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
53
+ this.onPointerAdd(adaptedEvent);
54
+ } else {
55
+ this.onPointerDown(adaptedEvent);
56
+ }
57
+ };
58
+
59
+ private pointerUpCallback = (event: PointerEvent) => {
60
+ if (event.pointerType === PointerTypes.Touch) {
61
+ return;
62
+ }
63
+
64
+ // When we call reset on gesture handlers, it also resets their event managers
65
+ // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
66
+ // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
67
+ // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
68
+ if (this.activePointersCounter === 0) {
69
+ return;
70
+ }
71
+
72
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
73
+ const target = event.target as HTMLElement;
74
+
75
+ if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
76
+ target.releasePointerCapture(adaptedEvent.pointerId);
77
+ }
78
+
79
+ this.markAsOutOfBounds(adaptedEvent.pointerId);
80
+ this.trackedPointers.delete(adaptedEvent.pointerId);
81
+
82
+ if (--this.activePointersCounter > 0) {
83
+ adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
84
+ this.onPointerRemove(adaptedEvent);
85
+ } else {
86
+ this.onPointerUp(adaptedEvent);
87
+ }
88
+ };
89
+
90
+ private pointerMoveCallback = (event: PointerEvent) => {
91
+ if (event.pointerType === PointerTypes.Touch) {
92
+ return;
93
+ }
94
+
95
+ // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
96
+ // it constantly sends events, even though there was no change in position. To fix that we check whether
97
+ // pointer has actually moved and if not, we do not send event.
98
+ if (
99
+ event.pointerType === PointerTypes.Stylus &&
100
+ event.x === this.lastPosition.x &&
101
+ event.y === this.lastPosition.y
102
+ ) {
103
+ return;
104
+ }
105
+
106
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);
107
+ const target = event.target as HTMLElement;
108
+
109
+ // You may be wondering why are we setting pointer capture here, when we
110
+ // already set it in `pointerdown` handler. Well, that's a great question,
111
+ // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)
112
+ // says that the requirement for `setPointerCapture` to work is that pointer
113
+ // must be in 'active buttons state`, otherwise it will fail silently, which
114
+ // is lovely. Obviously, when `pointerdown` is fired, one of the buttons
115
+ // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`
116
+ // will succeed, for some reason. Since it fails silently, we don't actually know
117
+ // if it worked or not (there's `gotpointercapture` event, but the complexity of
118
+ // incorporating it here seems stupid), so we just call it again here, every time
119
+ // pointer moves until it succeeds.
120
+ // God, I do love web development.
121
+ if (
122
+ !target.hasPointerCapture(event.pointerId) &&
123
+ !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)
124
+ ) {
125
+ target.setPointerCapture(event.pointerId);
126
+ }
127
+
128
+ const inBounds: boolean = isPointerInBounds(this.view, {
129
+ x: adaptedEvent.x,
130
+ y: adaptedEvent.y,
131
+ });
36
132
 
37
- const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
38
- const target = event.target as HTMLElement;
133
+ const pointerIndex: number = this.pointersInBounds.indexOf(
134
+ adaptedEvent.pointerId
135
+ );
39
136
 
40
- if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
41
- target.setPointerCapture(adaptedEvent.pointerId);
137
+ if (inBounds) {
138
+ if (pointerIndex < 0) {
139
+ adaptedEvent.eventType = EventTypes.ENTER;
140
+ this.onPointerEnter(adaptedEvent);
141
+ this.markAsInBounds(adaptedEvent.pointerId);
142
+ } else {
143
+ this.onPointerMove(adaptedEvent);
42
144
  }
43
-
44
- this.markAsInBounds(adaptedEvent.pointerId);
45
- this.trackedPointers.add(adaptedEvent.pointerId);
46
-
47
- if (++this.activePointersCounter > 1) {
48
- adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
49
- this.onPointerAdd(adaptedEvent);
145
+ } else {
146
+ if (pointerIndex >= 0) {
147
+ adaptedEvent.eventType = EventTypes.LEAVE;
148
+ this.onPointerLeave(adaptedEvent);
149
+ this.markAsOutOfBounds(adaptedEvent.pointerId);
50
150
  } else {
51
- this.onPointerDown(adaptedEvent);
151
+ this.onPointerOutOfBounds(adaptedEvent);
52
152
  }
53
- });
153
+ }
54
154
 
55
- this.view.addEventListener('pointerup', (event: PointerEvent): void => {
56
- if (event.pointerType === PointerTypes.Touch) {
57
- return;
58
- }
155
+ this.lastPosition.x = event.x;
156
+ this.lastPosition.y = event.y;
157
+ };
59
158
 
60
- // When we call reset on gesture handlers, it also resets their event managers
61
- // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
62
- // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
63
- // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
64
- if (this.activePointersCounter === 0) {
65
- return;
66
- }
159
+ private pointerCancelCallback = (event: PointerEvent) => {
160
+ if (event.pointerType === PointerTypes.Touch) {
161
+ return;
162
+ }
67
163
 
68
- const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
69
- const target = event.target as HTMLElement;
164
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);
70
165
 
71
- if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
72
- target.releasePointerCapture(adaptedEvent.pointerId);
73
- }
166
+ this.onPointerCancel(adaptedEvent);
167
+ this.markAsOutOfBounds(adaptedEvent.pointerId);
168
+ this.activePointersCounter = 0;
169
+ this.trackedPointers.clear();
170
+ };
74
171
 
75
- this.markAsOutOfBounds(adaptedEvent.pointerId);
76
- this.trackedPointers.delete(adaptedEvent.pointerId);
172
+ private pointerEnterCallback = (event: PointerEvent) => {
173
+ if (event.pointerType === PointerTypes.Touch) {
174
+ return;
175
+ }
77
176
 
78
- if (--this.activePointersCounter > 0) {
79
- adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
80
- this.onPointerRemove(adaptedEvent);
81
- } else {
82
- this.onPointerUp(adaptedEvent);
83
- }
84
- });
177
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);
85
178
 
86
- const lastPosition: { x: number | null; y: number | null } = {
87
- x: null,
88
- y: null,
89
- };
179
+ this.onPointerMoveOver(adaptedEvent);
180
+ };
90
181
 
91
- this.view.addEventListener('pointermove', (event: PointerEvent): void => {
92
- if (event.pointerType === PointerTypes.Touch) {
93
- return;
94
- }
182
+ private pointerLeaveCallback = (event: PointerEvent) => {
183
+ if (event.pointerType === PointerTypes.Touch) {
184
+ return;
185
+ }
95
186
 
96
- // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
97
- // it constantly sends events, even though there was no change in position. To fix that we check whether
98
- // pointer has actually moved and if not, we do not send event.
99
- if (
100
- event.pointerType === PointerTypes.Stylus &&
101
- event.x === lastPosition.x &&
102
- event.y === lastPosition.y
103
- ) {
104
- return;
105
- }
187
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
106
188
 
107
- const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);
108
- const target = event.target as HTMLElement;
109
-
110
- // You may be wondering why are we setting pointer capture here, when we
111
- // already set it in `pointerdown` handler. Well, that's a great question,
112
- // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)
113
- // says that the requirement for `setPointerCapture` to work is that pointer
114
- // must be in 'active buttons state`, otherwise it will fail silently, which
115
- // is lovely. Obviously, when `pointerdown` is fired, one of the buttons
116
- // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`
117
- // will succeed, for some reason. Since it fails silently, we don't actually know
118
- // if it worked or not (there's `gotpointercapture` event, but the complexity of
119
- // incorporating it here seems stupid), so we just call it again here, every time
120
- // pointer moves until it succeeds.
121
- // God, I do love web development.
122
- if (
123
- !target.hasPointerCapture(event.pointerId) &&
124
- !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)
125
- ) {
126
- target.setPointerCapture(event.pointerId);
127
- }
189
+ this.onPointerMoveOut(adaptedEvent);
190
+ };
128
191
 
129
- const inBounds: boolean = isPointerInBounds(this.view, {
130
- x: adaptedEvent.x,
131
- y: adaptedEvent.y,
132
- });
133
-
134
- const pointerIndex: number = this.pointersInBounds.indexOf(
135
- adaptedEvent.pointerId
136
- );
137
-
138
- if (inBounds) {
139
- if (pointerIndex < 0) {
140
- adaptedEvent.eventType = EventTypes.ENTER;
141
- this.onPointerEnter(adaptedEvent);
142
- this.markAsInBounds(adaptedEvent.pointerId);
143
- } else {
144
- this.onPointerMove(adaptedEvent);
145
- }
146
- } else {
147
- if (pointerIndex >= 0) {
148
- adaptedEvent.eventType = EventTypes.LEAVE;
149
- this.onPointerLeave(adaptedEvent);
150
- this.markAsOutOfBounds(adaptedEvent.pointerId);
151
- } else {
152
- this.onPointerOutOfBounds(adaptedEvent);
153
- }
154
- }
155
-
156
- lastPosition.x = event.x;
157
- lastPosition.y = event.y;
158
- });
159
-
160
- this.view.addEventListener('pointercancel', (event: PointerEvent): void => {
161
- if (event.pointerType === PointerTypes.Touch) {
162
- return;
163
- }
164
-
165
- const adaptedEvent: AdaptedEvent = this.mapEvent(
166
- event,
167
- EventTypes.CANCEL
168
- );
192
+ private lostPointerCaptureCallback = (event: PointerEvent) => {
193
+ const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);
169
194
 
195
+ if (this.trackedPointers.has(adaptedEvent.pointerId)) {
196
+ // in some cases the `pointerup` event is not fired, but `lostpointercapture` is
197
+ // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it
170
198
  this.onPointerCancel(adaptedEvent);
171
- this.markAsOutOfBounds(adaptedEvent.pointerId);
199
+
172
200
  this.activePointersCounter = 0;
173
201
  this.trackedPointers.clear();
174
- });
202
+ }
203
+ };
204
+
205
+ public registerListeners(): void {
206
+ this.view.addEventListener('pointerdown', this.pointerDownCallback);
207
+ this.view.addEventListener('pointerup', this.pointerUpCallback);
208
+ this.view.addEventListener('pointermove', this.pointerMoveCallback);
209
+ this.view.addEventListener('pointercancel', this.pointerCancelCallback);
175
210
 
176
211
  // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for
177
212
  // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.
178
213
  // We therefore use pointerenter and pointerleave events to handle the hover gesture,
179
214
  // mapping them to onPointerMoveOver and onPointerMoveOut respectively.
180
-
181
- this.view.addEventListener('pointerenter', (event: PointerEvent): void => {
182
- if (event.pointerType === PointerTypes.Touch) {
183
- return;
184
- }
185
-
186
- const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);
187
-
188
- this.onPointerMoveOver(adaptedEvent);
189
- });
190
-
191
- this.view.addEventListener('pointerleave', (event: PointerEvent): void => {
192
- if (event.pointerType === PointerTypes.Touch) {
193
- return;
194
- }
195
-
196
- const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
197
-
198
- this.onPointerMoveOut(adaptedEvent);
199
- });
200
-
215
+ this.view.addEventListener('pointerenter', this.pointerEnterCallback);
216
+ this.view.addEventListener('pointerleave', this.pointerLeaveCallback);
201
217
  this.view.addEventListener(
202
218
  'lostpointercapture',
203
- (event: PointerEvent): void => {
204
- const adaptedEvent: AdaptedEvent = this.mapEvent(
205
- event,
206
- EventTypes.CANCEL
207
- );
208
-
209
- if (this.trackedPointers.has(adaptedEvent.pointerId)) {
210
- // in some cases the `pointerup` event is not fired, but `lostpointercapture` is
211
- // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it
212
- this.onPointerCancel(adaptedEvent);
213
-
214
- this.activePointersCounter = 0;
215
- this.trackedPointers.clear();
216
- }
217
- }
219
+ this.lostPointerCaptureCallback
220
+ );
221
+ }
222
+
223
+ public unregisterListeners(): void {
224
+ this.view.removeEventListener('pointerdown', this.pointerDownCallback);
225
+ this.view.removeEventListener('pointerup', this.pointerUpCallback);
226
+ this.view.removeEventListener('pointermove', this.pointerMoveCallback);
227
+ this.view.removeEventListener('pointercancel', this.pointerCancelCallback);
228
+ this.view.removeEventListener('pointerenter', this.pointerEnterCallback);
229
+ this.view.removeEventListener('pointerleave', this.pointerLeaveCallback);
230
+ this.view.removeEventListener(
231
+ 'lostpointercapture',
232
+ this.lostPointerCaptureCallback
218
233
  );
219
234
  }
220
235