react-native-gesture-handler 2.2.0 → 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 +5 -1
  3. package/RNGestureHandler.podspec +27 -3
  4. package/android/build.gradle +81 -8
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +5 -1
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +14 -12
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +2 -4
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
  9. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
  10. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
  11. package/android/src/main/AndroidManifest.xml +1 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +29 -10
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +111 -47
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
  18. package/android/src/main/jni/Android.mk +53 -0
  19. package/android/src/main/jni/OnLoad.cpp +9 -0
  20. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
  21. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
  22. package/android/src/main/jni/cpp-adapter.cpp +41 -0
  23. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
  24. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
  25. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
  26. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
  27. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
  28. package/ios/Handlers/RNFlingHandler.m +2 -0
  29. package/ios/Handlers/RNPanHandler.m +2 -0
  30. package/ios/Handlers/RNPinchHandler.m +2 -0
  31. package/ios/Handlers/RNRotationHandler.m +2 -0
  32. package/ios/RNGestureHandler.h +3 -8
  33. package/ios/RNGestureHandler.m +2 -10
  34. package/ios/RNGestureHandlerActionType.h +8 -0
  35. package/ios/RNGestureHandlerButtonComponentView.h +17 -0
  36. package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
  37. package/ios/RNGestureHandlerButtonManager.h +5 -0
  38. package/ios/RNGestureHandlerButtonManager.m +30 -0
  39. package/ios/RNGestureHandlerManager.h +2 -4
  40. package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
  41. package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
  42. package/ios/RNGestureHandlerRegistry.h +1 -2
  43. package/ios/RNGestureHandlerRegistry.m +2 -11
  44. package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
  45. package/lib/commonjs/ActionType.js +15 -0
  46. package/lib/commonjs/ActionType.js.map +1 -0
  47. package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
  48. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  49. package/lib/commonjs/GestureHandlerRootView.js +2 -3
  50. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  51. package/lib/commonjs/RNGestureHandlerModule.js +4 -2
  52. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  53. package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
  54. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  55. package/lib/commonjs/components/DrawerLayout.js +2 -2
  56. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  57. package/lib/commonjs/components/GestureHandlerButton.js +5 -2
  58. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  59. package/lib/commonjs/components/Swipeable.js +22 -20
  60. package/lib/commonjs/components/Swipeable.js.map +1 -1
  61. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
  62. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  63. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
  64. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  65. package/lib/commonjs/getShadowNodeFromRef.js +24 -0
  66. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
  67. package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
  68. package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
  69. package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
  70. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  71. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
  72. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  73. package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
  74. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
  76. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
  78. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
  80. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
  82. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  83. package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
  84. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  85. package/lib/commonjs/handlers/createHandler.js +61 -9
  86. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  87. package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
  88. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  89. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  90. package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
  91. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  92. package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
  93. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  95. package/lib/commonjs/handlers/gestures/gesture.js +16 -1
  96. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  97. package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
  98. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  100. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  101. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
  102. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  103. package/lib/commonjs/handlers/handlersRegistry.js +42 -6
  104. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  105. package/lib/commonjs/index.js +14 -0
  106. package/lib/commonjs/index.js.map +1 -1
  107. package/lib/commonjs/init.js +10 -0
  108. package/lib/commonjs/init.js.map +1 -1
  109. package/lib/commonjs/jestUtils.js +375 -0
  110. package/lib/commonjs/jestUtils.js.map +1 -0
  111. package/lib/commonjs/utils.js +38 -0
  112. package/lib/commonjs/utils.js.map +1 -1
  113. package/lib/module/ActionType.js +7 -0
  114. package/lib/module/ActionType.js.map +1 -0
  115. package/lib/module/GestureHandlerRootView.android.js +5 -6
  116. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  117. package/lib/module/GestureHandlerRootView.js +2 -3
  118. package/lib/module/GestureHandlerRootView.js.map +1 -1
  119. package/lib/module/RNGestureHandlerModule.js +3 -2
  120. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  121. package/lib/module/RNGestureHandlerModule.web.js +1 -1
  122. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  123. package/lib/module/components/DrawerLayout.js +2 -2
  124. package/lib/module/components/DrawerLayout.js.map +1 -1
  125. package/lib/module/components/GestureHandlerButton.js +4 -2
  126. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  127. package/lib/module/components/Swipeable.js +22 -20
  128. package/lib/module/components/Swipeable.js.map +1 -1
  129. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
  130. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  131. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
  132. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  133. package/lib/module/getShadowNodeFromRef.js +17 -0
  134. package/lib/module/getShadowNodeFromRef.js.map +1 -0
  135. package/lib/module/getShadowNodeFromRef.web.js +8 -0
  136. package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
  137. package/lib/module/handlers/FlingGestureHandler.js +2 -1
  138. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  139. package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
  140. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  141. package/lib/module/handlers/LongPressGestureHandler.js +2 -1
  142. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  143. package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
  144. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  145. package/lib/module/handlers/PanGestureHandler.js +2 -1
  146. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  147. package/lib/module/handlers/PinchGestureHandler.js +2 -1
  148. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  149. package/lib/module/handlers/RotationGestureHandler.js +2 -1
  150. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  151. package/lib/module/handlers/TapGestureHandler.js +2 -1
  152. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  153. package/lib/module/handlers/createHandler.js +60 -10
  154. package/lib/module/handlers/createHandler.js.map +1 -1
  155. package/lib/module/handlers/createNativeWrapper.js +6 -2
  156. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  157. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  158. package/lib/module/handlers/gestures/GestureDetector.js +79 -32
  159. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  160. package/lib/module/handlers/gestures/eventReceiver.js +25 -7
  161. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  162. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  163. package/lib/module/handlers/gestures/gesture.js +16 -1
  164. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  165. package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
  166. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  167. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  168. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  169. package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
  170. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  171. package/lib/module/handlers/handlersRegistry.js +34 -6
  172. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  173. package/lib/module/index.js +1 -0
  174. package/lib/module/index.js.map +1 -1
  175. package/lib/module/init.js +6 -0
  176. package/lib/module/init.js.map +1 -1
  177. package/lib/module/jestUtils.js +350 -0
  178. package/lib/module/jestUtils.js.map +1 -0
  179. package/lib/module/utils.js +28 -0
  180. package/lib/module/utils.js.map +1 -1
  181. package/lib/typescript/ActionType.d.ts +7 -0
  182. package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
  183. package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
  184. package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
  185. package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
  186. package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
  187. package/lib/typescript/components/Swipeable.d.ts +12 -4
  188. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
  189. package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
  190. package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
  191. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
  192. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +1 -0
  193. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
  194. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -0
  195. package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
  196. package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
  197. package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
  198. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
  199. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
  200. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
  201. package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
  202. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
  203. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
  204. package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
  205. package/lib/typescript/index.d.ts +4 -0
  206. package/lib/typescript/jestUtils.d.ts +28 -0
  207. package/lib/typescript/utils.d.ts +6 -0
  208. package/lib/typescript/web/constants.d.ts +0 -1
  209. package/package.json +39 -16
  210. package/src/ActionType.ts +9 -0
  211. package/src/GestureHandlerRootView.android.tsx +14 -14
  212. package/src/GestureHandlerRootView.tsx +4 -4
  213. package/src/RNGestureHandlerModule.ts +11 -6
  214. package/src/RNGestureHandlerModule.web.ts +2 -1
  215. package/src/components/DrawerLayout.tsx +8 -2
  216. package/src/components/GestureHandlerButton.tsx +7 -4
  217. package/src/components/Swipeable.tsx +28 -22
  218. package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
  219. package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
  220. package/src/getShadowNodeFromRef.ts +19 -0
  221. package/src/getShadowNodeFromRef.web.ts +7 -0
  222. package/src/handlers/FlingGestureHandler.ts +3 -1
  223. package/src/handlers/ForceTouchGestureHandler.ts +8 -2
  224. package/src/handlers/LongPressGestureHandler.ts +3 -1
  225. package/src/handlers/NativeViewGestureHandler.ts +3 -1
  226. package/src/handlers/PanGestureHandler.ts +3 -1
  227. package/src/handlers/PinchGestureHandler.ts +3 -1
  228. package/src/handlers/RotationGestureHandler.ts +3 -1
  229. package/src/handlers/TapGestureHandler.ts +3 -1
  230. package/src/handlers/createHandler.ts +69 -7
  231. package/src/handlers/createNativeWrapper.tsx +7 -1
  232. package/src/handlers/gestureHandlerCommon.ts +2 -5
  233. package/src/handlers/gestures/GestureDetector.tsx +110 -37
  234. package/src/handlers/gestures/eventReceiver.ts +23 -19
  235. package/src/handlers/gestures/forceTouchGesture.ts +1 -1
  236. package/src/handlers/gestures/gesture.ts +21 -1
  237. package/src/handlers/gestures/gestureStateManager.ts +9 -12
  238. package/src/handlers/gestures/panGesture.ts +1 -1
  239. package/src/handlers/gestures/pinchGesture.ts +1 -1
  240. package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
  241. package/src/handlers/handlersRegistry.ts +44 -6
  242. package/src/index.ts +4 -0
  243. package/src/init.ts +6 -0
  244. package/src/jestUtils.ts +506 -0
  245. package/src/utils.ts +38 -0
  246. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
  247. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
  248. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
  249. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  250. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -7,32 +7,29 @@ import {
7
7
  GestureStateChangeEvent,
8
8
  } from '../gestureHandlerCommon';
9
9
  import { GestureStateManagerType } from './gestureStateManager';
10
- import { findHandler } from '../handlersRegistry';
10
+ import { findHandler, findOldGestureHandler } from '../handlersRegistry';
11
11
  import { BaseGesture } from './gesture';
12
+ import { tagMessage } from '../../utils';
12
13
 
13
14
  let gestureHandlerEventSubscription: EmitterSubscription | null = null;
14
15
  let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;
15
16
 
17
+ const warningMessage = tagMessage(
18
+ 'You have to use react-native-reanimated in order to control the state of the gesture.'
19
+ );
20
+
16
21
  const dummyStateManager: GestureStateManagerType = {
17
22
  begin: () => {
18
- console.warn(
19
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
20
- );
23
+ console.warn(warningMessage);
21
24
  },
22
25
  activate: () => {
23
- console.warn(
24
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
25
- );
26
+ console.warn(warningMessage);
26
27
  },
27
28
  end: () => {
28
- console.warn(
29
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
30
- );
29
+ console.warn(warningMessage);
31
30
  },
32
31
  fail: () => {
33
- console.warn(
34
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
35
- );
32
+ console.warn(warningMessage);
36
33
  },
37
34
  };
38
35
 
@@ -117,6 +114,17 @@ function onGestureHandlerEvent(
117
114
  lastUpdateEvent[handler.handlers.handlerTag] = event;
118
115
  }
119
116
  }
117
+ } else {
118
+ const oldHandler = findOldGestureHandler(event.handlerTag);
119
+ if (oldHandler) {
120
+ const nativeEvent = { nativeEvent: event };
121
+ if (isStateChangeEvent(event)) {
122
+ oldHandler.onGestureStateChange(nativeEvent);
123
+ } else {
124
+ oldHandler.onGestureEvent(nativeEvent);
125
+ }
126
+ return;
127
+ }
120
128
  }
121
129
  }
122
130
 
@@ -136,16 +144,12 @@ export function startListening() {
136
144
 
137
145
  export function stopListening() {
138
146
  if (gestureHandlerEventSubscription) {
139
- DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);
140
-
147
+ gestureHandlerEventSubscription.remove();
141
148
  gestureHandlerEventSubscription = null;
142
149
  }
143
150
 
144
151
  if (gestureHandlerStateChangeEventSubscription) {
145
- DeviceEventEmitter.removeSubscription(
146
- gestureHandlerStateChangeEventSubscription
147
- );
148
-
152
+ gestureHandlerStateChangeEventSubscription.remove();
149
153
  gestureHandlerStateChangeEventSubscription = null;
150
154
  }
151
155
  }
@@ -5,7 +5,7 @@ import {
5
5
  } from '../ForceTouchGestureHandler';
6
6
  import { GestureUpdateEvent } from '../gestureHandlerCommon';
7
7
 
8
- type ForceTouchGestureChangeEventPayload = {
8
+ export type ForceTouchGestureChangeEventPayload = {
9
9
  forceChange: number;
10
10
  };
11
11
 
@@ -41,6 +41,8 @@ export interface BaseGestureConfig
41
41
  simultaneousWith?: GestureRef[];
42
42
  needsPointerData?: boolean;
43
43
  manualActivation?: boolean;
44
+ runOnJS?: boolean;
45
+ testId?: string;
44
46
  }
45
47
 
46
48
  type TouchEventHandlerType = (
@@ -119,7 +121,7 @@ export abstract class BaseGesture<
119
121
  public config: BaseGestureConfig = {};
120
122
  public handlers: HandlerCallbacks<EventPayloadT> = {
121
123
  handlerTag: -1,
122
- isWorklet: [false, false, false, false],
124
+ isWorklet: [],
123
125
  };
124
126
 
125
127
  private addDependency(
@@ -234,6 +236,11 @@ export abstract class BaseGesture<
234
236
  return this;
235
237
  }
236
238
 
239
+ runOnJS(runOnJS: boolean) {
240
+ this.config.runOnJS = runOnJS;
241
+ return this;
242
+ }
243
+
237
244
  simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {
238
245
  for (const gesture of gestures) {
239
246
  this.addDependency('simultaneousWith', gesture);
@@ -248,8 +255,14 @@ export abstract class BaseGesture<
248
255
  return this;
249
256
  }
250
257
 
258
+ withTestId(id: string) {
259
+ this.config.testId = id;
260
+ return this;
261
+ }
262
+
251
263
  initialize() {
252
264
  this.handlerTag = getNextHandlerTag();
265
+
253
266
  this.handlers = { ...this.handlers, handlerTag: this.handlerTag };
254
267
 
255
268
  if (this.config.ref) {
@@ -263,6 +276,13 @@ export abstract class BaseGesture<
263
276
 
264
277
  // eslint-disable-next-line @typescript-eslint/no-empty-function
265
278
  prepare() {}
279
+
280
+ get shouldUseReanimated(): boolean {
281
+ // use Reanimated when runOnJS isn't set explicitly and all defined callbacks are worklets
282
+ return (
283
+ this.config.runOnJS !== true && !this.handlers.isWorklet.includes(false)
284
+ );
285
+ }
266
286
  }
267
287
 
268
288
  export abstract class ContinousBaseGesture<
@@ -1,5 +1,6 @@
1
1
  import { Reanimated } from './reanimatedWrapper';
2
2
  import { State } from '../../State';
3
+ import { tagMessage } from '../../utils';
3
4
 
4
5
  export interface GestureStateManagerType {
5
6
  begin: () => void;
@@ -8,6 +9,10 @@ export interface GestureStateManagerType {
8
9
  end: () => void;
9
10
  }
10
11
 
12
+ const warningMessage = tagMessage(
13
+ 'react-native-reanimated is required in order to use synchronous state management'
14
+ );
15
+
11
16
  export const GestureStateManager = {
12
17
  create(handlerTag: number): GestureStateManagerType {
13
18
  'worklet';
@@ -17,9 +22,7 @@ export const GestureStateManager = {
17
22
  if (Reanimated) {
18
23
  Reanimated.setGestureState(handlerTag, State.BEGAN);
19
24
  } else {
20
- console.warn(
21
- 'react-native-reanimated is required in order to use synchronous state management'
22
- );
25
+ console.warn(warningMessage);
23
26
  }
24
27
  },
25
28
 
@@ -28,9 +31,7 @@ export const GestureStateManager = {
28
31
  if (Reanimated) {
29
32
  Reanimated.setGestureState(handlerTag, State.ACTIVE);
30
33
  } else {
31
- console.warn(
32
- 'react-native-reanimated is required in order to use synchronous state management'
33
- );
34
+ console.warn(warningMessage);
34
35
  }
35
36
  },
36
37
 
@@ -39,9 +40,7 @@ export const GestureStateManager = {
39
40
  if (Reanimated) {
40
41
  Reanimated.setGestureState(handlerTag, State.FAILED);
41
42
  } else {
42
- console.warn(
43
- 'react-native-reanimated is required in order to use synchronous state management'
44
- );
43
+ console.warn(warningMessage);
45
44
  }
46
45
  },
47
46
 
@@ -50,9 +49,7 @@ export const GestureStateManager = {
50
49
  if (Reanimated) {
51
50
  Reanimated.setGestureState(handlerTag, State.END);
52
51
  } else {
53
- console.warn(
54
- 'react-native-reanimated is required in order to use synchronous state management'
55
- );
52
+ console.warn(warningMessage);
56
53
  }
57
54
  },
58
55
  };
@@ -5,7 +5,7 @@ import {
5
5
  PanGestureHandlerEventPayload,
6
6
  } from '../PanGestureHandler';
7
7
 
8
- type PanGestureChangeEventPayload = {
8
+ export type PanGestureChangeEventPayload = {
9
9
  changeX: number;
10
10
  changeY: number;
11
11
  };
@@ -2,7 +2,7 @@ import { ContinousBaseGesture } from './gesture';
2
2
  import { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';
3
3
  import { GestureUpdateEvent } from '../gestureHandlerCommon';
4
4
 
5
- type PinchGestureChangeEventPayload = {
5
+ export type PinchGestureChangeEventPayload = {
6
6
  scaleChange: number;
7
7
  };
8
8
 
@@ -3,6 +3,7 @@ import {
3
3
  GestureUpdateEvent,
4
4
  GestureStateChangeEvent,
5
5
  } from '../gestureHandlerCommon';
6
+ import { tagMessage } from '../../utils';
6
7
 
7
8
  export interface SharedValue<T> {
8
9
  value: T;
@@ -33,7 +34,9 @@ try {
33
34
  Reanimated.setGestureState = () => {
34
35
  'worklet';
35
36
  console.warn(
36
- 'Please use newer version of react-native-reanimated in order to control state of the gestures.'
37
+ tagMessage(
38
+ 'Please use newer version of react-native-reanimated in order to control state of the gestures.'
39
+ )
37
40
  );
38
41
  };
39
42
  }
@@ -1,7 +1,11 @@
1
+ import { isJestEnv } from '../utils';
1
2
  import { GestureType } from './gestures/gesture';
3
+ import { GestureEvent, HandlerStateChangeEvent } from './gestureHandlerCommon';
2
4
 
3
5
  export const handlerIDToTag: Record<string, number> = {};
4
- const handlers = new Map<number, GestureType>();
6
+ const gestures = new Map<number, GestureType>();
7
+ const oldHandlers = new Map<number, GestureHandlerCallbacks>();
8
+ const testIDs = new Map<string, number>();
5
9
 
6
10
  let handlerTag = 1;
7
11
 
@@ -9,14 +13,48 @@ export function getNextHandlerTag(): number {
9
13
  return handlerTag++;
10
14
  }
11
15
 
12
- export function registerHandler(handlerTag: number, handler: GestureType) {
13
- handlers.set(handlerTag, handler);
16
+ export function registerHandler(
17
+ handlerTag: number,
18
+ handler: GestureType,
19
+ testID?: string
20
+ ) {
21
+ gestures.set(handlerTag, handler);
22
+ if (isJestEnv() && testID) {
23
+ testIDs.set(testID, handlerTag);
24
+ }
14
25
  }
15
26
 
16
- export function unregisterHandler(handlerTag: number) {
17
- handlers.delete(handlerTag);
27
+ export function registerOldGestureHandler(
28
+ handlerTag: number,
29
+ handler: GestureHandlerCallbacks
30
+ ) {
31
+ oldHandlers.set(handlerTag, handler);
32
+ }
33
+
34
+ export function unregisterHandler(handlerTag: number, testID?: string) {
35
+ gestures.delete(handlerTag);
36
+ if (isJestEnv() && testID) {
37
+ testIDs.delete(testID);
38
+ }
18
39
  }
19
40
 
20
41
  export function findHandler(handlerTag: number) {
21
- return handlers.get(handlerTag);
42
+ return gestures.get(handlerTag);
43
+ }
44
+
45
+ export function findOldGestureHandler(handlerTag: number) {
46
+ return oldHandlers.get(handlerTag);
47
+ }
48
+
49
+ export function findHandlerByTestID(testID: string) {
50
+ const handlerTag = testIDs.get(testID);
51
+ if (handlerTag !== undefined) {
52
+ return findHandler(handlerTag) ?? null;
53
+ }
54
+ return null;
55
+ }
56
+
57
+ export interface GestureHandlerCallbacks {
58
+ onGestureEvent: (event: GestureEvent<any>) => void;
59
+ onGestureStateChange: (event: HandlerStateChangeEvent<any>) => void;
22
60
  }
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@ import { initialize } from './init';
2
2
 
3
3
  export { Directions } from './Directions';
4
4
  export { State } from './State';
5
+ export { getByGestureTestId, fireGestureHandler } from './jestUtils';
5
6
  export { default as gestureHandlerRootHOC } from './gestureHandlerRootHOC';
6
7
  export { default as GestureHandlerRootView } from './GestureHandlerRootView';
7
8
  export type {
@@ -27,6 +28,7 @@ export type {
27
28
  ForceTouchGestureHandlerEventPayload,
28
29
  ForceTouchGestureHandlerProps,
29
30
  } from './handlers/ForceTouchGestureHandler';
31
+ export type { ForceTouchGestureChangeEventPayload } from './handlers/gestures/forceTouchGesture';
30
32
  export type {
31
33
  LongPressGestureHandlerEventPayload,
32
34
  LongPressGestureHandlerProps,
@@ -35,10 +37,12 @@ export type {
35
37
  PanGestureHandlerEventPayload,
36
38
  PanGestureHandlerProps,
37
39
  } from './handlers/PanGestureHandler';
40
+ export type { PanGestureChangeEventPayload } from './handlers/gestures/panGesture';
38
41
  export type {
39
42
  PinchGestureHandlerEventPayload,
40
43
  PinchGestureHandlerProps,
41
44
  } from './handlers/PinchGestureHandler';
45
+ export type { PinchGestureChangeEventPayload } from './handlers/gestures/pinchGesture';
42
46
  export type {
43
47
  RotationGestureHandlerEventPayload,
44
48
  RotationGestureHandlerProps,
package/src/init.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  import { startListening } from './handlers/gestures/eventReceiver';
2
+ import RNGestureHandlerModule from './RNGestureHandlerModule';
3
+ import { isFabric } from './utils';
2
4
 
3
5
  export function initialize() {
4
6
  startListening();
7
+
8
+ if (isFabric()) {
9
+ RNGestureHandlerModule.install();
10
+ }
5
11
  }