react-native-gesture-handler 2.4.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (382) hide show
  1. package/README.md +4 -2
  2. package/RNGestureHandler.podspec +17 -5
  3. package/android/build.gradle +71 -15
  4. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +32 -6
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +105 -23
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +30 -2
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
  11. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
  16. package/android/src/main/jni/CMakeLists.txt +59 -0
  17. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
  18. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
  19. package/ios/Handlers/RNFlingHandler.m +43 -1
  20. package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
  21. package/ios/Handlers/RNPanHandler.m +27 -0
  22. package/ios/RNGestureHandler.h +1 -0
  23. package/ios/RNGestureHandler.m +22 -4
  24. package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
  25. package/ios/RNGestureHandlerManager.mm +10 -7
  26. package/ios/RNGestureHandlerModule.mm +4 -1
  27. package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
  28. package/ios/RNManualActivationRecognizer.m +10 -3
  29. package/ios/RNRootViewGestureRecognizer.m +12 -1
  30. package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
  31. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
  32. package/lib/commonjs/RNGestureHandlerModule.macos.js +138 -0
  33. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
  34. package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
  35. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  36. package/lib/commonjs/RNRenderer.js +16 -0
  37. package/lib/commonjs/RNRenderer.js.map +1 -0
  38. package/lib/commonjs/RNRenderer.web.js +11 -0
  39. package/lib/commonjs/RNRenderer.web.js.map +1 -0
  40. package/lib/commonjs/components/DrawerLayout.js +41 -12
  41. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  42. package/lib/commonjs/components/GestureButtons.js +42 -9
  43. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  44. package/lib/commonjs/components/GestureComponents.js +41 -4
  45. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  46. package/lib/commonjs/components/GestureComponents.web.js +7 -2
  47. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  48. package/lib/commonjs/components/Swipeable.js +3 -1
  49. package/lib/commonjs/components/Swipeable.js.map +1 -1
  50. package/lib/commonjs/components/touchables/GenericTouchable.js +5 -1
  51. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  52. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  53. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
  54. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  55. package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
  56. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  57. package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
  58. package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
  59. package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
  60. package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
  61. package/lib/commonjs/handlers/createHandler.js +33 -12
  62. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  63. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  64. package/lib/commonjs/handlers/gestures/GestureDetector.js +150 -75
  65. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  66. package/lib/commonjs/handlers/gestures/gesture.js +13 -2
  67. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  68. package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
  69. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  70. package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
  71. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  72. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
  73. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  74. package/lib/commonjs/index.js +14 -0
  75. package/lib/commonjs/index.js.map +1 -1
  76. package/lib/commonjs/utils.js +6 -3
  77. package/lib/commonjs/utils.js.map +1 -1
  78. package/lib/commonjs/web/constants.js +3 -51
  79. package/lib/commonjs/web/constants.js.map +1 -1
  80. package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
  81. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
  82. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
  83. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
  84. package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
  85. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
  86. package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
  87. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
  88. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
  89. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
  90. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
  91. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
  92. package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
  93. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
  94. package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
  95. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
  96. package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
  97. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
  98. package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
  99. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
  100. package/lib/commonjs/web/interfaces.js +34 -0
  101. package/lib/commonjs/web/interfaces.js.map +1 -0
  102. package/lib/commonjs/web/tools/EventManager.js +169 -0
  103. package/lib/commonjs/web/tools/EventManager.js.map +1 -0
  104. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
  105. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  106. package/lib/commonjs/web/tools/InteractionManager.js +102 -0
  107. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
  108. package/lib/commonjs/web/tools/NodeManager.js +48 -0
  109. package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
  110. package/lib/commonjs/web/tools/PointerTracker.js +132 -0
  111. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
  112. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  113. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  114. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  115. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  116. package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
  117. package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
  118. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
  119. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  120. package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
  121. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
  122. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  123. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  124. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  125. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  126. package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  127. package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
  128. package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
  129. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
  130. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
  131. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  132. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
  133. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  134. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
  135. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  136. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
  137. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  138. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
  139. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  140. package/lib/commonjs/web_hammer/constants.js +64 -0
  141. package/lib/commonjs/web_hammer/constants.js.map +1 -0
  142. package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
  143. package/lib/commonjs/{web → web_hammer}/utils.js.map +1 -1
  144. package/lib/module/EnableExperimentalWebImplementation.js +15 -0
  145. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
  146. package/lib/module/RNGestureHandlerModule.macos.js +102 -0
  147. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
  148. package/lib/module/RNGestureHandlerModule.web.js +73 -24
  149. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  150. package/lib/module/RNRenderer.js +4 -0
  151. package/lib/module/RNRenderer.js.map +1 -0
  152. package/lib/module/RNRenderer.web.js +4 -0
  153. package/lib/module/RNRenderer.web.js.map +1 -0
  154. package/lib/module/components/DrawerLayout.js +41 -12
  155. package/lib/module/components/DrawerLayout.js.map +1 -1
  156. package/lib/module/components/GestureButtons.js +43 -9
  157. package/lib/module/components/GestureButtons.js.map +1 -1
  158. package/lib/module/components/GestureComponents.js +39 -4
  159. package/lib/module/components/GestureComponents.js.map +1 -1
  160. package/lib/module/components/GestureComponents.web.js +6 -2
  161. package/lib/module/components/GestureComponents.web.js.map +1 -1
  162. package/lib/module/components/Swipeable.js +3 -1
  163. package/lib/module/components/Swipeable.js.map +1 -1
  164. package/lib/module/components/touchables/GenericTouchable.js +5 -1
  165. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  166. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  167. package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
  168. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  169. package/lib/module/handlers/PanGestureHandler.js +1 -1
  170. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  171. package/lib/module/handlers/PressabilityDebugView.js +3 -0
  172. package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
  173. package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
  174. package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
  175. package/lib/module/handlers/createHandler.js +35 -14
  176. package/lib/module/handlers/createHandler.js.map +1 -1
  177. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  178. package/lib/module/handlers/gestures/GestureDetector.js +147 -74
  179. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  180. package/lib/module/handlers/gestures/gesture.js +13 -2
  181. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  182. package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
  183. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  184. package/lib/module/handlers/gestures/panGesture.js +5 -0
  185. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  186. package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
  187. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  188. package/lib/module/index.js +2 -1
  189. package/lib/module/index.js.map +1 -1
  190. package/lib/module/utils.js +2 -1
  191. package/lib/module/utils.js.map +1 -1
  192. package/lib/module/web/constants.js +1 -36
  193. package/lib/module/web/constants.js.map +1 -1
  194. package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
  195. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
  196. package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
  197. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
  198. package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
  199. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
  200. package/lib/module/web/handlers/GestureHandler.js +521 -0
  201. package/lib/module/web/handlers/GestureHandler.js.map +1 -0
  202. package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
  203. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
  204. package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
  205. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
  206. package/lib/module/web/handlers/PanGestureHandler.js +434 -0
  207. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
  208. package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
  209. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
  210. package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
  211. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
  212. package/lib/module/web/handlers/TapGestureHandler.js +281 -0
  213. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
  214. package/lib/module/web/interfaces.js +26 -0
  215. package/lib/module/web/interfaces.js.map +1 -0
  216. package/lib/module/web/tools/EventManager.js +160 -0
  217. package/lib/module/web/tools/EventManager.js.map +1 -0
  218. package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
  219. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  220. package/lib/module/web/tools/InteractionManager.js +93 -0
  221. package/lib/module/web/tools/InteractionManager.js.map +1 -0
  222. package/lib/module/web/tools/NodeManager.js +39 -0
  223. package/lib/module/web/tools/NodeManager.js.map +1 -0
  224. package/lib/module/web/tools/PointerTracker.js +122 -0
  225. package/lib/module/web/tools/PointerTracker.js.map +1 -0
  226. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  227. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  228. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  229. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  230. package/lib/module/{web → web_hammer}/Errors.js +0 -0
  231. package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
  232. package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
  233. package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  234. package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
  235. package/lib/module/web_hammer/GestureHandler.js.map +1 -0
  236. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  237. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  238. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  239. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  240. package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  241. package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
  242. package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
  243. package/lib/module/web_hammer/NodeManager.js.map +1 -0
  244. package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
  245. package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  246. package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
  247. package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  248. package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
  249. package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  250. package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
  251. package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  252. package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
  253. package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  254. package/lib/module/web_hammer/constants.js +43 -0
  255. package/lib/module/web_hammer/constants.js.map +1 -0
  256. package/lib/module/{web → web_hammer}/utils.js +0 -0
  257. package/lib/module/{web → web_hammer}/utils.js.map +1 -1
  258. package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
  259. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +44 -0
  260. package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
  261. package/lib/typescript/RNRenderer.d.ts +1 -0
  262. package/lib/typescript/RNRenderer.web.d.ts +3 -0
  263. package/lib/typescript/components/DrawerLayout.d.ts +4 -1
  264. package/lib/typescript/components/GestureButtons.d.ts +22 -0
  265. package/lib/typescript/components/GestureComponents.d.ts +7 -3
  266. package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
  267. package/lib/typescript/components/Swipeable.d.ts +1 -1
  268. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
  269. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  270. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
  271. package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
  272. package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
  273. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
  274. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
  276. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
  277. package/lib/typescript/index.d.ts +2 -1
  278. package/lib/typescript/web/constants.d.ts +1 -33
  279. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
  280. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
  281. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
  282. package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
  283. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
  284. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
  285. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
  286. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
  287. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
  288. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
  289. package/lib/typescript/web/interfaces.d.ts +97 -0
  290. package/lib/typescript/web/tools/EventManager.d.ts +28 -0
  291. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
  292. package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
  293. package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
  294. package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
  295. package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
  296. package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
  297. package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
  298. package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
  299. package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
  300. package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
  301. package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
  302. package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
  303. package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
  304. package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
  305. package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
  306. package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
  307. package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
  308. package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
  309. package/lib/typescript/web_hammer/constants.d.ts +39 -0
  310. package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
  311. package/package.json +1 -1
  312. package/src/EnableExperimentalWebImplementation.ts +18 -0
  313. package/src/RNGestureHandlerModule.macos.ts +114 -0
  314. package/src/RNGestureHandlerModule.web.ts +89 -26
  315. package/src/RNRenderer.ts +3 -0
  316. package/src/RNRenderer.web.ts +3 -0
  317. package/src/components/DrawerLayout.tsx +37 -14
  318. package/src/components/GestureButtons.tsx +64 -0
  319. package/src/components/GestureComponents.tsx +66 -6
  320. package/src/components/GestureComponents.web.tsx +5 -0
  321. package/src/components/Swipeable.tsx +3 -1
  322. package/src/components/touchables/GenericTouchable.tsx +2 -0
  323. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
  324. package/src/handlers/ForceTouchGestureHandler.ts +3 -2
  325. package/src/handlers/PanGestureHandler.ts +2 -0
  326. package/src/handlers/PressabilityDebugView.tsx +2 -0
  327. package/src/handlers/PressabilityDebugView.web.tsx +4 -0
  328. package/src/handlers/{createHandler.ts → createHandler.tsx} +45 -19
  329. package/src/handlers/gestureHandlerCommon.ts +2 -0
  330. package/src/handlers/gestures/GestureDetector.tsx +185 -93
  331. package/src/handlers/gestures/gesture.ts +16 -0
  332. package/src/handlers/gestures/gestureStateManager.ts +13 -8
  333. package/src/handlers/gestures/panGesture.ts +5 -0
  334. package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
  335. package/src/index.ts +3 -0
  336. package/src/utils.ts +3 -1
  337. package/src/web/constants.ts +1 -41
  338. package/src/web/detectors/RotationGestureDetector.ts +199 -0
  339. package/src/web/detectors/ScaleGestureDetector.ts +208 -0
  340. package/src/web/handlers/FlingGestureHandler.ts +146 -0
  341. package/src/web/handlers/GestureHandler.ts +572 -0
  342. package/src/web/handlers/LongPressGestureHandler.ts +122 -0
  343. package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
  344. package/src/web/handlers/PanGestureHandler.ts +488 -0
  345. package/src/web/handlers/PinchGestureHandler.ts +162 -0
  346. package/src/web/handlers/RotationGestureHandler.ts +181 -0
  347. package/src/web/handlers/TapGestureHandler.ts +275 -0
  348. package/src/web/interfaces.ts +114 -0
  349. package/src/web/tools/EventManager.ts +186 -0
  350. package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
  351. package/src/web/tools/InteractionManager.ts +108 -0
  352. package/src/web/tools/NodeManager.ts +43 -0
  353. package/src/web/tools/PointerTracker.ts +130 -0
  354. package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
  355. package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
  356. package/src/{web → web_hammer}/Errors.ts +0 -0
  357. package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
  358. package/src/{web → web_hammer}/GestureHandler.ts +102 -55
  359. package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
  360. package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
  361. package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
  362. package/src/{web → web_hammer}/NodeManager.ts +6 -3
  363. package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
  364. package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
  365. package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
  366. package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
  367. package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
  368. package/src/web_hammer/constants.ts +48 -0
  369. package/src/{web → web_hammer}/utils.ts +1 -1
  370. package/android/src/main/jni/Android.mk +0 -53
  371. package/android/src/main/jni/OnLoad.cpp +0 -9
  372. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
  373. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
  374. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  375. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
  376. package/lib/commonjs/web/GestureHandler.js.map +0 -1
  377. package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
  378. package/lib/commonjs/web/NodeManager.js.map +0 -1
  379. package/lib/module/web/GestureHandler.js.map +0 -1
  380. package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
  381. package/lib/module/web/NodeManager.js.map +0 -1
  382. package/lib/typescript/web/NodeManager.d.ts +0 -8
@@ -1,27 +1,52 @@
1
1
  import { ActionType } from './ActionType';
2
- import { Direction } from './web/constants';
3
- import FlingGestureHandler from './web/FlingGestureHandler';
4
- import LongPressGestureHandler from './web/LongPressGestureHandler';
5
- import NativeViewGestureHandler from './web/NativeViewGestureHandler';
6
- import * as NodeManager from './web/NodeManager';
7
- import PanGestureHandler from './web/PanGestureHandler';
8
- import PinchGestureHandler from './web/PinchGestureHandler';
9
- import RotationGestureHandler from './web/RotationGestureHandler';
10
- import TapGestureHandler from './web/TapGestureHandler';
2
+
3
+ //GestureHandlers
4
+ import InteractionManager from './web/tools/InteractionManager';
5
+ import NodeManager from './web/tools/NodeManager';
6
+ import PanGestureHandler from './web/handlers/PanGestureHandler';
7
+ import TapGestureHandler from './web/handlers/TapGestureHandler';
8
+ import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
9
+ import PinchGestureHandler from './web/handlers/PinchGestureHandler';
10
+ import RotationGestureHandler from './web/handlers/RotationGestureHandler';
11
+ import FlingGestureHandler from './web/handlers/FlingGestureHandler';
12
+ import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
13
+
14
+ //Hammer Handlers
15
+ import * as HammerNodeManager from './web_hammer/NodeManager';
16
+ import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
17
+ import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
18
+ import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
19
+ import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
20
+ import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
21
+ import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
22
+ import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
23
+ import { Config } from './web/interfaces';
24
+ import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
11
25
 
12
26
  export const Gestures = {
27
+ NativeViewGestureHandler,
13
28
  PanGestureHandler,
14
- RotationGestureHandler,
15
- PinchGestureHandler,
16
29
  TapGestureHandler,
17
- NativeViewGestureHandler,
18
30
  LongPressGestureHandler,
31
+ PinchGestureHandler,
32
+ RotationGestureHandler,
19
33
  FlingGestureHandler,
20
- // ForceTouchGestureHandler,
21
34
  };
22
35
 
36
+ export const HammerGestures = {
37
+ NativeViewGestureHandler: HammerNativeViewGestureHandler,
38
+ PanGestureHandler: HammerPanGestureHandler,
39
+ TapGestureHandler: HammerTapGestureHandler,
40
+ LongPressGestureHandler: HammerLongPressGestureHandler,
41
+ PinchGestureHandler: HammerPinchGestureHandler,
42
+ RotationGestureHandler: HammerRotationGestureHandler,
43
+ FlingGestureHandler: HammerFlingGestureHandler,
44
+ };
45
+
46
+ const interactionManager = new InteractionManager();
47
+
23
48
  export default {
24
- Direction,
49
+ // Direction,
25
50
  handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
26
51
  console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
27
52
  },
@@ -33,14 +58,31 @@ export default {
33
58
  handlerTag: number,
34
59
  config: T
35
60
  ) {
36
- //TODO(TS) extends config
37
- if (!(handlerName in Gestures))
38
- throw new Error(
39
- `react-native-gesture-handler: ${handlerName} is not supported on web.`
61
+ if (isExperimentalWebImplementationEnabled()) {
62
+ if (!(handlerName in Gestures)) {
63
+ throw new Error(
64
+ `react-native-gesture-handler: ${handlerName} is not supported on web.`
65
+ );
66
+ }
67
+
68
+ const GestureClass = Gestures[handlerName];
69
+ NodeManager.createGestureHandler(handlerTag, new GestureClass());
70
+ interactionManager.configureInteractions(
71
+ NodeManager.getHandler(handlerTag),
72
+ (config as unknown) as Config
40
73
  );
41
- const GestureClass = Gestures[handlerName];
42
- NodeManager.createGestureHandler(handlerTag, new GestureClass());
43
- this.updateGestureHandler(handlerTag, config);
74
+ } else {
75
+ if (!(handlerName in HammerGestures)) {
76
+ throw new Error(
77
+ `react-native-gesture-handler: ${handlerName} is not supported on web.`
78
+ );
79
+ }
80
+
81
+ const GestureClass = HammerGestures[handlerName];
82
+ HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
83
+ }
84
+
85
+ this.updateGestureHandler(handlerTag, (config as unknown) as Config);
44
86
  },
45
87
  attachGestureHandler(
46
88
  handlerTag: number,
@@ -48,16 +90,37 @@ export default {
48
90
  _actionType: ActionType,
49
91
  propsRef: React.RefObject<unknown>
50
92
  ) {
51
- NodeManager.getHandler(handlerTag).setView(newView, propsRef);
93
+ if (isExperimentalWebImplementationEnabled()) {
94
+ NodeManager.getHandler(handlerTag).init(newView, propsRef);
95
+ } else {
96
+ HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
97
+ }
52
98
  },
53
- updateGestureHandler(handlerTag: number, newConfig: any) {
54
- NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
99
+ updateGestureHandler(handlerTag: number, newConfig: Config) {
100
+ if (isExperimentalWebImplementationEnabled()) {
101
+ NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
102
+
103
+ interactionManager.configureInteractions(
104
+ NodeManager.getHandler(handlerTag),
105
+ newConfig
106
+ );
107
+ } else {
108
+ HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
109
+ }
55
110
  },
56
111
  getGestureHandlerNode(handlerTag: number) {
57
- return NodeManager.getHandler(handlerTag);
112
+ if (isExperimentalWebImplementationEnabled()) {
113
+ return NodeManager.getHandler(handlerTag);
114
+ } else {
115
+ return HammerNodeManager.getHandler(handlerTag);
116
+ }
58
117
  },
59
118
  dropGestureHandler(handlerTag: number) {
60
- NodeManager.dropGestureHandler(handlerTag);
119
+ if (isExperimentalWebImplementationEnabled()) {
120
+ NodeManager.dropGestureHandler(handlerTag);
121
+ } else {
122
+ HammerNodeManager.dropGestureHandler(handlerTag);
123
+ }
61
124
  },
62
125
  // eslint-disable-next-line @typescript-eslint/no-empty-function
63
126
  flushOperations() {},
@@ -0,0 +1,3 @@
1
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
+ // @ts-nocheck
3
+ export { default as RNRenderer } from 'react-native/Libraries/Renderer/shims/ReactNative';
@@ -0,0 +1,3 @@
1
+ export const RNRenderer = {
2
+ findHostInstance_DEPRECATED: (_ref: any) => null,
3
+ };
@@ -148,6 +148,11 @@ export interface DrawerLayoutProps {
148
148
  onDrawerSlide?: (position: number) => void;
149
149
 
150
150
  onGestureRef?: (ref: PanGestureHandler) => void;
151
+
152
+ // implicit `children` prop has been removed in @types/react^18.0.0
153
+ children?:
154
+ | React.ReactNode
155
+ | ((openValue?: Animated.AnimatedInterpolation) => React.ReactNode);
151
156
  }
152
157
 
153
158
  export type DrawerLayoutState = {
@@ -155,6 +160,8 @@ export type DrawerLayoutState = {
155
160
  touchX: Animated.Value;
156
161
  drawerTranslation: Animated.Value;
157
162
  containerWidth: number;
163
+ drawerState: DrawerState;
164
+ drawerOpened: boolean;
158
165
  };
159
166
 
160
167
  export type DrawerMovementOption = {
@@ -189,15 +196,14 @@ export default class DrawerLayout extends Component<
189
196
  touchX,
190
197
  drawerTranslation,
191
198
  containerWidth: 0,
199
+ drawerState: IDLE,
200
+ drawerOpened: false,
192
201
  };
193
202
 
194
203
  this.updateAnimatedEvent(props, this.state);
195
204
  }
196
205
 
197
- UNSAFE_componentWillUpdate(
198
- props: DrawerLayoutProps,
199
- state: DrawerLayoutState
200
- ) {
206
+ shouldComponentUpdate(props: DrawerLayoutProps, state: DrawerLayoutState) {
201
207
  if (
202
208
  this.props.drawerPosition !== props.drawerPosition ||
203
209
  this.props.drawerWidth !== props.drawerWidth ||
@@ -206,6 +212,8 @@ export default class DrawerLayout extends Component<
206
212
  ) {
207
213
  this.updateAnimatedEvent(props, state);
208
214
  }
215
+
216
+ return true;
209
217
  }
210
218
 
211
219
  private openValue?: Animated.AnimatedInterpolation;
@@ -349,6 +357,7 @@ export default class DrawerLayout extends Component<
349
357
  this.handleRelease({ nativeEvent });
350
358
  } else if (nativeEvent.state === State.ACTIVE) {
351
359
  this.emitStateChanged(DRAGGING, false);
360
+ this.setState({ drawerState: DRAGGING });
352
361
  if (this.props.keyboardDismissMode === 'on-drag') {
353
362
  Keyboard.dismiss();
354
363
  }
@@ -464,6 +473,7 @@ export default class DrawerLayout extends Component<
464
473
  const willShow = toValue !== 0;
465
474
  this.updateShowing(willShow);
466
475
  this.emitStateChanged(SETTLING, willShow);
476
+ this.setState({ drawerState: SETTLING });
467
477
  if (this.props.hideStatusBar) {
468
478
  StatusBar.setHidden(willShow, this.props.statusBarAnimation || 'slide');
469
479
  }
@@ -476,6 +486,12 @@ export default class DrawerLayout extends Component<
476
486
  }).start(({ finished }) => {
477
487
  if (finished) {
478
488
  this.emitStateChanged(IDLE, willShow);
489
+ this.setState({ drawerOpened: willShow });
490
+ if (this.state.drawerState !== DRAGGING) {
491
+ // it's possilbe that user started drag while the drawer
492
+ // was settling, don't override state in this case
493
+ this.setState({ drawerState: IDLE });
494
+ }
479
495
  if (willShow) {
480
496
  this.props.onDrawerOpen?.();
481
497
  } else {
@@ -516,11 +532,14 @@ export default class DrawerLayout extends Component<
516
532
  private renderOverlay = () => {
517
533
  /* Overlay styles */
518
534
  invariant(this.openValue, 'should be set');
519
- const overlayOpacity = this.openValue.interpolate({
520
- inputRange: [0, 1],
521
- outputRange: [0, 1],
522
- extrapolate: 'clamp',
523
- });
535
+ let overlayOpacity;
536
+
537
+ if (this.state.drawerState !== IDLE) {
538
+ overlayOpacity = this.openValue;
539
+ } else {
540
+ overlayOpacity = this.state.drawerOpened ? 1 : 0;
541
+ }
542
+
524
543
  const dynamicOverlayStyles = {
525
544
  opacity: overlayOpacity,
526
545
  backgroundColor: this.props.overlayColor,
@@ -579,11 +598,15 @@ export default class DrawerLayout extends Component<
579
598
  let drawerTranslateX: number | Animated.AnimatedInterpolation = 0;
580
599
  if (drawerSlide) {
581
600
  const closedDrawerOffset = fromLeft ? -drawerWidth! : drawerWidth!;
582
- drawerTranslateX = openValue.interpolate({
583
- inputRange: [0, 1],
584
- outputRange: [closedDrawerOffset, 0],
585
- extrapolate: 'clamp',
586
- });
601
+ if (this.state.drawerState !== IDLE) {
602
+ drawerTranslateX = openValue.interpolate({
603
+ inputRange: [0, 1],
604
+ outputRange: [closedDrawerOffset, 0],
605
+ extrapolate: 'clamp',
606
+ });
607
+ } else {
608
+ drawerTranslateX = this.state.drawerOpened ? 0 : closedDrawerOffset;
609
+ }
587
610
  }
588
611
  const drawerStyles: {
589
612
  transform: { translateX: number | Animated.AnimatedInterpolation }[];
@@ -56,6 +56,13 @@ export interface RawButtonProps extends NativeViewGestureHandlerProps {
56
56
  * Defines whether the ripple animation should be drawn on the foreground of the view.
57
57
  */
58
58
  foreground?: boolean;
59
+
60
+ /**
61
+ * Android only.
62
+ *
63
+ * Set this to true if you don't want the system to play sound when the button is pressed.
64
+ */
65
+ touchSoundDisabled?: boolean;
59
66
  }
60
67
 
61
68
  export interface BaseButtonProps extends RawButtonProps {
@@ -65,6 +72,12 @@ export interface BaseButtonProps extends RawButtonProps {
65
72
  */
66
73
  onPress?: (pointerInside: boolean) => void;
67
74
 
75
+ /**
76
+ * Called when the button gets pressed and is held for `delayLongPress`
77
+ * milliseconds.
78
+ */
79
+ onLongPress?: () => void;
80
+
68
81
  /**
69
82
  * Called when button changes from inactive to active and vice versa. It
70
83
  * passes active state as a boolean variable as a first parameter for that
@@ -73,6 +86,12 @@ export interface BaseButtonProps extends RawButtonProps {
73
86
  onActiveStateChange?: (active: boolean) => void;
74
87
  style?: StyleProp<ViewStyle>;
75
88
  testID?: string;
89
+
90
+ /**
91
+ * Delay, in milliseconds, after which the `onLongPress` callback gets called.
92
+ * Defaults to 600.
93
+ */
94
+ delayLongPress?: number;
76
95
  }
77
96
 
78
97
  export interface RectButtonProps extends BaseButtonProps {
@@ -104,11 +123,18 @@ export const RawButton = createNativeWrapper(GestureHandlerButton, {
104
123
  });
105
124
 
106
125
  export class BaseButton extends React.Component<BaseButtonProps> {
126
+ static defaultProps = {
127
+ delayLongPress: 600,
128
+ };
129
+
107
130
  private lastActive: boolean;
131
+ private longPressTimeout: ReturnType<typeof setTimeout> | undefined;
132
+ private longPressDetected: boolean;
108
133
 
109
134
  constructor(props: BaseButtonProps) {
110
135
  super(props);
111
136
  this.lastActive = false;
137
+ this.longPressDetected = false;
112
138
  }
113
139
 
114
140
  private handleEvent = ({
@@ -122,6 +148,7 @@ export class BaseButton extends React.Component<BaseButtonProps> {
122
148
  }
123
149
 
124
150
  if (
151
+ !this.longPressDetected &&
125
152
  oldState === State.ACTIVE &&
126
153
  state !== State.CANCELLED &&
127
154
  this.lastActive &&
@@ -130,9 +157,46 @@ export class BaseButton extends React.Component<BaseButtonProps> {
130
157
  this.props.onPress(active);
131
158
  }
132
159
 
160
+ if (
161
+ !this.lastActive &&
162
+ // NativeViewGestureHandler sends different events based on platform
163
+ state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&
164
+ pointerInside
165
+ ) {
166
+ this.longPressDetected = false;
167
+ if (this.props.onLongPress) {
168
+ this.longPressTimeout = setTimeout(
169
+ this.onLongPress,
170
+ this.props.delayLongPress
171
+ );
172
+ }
173
+ } else if (
174
+ // cancel longpress timeout if it's set and the finger moved out of the view
175
+ state === State.ACTIVE &&
176
+ !pointerInside &&
177
+ this.longPressTimeout !== undefined
178
+ ) {
179
+ clearTimeout(this.longPressTimeout);
180
+ this.longPressTimeout = undefined;
181
+ } else if (
182
+ // cancel longpress timeout if it's set and the gesture has finished
183
+ this.longPressTimeout !== undefined &&
184
+ (state === State.END ||
185
+ state === State.CANCELLED ||
186
+ state === State.FAILED)
187
+ ) {
188
+ clearTimeout(this.longPressTimeout);
189
+ this.longPressTimeout = undefined;
190
+ }
191
+
133
192
  this.lastActive = active;
134
193
  };
135
194
 
195
+ private onLongPress = () => {
196
+ this.longPressDetected = true;
197
+ this.props.onLongPress?.();
198
+ };
199
+
136
200
  // Normally, the parent would execute it's handler first, then forward the
137
201
  // event to listeners. However, here our handler is virtually only forwarding
138
202
  // events to listeners, so we reverse the order to keep the proper order of
@@ -16,6 +16,7 @@ import {
16
16
  DrawerLayoutAndroidProps as RNDrawerLayoutAndroidProps,
17
17
  FlatList as RNFlatList,
18
18
  FlatListProps as RNFlatListProps,
19
+ RefreshControl as RNRefreshControl,
19
20
  } from 'react-native';
20
21
 
21
22
  import createNativeWrapper from '../handlers/createNativeWrapper';
@@ -25,16 +26,53 @@ import {
25
26
  nativeViewProps,
26
27
  } from '../handlers/NativeViewGestureHandler';
27
28
 
28
- export const ScrollView = createNativeWrapper<
29
- PropsWithChildren<RNScrollViewProps>
30
- >(RNScrollView, {
29
+ import { toArray } from '../utils';
30
+
31
+ export const RefreshControl = createNativeWrapper(RNRefreshControl, {
31
32
  disallowInterruption: true,
32
33
  shouldCancelWhenOutside: false,
33
34
  });
35
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
36
+ export type RefreshControl = typeof RefreshControl & RNRefreshControl;
37
+
38
+ const GHScrollView = createNativeWrapper<PropsWithChildren<RNScrollViewProps>>(
39
+ RNScrollView,
40
+ {
41
+ disallowInterruption: true,
42
+ shouldCancelWhenOutside: false,
43
+ }
44
+ );
45
+ export const ScrollView = React.forwardRef<
46
+ RNScrollView,
47
+ RNScrollViewProps & NativeViewGestureHandlerProps
48
+ >((props, ref) => {
49
+ const refreshControlGestureRef = React.useRef<RefreshControl>(null);
50
+ const { refreshControl, waitFor, ...rest } = props;
51
+
52
+ return (
53
+ <GHScrollView
54
+ {...rest}
55
+ // @ts-ignore `ref` exists on `GHScrollView`
56
+ ref={ref}
57
+ waitFor={[...toArray(waitFor ?? []), refreshControlGestureRef]}
58
+ // @ts-ignore we don't pass `refreshing` prop as we only want to override the ref
59
+ refreshControl={
60
+ refreshControl ? (
61
+ <RefreshControl
62
+ {...refreshControl.props}
63
+ ref={refreshControlGestureRef}
64
+ />
65
+ ) : (
66
+ refreshControl
67
+ )
68
+ }
69
+ />
70
+ );
71
+ });
34
72
  // backward type compatibility with https://github.com/software-mansion/react-native-gesture-handler/blob/db78d3ca7d48e8ba57482d3fe9b0a15aa79d9932/react-native-gesture-handler.d.ts#L440-L457
35
73
  // include methods of wrapped components by creating an intersection type with the RN component instead of duplicating them.
36
74
  // eslint-disable-next-line @typescript-eslint/no-redeclare
37
- export type ScrollView = typeof ScrollView & RNScrollView;
75
+ export type ScrollView = typeof GHScrollView & RNScrollView;
38
76
 
39
77
  export const Switch = createNativeWrapper<RNSwitchProps>(RNSwitch, {
40
78
  shouldCancelWhenOutside: false,
@@ -56,9 +94,13 @@ export type DrawerLayoutAndroid = typeof DrawerLayoutAndroid &
56
94
  RNDrawerLayoutAndroid;
57
95
 
58
96
  export const FlatList = React.forwardRef((props, ref) => {
97
+ const refreshControlGestureRef = React.useRef<RefreshControl>(null);
98
+
99
+ const { waitFor, refreshControl, ...rest } = props;
100
+
59
101
  const flatListProps = {};
60
102
  const scrollViewProps = {};
61
- for (const [propName, value] of Object.entries(props)) {
103
+ for (const [propName, value] of Object.entries(rest)) {
62
104
  // https://github.com/microsoft/TypeScript/issues/26255
63
105
  if ((nativeViewProps as readonly string[]).includes(propName)) {
64
106
  // @ts-ignore - this function cannot have generic type so we have to ignore this error
@@ -70,14 +112,32 @@ export const FlatList = React.forwardRef((props, ref) => {
70
112
  flatListProps[propName] = value;
71
113
  }
72
114
  }
115
+
73
116
  return (
74
117
  // @ts-ignore - this function cannot have generic type so we have to ignore this error
75
118
  <RNFlatList
76
119
  ref={ref}
77
120
  {...flatListProps}
78
121
  renderScrollComponent={(scrollProps) => (
79
- <ScrollView {...{ ...scrollProps, ...scrollViewProps }} />
122
+ <ScrollView
123
+ {...{
124
+ ...scrollProps,
125
+ ...scrollViewProps,
126
+ waitFor: [...toArray(waitFor ?? []), refreshControlGestureRef],
127
+ }}
128
+ />
80
129
  )}
130
+ // @ts-ignore we don't pass `refreshing` prop as we only want to override the ref
131
+ refreshControl={
132
+ refreshControl ? (
133
+ <RefreshControl
134
+ {...refreshControl.props}
135
+ ref={refreshControlGestureRef}
136
+ />
137
+ ) : (
138
+ refreshControl
139
+ )
140
+ }
81
141
  />
82
142
  );
83
143
  }) as <ItemT = any>(
@@ -6,6 +6,7 @@ import {
6
6
  TextInput as RNTextInput,
7
7
  ScrollView as RNScrollView,
8
8
  FlatListProps,
9
+ View,
9
10
  } from 'react-native';
10
11
 
11
12
  import createNativeWrapper from '../handlers/createNativeWrapper';
@@ -25,6 +26,10 @@ export const DrawerLayoutAndroid = createNativeWrapper(RNDrawerLayoutAndroid, {
25
26
  });
26
27
  // @ts-ignore -- TODO(TS) to investigate if it's needed
27
28
  DrawerLayoutAndroid.positions = RNDrawerLayoutAndroid.positions;
29
+ // RefreshControl is implemented as a functional component, rendering a View
30
+ // NativeViewGestureHandler needs to set a ref on its child, which cannot be done
31
+ // on functional components
32
+ export const RefreshControl = createNativeWrapper(View);
28
33
 
29
34
  export const FlatList = React.forwardRef(
30
35
  <ItemT extends any>(props: FlatListProps<ItemT>, ref: any) => (
@@ -219,7 +219,7 @@ export default class Swipeable extends Component<
219
219
  );
220
220
  }
221
221
 
222
- UNSAFE_componentWillUpdate(props: SwipeableProps, state: SwipeableState) {
222
+ shouldComponentUpdate(props: SwipeableProps, state: SwipeableState) {
223
223
  if (
224
224
  this.props.friction !== props.friction ||
225
225
  this.props.overshootLeft !== props.overshootLeft ||
@@ -231,6 +231,8 @@ export default class Swipeable extends Component<
231
231
  ) {
232
232
  this.updateAnimatedEvent(props, state);
233
233
  }
234
+
235
+ return true;
234
236
  }
235
237
 
236
238
  private onGestureEvent?: (
@@ -277,6 +277,8 @@ export default class GenericTouchable extends Component<
277
277
  shouldActivateOnStart={this.props.shouldActivateOnStart}
278
278
  disallowInterruption={this.props.disallowInterruption}
279
279
  testID={this.props.testID}
280
+ touchSoundDisabled={this.props.touchSoundDisabled ?? false}
281
+ enabled={!this.props.disabled}
280
282
  {...this.props.extraButtonProps}>
281
283
  <Animated.View {...coreProps} style={this.props.style}>
282
284
  {this.props.children}
@@ -22,6 +22,7 @@ interface NativeProps extends ViewProps {
22
22
  enabled?: WithDefault<boolean, true>;
23
23
  rippleColor?: ColorValue;
24
24
  rippleRadius?: Int32;
25
+ touchSoundDisabled?: WithDefault<boolean, false>;
25
26
  }
26
27
 
27
28
  export default codegenNativeComponent<NativeProps>('RNGestureHandlerButton');
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { PropsWithChildren } from 'react';
2
2
  import { tagMessage } from '../utils';
3
3
  import PlatformConstants from '../PlatformConstants';
4
4
  import createHandler from './createHandler';
@@ -13,7 +13,8 @@ export const forceTouchGestureHandlerProps = [
13
13
  'feedbackOnActivation',
14
14
  ] as const;
15
15
 
16
- class ForceTouchFallback extends React.Component {
16
+ // implicit `children` prop has been removed in @types/react^18.0.0
17
+ class ForceTouchFallback extends React.Component<PropsWithChildren<unknown>> {
17
18
  static forceTouchAvailable = false;
18
19
  componentDidMount() {
19
20
  console.warn(
@@ -17,6 +17,7 @@ export const panGestureHandlerProps = [
17
17
  'maxPointers',
18
18
  'avgTouches',
19
19
  'enableTrackpadTwoFingerGesture',
20
+ 'activateAfterLongPress',
20
21
  ] as const;
21
22
 
22
23
  export const panGestureHandlerCustomNativeProps = [
@@ -124,6 +125,7 @@ interface CommonPanProperties {
124
125
  minVelocity?: number;
125
126
  minVelocityX?: number;
126
127
  minVelocityY?: number;
128
+ activateAfterLongPress?: number;
127
129
  }
128
130
 
129
131
  export interface PanGestureConfig extends CommonPanProperties {
@@ -0,0 +1,2 @@
1
+ // @ts-ignore it's not exported so we need to import it from path
2
+ export { PressabilityDebugView } from 'react-native/Libraries/Pressability/PressabilityDebug';
@@ -0,0 +1,4 @@
1
+ // PressabilityDebugView is not implemented in react-native-web
2
+ export function PressabilityDebugView() {
3
+ return null;
4
+ }