react-native-gesture-handler 2.27.1 → 2.28.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/RNGestureHandler.podspec +3 -2
- package/ReanimatedSwipeable/package.json +4 -4
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +14 -8
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +10 -5
- package/android/src/main/jni/CMakeLists.txt +5 -0
- package/android/src/main/jni/cpp-adapter.cpp +6 -0
- package/apple/RNGestureHandler.h +4 -0
- package/apple/RNGestureHandler.mm +41 -6
- package/apple/RNGestureHandlerModule.mm +5 -0
- package/jestSetup.js +22 -3
- package/lib/commonjs/components/Pressable/Pressable.js +12 -21
- package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
- package/lib/commonjs/components/Pressable/StateMachine.js +8 -2
- package/lib/commonjs/components/Pressable/StateMachine.js.map +1 -1
- package/lib/commonjs/components/Pressable/stateDefinitions.js +22 -23
- package/lib/commonjs/components/Pressable/stateDefinitions.js.map +1 -1
- package/lib/commonjs/components/{ReanimatedSwipeable.js → ReanimatedSwipeable/ReanimatedSwipeable.js} +30 -39
- package/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js.map +1 -0
- package/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeableProps.js +12 -0
- package/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeableProps.js.map +1 -0
- package/lib/commonjs/components/ReanimatedSwipeable/index.js +21 -0
- package/lib/commonjs/components/ReanimatedSwipeable/index.js.map +1 -0
- package/lib/commonjs/components/gestureHandlerRootHOC.js +4 -1
- package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +1 -1
- package/lib/commonjs/handlers/createHandler.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/mocks/Pressable.js +13 -0
- package/lib/commonjs/mocks/Pressable.js.map +1 -0
- package/lib/commonjs/{mocks.js → mocks/mocks.js} +8 -11
- package/lib/commonjs/mocks/mocks.js.map +1 -0
- package/lib/commonjs/web/handlers/GestureHandler.js +5 -2
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +0 -5
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/KeyboardEventManager.js +34 -8
- package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
- package/lib/module/components/Pressable/Pressable.js +14 -23
- package/lib/module/components/Pressable/Pressable.js.map +1 -1
- package/lib/module/components/Pressable/StateMachine.js +8 -2
- package/lib/module/components/Pressable/StateMachine.js.map +1 -1
- package/lib/module/components/Pressable/stateDefinitions.js +21 -22
- package/lib/module/components/Pressable/stateDefinitions.js.map +1 -1
- package/lib/module/components/{ReanimatedSwipeable.js → ReanimatedSwipeable/ReanimatedSwipeable.js} +24 -33
- package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js.map +1 -0
- package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeableProps.js +8 -0
- package/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeableProps.js.map +1 -0
- package/lib/module/components/ReanimatedSwipeable/index.js +5 -0
- package/lib/module/components/ReanimatedSwipeable/index.js.map +1 -0
- package/lib/module/components/gestureHandlerRootHOC.js +5 -0
- package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/handlers/createHandler.js +1 -1
- package/lib/module/handlers/createHandler.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/mocks/Pressable.js +4 -0
- package/lib/module/mocks/Pressable.js.map +1 -0
- package/lib/module/{mocks.js → mocks/mocks.js} +7 -11
- package/lib/module/mocks/mocks.js.map +1 -0
- package/lib/module/web/handlers/GestureHandler.js +5 -2
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +0 -5
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/KeyboardEventManager.js +34 -8
- package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +1 -0
- package/lib/typescript/Directions.d.ts +1 -0
- package/lib/typescript/EnableNewWebImplementation.d.ts +1 -0
- package/lib/typescript/GestureHandlerRootViewContext.d.ts +1 -0
- package/lib/typescript/PlatformConstants.d.ts +1 -0
- package/lib/typescript/PlatformConstants.web.d.ts +1 -0
- package/lib/typescript/PointerType.d.ts +1 -0
- package/lib/typescript/RNGestureHandlerModule.d.ts +1 -0
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -0
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +1 -0
- package/lib/typescript/RNRenderer.d.ts +1 -0
- package/lib/typescript/RNRenderer.web.d.ts +1 -0
- package/lib/typescript/State.d.ts +1 -0
- package/lib/typescript/TouchEventType.d.ts +1 -0
- package/lib/typescript/components/DrawerLayout.d.ts +1 -0
- package/lib/typescript/components/GestureButtons.d.ts +1 -0
- package/lib/typescript/components/GestureButtonsProps.d.ts +10 -1
- package/lib/typescript/components/GestureButtonsProps.d.ts.map +1 -1
- package/lib/typescript/components/GestureComponents.d.ts +1 -0
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
- package/lib/typescript/components/GestureHandlerButton.d.ts +1 -0
- package/lib/typescript/components/GestureHandlerButton.web.d.ts +1 -0
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -0
- package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -0
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -0
- package/lib/typescript/components/Pressable/Pressable.d.ts +1 -0
- package/lib/typescript/components/Pressable/Pressable.d.ts.map +1 -1
- package/lib/typescript/components/Pressable/PressableProps.d.ts +3 -4
- package/lib/typescript/components/Pressable/PressableProps.d.ts.map +1 -1
- package/lib/typescript/components/Pressable/StateMachine.d.ts +4 -2
- package/lib/typescript/components/Pressable/StateMachine.d.ts.map +1 -1
- package/lib/typescript/components/Pressable/index.d.ts +1 -0
- package/lib/typescript/components/Pressable/stateDefinitions.d.ts +3 -2
- package/lib/typescript/components/Pressable/stateDefinitions.d.ts.map +1 -1
- package/lib/typescript/components/Pressable/utils.d.ts +1 -0
- package/lib/typescript/components/ReanimatedDrawerLayout.d.ts +1 -0
- package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeable.d.ts +6 -0
- package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeable.d.ts.map +1 -0
- package/lib/typescript/components/{ReanimatedSwipeable.d.ts → ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts} +10 -7
- package/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts.map +1 -0
- package/lib/typescript/components/ReanimatedSwipeable/index.d.ts +3 -0
- package/lib/typescript/components/ReanimatedSwipeable/index.d.ts.map +1 -0
- package/lib/typescript/components/Swipeable.d.ts +1 -0
- package/lib/typescript/components/Text.d.ts +1 -0
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts +5 -0
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts.map +1 -1
- package/lib/typescript/components/touchables/ExtraButtonProps.d.ts +1 -0
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +1 -0
- package/lib/typescript/components/touchables/GenericTouchableProps.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableNativeFeedback.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableNativeFeedbackProps.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -0
- package/lib/typescript/components/touchables/index.d.ts +1 -0
- package/lib/typescript/components/utils.d.ts +1 -0
- package/lib/typescript/findNodeHandle.d.ts +1 -0
- package/lib/typescript/findNodeHandle.web.d.ts +1 -0
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
- package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
- package/lib/typescript/ghQueueMicrotask.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +1 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/createHandler.d.ts +1 -0
- package/lib/typescript/handlers/createNativeWrapper.d.ts +1 -0
- package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -0
- package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/Wrap.web.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/attachHandlers.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/dropHandlers.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/index.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/needsToReattach.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/updateHandlers.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useAnimatedGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useDetectorUpdater.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useMountReactions.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useViewRefHandler.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +1 -0
- package/lib/typescript/handlers/gestures/eventReceiver.d.ts +1 -0
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/gesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/gestureComposition.d.ts +1 -0
- package/lib/typescript/handlers/gestures/gestureObjects.d.ts +1 -0
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +1 -0
- package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +1 -0
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +1 -0
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +1 -0
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -0
- package/lib/typescript/handlers/getNextHandlerTag.d.ts +1 -0
- package/lib/typescript/handlers/handlersRegistry.d.ts +1 -0
- package/lib/typescript/handlers/utils.d.ts +1 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/init.d.ts +1 -0
- package/lib/typescript/jestUtils/index.d.ts +1 -0
- package/lib/typescript/jestUtils/jestUtils.d.ts +1 -0
- package/lib/typescript/mocks/Pressable.d.ts +2 -0
- package/lib/typescript/mocks/Pressable.d.ts.map +1 -0
- package/lib/typescript/{mocks.d.ts → mocks/mocks.d.ts} +5 -4
- package/lib/typescript/mocks/mocks.d.ts.map +1 -0
- package/lib/typescript/mountRegistry.d.ts +1 -0
- package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +1 -0
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
- package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +1 -0
- package/lib/typescript/typeUtils.d.ts +1 -0
- package/lib/typescript/utils.d.ts +1 -0
- package/lib/typescript/web/Gestures.d.ts +1 -0
- package/lib/typescript/web/constants.d.ts +1 -0
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +1 -0
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +1 -0
- 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/GestureHandler.d.ts.map +1 -1
- package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/IGestureHandler.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/interfaces.d.ts +1 -0
- package/lib/typescript/web/tools/CircularBuffer.d.ts +1 -0
- package/lib/typescript/web/tools/EventManager.d.ts +1 -0
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +1 -0
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +1 -0
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +1 -0
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts.map +1 -1
- package/lib/typescript/web/tools/InteractionManager.d.ts +1 -0
- package/lib/typescript/web/tools/KeyboardEventManager.d.ts +7 -3
- package/lib/typescript/web/tools/KeyboardEventManager.d.ts.map +1 -1
- package/lib/typescript/web/tools/LeastSquareSolver.d.ts +1 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +1 -0
- package/lib/typescript/web/tools/PointerEventManager.d.ts +1 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +1 -0
- package/lib/typescript/web/tools/Vector.d.ts +1 -0
- package/lib/typescript/web/tools/VelocityTracker.d.ts +1 -0
- package/lib/typescript/web/tools/WheelEventManager.d.ts +1 -0
- package/lib/typescript/web/utils.d.ts +1 -0
- package/lib/typescript/web_hammer/DiscreteGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/DraggingGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/Errors.d.ts +1 -0
- package/lib/typescript/web_hammer/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/GestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/IndiscreteGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NodeManager.d.ts +1 -0
- package/lib/typescript/web_hammer/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/PinchGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/PressGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/RotationGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/constants.d.ts +1 -0
- package/lib/typescript/web_hammer/utils.d.ts +1 -0
- package/package.json +4 -3
- package/scripts/gesture_handler_utils.rb +25 -0
- package/src/components/GestureButtonsProps.ts +10 -0
- package/src/components/Pressable/Pressable.tsx +20 -31
- package/src/components/Pressable/PressableProps.tsx +2 -4
- package/src/components/Pressable/StateMachine.tsx +12 -4
- package/src/components/Pressable/stateDefinitions.ts +23 -23
- package/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx +603 -0
- package/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts +199 -0
- package/src/components/ReanimatedSwipeable/index.ts +6 -0
- package/src/components/gestureHandlerRootHOC.tsx +4 -0
- package/src/handlers/createHandler.tsx +1 -1
- package/src/handlers/gestures/GestureDetector/index.tsx +1 -1
- package/src/mocks/Pressable.tsx +1 -0
- package/src/{mocks.tsx → mocks/mocks.tsx} +7 -11
- package/src/web/handlers/GestureHandler.ts +8 -3
- package/src/web/tools/GestureHandlerWebDelegate.ts +0 -5
- package/src/web/tools/KeyboardEventManager.ts +50 -8
- package/lib/commonjs/components/ReanimatedSwipeable.js.map +0 -1
- package/lib/commonjs/mocks.js.map +0 -1
- package/lib/module/components/ReanimatedSwipeable.js.map +0 -1
- package/lib/module/mocks.js.map +0 -1
- package/lib/typescript/ActionType.js +0 -6
- package/lib/typescript/Directions.js +0 -18
- package/lib/typescript/EnableNewWebImplementation.js +0 -30
- package/lib/typescript/GestureHandlerRootViewContext.js +0 -2
- package/lib/typescript/PlatformConstants.js +0 -3
- package/lib/typescript/PlatformConstants.web.js +0 -5
- package/lib/typescript/PointerType.js +0 -8
- package/lib/typescript/RNGestureHandlerModule.js +0 -4
- package/lib/typescript/RNGestureHandlerModule.web.js +0 -92
- package/lib/typescript/RNGestureHandlerModule.windows.js +0 -47
- package/lib/typescript/RNRenderer.js +0 -3
- package/lib/typescript/RNRenderer.web.js +0 -3
- package/lib/typescript/State.js +0 -9
- package/lib/typescript/TouchEventType.js +0 -7
- package/lib/typescript/components/DrawerLayout.js +0 -417
- package/lib/typescript/components/GestureButtons.js +0 -165
- package/lib/typescript/components/GestureButtonsProps.js +0 -1
- package/lib/typescript/components/GestureComponents.js +0 -67
- package/lib/typescript/components/GestureComponents.web.js +0 -21
- package/lib/typescript/components/GestureHandlerButton.js +0 -2
- package/lib/typescript/components/GestureHandlerButton.web.js +0 -3
- package/lib/typescript/components/GestureHandlerRootView.android.js +0 -17
- package/lib/typescript/components/GestureHandlerRootView.js +0 -16
- package/lib/typescript/components/GestureHandlerRootView.web.js +0 -11
- package/lib/typescript/components/Pressable/Pressable.js +0 -231
- package/lib/typescript/components/Pressable/PressableProps.js +0 -1
- package/lib/typescript/components/Pressable/StateMachine.js +0 -34
- package/lib/typescript/components/Pressable/index.js +0 -1
- package/lib/typescript/components/Pressable/stateDefinitions.js +0 -104
- package/lib/typescript/components/Pressable/utils.js +0 -80
- package/lib/typescript/components/ReanimatedDrawerLayout.js +0 -364
- package/lib/typescript/components/ReanimatedSwipeable.d.ts.map +0 -1
- package/lib/typescript/components/ReanimatedSwipeable.js +0 -400
- package/lib/typescript/components/Swipeable.js +0 -287
- package/lib/typescript/components/Text.js +0 -38
- package/lib/typescript/components/gestureHandlerRootHOC.js +0 -18
- package/lib/typescript/components/touchables/ExtraButtonProps.js +0 -1
- package/lib/typescript/components/touchables/GenericTouchable.js +0 -221
- package/lib/typescript/components/touchables/GenericTouchableProps.js +0 -1
- package/lib/typescript/components/touchables/TouchableHighlight.js +0 -75
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.js +0 -65
- package/lib/typescript/components/touchables/TouchableNativeFeedback.js +0 -6
- package/lib/typescript/components/touchables/TouchableNativeFeedbackProps.js +0 -1
- package/lib/typescript/components/touchables/TouchableOpacity.js +0 -51
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.js +0 -10
- package/lib/typescript/components/touchables/index.js +0 -4
- package/lib/typescript/components/utils.js +0 -11
- package/lib/typescript/findNodeHandle.js +0 -2
- package/lib/typescript/findNodeHandle.web.js +0 -31
- package/lib/typescript/getShadowNodeFromRef.js +0 -45
- package/lib/typescript/getShadowNodeFromRef.web.js +0 -7
- package/lib/typescript/ghQueueMicrotask.js +0 -7
- package/lib/typescript/handlers/FlingGestureHandler.js +0 -19
- package/lib/typescript/handlers/ForceTouchGestureHandler.js +0 -37
- package/lib/typescript/handlers/GestureHandlerEventPayload.js +0 -1
- package/lib/typescript/handlers/LongPressGestureHandler.js +0 -22
- package/lib/typescript/handlers/NativeViewGestureHandler.js +0 -20
- package/lib/typescript/handlers/PanGestureHandler.js +0 -128
- package/lib/typescript/handlers/PinchGestureHandler.js +0 -12
- package/lib/typescript/handlers/PressabilityDebugView.js +0 -2
- package/lib/typescript/handlers/PressabilityDebugView.web.js +0 -4
- package/lib/typescript/handlers/RotationGestureHandler.js +0 -12
- package/lib/typescript/handlers/TapGestureHandler.js +0 -26
- package/lib/typescript/handlers/createHandler.js +0 -375
- package/lib/typescript/handlers/createNativeWrapper.js +0 -67
- package/lib/typescript/handlers/customDirectEventTypes.js +0 -2
- package/lib/typescript/handlers/customDirectEventTypes.web.js +0 -4
- package/lib/typescript/handlers/gestureHandlerCommon.js +0 -42
- package/lib/typescript/handlers/gestureHandlerTypesCompat.js +0 -1
- package/lib/typescript/handlers/gestures/GestureDetector/Wrap.js +0 -22
- package/lib/typescript/handlers/gestures/GestureDetector/Wrap.web.js +0 -24
- package/lib/typescript/handlers/gestures/GestureDetector/attachHandlers.js +0 -55
- package/lib/typescript/handlers/gestures/GestureDetector/dropHandlers.js +0 -12
- package/lib/typescript/handlers/gestures/GestureDetector/index.js +0 -114
- package/lib/typescript/handlers/gestures/GestureDetector/needsToReattach.js +0 -18
- package/lib/typescript/handlers/gestures/GestureDetector/types.js +0 -1
- package/lib/typescript/handlers/gestures/GestureDetector/updateHandlers.js +0 -54
- package/lib/typescript/handlers/gestures/GestureDetector/useAnimatedGesture.js +0 -137
- package/lib/typescript/handlers/gestures/GestureDetector/useDetectorUpdater.js +0 -48
- package/lib/typescript/handlers/gestures/GestureDetector/useMountReactions.js +0 -35
- package/lib/typescript/handlers/gestures/GestureDetector/useViewRefHandler.js +0 -32
- package/lib/typescript/handlers/gestures/GestureDetector/utils.js +0 -140
- package/lib/typescript/handlers/gestures/eventReceiver.js +0 -105
- package/lib/typescript/handlers/gestures/flingGesture.js +0 -27
- package/lib/typescript/handlers/gestures/forceTouchGesture.js +0 -57
- package/lib/typescript/handlers/gestures/gesture.js +0 -303
- package/lib/typescript/handlers/gestures/gestureComposition.js +0 -78
- package/lib/typescript/handlers/gestures/gestureObjects.js +0 -125
- package/lib/typescript/handlers/gestures/gestureStateManager.js +0 -60
- package/lib/typescript/handlers/gestures/gestureStateManager.web.js +0 -19
- package/lib/typescript/handlers/gestures/hoverGesture.js +0 -45
- package/lib/typescript/handlers/gestures/longPressGesture.js +0 -35
- package/lib/typescript/handlers/gestures/manualGesture.js +0 -16
- package/lib/typescript/handlers/gestures/nativeGesture.js +0 -24
- package/lib/typescript/handlers/gestures/panGesture.js +0 -181
- package/lib/typescript/handlers/gestures/pinchGesture.js +0 -27
- package/lib/typescript/handlers/gestures/reanimatedWrapper.js +0 -23
- package/lib/typescript/handlers/gestures/rotationGesture.js +0 -27
- package/lib/typescript/handlers/gestures/tapGesture.js +0 -72
- package/lib/typescript/handlers/getNextHandlerTag.js +0 -4
- package/lib/typescript/handlers/handlersRegistry.js +0 -36
- package/lib/typescript/handlers/utils.js +0 -58
- package/lib/typescript/index.js +0 -28
- package/lib/typescript/init.js +0 -15
- package/lib/typescript/jestUtils/index.js +0 -1
- package/lib/typescript/jestUtils/jestUtils.js +0 -290
- package/lib/typescript/mocks.d.ts.map +0 -1
- package/lib/typescript/mocks.js +0 -59
- package/lib/typescript/mountRegistry.js +0 -29
- package/lib/typescript/specs/NativeRNGestureHandlerModule.js +0 -2
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.js +0 -2
- package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.js +0 -2
- package/lib/typescript/typeUtils.js +0 -1
- package/lib/typescript/utils.js +0 -80
- package/lib/typescript/web/Gestures.js +0 -38
- package/lib/typescript/web/constants.js +0 -2
- package/lib/typescript/web/detectors/RotationGestureDetector.js +0 -122
- package/lib/typescript/web/detectors/ScaleGestureDetector.js +0 -117
- package/lib/typescript/web/handlers/FlingGestureHandler.js +0 -133
- package/lib/typescript/web/handlers/GestureHandler.js +0 -656
- package/lib/typescript/web/handlers/HoverGestureHandler.js +0 -37
- package/lib/typescript/web/handlers/IGestureHandler.js +0 -1
- package/lib/typescript/web/handlers/LongPressGestureHandler.js +0 -136
- package/lib/typescript/web/handlers/ManualGestureHandler.js +0 -29
- package/lib/typescript/web/handlers/NativeViewGestureHandler.js +0 -133
- package/lib/typescript/web/handlers/PanGestureHandler.js +0 -420
- package/lib/typescript/web/handlers/PinchGestureHandler.js +0 -117
- package/lib/typescript/web/handlers/RotationGestureHandler.js +0 -122
- package/lib/typescript/web/handlers/TapGestureHandler.js +0 -202
- package/lib/typescript/web/interfaces.js +0 -25
- package/lib/typescript/web/tools/CircularBuffer.js +0 -37
- package/lib/typescript/web/tools/EventManager.js +0 -85
- package/lib/typescript/web/tools/GestureHandlerDelegate.js +0 -1
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.js +0 -273
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.js +0 -169
- package/lib/typescript/web/tools/InteractionManager.js +0 -91
- package/lib/typescript/web/tools/KeyboardEventManager.js +0 -73
- package/lib/typescript/web/tools/LeastSquareSolver.js +0 -147
- package/lib/typescript/web/tools/NodeManager.js +0 -28
- package/lib/typescript/web/tools/PointerEventManager.js +0 -179
- package/lib/typescript/web/tools/PointerTracker.js +0 -161
- package/lib/typescript/web/tools/Vector.js +0 -43
- package/lib/typescript/web/tools/VelocityTracker.js +0 -76
- package/lib/typescript/web/tools/WheelEventManager.js +0 -40
- package/lib/typescript/web/utils.js +0 -233
- package/lib/typescript/web_hammer/DiscreteGestureHandler.js +0 -48
- package/lib/typescript/web_hammer/DraggingGestureHandler.js +0 -25
- package/lib/typescript/web_hammer/Errors.js +0 -5
- package/lib/typescript/web_hammer/FlingGestureHandler.js +0 -119
- package/lib/typescript/web_hammer/GestureHandler.js +0 -469
- package/lib/typescript/web_hammer/IndiscreteGestureHandler.js +0 -26
- package/lib/typescript/web_hammer/LongPressGestureHandler.js +0 -46
- package/lib/typescript/web_hammer/NativeViewGestureHandler.js +0 -40
- package/lib/typescript/web_hammer/NodeManager.js +0 -28
- package/lib/typescript/web_hammer/PanGestureHandler.js +0 -151
- package/lib/typescript/web_hammer/PinchGestureHandler.js +0 -19
- package/lib/typescript/web_hammer/PressGestureHandler.js +0 -133
- package/lib/typescript/web_hammer/RotationGestureHandler.js +0 -20
- package/lib/typescript/web_hammer/TapGestureHandler.js +0 -142
- package/lib/typescript/web_hammer/constants.js +0 -42
- package/lib/typescript/web_hammer/utils.js +0 -15
- package/src/components/ReanimatedSwipeable.tsx +0 -811
@@ -1,92 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
3
|
-
import { Gestures, HammerGestures } from './web/Gestures';
|
4
|
-
import InteractionManager from './web/tools/InteractionManager';
|
5
|
-
import NodeManager from './web/tools/NodeManager';
|
6
|
-
import * as HammerNodeManager from './web_hammer/NodeManager';
|
7
|
-
import { GestureHandlerWebDelegate } from './web/tools/GestureHandlerWebDelegate';
|
8
|
-
// init method is called inside attachGestureHandler function. However, this function may
|
9
|
-
// fail when received view is not valid HTML element. On the other hand, dropGestureHandler
|
10
|
-
// will be called even if attach failed, which will result in crash.
|
11
|
-
//
|
12
|
-
// We use this flag to check whether or not dropGestureHandler should be called.
|
13
|
-
let shouldPreventDrop = false;
|
14
|
-
export default {
|
15
|
-
handleSetJSResponder(tag, blockNativeResponder) {
|
16
|
-
console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
|
17
|
-
},
|
18
|
-
handleClearJSResponder() {
|
19
|
-
console.warn('handleClearJSResponder: ');
|
20
|
-
},
|
21
|
-
createGestureHandler(handlerName, handlerTag, config) {
|
22
|
-
if (isNewWebImplementationEnabled()) {
|
23
|
-
if (!(handlerName in Gestures)) {
|
24
|
-
throw new Error(`react-native-gesture-handler: ${handlerName} is not supported on web.`);
|
25
|
-
}
|
26
|
-
const GestureClass = Gestures[handlerName];
|
27
|
-
NodeManager.createGestureHandler(handlerTag, new GestureClass(new GestureHandlerWebDelegate()));
|
28
|
-
InteractionManager.instance.configureInteractions(NodeManager.getHandler(handlerTag), config);
|
29
|
-
}
|
30
|
-
else {
|
31
|
-
if (!(handlerName in HammerGestures)) {
|
32
|
-
throw new Error(`react-native-gesture-handler: ${handlerName} is not supported on web.`);
|
33
|
-
}
|
34
|
-
// @ts-ignore If it doesn't exist, the error is thrown
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
36
|
-
const GestureClass = HammerGestures[handlerName];
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
38
|
-
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
39
|
-
}
|
40
|
-
this.updateGestureHandler(handlerTag, config);
|
41
|
-
},
|
42
|
-
attachGestureHandler(handlerTag,
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
44
|
-
newView, _actionType, propsRef) {
|
45
|
-
if (!(newView instanceof Element || newView instanceof React.Component)) {
|
46
|
-
shouldPreventDrop = true;
|
47
|
-
const handler = isNewWebImplementationEnabled()
|
48
|
-
? NodeManager.getHandler(handlerTag)
|
49
|
-
: HammerNodeManager.getHandler(handlerTag);
|
50
|
-
const handlerName = handler.constructor.name;
|
51
|
-
throw new Error(`${handlerName} with tag ${handlerTag} received child that is not valid HTML element.`);
|
52
|
-
}
|
53
|
-
if (isNewWebImplementationEnabled()) {
|
54
|
-
// @ts-ignore Types should be HTMLElement or React.Component
|
55
|
-
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
56
|
-
}
|
57
|
-
else {
|
58
|
-
// @ts-ignore Types should be HTMLElement or React.Component
|
59
|
-
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
60
|
-
}
|
61
|
-
},
|
62
|
-
updateGestureHandler(handlerTag, newConfig) {
|
63
|
-
if (isNewWebImplementationEnabled()) {
|
64
|
-
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
65
|
-
InteractionManager.instance.configureInteractions(NodeManager.getHandler(handlerTag), newConfig);
|
66
|
-
}
|
67
|
-
else {
|
68
|
-
HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
69
|
-
}
|
70
|
-
},
|
71
|
-
getGestureHandlerNode(handlerTag) {
|
72
|
-
if (isNewWebImplementationEnabled()) {
|
73
|
-
return NodeManager.getHandler(handlerTag);
|
74
|
-
}
|
75
|
-
else {
|
76
|
-
return HammerNodeManager.getHandler(handlerTag);
|
77
|
-
}
|
78
|
-
},
|
79
|
-
dropGestureHandler(handlerTag) {
|
80
|
-
if (shouldPreventDrop) {
|
81
|
-
return;
|
82
|
-
}
|
83
|
-
if (isNewWebImplementationEnabled()) {
|
84
|
-
NodeManager.dropGestureHandler(handlerTag);
|
85
|
-
}
|
86
|
-
else {
|
87
|
-
HammerNodeManager.dropGestureHandler(handlerTag);
|
88
|
-
}
|
89
|
-
},
|
90
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
91
|
-
flushOperations() { },
|
92
|
-
};
|
@@ -1,47 +0,0 @@
|
|
1
|
-
// GestureHandlers
|
2
|
-
import PanGestureHandler from './web/handlers/PanGestureHandler';
|
3
|
-
import TapGestureHandler from './web/handlers/TapGestureHandler';
|
4
|
-
import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
|
5
|
-
import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
6
|
-
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
7
|
-
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
8
|
-
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
9
|
-
import ManualGestureHandler from './web/handlers/ManualGestureHandler';
|
10
|
-
export const Gestures = {
|
11
|
-
NativeViewGestureHandler,
|
12
|
-
PanGestureHandler,
|
13
|
-
TapGestureHandler,
|
14
|
-
LongPressGestureHandler,
|
15
|
-
PinchGestureHandler,
|
16
|
-
RotationGestureHandler,
|
17
|
-
FlingGestureHandler,
|
18
|
-
ManualGestureHandler,
|
19
|
-
};
|
20
|
-
export default {
|
21
|
-
handleSetJSResponder(_tag, _blockNativeResponder) {
|
22
|
-
// NO-OP
|
23
|
-
},
|
24
|
-
handleClearJSResponder() {
|
25
|
-
// NO-OP
|
26
|
-
},
|
27
|
-
createGestureHandler(_handlerName, _handlerTag, _config) {
|
28
|
-
// NO-OP
|
29
|
-
},
|
30
|
-
attachGestureHandler(_handlerTag,
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
32
|
-
_newView, _actionType, _propsRef) {
|
33
|
-
// NO-OP
|
34
|
-
},
|
35
|
-
updateGestureHandler(_handlerTag, _newConfig) {
|
36
|
-
// NO-OP
|
37
|
-
},
|
38
|
-
getGestureHandlerNode(_handlerTag) {
|
39
|
-
// NO-OP
|
40
|
-
},
|
41
|
-
dropGestureHandler(_handlerTag) {
|
42
|
-
// NO-OP
|
43
|
-
},
|
44
|
-
flushOperations() {
|
45
|
-
// NO-OP
|
46
|
-
},
|
47
|
-
};
|
package/lib/typescript/State.js
DELETED
@@ -1,417 +0,0 @@
|
|
1
|
-
// This component is based on RN's DrawerLayoutAndroid API
|
2
|
-
//
|
3
|
-
// It perhaps deserves to be put in a separate repo, but since it relies on
|
4
|
-
// react-native-gesture-handler library which isn't very popular at the moment I
|
5
|
-
// decided to keep it here for the time being. It will allow us to move faster
|
6
|
-
// and fix issues that may arise in gesture handler library that could be found
|
7
|
-
// when using the drawer component
|
8
|
-
import * as React from 'react';
|
9
|
-
import { Component } from 'react';
|
10
|
-
import invariant from 'invariant';
|
11
|
-
import { Animated, StyleSheet, View, Keyboard, StatusBar, I18nManager, } from 'react-native';
|
12
|
-
import { PanGestureHandler } from '../handlers/PanGestureHandler';
|
13
|
-
import { TapGestureHandler } from '../handlers/TapGestureHandler';
|
14
|
-
import { State } from '../State';
|
15
|
-
const DRAG_TOSS = 0.05;
|
16
|
-
const IDLE = 'Idle';
|
17
|
-
const DRAGGING = 'Dragging';
|
18
|
-
const SETTLING = 'Settling';
|
19
|
-
/**
|
20
|
-
* @deprecated use Reanimated version of DrawerLayout instead
|
21
|
-
*/
|
22
|
-
export default class DrawerLayout extends Component {
|
23
|
-
static defaultProps = {
|
24
|
-
drawerWidth: 200,
|
25
|
-
drawerPosition: 'left',
|
26
|
-
useNativeAnimations: true,
|
27
|
-
drawerType: 'front',
|
28
|
-
edgeWidth: 20,
|
29
|
-
minSwipeDistance: 3,
|
30
|
-
overlayColor: 'rgba(0, 0, 0, 0.7)',
|
31
|
-
drawerLockMode: 'unlocked',
|
32
|
-
enableTrackpadTwoFingerGesture: false,
|
33
|
-
};
|
34
|
-
constructor(props) {
|
35
|
-
super(props);
|
36
|
-
const dragX = new Animated.Value(0);
|
37
|
-
const touchX = new Animated.Value(0);
|
38
|
-
const drawerTranslation = new Animated.Value(0);
|
39
|
-
this.state = {
|
40
|
-
dragX,
|
41
|
-
touchX,
|
42
|
-
drawerTranslation,
|
43
|
-
containerWidth: 0,
|
44
|
-
drawerState: IDLE,
|
45
|
-
drawerOpened: false,
|
46
|
-
};
|
47
|
-
this.updateAnimatedEvent(props, this.state);
|
48
|
-
}
|
49
|
-
shouldComponentUpdate(props, state) {
|
50
|
-
if (this.props.drawerPosition !== props.drawerPosition ||
|
51
|
-
this.props.drawerWidth !== props.drawerWidth ||
|
52
|
-
this.props.drawerType !== props.drawerType ||
|
53
|
-
this.state.containerWidth !== state.containerWidth) {
|
54
|
-
this.updateAnimatedEvent(props, state);
|
55
|
-
}
|
56
|
-
return true;
|
57
|
-
}
|
58
|
-
openValue;
|
59
|
-
onGestureEvent;
|
60
|
-
accessibilityIsModalView = React.createRef();
|
61
|
-
pointerEventsView = React.createRef();
|
62
|
-
panGestureHandler = React.createRef();
|
63
|
-
drawerShown = false;
|
64
|
-
static positions = {
|
65
|
-
Left: 'left',
|
66
|
-
Right: 'right',
|
67
|
-
};
|
68
|
-
updateAnimatedEvent = (props, state) => {
|
69
|
-
// Event definition is based on
|
70
|
-
const { drawerPosition, drawerWidth, drawerType } = props;
|
71
|
-
const { dragX: dragXValue, touchX: touchXValue, drawerTranslation, containerWidth, } = state;
|
72
|
-
let dragX = dragXValue;
|
73
|
-
let touchX = touchXValue;
|
74
|
-
if (drawerPosition !== 'left') {
|
75
|
-
// Most of the code is written in a way to handle left-side drawer. In
|
76
|
-
// order to handle right-side drawer the only thing we need to do is to
|
77
|
-
// reverse events coming from gesture handler in a way they emulate
|
78
|
-
// left-side drawer gestures. E.g. dragX is simply -dragX, and touchX is
|
79
|
-
// calulcated by subtracing real touchX from the width of the container
|
80
|
-
// (such that when touch happens at the right edge the value is simply 0)
|
81
|
-
dragX = Animated.multiply(new Animated.Value(-1), dragXValue); // TODO(TS): (for all "as" in this file) make sure we can map this
|
82
|
-
touchX = Animated.add(new Animated.Value(containerWidth), Animated.multiply(new Animated.Value(-1), touchXValue)); // TODO(TS): make sure we can map this;
|
83
|
-
touchXValue.setValue(containerWidth);
|
84
|
-
}
|
85
|
-
else {
|
86
|
-
touchXValue.setValue(0);
|
87
|
-
}
|
88
|
-
// While closing the drawer when user starts gesture outside of its area (in greyed
|
89
|
-
// out part of the window), we want the drawer to follow only once finger reaches the
|
90
|
-
// edge of the drawer.
|
91
|
-
// E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by
|
92
|
-
// dots. The touch gesture starts at '*' and moves left, touch path is indicated by
|
93
|
-
// an arrow pointing left
|
94
|
-
// 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+
|
95
|
-
// |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
|
96
|
-
// |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
|
97
|
-
// |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
|
98
|
-
// |XXXXXXXX|......| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|
|
99
|
-
// |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
|
100
|
-
// |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
|
101
|
-
// |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
|
102
|
-
// +---------------+ +---------------+ +---------------+ +---------------+
|
103
|
-
//
|
104
|
-
// For the above to work properly we define animated value that will keep
|
105
|
-
// start position of the gesture. Then we use that value to calculate how
|
106
|
-
// much we need to subtract from the dragX. If the gesture started on the
|
107
|
-
// greyed out area we take the distance from the edge of the drawer to the
|
108
|
-
// start position. Otherwise we don't subtract at all and the drawer be
|
109
|
-
// pulled back as soon as you start the pan.
|
110
|
-
//
|
111
|
-
// This is used only when drawerType is "front"
|
112
|
-
//
|
113
|
-
let translationX = dragX;
|
114
|
-
if (drawerType === 'front') {
|
115
|
-
const startPositionX = Animated.add(touchX, Animated.multiply(new Animated.Value(-1), dragX));
|
116
|
-
const dragOffsetFromOnStartPosition = startPositionX.interpolate({
|
117
|
-
inputRange: [drawerWidth - 1, drawerWidth, drawerWidth + 1],
|
118
|
-
outputRange: [0, 0, 1],
|
119
|
-
});
|
120
|
-
translationX = Animated.add(dragX, dragOffsetFromOnStartPosition); // TODO: as above
|
121
|
-
}
|
122
|
-
this.openValue = Animated.add(translationX, drawerTranslation).interpolate({
|
123
|
-
inputRange: [0, drawerWidth],
|
124
|
-
outputRange: [0, 1],
|
125
|
-
extrapolate: 'clamp',
|
126
|
-
});
|
127
|
-
const gestureOptions = {
|
128
|
-
useNativeDriver: props.useNativeAnimations,
|
129
|
-
};
|
130
|
-
if (this.props.onDrawerSlide) {
|
131
|
-
gestureOptions.listener = (ev) => {
|
132
|
-
const translationX = Math.floor(Math.abs(ev.nativeEvent.translationX));
|
133
|
-
const position = translationX / this.state.containerWidth;
|
134
|
-
this.props.onDrawerSlide?.(position);
|
135
|
-
};
|
136
|
-
}
|
137
|
-
this.onGestureEvent = Animated.event([{ nativeEvent: { translationX: dragXValue, x: touchXValue } }], gestureOptions);
|
138
|
-
};
|
139
|
-
handleContainerLayout = ({ nativeEvent }) => {
|
140
|
-
this.setState({ containerWidth: nativeEvent.layout.width });
|
141
|
-
};
|
142
|
-
emitStateChanged = (newState, drawerWillShow) => {
|
143
|
-
this.props.onDrawerStateChanged?.(newState, drawerWillShow);
|
144
|
-
};
|
145
|
-
openingHandlerStateChange = ({ nativeEvent, }) => {
|
146
|
-
if (nativeEvent.oldState === State.ACTIVE) {
|
147
|
-
this.handleRelease({ nativeEvent });
|
148
|
-
}
|
149
|
-
else if (nativeEvent.state === State.ACTIVE) {
|
150
|
-
this.emitStateChanged(DRAGGING, false);
|
151
|
-
this.setState({ drawerState: DRAGGING });
|
152
|
-
if (this.props.keyboardDismissMode === 'on-drag') {
|
153
|
-
Keyboard.dismiss();
|
154
|
-
}
|
155
|
-
if (this.props.hideStatusBar) {
|
156
|
-
StatusBar.setHidden(true, this.props.statusBarAnimation || 'slide');
|
157
|
-
}
|
158
|
-
}
|
159
|
-
};
|
160
|
-
onTapHandlerStateChange = ({ nativeEvent, }) => {
|
161
|
-
if (this.drawerShown &&
|
162
|
-
nativeEvent.oldState === State.ACTIVE &&
|
163
|
-
this.props.drawerLockMode !== 'locked-open') {
|
164
|
-
this.closeDrawer();
|
165
|
-
}
|
166
|
-
};
|
167
|
-
handleRelease = ({ nativeEvent, }) => {
|
168
|
-
const { drawerWidth, drawerPosition, drawerType } = this.props;
|
169
|
-
const { containerWidth } = this.state;
|
170
|
-
let { translationX: dragX, velocityX, x: touchX } = nativeEvent;
|
171
|
-
if (drawerPosition !== 'left') {
|
172
|
-
// See description in _updateAnimatedEvent about why events are flipped
|
173
|
-
// for right-side drawer
|
174
|
-
dragX = -dragX;
|
175
|
-
touchX = containerWidth - touchX;
|
176
|
-
velocityX = -velocityX;
|
177
|
-
}
|
178
|
-
const gestureStartX = touchX - dragX;
|
179
|
-
let dragOffsetBasedOnStart = 0;
|
180
|
-
if (drawerType === 'front') {
|
181
|
-
dragOffsetBasedOnStart =
|
182
|
-
gestureStartX > drawerWidth ? gestureStartX - drawerWidth : 0;
|
183
|
-
}
|
184
|
-
const startOffsetX = dragX + dragOffsetBasedOnStart + (this.drawerShown ? drawerWidth : 0);
|
185
|
-
const projOffsetX = startOffsetX + DRAG_TOSS * velocityX;
|
186
|
-
const shouldOpen = projOffsetX > drawerWidth / 2;
|
187
|
-
if (shouldOpen) {
|
188
|
-
this.animateDrawer(startOffsetX, drawerWidth, velocityX);
|
189
|
-
}
|
190
|
-
else {
|
191
|
-
this.animateDrawer(startOffsetX, 0, velocityX);
|
192
|
-
}
|
193
|
-
};
|
194
|
-
updateShowing = (showing) => {
|
195
|
-
this.drawerShown = showing;
|
196
|
-
this.accessibilityIsModalView.current?.setNativeProps({
|
197
|
-
accessibilityViewIsModal: showing,
|
198
|
-
});
|
199
|
-
this.pointerEventsView.current?.setNativeProps({
|
200
|
-
pointerEvents: showing ? 'auto' : 'none',
|
201
|
-
});
|
202
|
-
const { drawerPosition, minSwipeDistance, edgeWidth } = this.props;
|
203
|
-
const fromLeft = drawerPosition === 'left';
|
204
|
-
// gestureOrientation is 1 if the expected gesture is from left to right and
|
205
|
-
// -1 otherwise e.g. when drawer is on the left and is closed we expect left
|
206
|
-
// to right gesture, thus orientation will be 1.
|
207
|
-
const gestureOrientation = (fromLeft ? 1 : -1) * (this.drawerShown ? -1 : 1);
|
208
|
-
// When drawer is closed we want the hitSlop to be horizontally shorter than
|
209
|
-
// the container size by the value of SLOP. This will make it only activate
|
210
|
-
// when gesture happens not further than SLOP away from the edge
|
211
|
-
const hitSlop = fromLeft
|
212
|
-
? { left: 0, width: showing ? undefined : edgeWidth }
|
213
|
-
: { right: 0, width: showing ? undefined : edgeWidth };
|
214
|
-
// @ts-ignore internal API, maybe could be fixed in handler types
|
215
|
-
this.panGestureHandler.current?.setNativeProps({
|
216
|
-
hitSlop,
|
217
|
-
activeOffsetX: gestureOrientation * minSwipeDistance,
|
218
|
-
});
|
219
|
-
};
|
220
|
-
animateDrawer = (fromValue, toValue, velocity, speed) => {
|
221
|
-
this.state.dragX.setValue(0);
|
222
|
-
this.state.touchX.setValue(this.props.drawerPosition === 'left' ? 0 : this.state.containerWidth);
|
223
|
-
if (fromValue != null) {
|
224
|
-
let nextFramePosition = fromValue;
|
225
|
-
if (this.props.useNativeAnimations) {
|
226
|
-
// When using native driver, we predict the next position of the
|
227
|
-
// animation because it takes one frame of a roundtrip to pass RELEASE
|
228
|
-
// event from native driver to JS before we can start animating. Without
|
229
|
-
// it, it is more noticable that the frame is dropped.
|
230
|
-
if (fromValue < toValue && velocity > 0) {
|
231
|
-
nextFramePosition = Math.min(fromValue + velocity / 60.0, toValue);
|
232
|
-
}
|
233
|
-
else if (fromValue > toValue && velocity < 0) {
|
234
|
-
nextFramePosition = Math.max(fromValue + velocity / 60.0, toValue);
|
235
|
-
}
|
236
|
-
}
|
237
|
-
this.state.drawerTranslation.setValue(nextFramePosition);
|
238
|
-
}
|
239
|
-
const willShow = toValue !== 0;
|
240
|
-
this.updateShowing(willShow);
|
241
|
-
this.emitStateChanged(SETTLING, willShow);
|
242
|
-
this.setState({ drawerState: SETTLING });
|
243
|
-
if (this.props.hideStatusBar) {
|
244
|
-
StatusBar.setHidden(willShow, this.props.statusBarAnimation || 'slide');
|
245
|
-
}
|
246
|
-
Animated.spring(this.state.drawerTranslation, {
|
247
|
-
velocity,
|
248
|
-
bounciness: 0,
|
249
|
-
toValue,
|
250
|
-
useNativeDriver: this.props.useNativeAnimations,
|
251
|
-
speed: speed ?? undefined,
|
252
|
-
}).start(({ finished }) => {
|
253
|
-
if (finished) {
|
254
|
-
this.emitStateChanged(IDLE, willShow);
|
255
|
-
this.setState({ drawerOpened: willShow });
|
256
|
-
if (this.state.drawerState !== DRAGGING) {
|
257
|
-
// It's possilbe that user started drag while the drawer
|
258
|
-
// was settling, don't override state in this case
|
259
|
-
this.setState({ drawerState: IDLE });
|
260
|
-
}
|
261
|
-
if (willShow) {
|
262
|
-
this.props.onDrawerOpen?.();
|
263
|
-
}
|
264
|
-
else {
|
265
|
-
this.props.onDrawerClose?.();
|
266
|
-
}
|
267
|
-
}
|
268
|
-
});
|
269
|
-
};
|
270
|
-
// eslint-disable-next-line @eslint-react/no-unused-class-component-members
|
271
|
-
openDrawer = (options = {}) => {
|
272
|
-
this.animateDrawer(
|
273
|
-
// TODO: decide if it should be null or undefined is the proper value
|
274
|
-
undefined, this.props.drawerWidth, options.velocity ? options.velocity : 0, options.speed);
|
275
|
-
// We need to force the update, otherwise the overlay is not rerendered and
|
276
|
-
// it would not be clickable
|
277
|
-
this.forceUpdate();
|
278
|
-
};
|
279
|
-
closeDrawer = (options = {}) => {
|
280
|
-
// TODO: decide if it should be null or undefined is the proper value
|
281
|
-
this.animateDrawer(undefined, 0, options.velocity ? options.velocity : 0, options.speed);
|
282
|
-
// We need to force the update, otherwise the overlay is not rerendered and
|
283
|
-
// it would be still clickable
|
284
|
-
this.forceUpdate();
|
285
|
-
};
|
286
|
-
renderOverlay = () => {
|
287
|
-
/* Overlay styles */
|
288
|
-
invariant(this.openValue, 'should be set');
|
289
|
-
let overlayOpacity;
|
290
|
-
if (this.state.drawerState !== IDLE) {
|
291
|
-
overlayOpacity = this.openValue;
|
292
|
-
}
|
293
|
-
else {
|
294
|
-
overlayOpacity = this.state.drawerOpened ? 1 : 0;
|
295
|
-
}
|
296
|
-
const dynamicOverlayStyles = {
|
297
|
-
opacity: overlayOpacity,
|
298
|
-
backgroundColor: this.props.overlayColor,
|
299
|
-
};
|
300
|
-
return (<TapGestureHandler onHandlerStateChange={this.onTapHandlerStateChange}>
|
301
|
-
<Animated.View pointerEvents={this.drawerShown ? 'auto' : 'none'} ref={this.pointerEventsView} style={[styles.overlay, dynamicOverlayStyles]}/>
|
302
|
-
</TapGestureHandler>);
|
303
|
-
};
|
304
|
-
renderDrawer = () => {
|
305
|
-
const { drawerBackgroundColor, drawerWidth, drawerPosition, drawerType, drawerContainerStyle, contentContainerStyle, } = this.props;
|
306
|
-
const fromLeft = drawerPosition === 'left';
|
307
|
-
const drawerSlide = drawerType !== 'back';
|
308
|
-
const containerSlide = drawerType !== 'front';
|
309
|
-
// We rely on row and row-reverse flex directions to position the drawer
|
310
|
-
// properly. Apparently for RTL these are flipped which requires us to use
|
311
|
-
// the opposite setting for the drawer to appear from left or right
|
312
|
-
// according to the drawerPosition prop
|
313
|
-
const reverseContentDirection = I18nManager.isRTL ? fromLeft : !fromLeft;
|
314
|
-
const dynamicDrawerStyles = {
|
315
|
-
backgroundColor: drawerBackgroundColor,
|
316
|
-
width: drawerWidth,
|
317
|
-
};
|
318
|
-
const openValue = this.openValue;
|
319
|
-
invariant(openValue, 'should be set');
|
320
|
-
let containerStyles;
|
321
|
-
if (containerSlide) {
|
322
|
-
const containerTranslateX = openValue.interpolate({
|
323
|
-
inputRange: [0, 1],
|
324
|
-
outputRange: fromLeft ? [0, drawerWidth] : [0, -drawerWidth],
|
325
|
-
extrapolate: 'clamp',
|
326
|
-
});
|
327
|
-
containerStyles = {
|
328
|
-
transform: [{ translateX: containerTranslateX }],
|
329
|
-
};
|
330
|
-
}
|
331
|
-
let drawerTranslateX = 0;
|
332
|
-
if (drawerSlide) {
|
333
|
-
const closedDrawerOffset = fromLeft ? -drawerWidth : drawerWidth;
|
334
|
-
if (this.state.drawerState !== IDLE) {
|
335
|
-
drawerTranslateX = openValue.interpolate({
|
336
|
-
inputRange: [0, 1],
|
337
|
-
outputRange: [closedDrawerOffset, 0],
|
338
|
-
extrapolate: 'clamp',
|
339
|
-
});
|
340
|
-
}
|
341
|
-
else {
|
342
|
-
drawerTranslateX = this.state.drawerOpened ? 0 : closedDrawerOffset;
|
343
|
-
}
|
344
|
-
}
|
345
|
-
const drawerStyles = {
|
346
|
-
transform: [{ translateX: drawerTranslateX }],
|
347
|
-
flexDirection: reverseContentDirection ? 'row-reverse' : 'row',
|
348
|
-
};
|
349
|
-
return (<Animated.View style={styles.main} onLayout={this.handleContainerLayout}>
|
350
|
-
<Animated.View style={[
|
351
|
-
drawerType === 'front'
|
352
|
-
? styles.containerOnBack
|
353
|
-
: styles.containerInFront,
|
354
|
-
containerStyles,
|
355
|
-
contentContainerStyle,
|
356
|
-
]} importantForAccessibility={this.drawerShown ? 'no-hide-descendants' : 'yes'}>
|
357
|
-
{typeof this.props.children === 'function'
|
358
|
-
? this.props.children(this.openValue)
|
359
|
-
: this.props.children}
|
360
|
-
{this.renderOverlay()}
|
361
|
-
</Animated.View>
|
362
|
-
<Animated.View pointerEvents="box-none" ref={this.accessibilityIsModalView} accessibilityViewIsModal={this.drawerShown} style={[styles.drawerContainer, drawerStyles, drawerContainerStyle]}>
|
363
|
-
<View style={dynamicDrawerStyles}>
|
364
|
-
{this.props.renderNavigationView(this.openValue)}
|
365
|
-
</View>
|
366
|
-
</Animated.View>
|
367
|
-
</Animated.View>);
|
368
|
-
};
|
369
|
-
setPanGestureRef = (ref) => {
|
370
|
-
// TODO(TS): make sure it is OK taken from
|
371
|
-
// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065#issuecomment-596081842
|
372
|
-
this.panGestureHandler.current = ref;
|
373
|
-
this.props.onGestureRef?.(ref);
|
374
|
-
};
|
375
|
-
render() {
|
376
|
-
const { drawerPosition, drawerLockMode, edgeWidth, minSwipeDistance } = this.props;
|
377
|
-
const fromLeft = drawerPosition === 'left';
|
378
|
-
// gestureOrientation is 1 if the expected gesture is from left to right and
|
379
|
-
// -1 otherwise e.g. when drawer is on the left and is closed we expect left
|
380
|
-
// to right gesture, thus orientation will be 1.
|
381
|
-
const gestureOrientation = (fromLeft ? 1 : -1) * (this.drawerShown ? -1 : 1);
|
382
|
-
// When drawer is closed we want the hitSlop to be horizontally shorter than
|
383
|
-
// the container size by the value of SLOP. This will make it only activate
|
384
|
-
// when gesture happens not further than SLOP away from the edge
|
385
|
-
const hitSlop = fromLeft
|
386
|
-
? { left: 0, width: this.drawerShown ? undefined : edgeWidth }
|
387
|
-
: { right: 0, width: this.drawerShown ? undefined : edgeWidth };
|
388
|
-
return (<PanGestureHandler
|
389
|
-
// @ts-ignore could be fixed in handler types
|
390
|
-
userSelect={this.props.userSelect} activeCursor={this.props.activeCursor} mouseButton={this.props.mouseButton} enableContextMenu={this.props.enableContextMenu} ref={this.setPanGestureRef} hitSlop={hitSlop} activeOffsetX={gestureOrientation * minSwipeDistance} failOffsetY={[-15, 15]} onGestureEvent={this.onGestureEvent} onHandlerStateChange={this.openingHandlerStateChange} enableTrackpadTwoFingerGesture={this.props.enableTrackpadTwoFingerGesture} enabled={drawerLockMode !== 'locked-closed' && drawerLockMode !== 'locked-open'}>
|
391
|
-
{this.renderDrawer()}
|
392
|
-
</PanGestureHandler>);
|
393
|
-
}
|
394
|
-
}
|
395
|
-
const styles = StyleSheet.create({
|
396
|
-
drawerContainer: {
|
397
|
-
...StyleSheet.absoluteFillObject,
|
398
|
-
zIndex: 1001,
|
399
|
-
flexDirection: 'row',
|
400
|
-
},
|
401
|
-
containerInFront: {
|
402
|
-
...StyleSheet.absoluteFillObject,
|
403
|
-
zIndex: 1002,
|
404
|
-
},
|
405
|
-
containerOnBack: {
|
406
|
-
...StyleSheet.absoluteFillObject,
|
407
|
-
},
|
408
|
-
main: {
|
409
|
-
flex: 1,
|
410
|
-
zIndex: 0,
|
411
|
-
overflow: 'hidden',
|
412
|
-
},
|
413
|
-
overlay: {
|
414
|
-
...StyleSheet.absoluteFillObject,
|
415
|
-
zIndex: 1000,
|
416
|
-
},
|
417
|
-
});
|