react-native-gesture-handler 2.1.2 → 2.3.0

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 (250) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +8 -3
  3. package/RNGestureHandler.podspec +27 -3
  4. package/android/build.gradle +82 -9
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +47 -12
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +50 -14
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +7 -4
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +8 -8
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +6 -4
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
  11. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
  12. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
  13. package/android/src/main/AndroidManifest.xml +1 -1
  14. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +29 -10
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +119 -55
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
  20. package/android/src/main/jni/Android.mk +53 -0
  21. package/android/src/main/jni/OnLoad.cpp +9 -0
  22. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
  23. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
  24. package/android/src/main/jni/cpp-adapter.cpp +41 -0
  25. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
  26. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
  27. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
  28. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
  29. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
  30. package/ios/Handlers/RNFlingHandler.m +2 -0
  31. package/ios/Handlers/RNPanHandler.m +2 -0
  32. package/ios/Handlers/RNPinchHandler.m +2 -0
  33. package/ios/Handlers/RNRotationHandler.m +2 -0
  34. package/ios/RNGestureHandler.h +3 -8
  35. package/ios/RNGestureHandler.m +2 -10
  36. package/ios/RNGestureHandlerActionType.h +8 -0
  37. package/ios/RNGestureHandlerButtonComponentView.h +17 -0
  38. package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
  39. package/ios/RNGestureHandlerButtonManager.h +5 -0
  40. package/ios/RNGestureHandlerButtonManager.m +30 -0
  41. package/ios/RNGestureHandlerManager.h +2 -4
  42. package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
  43. package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
  44. package/ios/RNGestureHandlerRegistry.h +1 -2
  45. package/ios/RNGestureHandlerRegistry.m +2 -11
  46. package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
  47. package/lib/commonjs/ActionType.js +15 -0
  48. package/lib/commonjs/ActionType.js.map +1 -0
  49. package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
  50. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  51. package/lib/commonjs/GestureHandlerRootView.js +2 -3
  52. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  53. package/lib/commonjs/RNGestureHandlerModule.js +4 -2
  54. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  55. package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
  56. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  57. package/lib/commonjs/components/DrawerLayout.js +2 -2
  58. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  59. package/lib/commonjs/components/GestureHandlerButton.js +5 -2
  60. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  61. package/lib/commonjs/components/Swipeable.js +22 -20
  62. package/lib/commonjs/components/Swipeable.js.map +1 -1
  63. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
  64. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  65. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
  66. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  67. package/lib/commonjs/getShadowNodeFromRef.js +24 -0
  68. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
  69. package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
  70. package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
  71. package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
  72. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  73. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
  74. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
  76. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
  78. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
  80. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
  82. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  83. package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
  84. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  85. package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
  86. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  87. package/lib/commonjs/handlers/createHandler.js +72 -8
  88. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  89. package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
  90. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  91. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  92. package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
  93. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
  95. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  96. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  97. package/lib/commonjs/handlers/gestures/gesture.js +16 -1
  98. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
  100. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  101. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  102. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  103. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
  104. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  105. package/lib/commonjs/handlers/handlersRegistry.js +42 -6
  106. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  107. package/lib/commonjs/index.js +14 -106
  108. package/lib/commonjs/index.js.map +1 -1
  109. package/lib/commonjs/init.js +10 -0
  110. package/lib/commonjs/init.js.map +1 -1
  111. package/lib/commonjs/jestUtils.js +375 -0
  112. package/lib/commonjs/jestUtils.js.map +1 -0
  113. package/lib/commonjs/utils.js +38 -0
  114. package/lib/commonjs/utils.js.map +1 -1
  115. package/lib/module/ActionType.js +7 -0
  116. package/lib/module/ActionType.js.map +1 -0
  117. package/lib/module/GestureHandlerRootView.android.js +5 -6
  118. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  119. package/lib/module/GestureHandlerRootView.js +2 -3
  120. package/lib/module/GestureHandlerRootView.js.map +1 -1
  121. package/lib/module/RNGestureHandlerModule.js +3 -2
  122. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  123. package/lib/module/RNGestureHandlerModule.web.js +1 -1
  124. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  125. package/lib/module/components/DrawerLayout.js +2 -2
  126. package/lib/module/components/DrawerLayout.js.map +1 -1
  127. package/lib/module/components/GestureHandlerButton.js +4 -2
  128. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  129. package/lib/module/components/Swipeable.js +22 -20
  130. package/lib/module/components/Swipeable.js.map +1 -1
  131. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
  132. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  133. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
  134. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  135. package/lib/module/getShadowNodeFromRef.js +17 -0
  136. package/lib/module/getShadowNodeFromRef.js.map +1 -0
  137. package/lib/module/getShadowNodeFromRef.web.js +8 -0
  138. package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
  139. package/lib/module/handlers/FlingGestureHandler.js +2 -1
  140. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  141. package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
  142. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  143. package/lib/module/handlers/LongPressGestureHandler.js +2 -1
  144. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  145. package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
  146. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  147. package/lib/module/handlers/PanGestureHandler.js +2 -1
  148. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  149. package/lib/module/handlers/PinchGestureHandler.js +2 -1
  150. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  151. package/lib/module/handlers/RotationGestureHandler.js +2 -1
  152. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  153. package/lib/module/handlers/TapGestureHandler.js +2 -1
  154. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  155. package/lib/module/handlers/createHandler.js +72 -9
  156. package/lib/module/handlers/createHandler.js.map +1 -1
  157. package/lib/module/handlers/createNativeWrapper.js +6 -2
  158. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  159. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  160. package/lib/module/handlers/gestures/GestureDetector.js +79 -32
  161. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  162. package/lib/module/handlers/gestures/eventReceiver.js +25 -7
  163. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  164. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  165. package/lib/module/handlers/gestures/gesture.js +16 -1
  166. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  167. package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
  168. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  169. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  170. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  171. package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
  172. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  173. package/lib/module/handlers/handlersRegistry.js +34 -6
  174. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  175. package/lib/module/index.js +1 -11
  176. package/lib/module/index.js.map +1 -1
  177. package/lib/module/init.js +6 -0
  178. package/lib/module/init.js.map +1 -1
  179. package/lib/module/jestUtils.js +350 -0
  180. package/lib/module/jestUtils.js.map +1 -0
  181. package/lib/module/utils.js +28 -0
  182. package/lib/module/utils.js.map +1 -1
  183. package/lib/typescript/ActionType.d.ts +7 -0
  184. package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
  185. package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
  186. package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
  187. package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
  188. package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
  189. package/lib/typescript/components/Swipeable.d.ts +12 -4
  190. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
  191. package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
  192. package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
  193. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
  194. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +3 -2
  195. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
  196. package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -2
  197. package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
  198. package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
  199. package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
  200. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
  201. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
  202. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
  203. package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
  204. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
  205. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
  206. package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
  207. package/lib/typescript/index.d.ts +15 -11
  208. package/lib/typescript/jestUtils.d.ts +28 -0
  209. package/lib/typescript/utils.d.ts +6 -0
  210. package/lib/typescript/web/constants.d.ts +0 -1
  211. package/package.json +39 -16
  212. package/src/ActionType.ts +9 -0
  213. package/src/GestureHandlerRootView.android.tsx +14 -14
  214. package/src/GestureHandlerRootView.tsx +4 -4
  215. package/src/RNGestureHandlerModule.ts +11 -6
  216. package/src/RNGestureHandlerModule.web.ts +2 -1
  217. package/src/components/DrawerLayout.tsx +8 -2
  218. package/src/components/GestureHandlerButton.tsx +7 -4
  219. package/src/components/Swipeable.tsx +28 -22
  220. package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
  221. package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
  222. package/src/getShadowNodeFromRef.ts +19 -0
  223. package/src/getShadowNodeFromRef.web.ts +7 -0
  224. package/src/handlers/FlingGestureHandler.ts +3 -1
  225. package/src/handlers/ForceTouchGestureHandler.ts +8 -2
  226. package/src/handlers/LongPressGestureHandler.ts +5 -3
  227. package/src/handlers/NativeViewGestureHandler.ts +3 -1
  228. package/src/handlers/PanGestureHandler.ts +5 -3
  229. package/src/handlers/PinchGestureHandler.ts +3 -1
  230. package/src/handlers/RotationGestureHandler.ts +3 -1
  231. package/src/handlers/TapGestureHandler.ts +3 -1
  232. package/src/handlers/createHandler.ts +80 -5
  233. package/src/handlers/createNativeWrapper.tsx +7 -1
  234. package/src/handlers/gestureHandlerCommon.ts +2 -5
  235. package/src/handlers/gestures/GestureDetector.tsx +110 -37
  236. package/src/handlers/gestures/eventReceiver.ts +23 -19
  237. package/src/handlers/gestures/forceTouchGesture.ts +1 -1
  238. package/src/handlers/gestures/gesture.ts +21 -1
  239. package/src/handlers/gestures/gestureStateManager.ts +9 -12
  240. package/src/handlers/gestures/panGesture.ts +1 -1
  241. package/src/handlers/gestures/pinchGesture.ts +1 -1
  242. package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
  243. package/src/handlers/handlersRegistry.ts +44 -6
  244. package/src/index.ts +15 -11
  245. package/src/init.ts +6 -0
  246. package/src/jestUtils.ts +506 -0
  247. package/src/utils.ts +38 -0
  248. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
  249. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
  250. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @flow strict-local
3
+ * @format
4
+ */
5
+ /* eslint-disable */
6
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
7
+ import type { HostComponent } from 'react-native';
8
+ import type { ColorValue } from 'react-native/Libraries/StyleSheet';
9
+ import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';
10
+ import type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';
11
+
12
+ type NativeProps = $ReadOnly<{|
13
+ ...ViewProps, // This is required.
14
+ exclusive: boolean,
15
+ foreground: boolean,
16
+ borderless: boolean,
17
+ enabled: boolean,
18
+ rippleColor: ColorValue,
19
+ rippleRadius: Int32,
20
+ |}>;
21
+
22
+ type ComponentType = HostComponent<NativeProps>;
23
+
24
+ export default (codegenNativeComponent<NativeProps>(
25
+ 'RNGestureHandlerButton',
26
+ {}
27
+ ): ComponentType);
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @flow strict-local
3
+ * @format
4
+ */
5
+ /* eslint-disable */
6
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
7
+ import type { HostComponent } from 'react-native';
8
+ import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';
9
+
10
+ type NativeProps = $ReadOnly<{|
11
+ ...ViewProps, // This is required.
12
+ |}>;
13
+
14
+ type ComponentType = HostComponent<NativeProps>;
15
+
16
+ export default (codegenNativeComponent<NativeProps>(
17
+ 'RNGestureHandlerRootView',
18
+ {}
19
+ ): ComponentType);
@@ -0,0 +1,19 @@
1
+ // Used by GestureDetector (unsupported on web at the moment) to check whether the
2
+ // attached view may get flattened on Fabric. This implementation causes errors
3
+ // on web due to the static resolution of `require` statements by webpack breaking
4
+ // the conditional importing. Solved by making .web file.
5
+ let findHostInstance_DEPRECATED = (_ref: any) => null;
6
+
7
+ try {
8
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
9
+ findHostInstance_DEPRECATED = require('react-native/Libraries/Renderer/shims/ReactFabric')
10
+ .findHostInstance_DEPRECATED;
11
+ } catch (e) {
12
+ // do nothing
13
+ }
14
+
15
+ export function getShadowNodeFromRef(ref: any) {
16
+ // @ts-ignore Fabric
17
+ return findHostInstance_DEPRECATED(ref)._internalInstanceHandle.stateNode
18
+ .node;
19
+ }
@@ -0,0 +1,7 @@
1
+ // Used by GestureDetector (unsupported on web at the moment) to check whether the
2
+ // attached view may get flattened on Fabric. Original implementation causes errors
3
+ // on web due to the static resolution of `require` statements by webpack breaking
4
+ // the conditional importing.
5
+ export function getShadowNodeFromRef(_ref: any) {
6
+ return null;
7
+ }
@@ -42,13 +42,15 @@ export interface FlingGestureHandlerProps
42
42
  extends BaseGestureHandlerProps<FlingGestureHandlerEventPayload>,
43
43
  FlingGestureConfig {}
44
44
 
45
+ export const flingHandlerName = 'FlingGestureHandler';
46
+
45
47
  export type FlingGestureHandler = typeof FlingGestureHandler;
46
48
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
47
49
  export const FlingGestureHandler = createHandler<
48
50
  FlingGestureHandlerProps,
49
51
  FlingGestureHandlerEventPayload
50
52
  >({
51
- name: 'FlingGestureHandler',
53
+ name: flingHandlerName,
52
54
  allowedProps: [
53
55
  ...baseGestureHandlerProps,
54
56
  ...flingGestureHandlerProps,
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { tagMessage } from '../utils';
2
3
  import PlatformConstants from '../PlatformConstants';
3
4
  import createHandler from './createHandler';
4
5
  import {
@@ -16,7 +17,9 @@ class ForceTouchFallback extends React.Component {
16
17
  static forceTouchAvailable = false;
17
18
  componentDidMount() {
18
19
  console.warn(
19
- 'ForceTouchGestureHandler is not available on this platform. Please use ForceTouchGestureHandler.forceTouchAvailable to conditionally render other components that would provide a fallback behavior specific to your usecase'
20
+ tagMessage(
21
+ 'ForceTouchGestureHandler is not available on this platform. Please use ForceTouchGestureHandler.forceTouchAvailable to conditionally render other components that would provide a fallback behavior specific to your usecase'
22
+ )
20
23
  );
21
24
  }
22
25
  render() {
@@ -64,13 +67,16 @@ export interface ForceTouchGestureHandlerProps
64
67
  export type ForceTouchGestureHandler = typeof ForceTouchGestureHandler & {
65
68
  forceTouchAvailable: boolean;
66
69
  };
70
+
71
+ export const forceTouchHandlerName = 'ForceTouchGestureHandler';
72
+
67
73
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
68
74
  export const ForceTouchGestureHandler = PlatformConstants?.forceTouchAvailable
69
75
  ? createHandler<
70
76
  ForceTouchGestureHandlerProps,
71
77
  ForceTouchGestureHandlerEventPayload
72
78
  >({
73
- name: 'ForceTouchGestureHandler',
79
+ name: forceTouchHandlerName,
74
80
  allowedProps: [
75
81
  ...baseGestureHandlerProps,
76
82
  ...forceTouchGestureHandlerProps,
@@ -27,7 +27,7 @@ export type LongPressGestureHandlerEventPayload = {
27
27
  /**
28
28
  * X coordinate, expressed in points, of the current position of the pointer
29
29
  * (finger or a leading pointer when there are multiple fingers placed)
30
- * relative to the root view. It is recommended to use `absoluteX` instead of
30
+ * relative to the window. It is recommended to use `absoluteX` instead of
31
31
  * `x` in cases when the view attached to the handler can be transformed as an
32
32
  * effect of the gesture.
33
33
  */
@@ -36,7 +36,7 @@ export type LongPressGestureHandlerEventPayload = {
36
36
  /**
37
37
  * Y coordinate, expressed in points, of the current position of the pointer
38
38
  * (finger or a leading pointer when there are multiple fingers placed)
39
- * relative to the root view. It is recommended to use `absoluteY` instead of
39
+ * relative to the window. It is recommended to use `absoluteY` instead of
40
40
  * `y` in cases when the view attached to the handler can be transformed as an
41
41
  * effect of the gesture.
42
42
  */
@@ -69,13 +69,15 @@ export interface LongPressGestureHandlerProps
69
69
  extends BaseGestureHandlerProps<LongPressGestureHandlerEventPayload>,
70
70
  LongPressGestureConfig {}
71
71
 
72
+ export const longPressHandlerName = 'LongPressGestureHandler';
73
+
72
74
  export type LongPressGestureHandler = typeof LongPressGestureHandler;
73
75
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
74
76
  export const LongPressGestureHandler = createHandler<
75
77
  LongPressGestureHandlerProps,
76
78
  LongPressGestureHandlerEventPayload
77
79
  >({
78
- name: 'LongPressGestureHandler',
80
+ name: longPressHandlerName,
79
81
  allowedProps: [
80
82
  ...baseGestureHandlerProps,
81
83
  ...longPressGestureHandlerProps,
@@ -41,13 +41,15 @@ export const nativeViewProps = [
41
41
  ...nativeViewGestureHandlerProps,
42
42
  ] as const;
43
43
 
44
+ export const nativeViewHandlerName = 'NativeViewGestureHandler';
45
+
44
46
  export type NativeViewGestureHandler = typeof NativeViewGestureHandler;
45
47
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
46
48
  export const NativeViewGestureHandler = createHandler<
47
49
  NativeViewGestureHandlerProps,
48
50
  NativeViewGestureHandlerPayload
49
51
  >({
50
- name: 'NativeViewGestureHandler',
52
+ name: nativeViewHandlerName,
51
53
  allowedProps: nativeViewProps,
52
54
  config: {},
53
55
  });
@@ -47,7 +47,7 @@ export type PanGestureHandlerEventPayload = {
47
47
 
48
48
  /**
49
49
  * X coordinate of the current position of the pointer (finger or a leading
50
- * pointer when there are multiple fingers placed) relative to the root view.
50
+ * pointer when there are multiple fingers placed) relative to the window.
51
51
  * The value is expressed in point units. It is recommended to use it instead
52
52
  * of `x` in cases when the original view can be transformed as an effect of
53
53
  * the gesture.
@@ -56,7 +56,7 @@ export type PanGestureHandlerEventPayload = {
56
56
 
57
57
  /**
58
58
  * Y coordinate of the current position of the pointer (finger or a leading
59
- * pointer when there are multiple fingers placed) relative to the root view.
59
+ * pointer when there are multiple fingers placed) relative to the window.
60
60
  * The value is expressed in point units. It is recommended to use it instead
61
61
  * of `y` in cases when the original view can be transformed as an
62
62
  * effect of the gesture.
@@ -181,13 +181,15 @@ export interface PanGestureHandlerProps
181
181
  failOffsetX?: number | number[];
182
182
  }
183
183
 
184
+ export const panHandlerName = 'PanGestureHandler';
185
+
184
186
  export type PanGestureHandler = typeof PanGestureHandler;
185
187
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
186
188
  export const PanGestureHandler = createHandler<
187
189
  PanGestureHandlerProps,
188
190
  PanGestureHandlerEventPayload
189
191
  >({
190
- name: 'PanGestureHandler',
192
+ name: panHandlerName,
191
193
  allowedProps: [
192
194
  ...baseGestureHandlerProps,
193
195
  ...panGestureHandlerProps,
@@ -34,13 +34,15 @@ export type PinchGestureHandlerEventPayload = {
34
34
  export interface PinchGestureHandlerProps
35
35
  extends BaseGestureHandlerProps<PinchGestureHandlerEventPayload> {}
36
36
 
37
+ export const pinchHandlerName = 'PinchGestureHandler';
38
+
37
39
  export type PinchGestureHandler = typeof PinchGestureHandler;
38
40
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
39
41
  export const PinchGestureHandler = createHandler<
40
42
  PinchGestureHandlerProps,
41
43
  PinchGestureHandlerEventPayload
42
44
  >({
43
- name: 'PinchGestureHandler',
45
+ name: pinchHandlerName,
44
46
  allowedProps: baseGestureHandlerProps,
45
47
  config: {},
46
48
  });
@@ -34,13 +34,15 @@ export type RotationGestureHandlerEventPayload = {
34
34
  export interface RotationGestureHandlerProps
35
35
  extends BaseGestureHandlerProps<RotationGestureHandlerEventPayload> {}
36
36
 
37
+ export const rotationHandlerName = 'RotationGestureHandler';
38
+
37
39
  export type RotationGestureHandler = typeof RotationGestureHandler;
38
40
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
39
41
  export const RotationGestureHandler = createHandler<
40
42
  RotationGestureHandlerProps,
41
43
  RotationGestureHandlerEventPayload
42
44
  >({
43
- name: 'RotationGestureHandler',
45
+ name: rotationHandlerName,
44
46
  allowedProps: baseGestureHandlerProps,
45
47
  config: {},
46
48
  });
@@ -75,13 +75,15 @@ export interface TapGestureHandlerProps
75
75
  extends BaseGestureHandlerProps<TapGestureHandlerEventPayload>,
76
76
  TapGestureConfig {}
77
77
 
78
+ export const tapHandlerName = 'TapGestureHandler';
79
+
78
80
  export type TapGestureHandler = typeof TapGestureHandler;
79
81
  // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file
80
82
  export const TapGestureHandler = createHandler<
81
83
  TapGestureHandlerProps,
82
84
  TapGestureHandlerEventPayload
83
85
  >({
84
- name: 'TapGestureHandler',
86
+ name: tapHandlerName,
85
87
  allowedProps: [
86
88
  ...baseGestureHandlerProps,
87
89
  ...tapGestureHandlerProps,
@@ -11,7 +11,11 @@ import deepEqual from 'lodash/isEqual';
11
11
  import RNGestureHandlerModule from '../RNGestureHandlerModule';
12
12
  import type RNGestureHandlerModuleWeb from '../RNGestureHandlerModule.web';
13
13
  import { State } from '../State';
14
- import { handlerIDToTag, getNextHandlerTag } from './handlersRegistry';
14
+ import {
15
+ handlerIDToTag,
16
+ getNextHandlerTag,
17
+ registerOldGestureHandler,
18
+ } from './handlersRegistry';
15
19
 
16
20
  import {
17
21
  BaseGestureHandlerProps,
@@ -21,14 +25,35 @@ import {
21
25
  findNodeHandle,
22
26
  } from './gestureHandlerCommon';
23
27
  import { ValueOf } from '../typeUtils';
28
+ import { isFabric, isJestEnv, tagMessage } from '../utils';
29
+ import { ActionType } from '../ActionType';
24
30
 
25
31
  const UIManagerAny = UIManager as any;
26
32
 
33
+ const customGHEventsConfigFabricAndroid = {
34
+ topOnGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },
35
+ topOnGestureHandlerStateChange: {
36
+ registrationName: 'onGestureHandlerStateChange',
37
+ },
38
+ };
39
+
27
40
  const customGHEventsConfig = {
28
41
  onGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },
29
42
  onGestureHandlerStateChange: {
30
43
  registrationName: 'onGestureHandlerStateChange',
31
44
  },
45
+
46
+ // When using React Native Gesture Handler for Animated.event with useNativeDriver: true
47
+ // on Android with Fabric enabled, the native part still sends the native events to JS
48
+ // but prefixed with "top". We cannot simply rename the events above so they are prefixed
49
+ // with "top" instead of "on" because in such case Animated.events would not be registered.
50
+ // That's why we need to register another pair of event names.
51
+ // The incoming events will be queued but never handled.
52
+ // Without this piece of code below, you'll get the following JS error:
53
+ // Unsupported top level event type "topOnGestureHandlerEvent" dispatched
54
+ ...(isFabric() &&
55
+ Platform.OS === 'android' &&
56
+ customGHEventsConfigFabricAndroid),
32
57
  };
33
58
 
34
59
  // Add gesture specific events to genericDirectEventTypes object exported from UIManager
@@ -122,6 +147,18 @@ type InternalEventHandlers = {
122
147
  onGestureHandlerStateChange?: (event: any) => void;
123
148
  };
124
149
 
150
+ let showedRngh2Notice = false;
151
+ function showRngh2NoticeIfNeeded() {
152
+ if (!showedRngh2Notice) {
153
+ console.warn(
154
+ tagMessage(
155
+ "Seems like you're using an old API with gesture components, check out new Gestures system!"
156
+ )
157
+ );
158
+ showedRngh2Notice = true;
159
+ }
160
+ }
161
+
125
162
  // TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.
126
163
  export default function createHandler<
127
164
  T extends BaseGestureHandlerProps<U>,
@@ -162,6 +199,9 @@ export default function createHandler<
162
199
  }
163
200
  handlerIDToTag[props.id] = this.handlerTag;
164
201
  }
202
+ if (__DEV__ && !isJestEnv()) {
203
+ showRngh2NoticeIfNeeded();
204
+ }
165
205
  }
166
206
 
167
207
  componentDidMount() {
@@ -224,7 +264,9 @@ export default function createHandler<
224
264
 
225
265
  private onGestureHandlerEvent = (event: GestureEvent<U>) => {
226
266
  if (event.nativeEvent.handlerTag === this.handlerTag) {
227
- this.props.onGestureEvent?.(event);
267
+ if (typeof this.props.onGestureEvent === 'function') {
268
+ this.props.onGestureEvent?.(event);
269
+ }
228
270
  } else {
229
271
  this.props.onGestureHandlerEvent?.(event);
230
272
  }
@@ -235,7 +277,9 @@ export default function createHandler<
235
277
  event: HandlerStateChangeEvent<U>
236
278
  ) => {
237
279
  if (event.nativeEvent.handlerTag === this.handlerTag) {
238
- this.props.onHandlerStateChange?.(event);
280
+ if (typeof this.props.onHandlerStateChange === 'function') {
281
+ this.props.onHandlerStateChange?.(event);
282
+ }
239
283
 
240
284
  const state: ValueOf<typeof State> = event.nativeEvent.state;
241
285
  const stateEventName = stateToPropMappings[state];
@@ -283,14 +327,38 @@ export default function createHandler<
283
327
  (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(
284
328
  this.handlerTag,
285
329
  newViewTag,
286
- false,
330
+ ActionType.JS_FUNCTION_OLD_API, // ignored on web
287
331
  this.propsRef
288
332
  );
289
333
  } else {
334
+ registerOldGestureHandler(this.handlerTag, {
335
+ onGestureEvent: this.onGestureHandlerEvent,
336
+ onGestureStateChange: this.onGestureHandlerStateChange,
337
+ });
338
+
339
+ const actionType = (() => {
340
+ if (
341
+ this.props?.onGestureEvent &&
342
+ 'current' in this.props.onGestureEvent
343
+ ) {
344
+ // Reanimated worklet
345
+ return ActionType.REANIMATED_WORKLET;
346
+ } else if (
347
+ this.props?.onGestureEvent &&
348
+ '__isNative' in this.props.onGestureEvent
349
+ ) {
350
+ // Animated.event with useNativeDriver: true
351
+ return ActionType.NATIVE_ANIMATED_EVENT;
352
+ } else {
353
+ // JS callback or Animated.event with useNativeDriver: false
354
+ return ActionType.JS_FUNCTION_OLD_API;
355
+ }
356
+ })();
357
+
290
358
  RNGestureHandlerModule.attachGestureHandler(
291
359
  this.handlerTag,
292
360
  newViewTag,
293
- false
361
+ actionType
294
362
  );
295
363
  }
296
364
  };
@@ -420,6 +488,13 @@ export default function createHandler<
420
488
  {
421
489
  ref: this.refHandler,
422
490
  collapsable: false,
491
+ ...(isJestEnv()
492
+ ? {
493
+ handlerType: name,
494
+ handlerTag: this.handlerTag,
495
+ }
496
+ : {}),
497
+ testID: this.props.testID,
423
498
  ...events,
424
499
  },
425
500
  grandChildren
@@ -68,7 +68,13 @@ export default function createNativeWrapper<P>(
68
68
  );
69
69
  });
70
70
 
71
- ComponentWrapper.displayName = Component.displayName || 'ComponentWrapper';
71
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
72
+ ComponentWrapper.displayName =
73
+ Component?.displayName ||
74
+ // @ts-ignore if render doesn't exist it will return undefined and go further
75
+ Component?.render?.name ||
76
+ (typeof Component === 'string' && Component) ||
77
+ 'ComponentWrapper';
72
78
 
73
79
  return ComponentWrapper;
74
80
  }
@@ -43,11 +43,7 @@ export interface GestureEventPayload {
43
43
  numberOfPointers: number;
44
44
  state: ValueOf<typeof State>;
45
45
  }
46
-
47
- export interface HandlerStateChangeEventPayload {
48
- handlerTag: number;
49
- numberOfPointers: number;
50
- state: ValueOf<typeof State>;
46
+ export interface HandlerStateChangeEventPayload extends GestureEventPayload {
51
47
  oldState: ValueOf<typeof State>;
52
48
  }
53
49
 
@@ -114,6 +110,7 @@ export type BaseGestureHandlerProps<
114
110
  id?: string;
115
111
  waitFor?: React.Ref<unknown> | React.Ref<unknown>[];
116
112
  simultaneousHandlers?: React.Ref<unknown> | React.Ref<unknown>[];
113
+ testID?: string;
117
114
  // TODO(TS) - fix event types
118
115
  onBegan?: (event: HandlerStateChangeEvent) => void;
119
116
  onFailed?: (event: HandlerStateChangeEvent) => void;