react-native-gesture-handler 2.20.2 → 2.21.1
Sign up to get free protection for your applications and to get access to all the features.
- package/RNGestureHandler.podspec +9 -0
- package/ReanimatedDrawerLayout/package.json +6 -0
- package/android/build.gradle +19 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +6 -2
- package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureDetector.kt +53 -21
- package/apple/RNGestureHandlerPointerTracker.m +4 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js +15 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/Pressable/Pressable.js +2 -6
- package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
- package/lib/commonjs/components/ReanimatedDrawerLayout.js +389 -0
- package/lib/commonjs/components/ReanimatedDrawerLayout.js.map +1 -0
- package/lib/commonjs/components/ReanimatedSwipeable.js +117 -148
- package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
- package/lib/commonjs/findNodeHandle.js +12 -0
- package/lib/commonjs/findNodeHandle.js.map +1 -0
- package/lib/commonjs/findNodeHandle.web.js +40 -0
- package/lib/commonjs/findNodeHandle.web.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +4 -2
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.web.js +51 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.web.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js +3 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +5 -3
- package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +4 -2
- package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +4 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +59 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +10 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +6 -0
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +1 -3
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +5 -2
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/KeyboardEventManager.js +2 -2
- package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +6 -30
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/WheelEventManager.js +74 -0
- package/lib/commonjs/web/tools/WheelEventManager.js.map +1 -0
- package/lib/commonjs/web/utils.js +16 -0
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +16 -3
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/Pressable/Pressable.js +2 -6
- package/lib/module/components/Pressable/Pressable.js.map +1 -1
- package/lib/module/components/ReanimatedDrawerLayout.js +365 -0
- package/lib/module/components/ReanimatedDrawerLayout.js.map +1 -0
- package/lib/module/components/ReanimatedSwipeable.js +119 -145
- package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
- package/lib/module/findNodeHandle.js +3 -0
- package/lib/module/findNodeHandle.js.map +1 -0
- package/lib/module/findNodeHandle.web.js +32 -0
- package/lib/module/findNodeHandle.web.js.map +1 -0
- package/lib/module/handlers/createHandler.js +2 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/Wrap.web.js +34 -0
- package/lib/module/handlers/gestures/GestureDetector/Wrap.web.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/index.js +2 -1
- package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +2 -2
- package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +4 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +58 -0
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +8 -0
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +6 -0
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +1 -3
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +3 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/KeyboardEventManager.js +2 -2
- package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +6 -30
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/WheelEventManager.js +60 -0
- package/lib/module/web/tools/WheelEventManager.js.map +1 -0
- package/lib/module/web/utils.js +15 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/typescript/components/ReanimatedDrawerLayout.d.ts +162 -0
- package/lib/typescript/components/ReanimatedSwipeable.d.ts +22 -16
- package/lib/typescript/findNodeHandle.d.ts +2 -0
- package/lib/typescript/findNodeHandle.web.d.ts +2 -0
- package/lib/typescript/handlers/gestures/GestureDetector/Wrap.web.d.ts +7 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +2 -1
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +5 -0
- package/lib/typescript/web/interfaces.d.ts +16 -0
- package/lib/typescript/web/tools/EventManager.d.ts +2 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +2 -8
- package/lib/typescript/web/tools/WheelEventManager.d.ts +11 -0
- package/lib/typescript/web/utils.d.ts +2 -1
- package/package.json +3 -2
- package/src/RNGestureHandlerModule.web.ts +23 -4
- package/src/components/Pressable/Pressable.tsx +2 -6
- package/src/components/ReanimatedDrawerLayout.tsx +741 -0
- package/src/components/ReanimatedSwipeable.tsx +361 -305
- package/src/findNodeHandle.ts +3 -0
- package/src/findNodeHandle.web.ts +35 -0
- package/src/handlers/createHandler.tsx +2 -1
- package/src/handlers/gestures/GestureDetector/Wrap.web.tsx +44 -0
- package/src/handlers/gestures/GestureDetector/index.tsx +2 -1
- package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -1
- package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +1 -1
- package/src/web/handlers/GestureHandler.ts +5 -1
- package/src/web/handlers/PanGestureHandler.ts +69 -1
- package/src/web/interfaces.ts +17 -0
- package/src/web/tools/EventManager.ts +4 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +1 -7
- package/src/web/tools/GestureHandlerWebDelegate.ts +3 -1
- package/src/web/tools/KeyboardEventManager.ts +2 -2
- package/src/web/tools/PointerTracker.ts +6 -28
- package/src/web/tools/WheelEventManager.ts +48 -0
- package/src/web/utils.ts +47 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["ReanimatedDrawerLayout.tsx"],"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useState","StyleSheet","Keyboard","StatusBar","I18nManager","Platform","Animated","Extrapolation","interpolate","runOnJS","useAnimatedProps","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","GestureObjects","Gesture","GestureDetector","MouseButton","DRAG_TOSS","DrawerPosition","DrawerState","DrawerType","DrawerLockMode","DrawerKeyboardDismissMode","defaultProps","drawerWidth","drawerPosition","LEFT","drawerType","FRONT","edgeWidth","minSwipeDistance","overlayColor","drawerLockMode","UNLOCKED","enableTrackpadTwoFingerGesture","activeCursor","mouseButton","statusBarAnimation","DrawerLayout","props","ref","containerWidth","setContainerWidth","drawerState","setDrawerState","IDLE","drawerOpened","setDrawerOpened","drawerBackgroundColor","drawerContainerStyle","contentContainerStyle","hideStatusBar","keyboardDismissMode","userSelect","enableContextMenu","renderNavigationView","onDrawerSlide","onDrawerClose","onDrawerOpen","onDrawerStateChanged","isFromLeft","sideCorrection","openValue","value","isDrawerOpen","handleContainerLayout","nativeEvent","layout","width","emitStateChanged","newState","drawerWillShow","drawerAnimatedProps","accessibilityViewIsModal","overlayAnimatedProps","pointerEvents","edgeHitSlop","setEdgeHitSlop","left","right","gestureOrientation","animateDrawer","toValue","initialVelocity","animationSpeed","willShow","SETTLING","setHidden","normalizedToValue","CLAMP","normalizedInitialVelocity","overshootClamping","velocity","mass","damping","stiffness","finished","handleRelease","event","translationX","dragX","velocityX","x","touchX","gestureStartX","dragOffsetBasedOnStart","startOffsetX","projOffsetX","shouldOpen","openDrawer","options","closeDrawer","overlayDismissGesture","Tap","maxDistance","onEnd","LOCKED_OPEN","overlayAnimatedStyle","opacity","backgroundColor","fillHitSlop","panGesture","Pan","hitSlop","minDistance","activeOffsetX","failOffsetY","simultaneousWithExternalGesture","enabled","LOCKED_CLOSED","onStart","DRAGGING","ON_DRAG","dismiss","onUpdate","startedOutsideTranslation","startedInsideTranslation","adjustedTranslation","Math","max","reverseContentDirection","isRTL","dynamicDrawerStyles","containerStyles","transform","translateX","drawerAnimatedStyle","closedDrawerOffset","isBack","BACK","isIdle","flexDirection","containerAnimatedProps","importantForAccessibility","OS","undefined","children","styles","main","containerOnBack","containerInFront","overlay","drawerContainer","create","absoluteFillObject","zIndex","flex","overflow"],"mappings":"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","sourcesContent":["// This component is based on RN's DrawerLayoutAndroid API\n// It's cross-compatible with all platforms despite\n// `DrawerLayoutAndroid` only being available on android\n\nimport React, {\n ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react';\n\nimport {\n StyleSheet,\n Keyboard,\n StatusBar,\n I18nManager,\n StatusBarAnimation,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n Platform,\n} from 'react-native';\n\nimport Animated, {\n Extrapolation,\n SharedValue,\n interpolate,\n runOnJS,\n useAnimatedProps,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\n\nimport { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../handlers/gestures/GestureDetector';\nimport {\n UserSelect,\n ActiveCursor,\n MouseButton,\n HitSlop,\n GestureStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';\n\nconst DRAG_TOSS = 0.05;\n\nexport enum DrawerPosition {\n LEFT,\n RIGHT,\n}\n\nexport enum DrawerState {\n IDLE,\n DRAGGING,\n SETTLING,\n}\n\nexport enum DrawerType {\n FRONT,\n BACK,\n SLIDE,\n}\n\nexport enum DrawerLockMode {\n UNLOCKED,\n LOCKED_CLOSED,\n LOCKED_OPEN,\n}\n\nexport enum DrawerKeyboardDismissMode {\n NONE,\n ON_DRAG,\n}\n\nexport interface DrawerLayoutProps {\n /**\n * This attribute is present in the native android implementation already and is one\n * of the required params. The gesture handler version of DrawerLayout makes it\n * possible for the function passed as `renderNavigationView` to take an\n * Animated value as a parameter that indicates the progress of drawer\n * opening/closing animation (progress value is 0 when closed and 1 when\n * opened). This can be used by the drawer component to animated its children\n * while the drawer is opening or closing.\n */\n renderNavigationView: (\n progressAnimatedValue: SharedValue<number>\n ) => ReactNode;\n\n /**\n * Determines the side from which the drawer will open.\n */\n drawerPosition?: DrawerPosition;\n\n /**\n * Width of the drawer.\n */\n drawerWidth?: number;\n\n /**\n * Background color of the drawer.\n */\n drawerBackgroundColor?: string;\n\n /**\n * Specifies the lock mode of the drawer.\n * Programatic opening/closing isn't affected by the lock mode. Defaults to `UNLOCKED`.\n * - `UNLOCKED` - the drawer will respond to gestures.\n * - `LOCKED_CLOSED` - the drawer will move freely until it settles in a closed position, then the gestures will be disabled.\n * - `LOCKED_OPEN` - the drawer will move freely until it settles in an opened position, then the gestures will be disabled.\n */\n drawerLockMode?: DrawerLockMode;\n\n /**\n * Determines if system keyboard should be closed upon dragging the drawer.\n */\n keyboardDismissMode?: DrawerKeyboardDismissMode;\n\n /**\n * Called when the drawer is closed.\n */\n onDrawerClose?: () => void;\n\n /**\n * Called when the drawer is opened.\n */\n onDrawerOpen?: () => void;\n\n /**\n * Called when the status of the drawer changes.\n */\n onDrawerStateChanged?: (\n newState: DrawerState,\n drawerWillShow: boolean\n ) => void;\n\n /**\n * Type of animation that will play when opening the drawer.\n */\n drawerType?: DrawerType;\n\n /**\n * Defines how far from the edge of the content view the gesture should\n * activate.\n */\n edgeWidth?: number;\n\n /**\n * Minimal distance to swipe before the drawer starts moving.\n */\n minSwipeDistance?: number;\n\n /**\n * When set to true Drawer component will use\n * {@link https://reactnative.dev/docs/statusbar StatusBar} API to hide the OS\n * status bar whenever the drawer is pulled or when its in an \"open\" state.\n */\n hideStatusBar?: boolean;\n\n /**\n * @default 'slide'\n *\n * Can be used when hideStatusBar is set to true and will select the animation\n * used for hiding/showing the status bar. See\n * {@link https://reactnative.dev/docs/statusbar StatusBar} documentation for\n * more details\n */\n statusBarAnimation?: StatusBarAnimation;\n\n /**\n * @default 'rgba(0, 0, 0, 0.7)'\n *\n * Color of the background overlay.\n * Animated from `0%` to `100%` as the drawer opens.\n */\n overlayColor?: string;\n\n /**\n * Style wrapping the content.\n */\n contentContainerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style wrapping the drawer.\n */\n drawerContainerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n onDrawerSlide?: (position: number) => void;\n\n // Implicit `children` prop has been removed in @types/react^18.0.\n /**\n * Elements that will be rendered inside the content view.\n */\n children?: ReactNode | ((openValue?: SharedValue<number>) => ReactNode);\n\n /**\n * @default 'none'\n * Sets whether the text inside both the drawer and the context window can be selected.\n * Values: 'none' | 'text' | 'auto'\n */\n userSelect?: UserSelect;\n\n /**\n * @default 'auto'\n * Sets the displayed cursor pictogram when the drawer is being dragged.\n * Values: see CSS cursor values\n */\n activeCursor?: ActiveCursor;\n\n /**\n * @default 'MouseButton.LEFT'\n * Allows to choose which mouse button should underlying pan handler react to.\n */\n mouseButton?: MouseButton;\n\n /**\n * @default 'false if MouseButton.RIGHT is specified'\n * Allows to enable/disable context menu.\n */\n enableContextMenu?: boolean;\n}\n\nexport type DrawerMovementOption = {\n initialVelocity?: number;\n animationSpeed?: number;\n};\n\nexport interface DrawerLayoutMethods {\n openDrawer: (options?: DrawerMovementOption) => void;\n closeDrawer: (options?: DrawerMovementOption) => void;\n}\n\nconst defaultProps = {\n drawerWidth: 200,\n drawerPosition: DrawerPosition.LEFT,\n drawerType: DrawerType.FRONT,\n edgeWidth: 20,\n minSwipeDistance: 3,\n overlayColor: 'rgba(0, 0, 0, 0.7)',\n drawerLockMode: DrawerLockMode.UNLOCKED,\n enableTrackpadTwoFingerGesture: false,\n activeCursor: 'auto' as ActiveCursor,\n mouseButton: MouseButton.LEFT,\n statusBarAnimation: 'slide' as StatusBarAnimation,\n};\n\nconst DrawerLayout = forwardRef<DrawerLayoutMethods, DrawerLayoutProps>(\n function DrawerLayout(props: DrawerLayoutProps, ref) {\n const [containerWidth, setContainerWidth] = useState(0);\n const [drawerState, setDrawerState] = useState<DrawerState>(\n DrawerState.IDLE\n );\n const [drawerOpened, setDrawerOpened] = useState(false);\n\n const {\n drawerPosition = defaultProps.drawerPosition,\n drawerWidth = defaultProps.drawerWidth,\n drawerType = defaultProps.drawerType,\n drawerBackgroundColor,\n drawerContainerStyle,\n contentContainerStyle,\n minSwipeDistance = defaultProps.minSwipeDistance,\n edgeWidth = defaultProps.edgeWidth,\n drawerLockMode = defaultProps.drawerLockMode,\n overlayColor = defaultProps.overlayColor,\n enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,\n activeCursor = defaultProps.activeCursor,\n mouseButton = defaultProps.mouseButton,\n statusBarAnimation = defaultProps.statusBarAnimation,\n hideStatusBar,\n keyboardDismissMode,\n userSelect,\n enableContextMenu,\n renderNavigationView,\n onDrawerSlide,\n onDrawerClose,\n onDrawerOpen,\n onDrawerStateChanged,\n } = props;\n\n const isFromLeft = drawerPosition === DrawerPosition.LEFT;\n\n const sideCorrection = isFromLeft ? 1 : -1;\n\n // While closing the drawer when user starts gesture in the greyed out part of the window,\n // we want the drawer to follow only once the finger reaches the edge of the drawer.\n // See the diagram for reference. * = starting finger position, < = current finger position\n // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|..<*..| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n\n const openValue = useSharedValue<number>(0);\n\n useDerivedValue(() => {\n onDrawerSlide && runOnJS(onDrawerSlide)(openValue.value);\n }, []);\n\n const isDrawerOpen = useSharedValue(false);\n\n const handleContainerLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n setContainerWidth(nativeEvent.layout.width);\n };\n\n const emitStateChanged = useCallback(\n (newState: DrawerState, drawerWillShow: boolean) => {\n 'worklet';\n onDrawerStateChanged &&\n runOnJS(onDrawerStateChanged)?.(newState, drawerWillShow);\n },\n [onDrawerStateChanged]\n );\n\n const drawerAnimatedProps = useAnimatedProps(() => ({\n accessibilityViewIsModal: isDrawerOpen.value,\n }));\n\n const overlayAnimatedProps = useAnimatedProps(() => ({\n pointerEvents: isDrawerOpen.value ? ('auto' as const) : ('none' as const),\n }));\n\n // While the drawer is hidden, it's hitSlop overflows onto the main view by edgeWidth\n // This way it can be swiped open even when it's hidden\n const [edgeHitSlop, setEdgeHitSlop] = useState<HitSlop>(\n isFromLeft\n ? { left: 0, width: edgeWidth }\n : { right: 0, width: edgeWidth }\n );\n\n // gestureOrientation is 1 if the gesture is expected to move from left to right and -1 otherwise\n const gestureOrientation = useMemo(\n () => sideCorrection * (drawerOpened ? -1 : 1),\n [sideCorrection, drawerOpened]\n );\n\n useEffect(() => {\n setEdgeHitSlop(\n isFromLeft\n ? { left: 0, width: edgeWidth }\n : { right: 0, width: edgeWidth }\n );\n }, [isFromLeft, edgeWidth]);\n\n const animateDrawer = useCallback(\n (toValue: number, initialVelocity: number, animationSpeed?: number) => {\n 'worklet';\n const willShow = toValue !== 0;\n isDrawerOpen.value = willShow;\n\n emitStateChanged(DrawerState.SETTLING, willShow);\n runOnJS(setDrawerState)(DrawerState.SETTLING);\n\n if (hideStatusBar) {\n runOnJS(StatusBar.setHidden)(willShow, statusBarAnimation);\n }\n\n const normalizedToValue = interpolate(\n toValue,\n [0, drawerWidth],\n [0, 1],\n Extrapolation.CLAMP\n );\n\n const normalizedInitialVelocity = interpolate(\n initialVelocity,\n [0, drawerWidth],\n [0, 1],\n Extrapolation.CLAMP\n );\n\n openValue.value = withSpring(\n normalizedToValue,\n {\n overshootClamping: true,\n velocity: normalizedInitialVelocity,\n mass: animationSpeed ? 1 / animationSpeed : 1,\n damping: 40,\n stiffness: 500,\n },\n (finished) => {\n if (finished) {\n emitStateChanged(DrawerState.IDLE, willShow);\n runOnJS(setDrawerOpened)(willShow);\n runOnJS(setDrawerState)(DrawerState.IDLE);\n if (willShow) {\n onDrawerOpen && runOnJS(onDrawerOpen)?.();\n } else {\n onDrawerClose && runOnJS(onDrawerClose)?.();\n }\n }\n }\n );\n },\n [\n openValue,\n emitStateChanged,\n isDrawerOpen,\n hideStatusBar,\n onDrawerClose,\n onDrawerOpen,\n drawerWidth,\n statusBarAnimation,\n ]\n );\n\n const handleRelease = useCallback(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n 'worklet';\n let { translationX: dragX, velocityX, x: touchX } = event;\n\n if (drawerPosition !== DrawerPosition.LEFT) {\n // See description in _updateAnimatedEvent about why events are flipped\n // for right-side drawer\n dragX = -dragX;\n touchX = containerWidth - touchX;\n velocityX = -velocityX;\n }\n\n const gestureStartX = touchX - dragX;\n let dragOffsetBasedOnStart = 0;\n\n if (drawerType === DrawerType.FRONT) {\n dragOffsetBasedOnStart =\n gestureStartX > drawerWidth ? gestureStartX - drawerWidth : 0;\n }\n\n const startOffsetX =\n dragX +\n dragOffsetBasedOnStart +\n (isDrawerOpen.value ? drawerWidth : 0);\n\n const projOffsetX = startOffsetX + DRAG_TOSS * velocityX;\n\n const shouldOpen = projOffsetX > drawerWidth / 2;\n\n if (shouldOpen) {\n animateDrawer(drawerWidth, velocityX);\n } else {\n animateDrawer(0, velocityX);\n }\n },\n [\n animateDrawer,\n containerWidth,\n drawerPosition,\n drawerType,\n drawerWidth,\n isDrawerOpen,\n ]\n );\n\n const openDrawer = useCallback(\n (options: DrawerMovementOption = {}) => {\n 'worklet';\n animateDrawer(\n drawerWidth,\n options.initialVelocity ?? 0,\n options.animationSpeed\n );\n },\n [animateDrawer, drawerWidth]\n );\n\n const closeDrawer = useCallback(\n (options: DrawerMovementOption = {}) => {\n 'worklet';\n animateDrawer(0, options.initialVelocity ?? 0, options.animationSpeed);\n },\n [animateDrawer]\n );\n\n const overlayDismissGesture = useMemo(\n () =>\n Gesture.Tap()\n .maxDistance(25)\n .onEnd(() => {\n if (\n isDrawerOpen.value &&\n drawerLockMode !== DrawerLockMode.LOCKED_OPEN\n ) {\n closeDrawer();\n }\n }),\n [closeDrawer, isDrawerOpen, drawerLockMode]\n );\n\n const overlayAnimatedStyle = useAnimatedStyle(() => ({\n opacity: openValue.value,\n backgroundColor: overlayColor,\n }));\n\n const fillHitSlop = useMemo(\n () => (isFromLeft ? { left: drawerWidth } : { right: drawerWidth }),\n [drawerWidth, isFromLeft]\n );\n\n const panGesture = useMemo(() => {\n return Gesture.Pan()\n .activeCursor(activeCursor)\n .mouseButton(mouseButton)\n .hitSlop(drawerOpened ? fillHitSlop : edgeHitSlop)\n .minDistance(drawerOpened ? 100 : 0)\n .activeOffsetX(gestureOrientation * minSwipeDistance)\n .failOffsetY([-15, 15])\n .simultaneousWithExternalGesture(overlayDismissGesture)\n .enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture)\n .enabled(\n drawerState !== DrawerState.SETTLING &&\n (drawerOpened\n ? drawerLockMode !== DrawerLockMode.LOCKED_OPEN\n : drawerLockMode !== DrawerLockMode.LOCKED_CLOSED)\n )\n .onStart(() => {\n emitStateChanged(DrawerState.DRAGGING, false);\n runOnJS(setDrawerState)(DrawerState.DRAGGING);\n if (keyboardDismissMode === DrawerKeyboardDismissMode.ON_DRAG) {\n runOnJS(Keyboard.dismiss)();\n }\n if (hideStatusBar) {\n runOnJS(StatusBar.setHidden)(true, statusBarAnimation);\n }\n })\n .onUpdate((event) => {\n const startedOutsideTranslation = isFromLeft\n ? interpolate(\n event.x,\n [0, drawerWidth, drawerWidth + 1],\n [0, drawerWidth, drawerWidth]\n )\n : interpolate(\n event.x - containerWidth,\n [-drawerWidth - 1, -drawerWidth, 0],\n [drawerWidth, drawerWidth, 0]\n );\n\n const startedInsideTranslation =\n sideCorrection *\n (event.translationX +\n (drawerOpened ? drawerWidth * -gestureOrientation : 0));\n\n const adjustedTranslation = Math.max(\n drawerOpened ? startedOutsideTranslation : 0,\n startedInsideTranslation\n );\n\n openValue.value = interpolate(\n adjustedTranslation,\n [-drawerWidth, 0, drawerWidth],\n [1, 0, 1],\n Extrapolation.CLAMP\n );\n })\n .onEnd(handleRelease);\n }, [\n drawerLockMode,\n openValue,\n drawerWidth,\n emitStateChanged,\n gestureOrientation,\n handleRelease,\n edgeHitSlop,\n fillHitSlop,\n minSwipeDistance,\n hideStatusBar,\n keyboardDismissMode,\n overlayDismissGesture,\n drawerOpened,\n isFromLeft,\n containerWidth,\n sideCorrection,\n drawerState,\n activeCursor,\n enableTrackpadTwoFingerGesture,\n mouseButton,\n statusBarAnimation,\n ]);\n\n // When using RTL, row and row-reverse flex directions are flipped.\n const reverseContentDirection = I18nManager.isRTL\n ? isFromLeft\n : !isFromLeft;\n\n const dynamicDrawerStyles = {\n backgroundColor: drawerBackgroundColor,\n width: drawerWidth,\n };\n\n const containerStyles = useAnimatedStyle(() => {\n if (drawerType === DrawerType.FRONT) {\n return {};\n }\n\n return {\n transform: [\n {\n translateX: interpolate(\n openValue.value,\n [0, 1],\n [0, drawerWidth * sideCorrection],\n Extrapolation.CLAMP\n ),\n },\n ],\n };\n });\n\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n const closedDrawerOffset = drawerWidth * -sideCorrection;\n const isBack = drawerType === DrawerType.BACK;\n const isIdle = drawerState === DrawerState.IDLE;\n\n if (isBack) {\n return {\n transform: [{ translateX: 0 }],\n flexDirection: reverseContentDirection ? 'row-reverse' : 'row',\n };\n }\n\n let translateX = 0;\n\n if (isIdle) {\n translateX = drawerOpened ? 0 : closedDrawerOffset;\n } else {\n translateX = interpolate(\n openValue.value,\n [0, 1],\n [closedDrawerOffset, 0],\n Extrapolation.CLAMP\n );\n }\n\n return {\n transform: [{ translateX }],\n flexDirection: reverseContentDirection ? 'row-reverse' : 'row',\n };\n });\n\n const containerAnimatedProps = useAnimatedProps(() => ({\n importantForAccessibility:\n Platform.OS === 'android'\n ? isDrawerOpen.value\n ? ('no-hide-descendants' as const)\n : ('yes' as const)\n : undefined,\n }));\n\n const children =\n typeof props.children === 'function'\n ? props.children(openValue) // renderer function\n : props.children;\n\n useImperativeHandle(\n ref,\n () => ({\n openDrawer,\n closeDrawer,\n }),\n [openDrawer, closeDrawer]\n );\n\n return (\n <GestureDetector\n gesture={panGesture}\n userSelect={userSelect}\n enableContextMenu={enableContextMenu}>\n <Animated.View style={styles.main} onLayout={handleContainerLayout}>\n <GestureDetector gesture={overlayDismissGesture}>\n <Animated.View\n style={[\n drawerType === DrawerType.FRONT\n ? styles.containerOnBack\n : styles.containerInFront,\n containerStyles,\n contentContainerStyle,\n ]}\n animatedProps={containerAnimatedProps}>\n {children}\n <Animated.View\n animatedProps={overlayAnimatedProps}\n style={[styles.overlay, overlayAnimatedStyle]}\n />\n </Animated.View>\n </GestureDetector>\n <Animated.View\n pointerEvents=\"box-none\"\n animatedProps={drawerAnimatedProps}\n style={[\n styles.drawerContainer,\n drawerAnimatedStyle,\n drawerContainerStyle,\n ]}>\n <Animated.View style={dynamicDrawerStyles}>\n {renderNavigationView(openValue)}\n </Animated.View>\n </Animated.View>\n </Animated.View>\n </GestureDetector>\n );\n }\n);\n\nexport default DrawerLayout;\n\nconst styles = StyleSheet.create({\n drawerContainer: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1001,\n flexDirection: 'row',\n },\n containerInFront: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1002,\n },\n containerOnBack: {\n ...StyleSheet.absoluteFillObject,\n },\n main: {\n flex: 1,\n zIndex: 0,\n overflow: 'hidden',\n },\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n },\n});\n"]}
|
@@ -3,30 +3,50 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
|
|
3
3
|
// Similarily to the DrawerLayout component this deserves to be put in a
|
4
4
|
// separate repo. Although, keeping it here for the time being will allow us to
|
5
5
|
// move faster and fix possible issues quicker
|
6
|
-
import React, { forwardRef, useCallback, useImperativeHandle,
|
6
|
+
import React, { forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';
|
7
7
|
import { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';
|
8
8
|
import { GestureDetector } from '../handlers/gestures/GestureDetector';
|
9
|
-
import Animated, {
|
9
|
+
import Animated, { interpolate, runOnJS, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
|
10
10
|
import { I18nManager, StyleSheet, View } from 'react-native';
|
11
11
|
const DRAG_TOSS = 0.05;
|
12
|
+
var SwipeDirection;
|
13
|
+
|
14
|
+
(function (SwipeDirection) {
|
15
|
+
SwipeDirection["LEFT"] = "left";
|
16
|
+
SwipeDirection["RIGHT"] = "right";
|
17
|
+
})(SwipeDirection || (SwipeDirection = {}));
|
18
|
+
|
12
19
|
const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
|
20
|
+
const defaultProps = {
|
21
|
+
friction: 1,
|
22
|
+
overshootFriction: 1,
|
23
|
+
dragOffset: 10,
|
24
|
+
enableTrackpadTwoFingerGesture: false
|
25
|
+
};
|
13
26
|
const {
|
14
27
|
leftThreshold,
|
15
28
|
rightThreshold,
|
16
|
-
onSwipeableOpenStartDrag,
|
17
|
-
onSwipeableCloseStartDrag,
|
18
|
-
enableTrackpadTwoFingerGesture,
|
19
29
|
enabled,
|
20
30
|
containerStyle,
|
21
31
|
childrenContainerStyle,
|
22
32
|
animationOptions,
|
23
33
|
overshootLeft,
|
24
34
|
overshootRight,
|
35
|
+
testID,
|
36
|
+
children,
|
37
|
+
enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,
|
38
|
+
dragOffsetFromLeftEdge = defaultProps.dragOffset,
|
39
|
+
dragOffsetFromRightEdge = defaultProps.dragOffset,
|
40
|
+
friction = defaultProps.friction,
|
41
|
+
overshootFriction = defaultProps.overshootFriction,
|
42
|
+
onSwipeableOpenStartDrag,
|
43
|
+
onSwipeableCloseStartDrag,
|
25
44
|
onSwipeableWillOpen,
|
26
45
|
onSwipeableWillClose,
|
27
46
|
onSwipeableOpen,
|
28
47
|
onSwipeableClose,
|
29
|
-
|
48
|
+
renderLeftActions,
|
49
|
+
renderRightActions,
|
30
50
|
...remainingProps
|
31
51
|
} = props;
|
32
52
|
const rowState = useSharedValue(0);
|
@@ -34,141 +54,103 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
|
|
34
54
|
const appliedTranslation = useSharedValue(0);
|
35
55
|
const rowWidth = useSharedValue(0);
|
36
56
|
const leftWidth = useSharedValue(0);
|
37
|
-
const rightWidth = useSharedValue(0);
|
38
|
-
|
39
|
-
const
|
40
|
-
const rightActionTranslate = useSharedValue(0);
|
57
|
+
const rightWidth = useSharedValue(0); // used for synchronizing layout measurements between JS and UI
|
58
|
+
|
59
|
+
const rightOffset = useSharedValue(null);
|
41
60
|
const showLeftProgress = useSharedValue(0);
|
42
61
|
const showRightProgress = useSharedValue(0);
|
43
|
-
const
|
44
|
-
close: () => {
|
45
|
-
'worklet';
|
46
|
-
},
|
47
|
-
openLeft: () => {
|
48
|
-
'worklet';
|
49
|
-
},
|
50
|
-
openRight: () => {
|
51
|
-
'worklet';
|
52
|
-
},
|
53
|
-
reset: () => {
|
54
|
-
'worklet';
|
55
|
-
}
|
56
|
-
});
|
57
|
-
const defaultProps = {
|
58
|
-
friction: 1,
|
59
|
-
overshootFriction: 1
|
60
|
-
};
|
61
|
-
const {
|
62
|
-
friction = defaultProps.friction,
|
63
|
-
overshootFriction = defaultProps.overshootFriction
|
64
|
-
} = props;
|
65
|
-
const overshootLeftProp = overshootLeft;
|
66
|
-
const overshootRightProp = overshootRight;
|
67
|
-
const calculateCurrentOffset = useCallback(() => {
|
62
|
+
const updateRightElementWidth = useCallback(() => {
|
68
63
|
'worklet';
|
69
64
|
|
70
|
-
if (
|
71
|
-
|
72
|
-
} else if (rowState.value === -1) {
|
73
|
-
return -rowWidth.value - rightOffset.value;
|
65
|
+
if (rightOffset.value === null) {
|
66
|
+
rightOffset.value = rowWidth.value;
|
74
67
|
}
|
75
68
|
|
76
|
-
|
77
|
-
}, [
|
78
|
-
|
79
|
-
const updateAnimatedEvent = () => {
|
69
|
+
rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);
|
70
|
+
}, [rightOffset, rightWidth, rowWidth]);
|
71
|
+
const updateAnimatedEvent = useCallback(() => {
|
80
72
|
'worklet';
|
81
73
|
|
82
|
-
|
83
|
-
const
|
84
|
-
const overshootRight = overshootRightProp !== null && overshootRightProp !== void 0 ? overshootRightProp : rightWidth.value > 0;
|
74
|
+
const shouldOvershootLeft = overshootLeft !== null && overshootLeft !== void 0 ? overshootLeft : leftWidth.value > 0;
|
75
|
+
const shouldOvershootRight = overshootRight !== null && overshootRight !== void 0 ? overshootRight : rightWidth.value > 0;
|
85
76
|
const startOffset = rowState.value === 1 ? leftWidth.value : rowState.value === -1 ? -rightWidth.value : 0;
|
86
77
|
const offsetDrag = userDrag.value / friction + startOffset;
|
87
|
-
appliedTranslation.value = interpolate(offsetDrag, [-rightWidth.value - 1, -rightWidth.value, leftWidth.value, leftWidth.value + 1], [-rightWidth.value - (
|
78
|
+
appliedTranslation.value = interpolate(offsetDrag, [-rightWidth.value - 1, -rightWidth.value, leftWidth.value, leftWidth.value + 1], [-rightWidth.value - (shouldOvershootRight ? 1 / overshootFriction : 0), -rightWidth.value, leftWidth.value, leftWidth.value + (shouldOvershootLeft ? 1 / overshootFriction : 0)]);
|
88
79
|
showLeftProgress.value = leftWidth.value > 0 ? interpolate(appliedTranslation.value, [-1, 0, leftWidth.value], [0, 0, 1]) : 0;
|
89
|
-
leftActionTranslate.value = interpolate(showLeftProgress.value, [0, Number.MIN_VALUE], [-10000, 0], Extrapolation.CLAMP);
|
90
80
|
showRightProgress.value = rightWidth.value > 0 ? interpolate(appliedTranslation.value, [-rightWidth.value, 0, 1], [1, 0, 0]) : 0;
|
91
|
-
|
92
|
-
};
|
93
|
-
|
81
|
+
}, [appliedTranslation, friction, leftWidth, overshootFriction, rightWidth, rowState, showLeftProgress, showRightProgress, userDrag, overshootLeft, overshootRight]);
|
94
82
|
const dispatchImmediateEvents = useCallback((fromValue, toValue) => {
|
83
|
+
'worklet';
|
84
|
+
|
95
85
|
if (toValue > 0 && onSwipeableWillOpen) {
|
96
|
-
onSwipeableWillOpen(
|
86
|
+
runOnJS(onSwipeableWillOpen)(SwipeDirection.RIGHT);
|
97
87
|
} else if (toValue < 0 && onSwipeableWillOpen) {
|
98
|
-
onSwipeableWillOpen(
|
88
|
+
runOnJS(onSwipeableWillOpen)(SwipeDirection.LEFT);
|
99
89
|
} else if (onSwipeableWillClose) {
|
100
|
-
|
101
|
-
onSwipeableWillClose(closingDirection);
|
90
|
+
runOnJS(onSwipeableWillClose)(fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT);
|
102
91
|
}
|
103
92
|
}, [onSwipeableWillClose, onSwipeableWillOpen]);
|
104
93
|
const dispatchEndEvents = useCallback((fromValue, toValue) => {
|
94
|
+
'worklet';
|
95
|
+
|
105
96
|
if (toValue > 0 && onSwipeableOpen) {
|
106
|
-
onSwipeableOpen(
|
97
|
+
runOnJS(onSwipeableOpen)(SwipeDirection.RIGHT);
|
107
98
|
} else if (toValue < 0 && onSwipeableOpen) {
|
108
|
-
onSwipeableOpen(
|
99
|
+
runOnJS(onSwipeableOpen)(SwipeDirection.LEFT);
|
109
100
|
} else if (onSwipeableClose) {
|
110
|
-
|
111
|
-
onSwipeableClose(closingDirection, swipeableMethods.current);
|
101
|
+
runOnJS(onSwipeableClose)(fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT);
|
112
102
|
}
|
113
103
|
}, [onSwipeableClose, onSwipeableOpen]);
|
114
|
-
const
|
115
|
-
const animateRow = useCallback((fromValue, toValue, velocityX) => {
|
104
|
+
const animateRow = useCallback((toValue, velocityX) => {
|
116
105
|
'worklet';
|
117
106
|
|
118
|
-
rowState.value = Math.sign(toValue);
|
119
107
|
const translationSpringConfig = {
|
120
108
|
duration: 1000,
|
121
109
|
dampingRatio: 0.9,
|
122
110
|
stiffness: 500,
|
123
111
|
velocity: velocityX,
|
124
112
|
overshootClamping: true,
|
125
|
-
...
|
113
|
+
...animationOptions
|
126
114
|
};
|
115
|
+
const isClosing = toValue === 0;
|
116
|
+
const moveToRight = isClosing ? rowState.value < 0 : toValue > 0;
|
117
|
+
const usedWidth = isClosing ? moveToRight ? rightWidth.value : leftWidth.value : moveToRight ? leftWidth.value : rightWidth.value;
|
127
118
|
const progressSpringConfig = { ...translationSpringConfig,
|
128
|
-
|
119
|
+
restDisplacementThreshold: 0.01,
|
120
|
+
restSpeedThreshold: 0.01,
|
121
|
+
velocity: velocityX && interpolate(velocityX, [-usedWidth, usedWidth], [-1, 1])
|
129
122
|
};
|
123
|
+
const frozenRowState = rowState.value;
|
130
124
|
appliedTranslation.value = withSpring(toValue, translationSpringConfig, isFinished => {
|
131
125
|
if (isFinished) {
|
132
|
-
|
126
|
+
dispatchEndEvents(frozenRowState, toValue);
|
133
127
|
}
|
134
128
|
});
|
135
129
|
const progressTarget = toValue === 0 ? 0 : 1;
|
136
130
|
showLeftProgress.value = leftWidth.value > 0 ? withSpring(progressTarget, progressSpringConfig) : 0;
|
137
131
|
showRightProgress.value = rightWidth.value > 0 ? withSpring(progressTarget, progressSpringConfig) : 0;
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
const
|
142
|
-
nativeEvent
|
143
|
-
}) => {
|
144
|
-
rowWidth.value = nativeEvent.layout.width;
|
145
|
-
};
|
146
|
-
|
147
|
-
const {
|
148
|
-
children,
|
149
|
-
renderLeftActions,
|
150
|
-
renderRightActions,
|
151
|
-
dragOffsetFromLeftEdge = 10,
|
152
|
-
dragOffsetFromRightEdge = 10
|
153
|
-
} = props;
|
154
|
-
swipeableMethods.current = {
|
132
|
+
dispatchImmediateEvents(frozenRowState, toValue);
|
133
|
+
rowState.value = Math.sign(toValue);
|
134
|
+
}, [rowState, animationOptions, appliedTranslation, showLeftProgress, leftWidth, showRightProgress, rightWidth, dispatchImmediateEvents, dispatchEndEvents]);
|
135
|
+
const swipeableMethods = useMemo(() => ({
|
155
136
|
close() {
|
156
137
|
'worklet';
|
157
138
|
|
158
|
-
animateRow(
|
139
|
+
animateRow(0);
|
159
140
|
},
|
160
141
|
|
161
142
|
openLeft() {
|
162
143
|
'worklet';
|
163
144
|
|
164
|
-
animateRow(
|
145
|
+
animateRow(leftWidth.value);
|
165
146
|
},
|
166
147
|
|
167
148
|
openRight() {
|
168
|
-
'worklet';
|
149
|
+
'worklet'; // rightOffset and rowWidth are already much sooner than rightWidth
|
150
|
+
|
151
|
+
var _rightOffset$value;
|
169
152
|
|
170
|
-
|
171
|
-
animateRow(calculateCurrentOffset(), -rightWidth.value);
|
153
|
+
animateRow(((_rightOffset$value = rightOffset.value) !== null && _rightOffset$value !== void 0 ? _rightOffset$value : 0) - rowWidth.value);
|
172
154
|
},
|
173
155
|
|
174
156
|
reset() {
|
@@ -180,103 +162,95 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
|
|
180
162
|
rowState.value = 0;
|
181
163
|
}
|
182
164
|
|
183
|
-
};
|
184
|
-
const
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
}
|
189
|
-
const leftElement =
|
190
|
-
style: [styles.leftActions
|
191
|
-
}, renderLeftActions(showLeftProgress, appliedTranslation, swipeableMethods
|
165
|
+
}), [leftWidth, rightOffset, rowWidth, userDrag, showLeftProgress, appliedTranslation, rowState, animateRow]);
|
166
|
+
const onRowLayout = useCallback(({
|
167
|
+
nativeEvent
|
168
|
+
}) => {
|
169
|
+
rowWidth.value = nativeEvent.layout.width;
|
170
|
+
}, [rowWidth]);
|
171
|
+
const leftElement = useCallback(() => /*#__PURE__*/React.createElement(Animated.View, {
|
172
|
+
style: [styles.leftActions]
|
173
|
+
}, renderLeftActions === null || renderLeftActions === void 0 ? void 0 : renderLeftActions(showLeftProgress, appliedTranslation, swipeableMethods), /*#__PURE__*/React.createElement(View, {
|
192
174
|
onLayout: ({
|
193
175
|
nativeEvent
|
194
176
|
}) => leftWidth.value = nativeEvent.layout.x
|
195
|
-
}));
|
196
|
-
const
|
197
|
-
|
198
|
-
|
199
|
-
}]
|
200
|
-
}), [rightActionTranslate]);
|
201
|
-
const rightElement = renderRightActions && /*#__PURE__*/React.createElement(Animated.View, {
|
202
|
-
style: [styles.rightActions, rightAnimatedStyle]
|
203
|
-
}, renderRightActions(showRightProgress, appliedTranslation, swipeableMethods.current), /*#__PURE__*/React.createElement(View, {
|
177
|
+
})), [appliedTranslation, leftWidth, renderLeftActions, showLeftProgress, swipeableMethods]);
|
178
|
+
const rightElement = useCallback(() => /*#__PURE__*/React.createElement(Animated.View, {
|
179
|
+
style: [styles.rightActions]
|
180
|
+
}, renderRightActions === null || renderRightActions === void 0 ? void 0 : renderRightActions(showRightProgress, appliedTranslation, swipeableMethods), /*#__PURE__*/React.createElement(View, {
|
204
181
|
onLayout: ({
|
205
182
|
nativeEvent
|
206
|
-
}) =>
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
const handleRelease = event => {
|
183
|
+
}) => {
|
184
|
+
rightOffset.value = nativeEvent.layout.x;
|
185
|
+
}
|
186
|
+
})), [appliedTranslation, renderRightActions, rightOffset, showRightProgress, swipeableMethods]);
|
187
|
+
const handleRelease = useCallback(event => {
|
212
188
|
'worklet';
|
213
189
|
|
214
190
|
const {
|
215
191
|
velocityX
|
216
192
|
} = event;
|
217
193
|
userDrag.value = event.translationX;
|
218
|
-
|
219
|
-
const
|
220
|
-
const
|
221
|
-
const startOffsetX = calculateCurrentOffset() + userDrag.value / friction;
|
194
|
+
updateRightElementWidth();
|
195
|
+
const leftThresholdProp = leftThreshold !== null && leftThreshold !== void 0 ? leftThreshold : leftWidth.value / 2;
|
196
|
+
const rightThresholdProp = rightThreshold !== null && rightThreshold !== void 0 ? rightThreshold : rightWidth.value / 2;
|
222
197
|
const translationX = (userDrag.value + DRAG_TOSS * velocityX) / friction;
|
223
198
|
let toValue = 0;
|
224
199
|
|
225
200
|
if (rowState.value === 0) {
|
226
|
-
if (translationX >
|
201
|
+
if (translationX > leftThresholdProp) {
|
227
202
|
toValue = leftWidth.value;
|
228
|
-
} else if (translationX < -
|
203
|
+
} else if (translationX < -rightThresholdProp) {
|
229
204
|
toValue = -rightWidth.value;
|
230
205
|
}
|
231
206
|
} else if (rowState.value === 1) {
|
232
207
|
// Swiped to left
|
233
|
-
if (translationX > -
|
208
|
+
if (translationX > -leftThresholdProp) {
|
234
209
|
toValue = leftWidth.value;
|
235
210
|
}
|
236
211
|
} else {
|
237
212
|
// Swiped to right
|
238
|
-
if (translationX <
|
213
|
+
if (translationX < rightThresholdProp) {
|
239
214
|
toValue = -rightWidth.value;
|
240
215
|
}
|
241
216
|
}
|
242
217
|
|
243
|
-
animateRow(
|
244
|
-
};
|
245
|
-
|
246
|
-
const close = () => {
|
218
|
+
animateRow(toValue, velocityX / friction);
|
219
|
+
}, [animateRow, friction, leftThreshold, leftWidth, rightThreshold, rightWidth, rowState, userDrag, updateRightElementWidth]);
|
220
|
+
const close = useCallback(() => {
|
247
221
|
'worklet';
|
248
222
|
|
249
|
-
animateRow(
|
250
|
-
};
|
251
|
-
|
252
|
-
const tapGesture = Gesture.Tap().onStart(() => {
|
223
|
+
animateRow(0);
|
224
|
+
}, [animateRow]);
|
225
|
+
const dragStarted = useSharedValue(false);
|
226
|
+
const tapGesture = useMemo(() => Gesture.Tap().shouldCancelWhenOutside(true).onStart(() => {
|
253
227
|
if (rowState.value !== 0) {
|
254
228
|
close();
|
255
229
|
}
|
256
|
-
});
|
257
|
-
const panGesture = Gesture.Pan().
|
230
|
+
}), [close, rowState]);
|
231
|
+
const panGesture = useMemo(() => Gesture.Pan().enabled(enabled !== false).enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture).activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]).onStart(() => {
|
232
|
+
updateRightElementWidth();
|
233
|
+
}).onUpdate(event => {
|
258
234
|
userDrag.value = event.translationX;
|
259
|
-
const direction = rowState.value === -1 ?
|
235
|
+
const direction = rowState.value === -1 ? SwipeDirection.RIGHT : rowState.value === 1 ? SwipeDirection.LEFT : event.translationX > 0 ? SwipeDirection.RIGHT : SwipeDirection.LEFT;
|
236
|
+
|
237
|
+
if (!dragStarted.value) {
|
238
|
+
dragStarted.value = true;
|
260
239
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
240
|
+
if (rowState.value === 0 && onSwipeableOpenStartDrag) {
|
241
|
+
runOnJS(onSwipeableOpenStartDrag)(direction);
|
242
|
+
} else if (onSwipeableCloseStartDrag) {
|
243
|
+
runOnJS(onSwipeableCloseStartDrag)(direction);
|
244
|
+
}
|
265
245
|
}
|
266
246
|
|
267
247
|
updateAnimatedEvent();
|
268
248
|
}).onEnd(event => {
|
269
249
|
handleRelease(event);
|
270
|
-
})
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
}
|
275
|
-
|
276
|
-
panGesture.activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]);
|
277
|
-
tapGesture.shouldCancelWhenOutside(true);
|
278
|
-
useImperativeHandle(ref, () => swipeableMethods.current, [swipeableMethods]);
|
279
|
-
panGesture.enabled(enabled !== false);
|
250
|
+
}).onFinalize(() => {
|
251
|
+
dragStarted.value = false;
|
252
|
+
}), [dragOffsetFromLeftEdge, dragOffsetFromRightEdge, dragStarted, enableTrackpadTwoFingerGesture, enabled, handleRelease, onSwipeableCloseStartDrag, onSwipeableOpenStartDrag, rowState, updateAnimatedEvent, updateRightElementWidth, userDrag]);
|
253
|
+
useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]);
|
280
254
|
const animatedStyle = useAnimatedStyle(() => ({
|
281
255
|
transform: [{
|
282
256
|
translateX: appliedTranslation.value
|
@@ -289,7 +263,7 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
|
|
289
263
|
}, /*#__PURE__*/React.createElement(Animated.View, _extends({}, remainingProps, {
|
290
264
|
onLayout: onRowLayout,
|
291
265
|
style: [styles.container, containerStyle]
|
292
|
-
}), leftElement, rightElement, /*#__PURE__*/React.createElement(GestureDetector, {
|
266
|
+
}), leftElement(), rightElement(), /*#__PURE__*/React.createElement(GestureDetector, {
|
293
267
|
gesture: tapGesture,
|
294
268
|
touchAction: "pan-y"
|
295
269
|
}, /*#__PURE__*/React.createElement(Animated.View, {
|