react-native-gesture-handler 2.4.1 → 2.6.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 (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
+ }