react-native-gesture-handler 2.8.0 → 2.10.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 (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
  }