react-native-gesture-handler 2.5.0 → 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 (313) hide show
  1. package/README.md +1 -0
  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/GestureHandlerOrchestrator.kt +30 -9
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +2 -1
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +2 -1
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
  10. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +1 -1
  14. package/android/src/main/jni/CMakeLists.txt +59 -0
  15. package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
  16. package/ios/RNGestureHandlerManager.mm +0 -5
  17. package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
  18. package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
  19. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
  20. package/lib/commonjs/RNGestureHandlerModule.macos.js +87 -30
  21. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  22. package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
  23. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  24. package/lib/commonjs/RNRenderer.js +16 -0
  25. package/lib/commonjs/RNRenderer.js.map +1 -0
  26. package/lib/commonjs/RNRenderer.web.js +11 -0
  27. package/lib/commonjs/RNRenderer.web.js.map +1 -0
  28. package/lib/commonjs/components/DrawerLayout.js +3 -1
  29. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  30. package/lib/commonjs/components/GestureButtons.js +42 -9
  31. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  32. package/lib/commonjs/components/GestureComponents.js +41 -4
  33. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  34. package/lib/commonjs/components/GestureComponents.web.js +7 -2
  35. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  36. package/lib/commonjs/components/Swipeable.js +3 -1
  37. package/lib/commonjs/components/Swipeable.js.map +1 -1
  38. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  39. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  40. package/lib/commonjs/handlers/createHandler.js +8 -1
  41. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  42. package/lib/commonjs/handlers/gestures/GestureDetector.js +67 -12
  43. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  44. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
  45. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  46. package/lib/commonjs/index.js +14 -0
  47. package/lib/commonjs/index.js.map +1 -1
  48. package/lib/commonjs/web/constants.js +3 -51
  49. package/lib/commonjs/web/constants.js.map +1 -1
  50. package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
  51. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
  52. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
  53. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
  54. package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
  55. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
  56. package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
  57. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
  58. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
  59. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
  60. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
  61. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
  62. package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
  63. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
  64. package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
  65. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
  66. package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
  67. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
  68. package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
  69. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
  70. package/lib/commonjs/web/interfaces.js +34 -0
  71. package/lib/commonjs/web/interfaces.js.map +1 -0
  72. package/lib/commonjs/web/tools/EventManager.js +169 -0
  73. package/lib/commonjs/web/tools/EventManager.js.map +1 -0
  74. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
  75. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  76. package/lib/commonjs/web/tools/InteractionManager.js +102 -0
  77. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
  78. package/lib/commonjs/web/tools/NodeManager.js +48 -0
  79. package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
  80. package/lib/commonjs/web/tools/PointerTracker.js +132 -0
  81. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
  82. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  83. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  84. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  85. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  86. package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
  87. package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
  88. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
  89. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  90. package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
  91. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
  92. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  93. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  94. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  95. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  96. package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  97. package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
  98. package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
  99. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
  100. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
  101. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  102. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
  103. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  104. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
  105. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  106. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
  107. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  108. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
  109. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  110. package/lib/commonjs/web_hammer/constants.js +64 -0
  111. package/lib/commonjs/web_hammer/constants.js.map +1 -0
  112. package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
  113. package/lib/commonjs/{web → web_hammer}/utils.js.map +0 -0
  114. package/lib/module/EnableExperimentalWebImplementation.js +15 -0
  115. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
  116. package/lib/module/RNGestureHandlerModule.macos.js +74 -29
  117. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  118. package/lib/module/RNGestureHandlerModule.web.js +73 -24
  119. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  120. package/lib/module/RNRenderer.js +4 -0
  121. package/lib/module/RNRenderer.js.map +1 -0
  122. package/lib/module/RNRenderer.web.js +4 -0
  123. package/lib/module/RNRenderer.web.js.map +1 -0
  124. package/lib/module/components/DrawerLayout.js +3 -1
  125. package/lib/module/components/DrawerLayout.js.map +1 -1
  126. package/lib/module/components/GestureButtons.js +43 -9
  127. package/lib/module/components/GestureButtons.js.map +1 -1
  128. package/lib/module/components/GestureComponents.js +39 -4
  129. package/lib/module/components/GestureComponents.js.map +1 -1
  130. package/lib/module/components/GestureComponents.web.js +6 -2
  131. package/lib/module/components/GestureComponents.web.js.map +1 -1
  132. package/lib/module/components/Swipeable.js +3 -1
  133. package/lib/module/components/Swipeable.js.map +1 -1
  134. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  135. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  136. package/lib/module/handlers/createHandler.js +9 -2
  137. package/lib/module/handlers/createHandler.js.map +1 -1
  138. package/lib/module/handlers/gestures/GestureDetector.js +64 -11
  139. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  140. package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
  141. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  142. package/lib/module/index.js +2 -1
  143. package/lib/module/index.js.map +1 -1
  144. package/lib/module/web/constants.js +1 -36
  145. package/lib/module/web/constants.js.map +1 -1
  146. package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
  147. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
  148. package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
  149. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
  150. package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
  151. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
  152. package/lib/module/web/handlers/GestureHandler.js +521 -0
  153. package/lib/module/web/handlers/GestureHandler.js.map +1 -0
  154. package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
  155. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
  156. package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
  157. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
  158. package/lib/module/web/handlers/PanGestureHandler.js +434 -0
  159. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
  160. package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
  161. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
  162. package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
  163. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
  164. package/lib/module/web/handlers/TapGestureHandler.js +281 -0
  165. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
  166. package/lib/module/web/interfaces.js +26 -0
  167. package/lib/module/web/interfaces.js.map +1 -0
  168. package/lib/module/web/tools/EventManager.js +160 -0
  169. package/lib/module/web/tools/EventManager.js.map +1 -0
  170. package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
  171. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  172. package/lib/module/web/tools/InteractionManager.js +93 -0
  173. package/lib/module/web/tools/InteractionManager.js.map +1 -0
  174. package/lib/module/web/tools/NodeManager.js +39 -0
  175. package/lib/module/web/tools/NodeManager.js.map +1 -0
  176. package/lib/module/web/tools/PointerTracker.js +122 -0
  177. package/lib/module/web/tools/PointerTracker.js.map +1 -0
  178. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  179. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  180. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  181. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  182. package/lib/module/{web → web_hammer}/Errors.js +0 -0
  183. package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
  184. package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
  185. package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  186. package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
  187. package/lib/module/web_hammer/GestureHandler.js.map +1 -0
  188. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  189. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  190. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  191. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  192. package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  193. package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
  194. package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
  195. package/lib/module/web_hammer/NodeManager.js.map +1 -0
  196. package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
  197. package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  198. package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
  199. package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  200. package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
  201. package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  202. package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
  203. package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  204. package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
  205. package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  206. package/lib/module/web_hammer/constants.js +43 -0
  207. package/lib/module/web_hammer/constants.js.map +1 -0
  208. package/lib/module/{web → web_hammer}/utils.js +0 -0
  209. package/lib/module/{web → web_hammer}/utils.js.map +0 -0
  210. package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
  211. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +28 -18
  212. package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
  213. package/lib/typescript/RNRenderer.d.ts +1 -0
  214. package/lib/typescript/RNRenderer.web.d.ts +3 -0
  215. package/lib/typescript/components/DrawerLayout.d.ts +1 -1
  216. package/lib/typescript/components/GestureButtons.d.ts +16 -0
  217. package/lib/typescript/components/GestureComponents.d.ts +7 -3
  218. package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
  219. package/lib/typescript/components/Swipeable.d.ts +1 -1
  220. package/lib/typescript/index.d.ts +2 -1
  221. package/lib/typescript/web/constants.d.ts +1 -33
  222. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
  223. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
  224. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
  225. package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
  226. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
  227. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
  228. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
  229. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
  230. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
  231. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
  232. package/lib/typescript/web/interfaces.d.ts +97 -0
  233. package/lib/typescript/web/tools/EventManager.d.ts +28 -0
  234. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
  235. package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
  236. package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
  237. package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
  238. package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
  239. package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
  240. package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
  241. package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
  242. package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
  243. package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
  244. package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
  245. package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
  246. package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
  247. package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
  248. package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
  249. package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
  250. package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
  251. package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
  252. package/lib/typescript/web_hammer/constants.d.ts +39 -0
  253. package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
  254. package/package.json +1 -1
  255. package/src/EnableExperimentalWebImplementation.ts +18 -0
  256. package/src/RNGestureHandlerModule.macos.ts +81 -29
  257. package/src/RNGestureHandlerModule.web.ts +89 -26
  258. package/src/RNRenderer.ts +3 -0
  259. package/src/RNRenderer.web.ts +3 -0
  260. package/src/components/DrawerLayout.tsx +3 -4
  261. package/src/components/GestureButtons.tsx +57 -0
  262. package/src/components/GestureComponents.tsx +66 -6
  263. package/src/components/GestureComponents.web.tsx +5 -0
  264. package/src/components/Swipeable.tsx +3 -1
  265. package/src/components/touchables/GenericTouchable.tsx +1 -0
  266. package/src/handlers/createHandler.tsx +13 -2
  267. package/src/handlers/gestures/GestureDetector.tsx +78 -12
  268. package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
  269. package/src/index.ts +3 -0
  270. package/src/web/constants.ts +1 -41
  271. package/src/web/detectors/RotationGestureDetector.ts +199 -0
  272. package/src/web/detectors/ScaleGestureDetector.ts +208 -0
  273. package/src/web/handlers/FlingGestureHandler.ts +146 -0
  274. package/src/web/handlers/GestureHandler.ts +572 -0
  275. package/src/web/handlers/LongPressGestureHandler.ts +122 -0
  276. package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
  277. package/src/web/handlers/PanGestureHandler.ts +488 -0
  278. package/src/web/handlers/PinchGestureHandler.ts +162 -0
  279. package/src/web/handlers/RotationGestureHandler.ts +181 -0
  280. package/src/web/handlers/TapGestureHandler.ts +275 -0
  281. package/src/web/interfaces.ts +114 -0
  282. package/src/web/tools/EventManager.ts +186 -0
  283. package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
  284. package/src/web/tools/InteractionManager.ts +108 -0
  285. package/src/web/tools/NodeManager.ts +43 -0
  286. package/src/web/tools/PointerTracker.ts +130 -0
  287. package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
  288. package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
  289. package/src/{web → web_hammer}/Errors.ts +0 -0
  290. package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
  291. package/src/{web → web_hammer}/GestureHandler.ts +102 -55
  292. package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
  293. package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
  294. package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
  295. package/src/{web → web_hammer}/NodeManager.ts +6 -3
  296. package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
  297. package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
  298. package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
  299. package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
  300. package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
  301. package/src/web_hammer/constants.ts +48 -0
  302. package/src/{web → web_hammer}/utils.ts +0 -0
  303. package/android/src/main/jni/Android.mk +0 -52
  304. package/android/src/main/jni/OnLoad.cpp +0 -9
  305. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
  306. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
  307. package/lib/commonjs/web/GestureHandler.js.map +0 -1
  308. package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
  309. package/lib/commonjs/web/NodeManager.js.map +0 -1
  310. package/lib/module/web/GestureHandler.js.map +0 -1
  311. package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
  312. package/lib/module/web/NodeManager.js.map +0 -1
  313. package/lib/typescript/web/NodeManager.d.ts +0 -8
@@ -37,6 +37,7 @@ declare class FlingGestureHandler extends DraggingGestureHandler {
37
37
  activeOffsetYStart: number;
38
38
  activeOffsetYEnd: number;
39
39
  waitFor: any[] | null;
40
+ simultaneousHandlers: any[] | null;
40
41
  }>;
41
42
  }
42
43
  export default FlingGestureHandler;
@@ -21,6 +21,7 @@ export declare type Config = Partial<{
21
21
  activeOffsetYStart: number;
22
22
  activeOffsetYEnd: number;
23
23
  waitFor: any[] | null;
24
+ simultaneousHandlers: any[] | null;
24
25
  }>;
25
26
  declare abstract class GestureHandler {
26
27
  handlerTag: any;
@@ -43,6 +44,7 @@ declare abstract class GestureHandler {
43
44
  private ref;
44
45
  abstract get name(): string;
45
46
  get id(): string;
47
+ get isNative(): boolean;
46
48
  get isDiscrete(): boolean;
47
49
  get shouldEnableGestureOnSetup(): boolean;
48
50
  constructor();
@@ -65,6 +67,7 @@ declare abstract class GestureHandler {
65
67
  activeOffsetYStart: number;
66
68
  activeOffsetYEnd: number;
67
69
  waitFor: any[] | null;
70
+ simultaneousHandlers: any[] | null;
68
71
  }>;
69
72
  onWaitingEnded(_gesture: this): void;
70
73
  removePendingGesture(id: string): void;
@@ -98,6 +101,7 @@ declare abstract class GestureHandler {
98
101
  activeOffsetYStart: number;
99
102
  activeOffsetYEnd: number;
100
103
  waitFor: any[] | null;
104
+ simultaneousHandlers: any[] | null;
101
105
  }>;
102
106
  destroy: () => void;
103
107
  isPointInView: ({ x, y }: {
@@ -124,6 +128,7 @@ declare abstract class GestureHandler {
124
128
  forceInvalidate(event: HammerInputExt): void;
125
129
  cancelEvent(event: HammerInputExt): void;
126
130
  onRawEvent({ isFirst }: HammerInputExt): void;
131
+ shouldUseTouchEvents(config: Config): boolean;
127
132
  setView(ref: Parameters<typeof findNodeHandle>['0'], propsRef: any): void;
128
133
  setupEvents(): void;
129
134
  onStart({ deltaX, deltaY, rotation }: HammerInputExt): void;
@@ -135,5 +140,6 @@ declare abstract class GestureHandler {
135
140
  };
136
141
  sync: () => void;
137
142
  simulateCancelEvent(_inputData: any): void;
143
+ ensureConfig(config: Config): Required<Config>;
138
144
  }
139
145
  export default GestureHandler;
@@ -27,6 +27,7 @@ declare abstract class IndiscreteGestureHandler extends GestureHandler {
27
27
  activeOffsetYStart: number;
28
28
  activeOffsetYEnd: number;
29
29
  waitFor: any[] | null;
30
+ simultaneousHandlers: any[] | null;
30
31
  }>;
31
32
  isGestureEnabledForEvent({ minPointers, maxPointers }: any, _recognizer: any, { maxPointers: pointerLength }: any): {
32
33
  failed: boolean;
@@ -24,6 +24,7 @@ declare class LongPressGestureHandler extends PressGestureHandler {
24
24
  activeOffsetYStart: number;
25
25
  activeOffsetYEnd: number;
26
26
  waitFor: any[] | null;
27
+ simultaneousHandlers: any[] | null;
27
28
  }> | {
28
29
  shouldCancelWhenOutside: boolean;
29
30
  maxDistSq: number;
@@ -1,6 +1,7 @@
1
1
  import { HammerInputExt } from './GestureHandler';
2
2
  import PressGestureHandler from './PressGestureHandler';
3
3
  declare class NativeViewGestureHandler extends PressGestureHandler {
4
+ get isNative(): boolean;
4
5
  onRawEvent(ev: HammerInputExt): void;
5
6
  }
6
7
  export default NativeViewGestureHandler;
@@ -0,0 +1,8 @@
1
+ import { ValueOf } from '../typeUtils';
2
+ import { HammerGestures } from '../RNGestureHandlerModule.web';
3
+ export declare function getHandler(tag: number): import("./NativeViewGestureHandler").default | import("./PanGestureHandler").default | import("./TapGestureHandler").default | import("./LongPressGestureHandler").default | import("./PinchGestureHandler").default | import("./RotationGestureHandler").default | import("./FlingGestureHandler").default;
4
+ export declare function createGestureHandler(handlerTag: number, handler: InstanceType<ValueOf<typeof HammerGestures>>): void;
5
+ export declare function dropGestureHandler(handlerTag: number): void;
6
+ export declare function getNodes(): {
7
+ [x: number]: import("./NativeViewGestureHandler").default | import("./PanGestureHandler").default | import("./TapGestureHandler").default | import("./LongPressGestureHandler").default | import("./PinchGestureHandler").default | import("./RotationGestureHandler").default | import("./FlingGestureHandler").default;
8
+ };
@@ -30,6 +30,7 @@ declare class PanGestureHandler extends DraggingGestureHandler {
30
30
  activeOffsetYStart: number;
31
31
  activeOffsetYEnd: number;
32
32
  waitFor: any[] | null;
33
+ simultaneousHandlers: any[] | null;
33
34
  }>;
34
35
  shouldFailUnderCustomCriteria({ deltaX, deltaY }: HammerInputExt, criteria: any): boolean;
35
36
  shouldActivateUnderCustomCriteria({ deltaX, deltaY, velocity }: any, criteria: any): boolean;
@@ -34,6 +34,7 @@ declare class PressGestureHandler extends DiscreteGestureHandler {
34
34
  activeOffsetYStart: number;
35
35
  activeOffsetYEnd: number;
36
36
  waitFor: any[] | null;
37
+ simultaneousHandlers: any[] | null;
37
38
  }> | {
38
39
  shouldCancelWhenOutside: boolean;
39
40
  maxDistSq: number;
@@ -76,6 +77,7 @@ declare class PressGestureHandler extends DiscreteGestureHandler {
76
77
  activeOffsetYStart: number;
77
78
  activeOffsetYEnd: number;
78
79
  waitFor: any[] | null;
80
+ simultaneousHandlers: any[] | null;
79
81
  }>;
80
82
  }
81
83
  export default PressGestureHandler;
@@ -49,6 +49,7 @@ declare class TapGestureHandler extends DiscreteGestureHandler {
49
49
  activeOffsetYStart: number;
50
50
  activeOffsetYEnd: number;
51
51
  waitFor: any[] | null;
52
+ simultaneousHandlers: any[] | null;
52
53
  }>;
53
54
  onGestureEnded(...props: any): void;
54
55
  onWaitingEnded(_gesture: any): void;
@@ -0,0 +1,39 @@
1
+ export declare const CONTENT_TOUCHES_DELAY = 240;
2
+ export declare const CONTENT_TOUCHES_QUICK_TAP_END_DELAY = 50;
3
+ export declare const MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = 0.1;
4
+ export declare const MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = 7;
5
+ export declare const DEG_RAD: number;
6
+ export declare const EventMap: {
7
+ readonly 1: 2;
8
+ readonly 2: 4;
9
+ readonly 4: 5;
10
+ readonly 8: 1;
11
+ };
12
+ export declare const Direction: {
13
+ RIGHT: number;
14
+ LEFT: number;
15
+ UP: number;
16
+ DOWN: number;
17
+ };
18
+ export declare const DirectionMap: {
19
+ 4: number;
20
+ 2: number;
21
+ 8: number;
22
+ 16: number;
23
+ };
24
+ export declare const HammerInputNames: {
25
+ 1: string;
26
+ 2: string;
27
+ 4: string;
28
+ 8: string;
29
+ };
30
+ export declare const HammerDirectionNames: {
31
+ 6: string;
32
+ 8: string;
33
+ 16: string;
34
+ 24: string;
35
+ 1: string;
36
+ 30: string;
37
+ 4: string;
38
+ 2: string;
39
+ };
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "Experimental implementation of a new declarative API for gesture handling in react-native",
5
5
  "scripts": {
6
6
  "prepare": "bob build",
@@ -0,0 +1,18 @@
1
+ let EXPERIMENTAL_WEB_IMPLEMENTATION = false;
2
+ let getWasCalled = false;
3
+
4
+ export function enableExperimentalWebImplementation(shouldEnable = true): void {
5
+ if (getWasCalled) {
6
+ console.error(
7
+ 'Some parts of this application have already started using old gesture handler implementation. No changes will be applied. You can try enabling new implementation earlier.'
8
+ );
9
+ return;
10
+ }
11
+
12
+ EXPERIMENTAL_WEB_IMPLEMENTATION = shouldEnable;
13
+ }
14
+
15
+ export function isExperimentalWebImplementationEnabled(): boolean {
16
+ getWasCalled = true;
17
+ return EXPERIMENTAL_WEB_IMPLEMENTATION;
18
+ }
@@ -1,61 +1,113 @@
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
+ import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
3
+
4
+ //GestureHandlers
5
+ import InteractionManager from './web/tools/InteractionManager';
6
+ import NodeManager from './web/tools/NodeManager';
7
+ import PanGestureHandler from './web/handlers/PanGestureHandler';
8
+ import TapGestureHandler from './web/handlers/TapGestureHandler';
9
+ import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
10
+ import PinchGestureHandler from './web/handlers/PinchGestureHandler';
11
+ import RotationGestureHandler from './web/handlers/RotationGestureHandler';
12
+ import FlingGestureHandler from './web/handlers/FlingGestureHandler';
13
+ import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
14
+
15
+ //Hammer Handlers
16
+ import * as HammerNodeManager from './web_hammer/NodeManager';
17
+ import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
18
+ import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
19
+ import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
20
+ import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
21
+ import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
22
+ import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
23
+ import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
24
+ import { Config } from './web_hammer/GestureHandler';
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,
34
+ };
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,
21
44
  };
22
45
 
23
46
  export default {
24
- Direction,
25
- // eslint-disable-next-line @typescript-eslint/no-empty-function
26
- handleSetJSResponder() {},
27
- // eslint-disable-next-line @typescript-eslint/no-empty-function
28
- handleClearJSResponder() {},
47
+ // Direction,
48
+ handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
49
+ console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
50
+ },
51
+ handleClearJSResponder() {
52
+ console.warn('handleClearJSResponder: ');
53
+ },
29
54
  createGestureHandler<T>(
30
55
  handlerName: keyof typeof Gestures,
31
56
  handlerTag: number,
32
57
  config: T
33
58
  ) {
34
- //TODO(TS) extends config
35
- if (!(handlerName in Gestures))
36
- throw new Error(
37
- `react-native-gesture-handler: ${handlerName} is not supported on macos.`
59
+ if (isExperimentalWebImplementationEnabled()) {
60
+ if (!(handlerName in Gestures)) return;
61
+
62
+ const interactionManager = new InteractionManager();
63
+
64
+ const GestureClass = Gestures[handlerName];
65
+ NodeManager.createGestureHandler(handlerTag, new GestureClass());
66
+ interactionManager.configureInteractions(
67
+ NodeManager.getHandler(handlerTag),
68
+ (config as unknown) as Config
38
69
  );
39
- const GestureClass = Gestures[handlerName];
40
- NodeManager.createGestureHandler(handlerTag, new GestureClass());
70
+ } else {
71
+ if (!(handlerName in HammerGestures)) return;
72
+
73
+ const GestureClass = HammerGestures[handlerName];
74
+ HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
75
+ }
76
+
41
77
  this.updateGestureHandler(handlerTag, config);
42
78
  },
43
79
  attachGestureHandler(
44
80
  handlerTag: number,
45
- newView: number,
81
+ newView: number, //ref
46
82
  _actionType: ActionType,
47
83
  propsRef: React.RefObject<unknown>
48
84
  ) {
49
- NodeManager.getHandler(handlerTag).setView(newView, propsRef);
85
+ if (isExperimentalWebImplementationEnabled()) {
86
+ NodeManager.getHandler(handlerTag).init(newView, propsRef);
87
+ } else {
88
+ HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
89
+ }
50
90
  },
51
91
  updateGestureHandler(handlerTag: number, newConfig: any) {
52
- NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
92
+ if (isExperimentalWebImplementationEnabled()) {
93
+ NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
94
+ } else {
95
+ HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
96
+ }
53
97
  },
54
98
  getGestureHandlerNode(handlerTag: number) {
55
- return NodeManager.getHandler(handlerTag);
99
+ if (isExperimentalWebImplementationEnabled()) {
100
+ return NodeManager.getHandler(handlerTag);
101
+ } else {
102
+ return HammerNodeManager.getHandler(handlerTag);
103
+ }
56
104
  },
57
105
  dropGestureHandler(handlerTag: number) {
58
- NodeManager.dropGestureHandler(handlerTag);
106
+ if (isExperimentalWebImplementationEnabled()) {
107
+ NodeManager.dropGestureHandler(handlerTag);
108
+ } else {
109
+ HammerNodeManager.dropGestureHandler(handlerTag);
110
+ }
59
111
  },
60
112
  // eslint-disable-next-line @typescript-eslint/no-empty-function
61
113
  flushOperations() {},
@@ -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
+ };
@@ -203,10 +203,7 @@ export default class DrawerLayout extends Component<
203
203
  this.updateAnimatedEvent(props, this.state);
204
204
  }
205
205
 
206
- UNSAFE_componentWillUpdate(
207
- props: DrawerLayoutProps,
208
- state: DrawerLayoutState
209
- ) {
206
+ shouldComponentUpdate(props: DrawerLayoutProps, state: DrawerLayoutState) {
210
207
  if (
211
208
  this.props.drawerPosition !== props.drawerPosition ||
212
209
  this.props.drawerWidth !== props.drawerWidth ||
@@ -215,6 +212,8 @@ export default class DrawerLayout extends Component<
215
212
  ) {
216
213
  this.updateAnimatedEvent(props, state);
217
214
  }
215
+
216
+ return true;
218
217
  }
219
218
 
220
219
  private openValue?: Animated.AnimatedInterpolation;
@@ -72,6 +72,12 @@ export interface BaseButtonProps extends RawButtonProps {
72
72
  */
73
73
  onPress?: (pointerInside: boolean) => void;
74
74
 
75
+ /**
76
+ * Called when the button gets pressed and is held for `delayLongPress`
77
+ * milliseconds.
78
+ */
79
+ onLongPress?: () => void;
80
+
75
81
  /**
76
82
  * Called when button changes from inactive to active and vice versa. It
77
83
  * passes active state as a boolean variable as a first parameter for that
@@ -80,6 +86,12 @@ export interface BaseButtonProps extends RawButtonProps {
80
86
  onActiveStateChange?: (active: boolean) => void;
81
87
  style?: StyleProp<ViewStyle>;
82
88
  testID?: string;
89
+
90
+ /**
91
+ * Delay, in milliseconds, after which the `onLongPress` callback gets called.
92
+ * Defaults to 600.
93
+ */
94
+ delayLongPress?: number;
83
95
  }
84
96
 
85
97
  export interface RectButtonProps extends BaseButtonProps {
@@ -111,11 +123,18 @@ export const RawButton = createNativeWrapper(GestureHandlerButton, {
111
123
  });
112
124
 
113
125
  export class BaseButton extends React.Component<BaseButtonProps> {
126
+ static defaultProps = {
127
+ delayLongPress: 600,
128
+ };
129
+
114
130
  private lastActive: boolean;
131
+ private longPressTimeout: ReturnType<typeof setTimeout> | undefined;
132
+ private longPressDetected: boolean;
115
133
 
116
134
  constructor(props: BaseButtonProps) {
117
135
  super(props);
118
136
  this.lastActive = false;
137
+ this.longPressDetected = false;
119
138
  }
120
139
 
121
140
  private handleEvent = ({
@@ -129,6 +148,7 @@ export class BaseButton extends React.Component<BaseButtonProps> {
129
148
  }
130
149
 
131
150
  if (
151
+ !this.longPressDetected &&
132
152
  oldState === State.ACTIVE &&
133
153
  state !== State.CANCELLED &&
134
154
  this.lastActive &&
@@ -137,9 +157,46 @@ export class BaseButton extends React.Component<BaseButtonProps> {
137
157
  this.props.onPress(active);
138
158
  }
139
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
+
140
192
  this.lastActive = active;
141
193
  };
142
194
 
195
+ private onLongPress = () => {
196
+ this.longPressDetected = true;
197
+ this.props.onLongPress?.();
198
+ };
199
+
143
200
  // Normally, the parent would execute it's handler first, then forward the
144
201
  // event to listeners. However, here our handler is virtually only forwarding
145
202
  // events to listeners, so we reverse the order to keep the proper order of