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

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 (419) 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 +34 -8
  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 +68 -7
  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/Extensions.kt +21 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +160 -55
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerDetectorView.kt +75 -98
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +1 -1
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +7 -10
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +64 -2
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +18 -8
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +15 -4
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +0 -6
  20. package/apple/Handlers/RNForceTouchHandler.m +1 -1
  21. package/apple/Handlers/RNHoverHandler.m +11 -11
  22. package/apple/Handlers/RNLongPressHandler.m +2 -2
  23. package/apple/Handlers/RNManualHandler.m +5 -0
  24. package/apple/Handlers/RNNativeViewHandler.mm +114 -53
  25. package/apple/Handlers/RNPanHandler.m +7 -3
  26. package/apple/Handlers/RNPinchHandler.m +9 -3
  27. package/apple/Handlers/RNRotationHandler.m +7 -2
  28. package/apple/Handlers/RNTapHandler.m +1 -1
  29. package/apple/RNGestureHandler.h +18 -0
  30. package/apple/RNGestureHandler.mm +82 -33
  31. package/apple/RNGestureHandlerButton.h +12 -2
  32. package/apple/RNGestureHandlerButton.mm +208 -38
  33. package/apple/RNGestureHandlerButtonComponentView.mm +102 -6
  34. package/apple/RNGestureHandlerDetector.mm +99 -75
  35. package/apple/RNGestureHandlerModule.mm +11 -14
  36. package/apple/RNGestureHandlerRegistry.h +14 -1
  37. package/apple/RNGestureHandlerRegistry.m +56 -0
  38. package/apple/RNRootViewGestureRecognizer.m +4 -15
  39. package/lib/module/RNGestureHandlerModule.web.js +5 -1
  40. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  41. package/lib/module/components/GestureButtons.js +23 -12
  42. package/lib/module/components/GestureButtons.js.map +1 -1
  43. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  44. package/lib/module/components/GestureHandlerButton.web.js +113 -31
  45. package/lib/module/components/GestureHandlerButton.web.js.map +1 -1
  46. package/lib/module/components/Pressable/Pressable.js +2 -1
  47. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  48. package/lib/module/components/Pressable/stateDefinitions.js +2 -0
  49. package/lib/module/components/Pressable/stateDefinitions.js.map +1 -1
  50. package/lib/module/components/ReanimatedDrawerLayout.js.map +1 -1
  51. package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js +38 -5
  52. package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js.map +1 -1
  53. package/lib/module/components/touchables/GenericTouchable.js +2 -6
  54. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  55. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -2
  56. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  57. package/lib/module/handlers/gestures/GestureDetector/utils.js +11 -48
  58. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  59. package/lib/module/handlers/gestures/flingGesture.js +8 -0
  60. package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
  61. package/lib/module/handlers/gestures/forceTouchGesture.js +3 -3
  62. package/lib/module/handlers/gestures/gesture.js +8 -0
  63. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  64. package/lib/module/handlers/gestures/gestureComposition.js +28 -0
  65. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  66. package/lib/module/handlers/gestures/gestureObjects.js +27 -1
  67. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
  68. package/lib/module/handlers/gestures/gestureStateManager.js +9 -0
  69. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  70. package/lib/module/handlers/gestures/hoverGesture.js +8 -0
  71. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
  72. package/lib/module/handlers/gestures/longPressGesture.js +8 -0
  73. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  74. package/lib/module/handlers/gestures/manualGesture.js +8 -0
  75. package/lib/module/handlers/gestures/manualGesture.js.map +1 -1
  76. package/lib/module/handlers/gestures/nativeGesture.js +8 -0
  77. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
  78. package/lib/module/handlers/gestures/panGesture.js +13 -0
  79. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  80. package/lib/module/handlers/gestures/pinchGesture.js +13 -0
  81. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  82. package/lib/module/handlers/gestures/reanimatedWrapper.js +14 -2
  83. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  84. package/lib/module/handlers/gestures/rotationGesture.js +8 -0
  85. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -1
  86. package/lib/module/handlers/gestures/tapGesture.js +8 -0
  87. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  88. package/lib/module/mocks/module.js +3 -2
  89. package/lib/module/mocks/module.js.map +1 -1
  90. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  91. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.ts +28 -13
  92. package/lib/module/v3/NativeProxy.js +5 -3
  93. package/lib/module/v3/NativeProxy.js.map +1 -1
  94. package/lib/module/v3/NativeProxy.web.js +2 -2
  95. package/lib/module/v3/NativeProxy.web.js.map +1 -1
  96. package/lib/module/v3/components/GestureButtons.js +11 -6
  97. package/lib/module/v3/components/GestureButtons.js.map +1 -1
  98. package/lib/module/v3/components/Pressable.js +3 -2
  99. package/lib/module/v3/components/Pressable.js.map +1 -1
  100. package/lib/module/v3/components/Touchable/Touchable.js +119 -32
  101. package/lib/module/v3/components/Touchable/Touchable.js.map +1 -1
  102. package/lib/module/v3/detectors/HostGestureDetector.web.js +180 -59
  103. package/lib/module/v3/detectors/HostGestureDetector.web.js.map +1 -1
  104. package/lib/module/v3/detectors/NativeDetector.js +3 -2
  105. package/lib/module/v3/detectors/NativeDetector.js.map +1 -1
  106. package/lib/module/v3/detectors/VirtualDetector/InterceptingGestureDetector.js +3 -4
  107. package/lib/module/v3/detectors/VirtualDetector/InterceptingGestureDetector.js.map +1 -1
  108. package/lib/module/v3/detectors/VirtualDetector/VirtualDetector.js +4 -2
  109. package/lib/module/v3/detectors/VirtualDetector/VirtualDetector.js.map +1 -1
  110. package/lib/module/v3/detectors/useGestureRelationsUpdater.js +23 -0
  111. package/lib/module/v3/detectors/useGestureRelationsUpdater.js.map +1 -0
  112. package/lib/module/v3/detectors/useNativeGestureRole.js +6 -0
  113. package/lib/module/v3/detectors/useNativeGestureRole.js.map +1 -0
  114. package/lib/module/v3/detectors/useNativeGestureRole.web.js +27 -0
  115. package/lib/module/v3/detectors/useNativeGestureRole.web.js.map +1 -0
  116. package/lib/module/v3/detectors/utils.js +10 -8
  117. package/lib/module/v3/detectors/utils.js.map +1 -1
  118. package/lib/module/v3/hooks/callbacks/useReanimatedEventHandler.js +17 -2
  119. package/lib/module/v3/hooks/callbacks/useReanimatedEventHandler.js.map +1 -1
  120. package/lib/module/v3/hooks/gestures/fling/useFlingGesture.js +2 -1
  121. package/lib/module/v3/hooks/gestures/fling/useFlingGesture.js.map +1 -1
  122. package/lib/module/v3/hooks/gestures/hover/useHoverGesture.js +2 -1
  123. package/lib/module/v3/hooks/gestures/hover/useHoverGesture.js.map +1 -1
  124. package/lib/module/v3/hooks/gestures/longPress/useLongPressGesture.js +2 -1
  125. package/lib/module/v3/hooks/gestures/longPress/useLongPressGesture.js.map +1 -1
  126. package/lib/module/v3/hooks/gestures/manual/useManualGesture.js +2 -1
  127. package/lib/module/v3/hooks/gestures/manual/useManualGesture.js.map +1 -1
  128. package/lib/module/v3/hooks/gestures/native/NativeTypes.js +1 -1
  129. package/lib/module/v3/hooks/gestures/native/NativeTypes.js.map +1 -1
  130. package/lib/module/v3/hooks/gestures/native/useNativeGesture.js +2 -1
  131. package/lib/module/v3/hooks/gestures/native/useNativeGesture.js.map +1 -1
  132. package/lib/module/v3/hooks/gestures/pan/usePanGesture.js +2 -1
  133. package/lib/module/v3/hooks/gestures/pan/usePanGesture.js.map +1 -1
  134. package/lib/module/v3/hooks/gestures/pinch/usePinchGesture.js +2 -1
  135. package/lib/module/v3/hooks/gestures/pinch/usePinchGesture.js.map +1 -1
  136. package/lib/module/v3/hooks/gestures/rotation/useRotationGesture.js +2 -1
  137. package/lib/module/v3/hooks/gestures/rotation/useRotationGesture.js.map +1 -1
  138. package/lib/module/v3/hooks/gestures/tap/useTapGesture.js +2 -1
  139. package/lib/module/v3/hooks/gestures/tap/useTapGesture.js.map +1 -1
  140. package/lib/module/v3/hooks/useGesture.js +4 -22
  141. package/lib/module/v3/hooks/useGesture.js.map +1 -1
  142. package/lib/module/v3/hooks/utils/configUtils.js +8 -6
  143. package/lib/module/v3/hooks/utils/configUtils.js.map +1 -1
  144. package/lib/module/v3/hooks/utils/eventHandlersUtils.js +31 -29
  145. package/lib/module/v3/hooks/utils/eventHandlersUtils.js.map +1 -1
  146. package/lib/module/v3/hooks/utils/index.js +1 -1
  147. package/lib/module/v3/hooks/utils/index.js.map +1 -1
  148. package/lib/module/v3/hooks/utils/propsWhiteList.js +1 -1
  149. package/lib/module/v3/hooks/utils/propsWhiteList.js.map +1 -1
  150. package/lib/module/v3/hooks/utils/reanimatedUtils.js +8 -2
  151. package/lib/module/v3/hooks/utils/reanimatedUtils.js.map +1 -1
  152. package/lib/module/web/constants.js +1 -0
  153. package/lib/module/web/constants.js.map +1 -1
  154. package/lib/module/web/detectors/RotationGestureDetector.js +18 -5
  155. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  156. package/lib/module/web/detectors/ScaleGestureDetector.js +9 -1
  157. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  158. package/lib/module/web/handlers/GestureHandler.js +25 -5
  159. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  160. package/lib/module/web/handlers/HoverGestureHandler.js +1 -4
  161. package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
  162. package/lib/module/web/handlers/ManualGestureHandler.js +1 -0
  163. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  164. package/lib/module/web/handlers/NativeViewGestureHandler.js +65 -17
  165. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  166. package/lib/module/web/handlers/PanGestureHandler.js +1 -0
  167. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  168. package/lib/module/web/handlers/PinchGestureHandler.js +4 -6
  169. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  170. package/lib/module/web/handlers/RotationGestureHandler.js +4 -3
  171. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  172. package/lib/module/web/interfaces.js +6 -0
  173. package/lib/module/web/interfaces.js.map +1 -1
  174. package/lib/module/web/tools/GestureHandlerOrchestrator.js +8 -2
  175. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  176. package/lib/module/web/tools/GestureLifecycleEvents.js +10 -0
  177. package/lib/module/web/tools/GestureLifecycleEvents.js.map +1 -0
  178. package/lib/module/web/tools/NodeManager.js +44 -0
  179. package/lib/module/web/tools/NodeManager.js.map +1 -1
  180. package/lib/module/web/tools/PointerEventManager.js +9 -0
  181. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  182. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  183. package/lib/typescript/RNGestureHandlerModule.web.d.ts.map +1 -1
  184. package/lib/typescript/components/GestureButtons.d.ts +14 -6
  185. package/lib/typescript/components/GestureButtons.d.ts.map +1 -1
  186. package/lib/typescript/components/GestureHandlerButton.d.ts +62 -8
  187. package/lib/typescript/components/GestureHandlerButton.d.ts.map +1 -1
  188. package/lib/typescript/components/GestureHandlerButton.web.d.ts +14 -3
  189. package/lib/typescript/components/GestureHandlerButton.web.d.ts.map +1 -1
  190. package/lib/typescript/components/Pressable/Pressable.d.ts.map +1 -1
  191. package/lib/typescript/components/Pressable/PressableProps.d.ts +1 -1
  192. package/lib/typescript/components/Pressable/PressableProps.d.ts.map +1 -1
  193. package/lib/typescript/components/Pressable/stateDefinitions.d.ts.map +1 -1
  194. package/lib/typescript/components/ReanimatedDrawerLayout.d.ts +16 -14
  195. package/lib/typescript/components/ReanimatedDrawerLayout.d.ts.map +1 -1
  196. package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeable.d.ts +2 -1
  197. package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeable.d.ts.map +1 -1
  198. package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts +30 -34
  199. package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts.map +1 -1
  200. package/lib/typescript/components/touchables/GenericTouchable.d.ts.map +1 -1
  201. package/lib/typescript/handlers/gestures/GestureDetector/useDetectorUpdater.d.ts.map +1 -1
  202. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +0 -1
  203. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts.map +1 -1
  204. package/lib/typescript/handlers/gestures/flingGesture.d.ts +6 -0
  205. package/lib/typescript/handlers/gestures/flingGesture.d.ts.map +1 -1
  206. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +3 -3
  207. package/lib/typescript/handlers/gestures/gesture.d.ts +6 -0
  208. package/lib/typescript/handlers/gestures/gesture.d.ts.map +1 -1
  209. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  210. package/lib/typescript/handlers/gestures/gestureComposition.d.ts.map +1 -1
  211. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +27 -1
  212. package/lib/typescript/handlers/gestures/gestureObjects.d.ts.map +1 -1
  213. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +6 -0
  214. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts.map +1 -1
  215. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +6 -0
  216. package/lib/typescript/handlers/gestures/hoverGesture.d.ts.map +1 -1
  217. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +6 -0
  218. package/lib/typescript/handlers/gestures/longPressGesture.d.ts.map +1 -1
  219. package/lib/typescript/handlers/gestures/manualGesture.d.ts +6 -0
  220. package/lib/typescript/handlers/gestures/manualGesture.d.ts.map +1 -1
  221. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +6 -0
  222. package/lib/typescript/handlers/gestures/nativeGesture.d.ts.map +1 -1
  223. package/lib/typescript/handlers/gestures/panGesture.d.ts +9 -0
  224. package/lib/typescript/handlers/gestures/panGesture.d.ts.map +1 -1
  225. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +9 -0
  226. package/lib/typescript/handlers/gestures/pinchGesture.d.ts.map +1 -1
  227. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts.map +1 -1
  228. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +6 -0
  229. package/lib/typescript/handlers/gestures/rotationGesture.d.ts.map +1 -1
  230. package/lib/typescript/handlers/gestures/tapGesture.d.ts +6 -0
  231. package/lib/typescript/handlers/gestures/tapGesture.d.ts.map +1 -1
  232. package/lib/typescript/mocks/module.d.ts +1 -1
  233. package/lib/typescript/mocks/module.d.ts.map +1 -1
  234. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +2 -2
  235. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts.map +1 -1
  236. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +19 -11
  237. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts.map +1 -1
  238. package/lib/typescript/v3/NativeProxy.d.ts +1 -1
  239. package/lib/typescript/v3/NativeProxy.d.ts.map +1 -1
  240. package/lib/typescript/v3/NativeProxy.web.d.ts +1 -1
  241. package/lib/typescript/v3/NativeProxy.web.d.ts.map +1 -1
  242. package/lib/typescript/v3/components/GestureButtons.d.ts +1 -37
  243. package/lib/typescript/v3/components/GestureButtons.d.ts.map +1 -1
  244. package/lib/typescript/v3/components/GestureButtonsProps.d.ts +1 -1
  245. package/lib/typescript/v3/components/GestureButtonsProps.d.ts.map +1 -1
  246. package/lib/typescript/v3/components/GestureComponents.d.ts +3 -0
  247. package/lib/typescript/v3/components/GestureComponents.d.ts.map +1 -1
  248. package/lib/typescript/v3/components/GestureComponents.web.d.ts +4 -0
  249. package/lib/typescript/v3/components/GestureComponents.web.d.ts.map +1 -1
  250. package/lib/typescript/v3/components/Pressable.d.ts.map +1 -1
  251. package/lib/typescript/v3/components/Touchable/Touchable.d.ts.map +1 -1
  252. package/lib/typescript/v3/components/Touchable/TouchableProps.d.ts +48 -1
  253. package/lib/typescript/v3/components/Touchable/TouchableProps.d.ts.map +1 -1
  254. package/lib/typescript/v3/detectors/HostGestureDetector.web.d.ts +1 -1
  255. package/lib/typescript/v3/detectors/HostGestureDetector.web.d.ts.map +1 -1
  256. package/lib/typescript/v3/detectors/NativeDetector.d.ts.map +1 -1
  257. package/lib/typescript/v3/detectors/VirtualDetector/InterceptingGestureDetector.d.ts.map +1 -1
  258. package/lib/typescript/v3/detectors/VirtualDetector/VirtualDetector.d.ts.map +1 -1
  259. package/lib/typescript/v3/detectors/useGestureRelationsUpdater.d.ts +3 -0
  260. package/lib/typescript/v3/detectors/useGestureRelationsUpdater.d.ts.map +1 -0
  261. package/lib/typescript/v3/detectors/useNativeGestureRole.d.ts +3 -0
  262. package/lib/typescript/v3/detectors/useNativeGestureRole.d.ts.map +1 -0
  263. package/lib/typescript/v3/detectors/useNativeGestureRole.web.d.ts +3 -0
  264. package/lib/typescript/v3/detectors/useNativeGestureRole.web.d.ts.map +1 -0
  265. package/lib/typescript/v3/detectors/utils.d.ts +3 -3
  266. package/lib/typescript/v3/detectors/utils.d.ts.map +1 -1
  267. package/lib/typescript/v3/hooks/callbacks/useReanimatedEventHandler.d.ts.map +1 -1
  268. package/lib/typescript/v3/hooks/gestures/fling/useFlingGesture.d.ts +1 -1
  269. package/lib/typescript/v3/hooks/gestures/fling/useFlingGesture.d.ts.map +1 -1
  270. package/lib/typescript/v3/hooks/gestures/hover/useHoverGesture.d.ts +1 -1
  271. package/lib/typescript/v3/hooks/gestures/hover/useHoverGesture.d.ts.map +1 -1
  272. package/lib/typescript/v3/hooks/gestures/longPress/useLongPressGesture.d.ts +1 -1
  273. package/lib/typescript/v3/hooks/gestures/longPress/useLongPressGesture.d.ts.map +1 -1
  274. package/lib/typescript/v3/hooks/gestures/manual/useManualGesture.d.ts +1 -1
  275. package/lib/typescript/v3/hooks/gestures/manual/useManualGesture.d.ts.map +1 -1
  276. package/lib/typescript/v3/hooks/gestures/native/NativeTypes.d.ts +7 -0
  277. package/lib/typescript/v3/hooks/gestures/native/NativeTypes.d.ts.map +1 -1
  278. package/lib/typescript/v3/hooks/gestures/native/useNativeGesture.d.ts +1 -1
  279. package/lib/typescript/v3/hooks/gestures/native/useNativeGesture.d.ts.map +1 -1
  280. package/lib/typescript/v3/hooks/gestures/pan/usePanGesture.d.ts +1 -1
  281. package/lib/typescript/v3/hooks/gestures/pan/usePanGesture.d.ts.map +1 -1
  282. package/lib/typescript/v3/hooks/gestures/pinch/usePinchGesture.d.ts +1 -1
  283. package/lib/typescript/v3/hooks/gestures/pinch/usePinchGesture.d.ts.map +1 -1
  284. package/lib/typescript/v3/hooks/gestures/rotation/useRotationGesture.d.ts +1 -1
  285. package/lib/typescript/v3/hooks/gestures/rotation/useRotationGesture.d.ts.map +1 -1
  286. package/lib/typescript/v3/hooks/gestures/tap/useTapGesture.d.ts +1 -1
  287. package/lib/typescript/v3/hooks/gestures/tap/useTapGesture.d.ts.map +1 -1
  288. package/lib/typescript/v3/hooks/useGesture.d.ts.map +1 -1
  289. package/lib/typescript/v3/hooks/utils/configUtils.d.ts +2 -2
  290. package/lib/typescript/v3/hooks/utils/configUtils.d.ts.map +1 -1
  291. package/lib/typescript/v3/hooks/utils/eventHandlersUtils.d.ts.map +1 -1
  292. package/lib/typescript/v3/hooks/utils/index.d.ts +1 -1
  293. package/lib/typescript/v3/hooks/utils/index.d.ts.map +1 -1
  294. package/lib/typescript/v3/hooks/utils/propsWhiteList.d.ts +2 -2
  295. package/lib/typescript/v3/hooks/utils/propsWhiteList.d.ts.map +1 -1
  296. package/lib/typescript/v3/hooks/utils/reanimatedUtils.d.ts +1 -0
  297. package/lib/typescript/v3/hooks/utils/reanimatedUtils.d.ts.map +1 -1
  298. package/lib/typescript/v3/types/ConfigTypes.d.ts +1 -0
  299. package/lib/typescript/v3/types/ConfigTypes.d.ts.map +1 -1
  300. package/lib/typescript/web/constants.d.ts +1 -0
  301. package/lib/typescript/web/constants.d.ts.map +1 -1
  302. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts.map +1 -1
  303. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts.map +1 -1
  304. package/lib/typescript/web/handlers/GestureHandler.d.ts +8 -2
  305. package/lib/typescript/web/handlers/GestureHandler.d.ts.map +1 -1
  306. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -1
  307. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts.map +1 -1
  308. package/lib/typescript/web/handlers/IGestureHandler.d.ts +2 -0
  309. package/lib/typescript/web/handlers/IGestureHandler.d.ts.map +1 -1
  310. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +1 -0
  311. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts.map +1 -1
  312. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +13 -3
  313. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts.map +1 -1
  314. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +1 -0
  315. package/lib/typescript/web/handlers/PanGestureHandler.d.ts.map +1 -1
  316. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +1 -0
  317. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts.map +1 -1
  318. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +1 -0
  319. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts.map +1 -1
  320. package/lib/typescript/web/interfaces.d.ts +6 -0
  321. package/lib/typescript/web/interfaces.d.ts.map +1 -1
  322. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +1 -0
  323. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts.map +1 -1
  324. package/lib/typescript/web/tools/GestureLifecycleEvents.d.ts +7 -0
  325. package/lib/typescript/web/tools/GestureLifecycleEvents.d.ts.map +1 -0
  326. package/lib/typescript/web/tools/NodeManager.d.ts +7 -0
  327. package/lib/typescript/web/tools/NodeManager.d.ts.map +1 -1
  328. package/lib/typescript/web/tools/PointerEventManager.d.ts.map +1 -1
  329. package/package.json +3 -3
  330. package/src/RNGestureHandlerModule.web.ts +5 -1
  331. package/src/components/GestureButtons.tsx +33 -16
  332. package/src/components/GestureHandlerButton.tsx +70 -8
  333. package/src/components/GestureHandlerButton.web.tsx +184 -48
  334. package/src/components/Pressable/Pressable.tsx +3 -1
  335. package/src/components/Pressable/PressableProps.tsx +2 -1
  336. package/src/components/Pressable/stateDefinitions.ts +3 -0
  337. package/src/components/ReanimatedDrawerLayout.tsx +27 -23
  338. package/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx +51 -5
  339. package/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts +31 -39
  340. package/src/components/touchables/GenericTouchable.tsx +2 -5
  341. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -2
  342. package/src/handlers/gestures/GestureDetector/utils.ts +11 -53
  343. package/src/handlers/gestures/flingGesture.ts +6 -0
  344. package/src/handlers/gestures/forceTouchGesture.ts +3 -3
  345. package/src/handlers/gestures/gesture.ts +6 -0
  346. package/src/handlers/gestures/gestureComposition.ts +21 -0
  347. package/src/handlers/gestures/gestureObjects.ts +27 -1
  348. package/src/handlers/gestures/gestureStateManager.ts +6 -0
  349. package/src/handlers/gestures/hoverGesture.ts +6 -0
  350. package/src/handlers/gestures/longPressGesture.ts +6 -0
  351. package/src/handlers/gestures/manualGesture.ts +6 -0
  352. package/src/handlers/gestures/nativeGesture.ts +6 -0
  353. package/src/handlers/gestures/panGesture.ts +9 -0
  354. package/src/handlers/gestures/pinchGesture.ts +9 -0
  355. package/src/handlers/gestures/reanimatedWrapper.ts +20 -2
  356. package/src/handlers/gestures/rotationGesture.ts +6 -0
  357. package/src/handlers/gestures/tapGesture.ts +6 -0
  358. package/src/mocks/module.tsx +4 -2
  359. package/src/specs/NativeRNGestureHandlerModule.ts +2 -4
  360. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +28 -13
  361. package/src/v3/NativeProxy.ts +9 -7
  362. package/src/v3/NativeProxy.web.ts +2 -2
  363. package/src/v3/components/GestureButtons.tsx +18 -10
  364. package/src/v3/components/GestureButtonsProps.ts +1 -0
  365. package/src/v3/components/Pressable.tsx +2 -1
  366. package/src/v3/components/Touchable/Touchable.tsx +144 -50
  367. package/src/v3/components/Touchable/TouchableProps.ts +64 -2
  368. package/src/v3/detectors/HostGestureDetector.web.tsx +268 -108
  369. package/src/v3/detectors/NativeDetector.tsx +3 -2
  370. package/src/v3/detectors/VirtualDetector/InterceptingGestureDetector.tsx +3 -4
  371. package/src/v3/detectors/VirtualDetector/VirtualDetector.tsx +5 -2
  372. package/src/v3/detectors/useGestureRelationsUpdater.ts +30 -0
  373. package/src/v3/detectors/useNativeGestureRole.ts +8 -0
  374. package/src/v3/detectors/useNativeGestureRole.web.ts +42 -0
  375. package/src/v3/detectors/utils.ts +28 -12
  376. package/src/v3/hooks/callbacks/useReanimatedEventHandler.ts +23 -7
  377. package/src/v3/hooks/gestures/fling/useFlingGesture.ts +5 -1
  378. package/src/v3/hooks/gestures/hover/useHoverGesture.ts +5 -1
  379. package/src/v3/hooks/gestures/longPress/useLongPressGesture.ts +3 -1
  380. package/src/v3/hooks/gestures/manual/useManualGesture.ts +5 -1
  381. package/src/v3/hooks/gestures/native/NativeTypes.ts +13 -1
  382. package/src/v3/hooks/gestures/native/useNativeGesture.ts +5 -1
  383. package/src/v3/hooks/gestures/pan/usePanGesture.ts +5 -1
  384. package/src/v3/hooks/gestures/pinch/usePinchGesture.ts +5 -1
  385. package/src/v3/hooks/gestures/rotation/useRotationGesture.ts +3 -1
  386. package/src/v3/hooks/gestures/tap/useTapGesture.ts +5 -1
  387. package/src/v3/hooks/useGesture.ts +4 -18
  388. package/src/v3/hooks/utils/configUtils.ts +18 -8
  389. package/src/v3/hooks/utils/eventHandlersUtils.ts +43 -32
  390. package/src/v3/hooks/utils/index.ts +0 -1
  391. package/src/v3/hooks/utils/propsWhiteList.ts +1 -0
  392. package/src/v3/hooks/utils/reanimatedUtils.ts +10 -10
  393. package/src/v3/types/ConfigTypes.ts +1 -0
  394. package/src/web/constants.ts +1 -0
  395. package/src/web/detectors/RotationGestureDetector.ts +19 -5
  396. package/src/web/detectors/ScaleGestureDetector.ts +9 -3
  397. package/src/web/handlers/GestureHandler.ts +36 -6
  398. package/src/web/handlers/HoverGestureHandler.ts +2 -5
  399. package/src/web/handlers/IGestureHandler.ts +2 -0
  400. package/src/web/handlers/ManualGestureHandler.ts +2 -0
  401. package/src/web/handlers/NativeViewGestureHandler.ts +122 -19
  402. package/src/web/handlers/PanGestureHandler.ts +2 -0
  403. package/src/web/handlers/PinchGestureHandler.ts +5 -7
  404. package/src/web/handlers/RotationGestureHandler.ts +5 -5
  405. package/src/web/interfaces.ts +7 -0
  406. package/src/web/tools/GestureHandlerOrchestrator.ts +11 -3
  407. package/src/web/tools/GestureLifecycleEvents.ts +14 -0
  408. package/src/web/tools/NodeManager.ts +57 -0
  409. package/src/web/tools/PointerEventManager.ts +12 -0
  410. package/lib/module/RNRenderer.js +0 -6
  411. package/lib/module/RNRenderer.js.map +0 -1
  412. package/lib/module/RNRenderer.web.js +0 -6
  413. package/lib/module/RNRenderer.web.js.map +0 -1
  414. package/lib/typescript/RNRenderer.d.ts +0 -2
  415. package/lib/typescript/RNRenderer.d.ts.map +0 -1
  416. package/lib/typescript/RNRenderer.web.d.ts +0 -4
  417. package/lib/typescript/RNRenderer.web.d.ts.map +0 -1
  418. package/src/RNRenderer.ts +0 -3
  419. package/src/RNRenderer.web.ts +0 -3
@@ -14,6 +14,7 @@ import { tagMessage } from '../../utils';
14
14
  import type {
15
15
  GestureStateChangeEventWithHandlerData,
16
16
  GestureUpdateEventWithHandlerData,
17
+ HandlerData,
17
18
  SingleGestureName,
18
19
  } from '../../v3/types';
19
20
  import type {
@@ -45,7 +46,7 @@ export default abstract class GestureHandler implements IGestureHandler {
45
46
 
46
47
  private viewRef: number | null = null;
47
48
  private propsRef: React.RefObject<PropsRef> | null = null;
48
- private actionType: ActionType | null = null;
49
+ protected actionType: ActionType | null = null;
49
50
  private forAnimated: boolean = false;
50
51
  private forReanimated: boolean = false;
51
52
  private _handlerTag!: number;
@@ -302,6 +303,12 @@ export default abstract class GestureHandler implements IGestureHandler {
302
303
  );
303
304
  }
304
305
 
306
+ public shouldBeginWithRecordedHandlers(
307
+ _recorded: IGestureHandler[]
308
+ ): boolean {
309
+ return true;
310
+ }
311
+
305
312
  public shouldAttachGestureToChildView(): boolean {
306
313
  return false;
307
314
  }
@@ -355,8 +362,9 @@ export default abstract class GestureHandler implements IGestureHandler {
355
362
  protected onPointerCancel(_event: AdaptedEvent): void {
356
363
  // No need to send a cancel touch event explicitly here. `cancel` will
357
364
  // handle cancelling all tracked touches if the handler expects pointer data.
358
- this.cancel();
359
- this.reset();
365
+ if (GestureHandlerOrchestrator.instance.isHandlerRecorded(this)) {
366
+ this.cancel();
367
+ }
360
368
  }
361
369
  protected onPointerOutOfBounds(event: AdaptedEvent): void {
362
370
  this.tryToSendMoveEvent(true, event);
@@ -430,11 +438,13 @@ export default abstract class GestureHandler implements IGestureHandler {
430
438
  onGestureHandlerReanimatedStateChange,
431
439
  }: PropsRef = this.propsRef!.current;
432
440
 
441
+ const isStateChange = this.lastSentState !== newState;
442
+
433
443
  const resultEvent: ResultEvent = !usesNativeOrVirtualDetector(
434
444
  this.actionType
435
445
  )
436
446
  ? this.transformEventData(newState, oldState)
437
- : this.lastSentState !== newState
447
+ : isStateChange
438
448
  ? this.transformStateChangeEvent(newState, oldState)
439
449
  : this.transformUpdateEvent(newState);
440
450
 
@@ -442,7 +452,7 @@ export default abstract class GestureHandler implements IGestureHandler {
442
452
  // Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
443
453
  // Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
444
454
  // However, this may cause trouble in the future (but for now we don't know that)
445
- if (this.lastSentState !== newState) {
455
+ if (isStateChange) {
446
456
  this.lastSentState = newState;
447
457
 
448
458
  if (this.forReanimated) {
@@ -456,6 +466,16 @@ export default abstract class GestureHandler implements IGestureHandler {
456
466
  return;
457
467
  }
458
468
 
469
+ // Cover only V3 path due to different event shape
470
+ if (!isStateChange && usesNativeOrVirtualDetector(this.actionType)) {
471
+ const handlerData = (
472
+ resultEvent.nativeEvent as GestureUpdateEventWithHandlerData<unknown>
473
+ ).handlerData;
474
+ if (this.shouldSuppressActiveUpdate(handlerData)) {
475
+ return;
476
+ }
477
+ }
478
+
459
479
  (resultEvent.nativeEvent as GestureHandlerNativeEvent).oldState = undefined;
460
480
 
461
481
  if (this.forReanimated) {
@@ -467,6 +487,12 @@ export default abstract class GestureHandler implements IGestureHandler {
467
487
  }
468
488
  };
469
489
 
490
+ protected shouldSuppressActiveUpdate(
491
+ _handlerData: HandlerData<unknown>
492
+ ): boolean {
493
+ return false;
494
+ }
495
+
470
496
  private transformEventData(
471
497
  newState: State,
472
498
  oldState: State
@@ -744,7 +770,6 @@ export default abstract class GestureHandler implements IGestureHandler {
744
770
  const enabledChanged = this.maybeUpdateEnabled(config.enabled);
745
771
 
746
772
  if (config.hitSlop !== undefined) {
747
- this.hitSlop = config.hitSlop;
748
773
  this.hitSlop = config.hitSlop;
749
774
  this.validateHitSlops();
750
775
  }
@@ -1072,6 +1097,11 @@ export default abstract class GestureHandler implements IGestureHandler {
1072
1097
  this._name = value;
1073
1098
  }
1074
1099
 
1100
+ /**
1101
+ * Whether the handler represents a continuous gesture rather than a discrete one.
1102
+ */
1103
+ public readonly isContinuous: boolean = false;
1104
+
1075
1105
  public getTrackedPointersID(): number[] {
1076
1106
  return this.tracker.trackedPointersIDs;
1077
1107
  }
@@ -8,6 +8,8 @@ import GestureHandler from './GestureHandler';
8
8
  import type IGestureHandler from './IGestureHandler';
9
9
 
10
10
  export default class HoverGestureHandler extends GestureHandler {
11
+ public override readonly isContinuous = true;
12
+
11
13
  private stylusData: StylusData | undefined;
12
14
 
13
15
  public constructor(
@@ -52,9 +54,4 @@ export default class HoverGestureHandler extends GestureHandler {
52
54
 
53
55
  super.onPointerMove(event);
54
56
  }
55
-
56
- protected override onPointerCancel(event: AdaptedEvent): void {
57
- super.onPointerCancel(event);
58
- this.reset();
59
- }
60
57
  }
@@ -22,6 +22,7 @@ export default interface IGestureHandler {
22
22
  readonly delegate: GestureHandlerDelegate<unknown, this>;
23
23
  readonly tracker: PointerTracker;
24
24
  readonly name: SingleGestureName;
25
+ readonly isContinuous: boolean;
25
26
  state: State;
26
27
  shouldCancelWhenOutside: boolean;
27
28
  shouldResetProgress: boolean;
@@ -53,6 +54,7 @@ export default interface IGestureHandler {
53
54
  shouldRequireToWaitForFailure: (handler: IGestureHandler) => boolean;
54
55
  shouldRecognizeSimultaneously: (handler: IGestureHandler) => boolean;
55
56
  shouldBeCancelledByOther: (handler: IGestureHandler) => boolean;
57
+ shouldBeginWithRecordedHandlers: (recorded: IGestureHandler[]) => boolean;
56
58
  shouldAttachGestureToChildView: () => boolean;
57
59
 
58
60
  sendEvent: (newState: State, oldState: State) => void;
@@ -5,6 +5,8 @@ import GestureHandler from './GestureHandler';
5
5
  import type IGestureHandler from './IGestureHandler';
6
6
 
7
7
  export default class ManualGestureHandler extends GestureHandler {
8
+ public override readonly isContinuous = true;
9
+
8
10
  public constructor(
9
11
  delegate: GestureHandlerDelegate<unknown, IGestureHandler>
10
12
  ) {
@@ -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
+ }
@@ -2,6 +2,8 @@ import type { ValueOf } from '../../typeUtils';
2
2
  import type { Gestures } from '../Gestures';
3
3
  import type IGestureHandler from '../handlers/IGestureHandler';
4
4
 
5
+ type HandlerReadyCallback = (handler: IGestureHandler) => void;
6
+
5
7
  // eslint-disable-next-line @typescript-eslint/no-extraneous-class
6
8
  export default abstract class NodeManager {
7
9
  private static gestures: Record<
@@ -9,6 +11,9 @@ export default abstract class NodeManager {
9
11
  InstanceType<ValueOf<typeof Gestures>>
10
12
  > = {};
11
13
 
14
+ private static observers: Map<number, Map<object, HandlerReadyCallback>> =
15
+ new Map();
16
+
12
17
  public static getHandler(tag: number): IGestureHandler {
13
18
  if (tag in this.gestures) {
14
19
  return this.gestures[tag] as IGestureHandler;
@@ -17,6 +22,10 @@ export default abstract class NodeManager {
17
22
  throw new Error(`No handler for tag ${tag}`);
18
23
  }
19
24
 
25
+ public static hasHandler(tag: number): boolean {
26
+ return tag in this.gestures;
27
+ }
28
+
20
29
  public static createGestureHandler(
21
30
  handlerTag: number,
22
31
  handler: InstanceType<ValueOf<typeof Gestures>>
@@ -29,6 +38,15 @@ export default abstract class NodeManager {
29
38
 
30
39
  this.gestures[handlerTag] = handler;
31
40
  this.gestures[handlerTag].handlerTag = handlerTag;
41
+
42
+ const pending = this.observers.get(handlerTag);
43
+ if (pending) {
44
+ // Snapshot before iterating — callbacks may call back into observeHandler / cancelObservation
45
+ // and mutate the underlying map.
46
+ for (const callback of Array.from(pending.values())) {
47
+ callback(handler as IGestureHandler);
48
+ }
49
+ }
32
50
  }
33
51
 
34
52
  public static dropGestureHandler(handlerTag: number): void {
@@ -50,6 +68,45 @@ export default abstract class NodeManager {
50
68
  this.gestures[handlerTag].detach();
51
69
  }
52
70
 
71
+ // Invokes `callback` every time a handler with `tag` is created and, if the handler already exists,
72
+ // immediately before returning. The observation persists until explicitly cancelled: the registry
73
+ // holds both `owner` and `callback` strongly, so callers MUST call `cancelObservation` or
74
+ // `cancelAllObservationsForOwner` when the owner is going away (typically in effect cleanup) to
75
+ // avoid leaking. Observing the same tag twice with the same `owner` replaces the previous callback.
76
+ public static observeHandler(
77
+ tag: number,
78
+ owner: object,
79
+ callback: HandlerReadyCallback
80
+ ): void {
81
+ let table = this.observers.get(tag);
82
+ if (!table) {
83
+ table = new Map();
84
+ this.observers.set(tag, table);
85
+ }
86
+ table.set(owner, callback);
87
+
88
+ if (tag in this.gestures) {
89
+ callback(this.gestures[tag] as IGestureHandler);
90
+ }
91
+ }
92
+
93
+ public static cancelObservation(tag: number, owner: object): void {
94
+ const table = this.observers.get(tag);
95
+ if (!table) {
96
+ return;
97
+ }
98
+ table.delete(owner);
99
+ if (table.size === 0) {
100
+ this.observers.delete(tag);
101
+ }
102
+ }
103
+
104
+ public static cancelAllObservationsForOwner(owner: object): void {
105
+ for (const tag of this.observers.keys()) {
106
+ this.cancelObservation(tag, owner);
107
+ }
108
+ }
109
+
53
110
  public static get nodes() {
54
111
  return { ...this.gestures };
55
112
  }
@@ -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) => {
@@ -1,6 +0,0 @@
1
- "use strict";
2
-
3
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
4
- // @ts-nocheck
5
- export { default as RNRenderer } from 'react-native/Libraries/Renderer/shims/ReactNative';
6
- //# sourceMappingURL=RNRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["default","RNRenderer"],"sourceRoot":"../../src","sources":["RNRenderer.ts"],"mappings":";;AAAA;AACA;AACA,SAASA,OAAO,IAAIC,UAAU,QAAQ,mDAAmD","ignoreList":[]}