react-native-gesture-handler 2.4.1 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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();
|