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,572 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+ import { findNodeHandle } from 'react-native';
3
+ import { State } from '../../State';
4
+ import {
5
+ Config,
6
+ AdaptedPointerEvent,
7
+ PropsRef,
8
+ ResultEvent,
9
+ } from '../interfaces';
10
+ import EventManager from '../tools/EventManager';
11
+ import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
12
+ import InteractionManager from '../tools/InteractionManager';
13
+ import PointerTracker from '../tools/PointerTracker';
14
+
15
+ export default abstract class GestureHandler {
16
+ private lastSentState: State | null = null;
17
+ protected currentState: State = State.UNDETERMINED;
18
+
19
+ protected shouldCancellWhenOutside = false;
20
+ protected hasCustomActivationCriteria: boolean;
21
+ protected enabled = false;
22
+
23
+ private ref!: number;
24
+ private propsRef!: React.RefObject<unknown>;
25
+ protected config: Config = { enabled: false };
26
+ private handlerTag!: number;
27
+ protected view: HTMLElement | null = null;
28
+
29
+ protected eventManager!: EventManager;
30
+ protected tracker: PointerTracker = new PointerTracker();
31
+ protected interactionManager!: InteractionManager;
32
+
33
+ // Orchestrator properties
34
+ protected activationIndex = 0;
35
+ protected awaiting = false;
36
+ protected active = false;
37
+ protected shouldResetProgress = false;
38
+
39
+ public constructor() {
40
+ this.hasCustomActivationCriteria = false;
41
+ }
42
+
43
+ //
44
+ // Initializing handler
45
+ //
46
+
47
+ protected init(ref: number, propsRef: React.RefObject<unknown>) {
48
+ this.propsRef = propsRef;
49
+ this.ref = ref;
50
+
51
+ this.currentState = State.UNDETERMINED;
52
+
53
+ this.setView(ref);
54
+ this.setEventManager();
55
+ }
56
+
57
+ private setView(ref: number) {
58
+ if (!ref) {
59
+ this.view = null;
60
+ return;
61
+ }
62
+
63
+ this.view = (findNodeHandle(ref) as unknown) as HTMLElement;
64
+ this.view.style['touchAction'] = 'none';
65
+ this.view.style['webkitUserSelect'] = 'none';
66
+ this.view.style['userSelect'] = 'none';
67
+
68
+ //@ts-ignore This one disables default events on Safari
69
+ this.view.style['WebkitTouchCallout'] = 'none';
70
+ }
71
+
72
+ private setEventManager(): void {
73
+ if (!this.view) {
74
+ return;
75
+ }
76
+
77
+ this.eventManager = new EventManager(this.view);
78
+
79
+ this.eventManager.setOnPointerDown(this.onPointerDown.bind(this));
80
+ this.eventManager.setOnPointerUp(this.onPointerUp.bind(this));
81
+ this.eventManager.setOnPointerMove(this.onPointerMove.bind(this));
82
+ this.eventManager.setOnPointerEnter(this.onPointerEnter.bind(this));
83
+ this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));
84
+ this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));
85
+ this.eventManager.setOnPointerOutOfBounds(
86
+ this.onPointerOutOfBounds.bind(this)
87
+ );
88
+
89
+ this.eventManager.setListeners();
90
+ }
91
+
92
+ public setInteractionManager(manager: InteractionManager): void {
93
+ this.interactionManager = manager;
94
+ }
95
+
96
+ //
97
+ // Resetting handler
98
+ //
99
+
100
+ protected onCancel(): void {}
101
+ protected onReset(): void {}
102
+ protected resetProgress(): void {}
103
+
104
+ public reset(): void {
105
+ this.tracker.resetTracker();
106
+ this.onReset();
107
+ this.currentState = State.UNDETERMINED;
108
+ }
109
+
110
+ //
111
+ // State logic
112
+ //
113
+
114
+ public moveToState(newState: State, event: AdaptedPointerEvent) {
115
+ if (this.currentState === newState) {
116
+ return;
117
+ }
118
+
119
+ const oldState = this.currentState;
120
+ this.currentState = newState;
121
+
122
+ GestureHandlerOrchestrator.getInstance().onHandlerStateChange(
123
+ this,
124
+ newState,
125
+ oldState,
126
+ event
127
+ );
128
+
129
+ this.onStateChange(newState, oldState);
130
+ }
131
+
132
+ protected onStateChange(_newState: State, _oldState: State): void {}
133
+
134
+ public begin(event: AdaptedPointerEvent): void {
135
+ if (!this.checkHitSlop(event)) {
136
+ return;
137
+ }
138
+
139
+ if (this.currentState === State.UNDETERMINED) {
140
+ this.moveToState(State.BEGAN, event);
141
+ }
142
+ }
143
+
144
+ public fail(event: AdaptedPointerEvent): void {
145
+ if (
146
+ this.currentState === State.ACTIVE ||
147
+ this.currentState === State.BEGAN
148
+ ) {
149
+ this.moveToState(State.FAILED, event);
150
+ }
151
+
152
+ this.resetProgress();
153
+ }
154
+
155
+ public cancel(event: AdaptedPointerEvent): void {
156
+ if (
157
+ this.currentState === State.ACTIVE ||
158
+ this.currentState === State.UNDETERMINED ||
159
+ this.currentState === State.BEGAN
160
+ ) {
161
+ this.onCancel();
162
+ this.moveToState(State.CANCELLED, event);
163
+ }
164
+ }
165
+
166
+ protected activate(event: AdaptedPointerEvent, _force = false) {
167
+ if (
168
+ this.currentState === State.UNDETERMINED ||
169
+ this.currentState === State.BEGAN
170
+ ) {
171
+ this.moveToState(State.ACTIVE, event);
172
+ }
173
+ }
174
+
175
+ public end(event: AdaptedPointerEvent) {
176
+ if (
177
+ this.currentState === State.BEGAN ||
178
+ this.currentState === State.ACTIVE
179
+ ) {
180
+ this.moveToState(State.END, event);
181
+ }
182
+
183
+ this.resetProgress();
184
+ }
185
+
186
+ //
187
+ // Methods for orchestrator
188
+ //
189
+
190
+ public isAwaiting(): boolean {
191
+ return this.awaiting;
192
+ }
193
+ public setAwaiting(value: boolean): void {
194
+ this.awaiting = value;
195
+ }
196
+
197
+ public isActive(): boolean {
198
+ return this.active;
199
+ }
200
+ public setActive(value: boolean): void {
201
+ this.active = value;
202
+ }
203
+
204
+ public getShouldResetProgress(): boolean {
205
+ return this.shouldResetProgress;
206
+ }
207
+ public setShouldResetProgress(value: boolean): void {
208
+ this.shouldResetProgress = value;
209
+ }
210
+
211
+ public getActivationIndex(): number {
212
+ return this.activationIndex;
213
+ }
214
+ public setActivationIndex(value: number): void {
215
+ this.activationIndex = value;
216
+ }
217
+
218
+ public shouldWaitForHandlerFailure(handler: GestureHandler): boolean {
219
+ if (handler === this) {
220
+ return false;
221
+ }
222
+
223
+ return this.interactionManager.shouldWaitForHandlerFailure(this, handler);
224
+ }
225
+
226
+ public shouldRequireToWaitForFailure(handler: GestureHandler): boolean {
227
+ if (handler === this) {
228
+ return false;
229
+ }
230
+
231
+ return this.interactionManager.shouldRequireHandlerToWaitForFailure(
232
+ this,
233
+ handler
234
+ );
235
+ }
236
+
237
+ public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {
238
+ if (handler === this) {
239
+ return true;
240
+ }
241
+
242
+ return this.interactionManager.shouldRecognizeSimultaneously(this, handler);
243
+ }
244
+
245
+ public shouldBeCancelledByOther(handler: GestureHandler): boolean {
246
+ if (handler === this) {
247
+ return false;
248
+ }
249
+
250
+ return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);
251
+ }
252
+
253
+ //
254
+ // Event actions
255
+ //
256
+
257
+ protected onPointerDown(_event: AdaptedPointerEvent): void {
258
+ GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
259
+ }
260
+ // Adding another pointer to existing ones
261
+ protected onPointerAdd(_event: AdaptedPointerEvent): void {}
262
+ protected onPointerUp(_event: AdaptedPointerEvent): void {}
263
+ // Removing pointer, when there is more than one pointers
264
+ protected onPointerRemove(_event: AdaptedPointerEvent): void {}
265
+ protected onPointerMove(event: AdaptedPointerEvent): void {
266
+ this.tryToSendMoveEvent(event, false);
267
+ }
268
+ protected onPointerOut(_event: AdaptedPointerEvent): void {}
269
+ protected onPointerEnter(_event: AdaptedPointerEvent): void {}
270
+ protected onPointerCancel(_event: AdaptedPointerEvent): void {}
271
+ protected onPointerOutOfBounds(event: AdaptedPointerEvent): void {
272
+ this.tryToSendMoveEvent(event, true);
273
+ }
274
+ private tryToSendMoveEvent(event: AdaptedPointerEvent, out: boolean): void {
275
+ if (
276
+ this.currentState === State.ACTIVE &&
277
+ (!out || (out && !this.shouldCancellWhenOutside))
278
+ ) {
279
+ this.sendEvent(event, this.currentState, this.currentState);
280
+ }
281
+ }
282
+
283
+ //
284
+ // Events Sending
285
+ //
286
+
287
+ public sendEvent = (
288
+ event: AdaptedPointerEvent,
289
+ newState: State,
290
+ oldState: State
291
+ ): void => {
292
+ const {
293
+ onGestureHandlerEvent,
294
+ onGestureHandlerStateChange,
295
+ }: PropsRef = this.propsRef.current as PropsRef;
296
+
297
+ const resultEvent: ResultEvent = this.transformEventData(
298
+ event,
299
+ newState,
300
+ oldState
301
+ );
302
+
303
+ // In the new API oldState field has to be undefined, unless we send event state changed
304
+ // Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
305
+ // Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
306
+ // However, this may cause trouble in the future (but for now we don't know that)
307
+
308
+ if (this.lastSentState !== newState) {
309
+ this.lastSentState = newState;
310
+ invokeNullableMethod(onGestureHandlerStateChange, resultEvent);
311
+ }
312
+ if (this.currentState === State.ACTIVE) {
313
+ resultEvent.nativeEvent.oldState = undefined;
314
+ invokeNullableMethod(onGestureHandlerEvent, resultEvent);
315
+ }
316
+ };
317
+
318
+ private transformEventData(
319
+ event: AdaptedPointerEvent,
320
+ newState: State,
321
+ oldState: State
322
+ ): ResultEvent {
323
+ return {
324
+ nativeEvent: {
325
+ numberOfPointers: this.tracker.getTrackedPointersCount(),
326
+ state: newState,
327
+ pointerInside: this.eventManager?.isPointerInBounds({
328
+ x: event.x,
329
+ y: event.y,
330
+ }),
331
+ ...this.transformNativeEvent(event),
332
+ handlerTag: this.handlerTag,
333
+ target: this.ref,
334
+ oldState: newState !== oldState ? oldState : undefined,
335
+ },
336
+ timeStamp: Date.now(),
337
+ };
338
+ }
339
+
340
+ protected transformNativeEvent(_event: AdaptedPointerEvent) {
341
+ return {};
342
+ }
343
+
344
+ //
345
+ // Handling config
346
+ //
347
+
348
+ public updateGestureConfig({ enabled = true, ...props }): void {
349
+ this.config = { enabled, ...props };
350
+ this.validateHitSlops();
351
+ }
352
+
353
+ protected checkCustomActivationCriteria(criterias: string[]): void {
354
+ for (const key in this.config) {
355
+ if (criterias.indexOf(key) >= 0) {
356
+ this.hasCustomActivationCriteria = true;
357
+ }
358
+ }
359
+ }
360
+
361
+ private validateHitSlops(): void {
362
+ if (!this.config.hitSlop) {
363
+ return;
364
+ }
365
+
366
+ if (
367
+ this.config.hitSlop.left !== undefined &&
368
+ this.config.hitSlop.right !== undefined &&
369
+ this.config.hitSlop.width !== undefined
370
+ ) {
371
+ throw new Error(
372
+ 'HitSlop Error: Cannot define left, right and width at the same time'
373
+ );
374
+ }
375
+
376
+ if (
377
+ this.config.hitSlop.width !== undefined &&
378
+ this.config.hitSlop.left === undefined &&
379
+ this.config.hitSlop.right === undefined
380
+ ) {
381
+ throw new Error(
382
+ 'HitSlop Error: When width is defined, either left or right has to be defined'
383
+ );
384
+ }
385
+
386
+ if (
387
+ this.config.hitSlop.height !== undefined &&
388
+ this.config.hitSlop.top !== undefined &&
389
+ this.config.hitSlop.bottom !== undefined
390
+ ) {
391
+ throw new Error(
392
+ 'HitSlop Error: Cannot define top, bottom and height at the same time'
393
+ );
394
+ }
395
+
396
+ if (
397
+ this.config.hitSlop.height !== undefined &&
398
+ this.config.hitSlop.top === undefined &&
399
+ this.config.hitSlop.bottom === undefined
400
+ ) {
401
+ throw new Error(
402
+ 'HitSlop Error: When height is defined, either top or bottom has to be defined'
403
+ );
404
+ }
405
+ }
406
+
407
+ private checkHitSlop(event: AdaptedPointerEvent): boolean {
408
+ if (!this.config.hitSlop || !this.view) {
409
+ return true;
410
+ }
411
+
412
+ const width = this.view.getBoundingClientRect().width;
413
+ const height = this.view.getBoundingClientRect().height;
414
+
415
+ let left = 0;
416
+ let top = 0;
417
+ let right: number = width;
418
+ let bottom: number = height;
419
+
420
+ if (this.config.hitSlop.horizontal !== undefined) {
421
+ left -= this.config.hitSlop.horizontal;
422
+ right += this.config.hitSlop.horizontal;
423
+ }
424
+
425
+ if (this.config.hitSlop.vertical !== undefined) {
426
+ top -= this.config.hitSlop.vertical;
427
+ bottom += this.config.hitSlop.vertical;
428
+ }
429
+
430
+ if (this.config.hitSlop.left !== undefined) {
431
+ left = -this.config.hitSlop.left;
432
+ }
433
+
434
+ if (this.config.hitSlop.right !== undefined) {
435
+ right = width + this.config.hitSlop.right;
436
+ }
437
+
438
+ if (this.config.hitSlop.top !== undefined) {
439
+ top = -this.config.hitSlop.top;
440
+ }
441
+
442
+ if (this.config.hitSlop.bottom !== undefined) {
443
+ bottom = width + this.config.hitSlop.bottom;
444
+ }
445
+ if (this.config.hitSlop.width !== undefined) {
446
+ if (this.config.hitSlop.left !== undefined) {
447
+ right = left + this.config.hitSlop.width;
448
+ } else if (this.config.hitSlop.right !== undefined) {
449
+ left = right - this.config.hitSlop.width;
450
+ }
451
+ }
452
+
453
+ if (this.config.hitSlop.height !== undefined) {
454
+ if (this.config.hitSlop.top !== undefined) {
455
+ bottom = top + this.config.hitSlop.height;
456
+ } else if (this.config.hitSlop.bottom !== undefined) {
457
+ top = bottom - this.config.hitSlop.height;
458
+ }
459
+ }
460
+
461
+ if (
462
+ event.offsetX >= left &&
463
+ event.offsetX <= right &&
464
+ event.offsetY >= top &&
465
+ event.offsetY <= bottom
466
+ ) {
467
+ return true;
468
+ }
469
+ return false;
470
+ }
471
+
472
+ protected resetConfig(): void {}
473
+
474
+ //
475
+ // Getters and setters
476
+ //
477
+
478
+ public getTag(): number {
479
+ return this.handlerTag;
480
+ }
481
+ public setTag(tag: number): void {
482
+ this.handlerTag = tag;
483
+ }
484
+
485
+ protected getConfig() {
486
+ return this.config;
487
+ }
488
+
489
+ public getShouldEnableGestureOnSetup(): boolean {
490
+ throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');
491
+ }
492
+
493
+ public getView(): HTMLElement | null {
494
+ return this.view;
495
+ }
496
+
497
+ public getEventManager(): EventManager {
498
+ return this.eventManager;
499
+ }
500
+
501
+ public getTracker(): PointerTracker {
502
+ return this.tracker;
503
+ }
504
+
505
+ public getTrackedPointersID(): number[] {
506
+ return this.tracker.getTrackedPointersID();
507
+ }
508
+
509
+ public getState(): State {
510
+ return this.currentState;
511
+ }
512
+
513
+ protected setShouldCancelWhenOutside(flag: boolean) {
514
+ this.shouldCancellWhenOutside = flag;
515
+ }
516
+ protected getShouldCancelWhenOutside(): boolean {
517
+ return this.shouldCancellWhenOutside;
518
+ }
519
+ }
520
+
521
+ function invokeNullableMethod(
522
+ method:
523
+ | ((event: ResultEvent) => void)
524
+ | { __getHandler: () => (event: ResultEvent) => void }
525
+ | { __nodeConfig: { argMapping: unknown[] } },
526
+ event: ResultEvent
527
+ ): void {
528
+ if (!method) {
529
+ return;
530
+ }
531
+
532
+ if (typeof method === 'function') {
533
+ method(event);
534
+ return;
535
+ }
536
+
537
+ if ('__getHandler' in method && typeof method.__getHandler === 'function') {
538
+ const handler = method.__getHandler();
539
+ invokeNullableMethod(handler, event);
540
+ return;
541
+ }
542
+
543
+ if (!('__nodeConfig' in method)) {
544
+ return;
545
+ }
546
+
547
+ const { argMapping } = method.__nodeConfig;
548
+ if (!Array.isArray(argMapping)) {
549
+ return;
550
+ }
551
+
552
+ for (const [index, [key, value]] of argMapping.entries()) {
553
+ if (!(key in event.nativeEvent)) {
554
+ continue;
555
+ }
556
+
557
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
558
+ const nativeValue = event.nativeEvent[key];
559
+
560
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
561
+ if (value?.setValue) {
562
+ //Reanimated API
563
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
564
+ value.setValue(nativeValue);
565
+ } else {
566
+ //RN Animated API
567
+ method.__nodeConfig.argMapping[index] = [key, nativeValue];
568
+ }
569
+ }
570
+
571
+ return;
572
+ }
@@ -0,0 +1,122 @@
1
+ import { State } from '../../State';
2
+ import { AdaptedPointerEvent } from '../interfaces';
3
+
4
+ import GestureHandler from './GestureHandler';
5
+
6
+ const DEFAULT_MIN_DURATION_MS = 500;
7
+ const DEFAULT_MAX_DIST_DP = 10;
8
+ const SCALING_FACTOR = 10;
9
+
10
+ export default class LongPressGestureHandler extends GestureHandler {
11
+ private minDurationMs = DEFAULT_MIN_DURATION_MS;
12
+ private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;
13
+
14
+ private maxDistSq = this.defaultMaxDistSq;
15
+ private startX = 0;
16
+ private startY = 0;
17
+
18
+ private startTime = 0;
19
+ private previousTime = 0;
20
+
21
+ private activationTimeout: number | undefined;
22
+
23
+ public init(ref: number, propsRef: React.RefObject<unknown>) {
24
+ super.init(ref, propsRef);
25
+ this.setShouldCancelWhenOutside(true);
26
+ }
27
+
28
+ protected transformNativeEvent(event: AdaptedPointerEvent) {
29
+ return {
30
+ x: event.offsetX,
31
+ y: event.offsetY,
32
+ absoluteX: event.x,
33
+ absoluteY: event.y,
34
+ duration: Date.now() - this.startTime,
35
+ };
36
+ }
37
+
38
+ public updateGestureConfig({ enabled = true, ...props }): void {
39
+ super.updateGestureConfig({ enabled: enabled, ...props });
40
+
41
+ this.enabled = enabled;
42
+
43
+ if (this.config.minDurationMs !== undefined) {
44
+ this.minDurationMs = this.config.minDurationMs;
45
+ }
46
+
47
+ if (this.config.maxDist !== undefined) {
48
+ this.maxDistSq = this.config.maxDist * this.config.maxDist;
49
+ }
50
+ }
51
+
52
+ protected resetConfig(): void {
53
+ super.resetConfig();
54
+ this.minDurationMs = DEFAULT_MIN_DURATION_MS;
55
+ this.maxDistSq = this.defaultMaxDistSq;
56
+ }
57
+
58
+ protected onStateChange(_newState: State, _oldState: State): void {
59
+ clearTimeout(this.activationTimeout);
60
+ }
61
+
62
+ protected onPointerDown(event: AdaptedPointerEvent): void {
63
+ super.onPointerDown(event);
64
+ this.tryBegin(event);
65
+ this.tryActivate(event);
66
+ this.checkDistanceFail(event);
67
+ }
68
+
69
+ protected onPointerUp(event: AdaptedPointerEvent): void {
70
+ super.onPointerUp(event);
71
+
72
+ if (this.currentState === State.ACTIVE) {
73
+ this.end(event);
74
+ } else {
75
+ this.fail(event);
76
+ }
77
+ }
78
+
79
+ protected onPointerMove(event: AdaptedPointerEvent): void {
80
+ this.checkDistanceFail(event);
81
+ }
82
+
83
+ private tryBegin(event: AdaptedPointerEvent): void {
84
+ if (this.currentState !== State.UNDETERMINED) {
85
+ return;
86
+ }
87
+
88
+ this.previousTime = Date.now();
89
+ this.startTime = this.previousTime;
90
+
91
+ this.begin(event);
92
+
93
+ this.startX = event.x;
94
+ this.startY = event.y;
95
+ }
96
+
97
+ private tryActivate(event: AdaptedPointerEvent): void {
98
+ if (this.minDurationMs > 0) {
99
+ this.activationTimeout = setTimeout(() => {
100
+ this.activate(event);
101
+ }, this.minDurationMs);
102
+ } else if (this.minDurationMs === 0) {
103
+ this.activate(event);
104
+ }
105
+ }
106
+
107
+ private checkDistanceFail(event: AdaptedPointerEvent): void {
108
+ const dx = event.x - this.startX;
109
+ const dy = event.y - this.startY;
110
+ const distSq = dx * dx + dy * dy;
111
+
112
+ if (distSq <= this.maxDistSq) {
113
+ return;
114
+ }
115
+
116
+ if (this.currentState === State.ACTIVE) {
117
+ this.cancel(event);
118
+ } else {
119
+ this.fail(event);
120
+ }
121
+ }
122
+ }