@react-navigation/drawer 6.4.1 → 6.4.4
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/lib/commonjs/views/DrawerContentScrollView.js +1 -1
- package/lib/commonjs/views/DrawerContentScrollView.js.map +1 -1
- package/lib/commonjs/views/DrawerItem.js +8 -2
- package/lib/commonjs/views/DrawerItem.js.map +1 -1
- package/lib/commonjs/views/DrawerView.js +8 -1
- package/lib/commonjs/views/DrawerView.js.map +1 -1
- package/lib/commonjs/views/legacy/Drawer.js +2 -2
- package/lib/commonjs/views/legacy/Drawer.js.map +1 -1
- package/lib/commonjs/views/modern/Drawer.js +10 -7
- package/lib/commonjs/views/modern/Drawer.js.map +1 -1
- package/lib/module/views/DrawerContentScrollView.js +1 -1
- package/lib/module/views/DrawerContentScrollView.js.map +1 -1
- package/lib/module/views/DrawerItem.js +8 -2
- package/lib/module/views/DrawerItem.js.map +1 -1
- package/lib/module/views/DrawerView.js +8 -1
- package/lib/module/views/DrawerView.js.map +1 -1
- package/lib/module/views/legacy/Drawer.js +2 -2
- package/lib/module/views/legacy/Drawer.js.map +1 -1
- package/lib/module/views/modern/Drawer.js +8 -7
- package/lib/module/views/modern/Drawer.js.map +1 -1
- package/package.json +15 -15
- package/src/views/DrawerContentScrollView.tsx +1 -1
- package/src/views/DrawerItem.tsx +6 -0
- package/src/views/DrawerView.tsx +11 -1
- package/src/views/legacy/Drawer.tsx +2 -2
- package/src/views/modern/Drawer.tsx +18 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Drawer.tsx"],"names":["React","I18nManager","InteractionManager","Keyboard","Platform","StatusBar","StyleSheet","View","PanGestureHandler","State","GestureState","Animated","interpolate","runOnJS","useAnimatedGestureHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","DrawerProgressContext","Overlay","SWIPE_DISTANCE_MINIMUM","DEFAULT_DRAWER_WIDTH","minmax","value","start","end","Math","min","max","Drawer","dimensions","drawerPosition","drawerStyle","drawerType","gestureHandlerProps","hideStatusBarOnOpen","keyboardDismissMode","onClose","onOpen","open","overlayStyle","renderDrawerContent","renderSceneContent","statusBarAnimation","swipeDistanceThreshold","swipeEdgeWidth","swipeEnabled","swipeVelocityThreshold","getDrawerWidth","width","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","useCallback","hideStatusBar","hide","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","dismiss","onGestureStart","onGestureFinish","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","UNDETERMINED","toggleDrawer","velocity","translateX","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","onGestureEvent","onStart","event","ctx","startX","state","x","onActive","onEnd","nextOpen","abs","velocityX","onFinish","touchDistance","ACTIVE","drawerAnimatedStyle","distanceFromEdge","transform","isRTL","contentAnimatedStyle","progress","styles","main","flexDirection","content","OS","container","position","zIndex","create","top","bottom","maxWidth","flex","select","web","default","overflow"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n I18nManager,\n InteractionManager,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n View,\n} from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n State as GestureState,\n} from 'react-native-gesture-handler';\nimport Animated, {\n interpolate,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\n\nimport type { DrawerProps } from '../../types';\nimport DrawerProgressContext from '../../utils/DrawerProgressContext';\nimport Overlay from './Overlay';\n\nconst SWIPE_DISTANCE_MINIMUM = 5;\nconst DEFAULT_DRAWER_WIDTH = '80%';\n\nconst minmax = (value: number, start: number, end: number) => {\n 'worklet';\n\n return Math.min(Math.max(value, start), end);\n};\n\nexport default function Drawer({\n dimensions,\n drawerPosition,\n drawerStyle,\n drawerType,\n gestureHandlerProps,\n hideStatusBarOnOpen,\n keyboardDismissMode,\n onClose,\n onOpen,\n open,\n overlayStyle,\n renderDrawerContent,\n renderSceneContent,\n statusBarAnimation,\n swipeDistanceThreshold,\n swipeEdgeWidth,\n swipeEnabled,\n swipeVelocityThreshold,\n}: DrawerProps) {\n const getDrawerWidth = (): number => {\n const { width = DEFAULT_DRAWER_WIDTH } =\n StyleSheet.flatten(drawerStyle) || {};\n\n if (typeof width === 'string' && width.endsWith('%')) {\n // Try to calculate width if a percentage is given\n const percentage = Number(width.replace(/%$/, ''));\n\n if (Number.isFinite(percentage)) {\n return dimensions.width * (percentage / 100);\n }\n }\n\n return typeof width === 'number' ? width : 0;\n };\n\n const drawerWidth = getDrawerWidth();\n\n const isOpen = drawerType === 'permanent' ? true : open;\n const isRight = drawerPosition === 'right';\n\n const getDrawerTranslationX = React.useCallback(\n (open: boolean) => {\n 'worklet';\n\n if (drawerPosition === 'left') {\n return open ? 0 : -drawerWidth;\n }\n\n return open ? 0 : drawerWidth;\n },\n [drawerPosition, drawerWidth]\n );\n\n const hideStatusBar = React.useCallback(\n (hide: boolean) => {\n if (hideStatusBarOnOpen) {\n StatusBar.setHidden(hide, statusBarAnimation);\n }\n },\n [hideStatusBarOnOpen, statusBarAnimation]\n );\n\n React.useEffect(() => {\n hideStatusBar(isOpen);\n\n return () => hideStatusBar(false);\n }, [isOpen, hideStatusBarOnOpen, statusBarAnimation, hideStatusBar]);\n\n const interactionHandleRef = React.useRef<number | null>(null);\n\n const startInteraction = () => {\n interactionHandleRef.current = InteractionManager.createInteractionHandle();\n };\n\n const endInteraction = () => {\n if (interactionHandleRef.current != null) {\n InteractionManager.clearInteractionHandle(interactionHandleRef.current);\n interactionHandleRef.current = null;\n }\n };\n\n const hideKeyboard = () => {\n if (keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n };\n\n const onGestureStart = () => {\n startInteraction();\n hideKeyboard();\n hideStatusBar(true);\n };\n\n const onGestureFinish = () => {\n endInteraction();\n };\n\n // FIXME: Currently hitSlop is broken when on Android when drawer is on right\n // https://github.com/software-mansion/react-native-gesture-handler/issues/569\n const hitSlop = isRight\n ? // Extend hitSlop to the side of the screen when drawer is closed\n // This lets the user drag the drawer from the side of the screen\n { right: 0, width: isOpen ? undefined : swipeEdgeWidth }\n : { left: 0, width: isOpen ? undefined : swipeEdgeWidth };\n\n const touchStartX = useSharedValue(0);\n const touchX = useSharedValue(0);\n const translationX = useSharedValue(getDrawerTranslationX(open));\n const gestureState = useSharedValue<GestureState>(GestureState.UNDETERMINED);\n\n const toggleDrawer = React.useCallback(\n (open: boolean, velocity?: number) => {\n 'worklet';\n\n const translateX = getDrawerTranslationX(open);\n\n touchStartX.value = 0;\n touchX.value = 0;\n translationX.value = withSpring(\n translateX,\n {\n velocity,\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n },\n () => {\n if (translationX.value === getDrawerTranslationX(true)) {\n runOnJS(onOpen)();\n } else if (translationX.value === getDrawerTranslationX(false)) {\n runOnJS(onClose)();\n }\n }\n );\n },\n [getDrawerTranslationX, onClose, onOpen, touchStartX, touchX, translationX]\n );\n\n React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);\n\n const onGestureEvent = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n { startX: number }\n >({\n onStart: (event, ctx) => {\n ctx.startX = translationX.value;\n gestureState.value = event.state;\n touchStartX.value = event.x;\n\n runOnJS(onGestureStart)();\n },\n onActive: (event, ctx) => {\n touchX.value = event.x;\n translationX.value = ctx.startX + event.translationX;\n gestureState.value = event.state;\n },\n onEnd: (event) => {\n gestureState.value = event.state;\n\n const nextOpen =\n (Math.abs(event.translationX) > SWIPE_DISTANCE_MINIMUM &&\n Math.abs(event.translationX) > swipeVelocityThreshold) ||\n Math.abs(event.translationX) > swipeDistanceThreshold\n ? drawerPosition === 'left'\n ? // If swiped to right, open the drawer, otherwise close it\n (event.velocityX === 0 ? event.translationX : event.velocityX) > 0\n : // If swiped to left, open the drawer, otherwise close it\n (event.velocityX === 0 ? event.translationX : event.velocityX) < 0\n : open;\n\n toggleDrawer(nextOpen, event.velocityX);\n },\n onFinish: () => {\n runOnJS(onGestureFinish)();\n },\n });\n\n const translateX = useDerivedValue(() => {\n // Comment stolen from react-native-gesture-handler/DrawerLayout\n //\n // While closing the drawer when user starts gesture outside of its area (in greyed\n // out part of the window), we want the drawer to follow only once finger reaches the\n // edge of the drawer.\n // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by\n // dots. The touch gesture starts at '*' and moves left, touch path is indicated by\n // an arrow pointing left\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 // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n //\n // For the above to work properly we define animated value that will keep start position\n // of the gesture. Then we use that value to calculate how much we need to subtract from\n // the translationX. If the gesture started on the greyed out area we take the distance from the\n // edge of the drawer to the start position. Otherwise we don't subtract at all and the\n // drawer be pulled back as soon as you start the pan.\n //\n // This is used only when drawerType is \"front\"\n const touchDistance =\n drawerType === 'front' && gestureState.value === GestureState.ACTIVE\n ? minmax(\n drawerPosition === 'left'\n ? touchStartX.value - drawerWidth\n : dimensions.width - drawerWidth - touchStartX.value,\n 0,\n dimensions.width\n )\n : 0;\n\n const translateX =\n drawerPosition === 'left'\n ? minmax(translationX.value + touchDistance, -drawerWidth, 0)\n : minmax(translationX.value - touchDistance, 0, drawerWidth);\n\n return translateX;\n });\n\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n const distanceFromEdge = dimensions.width - drawerWidth;\n\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The drawer stays in place when `drawerType` is `back`\n (drawerType === 'back' ? 0 : translateX.value) +\n (drawerPosition === 'left'\n ? I18nManager.isRTL\n ? -distanceFromEdge\n : 0\n : I18nManager.isRTL\n ? 0\n : distanceFromEdge),\n },\n ],\n };\n });\n\n const contentAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The screen content stays in place when `drawerType` is `front`\n drawerType === 'front'\n ? 0\n : translateX.value +\n drawerWidth * (drawerPosition === 'left' ? 1 : -1),\n },\n ],\n };\n });\n\n const progress = useDerivedValue(() => {\n return drawerType === 'permanent'\n ? 1\n : interpolate(\n translateX.value,\n [getDrawerTranslationX(false), getDrawerTranslationX(true)],\n [0, 1]\n );\n });\n\n return (\n <DrawerProgressContext.Provider value={progress}>\n <PanGestureHandler\n activeOffsetX={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}\n failOffsetY={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}\n hitSlop={hitSlop}\n enabled={drawerType !== 'permanent' && swipeEnabled}\n onGestureEvent={onGestureEvent}\n {...gestureHandlerProps}\n >\n {/* Immediate child of gesture handler needs to be an Animated.View */}\n <Animated.View\n style={[\n styles.main,\n {\n flexDirection:\n drawerType === 'permanent' && !isRight ? 'row-reverse' : 'row',\n },\n ]}\n >\n <Animated.View style={[styles.content, contentAnimatedStyle]}>\n <View\n accessibilityElementsHidden={isOpen && drawerType !== 'permanent'}\n importantForAccessibility={\n isOpen && drawerType !== 'permanent'\n ? 'no-hide-descendants'\n : 'auto'\n }\n style={styles.content}\n >\n {renderSceneContent()}\n </View>\n {drawerType !== 'permanent' ? (\n <Overlay\n progress={progress}\n onPress={() => toggleDrawer(false)}\n style={overlayStyle}\n />\n ) : null}\n </Animated.View>\n <Animated.View\n accessibilityViewIsModal={isOpen && drawerType !== 'permanent'}\n removeClippedSubviews={Platform.OS !== 'ios'}\n style={[\n styles.container,\n {\n position: drawerType === 'permanent' ? 'relative' : 'absolute',\n zIndex: drawerType === 'back' ? -1 : 0,\n },\n drawerAnimatedStyle,\n drawerStyle as any,\n ]}\n >\n {renderDrawerContent()}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </DrawerProgressContext.Provider>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n top: 0,\n bottom: 0,\n maxWidth: '100%',\n width: DEFAULT_DRAWER_WIDTH,\n },\n content: {\n flex: 1,\n },\n main: {\n flex: 1,\n ...Platform.select({\n // FIXME: We need to hide `overflowX` on Web so the translated content doesn't show offscreen.\n // But adding `overflowX: 'hidden'` prevents content from collapsing the URL bar.\n web: null,\n default: { overflow: 'hidden' },\n }),\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Drawer.tsx"],"names":["React","I18nManager","InteractionManager","Keyboard","Platform","StatusBar","StyleSheet","View","PanGestureHandler","State","GestureState","Animated","interpolate","runOnJS","useAnimatedGestureHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","DrawerProgressContext","Overlay","SWIPE_DISTANCE_MINIMUM","DEFAULT_DRAWER_WIDTH","minmax","value","start","end","Math","min","max","Drawer","dimensions","drawerPosition","drawerStyle","drawerType","gestureHandlerProps","hideStatusBarOnOpen","keyboardDismissMode","onClose","onOpen","open","overlayStyle","renderDrawerContent","renderSceneContent","statusBarAnimation","swipeDistanceThreshold","swipeEdgeWidth","swipeEnabled","swipeVelocityThreshold","getDrawerWidth","width","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","useCallback","hideStatusBar","hide","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","dismiss","onGestureStart","onGestureFinish","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","UNDETERMINED","toggleDrawer","velocity","translateX","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","onGestureEvent","onStart","event","ctx","startX","state","x","onActive","onEnd","nextOpen","abs","velocityX","onFinish","touchDistance","ACTIVE","isRTL","getConstants","drawerAnimatedStyle","distanceFromEdge","transform","contentAnimatedStyle","progress","styles","main","flexDirection","content","OS","container","position","zIndex","create","top","bottom","maxWidth","flex","select","web","default","overflow"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n I18nManager,\n InteractionManager,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n View,\n} from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n State as GestureState,\n} from 'react-native-gesture-handler';\nimport Animated, {\n interpolate,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\n\nimport type { DrawerProps } from '../../types';\nimport DrawerProgressContext from '../../utils/DrawerProgressContext';\nimport Overlay from './Overlay';\n\nconst SWIPE_DISTANCE_MINIMUM = 5;\nconst DEFAULT_DRAWER_WIDTH = '80%';\n\nconst minmax = (value: number, start: number, end: number) => {\n 'worklet';\n\n return Math.min(Math.max(value, start), end);\n};\n\nexport default function Drawer({\n dimensions,\n drawerPosition,\n drawerStyle,\n drawerType,\n gestureHandlerProps,\n hideStatusBarOnOpen,\n keyboardDismissMode,\n onClose,\n onOpen,\n open,\n overlayStyle,\n renderDrawerContent,\n renderSceneContent,\n statusBarAnimation,\n swipeDistanceThreshold,\n swipeEdgeWidth,\n swipeEnabled,\n swipeVelocityThreshold,\n}: DrawerProps) {\n const getDrawerWidth = (): number => {\n const { width = DEFAULT_DRAWER_WIDTH } =\n StyleSheet.flatten(drawerStyle) || {};\n\n if (typeof width === 'string' && width.endsWith('%')) {\n // Try to calculate width if a percentage is given\n const percentage = Number(width.replace(/%$/, ''));\n\n if (Number.isFinite(percentage)) {\n return dimensions.width * (percentage / 100);\n }\n }\n\n return typeof width === 'number' ? width : 0;\n };\n\n const drawerWidth = getDrawerWidth();\n\n const isOpen = drawerType === 'permanent' ? true : open;\n const isRight = drawerPosition === 'right';\n\n const getDrawerTranslationX = React.useCallback(\n (open: boolean) => {\n 'worklet';\n\n if (drawerPosition === 'left') {\n return open ? 0 : -drawerWidth;\n }\n\n return open ? 0 : drawerWidth;\n },\n [drawerPosition, drawerWidth]\n );\n\n const hideStatusBar = React.useCallback(\n (hide: boolean) => {\n if (hideStatusBarOnOpen) {\n StatusBar.setHidden(hide, statusBarAnimation);\n }\n },\n [hideStatusBarOnOpen, statusBarAnimation]\n );\n\n React.useEffect(() => {\n hideStatusBar(isOpen);\n\n return () => hideStatusBar(false);\n }, [isOpen, hideStatusBarOnOpen, statusBarAnimation, hideStatusBar]);\n\n const interactionHandleRef = React.useRef<number | null>(null);\n\n const startInteraction = () => {\n interactionHandleRef.current = InteractionManager.createInteractionHandle();\n };\n\n const endInteraction = () => {\n if (interactionHandleRef.current != null) {\n InteractionManager.clearInteractionHandle(interactionHandleRef.current);\n interactionHandleRef.current = null;\n }\n };\n\n const hideKeyboard = () => {\n if (keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n };\n\n const onGestureStart = () => {\n startInteraction();\n hideKeyboard();\n hideStatusBar(true);\n };\n\n const onGestureFinish = () => {\n endInteraction();\n };\n\n // FIXME: Currently hitSlop is broken when on Android when drawer is on right\n // https://github.com/software-mansion/react-native-gesture-handler/issues/569\n const hitSlop = isRight\n ? // Extend hitSlop to the side of the screen when drawer is closed\n // This lets the user drag the drawer from the side of the screen\n { right: 0, width: isOpen ? undefined : swipeEdgeWidth }\n : { left: 0, width: isOpen ? undefined : swipeEdgeWidth };\n\n const touchStartX = useSharedValue(0);\n const touchX = useSharedValue(0);\n const translationX = useSharedValue(getDrawerTranslationX(open));\n const gestureState = useSharedValue<GestureState>(GestureState.UNDETERMINED);\n\n const toggleDrawer = React.useCallback(\n (open: boolean, velocity?: number) => {\n 'worklet';\n\n const translateX = getDrawerTranslationX(open);\n\n touchStartX.value = 0;\n touchX.value = 0;\n translationX.value = withSpring(translateX, {\n velocity,\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n });\n\n if (open) {\n runOnJS(onOpen)();\n } else {\n runOnJS(onClose)();\n }\n },\n [getDrawerTranslationX, onClose, onOpen, touchStartX, touchX, translationX]\n );\n\n React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);\n\n const onGestureEvent = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n { startX: number }\n >({\n onStart: (event, ctx) => {\n ctx.startX = translationX.value;\n gestureState.value = event.state;\n touchStartX.value = event.x;\n\n runOnJS(onGestureStart)();\n },\n onActive: (event, ctx) => {\n touchX.value = event.x;\n translationX.value = ctx.startX + event.translationX;\n gestureState.value = event.state;\n },\n onEnd: (event) => {\n gestureState.value = event.state;\n\n const nextOpen =\n (Math.abs(event.translationX) > SWIPE_DISTANCE_MINIMUM &&\n Math.abs(event.translationX) > swipeVelocityThreshold) ||\n Math.abs(event.translationX) > swipeDistanceThreshold\n ? drawerPosition === 'left'\n ? // If swiped to right, open the drawer, otherwise close it\n (event.velocityX === 0 ? event.translationX : event.velocityX) > 0\n : // If swiped to left, open the drawer, otherwise close it\n (event.velocityX === 0 ? event.translationX : event.velocityX) < 0\n : open;\n\n toggleDrawer(nextOpen, event.velocityX);\n },\n onFinish: () => {\n runOnJS(onGestureFinish)();\n },\n });\n\n const translateX = useDerivedValue(() => {\n // Comment stolen from react-native-gesture-handler/DrawerLayout\n //\n // While closing the drawer when user starts gesture outside of its area (in greyed\n // out part of the window), we want the drawer to follow only once finger reaches the\n // edge of the drawer.\n // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by\n // dots. The touch gesture starts at '*' and moves left, touch path is indicated by\n // an arrow pointing left\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 // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n //\n // For the above to work properly we define animated value that will keep start position\n // of the gesture. Then we use that value to calculate how much we need to subtract from\n // the translationX. If the gesture started on the greyed out area we take the distance from the\n // edge of the drawer to the start position. Otherwise we don't subtract at all and the\n // drawer be pulled back as soon as you start the pan.\n //\n // This is used only when drawerType is \"front\"\n const touchDistance =\n drawerType === 'front' && gestureState.value === GestureState.ACTIVE\n ? minmax(\n drawerPosition === 'left'\n ? touchStartX.value - drawerWidth\n : dimensions.width - drawerWidth - touchStartX.value,\n 0,\n dimensions.width\n )\n : 0;\n\n const translateX =\n drawerPosition === 'left'\n ? minmax(translationX.value + touchDistance, -drawerWidth, 0)\n : minmax(translationX.value - touchDistance, 0, drawerWidth);\n\n return translateX;\n });\n\n const isRTL = I18nManager.getConstants().isRTL;\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n const distanceFromEdge = dimensions.width - drawerWidth;\n\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The drawer stays in place when `drawerType` is `back`\n (drawerType === 'back' ? 0 : translateX.value) +\n (drawerPosition === 'left'\n ? isRTL\n ? -distanceFromEdge\n : 0\n : isRTL\n ? 0\n : distanceFromEdge),\n },\n ],\n };\n });\n\n const contentAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform:\n drawerType === 'permanent'\n ? // Reanimated needs the property to be present, but it results in Browser bug\n // https://bugs.chromium.org/p/chromium/issues/detail?id=20574\n []\n : [\n {\n translateX:\n // The screen content stays in place when `drawerType` is `front`\n drawerType === 'front'\n ? 0\n : translateX.value +\n drawerWidth * (drawerPosition === 'left' ? 1 : -1),\n },\n ],\n };\n });\n\n const progress = useDerivedValue(() => {\n return drawerType === 'permanent'\n ? 1\n : interpolate(\n translateX.value,\n [getDrawerTranslationX(false), getDrawerTranslationX(true)],\n [0, 1]\n );\n });\n\n return (\n <DrawerProgressContext.Provider value={progress}>\n <PanGestureHandler\n activeOffsetX={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}\n failOffsetY={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}\n hitSlop={hitSlop}\n enabled={drawerType !== 'permanent' && swipeEnabled}\n onGestureEvent={onGestureEvent}\n {...gestureHandlerProps}\n >\n {/* Immediate child of gesture handler needs to be an Animated.View */}\n <Animated.View\n style={[\n styles.main,\n {\n flexDirection:\n drawerType === 'permanent' && !isRight ? 'row-reverse' : 'row',\n },\n ]}\n >\n <Animated.View style={[styles.content, contentAnimatedStyle]}>\n <View\n accessibilityElementsHidden={isOpen && drawerType !== 'permanent'}\n importantForAccessibility={\n isOpen && drawerType !== 'permanent'\n ? 'no-hide-descendants'\n : 'auto'\n }\n style={styles.content}\n >\n {renderSceneContent()}\n </View>\n {drawerType !== 'permanent' ? (\n <Overlay\n progress={progress}\n onPress={() => toggleDrawer(false)}\n style={overlayStyle}\n />\n ) : null}\n </Animated.View>\n <Animated.View\n accessibilityViewIsModal={isOpen && drawerType !== 'permanent'}\n removeClippedSubviews={Platform.OS !== 'ios'}\n style={[\n styles.container,\n {\n position: drawerType === 'permanent' ? 'relative' : 'absolute',\n zIndex: drawerType === 'back' ? -1 : 0,\n },\n drawerAnimatedStyle,\n drawerStyle as any,\n ]}\n >\n {renderDrawerContent()}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </DrawerProgressContext.Provider>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n top: 0,\n bottom: 0,\n maxWidth: '100%',\n width: DEFAULT_DRAWER_WIDTH,\n },\n content: {\n flex: 1,\n },\n main: {\n flex: 1,\n ...Platform.select({\n // FIXME: We need to hide `overflowX` on Web so the translated content doesn't show offscreen.\n // But adding `overflowX: 'hidden'` prevents content from collapsing the URL bar.\n web: null,\n default: { overflow: 'hidden' },\n }),\n },\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/drawer",
|
|
3
3
|
"description": "Drawer navigator component with animated transitions and gesturess",
|
|
4
|
-
"version": "6.4.
|
|
4
|
+
"version": "6.4.4",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native-component",
|
|
7
7
|
"react-component",
|
|
@@ -37,28 +37,28 @@
|
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
|
-
"
|
|
40
|
+
"prepack": "bob build",
|
|
41
41
|
"clean": "del lib"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@react-navigation/elements": "^1.3.
|
|
45
|
-
"color": "^
|
|
44
|
+
"@react-navigation/elements": "^1.3.5",
|
|
45
|
+
"color": "^4.2.3",
|
|
46
46
|
"warn-once": "^0.1.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@react-navigation/native": "^6.0.
|
|
49
|
+
"@react-navigation/native": "^6.0.12",
|
|
50
50
|
"@testing-library/react-native": "^7.2.0",
|
|
51
|
-
"@types/react": "^17.0.
|
|
52
|
-
"@types/react-native": "~0.
|
|
51
|
+
"@types/react": "^17.0.47",
|
|
52
|
+
"@types/react-native": "~0.68.1",
|
|
53
53
|
"del-cli": "^3.0.1",
|
|
54
|
-
"react": "17.0.
|
|
55
|
-
"react-native": "~0.
|
|
54
|
+
"react": "17.0.2",
|
|
55
|
+
"react-native": "~0.68.2",
|
|
56
56
|
"react-native-builder-bob": "^0.18.1",
|
|
57
|
-
"react-native-gesture-handler": "~2.2.
|
|
58
|
-
"react-native-reanimated": "~2.
|
|
59
|
-
"react-native-safe-area-context": "
|
|
60
|
-
"react-native-screens": "~3.
|
|
61
|
-
"typescript": "^4.
|
|
57
|
+
"react-native-gesture-handler": "~2.2.1",
|
|
58
|
+
"react-native-reanimated": "~2.8.0",
|
|
59
|
+
"react-native-safe-area-context": "4.2.4",
|
|
60
|
+
"react-native-screens": "~3.11.1",
|
|
61
|
+
"typescript": "^4.7.4"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"@react-navigation/native": "^6.0.0",
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
]
|
|
84
84
|
]
|
|
85
85
|
},
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "83aa392f1e13796d609c9df0afa44699ce4bacae"
|
|
87
87
|
}
|
|
@@ -20,7 +20,7 @@ function DrawerContentScrollView(
|
|
|
20
20
|
const drawerPosition = React.useContext(DrawerPositionContext);
|
|
21
21
|
const insets = useSafeAreaInsets();
|
|
22
22
|
|
|
23
|
-
const isRight = I18nManager.isRTL
|
|
23
|
+
const isRight = I18nManager.getConstants().isRTL
|
|
24
24
|
? drawerPosition === 'left'
|
|
25
25
|
: drawerPosition === 'right';
|
|
26
26
|
|
package/src/views/DrawerItem.tsx
CHANGED
|
@@ -88,6 +88,8 @@ const LinkPressable = ({
|
|
|
88
88
|
style,
|
|
89
89
|
onPress,
|
|
90
90
|
onLongPress,
|
|
91
|
+
onPressIn,
|
|
92
|
+
onPressOut,
|
|
91
93
|
to,
|
|
92
94
|
accessibilityRole,
|
|
93
95
|
...rest
|
|
@@ -115,7 +117,11 @@ const LinkPressable = ({
|
|
|
115
117
|
onPress?.(e);
|
|
116
118
|
}
|
|
117
119
|
}}
|
|
120
|
+
// types for PressableProps and TextProps are incompatible with each other by `null` so we
|
|
121
|
+
// can't use {...rest} for these 3 props
|
|
118
122
|
onLongPress={onLongPress ?? undefined}
|
|
123
|
+
onPressIn={onPressIn ?? undefined}
|
|
124
|
+
onPressOut={onPressOut ?? undefined}
|
|
119
125
|
>
|
|
120
126
|
{children}
|
|
121
127
|
</Link>
|
package/src/views/DrawerView.tsx
CHANGED
|
@@ -84,6 +84,16 @@ function DrawerViewBase({
|
|
|
84
84
|
// @ts-expect-error: the type definitions are incomplete
|
|
85
85
|
useLegacyImplementation = !Reanimated.isConfigured?.(),
|
|
86
86
|
}: Props) {
|
|
87
|
+
// Reanimated v3 dropped legacy v1 syntax
|
|
88
|
+
const legacyImplemenationNotAvailable =
|
|
89
|
+
require('react-native-reanimated').abs === undefined;
|
|
90
|
+
|
|
91
|
+
if (useLegacyImplementation && legacyImplemenationNotAvailable) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
'The `useLegacyImplementation` prop is not available with Reanimated 3 as it no longer includes support for Reanimated 1 legacy API. Remove the `useLegacyImplementation` prop from `Drawer.Navigator` to be able to use it.'
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
87
97
|
const Drawer: React.ComponentType<DrawerProps> = useLegacyImplementation
|
|
88
98
|
? require('./legacy/Drawer').default
|
|
89
99
|
: require('./modern/Drawer').default;
|
|
@@ -91,7 +101,7 @@ function DrawerViewBase({
|
|
|
91
101
|
const focusedRouteKey = state.routes[state.index].key;
|
|
92
102
|
const {
|
|
93
103
|
drawerHideStatusBarOnOpen = false,
|
|
94
|
-
drawerPosition = I18nManager.isRTL ? 'right' : 'left',
|
|
104
|
+
drawerPosition = I18nManager.getConstants().isRTL ? 'right' : 'left',
|
|
95
105
|
drawerStatusBarAnimation = 'slide',
|
|
96
106
|
drawerStyle,
|
|
97
107
|
drawerType = Platform.select({ ios: 'slide', default: 'front' }),
|
|
@@ -502,7 +502,7 @@ export default class DrawerView extends React.Component<DrawerProps> {
|
|
|
502
502
|
|
|
503
503
|
const drawerTranslateX =
|
|
504
504
|
drawerType === 'back'
|
|
505
|
-
? I18nManager.isRTL
|
|
505
|
+
? I18nManager.getConstants().isRTL
|
|
506
506
|
? multiply(
|
|
507
507
|
sub(this.containerWidth, this.drawerWidth),
|
|
508
508
|
isRight ? 1 : -1
|
|
@@ -513,7 +513,7 @@ export default class DrawerView extends React.Component<DrawerProps> {
|
|
|
513
513
|
const offset =
|
|
514
514
|
drawerType === 'back'
|
|
515
515
|
? 0
|
|
516
|
-
: I18nManager.isRTL
|
|
516
|
+
: I18nManager.getConstants().isRTL
|
|
517
517
|
? '100%'
|
|
518
518
|
: multiply(this.drawerWidth, -1);
|
|
519
519
|
|
|
@@ -155,25 +155,21 @@ export default function Drawer({
|
|
|
155
155
|
|
|
156
156
|
touchStartX.value = 0;
|
|
157
157
|
touchX.value = 0;
|
|
158
|
-
translationX.value = withSpring(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
()
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
runOnJS(onClose)();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
);
|
|
158
|
+
translationX.value = withSpring(translateX, {
|
|
159
|
+
velocity,
|
|
160
|
+
stiffness: 1000,
|
|
161
|
+
damping: 500,
|
|
162
|
+
mass: 3,
|
|
163
|
+
overshootClamping: true,
|
|
164
|
+
restDisplacementThreshold: 0.01,
|
|
165
|
+
restSpeedThreshold: 0.01,
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
if (open) {
|
|
169
|
+
runOnJS(onOpen)();
|
|
170
|
+
} else {
|
|
171
|
+
runOnJS(onClose)();
|
|
172
|
+
}
|
|
177
173
|
},
|
|
178
174
|
[getDrawerTranslationX, onClose, onOpen, touchStartX, touchX, translationX]
|
|
179
175
|
);
|
|
@@ -262,6 +258,7 @@ export default function Drawer({
|
|
|
262
258
|
return translateX;
|
|
263
259
|
});
|
|
264
260
|
|
|
261
|
+
const isRTL = I18nManager.getConstants().isRTL;
|
|
265
262
|
const drawerAnimatedStyle = useAnimatedStyle(() => {
|
|
266
263
|
const distanceFromEdge = dimensions.width - drawerWidth;
|
|
267
264
|
|
|
@@ -277,10 +274,10 @@ export default function Drawer({
|
|
|
277
274
|
// The drawer stays in place when `drawerType` is `back`
|
|
278
275
|
(drawerType === 'back' ? 0 : translateX.value) +
|
|
279
276
|
(drawerPosition === 'left'
|
|
280
|
-
?
|
|
277
|
+
? isRTL
|
|
281
278
|
? -distanceFromEdge
|
|
282
279
|
: 0
|
|
283
|
-
:
|
|
280
|
+
: isRTL
|
|
284
281
|
? 0
|
|
285
282
|
: distanceFromEdge),
|
|
286
283
|
},
|