react-native-gesture-handler 2.1.2 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +8 -3
  3. package/RNGestureHandler.podspec +27 -3
  4. package/android/build.gradle +82 -9
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +47 -12
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +50 -14
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +7 -4
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +8 -8
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +6 -4
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
  11. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
  12. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
  13. package/android/src/main/AndroidManifest.xml +1 -1
  14. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +29 -10
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +119 -55
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
  20. package/android/src/main/jni/Android.mk +53 -0
  21. package/android/src/main/jni/OnLoad.cpp +9 -0
  22. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
  23. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
  24. package/android/src/main/jni/cpp-adapter.cpp +41 -0
  25. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
  26. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
  27. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
  28. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
  29. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
  30. package/ios/Handlers/RNFlingHandler.m +2 -0
  31. package/ios/Handlers/RNPanHandler.m +2 -0
  32. package/ios/Handlers/RNPinchHandler.m +2 -0
  33. package/ios/Handlers/RNRotationHandler.m +2 -0
  34. package/ios/RNGestureHandler.h +3 -8
  35. package/ios/RNGestureHandler.m +2 -10
  36. package/ios/RNGestureHandlerActionType.h +8 -0
  37. package/ios/RNGestureHandlerButtonComponentView.h +17 -0
  38. package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
  39. package/ios/RNGestureHandlerButtonManager.h +5 -0
  40. package/ios/RNGestureHandlerButtonManager.m +30 -0
  41. package/ios/RNGestureHandlerManager.h +2 -4
  42. package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
  43. package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
  44. package/ios/RNGestureHandlerRegistry.h +1 -2
  45. package/ios/RNGestureHandlerRegistry.m +2 -11
  46. package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
  47. package/lib/commonjs/ActionType.js +15 -0
  48. package/lib/commonjs/ActionType.js.map +1 -0
  49. package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
  50. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  51. package/lib/commonjs/GestureHandlerRootView.js +2 -3
  52. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  53. package/lib/commonjs/RNGestureHandlerModule.js +4 -2
  54. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  55. package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
  56. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  57. package/lib/commonjs/components/DrawerLayout.js +2 -2
  58. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  59. package/lib/commonjs/components/GestureHandlerButton.js +5 -2
  60. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  61. package/lib/commonjs/components/Swipeable.js +22 -20
  62. package/lib/commonjs/components/Swipeable.js.map +1 -1
  63. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
  64. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  65. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
  66. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  67. package/lib/commonjs/getShadowNodeFromRef.js +24 -0
  68. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
  69. package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
  70. package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
  71. package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
  72. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  73. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
  74. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
  76. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
  78. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
  80. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
  82. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  83. package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
  84. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  85. package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
  86. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  87. package/lib/commonjs/handlers/createHandler.js +72 -8
  88. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  89. package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
  90. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  91. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  92. package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
  93. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
  95. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  96. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  97. package/lib/commonjs/handlers/gestures/gesture.js +16 -1
  98. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
  100. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  101. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  102. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  103. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
  104. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  105. package/lib/commonjs/handlers/handlersRegistry.js +42 -6
  106. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  107. package/lib/commonjs/index.js +14 -106
  108. package/lib/commonjs/index.js.map +1 -1
  109. package/lib/commonjs/init.js +10 -0
  110. package/lib/commonjs/init.js.map +1 -1
  111. package/lib/commonjs/jestUtils.js +375 -0
  112. package/lib/commonjs/jestUtils.js.map +1 -0
  113. package/lib/commonjs/utils.js +38 -0
  114. package/lib/commonjs/utils.js.map +1 -1
  115. package/lib/module/ActionType.js +7 -0
  116. package/lib/module/ActionType.js.map +1 -0
  117. package/lib/module/GestureHandlerRootView.android.js +5 -6
  118. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  119. package/lib/module/GestureHandlerRootView.js +2 -3
  120. package/lib/module/GestureHandlerRootView.js.map +1 -1
  121. package/lib/module/RNGestureHandlerModule.js +3 -2
  122. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  123. package/lib/module/RNGestureHandlerModule.web.js +1 -1
  124. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  125. package/lib/module/components/DrawerLayout.js +2 -2
  126. package/lib/module/components/DrawerLayout.js.map +1 -1
  127. package/lib/module/components/GestureHandlerButton.js +4 -2
  128. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  129. package/lib/module/components/Swipeable.js +22 -20
  130. package/lib/module/components/Swipeable.js.map +1 -1
  131. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
  132. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  133. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
  134. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  135. package/lib/module/getShadowNodeFromRef.js +17 -0
  136. package/lib/module/getShadowNodeFromRef.js.map +1 -0
  137. package/lib/module/getShadowNodeFromRef.web.js +8 -0
  138. package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
  139. package/lib/module/handlers/FlingGestureHandler.js +2 -1
  140. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  141. package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
  142. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  143. package/lib/module/handlers/LongPressGestureHandler.js +2 -1
  144. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  145. package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
  146. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  147. package/lib/module/handlers/PanGestureHandler.js +2 -1
  148. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  149. package/lib/module/handlers/PinchGestureHandler.js +2 -1
  150. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  151. package/lib/module/handlers/RotationGestureHandler.js +2 -1
  152. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  153. package/lib/module/handlers/TapGestureHandler.js +2 -1
  154. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  155. package/lib/module/handlers/createHandler.js +72 -9
  156. package/lib/module/handlers/createHandler.js.map +1 -1
  157. package/lib/module/handlers/createNativeWrapper.js +6 -2
  158. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  159. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  160. package/lib/module/handlers/gestures/GestureDetector.js +79 -32
  161. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  162. package/lib/module/handlers/gestures/eventReceiver.js +25 -7
  163. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  164. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  165. package/lib/module/handlers/gestures/gesture.js +16 -1
  166. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  167. package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
  168. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  169. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  170. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  171. package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
  172. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  173. package/lib/module/handlers/handlersRegistry.js +34 -6
  174. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  175. package/lib/module/index.js +1 -11
  176. package/lib/module/index.js.map +1 -1
  177. package/lib/module/init.js +6 -0
  178. package/lib/module/init.js.map +1 -1
  179. package/lib/module/jestUtils.js +350 -0
  180. package/lib/module/jestUtils.js.map +1 -0
  181. package/lib/module/utils.js +28 -0
  182. package/lib/module/utils.js.map +1 -1
  183. package/lib/typescript/ActionType.d.ts +7 -0
  184. package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
  185. package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
  186. package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
  187. package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
  188. package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
  189. package/lib/typescript/components/Swipeable.d.ts +12 -4
  190. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
  191. package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
  192. package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
  193. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
  194. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +3 -2
  195. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
  196. package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -2
  197. package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
  198. package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
  199. package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
  200. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
  201. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
  202. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
  203. package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
  204. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
  205. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
  206. package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
  207. package/lib/typescript/index.d.ts +15 -11
  208. package/lib/typescript/jestUtils.d.ts +28 -0
  209. package/lib/typescript/utils.d.ts +6 -0
  210. package/lib/typescript/web/constants.d.ts +0 -1
  211. package/package.json +39 -16
  212. package/src/ActionType.ts +9 -0
  213. package/src/GestureHandlerRootView.android.tsx +14 -14
  214. package/src/GestureHandlerRootView.tsx +4 -4
  215. package/src/RNGestureHandlerModule.ts +11 -6
  216. package/src/RNGestureHandlerModule.web.ts +2 -1
  217. package/src/components/DrawerLayout.tsx +8 -2
  218. package/src/components/GestureHandlerButton.tsx +7 -4
  219. package/src/components/Swipeable.tsx +28 -22
  220. package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
  221. package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
  222. package/src/getShadowNodeFromRef.ts +19 -0
  223. package/src/getShadowNodeFromRef.web.ts +7 -0
  224. package/src/handlers/FlingGestureHandler.ts +3 -1
  225. package/src/handlers/ForceTouchGestureHandler.ts +8 -2
  226. package/src/handlers/LongPressGestureHandler.ts +5 -3
  227. package/src/handlers/NativeViewGestureHandler.ts +3 -1
  228. package/src/handlers/PanGestureHandler.ts +5 -3
  229. package/src/handlers/PinchGestureHandler.ts +3 -1
  230. package/src/handlers/RotationGestureHandler.ts +3 -1
  231. package/src/handlers/TapGestureHandler.ts +3 -1
  232. package/src/handlers/createHandler.ts +80 -5
  233. package/src/handlers/createNativeWrapper.tsx +7 -1
  234. package/src/handlers/gestureHandlerCommon.ts +2 -5
  235. package/src/handlers/gestures/GestureDetector.tsx +110 -37
  236. package/src/handlers/gestures/eventReceiver.ts +23 -19
  237. package/src/handlers/gestures/forceTouchGesture.ts +1 -1
  238. package/src/handlers/gestures/gesture.ts +21 -1
  239. package/src/handlers/gestures/gestureStateManager.ts +9 -12
  240. package/src/handlers/gestures/panGesture.ts +1 -1
  241. package/src/handlers/gestures/pinchGesture.ts +1 -1
  242. package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
  243. package/src/handlers/handlersRegistry.ts +44 -6
  244. package/src/index.ts +15 -11
  245. package/src/init.ts +6 -0
  246. package/src/jestUtils.ts +506 -0
  247. package/src/utils.ts +38 -0
  248. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
  249. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
  250. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
@@ -0,0 +1,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
  }