react-native-gesture-handler 2.32.0 → 2.33.1

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 (293) hide show
  1. package/android/build.gradle +27 -11
  2. package/android/gradle.properties +1 -1
  3. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +3 -0
  4. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +2 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +1 -1
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +41 -36
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +149 -23
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +1 -0
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +6 -3
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +23 -0
  11. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +4 -7
  12. package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +1 -1
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +3 -0
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +2 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +11 -1
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +8 -6
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +6 -0
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +2 -7
  19. package/apple/Handlers/RNFlingHandler.m +44 -4
  20. package/apple/Handlers/RNHoverHandler.m +24 -26
  21. package/apple/Handlers/RNLongPressHandler.m +4 -0
  22. package/apple/Handlers/RNPanHandler.m +44 -7
  23. package/apple/Handlers/RNTapHandler.m +35 -4
  24. package/apple/RNGHUIKit.h +10 -10
  25. package/apple/RNGestureHandler.h +2 -0
  26. package/apple/RNGestureHandler.mm +62 -9
  27. package/apple/RNGestureHandlerButton.mm +5 -3
  28. package/apple/RNGestureHandlerButtonComponentView.mm +6 -0
  29. package/apple/RNGestureHandlerManager.mm +63 -6
  30. package/apple/RNGestureHandlerModule.mm +20 -0
  31. package/apple/RNGestureHandlerPointerTracker.m +64 -10
  32. package/apple/RNGestureHandlerPointerType.h +1 -0
  33. package/apple/RNManualActivationRecognizer.m +25 -6
  34. package/lib/commonjs/components/GestureComponents.js +21 -1
  35. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  36. package/lib/commonjs/components/GestureHandlerButton.web.js +2 -1
  37. package/lib/commonjs/components/GestureHandlerButton.web.js.map +1 -1
  38. package/lib/commonjs/components/Pressable/Pressable.js +28 -3
  39. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  40. package/lib/commonjs/components/Pressable/index.js.map +1 -1
  41. package/lib/commonjs/components/ReanimatedDrawerLayout.js +4 -2
  42. package/lib/commonjs/components/ReanimatedDrawerLayout.js.map +1 -1
  43. package/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js +32 -9
  44. package/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js.map +1 -1
  45. package/lib/commonjs/components/Swipeable.js.map +1 -1
  46. package/lib/commonjs/components/Text.js.map +1 -1
  47. package/lib/commonjs/components/touchables/TouchableHighlight.js +1 -1
  48. package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
  49. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  50. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -0
  51. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  52. package/lib/commonjs/getShadowNodeFromRef.js +6 -2
  53. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  54. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  55. package/lib/commonjs/handlers/createHandler.js +1 -1
  56. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  57. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js +66 -11
  58. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  59. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +8 -1
  60. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  61. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +7 -2
  62. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  63. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +7 -0
  64. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  65. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +2 -1
  66. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  67. package/lib/commonjs/handlers/gestures/GestureDetector/useMountReactions.js +28 -3
  68. package/lib/commonjs/handlers/gestures/GestureDetector/useMountReactions.js.map +1 -1
  69. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +3 -2
  70. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
  71. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +35 -6
  72. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  73. package/lib/commonjs/handlers/gestures/gesture.js +8 -0
  74. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  75. package/lib/commonjs/handlers/gestures/gestureComposition.js +14 -2
  76. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  77. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -1
  78. package/lib/commonjs/handlers/gestures/panGesture.js +6 -3
  79. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  80. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +23 -0
  81. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  82. package/lib/commonjs/hostInstance.js +39 -0
  83. package/lib/commonjs/hostInstance.js.map +1 -0
  84. package/lib/commonjs/index.js.map +1 -1
  85. package/lib/commonjs/mocks/mocks.js +1 -0
  86. package/lib/commonjs/mocks/mocks.js.map +1 -1
  87. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  88. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.ts +16 -14
  89. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.ts +13 -4
  90. package/lib/commonjs/web/detectors/RotationGestureDetector.js +1 -1
  91. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +3 -1
  92. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  93. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +9 -1
  94. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  95. package/lib/commonjs/web/handlers/PanGestureHandler.js +8 -9
  96. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  97. package/lib/commonjs/web/handlers/TapGestureHandler.js +1 -1
  98. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +14 -0
  99. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  100. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +5 -1
  101. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  102. package/lib/commonjs/web/tools/KeyboardEventManager.js +17 -12
  103. package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
  104. package/lib/commonjs/web/tools/WheelEventManager.js +19 -5
  105. package/lib/commonjs/web/tools/WheelEventManager.js.map +1 -1
  106. package/lib/module/components/GestureComponents.js +23 -2
  107. package/lib/module/components/GestureComponents.js.map +1 -1
  108. package/lib/module/components/GestureHandlerButton.web.js +2 -1
  109. package/lib/module/components/GestureHandlerButton.web.js.map +1 -1
  110. package/lib/module/components/Pressable/Pressable.js +28 -3
  111. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  112. package/lib/module/components/Pressable/index.js.map +1 -1
  113. package/lib/module/components/ReanimatedDrawerLayout.js +4 -2
  114. package/lib/module/components/ReanimatedDrawerLayout.js.map +1 -1
  115. package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js +34 -11
  116. package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js.map +1 -1
  117. package/lib/module/components/Swipeable.js.map +1 -1
  118. package/lib/module/components/Text.js.map +1 -1
  119. package/lib/module/components/touchables/TouchableHighlight.js +2 -2
  120. package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
  121. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  122. package/lib/module/components/touchables/TouchableOpacity.js +1 -0
  123. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  124. package/lib/module/getShadowNodeFromRef.js +7 -2
  125. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  126. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  127. package/lib/module/handlers/createHandler.js +1 -1
  128. package/lib/module/handlers/createHandler.js.map +1 -1
  129. package/lib/module/handlers/gestures/GestureDetector/Wrap.js +67 -12
  130. package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  131. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +9 -2
  132. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  133. package/lib/module/handlers/gestures/GestureDetector/index.js +7 -2
  134. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  135. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +8 -1
  136. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  137. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +2 -1
  138. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  139. package/lib/module/handlers/gestures/GestureDetector/useMountReactions.js +28 -3
  140. package/lib/module/handlers/gestures/GestureDetector/useMountReactions.js.map +1 -1
  141. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +3 -2
  142. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
  143. package/lib/module/handlers/gestures/GestureDetector/utils.js +34 -6
  144. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  145. package/lib/module/handlers/gestures/gesture.js +8 -0
  146. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  147. package/lib/module/handlers/gestures/gestureComposition.js +14 -2
  148. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  149. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -1
  150. package/lib/module/handlers/gestures/panGesture.js +6 -3
  151. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  152. package/lib/module/handlers/gestures/reanimatedWrapper.js +22 -0
  153. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  154. package/lib/module/hostInstance.js +32 -0
  155. package/lib/module/hostInstance.js.map +1 -0
  156. package/lib/module/index.js.map +1 -1
  157. package/lib/module/mocks/mocks.js +3 -2
  158. package/lib/module/mocks/mocks.js.map +1 -1
  159. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  160. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.ts +16 -14
  161. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.ts +13 -4
  162. package/lib/module/web/detectors/RotationGestureDetector.js +1 -1
  163. package/lib/module/web/handlers/LongPressGestureHandler.js +3 -1
  164. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  165. package/lib/module/web/handlers/NativeViewGestureHandler.js +9 -1
  166. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  167. package/lib/module/web/handlers/PanGestureHandler.js +8 -9
  168. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  169. package/lib/module/web/handlers/TapGestureHandler.js +1 -1
  170. package/lib/module/web/tools/GestureHandlerOrchestrator.js +14 -0
  171. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  172. package/lib/module/web/tools/GestureHandlerWebDelegate.js +5 -1
  173. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  174. package/lib/module/web/tools/KeyboardEventManager.js +17 -12
  175. package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
  176. package/lib/module/web/tools/WheelEventManager.js +19 -5
  177. package/lib/module/web/tools/WheelEventManager.js.map +1 -1
  178. package/lib/typescript/components/GestureButtons.d.ts +3 -1
  179. package/lib/typescript/components/GestureButtons.d.ts.map +1 -1
  180. package/lib/typescript/components/GestureButtonsProps.d.ts +10 -0
  181. package/lib/typescript/components/GestureButtonsProps.d.ts.map +1 -1
  182. package/lib/typescript/components/GestureComponents.d.ts +8 -7
  183. package/lib/typescript/components/GestureComponents.d.ts.map +1 -1
  184. package/lib/typescript/components/GestureComponents.web.d.ts +12 -4
  185. package/lib/typescript/components/GestureComponents.web.d.ts.map +1 -1
  186. package/lib/typescript/components/GestureHandlerButton.web.d.ts +2 -2
  187. package/lib/typescript/components/GestureHandlerButton.web.d.ts.map +1 -1
  188. package/lib/typescript/components/Pressable/Pressable.d.ts.map +1 -1
  189. package/lib/typescript/components/Pressable/PressableProps.d.ts +1 -1
  190. package/lib/typescript/components/Pressable/PressableProps.d.ts.map +1 -1
  191. package/lib/typescript/components/Pressable/index.d.ts +1 -1
  192. package/lib/typescript/components/Pressable/index.d.ts.map +1 -1
  193. package/lib/typescript/components/ReanimatedDrawerLayout.d.ts.map +1 -1
  194. package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeable.d.ts.map +1 -1
  195. package/lib/typescript/components/Swipeable.d.ts.map +1 -1
  196. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -1
  197. package/lib/typescript/components/touchables/TouchableHighlight.d.ts.map +1 -1
  198. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  199. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts.map +1 -1
  200. package/lib/typescript/components/touchables/TouchableOpacity.d.ts.map +1 -1
  201. package/lib/typescript/getShadowNodeFromRef.d.ts.map +1 -1
  202. package/lib/typescript/handlers/PanGestureHandler.d.ts +12 -0
  203. package/lib/typescript/handlers/PanGestureHandler.d.ts.map +1 -1
  204. package/lib/typescript/handlers/createHandler.d.ts.map +1 -1
  205. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts +12 -0
  206. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts.map +1 -1
  207. package/lib/typescript/handlers/gestures/GestureDetector/attachHandlers.d.ts.map +1 -1
  208. package/lib/typescript/handlers/gestures/GestureDetector/index.d.ts.map +1 -1
  209. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +1 -0
  210. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts.map +1 -1
  211. package/lib/typescript/handlers/gestures/GestureDetector/updateHandlers.d.ts.map +1 -1
  212. package/lib/typescript/handlers/gestures/GestureDetector/useDetectorUpdater.d.ts.map +1 -1
  213. package/lib/typescript/handlers/gestures/GestureDetector/useMountReactions.d.ts.map +1 -1
  214. package/lib/typescript/handlers/gestures/GestureDetector/useViewRefHandler.d.ts.map +1 -1
  215. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +5 -4
  216. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts.map +1 -1
  217. package/lib/typescript/handlers/gestures/gesture.d.ts +4 -0
  218. package/lib/typescript/handlers/gestures/gesture.d.ts.map +1 -1
  219. package/lib/typescript/handlers/gestures/gestureComposition.d.ts.map +1 -1
  220. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +8 -1
  221. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts.map +1 -1
  222. package/lib/typescript/handlers/gestures/panGesture.d.ts +6 -3
  223. package/lib/typescript/handlers/gestures/panGesture.d.ts.map +1 -1
  224. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +1 -0
  225. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts.map +1 -1
  226. package/lib/typescript/hostInstance.d.ts +10 -0
  227. package/lib/typescript/hostInstance.d.ts.map +1 -0
  228. package/lib/typescript/index.d.ts +1 -1
  229. package/lib/typescript/index.d.ts.map +1 -1
  230. package/lib/typescript/mocks/mocks.d.ts +67 -15
  231. package/lib/typescript/mocks/mocks.d.ts.map +1 -1
  232. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -7
  233. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts.map +1 -1
  234. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +9 -10
  235. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts.map +1 -1
  236. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +2 -2
  237. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts.map +1 -1
  238. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts.map +1 -1
  239. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  240. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts.map +1 -1
  241. package/lib/typescript/web/handlers/PanGestureHandler.d.ts.map +1 -1
  242. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +1 -0
  243. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts.map +1 -1
  244. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts.map +1 -1
  245. package/lib/typescript/web/tools/KeyboardEventManager.d.ts +2 -1
  246. package/lib/typescript/web/tools/KeyboardEventManager.d.ts.map +1 -1
  247. package/lib/typescript/web/tools/WheelEventManager.d.ts.map +1 -1
  248. package/package.json +7 -7
  249. package/src/components/GestureButtonsProps.ts +14 -0
  250. package/src/components/GestureComponents.tsx +38 -7
  251. package/src/components/GestureHandlerButton.web.tsx +7 -3
  252. package/src/components/Pressable/Pressable.tsx +33 -4
  253. package/src/components/Pressable/PressableProps.tsx +1 -1
  254. package/src/components/Pressable/index.ts +1 -0
  255. package/src/components/ReanimatedDrawerLayout.tsx +4 -1
  256. package/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx +49 -10
  257. package/src/components/Swipeable.tsx +6 -2
  258. package/src/components/Text.tsx +3 -3
  259. package/src/components/touchables/TouchableHighlight.tsx +4 -2
  260. package/src/components/touchables/TouchableNativeFeedback.android.tsx +8 -2
  261. package/src/components/touchables/TouchableOpacity.tsx +1 -0
  262. package/src/getShadowNodeFromRef.ts +11 -4
  263. package/src/handlers/PanGestureHandler.ts +15 -0
  264. package/src/handlers/createHandler.tsx +4 -1
  265. package/src/handlers/gestures/GestureDetector/Wrap.tsx +95 -14
  266. package/src/handlers/gestures/GestureDetector/attachHandlers.ts +11 -2
  267. package/src/handlers/gestures/GestureDetector/index.tsx +8 -1
  268. package/src/handlers/gestures/GestureDetector/types.ts +3 -0
  269. package/src/handlers/gestures/GestureDetector/updateHandlers.ts +8 -0
  270. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +4 -1
  271. package/src/handlers/gestures/GestureDetector/useMountReactions.ts +35 -4
  272. package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +5 -2
  273. package/src/handlers/gestures/GestureDetector/utils.ts +42 -10
  274. package/src/handlers/gestures/gesture.ts +11 -0
  275. package/src/handlers/gestures/gestureComposition.ts +15 -2
  276. package/src/handlers/gestures/gestureStateManager.web.ts +9 -1
  277. package/src/handlers/gestures/panGesture.ts +6 -3
  278. package/src/handlers/gestures/reanimatedWrapper.ts +23 -0
  279. package/src/hostInstance.ts +57 -0
  280. package/src/index.ts +1 -0
  281. package/src/mocks/mocks.tsx +6 -2
  282. package/src/specs/NativeRNGestureHandlerModule.ts +16 -10
  283. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +16 -14
  284. package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +13 -4
  285. package/src/web/detectors/RotationGestureDetector.ts +1 -1
  286. package/src/web/handlers/LongPressGestureHandler.ts +3 -1
  287. package/src/web/handlers/NativeViewGestureHandler.ts +11 -2
  288. package/src/web/handlers/PanGestureHandler.ts +8 -11
  289. package/src/web/handlers/TapGestureHandler.ts +1 -1
  290. package/src/web/tools/GestureHandlerOrchestrator.ts +19 -0
  291. package/src/web/tools/GestureHandlerWebDelegate.ts +6 -1
  292. package/src/web/tools/KeyboardEventManager.ts +20 -18
  293. package/src/web/tools/WheelEventManager.ts +15 -5
@@ -1,27 +1,29 @@
1
- import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
1
+ import { codegenNativeComponent } from 'react-native';
2
2
  import type {
3
- Int32,
4
- WithDefault,
5
- Float,
6
- } from 'react-native/Libraries/Types/CodegenTypes';
7
- import type { ViewProps, ColorValue } from 'react-native';
3
+ CodegenTypes,
4
+ HostComponent,
5
+ ViewProps,
6
+ ColorValue,
7
+ } from 'react-native';
8
8
 
9
9
  // @ts-ignore - Redefining pointerEvents with WithDefault for codegen, conflicts with ViewProps type but codegen needs it
10
10
  interface NativeProps extends ViewProps {
11
- exclusive?: WithDefault<boolean, true>;
11
+ exclusive?: CodegenTypes.WithDefault<boolean, true>;
12
12
  foreground?: boolean;
13
13
  borderless?: boolean;
14
- enabled?: WithDefault<boolean, true>;
14
+ enabled?: CodegenTypes.WithDefault<boolean, true>;
15
15
  rippleColor?: ColorValue;
16
- rippleRadius?: Int32;
17
- touchSoundDisabled?: WithDefault<boolean, false>;
18
- borderWidth?: Float;
16
+ rippleRadius?: CodegenTypes.Int32;
17
+ touchSoundDisabled?: CodegenTypes.WithDefault<boolean, false>;
18
+ borderWidth?: CodegenTypes.Float;
19
19
  borderColor?: ColorValue;
20
- borderStyle?: WithDefault<string, 'solid'>;
21
- pointerEvents?: WithDefault<
20
+ borderStyle?: CodegenTypes.WithDefault<string, 'solid'>;
21
+ pointerEvents?: CodegenTypes.WithDefault<
22
22
  'box-none' | 'none' | 'box-only' | 'auto',
23
23
  'auto'
24
24
  >;
25
25
  }
26
26
 
27
- export default codegenNativeComponent<NativeProps>('RNGestureHandlerButton');
27
+ export default codegenNativeComponent<NativeProps>(
28
+ 'RNGestureHandlerButton'
29
+ ) as HostComponent<NativeProps>;
@@ -1,10 +1,19 @@
1
- import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
2
- import type { ViewProps } from 'react-native';
1
+ import { codegenNativeComponent } from 'react-native';
2
+ import type { CodegenTypes, HostComponent, ViewProps } from 'react-native';
3
3
 
4
4
  export interface RootViewNativeProps extends ViewProps {
5
5
  unstable_forceActive?: boolean;
6
6
  }
7
7
 
8
- export default codegenNativeComponent<RootViewNativeProps>(
8
+ // @ts-expect-error WithDefault adds null for codegen, unlike ViewProps.pointerEvents.
9
+ interface NativeProps extends ViewProps {
10
+ pointerEvents?: CodegenTypes.WithDefault<
11
+ 'box-none' | 'none' | 'box-only' | 'auto',
12
+ 'auto'
13
+ >;
14
+ unstable_forceActive?: boolean;
15
+ }
16
+
17
+ export default codegenNativeComponent<NativeProps>(
9
18
  'RNGestureHandlerRootView'
10
- );
19
+ ) as HostComponent<RootViewNativeProps>;
@@ -163,6 +163,6 @@ export default class RotationGestureDetector
163
163
  }
164
164
 
165
165
  public get timeDelta() {
166
- return this.currentTime + this.previousTime;
166
+ return this.currentTime - this.previousTime;
167
167
  }
168
168
  }
@@ -5,6 +5,7 @@ import GestureHandler from './GestureHandler';
5
5
 
6
6
  const DEFAULT_MIN_DURATION_MS = 500;
7
7
  const DEFAULT_MAX_DIST_DP = 10;
8
+ const DEFAULT_NUMBER_OF_POINTERS = 1;
8
9
  const SCALING_FACTOR = 10;
9
10
 
10
11
  export default class LongPressGestureHandler extends GestureHandler {
@@ -12,7 +13,7 @@ export default class LongPressGestureHandler extends GestureHandler {
12
13
  private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;
13
14
 
14
15
  private maxDistSq = this.defaultMaxDistSq;
15
- private numberOfPointers = 1;
16
+ private numberOfPointers = DEFAULT_NUMBER_OF_POINTERS;
16
17
  private startX = 0;
17
18
  private startY = 0;
18
19
 
@@ -56,6 +57,7 @@ export default class LongPressGestureHandler extends GestureHandler {
56
57
  super.resetConfig();
57
58
  this.minDurationMs = DEFAULT_MIN_DURATION_MS;
58
59
  this.maxDistSq = this.defaultMaxDistSq;
60
+ this.numberOfPointers = DEFAULT_NUMBER_OF_POINTERS;
59
61
  }
60
62
 
61
63
  protected onStateChange(_newState: State, _oldState: State): void {
@@ -20,8 +20,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
20
20
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
21
21
  super.init(ref, propsRef);
22
22
 
23
- this.shouldCancelWhenOutside = true;
24
-
25
23
  if (Platform.OS !== 'web') {
26
24
  return;
27
25
  }
@@ -33,6 +31,9 @@ export default class NativeViewGestureHandler extends GestureHandler {
33
31
  }
34
32
 
35
33
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
34
+ // Config updates are full replaces, so restore the defaults first - the
35
+ // module never calls `resetConfig` on its own.
36
+ this.resetConfig();
36
37
  super.updateGestureConfig({ enabled: enabled, ...props });
37
38
 
38
39
  if (this.config.shouldActivateOnStart !== undefined) {
@@ -46,6 +47,14 @@ export default class NativeViewGestureHandler extends GestureHandler {
46
47
  this.restoreViewStyles(view);
47
48
  }
48
49
 
50
+ protected override resetConfig(): void {
51
+ super.resetConfig();
52
+
53
+ this.shouldCancelWhenOutside = true;
54
+ this.shouldActivateOnStart = false;
55
+ this.disallowInterruption = false;
56
+ }
57
+
49
58
  private restoreViewStyles(view: HTMLElement) {
50
59
  if (!view) {
51
60
  return;
@@ -82,8 +82,7 @@ export default class PanGestureHandler extends GestureHandler {
82
82
  }
83
83
 
84
84
  if (this.config.minVelocity !== undefined) {
85
- this.minVelocityX = this.config.minVelocity;
86
- this.minVelocityY = this.config.minVelocity;
85
+ this.minVelocitySq = this.config.minVelocity * this.config.minVelocity;
87
86
  }
88
87
 
89
88
  if (this.config.minVelocityX !== undefined) {
@@ -191,6 +190,7 @@ export default class PanGestureHandler extends GestureHandler {
191
190
  this.maxPointers = DEFAULT_MAX_POINTERS;
192
191
 
193
192
  this.activateAfterLongPress = 0;
193
+ this.enableTrackpadTwoFingerGesture = false;
194
194
  }
195
195
 
196
196
  protected transformNativeEvent() {
@@ -354,14 +354,13 @@ export default class PanGestureHandler extends GestureHandler {
354
354
  }
355
355
  }
356
356
 
357
- private scheduleWheelEnd(event: AdaptedEvent) {
357
+ private scheduleWheelEnd() {
358
358
  clearTimeout(this.endWheelTimeout);
359
359
 
360
360
  this.endWheelTimeout = setTimeout(() => {
361
361
  if (this.state === State.ACTIVE) {
362
362
  this.end();
363
- this.tracker.removeFromTracker(event.pointerId);
364
- this.state = State.UNDETERMINED;
363
+ this.reset();
365
364
  }
366
365
 
367
366
  this.wheelDevice = WheelDevice.UNDETERMINED;
@@ -383,7 +382,7 @@ export default class PanGestureHandler extends GestureHandler {
383
382
  : WheelDevice.MOUSE;
384
383
 
385
384
  if (this.wheelDevice === WheelDevice.MOUSE) {
386
- this.scheduleWheelEnd(event);
385
+ this.scheduleWheelEnd();
387
386
  return;
388
387
  }
389
388
 
@@ -403,7 +402,7 @@ export default class PanGestureHandler extends GestureHandler {
403
402
  this.updateVelocity(event.pointerId);
404
403
 
405
404
  this.tryToSendMoveEvent(false, event);
406
- this.scheduleWheelEnd(event);
405
+ this.scheduleWheelEnd();
407
406
  }
408
407
 
409
408
  private shouldActivate(): boolean {
@@ -452,8 +451,7 @@ export default class PanGestureHandler extends GestureHandler {
452
451
 
453
452
  if (
454
453
  this.minVelocityX !== Number.MAX_SAFE_INTEGER &&
455
- ((this.minVelocityX < 0 && vx <= this.minVelocityX) ||
456
- (this.minVelocityX >= 0 && this.minVelocityX <= vx))
454
+ Math.abs(vx) >= Math.abs(this.minVelocityX)
457
455
  ) {
458
456
  return true;
459
457
  }
@@ -461,8 +459,7 @@ export default class PanGestureHandler extends GestureHandler {
461
459
  const vy: number = this.velocityY;
462
460
  if (
463
461
  this.minVelocityY !== Number.MAX_SAFE_INTEGER &&
464
- ((this.minVelocityY < 0 && vy <= this.minVelocityY) ||
465
- (this.minVelocityY >= 0 && this.minVelocityY <= vy))
462
+ Math.abs(vy) >= Math.abs(this.minVelocityY)
466
463
  ) {
467
464
  return true;
468
465
  }
@@ -159,7 +159,7 @@ export default class TapGestureHandler extends GestureHandler {
159
159
  this.tracker.removeFromTracker(event.pointerId);
160
160
 
161
161
  this.offsetX += this.lastX - this.startX;
162
- this.offsetY += this.lastY = this.startY;
162
+ this.offsetY += this.lastY - this.startY;
163
163
 
164
164
  this.updateLastCoords();
165
165
 
@@ -264,7 +264,26 @@ export default class GestureHandlerOrchestrator {
264
264
  handler.activationIndex = this.activationIndex++;
265
265
  }
266
266
 
267
+ // A handler whose pointer sequence ended before it began (e.g. a press
268
+ // outside a negative hit slop) never reaches a finished state, so
269
+ // `cleanupFinishedHandlers` never drops it and it would block or park every
270
+ // later gesture. Drop such idle entries before a new gesture consults them.
271
+ private dropIdleHandlers(): void {
272
+ for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
273
+ const handler = this.gestureHandlers[i];
274
+
275
+ if (
276
+ handler.state === State.UNDETERMINED &&
277
+ handler.tracker.trackedPointersCount === 0
278
+ ) {
279
+ this.removeHandlerFromOrchestrator(handler);
280
+ }
281
+ }
282
+ }
283
+
267
284
  public recordHandlerIfNotPresent(handler: IGestureHandler): void {
285
+ this.dropIdleHandlers();
286
+
268
287
  if (this.gestureHandlers.includes(handler)) {
269
288
  return;
270
289
  }
@@ -12,6 +12,7 @@ import { Config } from '../interfaces';
12
12
  import { MouseButton } from '../../handlers/gestureHandlerCommon';
13
13
  import KeyboardEventManager from './KeyboardEventManager';
14
14
  import WheelEventManager from './WheelEventManager';
15
+ import PanGestureHandler from '../handlers/PanGestureHandler';
15
16
 
16
17
  interface DefaultViewStyles {
17
18
  userSelect: string;
@@ -49,6 +50,7 @@ export class GestureHandlerWebDelegate
49
50
  };
50
51
 
51
52
  const config = handler.config;
53
+ const shouldSendWheelEvents = handler instanceof PanGestureHandler;
52
54
 
53
55
  this.setUserSelect(config.enabled);
54
56
  this.setTouchAction(config.enabled);
@@ -56,7 +58,10 @@ export class GestureHandlerWebDelegate
56
58
 
57
59
  this.eventManagers.push(new PointerEventManager(this.view));
58
60
  this.eventManagers.push(new KeyboardEventManager(this.view));
59
- this.eventManagers.push(new WheelEventManager(this.view));
61
+
62
+ if (shouldSendWheelEvents) {
63
+ this.eventManagers.push(new WheelEventManager(this.view));
64
+ }
60
65
 
61
66
  this.eventManagers.forEach((manager) =>
62
67
  this.gestureHandler.attachEventManager(manager)
@@ -3,9 +3,10 @@ import EventManager from './EventManager';
3
3
  import { PointerType } from '../../PointerType';
4
4
 
5
5
  export default class KeyboardEventManager extends EventManager<HTMLElement> {
6
- private static activationKeys = ['Enter', ' '];
7
- private static cancelationKeys = ['Tab'];
8
- private isPressed = false;
6
+ private static activationKeys = new Set(['Enter', ' ']);
7
+ private static cancelationKeys = new Set(['Tab']);
8
+ private keyPointer: string | null = null;
9
+
9
10
  private static registeredStaticListeners = false;
10
11
  private static instances: Set<KeyboardEventManager> = new Set();
11
12
 
@@ -13,8 +14,7 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
13
14
  // We need a global listener, as in some cases, keyUp event gets stop-propagated.
14
15
  // Then, if we used only component-level listeners the gesture would never end,
15
16
  // causing other gestues to fail.
16
-
17
- if (this.activationKeys.indexOf(event.key) === -1) {
17
+ if (!this.activationKeys.has(event.key)) {
18
18
  return;
19
19
  }
20
20
 
@@ -24,30 +24,30 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
24
24
  };
25
25
 
26
26
  private keyDownCallback = (event: KeyboardEvent): void => {
27
- if (
28
- KeyboardEventManager.cancelationKeys.indexOf(event.key) !== -1 &&
29
- this.isPressed
30
- ) {
31
- this.dispatchEvent(event, EventTypes.CANCEL);
27
+ if (this.keyPointer !== null) {
28
+ if (KeyboardEventManager.cancelationKeys.has(event.key)) {
29
+ this.dispatchEvent(event, EventTypes.CANCEL);
30
+ this.keyPointer = null;
31
+ }
32
+
32
33
  return;
33
34
  }
34
35
 
35
- if (KeyboardEventManager.activationKeys.indexOf(event.key) === -1) {
36
+ if (!KeyboardEventManager.activationKeys.has(event.key) || event.repeat) {
36
37
  return;
37
38
  }
38
39
 
40
+ this.keyPointer = event.key;
39
41
  this.dispatchEvent(event, EventTypes.DOWN);
40
42
  };
41
43
 
42
44
  private onKeyUp = (event: KeyboardEvent): void => {
43
- if (
44
- KeyboardEventManager.activationKeys.indexOf(event.key) === -1 ||
45
- !this.isPressed
46
- ) {
45
+ if (this.keyPointer !== event.key) {
47
46
  return;
48
47
  }
49
48
 
50
49
  this.dispatchEvent(event, EventTypes.UP);
50
+ this.keyPointer = null;
51
51
  };
52
52
 
53
53
  private dispatchEvent(event: KeyboardEvent, eventType: EventTypes) {
@@ -59,15 +59,12 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
59
59
 
60
60
  switch (eventType) {
61
61
  case EventTypes.UP:
62
- this.isPressed = false;
63
62
  this.onPointerUp(adaptedEvent);
64
63
  break;
65
64
  case EventTypes.DOWN:
66
- this.isPressed = true;
67
65
  this.onPointerDown(adaptedEvent);
68
66
  break;
69
67
  case EventTypes.CANCEL:
70
- this.isPressed = false;
71
68
  this.onPointerCancel(adaptedEvent);
72
69
  break;
73
70
  }
@@ -103,6 +100,11 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
103
100
  }
104
101
  }
105
102
 
103
+ public override resetManager(): void {
104
+ super.resetManager();
105
+ this.keyPointer = null;
106
+ }
107
+
106
108
  protected mapEvent(
107
109
  event: KeyboardEvent,
108
110
  eventType: EventTypes
@@ -1,6 +1,7 @@
1
1
  import EventManager from './EventManager';
2
2
  import { AdaptedEvent, EventTypes } from '../interfaces';
3
3
  import { PointerType } from '../../PointerType';
4
+ import { calculateViewScale } from '../utils';
4
5
 
5
6
  export default class WheelEventManager extends EventManager<HTMLElement> {
6
7
  private wheelDelta = { x: 0, y: 0 };
@@ -19,7 +20,9 @@ export default class WheelEventManager extends EventManager<HTMLElement> {
19
20
 
20
21
  public registerListeners(): void {
21
22
  this.view.addEventListener('pointermove', this.resetDelta);
22
- this.view.addEventListener('wheel', this.wheelCallback);
23
+ this.view.addEventListener('wheel', this.wheelCallback, {
24
+ passive: true,
25
+ });
23
26
  }
24
27
 
25
28
  public unregisterListeners(): void {
@@ -28,11 +31,17 @@ export default class WheelEventManager extends EventManager<HTMLElement> {
28
31
  }
29
32
 
30
33
  protected mapEvent(event: WheelEvent): AdaptedEvent {
34
+ const rect = this.view.getBoundingClientRect();
35
+ const { scaleX, scaleY } = calculateViewScale(this.view);
36
+
37
+ const x = event.clientX + this.wheelDelta.x;
38
+ const y = event.clientY + this.wheelDelta.y;
39
+
31
40
  return {
32
- x: event.clientX + this.wheelDelta.x,
33
- y: event.clientY + this.wheelDelta.y,
34
- offsetX: event.offsetX - event.deltaX,
35
- offsetY: event.offsetY - event.deltaY,
41
+ x,
42
+ y,
43
+ offsetX: (x - rect.left) / scaleX,
44
+ offsetY: (y - rect.top) / scaleY,
36
45
  pointerId: -1,
37
46
  eventType: EventTypes.MOVE,
38
47
  pointerType: PointerType.OTHER,
@@ -44,5 +53,6 @@ export default class WheelEventManager extends EventManager<HTMLElement> {
44
53
 
45
54
  public resetManager(): void {
46
55
  super.resetManager();
56
+ this.wheelDelta = { x: 0, y: 0 };
47
57
  }
48
58
  }