react-native-gesture-handler 2.17.1 → 2.18.0
Sign up to get free protection for your applications and to get access to all the features.
- package/ReanimatedSwipeable/package.json +6 -0
- package/android/build.gradle +0 -103
- package/android/gradle.properties +0 -7
- package/android/paper/src/main/java/com/swmansion/gesturehandler/NativeRNGestureHandlerModuleSpec.java +22 -10
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +16 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +7 -8
- package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureDetector.kt +14 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +3 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +3 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +2 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +8 -7
- package/android/src/main/jni/cpp-adapter.cpp +5 -3
- package/apple/Handlers/RNFlingHandler.m +1 -0
- package/apple/Handlers/RNForceTouchHandler.m +2 -0
- package/apple/Handlers/RNLongPressHandler.m +2 -1
- package/apple/Handlers/RNManualHandler.m +1 -0
- package/apple/Handlers/RNNativeViewHandler.mm +31 -27
- package/apple/Handlers/RNPanHandler.m +1 -0
- package/apple/Handlers/RNPinchHandler.m +1 -0
- package/apple/Handlers/RNRotationHandler.m +1 -0
- package/apple/Handlers/RNTapHandler.m +1 -0
- package/apple/RNGestureHandlerModule.mm +3 -2
- package/apple/RNRootViewGestureRecognizer.m +5 -0
- package/lib/commonjs/Directions.js +2 -2
- package/lib/commonjs/Directions.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +2 -2
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +3 -3
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureButtonsProps.js +6 -0
- package/lib/commonjs/components/GestureButtonsProps.js.map +1 -0
- package/lib/commonjs/components/GestureComponents.js +1 -1
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.android.js +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.js +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/components/Pressable/Pressable.js +334 -0
- package/lib/commonjs/components/Pressable/Pressable.js.map +1 -0
- package/lib/commonjs/components/Pressable/PressableProps.js +6 -0
- package/lib/commonjs/components/Pressable/PressableProps.js.map +1 -0
- package/lib/commonjs/components/Pressable/index.js +24 -0
- package/lib/commonjs/components/Pressable/index.js.map +1 -0
- package/lib/commonjs/components/Pressable/utils.js +136 -0
- package/lib/commonjs/components/Pressable/utils.js.map +1 -0
- package/lib/commonjs/components/ReanimatedSwipeable.js +317 -0
- package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -0
- package/lib/commonjs/components/Swipeable.js +3 -3
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +4 -4
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchableProps.js +6 -0
- package/lib/commonjs/components/touchables/GenericTouchableProps.js.map +1 -0
- package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedbackProps.js +6 -0
- package/lib/commonjs/components/touchables/TouchableNativeFeedbackProps.js.map +1 -0
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +2 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/ghQueueMicrotask.js +3 -4
- package/lib/commonjs/ghQueueMicrotask.js.map +1 -1
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/GestureHandlerEventPayload.js +2 -0
- package/lib/commonjs/handlers/GestureHandlerEventPayload.js.map +1 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +21 -19
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/createNativeWrapper.js +3 -3
- package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +0 -86
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +9 -9
- package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js +2 -2
- package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +21 -31
- package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +5 -5
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
- package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +7 -7
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureComposition.js +5 -5
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/commonjs/handlers/getNextHandlerTag.js +12 -0
- package/lib/commonjs/handlers/getNextHandlerTag.js.map +1 -0
- package/lib/commonjs/handlers/handlersRegistry.js +0 -6
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
- package/lib/commonjs/handlers/utils.js +91 -0
- package/lib/commonjs/handlers/utils.js.map +1 -0
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +1 -1
- package/lib/commonjs/init.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js +2 -2
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/mocks.js +2 -2
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/utils.js +1 -1
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/Gestures.js +1 -1
- package/lib/commonjs/web/Gestures.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +4 -4
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +6 -11
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +2 -2
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +4 -11
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/LeastSquareSolver.js +18 -18
- package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +2 -2
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +4 -4
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/VelocityTracker.js +6 -6
- package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js +2 -0
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/Directions.js +2 -2
- package/lib/module/Directions.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +2 -2
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +2 -2
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js +3 -3
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureButtonsProps.js +2 -0
- package/lib/module/components/GestureButtonsProps.js.map +1 -0
- package/lib/module/components/GestureComponents.js +1 -1
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.js +1 -1
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/components/Pressable/Pressable.js +309 -0
- package/lib/module/components/Pressable/Pressable.js.map +1 -0
- package/lib/module/components/Pressable/PressableProps.js +2 -0
- package/lib/module/components/Pressable/PressableProps.js.map +1 -0
- package/lib/module/components/Pressable/index.js +3 -0
- package/lib/module/components/Pressable/index.js.map +1 -0
- package/lib/module/components/Pressable/utils.js +120 -0
- package/lib/module/components/Pressable/utils.js.map +1 -0
- package/lib/module/components/ReanimatedSwipeable.js +293 -0
- package/lib/module/components/ReanimatedSwipeable.js.map +1 -0
- package/lib/module/components/Swipeable.js +3 -3
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +4 -4
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchableProps.js +2 -0
- package/lib/module/components/touchables/GenericTouchableProps.js.map +1 -0
- package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedbackProps.js +2 -0
- package/lib/module/components/touchables/TouchableNativeFeedbackProps.js.map +1 -0
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +2 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/ghQueueMicrotask.js +3 -4
- package/lib/module/ghQueueMicrotask.js.map +1 -1
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/GestureHandlerEventPayload.js +2 -0
- package/lib/module/handlers/GestureHandlerEventPayload.js.map +1 -0
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js +6 -5
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/createNativeWrapper.js +3 -3
- package/lib/module/handlers/createNativeWrapper.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +0 -72
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +4 -4
- package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/index.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +18 -28
- package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/utils.js +5 -5
- package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
- package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +6 -6
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureComposition.js +5 -5
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/rotationGesture.js.map +1 -1
- package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/module/handlers/getNextHandlerTag.js +5 -0
- package/lib/module/handlers/getNextHandlerTag.js.map +1 -0
- package/lib/module/handlers/handlersRegistry.js +0 -4
- package/lib/module/handlers/handlersRegistry.js.map +1 -1
- package/lib/module/handlers/utils.js +73 -0
- package/lib/module/handlers/utils.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +1 -1
- package/lib/module/init.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js +2 -2
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/mocks.js +2 -2
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/utils.js +1 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/Gestures.js +1 -1
- package/lib/module/web/Gestures.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +4 -4
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +6 -11
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +2 -2
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +4 -11
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/LeastSquareSolver.js +18 -18
- package/lib/module/web/tools/LeastSquareSolver.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +2 -2
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +1 -1
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +4 -4
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/web/tools/VelocityTracker.js +6 -6
- package/lib/module/web/tools/VelocityTracker.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js +1 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/components/GestureButtons.d.ts +2 -85
- package/lib/typescript/components/GestureButtonsProps.d.ts +99 -0
- package/lib/typescript/components/GestureHandlerButton.d.ts +1 -1
- package/lib/typescript/components/Pressable/Pressable.d.ts +3 -0
- package/lib/typescript/components/Pressable/PressableProps.d.ts +116 -0
- package/lib/typescript/components/Pressable/index.d.ts +2 -0
- package/lib/typescript/components/Pressable/utils.d.ts +15 -0
- package/lib/typescript/components/ReanimatedSwipeable.d.ts +125 -0
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -16
- package/lib/typescript/components/touchables/GenericTouchableProps.d.ts +14 -0
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -1
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +2 -9
- package/lib/typescript/components/touchables/TouchableNativeFeedbackProps.d.ts +9 -0
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -1
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +2 -1
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -6
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +1 -10
- package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +159 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -35
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +2 -6
- package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -51
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -23
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -23
- package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -6
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +0 -5
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +10 -9
- package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +1 -0
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +2 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +2 -8
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +2 -1
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +2 -1
- package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -1
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +2 -1
- package/lib/typescript/handlers/getNextHandlerTag.d.ts +1 -0
- package/lib/typescript/handlers/handlersRegistry.d.ts +1 -2
- package/lib/typescript/handlers/utils.d.ts +6 -0
- package/lib/typescript/index.d.ts +12 -9
- package/lib/typescript/jestUtils/jestUtils.d.ts +9 -7
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NodeManager.d.ts +4 -5
- package/package.json +14 -16
- package/src/Directions.ts +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/components/DrawerLayout.tsx +7 -9
- package/src/components/GestureButtons.tsx +13 -123
- package/src/components/GestureButtonsProps.ts +115 -0
- package/src/components/GestureComponents.tsx +1 -1
- package/src/components/GestureHandlerButton.tsx +1 -1
- package/src/components/GestureHandlerRootView.android.tsx +1 -1
- package/src/components/GestureHandlerRootView.tsx +1 -1
- package/src/components/Pressable/Pressable.tsx +398 -0
- package/src/components/Pressable/PressableProps.tsx +149 -0
- package/src/components/Pressable/index.ts +2 -0
- package/src/components/Pressable/utils.ts +180 -0
- package/src/components/ReanimatedSwipeable.tsx +629 -0
- package/src/components/Swipeable.tsx +6 -6
- package/src/components/touchables/GenericTouchable.tsx +9 -36
- package/src/components/touchables/GenericTouchableProps.ts +26 -0
- package/src/components/touchables/TouchableHighlight.tsx +2 -4
- package/src/components/touchables/TouchableNativeFeedback.android.tsx +7 -17
- package/src/components/touchables/TouchableNativeFeedbackProps.tsx +12 -0
- package/src/components/touchables/TouchableOpacity.tsx +3 -5
- package/src/components/touchables/TouchableWithoutFeedback.tsx +2 -1
- package/src/getShadowNodeFromRef.ts +2 -2
- package/src/ghQueueMicrotask.ts +7 -4
- package/src/handlers/FlingGestureHandler.ts +1 -6
- package/src/handlers/ForceTouchGestureHandler.ts +1 -12
- package/src/handlers/GestureHandlerEventPayload.ts +184 -0
- package/src/handlers/LongPressGestureHandler.ts +1 -40
- package/src/handlers/NativeViewGestureHandler.ts +1 -7
- package/src/handlers/PanGestureHandler.ts +1 -58
- package/src/handlers/PinchGestureHandler.ts +1 -27
- package/src/handlers/RotationGestureHandler.ts +1 -27
- package/src/handlers/TapGestureHandler.ts +1 -6
- package/src/handlers/createHandler.tsx +6 -11
- package/src/handlers/createNativeWrapper.tsx +3 -3
- package/src/handlers/gestureHandlerCommon.ts +3 -79
- package/src/handlers/gestureHandlerTypesCompat.ts +16 -30
- package/src/handlers/gestures/GestureDetector/Wrap.tsx +1 -1
- package/src/handlers/gestures/GestureDetector/attachHandlers.ts +4 -7
- package/src/handlers/gestures/GestureDetector/dropHandlers.ts +1 -1
- package/src/handlers/gestures/GestureDetector/index.tsx +1 -1
- package/src/handlers/gestures/GestureDetector/updateHandlers.ts +20 -30
- package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -1
- package/src/handlers/gestures/GestureDetector/utils.ts +5 -5
- package/src/handlers/gestures/flingGesture.ts +2 -4
- package/src/handlers/gestures/forceTouchGesture.ts +2 -4
- package/src/handlers/gestures/gesture.ts +17 -15
- package/src/handlers/gestures/gestureComposition.ts +5 -5
- package/src/handlers/gestures/gestureStateManager.ts +1 -1
- package/src/handlers/gestures/longPressGesture.ts +2 -4
- package/src/handlers/gestures/nativeGesture.ts +2 -4
- package/src/handlers/gestures/panGesture.ts +2 -4
- package/src/handlers/gestures/pinchGesture.ts +1 -1
- package/src/handlers/gestures/rotationGesture.ts +1 -1
- package/src/handlers/gestures/tapGesture.ts +2 -4
- package/src/handlers/getNextHandlerTag.ts +5 -0
- package/src/handlers/handlersRegistry.ts +0 -6
- package/src/handlers/utils.ts +75 -0
- package/src/index.ts +25 -36
- package/src/init.ts +1 -1
- package/src/jestUtils/jestUtils.ts +12 -10
- package/src/mocks.ts +2 -2
- package/src/utils.ts +1 -1
- package/src/web/Gestures.ts +1 -1
- package/src/web/detectors/RotationGestureDetector.ts +1 -1
- package/src/web/detectors/ScaleGestureDetector.ts +4 -4
- package/src/web/handlers/FlingGestureHandler.ts +1 -1
- package/src/web/handlers/GestureHandler.ts +8 -14
- package/src/web/handlers/NativeViewGestureHandler.ts +3 -3
- package/src/web/handlers/PanGestureHandler.ts +1 -1
- package/src/web/handlers/TapGestureHandler.ts +1 -1
- package/src/web/tools/EventManager.ts +2 -2
- package/src/web/tools/GestureHandlerWebDelegate.ts +3 -8
- package/src/web/tools/LeastSquareSolver.ts +18 -18
- package/src/web/tools/PointerEventManager.ts +2 -2
- package/src/web/tools/PointerTracker.ts +2 -1
- package/src/web/tools/TouchEventManager.ts +4 -4
- package/src/web/tools/VelocityTracker.ts +6 -6
- package/src/web_hammer/NodeManager.ts +2 -11
@@ -0,0 +1,398 @@
|
|
1
|
+
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
2
|
+
import { GestureObjects as Gesture } from '../../handlers/gestures/gestureObjects';
|
3
|
+
import { GestureDetector } from '../../handlers/gestures/GestureDetector';
|
4
|
+
import { PressableEvent, PressableProps } from './PressableProps';
|
5
|
+
import {
|
6
|
+
Insets,
|
7
|
+
Platform,
|
8
|
+
StyleProp,
|
9
|
+
View,
|
10
|
+
ViewStyle,
|
11
|
+
processColor,
|
12
|
+
StyleSheet,
|
13
|
+
} from 'react-native';
|
14
|
+
import NativeButton from '../GestureHandlerButton';
|
15
|
+
import {
|
16
|
+
numberAsInset,
|
17
|
+
gestureToPressableEvent,
|
18
|
+
isTouchWithinInset,
|
19
|
+
gestureTouchToPressableEvent,
|
20
|
+
addInsets,
|
21
|
+
splitStyles,
|
22
|
+
} from './utils';
|
23
|
+
import { PressabilityDebugView } from '../../handlers/PressabilityDebugView';
|
24
|
+
import { GestureTouchEvent } from '../../handlers/gestureHandlerCommon';
|
25
|
+
|
26
|
+
const DEFAULT_LONG_PRESS_DURATION = 500;
|
27
|
+
|
28
|
+
export default function Pressable(props: PressableProps) {
|
29
|
+
const [pressedState, setPressedState] = useState(
|
30
|
+
props.testOnly_pressed ?? false
|
31
|
+
);
|
32
|
+
|
33
|
+
const pressableRef = useRef<View>(null);
|
34
|
+
|
35
|
+
// Disabled when onLongPress has been called
|
36
|
+
const isPressCallbackEnabled = useRef<boolean>(true);
|
37
|
+
const hasPassedBoundsChecks = useRef<boolean>(false);
|
38
|
+
const shouldPreventNativeEffects = useRef<boolean>(false);
|
39
|
+
|
40
|
+
const normalizedHitSlop: Insets = useMemo(
|
41
|
+
() =>
|
42
|
+
typeof props.hitSlop === 'number'
|
43
|
+
? numberAsInset(props.hitSlop)
|
44
|
+
: props.hitSlop ?? {},
|
45
|
+
[props.hitSlop]
|
46
|
+
);
|
47
|
+
|
48
|
+
const normalizedPressRetentionOffset: Insets = useMemo(
|
49
|
+
() =>
|
50
|
+
typeof props.pressRetentionOffset === 'number'
|
51
|
+
? numberAsInset(props.pressRetentionOffset)
|
52
|
+
: props.pressRetentionOffset ?? {},
|
53
|
+
[props.pressRetentionOffset]
|
54
|
+
);
|
55
|
+
|
56
|
+
const hoverInTimeout = useRef<number | null>(null);
|
57
|
+
const hoverOutTimeout = useRef<number | null>(null);
|
58
|
+
|
59
|
+
const hoverGesture = useMemo(
|
60
|
+
() =>
|
61
|
+
Gesture.Hover()
|
62
|
+
.manualActivation(true) // Stops Hover from blocking Native gesture activation on web
|
63
|
+
.cancelsTouchesInView(false)
|
64
|
+
.onBegin((event) => {
|
65
|
+
if (hoverOutTimeout.current) {
|
66
|
+
clearTimeout(hoverOutTimeout.current);
|
67
|
+
}
|
68
|
+
if (props.delayHoverIn) {
|
69
|
+
hoverInTimeout.current = setTimeout(
|
70
|
+
() => props.onHoverIn?.(gestureToPressableEvent(event)),
|
71
|
+
props.delayHoverIn
|
72
|
+
);
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
props.onHoverIn?.(gestureToPressableEvent(event));
|
76
|
+
})
|
77
|
+
.onFinalize((event) => {
|
78
|
+
if (hoverInTimeout.current) {
|
79
|
+
clearTimeout(hoverInTimeout.current);
|
80
|
+
}
|
81
|
+
if (props.delayHoverOut) {
|
82
|
+
hoverOutTimeout.current = setTimeout(
|
83
|
+
() => props.onHoverOut?.(gestureToPressableEvent(event)),
|
84
|
+
props.delayHoverOut
|
85
|
+
);
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
props.onHoverOut?.(gestureToPressableEvent(event));
|
89
|
+
}),
|
90
|
+
[props]
|
91
|
+
);
|
92
|
+
|
93
|
+
const pressDelayTimeoutRef = useRef<number | null>(null);
|
94
|
+
const isTouchPropagationAllowed = useRef<boolean>(false);
|
95
|
+
|
96
|
+
// iOS only: due to varying flow of gestures, events sometimes have to be saved for later use
|
97
|
+
const deferredEventPayload = useRef<PressableEvent | null>(null);
|
98
|
+
|
99
|
+
const pressInHandler = useCallback(
|
100
|
+
(event: PressableEvent) => {
|
101
|
+
if (handlingOnTouchesDown.current) {
|
102
|
+
deferredEventPayload.current = event;
|
103
|
+
}
|
104
|
+
|
105
|
+
if (!isTouchPropagationAllowed.current) {
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
|
109
|
+
deferredEventPayload.current = null;
|
110
|
+
|
111
|
+
props.onPressIn?.(event);
|
112
|
+
isPressCallbackEnabled.current = true;
|
113
|
+
pressDelayTimeoutRef.current = null;
|
114
|
+
setPressedState(true);
|
115
|
+
},
|
116
|
+
[props]
|
117
|
+
);
|
118
|
+
|
119
|
+
const pressOutHandler = useCallback(
|
120
|
+
(event: PressableEvent) => {
|
121
|
+
if (
|
122
|
+
!hasPassedBoundsChecks.current ||
|
123
|
+
event.nativeEvent.touches.length >
|
124
|
+
event.nativeEvent.changedTouches.length
|
125
|
+
) {
|
126
|
+
return;
|
127
|
+
}
|
128
|
+
|
129
|
+
if (props.unstable_pressDelay && pressDelayTimeoutRef.current !== null) {
|
130
|
+
// When delay is preemptively finished by lifting touches,
|
131
|
+
// we want to immediately activate it's effects - pressInHandler,
|
132
|
+
// even though we are located at the pressOutHandler
|
133
|
+
clearTimeout(pressDelayTimeoutRef.current);
|
134
|
+
pressInHandler(event);
|
135
|
+
}
|
136
|
+
|
137
|
+
if (deferredEventPayload.current) {
|
138
|
+
props.onPressIn?.(deferredEventPayload.current);
|
139
|
+
deferredEventPayload.current = null;
|
140
|
+
}
|
141
|
+
|
142
|
+
props.onPressOut?.(event);
|
143
|
+
|
144
|
+
if (isPressCallbackEnabled.current) {
|
145
|
+
props.onPress?.(event);
|
146
|
+
}
|
147
|
+
|
148
|
+
if (longPressTimeoutRef.current) {
|
149
|
+
clearTimeout(longPressTimeoutRef.current);
|
150
|
+
longPressTimeoutRef.current = null;
|
151
|
+
}
|
152
|
+
|
153
|
+
isTouchPropagationAllowed.current = false;
|
154
|
+
hasPassedBoundsChecks.current = false;
|
155
|
+
isPressCallbackEnabled.current = true;
|
156
|
+
setPressedState(false);
|
157
|
+
},
|
158
|
+
[pressInHandler, props]
|
159
|
+
);
|
160
|
+
|
161
|
+
const handlingOnTouchesDown = useRef<boolean>(false);
|
162
|
+
const onEndHandlingTouchesDown = useRef<(() => void) | null>(null);
|
163
|
+
const cancelledMidPress = useRef<boolean>(false);
|
164
|
+
|
165
|
+
const activateLongPress = useCallback(
|
166
|
+
(event: GestureTouchEvent) => {
|
167
|
+
if (!isTouchPropagationAllowed.current) {
|
168
|
+
return;
|
169
|
+
}
|
170
|
+
|
171
|
+
if (hasPassedBoundsChecks.current) {
|
172
|
+
props.onLongPress?.(gestureTouchToPressableEvent(event));
|
173
|
+
isPressCallbackEnabled.current = false;
|
174
|
+
}
|
175
|
+
|
176
|
+
if (longPressTimeoutRef.current) {
|
177
|
+
clearTimeout(longPressTimeoutRef.current);
|
178
|
+
longPressTimeoutRef.current = null;
|
179
|
+
}
|
180
|
+
},
|
181
|
+
[props]
|
182
|
+
);
|
183
|
+
|
184
|
+
const longPressTimeoutRef = useRef<number | null>(null);
|
185
|
+
const longPressMinDuration =
|
186
|
+
(props.delayLongPress ?? DEFAULT_LONG_PRESS_DURATION) +
|
187
|
+
(props.unstable_pressDelay ?? 0);
|
188
|
+
|
189
|
+
const pressAndTouchGesture = useMemo(
|
190
|
+
() =>
|
191
|
+
Gesture.LongPress()
|
192
|
+
.minDuration(Number.MAX_SAFE_INTEGER) // Stops long press from blocking native gesture
|
193
|
+
.maxDistance(Number.MAX_SAFE_INTEGER) // Stops long press from cancelling after set distance
|
194
|
+
.cancelsTouchesInView(false)
|
195
|
+
.onTouchesDown((event) => {
|
196
|
+
handlingOnTouchesDown.current = true;
|
197
|
+
pressableRef.current?.measure((_x, _y, width, height) => {
|
198
|
+
if (
|
199
|
+
!isTouchWithinInset(
|
200
|
+
{
|
201
|
+
width,
|
202
|
+
height,
|
203
|
+
},
|
204
|
+
normalizedHitSlop,
|
205
|
+
event.changedTouches.at(-1)
|
206
|
+
) ||
|
207
|
+
hasPassedBoundsChecks.current ||
|
208
|
+
cancelledMidPress.current
|
209
|
+
) {
|
210
|
+
cancelledMidPress.current = false;
|
211
|
+
onEndHandlingTouchesDown.current = null;
|
212
|
+
handlingOnTouchesDown.current = false;
|
213
|
+
return;
|
214
|
+
}
|
215
|
+
|
216
|
+
hasPassedBoundsChecks.current = true;
|
217
|
+
|
218
|
+
// In case of multiple touches, the first one starts long press gesture
|
219
|
+
if (longPressTimeoutRef.current === null) {
|
220
|
+
// Start long press gesture timer
|
221
|
+
longPressTimeoutRef.current = setTimeout(
|
222
|
+
() => activateLongPress(event),
|
223
|
+
longPressMinDuration
|
224
|
+
);
|
225
|
+
}
|
226
|
+
|
227
|
+
if (props.unstable_pressDelay) {
|
228
|
+
pressDelayTimeoutRef.current = setTimeout(() => {
|
229
|
+
pressInHandler(gestureTouchToPressableEvent(event));
|
230
|
+
}, props.unstable_pressDelay);
|
231
|
+
} else {
|
232
|
+
pressInHandler(gestureTouchToPressableEvent(event));
|
233
|
+
}
|
234
|
+
|
235
|
+
onEndHandlingTouchesDown.current?.();
|
236
|
+
onEndHandlingTouchesDown.current = null;
|
237
|
+
handlingOnTouchesDown.current = false;
|
238
|
+
});
|
239
|
+
})
|
240
|
+
.onTouchesUp((event) => {
|
241
|
+
if (handlingOnTouchesDown.current) {
|
242
|
+
onEndHandlingTouchesDown.current = () =>
|
243
|
+
pressOutHandler(gestureTouchToPressableEvent(event));
|
244
|
+
return;
|
245
|
+
}
|
246
|
+
// On iOS, short taps will make LongPress gesture call onTouchesUp before Native gesture calls onStart
|
247
|
+
// This variable ensures that onStart isn't detected as the first gesture since Pressable is pressed.
|
248
|
+
if (deferredEventPayload.current !== null) {
|
249
|
+
shouldPreventNativeEffects.current = true;
|
250
|
+
}
|
251
|
+
pressOutHandler(gestureTouchToPressableEvent(event));
|
252
|
+
})
|
253
|
+
.onTouchesCancelled((event) => {
|
254
|
+
isPressCallbackEnabled.current = false;
|
255
|
+
|
256
|
+
if (handlingOnTouchesDown.current) {
|
257
|
+
cancelledMidPress.current = true;
|
258
|
+
onEndHandlingTouchesDown.current = () =>
|
259
|
+
pressOutHandler(gestureTouchToPressableEvent(event));
|
260
|
+
return;
|
261
|
+
}
|
262
|
+
|
263
|
+
if (
|
264
|
+
!hasPassedBoundsChecks.current ||
|
265
|
+
event.allTouches.length > event.changedTouches.length
|
266
|
+
) {
|
267
|
+
return;
|
268
|
+
}
|
269
|
+
|
270
|
+
pressOutHandler(gestureTouchToPressableEvent(event));
|
271
|
+
}),
|
272
|
+
[
|
273
|
+
activateLongPress,
|
274
|
+
longPressMinDuration,
|
275
|
+
normalizedHitSlop,
|
276
|
+
pressInHandler,
|
277
|
+
pressOutHandler,
|
278
|
+
props.unstable_pressDelay,
|
279
|
+
]
|
280
|
+
);
|
281
|
+
|
282
|
+
// RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events
|
283
|
+
const buttonGesture = useMemo(
|
284
|
+
() =>
|
285
|
+
Gesture.Native()
|
286
|
+
.onBegin(() => {
|
287
|
+
// Android sets BEGAN state on press down
|
288
|
+
if (Platform.OS === 'android') {
|
289
|
+
isTouchPropagationAllowed.current = true;
|
290
|
+
}
|
291
|
+
})
|
292
|
+
.onStart(() => {
|
293
|
+
if (Platform.OS === 'web') {
|
294
|
+
isTouchPropagationAllowed.current = true;
|
295
|
+
}
|
296
|
+
|
297
|
+
// iOS sets ACTIVE state on press down
|
298
|
+
if (Platform.OS !== 'ios') {
|
299
|
+
return;
|
300
|
+
}
|
301
|
+
|
302
|
+
if (deferredEventPayload.current) {
|
303
|
+
isTouchPropagationAllowed.current = true;
|
304
|
+
|
305
|
+
if (hasPassedBoundsChecks.current) {
|
306
|
+
pressInHandler(deferredEventPayload.current);
|
307
|
+
deferredEventPayload.current = null;
|
308
|
+
} else {
|
309
|
+
pressOutHandler(deferredEventPayload.current);
|
310
|
+
isTouchPropagationAllowed.current = false;
|
311
|
+
}
|
312
|
+
|
313
|
+
return;
|
314
|
+
}
|
315
|
+
|
316
|
+
if (hasPassedBoundsChecks.current) {
|
317
|
+
isTouchPropagationAllowed.current = true;
|
318
|
+
return;
|
319
|
+
}
|
320
|
+
|
321
|
+
if (shouldPreventNativeEffects.current) {
|
322
|
+
shouldPreventNativeEffects.current = false;
|
323
|
+
return;
|
324
|
+
}
|
325
|
+
|
326
|
+
isTouchPropagationAllowed.current = true;
|
327
|
+
}),
|
328
|
+
[pressInHandler, pressOutHandler]
|
329
|
+
);
|
330
|
+
|
331
|
+
const appliedHitSlop = addInsets(
|
332
|
+
normalizedHitSlop,
|
333
|
+
normalizedPressRetentionOffset
|
334
|
+
);
|
335
|
+
|
336
|
+
const isPressableEnabled = props.disabled !== true;
|
337
|
+
|
338
|
+
const gestures = [pressAndTouchGesture, hoverGesture, buttonGesture];
|
339
|
+
|
340
|
+
for (const gesture of gestures) {
|
341
|
+
gesture.enabled(isPressableEnabled);
|
342
|
+
gesture.runOnJS(true);
|
343
|
+
gesture.hitSlop(appliedHitSlop);
|
344
|
+
gesture.shouldCancelWhenOutside(false);
|
345
|
+
|
346
|
+
if (Platform.OS !== 'web') {
|
347
|
+
gesture.shouldCancelWhenOutside(true);
|
348
|
+
}
|
349
|
+
}
|
350
|
+
|
351
|
+
// Uses different hitSlop, to activate on hitSlop area instead of pressRetentionOffset area
|
352
|
+
buttonGesture.hitSlop(normalizedHitSlop);
|
353
|
+
|
354
|
+
const gesture = Gesture.Simultaneous(...gestures);
|
355
|
+
|
356
|
+
const defaultRippleColor = props.android_ripple ? undefined : 'transparent';
|
357
|
+
|
358
|
+
// `cursor: 'pointer'` on `RNButton` crashes iOS
|
359
|
+
const pointerStyle: StyleProp<ViewStyle> =
|
360
|
+
Platform.OS === 'web' ? { cursor: 'pointer' } : {};
|
361
|
+
|
362
|
+
const styleProp =
|
363
|
+
typeof props.style === 'function'
|
364
|
+
? props.style({ pressed: pressedState })
|
365
|
+
: props.style;
|
366
|
+
|
367
|
+
const childrenProp =
|
368
|
+
typeof props.children === 'function'
|
369
|
+
? props.children({ pressed: pressedState })
|
370
|
+
: props.children;
|
371
|
+
|
372
|
+
const flattenedStyles = StyleSheet.flatten(styleProp ?? {});
|
373
|
+
|
374
|
+
const [innerStyles, outerStyles] = splitStyles(flattenedStyles);
|
375
|
+
|
376
|
+
return (
|
377
|
+
<View style={outerStyles}>
|
378
|
+
<GestureDetector gesture={gesture}>
|
379
|
+
<NativeButton
|
380
|
+
ref={pressableRef}
|
381
|
+
testID={props.testID}
|
382
|
+
hitSlop={appliedHitSlop}
|
383
|
+
enabled={isPressableEnabled}
|
384
|
+
touchSoundDisabled={props.android_disableSound ?? undefined}
|
385
|
+
rippleColor={processColor(
|
386
|
+
props.android_ripple?.color ?? defaultRippleColor
|
387
|
+
)}
|
388
|
+
rippleRadius={props.android_ripple?.radius ?? undefined}
|
389
|
+
style={[StyleSheet.absoluteFill, pointerStyle, innerStyles]}>
|
390
|
+
{childrenProp}
|
391
|
+
{__DEV__ ? (
|
392
|
+
<PressabilityDebugView color="red" hitSlop={normalizedHitSlop} />
|
393
|
+
) : null}
|
394
|
+
</NativeButton>
|
395
|
+
</GestureDetector>
|
396
|
+
</View>
|
397
|
+
);
|
398
|
+
}
|
@@ -0,0 +1,149 @@
|
|
1
|
+
import {
|
2
|
+
ColorValue,
|
3
|
+
AccessibilityProps,
|
4
|
+
ViewProps,
|
5
|
+
Insets,
|
6
|
+
StyleProp,
|
7
|
+
ViewStyle,
|
8
|
+
} from 'react-native';
|
9
|
+
|
10
|
+
export interface PressableStateCallbackType {
|
11
|
+
readonly pressed: boolean;
|
12
|
+
}
|
13
|
+
|
14
|
+
export interface PressableAndroidRippleConfig {
|
15
|
+
color?: null | ColorValue | undefined;
|
16
|
+
borderless?: null | boolean | undefined;
|
17
|
+
radius?: null | number | undefined;
|
18
|
+
foreground?: null | boolean | undefined;
|
19
|
+
}
|
20
|
+
|
21
|
+
export type InnerPressableEvent = {
|
22
|
+
changedTouches: InnerPressableEvent[];
|
23
|
+
identifier: number;
|
24
|
+
locationX: number;
|
25
|
+
locationY: number;
|
26
|
+
pageX: number;
|
27
|
+
pageY: number;
|
28
|
+
target: number;
|
29
|
+
timestamp: number;
|
30
|
+
touches: InnerPressableEvent[];
|
31
|
+
force?: number;
|
32
|
+
};
|
33
|
+
|
34
|
+
export type PressableEvent = { nativeEvent: InnerPressableEvent };
|
35
|
+
|
36
|
+
export interface PressableProps
|
37
|
+
extends AccessibilityProps,
|
38
|
+
Omit<ViewProps, 'children' | 'style' | 'hitSlop'> {
|
39
|
+
/**
|
40
|
+
* Called when the hover is activated to provide visual feedback.
|
41
|
+
*/
|
42
|
+
onHoverIn?: null | ((event: PressableEvent) => void);
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Called when the hover is deactivated to undo visual feedback.
|
46
|
+
*/
|
47
|
+
onHoverOut?: null | ((event: PressableEvent) => void);
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Called when a single tap gesture is detected.
|
51
|
+
*/
|
52
|
+
onPress?: null | ((event: PressableEvent) => void);
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Called when a touch is engaged before `onPress`.
|
56
|
+
*/
|
57
|
+
onPressIn?: null | ((event: PressableEvent) => void);
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Called when a touch is released before `onPress`.
|
61
|
+
*/
|
62
|
+
onPressOut?: null | ((event: PressableEvent) => void);
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Called when a long-tap gesture is detected.
|
66
|
+
*/
|
67
|
+
onLongPress?: null | ((event: PressableEvent) => void);
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Either children or a render prop that receives a boolean reflecting whether
|
71
|
+
* the component is currently pressed.
|
72
|
+
*/
|
73
|
+
children?:
|
74
|
+
| React.ReactNode
|
75
|
+
| ((state: PressableStateCallbackType) => React.ReactNode);
|
76
|
+
|
77
|
+
/**
|
78
|
+
* Whether a press gesture can be interrupted by a parent gesture such as a
|
79
|
+
* scroll event. Defaults to true.
|
80
|
+
*/
|
81
|
+
cancelable?: null | boolean;
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Duration to wait after hover in before calling `onHoverIn`.
|
85
|
+
* @platform web macos
|
86
|
+
*
|
87
|
+
* NOTE: not present in RN docs
|
88
|
+
*/
|
89
|
+
delayHoverIn?: number | null;
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Duration to wait after hover out before calling `onHoverOut`.
|
93
|
+
* @platform web macos
|
94
|
+
*
|
95
|
+
* NOTE: not present in RN docs
|
96
|
+
*/
|
97
|
+
delayHoverOut?: number | null;
|
98
|
+
|
99
|
+
/**
|
100
|
+
* Duration (in milliseconds) from `onPressIn` before `onLongPress` is called.
|
101
|
+
*/
|
102
|
+
delayLongPress?: null | number;
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Whether the press behavior is disabled.
|
106
|
+
*/
|
107
|
+
disabled?: null | boolean;
|
108
|
+
|
109
|
+
/**
|
110
|
+
* Additional distance outside of this view in which a press is detected.
|
111
|
+
*/
|
112
|
+
hitSlop?: null | Insets | number;
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Additional distance outside of this view in which a touch is considered a
|
116
|
+
* press before `onPressOut` is triggered.
|
117
|
+
*/
|
118
|
+
pressRetentionOffset?: null | Insets | number;
|
119
|
+
|
120
|
+
/**
|
121
|
+
* If true, doesn't play system sound on touch.
|
122
|
+
* @platform android
|
123
|
+
*/
|
124
|
+
android_disableSound?: null | boolean;
|
125
|
+
|
126
|
+
/**
|
127
|
+
* Enables the Android ripple effect and configures its color.
|
128
|
+
* @platform android
|
129
|
+
*/
|
130
|
+
android_ripple?: null | PressableAndroidRippleConfig;
|
131
|
+
|
132
|
+
/**
|
133
|
+
* Used only for documentation or testing (e.g. snapshot testing).
|
134
|
+
*/
|
135
|
+
testOnly_pressed?: null | boolean;
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Either view styles or a function that receives a boolean reflecting whether
|
139
|
+
* the component is currently pressed and returns view styles.
|
140
|
+
*/
|
141
|
+
style?:
|
142
|
+
| StyleProp<ViewStyle>
|
143
|
+
| ((state: PressableStateCallbackType) => StyleProp<ViewStyle>);
|
144
|
+
|
145
|
+
/**
|
146
|
+
* Duration (in milliseconds) to wait after press down before calling onPressIn.
|
147
|
+
*/
|
148
|
+
unstable_pressDelay?: number;
|
149
|
+
}
|