react-native-gesture-handler 2.2.0 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) 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 +40 -13
  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/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  35. package/ios/RNGestureHandlerActionType.h +8 -0
  36. package/ios/RNGestureHandlerButtonComponentView.h +17 -0
  37. package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
  38. package/ios/RNGestureHandlerButtonManager.h +5 -0
  39. package/ios/RNGestureHandlerButtonManager.m +30 -0
  40. package/ios/RNGestureHandlerManager.h +2 -4
  41. package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
  42. package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
  43. package/ios/RNGestureHandlerRegistry.h +1 -2
  44. package/ios/RNGestureHandlerRegistry.m +2 -11
  45. package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
  46. package/jest-utils/package.json +6 -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/components/touchables/TouchableOpacity.js +3 -1
  64. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  65. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
  66. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  67. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
  68. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  69. package/lib/commonjs/getShadowNodeFromRef.js +24 -0
  70. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
  71. package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
  72. package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
  73. package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
  74. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
  76. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
  78. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
  80. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
  82. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  83. package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
  84. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  85. package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
  86. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  87. package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
  88. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  89. package/lib/commonjs/handlers/createHandler.js +63 -9
  90. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  91. package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
  92. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  93. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
  95. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  96. package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
  97. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  98. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/gesture.js +16 -1
  100. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  101. package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
  102. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  103. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  104. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  105. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
  106. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  107. package/lib/commonjs/handlers/handlersRegistry.js +42 -6
  108. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  109. package/lib/commonjs/index.js.map +1 -1
  110. package/lib/commonjs/init.js +10 -0
  111. package/lib/commonjs/init.js.map +1 -1
  112. package/lib/commonjs/jestUtils/index.js +20 -0
  113. package/lib/commonjs/jestUtils/index.js.map +1 -0
  114. package/lib/commonjs/jestUtils/jestUtils.js +375 -0
  115. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -0
  116. package/lib/commonjs/utils.js +38 -0
  117. package/lib/commonjs/utils.js.map +1 -1
  118. package/lib/module/ActionType.js +7 -0
  119. package/lib/module/ActionType.js.map +1 -0
  120. package/lib/module/GestureHandlerRootView.android.js +5 -6
  121. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  122. package/lib/module/GestureHandlerRootView.js +2 -3
  123. package/lib/module/GestureHandlerRootView.js.map +1 -1
  124. package/lib/module/RNGestureHandlerModule.js +3 -2
  125. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  126. package/lib/module/RNGestureHandlerModule.web.js +1 -1
  127. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  128. package/lib/module/components/DrawerLayout.js +2 -2
  129. package/lib/module/components/DrawerLayout.js.map +1 -1
  130. package/lib/module/components/GestureHandlerButton.js +4 -2
  131. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  132. package/lib/module/components/Swipeable.js +22 -20
  133. package/lib/module/components/Swipeable.js.map +1 -1
  134. package/lib/module/components/touchables/TouchableOpacity.js +4 -2
  135. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  136. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
  137. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  138. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
  139. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  140. package/lib/module/getShadowNodeFromRef.js +17 -0
  141. package/lib/module/getShadowNodeFromRef.js.map +1 -0
  142. package/lib/module/getShadowNodeFromRef.web.js +8 -0
  143. package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
  144. package/lib/module/handlers/FlingGestureHandler.js +2 -1
  145. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  146. package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
  147. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  148. package/lib/module/handlers/LongPressGestureHandler.js +2 -1
  149. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  150. package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
  151. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  152. package/lib/module/handlers/PanGestureHandler.js +2 -1
  153. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  154. package/lib/module/handlers/PinchGestureHandler.js +2 -1
  155. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  156. package/lib/module/handlers/RotationGestureHandler.js +2 -1
  157. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  158. package/lib/module/handlers/TapGestureHandler.js +2 -1
  159. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  160. package/lib/module/handlers/createHandler.js +62 -10
  161. package/lib/module/handlers/createHandler.js.map +1 -1
  162. package/lib/module/handlers/createNativeWrapper.js +6 -2
  163. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  164. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  165. package/lib/module/handlers/gestures/GestureDetector.js +79 -32
  166. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  167. package/lib/module/handlers/gestures/eventReceiver.js +25 -7
  168. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  169. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  170. package/lib/module/handlers/gestures/gesture.js +16 -1
  171. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  172. package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
  173. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  174. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  175. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  176. package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
  177. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  178. package/lib/module/handlers/handlersRegistry.js +34 -6
  179. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  180. package/lib/module/index.js.map +1 -1
  181. package/lib/module/init.js +6 -0
  182. package/lib/module/init.js.map +1 -1
  183. package/lib/module/jestUtils/index.js +2 -0
  184. package/lib/module/jestUtils/index.js.map +1 -0
  185. package/lib/module/jestUtils/jestUtils.js +350 -0
  186. package/lib/module/jestUtils/jestUtils.js.map +1 -0
  187. package/lib/module/utils.js +28 -0
  188. package/lib/module/utils.js.map +1 -1
  189. package/lib/typescript/ActionType.d.ts +7 -0
  190. package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
  191. package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
  192. package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
  193. package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
  194. package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
  195. package/lib/typescript/components/Swipeable.d.ts +12 -4
  196. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +5 -1
  197. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
  198. package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
  199. package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
  200. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
  201. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +1 -0
  202. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
  203. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -0
  204. package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
  205. package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
  206. package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
  207. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
  208. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
  209. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
  210. package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
  211. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
  212. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
  213. package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
  214. package/lib/typescript/index.d.ts +3 -0
  215. package/lib/typescript/jestUtils/index.d.ts +1 -0
  216. package/lib/typescript/jestUtils/jestUtils.d.ts +28 -0
  217. package/lib/typescript/utils.d.ts +6 -0
  218. package/lib/typescript/web/constants.d.ts +0 -1
  219. package/package.json +40 -16
  220. package/src/ActionType.ts +9 -0
  221. package/src/GestureHandlerRootView.android.tsx +14 -14
  222. package/src/GestureHandlerRootView.tsx +4 -4
  223. package/src/RNGestureHandlerModule.ts +11 -6
  224. package/src/RNGestureHandlerModule.web.ts +2 -1
  225. package/src/components/DrawerLayout.tsx +8 -2
  226. package/src/components/GestureHandlerButton.tsx +7 -4
  227. package/src/components/Swipeable.tsx +28 -22
  228. package/src/components/touchables/TouchableOpacity.tsx +6 -2
  229. package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
  230. package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
  231. package/src/getShadowNodeFromRef.ts +19 -0
  232. package/src/getShadowNodeFromRef.web.ts +7 -0
  233. package/src/handlers/FlingGestureHandler.ts +3 -1
  234. package/src/handlers/ForceTouchGestureHandler.ts +8 -2
  235. package/src/handlers/LongPressGestureHandler.ts +3 -1
  236. package/src/handlers/NativeViewGestureHandler.ts +3 -1
  237. package/src/handlers/PanGestureHandler.ts +3 -1
  238. package/src/handlers/PinchGestureHandler.ts +3 -1
  239. package/src/handlers/RotationGestureHandler.ts +3 -1
  240. package/src/handlers/TapGestureHandler.ts +3 -1
  241. package/src/handlers/createHandler.ts +69 -7
  242. package/src/handlers/createNativeWrapper.tsx +7 -1
  243. package/src/handlers/gestureHandlerCommon.ts +2 -5
  244. package/src/handlers/gestures/GestureDetector.tsx +110 -37
  245. package/src/handlers/gestures/eventReceiver.ts +23 -19
  246. package/src/handlers/gestures/forceTouchGesture.ts +1 -1
  247. package/src/handlers/gestures/gesture.ts +21 -1
  248. package/src/handlers/gestures/gestureStateManager.ts +9 -12
  249. package/src/handlers/gestures/panGesture.ts +1 -1
  250. package/src/handlers/gestures/pinchGesture.ts +1 -1
  251. package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
  252. package/src/handlers/handlersRegistry.ts +44 -6
  253. package/src/index.ts +3 -0
  254. package/src/init.ts +6 -0
  255. package/src/jestUtils/index.ts +1 -0
  256. package/src/jestUtils/jestUtils.ts +506 -0
  257. package/src/utils.ts +38 -0
  258. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
  259. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
  260. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
@@ -0,0 +1,47 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.ColorPropConverter;
15
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
+ import com.facebook.react.uimanager.BaseViewManagerInterface;
17
+
18
+ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & RNGestureHandlerButtonManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
19
+ public RNGestureHandlerButtonManagerDelegate(U viewManager) {
20
+ super(viewManager);
21
+ }
22
+ @Override
23
+ public void setProperty(T view, String propName, @Nullable Object value) {
24
+ switch (propName) {
25
+ case "exclusive":
26
+ mViewManager.setExclusive(view, value == null ? false : (boolean) value);
27
+ break;
28
+ case "foreground":
29
+ mViewManager.setForeground(view, value == null ? false : (boolean) value);
30
+ break;
31
+ case "borderless":
32
+ mViewManager.setBorderless(view, value == null ? false : (boolean) value);
33
+ break;
34
+ case "enabled":
35
+ mViewManager.setEnabled(view, value == null ? false : (boolean) value);
36
+ break;
37
+ case "rippleColor":
38
+ mViewManager.setRippleColor(view, ColorPropConverter.getColor(value, view.getContext()));
39
+ break;
40
+ case "rippleRadius":
41
+ mViewManager.setRippleRadius(view, value == null ? 0 : ((Double) value).intValue());
42
+ break;
43
+ default:
44
+ super.setProperty(view, propName, value);
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaInterface.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+
15
+ public interface RNGestureHandlerButtonManagerInterface<T extends View> {
16
+ void setExclusive(T view, boolean value);
17
+ void setForeground(T view, boolean value);
18
+ void setBorderless(T view, boolean value);
19
+ void setEnabled(T view, boolean value);
20
+ void setRippleColor(T view, @Nullable Integer value);
21
+ void setRippleRadius(T view, int value);
22
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
15
+ import com.facebook.react.uimanager.BaseViewManagerInterface;
16
+
17
+ public class RNGestureHandlerRootViewManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & RNGestureHandlerRootViewManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
18
+ public RNGestureHandlerRootViewManagerDelegate(U viewManager) {
19
+ super(viewManager);
20
+ }
21
+ @Override
22
+ public void setProperty(T view, String propName, @Nullable Object value) {
23
+ super.setProperty(view, propName, value);
24
+ }
25
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaInterface.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+
14
+ public interface RNGestureHandlerRootViewManagerInterface<T extends View> {
15
+ // No props
16
+ }
@@ -0,0 +1,13 @@
1
+ package com.swmansion.gesturehandler
2
+
3
+ import com.facebook.react.bridge.ReactContext
4
+ import com.facebook.react.uimanager.UIManagerModule
5
+ import com.facebook.react.uimanager.events.Event
6
+
7
+ fun ReactContext.dispatchEvent(event: Event<*>) {
8
+ try {
9
+ this.getNativeModule(UIManagerModule::class.java)!!.eventDispatcher.dispatchEvent(event)
10
+ } catch (e: NullPointerException) {
11
+ throw Exception("Couldn't get an instance of UIManagerModule. Gesture Handler is unable to send an event.", e)
12
+ }
13
+ }
@@ -72,7 +72,9 @@
72
72
  [super resetConfig];
73
73
  UISwipeGestureRecognizer *recognizer = (UISwipeGestureRecognizer *)_recognizer;
74
74
  recognizer.direction = UISwipeGestureRecognizerDirectionRight;
75
+ #if !TARGET_OS_TV
75
76
  recognizer.numberOfTouchesRequired = 1;
77
+ #endif
76
78
  }
77
79
 
78
80
  - (void)configure:(NSDictionary *)config
@@ -236,8 +236,10 @@
236
236
  recognizer.allowedScrollTypesMask = 0;
237
237
  }
238
238
  #endif
239
+ #if !TARGET_OS_TV
239
240
  recognizer.minimumNumberOfTouches = 1;
240
241
  recognizer.maximumNumberOfTouches = NSUIntegerMax;
242
+ #endif
241
243
  recognizer.minDistSq = NAN;
242
244
  recognizer.minVelocitySq = NAN;
243
245
  }
@@ -10,6 +10,7 @@
10
10
 
11
11
  #import "RNPinchHandler.h"
12
12
 
13
+ #if !TARGET_OS_TV
13
14
  @interface RNBetterPinchRecognizer : UIPinchGestureRecognizer
14
15
 
15
16
  - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
@@ -67,6 +68,7 @@
67
68
  }
68
69
 
69
70
  @end
71
+ #endif
70
72
 
71
73
  @implementation RNPinchGestureHandler
72
74
 
@@ -8,6 +8,7 @@
8
8
 
9
9
  #import "RNRotationHandler.h"
10
10
 
11
+ #if !TARGET_OS_TV
11
12
  @interface RNBetterRotationRecognizer : UIRotationGestureRecognizer
12
13
 
13
14
  - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
@@ -66,6 +67,7 @@
66
67
  }
67
68
 
68
69
  @end
70
+ #endif
69
71
 
70
72
  @implementation RNRotationGestureHandler
71
73
 
@@ -1,3 +1,4 @@
1
+ #import "RNGestureHandlerActionType.h"
1
2
  #import "RNGestureHandlerState.h"
2
3
  #import "RNGestureHandlerDirection.h"
3
4
  #import "RNGestureHandlerEvents.h"
@@ -25,13 +26,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\
25
26
 
26
27
  @protocol RNGestureHandlerEventEmitter
27
28
 
28
- - (void)sendTouchEvent:(nonnull RNGestureHandlerEvent *)event;
29
-
30
- - (void)sendStateChangeEvent:(nonnull RNGestureHandlerStateChange *)event;
31
-
32
- - (void)sendTouchDeviceEvent:(nonnull RNGestureHandlerEvent *)event;
33
-
34
- - (void)sendStateChangeDeviceEvent:(nonnull RNGestureHandlerStateChange *)event;
29
+ - (void)sendStateChangeEvent:(nonnull RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType;
35
30
 
36
31
  @end
37
32
 
@@ -60,7 +55,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\
60
55
  @property (nonatomic, readonly, nullable) UIGestureRecognizer *recognizer;
61
56
  @property (nonatomic, readonly, nullable) RNGestureHandlerPointerTracker *pointerTracker;
62
57
  @property (nonatomic) BOOL enabled;
63
- @property (nonatomic) BOOL usesDeviceEvents;
58
+ @property (nonatomic) RNGestureHandlerActionType actionType;
64
59
  @property (nonatomic) BOOL shouldCancelWhenOutside;
65
60
  @property (nonatomic) BOOL needsPointerData;
66
61
  @property (nonatomic) BOOL manualActivation;
@@ -236,11 +236,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
236
236
 
237
237
  - (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event
238
238
  {
239
- if (self.usesDeviceEvents) {
240
- [self.emitter sendStateChangeDeviceEvent:event];
241
- } else {
242
- [self.emitter sendStateChangeEvent:event];
243
- }
239
+ [self.emitter sendStateChangeEvent:event withActionType:self.actionType];
244
240
  }
245
241
 
246
242
  - (void)sendTouchEventInState:(RNGestureHandlerState)state
@@ -252,11 +248,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
252
248
  withNumberOfTouches:_pointerTracker.trackedPointersCount];
253
249
  id event = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag handlerTag:_tag state:state extraData:extraData coalescingKey:[_tag intValue]];
254
250
 
255
- if (self.usesDeviceEvents) {
256
- [self.emitter sendStateChangeDeviceEvent:event];
257
- } else {
258
- [self.emitter sendStateChangeEvent:event];
259
- }
251
+ [self.emitter sendStateChangeEvent:event withActionType:self.actionType];
260
252
  }
261
253
 
262
254
  - (RNGestureHandlerState)recognizerState
@@ -0,0 +1,8 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ typedef NS_ENUM(NSInteger, RNGestureHandlerActionType) {
4
+ RNGestureHandlerActionTypeReanimatedWorklet = 1, // Reanimated worklet
5
+ RNGestureHandlerActionTypeNativeAnimatedEvent, // Animated.event with useNativeDriver: true
6
+ RNGestureHandlerActionTypeJSFunctionOldAPI, // JS function or Animated.event with useNativeDriver: false using old RNGH API
7
+ RNGestureHandlerActionTypeJSFunctionNewAPI, // JS function or Animated.event with useNativeDriver: false using new RNGH API
8
+ };
@@ -0,0 +1,17 @@
1
+ #ifdef RN_FABRIC_ENABLED
2
+
3
+ #import <UIKit/UIKit.h>
4
+
5
+ #import <React/RCTViewComponentView.h>
6
+
7
+ #import "RNGestureHandlerButton.h"
8
+
9
+ NS_ASSUME_NONNULL_BEGIN
10
+
11
+ @interface RNGestureHandlerButtonComponentView : RCTViewComponentView
12
+
13
+ @end
14
+
15
+ NS_ASSUME_NONNULL_END
16
+
17
+ #endif // RN_FABRIC_ENABLED
@@ -0,0 +1,48 @@
1
+ #ifdef RN_FABRIC_ENABLED
2
+
3
+ #import "RNGestureHandlerButtonComponentView.h"
4
+
5
+ #import <React/RCTConversions.h>
6
+
7
+ #import <react/renderer/components/rngesturehandler/ComponentDescriptors.h>
8
+ #import <react/renderer/components/rngesturehandler/EventEmitters.h>
9
+ #import <react/renderer/components/rngesturehandler/Props.h>
10
+ #import <react/renderer/components/rngesturehandler/RCTComponentViewHelpers.h>
11
+
12
+ #import "RCTFabricComponentsPlugins.h"
13
+ #import "RNGestureHandlerButton.h"
14
+
15
+ using namespace facebook::react;
16
+
17
+ @interface RNGestureHandlerButtonComponentView () <RCTRNGestureHandlerButtonViewProtocol>
18
+ @end
19
+
20
+ @implementation RNGestureHandlerButtonComponentView
21
+
22
+ - (instancetype)initWithFrame:(CGRect)frame
23
+ {
24
+ if (self = [super initWithFrame:frame]) {
25
+ static const auto defaultProps = std::make_shared<const RNGestureHandlerButtonProps>();
26
+ _props = defaultProps;
27
+
28
+ self.contentView = [[RNGestureHandlerButton alloc] initWithFrame:self.bounds];
29
+ }
30
+
31
+ return self;
32
+ }
33
+
34
+ #pragma mark - RCTComponentViewProtocol
35
+
36
+ + (ComponentDescriptorProvider)componentDescriptorProvider
37
+ {
38
+ return concreteComponentDescriptorProvider<RNGestureHandlerButtonComponentDescriptor>();
39
+ }
40
+
41
+ @end
42
+
43
+ Class<RCTComponentViewProtocol> RNGestureHandlerButtonCls(void)
44
+ {
45
+ return RNGestureHandlerButtonComponentView.class;
46
+ }
47
+
48
+ #endif // RN_FABRIC_ENABLED
@@ -0,0 +1,5 @@
1
+ #import <React/RCTViewManager.h>
2
+
3
+ @interface RNGestureHandlerButtonManager : RCTViewManager
4
+
5
+ @end
@@ -0,0 +1,30 @@
1
+ #import "RNGestureHandlerButton.h"
2
+ #import "RNGestureHandlerButtonManager.h"
3
+
4
+ @implementation RNGestureHandlerButtonManager
5
+
6
+ RCT_EXPORT_MODULE(RNGestureHandlerButton)
7
+
8
+ RCT_EXPORT_VIEW_PROPERTY(enabled, BOOL)
9
+ #if !TARGET_OS_TV
10
+ RCT_CUSTOM_VIEW_PROPERTY(exclusive, BOOL, RNGestureHandlerButton)
11
+ {
12
+ [view setExclusiveTouch: json == nil ? YES : [RCTConvert BOOL: json]];
13
+ }
14
+ #endif
15
+ RCT_CUSTOM_VIEW_PROPERTY(hitSlop, UIEdgeInsets, RNGestureHandlerButton)
16
+ {
17
+ if (json) {
18
+ UIEdgeInsets hitSlopInsets = [RCTConvert UIEdgeInsets:json];
19
+ view.hitTestEdgeInsets = UIEdgeInsetsMake(-hitSlopInsets.top, -hitSlopInsets.left, -hitSlopInsets.bottom, -hitSlopInsets.right);
20
+ } else {
21
+ view.hitTestEdgeInsets = defaultView.hitTestEdgeInsets;
22
+ }
23
+ }
24
+
25
+ - (UIView *)view
26
+ {
27
+ return [RNGestureHandlerButton new];
28
+ }
29
+
30
+ @end
@@ -17,10 +17,8 @@
17
17
  config:(nonnull NSDictionary *)config;
18
18
 
19
19
  - (void)attachGestureHandler:(nonnull NSNumber *)handlerTag
20
- toViewWithTag:(nonnull NSNumber *)viewTag;
21
-
22
- - (void)attachGestureHandlerForDeviceEvents:(nonnull NSNumber *)handlerTag
23
- toViewWithTag:(nonnull NSNumber *)viewTag;
20
+ toViewWithTag:(nonnull NSNumber *)viewTag
21
+ withActionType:(RNGestureHandlerActionType)actionType;
24
22
 
25
23
  - (void)updateGestureHandler:(nonnull NSNumber *)handlerTag config:(nonnull NSDictionary *)config;
26
24
 
@@ -14,11 +14,16 @@
14
14
  #import "RCTRootContentView.h"
15
15
  #endif
16
16
 
17
+ #import "RNGestureHandlerActionType.h"
17
18
  #import "RNGestureHandlerState.h"
18
19
  #import "RNGestureHandler.h"
19
20
  #import "RNGestureHandlerRegistry.h"
20
21
  #import "RNRootViewGestureRecognizer.h"
21
22
 
23
+ #ifdef RN_FABRIC_ENABLED
24
+ #import <React/RCTViewComponentView.h>
25
+ #endif // RN_FABRIC_ENABLED
26
+
22
27
  #import "Handlers/RNPanHandler.h"
23
28
  #import "Handlers/RNTapHandler.h"
24
29
  #import "Handlers/RNFlingHandler.h"
@@ -94,21 +99,30 @@
94
99
 
95
100
  - (void)attachGestureHandler:(nonnull NSNumber *)handlerTag
96
101
  toViewWithTag:(nonnull NSNumber *)viewTag
102
+ withActionType:(RNGestureHandlerActionType)actionType
97
103
  {
98
104
  UIView *view = [_uiManager viewForReactTag:viewTag];
105
+
106
+ #ifdef RN_FABRIC_ENABLED
107
+ if (view == nil) {
108
+ // Happens when the view with given tag has been flattened.
109
+ // We cannot attach gesture handler to a non-existent view.
110
+ return;
111
+ }
112
+
113
+ // I think it should be moved to RNNativeViewHandler, but that would require
114
+ // additional logic for setting contentView.reactTag, this works for now
115
+ if ([view isKindOfClass:[RCTViewComponentView class]]) {
116
+ RCTViewComponentView *componentView = (RCTViewComponentView *)view;
117
+ if (componentView.contentView != nil) {
118
+ view = componentView.contentView;
119
+ }
120
+ }
121
+
122
+ view.reactTag = viewTag; // necessary for RNReanimated eventHash (e.g. "42onGestureHandlerEvent"), also will be returned as event.target
123
+ #endif // RN_FABRIC_ENABLED
99
124
 
100
- [_registry attachHandlerWithTag:handlerTag toView:view];
101
-
102
- // register view if not already there
103
- [self registerViewWithGestureRecognizerAttachedIfNeeded:view];
104
- }
105
-
106
- - (void)attachGestureHandlerForDeviceEvents:(nonnull NSNumber *)handlerTag
107
- toViewWithTag:(nonnull NSNumber *)viewTag
108
- {
109
- UIView *view = [_uiManager viewForReactTag:viewTag];
110
-
111
- [_registry attachHandlerWithTagForDeviceEvents:handlerTag toView:view];
125
+ [_registry attachHandlerWithTag:handlerTag toView:view withActionType:actionType];
112
126
 
113
127
  // register view if not already there
114
128
  [self registerViewWithGestureRecognizerAttachedIfNeeded:view];
@@ -196,24 +210,82 @@
196
210
 
197
211
  #pragma mark Events
198
212
 
199
- - (void)sendTouchEvent:(RNGestureHandlerEvent *)event
213
+ - (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType
200
214
  {
201
- [_eventDispatcher sendEvent:event];
215
+ switch (actionType) {
216
+ case RNGestureHandlerActionTypeReanimatedWorklet:
217
+ [self sendStateChangeEventForReanimated:event];
218
+ break;
219
+
220
+ case RNGestureHandlerActionTypeNativeAnimatedEvent:
221
+ if ([event.eventName isEqualToString:@"onGestureHandlerEvent"]) {
222
+ [self sendStateChangeEventForNativeAnimatedEvent:event];
223
+ } else {
224
+ // Although onGestureEvent prop is an Animated.event with useNativeDriver: true,
225
+ // onHandlerStateChange prop is still a regular JS function.
226
+ // Also, Animated.event is only supported with old API.
227
+ [self sendStateChangeEventForJSFunctionOldAPI:event];
228
+ }
229
+ break;
230
+
231
+ case RNGestureHandlerActionTypeJSFunctionOldAPI:
232
+ [self sendStateChangeEventForJSFunctionOldAPI:event];
233
+ break;
234
+
235
+ case RNGestureHandlerActionTypeJSFunctionNewAPI:
236
+ [self sendStateChangeEventForJSFunctionNewAPI:event];
237
+ break;
238
+ }
202
239
  }
203
240
 
204
- - (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event
241
+ - (void)sendStateChangeEventForReanimated:(RNGestureHandlerStateChange *)event
205
242
  {
206
- [_eventDispatcher sendEvent:event];
243
+ // Delivers the event to Reanimated.
244
+ #ifdef RN_FABRIC_ENABLED
245
+ // TODO: send event directly to Reanimated
246
+ // This is already supported in Reanimated with Fabric but let's wait until the official release.
247
+ // [_reanimatedModule eventDispatcherWillDispatchEvent:event];
248
+ #else
249
+ // In the old architecture, Reanimated overwrites RCTEventDispatcher
250
+ // with REAEventDispatcher and intercepts all direct events.
251
+ [self sendStateChangeEventForDirectEvent:event];
252
+ #endif // RN_FABRIC_ENABLED
207
253
  }
208
254
 
209
- - (void)sendTouchDeviceEvent:(RNGestureHandlerEvent *)event
255
+ - (void)sendStateChangeEventForNativeAnimatedEvent:(RNGestureHandlerStateChange *)event
210
256
  {
211
- NSMutableDictionary *body = [[event arguments] objectAtIndex:2];
212
- [_eventDispatcher sendDeviceEventWithName:@"onGestureHandlerEvent" body:body];
257
+ // Delivers the event to NativeAnimatedModule.
258
+ // Currently, NativeAnimated[Turbo]Module is RCTEventDispatcherObserver so we can
259
+ // simply send a direct event which is handled by the observer but ignored on JS side.
260
+ // TODO: send event directly to NativeAnimated[Turbo]Module
261
+ [self sendStateChangeEventForDirectEvent:event];
262
+ }
263
+
264
+ - (void)sendStateChangeEventForJSFunctionOldAPI:(RNGestureHandlerStateChange *)event
265
+ {
266
+ // Delivers the event to JS (old RNGH API).
267
+ #ifdef RN_FABRIC_ENABLED
268
+ [self sendStateChangeEventForDeviceEvent:event];
269
+ #else
270
+ [self sendStateChangeEventForDirectEvent:event];
271
+ #endif // RN_FABRIC_ENABLED
272
+ }
273
+
274
+ - (void)sendStateChangeEventForJSFunctionNewAPI:(RNGestureHandlerStateChange *)event
275
+ {
276
+ // Delivers the event to JS (new RNGH API).
277
+ [self sendStateChangeEventForDeviceEvent:event];
278
+ }
279
+
280
+ - (void)sendStateChangeEventForDirectEvent:(RNGestureHandlerStateChange *)event
281
+ {
282
+ // Delivers the event to JS as a direct event.
283
+ [_eventDispatcher sendEvent:event];
213
284
  }
214
285
 
215
- - (void)sendStateChangeDeviceEvent:(RNGestureHandlerStateChange *)event
286
+ - (void)sendStateChangeEventForDeviceEvent:(RNGestureHandlerStateChange *)event
216
287
  {
288
+ // Delivers the event to JS as a device event.
217
289
  NSMutableDictionary *body = [[event arguments] objectAtIndex:2];
218
290
  [_eventDispatcher sendDeviceEventWithName:@"onGestureHandlerStateChange" body:body];
219
291
  }