react-native-gesture-handler 1.10.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/README.md +7 -6
  2. package/android/build.gradle +23 -1
  3. package/android/gradle.properties +19 -0
  4. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +710 -0
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
  11. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
  12. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
  13. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
  14. package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
  15. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
  16. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
  17. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
  18. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
  19. package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
  20. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
  21. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
  22. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
  23. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
  24. package/android/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -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/RNGestureHandler.xcodeproj/xcuserdata/mdk.xcuserdatad/xcschemes/RNGestureHandler.xcscheme +80 -0
  53. package/ios/RNGestureHandler.xcodeproj/xcuserdata/mdk.xcuserdatad/xcschemes/xcschememanagement.plist +27 -0
  54. package/ios/RNGestureHandlerEvents.h +9 -0
  55. package/ios/RNGestureHandlerEvents.m +34 -0
  56. package/ios/RNGestureHandlerManager.h +7 -0
  57. package/ios/RNGestureHandlerManager.m +62 -34
  58. package/ios/RNGestureHandlerModule.m +39 -3
  59. package/ios/RNGestureHandlerPointerTracker.h +25 -0
  60. package/ios/RNGestureHandlerPointerTracker.m +237 -0
  61. package/ios/RNGestureHandlerRegistry.h +1 -0
  62. package/ios/RNGestureHandlerRegistry.m +10 -0
  63. package/ios/RNGestureHandlerStateManager.h +5 -0
  64. package/ios/RNManualActivationRecognizer.h +10 -0
  65. package/ios/RNManualActivationRecognizer.m +80 -0
  66. package/ios/RNRootViewGestureRecognizer.m +1 -1
  67. package/ios/RNTouchEventType.h +9 -0
  68. package/lib/commonjs/EventType.js +16 -0
  69. package/lib/commonjs/EventType.js.map +1 -0
  70. package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
  71. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  72. package/lib/commonjs/GestureHandlerRootView.js +11 -3
  73. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.js +3 -1
  75. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  76. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  77. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  78. package/lib/commonjs/components/DrawerLayout.js +41 -37
  79. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  80. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  81. package/lib/commonjs/components/GestureComponents.js +31 -12
  82. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  83. package/lib/commonjs/components/Swipeable.js +10 -6
  84. package/lib/commonjs/components/Swipeable.js.map +1 -1
  85. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  86. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  87. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
  88. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  89. package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
  90. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  91. package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
  92. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
  93. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
  94. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
  95. package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
  96. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
  97. package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
  98. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  99. package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
  100. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
  101. package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
  102. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
  103. package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
  104. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
  105. package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
  106. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
  107. package/lib/commonjs/handlers/createHandler.js +52 -83
  108. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  109. package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
  110. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
  111. package/lib/commonjs/handlers/gestures/GestureDetector.js +415 -0
  112. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
  113. package/lib/commonjs/handlers/gestures/eventReceiver.js +112 -0
  114. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
  115. package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
  116. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
  117. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +39 -0
  118. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
  119. package/lib/commonjs/handlers/gestures/gesture.js +177 -0
  120. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
  121. package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
  122. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
  123. package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
  124. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
  125. package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
  126. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
  127. package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
  128. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
  129. package/lib/commonjs/handlers/gestures/manualGesture.js +19 -0
  130. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
  131. package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
  132. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
  133. package/lib/commonjs/handlers/gestures/panGesture.js +116 -0
  134. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
  135. package/lib/commonjs/handlers/gestures/pinchGesture.js +19 -0
  136. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
  137. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
  138. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
  139. package/lib/commonjs/handlers/gestures/rotationGesture.js +19 -0
  140. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
  141. package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
  142. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
  143. package/lib/commonjs/handlers/handlersRegistry.js +31 -0
  144. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
  145. package/lib/commonjs/index.js +146 -8
  146. package/lib/commonjs/index.js.map +1 -1
  147. package/lib/commonjs/init.js +13 -0
  148. package/lib/commonjs/init.js.map +1 -0
  149. package/lib/commonjs/mocks.js +31 -2
  150. package/lib/commonjs/mocks.js.map +1 -1
  151. package/lib/commonjs/utils.js +15 -0
  152. package/lib/commonjs/utils.js.map +1 -0
  153. package/lib/commonjs/web/Errors.js +1 -1
  154. package/lib/commonjs/web/Errors.js.map +1 -1
  155. package/lib/commonjs/web/GestureHandler.js +4 -6
  156. package/lib/commonjs/web/GestureHandler.js.map +1 -1
  157. package/lib/commonjs/web/NodeManager.js +8 -2
  158. package/lib/commonjs/web/NodeManager.js.map +1 -1
  159. package/lib/module/EventType.js +8 -0
  160. package/lib/module/EventType.js.map +1 -0
  161. package/lib/module/GestureHandlerRootView.android.js +2 -14
  162. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  163. package/lib/module/GestureHandlerRootView.js +5 -1
  164. package/lib/module/GestureHandlerRootView.js.map +1 -1
  165. package/lib/module/RNGestureHandlerModule.js +3 -1
  166. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  167. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  168. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  169. package/lib/module/components/DrawerLayout.js +43 -40
  170. package/lib/module/components/DrawerLayout.js.map +1 -1
  171. package/lib/module/components/GestureButtons.js.map +1 -1
  172. package/lib/module/components/GestureComponents.js +29 -11
  173. package/lib/module/components/GestureComponents.js.map +1 -1
  174. package/lib/module/components/Swipeable.js +9 -6
  175. package/lib/module/components/Swipeable.js.map +1 -1
  176. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  177. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  178. package/lib/module/components/touchables/TouchableOpacity.js +1 -1
  179. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  180. package/lib/module/gestureHandlerRootHOC.js +1 -1
  181. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  182. package/lib/module/handlers/FlingGestureHandler.js +10 -0
  183. package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
  184. package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
  185. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
  186. package/lib/module/handlers/LongPressGestureHandler.js +10 -0
  187. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
  188. package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
  189. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  190. package/lib/module/handlers/PanGestureHandler.js +106 -0
  191. package/lib/module/handlers/PanGestureHandler.js.map +1 -0
  192. package/lib/module/handlers/PinchGestureHandler.js +9 -0
  193. package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
  194. package/lib/module/handlers/RotationGestureHandler.js +9 -0
  195. package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
  196. package/lib/module/handlers/TapGestureHandler.js +10 -0
  197. package/lib/module/handlers/TapGestureHandler.js.map +1 -0
  198. package/lib/module/handlers/createHandler.js +41 -76
  199. package/lib/module/handlers/createHandler.js.map +1 -1
  200. package/lib/module/handlers/gestureHandlerCommon.js +66 -0
  201. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
  202. package/lib/module/handlers/gestures/GestureDetector.js +378 -0
  203. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
  204. package/lib/module/handlers/gestures/eventReceiver.js +97 -0
  205. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
  206. package/lib/module/handlers/gestures/flingGesture.js +24 -0
  207. package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
  208. package/lib/module/handlers/gestures/forceTouchGesture.js +29 -0
  209. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
  210. package/lib/module/handlers/gestures/gesture.js +159 -0
  211. package/lib/module/handlers/gestures/gesture.js.map +1 -0
  212. package/lib/module/handlers/gestures/gestureComposition.js +79 -0
  213. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
  214. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  215. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
  216. package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
  217. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
  218. package/lib/module/handlers/gestures/longPressGesture.js +24 -0
  219. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
  220. package/lib/module/handlers/gestures/manualGesture.js +9 -0
  221. package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
  222. package/lib/module/handlers/gestures/nativeGesture.js +24 -0
  223. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
  224. package/lib/module/handlers/gestures/panGesture.js +106 -0
  225. package/lib/module/handlers/gestures/panGesture.js.map +1 -0
  226. package/lib/module/handlers/gestures/pinchGesture.js +9 -0
  227. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
  228. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
  229. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
  230. package/lib/module/handlers/gestures/rotationGesture.js +9 -0
  231. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
  232. package/lib/module/handlers/gestures/tapGesture.js +49 -0
  233. package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
  234. package/lib/module/handlers/handlersRegistry.js +16 -0
  235. package/lib/module/handlers/handlersRegistry.js.map +1 -0
  236. package/lib/module/index.js +22 -1
  237. package/lib/module/index.js.map +1 -1
  238. package/lib/module/init.js +5 -0
  239. package/lib/module/init.js.map +1 -0
  240. package/lib/module/mocks.js +31 -2
  241. package/lib/module/mocks.js.map +1 -1
  242. package/lib/module/utils.js +8 -0
  243. package/lib/module/utils.js.map +1 -0
  244. package/lib/module/web/Errors.js +1 -1
  245. package/lib/module/web/Errors.js.map +1 -1
  246. package/lib/module/web/GestureHandler.js +4 -6
  247. package/lib/module/web/GestureHandler.js.map +1 -1
  248. package/lib/module/web/NodeManager.js +8 -2
  249. package/lib/module/web/NodeManager.js.map +1 -1
  250. package/lib/typescript/EventType.d.ts +8 -0
  251. package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
  252. package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
  253. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  254. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  255. package/lib/typescript/components/DrawerLayout.d.ts +50 -1
  256. package/lib/typescript/components/GestureButtons.d.ts +36 -0
  257. package/lib/typescript/components/GestureComponents.d.ts +8 -35
  258. package/lib/typescript/components/Swipeable.d.ts +73 -6
  259. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
  260. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
  261. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
  262. package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
  263. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
  264. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
  265. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
  266. package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
  267. package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
  268. package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
  269. package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
  270. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  271. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
  272. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
  273. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
  274. package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
  275. package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
  276. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +10 -0
  277. package/lib/typescript/handlers/gestures/gesture.d.ts +90 -0
  278. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  279. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
  280. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
  281. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
  282. package/lib/typescript/handlers/gestures/manualGesture.d.ts +5 -0
  283. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
  284. package/lib/typescript/handlers/gestures/panGesture.d.ts +19 -0
  285. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +6 -0
  286. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
  287. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +6 -0
  288. package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
  289. package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
  290. package/lib/typescript/index.d.ts +29 -2
  291. package/lib/typescript/init.d.ts +1 -0
  292. package/lib/typescript/mocks.d.ts +21 -2
  293. package/lib/typescript/utils.d.ts +1 -0
  294. package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
  295. package/lib/typescript/web/GestureHandler.d.ts +0 -1
  296. package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
  297. package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
  298. package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
  299. package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
  300. package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
  301. package/package.json +7 -5
  302. package/src/EventType.ts +10 -0
  303. package/src/GestureHandlerRootView.android.tsx +9 -25
  304. package/src/GestureHandlerRootView.tsx +11 -2
  305. package/src/RNGestureHandlerModule.ts +5 -1
  306. package/src/RNGestureHandlerModule.web.ts +1 -0
  307. package/src/components/DrawerLayout.tsx +114 -41
  308. package/src/components/GestureButtons.tsx +45 -5
  309. package/src/components/GestureComponents.tsx +47 -41
  310. package/src/components/Swipeable.tsx +108 -21
  311. package/src/components/touchables/GenericTouchable.tsx +2 -1
  312. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  313. package/src/handlers/FlingGestureHandler.ts +57 -0
  314. package/src/handlers/ForceTouchGestureHandler.ts +83 -0
  315. package/src/handlers/LongPressGestureHandler.ts +84 -0
  316. package/src/handlers/NativeViewGestureHandler.ts +31 -7
  317. package/src/handlers/PanGestureHandler.ts +321 -0
  318. package/src/handlers/PinchGestureHandler.ts +46 -0
  319. package/src/handlers/RotationGestureHandler.ts +46 -0
  320. package/src/handlers/TapGestureHandler.ts +90 -0
  321. package/src/handlers/createHandler.ts +54 -79
  322. package/src/handlers/gestureHandlerCommon.ts +185 -0
  323. package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
  324. package/src/handlers/gestures/GestureDetector.tsx +490 -0
  325. package/src/handlers/gestures/eventReceiver.ts +129 -0
  326. package/src/handlers/gestures/flingGesture.ts +27 -0
  327. package/src/handlers/gestures/forceTouchGesture.ts +32 -0
  328. package/src/handlers/gestures/gesture.ts +262 -0
  329. package/src/handlers/gestures/gestureComposition.ts +109 -0
  330. package/src/handlers/gestures/gestureObjects.ts +79 -0
  331. package/src/handlers/gestures/gestureStateManager.ts +60 -0
  332. package/src/handlers/gestures/longPressGesture.ts +27 -0
  333. package/src/handlers/gestures/manualGesture.ts +11 -0
  334. package/src/handlers/gestures/nativeGesture.ts +27 -0
  335. package/src/handlers/gestures/panGesture.ts +105 -0
  336. package/src/handlers/gestures/pinchGesture.ts +12 -0
  337. package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
  338. package/src/handlers/gestures/rotationGesture.ts +12 -0
  339. package/src/handlers/gestures/tapGesture.ts +52 -0
  340. package/src/handlers/handlersRegistry.ts +22 -0
  341. package/src/index.ts +57 -17
  342. package/src/init.ts +5 -0
  343. package/src/mocks.ts +42 -2
  344. package/src/utils.ts +7 -0
  345. package/src/web/GestureHandler.ts +1 -2
  346. package/src/web/NodeManager.ts +5 -0
  347. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
  348. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
  349. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
  350. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
  351. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
  352. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
  353. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
  354. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
  355. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
  356. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
  357. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
  358. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
  359. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
  360. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
  361. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
  362. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
  363. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
  364. package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
  365. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
  366. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
  367. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
  368. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
  369. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
  370. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
  371. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
  372. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
  373. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
  374. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
  375. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
  376. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
  377. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
  378. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
  379. package/lib/commonjs/handlers/gestureHandlers.js +0 -236
  380. package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
  381. package/lib/module/handlers/gestureHandlers.js +0 -216
  382. package/lib/module/handlers/gestureHandlers.js.map +0 -1
  383. package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
  384. package/src/handlers/gestureHandlers.ts +0 -511
@@ -0,0 +1,490 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ import {
3
+ GestureType,
4
+ HandlerCallbacks,
5
+ BaseGesture,
6
+ GestureRef,
7
+ CALLBACK_TYPE,
8
+ } from './gesture';
9
+ import { Reanimated, SharedValue } from './reanimatedWrapper';
10
+ import { registerHandler, unregisterHandler } from '../handlersRegistry';
11
+ import RNGestureHandlerModule from '../../RNGestureHandlerModule';
12
+ import {
13
+ baseGestureHandlerWithMonitorProps,
14
+ filterConfig,
15
+ findNodeHandle,
16
+ GestureTouchEvent,
17
+ GestureUpdateEvent,
18
+ GestureStateChangeEvent,
19
+ } from '../gestureHandlerCommon';
20
+ import {
21
+ GestureStateManager,
22
+ GestureStateManagerType,
23
+ } from './gestureStateManager';
24
+ import { flingGestureHandlerProps } from '../FlingGestureHandler';
25
+ import { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';
26
+ import { longPressGestureHandlerProps } from '../LongPressGestureHandler';
27
+ import {
28
+ panGestureHandlerProps,
29
+ panGestureHandlerCustomNativeProps,
30
+ } from '../PanGestureHandler';
31
+ import { tapGestureHandlerProps } from '../TapGestureHandler';
32
+ import { State } from '../../State';
33
+ import { EventType } from '../../EventType';
34
+ import { ComposedGesture } from './gestureComposition';
35
+
36
+ const ALLOWED_PROPS = [
37
+ ...baseGestureHandlerWithMonitorProps,
38
+ ...tapGestureHandlerProps,
39
+ ...panGestureHandlerProps,
40
+ ...panGestureHandlerCustomNativeProps,
41
+ ...longPressGestureHandlerProps,
42
+ ...forceTouchGestureHandlerProps,
43
+ ...flingGestureHandlerProps,
44
+ ];
45
+
46
+ export type GestureConfigReference = {
47
+ config: GestureType[];
48
+ animatedEventHandler: unknown;
49
+ animatedHandlers: SharedValue<
50
+ HandlerCallbacks<Record<string, unknown>>[] | null
51
+ > | null;
52
+ firstExecution: boolean;
53
+ useAnimated: boolean;
54
+ };
55
+
56
+ function convertToHandlerTag(ref: GestureRef): number {
57
+ if (typeof ref === 'number') {
58
+ return ref;
59
+ } else if (ref instanceof BaseGesture) {
60
+ return ref.handlerTag;
61
+ } else {
62
+ // @ts-ignore in this case it should be a ref either to gesture object or
63
+ // a gesture handler component, in both cases handlerTag property exists
64
+ return ref.current?.handlerTag ?? -1;
65
+ }
66
+ }
67
+
68
+ function extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {
69
+ return (
70
+ interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []
71
+ );
72
+ }
73
+
74
+ function dropHandlers(preparedGesture: GestureConfigReference) {
75
+ for (const handler of preparedGesture.config) {
76
+ RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);
77
+
78
+ unregisterHandler(handler.handlerTag);
79
+ }
80
+ }
81
+
82
+ interface AttachHandlersConfig {
83
+ preparedGesture: GestureConfigReference;
84
+ gestureConfig: ComposedGesture | GestureType | undefined;
85
+ gesture: GestureType[];
86
+ viewTag: number;
87
+ useAnimated: boolean;
88
+ }
89
+
90
+ function attachHandlers({
91
+ preparedGesture,
92
+ gestureConfig,
93
+ gesture,
94
+ viewTag,
95
+ useAnimated,
96
+ }: AttachHandlersConfig) {
97
+ if (!preparedGesture.firstExecution) {
98
+ gestureConfig?.initialize();
99
+ } else {
100
+ preparedGesture.firstExecution = false;
101
+ }
102
+
103
+ // use setImmediate to extract handlerTags, because all refs should be initialized
104
+ // when it's ran
105
+ setImmediate(() => {
106
+ gestureConfig?.prepare();
107
+ });
108
+
109
+ for (const handler of gesture) {
110
+ RNGestureHandlerModule.createGestureHandler(
111
+ handler.handlerName,
112
+ handler.handlerTag,
113
+ filterConfig(handler.config, ALLOWED_PROPS)
114
+ );
115
+
116
+ registerHandler(handler.handlerTag, handler);
117
+
118
+ // use setImmediate to extract handlerTags, because all refs should be initialized
119
+ // when it's ran
120
+ setImmediate(() => {
121
+ let requireToFail: number[] = [];
122
+ if (handler.config.requireToFail) {
123
+ requireToFail = extractValidHandlerTags(handler.config.requireToFail);
124
+ }
125
+
126
+ let simultaneousWith: number[] = [];
127
+ if (handler.config.simultaneousWith) {
128
+ simultaneousWith = extractValidHandlerTags(
129
+ handler.config.simultaneousWith
130
+ );
131
+ }
132
+
133
+ RNGestureHandlerModule.updateGestureHandler(
134
+ handler.handlerTag,
135
+ filterConfig(handler.config, ALLOWED_PROPS, {
136
+ simultaneousHandlers: simultaneousWith,
137
+ waitFor: requireToFail,
138
+ })
139
+ );
140
+ });
141
+ }
142
+ preparedGesture.config = gesture;
143
+
144
+ for (const gesture of preparedGesture.config) {
145
+ RNGestureHandlerModule.attachGestureHandler(
146
+ gesture.handlerTag,
147
+ viewTag,
148
+ !useAnimated // send direct events when using animatedGesture, device events otherwise
149
+ );
150
+ }
151
+
152
+ if (preparedGesture.animatedHandlers) {
153
+ preparedGesture.animatedHandlers.value = (gesture.map(
154
+ (g) => g.handlers
155
+ ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];
156
+ }
157
+ }
158
+
159
+ function updateHandlers(
160
+ preparedGesture: GestureConfigReference,
161
+ gestureConfig: ComposedGesture | GestureType | undefined,
162
+ gesture: GestureType[]
163
+ ) {
164
+ gestureConfig?.prepare();
165
+
166
+ for (let i = 0; i < gesture.length; i++) {
167
+ const handler = preparedGesture.config[i];
168
+
169
+ gesture[i].handlerTag = handler.handlerTag;
170
+ gesture[i].handlers.handlerTag = handler.handlerTag;
171
+ }
172
+
173
+ // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated
174
+ // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait
175
+ // in case of external relations)
176
+ setImmediate(() => {
177
+ for (let i = 0; i < gesture.length; i++) {
178
+ const handler = preparedGesture.config[i];
179
+
180
+ handler.config = gesture[i].config;
181
+ handler.handlers = gesture[i].handlers;
182
+ handler.handlers.handlerTag = handler.handlerTag;
183
+
184
+ const requireToFail = extractValidHandlerTags(
185
+ handler.config.requireToFail
186
+ );
187
+
188
+ const simultaneousWith = extractValidHandlerTags(
189
+ handler.config.simultaneousWith
190
+ );
191
+
192
+ RNGestureHandlerModule.updateGestureHandler(
193
+ handler.handlerTag,
194
+ filterConfig(handler.config, ALLOWED_PROPS, {
195
+ simultaneousHandlers: simultaneousWith,
196
+ waitFor: requireToFail,
197
+ })
198
+ );
199
+
200
+ registerHandler(handler.handlerTag, handler);
201
+ }
202
+
203
+ if (preparedGesture.animatedHandlers) {
204
+ preparedGesture.animatedHandlers.value = (preparedGesture.config.map(
205
+ (g) => g.handlers
206
+ ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];
207
+ }
208
+ });
209
+ }
210
+
211
+ function needsToReattach(
212
+ preparedGesture: GestureConfigReference,
213
+ gesture: GestureType[]
214
+ ) {
215
+ if (gesture.length !== preparedGesture.config.length) {
216
+ return true;
217
+ }
218
+ for (let i = 0; i < gesture.length; i++) {
219
+ if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {
220
+ return true;
221
+ }
222
+ }
223
+
224
+ return false;
225
+ }
226
+
227
+ function useAnimatedGesture(preparedGesture: GestureConfigReference) {
228
+ if (!Reanimated) {
229
+ return;
230
+ }
231
+
232
+ function isStateChangeEvent(
233
+ event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
234
+ ): event is GestureStateChangeEvent {
235
+ 'worklet';
236
+ // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point
237
+ return event.oldState != null;
238
+ }
239
+
240
+ function isTouchEvent(
241
+ event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
242
+ ): event is GestureTouchEvent {
243
+ 'worklet';
244
+ return event.eventType != null;
245
+ }
246
+
247
+ function getHandler(
248
+ type: CALLBACK_TYPE,
249
+ gesture: HandlerCallbacks<Record<string, unknown>>
250
+ ) {
251
+ 'worklet';
252
+ switch (type) {
253
+ case CALLBACK_TYPE.BEGAN:
254
+ return gesture.onBegin;
255
+ case CALLBACK_TYPE.START:
256
+ return gesture.onStart;
257
+ case CALLBACK_TYPE.UPDATE:
258
+ return gesture.onUpdate;
259
+ case CALLBACK_TYPE.END:
260
+ return gesture.onEnd;
261
+ case CALLBACK_TYPE.TOUCHES_DOWN:
262
+ return gesture.onTouchesDown;
263
+ case CALLBACK_TYPE.TOUCHES_MOVE:
264
+ return gesture.onTouchesMove;
265
+ case CALLBACK_TYPE.TOUCHES_UP:
266
+ return gesture.onTouchesUp;
267
+ case CALLBACK_TYPE.TOUCHES_CANCELLED:
268
+ return gesture.onTouchesCancelled;
269
+ }
270
+ }
271
+
272
+ function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {
273
+ 'worklet';
274
+ switch (eventType) {
275
+ case EventType.TOUCHES_DOWN:
276
+ return CALLBACK_TYPE.TOUCHES_DOWN;
277
+ case EventType.TOUCHES_MOVE:
278
+ return CALLBACK_TYPE.TOUCHES_MOVE;
279
+ case EventType.TOUCHES_UP:
280
+ return CALLBACK_TYPE.TOUCHES_UP;
281
+ case EventType.TOUCHES_CANCELLED:
282
+ return CALLBACK_TYPE.TOUCHES_CANCELLED;
283
+ }
284
+ return CALLBACK_TYPE.UNDEFINED;
285
+ }
286
+
287
+ function runWorklet(
288
+ type: CALLBACK_TYPE,
289
+ gesture: HandlerCallbacks<Record<string, unknown>>,
290
+ event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,
291
+ ...args: any[]
292
+ ) {
293
+ 'worklet';
294
+ const handler = getHandler(type, gesture);
295
+ if (gesture.isWorklet[type]) {
296
+ // @ts-ignore Logic below makes sure the correct event is send to the
297
+ // correct handler.
298
+ handler?.(event, ...args);
299
+ } else if (handler) {
300
+ console.warn('Animated gesture callback must be a worklet');
301
+ }
302
+ }
303
+
304
+ // Hooks are called conditionally, but the condition is whether the
305
+ // react-native-reanimated is installed, which shouldn't change while running
306
+ // eslint-disable-next-line react-hooks/rules-of-hooks
307
+ const sharedHandlersCallbacks = Reanimated.useSharedValue<
308
+ HandlerCallbacks<Record<string, unknown>>[] | null
309
+ >(null);
310
+
311
+ // not every gesture needs a state controller, init them lazily
312
+ const stateControllers: GestureStateManagerType[] = [];
313
+
314
+ const callback = (
315
+ event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent
316
+ ) => {
317
+ 'worklet';
318
+
319
+ const currentCallback = sharedHandlersCallbacks.value;
320
+ if (!currentCallback) {
321
+ return;
322
+ }
323
+
324
+ for (let i = 0; i < currentCallback.length; i++) {
325
+ const gesture = currentCallback[i];
326
+
327
+ if (event.handlerTag === gesture.handlerTag) {
328
+ if (isStateChangeEvent(event)) {
329
+ if (
330
+ event.oldState === State.UNDETERMINED &&
331
+ event.state === State.BEGAN
332
+ ) {
333
+ runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);
334
+ } else if (
335
+ (event.oldState === State.BEGAN ||
336
+ event.oldState === State.UNDETERMINED) &&
337
+ event.state === State.ACTIVE
338
+ ) {
339
+ runWorklet(CALLBACK_TYPE.START, gesture, event);
340
+ } else if (
341
+ event.oldState !== event.state &&
342
+ event.state === State.END
343
+ ) {
344
+ runWorklet(CALLBACK_TYPE.END, gesture, event, true);
345
+ } else if (
346
+ (event.state === State.FAILED || event.state === State.CANCELLED) &&
347
+ event.state !== event.oldState
348
+ ) {
349
+ runWorklet(CALLBACK_TYPE.END, gesture, event, false);
350
+ }
351
+ } else if (isTouchEvent(event)) {
352
+ if (!stateControllers[i]) {
353
+ stateControllers[i] = GestureStateManager.create(event.handlerTag);
354
+ }
355
+
356
+ if (event.eventType !== EventType.UNDETERMINED) {
357
+ runWorklet(
358
+ touchEventTypeToCallbackType(event.eventType),
359
+ gesture,
360
+ event,
361
+ stateControllers[i]
362
+ );
363
+ }
364
+ } else {
365
+ runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);
366
+ }
367
+ }
368
+ }
369
+ };
370
+
371
+ // eslint-disable-next-line react-hooks/rules-of-hooks
372
+ const event = Reanimated.useEvent(
373
+ callback,
374
+ ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],
375
+ true
376
+ );
377
+
378
+ preparedGesture.animatedEventHandler = event;
379
+ preparedGesture.animatedHandlers = sharedHandlersCallbacks;
380
+ }
381
+
382
+ interface GestureDetectorProps {
383
+ gesture?: ComposedGesture | GestureType;
384
+ }
385
+ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
386
+ props
387
+ ) => {
388
+ const gestureConfig = props.gesture;
389
+ const gesture = gestureConfig?.toGestureArray?.() ?? [];
390
+ const useAnimated =
391
+ gesture.find((gesture) =>
392
+ gesture.handlers.isWorklet.reduce((prev, current) => prev || current)
393
+ ) != null;
394
+ const viewRef = useRef(null);
395
+ const firstRenderRef = useRef(true);
396
+
397
+ const preparedGesture = React.useRef<GestureConfigReference>({
398
+ config: gesture,
399
+ animatedEventHandler: null,
400
+ animatedHandlers: null,
401
+ firstExecution: true,
402
+ useAnimated: useAnimated,
403
+ }).current;
404
+
405
+ if (useAnimated !== preparedGesture.useAnimated) {
406
+ throw new Error(
407
+ 'You cannot change whether you are using gesture or animatedGesture while the app is running'
408
+ );
409
+ }
410
+
411
+ if (preparedGesture.firstExecution) {
412
+ gestureConfig?.initialize?.();
413
+ }
414
+
415
+ if (useAnimated) {
416
+ // Whether animatedGesture or gesture is used shouldn't change
417
+ // during while an app is running
418
+ // eslint-disable-next-line react-hooks/rules-of-hooks
419
+ useAnimatedGesture(preparedGesture);
420
+ }
421
+
422
+ useEffect(() => {
423
+ firstRenderRef.current = true;
424
+ const viewTag = findNodeHandle(viewRef.current) as number;
425
+ attachHandlers({
426
+ preparedGesture,
427
+ gestureConfig,
428
+ gesture,
429
+ viewTag,
430
+ useAnimated,
431
+ });
432
+
433
+ return () => {
434
+ dropHandlers(preparedGesture);
435
+ };
436
+ }, []);
437
+
438
+ useEffect(() => {
439
+ if (!firstRenderRef.current) {
440
+ const viewTag = findNodeHandle(viewRef.current) as number;
441
+
442
+ if (needsToReattach(preparedGesture, gesture)) {
443
+ dropHandlers(preparedGesture);
444
+ attachHandlers({
445
+ preparedGesture,
446
+ gestureConfig,
447
+ gesture,
448
+ viewTag,
449
+ useAnimated,
450
+ });
451
+ } else {
452
+ updateHandlers(preparedGesture, gestureConfig, gesture);
453
+ }
454
+ } else {
455
+ firstRenderRef.current = false;
456
+ }
457
+ }, [props]);
458
+
459
+ if (useAnimated) {
460
+ return (
461
+ <AnimatedWrap
462
+ ref={viewRef}
463
+ onGestureHandlerEvent={preparedGesture.animatedEventHandler}>
464
+ {props.children}
465
+ </AnimatedWrap>
466
+ );
467
+ } else {
468
+ return <Wrap ref={viewRef}>{props.children}</Wrap>;
469
+ }
470
+ };
471
+
472
+ class Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {
473
+ render() {
474
+ // I don't think that fighting with types over such a simple function is worth it
475
+ // The only thing it does is add 'collapsable: false' to the child component
476
+ // to make sure it is in the native view hierarchy so the detector can find
477
+ // correct viewTag to attach to.
478
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
479
+ const child: any = React.Children.only(this.props.children);
480
+
481
+ return React.cloneElement(
482
+ child,
483
+ { collapsable: false },
484
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
485
+ child.props.children
486
+ );
487
+ }
488
+ }
489
+
490
+ const AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;
@@ -0,0 +1,129 @@
1
+ import { DeviceEventEmitter, EmitterSubscription } from 'react-native';
2
+ import { State } from '../../State';
3
+ import { EventType } from '../../EventType';
4
+ import {
5
+ GestureTouchEvent,
6
+ GestureUpdateEvent,
7
+ GestureStateChangeEvent,
8
+ } from '../gestureHandlerCommon';
9
+ import { GestureStateManagerType } from './gestureStateManager';
10
+ import { findHandler } from '../handlersRegistry';
11
+ import { BaseGesture } from './gesture';
12
+
13
+ let gestureHandlerEventSubscription: EmitterSubscription | null = null;
14
+ let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;
15
+
16
+ const dummyStateManager: GestureStateManagerType = {
17
+ begin: () => {
18
+ console.warn(
19
+ 'You have to use react-native-reanimated in order to control the state of the gesture.'
20
+ );
21
+ },
22
+ activate: () => {
23
+ console.warn(
24
+ 'You have to use react-native-reanimated in order to control the state of the gesture.'
25
+ );
26
+ },
27
+ end: () => {
28
+ console.warn(
29
+ 'You have to use react-native-reanimated in order to control the state of the gesture.'
30
+ );
31
+ },
32
+ fail: () => {
33
+ console.warn(
34
+ 'You have to use react-native-reanimated in order to control the state of the gesture.'
35
+ );
36
+ },
37
+ };
38
+
39
+ function isStateChangeEvent(
40
+ event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
41
+ ): event is GestureStateChangeEvent {
42
+ // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point
43
+ return event.oldState != null;
44
+ }
45
+
46
+ function isTouchEvent(
47
+ event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
48
+ ): event is GestureTouchEvent {
49
+ return event.eventType != null;
50
+ }
51
+
52
+ function onGestureHandlerEvent(
53
+ event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
54
+ ) {
55
+ const handler = findHandler(event.handlerTag) as BaseGesture<
56
+ Record<string, unknown>
57
+ >;
58
+
59
+ if (handler) {
60
+ if (isStateChangeEvent(event)) {
61
+ if (
62
+ event.oldState === State.UNDETERMINED &&
63
+ event.state === State.BEGAN
64
+ ) {
65
+ handler.handlers.onBegin?.(event);
66
+ } else if (
67
+ (event.oldState === State.BEGAN ||
68
+ event.oldState === State.UNDETERMINED) &&
69
+ event.state === State.ACTIVE
70
+ ) {
71
+ handler.handlers.onStart?.(event);
72
+ } else if (event.oldState !== event.state && event.state === State.END) {
73
+ handler.handlers.onEnd?.(event, true);
74
+ } else if (
75
+ (event.state === State.FAILED || event.state === State.CANCELLED) &&
76
+ event.oldState !== event.state
77
+ ) {
78
+ handler.handlers.onEnd?.(event, false);
79
+ }
80
+ } else if (isTouchEvent(event)) {
81
+ switch (event.eventType) {
82
+ case EventType.TOUCHES_DOWN:
83
+ handler.handlers?.onTouchesDown?.(event, dummyStateManager);
84
+ break;
85
+ case EventType.TOUCHES_MOVE:
86
+ handler.handlers?.onTouchesMove?.(event, dummyStateManager);
87
+ break;
88
+ case EventType.TOUCHES_UP:
89
+ handler.handlers?.onTouchesUp?.(event, dummyStateManager);
90
+ break;
91
+ case EventType.TOUCHES_CANCELLED:
92
+ handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);
93
+ break;
94
+ }
95
+ } else {
96
+ handler.handlers.onUpdate?.(event);
97
+ }
98
+ }
99
+ }
100
+
101
+ export function startListening() {
102
+ stopListening();
103
+
104
+ gestureHandlerEventSubscription = DeviceEventEmitter.addListener(
105
+ 'onGestureHandlerEvent',
106
+ onGestureHandlerEvent
107
+ );
108
+
109
+ gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(
110
+ 'onGestureHandlerStateChange',
111
+ onGestureHandlerEvent
112
+ );
113
+ }
114
+
115
+ export function stopListening() {
116
+ if (gestureHandlerEventSubscription) {
117
+ DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);
118
+
119
+ gestureHandlerEventSubscription = null;
120
+ }
121
+
122
+ if (gestureHandlerStateChangeEventSubscription) {
123
+ DeviceEventEmitter.removeSubscription(
124
+ gestureHandlerStateChangeEventSubscription
125
+ );
126
+
127
+ gestureHandlerStateChangeEventSubscription = null;
128
+ }
129
+ }
@@ -0,0 +1,27 @@
1
+ import { BaseGesture, BaseGestureConfig } from './gesture';
2
+ import {
3
+ FlingGestureConfig,
4
+ FlingGestureHandlerEventPayload,
5
+ } from '../FlingGestureHandler';
6
+
7
+ export class FlingGesture extends BaseGesture<FlingGestureHandlerEventPayload> {
8
+ public config: BaseGestureConfig & FlingGestureConfig = {};
9
+
10
+ constructor() {
11
+ super();
12
+
13
+ this.handlerName = 'FlingGestureHandler';
14
+ }
15
+
16
+ numberOfPointers(pointers: number) {
17
+ this.config.numberOfPointers = pointers;
18
+ return this;
19
+ }
20
+
21
+ direction(direction: number) {
22
+ this.config.direction = direction;
23
+ return this;
24
+ }
25
+ }
26
+
27
+ export type FlingGestureType = InstanceType<typeof FlingGesture>;
@@ -0,0 +1,32 @@
1
+ import { BaseGestureConfig, ContinousBaseGesture } from './gesture';
2
+ import {
3
+ ForceTouchGestureConfig,
4
+ ForceTouchGestureHandlerEventPayload,
5
+ } from '../ForceTouchGestureHandler';
6
+
7
+ export class ForceTouchGesture extends ContinousBaseGesture<ForceTouchGestureHandlerEventPayload> {
8
+ public config: BaseGestureConfig & ForceTouchGestureConfig = {};
9
+
10
+ constructor() {
11
+ super();
12
+
13
+ this.handlerName = 'ForceTouchGestureHandler';
14
+ }
15
+
16
+ minForce(force: number) {
17
+ this.config.minForce = force;
18
+ return this;
19
+ }
20
+
21
+ maxForce(force: number) {
22
+ this.config.maxForce = force;
23
+ return this;
24
+ }
25
+
26
+ feedbackOnActivation(value: boolean) {
27
+ this.config.feedbackOnActivation = value;
28
+ return this;
29
+ }
30
+ }
31
+
32
+ export type ForceTouchGestureType = InstanceType<typeof ForceTouchGesture>;