react-native-gesture-handler 2.4.1 → 2.6.0

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 (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
+ }