react-native-gesture-handler 2.4.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (382) hide show
  1. package/README.md +4 -2
  2. package/RNGestureHandler.podspec +17 -5
  3. package/android/build.gradle +71 -15
  4. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +32 -6
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +105 -23
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +30 -2
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
  11. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
  16. package/android/src/main/jni/CMakeLists.txt +59 -0
  17. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
  18. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
  19. package/ios/Handlers/RNFlingHandler.m +43 -1
  20. package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
  21. package/ios/Handlers/RNPanHandler.m +27 -0
  22. package/ios/RNGestureHandler.h +1 -0
  23. package/ios/RNGestureHandler.m +22 -4
  24. package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
  25. package/ios/RNGestureHandlerManager.mm +10 -7
  26. package/ios/RNGestureHandlerModule.mm +4 -1
  27. package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
  28. package/ios/RNManualActivationRecognizer.m +10 -3
  29. package/ios/RNRootViewGestureRecognizer.m +12 -1
  30. package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
  31. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
  32. package/lib/commonjs/RNGestureHandlerModule.macos.js +138 -0
  33. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
  34. package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
  35. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  36. package/lib/commonjs/RNRenderer.js +16 -0
  37. package/lib/commonjs/RNRenderer.js.map +1 -0
  38. package/lib/commonjs/RNRenderer.web.js +11 -0
  39. package/lib/commonjs/RNRenderer.web.js.map +1 -0
  40. package/lib/commonjs/components/DrawerLayout.js +41 -12
  41. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  42. package/lib/commonjs/components/GestureButtons.js +42 -9
  43. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  44. package/lib/commonjs/components/GestureComponents.js +41 -4
  45. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  46. package/lib/commonjs/components/GestureComponents.web.js +7 -2
  47. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  48. package/lib/commonjs/components/Swipeable.js +3 -1
  49. package/lib/commonjs/components/Swipeable.js.map +1 -1
  50. package/lib/commonjs/components/touchables/GenericTouchable.js +5 -1
  51. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  52. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  53. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
  54. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  55. package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
  56. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  57. package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
  58. package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
  59. package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
  60. package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
  61. package/lib/commonjs/handlers/createHandler.js +33 -12
  62. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  63. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  64. package/lib/commonjs/handlers/gestures/GestureDetector.js +150 -75
  65. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  66. package/lib/commonjs/handlers/gestures/gesture.js +13 -2
  67. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  68. package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
  69. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  70. package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
  71. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  72. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
  73. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  74. package/lib/commonjs/index.js +14 -0
  75. package/lib/commonjs/index.js.map +1 -1
  76. package/lib/commonjs/utils.js +6 -3
  77. package/lib/commonjs/utils.js.map +1 -1
  78. package/lib/commonjs/web/constants.js +3 -51
  79. package/lib/commonjs/web/constants.js.map +1 -1
  80. package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
  81. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
  82. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
  83. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
  84. package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
  85. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
  86. package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
  87. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
  88. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
  89. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
  90. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
  91. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
  92. package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
  93. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
  94. package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
  95. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
  96. package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
  97. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
  98. package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
  99. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
  100. package/lib/commonjs/web/interfaces.js +34 -0
  101. package/lib/commonjs/web/interfaces.js.map +1 -0
  102. package/lib/commonjs/web/tools/EventManager.js +169 -0
  103. package/lib/commonjs/web/tools/EventManager.js.map +1 -0
  104. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
  105. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  106. package/lib/commonjs/web/tools/InteractionManager.js +102 -0
  107. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
  108. package/lib/commonjs/web/tools/NodeManager.js +48 -0
  109. package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
  110. package/lib/commonjs/web/tools/PointerTracker.js +132 -0
  111. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
  112. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  113. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  114. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  115. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  116. package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
  117. package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
  118. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
  119. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  120. package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
  121. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
  122. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  123. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  124. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  125. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  126. package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  127. package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
  128. package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
  129. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
  130. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
  131. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  132. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
  133. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  134. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
  135. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  136. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
  137. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  138. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
  139. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  140. package/lib/commonjs/web_hammer/constants.js +64 -0
  141. package/lib/commonjs/web_hammer/constants.js.map +1 -0
  142. package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
  143. package/lib/commonjs/{web → web_hammer}/utils.js.map +1 -1
  144. package/lib/module/EnableExperimentalWebImplementation.js +15 -0
  145. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
  146. package/lib/module/RNGestureHandlerModule.macos.js +102 -0
  147. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
  148. package/lib/module/RNGestureHandlerModule.web.js +73 -24
  149. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  150. package/lib/module/RNRenderer.js +4 -0
  151. package/lib/module/RNRenderer.js.map +1 -0
  152. package/lib/module/RNRenderer.web.js +4 -0
  153. package/lib/module/RNRenderer.web.js.map +1 -0
  154. package/lib/module/components/DrawerLayout.js +41 -12
  155. package/lib/module/components/DrawerLayout.js.map +1 -1
  156. package/lib/module/components/GestureButtons.js +43 -9
  157. package/lib/module/components/GestureButtons.js.map +1 -1
  158. package/lib/module/components/GestureComponents.js +39 -4
  159. package/lib/module/components/GestureComponents.js.map +1 -1
  160. package/lib/module/components/GestureComponents.web.js +6 -2
  161. package/lib/module/components/GestureComponents.web.js.map +1 -1
  162. package/lib/module/components/Swipeable.js +3 -1
  163. package/lib/module/components/Swipeable.js.map +1 -1
  164. package/lib/module/components/touchables/GenericTouchable.js +5 -1
  165. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  166. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  167. package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
  168. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  169. package/lib/module/handlers/PanGestureHandler.js +1 -1
  170. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  171. package/lib/module/handlers/PressabilityDebugView.js +3 -0
  172. package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
  173. package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
  174. package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
  175. package/lib/module/handlers/createHandler.js +35 -14
  176. package/lib/module/handlers/createHandler.js.map +1 -1
  177. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  178. package/lib/module/handlers/gestures/GestureDetector.js +147 -74
  179. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  180. package/lib/module/handlers/gestures/gesture.js +13 -2
  181. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  182. package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
  183. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  184. package/lib/module/handlers/gestures/panGesture.js +5 -0
  185. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  186. package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
  187. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  188. package/lib/module/index.js +2 -1
  189. package/lib/module/index.js.map +1 -1
  190. package/lib/module/utils.js +2 -1
  191. package/lib/module/utils.js.map +1 -1
  192. package/lib/module/web/constants.js +1 -36
  193. package/lib/module/web/constants.js.map +1 -1
  194. package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
  195. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
  196. package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
  197. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
  198. package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
  199. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
  200. package/lib/module/web/handlers/GestureHandler.js +521 -0
  201. package/lib/module/web/handlers/GestureHandler.js.map +1 -0
  202. package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
  203. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
  204. package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
  205. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
  206. package/lib/module/web/handlers/PanGestureHandler.js +434 -0
  207. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
  208. package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
  209. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
  210. package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
  211. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
  212. package/lib/module/web/handlers/TapGestureHandler.js +281 -0
  213. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
  214. package/lib/module/web/interfaces.js +26 -0
  215. package/lib/module/web/interfaces.js.map +1 -0
  216. package/lib/module/web/tools/EventManager.js +160 -0
  217. package/lib/module/web/tools/EventManager.js.map +1 -0
  218. package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
  219. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  220. package/lib/module/web/tools/InteractionManager.js +93 -0
  221. package/lib/module/web/tools/InteractionManager.js.map +1 -0
  222. package/lib/module/web/tools/NodeManager.js +39 -0
  223. package/lib/module/web/tools/NodeManager.js.map +1 -0
  224. package/lib/module/web/tools/PointerTracker.js +122 -0
  225. package/lib/module/web/tools/PointerTracker.js.map +1 -0
  226. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  227. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  228. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  229. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  230. package/lib/module/{web → web_hammer}/Errors.js +0 -0
  231. package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
  232. package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
  233. package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  234. package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
  235. package/lib/module/web_hammer/GestureHandler.js.map +1 -0
  236. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  237. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  238. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  239. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  240. package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  241. package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
  242. package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
  243. package/lib/module/web_hammer/NodeManager.js.map +1 -0
  244. package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
  245. package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  246. package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
  247. package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  248. package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
  249. package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  250. package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
  251. package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  252. package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
  253. package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  254. package/lib/module/web_hammer/constants.js +43 -0
  255. package/lib/module/web_hammer/constants.js.map +1 -0
  256. package/lib/module/{web → web_hammer}/utils.js +0 -0
  257. package/lib/module/{web → web_hammer}/utils.js.map +1 -1
  258. package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
  259. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +44 -0
  260. package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
  261. package/lib/typescript/RNRenderer.d.ts +1 -0
  262. package/lib/typescript/RNRenderer.web.d.ts +3 -0
  263. package/lib/typescript/components/DrawerLayout.d.ts +4 -1
  264. package/lib/typescript/components/GestureButtons.d.ts +22 -0
  265. package/lib/typescript/components/GestureComponents.d.ts +7 -3
  266. package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
  267. package/lib/typescript/components/Swipeable.d.ts +1 -1
  268. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
  269. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  270. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
  271. package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
  272. package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
  273. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
  274. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
  276. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
  277. package/lib/typescript/index.d.ts +2 -1
  278. package/lib/typescript/web/constants.d.ts +1 -33
  279. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
  280. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
  281. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
  282. package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
  283. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
  284. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
  285. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
  286. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
  287. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
  288. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
  289. package/lib/typescript/web/interfaces.d.ts +97 -0
  290. package/lib/typescript/web/tools/EventManager.d.ts +28 -0
  291. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
  292. package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
  293. package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
  294. package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
  295. package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
  296. package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
  297. package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
  298. package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
  299. package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
  300. package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
  301. package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
  302. package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
  303. package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
  304. package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
  305. package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
  306. package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
  307. package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
  308. package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
  309. package/lib/typescript/web_hammer/constants.d.ts +39 -0
  310. package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
  311. package/package.json +1 -1
  312. package/src/EnableExperimentalWebImplementation.ts +18 -0
  313. package/src/RNGestureHandlerModule.macos.ts +114 -0
  314. package/src/RNGestureHandlerModule.web.ts +89 -26
  315. package/src/RNRenderer.ts +3 -0
  316. package/src/RNRenderer.web.ts +3 -0
  317. package/src/components/DrawerLayout.tsx +37 -14
  318. package/src/components/GestureButtons.tsx +64 -0
  319. package/src/components/GestureComponents.tsx +66 -6
  320. package/src/components/GestureComponents.web.tsx +5 -0
  321. package/src/components/Swipeable.tsx +3 -1
  322. package/src/components/touchables/GenericTouchable.tsx +2 -0
  323. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
  324. package/src/handlers/ForceTouchGestureHandler.ts +3 -2
  325. package/src/handlers/PanGestureHandler.ts +2 -0
  326. package/src/handlers/PressabilityDebugView.tsx +2 -0
  327. package/src/handlers/PressabilityDebugView.web.tsx +4 -0
  328. package/src/handlers/{createHandler.ts → createHandler.tsx} +45 -19
  329. package/src/handlers/gestureHandlerCommon.ts +2 -0
  330. package/src/handlers/gestures/GestureDetector.tsx +185 -93
  331. package/src/handlers/gestures/gesture.ts +16 -0
  332. package/src/handlers/gestures/gestureStateManager.ts +13 -8
  333. package/src/handlers/gestures/panGesture.ts +5 -0
  334. package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
  335. package/src/index.ts +3 -0
  336. package/src/utils.ts +3 -1
  337. package/src/web/constants.ts +1 -41
  338. package/src/web/detectors/RotationGestureDetector.ts +199 -0
  339. package/src/web/detectors/ScaleGestureDetector.ts +208 -0
  340. package/src/web/handlers/FlingGestureHandler.ts +146 -0
  341. package/src/web/handlers/GestureHandler.ts +572 -0
  342. package/src/web/handlers/LongPressGestureHandler.ts +122 -0
  343. package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
  344. package/src/web/handlers/PanGestureHandler.ts +488 -0
  345. package/src/web/handlers/PinchGestureHandler.ts +162 -0
  346. package/src/web/handlers/RotationGestureHandler.ts +181 -0
  347. package/src/web/handlers/TapGestureHandler.ts +275 -0
  348. package/src/web/interfaces.ts +114 -0
  349. package/src/web/tools/EventManager.ts +186 -0
  350. package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
  351. package/src/web/tools/InteractionManager.ts +108 -0
  352. package/src/web/tools/NodeManager.ts +43 -0
  353. package/src/web/tools/PointerTracker.ts +130 -0
  354. package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
  355. package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
  356. package/src/{web → web_hammer}/Errors.ts +0 -0
  357. package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
  358. package/src/{web → web_hammer}/GestureHandler.ts +102 -55
  359. package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
  360. package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
  361. package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
  362. package/src/{web → web_hammer}/NodeManager.ts +6 -3
  363. package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
  364. package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
  365. package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
  366. package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
  367. package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
  368. package/src/web_hammer/constants.ts +48 -0
  369. package/src/{web → web_hammer}/utils.ts +1 -1
  370. package/android/src/main/jni/Android.mk +0 -53
  371. package/android/src/main/jni/OnLoad.cpp +0 -9
  372. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
  373. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
  374. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  375. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
  376. package/lib/commonjs/web/GestureHandler.js.map +0 -1
  377. package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
  378. package/lib/commonjs/web/NodeManager.js.map +0 -1
  379. package/lib/module/web/GestureHandler.js.map +0 -1
  380. package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
  381. package/lib/module/web/NodeManager.js.map +0 -1
  382. package/lib/typescript/web/NodeManager.d.ts +0 -8
@@ -0,0 +1,114 @@
1
+ import { Directions } from '../Directions';
2
+ import { State } from '../State';
3
+
4
+ export interface HitSlop {
5
+ left?: number;
6
+ right?: number;
7
+ top?: number;
8
+ bottom?: number;
9
+ horizontal?: number;
10
+ vertical?: number;
11
+ width?: number;
12
+ height?: number;
13
+ }
14
+
15
+ export interface Handler {
16
+ handlerTag: number;
17
+ }
18
+
19
+ type ConfigArgs =
20
+ | number
21
+ | boolean
22
+ | HitSlop
23
+ | Directions
24
+ | Handler[]
25
+ | null
26
+ | undefined;
27
+
28
+ export interface Config extends Record<string, ConfigArgs> {
29
+ enabled?: boolean;
30
+ simultaneousHandlers?: Handler[] | null;
31
+ waitFor?: Handler[] | null;
32
+ hitSlop?: HitSlop;
33
+
34
+ minPointers?: number;
35
+ maxPointers?: number;
36
+ minDist?: number;
37
+ minDistSq?: number;
38
+ minVelocity?: number;
39
+ minVelocityX?: number;
40
+ minVelocityY?: number;
41
+ minVelocitySq?: number;
42
+ maxDist?: number;
43
+ maxDistSq?: number;
44
+ failOffsetXStart?: number;
45
+ failOffsetYStart?: number;
46
+ failOffsetXEnd?: number;
47
+ failOffsetYEnd?: number;
48
+ activeOffsetXStart?: number;
49
+ activeOffsetXEnd?: number;
50
+ activeOffsetYStart?: number;
51
+ activeOffsetYEnd?: number;
52
+ numberOfPointers?: number;
53
+ minDurationMs?: number;
54
+ numberOfTaps?: number;
55
+ maxDurationMs?: number;
56
+ maxDelayMs?: number;
57
+ maxDeltaX?: number;
58
+ maxDeltaY?: number;
59
+ direction?: Directions;
60
+ }
61
+
62
+ type NativeEventArgs = number | State | boolean | undefined;
63
+ interface NativeEvent extends Record<string, NativeEventArgs> {
64
+ numberOfPointers: number;
65
+ state: State;
66
+ pointerInside: boolean | undefined;
67
+ handlerTag: number;
68
+ target: number;
69
+ oldState?: State;
70
+ }
71
+
72
+ export interface ResultEvent extends Record<string, NativeEvent | number> {
73
+ nativeEvent: NativeEvent;
74
+ timeStamp: number;
75
+ }
76
+
77
+ export interface PropsRef {
78
+ onGestureHandlerEvent: () => void;
79
+ onGestureHandlerStateChange: () => void;
80
+ }
81
+
82
+ export interface AdaptedPointerEvent {
83
+ x: number;
84
+ y: number;
85
+ offsetX: number;
86
+ offsetY: number;
87
+ pointerId: number;
88
+ eventType: EventTypes;
89
+ pointerType: string;
90
+ buttons: number;
91
+ time: number;
92
+ }
93
+
94
+ export enum MouseButtons {
95
+ NONE,
96
+ LEFT,
97
+ RIGHT,
98
+ LEFT_RIGHT,
99
+ SCROLL,
100
+ SCROLL_LEFT,
101
+ SCROLL_RIGHT,
102
+ SCROLL_LEFT_RIGHT,
103
+ }
104
+
105
+ export enum EventTypes {
106
+ DOWN,
107
+ ADDITIONAL_POINTER_DOWN,
108
+ UP,
109
+ ADDITIONAL_POINTER_UP,
110
+ MOVE,
111
+ ENTER,
112
+ OUT,
113
+ CANCEL,
114
+ }
@@ -0,0 +1,186 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+
3
+ import { EventTypes, AdaptedPointerEvent, MouseButtons } from '../interfaces';
4
+
5
+ export default class EventManager {
6
+ private activePointers: number[] = [];
7
+ private readonly view: HTMLElement;
8
+
9
+ constructor(view: HTMLElement) {
10
+ this.view = view;
11
+ }
12
+
13
+ public setListeners() {
14
+ this.view.addEventListener('pointerdown', (event: PointerEvent): void => {
15
+ if (
16
+ !this.isPointerInBounds({
17
+ x: event.clientX,
18
+ y: event.clientY,
19
+ })
20
+ ) {
21
+ return;
22
+ }
23
+
24
+ const adaptedEvent: AdaptedPointerEvent = this.mapEvent(
25
+ event,
26
+ EventTypes.DOWN
27
+ );
28
+ const target = event.target as HTMLElement;
29
+
30
+ target.setPointerCapture(adaptedEvent.pointerId);
31
+ this.addActivePointer(adaptedEvent.pointerId);
32
+ this.onPointerDown(adaptedEvent);
33
+ });
34
+
35
+ this.view.addEventListener('pointerup', (event: PointerEvent): void => {
36
+ const adaptedEvent: AdaptedPointerEvent = this.mapEvent(
37
+ event,
38
+ EventTypes.UP
39
+ );
40
+ const target = event.target as HTMLElement;
41
+
42
+ this.onPointerUp(adaptedEvent);
43
+ target.releasePointerCapture(adaptedEvent.pointerId);
44
+ this.removeActivePointer(adaptedEvent.pointerId);
45
+ });
46
+
47
+ this.view.addEventListener('pointermove', (event: PointerEvent): void => {
48
+ if (
49
+ event.pointerType === 'mouse' &&
50
+ event.buttons !== MouseButtons.LEFT
51
+ ) {
52
+ return;
53
+ }
54
+
55
+ const adaptedEvent: AdaptedPointerEvent = this.mapEvent(
56
+ event,
57
+ EventTypes.MOVE
58
+ );
59
+
60
+ const inBounds: boolean = this.isPointerInBounds({
61
+ x: adaptedEvent.x,
62
+ y: adaptedEvent.y,
63
+ });
64
+
65
+ const pointerIndex: number = this.activePointers.indexOf(
66
+ adaptedEvent.pointerId
67
+ );
68
+
69
+ if (inBounds) {
70
+ if (pointerIndex < 0) {
71
+ adaptedEvent.eventType = EventTypes.ENTER;
72
+ this.onPointerEnter(adaptedEvent);
73
+ this.addActivePointer(adaptedEvent.pointerId);
74
+ } else {
75
+ this.onPointerMove(adaptedEvent);
76
+ }
77
+ } else {
78
+ if (pointerIndex >= 0) {
79
+ adaptedEvent.eventType = EventTypes.OUT;
80
+ this.onPointerOut(adaptedEvent);
81
+ this.removeActivePointer(adaptedEvent.pointerId);
82
+ } else {
83
+ this.onPointerOutOfBounds(adaptedEvent);
84
+ }
85
+ }
86
+ });
87
+
88
+ this.view.addEventListener('pointercancel', (event: PointerEvent): void => {
89
+ event.preventDefault();
90
+
91
+ const adaptedEvent: AdaptedPointerEvent = this.mapEvent(
92
+ event,
93
+ EventTypes.CANCEL
94
+ );
95
+
96
+ this.onPointerCancel(adaptedEvent);
97
+ });
98
+ }
99
+
100
+ private onPointerDown(_event: AdaptedPointerEvent): void {}
101
+ private onPointerUp(_event: AdaptedPointerEvent): void {}
102
+ private onPointerMove(_event: AdaptedPointerEvent): void {}
103
+ private onPointerOut(_event: AdaptedPointerEvent): void {}
104
+ private onPointerEnter(_event: AdaptedPointerEvent): void {}
105
+ private onPointerCancel(_event: AdaptedPointerEvent): void {}
106
+ private onPointerOutOfBounds(_event: AdaptedPointerEvent): void {}
107
+
108
+ public setOnPointerDown(
109
+ callback: (event: AdaptedPointerEvent) => void
110
+ ): void {
111
+ this.onPointerDown = callback;
112
+ }
113
+ public setOnPointerUp(callback: (event: AdaptedPointerEvent) => void): void {
114
+ this.onPointerUp = callback;
115
+ }
116
+ public setOnPointerMove(
117
+ callback: (event: AdaptedPointerEvent) => void
118
+ ): void {
119
+ this.onPointerMove = callback;
120
+ }
121
+ public setOnPointerOut(callback: (event: AdaptedPointerEvent) => void): void {
122
+ this.onPointerOut = callback;
123
+ }
124
+ public setOnPointerEnter(
125
+ callback: (event: AdaptedPointerEvent) => void
126
+ ): void {
127
+ this.onPointerEnter = callback;
128
+ }
129
+ public setOnPointerCancel(
130
+ callback: (event: AdaptedPointerEvent) => void
131
+ ): void {
132
+ this.onPointerCancel = callback;
133
+ }
134
+ public setOnPointerOutOfBounds(
135
+ callback: (event: AdaptedPointerEvent) => void
136
+ ): void {
137
+ this.onPointerOutOfBounds = callback;
138
+ }
139
+
140
+ private mapEvent(
141
+ event: PointerEvent,
142
+ eventType: EventTypes
143
+ ): AdaptedPointerEvent {
144
+ return {
145
+ x: event.clientX,
146
+ y: event.clientY,
147
+ offsetX: event.offsetX,
148
+ offsetY: event.offsetY,
149
+ pointerId: event.pointerId,
150
+ eventType: eventType,
151
+ pointerType: event.pointerType,
152
+ buttons: event.buttons,
153
+ time: event.timeStamp,
154
+ };
155
+ }
156
+
157
+ public isPointerInBounds({ x, y }: { x: number; y: number }): boolean {
158
+ if (!this.view) {
159
+ return false;
160
+ }
161
+
162
+ const rect: DOMRect = this.view.getBoundingClientRect();
163
+
164
+ return (
165
+ x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom
166
+ );
167
+ }
168
+
169
+ private addActivePointer(pointerId: number): void {
170
+ if (this.activePointers.indexOf(pointerId) >= 0) {
171
+ return;
172
+ }
173
+
174
+ this.activePointers.push(pointerId);
175
+ }
176
+
177
+ private removeActivePointer(pointerId: number): void {
178
+ const index: number = this.activePointers.indexOf(pointerId);
179
+
180
+ if (index < 0) {
181
+ return;
182
+ }
183
+
184
+ this.activePointers.splice(index, 1);
185
+ }
186
+ }
@@ -0,0 +1,329 @@
1
+ import { State } from '../../State';
2
+ import { AdaptedPointerEvent } from '../interfaces';
3
+
4
+ import GestureHandler from '../handlers/GestureHandler';
5
+ import PointerTracker from './PointerTracker';
6
+
7
+ export default class GestureHandlerOrchestrator {
8
+ private static instance: GestureHandlerOrchestrator;
9
+
10
+ private gestureHandlers: GestureHandler[] = [];
11
+ private awaitingHandlers: GestureHandler[] = [];
12
+ private handlersToCancel: GestureHandler[] = [];
13
+
14
+ private handlingChangeSemaphore = 0;
15
+ private activationIndex = 0;
16
+
17
+ // Private beacuse of Singleton
18
+ // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
19
+ private constructor() {}
20
+
21
+ private scheduleFinishedHandlersCleanup(): void {
22
+ if (this.handlingChangeSemaphore === 0) {
23
+ this.cleanupFinishedHandlers();
24
+ }
25
+ }
26
+
27
+ private cleanHandler(handler: GestureHandler): void {
28
+ handler.reset();
29
+ handler.setActive(false);
30
+ handler.setAwaiting(false);
31
+ handler.setActivationIndex(Number.MAX_VALUE);
32
+ }
33
+
34
+ private cleanupFinishedHandlers(): void {
35
+ for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
36
+ const handler = this.gestureHandlers[i];
37
+ if (!handler) {
38
+ continue;
39
+ }
40
+
41
+ if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {
42
+ this.gestureHandlers.splice(i, 1);
43
+
44
+ this.cleanHandler(handler);
45
+ }
46
+ }
47
+ }
48
+
49
+ private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {
50
+ let hasToWait = false;
51
+ this.gestureHandlers.forEach((otherHandler) => {
52
+ if (
53
+ otherHandler &&
54
+ !this.isFinished(otherHandler.getState()) &&
55
+ this.shouldHandlerWaitForOther(handler, otherHandler)
56
+ ) {
57
+ hasToWait = true;
58
+ return;
59
+ }
60
+ });
61
+
62
+ return hasToWait;
63
+ }
64
+
65
+ private tryActivate(
66
+ handler: GestureHandler,
67
+ event: AdaptedPointerEvent
68
+ ): void {
69
+ if (this.hasOtherHandlerToWaitFor(handler)) {
70
+ this.addAwaitingHandler(handler);
71
+ } else {
72
+ this.makeActive(handler, event);
73
+ }
74
+ }
75
+
76
+ private cleanupAwaitingHandlers(handler: GestureHandler): void {
77
+ for (let i = 0; i < this.awaitingHandlers.length; ++i) {
78
+ if (
79
+ !this.awaitingHandlers[i].isAwaiting() &&
80
+ this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)
81
+ ) {
82
+ this.cleanHandler(this.awaitingHandlers[i]);
83
+ this.awaitingHandlers.splice(i, 1);
84
+ }
85
+ }
86
+ }
87
+
88
+ public onHandlerStateChange(
89
+ handler: GestureHandler,
90
+ newState: State,
91
+ oldState: State,
92
+ event: AdaptedPointerEvent
93
+ ): void {
94
+ this.handlingChangeSemaphore += 1;
95
+
96
+ if (this.isFinished(newState)) {
97
+ this.awaitingHandlers.forEach((otherHandler) => {
98
+ if (this.shouldHandlerWaitForOther(otherHandler, handler)) {
99
+ if (newState === State.END) {
100
+ otherHandler?.cancel(event);
101
+ otherHandler?.setAwaiting(false);
102
+ } else {
103
+ this.tryActivate(otherHandler, event);
104
+ }
105
+ }
106
+ });
107
+ }
108
+
109
+ if (newState === State.ACTIVE) {
110
+ this.tryActivate(handler, event);
111
+ } else if (oldState === State.ACTIVE || oldState === State.END) {
112
+ if (handler.isActive()) {
113
+ handler.sendEvent(event, newState, oldState);
114
+ } else if (oldState === State.ACTIVE) {
115
+ handler.sendEvent(event, newState, State.BEGAN);
116
+ }
117
+ } else if (
118
+ oldState !== State.UNDETERMINED ||
119
+ newState !== State.CANCELLED
120
+ ) {
121
+ handler.sendEvent(event, newState, oldState);
122
+ }
123
+
124
+ this.handlingChangeSemaphore -= 1;
125
+
126
+ this.scheduleFinishedHandlersCleanup();
127
+
128
+ if (this.awaitingHandlers.indexOf(handler) < 0) {
129
+ this.cleanupAwaitingHandlers(handler);
130
+ }
131
+ }
132
+
133
+ private makeActive(
134
+ handler: GestureHandler,
135
+ event: AdaptedPointerEvent
136
+ ): void {
137
+ const currentState = handler.getState();
138
+
139
+ handler.setActive(true);
140
+ handler.setShouldResetProgress(true);
141
+ handler.setActivationIndex(this.activationIndex++);
142
+
143
+ this.gestureHandlers.forEach((otherHandler) => {
144
+ // Order of arguments is correct - we check whether current handler should cancel existing handlers
145
+ if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
146
+ this.handlersToCancel.push(otherHandler);
147
+ }
148
+ });
149
+
150
+ for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {
151
+ this.handlersToCancel[i]?.cancel(event);
152
+ }
153
+ this.awaitingHandlers.forEach((otherHandler) => {
154
+ if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
155
+ otherHandler?.cancel(event);
156
+ otherHandler?.setAwaiting(true);
157
+ }
158
+ });
159
+
160
+ handler.sendEvent(event, State.ACTIVE, State.BEGAN);
161
+
162
+ if (currentState !== State.ACTIVE) {
163
+ handler.sendEvent(event, State.END, State.ACTIVE);
164
+ if (currentState !== State.END) {
165
+ handler.sendEvent(event, State.UNDETERMINED, State.END);
166
+ }
167
+ }
168
+
169
+ if (handler.isAwaiting()) {
170
+ handler.setAwaiting(false);
171
+ handler.end(event);
172
+ }
173
+
174
+ this.handlersToCancel = [];
175
+ }
176
+
177
+ private addAwaitingHandler(handler: GestureHandler): void {
178
+ let alreadyExists = false;
179
+
180
+ this.awaitingHandlers.forEach((otherHandler) => {
181
+ if (otherHandler === handler) {
182
+ alreadyExists = true;
183
+ return;
184
+ }
185
+ });
186
+
187
+ if (alreadyExists) {
188
+ return;
189
+ }
190
+
191
+ this.awaitingHandlers.push(handler);
192
+
193
+ handler.setAwaiting(true);
194
+ handler.setActivationIndex(this.activationIndex++);
195
+ }
196
+
197
+ public recordHandlerIfNotPresent(handler: GestureHandler): void {
198
+ let alreadyExists = false;
199
+
200
+ this.gestureHandlers.forEach((otherHandler) => {
201
+ if (otherHandler === handler) {
202
+ alreadyExists = true;
203
+ return;
204
+ }
205
+ });
206
+
207
+ if (alreadyExists) {
208
+ return;
209
+ }
210
+
211
+ this.gestureHandlers.push(handler);
212
+
213
+ handler.setActive(false);
214
+ handler.setAwaiting(false);
215
+ handler.setActivationIndex(Number.MAX_SAFE_INTEGER);
216
+ }
217
+
218
+ private shouldHandlerWaitForOther(
219
+ handler: GestureHandler,
220
+ otherHandler: GestureHandler
221
+ ): boolean {
222
+ return (
223
+ handler !== otherHandler &&
224
+ (handler.shouldWaitForHandlerFailure(otherHandler) ||
225
+ otherHandler.shouldRequireToWaitForFailure(handler))
226
+ );
227
+ }
228
+
229
+ private canRunSimultaneously(
230
+ gh1: GestureHandler,
231
+ gh2: GestureHandler
232
+ ): boolean {
233
+ return (
234
+ gh1 === gh2 ||
235
+ gh1.shouldRecognizeSimultaneously(gh2) ||
236
+ gh2.shouldRecognizeSimultaneously(gh1)
237
+ );
238
+ }
239
+
240
+ private shouldHandlerBeCancelledBy(
241
+ handler: GestureHandler,
242
+ otherHandler: GestureHandler
243
+ ): boolean {
244
+ const handlerPointers: number[] = handler.getTrackedPointersID();
245
+ const otherPointers: number[] = otherHandler.getTrackedPointersID();
246
+
247
+ if (
248
+ !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&
249
+ handler.getView() !== otherHandler.getView()
250
+ ) {
251
+ return this.checkOverlap(handler, otherHandler);
252
+ }
253
+
254
+ if (this.canRunSimultaneously(handler, otherHandler)) {
255
+ return false;
256
+ }
257
+
258
+ if (
259
+ handler !== otherHandler &&
260
+ (handler.isAwaiting() || handler.getState() === State.ACTIVE)
261
+ ) {
262
+ // For now it always returns false
263
+ return handler.shouldBeCancelledByOther(otherHandler);
264
+ }
265
+
266
+ return true;
267
+ }
268
+
269
+ private checkOverlap(
270
+ handler: GestureHandler,
271
+ otherHandler: GestureHandler
272
+ ): boolean {
273
+ // If handlers don't have common pointers, default return value is false.
274
+ // However, if at least on pointer overlaps with both handlers, we return true
275
+ // This solves issue in overlapping parents example
276
+
277
+ // TODO: Find better way to handle that issue, for example by activation order and handler cancelling
278
+
279
+ const handlerPointers: number[] = handler.getTrackedPointersID();
280
+ const otherPointers: number[] = otherHandler.getTrackedPointersID();
281
+
282
+ let overlap = false;
283
+
284
+ handlerPointers.forEach((pointer: number) => {
285
+ const handlerX: number = handler.getTracker().getLastX(pointer);
286
+ const handlerY: number = handler.getTracker().getLastY(pointer);
287
+
288
+ if (
289
+ handler
290
+ .getEventManager()
291
+ .isPointerInBounds({ x: handlerX, y: handlerY }) &&
292
+ otherHandler
293
+ .getEventManager()
294
+ .isPointerInBounds({ x: handlerX, y: handlerY })
295
+ ) {
296
+ overlap = true;
297
+ }
298
+ });
299
+
300
+ otherPointers.forEach((pointer: number) => {
301
+ const otherX: number = otherHandler.getTracker().getLastX(pointer);
302
+ const otherY: number = otherHandler.getTracker().getLastY(pointer);
303
+
304
+ if (
305
+ handler.getEventManager().isPointerInBounds({ x: otherX, y: otherY }) &&
306
+ otherHandler
307
+ .getEventManager()
308
+ .isPointerInBounds({ x: otherX, y: otherY })
309
+ ) {
310
+ overlap = true;
311
+ }
312
+ });
313
+
314
+ return overlap;
315
+ }
316
+
317
+ private isFinished(state: State): boolean {
318
+ return (
319
+ state === State.END || state === State.FAILED || state === State.CANCELLED
320
+ );
321
+ }
322
+
323
+ public static getInstance(): GestureHandlerOrchestrator {
324
+ if (!GestureHandlerOrchestrator.instance)
325
+ GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();
326
+
327
+ return GestureHandlerOrchestrator.instance;
328
+ }
329
+ }