react-native-gesture-handler 3.0.0-beta.3 → 3.0.0-beta.4

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 (310) hide show
  1. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +42 -38
  2. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +22 -4
  3. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +3 -6
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/ManualGestureHandler.kt +2 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +63 -6
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/OnJSResponderCancelListener.kt +6 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +2 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +16 -6
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureHandler.kt +17 -4
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/ViewConfigurationHelper.kt +0 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +47 -6
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +1 -1
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +18 -8
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +15 -4
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +0 -6
  16. package/apple/Handlers/RNForceTouchHandler.m +1 -1
  17. package/apple/Handlers/RNHoverHandler.m +11 -11
  18. package/apple/Handlers/RNLongPressHandler.m +2 -2
  19. package/apple/Handlers/RNManualHandler.m +5 -0
  20. package/apple/Handlers/RNNativeViewHandler.mm +114 -53
  21. package/apple/Handlers/RNPanHandler.m +7 -3
  22. package/apple/Handlers/RNPinchHandler.m +9 -3
  23. package/apple/Handlers/RNRotationHandler.m +7 -2
  24. package/apple/Handlers/RNTapHandler.m +1 -1
  25. package/apple/RNGestureHandler.h +18 -0
  26. package/apple/RNGestureHandler.mm +32 -6
  27. package/apple/RNGestureHandlerButton.h +8 -0
  28. package/apple/RNGestureHandlerButton.mm +102 -11
  29. package/apple/RNGestureHandlerButtonComponentView.mm +85 -4
  30. package/apple/RNGestureHandlerRegistry.h +0 -1
  31. package/apple/RNRootViewGestureRecognizer.m +4 -15
  32. package/lib/module/components/GestureButtons.js +8 -8
  33. package/lib/module/components/GestureButtons.js.map +1 -1
  34. package/lib/module/components/GestureHandlerButton.web.js +51 -9
  35. package/lib/module/components/GestureHandlerButton.web.js.map +1 -1
  36. package/lib/module/components/Pressable/Pressable.js +1 -1
  37. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  38. package/lib/module/components/Pressable/stateDefinitions.js +2 -0
  39. package/lib/module/components/Pressable/stateDefinitions.js.map +1 -1
  40. package/lib/module/components/touchables/GenericTouchable.js +2 -6
  41. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  42. package/lib/module/handlers/gestures/GestureDetector/utils.js +11 -1
  43. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  44. package/lib/module/handlers/gestures/flingGesture.js +8 -0
  45. package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
  46. package/lib/module/handlers/gestures/forceTouchGesture.js +3 -3
  47. package/lib/module/handlers/gestures/gesture.js +8 -0
  48. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  49. package/lib/module/handlers/gestures/gestureComposition.js +28 -0
  50. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  51. package/lib/module/handlers/gestures/gestureObjects.js +27 -1
  52. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
  53. package/lib/module/handlers/gestures/gestureStateManager.js +9 -0
  54. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  55. package/lib/module/handlers/gestures/hoverGesture.js +8 -0
  56. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
  57. package/lib/module/handlers/gestures/longPressGesture.js +8 -0
  58. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  59. package/lib/module/handlers/gestures/manualGesture.js +8 -0
  60. package/lib/module/handlers/gestures/manualGesture.js.map +1 -1
  61. package/lib/module/handlers/gestures/nativeGesture.js +8 -0
  62. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
  63. package/lib/module/handlers/gestures/panGesture.js +13 -0
  64. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  65. package/lib/module/handlers/gestures/pinchGesture.js +13 -0
  66. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  67. package/lib/module/handlers/gestures/rotationGesture.js +8 -0
  68. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -1
  69. package/lib/module/handlers/gestures/tapGesture.js +8 -0
  70. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  71. package/lib/module/v3/components/GestureButtons.js +4 -4
  72. package/lib/module/v3/components/GestureButtons.js.map +1 -1
  73. package/lib/module/v3/components/Pressable.js +3 -2
  74. package/lib/module/v3/components/Pressable.js.map +1 -1
  75. package/lib/module/v3/components/Touchable/Touchable.js +67 -29
  76. package/lib/module/v3/components/Touchable/Touchable.js.map +1 -1
  77. package/lib/module/v3/detectors/HostGestureDetector.web.js +2 -0
  78. package/lib/module/v3/detectors/HostGestureDetector.web.js.map +1 -1
  79. package/lib/module/v3/detectors/VirtualDetector/VirtualDetector.js +2 -0
  80. package/lib/module/v3/detectors/VirtualDetector/VirtualDetector.js.map +1 -1
  81. package/lib/module/v3/detectors/useNativeGestureRole.js +6 -0
  82. package/lib/module/v3/detectors/useNativeGestureRole.js.map +1 -0
  83. package/lib/module/v3/detectors/useNativeGestureRole.web.js +27 -0
  84. package/lib/module/v3/detectors/useNativeGestureRole.web.js.map +1 -0
  85. package/lib/module/v3/hooks/callbacks/useReanimatedEventHandler.js +17 -2
  86. package/lib/module/v3/hooks/callbacks/useReanimatedEventHandler.js.map +1 -1
  87. package/lib/module/v3/hooks/gestures/fling/useFlingGesture.js +2 -1
  88. package/lib/module/v3/hooks/gestures/fling/useFlingGesture.js.map +1 -1
  89. package/lib/module/v3/hooks/gestures/hover/useHoverGesture.js +2 -1
  90. package/lib/module/v3/hooks/gestures/hover/useHoverGesture.js.map +1 -1
  91. package/lib/module/v3/hooks/gestures/longPress/useLongPressGesture.js +2 -1
  92. package/lib/module/v3/hooks/gestures/longPress/useLongPressGesture.js.map +1 -1
  93. package/lib/module/v3/hooks/gestures/manual/useManualGesture.js +2 -1
  94. package/lib/module/v3/hooks/gestures/manual/useManualGesture.js.map +1 -1
  95. package/lib/module/v3/hooks/gestures/native/NativeTypes.js +1 -1
  96. package/lib/module/v3/hooks/gestures/native/NativeTypes.js.map +1 -1
  97. package/lib/module/v3/hooks/gestures/native/useNativeGesture.js +2 -1
  98. package/lib/module/v3/hooks/gestures/native/useNativeGesture.js.map +1 -1
  99. package/lib/module/v3/hooks/gestures/pan/usePanGesture.js +2 -1
  100. package/lib/module/v3/hooks/gestures/pan/usePanGesture.js.map +1 -1
  101. package/lib/module/v3/hooks/gestures/pinch/usePinchGesture.js +2 -1
  102. package/lib/module/v3/hooks/gestures/pinch/usePinchGesture.js.map +1 -1
  103. package/lib/module/v3/hooks/gestures/rotation/useRotationGesture.js +2 -1
  104. package/lib/module/v3/hooks/gestures/rotation/useRotationGesture.js.map +1 -1
  105. package/lib/module/v3/hooks/gestures/tap/useTapGesture.js +2 -1
  106. package/lib/module/v3/hooks/gestures/tap/useTapGesture.js.map +1 -1
  107. package/lib/module/v3/hooks/useGesture.js +1 -4
  108. package/lib/module/v3/hooks/useGesture.js.map +1 -1
  109. package/lib/module/v3/hooks/utils/configUtils.js +7 -3
  110. package/lib/module/v3/hooks/utils/configUtils.js.map +1 -1
  111. package/lib/module/v3/hooks/utils/index.js +1 -1
  112. package/lib/module/v3/hooks/utils/index.js.map +1 -1
  113. package/lib/module/v3/hooks/utils/propsWhiteList.js +1 -1
  114. package/lib/module/v3/hooks/utils/propsWhiteList.js.map +1 -1
  115. package/lib/module/web/constants.js +1 -0
  116. package/lib/module/web/constants.js.map +1 -1
  117. package/lib/module/web/detectors/RotationGestureDetector.js +18 -5
  118. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  119. package/lib/module/web/detectors/ScaleGestureDetector.js +9 -1
  120. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  121. package/lib/module/web/handlers/GestureHandler.js +25 -5
  122. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/HoverGestureHandler.js +1 -4
  124. package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
  125. package/lib/module/web/handlers/ManualGestureHandler.js +1 -0
  126. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  127. package/lib/module/web/handlers/NativeViewGestureHandler.js +65 -17
  128. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  129. package/lib/module/web/handlers/PanGestureHandler.js +1 -0
  130. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  131. package/lib/module/web/handlers/PinchGestureHandler.js +4 -6
  132. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  133. package/lib/module/web/handlers/RotationGestureHandler.js +4 -3
  134. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  135. package/lib/module/web/interfaces.js +6 -0
  136. package/lib/module/web/interfaces.js.map +1 -1
  137. package/lib/module/web/tools/GestureHandlerOrchestrator.js +8 -2
  138. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  139. package/lib/module/web/tools/GestureLifecycleEvents.js +10 -0
  140. package/lib/module/web/tools/GestureLifecycleEvents.js.map +1 -0
  141. package/lib/module/web/tools/PointerEventManager.js +9 -0
  142. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  143. package/lib/typescript/components/GestureButtons.d.ts.map +1 -1
  144. package/lib/typescript/components/GestureHandlerButton.web.d.ts +5 -1
  145. package/lib/typescript/components/GestureHandlerButton.web.d.ts.map +1 -1
  146. package/lib/typescript/components/Pressable/Pressable.d.ts.map +1 -1
  147. package/lib/typescript/components/Pressable/stateDefinitions.d.ts.map +1 -1
  148. package/lib/typescript/components/touchables/GenericTouchable.d.ts.map +1 -1
  149. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts.map +1 -1
  150. package/lib/typescript/handlers/gestures/flingGesture.d.ts +6 -0
  151. package/lib/typescript/handlers/gestures/flingGesture.d.ts.map +1 -1
  152. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +3 -3
  153. package/lib/typescript/handlers/gestures/gesture.d.ts +6 -0
  154. package/lib/typescript/handlers/gestures/gesture.d.ts.map +1 -1
  155. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  156. package/lib/typescript/handlers/gestures/gestureComposition.d.ts.map +1 -1
  157. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +27 -1
  158. package/lib/typescript/handlers/gestures/gestureObjects.d.ts.map +1 -1
  159. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +6 -0
  160. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts.map +1 -1
  161. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +6 -0
  162. package/lib/typescript/handlers/gestures/hoverGesture.d.ts.map +1 -1
  163. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +6 -0
  164. package/lib/typescript/handlers/gestures/longPressGesture.d.ts.map +1 -1
  165. package/lib/typescript/handlers/gestures/manualGesture.d.ts +6 -0
  166. package/lib/typescript/handlers/gestures/manualGesture.d.ts.map +1 -1
  167. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +6 -0
  168. package/lib/typescript/handlers/gestures/nativeGesture.d.ts.map +1 -1
  169. package/lib/typescript/handlers/gestures/panGesture.d.ts +9 -0
  170. package/lib/typescript/handlers/gestures/panGesture.d.ts.map +1 -1
  171. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +9 -0
  172. package/lib/typescript/handlers/gestures/pinchGesture.d.ts.map +1 -1
  173. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +6 -0
  174. package/lib/typescript/handlers/gestures/rotationGesture.d.ts.map +1 -1
  175. package/lib/typescript/handlers/gestures/tapGesture.d.ts +6 -0
  176. package/lib/typescript/handlers/gestures/tapGesture.d.ts.map +1 -1
  177. package/lib/typescript/v3/components/GestureButtons.d.ts +1 -0
  178. package/lib/typescript/v3/components/GestureButtons.d.ts.map +1 -1
  179. package/lib/typescript/v3/components/GestureComponents.d.ts +3 -0
  180. package/lib/typescript/v3/components/GestureComponents.d.ts.map +1 -1
  181. package/lib/typescript/v3/components/GestureComponents.web.d.ts +4 -0
  182. package/lib/typescript/v3/components/GestureComponents.web.d.ts.map +1 -1
  183. package/lib/typescript/v3/components/Pressable.d.ts.map +1 -1
  184. package/lib/typescript/v3/components/Touchable/Touchable.d.ts.map +1 -1
  185. package/lib/typescript/v3/components/Touchable/TouchableProps.d.ts +10 -1
  186. package/lib/typescript/v3/components/Touchable/TouchableProps.d.ts.map +1 -1
  187. package/lib/typescript/v3/detectors/HostGestureDetector.web.d.ts +1 -1
  188. package/lib/typescript/v3/detectors/HostGestureDetector.web.d.ts.map +1 -1
  189. package/lib/typescript/v3/detectors/VirtualDetector/VirtualDetector.d.ts.map +1 -1
  190. package/lib/typescript/v3/detectors/useNativeGestureRole.d.ts +3 -0
  191. package/lib/typescript/v3/detectors/useNativeGestureRole.d.ts.map +1 -0
  192. package/lib/typescript/v3/detectors/useNativeGestureRole.web.d.ts +3 -0
  193. package/lib/typescript/v3/detectors/useNativeGestureRole.web.d.ts.map +1 -0
  194. package/lib/typescript/v3/hooks/callbacks/useReanimatedEventHandler.d.ts.map +1 -1
  195. package/lib/typescript/v3/hooks/gestures/fling/useFlingGesture.d.ts +1 -1
  196. package/lib/typescript/v3/hooks/gestures/fling/useFlingGesture.d.ts.map +1 -1
  197. package/lib/typescript/v3/hooks/gestures/hover/useHoverGesture.d.ts +1 -1
  198. package/lib/typescript/v3/hooks/gestures/hover/useHoverGesture.d.ts.map +1 -1
  199. package/lib/typescript/v3/hooks/gestures/longPress/useLongPressGesture.d.ts +1 -1
  200. package/lib/typescript/v3/hooks/gestures/longPress/useLongPressGesture.d.ts.map +1 -1
  201. package/lib/typescript/v3/hooks/gestures/manual/useManualGesture.d.ts +1 -1
  202. package/lib/typescript/v3/hooks/gestures/manual/useManualGesture.d.ts.map +1 -1
  203. package/lib/typescript/v3/hooks/gestures/native/NativeTypes.d.ts +7 -0
  204. package/lib/typescript/v3/hooks/gestures/native/NativeTypes.d.ts.map +1 -1
  205. package/lib/typescript/v3/hooks/gestures/native/useNativeGesture.d.ts +1 -1
  206. package/lib/typescript/v3/hooks/gestures/native/useNativeGesture.d.ts.map +1 -1
  207. package/lib/typescript/v3/hooks/gestures/pan/usePanGesture.d.ts +1 -1
  208. package/lib/typescript/v3/hooks/gestures/pan/usePanGesture.d.ts.map +1 -1
  209. package/lib/typescript/v3/hooks/gestures/pinch/usePinchGesture.d.ts +1 -1
  210. package/lib/typescript/v3/hooks/gestures/pinch/usePinchGesture.d.ts.map +1 -1
  211. package/lib/typescript/v3/hooks/gestures/rotation/useRotationGesture.d.ts +1 -1
  212. package/lib/typescript/v3/hooks/gestures/rotation/useRotationGesture.d.ts.map +1 -1
  213. package/lib/typescript/v3/hooks/gestures/tap/useTapGesture.d.ts +1 -1
  214. package/lib/typescript/v3/hooks/gestures/tap/useTapGesture.d.ts.map +1 -1
  215. package/lib/typescript/v3/hooks/useGesture.d.ts.map +1 -1
  216. package/lib/typescript/v3/hooks/utils/configUtils.d.ts +2 -2
  217. package/lib/typescript/v3/hooks/utils/configUtils.d.ts.map +1 -1
  218. package/lib/typescript/v3/hooks/utils/index.d.ts +1 -1
  219. package/lib/typescript/v3/hooks/utils/index.d.ts.map +1 -1
  220. package/lib/typescript/v3/hooks/utils/propsWhiteList.d.ts +2 -2
  221. package/lib/typescript/v3/hooks/utils/propsWhiteList.d.ts.map +1 -1
  222. package/lib/typescript/v3/types/ConfigTypes.d.ts +1 -0
  223. package/lib/typescript/v3/types/ConfigTypes.d.ts.map +1 -1
  224. package/lib/typescript/web/constants.d.ts +1 -0
  225. package/lib/typescript/web/constants.d.ts.map +1 -1
  226. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts.map +1 -1
  227. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts.map +1 -1
  228. package/lib/typescript/web/handlers/GestureHandler.d.ts +8 -2
  229. package/lib/typescript/web/handlers/GestureHandler.d.ts.map +1 -1
  230. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -1
  231. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts.map +1 -1
  232. package/lib/typescript/web/handlers/IGestureHandler.d.ts +2 -0
  233. package/lib/typescript/web/handlers/IGestureHandler.d.ts.map +1 -1
  234. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +1 -0
  235. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts.map +1 -1
  236. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +13 -3
  237. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts.map +1 -1
  238. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +1 -0
  239. package/lib/typescript/web/handlers/PanGestureHandler.d.ts.map +1 -1
  240. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +1 -0
  241. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts.map +1 -1
  242. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +1 -0
  243. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts.map +1 -1
  244. package/lib/typescript/web/interfaces.d.ts +6 -0
  245. package/lib/typescript/web/interfaces.d.ts.map +1 -1
  246. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +1 -0
  247. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts.map +1 -1
  248. package/lib/typescript/web/tools/GestureLifecycleEvents.d.ts +7 -0
  249. package/lib/typescript/web/tools/GestureLifecycleEvents.d.ts.map +1 -0
  250. package/lib/typescript/web/tools/PointerEventManager.d.ts.map +1 -1
  251. package/package.json +1 -1
  252. package/src/components/GestureButtons.tsx +10 -9
  253. package/src/components/GestureHandlerButton.web.tsx +94 -26
  254. package/src/components/Pressable/Pressable.tsx +2 -1
  255. package/src/components/Pressable/stateDefinitions.ts +3 -0
  256. package/src/components/touchables/GenericTouchable.tsx +2 -5
  257. package/src/handlers/gestures/GestureDetector/utils.ts +11 -1
  258. package/src/handlers/gestures/flingGesture.ts +6 -0
  259. package/src/handlers/gestures/forceTouchGesture.ts +3 -3
  260. package/src/handlers/gestures/gesture.ts +6 -0
  261. package/src/handlers/gestures/gestureComposition.ts +21 -0
  262. package/src/handlers/gestures/gestureObjects.ts +27 -1
  263. package/src/handlers/gestures/gestureStateManager.ts +6 -0
  264. package/src/handlers/gestures/hoverGesture.ts +6 -0
  265. package/src/handlers/gestures/longPressGesture.ts +6 -0
  266. package/src/handlers/gestures/manualGesture.ts +6 -0
  267. package/src/handlers/gestures/nativeGesture.ts +6 -0
  268. package/src/handlers/gestures/panGesture.ts +9 -0
  269. package/src/handlers/gestures/pinchGesture.ts +9 -0
  270. package/src/handlers/gestures/rotationGesture.ts +6 -0
  271. package/src/handlers/gestures/tapGesture.ts +6 -0
  272. package/src/v3/components/GestureButtons.tsx +5 -5
  273. package/src/v3/components/Pressable.tsx +2 -1
  274. package/src/v3/components/Touchable/Touchable.tsx +80 -47
  275. package/src/v3/components/Touchable/TouchableProps.ts +15 -1
  276. package/src/v3/detectors/HostGestureDetector.web.tsx +4 -1
  277. package/src/v3/detectors/VirtualDetector/VirtualDetector.tsx +3 -0
  278. package/src/v3/detectors/useNativeGestureRole.ts +8 -0
  279. package/src/v3/detectors/useNativeGestureRole.web.ts +42 -0
  280. package/src/v3/hooks/callbacks/useReanimatedEventHandler.ts +23 -7
  281. package/src/v3/hooks/gestures/fling/useFlingGesture.ts +5 -1
  282. package/src/v3/hooks/gestures/hover/useHoverGesture.ts +5 -1
  283. package/src/v3/hooks/gestures/longPress/useLongPressGesture.ts +3 -1
  284. package/src/v3/hooks/gestures/manual/useManualGesture.ts +5 -1
  285. package/src/v3/hooks/gestures/native/NativeTypes.ts +13 -1
  286. package/src/v3/hooks/gestures/native/useNativeGesture.ts +5 -1
  287. package/src/v3/hooks/gestures/pan/usePanGesture.ts +5 -1
  288. package/src/v3/hooks/gestures/pinch/usePinchGesture.ts +5 -1
  289. package/src/v3/hooks/gestures/rotation/useRotationGesture.ts +3 -1
  290. package/src/v3/hooks/gestures/tap/useTapGesture.ts +5 -1
  291. package/src/v3/hooks/useGesture.ts +0 -4
  292. package/src/v3/hooks/utils/configUtils.ts +16 -5
  293. package/src/v3/hooks/utils/index.ts +0 -1
  294. package/src/v3/hooks/utils/propsWhiteList.ts +1 -0
  295. package/src/v3/types/ConfigTypes.ts +1 -0
  296. package/src/web/constants.ts +1 -0
  297. package/src/web/detectors/RotationGestureDetector.ts +19 -5
  298. package/src/web/detectors/ScaleGestureDetector.ts +9 -3
  299. package/src/web/handlers/GestureHandler.ts +36 -6
  300. package/src/web/handlers/HoverGestureHandler.ts +2 -5
  301. package/src/web/handlers/IGestureHandler.ts +2 -0
  302. package/src/web/handlers/ManualGestureHandler.ts +2 -0
  303. package/src/web/handlers/NativeViewGestureHandler.ts +122 -19
  304. package/src/web/handlers/PanGestureHandler.ts +2 -0
  305. package/src/web/handlers/PinchGestureHandler.ts +5 -7
  306. package/src/web/handlers/RotationGestureHandler.ts +5 -5
  307. package/src/web/interfaces.ts +7 -0
  308. package/src/web/tools/GestureHandlerOrchestrator.ts +11 -3
  309. package/src/web/tools/GestureLifecycleEvents.ts +14 -0
  310. package/src/web/tools/PointerEventManager.ts +12 -0
@@ -13,6 +13,7 @@ import com.facebook.react.uimanager.RootView
13
13
  import com.facebook.react.uimanager.ThemedReactContext
14
14
  import com.swmansion.gesturehandler.core.GestureHandler
15
15
  import com.swmansion.gesturehandler.core.GestureHandlerOrchestrator
16
+ import com.swmansion.gesturehandler.core.OnJSResponderCancelListener
16
17
 
17
18
  class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView: ViewGroup, private val moduleId: Int) {
18
19
  private val orchestrator: GestureHandlerOrchestrator?
@@ -34,11 +35,26 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView:
34
35
  ReactConstants.TAG,
35
36
  "[GESTURE HANDLER] Initialize gesture handler for root view $rootView",
36
37
  )
38
+ val onJSResponderCancelListener = object : OnJSResponderCancelListener {
39
+ override fun onCancelJSResponderRequested(handler: GestureHandler) {
40
+ val time = SystemClock.uptimeMillis()
41
+ val event = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0f, 0f, 0)
42
+ if (rootView is RootView) {
43
+ rootView.onChildStartedNativeGesture(rootView, event)
44
+ }
45
+ event.recycle()
46
+ }
47
+
48
+ override fun onCancelJSResponderReleased(handler: GestureHandler) {
49
+ shouldIntercept = false
50
+ }
51
+ }
37
52
  orchestrator = GestureHandlerOrchestrator(
38
53
  wrappedView,
39
54
  registry,
40
55
  RNViewConfigurationHelper(),
41
56
  rootView,
57
+ onJSResponderCancelListener,
42
58
  ).apply {
43
59
  minimumAlphaForTraversal = MIN_ALPHA_FOR_TOUCH
44
60
  }
@@ -66,6 +82,8 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView:
66
82
  }
67
83
 
68
84
  internal inner class RootViewGestureHandler(handlerTag: Int) : GestureHandler() {
85
+ override val isContinuous = true
86
+
69
87
  init {
70
88
  this.tag = handlerTag
71
89
  }
@@ -95,14 +113,6 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView:
95
113
 
96
114
  override fun onCancel() {
97
115
  shouldIntercept = true
98
- val time = SystemClock.uptimeMillis()
99
- val event = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0f, 0f, 0).apply {
100
- action = MotionEvent.ACTION_CANCEL
101
- }
102
- if (rootView is RootView) {
103
- rootView.onChildStartedNativeGesture(rootView, event)
104
- }
105
- event.recycle()
106
116
  }
107
117
  }
108
118
 
@@ -45,10 +45,21 @@ class RNGestureHandlerRootView(context: Context?) : ReactViewGroup(context) {
45
45
  rootHelper?.recordHandlerIfNotPresent(handler)
46
46
  }
47
47
 
48
- override fun dispatchTouchEvent(event: MotionEvent) = if (rootViewEnabled && rootHelper!!.dispatchTouchEvent(event)) {
49
- true
50
- } else {
51
- super.dispatchTouchEvent(event)
48
+ override fun dispatchTouchEvent(event: MotionEvent): Boolean {
49
+ // When starting a new event stream, dispatch CANCEL event so the subtree
50
+ // can clean up its internal state that may be stale due to Gesture Handler
51
+ // starting to intercept events mid-stream.
52
+ if (rootViewEnabled && event.actionMasked == MotionEvent.ACTION_DOWN) {
53
+ val cancelEvent = MotionEvent.obtain(event).apply { action = MotionEvent.ACTION_CANCEL }
54
+ super.dispatchTouchEvent(cancelEvent)
55
+ cancelEvent.recycle()
56
+ }
57
+
58
+ return if (rootViewEnabled && rootHelper!!.dispatchTouchEvent(event)) {
59
+ true
60
+ } else {
61
+ super.dispatchTouchEvent(event)
62
+ }
52
63
  }
53
64
 
54
65
  override fun dispatchGenericMotionEvent(ev: MotionEvent) =
@@ -38,12 +38,6 @@ class RNViewConfigurationHelper : ViewConfigurationHelper {
38
38
  }
39
39
  }
40
40
 
41
- override fun getChildInDrawingOrderAtIndex(parent: ViewGroup, index: Int): View = if (parent is ReactViewGroup) {
42
- parent.getChildAt(parent.getZIndexMappedChildIndex(index))
43
- } else {
44
- parent.getChildAt(index)
45
- }
46
-
47
41
  override fun isViewClippingChildren(view: ViewGroup) = when {
48
42
  view.clipChildren -> true
49
43
  view is ReactScrollView -> view.overflow != "visible"
@@ -170,7 +170,7 @@ static const BOOL defaultFeedbackOnActivation = NO;
170
170
  - (RNGestureHandlerEventExtraData *)eventExtraData:(RNForceTouchGestureRecognizer *)recognizer
171
171
  {
172
172
  return [RNGestureHandlerEventExtraData forForce:recognizer.force
173
- forPosition:[recognizer locationInView:recognizer.view]
173
+ forPosition:[recognizer locationInView:self.coordinateView]
174
174
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
175
175
  withNumberOfTouches:recognizer.numberOfTouches
176
176
  withPointerType:_pointerType];
@@ -56,16 +56,6 @@ API_AVAILABLE(ios(13.4))
56
56
  [_gestureHandler handleGesture:self];
57
57
  }
58
58
 
59
- - (void)triggerAction
60
- {
61
- [_gestureHandler handleGesture:self fromReset:NO fromManualStateChange:NO];
62
- }
63
-
64
- - (void)cancel
65
- {
66
- self.enabled = NO;
67
- }
68
-
69
59
  - (void)reset
70
60
  {
71
61
  [super reset];
@@ -177,11 +167,16 @@ API_AVAILABLE(ios(13.4))
177
167
 
178
168
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
179
169
  {
180
- return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
170
+ return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:self.coordinateView]
181
171
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
182
172
  withPointerType:_pointerType];
183
173
  }
184
174
 
175
+ - (BOOL)isContinuous
176
+ {
177
+ return YES;
178
+ }
179
+
185
180
  @end
186
181
 
187
182
  #else
@@ -201,6 +196,11 @@ API_AVAILABLE(ios(13.4))
201
196
  return self;
202
197
  }
203
198
 
199
+ - (BOOL)isContinuous
200
+ {
201
+ return YES;
202
+ }
203
+
204
204
  - (void)bindToView:(RNGHUIView *)view
205
205
  {
206
206
  _view = view;
@@ -287,7 +287,7 @@
287
287
 
288
288
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
289
289
  {
290
- return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
290
+ return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:self.coordinateView]
291
291
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
292
292
  withNumberOfTouches:recognizer.numberOfTouches
293
293
  withDuration:[(RNBetterLongPressGestureRecognizer *)recognizer getDuration]
@@ -298,7 +298,7 @@
298
298
 
299
299
  - (RNGestureHandlerEventExtraData *)eventExtraData:(NSGestureRecognizer *)recognizer
300
300
  {
301
- return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
301
+ return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:self.coordinateView]
302
302
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window.contentView]
303
303
  withNumberOfTouches:1
304
304
  withDuration:[(RNBetterLongPressGestureRecognizer *)recognizer getDuration]
@@ -135,4 +135,9 @@
135
135
  return self;
136
136
  }
137
137
 
138
+ - (BOOL)isContinuous
139
+ {
140
+ return YES;
141
+ }
142
+
138
143
  @end
@@ -113,6 +113,8 @@
113
113
  @implementation RNNativeViewGestureHandler {
114
114
  BOOL _shouldActivateOnStart;
115
115
  BOOL _disallowInterruption;
116
+ BOOL _yieldsToContinuousGestures;
117
+ RNGestureHandlerEventExtraData *_lastActiveExtraData;
116
118
  }
117
119
 
118
120
  - (instancetype)initWithTag:(NSNumber *)tag
@@ -128,6 +130,7 @@
128
130
  [super updateConfig:config];
129
131
  _shouldActivateOnStart = [RCTConvert BOOL:config[@"shouldActivateOnStart"]];
130
132
  _disallowInterruption = [RCTConvert BOOL:config[@"disallowInterruption"]];
133
+ _yieldsToContinuousGestures = [RCTConvert BOOL:config[@"yieldsToContinuousGestures"]];
131
134
  }
132
135
 
133
136
  #if !TARGET_OS_OSX
@@ -138,22 +141,33 @@
138
141
  // for properties like `disallowInterruption` to work.
139
142
  if ([view isKindOfClass:[UIControl class]]) {
140
143
  UIControl *control = (UIControl *)view;
141
- [control addTarget:self action:@selector(handleTouchDown:forEvent:) forControlEvents:UIControlEventTouchDown];
142
- [control addTarget:self
143
- action:@selector(handleTouchUpOutside:forEvent:)
144
- forControlEvents:UIControlEventTouchUpOutside];
145
- [control addTarget:self
146
- action:@selector(handleTouchUpInside:forEvent:)
147
- forControlEvents:UIControlEventTouchUpInside];
148
- [control addTarget:self action:@selector(handleDragExit:forEvent:) forControlEvents:UIControlEventTouchDragExit];
149
- [control addTarget:self
150
- action:@selector(handleDragInside:forEvent:)
151
- forControlEvents:UIControlEventTouchDragInside];
152
- [control addTarget:self
153
- action:@selector(handleDragOutside:forEvent:)
154
- forControlEvents:UIControlEventTouchDragOutside];
155
- [control addTarget:self action:@selector(handleDragEnter:forEvent:) forControlEvents:UIControlEventTouchDragEnter];
156
- [control addTarget:self action:@selector(handleTouchCancel:forEvent:) forControlEvents:UIControlEventTouchCancel];
144
+
145
+ // Pressing UISwitch triggers only touchUp and valueChanged callbacks. In order to align its behavior
146
+ // with other UIControls, we have to dispatch full Gesture Handler events flow in one callback, as
147
+ // touchesDown is not executed.
148
+ if ([view isKindOfClass:[UISwitch class]]) {
149
+ _pointerType = RNGestureHandlerTouch;
150
+ [control addTarget:self action:@selector(handleSwitch:) forControlEvents:UIControlEventValueChanged];
151
+ } else {
152
+ [control addTarget:self action:@selector(handleTouchDown:forEvent:) forControlEvents:UIControlEventTouchDown];
153
+ [control addTarget:self
154
+ action:@selector(handleTouchUpOutside:forEvent:)
155
+ forControlEvents:UIControlEventTouchUpOutside];
156
+ [control addTarget:self
157
+ action:@selector(handleTouchUpInside:forEvent:)
158
+ forControlEvents:UIControlEventTouchUpInside];
159
+ [control addTarget:self action:@selector(handleDragExit:forEvent:) forControlEvents:UIControlEventTouchDragExit];
160
+ [control addTarget:self
161
+ action:@selector(handleDragInside:forEvent:)
162
+ forControlEvents:UIControlEventTouchDragInside];
163
+ [control addTarget:self
164
+ action:@selector(handleDragOutside:forEvent:)
165
+ forControlEvents:UIControlEventTouchDragOutside];
166
+ [control addTarget:self
167
+ action:@selector(handleDragEnter:forEvent:)
168
+ forControlEvents:UIControlEventTouchDragEnter];
169
+ [control addTarget:self action:@selector(handleTouchCancel:forEvent:) forControlEvents:UIControlEventTouchCancel];
170
+ }
157
171
  } else {
158
172
  [super bindToView:view];
159
173
  }
@@ -180,6 +194,46 @@
180
194
  [super unbindFromView];
181
195
  }
182
196
 
197
+ - (BOOL)shouldSuppressActiveEvent:(RNGestureHandlerEventExtraData *)extraData
198
+ {
199
+ if (_lastActiveExtraData != nil && [_lastActiveExtraData.data isEqualToDictionary:extraData.data]) {
200
+ return YES;
201
+ }
202
+
203
+ _lastActiveExtraData = extraData;
204
+ return NO;
205
+ }
206
+
207
+ - (void)sendActiveStateEventIfChangedForView:(UIView *)sender extraData:(RNGestureHandlerEventExtraData *)extraData
208
+ {
209
+ if ([self shouldSuppressActiveEvent:extraData]) {
210
+ return;
211
+ }
212
+
213
+ [self sendEventsInState:RNGestureHandlerStateActive forViewWithTag:sender.reactTag withExtraData:extraData];
214
+ }
215
+
216
+ - (void)handleSwitch:(UIView *)sender
217
+ {
218
+ [self sendEventsInState:RNGestureHandlerStateBegan
219
+ forViewWithTag:sender.reactTag
220
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
221
+ withNumberOfTouches:1
222
+ withPointerType:_pointerType]];
223
+ [self sendEventsInState:RNGestureHandlerStateActive
224
+ forViewWithTag:sender.reactTag
225
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
226
+ withNumberOfTouches:1
227
+ withPointerType:_pointerType]];
228
+ [self sendEventsInState:RNGestureHandlerStateEnd
229
+ forViewWithTag:sender.reactTag
230
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
231
+ withNumberOfTouches:1
232
+ withPointerType:_pointerType]];
233
+
234
+ [self reset];
235
+ }
236
+
183
237
  - (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
184
238
  {
185
239
  [self setCurrentPointerTypeForEvent:event];
@@ -187,11 +241,18 @@
187
241
 
188
242
  if (_disallowInterruption) {
189
243
  // When `disallowInterruption` is set we cancel all gesture handlers when this UIControl
190
- // gets DOWN event
244
+ // gets DOWN event. When `yieldsToContinuousGestures` is also set we leave alone:
245
+ // - non-RNGH recognizers (e.g. UIScrollView's pan), so native containers can take over
246
+ // - continuous RNGH recognizers, so other continuous gestures wrapping the touchable can still take over
191
247
  for (RNGHUITouch *touch in [event allTouches]) {
192
- for (UIGestureRecognizer *recogn in [touch gestureRecognizers]) {
193
- recogn.enabled = NO;
194
- recogn.enabled = YES;
248
+ for (UIGestureRecognizer *recognizer in [touch gestureRecognizers]) {
249
+ if (_yieldsToContinuousGestures &&
250
+ (recognizer.gestureHandler == nil || [recognizer.gestureHandler isContinuous])) {
251
+ continue;
252
+ }
253
+
254
+ recognizer.enabled = NO;
255
+ recognizer.enabled = YES;
195
256
  }
196
257
  }
197
258
  }
@@ -201,12 +262,6 @@
201
262
  withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
202
263
  withNumberOfTouches:event.allTouches.count
203
264
  withPointerType:_pointerType]];
204
-
205
- [self sendEventsInState:RNGestureHandlerStateActive
206
- forViewWithTag:sender.reactTag
207
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
208
- withNumberOfTouches:event.allTouches.count
209
- withPointerType:_pointerType]];
210
265
  }
211
266
 
212
267
  - (void)handleTouchUpOutside:(UIView *)sender forEvent:(UIEvent *)event
@@ -224,11 +279,12 @@
224
279
 
225
280
  - (void)handleTouchUpInside:(UIView *)sender forEvent:(UIEvent *)event
226
281
  {
227
- [self sendEventsInState:RNGestureHandlerStateEnd
228
- forViewWithTag:sender.reactTag
229
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
230
- withNumberOfTouches:event.allTouches.count
231
- withPointerType:_pointerType]];
282
+ RNGestureHandlerEventExtraData *extraData = [RNGestureHandlerEventExtraData forPointerInside:YES
283
+ withNumberOfTouches:event.allTouches.count
284
+ withPointerType:_pointerType];
285
+
286
+ [self sendActiveStateEventIfChangedForView:sender extraData:extraData];
287
+ [self sendEventsInState:RNGestureHandlerStateEnd forViewWithTag:sender.reactTag withExtraData:extraData];
232
288
  }
233
289
 
234
290
  - (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
@@ -238,30 +294,27 @@
238
294
  UIControl *control = (UIControl *)sender;
239
295
  [control cancelTrackingWithEvent:event];
240
296
  } else {
241
- [self sendEventsInState:RNGestureHandlerStateActive
242
- forViewWithTag:sender.reactTag
243
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
244
- withNumberOfTouches:event.allTouches.count
245
- withPointerType:_pointerType]];
297
+ [self sendActiveStateEventIfChangedForView:sender
298
+ extraData:[RNGestureHandlerEventExtraData forPointerInside:NO
299
+ withNumberOfTouches:event.allTouches.count
300
+ withPointerType:_pointerType]];
246
301
  }
247
302
  }
248
303
 
249
304
  - (void)handleDragEnter:(UIView *)sender forEvent:(UIEvent *)event
250
305
  {
251
- [self sendEventsInState:RNGestureHandlerStateActive
252
- forViewWithTag:sender.reactTag
253
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
254
- withNumberOfTouches:event.allTouches.count
255
- withPointerType:_pointerType]];
306
+ [self sendActiveStateEventIfChangedForView:sender
307
+ extraData:[RNGestureHandlerEventExtraData forPointerInside:YES
308
+ withNumberOfTouches:event.allTouches.count
309
+ withPointerType:_pointerType]];
256
310
  }
257
311
 
258
312
  - (void)handleDragInside:(UIView *)sender forEvent:(UIEvent *)event
259
313
  {
260
- [self sendEventsInState:RNGestureHandlerStateActive
261
- forViewWithTag:sender.reactTag
262
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
263
- withNumberOfTouches:event.allTouches.count
264
- withPointerType:_pointerType]];
314
+ [self sendActiveStateEventIfChangedForView:sender
315
+ extraData:[RNGestureHandlerEventExtraData forPointerInside:YES
316
+ withNumberOfTouches:event.allTouches.count
317
+ withPointerType:_pointerType]];
265
318
  }
266
319
 
267
320
  - (void)handleDragOutside:(UIView *)sender forEvent:(UIEvent *)event
@@ -270,11 +323,10 @@
270
323
  return;
271
324
  }
272
325
 
273
- [self sendEventsInState:RNGestureHandlerStateActive
274
- forViewWithTag:sender.reactTag
275
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
276
- withNumberOfTouches:event.allTouches.count
277
- withPointerType:_pointerType]];
326
+ [self sendActiveStateEventIfChangedForView:sender
327
+ extraData:[RNGestureHandlerEventExtraData forPointerInside:NO
328
+ withNumberOfTouches:event.allTouches.count
329
+ withPointerType:_pointerType]];
278
330
  }
279
331
 
280
332
  - (void)handleTouchCancel:(UIView *)sender forEvent:(UIEvent *)event
@@ -291,7 +343,13 @@
291
343
  return YES;
292
344
  }
293
345
 
294
- #else
346
+ - (void)reset
347
+ {
348
+ [super reset];
349
+ _lastActiveExtraData = nil;
350
+ }
351
+
352
+ #endif
295
353
 
296
354
  - (RNGestureHandlerEventExtraData *)eventExtraData:(RNDummyGestureRecognizer *)recognizer
297
355
  {
@@ -300,6 +358,9 @@
300
358
  withPointerType:RNGestureHandlerMouse];
301
359
  }
302
360
 
303
- #endif
361
+ - (BOOL)isContinuous
362
+ {
363
+ return YES;
364
+ }
304
365
 
305
366
  @end
@@ -269,7 +269,6 @@
269
269
  [self triggerActionFromReset];
270
270
  [_gestureHandler.pointerTracker reset];
271
271
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
272
- self.enabled = YES;
273
272
  [super reset];
274
273
  [_gestureHandler reset];
275
274
 
@@ -363,6 +362,11 @@
363
362
  return self;
364
363
  }
365
364
 
365
+ - (BOOL)isContinuous
366
+ {
367
+ return YES;
368
+ }
369
+
366
370
  - (void)resetConfig
367
371
  {
368
372
  [super resetConfig];
@@ -452,7 +456,7 @@
452
456
  #if TARGET_OS_OSX
453
457
  - (RNGestureHandlerEventExtraData *)eventExtraData:(NSPanGestureRecognizer *)recognizer
454
458
  {
455
- return [RNGestureHandlerEventExtraData forPan:[recognizer locationInView:recognizer.view]
459
+ return [RNGestureHandlerEventExtraData forPan:[recognizer locationInView:self.coordinateView]
456
460
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window.contentView]
457
461
  withTranslation:[recognizer translationInView:recognizer.view.window.contentView]
458
462
  withVelocity:[recognizer velocityInView:recognizer.view.window.contentView]
@@ -466,7 +470,7 @@
466
470
  RNBetterPanGestureRecognizer *panRecognizer = (RNBetterPanGestureRecognizer *)recognizer;
467
471
 
468
472
  return [RNGestureHandlerEventExtraData
469
- forPan:[recognizer locationInView:recognizer.view]
473
+ forPan:[recognizer locationInView:self.coordinateView]
470
474
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
471
475
  withTranslation:[recognizer translationInView:recognizer.view.window]
472
476
  withVelocity:[recognizer velocityInView:recognizer.view.window]
@@ -161,13 +161,18 @@
161
161
  return self;
162
162
  }
163
163
 
164
+ - (BOOL)isContinuous
165
+ {
166
+ return YES;
167
+ }
168
+
164
169
  #if !TARGET_OS_TV
165
170
 
166
171
  #if TARGET_OS_OSX
167
172
  - (RNGestureHandlerEventExtraData *)eventExtraData:(NSMagnificationGestureRecognizer *)recognizer
168
173
  {
169
174
  return [RNGestureHandlerEventExtraData forPinch:recognizer.magnification
170
- withFocalPoint:[recognizer locationInView:recognizer.view]
175
+ withFocalPoint:[recognizer locationInView:self.coordinateView]
171
176
  withVelocity:((RNBetterPinchRecognizer *)recognizer).velocity
172
177
  withNumberOfTouches:2
173
178
  withPointerType:RNGestureHandlerMouse];
@@ -177,12 +182,13 @@
177
182
  {
178
183
  CGPoint focalPoint;
179
184
  NSUInteger numberOfTouches = recognizer.numberOfTouches;
185
+ RNGHUIView *coordinateView = self.coordinateView;
180
186
 
181
187
  if (numberOfTouches > 0) {
182
188
  CGPoint accumulatedPoint = CGPointZero;
183
189
 
184
190
  for (int i = 0; i < numberOfTouches; i++) {
185
- CGPoint location = [recognizer locationOfTouch:i inView:recognizer.view];
191
+ CGPoint location = [recognizer locationOfTouch:i inView:coordinateView];
186
192
  accumulatedPoint.x += location.x;
187
193
  accumulatedPoint.y += location.y;
188
194
  }
@@ -190,7 +196,7 @@
190
196
  focalPoint = CGPointMake(accumulatedPoint.x / numberOfTouches, accumulatedPoint.y / numberOfTouches);
191
197
  } else {
192
198
  // Trackpad pinch gestures may report 0 touches - use the recognizer's location instead
193
- focalPoint = [recognizer locationInView:recognizer.view];
199
+ focalPoint = [recognizer locationInView:coordinateView];
194
200
  }
195
201
 
196
202
  return [RNGestureHandlerEventExtraData forPinch:recognizer.scale
@@ -155,13 +155,18 @@
155
155
  return self;
156
156
  }
157
157
 
158
+ - (BOOL)isContinuous
159
+ {
160
+ return YES;
161
+ }
162
+
158
163
  #if !TARGET_OS_TV
159
164
 
160
165
  #if TARGET_OS_OSX
161
166
  - (RNGestureHandlerEventExtraData *)eventExtraData:(NSRotationGestureRecognizer *)recognizer
162
167
  {
163
168
  return [RNGestureHandlerEventExtraData forRotation:-recognizer.rotation
164
- withAnchorPoint:[recognizer locationInView:recognizer.view]
169
+ withAnchorPoint:[recognizer locationInView:self.coordinateView]
165
170
  withVelocity:((RNBetterRotationRecognizer *)recognizer).velocity
166
171
  withNumberOfTouches:2
167
172
  withPointerType:RNGestureHandlerMouse];
@@ -170,7 +175,7 @@
170
175
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIRotationGestureRecognizer *)recognizer
171
176
  {
172
177
  return [RNGestureHandlerEventExtraData forRotation:recognizer.rotation
173
- withAnchorPoint:[recognizer locationInView:recognizer.view]
178
+ withAnchorPoint:[recognizer locationInView:self.coordinateView]
174
179
  withVelocity:recognizer.velocity
175
180
  withNumberOfTouches:recognizer.numberOfTouches
176
181
  withPointerType:_pointerType];
@@ -258,7 +258,7 @@ static const NSTimeInterval defaultMaxDuration = 0.5;
258
258
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancel) object:nil];
259
259
  _tapsSoFar = 0;
260
260
  _maxNumberOfTouches = 0;
261
- self.enabled = YES;
261
+ self.enabled = _gestureHandler.enabled;
262
262
  [super reset];
263
263
  [_gestureHandler reset];
264
264
  }
@@ -81,6 +81,7 @@
81
81
  @property (nonatomic) BOOL shouldCancelWhenOutside;
82
82
  @property (nonatomic) BOOL needsPointerData;
83
83
  @property (nonatomic) BOOL manualActivation;
84
+ @property (nonatomic) BOOL cancelsJSResponder;
84
85
  @property (nonatomic) BOOL dispatchesAnimatedEvents;
85
86
  @property (nonatomic) BOOL dispatchesReanimatedEvents;
86
87
  @property (nonatomic, weak, nullable) RNGHUIView *hostDetectorView;
@@ -88,6 +89,17 @@
88
89
  @property (nonatomic, copy, nullable) NSNumber *viewTag;
89
90
  @property (nonatomic, readonly) RNGestureHandlerState lastState;
90
91
 
92
+ /**
93
+ The view whose coordinate space should be used when reporting event positions to JS.
94
+ Handlers attached via the V3 NativeDetector are bound to the `RNGestureHandlerDetector` wrapper,
95
+ which never carries user-applied transforms — those live on its child. When the detector has
96
+ exactly one subview we descend into it so reported coordinates match the visible (transformed)
97
+ view, the same coordinate space V2 and the V3 VirtualGestureDetector report in. With multiple
98
+ subviews there is no JS-side way to disambiguate which child caught the pointer, so we keep
99
+ the detector itself as the reference frame.
100
+ */
101
+ @property (nonatomic, readonly, nullable) RNGHUIView *coordinateView;
102
+
91
103
  - (BOOL)isViewParagraphComponent:(nullable RNGHUIView *)view;
92
104
  - (nonnull RNGHUIView *)chooseViewForInteraction:(nonnull UIGestureRecognizer *)recognizer;
93
105
  - (void)bindToView:(nonnull RNGHUIView *)view;
@@ -96,6 +108,7 @@
96
108
  - (void)setConfig:(nullable NSDictionary *)config NS_REQUIRES_SUPER;
97
109
  - (void)updateConfig:(nullable NSDictionary *)config NS_REQUIRES_SUPER;
98
110
  - (void)updateRelations:(nonnull NSDictionary *)relations;
111
+ - (BOOL)shouldSuppressActiveEvent:(nonnull RNGestureHandlerEventExtraData *)extraData;
99
112
  - (void)handleGesture:(nonnull id)recognizer;
100
113
  - (void)handleGesture:(nonnull id)recognizer fromReset:(BOOL)fromReset;
101
114
  - (void)handleGesture:(nonnull id)recognizer
@@ -125,6 +138,7 @@
125
138
  - (nonnull RNGHUIView *)findViewForEvents;
126
139
  - (BOOL)wantsToAttachDirectlyToView;
127
140
  - (BOOL)usesNativeOrVirtualDetector;
141
+ - (BOOL)isContinuous;
128
142
 
129
143
  #if !TARGET_OS_OSX
130
144
  - (BOOL)isUIScrollViewPanGestureRecognizer:(nonnull UIGestureRecognizer *)gestureRecognizer;
@@ -140,3 +154,7 @@
140
154
  #endif
141
155
 
142
156
  @end
157
+
158
+ @interface UIGestureRecognizer (GestureHandler)
159
+ @property (nonatomic, readonly, nullable) RNGestureHandler *gestureHandler;
160
+ @end