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
@@ -36,6 +36,11 @@ type SwipeableExcludes = Exclude<
36
36
  'onGestureEvent' | 'onHandlerStateChange'
37
37
  >;
38
38
 
39
+ // Animated.AnimatedInterpolation has been converted to a generic type
40
+ // in @types/react-native 0.70. This way we can maintain compatibility
41
+ // with all versions of @types/react-native
42
+ type AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;
43
+
39
44
  export interface SwipeableProps
40
45
  extends Pick<PanGestureHandlerProps, SwipeableExcludes> {
41
46
  /**
@@ -68,6 +73,18 @@ export interface SwipeableProps
68
73
  */
69
74
  rightThreshold?: number;
70
75
 
76
+ /**
77
+ * Distance that the panel must be dragged from the left edge to be considered
78
+ * a swipe. The default value is 10.
79
+ */
80
+ dragOffsetFromLeftEdge?: number;
81
+
82
+ /**
83
+ * Distance that the panel must be dragged from the right edge to be considered
84
+ * a swipe. The default value is 10.
85
+ */
86
+ dragOffsetFromRightEdge?: number;
87
+
71
88
  /**
72
89
  * Value indicating if the swipeable panel can be pulled further than the left
73
90
  * actions panel's width. It is set to true by default as long as the left
@@ -150,8 +167,9 @@ export interface SwipeableProps
150
167
  * To support `rtl` flexbox layouts use `flexDirection` styling.
151
168
  * */
152
169
  renderLeftActions?: (
153
- progressAnimatedValue: Animated.AnimatedInterpolation,
154
- dragAnimatedValue: Animated.AnimatedInterpolation
170
+ progressAnimatedValue: AnimatedInterpolation,
171
+ dragAnimatedValue: AnimatedInterpolation,
172
+ swipeable: Swipeable
155
173
  ) => React.ReactNode;
156
174
  /**
157
175
  *
@@ -163,8 +181,8 @@ export interface SwipeableProps
163
181
  * To support `rtl` flexbox layouts use `flexDirection` styling.
164
182
  * */
165
183
  renderRightActions?: (
166
- progressAnimatedValue: Animated.AnimatedInterpolation,
167
- dragAnimatedValue: Animated.AnimatedInterpolation,
184
+ progressAnimatedValue: AnimatedInterpolation,
185
+ dragAnimatedValue: AnimatedInterpolation,
168
186
  swipeable: Swipeable
169
187
  ) => React.ReactNode;
170
188
 
@@ -242,11 +260,11 @@ export default class Swipeable extends Component<
242
260
  private onGestureEvent?: (
243
261
  event: GestureEvent<PanGestureHandlerEventPayload>
244
262
  ) => void;
245
- private transX?: Animated.AnimatedInterpolation;
246
- private showLeftAction?: Animated.AnimatedInterpolation | Animated.Value;
247
- private leftActionTranslate?: Animated.AnimatedInterpolation;
248
- private showRightAction?: Animated.AnimatedInterpolation | Animated.Value;
249
- private rightActionTranslate?: Animated.AnimatedInterpolation;
263
+ private transX?: AnimatedInterpolation;
264
+ private showLeftAction?: AnimatedInterpolation | Animated.Value;
265
+ private leftActionTranslate?: AnimatedInterpolation;
266
+ private showRightAction?: AnimatedInterpolation | Animated.Value;
267
+ private rightActionTranslate?: AnimatedInterpolation;
250
268
 
251
269
  private updateAnimatedEvent = (
252
270
  props: SwipeableProps,
@@ -437,9 +455,22 @@ export default class Swipeable extends Component<
437
455
  this.animateRow(this.currentOffset(), -rightWidth);
438
456
  };
439
457
 
458
+ reset = () => {
459
+ const { dragX, rowTranslation } = this.state;
460
+ dragX.setValue(0);
461
+ rowTranslation.setValue(0);
462
+ this.setState({ rowState: 0 });
463
+ };
464
+
440
465
  render() {
441
466
  const { rowState } = this.state;
442
- const { children, renderLeftActions, renderRightActions } = this.props;
467
+ const {
468
+ children,
469
+ renderLeftActions,
470
+ renderRightActions,
471
+ dragOffsetFromLeftEdge = 10,
472
+ dragOffsetFromRightEdge = 10,
473
+ } = this.props;
443
474
 
444
475
  const left = renderLeftActions && (
445
476
  <Animated.View
@@ -450,7 +481,7 @@ export default class Swipeable extends Component<
450
481
  // it for some reason
451
482
  { transform: [{ translateX: this.leftActionTranslate! }] },
452
483
  ]}>
453
- {renderLeftActions(this.showLeftAction!, this.transX!)}
484
+ {renderLeftActions(this.showLeftAction!, this.transX!, this)}
454
485
  <View
455
486
  onLayout={({ nativeEvent }) =>
456
487
  this.setState({ leftWidth: nativeEvent.layout.x })
@@ -476,7 +507,7 @@ export default class Swipeable extends Component<
476
507
 
477
508
  return (
478
509
  <PanGestureHandler
479
- activeOffsetX={[-10, 10]}
510
+ activeOffsetX={[-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]}
480
511
  {...this.props}
481
512
  onGestureEvent={this.onGestureEvent}
482
513
  onHandlerStateChange={this.onHandlerStateChange}>
@@ -3,7 +3,9 @@ import { StyleSheet, StyleProp, ViewStyle } from 'react-native';
3
3
  import hoistNonReactStatics from 'hoist-non-react-statics';
4
4
  import GestureHandlerRootView from './GestureHandlerRootView';
5
5
 
6
- export default function gestureHandlerRootHOC<P>(
6
+ export default function gestureHandlerRootHOC<
7
+ P extends Record<string, unknown>
8
+ >(
7
9
  Component: React.ComponentType<P>,
8
10
  containerStyles?: StyleProp<ViewStyle>
9
11
  ): React.ComponentType<P> {
@@ -19,6 +21,7 @@ export default function gestureHandlerRootHOC<P>(
19
21
  Component.displayName || Component.name
20
22
  })`;
21
23
 
24
+ // @ts-ignore - hoistNonReactStatics uses old version of @types/react
22
25
  hoistNonReactStatics(Wrapper, Component);
23
26
 
24
27
  return Wrapper;
@@ -82,5 +82,7 @@ export const LongPressGestureHandler = createHandler<
82
82
  ...baseGestureHandlerProps,
83
83
  ...longPressGestureHandlerProps,
84
84
  ] as const,
85
- config: {},
85
+ config: {
86
+ shouldCancelWhenOutside: true,
87
+ },
86
88
  });
@@ -88,5 +88,7 @@ export const TapGestureHandler = createHandler<
88
88
  ...baseGestureHandlerProps,
89
89
  ...tapGestureHandlerProps,
90
90
  ] as const,
91
- config: {},
91
+ config: {
92
+ shouldCancelWhenOutside: true,
93
+ },
92
94
  });
@@ -28,6 +28,7 @@ import { ValueOf } from '../typeUtils';
28
28
  import { isFabric, isJestEnv, tagMessage } from '../utils';
29
29
  import { ActionType } from '../ActionType';
30
30
  import { PressabilityDebugView } from './PressabilityDebugView';
31
+ import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
31
32
 
32
33
  const UIManagerAny = UIManager as any;
33
34
 
@@ -168,13 +169,14 @@ export default function createHandler<
168
169
  HandlerState
169
170
  > {
170
171
  static displayName = name;
172
+ static contextType = GestureHandlerRootViewContext;
171
173
 
172
174
  private handlerTag: number;
173
175
  private config: Record<string, unknown>;
174
176
  private propsRef: React.MutableRefObject<unknown>;
177
+ private isMountedRef: React.MutableRefObject<boolean | null>;
175
178
  private viewNode: any;
176
179
  private viewTag?: number;
177
- private updateEnqueued: ReturnType<typeof setImmediate> | null = null;
178
180
  private inspectorToggleListener?: EmitterSubscription;
179
181
 
180
182
  constructor(props: T & InternalEventHandlers) {
@@ -182,6 +184,7 @@ export default function createHandler<
182
184
  this.handlerTag = getNextHandlerTag();
183
185
  this.config = {};
184
186
  this.propsRef = React.createRef();
187
+ this.isMountedRef = React.createRef();
185
188
  this.state = { allowTouches };
186
189
  if (props.id) {
187
190
  if (handlerIDToTag[props.id] !== undefined) {
@@ -193,6 +196,7 @@ export default function createHandler<
193
196
 
194
197
  componentDidMount() {
195
198
  const props: HandlerProps<U> = this.props;
199
+ this.isMountedRef.current = true;
196
200
 
197
201
  if (DEV_ON_ANDROID) {
198
202
  this.inspectorToggleListener = DeviceEventEmitter.addListener(
@@ -207,11 +211,10 @@ export default function createHandler<
207
211
  // If there are unresolved refs (e.g. ".current" has not yet been set)
208
212
  // passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to
209
213
  // _update method that will try to update native handler props using
210
- // setImmediate. This makes it so update() function gets called after all
214
+ // queueMicrotask. This makes it so update() function gets called after all
211
215
  // react components are mounted and we expect the missing ref object to
212
216
  // be resolved by then.
213
- this.updateEnqueued = setImmediate(() => {
214
- this.updateEnqueued = null;
217
+ queueMicrotask(() => {
215
218
  this.update(UNRESOLVED_REFS_RETRY_LIMIT);
216
219
  });
217
220
  }
@@ -237,11 +240,9 @@ export default function createHandler<
237
240
 
238
241
  componentWillUnmount() {
239
242
  this.inspectorToggleListener?.remove();
243
+ this.isMountedRef.current = false;
240
244
  RNGestureHandlerModule.dropGestureHandler(this.handlerTag);
241
245
  scheduleFlushOperations();
242
- if (this.updateEnqueued) {
243
- clearImmediate(this.updateEnqueued);
244
- }
245
246
  // We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context
246
247
  const handlerID: string | undefined = this.props.id;
247
248
  if (handlerID) {
@@ -365,14 +366,17 @@ export default function createHandler<
365
366
  };
366
367
 
367
368
  private update(remainingTries: number) {
369
+ if (!this.isMountedRef.current) {
370
+ return;
371
+ }
372
+
368
373
  const props: HandlerProps<U> = this.props;
369
374
 
370
375
  // When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of
371
376
  // `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying
372
377
  // again is easy enough fix.
373
378
  if (hasUnresolvedRefs(props) && remainingTries > 0) {
374
- this.updateEnqueued = setImmediate(() => {
375
- this.updateEnqueued = null;
379
+ queueMicrotask(() => {
376
380
  this.update(remainingTries - 1);
377
381
  });
378
382
  } else {
@@ -398,6 +402,13 @@ export default function createHandler<
398
402
  }
399
403
 
400
404
  render() {
405
+ if (__DEV__ && !this.context) {
406
+ throw new Error(
407
+ name +
408
+ ' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
409
+ );
410
+ }
411
+
401
412
  let gestureEventHandler = this.onGestureHandlerEvent;
402
413
  // Another instance of https://github.com/microsoft/TypeScript/issues/13995
403
414
  type OnGestureEventHandlers = {
@@ -191,16 +191,15 @@ export function findNodeHandle(
191
191
  return findNodeHandleRN(node);
192
192
  }
193
193
 
194
- let scheduledFlushOperationsId: ReturnType<
195
- typeof requestAnimationFrame
196
- > | null = null;
194
+ let flushOperationsScheduled = false;
197
195
 
198
196
  export function scheduleFlushOperations() {
199
- if (scheduledFlushOperationsId === null) {
200
- scheduledFlushOperationsId = requestAnimationFrame(() => {
197
+ if (!flushOperationsScheduled) {
198
+ flushOperationsScheduled = true;
199
+ queueMicrotask(() => {
201
200
  RNGestureHandlerModule.flushOperations();
202
201
 
203
- scheduledFlushOperationsId = null;
202
+ flushOperationsScheduled = false;
204
203
  });
205
204
  }
206
205
  }
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useRef, RefObject } from 'react';
1
+ import React, { useContext, useEffect, useRef, useState } from 'react';
2
2
  import {
3
3
  GestureType,
4
4
  HandlerCallbacks,
@@ -42,7 +42,9 @@ import { Platform } from 'react-native';
42
42
  import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
43
43
  import { onGestureHandlerEvent } from './eventReceiver';
44
44
  import { RNRenderer } from '../../RNRenderer';
45
- import { isExperimentalWebImplementationEnabled } from '../../EnableExperimentalWebImplementation';
45
+ import { isNewWebImplementationEnabled } from '../../EnableNewWebImplementation';
46
+ import { nativeViewGestureHandlerProps } from '../NativeViewGestureHandler';
47
+ import GestureHandlerRootViewContext from '../../GestureHandlerRootViewContext';
46
48
 
47
49
  declare const global: {
48
50
  isFormsStackingContext: (node: unknown) => boolean | null; // JSI function
@@ -56,6 +58,7 @@ const ALLOWED_PROPS = [
56
58
  ...longPressGestureHandlerProps,
57
59
  ...forceTouchGestureHandlerProps,
58
60
  ...flingGestureHandlerProps,
61
+ ...nativeViewGestureHandlerProps,
59
62
  ];
60
63
 
61
64
  export type GestureConfigReference = {
@@ -130,6 +133,7 @@ interface AttachHandlersConfig {
130
133
  gesture: GestureType[];
131
134
  viewTag: number;
132
135
  webEventHandlersRef: React.RefObject<WebEventHandler>;
136
+ mountedRef: React.RefObject<boolean>;
133
137
  }
134
138
 
135
139
  function attachHandlers({
@@ -138,6 +142,7 @@ function attachHandlers({
138
142
  gesture,
139
143
  viewTag,
140
144
  webEventHandlersRef,
145
+ mountedRef,
141
146
  }: AttachHandlersConfig) {
142
147
  if (!preparedGesture.firstExecution) {
143
148
  gestureConfig.initialize();
@@ -145,9 +150,12 @@ function attachHandlers({
145
150
  preparedGesture.firstExecution = false;
146
151
  }
147
152
 
148
- // use setImmediate to extract handlerTags, because all refs should be initialized
153
+ // use queueMicrotask to extract handlerTags, because all refs should be initialized
149
154
  // when it's ran
150
- setImmediate(() => {
155
+ queueMicrotask(() => {
156
+ if (!mountedRef.current) {
157
+ return;
158
+ }
151
159
  gestureConfig.prepare();
152
160
  });
153
161
 
@@ -162,9 +170,12 @@ function attachHandlers({
162
170
  registerHandler(handler.handlerTag, handler, handler.config.testId);
163
171
  }
164
172
 
165
- // use setImmediate to extract handlerTags, because all refs should be initialized
173
+ // use queueMicrotask to extract handlerTags, because all refs should be initialized
166
174
  // when it's ran
167
- setImmediate(() => {
175
+ queueMicrotask(() => {
176
+ if (!mountedRef.current) {
177
+ return;
178
+ }
168
179
  for (const handler of gesture) {
169
180
  let requireToFail: number[] = [];
170
181
  if (handler.config.requireToFail) {
@@ -230,7 +241,7 @@ function updateHandlers(
230
241
  preparedGesture: GestureConfigReference,
231
242
  gestureConfig: ComposedGesture | GestureType,
232
243
  gesture: GestureType[],
233
- mountedRef: RefObject<boolean>
244
+ mountedRef: React.RefObject<boolean>
234
245
  ) {
235
246
  gestureConfig.prepare();
236
247
 
@@ -246,10 +257,10 @@ function updateHandlers(
246
257
  }
247
258
  }
248
259
 
249
- // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated
260
+ // use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated
250
261
  // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait
251
262
  // in case of external relations)
252
- setImmediate(() => {
263
+ queueMicrotask(() => {
253
264
  if (!mountedRef.current) {
254
265
  return;
255
266
  }
@@ -588,7 +599,20 @@ interface GestureDetectorProps {
588
599
  userSelect?: UserSelect;
589
600
  children?: React.ReactNode;
590
601
  }
602
+ interface GestureDetectorState {
603
+ firstRender: boolean;
604
+ viewRef: React.Component | null;
605
+ previousViewTag: number;
606
+ forceReattach: boolean;
607
+ }
591
608
  export const GestureDetector = (props: GestureDetectorProps) => {
609
+ const rootViewContext = useContext(GestureHandlerRootViewContext);
610
+ if (__DEV__ && !rootViewContext) {
611
+ throw new Error(
612
+ 'GestureDetector must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
613
+ );
614
+ }
615
+
592
616
  const gestureConfig = props.gesture;
593
617
 
594
618
  if (props.userSelect) {
@@ -597,20 +621,31 @@ export const GestureDetector = (props: GestureDetectorProps) => {
597
621
 
598
622
  const gesture = gestureConfig.toGestureArray();
599
623
  const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);
600
- const viewRef = useRef(null);
601
- const firstRenderRef = useRef(true);
624
+
625
+ // store state in ref to prevent unnecessary renders
626
+ const state = useRef<GestureDetectorState>({
627
+ firstRender: true,
628
+ viewRef: null,
629
+ previousViewTag: -1,
630
+ forceReattach: false,
631
+ }).current;
602
632
  const mountedRef = useRef(false);
603
633
  const webEventHandlersRef = useRef<WebEventHandler>({
604
634
  onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
605
635
  onGestureHandlerEvent(e.nativeEvent);
606
636
  },
607
- onGestureHandlerStateChange: isExperimentalWebImplementationEnabled()
637
+ onGestureHandlerStateChange: isNewWebImplementationEnabled()
608
638
  ? (e: HandlerStateChangeEvent<unknown>) => {
609
639
  onGestureHandlerEvent(e.nativeEvent);
610
640
  }
611
641
  : undefined,
612
642
  });
613
643
 
644
+ const [renderState, setRenderState] = useState(false);
645
+ function forceRender() {
646
+ setRenderState(!renderState);
647
+ }
648
+
614
649
  const preparedGesture = React.useRef<GestureConfigReference>({
615
650
  config: gesture,
616
651
  animatedEventHandler: null,
@@ -627,10 +662,41 @@ export const GestureDetector = (props: GestureDetectorProps) => {
627
662
  );
628
663
  }
629
664
 
665
+ function onHandlersUpdate(skipConfigUpdate?: boolean) {
666
+ // if the underlying view has changed we need to reattach handlers to the new view
667
+ const viewTag = findNodeHandle(state.viewRef) as number;
668
+ const forceReattach = viewTag !== state.previousViewTag;
669
+
670
+ if (forceReattach || needsToReattach(preparedGesture, gesture)) {
671
+ validateDetectorChildren(state.viewRef);
672
+ dropHandlers(preparedGesture);
673
+ attachHandlers({
674
+ preparedGesture,
675
+ gestureConfig,
676
+ gesture,
677
+ webEventHandlersRef,
678
+ viewTag,
679
+ mountedRef,
680
+ });
681
+
682
+ state.previousViewTag = viewTag;
683
+ state.forceReattach = forceReattach;
684
+ if (forceReattach) {
685
+ forceRender();
686
+ }
687
+ } else if (!skipConfigUpdate) {
688
+ updateHandlers(preparedGesture, gestureConfig, gesture, mountedRef);
689
+ }
690
+ }
691
+
630
692
  // Reanimated event should be rebuilt only when gestures are reattached, otherwise
631
693
  // config update will be enough as all necessary items are stored in shared values anyway
632
694
  const needsToRebuildReanimatedEvent =
633
- preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);
695
+ preparedGesture.firstExecution ||
696
+ needsToReattach(preparedGesture, gesture) ||
697
+ state.forceReattach;
698
+
699
+ state.forceReattach = false;
634
700
 
635
701
  if (preparedGesture.firstExecution) {
636
702
  gestureConfig.initialize();
@@ -643,17 +709,19 @@ export const GestureDetector = (props: GestureDetectorProps) => {
643
709
  }
644
710
 
645
711
  useEffect(() => {
646
- firstRenderRef.current = true;
712
+ const viewTag = findNodeHandle(state.viewRef) as number;
713
+ state.firstRender = true;
647
714
  mountedRef.current = true;
648
- const viewTag = findNodeHandle(viewRef.current) as number;
649
715
 
650
- validateDetectorChildren(viewRef.current);
716
+ validateDetectorChildren(state.viewRef);
717
+
651
718
  attachHandlers({
652
719
  preparedGesture,
653
720
  gestureConfig,
654
721
  gesture,
655
- viewTag,
656
722
  webEventHandlersRef,
723
+ viewTag,
724
+ mountedRef,
657
725
  });
658
726
 
659
727
  return () => {
@@ -663,31 +731,26 @@ export const GestureDetector = (props: GestureDetectorProps) => {
663
731
  }, []);
664
732
 
665
733
  useEffect(() => {
666
- if (!firstRenderRef.current) {
667
- const viewTag = findNodeHandle(viewRef.current) as number;
668
-
669
- if (needsToReattach(preparedGesture, gesture)) {
670
- validateDetectorChildren(viewRef.current);
671
- dropHandlers(preparedGesture);
672
- attachHandlers({
673
- preparedGesture,
674
- gestureConfig,
675
- gesture,
676
- viewTag,
677
- webEventHandlersRef,
678
- });
679
- } else {
680
- updateHandlers(preparedGesture, gestureConfig, gesture, mountedRef);
681
- }
734
+ if (!state.firstRender) {
735
+ onHandlersUpdate();
682
736
  } else {
683
- firstRenderRef.current = false;
737
+ state.firstRender = false;
684
738
  }
685
739
  }, [props]);
686
740
 
687
741
  const refFunction = (ref: unknown) => {
688
742
  if (ref !== null) {
689
- //@ts-ignore Just setting the ref
690
- viewRef.current = ref;
743
+ // @ts-ignore Just setting the view ref
744
+ state.viewRef = ref;
745
+
746
+ // if it's the first render, also set the previousViewTag to prevent reattaching gestures when not needed
747
+ if (state.previousViewTag === -1) {
748
+ state.previousViewTag = findNodeHandle(state.viewRef) as number;
749
+ }
750
+
751
+ // pass true as `skipConfigUpdate`, here we only want to trigger the eventual reattaching of handlers
752
+ // in case the view has changed, while config update would be handled be the `useEffect` above
753
+ onHandlersUpdate(true);
691
754
 
692
755
  if (isFabric()) {
693
756
  const node = getShadowNodeFromRef(ref);
@@ -11,6 +11,7 @@ export class LongPressGesture extends BaseGesture<LongPressGestureHandlerEventPa
11
11
  super();
12
12
 
13
13
  this.handlerName = 'LongPressGestureHandler';
14
+ this.shouldCancelWhenOutside(true);
14
15
  }
15
16
 
16
17
  minDuration(duration: number) {
@@ -29,27 +29,28 @@ let Reanimated: {
29
29
 
30
30
  try {
31
31
  Reanimated = require('react-native-reanimated');
32
+ } catch (e) {
33
+ // When 'react-native-reanimated' is not available we want to quietly continue
34
+ // @ts-ignore TS demands the variable to be initialized
35
+ Reanimated = undefined;
36
+ }
32
37
 
33
- if (!Reanimated.useSharedValue) {
34
- // @ts-ignore Make sure the loaded module is actually Reanimated, if it's not
35
- // reset the module to undefined so we can fallback to the default implementation
36
- Reanimated = undefined;
37
- throw new Error('react-native-reanimated is not found');
38
- }
38
+ if (!Reanimated?.useSharedValue) {
39
+ // @ts-ignore Make sure the loaded module is actually Reanimated, if it's not
40
+ // reset the module to undefined so we can fallback to the default implementation
41
+ Reanimated = undefined;
42
+ }
39
43
 
40
- if (!Reanimated.setGestureState) {
41
- Reanimated.setGestureState = () => {
42
- 'worklet';
43
- console.warn(
44
- tagMessage(
45
- 'Please use newer version of react-native-reanimated in order to control state of the gestures.'
46
- )
47
- );
48
- };
49
- }
50
- // When 'react-native-reanimated' is not available we want to
51
- // quietly continue
52
- // eslint-disable-next-line no-empty
53
- } catch (e) {}
44
+ if (Reanimated !== undefined && !Reanimated.setGestureState) {
45
+ // The loaded module is Reanimated but it doesn't have the setGestureState defined
46
+ Reanimated.setGestureState = () => {
47
+ 'worklet';
48
+ console.warn(
49
+ tagMessage(
50
+ 'Please use newer version of react-native-reanimated in order to control state of the gestures.'
51
+ )
52
+ );
53
+ };
54
+ }
54
55
 
55
56
  export { Reanimated };
@@ -11,6 +11,7 @@ export class TapGesture extends BaseGesture<TapGestureHandlerEventPayload> {
11
11
  super();
12
12
 
13
13
  this.handlerName = 'TapGestureHandler';
14
+ this.shouldCancelWhenOutside(true);
14
15
  }
15
16
 
16
17
  minPointers(minPointers: number) {
package/src/index.ts CHANGED
@@ -2,8 +2,8 @@ import { initialize } from './init';
2
2
 
3
3
  export { Directions } from './Directions';
4
4
  export { State } from './State';
5
- export { default as gestureHandlerRootHOC } from './gestureHandlerRootHOC';
6
- export { default as GestureHandlerRootView } from './GestureHandlerRootView';
5
+ export { default as gestureHandlerRootHOC } from './components/gestureHandlerRootHOC';
6
+ export { default as GestureHandlerRootView } from './components/GestureHandlerRootView';
7
7
  export type {
8
8
  // event types
9
9
  GestureEvent,
@@ -92,6 +92,7 @@ export {
92
92
  BaseButton,
93
93
  RectButton,
94
94
  BorderlessButton,
95
+ PureNativeButton,
95
96
  } from './components/GestureButtons';
96
97
  export {
97
98
  TouchableHighlight,
@@ -157,6 +158,9 @@ export type {
157
158
  } from './components/DrawerLayout';
158
159
  export { default as DrawerLayout } from './components/DrawerLayout';
159
160
 
160
- export { enableExperimentalWebImplementation } from './EnableExperimentalWebImplementation';
161
+ export {
162
+ enableExperimentalWebImplementation,
163
+ enableLegacyWebImplementation,
164
+ } from './EnableNewWebImplementation';
161
165
 
162
166
  initialize();
package/src/utils.ts CHANGED
@@ -55,11 +55,6 @@ export function isFabric(): boolean {
55
55
  return !!global?.nativeFabricUIManager;
56
56
  }
57
57
 
58
- export function shouldUseCodegenNativeComponent(): boolean {
59
- // use codegenNativeComponent starting with RN 0.68
60
- return REACT_NATIVE_VERSION.minor >= 68 || REACT_NATIVE_VERSION.major > 0;
61
- }
62
-
63
58
  export function isRemoteDebuggingEnabled(): boolean {
64
59
  // react-native-reanimated checks if in remote debugging in the same way
65
60
  // @ts-ignore global is available but node types are not included
@@ -159,11 +159,6 @@ export default class FlingGestureHandler extends GestureHandler {
159
159
  this.endFling();
160
160
  }
161
161
 
162
- protected onPointerCancel(event: AdaptedEvent): void {
163
- super.onPointerCancel(event);
164
- this.reset();
165
- }
166
-
167
162
  public activate(force?: boolean): void {
168
163
  super.activate(force);
169
164
  this.end();
@@ -352,6 +352,9 @@ export default abstract class GestureHandler {
352
352
  if (this.config.needsPointerData) {
353
353
  this.sendTouchEvent(event);
354
354
  }
355
+
356
+ this.cancel();
357
+ this.reset();
355
358
  }
356
359
  protected onPointerOutOfBounds(event: AdaptedEvent): void {
357
360
  this.tryToSendMoveEvent(true);
@@ -22,7 +22,6 @@ export default class LongPressGestureHandler extends GestureHandler {
22
22
 
23
23
  public init(ref: number, propsRef: React.RefObject<unknown>) {
24
24
  super.init(ref, propsRef);
25
- this.setShouldCancelWhenOutside(true);
26
25
 
27
26
  this.view.oncontextmenu = () => false;
28
27
  }