react-native-gesture-handler 1.10.3 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +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
@@ -27,6 +27,7 @@
27
27
  #import "Handlers/RNPinchHandler.h"
28
28
  #import "Handlers/RNRotationHandler.h"
29
29
  #import "Handlers/RNForceTouchHandler.h"
30
+ #import "Handlers/RNManualHandler.h"
30
31
 
31
32
  // We use the method below instead of RCTLog because we log out messages after the bridge gets
32
33
  // turned down in some cases. Which normally with RCTLog would cause a crash in DEBUG mode
@@ -40,7 +41,7 @@
40
41
  {
41
42
  RNGestureHandlerRegistry *_registry;
42
43
  RCTUIManager *_uiManager;
43
- NSHashTable<UIView *> *_rootViews;
44
+ NSHashTable<RNRootViewGestureRecognizer *> *_rootViewGestureRecognizers;
44
45
  RCTEventDispatcher *_eventDispatcher;
45
46
  }
46
47
 
@@ -51,7 +52,7 @@
51
52
  _uiManager = uiManager;
52
53
  _eventDispatcher = eventDispatcher;
53
54
  _registry = [RNGestureHandlerRegistry new];
54
- _rootViews = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory];
55
+ _rootViewGestureRecognizers = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory];
55
56
  }
56
57
  return self;
57
58
  }
@@ -72,6 +73,7 @@
72
73
  @"PinchGestureHandler": [RNPinchGestureHandler class],
73
74
  @"RotationGestureHandler": [RNRotationGestureHandler class],
74
75
  @"ForceTouchGestureHandler": [RNForceTouchHandler class],
76
+ @"ManualGestureHandler": [RNManualGestureHandler class],
75
77
  };
76
78
  });
77
79
 
@@ -97,8 +99,19 @@
97
99
 
98
100
  [_registry attachHandlerWithTag:handlerTag toView:view];
99
101
 
100
- // register root view if not already there
101
- [self registerRootViewIfNeeded:view];
102
+ // register view if not already there
103
+ [self registerViewWithGestureRecognizerAttachedIfNeeded:view];
104
+ }
105
+
106
+ - (void)attachGestureHandlerForDeviceEvents:(nonnull NSNumber *)handlerTag
107
+ toViewWithTag:(nonnull NSNumber *)viewTag
108
+ {
109
+ UIView *view = [_uiManager viewForReactTag:viewTag];
110
+
111
+ [_registry attachHandlerWithTagForDeviceEvents:handlerTag toView:view];
112
+
113
+ // register view if not already there
114
+ [self registerViewWithGestureRecognizerAttachedIfNeeded:view];
102
115
  }
103
116
 
104
117
  - (void)updateGestureHandler:(NSNumber *)handlerTag config:(NSDictionary *)config
@@ -115,12 +128,8 @@
115
128
  - (void)handleSetJSResponder:(NSNumber *)viewTag blockNativeResponder:(NSNumber *)blockNativeResponder
116
129
  {
117
130
  if ([blockNativeResponder boolValue]) {
118
- for (RCTRootView *rootView in _rootViews) {
119
- for (UIGestureRecognizer *recognizer in rootView.gestureRecognizers) {
120
- if ([recognizer isKindOfClass:[RNRootViewGestureRecognizer class]]) {
121
- [(RNRootViewGestureRecognizer *)recognizer blockOtherRecognizers];
122
- }
123
- }
131
+ for (RNRootViewGestureRecognizer *recognizer in _rootViewGestureRecognizers) {
132
+ [recognizer blockOtherRecognizers];
124
133
  }
125
134
  }
126
135
  }
@@ -130,27 +139,43 @@
130
139
  // ignore...
131
140
  }
132
141
 
142
+ - (id)handlerWithTag:(NSNumber *)handlerTag
143
+ {
144
+ return [_registry handlerWithTag:handlerTag];
145
+ }
146
+
147
+
133
148
  #pragma mark Root Views Management
134
149
 
135
- - (void)registerRootViewIfNeeded:(UIView*)childView
150
+ - (void)registerViewWithGestureRecognizerAttachedIfNeeded:(UIView *)childView
136
151
  {
137
152
  UIView *parent = childView;
138
- while (parent != nil && ![parent isKindOfClass:[RCTRootView class]]) parent = parent.superview;
139
-
140
- RCTRootView *rootView = (RCTRootView *)parent;
141
- UIView *rootContentView = rootView.contentView;
142
- if (rootContentView != nil && ![_rootViews containsObject:rootContentView]) {
143
- RCTLifecycleLog(@"[GESTURE HANDLER] Initialize gesture handler for root view %@", rootContentView);
144
- [_rootViews addObject:rootContentView];
145
- RNRootViewGestureRecognizer *recognizer = [RNRootViewGestureRecognizer new];
146
- recognizer.delegate = self;
147
- rootContentView.userInteractionEnabled = YES;
148
- [rootContentView addGestureRecognizer:recognizer];
153
+ while (parent != nil && ![parent respondsToSelector:@selector(touchHandler)]) parent = parent.superview;
154
+
155
+ // Many views can return the same touchHandler so we check if the one we want to register
156
+ // is not already present in the set.
157
+ UIView *touchHandlerView = [[parent performSelector:@selector(touchHandler)] view];
158
+
159
+ if (touchHandlerView == nil) {
160
+ return;
161
+ }
162
+
163
+ for (UIGestureRecognizer *recognizer in touchHandlerView.gestureRecognizers) {
164
+ if ([recognizer isKindOfClass:[RNRootViewGestureRecognizer class]]) {
165
+ return;
166
+ }
149
167
  }
168
+
169
+ RCTLifecycleLog(@"[GESTURE HANDLER] Initialize gesture handler for view %@", touchHandlerView);
170
+ RNRootViewGestureRecognizer *recognizer = [RNRootViewGestureRecognizer new];
171
+ recognizer.delegate = self;
172
+ touchHandlerView.userInteractionEnabled = YES;
173
+ [touchHandlerView addGestureRecognizer:recognizer];
174
+ [_rootViewGestureRecognizers addObject:recognizer];
150
175
  }
151
176
 
152
177
  - (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
153
- didActivateInRootView:(UIView *)rootContentView
178
+ didActivateInViewWithTouchHandler:(UIView *)viewWithTouchHandler
154
179
  {
155
180
  // Cancel touches in RN's root view in order to cancel all in-js recognizers
156
181
 
@@ -165,17 +190,8 @@
165
190
  // Once the upstream fix lands the line below along with this comment can be removed
166
191
  if ([gestureRecognizer.view isKindOfClass:[UIScrollView class]]) return;
167
192
 
168
- UIView *parent = rootContentView.superview;
169
- if ([parent isKindOfClass:[RCTRootView class]]) {
170
- [((RCTRootContentView*)rootContentView).touchHandler cancel];
171
- }
172
- }
173
-
174
- - (void)dealloc
175
- {
176
- if ([_rootViews count] > 0) {
177
- RCTLifecycleLog(@"[GESTURE HANDLER] Tearing down gesture handler registered for views %@", _rootViews);
178
- }
193
+ RCTTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)];
194
+ [touchHandler cancel];
179
195
  }
180
196
 
181
197
  #pragma mark Events
@@ -190,4 +206,16 @@
190
206
  [_eventDispatcher sendEvent:event];
191
207
  }
192
208
 
209
+ - (void)sendTouchDeviceEvent:(RNGestureHandlerEvent *)event
210
+ {
211
+ NSMutableDictionary *body = [[event arguments] objectAtIndex:2];
212
+ [_eventDispatcher sendDeviceEventWithName:@"onGestureHandlerEvent" body:body];
213
+ }
214
+
215
+ - (void)sendStateChangeDeviceEvent:(RNGestureHandlerStateChange *)event
216
+ {
217
+ NSMutableDictionary *body = [[event arguments] objectAtIndex:2];
218
+ [_eventDispatcher sendDeviceEventWithName:@"onGestureHandlerStateChange" body:body];
219
+ }
220
+
193
221
  @end
@@ -13,8 +13,9 @@
13
13
  #import "RNGestureHandlerManager.h"
14
14
 
15
15
  #import "RNGestureHandlerButton.h"
16
+ #import "RNGestureHandlerStateManager.h"
16
17
 
17
- @interface RNGestureHandlerModule () <RCTUIManagerObserver>
18
+ @interface RNGestureHandlerModule () <RCTUIManagerObserver, RNGestureHandlerStateManager>
18
19
 
19
20
  @end
20
21
 
@@ -102,10 +103,14 @@ RCT_EXPORT_METHOD(createGestureHandler:(nonnull NSString *)handlerName tag:(nonn
102
103
  }];
103
104
  }
104
105
 
105
- RCT_EXPORT_METHOD(attachGestureHandler:(nonnull NSNumber *)handlerTag toViewWithTag:(nonnull NSNumber *)viewTag)
106
+ RCT_EXPORT_METHOD(attachGestureHandler:(nonnull NSNumber *)handlerTag toViewWithTag:(nonnull NSNumber *)viewTag useDeviceEvents: (BOOL)useDeviceEvents)
106
107
  {
107
108
  [self addOperationBlock:^(RNGestureHandlerManager *manager) {
108
- [manager attachGestureHandler:handlerTag toViewWithTag:viewTag];
109
+ if (useDeviceEvents) {
110
+ [manager attachGestureHandlerForDeviceEvents:handlerTag toViewWithTag:viewTag];
111
+ } else {
112
+ [manager attachGestureHandler:handlerTag toViewWithTag:viewTag];
113
+ }
109
114
  }];
110
115
  }
111
116
 
@@ -137,6 +142,37 @@ RCT_EXPORT_METHOD(handleClearJSResponder)
137
142
  }];
138
143
  }
139
144
 
145
+ - (void)setGestureState:(int)state forHandler:(int)handlerTag
146
+ {
147
+ RNGestureHandler *handler = [_manager handlerWithTag:@(handlerTag)];
148
+
149
+ if (handler != nil) {
150
+ if (state == 1) { // FAILED
151
+ handler.recognizer.state = UIGestureRecognizerStateFailed;
152
+ } else if (state == 2) { // BEGAN
153
+ handler.recognizer.state = UIGestureRecognizerStatePossible;
154
+ } else if (state == 3) { // CANCELLED
155
+ handler.recognizer.state = UIGestureRecognizerStateCancelled;
156
+ } else if (state == 4) { // ACTIVE
157
+ [handler stopActivationBlocker];
158
+ handler.recognizer.state = UIGestureRecognizerStateBegan;
159
+ } else if (state == 5) { // ENDED
160
+ handler.recognizer.state = UIGestureRecognizerStateEnded;
161
+ }
162
+ }
163
+
164
+ // if the gesture was set to finish, cancel all pointers it was tracking
165
+ if (state == 1 || state == 3 || state == 5) {
166
+ [handler.pointerTracker cancelPointers];
167
+ }
168
+
169
+ // do not send state change event when activating because it bypasses
170
+ // shouldRequireFailureOfGestureRecognizer
171
+ if (state != 4) {
172
+ [handler handleGesture:handler.recognizer];
173
+ }
174
+ }
175
+
140
176
  #pragma mark -- Batch handling
141
177
 
142
178
  - (void)addOperationBlock:(GestureHandlerOperation)operation
@@ -0,0 +1,25 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ #import "RNTouchEventType.h"
4
+
5
+ #define MAX_POINTERS_COUNT 12
6
+
7
+ @class RNGestureHandler;
8
+
9
+ @interface RNGestureHandlerPointerTracker : NSObject
10
+
11
+ @property (nonatomic) RNTouchEventType eventType;
12
+ @property (nonatomic) NSArray<NSDictionary *> *changedPointersData;
13
+ @property (nonatomic) NSArray<NSDictionary *> *allPointersData;
14
+ @property (nonatomic) int trackedPointersCount;
15
+
16
+ - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
17
+
18
+ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
19
+ - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
20
+ - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
21
+ - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
22
+ - (void)reset;
23
+ - (void)cancelPointers;
24
+
25
+ @end
@@ -0,0 +1,237 @@
1
+ #import "RNGestureHandlerPointerTracker.h"
2
+ #import "RNGestureHandler.h"
3
+
4
+ #import <React/UIView+React.h>
5
+
6
+ @implementation RNGestureHandlerPointerTracker {
7
+ __weak RNGestureHandler *_gestureHandler;
8
+ UITouch *_trackedPointers[MAX_POINTERS_COUNT];
9
+ int _trackedPointersCount;
10
+ }
11
+
12
+ - (id)initWithGestureHandler:(id)gestureHandler
13
+ {
14
+ _gestureHandler = gestureHandler;
15
+ _trackedPointersCount = 0;
16
+ _changedPointersData = nil;
17
+ _allPointersData = nil;
18
+
19
+ for (int i = 0; i < MAX_POINTERS_COUNT; i++) {
20
+ _trackedPointers[i] = nil;
21
+ }
22
+
23
+ return self;
24
+ }
25
+
26
+ - (int)registerTouch:(UITouch *)touch
27
+ {
28
+ for (int index = 0; index < MAX_POINTERS_COUNT; index++) {
29
+ if (_trackedPointers[index] == nil) {
30
+ _trackedPointers[index] = touch;
31
+ return index;
32
+ }
33
+ }
34
+
35
+ return -1;
36
+ }
37
+
38
+ - (int)unregisterTouch:(UITouch *)touch
39
+ {
40
+ for (int index = 0; index < MAX_POINTERS_COUNT; index++) {
41
+ if (_trackedPointers[index] == touch) {
42
+ _trackedPointers[index] = nil;
43
+ return index;
44
+ }
45
+ }
46
+
47
+ return -1;
48
+ }
49
+
50
+ - (int)findTouchIndex:(UITouch *)touch
51
+ {
52
+ for (int index = 0; index < MAX_POINTERS_COUNT; index++) {
53
+ if (_trackedPointers[index] == touch) {
54
+ return index;
55
+ }
56
+ }
57
+ return -1;
58
+ }
59
+
60
+ - (int)registeredTouchesCount
61
+ {
62
+ int count = 0;
63
+ for (int i = 0; i < MAX_POINTERS_COUNT; i++) {
64
+ if (_trackedPointers[i] != nil) {
65
+ count++;
66
+ }
67
+ }
68
+ return count;
69
+ }
70
+
71
+ - (NSDictionary *)extractPointerData:(int)index
72
+ forTouch:(UITouch *)touch
73
+ {
74
+ CGPoint relativePos = [touch locationInView:_gestureHandler.recognizer.view];
75
+ CGPoint absolutePos = [touch locationInView:_gestureHandler.recognizer.view.window];
76
+
77
+ return @{@"id": @(index),
78
+ @"x": @(relativePos.x),
79
+ @"y": @(relativePos.y),
80
+ @"absoluteX": @(absolutePos.x),
81
+ @"absoluteY": @(absolutePos.y)};
82
+ }
83
+
84
+ - (void)extractAllTouches {
85
+ int registeredTouches = [self registeredTouchesCount];
86
+
87
+ NSDictionary *data[registeredTouches];
88
+ int nextIndex = 0;
89
+
90
+ for (int i = 0; i < MAX_POINTERS_COUNT; i++) {
91
+ UITouch *touch = _trackedPointers[i];
92
+ if (touch != nil) {
93
+ data[nextIndex++] = [self extractPointerData:i forTouch:touch];
94
+ }
95
+ }
96
+
97
+ _allPointersData = [[NSArray alloc] initWithObjects:data count:registeredTouches];
98
+ }
99
+
100
+ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
101
+ {
102
+ if (!_gestureHandler.needsPointerData) {
103
+ return;
104
+ }
105
+
106
+ _eventType = RNTouchEventTypePointerDown;
107
+
108
+ NSDictionary *data[touches.count];
109
+
110
+ for (int i = 0; i < [touches count]; i++) {
111
+ UITouch *touch = [[touches allObjects] objectAtIndex:i];
112
+ int index = [self registerTouch:touch];
113
+ if (index >= 0) {
114
+ _trackedPointersCount++;
115
+ }
116
+
117
+ data[i] = [self extractPointerData:index forTouch:touch];
118
+ }
119
+
120
+ _changedPointersData = [[NSArray alloc] initWithObjects:data count:[touches count]];
121
+ // extract all touches last to include the ones that were just added
122
+ [self extractAllTouches];
123
+ [self sendEvent];
124
+ }
125
+
126
+ - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
127
+ {
128
+ if (!_gestureHandler.needsPointerData) {
129
+ return;
130
+ }
131
+
132
+ _eventType = RNTouchEventTypePointerMove;
133
+
134
+ NSDictionary *data[touches.count];
135
+
136
+ for (int i = 0; i < [touches count]; i++) {
137
+ UITouch *touch = [[touches allObjects] objectAtIndex:i];
138
+ int index = [self findTouchIndex:touch];
139
+ data[i] = [self extractPointerData:index forTouch:touch];
140
+ }
141
+
142
+ _changedPointersData = [[NSArray alloc] initWithObjects:data count:[touches count]];
143
+ [self extractAllTouches];
144
+ [self sendEvent];
145
+ }
146
+
147
+ - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
148
+ {
149
+ if (!_gestureHandler.needsPointerData) {
150
+ return;
151
+ }
152
+
153
+ // extract all touches first to include the ones that were just lifted
154
+ [self extractAllTouches];
155
+
156
+ _eventType = RNTouchEventTypePointerUp;
157
+
158
+ NSDictionary *data[touches.count];
159
+
160
+ for (int i = 0; i < [touches count]; i++) {
161
+ UITouch *touch = [[touches allObjects] objectAtIndex:i];
162
+ int index = [self unregisterTouch:touch];
163
+ if (index >= 0) {
164
+ _trackedPointersCount--;
165
+ }
166
+
167
+ data[i] = [self extractPointerData:index forTouch:touch];
168
+ }
169
+
170
+ _changedPointersData = [[NSArray alloc] initWithObjects:data count:[touches count]];
171
+ [self sendEvent];
172
+ }
173
+
174
+ - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
175
+ {
176
+ if (!_gestureHandler.needsPointerData) {
177
+ return;
178
+ }
179
+
180
+ [self reset];
181
+ }
182
+
183
+ - (void)reset
184
+ {
185
+ if (!_gestureHandler.needsPointerData) {
186
+ return;
187
+ }
188
+
189
+ if (_trackedPointersCount == 0) {
190
+ // gesture has finished because all pointers were lifted, reset event type to send state change event
191
+ _eventType = RNTouchEventTypeUndetermined;
192
+ } else {
193
+ // turns out that the gesture may be made to fail without calling touchesCancelled in that case there
194
+ // are still tracked pointers but the recognizer state is already set to UIGestureRecognizerStateFailed
195
+ // we need to clear the pointers and send info about their cancellation
196
+ [self cancelPointers];
197
+ }
198
+
199
+ [_gestureHandler reset];
200
+ }
201
+
202
+ - (void)cancelPointers
203
+ {
204
+ // extract all touches first to include the ones that were just cancelled
205
+ [self extractAllTouches];
206
+
207
+ int registeredTouches = [self registeredTouchesCount];
208
+
209
+ if (registeredTouches > 0) {
210
+ int nextIndex = 0;
211
+ NSDictionary *data[registeredTouches];
212
+
213
+ for (int i = 0; i < MAX_POINTERS_COUNT; i++) {
214
+ UITouch *touch = _trackedPointers[i];
215
+ if (touch != nil) {
216
+ data[nextIndex++] = [self extractPointerData:i forTouch:touch];
217
+ [self unregisterTouch:touch];
218
+ }
219
+ }
220
+
221
+ _eventType = RNTouchEventTypeCancelled;
222
+ _changedPointersData = [[NSArray alloc] initWithObjects:data count:registeredTouches];
223
+ [self sendEvent];
224
+ _trackedPointersCount = 0;
225
+ }
226
+ }
227
+
228
+ - (void)sendEvent
229
+ {
230
+ if (!_gestureHandler.needsPointerData) {
231
+ return;
232
+ }
233
+
234
+ [_gestureHandler sendTouchEventInState:[_gestureHandler state] forViewWithTag:_gestureHandler.recognizer.view.reactTag];
235
+ }
236
+
237
+ @end
@@ -13,6 +13,7 @@
13
13
  - (nullable RNGestureHandler *)handlerWithTag:(nonnull NSNumber *)handlerTag;
14
14
  - (void)registerGestureHandler:(nonnull RNGestureHandler *)gestureHandler;
15
15
  - (void)attachHandlerWithTag:(nonnull NSNumber *)handlerTag toView:(nonnull UIView *)view;
16
+ - (void)attachHandlerWithTagForDeviceEvents:(nonnull NSNumber *)handlerTag toView:(nonnull UIView *)view;
16
17
  - (void)dropHandlerWithTag:(nonnull NSNumber *)handlerTag;
17
18
 
18
19
  @end
@@ -37,6 +37,16 @@
37
37
  RNGestureHandler *handler = _handlers[handlerTag];
38
38
  RCTAssert(handler != nil, @"Handler for tag %@ does not exists", handlerTag);
39
39
  [handler unbindFromView];
40
+ handler.usesDeviceEvents = NO;
41
+ [handler bindToView:view];
42
+ }
43
+
44
+ - (void)attachHandlerWithTagForDeviceEvents:(NSNumber *)handlerTag toView:(UIView *)view
45
+ {
46
+ RNGestureHandler *handler = _handlers[handlerTag];
47
+ RCTAssert(handler != nil, @"Handler for tag %@ does not exists", handlerTag);
48
+ [handler unbindFromView];
49
+ handler.usesDeviceEvents = YES;
40
50
  [handler bindToView:view];
41
51
  }
42
52
 
@@ -0,0 +1,5 @@
1
+ @protocol RNGestureHandlerStateManager
2
+
3
+ -(void) setGestureState:(int)state forHandler:(int)handlerTag;
4
+
5
+ @end
@@ -0,0 +1,10 @@
1
+ #import <UIKit/UIGestureRecognizerSubclass.h>
2
+
3
+ @class RNGestureHandler;
4
+
5
+ @interface RNManualActivationRecognizer : UIGestureRecognizer <UIGestureRecognizerDelegate>
6
+
7
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
8
+ - (void)fail;
9
+
10
+ @end
@@ -0,0 +1,80 @@
1
+ #import "RNManualActivationRecognizer.h"
2
+ #import "RNGestureHandler.h"
3
+
4
+ @implementation RNManualActivationRecognizer {
5
+ RNGestureHandler *_handler;
6
+ int _activePointers;
7
+ }
8
+
9
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
10
+ {
11
+ if ((self = [super initWithTarget:self action:nil])) {
12
+ _handler = gestureHandler;
13
+ self.delegate = self;
14
+ _activePointers = 0;
15
+ }
16
+ return self;
17
+ }
18
+
19
+ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
20
+ {
21
+ [super touchesBegan:touches withEvent:event];
22
+
23
+ _activePointers += touches.count;
24
+ }
25
+
26
+ - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
27
+ {
28
+ [super touchesMoved:touches withEvent:event];
29
+ }
30
+
31
+ - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
32
+ {
33
+ [super touchesEnded:touches withEvent:event];
34
+
35
+ _activePointers -= touches.count;
36
+
37
+ if (_activePointers == 0) {
38
+ [self fail];
39
+ [self reset];
40
+ }
41
+ }
42
+
43
+ - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
44
+ {
45
+ [super touchesCancelled:touches withEvent:event];
46
+
47
+ _activePointers = 0;
48
+ [self reset];
49
+ }
50
+
51
+ - (void)reset
52
+ {
53
+ self.enabled = YES;
54
+ [super reset];
55
+ }
56
+
57
+ - (void)fail
58
+ {
59
+ self.enabled = NO;
60
+ }
61
+
62
+ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
63
+ shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
64
+ {
65
+ return YES;
66
+ }
67
+
68
+ - (BOOL)shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
69
+ {
70
+ RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
71
+ if (handler != nil) {
72
+ if (handler.tag == _handler.tag) {
73
+ return YES;
74
+ }
75
+ }
76
+
77
+ return NO;
78
+ }
79
+
80
+ @end
@@ -50,7 +50,7 @@
50
50
  {
51
51
  // When this method is called it means that one of handlers has activated, in this case we want
52
52
  // to send an info to JS so that it cancells all JS responders
53
- [self.delegate gestureRecognizer:preventingGestureRecognizer didActivateInRootView:self.view];
53
+ [self.delegate gestureRecognizer:preventingGestureRecognizer didActivateInViewWithTouchHandler:self.view];
54
54
  return [super canBePreventedByGestureRecognizer:preventingGestureRecognizer];
55
55
  }
56
56
 
@@ -0,0 +1,9 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ typedef NS_ENUM(NSInteger, RNTouchEventType) {
4
+ RNTouchEventTypeUndetermined = 0,
5
+ RNTouchEventTypePointerDown,
6
+ RNTouchEventTypePointerMove,
7
+ RNTouchEventTypePointerUp,
8
+ RNTouchEventTypeCancelled,
9
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EventType = void 0;
7
+ const EventType = {
8
+ UNDETERMINED: 0,
9
+ TOUCHES_DOWN: 1,
10
+ TOUCHES_MOVE: 2,
11
+ TOUCHES_UP: 3,
12
+ TOUCHES_CANCELLED: 4
13
+ }; // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value
14
+
15
+ exports.EventType = EventType;
16
+ //# sourceMappingURL=EventType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["EventType.ts"],"names":["EventType","UNDETERMINED","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED"],"mappings":";;;;;;AAAO,MAAMA,SAAS,GAAG;AACvBC,EAAAA,YAAY,EAAE,CADS;AAEvBC,EAAAA,YAAY,EAAE,CAFS;AAGvBC,EAAAA,YAAY,EAAE,CAHS;AAIvBC,EAAAA,UAAU,EAAE,CAJW;AAKvBC,EAAAA,iBAAiB,EAAE;AALI,CAAlB,C,CAQP","sourcesContent":["export const EventType = {\n UNDETERMINED: 0,\n TOUCHES_DOWN: 1,\n TOUCHES_MOVE: 2,\n TOUCHES_UP: 3,\n TOUCHES_CANCELLED: 4,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type EventType = typeof EventType[keyof typeof EventType];\n"]}
@@ -14,23 +14,11 @@ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return
14
14
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
15
 
16
16
  const GestureHandlerRootViewNative = (0, _reactNative.requireNativeComponent)('GestureHandlerRootView');
17
- const GestureHandlerRootViewContext = /*#__PURE__*/React.createContext(false);
18
17
 
19
18
  function GestureHandlerRootView({
20
19
  children,
21
20
  ...rest
22
21
  }) {
23
- return /*#__PURE__*/React.createElement(GestureHandlerRootViewContext.Consumer, null, available => {
24
- if (available) {
25
- // If we already have a parent wrapped in the gesture handler root view,
26
- // We don't need to wrap it again in root view
27
- // We still wrap it in a normal view so our styling stays the same
28
- return /*#__PURE__*/React.createElement(_reactNative.View, rest, children);
29
- }
30
-
31
- return /*#__PURE__*/React.createElement(GestureHandlerRootViewContext.Provider, {
32
- value: true
33
- }, /*#__PURE__*/React.createElement(GestureHandlerRootViewNative, rest, children));
34
- });
22
+ return /*#__PURE__*/React.createElement(GestureHandlerRootViewNative, rest, children);
35
23
  }
36
24
  //# sourceMappingURL=GestureHandlerRootView.android.js.map