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
@@ -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