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
@@ -1,25 +1,40 @@
1
1
  import { Platform } from 'react-native';
2
2
 
3
- import type { ActionType } from '../../ActionType';
3
+ import { type ActionType, usesNativeOrVirtualDetector } from '../../ActionType';
4
4
  import { State } from '../../State';
5
+ import { deepEqual } from '../../utils';
6
+ import type { NativeHandlerData } from '../../v3/hooks/gestures/native/NativeTypes';
7
+ import type { HandlerData } from '../../v3/types';
5
8
  import { SingleGestureName } from '../../v3/types';
6
- import { DEFAULT_TOUCH_SLOP } from '../constants';
9
+ import {
10
+ DEFAULT_TOUCH_SLOP,
11
+ NATIVE_GESTURE_ROLE_ATTRIBUTE,
12
+ } from '../constants';
7
13
  import type { AdaptedEvent, Config, PropsRef } from '../interfaces';
14
+ import { NativeGestureRole } from '../interfaces';
8
15
  import type { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
16
+ import {
17
+ dispatchGestureLifecycleEvent,
18
+ GestureLifecycleEvent,
19
+ } from '../tools/GestureLifecycleEvents';
9
20
  import GestureHandler from './GestureHandler';
10
21
  import type IGestureHandler from './IGestureHandler';
22
+
11
23
  export default class NativeViewGestureHandler extends GestureHandler {
12
- private buttonRole!: boolean;
24
+ public override readonly isContinuous = true;
25
+ private role: NativeGestureRole | null = null;
13
26
 
14
- // TODO: Implement logic for activation on start
15
- // @ts-ignore Logic yet to be implemented
27
+ // TODO: Implement logic for activation on start properly
16
28
  private shouldActivateOnStart = false;
17
29
  private disallowInterruption = false;
30
+ private yieldsToContinuousGestures = false;
18
31
 
19
32
  private startX = 0;
20
33
  private startY = 0;
21
34
  private minDistSq = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
22
35
 
36
+ private lastActiveHandlerData: HandlerData<NativeHandlerData> | null = null;
37
+
23
38
  public constructor(
24
39
  delegate: GestureHandlerDelegate<unknown, IGestureHandler>
25
40
  ) {
@@ -43,7 +58,19 @@ export default class NativeViewGestureHandler extends GestureHandler {
43
58
  const view = this.delegate.view as HTMLElement;
44
59
 
45
60
  this.restoreViewStyles(view);
46
- this.buttonRole = view.getAttribute('role') === 'button';
61
+
62
+ if (usesNativeOrVirtualDetector(this.actionType)) {
63
+ this.role =
64
+ (view.getAttribute(
65
+ NATIVE_GESTURE_ROLE_ATTRIBUTE
66
+ ) as NativeGestureRole) ?? null;
67
+ } else {
68
+ if (view.getAttribute('role') === 'button') {
69
+ this.role = NativeGestureRole.Button;
70
+ } else if (view.querySelector(':scope > input[role="switch"]') !== null) {
71
+ this.role = NativeGestureRole.Switch;
72
+ }
73
+ }
47
74
  }
48
75
 
49
76
  public override updateGestureConfig(config: Config): void {
@@ -55,6 +82,9 @@ export default class NativeViewGestureHandler extends GestureHandler {
55
82
  if (config.disallowInterruption !== undefined) {
56
83
  this.disallowInterruption = config.disallowInterruption;
57
84
  }
85
+ if (config.yieldsToContinuousGestures !== undefined) {
86
+ this.yieldsToContinuousGestures = config.yieldsToContinuousGestures;
87
+ }
58
88
 
59
89
  const view = this.delegate.view as HTMLElement;
60
90
  this.restoreViewStyles(view);
@@ -66,7 +96,7 @@ export default class NativeViewGestureHandler extends GestureHandler {
66
96
  }
67
97
 
68
98
  view.style['touchAction'] = 'auto';
69
- // @ts-ignore Turns on defualt touch behavior on Safari
99
+ // @ts-ignore Turns on default touch behavior on Safari
70
100
  view.style['WebkitTouchCallout'] = 'auto';
71
101
  }
72
102
 
@@ -93,10 +123,19 @@ export default class NativeViewGestureHandler extends GestureHandler {
93
123
 
94
124
  this.begin();
95
125
 
126
+ dispatchGestureLifecycleEvent(
127
+ this.delegate.view as HTMLElement | null,
128
+ GestureLifecycleEvent.Began
129
+ );
130
+
96
131
  const view = this.delegate.view as HTMLElement;
97
132
  const isRNGHText = view.hasAttribute('rnghtext');
98
133
 
99
- if (this.buttonRole || isRNGHText) {
134
+ if (
135
+ (this.role === NativeGestureRole.Button && this.shouldActivateOnStart) ||
136
+ this.role === NativeGestureRole.Switch ||
137
+ isRNGHText
138
+ ) {
100
139
  this.activate();
101
140
  }
102
141
  }
@@ -109,12 +148,15 @@ export default class NativeViewGestureHandler extends GestureHandler {
109
148
  const dy = this.startY - lastCoords.y;
110
149
  const distSq = dx * dx + dy * dy;
111
150
 
112
- if (distSq >= this.minDistSq) {
113
- if (this.buttonRole && this.state === State.ACTIVE) {
114
- this.cancel();
115
- } else if (!this.buttonRole && this.state === State.BEGAN) {
116
- this.activate();
117
- }
151
+ if (
152
+ this.role === NativeGestureRole.Switch ||
153
+ this.role === NativeGestureRole.Button
154
+ ) {
155
+ return;
156
+ }
157
+
158
+ if (distSq >= this.minDistSq && this.state === State.BEGAN) {
159
+ this.activate();
118
160
  }
119
161
  }
120
162
 
@@ -138,6 +180,13 @@ export default class NativeViewGestureHandler extends GestureHandler {
138
180
  this.tracker.removeFromTracker(event.pointerId);
139
181
 
140
182
  if (this.tracker.trackedPointersCount === 0) {
183
+ if (
184
+ this.role === NativeGestureRole.Button &&
185
+ this.state === State.BEGAN
186
+ ) {
187
+ this.activate();
188
+ }
189
+
141
190
  if (this.state === State.ACTIVE) {
142
191
  this.end();
143
192
  } else {
@@ -156,12 +205,15 @@ export default class NativeViewGestureHandler extends GestureHandler {
156
205
  if (
157
206
  handler instanceof NativeViewGestureHandler &&
158
207
  handler.state === State.ACTIVE &&
159
- handler.disallowsInterruption()
208
+ handler.disallowsInterruption() &&
209
+ !handler.yieldsToContinuousGestures
160
210
  ) {
161
211
  return false;
162
212
  }
163
213
 
164
- const canBeInterrupted = !this.disallowInterruption;
214
+ const canBeInterrupted =
215
+ !this.disallowInterruption ||
216
+ (this.yieldsToContinuousGestures && handler.isContinuous);
165
217
 
166
218
  if (
167
219
  this.state === State.ACTIVE &&
@@ -176,8 +228,16 @@ export default class NativeViewGestureHandler extends GestureHandler {
176
228
  );
177
229
  }
178
230
 
179
- public override shouldBeCancelledByOther(_handler: IGestureHandler): boolean {
180
- return !this.disallowInterruption;
231
+ public override detach(): void {
232
+ super.detach();
233
+ this.role = null;
234
+ }
235
+
236
+ public override shouldBeCancelledByOther(handler: IGestureHandler): boolean {
237
+ return (
238
+ !this.disallowInterruption ||
239
+ (this.yieldsToContinuousGestures && handler.isContinuous)
240
+ );
181
241
  }
182
242
 
183
243
  public override shouldAttachGestureToChildView(): boolean {
@@ -189,7 +249,32 @@ export default class NativeViewGestureHandler extends GestureHandler {
189
249
  }
190
250
 
191
251
  public isButton(): boolean {
192
- return this.buttonRole;
252
+ return this.role === NativeGestureRole.Button;
253
+ }
254
+
255
+ public override shouldBeginWithRecordedHandlers(
256
+ recorded: IGestureHandler[]
257
+ ): boolean {
258
+ if (!this.isButton()) {
259
+ return true;
260
+ }
261
+
262
+ const self = this as IGestureHandler;
263
+ return recorded.every(
264
+ (other) =>
265
+ other.shouldRecognizeSimultaneously(self) ||
266
+ self.shouldRecognizeSimultaneously(other) ||
267
+ other.delegate.view === this.delegate.view ||
268
+ other.name === SingleGestureName.Hover
269
+ );
270
+ }
271
+
272
+ protected override onCancel(): void {
273
+ super.onCancel();
274
+ dispatchGestureLifecycleEvent(
275
+ this.delegate.view as HTMLElement | null,
276
+ GestureLifecycleEvent.Canceled
277
+ );
193
278
  }
194
279
 
195
280
  protected override transformNativeEvent(): Record<string, unknown> {
@@ -199,4 +284,22 @@ export default class NativeViewGestureHandler extends GestureHandler {
199
284
  ),
200
285
  };
201
286
  }
287
+
288
+ protected override shouldSuppressActiveUpdate(
289
+ handlerData: HandlerData<NativeHandlerData>
290
+ ): boolean {
291
+ if (
292
+ this.lastActiveHandlerData &&
293
+ deepEqual(this.lastActiveHandlerData, handlerData)
294
+ ) {
295
+ return true;
296
+ }
297
+ this.lastActiveHandlerData = handlerData;
298
+ return false;
299
+ }
300
+
301
+ public override reset(): void {
302
+ super.reset();
303
+ this.lastActiveHandlerData = null;
304
+ }
202
305
  }
@@ -13,6 +13,8 @@ const DEFAULT_MAX_POINTERS = 10;
13
13
  const DEFAULT_MIN_DIST_SQ = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
14
14
 
15
15
  export default class PanGestureHandler extends GestureHandler {
16
+ public override readonly isContinuous = true;
17
+
16
18
  public velocityX = 0;
17
19
  public velocityY = 0;
18
20
 
@@ -10,6 +10,8 @@ import GestureHandler from './GestureHandler';
10
10
  import type IGestureHandler from './IGestureHandler';
11
11
 
12
12
  export default class PinchGestureHandler extends GestureHandler {
13
+ public override readonly isContinuous = true;
14
+
13
15
  private scale = 1;
14
16
  private velocity = 0;
15
17
 
@@ -89,8 +91,8 @@ export default class PinchGestureHandler extends GestureHandler {
89
91
  protected override onPointerAdd(event: AdaptedEvent): void {
90
92
  this.tracker.addToTracker(event);
91
93
  super.onPointerAdd(event);
92
- this.tryBegin();
93
94
  this.scaleGestureDetector.onTouchEvent(event, this.tracker);
95
+ this.tryBegin();
94
96
  }
95
97
 
96
98
  protected override onPointerUp(event: AdaptedEvent): void {
@@ -111,26 +113,22 @@ export default class PinchGestureHandler extends GestureHandler {
111
113
  super.onPointerRemove(event);
112
114
  this.scaleGestureDetector.onTouchEvent(event, this.tracker);
113
115
  this.tracker.removeFromTracker(event.pointerId);
114
-
115
- if (this.state === State.ACTIVE && this.tracker.trackedPointersCount < 2) {
116
- this.end();
117
- }
118
116
  }
119
117
 
120
118
  protected override onPointerMove(event: AdaptedEvent): void {
119
+ this.tracker.track(event);
121
120
  if (this.tracker.trackedPointersCount < 2) {
122
121
  return;
123
122
  }
124
- this.tracker.track(event);
125
123
 
126
124
  this.scaleGestureDetector.onTouchEvent(event, this.tracker);
127
125
  super.onPointerMove(event);
128
126
  }
129
127
  protected override onPointerOutOfBounds(event: AdaptedEvent): void {
128
+ this.tracker.track(event);
130
129
  if (this.tracker.trackedPointersCount < 2) {
131
130
  return;
132
131
  }
133
- this.tracker.track(event);
134
132
 
135
133
  this.scaleGestureDetector.onTouchEvent(event, this.tracker);
136
134
  super.onPointerOutOfBounds(event);
@@ -11,6 +11,8 @@ import type IGestureHandler from './IGestureHandler';
11
11
  const ROTATION_RECOGNITION_THRESHOLD = Math.PI / 36;
12
12
 
13
13
  export default class RotationGestureHandler extends GestureHandler {
14
+ public override readonly isContinuous = true;
15
+
14
16
  private rotation = 0;
15
17
  private velocity = 0;
16
18
 
@@ -98,11 +100,12 @@ export default class RotationGestureHandler extends GestureHandler {
98
100
  this.tracker.addToTracker(event);
99
101
  super.onPointerAdd(event);
100
102
 
101
- this.tryBegin();
102
103
  this.rotationGestureDetector.onTouchEvent(event, this.tracker);
104
+ this.tryBegin();
103
105
  }
104
106
 
105
107
  protected override onPointerMove(event: AdaptedEvent): void {
108
+ this.tracker.track(event);
106
109
  if (this.tracker.trackedPointersCount < 2) {
107
110
  return;
108
111
  }
@@ -111,14 +114,13 @@ export default class RotationGestureHandler extends GestureHandler {
111
114
  this.cachedAnchorX = anchor.x;
112
115
  this.cachedAnchorY = anchor.y;
113
116
 
114
- this.tracker.track(event);
115
-
116
117
  this.rotationGestureDetector.onTouchEvent(event, this.tracker);
117
118
 
118
119
  super.onPointerMove(event);
119
120
  }
120
121
 
121
122
  protected override onPointerOutOfBounds(event: AdaptedEvent): void {
123
+ this.tracker.track(event);
122
124
  if (this.tracker.trackedPointersCount < 2) {
123
125
  return;
124
126
  }
@@ -127,8 +129,6 @@ export default class RotationGestureHandler extends GestureHandler {
127
129
  this.cachedAnchorX = anchor.x;
128
130
  this.cachedAnchorY = anchor.y;
129
131
 
130
- this.tracker.track(event);
131
-
132
132
  this.rotationGestureDetector.onTouchEvent(event, this.tracker);
133
133
 
134
134
  super.onPointerOutOfBounds(event);
@@ -88,6 +88,7 @@ export interface Config extends Record<string, ConfigArgs> {
88
88
  maxDeltaY?: number;
89
89
  shouldActivateOnStart?: boolean;
90
90
  disallowInterruption?: boolean;
91
+ yieldsToContinuousGestures?: boolean;
91
92
  direction?: Directions;
92
93
  enableTrackpadTwoFingerGesture?: boolean;
93
94
  }
@@ -177,3 +178,9 @@ export type GestureHandlerRef = {
177
178
  export type SVGRef = {
178
179
  elementRef: { current: SVGElement };
179
180
  };
181
+
182
+ export enum NativeGestureRole {
183
+ Button = 'GestureHandlerButton',
184
+ Switch = 'Switch',
185
+ ScrollView = 'ScrollView',
186
+ }
@@ -32,6 +32,10 @@ export default class GestureHandlerOrchestrator {
32
32
  handler.activationIndex = Number.MAX_VALUE;
33
33
  }
34
34
 
35
+ public isHandlerRecorded(handler: IGestureHandler): boolean {
36
+ return this.gestureHandlers.includes(handler);
37
+ }
38
+
35
39
  public removeHandlerFromOrchestrator(handler: IGestureHandler): void {
36
40
  const indexInGestureHandlers = this.gestureHandlers.indexOf(handler);
37
41
  const indexInAwaitingHandlers = this.awaitingHandlers.indexOf(handler);
@@ -266,15 +270,19 @@ export default class GestureHandlerOrchestrator {
266
270
  }
267
271
 
268
272
  public recordHandlerIfNotPresent(handler: IGestureHandler): void {
269
- if (this.gestureHandlers.includes(handler)) {
273
+ if (this.isHandlerRecorded(handler)) {
270
274
  return;
271
275
  }
272
276
 
273
- this.gestureHandlers.push(handler);
274
-
275
277
  handler.active = false;
276
278
  handler.awaiting = false;
277
279
  handler.activationIndex = Number.MAX_SAFE_INTEGER;
280
+
281
+ if (!handler.shouldBeginWithRecordedHandlers(this.gestureHandlers)) {
282
+ handler.cancel();
283
+ }
284
+
285
+ this.gestureHandlers.push(handler);
278
286
  }
279
287
 
280
288
  private shouldHandlerWaitForOther(
@@ -0,0 +1,14 @@
1
+ export const GestureLifecycleEvent = {
2
+ Began: 'gh:gestureBegan',
3
+ Canceled: 'gh:gestureCanceled',
4
+ } as const;
5
+
6
+ export type GestureLifecycleEventName =
7
+ (typeof GestureLifecycleEvent)[keyof typeof GestureLifecycleEvent];
8
+
9
+ export function dispatchGestureLifecycleEvent(
10
+ view: HTMLElement | null | undefined,
11
+ name: GestureLifecycleEventName
12
+ ): void {
13
+ view?.dispatchEvent(new CustomEvent(name));
14
+ }
@@ -162,6 +162,18 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
162
162
  const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
163
163
 
164
164
  this.onPointerMoveOut(adaptedEvent);
165
+
166
+ // When the view is not capturing the pointer (e.g. when `role="button"`),
167
+ // `pointermove` stops firing once the pointer leaves the view's bounds, so
168
+ // the out-of-bounds detection in `pointerMoveCallback` never runs. Fall back
169
+ // to the DOM `pointerleave` event for any tracked, in-bounds pointer.
170
+ if (
171
+ this.trackedPointers.has(event.pointerId) &&
172
+ this.pointersInBounds.indexOf(event.pointerId) >= 0
173
+ ) {
174
+ this.onPointerLeave(adaptedEvent);
175
+ this.markAsOutOfBounds(event.pointerId);
176
+ }
165
177
  };
166
178
 
167
179
  private lostPointerCaptureCallback = (event: PointerEvent) => {