react-native-gesture-handler 2.8.0 → 2.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (285) hide show
  1. package/README.md +1 -0
  2. package/RNGestureHandler.podspec +2 -2
  3. package/android/build.gradle +107 -65
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +1 -1
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +39 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +9 -2
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +14 -2
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
  10. package/android/src/main/jni/CMakeLists.txt +10 -44
  11. package/android/src/main/jni/cpp-adapter.cpp +16 -13
  12. package/ios/Handlers/RNFlingHandler.m +39 -37
  13. package/ios/Handlers/RNForceTouchHandler.m +19 -17
  14. package/ios/Handlers/RNLongPressHandler.m +20 -22
  15. package/ios/Handlers/RNManualHandler.m +2 -3
  16. package/ios/Handlers/RNNativeViewHandler.mm +96 -92
  17. package/ios/Handlers/RNPanHandler.m +28 -32
  18. package/ios/Handlers/RNPinchHandler.m +9 -10
  19. package/ios/Handlers/RNRotationHandler.m +11 -14
  20. package/ios/Handlers/RNTapHandler.m +26 -26
  21. package/ios/RNGestureHandler.h +31 -24
  22. package/ios/RNGestureHandler.m +278 -273
  23. package/ios/RNGestureHandlerActionType.h +6 -4
  24. package/ios/RNGestureHandlerButton.m +11 -12
  25. package/ios/RNGestureHandlerButtonComponentView.h +2 -2
  26. package/ios/RNGestureHandlerButtonComponentView.mm +2 -2
  27. package/ios/RNGestureHandlerButtonManager.m +6 -5
  28. package/ios/RNGestureHandlerDirection.h +4 -4
  29. package/ios/RNGestureHandlerEvents.h +3 -4
  30. package/ios/RNGestureHandlerEvents.m +114 -119
  31. package/ios/RNGestureHandlerManager.h +1 -2
  32. package/ios/RNGestureHandlerManager.mm +9 -9
  33. package/ios/RNGestureHandlerModule.h +1 -2
  34. package/ios/RNGestureHandlerModule.mm +142 -138
  35. package/ios/RNGestureHandlerPointerTracker.h +1 -1
  36. package/ios/RNGestureHandlerPointerTracker.m +40 -37
  37. package/ios/RNGestureHandlerRegistry.h +3 -1
  38. package/ios/RNGestureHandlerRegistry.m +24 -22
  39. package/ios/RNGestureHandlerRootViewComponentView.mm +2 -2
  40. package/ios/RNGestureHandlerState.h +6 -6
  41. package/ios/RNGestureHandlerStateManager.h +1 -1
  42. package/ios/RNManualActivationRecognizer.m +9 -9
  43. package/ios/RNRootViewGestureRecognizer.m +39 -42
  44. package/lib/commonjs/EnableNewWebImplementation.js +35 -0
  45. package/lib/commonjs/EnableNewWebImplementation.js.map +1 -0
  46. package/lib/commonjs/GestureHandlerRootViewContext.js +15 -0
  47. package/lib/commonjs/GestureHandlerRootViewContext.js.map +1 -0
  48. package/lib/commonjs/RNGestureHandlerModule.macos.js +6 -6
  49. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  50. package/lib/commonjs/RNGestureHandlerModule.web.js +6 -6
  51. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  52. package/lib/commonjs/RNGestureHandlerModule.windows.js +6 -6
  53. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
  54. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  55. package/lib/commonjs/components/GestureComponents.web.js +6 -5
  56. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  57. package/lib/commonjs/components/GestureHandlerButton.js +3 -5
  58. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  59. package/lib/commonjs/{GestureHandlerRootView.android.js → components/GestureHandlerRootView.android.js} +8 -7
  60. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -0
  61. package/lib/commonjs/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +8 -2
  62. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -0
  63. package/lib/commonjs/{GestureHandlerRootView.web.js → components/GestureHandlerRootView.web.js} +7 -1
  64. package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -0
  65. package/lib/commonjs/components/Swipeable.js +17 -3
  66. package/lib/commonjs/components/Swipeable.js.map +1 -1
  67. package/lib/commonjs/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +2 -1
  68. package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -0
  69. package/lib/commonjs/handlers/LongPressGestureHandler.js +3 -1
  70. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  71. package/lib/commonjs/handlers/TapGestureHandler.js +3 -1
  72. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  73. package/lib/commonjs/handlers/createHandler.js +21 -13
  74. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -4
  76. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  77. package/lib/commonjs/handlers/gestures/GestureDetector.js +89 -37
  78. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  79. package/lib/commonjs/handlers/gestures/longPressGesture.js +1 -0
  80. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  81. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +22 -19
  82. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  83. package/lib/commonjs/handlers/gestures/tapGesture.js +1 -0
  84. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
  85. package/lib/commonjs/index.js +16 -4
  86. package/lib/commonjs/index.js.map +1 -1
  87. package/lib/commonjs/utils.js +0 -6
  88. package/lib/commonjs/utils.js.map +1 -1
  89. package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -5
  90. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  91. package/lib/commonjs/web/handlers/GestureHandler.js +3 -0
  92. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  93. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +0 -1
  94. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  95. package/lib/commonjs/web/handlers/ManualGestureHandler.js +0 -5
  96. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  97. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -6
  98. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  99. package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -12
  100. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  101. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -5
  102. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  103. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -6
  104. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  105. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -7
  106. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  107. package/lib/commonjs/web/tools/CircularBuffer.js +59 -0
  108. package/lib/commonjs/web/tools/CircularBuffer.js.map +1 -0
  109. package/lib/commonjs/web/tools/LeastSquareSolver.js +204 -0
  110. package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -0
  111. package/lib/commonjs/web/tools/PointerEventManager.js +27 -0
  112. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  113. package/lib/commonjs/web/tools/PointerTracker.js +11 -7
  114. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  115. package/lib/commonjs/web/tools/VelocityTracker.js +111 -0
  116. package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -0
  117. package/lib/commonjs/web_hammer/GestureHandler.js +1 -1
  118. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  119. package/lib/module/EnableNewWebImplementation.js +22 -0
  120. package/lib/module/EnableNewWebImplementation.js.map +1 -0
  121. package/lib/module/GestureHandlerRootViewContext.js +3 -0
  122. package/lib/module/GestureHandlerRootViewContext.js.map +1 -0
  123. package/lib/module/RNGestureHandlerModule.macos.js +6 -6
  124. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  125. package/lib/module/RNGestureHandlerModule.web.js +6 -6
  126. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  127. package/lib/module/RNGestureHandlerModule.windows.js +6 -6
  128. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
  129. package/lib/module/components/DrawerLayout.js.map +1 -1
  130. package/lib/module/components/GestureComponents.web.js +5 -6
  131. package/lib/module/components/GestureComponents.web.js.map +1 -1
  132. package/lib/module/components/GestureHandlerButton.js +1 -4
  133. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  134. package/lib/module/components/GestureHandlerRootView.android.js +14 -0
  135. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -0
  136. package/lib/module/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +5 -2
  137. package/lib/module/components/GestureHandlerRootView.js.map +1 -0
  138. package/lib/module/components/GestureHandlerRootView.web.js +9 -0
  139. package/lib/module/components/GestureHandlerRootView.web.js.map +1 -0
  140. package/lib/module/components/Swipeable.js +17 -3
  141. package/lib/module/components/Swipeable.js.map +1 -1
  142. package/lib/module/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +2 -1
  143. package/lib/module/components/gestureHandlerRootHOC.js.map +1 -0
  144. package/lib/module/handlers/LongPressGestureHandler.js +3 -1
  145. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  146. package/lib/module/handlers/TapGestureHandler.js +3 -1
  147. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  148. package/lib/module/handlers/createHandler.js +20 -13
  149. package/lib/module/handlers/createHandler.js.map +1 -1
  150. package/lib/module/handlers/gestureHandlerCommon.js +5 -4
  151. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  152. package/lib/module/handlers/gestures/GestureDetector.js +89 -38
  153. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  154. package/lib/module/handlers/gestures/longPressGesture.js +1 -0
  155. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  156. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -16
  157. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  158. package/lib/module/handlers/gestures/tapGesture.js +1 -0
  159. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  160. package/lib/module/index.js +4 -4
  161. package/lib/module/index.js.map +1 -1
  162. package/lib/module/utils.js +0 -4
  163. package/lib/module/utils.js.map +1 -1
  164. package/lib/module/web/handlers/FlingGestureHandler.js +0 -5
  165. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  166. package/lib/module/web/handlers/GestureHandler.js +3 -0
  167. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  168. package/lib/module/web/handlers/LongPressGestureHandler.js +0 -1
  169. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  170. package/lib/module/web/handlers/ManualGestureHandler.js +0 -5
  171. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  172. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -6
  173. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  174. package/lib/module/web/handlers/PanGestureHandler.js +2 -9
  175. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  176. package/lib/module/web/handlers/PinchGestureHandler.js +0 -5
  177. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  178. package/lib/module/web/handlers/RotationGestureHandler.js +0 -6
  179. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  180. package/lib/module/web/handlers/TapGestureHandler.js +0 -7
  181. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  182. package/lib/module/web/tools/CircularBuffer.js +50 -0
  183. package/lib/module/web/tools/CircularBuffer.js.map +1 -0
  184. package/lib/module/web/tools/LeastSquareSolver.js +195 -0
  185. package/lib/module/web/tools/LeastSquareSolver.js.map +1 -0
  186. package/lib/module/web/tools/PointerEventManager.js +27 -0
  187. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  188. package/lib/module/web/tools/PointerTracker.js +8 -7
  189. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  190. package/lib/module/web/tools/VelocityTracker.js +98 -0
  191. package/lib/module/web/tools/VelocityTracker.js.map +1 -0
  192. package/lib/module/web_hammer/GestureHandler.js +1 -1
  193. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  194. package/lib/typescript/EnableNewWebImplementation.d.ts +3 -0
  195. package/lib/typescript/GestureHandlerRootViewContext.d.ts +3 -0
  196. package/lib/typescript/components/DrawerLayout.d.ts +3 -1
  197. package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
  198. package/lib/typescript/components/Swipeable.d.ts +14 -2
  199. package/lib/typescript/components/gestureHandlerRootHOC.d.ts +3 -0
  200. package/lib/typescript/index.d.ts +4 -4
  201. package/lib/typescript/{fabric → specs}/RNGestureHandlerButtonNativeComponent.d.ts +1 -1
  202. package/lib/typescript/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.d.ts +1 -1
  203. package/lib/typescript/utils.d.ts +0 -1
  204. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -1
  205. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +0 -1
  206. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +0 -1
  207. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -1
  208. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +0 -1
  209. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +0 -1
  210. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -1
  211. package/lib/typescript/web/tools/CircularBuffer.d.ts +11 -0
  212. package/lib/typescript/web/tools/LeastSquareSolver.d.ts +12 -0
  213. package/lib/typescript/web/tools/PointerEventManager.d.ts +2 -0
  214. package/lib/typescript/web/tools/PointerTracker.d.ts +1 -0
  215. package/lib/typescript/web/tools/VelocityTracker.d.ts +13 -0
  216. package/package.json +6 -7
  217. package/src/EnableNewWebImplementation.ts +35 -0
  218. package/src/GestureHandlerRootViewContext.ts +3 -0
  219. package/src/RNGestureHandlerModule.macos.ts +6 -6
  220. package/src/RNGestureHandlerModule.web.ts +6 -6
  221. package/src/RNGestureHandlerModule.windows.ts +6 -6
  222. package/src/components/DrawerLayout.tsx +8 -4
  223. package/src/components/GestureComponents.web.tsx +5 -6
  224. package/src/components/GestureHandlerButton.tsx +2 -7
  225. package/src/components/GestureHandlerRootView.android.tsx +24 -0
  226. package/src/{GestureHandlerRootView.tsx → components/GestureHandlerRootView.tsx} +7 -2
  227. package/src/{GestureHandlerRootView.web.tsx → components/GestureHandlerRootView.web.tsx} +6 -1
  228. package/src/components/Swipeable.tsx +43 -12
  229. package/src/{gestureHandlerRootHOC.tsx → components/gestureHandlerRootHOC.tsx} +4 -1
  230. package/src/handlers/LongPressGestureHandler.ts +3 -1
  231. package/src/handlers/TapGestureHandler.ts +3 -1
  232. package/src/handlers/createHandler.tsx +20 -9
  233. package/src/handlers/gestureHandlerCommon.ts +5 -6
  234. package/src/handlers/gestures/GestureDetector.tsx +99 -36
  235. package/src/handlers/gestures/longPressGesture.ts +1 -0
  236. package/src/handlers/gestures/reanimatedWrapper.ts +21 -20
  237. package/src/handlers/gestures/tapGesture.ts +1 -0
  238. package/src/index.ts +7 -3
  239. package/src/utils.ts +0 -5
  240. package/src/web/handlers/FlingGestureHandler.ts +0 -5
  241. package/src/web/handlers/GestureHandler.ts +3 -0
  242. package/src/web/handlers/LongPressGestureHandler.ts +0 -1
  243. package/src/web/handlers/ManualGestureHandler.ts +0 -5
  244. package/src/web/handlers/NativeViewGestureHandler.ts +0 -6
  245. package/src/web/handlers/PanGestureHandler.ts +2 -9
  246. package/src/web/handlers/PinchGestureHandler.ts +0 -5
  247. package/src/web/handlers/RotationGestureHandler.ts +0 -7
  248. package/src/web/handlers/TapGestureHandler.ts +0 -7
  249. package/src/web/tools/CircularBuffer.ts +42 -0
  250. package/src/web/tools/LeastSquareSolver.ts +182 -0
  251. package/src/web/tools/PointerEventManager.ts +29 -0
  252. package/src/web/tools/PointerTracker.ts +7 -7
  253. package/src/web/tools/VelocityTracker.ts +98 -0
  254. package/src/web_hammer/GestureHandler.ts +1 -1
  255. package/lib/commonjs/EnableExperimentalWebImplementation.js +0 -31
  256. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +0 -1
  257. package/lib/commonjs/GestureHandlerRootView.android.js.map +0 -1
  258. package/lib/commonjs/GestureHandlerRootView.js.map +0 -1
  259. package/lib/commonjs/GestureHandlerRootView.web.js.map +0 -1
  260. package/lib/commonjs/gestureHandlerRootHOC.js.map +0 -1
  261. package/lib/module/EnableExperimentalWebImplementation.js +0 -20
  262. package/lib/module/EnableExperimentalWebImplementation.js.map +0 -1
  263. package/lib/module/GestureHandlerRootView.android.js +0 -14
  264. package/lib/module/GestureHandlerRootView.android.js.map +0 -1
  265. package/lib/module/GestureHandlerRootView.js.map +0 -1
  266. package/lib/module/GestureHandlerRootView.web.js +0 -6
  267. package/lib/module/GestureHandlerRootView.web.js.map +0 -1
  268. package/lib/module/gestureHandlerRootHOC.js.map +0 -1
  269. package/lib/typescript/EnableExperimentalWebImplementation.d.ts +0 -2
  270. package/lib/typescript/gestureHandlerRootHOC.d.ts +0 -3
  271. package/src/EnableExperimentalWebImplementation.ts +0 -27
  272. package/src/GestureHandlerRootView.android.tsx +0 -24
  273. /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
  274. /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
  275. /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
  276. /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
  277. /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
  278. /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
  279. /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
  280. /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
  281. /package/lib/typescript/{GestureHandlerRootView.android.d.ts → components/GestureHandlerRootView.android.d.ts} +0 -0
  282. /package/lib/typescript/{GestureHandlerRootView.d.ts → components/GestureHandlerRootView.d.ts} +0 -0
  283. /package/lib/typescript/{GestureHandlerRootView.web.d.ts → components/GestureHandlerRootView.web.d.ts} +0 -0
  284. /package/src/{fabric → specs}/RNGestureHandlerButtonNativeComponent.ts +0 -0
  285. /package/src/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.ts +0 -0
@@ -3,6 +3,7 @@ import { Component } from 'react';
3
3
  import { Animated, StyleProp, ViewStyle } from 'react-native';
4
4
  import { PanGestureHandlerProps } from '../handlers/PanGestureHandler';
5
5
  declare type SwipeableExcludes = Exclude<keyof PanGestureHandlerProps, 'onGestureEvent' | 'onHandlerStateChange'>;
6
+ declare type AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;
6
7
  export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableExcludes> {
7
8
  /**
8
9
  * Enables two-finger gestures on supported devices, for example iPads with
@@ -30,6 +31,16 @@ export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableEx
30
31
  * default it's a half of the panel's width.
31
32
  */
32
33
  rightThreshold?: number;
34
+ /**
35
+ * Distance that the panel must be dragged from the left edge to be considered
36
+ * a swipe. The default value is 10.
37
+ */
38
+ dragOffsetFromLeftEdge?: number;
39
+ /**
40
+ * Distance that the panel must be dragged from the right edge to be considered
41
+ * a swipe. The default value is 10.
42
+ */
43
+ dragOffsetFromRightEdge?: number;
33
44
  /**
34
45
  * Value indicating if the swipeable panel can be pulled further than the left
35
46
  * actions panel's width. It is set to true by default as long as the left
@@ -97,7 +108,7 @@ export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableEx
97
108
  *
98
109
  * To support `rtl` flexbox layouts use `flexDirection` styling.
99
110
  * */
100
- renderLeftActions?: (progressAnimatedValue: Animated.AnimatedInterpolation, dragAnimatedValue: Animated.AnimatedInterpolation) => React.ReactNode;
111
+ renderLeftActions?: (progressAnimatedValue: AnimatedInterpolation, dragAnimatedValue: AnimatedInterpolation, swipeable: Swipeable) => React.ReactNode;
101
112
  /**
102
113
  *
103
114
  * This map describes the values to use as inputRange for extra interpolation:
@@ -107,7 +118,7 @@ export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableEx
107
118
  *
108
119
  * To support `rtl` flexbox layouts use `flexDirection` styling.
109
120
  * */
110
- renderRightActions?: (progressAnimatedValue: Animated.AnimatedInterpolation, dragAnimatedValue: Animated.AnimatedInterpolation, swipeable: Swipeable) => React.ReactNode;
121
+ renderRightActions?: (progressAnimatedValue: AnimatedInterpolation, dragAnimatedValue: AnimatedInterpolation, swipeable: Swipeable) => React.ReactNode;
111
122
  useNativeAnimations?: boolean;
112
123
  animationOptions?: Record<string, unknown>;
113
124
  /**
@@ -153,6 +164,7 @@ export default class Swipeable extends Component<SwipeableProps, SwipeableState>
153
164
  close: () => void;
154
165
  openLeft: () => void;
155
166
  openRight: () => void;
167
+ reset: () => void;
156
168
  render(): JSX.Element;
157
169
  }
158
170
  export {};
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ import { StyleProp, ViewStyle } from 'react-native';
3
+ export default function gestureHandlerRootHOC<P extends Record<string, unknown>>(Component: React.ComponentType<P>, containerStyles?: StyleProp<ViewStyle>): React.ComponentType<P>;
@@ -1,7 +1,7 @@
1
1
  export { Directions } from './Directions';
2
2
  export { State } from './State';
3
- export { default as gestureHandlerRootHOC } from './gestureHandlerRootHOC';
4
- export { default as GestureHandlerRootView } from './GestureHandlerRootView';
3
+ export { default as gestureHandlerRootHOC } from './components/gestureHandlerRootHOC';
4
+ export { default as GestureHandlerRootView } from './components/GestureHandlerRootView';
5
5
  export type { GestureEvent, HandlerStateChangeEvent, GestureEventPayload, HandlerStateChangeEventPayload, GestureTouchEvent, TouchData, GestureUpdateEvent, GestureStateChangeEvent, } from './handlers/gestureHandlerCommon';
6
6
  export type { GestureType } from './handlers/gestures/gesture';
7
7
  export type { TapGestureHandlerEventPayload, TapGestureHandlerProps, } from './handlers/TapGestureHandler';
@@ -38,11 +38,11 @@ export type { ComposedGestureType as ComposedGesture, RaceGestureType as RaceGes
38
38
  export type { GestureStateManagerType as GestureStateManager } from './handlers/gestures/gestureStateManager';
39
39
  export { NativeViewGestureHandler } from './handlers/NativeViewGestureHandler';
40
40
  export type { RawButtonProps, BaseButtonProps, RectButtonProps, BorderlessButtonProps, } from './components/GestureButtons';
41
- export { RawButton, BaseButton, RectButton, BorderlessButton, } from './components/GestureButtons';
41
+ export { RawButton, BaseButton, RectButton, BorderlessButton, PureNativeButton, } from './components/GestureButtons';
42
42
  export { TouchableHighlight, TouchableNativeFeedback, TouchableOpacity, TouchableWithoutFeedback, } from './components/touchables';
43
43
  export { ScrollView, Switch, TextInput, DrawerLayoutAndroid, FlatList, RefreshControl, } from './components/GestureComponents';
44
44
  export type { GestureHandlerGestureEvent, GestureHandlerStateChangeEvent, GestureHandlerGestureEventNativeEvent, GestureHandlerStateChangeNativeEvent, NativeViewGestureHandlerGestureEvent, NativeViewGestureHandlerStateChangeEvent, TapGestureHandlerGestureEvent, TapGestureHandlerStateChangeEvent, ForceTouchGestureHandlerGestureEvent, ForceTouchGestureHandlerStateChangeEvent, LongPressGestureHandlerGestureEvent, LongPressGestureHandlerStateChangeEvent, PanGestureHandlerGestureEvent, PanGestureHandlerStateChangeEvent, PinchGestureHandlerGestureEvent, PinchGestureHandlerStateChangeEvent, RotationGestureHandlerGestureEvent, RotationGestureHandlerStateChangeEvent, FlingGestureHandlerGestureEvent, FlingGestureHandlerStateChangeEvent, NativeViewGestureHandlerProperties, TapGestureHandlerProperties, LongPressGestureHandlerProperties, PanGestureHandlerProperties, PinchGestureHandlerProperties, RotationGestureHandlerProperties, FlingGestureHandlerProperties, ForceTouchGestureHandlerProperties, RawButtonProperties, BaseButtonProperties, RectButtonProperties, BorderlessButtonProperties, } from './handlers/gestureHandlerTypesCompat';
45
45
  export { default as Swipeable } from './components/Swipeable';
46
46
  export type { DrawerLayoutProps, DrawerPosition, DrawerState, DrawerType, DrawerLockMode, DrawerKeyboardDismissMode, } from './components/DrawerLayout';
47
47
  export { default as DrawerLayout } from './components/DrawerLayout';
48
- export { enableExperimentalWebImplementation } from './EnableExperimentalWebImplementation';
48
+ export { enableExperimentalWebImplementation, enableLegacyWebImplementation, } from './EnableNewWebImplementation';
@@ -1,4 +1,4 @@
1
- /// <reference types="react-native/codegen" />
1
+ /// <reference types="react-native/types/modules/codegen" />
2
2
  import type { Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';
3
3
  import type { ViewProps, ColorValue } from 'react-native';
4
4
  interface NativeProps extends ViewProps {
@@ -1,4 +1,4 @@
1
- /// <reference types="react-native/codegen" />
1
+ /// <reference types="react-native/types/modules/codegen" />
2
2
  import type { ViewProps } from 'react-native';
3
3
  interface NativeProps extends ViewProps {
4
4
  }
@@ -9,5 +9,4 @@ export declare function hasProperty(object: object, key: string): boolean;
9
9
  export declare function isJestEnv(): boolean;
10
10
  export declare function tagMessage(msg: string): string;
11
11
  export declare function isFabric(): boolean;
12
- export declare function shouldUseCodegenNativeComponent(): boolean;
13
12
  export declare function isRemoteDebuggingEnabled(): boolean;
@@ -28,7 +28,6 @@ export default class FlingGestureHandler extends GestureHandler {
28
28
  protected onPointerUp(event: AdaptedEvent): void;
29
29
  protected onPointerRemove(event: AdaptedEvent): void;
30
30
  private onUp;
31
- protected onPointerCancel(event: AdaptedEvent): void;
32
31
  activate(force?: boolean): void;
33
32
  protected resetConfig(): void;
34
33
  }
@@ -9,5 +9,4 @@ export default class ManualGestureHandler extends GestureHandler {
9
9
  protected onPointerOutOfBounds(event: AdaptedEvent): void;
10
10
  protected onPointerUp(event: AdaptedEvent): void;
11
11
  protected onPointerRemove(event: AdaptedEvent): void;
12
- protected onPointerCancel(event: AdaptedEvent): void;
13
12
  }
@@ -18,7 +18,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
18
18
  protected onPointerUp(event: AdaptedEvent): void;
19
19
  protected onPointerRemove(event: AdaptedEvent): void;
20
20
  private onUp;
21
- protected onPointerCancel(event: AdaptedEvent): void;
22
21
  shouldRecognizeSimultaneously(handler: GestureHandler): boolean;
23
22
  shouldBeCancelledByOther(_handler: GestureHandler): boolean;
24
23
  disallowsInterruption(): boolean;
@@ -47,7 +47,6 @@ export default class PanGestureHandler extends GestureHandler {
47
47
  protected onPointerUp(event: AdaptedEvent): void;
48
48
  protected onPointerRemove(event: AdaptedEvent): void;
49
49
  protected onPointerMove(event: AdaptedEvent): void;
50
- protected onPointerCancel(event: AdaptedEvent): void;
51
50
  protected onPointerOutOfBounds(event: AdaptedEvent): void;
52
51
  private shouldActivate;
53
52
  private shouldFail;
@@ -21,7 +21,6 @@ export default class PinchGestureHandler extends GestureHandler {
21
21
  protected onPointerRemove(event: AdaptedEvent): void;
22
22
  protected onPointerMove(event: AdaptedEvent): void;
23
23
  protected onPointerOutOfBounds(event: AdaptedEvent): void;
24
- protected onPointerCancel(event: AdaptedEvent): void;
25
24
  private tryBegin;
26
25
  activate(force?: boolean): void;
27
26
  protected onReset(): void;
@@ -23,7 +23,6 @@ export default class RotationGestureHandler extends GestureHandler {
23
23
  protected onPointerOutOfBounds(event: AdaptedEvent): void;
24
24
  protected onPointerUp(event: AdaptedEvent): void;
25
25
  protected onPointerRemove(event: AdaptedEvent): void;
26
- protected onPointerCancel(event: AdaptedEvent): void;
27
26
  protected tryBegin(): void;
28
27
  activate(_force?: boolean): void;
29
28
  protected onReset(): void;
@@ -36,7 +36,6 @@ export default class TapGestureHandler extends GestureHandler {
36
36
  protected onPointerRemove(event: AdaptedEvent): void;
37
37
  protected onPointerMove(event: AdaptedEvent): void;
38
38
  protected onPointerOutOfBounds(event: AdaptedEvent): void;
39
- protected onPointerCancel(event: AdaptedEvent): void;
40
39
  private updateState;
41
40
  private trySettingPosition;
42
41
  private shouldFail;
@@ -0,0 +1,11 @@
1
+ export default class CircularBuffer<T> {
2
+ private bufferSize;
3
+ private buffer;
4
+ private index;
5
+ private actualSize;
6
+ constructor(size: number);
7
+ get size(): number;
8
+ push(element: T): void;
9
+ get(at: number): T;
10
+ clear(): void;
11
+ }
@@ -0,0 +1,12 @@
1
+ declare class PolynomialFit {
2
+ coefficients: number[];
3
+ constructor(degree: number);
4
+ }
5
+ export default class LeastSquareSolver {
6
+ private x;
7
+ private y;
8
+ private w;
9
+ constructor(x: number[], y: number[], w: number[]);
10
+ solve(degree: number): PolynomialFit | null;
11
+ }
12
+ export {};
@@ -1,6 +1,8 @@
1
1
  import { AdaptedEvent, EventTypes } from '../interfaces';
2
2
  import EventManager from './EventManager';
3
3
  export default class PointerEventManager extends EventManager {
4
+ private trackedPointers;
4
5
  setListeners(): void;
5
6
  protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent;
7
+ resetManager(): void;
6
8
  }
@@ -7,6 +7,7 @@ export interface TrackerElement {
7
7
  velocityY: number;
8
8
  }
9
9
  export default class PointerTracker {
10
+ private velocityTracker;
10
11
  private trackedPointers;
11
12
  private touchEventsIds;
12
13
  private lastMovedPointerId;
@@ -0,0 +1,13 @@
1
+ import { AdaptedEvent } from '../interfaces';
2
+ export default class VelocityTracker {
3
+ private assumePointerMoveStoppedMilliseconds;
4
+ private historySize;
5
+ private horizonMilliseconds;
6
+ private minSampleSize;
7
+ private samples;
8
+ constructor();
9
+ add(event: AdaptedEvent): void;
10
+ private getVelocityEstimate;
11
+ getVelocity(): [number, number];
12
+ reset(): void;
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.8.0",
3
+ "version": "2.10.0",
4
4
  "description": "Experimental implementation of a new declarative API for gesture handling in react-native",
5
5
  "scripts": {
6
6
  "prepare": "bob build && husky install",
@@ -82,8 +82,7 @@
82
82
  "@types/hammerjs": "^2.0.38",
83
83
  "@types/hoist-non-react-statics": "^3.3.1",
84
84
  "@types/jest": "^27.0.3",
85
- "@types/react": "^17.0.0",
86
- "@types/react-native": "^0.69.6",
85
+ "@types/react": "^18.0.24",
87
86
  "@types/react-test-renderer": "^17.0.0",
88
87
  "@typescript-eslint/eslint-plugin": "^4.33.0",
89
88
  "@typescript-eslint/parser": "^4.33.0",
@@ -100,9 +99,9 @@
100
99
  "lint-staged": "^12.3.2",
101
100
  "metro-react-native-babel-preset": "^0.64.0",
102
101
  "prettier": "^2.7.1",
103
- "react": "^16.8.6",
102
+ "react": "18.2.0",
104
103
  "react-dom": "^16.12.0",
105
- "react-native": "^0.64.0",
104
+ "react-native": "0.71.0",
106
105
  "react-native-builder-bob": "^0.17.1",
107
106
  "react-native-reanimated": "^2.3.1",
108
107
  "react-native-web": "^0.11.7",
@@ -143,11 +142,11 @@
143
142
  "eslintIgnore": [
144
143
  "node_modules/",
145
144
  "lib/",
146
- "src/fabric/*NativeComponent.js"
145
+ "src/specs/*NativeComponent.js"
147
146
  ],
148
147
  "codegenConfig": {
149
148
  "name": "rngesturehandler_codegen",
150
149
  "type": "components",
151
- "jsSrcsDir": "./src/fabric"
150
+ "jsSrcsDir": "./src/specs"
152
151
  }
153
152
  }
@@ -0,0 +1,35 @@
1
+ import { Platform } from 'react-native';
2
+
3
+ let useNewWebImplementation = true;
4
+ let getWasCalled = false;
5
+
6
+ export function enableExperimentalWebImplementation(
7
+ _shouldEnable = true
8
+ ): void {
9
+ // NO-OP since the new implementation is now the default
10
+ }
11
+
12
+ export function enableLegacyWebImplementation(
13
+ shouldUseLegacyImplementation = true
14
+ ): void {
15
+ if (
16
+ Platform.OS !== 'web' ||
17
+ useNewWebImplementation === !shouldUseLegacyImplementation
18
+ ) {
19
+ return;
20
+ }
21
+
22
+ if (getWasCalled) {
23
+ console.error(
24
+ 'Some parts of this application have already started using the new gesture handler implementation. No changes will be applied. You can try enabling legacy implementation earlier.'
25
+ );
26
+ return;
27
+ }
28
+
29
+ useNewWebImplementation = !shouldUseLegacyImplementation;
30
+ }
31
+
32
+ export function isNewWebImplementationEnabled(): boolean {
33
+ getWasCalled = true;
34
+ return useNewWebImplementation;
35
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+
3
+ export default React.createContext(false);
@@ -1,5 +1,5 @@
1
1
  import { ActionType } from './ActionType';
2
- import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
2
+ import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
3
3
 
4
4
  //GestureHandlers
5
5
  import InteractionManager from './web/tools/InteractionManager';
@@ -57,7 +57,7 @@ export default {
57
57
  handlerTag: number,
58
58
  config: T
59
59
  ) {
60
- if (isExperimentalWebImplementationEnabled()) {
60
+ if (isNewWebImplementationEnabled()) {
61
61
  if (!(handlerName in Gestures)) {
62
62
  throw new Error(
63
63
  `react-native-gesture-handler: ${handlerName} is not supported on web.`
@@ -92,14 +92,14 @@ export default {
92
92
  _actionType: ActionType,
93
93
  propsRef: React.RefObject<unknown>
94
94
  ) {
95
- if (isExperimentalWebImplementationEnabled()) {
95
+ if (isNewWebImplementationEnabled()) {
96
96
  NodeManager.getHandler(handlerTag).init(newView, propsRef);
97
97
  } else {
98
98
  HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
99
99
  }
100
100
  },
101
101
  updateGestureHandler(handlerTag: number, newConfig: Config) {
102
- if (isExperimentalWebImplementationEnabled()) {
102
+ if (isNewWebImplementationEnabled()) {
103
103
  NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
104
104
 
105
105
  InteractionManager.getInstance().configureInteractions(
@@ -111,14 +111,14 @@ export default {
111
111
  }
112
112
  },
113
113
  getGestureHandlerNode(handlerTag: number) {
114
- if (isExperimentalWebImplementationEnabled()) {
114
+ if (isNewWebImplementationEnabled()) {
115
115
  return NodeManager.getHandler(handlerTag);
116
116
  } else {
117
117
  return HammerNodeManager.getHandler(handlerTag);
118
118
  }
119
119
  },
120
120
  dropGestureHandler(handlerTag: number) {
121
- if (isExperimentalWebImplementationEnabled()) {
121
+ if (isNewWebImplementationEnabled()) {
122
122
  NodeManager.dropGestureHandler(handlerTag);
123
123
  } else {
124
124
  HammerNodeManager.dropGestureHandler(handlerTag);
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
3
  import { ActionType } from './ActionType';
4
- import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
4
+ import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
5
5
 
6
6
  //GestureHandlers
7
7
  import InteractionManager from './web/tools/InteractionManager';
@@ -59,7 +59,7 @@ export default {
59
59
  handlerTag: number,
60
60
  config: T
61
61
  ) {
62
- if (isExperimentalWebImplementationEnabled()) {
62
+ if (isNewWebImplementationEnabled()) {
63
63
  if (!(handlerName in Gestures)) {
64
64
  throw new Error(
65
65
  `react-native-gesture-handler: ${handlerName} is not supported on web.`
@@ -101,7 +101,7 @@ export default {
101
101
  return;
102
102
  }
103
103
 
104
- if (isExperimentalWebImplementationEnabled()) {
104
+ if (isNewWebImplementationEnabled()) {
105
105
  //@ts-ignore Types should be HTMLElement or React.Component
106
106
  NodeManager.getHandler(handlerTag).init(newView, propsRef);
107
107
  } else {
@@ -110,7 +110,7 @@ export default {
110
110
  }
111
111
  },
112
112
  updateGestureHandler(handlerTag: number, newConfig: Config) {
113
- if (isExperimentalWebImplementationEnabled()) {
113
+ if (isNewWebImplementationEnabled()) {
114
114
  NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
115
115
 
116
116
  InteractionManager.getInstance().configureInteractions(
@@ -122,14 +122,14 @@ export default {
122
122
  }
123
123
  },
124
124
  getGestureHandlerNode(handlerTag: number) {
125
- if (isExperimentalWebImplementationEnabled()) {
125
+ if (isNewWebImplementationEnabled()) {
126
126
  return NodeManager.getHandler(handlerTag);
127
127
  } else {
128
128
  return HammerNodeManager.getHandler(handlerTag);
129
129
  }
130
130
  },
131
131
  dropGestureHandler(handlerTag: number) {
132
- if (isExperimentalWebImplementationEnabled()) {
132
+ if (isNewWebImplementationEnabled()) {
133
133
  NodeManager.dropGestureHandler(handlerTag);
134
134
  } else {
135
135
  HammerNodeManager.dropGestureHandler(handlerTag);
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
3
  import { ActionType } from './ActionType';
4
- import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
4
+ import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
5
5
 
6
6
  //GestureHandlers
7
7
  import InteractionManager from './web/tools/InteractionManager';
@@ -59,7 +59,7 @@ export default {
59
59
  handlerTag: number,
60
60
  config: T
61
61
  ) {
62
- if (isExperimentalWebImplementationEnabled()) {
62
+ if (isNewWebImplementationEnabled()) {
63
63
  if (!(handlerName in Gestures)) {
64
64
  throw new Error(
65
65
  `react-native-gesture-handler: ${handlerName} is not supported on web.`
@@ -101,7 +101,7 @@ export default {
101
101
  return;
102
102
  }
103
103
 
104
- if (isExperimentalWebImplementationEnabled()) {
104
+ if (isNewWebImplementationEnabled()) {
105
105
  //@ts-ignore Types should be HTMLElement or React.Component
106
106
  NodeManager.getHandler(handlerTag).init(newView, propsRef);
107
107
  } else {
@@ -110,7 +110,7 @@ export default {
110
110
  }
111
111
  },
112
112
  updateGestureHandler(handlerTag: number, newConfig: Config) {
113
- if (isExperimentalWebImplementationEnabled()) {
113
+ if (isNewWebImplementationEnabled()) {
114
114
  NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
115
115
 
116
116
  InteractionManager.getInstance().configureInteractions(
@@ -122,14 +122,14 @@ export default {
122
122
  }
123
123
  },
124
124
  getGestureHandlerNode(handlerTag: number) {
125
- if (isExperimentalWebImplementationEnabled()) {
125
+ if (isNewWebImplementationEnabled()) {
126
126
  return NodeManager.getHandler(handlerTag);
127
127
  } else {
128
128
  return HammerNodeManager.getHandler(handlerTag);
129
129
  }
130
130
  },
131
131
  dropGestureHandler(handlerTag: number) {
132
- if (isExperimentalWebImplementationEnabled()) {
132
+ if (isNewWebImplementationEnabled()) {
133
133
  NodeManager.dropGestureHandler(handlerTag);
134
134
  } else {
135
135
  HammerNodeManager.dropGestureHandler(handlerTag);
@@ -54,6 +54,10 @@ export type DrawerLockMode = 'unlocked' | 'locked-closed' | 'locked-open';
54
54
 
55
55
  export type DrawerKeyboardDismissMode = 'none' | 'on-drag';
56
56
 
57
+ // Animated.AnimatedInterpolation has been converted to a generic type
58
+ // in @types/react-native 0.70. This way we can maintain compatibility
59
+ // with all versions of @types/react-native`
60
+ type AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;
57
61
  export interface DrawerLayoutProps {
58
62
  /**
59
63
  * This attribute is present in the standard implementation already and is one
@@ -153,7 +157,7 @@ export interface DrawerLayoutProps {
153
157
  // implicit `children` prop has been removed in @types/react^18.0.0
154
158
  children?:
155
159
  | React.ReactNode
156
- | ((openValue?: Animated.AnimatedInterpolation) => React.ReactNode);
160
+ | ((openValue?: AnimatedInterpolation) => React.ReactNode);
157
161
 
158
162
  /**
159
163
  * @default 'none'
@@ -224,7 +228,7 @@ export default class DrawerLayout extends Component<
224
228
  return true;
225
229
  }
226
230
 
227
- private openValue?: Animated.AnimatedInterpolation;
231
+ private openValue?: AnimatedInterpolation;
228
232
  private onGestureEvent?: (
229
233
  event: GestureEvent<PanGestureHandlerEventPayload>
230
234
  ) => void;
@@ -603,7 +607,7 @@ export default class DrawerLayout extends Component<
603
607
  };
604
608
  }
605
609
 
606
- let drawerTranslateX: number | Animated.AnimatedInterpolation = 0;
610
+ let drawerTranslateX: number | AnimatedInterpolation = 0;
607
611
  if (drawerSlide) {
608
612
  const closedDrawerOffset = fromLeft ? -drawerWidth! : drawerWidth!;
609
613
  if (this.state.drawerState !== IDLE) {
@@ -617,7 +621,7 @@ export default class DrawerLayout extends Component<
617
621
  }
618
622
  }
619
623
  const drawerStyles: {
620
- transform: { translateX: number | Animated.AnimatedInterpolation }[];
624
+ transform: { translateX: number | AnimatedInterpolation }[];
621
625
  flexDirection: 'row-reverse' | 'row';
622
626
  } = {
623
627
  transform: [{ translateX: drawerTranslateX }],
@@ -1,6 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import {
3
- DrawerLayoutAndroid as RNDrawerLayoutAndroid,
4
3
  FlatList as RNFlatList,
5
4
  Switch as RNSwitch,
6
5
  TextInput as RNTextInput,
@@ -21,11 +20,11 @@ export const Switch = createNativeWrapper(RNSwitch, {
21
20
  disallowInterruption: true,
22
21
  });
23
22
  export const TextInput = createNativeWrapper(RNTextInput);
24
- export const DrawerLayoutAndroid = createNativeWrapper(RNDrawerLayoutAndroid, {
25
- disallowInterruption: true,
26
- });
27
- // @ts-ignore -- TODO(TS) to investigate if it's needed
28
- DrawerLayoutAndroid.positions = RNDrawerLayoutAndroid.positions;
23
+ export const DrawerLayoutAndroid = () => {
24
+ console.warn('DrawerLayoutAndroid is not supported on web!');
25
+ return <View />;
26
+ };
27
+
29
28
  // RefreshControl is implemented as a functional component, rendering a View
30
29
  // NativeViewGestureHandler needs to set a ref on its child, which cannot be done
31
30
  // on functional components
@@ -1,10 +1,5 @@
1
- /* eslint-disable @typescript-eslint/no-var-requires */
2
- import { HostComponent, requireNativeComponent } from 'react-native';
1
+ import { HostComponent } from 'react-native';
3
2
  import { RawButtonProps } from './GestureButtons';
4
- import { shouldUseCodegenNativeComponent } from '../utils';
5
-
6
- const RNGestureHandlerButtonNativeComponent = shouldUseCodegenNativeComponent()
7
- ? require('../fabric/RNGestureHandlerButtonNativeComponent').default
8
- : requireNativeComponent('RNGestureHandlerButton');
3
+ import RNGestureHandlerButtonNativeComponent from '../specs/RNGestureHandlerButtonNativeComponent';
9
4
 
10
5
  export default RNGestureHandlerButtonNativeComponent as HostComponent<RawButtonProps>;
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { PropsWithChildren } from 'react';
3
+ import { ViewProps } from 'react-native';
4
+ import { maybeInitializeFabric } from '../init';
5
+ import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
6
+ import GestureHandlerRootViewNativeComponent from '../specs/RNGestureHandlerRootViewNativeComponent';
7
+
8
+ export interface GestureHandlerRootViewProps
9
+ extends PropsWithChildren<ViewProps> {}
10
+
11
+ export default function GestureHandlerRootView(
12
+ props: GestureHandlerRootViewProps
13
+ ) {
14
+ // try initialize fabric on the first render, at this point we can
15
+ // reliably check if fabric is enabled (the function contains a flag
16
+ // to make sure it's called only once)
17
+ maybeInitializeFabric();
18
+
19
+ return (
20
+ <GestureHandlerRootViewContext.Provider value>
21
+ <GestureHandlerRootViewNativeComponent {...props} />
22
+ </GestureHandlerRootViewContext.Provider>
23
+ );
24
+ }
@@ -1,7 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
3
  import { View, ViewProps } from 'react-native';
4
- import { maybeInitializeFabric } from './init';
4
+ import { maybeInitializeFabric } from '../init';
5
+ import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
5
6
 
6
7
  export interface GestureHandlerRootViewProps
7
8
  extends PropsWithChildren<ViewProps> {}
@@ -14,5 +15,9 @@ export default function GestureHandlerRootView(
14
15
  // to make sure it's called only once)
15
16
  maybeInitializeFabric();
16
17
 
17
- return <View {...props} />;
18
+ return (
19
+ <GestureHandlerRootViewContext.Provider value>
20
+ <View {...props} />
21
+ </GestureHandlerRootViewContext.Provider>
22
+ );
18
23
  }
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
3
  import { View, ViewProps } from 'react-native';
4
+ import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
4
5
 
5
6
  export interface GestureHandlerRootViewProps
6
7
  extends PropsWithChildren<ViewProps> {}
@@ -8,5 +9,9 @@ export interface GestureHandlerRootViewProps
8
9
  export default function GestureHandlerRootView(
9
10
  props: GestureHandlerRootViewProps
10
11
  ) {
11
- return <View {...props} />;
12
+ return (
13
+ <GestureHandlerRootViewContext.Provider value>
14
+ <View {...props} />
15
+ </GestureHandlerRootViewContext.Provider>
16
+ );
12
17
  }