react-native-gesture-handler 2.17.0 → 2.18.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 (428) hide show
  1. package/ReanimatedSwipeable/package.json +6 -0
  2. package/android/build.gradle +0 -105
  3. package/android/gradle.properties +0 -7
  4. package/android/paper/src/main/java/com/swmansion/gesturehandler/NativeRNGestureHandlerModuleSpec.java +22 -10
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +1 -1
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +16 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +7 -8
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureDetector.kt +14 -4
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +3 -1
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +3 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +2 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +8 -7
  13. package/android/src/main/jni/cpp-adapter.cpp +5 -3
  14. package/apple/Handlers/RNFlingHandler.m +1 -0
  15. package/apple/Handlers/RNForceTouchHandler.m +2 -0
  16. package/apple/Handlers/RNLongPressHandler.m +2 -1
  17. package/apple/Handlers/RNManualHandler.m +1 -0
  18. package/apple/Handlers/RNNativeViewHandler.mm +31 -27
  19. package/apple/Handlers/RNPanHandler.m +1 -0
  20. package/apple/Handlers/RNPinchHandler.m +1 -0
  21. package/apple/Handlers/RNRotationHandler.m +1 -0
  22. package/apple/Handlers/RNTapHandler.m +1 -0
  23. package/apple/RNGestureHandlerModule.mm +3 -2
  24. package/apple/RNRootViewGestureRecognizer.m +5 -0
  25. package/lib/commonjs/Directions.js +2 -2
  26. package/lib/commonjs/Directions.js.map +1 -1
  27. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  28. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  29. package/lib/commonjs/components/DrawerLayout.js +2 -2
  30. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  31. package/lib/commonjs/components/GestureButtons.js +3 -3
  32. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  33. package/lib/commonjs/components/GestureButtonsProps.js +6 -0
  34. package/lib/commonjs/components/GestureButtonsProps.js.map +1 -0
  35. package/lib/commonjs/components/GestureComponents.js +1 -1
  36. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  37. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  38. package/lib/commonjs/components/GestureHandlerRootView.android.js +1 -1
  39. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
  40. package/lib/commonjs/components/GestureHandlerRootView.js +1 -1
  41. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  42. package/lib/commonjs/components/Pressable/Pressable.js +334 -0
  43. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -0
  44. package/lib/commonjs/components/Pressable/PressableProps.js +6 -0
  45. package/lib/commonjs/components/Pressable/PressableProps.js.map +1 -0
  46. package/lib/commonjs/components/Pressable/index.js +24 -0
  47. package/lib/commonjs/components/Pressable/index.js.map +1 -0
  48. package/lib/commonjs/components/Pressable/utils.js +136 -0
  49. package/lib/commonjs/components/Pressable/utils.js.map +1 -0
  50. package/lib/commonjs/components/ReanimatedSwipeable.js +317 -0
  51. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -0
  52. package/lib/commonjs/components/Swipeable.js +3 -3
  53. package/lib/commonjs/components/Swipeable.js.map +1 -1
  54. package/lib/commonjs/components/touchables/GenericTouchable.js +4 -4
  55. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  56. package/lib/commonjs/components/touchables/GenericTouchableProps.js +6 -0
  57. package/lib/commonjs/components/touchables/GenericTouchableProps.js.map +1 -0
  58. package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
  59. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
  60. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  61. package/lib/commonjs/components/touchables/TouchableNativeFeedbackProps.js +6 -0
  62. package/lib/commonjs/components/touchables/TouchableNativeFeedbackProps.js.map +1 -0
  63. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  64. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  65. package/lib/commonjs/getShadowNodeFromRef.js +2 -2
  66. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  67. package/lib/commonjs/ghQueueMicrotask.js +3 -4
  68. package/lib/commonjs/ghQueueMicrotask.js.map +1 -1
  69. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  70. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  71. package/lib/commonjs/handlers/GestureHandlerEventPayload.js +2 -0
  72. package/lib/commonjs/handlers/GestureHandlerEventPayload.js.map +1 -0
  73. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  74. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  76. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  78. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/createHandler.js +21 -19
  80. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/createNativeWrapper.js +3 -3
  82. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  83. package/lib/commonjs/handlers/gestureHandlerCommon.js +0 -86
  84. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  85. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  86. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +9 -9
  87. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  88. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js +2 -2
  89. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
  90. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +1 -1
  91. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  92. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +21 -31
  93. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -1
  95. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  96. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +5 -5
  97. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  98. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  100. package/lib/commonjs/handlers/gestures/gesture.js +7 -7
  101. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  102. package/lib/commonjs/handlers/gestures/gestureComposition.js +5 -5
  103. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  104. package/lib/commonjs/handlers/gestures/gestureStateManager.js +1 -1
  105. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  106. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  107. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -1
  108. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  109. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  110. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -1
  111. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
  112. package/lib/commonjs/handlers/getNextHandlerTag.js +12 -0
  113. package/lib/commonjs/handlers/getNextHandlerTag.js.map +1 -0
  114. package/lib/commonjs/handlers/handlersRegistry.js +0 -6
  115. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  116. package/lib/commonjs/handlers/utils.js +91 -0
  117. package/lib/commonjs/handlers/utils.js.map +1 -0
  118. package/lib/commonjs/index.js +8 -0
  119. package/lib/commonjs/index.js.map +1 -1
  120. package/lib/commonjs/init.js +1 -1
  121. package/lib/commonjs/init.js.map +1 -1
  122. package/lib/commonjs/jestUtils/jestUtils.js +2 -2
  123. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  124. package/lib/commonjs/mocks.js +2 -2
  125. package/lib/commonjs/mocks.js.map +1 -1
  126. package/lib/commonjs/utils.js +1 -1
  127. package/lib/commonjs/utils.js.map +1 -1
  128. package/lib/commonjs/web/Gestures.js +1 -1
  129. package/lib/commonjs/web/Gestures.js.map +1 -1
  130. package/lib/commonjs/web/detectors/RotationGestureDetector.js +1 -1
  131. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  132. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +4 -4
  133. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  134. package/lib/commonjs/web/handlers/FlingGestureHandler.js +1 -1
  135. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  136. package/lib/commonjs/web/handlers/GestureHandler.js +6 -11
  137. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  138. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +1 -1
  139. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  140. package/lib/commonjs/web/handlers/PanGestureHandler.js +1 -1
  141. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  142. package/lib/commonjs/web/handlers/TapGestureHandler.js +1 -1
  143. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  144. package/lib/commonjs/web/tools/EventManager.js +2 -2
  145. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  146. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +4 -11
  147. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  148. package/lib/commonjs/web/tools/LeastSquareSolver.js +18 -18
  149. package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -1
  150. package/lib/commonjs/web/tools/PointerEventManager.js +2 -2
  151. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  152. package/lib/commonjs/web/tools/PointerTracker.js +1 -1
  153. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  154. package/lib/commonjs/web/tools/TouchEventManager.js +4 -4
  155. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  156. package/lib/commonjs/web/tools/VelocityTracker.js +6 -6
  157. package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -1
  158. package/lib/commonjs/web_hammer/NodeManager.js +2 -0
  159. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  160. package/lib/module/Directions.js +2 -2
  161. package/lib/module/Directions.js.map +1 -1
  162. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  163. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  164. package/lib/module/components/DrawerLayout.js +2 -2
  165. package/lib/module/components/DrawerLayout.js.map +1 -1
  166. package/lib/module/components/GestureButtons.js +3 -3
  167. package/lib/module/components/GestureButtons.js.map +1 -1
  168. package/lib/module/components/GestureButtonsProps.js +2 -0
  169. package/lib/module/components/GestureButtonsProps.js.map +1 -0
  170. package/lib/module/components/GestureComponents.js +1 -1
  171. package/lib/module/components/GestureComponents.js.map +1 -1
  172. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  173. package/lib/module/components/GestureHandlerRootView.android.js +1 -1
  174. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
  175. package/lib/module/components/GestureHandlerRootView.js +1 -1
  176. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  177. package/lib/module/components/Pressable/Pressable.js +309 -0
  178. package/lib/module/components/Pressable/Pressable.js.map +1 -0
  179. package/lib/module/components/Pressable/PressableProps.js +2 -0
  180. package/lib/module/components/Pressable/PressableProps.js.map +1 -0
  181. package/lib/module/components/Pressable/index.js +3 -0
  182. package/lib/module/components/Pressable/index.js.map +1 -0
  183. package/lib/module/components/Pressable/utils.js +120 -0
  184. package/lib/module/components/Pressable/utils.js.map +1 -0
  185. package/lib/module/components/ReanimatedSwipeable.js +293 -0
  186. package/lib/module/components/ReanimatedSwipeable.js.map +1 -0
  187. package/lib/module/components/Swipeable.js +3 -3
  188. package/lib/module/components/Swipeable.js.map +1 -1
  189. package/lib/module/components/touchables/GenericTouchable.js +4 -4
  190. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  191. package/lib/module/components/touchables/GenericTouchableProps.js +2 -0
  192. package/lib/module/components/touchables/GenericTouchableProps.js.map +1 -0
  193. package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
  194. package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
  195. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  196. package/lib/module/components/touchables/TouchableNativeFeedbackProps.js +2 -0
  197. package/lib/module/components/touchables/TouchableNativeFeedbackProps.js.map +1 -0
  198. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  199. package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  200. package/lib/module/getShadowNodeFromRef.js +2 -2
  201. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  202. package/lib/module/ghQueueMicrotask.js +3 -4
  203. package/lib/module/ghQueueMicrotask.js.map +1 -1
  204. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  205. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  206. package/lib/module/handlers/GestureHandlerEventPayload.js +2 -0
  207. package/lib/module/handlers/GestureHandlerEventPayload.js.map +1 -0
  208. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  209. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  210. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  211. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  212. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  213. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  214. package/lib/module/handlers/createHandler.js +6 -5
  215. package/lib/module/handlers/createHandler.js.map +1 -1
  216. package/lib/module/handlers/createNativeWrapper.js +3 -3
  217. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  218. package/lib/module/handlers/gestureHandlerCommon.js +0 -72
  219. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  220. package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  221. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +4 -4
  222. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  223. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js +1 -1
  224. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
  225. package/lib/module/handlers/gestures/GestureDetector/index.js +1 -1
  226. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  227. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +18 -28
  228. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  229. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -1
  230. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  231. package/lib/module/handlers/gestures/GestureDetector/utils.js +5 -5
  232. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  233. package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
  234. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  235. package/lib/module/handlers/gestures/gesture.js +6 -6
  236. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  237. package/lib/module/handlers/gestures/gestureComposition.js +5 -5
  238. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  239. package/lib/module/handlers/gestures/gestureStateManager.js +1 -1
  240. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  241. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  242. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
  243. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  244. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  245. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -1
  246. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  247. package/lib/module/handlers/getNextHandlerTag.js +5 -0
  248. package/lib/module/handlers/getNextHandlerTag.js.map +1 -0
  249. package/lib/module/handlers/handlersRegistry.js +0 -4
  250. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  251. package/lib/module/handlers/utils.js +73 -0
  252. package/lib/module/handlers/utils.js.map +1 -0
  253. package/lib/module/index.js +1 -0
  254. package/lib/module/index.js.map +1 -1
  255. package/lib/module/init.js +1 -1
  256. package/lib/module/init.js.map +1 -1
  257. package/lib/module/jestUtils/jestUtils.js +2 -2
  258. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  259. package/lib/module/mocks.js +2 -2
  260. package/lib/module/mocks.js.map +1 -1
  261. package/lib/module/utils.js +1 -1
  262. package/lib/module/utils.js.map +1 -1
  263. package/lib/module/web/Gestures.js +1 -1
  264. package/lib/module/web/Gestures.js.map +1 -1
  265. package/lib/module/web/detectors/RotationGestureDetector.js +1 -1
  266. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  267. package/lib/module/web/detectors/ScaleGestureDetector.js +4 -4
  268. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  269. package/lib/module/web/handlers/FlingGestureHandler.js +1 -1
  270. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  271. package/lib/module/web/handlers/GestureHandler.js +6 -11
  272. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  273. package/lib/module/web/handlers/NativeViewGestureHandler.js +1 -1
  274. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  275. package/lib/module/web/handlers/PanGestureHandler.js +1 -1
  276. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  277. package/lib/module/web/handlers/TapGestureHandler.js +1 -1
  278. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  279. package/lib/module/web/tools/EventManager.js +2 -2
  280. package/lib/module/web/tools/EventManager.js.map +1 -1
  281. package/lib/module/web/tools/GestureHandlerWebDelegate.js +4 -11
  282. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  283. package/lib/module/web/tools/LeastSquareSolver.js +18 -18
  284. package/lib/module/web/tools/LeastSquareSolver.js.map +1 -1
  285. package/lib/module/web/tools/PointerEventManager.js +2 -2
  286. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  287. package/lib/module/web/tools/PointerTracker.js +1 -1
  288. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  289. package/lib/module/web/tools/TouchEventManager.js +4 -4
  290. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  291. package/lib/module/web/tools/VelocityTracker.js +6 -6
  292. package/lib/module/web/tools/VelocityTracker.js.map +1 -1
  293. package/lib/module/web_hammer/NodeManager.js +1 -1
  294. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  295. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  296. package/lib/typescript/components/GestureButtons.d.ts +2 -85
  297. package/lib/typescript/components/GestureButtonsProps.d.ts +99 -0
  298. package/lib/typescript/components/GestureHandlerButton.d.ts +1 -1
  299. package/lib/typescript/components/Pressable/Pressable.d.ts +3 -0
  300. package/lib/typescript/components/Pressable/PressableProps.d.ts +116 -0
  301. package/lib/typescript/components/Pressable/index.d.ts +2 -0
  302. package/lib/typescript/components/Pressable/utils.d.ts +15 -0
  303. package/lib/typescript/components/ReanimatedSwipeable.d.ts +125 -0
  304. package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -16
  305. package/lib/typescript/components/touchables/GenericTouchableProps.d.ts +14 -0
  306. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -1
  307. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +2 -9
  308. package/lib/typescript/components/touchables/TouchableNativeFeedbackProps.d.ts +9 -0
  309. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -1
  310. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +2 -1
  311. package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -6
  312. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +1 -10
  313. package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +159 -0
  314. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -35
  315. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +2 -6
  316. package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -51
  317. package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -23
  318. package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -23
  319. package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -6
  320. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +0 -5
  321. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +10 -9
  322. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +1 -0
  323. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +1 -0
  324. package/lib/typescript/handlers/gestures/flingGesture.d.ts +2 -1
  325. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -1
  326. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -8
  327. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +2 -1
  328. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +2 -1
  329. package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -1
  330. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -1
  331. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +1 -1
  332. package/lib/typescript/handlers/gestures/tapGesture.d.ts +2 -1
  333. package/lib/typescript/handlers/getNextHandlerTag.d.ts +1 -0
  334. package/lib/typescript/handlers/handlersRegistry.d.ts +1 -2
  335. package/lib/typescript/handlers/utils.d.ts +6 -0
  336. package/lib/typescript/index.d.ts +12 -9
  337. package/lib/typescript/jestUtils/jestUtils.d.ts +9 -7
  338. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
  339. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  340. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -0
  341. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +1 -0
  342. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +1 -0
  343. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  344. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +1 -0
  345. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +1 -0
  346. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +1 -0
  347. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +1 -0
  348. package/lib/typescript/web_hammer/NodeManager.d.ts +4 -5
  349. package/package.json +14 -16
  350. package/src/Directions.ts +2 -2
  351. package/src/RNGestureHandlerModule.web.ts +2 -2
  352. package/src/components/DrawerLayout.tsx +7 -9
  353. package/src/components/GestureButtons.tsx +13 -123
  354. package/src/components/GestureButtonsProps.ts +115 -0
  355. package/src/components/GestureComponents.tsx +1 -1
  356. package/src/components/GestureHandlerButton.tsx +1 -1
  357. package/src/components/GestureHandlerRootView.android.tsx +1 -1
  358. package/src/components/GestureHandlerRootView.tsx +1 -1
  359. package/src/components/Pressable/Pressable.tsx +398 -0
  360. package/src/components/Pressable/PressableProps.tsx +149 -0
  361. package/src/components/Pressable/index.ts +2 -0
  362. package/src/components/Pressable/utils.ts +180 -0
  363. package/src/components/ReanimatedSwipeable.tsx +629 -0
  364. package/src/components/Swipeable.tsx +6 -6
  365. package/src/components/touchables/GenericTouchable.tsx +9 -36
  366. package/src/components/touchables/GenericTouchableProps.ts +26 -0
  367. package/src/components/touchables/TouchableHighlight.tsx +2 -4
  368. package/src/components/touchables/TouchableNativeFeedback.android.tsx +7 -17
  369. package/src/components/touchables/TouchableNativeFeedbackProps.tsx +12 -0
  370. package/src/components/touchables/TouchableOpacity.tsx +3 -5
  371. package/src/components/touchables/TouchableWithoutFeedback.tsx +2 -1
  372. package/src/getShadowNodeFromRef.ts +2 -2
  373. package/src/ghQueueMicrotask.ts +7 -4
  374. package/src/handlers/FlingGestureHandler.ts +1 -6
  375. package/src/handlers/ForceTouchGestureHandler.ts +1 -12
  376. package/src/handlers/GestureHandlerEventPayload.ts +184 -0
  377. package/src/handlers/LongPressGestureHandler.ts +1 -40
  378. package/src/handlers/NativeViewGestureHandler.ts +1 -7
  379. package/src/handlers/PanGestureHandler.ts +1 -58
  380. package/src/handlers/PinchGestureHandler.ts +1 -27
  381. package/src/handlers/RotationGestureHandler.ts +1 -27
  382. package/src/handlers/TapGestureHandler.ts +1 -6
  383. package/src/handlers/createHandler.tsx +6 -11
  384. package/src/handlers/createNativeWrapper.tsx +3 -3
  385. package/src/handlers/gestureHandlerCommon.ts +3 -79
  386. package/src/handlers/gestureHandlerTypesCompat.ts +16 -30
  387. package/src/handlers/gestures/GestureDetector/Wrap.tsx +1 -1
  388. package/src/handlers/gestures/GestureDetector/attachHandlers.ts +4 -7
  389. package/src/handlers/gestures/GestureDetector/dropHandlers.ts +1 -1
  390. package/src/handlers/gestures/GestureDetector/index.tsx +1 -1
  391. package/src/handlers/gestures/GestureDetector/updateHandlers.ts +20 -30
  392. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -1
  393. package/src/handlers/gestures/GestureDetector/utils.ts +5 -5
  394. package/src/handlers/gestures/flingGesture.ts +2 -4
  395. package/src/handlers/gestures/forceTouchGesture.ts +2 -4
  396. package/src/handlers/gestures/gesture.ts +17 -15
  397. package/src/handlers/gestures/gestureComposition.ts +5 -5
  398. package/src/handlers/gestures/gestureStateManager.ts +1 -1
  399. package/src/handlers/gestures/longPressGesture.ts +2 -4
  400. package/src/handlers/gestures/nativeGesture.ts +2 -4
  401. package/src/handlers/gestures/panGesture.ts +2 -4
  402. package/src/handlers/gestures/pinchGesture.ts +1 -1
  403. package/src/handlers/gestures/rotationGesture.ts +1 -1
  404. package/src/handlers/gestures/tapGesture.ts +2 -4
  405. package/src/handlers/getNextHandlerTag.ts +5 -0
  406. package/src/handlers/handlersRegistry.ts +0 -6
  407. package/src/handlers/utils.ts +75 -0
  408. package/src/index.ts +25 -36
  409. package/src/init.ts +1 -1
  410. package/src/jestUtils/jestUtils.ts +12 -10
  411. package/src/mocks.ts +2 -2
  412. package/src/utils.ts +1 -1
  413. package/src/web/Gestures.ts +1 -1
  414. package/src/web/detectors/RotationGestureDetector.ts +1 -1
  415. package/src/web/detectors/ScaleGestureDetector.ts +4 -4
  416. package/src/web/handlers/FlingGestureHandler.ts +1 -1
  417. package/src/web/handlers/GestureHandler.ts +8 -14
  418. package/src/web/handlers/NativeViewGestureHandler.ts +3 -3
  419. package/src/web/handlers/PanGestureHandler.ts +1 -1
  420. package/src/web/handlers/TapGestureHandler.ts +1 -1
  421. package/src/web/tools/EventManager.ts +2 -2
  422. package/src/web/tools/GestureHandlerWebDelegate.ts +3 -8
  423. package/src/web/tools/LeastSquareSolver.ts +18 -18
  424. package/src/web/tools/PointerEventManager.ts +2 -2
  425. package/src/web/tools/PointerTracker.ts +2 -1
  426. package/src/web/tools/TouchEventManager.ts +4 -4
  427. package/src/web/tools/VelocityTracker.ts +6 -6
  428. package/src/web_hammer/NodeManager.ts +2 -11
@@ -0,0 +1,629 @@
1
+ // Similarily to the DrawerLayout component this deserves to be put in a
2
+ // separate repo. Although, keeping it here for the time being will allow us to
3
+ // move faster and fix possible issues quicker
4
+
5
+ import React, {
6
+ ForwardedRef,
7
+ forwardRef,
8
+ useCallback,
9
+ useImperativeHandle,
10
+ useRef,
11
+ } from 'react';
12
+ import { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';
13
+ import { GestureDetector } from '../handlers/gestures/GestureDetector';
14
+ import {
15
+ GestureStateChangeEvent,
16
+ GestureUpdateEvent,
17
+ } from '../handlers/gestureHandlerCommon';
18
+ import type { PanGestureHandlerProps } from '../handlers/PanGestureHandler';
19
+ import type { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';
20
+ import Animated, {
21
+ Extrapolation,
22
+ SharedValue,
23
+ interpolate,
24
+ runOnJS,
25
+ useAnimatedStyle,
26
+ useSharedValue,
27
+ withSpring,
28
+ } from 'react-native-reanimated';
29
+ import {
30
+ I18nManager,
31
+ LayoutChangeEvent,
32
+ StyleProp,
33
+ StyleSheet,
34
+ View,
35
+ ViewStyle,
36
+ } from 'react-native';
37
+
38
+ const DRAG_TOSS = 0.05;
39
+
40
+ type SwipeableExcludes = Exclude<
41
+ keyof PanGestureHandlerProps,
42
+ 'onGestureEvent' | 'onHandlerStateChange'
43
+ >;
44
+
45
+ export interface SwipeableProps
46
+ extends Pick<PanGestureHandlerProps, SwipeableExcludes> {
47
+ /**
48
+ * Enables two-finger gestures on supported devices, for example iPads with
49
+ * trackpads. If not enabled the gesture will require click + drag, with
50
+ * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger
51
+ * the gesture.
52
+ */
53
+ enableTrackpadTwoFingerGesture?: boolean;
54
+
55
+ /**
56
+ * Specifies how much the visual interaction will be delayed compared to the
57
+ * gesture distance. e.g. value of 1 will indicate that the swipeable panel
58
+ * should exactly follow the gesture, 2 means it is going to be two times
59
+ * "slower".
60
+ */
61
+ friction?: number;
62
+
63
+ /**
64
+ * Distance from the left edge at which released panel will animate to the
65
+ * open state (or the open panel will animate into the closed state). By
66
+ * default it's a half of the panel's width.
67
+ */
68
+ leftThreshold?: number;
69
+
70
+ /**
71
+ * Distance from the right edge at which released panel will animate to the
72
+ * open state (or the open panel will animate into the closed state). By
73
+ * default it's a half of the panel's width.
74
+ */
75
+ rightThreshold?: number;
76
+
77
+ /**
78
+ * Distance that the panel must be dragged from the left edge to be considered
79
+ * a swipe. The default value is 10.
80
+ */
81
+ dragOffsetFromLeftEdge?: number;
82
+
83
+ /**
84
+ * Distance that the panel must be dragged from the right edge to be considered
85
+ * a swipe. The default value is 10.
86
+ */
87
+ dragOffsetFromRightEdge?: number;
88
+
89
+ /**
90
+ * Value indicating if the swipeable panel can be pulled further than the left
91
+ * actions panel's width. It is set to true by default as long as the left
92
+ * panel render method is present.
93
+ */
94
+ overshootLeft?: boolean;
95
+
96
+ /**
97
+ * Value indicating if the swipeable panel can be pulled further than the
98
+ * right actions panel's width. It is set to true by default as long as the
99
+ * right panel render method is present.
100
+ */
101
+ overshootRight?: boolean;
102
+
103
+ /**
104
+ * Specifies how much the visual interaction will be delayed compared to the
105
+ * gesture distance at overshoot. Default value is 1, it mean no friction, for
106
+ * a native feel, try 8 or above.
107
+ */
108
+ overshootFriction?: number;
109
+
110
+ /**
111
+ * Called when action panel gets open (either right or left).
112
+ */
113
+ onSwipeableOpen?: (
114
+ direction: 'left' | 'right',
115
+ swipeable: SwipeableMethods
116
+ ) => void;
117
+
118
+ /**
119
+ * Called when action panel is closed.
120
+ */
121
+ onSwipeableClose?: (
122
+ direction: 'left' | 'right',
123
+ swipeable: SwipeableMethods
124
+ ) => void;
125
+
126
+ /**
127
+ * Called when action panel starts animating on open (either right or left).
128
+ */
129
+ onSwipeableWillOpen?: (direction: 'left' | 'right') => void;
130
+
131
+ /**
132
+ * Called when action panel starts animating on close.
133
+ */
134
+ onSwipeableWillClose?: (direction: 'left' | 'right') => void;
135
+
136
+ /**
137
+ * Called when action panel starts being shown on dragging to open.
138
+ */
139
+ onSwipeableOpenStartDrag?: (direction: 'left' | 'right') => void;
140
+
141
+ /**
142
+ * Called when action panel starts being shown on dragging to close.
143
+ */
144
+ onSwipeableCloseStartDrag?: (direction: 'left' | 'right') => void;
145
+
146
+ /**
147
+ *
148
+ * This map describes the values to use as inputRange for extra interpolation:
149
+ * AnimatedValue: [startValue, endValue]
150
+ *
151
+ * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, +]
152
+ *
153
+ * To support `rtl` flexbox layouts use `flexDirection` styling.
154
+ * */
155
+ renderLeftActions?: (
156
+ progressAnimatedValue: SharedValue<number>,
157
+ dragAnimatedValue: SharedValue<number>,
158
+ swipeable: SwipeableMethods
159
+ ) => React.ReactNode;
160
+ /**
161
+ *
162
+ * This map describes the values to use as inputRange for extra interpolation:
163
+ * AnimatedValue: [startValue, endValue]
164
+ *
165
+ * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, -]
166
+ *
167
+ * To support `rtl` flexbox layouts use `flexDirection` styling.
168
+ * */
169
+ renderRightActions?: (
170
+ progressAnimatedValue: SharedValue<number>,
171
+ dragAnimatedValue: SharedValue<number>,
172
+ swipeable: SwipeableMethods
173
+ ) => React.ReactNode;
174
+
175
+ animationOptions?: Record<string, unknown>;
176
+
177
+ /**
178
+ * Style object for the container (`Animated.View`), for example to override
179
+ * `overflow: 'hidden'`.
180
+ */
181
+ containerStyle?: StyleProp<ViewStyle>;
182
+
183
+ /**
184
+ * Style object for the children container (`Animated.View`), for example to
185
+ * apply `flex: 1`
186
+ */
187
+ childrenContainerStyle?: StyleProp<ViewStyle>;
188
+ }
189
+
190
+ export interface SwipeableMethods {
191
+ close: () => void;
192
+ openLeft: () => void;
193
+ openRight: () => void;
194
+ reset: () => void;
195
+ }
196
+
197
+ const Swipeable = forwardRef<SwipeableMethods, SwipeableProps>(
198
+ function Swipeable(
199
+ props: SwipeableProps,
200
+ ref: ForwardedRef<SwipeableMethods>
201
+ ) {
202
+ const rowState = useSharedValue<number>(0);
203
+
204
+ const userDrag = useSharedValue<number>(0);
205
+ const appliedTranslation = useSharedValue<number>(0);
206
+
207
+ const rowWidth = useSharedValue<number>(0);
208
+ const leftWidth = useSharedValue<number>(0);
209
+ const rightWidth = useSharedValue<number>(0);
210
+ const rightOffset = useSharedValue<number>(0);
211
+
212
+ const leftActionTranslate = useSharedValue<number>(0);
213
+ const rightActionTranslate = useSharedValue<number>(0);
214
+
215
+ const showLeftProgress = useSharedValue<number>(0);
216
+ const showRightProgress = useSharedValue<number>(0);
217
+
218
+ const swipeableMethods = useRef<SwipeableMethods>({
219
+ close: () => {
220
+ 'worklet';
221
+ },
222
+ openLeft: () => {
223
+ 'worklet';
224
+ },
225
+ openRight: () => {
226
+ 'worklet';
227
+ },
228
+ reset: () => {
229
+ 'worklet';
230
+ },
231
+ });
232
+
233
+ const defaultProps = {
234
+ friction: 1,
235
+ overshootFriction: 1,
236
+ };
237
+
238
+ const {
239
+ friction = defaultProps.friction,
240
+ overshootFriction = defaultProps.overshootFriction,
241
+ } = props;
242
+
243
+ const overshootLeftProp = props.overshootLeft;
244
+ const overshootRightProp = props.overshootRight;
245
+
246
+ const calculateCurrentOffset = useCallback(() => {
247
+ 'worklet';
248
+ if (rowState.value === 1) {
249
+ return leftWidth.value;
250
+ } else if (rowState.value === -1) {
251
+ return -rowWidth.value - rightOffset.value;
252
+ }
253
+ return 0;
254
+ }, [leftWidth, rightOffset, rowState, rowWidth]);
255
+
256
+ const updateAnimatedEvent = () => {
257
+ 'worklet';
258
+ rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);
259
+
260
+ const overshootLeft = overshootLeftProp ?? leftWidth.value > 0;
261
+ const overshootRight = overshootRightProp ?? rightWidth.value > 0;
262
+
263
+ const startOffset =
264
+ rowState.value === 1
265
+ ? leftWidth.value
266
+ : rowState.value === -1
267
+ ? -rightWidth.value
268
+ : 0;
269
+
270
+ const offsetDrag = userDrag.value / friction + startOffset;
271
+
272
+ appliedTranslation.value = interpolate(
273
+ offsetDrag,
274
+ [
275
+ -rightWidth.value - 1,
276
+ -rightWidth.value,
277
+ leftWidth.value,
278
+ leftWidth.value + 1,
279
+ ],
280
+ [
281
+ -rightWidth.value - (overshootRight ? 1 / overshootFriction : 0),
282
+ -rightWidth.value,
283
+ leftWidth.value,
284
+ leftWidth.value + (overshootLeft ? 1 / overshootFriction : 0),
285
+ ]
286
+ );
287
+
288
+ showLeftProgress.value =
289
+ leftWidth.value > 0
290
+ ? interpolate(
291
+ appliedTranslation.value,
292
+ [-1, 0, leftWidth.value],
293
+ [0, 0, 1]
294
+ )
295
+ : 0;
296
+ leftActionTranslate.value = interpolate(
297
+ showLeftProgress.value,
298
+ [0, Number.MIN_VALUE],
299
+ [-10000, 0],
300
+ Extrapolation.CLAMP
301
+ );
302
+ showRightProgress.value =
303
+ rightWidth.value > 0
304
+ ? interpolate(
305
+ appliedTranslation.value,
306
+ [-rightWidth.value, 0, 1],
307
+ [1, 0, 0]
308
+ )
309
+ : 0;
310
+ rightActionTranslate.value = interpolate(
311
+ showRightProgress.value,
312
+ [0, Number.MIN_VALUE],
313
+ [-10000, 0],
314
+ Extrapolation.CLAMP
315
+ );
316
+ };
317
+
318
+ const dispatchImmediateEvents = useCallback(
319
+ (fromValue: number, toValue: number) => {
320
+ if (toValue > 0 && props.onSwipeableWillOpen) {
321
+ props.onSwipeableWillOpen('left');
322
+ } else if (toValue < 0 && props.onSwipeableWillOpen) {
323
+ props.onSwipeableWillOpen('right');
324
+ } else if (props.onSwipeableWillClose) {
325
+ const closingDirection = fromValue > 0 ? 'left' : 'right';
326
+ props.onSwipeableWillClose(closingDirection);
327
+ }
328
+ },
329
+ [
330
+ props,
331
+ props.onSwipeableWillClose,
332
+ props.onSwipeableWillOpen,
333
+ swipeableMethods,
334
+ ]
335
+ );
336
+
337
+ const dispatchEndEvents = useCallback(
338
+ (fromValue: number, toValue: number) => {
339
+ if (toValue > 0 && props.onSwipeableOpen) {
340
+ props.onSwipeableOpen('left', swipeableMethods.current);
341
+ } else if (toValue < 0 && props.onSwipeableOpen) {
342
+ props.onSwipeableOpen('right', swipeableMethods.current);
343
+ } else if (props.onSwipeableClose) {
344
+ const closingDirection = fromValue > 0 ? 'left' : 'right';
345
+ props.onSwipeableClose(closingDirection, swipeableMethods.current);
346
+ }
347
+ },
348
+ [props, props.onSwipeableClose, props.onSwipeableOpen, swipeableMethods]
349
+ );
350
+
351
+ const animationOptionsProp = props.animationOptions;
352
+
353
+ const animateRow = useCallback(
354
+ (fromValue: number, toValue: number, velocityX?: number) => {
355
+ 'worklet';
356
+ rowState.value = Math.sign(toValue);
357
+
358
+ const springConfig = {
359
+ duration: 1000,
360
+ dampingRatio: 0.9,
361
+ stiffness: 500,
362
+ velocity: velocityX,
363
+ overshootClamping: true,
364
+ ...animationOptionsProp,
365
+ };
366
+
367
+ appliedTranslation.value = withSpring(
368
+ toValue,
369
+ springConfig,
370
+ (isFinished) => {
371
+ if (isFinished) {
372
+ runOnJS(dispatchEndEvents)(fromValue, toValue);
373
+ }
374
+ }
375
+ );
376
+
377
+ const progressTarget = toValue === 0 ? 0 : 1;
378
+
379
+ // Velocity is in px, while progress is in %
380
+ springConfig.velocity = 0;
381
+
382
+ showLeftProgress.value =
383
+ leftWidth.value > 0 ? withSpring(progressTarget, springConfig) : 0;
384
+ showRightProgress.value =
385
+ rightWidth.value > 0 ? withSpring(progressTarget, springConfig) : 0;
386
+
387
+ runOnJS(dispatchImmediateEvents)(fromValue, toValue);
388
+ },
389
+ [
390
+ showLeftProgress,
391
+ appliedTranslation,
392
+ dispatchEndEvents,
393
+ dispatchImmediateEvents,
394
+ animationOptionsProp,
395
+ rowState,
396
+ ]
397
+ );
398
+
399
+ const onRowLayout = ({ nativeEvent }: LayoutChangeEvent) => {
400
+ rowWidth.value = nativeEvent.layout.width;
401
+ };
402
+
403
+ const {
404
+ children,
405
+ renderLeftActions,
406
+ renderRightActions,
407
+ dragOffsetFromLeftEdge = 10,
408
+ dragOffsetFromRightEdge = 10,
409
+ } = props;
410
+
411
+ swipeableMethods.current = {
412
+ close() {
413
+ 'worklet';
414
+ animateRow(calculateCurrentOffset(), 0);
415
+ },
416
+ openLeft() {
417
+ 'worklet';
418
+ animateRow(calculateCurrentOffset(), leftWidth.value);
419
+ },
420
+ openRight() {
421
+ 'worklet';
422
+ rightWidth.value = rowWidth.value - rightOffset.value;
423
+ animateRow(calculateCurrentOffset(), -rightWidth.value);
424
+ },
425
+ reset() {
426
+ 'worklet';
427
+ userDrag.value = 0;
428
+ showLeftProgress.value = 0;
429
+ appliedTranslation.value = 0;
430
+ rowState.value = 0;
431
+ },
432
+ };
433
+
434
+ const leftAnimatedStyle = useAnimatedStyle(
435
+ () => ({
436
+ transform: [
437
+ {
438
+ translateX: leftActionTranslate.value,
439
+ },
440
+ ],
441
+ }),
442
+ [leftActionTranslate]
443
+ );
444
+
445
+ const leftElement = renderLeftActions && (
446
+ <Animated.View style={[styles.leftActions, leftAnimatedStyle]}>
447
+ {renderLeftActions(
448
+ showLeftProgress,
449
+ appliedTranslation,
450
+ swipeableMethods.current
451
+ )}
452
+ <View
453
+ onLayout={({ nativeEvent }) =>
454
+ (leftWidth.value = nativeEvent.layout.x)
455
+ }
456
+ />
457
+ </Animated.View>
458
+ );
459
+
460
+ const rightAnimatedStyle = useAnimatedStyle(
461
+ () => ({
462
+ transform: [
463
+ {
464
+ translateX: rightActionTranslate.value,
465
+ },
466
+ ],
467
+ }),
468
+ [rightActionTranslate]
469
+ );
470
+
471
+ const rightElement = renderRightActions && (
472
+ <Animated.View style={[styles.rightActions, rightAnimatedStyle]}>
473
+ {renderRightActions(
474
+ showRightProgress,
475
+ appliedTranslation,
476
+ swipeableMethods.current
477
+ )}
478
+ <View
479
+ onLayout={({ nativeEvent }) =>
480
+ (rightOffset.value = nativeEvent.layout.x)
481
+ }
482
+ />
483
+ </Animated.View>
484
+ );
485
+
486
+ const leftThresholdProp = props.leftThreshold;
487
+ const rightThresholdProp = props.rightThreshold;
488
+
489
+ const handleRelease = (
490
+ event: GestureStateChangeEvent<PanGestureHandlerEventPayload>
491
+ ) => {
492
+ 'worklet';
493
+ const { velocityX } = event;
494
+ userDrag.value = event.translationX;
495
+
496
+ rightWidth.value = rowWidth.value - rightOffset.value;
497
+
498
+ const leftThreshold = leftThresholdProp ?? leftWidth.value / 2;
499
+ const rightThreshold = rightThresholdProp ?? rightWidth.value / 2;
500
+
501
+ const startOffsetX = calculateCurrentOffset() + userDrag.value / friction;
502
+ const translationX = (userDrag.value + DRAG_TOSS * velocityX) / friction;
503
+
504
+ let toValue = 0;
505
+
506
+ if (rowState.value === 0) {
507
+ if (translationX > leftThreshold) {
508
+ toValue = leftWidth.value;
509
+ } else if (translationX < -rightThreshold) {
510
+ toValue = -rightWidth.value;
511
+ }
512
+ } else if (rowState.value === 1) {
513
+ // Swiped to left
514
+ if (translationX > -leftThreshold) {
515
+ toValue = leftWidth.value;
516
+ }
517
+ } else {
518
+ // Swiped to right
519
+ if (translationX < rightThreshold) {
520
+ toValue = -rightWidth.value;
521
+ }
522
+ }
523
+
524
+ animateRow(startOffsetX, toValue, velocityX / friction);
525
+ };
526
+
527
+ const close = () => {
528
+ 'worklet';
529
+ animateRow(calculateCurrentOffset(), 0);
530
+ };
531
+
532
+ const tapGesture = Gesture.Tap().onStart(() => {
533
+ if (rowState.value !== 0) {
534
+ close();
535
+ }
536
+ });
537
+
538
+ const onSwipeableOpenStartDrag = props.onSwipeableOpenStartDrag;
539
+ const onSwipeableCloseStartDrag = props.onSwipeableCloseStartDrag;
540
+
541
+ const panGesture = Gesture.Pan()
542
+ .onUpdate((event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {
543
+ userDrag.value = event.translationX;
544
+
545
+ const direction =
546
+ rowState.value === -1
547
+ ? 'right'
548
+ : rowState.value === 1
549
+ ? 'left'
550
+ : event.translationX > 0
551
+ ? 'left'
552
+ : 'right';
553
+
554
+ if (rowState.value === 0 && onSwipeableOpenStartDrag) {
555
+ runOnJS(onSwipeableOpenStartDrag)(direction);
556
+ } else if (rowState.value !== 0 && onSwipeableCloseStartDrag) {
557
+ runOnJS(onSwipeableCloseStartDrag)(direction);
558
+ }
559
+ updateAnimatedEvent();
560
+ })
561
+ .onEnd(
562
+ (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {
563
+ handleRelease(event);
564
+ }
565
+ );
566
+
567
+ if (props.enableTrackpadTwoFingerGesture) {
568
+ panGesture.enableTrackpadTwoFingerGesture(
569
+ props.enableTrackpadTwoFingerGesture
570
+ );
571
+ }
572
+
573
+ panGesture.activeOffsetX([
574
+ -dragOffsetFromRightEdge,
575
+ dragOffsetFromLeftEdge,
576
+ ]);
577
+ tapGesture.shouldCancelWhenOutside(true);
578
+
579
+ useImperativeHandle(ref, () => swipeableMethods.current, [
580
+ swipeableMethods,
581
+ ]);
582
+
583
+ panGesture.enabled(props.enabled !== false);
584
+
585
+ const animatedStyle = useAnimatedStyle(
586
+ () => ({
587
+ transform: [{ translateX: appliedTranslation.value }],
588
+ pointerEvents: rowState.value === 0 ? 'auto' : 'box-only',
589
+ }),
590
+ [appliedTranslation, rowState]
591
+ );
592
+
593
+ const containerStyle = props.containerStyle;
594
+ const childrenContainerStyle = props.childrenContainerStyle;
595
+
596
+ return (
597
+ <GestureDetector gesture={panGesture} touchAction="pan-y">
598
+ <Animated.View
599
+ onLayout={onRowLayout}
600
+ style={[styles.container, containerStyle]}>
601
+ {leftElement}
602
+ {rightElement}
603
+ <GestureDetector gesture={tapGesture} touchAction="pan-y">
604
+ <Animated.View style={[animatedStyle, childrenContainerStyle]}>
605
+ {children}
606
+ </Animated.View>
607
+ </GestureDetector>
608
+ </Animated.View>
609
+ </GestureDetector>
610
+ );
611
+ }
612
+ );
613
+
614
+ export default Swipeable;
615
+ export type SwipeableRef = ForwardedRef<SwipeableMethods>;
616
+
617
+ const styles = StyleSheet.create({
618
+ container: {
619
+ overflow: 'hidden',
620
+ },
621
+ leftActions: {
622
+ ...StyleSheet.absoluteFillObject,
623
+ flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',
624
+ },
625
+ rightActions: {
626
+ ...StyleSheet.absoluteFillObject,
627
+ flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',
628
+ },
629
+ });
@@ -20,13 +20,13 @@ import {
20
20
  } from '../handlers/gestureHandlerCommon';
21
21
  import {
22
22
  PanGestureHandler,
23
- PanGestureHandlerEventPayload,
24
23
  PanGestureHandlerProps,
25
24
  } from '../handlers/PanGestureHandler';
26
25
  import {
27
- TapGestureHandler,
26
+ PanGestureHandlerEventPayload,
28
27
  TapGestureHandlerEventPayload,
29
- } from '../handlers/TapGestureHandler';
28
+ } from '../handlers/GestureHandlerEventPayload';
29
+ import { TapGestureHandler } from '../handlers/TapGestureHandler';
30
30
  import { State } from '../State';
31
31
 
32
32
  const DRAG_TOSS = 0.05;
@@ -393,12 +393,12 @@ export default class Swipeable extends Component<
393
393
  toValue = -rightWidth;
394
394
  }
395
395
  } else if (rowState === 1) {
396
- // swiped to left
396
+ // Swiped to left
397
397
  if (translationX > -leftThreshold) {
398
398
  toValue = leftWidth;
399
399
  }
400
400
  } else {
401
- // swiped to right
401
+ // Swiped to right
402
402
  if (translationX < rightThreshold) {
403
403
  toValue = -rightWidth;
404
404
  }
@@ -509,7 +509,7 @@ export default class Swipeable extends Component<
509
509
  <Animated.View
510
510
  style={[
511
511
  styles.leftActions,
512
- // all those and below parameters can have ! since they are all
512
+ // All those and below parameters can have ! since they are all
513
513
  // asigned in constructor in `updateAnimatedEvent` but TS cannot spot
514
514
  // it for some reason
515
515
  { transform: [{ translateX: this.leftActionTranslate! }] },