react-native-gesture-handler 1.10.3 → 2.1.2

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 +7 -6
  2. package/android/build.gradle +49 -1
  3. package/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -0
  4. package/android/gradle.properties +19 -0
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +713 -0
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
  11. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
  12. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
  13. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
  14. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
  15. package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
  16. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
  17. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
  18. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
  19. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
  20. package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
  21. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
  22. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
  23. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
  24. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +348 -0
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +57 -0
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +59 -0
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +8 -0
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +61 -0
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +686 -0
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +17 -0
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +95 -0
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +132 -0
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt +5 -0
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +68 -0
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +34 -0
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +66 -0
  38. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +69 -0
  39. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +51 -0
  40. package/ios/Handlers/RNFlingHandler.m +78 -5
  41. package/ios/Handlers/RNForceTouchHandler.m +29 -4
  42. package/ios/Handlers/RNLongPressHandler.m +105 -3
  43. package/ios/Handlers/RNManualHandler.h +4 -0
  44. package/ios/Handlers/RNManualHandler.m +73 -0
  45. package/ios/Handlers/RNNativeViewHandler.m +30 -2
  46. package/ios/Handlers/RNPanHandler.m +64 -4
  47. package/ios/Handlers/RNPinchHandler.m +61 -2
  48. package/ios/Handlers/RNRotationHandler.m +60 -1
  49. package/ios/Handlers/RNTapHandler.m +55 -8
  50. package/ios/RNGestureHandler.h +18 -4
  51. package/ios/RNGestureHandler.m +123 -13
  52. package/ios/RNGestureHandlerEvents.h +9 -0
  53. package/ios/RNGestureHandlerEvents.m +34 -0
  54. package/ios/RNGestureHandlerManager.h +7 -0
  55. package/ios/RNGestureHandlerManager.m +62 -34
  56. package/ios/RNGestureHandlerModule.m +39 -3
  57. package/ios/RNGestureHandlerPointerTracker.h +25 -0
  58. package/ios/RNGestureHandlerPointerTracker.m +237 -0
  59. package/ios/RNGestureHandlerRegistry.h +1 -0
  60. package/ios/RNGestureHandlerRegistry.m +10 -0
  61. package/ios/RNGestureHandlerStateManager.h +5 -0
  62. package/ios/RNManualActivationRecognizer.h +10 -0
  63. package/ios/RNManualActivationRecognizer.m +80 -0
  64. package/ios/RNRootViewGestureRecognizer.m +1 -1
  65. package/ios/RNTouchEventType.h +9 -0
  66. package/lib/commonjs/EventType.js +16 -0
  67. package/lib/commonjs/EventType.js.map +1 -0
  68. package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
  69. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  70. package/lib/commonjs/GestureHandlerRootView.js +11 -3
  71. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  72. package/lib/commonjs/RNGestureHandlerModule.js +3 -1
  73. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  75. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  76. package/lib/commonjs/components/DrawerLayout.js +41 -37
  77. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  78. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  79. package/lib/commonjs/components/GestureComponents.js +31 -12
  80. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  81. package/lib/commonjs/components/Swipeable.js +10 -6
  82. package/lib/commonjs/components/Swipeable.js.map +1 -1
  83. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  84. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  85. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
  86. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  87. package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
  88. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  89. package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
  90. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
  91. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
  92. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
  93. package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
  94. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
  95. package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
  96. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  97. package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
  98. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
  99. package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
  100. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
  101. package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
  102. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
  103. package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
  104. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
  105. package/lib/commonjs/handlers/createHandler.js +52 -83
  106. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  107. package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
  108. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
  109. package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
  110. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
  111. package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
  112. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
  113. package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
  114. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
  115. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
  116. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
  117. package/lib/commonjs/handlers/gestures/gesture.js +193 -0
  118. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
  119. package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
  120. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
  121. package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
  122. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
  123. package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
  124. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
  125. package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
  126. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
  127. package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
  128. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
  129. package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
  130. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
  131. package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
  132. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
  133. package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
  134. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
  135. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
  136. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
  137. package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
  138. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
  139. package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
  140. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
  141. package/lib/commonjs/handlers/handlersRegistry.js +31 -0
  142. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
  143. package/lib/commonjs/index.js +146 -8
  144. package/lib/commonjs/index.js.map +1 -1
  145. package/lib/commonjs/init.js +13 -0
  146. package/lib/commonjs/init.js.map +1 -0
  147. package/lib/commonjs/mocks.js +31 -2
  148. package/lib/commonjs/mocks.js.map +1 -1
  149. package/lib/commonjs/utils.js +15 -0
  150. package/lib/commonjs/utils.js.map +1 -0
  151. package/lib/commonjs/web/Errors.js +1 -1
  152. package/lib/commonjs/web/Errors.js.map +1 -1
  153. package/lib/commonjs/web/GestureHandler.js +4 -6
  154. package/lib/commonjs/web/GestureHandler.js.map +1 -1
  155. package/lib/commonjs/web/NodeManager.js +8 -2
  156. package/lib/commonjs/web/NodeManager.js.map +1 -1
  157. package/lib/module/EventType.js +8 -0
  158. package/lib/module/EventType.js.map +1 -0
  159. package/lib/module/GestureHandlerRootView.android.js +2 -14
  160. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  161. package/lib/module/GestureHandlerRootView.js +5 -1
  162. package/lib/module/GestureHandlerRootView.js.map +1 -1
  163. package/lib/module/RNGestureHandlerModule.js +3 -1
  164. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  165. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  166. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  167. package/lib/module/components/DrawerLayout.js +43 -40
  168. package/lib/module/components/DrawerLayout.js.map +1 -1
  169. package/lib/module/components/GestureButtons.js.map +1 -1
  170. package/lib/module/components/GestureComponents.js +29 -11
  171. package/lib/module/components/GestureComponents.js.map +1 -1
  172. package/lib/module/components/Swipeable.js +9 -6
  173. package/lib/module/components/Swipeable.js.map +1 -1
  174. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  175. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  176. package/lib/module/components/touchables/TouchableOpacity.js +1 -1
  177. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  178. package/lib/module/gestureHandlerRootHOC.js +1 -1
  179. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  180. package/lib/module/handlers/FlingGestureHandler.js +10 -0
  181. package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
  182. package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
  183. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
  184. package/lib/module/handlers/LongPressGestureHandler.js +10 -0
  185. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
  186. package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
  187. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  188. package/lib/module/handlers/PanGestureHandler.js +106 -0
  189. package/lib/module/handlers/PanGestureHandler.js.map +1 -0
  190. package/lib/module/handlers/PinchGestureHandler.js +9 -0
  191. package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
  192. package/lib/module/handlers/RotationGestureHandler.js +9 -0
  193. package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
  194. package/lib/module/handlers/TapGestureHandler.js +10 -0
  195. package/lib/module/handlers/TapGestureHandler.js.map +1 -0
  196. package/lib/module/handlers/createHandler.js +41 -76
  197. package/lib/module/handlers/createHandler.js.map +1 -1
  198. package/lib/module/handlers/gestureHandlerCommon.js +66 -0
  199. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
  200. package/lib/module/handlers/gestures/GestureDetector.js +402 -0
  201. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
  202. package/lib/module/handlers/gestures/eventReceiver.js +120 -0
  203. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
  204. package/lib/module/handlers/gestures/flingGesture.js +24 -0
  205. package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
  206. package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
  207. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
  208. package/lib/module/handlers/gestures/gesture.js +175 -0
  209. package/lib/module/handlers/gestures/gesture.js.map +1 -0
  210. package/lib/module/handlers/gestures/gestureComposition.js +79 -0
  211. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
  212. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  213. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
  214. package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
  215. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
  216. package/lib/module/handlers/gestures/longPressGesture.js +24 -0
  217. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
  218. package/lib/module/handlers/gestures/manualGesture.js +22 -0
  219. package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
  220. package/lib/module/handlers/gestures/nativeGesture.js +24 -0
  221. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
  222. package/lib/module/handlers/gestures/panGesture.js +135 -0
  223. package/lib/module/handlers/gestures/panGesture.js.map +1 -0
  224. package/lib/module/handlers/gestures/pinchGesture.js +36 -0
  225. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
  226. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
  227. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
  228. package/lib/module/handlers/gestures/rotationGesture.js +36 -0
  229. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
  230. package/lib/module/handlers/gestures/tapGesture.js +49 -0
  231. package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
  232. package/lib/module/handlers/handlersRegistry.js +16 -0
  233. package/lib/module/handlers/handlersRegistry.js.map +1 -0
  234. package/lib/module/index.js +22 -1
  235. package/lib/module/index.js.map +1 -1
  236. package/lib/module/init.js +5 -0
  237. package/lib/module/init.js.map +1 -0
  238. package/lib/module/mocks.js +31 -2
  239. package/lib/module/mocks.js.map +1 -1
  240. package/lib/module/utils.js +8 -0
  241. package/lib/module/utils.js.map +1 -0
  242. package/lib/module/web/Errors.js +1 -1
  243. package/lib/module/web/Errors.js.map +1 -1
  244. package/lib/module/web/GestureHandler.js +4 -6
  245. package/lib/module/web/GestureHandler.js.map +1 -1
  246. package/lib/module/web/NodeManager.js +8 -2
  247. package/lib/module/web/NodeManager.js.map +1 -1
  248. package/lib/typescript/EventType.d.ts +8 -0
  249. package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
  250. package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
  251. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  252. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  253. package/lib/typescript/components/DrawerLayout.d.ts +50 -1
  254. package/lib/typescript/components/GestureButtons.d.ts +36 -0
  255. package/lib/typescript/components/GestureComponents.d.ts +8 -35
  256. package/lib/typescript/components/Swipeable.d.ts +73 -6
  257. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
  258. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
  259. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
  260. package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
  261. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
  262. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
  263. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
  264. package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
  265. package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
  266. package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
  267. package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
  268. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  269. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
  270. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
  271. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
  272. package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
  273. package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
  274. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
  276. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  277. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
  278. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
  279. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
  280. package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
  281. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
  282. package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
  283. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
  284. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
  285. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
  286. package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
  287. package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
  288. package/lib/typescript/index.d.ts +29 -2
  289. package/lib/typescript/init.d.ts +1 -0
  290. package/lib/typescript/mocks.d.ts +21 -2
  291. package/lib/typescript/utils.d.ts +1 -0
  292. package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
  293. package/lib/typescript/web/GestureHandler.d.ts +0 -1
  294. package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
  295. package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
  296. package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
  297. package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
  298. package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
  299. package/package.json +8 -5
  300. package/src/EventType.ts +10 -0
  301. package/src/GestureHandlerRootView.android.tsx +9 -25
  302. package/src/GestureHandlerRootView.tsx +11 -2
  303. package/src/RNGestureHandlerModule.ts +5 -1
  304. package/src/RNGestureHandlerModule.web.ts +1 -0
  305. package/src/components/DrawerLayout.tsx +114 -41
  306. package/src/components/GestureButtons.tsx +45 -5
  307. package/src/components/GestureComponents.tsx +47 -41
  308. package/src/components/Swipeable.tsx +108 -21
  309. package/src/components/touchables/GenericTouchable.tsx +2 -1
  310. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  311. package/src/handlers/FlingGestureHandler.ts +57 -0
  312. package/src/handlers/ForceTouchGestureHandler.ts +83 -0
  313. package/src/handlers/LongPressGestureHandler.ts +84 -0
  314. package/src/handlers/NativeViewGestureHandler.ts +31 -7
  315. package/src/handlers/PanGestureHandler.ts +321 -0
  316. package/src/handlers/PinchGestureHandler.ts +46 -0
  317. package/src/handlers/RotationGestureHandler.ts +46 -0
  318. package/src/handlers/TapGestureHandler.ts +90 -0
  319. package/src/handlers/createHandler.ts +54 -79
  320. package/src/handlers/gestureHandlerCommon.ts +185 -0
  321. package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
  322. package/src/handlers/gestures/GestureDetector.tsx +519 -0
  323. package/src/handlers/gestures/eventReceiver.ts +151 -0
  324. package/src/handlers/gestures/flingGesture.ts +27 -0
  325. package/src/handlers/gestures/forceTouchGesture.ts +74 -0
  326. package/src/handlers/gestures/gesture.ts +292 -0
  327. package/src/handlers/gestures/gestureComposition.ts +109 -0
  328. package/src/handlers/gestures/gestureObjects.ts +79 -0
  329. package/src/handlers/gestures/gestureStateManager.ts +60 -0
  330. package/src/handlers/gestures/longPressGesture.ts +27 -0
  331. package/src/handlers/gestures/manualGesture.ts +31 -0
  332. package/src/handlers/gestures/nativeGesture.ts +27 -0
  333. package/src/handlers/gestures/panGesture.ts +147 -0
  334. package/src/handlers/gestures/pinchGesture.ts +51 -0
  335. package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
  336. package/src/handlers/gestures/rotationGesture.ts +51 -0
  337. package/src/handlers/gestures/tapGesture.ts +52 -0
  338. package/src/handlers/handlersRegistry.ts +22 -0
  339. package/src/index.ts +57 -17
  340. package/src/init.ts +5 -0
  341. package/src/mocks.ts +42 -2
  342. package/src/utils.ts +7 -0
  343. package/src/web/GestureHandler.ts +1 -2
  344. package/src/web/NodeManager.ts +5 -0
  345. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
  346. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
  347. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
  348. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
  349. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
  350. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
  351. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
  352. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
  353. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
  354. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
  355. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
  356. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
  357. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
  358. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
  359. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
  360. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
  361. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
  362. package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
  363. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
  364. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
  365. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
  366. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
  367. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
  368. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
  369. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
  370. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
  371. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
  372. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
  373. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
  374. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
  375. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
  376. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
  377. package/lib/commonjs/handlers/gestureHandlers.js +0 -236
  378. package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
  379. package/lib/module/handlers/gestureHandlers.js +0 -216
  380. package/lib/module/handlers/gestureHandlers.js.map +0 -1
  381. package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
  382. package/src/handlers/gestureHandlers.ts +0 -511
@@ -0,0 +1,46 @@
1
+ import createHandler from './createHandler';
2
+ import {
3
+ BaseGestureHandlerProps,
4
+ baseGestureHandlerProps,
5
+ } from './gestureHandlerCommon';
6
+
7
+ export type RotationGestureHandlerEventPayload = {
8
+ /**
9
+ * Amount rotated, expressed in radians, from the gesture's focal point
10
+ * (anchor).
11
+ */
12
+ rotation: number;
13
+
14
+ /**
15
+ * X coordinate, expressed in points, of the gesture's central focal point
16
+ * (anchor).
17
+ */
18
+ anchorX: number;
19
+
20
+ /**
21
+ * Y coordinate, expressed in points, of the gesture's central focal point
22
+ * (anchor).
23
+ */
24
+ anchorY: number;
25
+
26
+ /**
27
+ *
28
+ * Instantaneous velocity, expressed in point units per second, of the
29
+ * gesture.
30
+ */
31
+ velocity: number;
32
+ };
33
+
34
+ export interface RotationGestureHandlerProps
35
+ extends BaseGestureHandlerProps<RotationGestureHandlerEventPayload> {}
36
+
37
+ export type RotationGestureHandler = typeof RotationGestureHandler;
38
+ // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
39
+ export const RotationGestureHandler = createHandler<
40
+ RotationGestureHandlerProps,
41
+ RotationGestureHandlerEventPayload
42
+ >({
43
+ name: 'RotationGestureHandler',
44
+ allowedProps: baseGestureHandlerProps,
45
+ config: {},
46
+ });
@@ -0,0 +1,90 @@
1
+ import createHandler from './createHandler';
2
+ import {
3
+ BaseGestureHandlerProps,
4
+ baseGestureHandlerProps,
5
+ } from './gestureHandlerCommon';
6
+
7
+ export const tapGestureHandlerProps = [
8
+ 'maxDurationMs',
9
+ 'maxDelayMs',
10
+ 'numberOfTaps',
11
+ 'maxDeltaX',
12
+ 'maxDeltaY',
13
+ 'maxDist',
14
+ 'minPointers',
15
+ ] as const;
16
+
17
+ export type TapGestureHandlerEventPayload = {
18
+ x: number;
19
+ y: number;
20
+ absoluteX: number;
21
+ absoluteY: number;
22
+ };
23
+ export interface TapGestureConfig {
24
+ /**
25
+ * Minimum number of pointers (fingers) required to be placed before the
26
+ * handler activates. Should be a positive integer.
27
+ * The default value is 1.
28
+ */
29
+ minPointers?: number;
30
+
31
+ /**
32
+ * Maximum time, expressed in milliseconds, that defines how fast a finger
33
+ * must be released after a touch. The default value is 500.
34
+ */
35
+ maxDurationMs?: number;
36
+
37
+ /**
38
+ * Maximum time, expressed in milliseconds, that can pass before the next tap
39
+ * if many taps are required. The default value is 500.
40
+ */
41
+ maxDelayMs?: number;
42
+
43
+ /**
44
+ * Number of tap gestures required to activate the handler. The default value
45
+ * is 1.
46
+ */
47
+ numberOfTaps?: number;
48
+
49
+ /**
50
+ * Maximum distance, expressed in points, that defines how far the finger is
51
+ * allowed to travel along the X axis during a tap gesture. If the finger
52
+ * travels further than the defined distance along the X axis and the handler
53
+ * hasn't yet activated, it will fail to recognize the gesture.
54
+ */
55
+ maxDeltaX?: number;
56
+
57
+ /**
58
+ * Maximum distance, expressed in points, that defines how far the finger is
59
+ * allowed to travel along the Y axis during a tap gesture. If the finger
60
+ * travels further than the defined distance along the Y axis and the handler
61
+ * hasn't yet activated, it will fail to recognize the gesture.
62
+ */
63
+ maxDeltaY?: number;
64
+
65
+ /**
66
+ * Maximum distance, expressed in points, that defines how far the finger is
67
+ * allowed to travel during a tap gesture. If the finger travels further than
68
+ * the defined distance and the handler hasn't yet
69
+ * activated, it will fail to recognize the gesture.
70
+ */
71
+ maxDist?: number;
72
+ }
73
+
74
+ export interface TapGestureHandlerProps
75
+ extends BaseGestureHandlerProps<TapGestureHandlerEventPayload>,
76
+ TapGestureConfig {}
77
+
78
+ export type TapGestureHandler = typeof TapGestureHandler;
79
+ // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
80
+ export const TapGestureHandler = createHandler<
81
+ TapGestureHandlerProps,
82
+ TapGestureHandlerEventPayload
83
+ >({
84
+ name: 'TapGestureHandler',
85
+ allowedProps: [
86
+ ...baseGestureHandlerProps,
87
+ ...tapGestureHandlerProps,
88
+ ] as const,
89
+ config: {},
90
+ });
@@ -1,31 +1,28 @@
1
1
  import * as React from 'react';
2
2
  import {
3
- findNodeHandle as findNodeHandleRN,
4
- NativeModules,
5
3
  Platform,
6
4
  Touchable,
5
+ UIManager,
6
+ DeviceEventEmitter,
7
+ EmitterSubscription,
7
8
  } from 'react-native';
8
9
  // @ts-ignore - it isn't typed by TS & don't have definitelyTyped types
9
- import deepEqual from 'fbjs/lib/areEqual';
10
+ import deepEqual from 'lodash/isEqual';
10
11
  import RNGestureHandlerModule from '../RNGestureHandlerModule';
11
12
  import type RNGestureHandlerModuleWeb from '../RNGestureHandlerModule.web';
12
13
  import { State } from '../State';
14
+ import { handlerIDToTag, getNextHandlerTag } from './handlersRegistry';
13
15
 
14
16
  import {
15
17
  BaseGestureHandlerProps,
18
+ filterConfig,
16
19
  GestureEvent,
17
20
  HandlerStateChangeEvent,
18
- } from './gestureHandlers';
21
+ findNodeHandle,
22
+ } from './gestureHandlerCommon';
19
23
  import { ValueOf } from '../typeUtils';
20
24
 
21
- function findNodeHandle(
22
- node: null | number | React.Component<any, any> | React.ComponentClass<any>
23
- ): null | number | React.Component<any, any> | React.ComponentClass<any> {
24
- if (Platform.OS === 'web') return node;
25
- return findNodeHandleRN(node);
26
- }
27
-
28
- const { UIManager = {} } = NativeModules;
25
+ const UIManagerAny = UIManager as any;
29
26
 
30
27
  const customGHEventsConfig = {
31
28
  onGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },
@@ -38,16 +35,16 @@ const customGHEventsConfig = {
38
35
  // native module.
39
36
  // Once new event types are registered with react it is possible to dispatch these
40
37
  // events to all kind of native views.
41
- UIManager.genericDirectEventTypes = {
42
- ...UIManager.genericDirectEventTypes,
38
+ UIManagerAny.genericDirectEventTypes = {
39
+ ...UIManagerAny.genericDirectEventTypes,
43
40
  ...customGHEventsConfig,
44
41
  };
45
42
  // In newer versions of RN the `genericDirectEventTypes` is located in the object
46
43
  // returned by UIManager.getViewManagerConfig('getConstants') or in older RN UIManager.getConstants(), we need to add it there as well to make
47
44
  // it compatible with RN 61+
48
45
  const UIManagerConstants =
49
- UIManager.getViewManagerConfig?.('getConstants') ??
50
- UIManager.getConstants?.();
46
+ UIManagerAny.getViewManagerConfig?.('getConstants') ??
47
+ UIManagerAny.getConstants?.();
51
48
 
52
49
  if (UIManagerConstants) {
53
50
  UIManagerConstants.genericDirectEventTypes = {
@@ -64,71 +61,24 @@ const {
64
61
  clearJSResponder: oldClearJSResponder = () => {
65
62
  //no operation
66
63
  },
67
- } = UIManager;
68
- UIManager.setJSResponder = (tag: number, blockNativeResponder: boolean) => {
64
+ } = UIManagerAny;
65
+ UIManagerAny.setJSResponder = (tag: number, blockNativeResponder: boolean) => {
69
66
  RNGestureHandlerModule.handleSetJSResponder(tag, blockNativeResponder);
70
67
  oldSetJSResponder(tag, blockNativeResponder);
71
68
  };
72
- UIManager.clearJSResponder = () => {
69
+ UIManagerAny.clearJSResponder = () => {
73
70
  RNGestureHandlerModule.handleClearJSResponder();
74
71
  oldClearJSResponder();
75
72
  };
76
73
 
77
- let handlerTag = 1;
78
- const handlerIDToTag: Record<string, number> = {};
79
-
80
- function isConfigParam(param: unknown, name: string) {
81
- // param !== Object(param) returns false if `param` is a function
82
- // or an object and returns true if `param` is null
83
- return (
84
- param !== undefined &&
85
- (param !== Object(param) ||
86
- !('__isNative' in (param as Record<string, unknown>))) &&
87
- name !== 'onHandlerStateChange' &&
88
- name !== 'onGestureEvent'
89
- );
90
- }
91
-
92
- function filterConfig(
93
- props: Record<string, unknown>,
94
- validProps: string[],
95
- defaults: Record<string, unknown> = {}
96
- ) {
97
- const res = { ...defaults };
98
- validProps.forEach((key) => {
99
- const value = props[key];
100
- if (isConfigParam(value, key)) {
101
- let value = props[key];
102
- if (key === 'simultaneousHandlers' || key === 'waitFor') {
103
- value = transformIntoHandlerTags(props[key]);
104
- } else if (key === 'hitSlop') {
105
- if (typeof value !== 'object') {
106
- value = { top: value, left: value, bottom: value, right: value };
107
- }
108
- }
109
- res[key] = value;
110
- }
74
+ let allowTouches = true;
75
+ const DEV_ON_ANDROID = __DEV__ && Platform.OS === 'android';
76
+ // Toggled inspector blocks touch events in order to allow inspecting on Android
77
+ // This needs to be a global variable in order to set initial state for `allowTouches` property in Handler component
78
+ if (DEV_ON_ANDROID) {
79
+ DeviceEventEmitter.addListener('toggleElementInspector', () => {
80
+ allowTouches = !allowTouches;
111
81
  });
112
- return res;
113
- }
114
-
115
- function transformIntoHandlerTags(handlerIDs: any) {
116
- if (!Array.isArray(handlerIDs)) {
117
- handlerIDs = [handlerIDs];
118
- }
119
-
120
- if (Platform.OS === 'web') {
121
- return handlerIDs
122
- .map(({ current }: { current: any }) => current)
123
- .filter((handle: any) => handle);
124
- }
125
- // converts handler string IDs into their numeric tags
126
- return handlerIDs
127
- .map(
128
- (handlerID: any) =>
129
- handlerIDToTag[handlerID] || handlerID.current?.handlerTag || -1
130
- )
131
- .filter((handlerTag: number) => handlerTag > 0);
132
82
  }
133
83
 
134
84
  type HandlerProps<T extends Record<string, unknown>> = Readonly<
@@ -183,7 +133,13 @@ export default function createHandler<
183
133
  transformProps,
184
134
  customNativeProps = [],
185
135
  }: CreateHandlerArgs<T>): React.ComponentType<T & React.RefAttributes<any>> {
186
- class Handler extends React.Component<T & InternalEventHandlers> {
136
+ interface HandlerState {
137
+ allowTouches: boolean;
138
+ }
139
+ class Handler extends React.Component<
140
+ T & InternalEventHandlers,
141
+ HandlerState
142
+ > {
187
143
  static displayName = name;
188
144
 
189
145
  private handlerTag: number;
@@ -192,12 +148,14 @@ export default function createHandler<
192
148
  private viewNode: any;
193
149
  private viewTag?: number;
194
150
  private updateEnqueued: ReturnType<typeof setImmediate> | null = null;
151
+ private inspectorToggleListener?: EmitterSubscription;
195
152
 
196
153
  constructor(props: T & InternalEventHandlers) {
197
154
  super(props);
198
- this.handlerTag = handlerTag++;
155
+ this.handlerTag = getNextHandlerTag();
199
156
  this.config = {};
200
157
  this.propsRef = React.createRef();
158
+ this.state = { allowTouches };
201
159
  if (props.id) {
202
160
  if (handlerIDToTag[props.id] !== undefined) {
203
161
  throw new Error(`Handler with ID "${props.id}" already registered`);
@@ -208,11 +166,21 @@ export default function createHandler<
208
166
 
209
167
  componentDidMount() {
210
168
  const props: HandlerProps<U> = this.props;
169
+
170
+ if (DEV_ON_ANDROID) {
171
+ this.inspectorToggleListener = DeviceEventEmitter.addListener(
172
+ 'toggleElementInspector',
173
+ () => {
174
+ this.setState((_) => ({ allowTouches }));
175
+ this.update();
176
+ }
177
+ );
178
+ }
211
179
  if (hasUnresolvedRefs(props)) {
212
180
  // If there are unresolved refs (e.g. ".current" has not yet been set)
213
181
  // passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to
214
182
  // _update method that will try to update native handler props using
215
- // setImmediate. This makes it so _update function gets called after all
183
+ // setImmediate. This makes it so update() function gets called after all
216
184
  // react components are mounted and we expect the missing ref object to
217
185
  // be resolved by then.
218
186
  this.updateEnqueued = setImmediate(() => {
@@ -241,6 +209,7 @@ export default function createHandler<
241
209
  }
242
210
 
243
211
  componentWillUnmount() {
212
+ this.inspectorToggleListener?.remove();
244
213
  RNGestureHandlerModule.dropGestureHandler(this.handlerTag);
245
214
  if (this.updateEnqueued) {
246
215
  clearImmediate(this.updateEnqueued);
@@ -314,12 +283,14 @@ export default function createHandler<
314
283
  (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(
315
284
  this.handlerTag,
316
285
  newViewTag,
286
+ false,
317
287
  this.propsRef
318
288
  );
319
289
  } else {
320
290
  RNGestureHandlerModule.attachGestureHandler(
321
291
  this.handlerTag,
322
- newViewTag
292
+ newViewTag,
293
+ false
323
294
  );
324
295
  }
325
296
  };
@@ -416,8 +387,12 @@ export default function createHandler<
416
387
  }
417
388
  }
418
389
  const events = {
419
- onGestureHandlerEvent: gestureEventHandler,
420
- onGestureHandlerStateChange: gestureStateEventHandler,
390
+ onGestureHandlerEvent: this.state.allowTouches
391
+ ? gestureEventHandler
392
+ : undefined,
393
+ onGestureHandlerStateChange: this.state.allowTouches
394
+ ? gestureStateEventHandler
395
+ : undefined,
421
396
  };
422
397
 
423
398
  this.propsRef.current = events;
@@ -0,0 +1,185 @@
1
+ // Previous types exported gesture handlers as classes which creates an interface and variable, both named the same as class.
2
+ // Without those types, we'd introduce breaking change, forcing users to prefix every handler type specification with typeof
3
+ // e.g. React.createRef<TapGestureHandler> -> React.createRef<typeof TapGestureHandler>.
4
+ // See https://www.typescriptlang.org/docs/handbook/classes.html#constructor-functions for reference.
5
+ import * as React from 'react';
6
+ import { Platform, findNodeHandle as findNodeHandleRN } from 'react-native';
7
+
8
+ import { State } from '../State';
9
+ import { EventType } from '../EventType';
10
+ import { ValueOf } from '../typeUtils';
11
+ import { handlerIDToTag } from './handlersRegistry';
12
+ import { toArray } from '../utils';
13
+
14
+ const commonProps = [
15
+ 'id',
16
+ 'enabled',
17
+ 'shouldCancelWhenOutside',
18
+ 'hitSlop',
19
+ ] as const;
20
+
21
+ const componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;
22
+
23
+ export const baseGestureHandlerProps = [
24
+ ...commonProps,
25
+ ...componentInteractionProps,
26
+ 'onBegan',
27
+ 'onFailed',
28
+ 'onCancelled',
29
+ 'onActivated',
30
+ 'onEnded',
31
+ 'onGestureEvent',
32
+ 'onHandlerStateChange',
33
+ ] as const;
34
+
35
+ export const baseGestureHandlerWithMonitorProps = [
36
+ ...commonProps,
37
+ 'needsPointerData',
38
+ 'manualActivation',
39
+ ];
40
+
41
+ export interface GestureEventPayload {
42
+ handlerTag: number;
43
+ numberOfPointers: number;
44
+ state: ValueOf<typeof State>;
45
+ }
46
+
47
+ export interface HandlerStateChangeEventPayload {
48
+ handlerTag: number;
49
+ numberOfPointers: number;
50
+ state: ValueOf<typeof State>;
51
+ oldState: ValueOf<typeof State>;
52
+ }
53
+
54
+ export type HitSlop =
55
+ | number
56
+ | Partial<
57
+ Record<
58
+ 'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal',
59
+ number
60
+ >
61
+ >
62
+ | Record<'width' | 'left', number>
63
+ | Record<'width' | 'right', number>
64
+ | Record<'height' | 'top', number>
65
+ | Record<'height' | 'bottom', number>;
66
+
67
+ //TODO(TS) events in handlers
68
+
69
+ export interface GestureEvent<ExtraEventPayloadT = Record<string, unknown>> {
70
+ nativeEvent: Readonly<GestureEventPayload & ExtraEventPayloadT>;
71
+ }
72
+ export interface HandlerStateChangeEvent<
73
+ ExtraEventPayloadT = Record<string, unknown>
74
+ > {
75
+ nativeEvent: Readonly<HandlerStateChangeEventPayload & ExtraEventPayloadT>;
76
+ }
77
+
78
+ export type TouchData = {
79
+ id: number;
80
+ x: number;
81
+ y: number;
82
+ absoluteX: number;
83
+ absoluteY: number;
84
+ };
85
+
86
+ export type GestureTouchEvent = {
87
+ handlerTag: number;
88
+ numberOfTouches: number;
89
+ state: ValueOf<typeof State>;
90
+ eventType: EventType;
91
+ allTouches: TouchData[];
92
+ changedTouches: TouchData[];
93
+ };
94
+
95
+ export type GestureUpdateEvent<
96
+ GestureEventPayloadT = Record<string, unknown>
97
+ > = GestureEventPayload & GestureEventPayloadT;
98
+
99
+ export type GestureStateChangeEvent<
100
+ GestureStateChangeEventPayloadT = Record<string, unknown>
101
+ > = HandlerStateChangeEventPayload & GestureStateChangeEventPayloadT;
102
+
103
+ export type CommonGestureConfig = {
104
+ enabled?: boolean;
105
+ shouldCancelWhenOutside?: boolean;
106
+ hitSlop?: HitSlop;
107
+ };
108
+
109
+ // Events payloads are types instead of interfaces due to TS limitation.
110
+ // See https://github.com/microsoft/TypeScript/issues/15300 for more info.
111
+ export type BaseGestureHandlerProps<
112
+ ExtraEventPayloadT extends Record<string, unknown> = Record<string, unknown>
113
+ > = CommonGestureConfig & {
114
+ id?: string;
115
+ waitFor?: React.Ref<unknown> | React.Ref<unknown>[];
116
+ simultaneousHandlers?: React.Ref<unknown> | React.Ref<unknown>[];
117
+ // TODO(TS) - fix event types
118
+ onBegan?: (event: HandlerStateChangeEvent) => void;
119
+ onFailed?: (event: HandlerStateChangeEvent) => void;
120
+ onCancelled?: (event: HandlerStateChangeEvent) => void;
121
+ onActivated?: (event: HandlerStateChangeEvent) => void;
122
+ onEnded?: (event: HandlerStateChangeEvent) => void;
123
+
124
+ //TODO(TS) consider using NativeSyntheticEvent
125
+ onGestureEvent?: (event: GestureEvent<ExtraEventPayloadT>) => void;
126
+ onHandlerStateChange?: (
127
+ event: HandlerStateChangeEvent<ExtraEventPayloadT>
128
+ ) => void;
129
+ };
130
+
131
+ function isConfigParam(param: unknown, name: string) {
132
+ // param !== Object(param) returns false if `param` is a function
133
+ // or an object and returns true if `param` is null
134
+ return (
135
+ param !== undefined &&
136
+ (param !== Object(param) ||
137
+ !('__isNative' in (param as Record<string, unknown>))) &&
138
+ name !== 'onHandlerStateChange' &&
139
+ name !== 'onGestureEvent'
140
+ );
141
+ }
142
+
143
+ export function filterConfig(
144
+ props: Record<string, unknown>,
145
+ validProps: string[],
146
+ defaults: Record<string, unknown> = {}
147
+ ) {
148
+ const filteredConfig = { ...defaults };
149
+ for (const key of validProps) {
150
+ let value = props[key];
151
+ if (isConfigParam(value, key)) {
152
+ if (key === 'simultaneousHandlers' || key === 'waitFor') {
153
+ value = transformIntoHandlerTags(props[key]);
154
+ } else if (key === 'hitSlop' && typeof value !== 'object') {
155
+ value = { top: value, left: value, bottom: value, right: value };
156
+ }
157
+ filteredConfig[key] = value;
158
+ }
159
+ }
160
+ return filteredConfig;
161
+ }
162
+
163
+ function transformIntoHandlerTags(handlerIDs: any) {
164
+ handlerIDs = toArray(handlerIDs);
165
+
166
+ if (Platform.OS === 'web') {
167
+ return handlerIDs
168
+ .map(({ current }: { current: any }) => current)
169
+ .filter((handle: any) => handle);
170
+ }
171
+ // converts handler string IDs into their numeric tags
172
+ return handlerIDs
173
+ .map(
174
+ (handlerID: any) =>
175
+ handlerIDToTag[handlerID] || handlerID.current?.handlerTag || -1
176
+ )
177
+ .filter((handlerTag: number) => handlerTag > 0);
178
+ }
179
+
180
+ export function findNodeHandle(
181
+ node: null | number | React.Component<any, any> | React.ComponentClass<any>
182
+ ): null | number | React.Component<any, any> | React.ComponentClass<any> {
183
+ if (Platform.OS === 'web') return node;
184
+ return findNodeHandleRN(node);
185
+ }
@@ -5,25 +5,39 @@ import {
5
5
  RectButtonProps,
6
6
  } from '../components/GestureButtons';
7
7
  import {
8
- FlingGestureHandlerEventPayload,
9
- FlingGestureHandlerProps,
10
- ForceTouchGestureHandlerEventPayload,
11
- ForceTouchGestureHandlerProps,
12
8
  GestureEvent,
13
9
  GestureEventPayload,
14
10
  HandlerStateChangeEvent,
15
11
  HandlerStateChangeEventPayload,
12
+ } from './gestureHandlerCommon';
13
+ import {
14
+ FlingGestureHandlerEventPayload,
15
+ FlingGestureHandlerProps,
16
+ } from './FlingGestureHandler';
17
+ import {
18
+ ForceTouchGestureHandlerEventPayload,
19
+ ForceTouchGestureHandlerProps,
20
+ } from './ForceTouchGestureHandler';
21
+ import {
16
22
  LongPressGestureHandlerEventPayload,
17
23
  LongPressGestureHandlerProps,
24
+ } from './LongPressGestureHandler';
25
+ import {
18
26
  PanGestureHandlerEventPayload,
19
27
  PanGestureHandlerProps,
28
+ } from './PanGestureHandler';
29
+ import {
20
30
  PinchGestureHandlerEventPayload,
21
31
  PinchGestureHandlerProps,
32
+ } from './PinchGestureHandler';
33
+ import {
22
34
  RotationGestureHandlerEventPayload,
23
35
  RotationGestureHandlerProps,
36
+ } from './RotationGestureHandler';
37
+ import {
24
38
  TapGestureHandlerEventPayload,
25
39
  TapGestureHandlerProps,
26
- } from './gestureHandlers';
40
+ } from './TapGestureHandler';
27
41
  import {
28
42
  NativeViewGestureHandlerPayload,
29
43
  NativeViewGestureHandlerProps,