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
@@ -3,32 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.HammerDirectionNames = exports.HammerInputNames = exports.DirectionMap = exports.Direction = exports.EventMap = exports.DEG_RAD = exports.MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = exports.MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = exports.CONTENT_TOUCHES_QUICK_TAP_END_DELAY = exports.CONTENT_TOUCHES_DELAY = void 0;
7
-
8
- var _hammerjs = _interopRequireDefault(require("@egjs/hammerjs"));
9
-
10
- var _State = require("../State");
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- const CONTENT_TOUCHES_DELAY = 240;
15
- exports.CONTENT_TOUCHES_DELAY = CONTENT_TOUCHES_DELAY;
16
- const CONTENT_TOUCHES_QUICK_TAP_END_DELAY = 50;
17
- exports.CONTENT_TOUCHES_QUICK_TAP_END_DELAY = CONTENT_TOUCHES_QUICK_TAP_END_DELAY;
18
- const MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = 0.1;
19
- exports.MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD;
20
- const MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = 7;
21
- exports.MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD;
22
- const DEG_RAD = Math.PI / 180; // Map Hammer values to RNGH
23
-
24
- exports.DEG_RAD = DEG_RAD;
25
- const EventMap = {
26
- [_hammerjs.default.INPUT_START]: _State.State.BEGAN,
27
- [_hammerjs.default.INPUT_MOVE]: _State.State.ACTIVE,
28
- [_hammerjs.default.INPUT_END]: _State.State.END,
29
- [_hammerjs.default.INPUT_CANCEL]: _State.State.FAILED
30
- };
31
- exports.EventMap = EventMap;
6
+ exports.Direction = exports.DEFAULT_TOUCH_SLOP = void 0;
7
+ const DEFAULT_TOUCH_SLOP = 15;
8
+ exports.DEFAULT_TOUCH_SLOP = DEFAULT_TOUCH_SLOP;
32
9
  const Direction = {
33
10
  RIGHT: 1,
34
11
  LEFT: 2,
@@ -36,29 +13,4 @@ const Direction = {
36
13
  DOWN: 8
37
14
  };
38
15
  exports.Direction = Direction;
39
- const DirectionMap = {
40
- [_hammerjs.default.DIRECTION_RIGHT]: Direction.RIGHT,
41
- [_hammerjs.default.DIRECTION_LEFT]: Direction.LEFT,
42
- [_hammerjs.default.DIRECTION_UP]: Direction.UP,
43
- [_hammerjs.default.DIRECTION_DOWN]: Direction.DOWN
44
- };
45
- exports.DirectionMap = DirectionMap;
46
- const HammerInputNames = {
47
- [_hammerjs.default.INPUT_START]: 'START',
48
- [_hammerjs.default.INPUT_MOVE]: 'MOVE',
49
- [_hammerjs.default.INPUT_END]: 'END',
50
- [_hammerjs.default.INPUT_CANCEL]: 'CANCEL'
51
- };
52
- exports.HammerInputNames = HammerInputNames;
53
- const HammerDirectionNames = {
54
- [_hammerjs.default.DIRECTION_HORIZONTAL]: 'HORIZONTAL',
55
- [_hammerjs.default.DIRECTION_UP]: 'UP',
56
- [_hammerjs.default.DIRECTION_DOWN]: 'DOWN',
57
- [_hammerjs.default.DIRECTION_VERTICAL]: 'VERTICAL',
58
- [_hammerjs.default.DIRECTION_NONE]: 'NONE',
59
- [_hammerjs.default.DIRECTION_ALL]: 'ALL',
60
- [_hammerjs.default.DIRECTION_RIGHT]: 'RIGHT',
61
- [_hammerjs.default.DIRECTION_LEFT]: 'LEFT'
62
- };
63
- exports.HammerDirectionNames = HammerDirectionNames;
64
16
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants.ts"],"names":["CONTENT_TOUCHES_DELAY","CONTENT_TOUCHES_QUICK_TAP_END_DELAY","MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD","MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD","DEG_RAD","Math","PI","EventMap","Hammer","INPUT_START","State","BEGAN","INPUT_MOVE","ACTIVE","INPUT_END","END","INPUT_CANCEL","FAILED","Direction","RIGHT","LEFT","UP","DOWN","DirectionMap","DIRECTION_RIGHT","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_DOWN","HammerInputNames","HammerDirectionNames","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_NONE","DIRECTION_ALL"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAEO,MAAMA,qBAAqB,GAAG,GAA9B;;AACA,MAAMC,mCAAmC,GAAG,EAA5C;;AACA,MAAMC,oCAAoC,GAAG,GAA7C;;AACA,MAAMC,uCAAuC,GAAG,CAAhD;;AACA,MAAMC,OAAO,GAAGC,IAAI,CAACC,EAAL,GAAU,GAA1B,C,CAEP;;;AACO,MAAMC,QAAQ,GAAG;AACtB,GAACC,kBAAOC,WAAR,GAAsBC,aAAMC,KADN;AAEtB,GAACH,kBAAOI,UAAR,GAAqBF,aAAMG,MAFL;AAGtB,GAACL,kBAAOM,SAAR,GAAoBJ,aAAMK,GAHJ;AAItB,GAACP,kBAAOQ,YAAR,GAAuBN,aAAMO;AAJP,CAAjB;;AAOA,MAAMC,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,CADgB;AAEvBC,EAAAA,IAAI,EAAE,CAFiB;AAGvBC,EAAAA,EAAE,EAAE,CAHmB;AAIvBC,EAAAA,IAAI,EAAE;AAJiB,CAAlB;;AAOA,MAAMC,YAAY,GAAG;AAC1B,GAACf,kBAAOgB,eAAR,GAA0BN,SAAS,CAACC,KADV;AAE1B,GAACX,kBAAOiB,cAAR,GAAyBP,SAAS,CAACE,IAFT;AAG1B,GAACZ,kBAAOkB,YAAR,GAAuBR,SAAS,CAACG,EAHP;AAI1B,GAACb,kBAAOmB,cAAR,GAAyBT,SAAS,CAACI;AAJT,CAArB;;AAOA,MAAMM,gBAAgB,GAAG;AAC9B,GAACpB,kBAAOC,WAAR,GAAsB,OADQ;AAE9B,GAACD,kBAAOI,UAAR,GAAqB,MAFS;AAG9B,GAACJ,kBAAOM,SAAR,GAAoB,KAHU;AAI9B,GAACN,kBAAOQ,YAAR,GAAuB;AAJO,CAAzB;;AAMA,MAAMa,oBAAoB,GAAG;AAClC,GAACrB,kBAAOsB,oBAAR,GAA+B,YADG;AAElC,GAACtB,kBAAOkB,YAAR,GAAuB,IAFW;AAGlC,GAAClB,kBAAOmB,cAAR,GAAyB,MAHS;AAIlC,GAACnB,kBAAOuB,kBAAR,GAA6B,UAJK;AAKlC,GAACvB,kBAAOwB,cAAR,GAAyB,MALS;AAMlC,GAACxB,kBAAOyB,aAAR,GAAwB,KANU;AAOlC,GAACzB,kBAAOgB,eAAR,GAA0B,OAPQ;AAQlC,GAAChB,kBAAOiB,cAAR,GAAyB;AARS,CAA7B","sourcesContent":["import Hammer from '@egjs/hammerjs';\n\nimport { State } from '../State';\n\nexport const CONTENT_TOUCHES_DELAY = 240;\nexport const CONTENT_TOUCHES_QUICK_TAP_END_DELAY = 50;\nexport const MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = 0.1;\nexport const MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = 7;\nexport const DEG_RAD = Math.PI / 180;\n\n// Map Hammer values to RNGH\nexport const EventMap = {\n [Hammer.INPUT_START]: State.BEGAN,\n [Hammer.INPUT_MOVE]: State.ACTIVE,\n [Hammer.INPUT_END]: State.END,\n [Hammer.INPUT_CANCEL]: State.FAILED,\n} as const;\n\nexport const Direction = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n};\n\nexport const DirectionMap = {\n [Hammer.DIRECTION_RIGHT]: Direction.RIGHT,\n [Hammer.DIRECTION_LEFT]: Direction.LEFT,\n [Hammer.DIRECTION_UP]: Direction.UP,\n [Hammer.DIRECTION_DOWN]: Direction.DOWN,\n};\n\nexport const HammerInputNames = {\n [Hammer.INPUT_START]: 'START',\n [Hammer.INPUT_MOVE]: 'MOVE',\n [Hammer.INPUT_END]: 'END',\n [Hammer.INPUT_CANCEL]: 'CANCEL',\n};\nexport const HammerDirectionNames = {\n [Hammer.DIRECTION_HORIZONTAL]: 'HORIZONTAL',\n [Hammer.DIRECTION_UP]: 'UP',\n [Hammer.DIRECTION_DOWN]: 'DOWN',\n [Hammer.DIRECTION_VERTICAL]: 'VERTICAL',\n [Hammer.DIRECTION_NONE]: 'NONE',\n [Hammer.DIRECTION_ALL]: 'ALL',\n [Hammer.DIRECTION_RIGHT]: 'RIGHT',\n [Hammer.DIRECTION_LEFT]: 'LEFT',\n};\n"]}
1
+ {"version":3,"sources":["constants.ts"],"names":["DEFAULT_TOUCH_SLOP","Direction","RIGHT","LEFT","UP","DOWN"],"mappings":";;;;;;AAAO,MAAMA,kBAAkB,GAAG,EAA3B;;AAEA,MAAMC,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,CADgB;AAEvBC,EAAAA,IAAI,EAAE,CAFiB;AAGvBC,EAAAA,EAAE,EAAE,CAHmB;AAIvBC,EAAAA,IAAI,EAAE;AAJiB,CAAlB","sourcesContent":["export const DEFAULT_TOUCH_SLOP = 15;\n\nexport const Direction = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n};\n"]}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _interfaces = require("../interfaces");
9
+
10
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+
12
+ class RotationGestureDetector {
13
+ constructor(callbacks) {
14
+ _defineProperty(this, "onRotationBegin", void 0);
15
+
16
+ _defineProperty(this, "onRotation", void 0);
17
+
18
+ _defineProperty(this, "onRotationEnd", void 0);
19
+
20
+ _defineProperty(this, "currentTime", 0);
21
+
22
+ _defineProperty(this, "previousTime", 0);
23
+
24
+ _defineProperty(this, "previousAngle", 0);
25
+
26
+ _defineProperty(this, "rotation", 0);
27
+
28
+ _defineProperty(this, "anchorX", 0);
29
+
30
+ _defineProperty(this, "anchorY", 0);
31
+
32
+ _defineProperty(this, "isInProgress", false);
33
+
34
+ _defineProperty(this, "keyPointers", [NaN, NaN]);
35
+
36
+ this.onRotationBegin = callbacks.onRotationBegin;
37
+ this.onRotation = callbacks.onRotation;
38
+ this.onRotationEnd = callbacks.onRotationEnd;
39
+ }
40
+
41
+ updateCurrent(event, tracker) {
42
+ this.previousTime = this.currentTime;
43
+ this.currentTime = event.time;
44
+ const [firstPointerID, secondPointerID] = this.keyPointers;
45
+ const firstPointerX = tracker.getLastX(firstPointerID);
46
+ const firstPointerY = tracker.getLastY(firstPointerID);
47
+ const secondPointerX = tracker.getLastX(secondPointerID);
48
+ const secondPointerY = tracker.getLastY(secondPointerID);
49
+ const vectorX = secondPointerX - firstPointerX;
50
+ const vectorY = secondPointerY - firstPointerY;
51
+ this.anchorX = (firstPointerX + secondPointerX) / 2;
52
+ this.anchorY = (firstPointerY + secondPointerY) / 2; //Angle diff should be positive when rotating in clockwise direction
53
+
54
+ const angle = -Math.atan2(vectorY, vectorX);
55
+ this.rotation = Number.isNaN(this.previousAngle) ? 0 : this.previousAngle - angle;
56
+ this.previousAngle = angle;
57
+
58
+ if (this.rotation > Math.PI) {
59
+ this.rotation -= Math.PI;
60
+ } else if (this.rotation < -Math.PI) {
61
+ this.rotation += Math.PI;
62
+ }
63
+
64
+ if (this.rotation > Math.PI / 2) {
65
+ this.rotation -= Math.PI;
66
+ } else if (this.rotation < -Math.PI / 2) {
67
+ this.rotation += Math.PI;
68
+ }
69
+ }
70
+
71
+ finish(event) {
72
+ if (!this.isInProgress) {
73
+ return;
74
+ }
75
+
76
+ this.isInProgress = false;
77
+ this.keyPointers = [NaN, NaN];
78
+ this.onRotationEnd(this, event);
79
+ }
80
+
81
+ setKeyPointers(tracker) {
82
+ if (this.keyPointers[0] && this.keyPointers[1]) {
83
+ return;
84
+ }
85
+
86
+ const pointerIDs = tracker.getData().keys();
87
+ this.keyPointers[0] = pointerIDs.next().value;
88
+ this.keyPointers[1] = pointerIDs.next().value;
89
+ }
90
+
91
+ onTouchEvent(event, tracker) {
92
+ this.adaptEvent(event, tracker);
93
+
94
+ switch (event.eventType) {
95
+ case _interfaces.EventTypes.DOWN:
96
+ this.isInProgress = false;
97
+ break;
98
+
99
+ case _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN:
100
+ if (this.isInProgress) {
101
+ break;
102
+ }
103
+
104
+ this.isInProgress = true;
105
+ this.previousTime = event.time;
106
+ this.previousAngle = NaN;
107
+ this.setKeyPointers(tracker);
108
+ this.updateCurrent(event, tracker);
109
+ this.onRotationBegin(this);
110
+ break;
111
+
112
+ case _interfaces.EventTypes.MOVE:
113
+ if (!this.isInProgress) {
114
+ break;
115
+ }
116
+
117
+ this.updateCurrent(event, tracker);
118
+ this.onRotation(this, event);
119
+ break;
120
+
121
+ case _interfaces.EventTypes.ADDITIONAL_POINTER_UP:
122
+ if (!this.isInProgress) {
123
+ break;
124
+ }
125
+
126
+ if (this.keyPointers.indexOf(event.pointerId) >= 0) {
127
+ this.finish(event);
128
+ }
129
+
130
+ break;
131
+
132
+ case _interfaces.EventTypes.UP:
133
+ this.finish(event);
134
+ break;
135
+ }
136
+
137
+ return true;
138
+ }
139
+
140
+ adaptEvent(event, tracker) {
141
+ if (tracker.getTrackedPointersCount() && event.eventType === _interfaces.EventTypes.DOWN) {
142
+ event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN;
143
+ }
144
+
145
+ if (tracker.getTrackedPointersCount() > 1 && event.eventType === _interfaces.EventTypes.UP) {
146
+ event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_UP;
147
+ }
148
+ }
149
+
150
+ getTimeDelta() {
151
+ return this.currentTime + this.previousTime;
152
+ }
153
+
154
+ getAnchorX() {
155
+ return this.anchorX;
156
+ }
157
+
158
+ getAnchorY() {
159
+ return this.anchorY;
160
+ }
161
+
162
+ getRotation() {
163
+ return this.rotation;
164
+ }
165
+
166
+ }
167
+
168
+ exports.default = RotationGestureDetector;
169
+ //# sourceMappingURL=RotationGestureDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["RotationGestureDetector.ts"],"names":["RotationGestureDetector","constructor","callbacks","NaN","onRotationBegin","onRotation","onRotationEnd","updateCurrent","event","tracker","previousTime","currentTime","time","firstPointerID","secondPointerID","keyPointers","firstPointerX","getLastX","firstPointerY","getLastY","secondPointerX","secondPointerY","vectorX","vectorY","anchorX","anchorY","angle","Math","atan2","rotation","Number","isNaN","previousAngle","PI","finish","isInProgress","setKeyPointers","pointerIDs","getData","keys","next","value","onTouchEvent","adaptEvent","eventType","EventTypes","DOWN","ADDITIONAL_POINTER_DOWN","MOVE","ADDITIONAL_POINTER_UP","indexOf","pointerId","UP","getTrackedPointersCount","getTimeDelta","getAnchorX","getAnchorY","getRotation"],"mappings":"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","sourcesContent":["import { AdaptedPointerEvent, EventTypes } from '../interfaces';\nimport PointerTracker from '../tools/PointerTracker';\n\nexport interface RotationGestureListener {\n onRotationBegin: (detector: RotationGestureDetector) => boolean;\n onRotation: (\n detector: RotationGestureDetector,\n event: AdaptedPointerEvent\n ) => boolean;\n onRotationEnd: (\n detector: RotationGestureDetector,\n event: AdaptedPointerEvent\n ) => void;\n}\n\nexport default class RotationGestureDetector\n implements RotationGestureListener {\n onRotationBegin: (detector: RotationGestureDetector) => boolean;\n onRotation: (\n detector: RotationGestureDetector,\n event: AdaptedPointerEvent\n ) => boolean;\n onRotationEnd: (\n detector: RotationGestureDetector,\n event: AdaptedPointerEvent\n ) => void;\n\n private currentTime = 0;\n private previousTime = 0;\n\n private previousAngle = 0;\n private rotation = 0;\n\n private anchorX = 0;\n private anchorY = 0;\n\n private isInProgress = false;\n\n private keyPointers: number[] = [NaN, NaN];\n\n constructor(callbacks: RotationGestureListener) {\n this.onRotationBegin = callbacks.onRotationBegin;\n this.onRotation = callbacks.onRotation;\n this.onRotationEnd = callbacks.onRotationEnd;\n }\n\n private updateCurrent(\n event: AdaptedPointerEvent,\n tracker: PointerTracker\n ): void {\n this.previousTime = this.currentTime;\n this.currentTime = event.time;\n\n const [firstPointerID, secondPointerID] = this.keyPointers;\n\n const firstPointerX: number = tracker.getLastX(firstPointerID);\n const firstPointerY: number = tracker.getLastY(firstPointerID);\n const secondPointerX: number = tracker.getLastX(secondPointerID);\n const secondPointerY: number = tracker.getLastY(secondPointerID);\n\n const vectorX: number = secondPointerX - firstPointerX;\n const vectorY: number = secondPointerY - firstPointerY;\n\n this.anchorX = (firstPointerX + secondPointerX) / 2;\n this.anchorY = (firstPointerY + secondPointerY) / 2;\n\n //Angle diff should be positive when rotating in clockwise direction\n const angle: number = -Math.atan2(vectorY, vectorX);\n this.rotation = Number.isNaN(this.previousAngle)\n ? 0\n : this.previousAngle - angle;\n\n this.previousAngle = angle;\n\n if (this.rotation > Math.PI) {\n this.rotation -= Math.PI;\n } else if (this.rotation < -Math.PI) {\n this.rotation += Math.PI;\n }\n\n if (this.rotation > Math.PI / 2) {\n this.rotation -= Math.PI;\n } else if (this.rotation < -Math.PI / 2) {\n this.rotation += Math.PI;\n }\n }\n\n private finish(event: AdaptedPointerEvent): void {\n if (!this.isInProgress) {\n return;\n }\n\n this.isInProgress = false;\n this.keyPointers = [NaN, NaN];\n this.onRotationEnd(this, event);\n }\n\n private setKeyPointers(tracker: PointerTracker): void {\n if (this.keyPointers[0] && this.keyPointers[1]) {\n return;\n }\n\n const pointerIDs: IterableIterator<number> = tracker.getData().keys();\n\n this.keyPointers[0] = pointerIDs.next().value as number;\n this.keyPointers[1] = pointerIDs.next().value as number;\n }\n\n public onTouchEvent(\n event: AdaptedPointerEvent,\n tracker: PointerTracker\n ): boolean {\n this.adaptEvent(event, tracker);\n\n switch (event.eventType) {\n case EventTypes.DOWN:\n this.isInProgress = false;\n break;\n\n case EventTypes.ADDITIONAL_POINTER_DOWN:\n if (this.isInProgress) {\n break;\n }\n\n this.isInProgress = true;\n\n this.previousTime = event.time;\n this.previousAngle = NaN;\n\n this.setKeyPointers(tracker);\n\n this.updateCurrent(event, tracker);\n this.onRotationBegin(this);\n break;\n\n case EventTypes.MOVE:\n if (!this.isInProgress) {\n break;\n }\n\n this.updateCurrent(event, tracker);\n this.onRotation(this, event);\n\n break;\n\n case EventTypes.ADDITIONAL_POINTER_UP:\n if (!this.isInProgress) {\n break;\n }\n\n if (this.keyPointers.indexOf(event.pointerId) >= 0) {\n this.finish(event);\n }\n\n break;\n\n case EventTypes.UP:\n this.finish(event);\n break;\n }\n\n return true;\n }\n\n private adaptEvent(\n event: AdaptedPointerEvent,\n tracker: PointerTracker\n ): void {\n if (\n tracker.getTrackedPointersCount() &&\n event.eventType === EventTypes.DOWN\n ) {\n event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n }\n\n if (\n tracker.getTrackedPointersCount() > 1 &&\n event.eventType === EventTypes.UP\n ) {\n event.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n }\n }\n\n public getTimeDelta(): number {\n return this.currentTime + this.previousTime;\n }\n\n public getAnchorX(): number {\n return this.anchorX;\n }\n\n public getAnchorY(): number {\n return this.anchorY;\n }\n\n public getRotation(): number {\n return this.rotation;\n }\n}\n"]}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _constants = require("../constants");
9
+
10
+ var _interfaces = require("../interfaces");
11
+
12
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+
14
+ class ScaleGestureDetector {
15
+ constructor(callbacks) {
16
+ _defineProperty(this, "onScaleBegin", void 0);
17
+
18
+ _defineProperty(this, "onScale", void 0);
19
+
20
+ _defineProperty(this, "onScaleEnd", void 0);
21
+
22
+ _defineProperty(this, "focusX", void 0);
23
+
24
+ _defineProperty(this, "focusY", void 0);
25
+
26
+ _defineProperty(this, "currentSpan", void 0);
27
+
28
+ _defineProperty(this, "prevSpan", void 0);
29
+
30
+ _defineProperty(this, "initialSpan", void 0);
31
+
32
+ _defineProperty(this, "currentTime", void 0);
33
+
34
+ _defineProperty(this, "prevTime", void 0);
35
+
36
+ _defineProperty(this, "inProgress", false);
37
+
38
+ _defineProperty(this, "spanSlop", void 0);
39
+
40
+ _defineProperty(this, "minSpan", void 0);
41
+
42
+ this.onScaleBegin = callbacks.onScaleBegin;
43
+ this.onScale = callbacks.onScale;
44
+ this.onScaleEnd = callbacks.onScaleEnd;
45
+ this.spanSlop = _constants.DEFAULT_TOUCH_SLOP * 2;
46
+ this.minSpan = 0;
47
+ }
48
+
49
+ onTouchEvent(event, tracker) {
50
+ this.adaptEvent(event, tracker);
51
+ this.currentTime = event.time;
52
+ const action = event.eventType;
53
+ const numOfPointers = tracker.getTrackedPointersCount();
54
+ const streamComplete = action === _interfaces.EventTypes.UP || action === _interfaces.EventTypes.ADDITIONAL_POINTER_UP || action === _interfaces.EventTypes.CANCEL;
55
+
56
+ if (action === _interfaces.EventTypes.DOWN || streamComplete) {
57
+ if (this.inProgress) {
58
+ this.onScaleEnd(this, event);
59
+ this.inProgress = false;
60
+ this.initialSpan = 0;
61
+ }
62
+
63
+ if (streamComplete) {
64
+ return true;
65
+ }
66
+ }
67
+
68
+ const configChanged = action === _interfaces.EventTypes.DOWN || action === _interfaces.EventTypes.ADDITIONAL_POINTER_UP || action === _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN;
69
+ const pointerUp = action === _interfaces.EventTypes.ADDITIONAL_POINTER_UP;
70
+ const ignoredPointer = pointerUp ? event.pointerId : undefined; //Determine focal point
71
+
72
+ const div = pointerUp ? numOfPointers - 1 : numOfPointers;
73
+ const sumX = tracker.getSumX(ignoredPointer);
74
+ const sumY = tracker.getSumY(ignoredPointer);
75
+ const focusX = sumX / div;
76
+ const focusY = sumY / div; //Determine average deviation from focal point
77
+
78
+ let devSumX = 0;
79
+ let devSumY = 0;
80
+ tracker.getData().forEach((value, key) => {
81
+ if (key === ignoredPointer) {
82
+ return;
83
+ }
84
+
85
+ devSumX += Math.abs(value.lastX - focusX);
86
+ devSumY += Math.abs(value.lastY - focusY);
87
+ });
88
+ const devX = devSumX / div;
89
+ const devY = devSumY / div;
90
+ const spanX = devX * 2;
91
+ const spanY = devY * 2;
92
+ const span = Math.hypot(spanX, spanY); //Begin/end events
93
+
94
+ const wasInProgress = this.inProgress;
95
+ this.focusX = focusX;
96
+ this.focusY = focusY;
97
+
98
+ if (this.inProgress && (span < this.minSpan || configChanged)) {
99
+ this.onScaleEnd(this, event);
100
+ this.inProgress = false;
101
+ this.initialSpan = span;
102
+ }
103
+
104
+ if (configChanged) {
105
+ this.initialSpan = this.prevSpan = this.currentSpan = span;
106
+ }
107
+
108
+ if (!this.inProgress && span >= this.minSpan && (wasInProgress || Math.abs(span - this.initialSpan) > this.spanSlop)) {
109
+ this.prevSpan = this.currentSpan = span;
110
+ this.prevTime = this.currentTime;
111
+ this.inProgress = this.onScaleBegin(this);
112
+ } //Handle motion
113
+
114
+
115
+ if (action !== _interfaces.EventTypes.MOVE) {
116
+ return true;
117
+ }
118
+
119
+ this.currentSpan = span;
120
+
121
+ if (this.inProgress && !this.onScale(this, event)) {
122
+ return true;
123
+ }
124
+
125
+ this.prevSpan = this.currentSpan;
126
+ this.prevTime = this.currentTime;
127
+ return true;
128
+ }
129
+
130
+ adaptEvent(event, tracker) {
131
+ if (tracker.getTrackedPointersCount() > 1 && event.eventType === _interfaces.EventTypes.DOWN) {
132
+ event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN;
133
+ }
134
+
135
+ if (tracker.getTrackedPointersCount() > 1 && event.eventType === _interfaces.EventTypes.UP) {
136
+ event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_UP;
137
+ }
138
+ }
139
+
140
+ getCurrentSpan() {
141
+ return this.currentSpan;
142
+ }
143
+
144
+ getFocusX() {
145
+ return this.focusX;
146
+ }
147
+
148
+ getFocusY() {
149
+ return this.focusY;
150
+ }
151
+
152
+ getTimeDelta() {
153
+ return this.currentTime - this.prevTime;
154
+ }
155
+
156
+ getScaleFactor(numOfPointers) {
157
+ if (numOfPointers < 2) {
158
+ return 1;
159
+ }
160
+
161
+ return this.prevSpan > 0 ? this.currentSpan / this.prevSpan : 1;
162
+ }
163
+
164
+ }
165
+
166
+ exports.default = ScaleGestureDetector;
167
+ //# sourceMappingURL=ScaleGestureDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScaleGestureDetector.ts"],"names":["ScaleGestureDetector","constructor","callbacks","onScaleBegin","onScale","onScaleEnd","spanSlop","DEFAULT_TOUCH_SLOP","minSpan","onTouchEvent","event","tracker","adaptEvent","currentTime","time","action","eventType","numOfPointers","getTrackedPointersCount","streamComplete","EventTypes","UP","ADDITIONAL_POINTER_UP","CANCEL","DOWN","inProgress","initialSpan","configChanged","ADDITIONAL_POINTER_DOWN","pointerUp","ignoredPointer","pointerId","undefined","div","sumX","getSumX","sumY","getSumY","focusX","focusY","devSumX","devSumY","getData","forEach","value","key","Math","abs","lastX","lastY","devX","devY","spanX","spanY","span","hypot","wasInProgress","prevSpan","currentSpan","prevTime","MOVE","getCurrentSpan","getFocusX","getFocusY","getTimeDelta","getScaleFactor"],"mappings":"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","sourcesContent":["import { DEFAULT_TOUCH_SLOP } from '../constants';\nimport { AdaptedPointerEvent, EventTypes } from '../interfaces';\n\nimport PointerTracker from '../tools/PointerTracker';\n\nexport interface ScaleGestureListener {\n onScaleBegin: (detector: ScaleGestureDetector) => boolean;\n onScale: (\n detector: ScaleGestureDetector,\n event: AdaptedPointerEvent\n ) => boolean;\n onScaleEnd: (\n detector: ScaleGestureDetector,\n event: AdaptedPointerEvent\n ) => void;\n}\n\nexport default class ScaleGestureDetector implements ScaleGestureListener {\n public onScaleBegin: (detector: ScaleGestureDetector) => boolean;\n public onScale: (\n detector: ScaleGestureDetector,\n event: AdaptedPointerEvent\n ) => boolean;\n public onScaleEnd: (\n detector: ScaleGestureDetector,\n event: AdaptedPointerEvent\n ) => void;\n\n private focusX!: number;\n private focusY!: number;\n\n private currentSpan!: number;\n private prevSpan!: number;\n private initialSpan!: number;\n\n private currentTime!: number;\n private prevTime!: number;\n\n private inProgress = false;\n\n private spanSlop: number;\n private minSpan: number;\n\n public constructor(callbacks: ScaleGestureListener) {\n this.onScaleBegin = callbacks.onScaleBegin;\n this.onScale = callbacks.onScale;\n this.onScaleEnd = callbacks.onScaleEnd;\n\n this.spanSlop = DEFAULT_TOUCH_SLOP * 2;\n this.minSpan = 0;\n }\n\n public onTouchEvent(\n event: AdaptedPointerEvent,\n tracker: PointerTracker\n ): boolean {\n this.adaptEvent(event, tracker);\n\n this.currentTime = event.time;\n\n const action: EventTypes = event.eventType;\n const numOfPointers = tracker.getTrackedPointersCount();\n\n const streamComplete: boolean =\n action === EventTypes.UP ||\n action === EventTypes.ADDITIONAL_POINTER_UP ||\n action === EventTypes.CANCEL;\n\n if (action === EventTypes.DOWN || streamComplete) {\n if (this.inProgress) {\n this.onScaleEnd(this, event);\n this.inProgress = false;\n this.initialSpan = 0;\n }\n\n if (streamComplete) {\n return true;\n }\n }\n\n const configChanged: boolean =\n action === EventTypes.DOWN ||\n action === EventTypes.ADDITIONAL_POINTER_UP ||\n action === EventTypes.ADDITIONAL_POINTER_DOWN;\n\n const pointerUp = action === EventTypes.ADDITIONAL_POINTER_UP;\n\n const ignoredPointer: number | undefined = pointerUp\n ? event.pointerId\n : undefined;\n\n //Determine focal point\n\n const div: number = pointerUp ? numOfPointers - 1 : numOfPointers;\n\n const sumX = tracker.getSumX(ignoredPointer);\n const sumY = tracker.getSumY(ignoredPointer);\n\n const focusX = sumX / div;\n const focusY = sumY / div;\n\n //Determine average deviation from focal point\n\n let devSumX = 0;\n let devSumY = 0;\n\n tracker.getData().forEach((value, key) => {\n if (key === ignoredPointer) {\n return;\n }\n\n devSumX += Math.abs(value.lastX - focusX);\n devSumY += Math.abs(value.lastY - focusY);\n });\n\n const devX: number = devSumX / div;\n const devY: number = devSumY / div;\n\n const spanX: number = devX * 2;\n const spanY: number = devY * 2;\n\n const span = Math.hypot(spanX, spanY);\n\n //Begin/end events\n const wasInProgress: boolean = this.inProgress;\n this.focusX = focusX;\n this.focusY = focusY;\n\n if (this.inProgress && (span < this.minSpan || configChanged)) {\n this.onScaleEnd(this, event);\n this.inProgress = false;\n this.initialSpan = span;\n }\n\n if (configChanged) {\n this.initialSpan = this.prevSpan = this.currentSpan = span;\n }\n\n if (\n !this.inProgress &&\n span >= this.minSpan &&\n (wasInProgress || Math.abs(span - this.initialSpan) > this.spanSlop)\n ) {\n this.prevSpan = this.currentSpan = span;\n this.prevTime = this.currentTime;\n this.inProgress = this.onScaleBegin(this);\n }\n\n //Handle motion\n if (action !== EventTypes.MOVE) {\n return true;\n }\n\n this.currentSpan = span;\n\n if (this.inProgress && !this.onScale(this, event)) {\n return true;\n }\n\n this.prevSpan = this.currentSpan;\n this.prevTime = this.currentTime;\n\n return true;\n }\n\n private adaptEvent(\n event: AdaptedPointerEvent,\n tracker: PointerTracker\n ): void {\n if (\n tracker.getTrackedPointersCount() > 1 &&\n event.eventType === EventTypes.DOWN\n ) {\n event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n }\n\n if (\n tracker.getTrackedPointersCount() > 1 &&\n event.eventType === EventTypes.UP\n ) {\n event.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n }\n }\n\n public getCurrentSpan(): number {\n return this.currentSpan;\n }\n\n public getFocusX(): number {\n return this.focusX;\n }\n\n public getFocusY(): number {\n return this.focusY;\n }\n\n public getTimeDelta(): number {\n return this.currentTime - this.prevTime;\n }\n\n public getScaleFactor(numOfPointers: number): number {\n if (numOfPointers < 2) {\n return 1;\n }\n\n return this.prevSpan > 0 ? this.currentSpan / this.prevSpan : 1;\n }\n}\n"]}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _State = require("../../State");
9
+
10
+ var _constants = require("../constants");
11
+
12
+ var _GestureHandler = _interopRequireDefault(require("./GestureHandler"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+
18
+ const DEFAULT_MAX_DURATION_MS = 800;
19
+ const DEFAULT_MIN_ACCEPTABLE_DELTA = 160;
20
+ const DEFAULT_DIRECTION = _constants.Direction.RIGHT;
21
+ const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
22
+
23
+ class FlingGestureHandler extends _GestureHandler.default {
24
+ constructor(...args) {
25
+ super(...args);
26
+
27
+ _defineProperty(this, "numberOfPointersRequired", DEFAULT_NUMBER_OF_TOUCHES_REQUIRED);
28
+
29
+ _defineProperty(this, "direction", DEFAULT_DIRECTION);
30
+
31
+ _defineProperty(this, "maxDurationMs", DEFAULT_MAX_DURATION_MS);
32
+
33
+ _defineProperty(this, "minAcceptableDelta", DEFAULT_MIN_ACCEPTABLE_DELTA);
34
+
35
+ _defineProperty(this, "delayTimeout", void 0);
36
+
37
+ _defineProperty(this, "startX", 0);
38
+
39
+ _defineProperty(this, "startY", 0);
40
+
41
+ _defineProperty(this, "maxNumberOfPointersSimultaneously", 0);
42
+ }
43
+
44
+ init(ref, propsRef) {
45
+ super.init(ref, propsRef);
46
+ }
47
+
48
+ updateGestureConfig({
49
+ enabled = true,
50
+ ...props
51
+ }) {
52
+ super.updateGestureConfig({
53
+ enabled: enabled,
54
+ ...props
55
+ });
56
+ this.enabled = enabled;
57
+
58
+ if (this.config.direction) {
59
+ this.direction = this.config.direction;
60
+ }
61
+
62
+ if (this.config.numberOfPointers) {
63
+ this.numberOfPointersRequired = this.config.numberOfPointers;
64
+ }
65
+ }
66
+
67
+ transformNativeEvent(event) {
68
+ return {
69
+ x: event.offsetX,
70
+ y: event.offsetY,
71
+ absoluteX: event.x,
72
+ absoluteY: event.y
73
+ };
74
+ }
75
+
76
+ startFling(event) {
77
+ this.startX = event.x;
78
+ this.startY = event.y;
79
+ this.begin(event);
80
+ this.maxNumberOfPointersSimultaneously = 1;
81
+ this.delayTimeout = setTimeout(() => this.fail(event), this.maxDurationMs);
82
+ }
83
+
84
+ tryEndFling(event) {
85
+ if (this.maxNumberOfPointersSimultaneously === this.numberOfPointersRequired && (this.direction & _constants.Direction.RIGHT && event.x - this.startX > this.minAcceptableDelta || this.direction & _constants.Direction.LEFT && this.startX - event.x > this.minAcceptableDelta || this.direction & _constants.Direction.UP && this.startY - event.y > this.minAcceptableDelta || this.direction & _constants.Direction.DOWN && event.y - this.startY > this.minAcceptableDelta)) {
86
+ clearTimeout(this.delayTimeout);
87
+ this.activate(event);
88
+ return true;
89
+ }
90
+
91
+ return false;
92
+ }
93
+
94
+ endFling(event) {
95
+ if (!this.tryEndFling(event)) {
96
+ this.fail(event);
97
+ }
98
+ }
99
+
100
+ onPointerDown(event) {
101
+ super.onPointerDown(event);
102
+ this.tracker.addToTracker(event);
103
+
104
+ if (this.currentState === _State.State.UNDETERMINED) {
105
+ this.startFling(event);
106
+ }
107
+
108
+ if (this.currentState !== _State.State.BEGAN) {
109
+ return;
110
+ }
111
+
112
+ this.tryEndFling(event);
113
+
114
+ if (this.tracker.getTrackedPointersCount() > this.maxNumberOfPointersSimultaneously) {
115
+ this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();
116
+ }
117
+ }
118
+
119
+ onPointerMove(event) {
120
+ this.tracker.track(event);
121
+
122
+ if (this.currentState !== _State.State.BEGAN) {
123
+ return;
124
+ }
125
+
126
+ this.tryEndFling(event);
127
+ super.onPointerMove(event);
128
+ }
129
+
130
+ onPointerUp(event) {
131
+ this.tracker.removeFromTracker(event.pointerId);
132
+
133
+ if (this.currentState !== _State.State.BEGAN) {
134
+ return;
135
+ }
136
+
137
+ this.endFling(event);
138
+ }
139
+
140
+ activate(event, force) {
141
+ super.activate(event, force);
142
+ this.end(event);
143
+ }
144
+
145
+ resetConfig() {
146
+ super.resetConfig();
147
+ this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;
148
+ this.direction = DEFAULT_DIRECTION;
149
+ }
150
+
151
+ }
152
+
153
+ exports.default = FlingGestureHandler;
154
+ //# sourceMappingURL=FlingGestureHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["FlingGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","Direction","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","GestureHandler","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","transformNativeEvent","event","x","offsetX","y","offsetY","absoluteX","absoluteY","startFling","startX","startY","begin","maxNumberOfPointersSimultaneously","delayTimeout","setTimeout","fail","maxDurationMs","tryEndFling","minAcceptableDelta","LEFT","UP","DOWN","clearTimeout","activate","endFling","onPointerDown","tracker","addToTracker","currentState","State","UNDETERMINED","BEGAN","getTrackedPointersCount","onPointerMove","track","onPointerUp","removeFromTracker","pointerId","force","end","resetConfig"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { Direction } from '../constants';\nimport { AdaptedPointerEvent } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 800;\nconst DEFAULT_MIN_ACCEPTABLE_DELTA = 160;\nconst DEFAULT_DIRECTION = Direction.RIGHT;\nconst DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;\n\nexport default class FlingGestureHandler extends GestureHandler {\n private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n private direction = DEFAULT_DIRECTION;\n\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;\n private delayTimeout!: number;\n\n private startX = 0;\n private startY = 0;\n\n private maxNumberOfPointersSimultaneously = 0;\n\n public init(ref: number, propsRef: React.RefObject<unknown>): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n this.enabled = enabled;\n\n if (this.config.direction) {\n this.direction = this.config.direction;\n }\n\n if (this.config.numberOfPointers) {\n this.numberOfPointersRequired = this.config.numberOfPointers;\n }\n }\n\n protected transformNativeEvent(event: AdaptedPointerEvent) {\n return {\n x: event.offsetX,\n y: event.offsetY,\n absoluteX: event.x,\n absoluteY: event.y,\n };\n }\n\n private startFling(event: AdaptedPointerEvent): void {\n this.startX = event.x;\n this.startY = event.y;\n\n this.begin(event);\n\n this.maxNumberOfPointersSimultaneously = 1;\n\n this.delayTimeout = setTimeout(() => this.fail(event), this.maxDurationMs);\n }\n\n private tryEndFling(event: AdaptedPointerEvent): boolean {\n if (\n this.maxNumberOfPointersSimultaneously ===\n this.numberOfPointersRequired &&\n ((this.direction & Direction.RIGHT &&\n event.x - this.startX > this.minAcceptableDelta) ||\n (this.direction & Direction.LEFT &&\n this.startX - event.x > this.minAcceptableDelta) ||\n (this.direction & Direction.UP &&\n this.startY - event.y > this.minAcceptableDelta) ||\n (this.direction & Direction.DOWN &&\n event.y - this.startY > this.minAcceptableDelta))\n ) {\n clearTimeout(this.delayTimeout);\n this.activate(event);\n\n return true;\n }\n\n return false;\n }\n\n private endFling(event: AdaptedPointerEvent) {\n if (!this.tryEndFling(event)) {\n this.fail(event);\n }\n }\n\n protected onPointerDown(event: AdaptedPointerEvent): void {\n super.onPointerDown(event);\n\n this.tracker.addToTracker(event);\n\n if (this.currentState === State.UNDETERMINED) {\n this.startFling(event);\n }\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling(event);\n\n if (\n this.tracker.getTrackedPointersCount() >\n this.maxNumberOfPointersSimultaneously\n ) {\n this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();\n }\n }\n\n protected onPointerMove(event: AdaptedPointerEvent): void {\n this.tracker.track(event);\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling(event);\n\n super.onPointerMove(event);\n }\n\n protected onPointerUp(event: AdaptedPointerEvent): void {\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.endFling(event);\n }\n\n protected activate(event: AdaptedPointerEvent, force?: boolean): void {\n super.activate(event, force);\n this.end(event);\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n this.direction = DEFAULT_DIRECTION;\n }\n}\n"]}