react-native-gesture-handler 2.4.1 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +4 -2
- package/RNGestureHandler.podspec +17 -5
- package/android/build.gradle +71 -15
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +32 -6
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +105 -23
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +30 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
- package/android/src/main/jni/CMakeLists.txt +59 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
- package/ios/Handlers/RNFlingHandler.m +43 -1
- package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
- package/ios/Handlers/RNPanHandler.m +27 -0
- package/ios/RNGestureHandler.h +1 -0
- package/ios/RNGestureHandler.m +22 -4
- package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
- package/ios/RNGestureHandlerManager.mm +10 -7
- package/ios/RNGestureHandlerModule.mm +4 -1
- package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
- package/ios/RNManualActivationRecognizer.m +10 -3
- package/ios/RNRootViewGestureRecognizer.m +12 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +138 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNRenderer.js +16 -0
- package/lib/commonjs/RNRenderer.js.map +1 -0
- package/lib/commonjs/RNRenderer.web.js +11 -0
- package/lib/commonjs/RNRenderer.web.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +41 -12
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +42 -9
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +41 -4
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +7 -2
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +3 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +5 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
- package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +33 -12
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +150 -75
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +13 -2
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +6 -3
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/constants.js +3 -51
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/commonjs/web/interfaces.js +34 -0
- package/lib/commonjs/web/interfaces.js.map +1 -0
- package/lib/commonjs/web/tools/EventManager.js +169 -0
- package/lib/commonjs/web/tools/EventManager.js.map +1 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/commonjs/web/tools/InteractionManager.js +102 -0
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
- package/lib/commonjs/web/tools/NodeManager.js +48 -0
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +132 -0
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/commonjs/web_hammer/constants.js +64 -0
- package/lib/commonjs/web_hammer/constants.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
- package/lib/commonjs/{web → web_hammer}/utils.js.map +1 -1
- package/lib/module/EnableExperimentalWebImplementation.js +15 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +102 -0
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.web.js +73 -24
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNRenderer.js +4 -0
- package/lib/module/RNRenderer.js.map +1 -0
- package/lib/module/RNRenderer.web.js +4 -0
- package/lib/module/RNRenderer.web.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +41 -12
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js +43 -9
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +39 -4
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +6 -2
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +3 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +5 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +1 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PressabilityDebugView.js +3 -0
- package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
- package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/module/handlers/createHandler.js +35 -14
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +147 -74
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +13 -2
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js +5 -0
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +2 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/constants.js +1 -36
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/GestureHandler.js +521 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PanGestureHandler.js +434 -0
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/TapGestureHandler.js +281 -0
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/module/web/interfaces.js +26 -0
- package/lib/module/web/interfaces.js.map +1 -0
- package/lib/module/web/tools/EventManager.js +160 -0
- package/lib/module/web/tools/EventManager.js.map +1 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/module/web/tools/InteractionManager.js +93 -0
- package/lib/module/web/tools/InteractionManager.js.map +1 -0
- package/lib/module/web/tools/NodeManager.js +39 -0
- package/lib/module/web/tools/NodeManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +122 -0
- package/lib/module/web/tools/PointerTracker.js.map +1 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/Errors.js +0 -0
- package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/module/web_hammer/GestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/module/web_hammer/NodeManager.js.map +1 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/module/web_hammer/constants.js +43 -0
- package/lib/module/web_hammer/constants.js.map +1 -0
- package/lib/module/{web → web_hammer}/utils.js +0 -0
- package/lib/module/{web → web_hammer}/utils.js.map +1 -1
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +44 -0
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
- package/lib/typescript/RNRenderer.d.ts +1 -0
- package/lib/typescript/RNRenderer.web.d.ts +3 -0
- package/lib/typescript/components/DrawerLayout.d.ts +4 -1
- package/lib/typescript/components/GestureButtons.d.ts +22 -0
- package/lib/typescript/components/GestureComponents.d.ts +7 -3
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
- package/lib/typescript/components/Swipeable.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/web/constants.d.ts +1 -33
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
- package/lib/typescript/web/interfaces.d.ts +97 -0
- package/lib/typescript/web/tools/EventManager.d.ts +28 -0
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
- package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
- package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
- package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
- package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
- package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/constants.d.ts +39 -0
- package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
- package/package.json +1 -1
- package/src/EnableExperimentalWebImplementation.ts +18 -0
- package/src/RNGestureHandlerModule.macos.ts +114 -0
- package/src/RNGestureHandlerModule.web.ts +89 -26
- package/src/RNRenderer.ts +3 -0
- package/src/RNRenderer.web.ts +3 -0
- package/src/components/DrawerLayout.tsx +37 -14
- package/src/components/GestureButtons.tsx +64 -0
- package/src/components/GestureComponents.tsx +66 -6
- package/src/components/GestureComponents.web.tsx +5 -0
- package/src/components/Swipeable.tsx +3 -1
- package/src/components/touchables/GenericTouchable.tsx +2 -0
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
- package/src/handlers/ForceTouchGestureHandler.ts +3 -2
- package/src/handlers/PanGestureHandler.ts +2 -0
- package/src/handlers/PressabilityDebugView.tsx +2 -0
- package/src/handlers/PressabilityDebugView.web.tsx +4 -0
- package/src/handlers/{createHandler.ts → createHandler.tsx} +45 -19
- package/src/handlers/gestureHandlerCommon.ts +2 -0
- package/src/handlers/gestures/GestureDetector.tsx +185 -93
- package/src/handlers/gestures/gesture.ts +16 -0
- package/src/handlers/gestures/gestureStateManager.ts +13 -8
- package/src/handlers/gestures/panGesture.ts +5 -0
- package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
- package/src/index.ts +3 -0
- package/src/utils.ts +3 -1
- package/src/web/constants.ts +1 -41
- package/src/web/detectors/RotationGestureDetector.ts +199 -0
- package/src/web/detectors/ScaleGestureDetector.ts +208 -0
- package/src/web/handlers/FlingGestureHandler.ts +146 -0
- package/src/web/handlers/GestureHandler.ts +572 -0
- package/src/web/handlers/LongPressGestureHandler.ts +122 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
- package/src/web/handlers/PanGestureHandler.ts +488 -0
- package/src/web/handlers/PinchGestureHandler.ts +162 -0
- package/src/web/handlers/RotationGestureHandler.ts +181 -0
- package/src/web/handlers/TapGestureHandler.ts +275 -0
- package/src/web/interfaces.ts +114 -0
- package/src/web/tools/EventManager.ts +186 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
- package/src/web/tools/InteractionManager.ts +108 -0
- package/src/web/tools/NodeManager.ts +43 -0
- package/src/web/tools/PointerTracker.ts +130 -0
- package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/Errors.ts +0 -0
- package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/GestureHandler.ts +102 -55
- package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
- package/src/{web → web_hammer}/NodeManager.ts +6 -3
- package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
- package/src/web_hammer/constants.ts +48 -0
- package/src/{web → web_hammer}/utils.ts +1 -1
- package/android/src/main/jni/Android.mk +0 -53
- package/android/src/main/jni/OnLoad.cpp +0 -9
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
- package/lib/commonjs/web/GestureHandler.js.map +0 -1
- package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/commonjs/web/NodeManager.js.map +0 -1
- package/lib/module/web/GestureHandler.js.map +0 -1
- package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/module/web/NodeManager.js.map +0 -1
- package/lib/typescript/web/NodeManager.d.ts +0 -8
@@ -1,7 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import {
|
3
3
|
Platform,
|
4
|
-
Touchable,
|
5
4
|
UIManager,
|
6
5
|
DeviceEventEmitter,
|
7
6
|
EmitterSubscription,
|
@@ -26,8 +25,9 @@ import {
|
|
26
25
|
scheduleFlushOperations,
|
27
26
|
} from './gestureHandlerCommon';
|
28
27
|
import { ValueOf } from '../typeUtils';
|
29
|
-
import { isFabric, isJestEnv } from '../utils';
|
28
|
+
import { isFabric, isJestEnv, tagMessage } from '../utils';
|
30
29
|
import { ActionType } from '../ActionType';
|
30
|
+
import { PressabilityDebugView } from './PressabilityDebugView';
|
31
31
|
|
32
32
|
const UIManagerAny = UIManager as any;
|
33
33
|
|
@@ -148,6 +148,8 @@ type InternalEventHandlers = {
|
|
148
148
|
onGestureHandlerStateChange?: (event: any) => void;
|
149
149
|
};
|
150
150
|
|
151
|
+
const UNRESOLVED_REFS_RETRY_LIMIT = 1;
|
152
|
+
|
151
153
|
// TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.
|
152
154
|
export default function createHandler<
|
153
155
|
T extends BaseGestureHandlerProps<U>,
|
@@ -198,7 +200,7 @@ export default function createHandler<
|
|
198
200
|
'toggleElementInspector',
|
199
201
|
() => {
|
200
202
|
this.setState((_) => ({ allowTouches }));
|
201
|
-
this.update();
|
203
|
+
this.update(UNRESOLVED_REFS_RETRY_LIMIT);
|
202
204
|
}
|
203
205
|
);
|
204
206
|
}
|
@@ -211,7 +213,7 @@ export default function createHandler<
|
|
211
213
|
// be resolved by then.
|
212
214
|
this.updateEnqueued = setImmediate(() => {
|
213
215
|
this.updateEnqueued = null;
|
214
|
-
this.update();
|
216
|
+
this.update(UNRESOLVED_REFS_RETRY_LIMIT);
|
215
217
|
});
|
216
218
|
}
|
217
219
|
|
@@ -231,7 +233,7 @@ export default function createHandler<
|
|
231
233
|
if (this.viewTag !== viewTag) {
|
232
234
|
this.attachGestureHandler(viewTag as number); // TODO(TS) - check interaction between _viewTag & findNodeHandle
|
233
235
|
}
|
234
|
-
this.update();
|
236
|
+
this.update(UNRESOLVED_REFS_RETRY_LIMIT);
|
235
237
|
}
|
236
238
|
|
237
239
|
componentWillUnmount() {
|
@@ -361,14 +363,26 @@ export default function createHandler<
|
|
361
363
|
scheduleFlushOperations();
|
362
364
|
};
|
363
365
|
|
364
|
-
private update() {
|
365
|
-
const
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
if (
|
371
|
-
this.
|
366
|
+
private update(remainingTries: number) {
|
367
|
+
const props: HandlerProps<U> = this.props;
|
368
|
+
|
369
|
+
// When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of
|
370
|
+
// `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying
|
371
|
+
// again is easy enough fix.
|
372
|
+
if (hasUnresolvedRefs(props) && remainingTries > 0) {
|
373
|
+
this.updateEnqueued = setImmediate(() => {
|
374
|
+
this.updateEnqueued = null;
|
375
|
+
this.update(remainingTries - 1);
|
376
|
+
});
|
377
|
+
} else {
|
378
|
+
const newConfig = filterConfig(
|
379
|
+
transformProps ? transformProps(this.props) : this.props,
|
380
|
+
[...allowedProps, ...customNativeProps],
|
381
|
+
config
|
382
|
+
);
|
383
|
+
if (!deepEqual(this.config, newConfig)) {
|
384
|
+
this.updateGestureHandler(newConfig);
|
385
|
+
}
|
372
386
|
}
|
373
387
|
}
|
374
388
|
|
@@ -393,6 +407,7 @@ export default function createHandler<
|
|
393
407
|
onGestureEvent,
|
394
408
|
onGestureHandlerEvent,
|
395
409
|
}: OnGestureEventHandlers = this.props;
|
410
|
+
|
396
411
|
if (onGestureEvent && typeof onGestureEvent !== 'function') {
|
397
412
|
// If it's not a method it should be an native Animated.event
|
398
413
|
// object. We set it directly as the handler for the view
|
@@ -455,10 +470,20 @@ export default function createHandler<
|
|
455
470
|
|
456
471
|
this.propsRef.current = events;
|
457
472
|
|
458
|
-
|
473
|
+
let child: any = null;
|
474
|
+
try {
|
475
|
+
child = React.Children.only(this.props.children);
|
476
|
+
} catch (e) {
|
477
|
+
throw new Error(
|
478
|
+
tagMessage(
|
479
|
+
`${name} got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`
|
480
|
+
)
|
481
|
+
);
|
482
|
+
}
|
483
|
+
|
459
484
|
let grandChildren = child.props.children;
|
460
485
|
if (
|
461
|
-
|
486
|
+
__DEV__ &&
|
462
487
|
child.type &&
|
463
488
|
(child.type === 'RNGestureHandlerButton' ||
|
464
489
|
child.type.name === 'View' ||
|
@@ -466,10 +491,11 @@ export default function createHandler<
|
|
466
491
|
) {
|
467
492
|
grandChildren = React.Children.toArray(grandChildren);
|
468
493
|
grandChildren.push(
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
494
|
+
<PressabilityDebugView
|
495
|
+
key="pressabilityDebugView"
|
496
|
+
color="mediumspringgreen"
|
497
|
+
hitSlop={child.props.hitSlop}
|
498
|
+
/>
|
473
499
|
);
|
474
500
|
}
|
475
501
|
|
@@ -126,6 +126,8 @@ export type BaseGestureHandlerProps<
|
|
126
126
|
onHandlerStateChange?: (
|
127
127
|
event: HandlerStateChangeEvent<ExtraEventPayloadT>
|
128
128
|
) => void;
|
129
|
+
// implicit `children` prop has been removed in @types/react^18.0.0
|
130
|
+
children?: React.ReactNode;
|
129
131
|
};
|
130
132
|
|
131
133
|
function isConfigParam(param: unknown, name: string) {
|
@@ -40,6 +40,8 @@ import { getShadowNodeFromRef } from '../../getShadowNodeFromRef';
|
|
40
40
|
import { Platform } from 'react-native';
|
41
41
|
import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
|
42
42
|
import { onGestureHandlerEvent } from './eventReceiver';
|
43
|
+
import { RNRenderer } from '../../RNRenderer';
|
44
|
+
import { isExperimentalWebImplementationEnabled } from '../../EnableExperimentalWebImplementation';
|
43
45
|
|
44
46
|
declare const global: {
|
45
47
|
isFormsStackingContext: (node: unknown) => boolean | null; // JSI function
|
@@ -116,6 +118,9 @@ function checkGestureCallbacksForWorklets(gesture: GestureType) {
|
|
116
118
|
|
117
119
|
interface WebEventHandler {
|
118
120
|
onGestureHandlerEvent: (event: HandlerStateChangeEvent<unknown>) => void;
|
121
|
+
onGestureHandlerStateChange?: (
|
122
|
+
event: HandlerStateChangeEvent<unknown>
|
123
|
+
) => void;
|
119
124
|
}
|
120
125
|
|
121
126
|
interface AttachHandlersConfig {
|
@@ -268,11 +273,34 @@ function updateHandlers(
|
|
268
273
|
}
|
269
274
|
|
270
275
|
if (preparedGesture.animatedHandlers) {
|
271
|
-
|
276
|
+
const previousHandlersValue =
|
277
|
+
preparedGesture.animatedHandlers.value ?? [];
|
278
|
+
const newHandlersValue = (preparedGesture.config
|
272
279
|
.filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI
|
273
280
|
.map((g) => g.handlers) as unknown) as HandlerCallbacks<
|
274
281
|
Record<string, unknown>
|
275
282
|
>[];
|
283
|
+
|
284
|
+
// if amount of gesture configs changes, we need to update the callbacks in shared value
|
285
|
+
let shouldUpdateSharedValue =
|
286
|
+
previousHandlersValue.length !== newHandlersValue.length;
|
287
|
+
|
288
|
+
if (!shouldUpdateSharedValue) {
|
289
|
+
// if the amount is the same, we need to check if any of the configs inside has changed
|
290
|
+
for (let i = 0; i < newHandlersValue.length; i++) {
|
291
|
+
if (
|
292
|
+
// we can use the `gestureId` prop as it's unique for every config instance
|
293
|
+
newHandlersValue[i].gestureId !== previousHandlersValue[i].gestureId
|
294
|
+
) {
|
295
|
+
shouldUpdateSharedValue = true;
|
296
|
+
break;
|
297
|
+
}
|
298
|
+
}
|
299
|
+
}
|
300
|
+
|
301
|
+
if (shouldUpdateSharedValue) {
|
302
|
+
preparedGesture.animatedHandlers.value = newHandlersValue;
|
303
|
+
}
|
276
304
|
}
|
277
305
|
|
278
306
|
scheduleFlushOperations();
|
@@ -299,90 +327,90 @@ function needsToReattach(
|
|
299
327
|
return false;
|
300
328
|
}
|
301
329
|
|
302
|
-
function
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
330
|
+
function isStateChangeEvent(
|
331
|
+
event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
|
332
|
+
): event is GestureStateChangeEvent {
|
333
|
+
'worklet';
|
334
|
+
// @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point
|
335
|
+
return event.oldState != null;
|
336
|
+
}
|
309
337
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
}
|
338
|
+
function isTouchEvent(
|
339
|
+
event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
|
340
|
+
): event is GestureTouchEvent {
|
341
|
+
'worklet';
|
342
|
+
return event.eventType != null;
|
343
|
+
}
|
317
344
|
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
345
|
+
function getHandler(
|
346
|
+
type: CALLBACK_TYPE,
|
347
|
+
gesture: HandlerCallbacks<Record<string, unknown>>
|
348
|
+
) {
|
349
|
+
'worklet';
|
350
|
+
switch (type) {
|
351
|
+
case CALLBACK_TYPE.BEGAN:
|
352
|
+
return gesture.onBegin;
|
353
|
+
case CALLBACK_TYPE.START:
|
354
|
+
return gesture.onStart;
|
355
|
+
case CALLBACK_TYPE.UPDATE:
|
356
|
+
return gesture.onUpdate;
|
357
|
+
case CALLBACK_TYPE.CHANGE:
|
358
|
+
return gesture.onChange;
|
359
|
+
case CALLBACK_TYPE.END:
|
360
|
+
return gesture.onEnd;
|
361
|
+
case CALLBACK_TYPE.FINALIZE:
|
362
|
+
return gesture.onFinalize;
|
363
|
+
case CALLBACK_TYPE.TOUCHES_DOWN:
|
364
|
+
return gesture.onTouchesDown;
|
365
|
+
case CALLBACK_TYPE.TOUCHES_MOVE:
|
366
|
+
return gesture.onTouchesMove;
|
367
|
+
case CALLBACK_TYPE.TOUCHES_UP:
|
368
|
+
return gesture.onTouchesUp;
|
369
|
+
case CALLBACK_TYPE.TOUCHES_CANCELLED:
|
370
|
+
return gesture.onTouchesCancelled;
|
323
371
|
}
|
372
|
+
}
|
324
373
|
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
return gesture.onChange;
|
339
|
-
case CALLBACK_TYPE.END:
|
340
|
-
return gesture.onEnd;
|
341
|
-
case CALLBACK_TYPE.FINALIZE:
|
342
|
-
return gesture.onFinalize;
|
343
|
-
case CALLBACK_TYPE.TOUCHES_DOWN:
|
344
|
-
return gesture.onTouchesDown;
|
345
|
-
case CALLBACK_TYPE.TOUCHES_MOVE:
|
346
|
-
return gesture.onTouchesMove;
|
347
|
-
case CALLBACK_TYPE.TOUCHES_UP:
|
348
|
-
return gesture.onTouchesUp;
|
349
|
-
case CALLBACK_TYPE.TOUCHES_CANCELLED:
|
350
|
-
return gesture.onTouchesCancelled;
|
351
|
-
}
|
374
|
+
function touchEventTypeToCallbackType(
|
375
|
+
eventType: TouchEventType
|
376
|
+
): CALLBACK_TYPE {
|
377
|
+
'worklet';
|
378
|
+
switch (eventType) {
|
379
|
+
case TouchEventType.TOUCHES_DOWN:
|
380
|
+
return CALLBACK_TYPE.TOUCHES_DOWN;
|
381
|
+
case TouchEventType.TOUCHES_MOVE:
|
382
|
+
return CALLBACK_TYPE.TOUCHES_MOVE;
|
383
|
+
case TouchEventType.TOUCHES_UP:
|
384
|
+
return CALLBACK_TYPE.TOUCHES_UP;
|
385
|
+
case TouchEventType.TOUCHES_CANCELLED:
|
386
|
+
return CALLBACK_TYPE.TOUCHES_CANCELLED;
|
352
387
|
}
|
388
|
+
return CALLBACK_TYPE.UNDEFINED;
|
389
|
+
}
|
353
390
|
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
return CALLBACK_TYPE.UNDEFINED;
|
391
|
+
function runWorklet(
|
392
|
+
type: CALLBACK_TYPE,
|
393
|
+
gesture: HandlerCallbacks<Record<string, unknown>>,
|
394
|
+
event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,
|
395
|
+
...args: any[]
|
396
|
+
) {
|
397
|
+
'worklet';
|
398
|
+
const handler = getHandler(type, gesture);
|
399
|
+
if (gesture.isWorklet[type]) {
|
400
|
+
// @ts-ignore Logic below makes sure the correct event is send to the
|
401
|
+
// correct handler.
|
402
|
+
handler?.(event, ...args);
|
403
|
+
} else if (handler) {
|
404
|
+
console.warn(tagMessage('Animated gesture callback must be a worklet'));
|
369
405
|
}
|
406
|
+
}
|
370
407
|
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
'worklet';
|
378
|
-
const handler = getHandler(type, gesture);
|
379
|
-
if (gesture.isWorklet[type]) {
|
380
|
-
// @ts-ignore Logic below makes sure the correct event is send to the
|
381
|
-
// correct handler.
|
382
|
-
handler?.(event, ...args);
|
383
|
-
} else if (handler) {
|
384
|
-
console.warn(tagMessage('Animated gesture callback must be a worklet'));
|
385
|
-
}
|
408
|
+
function useAnimatedGesture(
|
409
|
+
preparedGesture: GestureConfigReference,
|
410
|
+
needsRebuild: boolean
|
411
|
+
) {
|
412
|
+
if (!Reanimated) {
|
413
|
+
return;
|
386
414
|
}
|
387
415
|
|
388
416
|
// Hooks are called conditionally, but the condition is whether the
|
@@ -488,12 +516,56 @@ function useAnimatedGesture(
|
|
488
516
|
preparedGesture.animatedHandlers = sharedHandlersCallbacks;
|
489
517
|
}
|
490
518
|
|
519
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
520
|
+
function validateDetectorChildren(ref: any) {
|
521
|
+
// finds the first native view under the Wrap component and traverses the fiber tree upwards
|
522
|
+
// to check whether there is more than one native view as a pseudo-direct child of GestureDetector
|
523
|
+
// i.e. this is not ok:
|
524
|
+
// Wrap
|
525
|
+
// |
|
526
|
+
// / \
|
527
|
+
// / \
|
528
|
+
// / \
|
529
|
+
// / \
|
530
|
+
// NativeView NativeView
|
531
|
+
//
|
532
|
+
// but this is fine:
|
533
|
+
// Wrap
|
534
|
+
// |
|
535
|
+
// NativeView
|
536
|
+
// |
|
537
|
+
// / \
|
538
|
+
// / \
|
539
|
+
// / \
|
540
|
+
// / \
|
541
|
+
// NativeView NativeView
|
542
|
+
if (__DEV__ && Platform.OS !== 'web') {
|
543
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
544
|
+
const wrapType = ref._reactInternals.elementType;
|
545
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
546
|
+
let instance = RNRenderer.findHostInstance_DEPRECATED(ref)
|
547
|
+
._internalFiberInstanceHandleDEV;
|
548
|
+
|
549
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
550
|
+
while (instance && instance.elementType !== wrapType) {
|
551
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
552
|
+
if (instance.sibling) {
|
553
|
+
throw new Error(
|
554
|
+
'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'
|
555
|
+
);
|
556
|
+
}
|
557
|
+
|
558
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
559
|
+
instance = instance.return;
|
560
|
+
}
|
561
|
+
}
|
562
|
+
}
|
563
|
+
|
491
564
|
interface GestureDetectorProps {
|
492
565
|
gesture?: ComposedGesture | GestureType;
|
566
|
+
children?: React.ReactNode;
|
493
567
|
}
|
494
|
-
export const GestureDetector:
|
495
|
-
props
|
496
|
-
) => {
|
568
|
+
export const GestureDetector = (props: GestureDetectorProps) => {
|
497
569
|
const gestureConfig = props.gesture;
|
498
570
|
const gesture = gestureConfig?.toGestureArray?.() ?? [];
|
499
571
|
const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);
|
@@ -503,6 +575,11 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
|
|
503
575
|
onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
|
504
576
|
onGestureHandlerEvent(e.nativeEvent);
|
505
577
|
},
|
578
|
+
onGestureHandlerStateChange: isExperimentalWebImplementationEnabled()
|
579
|
+
? (e: HandlerStateChangeEvent<unknown>) => {
|
580
|
+
onGestureHandlerEvent(e.nativeEvent);
|
581
|
+
}
|
582
|
+
: undefined,
|
506
583
|
});
|
507
584
|
|
508
585
|
const preparedGesture = React.useRef<GestureConfigReference>({
|
@@ -539,6 +616,8 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
|
|
539
616
|
useEffect(() => {
|
540
617
|
firstRenderRef.current = true;
|
541
618
|
const viewTag = findNodeHandle(viewRef.current) as number;
|
619
|
+
|
620
|
+
validateDetectorChildren(viewRef.current);
|
542
621
|
attachHandlers({
|
543
622
|
preparedGesture,
|
544
623
|
gestureConfig,
|
@@ -557,6 +636,7 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
|
|
557
636
|
const viewTag = findNodeHandle(viewRef.current) as number;
|
558
637
|
|
559
638
|
if (needsToReattach(preparedGesture, gesture)) {
|
639
|
+
validateDetectorChildren(viewRef.current);
|
560
640
|
dropHandlers(preparedGesture);
|
561
641
|
attachHandlers({
|
562
642
|
preparedGesture,
|
@@ -605,20 +685,32 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
|
|
605
685
|
}
|
606
686
|
};
|
607
687
|
|
608
|
-
class Wrap extends React.Component<{
|
688
|
+
class Wrap extends React.Component<{
|
689
|
+
onGestureHandlerEvent?: unknown;
|
690
|
+
// implicit `children` prop has been removed in @types/react^18.0.0
|
691
|
+
children?: React.ReactNode;
|
692
|
+
}> {
|
609
693
|
render() {
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
694
|
+
try {
|
695
|
+
// I don't think that fighting with types over such a simple function is worth it
|
696
|
+
// The only thing it does is add 'collapsable: false' to the child component
|
697
|
+
// to make sure it is in the native view hierarchy so the detector can find
|
698
|
+
// correct viewTag to attach to.
|
699
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
700
|
+
const child: any = React.Children.only(this.props.children);
|
701
|
+
return React.cloneElement(
|
702
|
+
child,
|
703
|
+
{ collapsable: false },
|
704
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
705
|
+
child.props.children
|
706
|
+
);
|
707
|
+
} catch (e) {
|
708
|
+
throw new Error(
|
709
|
+
tagMessage(
|
710
|
+
`GestureDetector got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`
|
711
|
+
)
|
712
|
+
);
|
713
|
+
}
|
622
714
|
}
|
623
715
|
}
|
624
716
|
|
@@ -53,6 +53,7 @@ type TouchEventHandlerType = (
|
|
53
53
|
) => void;
|
54
54
|
|
55
55
|
export type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {
|
56
|
+
gestureId: number;
|
56
57
|
handlerTag: number;
|
57
58
|
onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;
|
58
59
|
onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;
|
@@ -115,17 +116,32 @@ export abstract class Gesture {
|
|
115
116
|
abstract prepare(): void;
|
116
117
|
}
|
117
118
|
|
119
|
+
let nextGestureId = 0;
|
118
120
|
export abstract class BaseGesture<
|
119
121
|
EventPayloadT extends Record<string, unknown>
|
120
122
|
> extends Gesture {
|
123
|
+
private gestureId = -1;
|
121
124
|
public handlerTag = -1;
|
122
125
|
public handlerName = '';
|
123
126
|
public config: BaseGestureConfig = {};
|
124
127
|
public handlers: HandlerCallbacks<EventPayloadT> = {
|
128
|
+
gestureId: -1,
|
125
129
|
handlerTag: -1,
|
126
130
|
isWorklet: [],
|
127
131
|
};
|
128
132
|
|
133
|
+
constructor() {
|
134
|
+
super();
|
135
|
+
|
136
|
+
// Used to check whether the gesture config has been updated when wrapping it
|
137
|
+
// with `useMemo`. Since every config will have a unique id, when the dependencies
|
138
|
+
// don't change, the config won't be recreated and the id will stay the same.
|
139
|
+
// If the id is different, it means that the config has changed and the gesture
|
140
|
+
// needs to be updated.
|
141
|
+
this.gestureId = nextGestureId++;
|
142
|
+
this.handlers.gestureId = this.gestureId;
|
143
|
+
}
|
144
|
+
|
129
145
|
private addDependency(
|
130
146
|
key: 'simultaneousWith' | 'requireToFail',
|
131
147
|
gesture: Exclude<GestureRef, number>
|
@@ -13,14 +13,19 @@ const warningMessage = tagMessage(
|
|
13
13
|
'react-native-reanimated is required in order to use synchronous state management'
|
14
14
|
);
|
15
15
|
|
16
|
+
// check if reanimated module is available, but look for useSharedValue as conditional
|
17
|
+
// require of reanimated can sometimes return content of `utils.ts` file (?)
|
18
|
+
const REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined;
|
19
|
+
const setGestureState = Reanimated?.setGestureState;
|
20
|
+
|
16
21
|
export const GestureStateManager = {
|
17
22
|
create(handlerTag: number): GestureStateManagerType {
|
18
23
|
'worklet';
|
19
24
|
return {
|
20
25
|
begin: () => {
|
21
26
|
'worklet';
|
22
|
-
if (
|
23
|
-
|
27
|
+
if (REANIMATED_AVAILABLE) {
|
28
|
+
setGestureState(handlerTag, State.BEGAN);
|
24
29
|
} else {
|
25
30
|
console.warn(warningMessage);
|
26
31
|
}
|
@@ -28,8 +33,8 @@ export const GestureStateManager = {
|
|
28
33
|
|
29
34
|
activate: () => {
|
30
35
|
'worklet';
|
31
|
-
if (
|
32
|
-
|
36
|
+
if (REANIMATED_AVAILABLE) {
|
37
|
+
setGestureState(handlerTag, State.ACTIVE);
|
33
38
|
} else {
|
34
39
|
console.warn(warningMessage);
|
35
40
|
}
|
@@ -37,8 +42,8 @@ export const GestureStateManager = {
|
|
37
42
|
|
38
43
|
fail: () => {
|
39
44
|
'worklet';
|
40
|
-
if (
|
41
|
-
|
45
|
+
if (REANIMATED_AVAILABLE) {
|
46
|
+
setGestureState(handlerTag, State.FAILED);
|
42
47
|
} else {
|
43
48
|
console.warn(warningMessage);
|
44
49
|
}
|
@@ -46,8 +51,8 @@ export const GestureStateManager = {
|
|
46
51
|
|
47
52
|
end: () => {
|
48
53
|
'worklet';
|
49
|
-
if (
|
50
|
-
|
54
|
+
if (REANIMATED_AVAILABLE) {
|
55
|
+
setGestureState(handlerTag, State.END);
|
51
56
|
} else {
|
52
57
|
console.warn(warningMessage);
|
53
58
|
}
|
@@ -131,6 +131,11 @@ export class PanGesture extends ContinousBaseGesture<
|
|
131
131
|
return this;
|
132
132
|
}
|
133
133
|
|
134
|
+
activateAfterLongPress(duration: number) {
|
135
|
+
this.config.activateAfterLongPress = duration;
|
136
|
+
return this;
|
137
|
+
}
|
138
|
+
|
134
139
|
onChange(
|
135
140
|
callback: (
|
136
141
|
event: GestureUpdateEvent<
|
@@ -30,6 +30,13 @@ let Reanimated: {
|
|
30
30
|
try {
|
31
31
|
Reanimated = require('react-native-reanimated');
|
32
32
|
|
33
|
+
if (!Reanimated.useSharedValue) {
|
34
|
+
// @ts-ignore Make sure the loaded module is actually Reanimated, if it's not
|
35
|
+
// reset the module to undefined so we can fallback to the default implementation
|
36
|
+
Reanimated = undefined;
|
37
|
+
throw new Error('react-native-reanimated is not found');
|
38
|
+
}
|
39
|
+
|
33
40
|
if (!Reanimated.setGestureState) {
|
34
41
|
Reanimated.setGestureState = () => {
|
35
42
|
'worklet';
|
package/src/index.ts
CHANGED
@@ -105,6 +105,7 @@ export {
|
|
105
105
|
TextInput,
|
106
106
|
DrawerLayoutAndroid,
|
107
107
|
FlatList,
|
108
|
+
RefreshControl,
|
108
109
|
} from './components/GestureComponents';
|
109
110
|
export type {
|
110
111
|
//events
|
@@ -156,4 +157,6 @@ export type {
|
|
156
157
|
} from './components/DrawerLayout';
|
157
158
|
export { default as DrawerLayout } from './components/DrawerLayout';
|
158
159
|
|
160
|
+
export { enableExperimentalWebImplementation } from './EnableExperimentalWebImplementation';
|
161
|
+
|
159
162
|
initialize();
|