react-native-gesture-handler 2.1.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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,41 @@
1
+ #include <jni.h>
2
+ #include <jsi/jsi.h>
3
+
4
+ #include <react/renderer/uimanager/primitives.h>
5
+
6
+ using namespace facebook;
7
+ using namespace react;
8
+
9
+ void decorateRuntime(jsi::Runtime &runtime)
10
+ {
11
+ auto isFormsStackingContext = jsi::Function::createFromHostFunction(
12
+ runtime,
13
+ jsi::PropNameID::forAscii(runtime, "isFormsStackingContext"),
14
+ 1,
15
+ [](jsi::Runtime &runtime,
16
+ const jsi::Value &thisValue,
17
+ const jsi::Value *arguments,
18
+ size_t count) -> jsi::Value
19
+ {
20
+ if (!arguments[0].isObject())
21
+ {
22
+ return jsi::Value::null();
23
+ }
24
+
25
+ auto shadowNode = arguments[0].asObject(runtime).getHostObject<ShadowNodeWrapper>(runtime)->shadowNode;
26
+ bool isFormsStackingContext = shadowNode->getTraits().check(ShadowNodeTraits::FormsStackingContext);
27
+
28
+ return jsi::Value(isFormsStackingContext);
29
+ });
30
+ runtime.global().setProperty(runtime, "isFormsStackingContext", std::move(isFormsStackingContext));
31
+ }
32
+
33
+ extern "C" JNIEXPORT void JNICALL
34
+ Java_com_swmansion_gesturehandler_react_RNGestureHandlerModule_decorateRuntime(JNIEnv *env, jobject clazz, jlong jsiPtr)
35
+ {
36
+ jsi::Runtime *runtime = reinterpret_cast<jsi::Runtime *>(jsiPtr);
37
+ if (runtime)
38
+ {
39
+ decorateRuntime(*runtime);
40
+ }
41
+ }
@@ -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
  }