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
@@ -4,6 +4,9 @@ import type { PanGestureConfig } from '../PanGestureHandler';
4
4
  import type { BaseGestureConfig } from './gesture';
5
5
  import { ContinousBaseGesture } from './gesture';
6
6
 
7
+ /**
8
+ * @deprecated `PanGestureChangeEventPayload` is deprecated and will be removed in the future. Please use `PanGestureActiveEvent` instead.
9
+ */
7
10
  export type PanGestureChangeEventPayload = {
8
11
  changeX: number;
9
12
  changeY: number;
@@ -30,6 +33,9 @@ function changeEventCalculator(
30
33
  return { ...current, ...changePayload };
31
34
  }
32
35
 
36
+ /**
37
+ * @deprecated `PanGesture` is deprecated and will be removed in the future. Please use `usePanGesture` instead.
38
+ */
33
39
  export class PanGesture extends ContinousBaseGesture<
34
40
  PanGestureHandlerEventPayload,
35
41
  PanGestureChangeEventPayload
@@ -219,4 +225,7 @@ export class PanGesture extends ContinousBaseGesture<
219
225
  }
220
226
  }
221
227
 
228
+ /**
229
+ * @deprecated `PanGestureType` is deprecated and will be removed in the future. Please use `PanGesture` instead.
230
+ */
222
231
  export type PanGestureType = InstanceType<typeof PanGesture>;
@@ -2,6 +2,9 @@ import type { GestureUpdateEvent } from '../gestureHandlerCommon';
2
2
  import type { PinchGestureHandlerEventPayload } from '../GestureHandlerEventPayload';
3
3
  import { ContinousBaseGesture } from './gesture';
4
4
 
5
+ /**
6
+ * @deprecated `PinchGestureChangeEventPayload` is deprecated and will be removed in the future. Please use `PinchGestureActiveEvent` instead.
7
+ */
5
8
  export type PinchGestureChangeEventPayload = {
6
9
  scaleChange: number;
7
10
  };
@@ -25,6 +28,9 @@ function changeEventCalculator(
25
28
  return { ...current, ...changePayload };
26
29
  }
27
30
 
31
+ /**
32
+ * @deprecated `PinchGesture` is deprecated and will be removed in the future. Please use `usePinchGesture` instead.
33
+ */
28
34
  export class PinchGesture extends ContinousBaseGesture<
29
35
  PinchGestureHandlerEventPayload,
30
36
  PinchGestureChangeEventPayload
@@ -48,4 +54,7 @@ export class PinchGesture extends ContinousBaseGesture<
48
54
  }
49
55
  }
50
56
 
57
+ /**
58
+ * @deprecated `PinchGestureType` is deprecated and will be removed in the future. Please use `PinchGesture` instead.
59
+ */
51
60
  export type PinchGestureType = InstanceType<typeof PinchGesture>;
@@ -1,5 +1,6 @@
1
1
  import type { ComponentClass } from 'react';
2
2
 
3
+ import { ghQueueMicrotask } from '../../ghQueueMicrotask';
3
4
  import { tagMessage } from '../../utils';
4
5
  import { NativeProxy } from '../../v3/NativeProxy';
5
6
  import type {
@@ -82,7 +83,25 @@ let Reanimated:
82
83
 
83
84
  try {
84
85
  Reanimated = require('react-native-reanimated');
85
- NativeProxy.setReanimatedAvailable(true);
86
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
87
+ const Worklets = require('react-native-worklets');
88
+
89
+ // Make sure worklets are initialized before attempting to install UI runtime bindings
90
+ Worklets?.scheduleOnUI(() => {
91
+ 'worklet';
92
+ });
93
+
94
+ ghQueueMicrotask(() => {
95
+ const decorated = NativeProxy.installUIRuntimeBindings();
96
+
97
+ if (!decorated) {
98
+ console.warn(
99
+ tagMessage(
100
+ 'Failed to install UI runtime bindings. Please report this at https://github.com/software-mansion/react-native-gesture-handler/issues.'
101
+ )
102
+ );
103
+ }
104
+ });
86
105
  } catch (e) {
87
106
  // When 'react-native-reanimated' is not available we want to quietly continue
88
107
  // @ts-ignore TS demands the variable to be initialized
@@ -93,7 +112,6 @@ if (!Reanimated?.useSharedValue) {
93
112
  // @ts-ignore Make sure the loaded module is actually Reanimated, if it's not
94
113
  // reset the module to undefined so we can fallback to the default implementation
95
114
  Reanimated = undefined;
96
- NativeProxy.setReanimatedAvailable(false);
97
115
  }
98
116
 
99
117
  if (Reanimated !== undefined && !Reanimated.setGestureState) {
@@ -25,6 +25,9 @@ function changeEventCalculator(
25
25
  return { ...current, ...changePayload };
26
26
  }
27
27
 
28
+ /**
29
+ * @deprecated `RotationGesture` is deprecated and will be removed in the future. Please use `useRotationGesture` instead.
30
+ */
28
31
  export class RotationGesture extends ContinousBaseGesture<
29
32
  RotationGestureHandlerEventPayload,
30
33
  RotationGestureChangeEventPayload
@@ -48,4 +51,7 @@ export class RotationGesture extends ContinousBaseGesture<
48
51
  }
49
52
  }
50
53
 
54
+ /**
55
+ * @deprecated `RotationGestureType` is deprecated and will be removed in the future. Please use `RotationGesture` instead.
56
+ */
51
57
  export type RotationGestureType = InstanceType<typeof RotationGesture>;
@@ -3,6 +3,9 @@ import type { TapGestureConfig } from '../TapGestureHandler';
3
3
  import type { BaseGestureConfig } from './gesture';
4
4
  import { BaseGesture } from './gesture';
5
5
 
6
+ /**
7
+ * @deprecated `TapGesture` is deprecated and will be removed in the future. Please use `useTapGesture` instead.
8
+ */
6
9
  export class TapGesture extends BaseGesture<TapGestureHandlerEventPayload> {
7
10
  public override config: BaseGestureConfig & TapGestureConfig = {};
8
11
 
@@ -84,4 +87,7 @@ export class TapGesture extends BaseGesture<TapGestureHandlerEventPayload> {
84
87
  }
85
88
  }
86
89
 
90
+ /**
91
+ * @deprecated `TapGestureType` is deprecated and will be removed in the future. Please use `TapGesture` instead.
92
+ */
87
93
  export type TapGestureType = InstanceType<typeof TapGesture>;
@@ -2,6 +2,8 @@ const NOOP = () => {
2
2
  // Do nothing
3
3
  };
4
4
 
5
+ const NOOPTrue = () => true;
6
+
5
7
  const attachGestureHandler = NOOP;
6
8
  const createGestureHandler = NOOP;
7
9
  const dropGestureHandler = NOOP;
@@ -9,7 +11,7 @@ const setGestureHandlerConfig = NOOP;
9
11
  const updateGestureHandlerConfig = NOOP;
10
12
  const flushOperations = NOOP;
11
13
  const configureRelations = NOOP;
12
- const setReanimatedAvailable = NOOP;
14
+ const installUIRuntimeBindings = NOOPTrue;
13
15
  const install = NOOP;
14
16
 
15
17
  export default {
@@ -19,7 +21,7 @@ export default {
19
21
  setGestureHandlerConfig,
20
22
  updateGestureHandlerConfig,
21
23
  configureRelations,
22
- setReanimatedAvailable,
24
+ installUIRuntimeBindings,
23
25
  flushOperations,
24
26
  install,
25
27
  } as const;
@@ -3,15 +3,13 @@ import { TurboModuleRegistry } from 'react-native';
3
3
  import type { Double } from 'react-native/Libraries/Types/CodegenTypes';
4
4
 
5
5
  export interface Spec extends TurboModule {
6
- // This method returns a boolean only to force the codegen to generate
7
- // a synchronous method. The returned value doesn't have any meaning.
8
6
  createGestureHandler: (
9
7
  handlerName: string,
10
8
  handlerTag: Double,
11
9
  // Record<> is not supported by codegen
12
10
  // eslint-disable-next-line @typescript-eslint/ban-types
13
11
  config: Object
14
- ) => boolean;
12
+ ) => void;
15
13
  attachGestureHandler: (
16
14
  handlerTag: Double,
17
15
  newView: Double,
@@ -25,7 +23,7 @@ export interface Spec extends TurboModule {
25
23
  configureRelations: (handlerTag: Double, relations: Object) => void;
26
24
  dropGestureHandler: (handlerTag: Double) => void;
27
25
  flushOperations: () => void;
28
- setReanimatedAvailable: (isAvailable: boolean) => void;
26
+ installUIRuntimeBindings: () => boolean;
29
27
  }
30
28
 
31
29
  export default TurboModuleRegistry.getEnforcing<Spec>('RNGestureHandlerModule');
@@ -2,6 +2,7 @@ import type { ColorValue, ViewProps } from 'react-native';
2
2
  import type {
3
3
  Float,
4
4
  Int32,
5
+ UnsafeMixed,
5
6
  WithDefault,
6
7
  } from 'react-native/Libraries/Types/CodegenTypes';
7
8
  import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
@@ -19,8 +20,11 @@ interface NativeProps extends ViewProps {
19
20
  'box-none' | 'none' | 'box-only' | 'auto',
20
21
  'auto'
21
22
  >;
22
- pressAndHoldAnimationDuration?: WithDefault<Int32, -1>;
23
- tapAnimationDuration?: WithDefault<Int32, 100>;
23
+ tapAnimationInDuration?: WithDefault<Int32, 50>;
24
+ tapAnimationOutDuration?: WithDefault<Int32, 100>;
25
+ longPressDuration?: WithDefault<Int32, -1>;
26
+ longPressAnimationOutDuration?: WithDefault<Int32, -1>;
27
+ needsOffscreenAlphaCompositing?: WithDefault<boolean, false>;
24
28
  activeOpacity?: WithDefault<Float, 1>;
25
29
  activeScale?: WithDefault<Float, 1>;
26
30
  activeUnderlayOpacity?: WithDefault<Float, 0>;
@@ -54,17 +58,28 @@ interface NativeProps extends ViewProps {
54
58
  borderBlockEndColor?: ColorValue;
55
59
  borderBlockStartColor?: ColorValue;
56
60
 
57
- // Border radius — logical variants beyond what ViewProps provides
58
- // WithDefault -1 so the codegen sends -1 (our "unset" sentinel) instead of 0
59
- // when the prop is absent, letting physical / general radii take effect.
60
- borderTopStartRadius?: WithDefault<Float, -1>;
61
- borderTopEndRadius?: WithDefault<Float, -1>;
62
- borderBottomStartRadius?: WithDefault<Float, -1>;
63
- borderBottomEndRadius?: WithDefault<Float, -1>;
64
- borderEndEndRadius?: WithDefault<Float, -1>;
65
- borderEndStartRadius?: WithDefault<Float, -1>;
66
- borderStartEndRadius?: WithDefault<Float, -1>;
67
- borderStartStartRadius?: WithDefault<Float, -1>;
61
+ // Border radius — declared as UnsafeMixed (folly::dynamic on iOS,
62
+ // DynamicFromObject on Android) so codegen forwards the raw value
63
+ // without coercing to Float. This lets the Android view manager parse
64
+ // both numeric points and percentage strings via
65
+ // LengthPercentage.setFromDynamic, matching RN's standard View. The
66
+ // non-logical variants are declared explicitly so they're dispatched
67
+ // through our delegate instead of falling through to
68
+ // BaseViewManagerDelegate, which casts to Double and would crash on a
69
+ // string value.
70
+ borderRadius?: UnsafeMixed;
71
+ borderTopLeftRadius?: UnsafeMixed;
72
+ borderTopRightRadius?: UnsafeMixed;
73
+ borderBottomLeftRadius?: UnsafeMixed;
74
+ borderBottomRightRadius?: UnsafeMixed;
75
+ borderTopStartRadius?: UnsafeMixed;
76
+ borderTopEndRadius?: UnsafeMixed;
77
+ borderBottomStartRadius?: UnsafeMixed;
78
+ borderBottomEndRadius?: UnsafeMixed;
79
+ borderEndEndRadius?: UnsafeMixed;
80
+ borderEndStartRadius?: UnsafeMixed;
81
+ borderStartEndRadius?: UnsafeMixed;
82
+ borderStartStartRadius?: UnsafeMixed;
68
83
  }
69
84
 
70
85
  export default codegenNativeComponent<NativeProps>('RNGestureHandlerButton');
@@ -16,11 +16,13 @@ export const NativeProxy = {
16
16
  handlerTag: number,
17
17
  config?: T
18
18
  ) => {
19
- RNGestureHandlerModule.createGestureHandler(
20
- handlerName,
21
- handlerTag,
22
- config || {}
23
- );
19
+ scheduleOperationToBeFlushed(() => {
20
+ RNGestureHandlerModule.createGestureHandler(
21
+ handlerName,
22
+ handlerTag,
23
+ config || {}
24
+ );
25
+ });
24
26
  },
25
27
  setGestureHandlerConfig: <
26
28
  TConfig,
@@ -59,7 +61,7 @@ export const NativeProxy = {
59
61
  RNGestureHandlerModule.configureRelations(handlerTag, relations);
60
62
  });
61
63
  },
62
- setReanimatedAvailable: (isAvailable: boolean) => {
63
- RNGestureHandlerModule.setReanimatedAvailable(isAvailable);
64
+ installUIRuntimeBindings: () => {
65
+ return RNGestureHandlerModule.installUIRuntimeBindings();
64
66
  },
65
67
  } as const;
@@ -43,7 +43,7 @@ export const NativeProxy = {
43
43
  configureRelations: (handlerTag: number, relations: GestureRelations) => {
44
44
  RNGestureHandlerModule.configureRelations(handlerTag, relations);
45
45
  },
46
- setReanimatedAvailable: (isAvailable: boolean) => {
47
- RNGestureHandlerModule.setReanimatedAvailable(isAvailable);
46
+ installUIRuntimeBindings: () => {
47
+ return RNGestureHandlerModule.installUIRuntimeBindings();
48
48
  },
49
49
  } as const;
@@ -15,17 +15,25 @@ import type {
15
15
  type CallbackEventType = GestureEvent<NativeHandlerData>;
16
16
  type EndCallbackEventType = GestureEndEvent<NativeHandlerData>;
17
17
 
18
- /**
19
- * @deprecated `RawButton` is deprecated, use `Clickable` instead
20
- */
21
- export const RawButton = createNativeWrapper<
18
+ type RawButtonInnerProps = RawButtonProps & {
19
+ needsOffscreenAlphaCompositing?: boolean | undefined;
20
+ };
21
+
22
+ const RawButtonInner = createNativeWrapper<
22
23
  React.ComponentRef<typeof GestureHandlerButton>,
23
- RawButtonProps
24
+ RawButtonInnerProps
24
25
  >(GestureHandlerButton, {
25
26
  shouldCancelWhenOutside: false,
26
- shouldActivateOnStart: true,
27
+ shouldActivateOnStart: false,
27
28
  });
28
29
 
30
+ /**
31
+ * @deprecated `RawButton` is deprecated, use `Clickable` instead
32
+ */
33
+ export const RawButton = (props: RawButtonProps) => (
34
+ <RawButtonInner {...props} needsOffscreenAlphaCompositing />
35
+ );
36
+
29
37
  /**
30
38
  * @deprecated `BaseButton` is deprecated, use `Touchable` instead
31
39
  */
@@ -69,16 +77,16 @@ export const BaseButton = (props: BaseButtonProps) => {
69
77
  };
70
78
 
71
79
  const onDeactivate = (e: EndCallbackEventType) => {
80
+ props.onDeactivate?.(e);
81
+ };
82
+
83
+ const onFinalize = (e: EndCallbackEventType) => {
72
84
  onActiveStateChange?.(false);
73
85
 
74
86
  if (!e.canceled && !longPressDetected.current) {
75
87
  onPress?.(e.pointerInside);
76
88
  }
77
89
 
78
- props.onDeactivate?.(e);
79
- };
80
-
81
- const onFinalize = (e: EndCallbackEventType) => {
82
90
  if (longPressTimeout.current !== undefined) {
83
91
  clearTimeout(longPressTimeout.current);
84
92
  longPressTimeout.current = undefined;
@@ -16,6 +16,7 @@ export interface RawButtonProps
16
16
  | 'activeOpacity'
17
17
  | 'activeScale'
18
18
  | 'activeUnderlayOpacity'
19
+ | 'needsOffscreenAlphaCompositing'
19
20
  >,
20
21
  Omit<
21
22
  NativeWrapperProperties<React.ComponentRef<typeof GestureHandlerButton>>,
@@ -308,7 +308,7 @@ const Pressable = (props: PressableProps) => {
308
308
  stateMachine.handleEvent(StateMachineEvent.NATIVE_BEGIN);
309
309
  },
310
310
  onActivate: () => {
311
- if (Platform.OS !== 'android' && Platform.OS !== 'ios') {
311
+ if (Platform.OS !== 'android') {
312
312
  // Native.onActivate is broken with Android + hitSlop
313
313
  stateMachine.handleEvent(StateMachineEvent.NATIVE_START);
314
314
  }
@@ -331,6 +331,7 @@ const Pressable = (props: PressableProps) => {
331
331
  block,
332
332
  requireToFail,
333
333
  hitSlop: appliedHitSlop,
334
+ shouldActivateOnStart: Platform.OS === 'web',
334
335
  });
335
336
 
336
337
  const gesture = useSimultaneousGestures(
@@ -1,46 +1,100 @@
1
1
  import React, { useCallback, useRef } from 'react';
2
2
  import { Platform } from 'react-native';
3
3
 
4
- import type { ButtonProps } from '../../../components/GestureHandlerButton';
5
4
  import GestureHandlerButton from '../../../components/GestureHandlerButton';
6
- import createNativeWrapper from '../../createNativeWrapper';
5
+ import { NativeDetector } from '../../detectors/NativeDetector';
6
+ import { useNativeGesture } from '../../hooks';
7
7
  import type {
8
+ AnimationDuration,
8
9
  CallbackEventType,
9
10
  EndCallbackEventType,
10
11
  TouchableProps,
11
12
  } from './TouchableProps';
12
13
 
13
- const TouchableButton = createNativeWrapper<
14
- React.ComponentRef<typeof GestureHandlerButton>,
15
- ButtonProps
16
- >(GestureHandlerButton, {
17
- shouldCancelWhenOutside: true,
18
- shouldActivateOnStart: false,
19
- });
20
-
21
14
  const isAndroid = Platform.OS === 'android';
22
15
  const TRANSPARENT_RIPPLE = { rippleColor: 'transparent' as const };
16
+ const DEFAULT_IN_DURATION_MS = 50;
17
+ const DEFAULT_OUT_DURATION_MS = 100;
18
+
19
+ enum PointerState {
20
+ UNKNOWN,
21
+ INSIDE,
22
+ OUTSIDE,
23
+ }
24
+
25
+ // Clamp user-supplied durations to finite, non-negative milliseconds.
26
+ // Negative, NaN, or Infinity values would produce invalid CSS transitions
27
+ // on web and negative setTimeout delays in branch 3 of the press-out path.
28
+ function sanitizeDuration(value: number): number {
29
+ return Number.isFinite(value) && value >= 0 ? value : 0;
30
+ }
31
+
32
+ function resolveAnimationDuration(value: AnimationDuration | undefined) {
33
+ if (value === undefined) {
34
+ return {
35
+ tapAnimationInDuration: DEFAULT_IN_DURATION_MS,
36
+ tapAnimationOutDuration: DEFAULT_OUT_DURATION_MS,
37
+ longPressAnimationOutDuration: DEFAULT_OUT_DURATION_MS,
38
+ hoverAnimationInDuration: DEFAULT_IN_DURATION_MS,
39
+ hoverAnimationOutDuration: DEFAULT_OUT_DURATION_MS,
40
+ };
41
+ }
42
+
43
+ if (typeof value === 'number') {
44
+ const sanitized = sanitizeDuration(value);
45
+ return {
46
+ tapAnimationInDuration: sanitized,
47
+ tapAnimationOutDuration: sanitized,
48
+ longPressAnimationOutDuration: sanitized,
49
+ hoverAnimationInDuration: sanitized,
50
+ hoverAnimationOutDuration: sanitized,
51
+ };
52
+ }
53
+
54
+ // The union guarantees variant 2 supplies top-level `in`/`out`, variant 3
55
+ // supplies both category objects — so per-category fallback to base is
56
+ // always defined for well-typed input; the 0 fallbacks here are unreachable.
57
+ const baseIn = 'in' in value ? value.in : 0;
58
+ const baseOut = 'out' in value ? value.out : 0;
59
+ const tapOut = value.tap?.out ?? baseOut;
60
+
61
+ return {
62
+ tapAnimationInDuration: sanitizeDuration(value.tap?.in ?? baseIn),
63
+ tapAnimationOutDuration: sanitizeDuration(tapOut),
64
+ longPressAnimationOutDuration: sanitizeDuration(
65
+ value.longPress?.out ?? tapOut
66
+ ),
67
+ hoverAnimationInDuration: sanitizeDuration(value.hover?.in ?? baseIn),
68
+ hoverAnimationOutDuration: sanitizeDuration(value.hover?.out ?? baseOut),
69
+ };
70
+ }
23
71
 
24
72
  export const Touchable = (props: TouchableProps) => {
25
73
  const {
26
- underlayColor = 'black',
74
+ underlayColor = 'transparent',
27
75
  defaultUnderlayOpacity = 0,
76
+ activeUnderlayOpacity = 0.105,
28
77
  defaultOpacity = 1,
78
+ animationDuration,
29
79
  androidRipple,
30
80
  delayLongPress = 600,
31
81
  onLongPress,
32
82
  onPress,
33
83
  onPressIn,
34
84
  onPressOut,
35
- onActiveStateChange,
36
85
  children,
37
86
  disabled = false,
87
+ cancelOnLeave = true,
38
88
  ref,
39
89
  ...rest
40
90
  } = props;
41
91
 
92
+ const resolvedDurations = resolveAnimationDuration(animationDuration);
93
+ const resolvedDelayLongPress = sanitizeDuration(delayLongPress);
94
+
42
95
  const shouldUseNativeRipple = isAndroid && androidRipple !== undefined;
43
96
 
97
+ const pointerState = useRef<PointerState>(PointerState.UNKNOWN);
44
98
  const longPressDetected = useRef(false);
45
99
  const longPressTimeout = useRef<ReturnType<typeof setTimeout> | undefined>(
46
100
  undefined
@@ -55,57 +109,96 @@ export const Touchable = (props: TouchableProps) => {
55
109
  longPressDetected.current = false;
56
110
 
57
111
  if (onLongPress && !longPressTimeout.current) {
58
- longPressTimeout.current = setTimeout(wrappedLongPress, delayLongPress);
112
+ longPressTimeout.current = setTimeout(
113
+ wrappedLongPress,
114
+ resolvedDelayLongPress
115
+ );
59
116
  }
60
- }, [onLongPress, delayLongPress, wrappedLongPress]);
117
+ }, [onLongPress, resolvedDelayLongPress, wrappedLongPress]);
61
118
 
62
119
  const onBegin = useCallback(
63
120
  (e: CallbackEventType) => {
64
121
  if (!e.pointerInside) {
122
+ pointerState.current = PointerState.OUTSIDE;
65
123
  return;
66
124
  }
67
125
 
68
126
  onPressIn?.(e);
69
127
  startLongPressTimer();
128
+
129
+ pointerState.current = PointerState.INSIDE;
70
130
  },
71
131
  [startLongPressTimer, onPressIn]
72
132
  );
73
133
 
74
- const onActivate = useCallback(
75
- (e: CallbackEventType) => {
76
- onActiveStateChange?.(true);
77
-
78
- if (!e.pointerInside && longPressTimeout.current !== undefined) {
79
- clearTimeout(longPressTimeout.current);
80
- longPressTimeout.current = undefined;
81
- }
82
- },
83
- [onActiveStateChange]
84
- );
134
+ const onActivate = useCallback((e: CallbackEventType) => {
135
+ if (!e.pointerInside && longPressTimeout.current !== undefined) {
136
+ clearTimeout(longPressTimeout.current);
137
+ longPressTimeout.current = undefined;
138
+ }
139
+ }, []);
85
140
 
86
- const onDeactivate = useCallback(
141
+ const onFinalize = useCallback(
87
142
  (e: EndCallbackEventType) => {
88
- onActiveStateChange?.(false);
143
+ if (pointerState.current === PointerState.INSIDE) {
144
+ onPressOut?.(e);
145
+ }
89
146
 
90
- if (!e.canceled && !longPressDetected.current) {
91
- onPress?.(e.pointerInside);
147
+ if (!e.canceled && !longPressDetected.current && e.pointerInside) {
148
+ onPress?.(e);
92
149
  }
93
- },
94
- [onActiveStateChange, onPress]
95
- );
96
150
 
97
- const onFinalize = useCallback(
98
- (e: EndCallbackEventType) => {
99
- onPressOut?.(e);
151
+ pointerState.current = PointerState.UNKNOWN;
100
152
 
101
153
  if (longPressTimeout.current !== undefined) {
102
154
  clearTimeout(longPressTimeout.current);
103
155
  longPressTimeout.current = undefined;
104
156
  }
105
157
  },
106
- [onPressOut]
158
+ [onPressOut, onPress]
107
159
  );
108
160
 
161
+ const onUpdate = useCallback(
162
+ (e: CallbackEventType) => {
163
+ if (pointerState.current === PointerState.UNKNOWN) {
164
+ return;
165
+ }
166
+
167
+ if (e.pointerInside) {
168
+ if (pointerState.current === PointerState.OUTSIDE) {
169
+ onPressIn?.(e);
170
+ }
171
+ pointerState.current = PointerState.INSIDE;
172
+ } else {
173
+ if (pointerState.current === PointerState.INSIDE) {
174
+ onPressOut?.(e);
175
+
176
+ if (longPressTimeout.current !== undefined) {
177
+ clearTimeout(longPressTimeout.current);
178
+ longPressTimeout.current = undefined;
179
+ }
180
+ }
181
+ pointerState.current = PointerState.OUTSIDE;
182
+ }
183
+ },
184
+ [onPressIn, onPressOut]
185
+ );
186
+
187
+ const nativeGesture = useNativeGesture({
188
+ onBegin,
189
+ onActivate,
190
+ onFinalize,
191
+ onUpdate,
192
+ hitSlop: props.hitSlop,
193
+ testID: props.testID,
194
+ enabled: !disabled,
195
+ shouldCancelWhenOutside: cancelOnLeave,
196
+ disableReanimated: true,
197
+ shouldActivateOnStart: false,
198
+ disallowInterruption: true,
199
+ yieldsToContinuousGestures: true,
200
+ });
201
+
109
202
  const rippleProps = shouldUseNativeRipple
110
203
  ? {
111
204
  rippleColor: androidRipple?.color,
@@ -116,19 +209,20 @@ export const Touchable = (props: TouchableProps) => {
116
209
  : TRANSPARENT_RIPPLE;
117
210
 
118
211
  return (
119
- <TouchableButton
120
- {...rest}
121
- {...rippleProps}
122
- ref={ref ?? null}
123
- enabled={!disabled}
124
- onBegin={onBegin}
125
- onActivate={onActivate}
126
- onDeactivate={onDeactivate}
127
- onFinalize={onFinalize}
128
- defaultOpacity={defaultOpacity}
129
- defaultUnderlayOpacity={defaultUnderlayOpacity}
130
- underlayColor={underlayColor}>
131
- {children}
132
- </TouchableButton>
212
+ <NativeDetector gesture={nativeGesture}>
213
+ <GestureHandlerButton
214
+ {...rest}
215
+ {...rippleProps}
216
+ {...resolvedDurations}
217
+ ref={ref ?? null}
218
+ enabled={!disabled}
219
+ defaultOpacity={defaultOpacity}
220
+ defaultUnderlayOpacity={defaultUnderlayOpacity}
221
+ activeUnderlayOpacity={activeUnderlayOpacity}
222
+ underlayColor={underlayColor}
223
+ longPressDuration={resolvedDelayLongPress}>
224
+ {children}
225
+ </GestureHandlerButton>
226
+ </NativeDetector>
133
227
  );
134
228
  };