@react-navigation/drawer 6.3.0 → 6.3.3

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.
@@ -13,7 +13,7 @@ var React = _interopRequireWildcard(require("react"));
13
13
 
14
14
  var _reactNative = require("react-native");
15
15
 
16
- var _reactNativeReanimated = _interopRequireDefault(require("react-native-reanimated"));
16
+ var Reanimated = _interopRequireWildcard(require("react-native-reanimated"));
17
17
 
18
18
  var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
19
19
 
@@ -61,7 +61,7 @@ const getDefaultDrawerWidth = _ref => {
61
61
  const GestureHandlerWrapper = _GestureHandler.GestureHandlerRootView !== null && _GestureHandler.GestureHandlerRootView !== void 0 ? _GestureHandler.GestureHandlerRootView : _reactNative.View;
62
62
 
63
63
  function DrawerViewBase(_ref2) {
64
- var _Animated$isConfigure;
64
+ var _Reanimated$isConfigu;
65
65
 
66
66
  let {
67
67
  state,
@@ -70,11 +70,9 @@ function DrawerViewBase(_ref2) {
70
70
  defaultStatus,
71
71
  drawerContent = props => /*#__PURE__*/React.createElement(_DrawerContent.default, props),
72
72
  detachInactiveScreens = _reactNative.Platform.OS === 'web' || _reactNative.Platform.OS === 'android' || _reactNative.Platform.OS === 'ios',
73
- // Running in chrome debugger
74
- // @ts-expect-error
75
- useLegacyImplementation = !global.nativeCallSyncHook || // Reanimated 2 is not configured
73
+ // Reanimated 2 is not configured
76
74
  // @ts-expect-error: the type definitions are incomplete
77
- !((_Animated$isConfigure = _reactNativeReanimated.default.isConfigured) !== null && _Animated$isConfigure !== void 0 && _Animated$isConfigure.call(_reactNativeReanimated.default))
75
+ useLegacyImplementation = !((_Reanimated$isConfigu = Reanimated.isConfigured) !== null && _Reanimated$isConfigu !== void 0 && _Reanimated$isConfigu.call(Reanimated))
78
76
  } = _ref2;
79
77
  const Drawer = useLegacyImplementation ? require('./legacy/Drawer').default : require('./modern/Drawer').default;
80
78
  const focusedRouteKey = state.routes[state.index].key;
@@ -1 +1 @@
1
- {"version":3,"sources":["DrawerView.tsx"],"names":["getDefaultDrawerWidth","height","width","smallerAxisSize","Math","min","isLandscape","isTablet","appBarHeight","Platform","OS","maxWidth","GestureHandlerWrapper","GestureHandlerRootView","View","DrawerViewBase","state","navigation","descriptors","defaultStatus","drawerContent","props","detachInactiveScreens","useLegacyImplementation","global","nativeCallSyncHook","Animated","isConfigured","Drawer","require","default","focusedRouteKey","routes","index","key","drawerHideStatusBarOnOpen","drawerPosition","I18nManager","isRTL","drawerStatusBarAnimation","drawerStyle","drawerType","select","ios","gestureHandlerProps","keyboardDismissMode","overlayColor","swipeEdgeWidth","swipeEnabled","swipeMinDistance","options","loaded","setLoaded","React","useState","includes","dimensions","colors","drawerStatus","handleDrawerOpen","useCallback","dispatch","DrawerActions","openDrawer","target","handleDrawerClose","closeDrawer","useEffect","handleHardwareBack","isFocused","handleEscape","e","subscription","BackHandler","addEventListener","document","body","remove","removeEventListener","renderDrawerContent","renderSceneContent","styles","content","map","route","descriptor","lazy","unmountOnBlur","header","layout","name","headerLeft","sceneContainerStyle","StyleSheet","absoluteFill","zIndex","headerShown","headerTransparent","headerStatusBarHeight","render","backgroundColor","card","borderRightColor","border","borderRightWidth","hairlineWidth","borderLeftColor","borderLeftWidth","DrawerView","rest","create","flex"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport {\n DrawerActions,\n DrawerNavigationState,\n DrawerStatus,\n ParamListBase,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n BackHandler,\n I18nManager,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaFrame } from 'react-native-safe-area-context';\n\nimport type {\n DrawerContentComponentProps,\n DrawerDescriptorMap,\n DrawerHeaderProps,\n DrawerNavigationConfig,\n DrawerNavigationHelpers,\n DrawerNavigationProp,\n DrawerProps,\n} from '../types';\nimport DrawerPositionContext from '../utils/DrawerPositionContext';\nimport DrawerStatusContext from '../utils/DrawerStatusContext';\nimport getDrawerStatusFromState from '../utils/getDrawerStatusFromState';\nimport DrawerContent from './DrawerContent';\nimport DrawerToggleButton from './DrawerToggleButton';\nimport { GestureHandlerRootView } from './GestureHandler';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\n\ntype Props = DrawerNavigationConfig & {\n defaultStatus: DrawerStatus;\n state: DrawerNavigationState<ParamListBase>;\n navigation: DrawerNavigationHelpers;\n descriptors: DrawerDescriptorMap;\n};\n\nconst getDefaultDrawerWidth = ({\n height,\n width,\n}: {\n height: number;\n width: number;\n}) => {\n /*\n * Default drawer width is screen width - header height\n * with a max width of 280 on mobile and 320 on tablet\n * https://material.io/components/navigation-drawer\n */\n const smallerAxisSize = Math.min(height, width);\n const isLandscape = width > height;\n const isTablet = smallerAxisSize >= 600;\n const appBarHeight = Platform.OS === 'ios' ? (isLandscape ? 32 : 44) : 56;\n const maxWidth = isTablet ? 320 : 280;\n\n return Math.min(smallerAxisSize - appBarHeight, maxWidth);\n};\n\nconst GestureHandlerWrapper = GestureHandlerRootView ?? View;\n\nfunction DrawerViewBase({\n state,\n navigation,\n descriptors,\n defaultStatus,\n drawerContent = (props: DrawerContentComponentProps) => (\n <DrawerContent {...props} />\n ),\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n // Running in chrome debugger\n // @ts-expect-error\n useLegacyImplementation = !global.nativeCallSyncHook ||\n // Reanimated 2 is not configured\n // @ts-expect-error: the type definitions are incomplete\n !Animated.isConfigured?.(),\n}: Props) {\n const Drawer: React.ComponentType<DrawerProps> = useLegacyImplementation\n ? require('./legacy/Drawer').default\n : require('./modern/Drawer').default;\n\n const focusedRouteKey = state.routes[state.index].key;\n const {\n drawerHideStatusBarOnOpen = false,\n drawerPosition = I18nManager.isRTL ? 'right' : 'left',\n drawerStatusBarAnimation = 'slide',\n drawerStyle,\n drawerType = Platform.select({ ios: 'slide', default: 'front' }),\n gestureHandlerProps,\n keyboardDismissMode = 'on-drag',\n overlayColor = 'rgba(0, 0, 0, 0.5)',\n swipeEdgeWidth = 32,\n swipeEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n swipeMinDistance = 60,\n } = descriptors[focusedRouteKey].options;\n\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n\n const dimensions = useSafeAreaFrame();\n\n const { colors } = useTheme();\n\n const drawerStatus = getDrawerStatusFromState(state);\n\n const handleDrawerOpen = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.openDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n const handleDrawerClose = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.closeDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n React.useEffect(() => {\n if (drawerStatus === defaultStatus || drawerType === 'permanent') {\n return;\n }\n\n const handleHardwareBack = () => {\n // We shouldn't handle the back button if the parent screen isn't focused\n // This will avoid the drawer overriding event listeners from a focused screen\n if (!navigation.isFocused()) {\n return false;\n }\n\n if (defaultStatus === 'open') {\n handleDrawerOpen();\n } else {\n handleDrawerClose();\n }\n\n return true;\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleHardwareBack();\n }\n };\n\n // We only add the listeners when drawer opens\n // This way we can make sure that the listener is added as late as possible\n // This will make sure that our handler will run first when back button is pressed\n const subscription = BackHandler.addEventListener(\n 'hardwareBackPress',\n handleHardwareBack\n );\n\n if (Platform.OS === 'web') {\n document?.body?.addEventListener?.('keyup', handleEscape);\n }\n\n return () => {\n subscription.remove();\n\n if (Platform.OS === 'web') {\n document?.body?.removeEventListener?.('keyup', handleEscape);\n }\n };\n }, [\n defaultStatus,\n drawerStatus,\n drawerType,\n handleDrawerClose,\n handleDrawerOpen,\n navigation,\n ]);\n\n const renderDrawerContent = () => {\n return (\n <DrawerPositionContext.Provider value={drawerPosition}>\n {drawerContent({\n state: state,\n navigation: navigation,\n descriptors: descriptors,\n })}\n </DrawerPositionContext.Provider>\n );\n };\n\n const renderSceneContent = () => {\n return (\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n hasTwoStates\n style={styles.content}\n >\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const { lazy = true, unmountOnBlur } = descriptor.options;\n const isFocused = state.index === index;\n\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n\n const {\n header = ({ layout, options }: DrawerHeaderProps) => (\n <Header\n {...options}\n layout={layout}\n title={getHeaderTitle(options, route.name)}\n headerLeft={\n options.headerLeft ??\n ((props) => <DrawerToggleButton {...props} />)\n }\n />\n ),\n sceneContainerStyle,\n } = descriptor.options;\n\n return (\n <MaybeScreen\n key={route.key}\n style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}\n visible={isFocused}\n enabled={detachInactiveScreens}\n >\n <Screen\n focused={isFocused}\n route={descriptor.route}\n navigation={descriptor.navigation}\n headerShown={descriptor.options.headerShown}\n headerTransparent={descriptor.options.headerTransparent}\n headerStatusBarHeight={descriptor.options.headerStatusBarHeight}\n header={header({\n layout: dimensions,\n route: descriptor.route,\n navigation:\n descriptor.navigation as DrawerNavigationProp<ParamListBase>,\n options: descriptor.options,\n })}\n style={sceneContainerStyle}\n >\n {descriptor.render()}\n </Screen>\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n );\n };\n\n return (\n <DrawerStatusContext.Provider value={drawerStatus}>\n <Drawer\n open={drawerStatus !== 'closed'}\n onOpen={handleDrawerOpen}\n onClose={handleDrawerClose}\n gestureHandlerProps={gestureHandlerProps}\n swipeEnabled={swipeEnabled}\n swipeEdgeWidth={swipeEdgeWidth}\n swipeVelocityThreshold={500}\n swipeDistanceThreshold={swipeMinDistance}\n hideStatusBarOnOpen={drawerHideStatusBarOnOpen}\n statusBarAnimation={drawerStatusBarAnimation}\n keyboardDismissMode={keyboardDismissMode}\n drawerType={drawerType}\n drawerPosition={drawerPosition}\n drawerStyle={[\n {\n width: getDefaultDrawerWidth(dimensions),\n backgroundColor: colors.card,\n },\n drawerType === 'permanent' &&\n (drawerPosition === 'left'\n ? {\n borderRightColor: colors.border,\n borderRightWidth: StyleSheet.hairlineWidth,\n }\n : {\n borderLeftColor: colors.border,\n borderLeftWidth: StyleSheet.hairlineWidth,\n }),\n drawerStyle,\n ]}\n overlayStyle={{ backgroundColor: overlayColor }}\n renderDrawerContent={renderDrawerContent}\n renderSceneContent={renderSceneContent}\n dimensions={dimensions}\n />\n </DrawerStatusContext.Provider>\n );\n}\n\nexport default function DrawerView({ navigation, ...rest }: Props) {\n return (\n <SafeAreaProviderCompat>\n <GestureHandlerWrapper style={styles.content}>\n <DrawerViewBase navigation={navigation} {...rest} />\n </GestureHandlerWrapper>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n },\n});\n"]}
1
+ {"version":3,"sources":["DrawerView.tsx"],"names":["getDefaultDrawerWidth","height","width","smallerAxisSize","Math","min","isLandscape","isTablet","appBarHeight","Platform","OS","maxWidth","GestureHandlerWrapper","GestureHandlerRootView","View","DrawerViewBase","state","navigation","descriptors","defaultStatus","drawerContent","props","detachInactiveScreens","useLegacyImplementation","Reanimated","isConfigured","Drawer","require","default","focusedRouteKey","routes","index","key","drawerHideStatusBarOnOpen","drawerPosition","I18nManager","isRTL","drawerStatusBarAnimation","drawerStyle","drawerType","select","ios","gestureHandlerProps","keyboardDismissMode","overlayColor","swipeEdgeWidth","swipeEnabled","swipeMinDistance","options","loaded","setLoaded","React","useState","includes","dimensions","colors","drawerStatus","handleDrawerOpen","useCallback","dispatch","DrawerActions","openDrawer","target","handleDrawerClose","closeDrawer","useEffect","handleHardwareBack","isFocused","handleEscape","e","subscription","BackHandler","addEventListener","document","body","remove","removeEventListener","renderDrawerContent","renderSceneContent","styles","content","map","route","descriptor","lazy","unmountOnBlur","header","layout","name","headerLeft","sceneContainerStyle","StyleSheet","absoluteFill","zIndex","headerShown","headerTransparent","headerStatusBarHeight","render","backgroundColor","card","borderRightColor","border","borderRightWidth","hairlineWidth","borderLeftColor","borderLeftWidth","DrawerView","rest","create","flex"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport {\n DrawerActions,\n DrawerNavigationState,\n DrawerStatus,\n ParamListBase,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n BackHandler,\n I18nManager,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\nimport * as Reanimated from 'react-native-reanimated';\nimport { useSafeAreaFrame } from 'react-native-safe-area-context';\n\nimport type {\n DrawerContentComponentProps,\n DrawerDescriptorMap,\n DrawerHeaderProps,\n DrawerNavigationConfig,\n DrawerNavigationHelpers,\n DrawerNavigationProp,\n DrawerProps,\n} from '../types';\nimport DrawerPositionContext from '../utils/DrawerPositionContext';\nimport DrawerStatusContext from '../utils/DrawerStatusContext';\nimport getDrawerStatusFromState from '../utils/getDrawerStatusFromState';\nimport DrawerContent from './DrawerContent';\nimport DrawerToggleButton from './DrawerToggleButton';\nimport { GestureHandlerRootView } from './GestureHandler';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\n\ntype Props = DrawerNavigationConfig & {\n defaultStatus: DrawerStatus;\n state: DrawerNavigationState<ParamListBase>;\n navigation: DrawerNavigationHelpers;\n descriptors: DrawerDescriptorMap;\n};\n\nconst getDefaultDrawerWidth = ({\n height,\n width,\n}: {\n height: number;\n width: number;\n}) => {\n /*\n * Default drawer width is screen width - header height\n * with a max width of 280 on mobile and 320 on tablet\n * https://material.io/components/navigation-drawer\n */\n const smallerAxisSize = Math.min(height, width);\n const isLandscape = width > height;\n const isTablet = smallerAxisSize >= 600;\n const appBarHeight = Platform.OS === 'ios' ? (isLandscape ? 32 : 44) : 56;\n const maxWidth = isTablet ? 320 : 280;\n\n return Math.min(smallerAxisSize - appBarHeight, maxWidth);\n};\n\nconst GestureHandlerWrapper = GestureHandlerRootView ?? View;\n\nfunction DrawerViewBase({\n state,\n navigation,\n descriptors,\n defaultStatus,\n drawerContent = (props: DrawerContentComponentProps) => (\n <DrawerContent {...props} />\n ),\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n // Reanimated 2 is not configured\n // @ts-expect-error: the type definitions are incomplete\n useLegacyImplementation = !Reanimated.isConfigured?.(),\n}: Props) {\n const Drawer: React.ComponentType<DrawerProps> = useLegacyImplementation\n ? require('./legacy/Drawer').default\n : require('./modern/Drawer').default;\n\n const focusedRouteKey = state.routes[state.index].key;\n const {\n drawerHideStatusBarOnOpen = false,\n drawerPosition = I18nManager.isRTL ? 'right' : 'left',\n drawerStatusBarAnimation = 'slide',\n drawerStyle,\n drawerType = Platform.select({ ios: 'slide', default: 'front' }),\n gestureHandlerProps,\n keyboardDismissMode = 'on-drag',\n overlayColor = 'rgba(0, 0, 0, 0.5)',\n swipeEdgeWidth = 32,\n swipeEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n swipeMinDistance = 60,\n } = descriptors[focusedRouteKey].options;\n\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n\n const dimensions = useSafeAreaFrame();\n\n const { colors } = useTheme();\n\n const drawerStatus = getDrawerStatusFromState(state);\n\n const handleDrawerOpen = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.openDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n const handleDrawerClose = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.closeDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n React.useEffect(() => {\n if (drawerStatus === defaultStatus || drawerType === 'permanent') {\n return;\n }\n\n const handleHardwareBack = () => {\n // We shouldn't handle the back button if the parent screen isn't focused\n // This will avoid the drawer overriding event listeners from a focused screen\n if (!navigation.isFocused()) {\n return false;\n }\n\n if (defaultStatus === 'open') {\n handleDrawerOpen();\n } else {\n handleDrawerClose();\n }\n\n return true;\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleHardwareBack();\n }\n };\n\n // We only add the listeners when drawer opens\n // This way we can make sure that the listener is added as late as possible\n // This will make sure that our handler will run first when back button is pressed\n const subscription = BackHandler.addEventListener(\n 'hardwareBackPress',\n handleHardwareBack\n );\n\n if (Platform.OS === 'web') {\n document?.body?.addEventListener?.('keyup', handleEscape);\n }\n\n return () => {\n subscription.remove();\n\n if (Platform.OS === 'web') {\n document?.body?.removeEventListener?.('keyup', handleEscape);\n }\n };\n }, [\n defaultStatus,\n drawerStatus,\n drawerType,\n handleDrawerClose,\n handleDrawerOpen,\n navigation,\n ]);\n\n const renderDrawerContent = () => {\n return (\n <DrawerPositionContext.Provider value={drawerPosition}>\n {drawerContent({\n state: state,\n navigation: navigation,\n descriptors: descriptors,\n })}\n </DrawerPositionContext.Provider>\n );\n };\n\n const renderSceneContent = () => {\n return (\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n hasTwoStates\n style={styles.content}\n >\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const { lazy = true, unmountOnBlur } = descriptor.options;\n const isFocused = state.index === index;\n\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n\n const {\n header = ({ layout, options }: DrawerHeaderProps) => (\n <Header\n {...options}\n layout={layout}\n title={getHeaderTitle(options, route.name)}\n headerLeft={\n options.headerLeft ??\n ((props) => <DrawerToggleButton {...props} />)\n }\n />\n ),\n sceneContainerStyle,\n } = descriptor.options;\n\n return (\n <MaybeScreen\n key={route.key}\n style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}\n visible={isFocused}\n enabled={detachInactiveScreens}\n >\n <Screen\n focused={isFocused}\n route={descriptor.route}\n navigation={descriptor.navigation}\n headerShown={descriptor.options.headerShown}\n headerTransparent={descriptor.options.headerTransparent}\n headerStatusBarHeight={descriptor.options.headerStatusBarHeight}\n header={header({\n layout: dimensions,\n route: descriptor.route,\n navigation:\n descriptor.navigation as DrawerNavigationProp<ParamListBase>,\n options: descriptor.options,\n })}\n style={sceneContainerStyle}\n >\n {descriptor.render()}\n </Screen>\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n );\n };\n\n return (\n <DrawerStatusContext.Provider value={drawerStatus}>\n <Drawer\n open={drawerStatus !== 'closed'}\n onOpen={handleDrawerOpen}\n onClose={handleDrawerClose}\n gestureHandlerProps={gestureHandlerProps}\n swipeEnabled={swipeEnabled}\n swipeEdgeWidth={swipeEdgeWidth}\n swipeVelocityThreshold={500}\n swipeDistanceThreshold={swipeMinDistance}\n hideStatusBarOnOpen={drawerHideStatusBarOnOpen}\n statusBarAnimation={drawerStatusBarAnimation}\n keyboardDismissMode={keyboardDismissMode}\n drawerType={drawerType}\n drawerPosition={drawerPosition}\n drawerStyle={[\n {\n width: getDefaultDrawerWidth(dimensions),\n backgroundColor: colors.card,\n },\n drawerType === 'permanent' &&\n (drawerPosition === 'left'\n ? {\n borderRightColor: colors.border,\n borderRightWidth: StyleSheet.hairlineWidth,\n }\n : {\n borderLeftColor: colors.border,\n borderLeftWidth: StyleSheet.hairlineWidth,\n }),\n drawerStyle,\n ]}\n overlayStyle={{ backgroundColor: overlayColor }}\n renderDrawerContent={renderDrawerContent}\n renderSceneContent={renderSceneContent}\n dimensions={dimensions}\n />\n </DrawerStatusContext.Provider>\n );\n}\n\nexport default function DrawerView({ navigation, ...rest }: Props) {\n return (\n <SafeAreaProviderCompat>\n <GestureHandlerWrapper style={styles.content}>\n <DrawerViewBase navigation={navigation} {...rest} />\n </GestureHandlerWrapper>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n },\n});\n"]}
@@ -120,7 +120,7 @@ function Drawer(_ref) {
120
120
  hideStatusBar(true);
121
121
  };
122
122
 
123
- const onGestureEnd = () => {
123
+ const onGestureFinish = () => {
124
124
  endInteraction();
125
125
  }; // FIXME: Currently hitSlop is broken when on Android when drawer is on right
126
126
  // https://github.com/software-mansion/react-native-gesture-handler/issues/569
@@ -180,7 +180,9 @@ function Drawer(_ref) {
180
180
  (event.velocityX === 0 ? event.translationX : event.velocityX) > 0 : // If swiped to left, open the drawer, otherwise close it
181
181
  (event.velocityX === 0 ? event.translationX : event.velocityX) < 0 : open;
182
182
  toggleDrawer(nextOpen, event.velocityX);
183
- (0, _reactNativeReanimated.runOnJS)(onGestureEnd)();
183
+ },
184
+ onFinish: () => {
185
+ (0, _reactNativeReanimated.runOnJS)(onGestureFinish)();
184
186
  }
185
187
  });
186
188
  const translateX = (0, _reactNativeReanimated.useDerivedValue)(() => {
@@ -214,11 +216,13 @@ function Drawer(_ref) {
214
216
  return translateX;
215
217
  });
216
218
  const drawerAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
219
+ const distanceFromEdge = dimensions.width - drawerWidth;
217
220
  return {
218
221
  transform: drawerType === 'permanent' ? // Reanimated needs the property to be present, but it results in Browser bug
219
222
  // https://bugs.chromium.org/p/chromium/issues/detail?id=20574
220
223
  [] : [{
221
- translateX: drawerType === 'back' ? 0 : translateX.value
224
+ translateX: // The drawer stays in place when `drawerType` is `back`
225
+ (drawerType === 'back' ? 0 : translateX.value) + (drawerPosition === 'left' ? _reactNative.I18nManager.isRTL ? -distanceFromEdge : 0 : _reactNative.I18nManager.isRTL ? 0 : distanceFromEdge)
222
226
  }]
223
227
  };
224
228
  });
@@ -227,7 +231,8 @@ function Drawer(_ref) {
227
231
  transform: drawerType === 'permanent' ? // Reanimated needs the property to be present, but it results in Browser bug
228
232
  // https://bugs.chromium.org/p/chromium/issues/detail?id=20574
229
233
  [] : [{
230
- translateX: drawerType === 'front' ? 0 : drawerPosition === 'left' ? drawerWidth + translateX.value : translateX.value - drawerWidth
234
+ translateX: // The screen content stays in place when `drawerType` is `front`
235
+ drawerType === 'front' ? 0 : translateX.value + drawerWidth * (drawerPosition === 'left' ? 1 : -1)
231
236
  }]
232
237
  };
233
238
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["Drawer.tsx"],"names":["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","StyleSheet","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","React","useCallback","hideStatusBar","hide","StatusBar","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","InteractionManager","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","Keyboard","dismiss","onGestureStart","onGestureEnd","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","GestureState","UNDETERMINED","toggleDrawer","velocity","translateX","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","onGestureEvent","onStart","event","ctx","startX","state","x","onActive","onEnd","nextOpen","abs","velocityX","touchDistance","ACTIVE","drawerAnimatedStyle","transform","contentAnimatedStyle","progress","styles","main","flexDirection","content","Platform","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 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 onGestureEnd = () => {\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 runOnJS(onGestureEnd)();\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 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: drawerType === 'back' ? 0 : translateX.value,\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 drawerType === 'front'\n ? 0\n : drawerPosition === 'left'\n ? drawerWidth + translateX.value\n : translateX.value - drawerWidth,\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":["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","StyleSheet","flatten","endsWith","percentage","Number","replace","isFinite","drawerWidth","isOpen","isRight","getDrawerTranslationX","React","useCallback","hideStatusBar","hide","StatusBar","setHidden","useEffect","interactionHandleRef","useRef","startInteraction","current","InteractionManager","createInteractionHandle","endInteraction","clearInteractionHandle","hideKeyboard","Keyboard","dismiss","onGestureStart","onGestureFinish","hitSlop","right","undefined","left","touchStartX","touchX","translationX","gestureState","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","I18nManager","isRTL","contentAnimatedStyle","progress","styles","main","flexDirection","content","Platform","OS","container","position","zIndex","create","top","bottom","maxWidth","flex","select","web","default","overflow"],"mappings":";;;;;;;AAAA;;AACA;;AASA;;AAKA;;AAWA;;AACA;;;;;;;;;;AAEA,MAAMA,sBAAsB,GAAG,CAA/B;AACA,MAAMC,oBAAoB,GAAG,KAA7B;;AAEA,MAAMC,MAAM,GAAG,CAACC,KAAD,EAAgBC,KAAhB,EAA+BC,GAA/B,KAA+C;AAC5D;;AAEA,SAAOC,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAASL,KAAT,EAAgBC,KAAhB,CAAT,EAAiCC,GAAjC,CAAP;AACD,CAJD;;AAMe,SAASI,MAAT,OAmBC;AAAA,MAnBe;AAC7BC,IAAAA,UAD6B;AAE7BC,IAAAA,cAF6B;AAG7BC,IAAAA,WAH6B;AAI7BC,IAAAA,UAJ6B;AAK7BC,IAAAA,mBAL6B;AAM7BC,IAAAA,mBAN6B;AAO7BC,IAAAA,mBAP6B;AAQ7BC,IAAAA,OAR6B;AAS7BC,IAAAA,MAT6B;AAU7BC,IAAAA,IAV6B;AAW7BC,IAAAA,YAX6B;AAY7BC,IAAAA,mBAZ6B;AAa7BC,IAAAA,kBAb6B;AAc7BC,IAAAA,kBAd6B;AAe7BC,IAAAA,sBAf6B;AAgB7BC,IAAAA,cAhB6B;AAiB7BC,IAAAA,YAjB6B;AAkB7BC,IAAAA;AAlB6B,GAmBf;;AACd,QAAMC,cAAc,GAAG,MAAc;AACnC,UAAM;AAAEC,MAAAA,KAAK,GAAG5B;AAAV,QACJ6B,wBAAWC,OAAX,CAAmBnB,WAAnB,KAAmC,EADrC;;AAGA,QAAI,OAAOiB,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACG,QAAN,CAAe,GAAf,CAAjC,EAAsD;AACpD;AACA,YAAMC,UAAU,GAAGC,MAAM,CAACL,KAAK,CAACM,OAAN,CAAc,IAAd,EAAoB,EAApB,CAAD,CAAzB;;AAEA,UAAID,MAAM,CAACE,QAAP,CAAgBH,UAAhB,CAAJ,EAAiC;AAC/B,eAAOvB,UAAU,CAACmB,KAAX,IAAoBI,UAAU,GAAG,GAAjC,CAAP;AACD;AACF;;AAED,WAAO,OAAOJ,KAAP,KAAiB,QAAjB,GAA4BA,KAA5B,GAAoC,CAA3C;AACD,GAdD;;AAgBA,QAAMQ,WAAW,GAAGT,cAAc,EAAlC;AAEA,QAAMU,MAAM,GAAGzB,UAAU,KAAK,WAAf,GAA6B,IAA7B,GAAoCM,IAAnD;AACA,QAAMoB,OAAO,GAAG5B,cAAc,KAAK,OAAnC;AAEA,QAAM6B,qBAAqB,GAAGC,KAAK,CAACC,WAAN,CAC3BvB,IAAD,IAAmB;AACjB;;AAEA,QAAIR,cAAc,KAAK,MAAvB,EAA+B;AAC7B,aAAOQ,IAAI,GAAG,CAAH,GAAO,CAACkB,WAAnB;AACD;;AAED,WAAOlB,IAAI,GAAG,CAAH,GAAOkB,WAAlB;AACD,GAT2B,EAU5B,CAAC1B,cAAD,EAAiB0B,WAAjB,CAV4B,CAA9B;AAaA,QAAMM,aAAa,GAAGF,KAAK,CAACC,WAAN,CACnBE,IAAD,IAAmB;AACjB,QAAI7B,mBAAJ,EAAyB;AACvB8B,6BAAUC,SAAV,CAAoBF,IAApB,EAA0BrB,kBAA1B;AACD;AACF,GALmB,EAMpB,CAACR,mBAAD,EAAsBQ,kBAAtB,CANoB,CAAtB;AASAkB,EAAAA,KAAK,CAACM,SAAN,CAAgB,MAAM;AACpBJ,IAAAA,aAAa,CAACL,MAAD,CAAb;AAEA,WAAO,MAAMK,aAAa,CAAC,KAAD,CAA1B;AACD,GAJD,EAIG,CAACL,MAAD,EAASvB,mBAAT,EAA8BQ,kBAA9B,EAAkDoB,aAAlD,CAJH;AAMA,QAAMK,oBAAoB,GAAGP,KAAK,CAACQ,MAAN,CAA4B,IAA5B,CAA7B;;AAEA,QAAMC,gBAAgB,GAAG,MAAM;AAC7BF,IAAAA,oBAAoB,CAACG,OAArB,GAA+BC,gCAAmBC,uBAAnB,EAA/B;AACD,GAFD;;AAIA,QAAMC,cAAc,GAAG,MAAM;AAC3B,QAAIN,oBAAoB,CAACG,OAArB,IAAgC,IAApC,EAA0C;AACxCC,sCAAmBG,sBAAnB,CAA0CP,oBAAoB,CAACG,OAA/D;;AACAH,MAAAA,oBAAoB,CAACG,OAArB,GAA+B,IAA/B;AACD;AACF,GALD;;AAOA,QAAMK,YAAY,GAAG,MAAM;AACzB,QAAIxC,mBAAmB,KAAK,SAA5B,EAAuC;AACrCyC,4BAASC,OAAT;AACD;AACF,GAJD;;AAMA,QAAMC,cAAc,GAAG,MAAM;AAC3BT,IAAAA,gBAAgB;AAChBM,IAAAA,YAAY;AACZb,IAAAA,aAAa,CAAC,IAAD,CAAb;AACD,GAJD;;AAMA,QAAMiB,eAAe,GAAG,MAAM;AAC5BN,IAAAA,cAAc;AACf,GAFD,CA3Ec,CA+Ed;AACA;;;AACA,QAAMO,OAAO,GAAGtB,OAAO,GACnB;AACA;AACA;AAAEuB,IAAAA,KAAK,EAAE,CAAT;AAAYjC,IAAAA,KAAK,EAAES,MAAM,GAAGyB,SAAH,GAAetC;AAAxC,GAHmB,GAInB;AAAEuC,IAAAA,IAAI,EAAE,CAAR;AAAWnC,IAAAA,KAAK,EAAES,MAAM,GAAGyB,SAAH,GAAetC;AAAvC,GAJJ;AAMA,QAAMwC,WAAW,GAAG,2CAAe,CAAf,CAApB;AACA,QAAMC,MAAM,GAAG,2CAAe,CAAf,CAAf;AACA,QAAMC,YAAY,GAAG,2CAAe3B,qBAAqB,CAACrB,IAAD,CAApC,CAArB;AACA,QAAMiD,YAAY,GAAG,2CAA6BC,iCAAaC,YAA1C,CAArB;AAEA,QAAMC,YAAY,GAAG9B,KAAK,CAACC,WAAN,CACnB,CAACvB,IAAD,EAAgBqD,QAAhB,KAAsC;AACpC;;AAEA,UAAMC,UAAU,GAAGjC,qBAAqB,CAACrB,IAAD,CAAxC;AAEA8C,IAAAA,WAAW,CAAC9D,KAAZ,GAAoB,CAApB;AACA+D,IAAAA,MAAM,CAAC/D,KAAP,GAAe,CAAf;AACAgE,IAAAA,YAAY,CAAChE,KAAb,GAAqB,uCACnBsE,UADmB,EAEnB;AACED,MAAAA,QADF;AAEEE,MAAAA,SAAS,EAAE,IAFb;AAGEC,MAAAA,OAAO,EAAE,GAHX;AAIEC,MAAAA,IAAI,EAAE,CAJR;AAKEC,MAAAA,iBAAiB,EAAE,IALrB;AAMEC,MAAAA,yBAAyB,EAAE,IAN7B;AAOEC,MAAAA,kBAAkB,EAAE;AAPtB,KAFmB,EAWnB,MAAM;AACJ,UAAIZ,YAAY,CAAChE,KAAb,KAAuBqC,qBAAqB,CAAC,IAAD,CAAhD,EAAwD;AACtD,4CAAQtB,MAAR;AACD,OAFD,MAEO,IAAIiD,YAAY,CAAChE,KAAb,KAAuBqC,qBAAqB,CAAC,KAAD,CAAhD,EAAyD;AAC9D,4CAAQvB,OAAR;AACD;AACF,KAjBkB,CAArB;AAmBD,GA3BkB,EA4BnB,CAACuB,qBAAD,EAAwBvB,OAAxB,EAAiCC,MAAjC,EAAyC+C,WAAzC,EAAsDC,MAAtD,EAA8DC,YAA9D,CA5BmB,CAArB;AA+BA1B,EAAAA,KAAK,CAACM,SAAN,CAAgB,MAAMwB,YAAY,CAACpD,IAAD,CAAlC,EAA0C,CAACA,IAAD,EAAOoD,YAAP,CAA1C;AAEA,QAAMS,cAAc,GAAG,sDAGrB;AACAC,IAAAA,OAAO,EAAE,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACvBA,MAAAA,GAAG,CAACC,MAAJ,GAAajB,YAAY,CAAChE,KAA1B;AACAiE,MAAAA,YAAY,CAACjE,KAAb,GAAqB+E,KAAK,CAACG,KAA3B;AACApB,MAAAA,WAAW,CAAC9D,KAAZ,GAAoB+E,KAAK,CAACI,CAA1B;AAEA,0CAAQ3B,cAAR;AACD,KAPD;AAQA4B,IAAAA,QAAQ,EAAE,CAACL,KAAD,EAAQC,GAAR,KAAgB;AACxBjB,MAAAA,MAAM,CAAC/D,KAAP,GAAe+E,KAAK,CAACI,CAArB;AACAnB,MAAAA,YAAY,CAAChE,KAAb,GAAqBgF,GAAG,CAACC,MAAJ,GAAaF,KAAK,CAACf,YAAxC;AACAC,MAAAA,YAAY,CAACjE,KAAb,GAAqB+E,KAAK,CAACG,KAA3B;AACD,KAZD;AAaAG,IAAAA,KAAK,EAAGN,KAAD,IAAW;AAChBd,MAAAA,YAAY,CAACjE,KAAb,GAAqB+E,KAAK,CAACG,KAA3B;AAEA,YAAMI,QAAQ,GACXnF,IAAI,CAACoF,GAAL,CAASR,KAAK,CAACf,YAAf,IAA+BnE,sBAA/B,IACCM,IAAI,CAACoF,GAAL,CAASR,KAAK,CAACf,YAAf,IAA+BxC,sBADjC,IAEArB,IAAI,CAACoF,GAAL,CAASR,KAAK,CAACf,YAAf,IAA+B3C,sBAF/B,GAGIb,cAAc,KAAK,MAAnB,GACE;AACA,OAACuE,KAAK,CAACS,SAAN,KAAoB,CAApB,GAAwBT,KAAK,CAACf,YAA9B,GAA6Ce,KAAK,CAACS,SAApD,IAAiE,CAFnE,GAGE;AACA,OAACT,KAAK,CAACS,SAAN,KAAoB,CAApB,GAAwBT,KAAK,CAACf,YAA9B,GAA6Ce,KAAK,CAACS,SAApD,IAAiE,CAPvE,GAQIxE,IATN;AAWAoD,MAAAA,YAAY,CAACkB,QAAD,EAAWP,KAAK,CAACS,SAAjB,CAAZ;AACD,KA5BD;AA6BAC,IAAAA,QAAQ,EAAE,MAAM;AACd,0CAAQhC,eAAR;AACD;AA/BD,GAHqB,CAAvB;AAqCA,QAAMa,UAAU,GAAG,4CAAgB,MAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAMoB,aAAa,GACjBhF,UAAU,KAAK,OAAf,IAA0BuD,YAAY,CAACjE,KAAb,KAAuBkE,iCAAayB,MAA9D,GACI5F,MAAM,CACJS,cAAc,KAAK,MAAnB,GACIsD,WAAW,CAAC9D,KAAZ,GAAoBkC,WADxB,GAEI3B,UAAU,CAACmB,KAAX,GAAmBQ,WAAnB,GAAiC4B,WAAW,CAAC9D,KAH7C,EAIJ,CAJI,EAKJO,UAAU,CAACmB,KALP,CADV,GAQI,CATN;AAWA,UAAM4C,UAAU,GACd9D,cAAc,KAAK,MAAnB,GACIT,MAAM,CAACiE,YAAY,CAAChE,KAAb,GAAqB0F,aAAtB,EAAqC,CAACxD,WAAtC,EAAmD,CAAnD,CADV,GAEInC,MAAM,CAACiE,YAAY,CAAChE,KAAb,GAAqB0F,aAAtB,EAAqC,CAArC,EAAwCxD,WAAxC,CAHZ;AAKA,WAAOoC,UAAP;AACD,GA3CkB,CAAnB;AA6CA,QAAMsB,mBAAmB,GAAG,6CAAiB,MAAM;AACjD,UAAMC,gBAAgB,GAAGtF,UAAU,CAACmB,KAAX,GAAmBQ,WAA5C;AAEA,WAAO;AACL4D,MAAAA,SAAS,EACPpF,UAAU,KAAK,WAAf,GACI;AACA;AACA,QAHJ,GAII,CACE;AACE4D,QAAAA,UAAU,EACR;AACA,SAAC5D,UAAU,KAAK,MAAf,GAAwB,CAAxB,GAA4B4D,UAAU,CAACtE,KAAxC,KACCQ,cAAc,KAAK,MAAnB,GACGuF,yBAAYC,KAAZ,GACE,CAACH,gBADH,GAEE,CAHL,GAIGE,yBAAYC,KAAZ,GACA,CADA,GAEAH,gBAPJ;AAHJ,OADF;AAND,KAAP;AAqBD,GAxB2B,CAA5B;AA0BA,QAAMI,oBAAoB,GAAG,6CAAiB,MAAM;AAClD,WAAO;AACLH,MAAAA,SAAS,EACPpF,UAAU,KAAK,WAAf,GACI;AACA;AACA,QAHJ,GAII,CACE;AACE4D,QAAAA,UAAU,EACR;AACA5D,QAAAA,UAAU,KAAK,OAAf,GACI,CADJ,GAEI4D,UAAU,CAACtE,KAAX,GACAkC,WAAW,IAAI1B,cAAc,KAAK,MAAnB,GAA4B,CAA5B,GAAgC,CAAC,CAArC;AANnB,OADF;AAND,KAAP;AAiBD,GAlB4B,CAA7B;AAoBA,QAAM0F,QAAQ,GAAG,4CAAgB,MAAM;AACrC,WAAOxF,UAAU,KAAK,WAAf,GACH,CADG,GAEH,wCACE4D,UAAU,CAACtE,KADb,EAEE,CAACqC,qBAAqB,CAAC,KAAD,CAAtB,EAA+BA,qBAAqB,CAAC,IAAD,CAApD,CAFF,EAGE,CAAC,CAAD,EAAI,CAAJ,CAHF,CAFJ;AAOD,GARgB,CAAjB;AAUA,sBACE,oBAAC,8BAAD,CAAuB,QAAvB;AAAgC,IAAA,KAAK,EAAE6D;AAAvC,kBACE,oBAAC,4CAAD;AACE,IAAA,aAAa,EAAE,CAAC,CAACrG,sBAAF,EAA0BA,sBAA1B,CADjB;AAEE,IAAA,WAAW,EAAE,CAAC,CAACA,sBAAF,EAA0BA,sBAA1B,CAFf;AAGE,IAAA,OAAO,EAAE6D,OAHX;AAIE,IAAA,OAAO,EAAEhD,UAAU,KAAK,WAAf,IAA8Ba,YAJzC;AAKE,IAAA,cAAc,EAAEsD;AALlB,KAMMlE,mBANN,gBASE,oBAAC,8BAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CACLwF,MAAM,CAACC,IADF,EAEL;AACEC,MAAAA,aAAa,EACX3F,UAAU,KAAK,WAAf,IAA8B,CAAC0B,OAA/B,GAAyC,aAAzC,GAAyD;AAF7D,KAFK;AADT,kBASE,oBAAC,8BAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE,CAAC+D,MAAM,CAACG,OAAR,EAAiBL,oBAAjB;AAAtB,kBACE,oBAAC,iBAAD;AACE,IAAA,2BAA2B,EAAE9D,MAAM,IAAIzB,UAAU,KAAK,WADxD;AAEE,IAAA,yBAAyB,EACvByB,MAAM,IAAIzB,UAAU,KAAK,WAAzB,GACI,qBADJ,GAEI,MALR;AAOE,IAAA,KAAK,EAAEyF,MAAM,CAACG;AAPhB,KASGnF,kBAAkB,EATrB,CADF,EAYGT,UAAU,KAAK,WAAf,gBACC,oBAAC,gBAAD;AACE,IAAA,QAAQ,EAAEwF,QADZ;AAEE,IAAA,OAAO,EAAE,MAAM9B,YAAY,CAAC,KAAD,CAF7B;AAGE,IAAA,KAAK,EAAEnD;AAHT,IADD,GAMG,IAlBN,CATF,eA6BE,oBAAC,8BAAD,CAAU,IAAV;AACE,IAAA,wBAAwB,EAAEkB,MAAM,IAAIzB,UAAU,KAAK,WADrD;AAEE,IAAA,qBAAqB,EAAE6F,sBAASC,EAAT,KAAgB,KAFzC;AAGE,IAAA,KAAK,EAAE,CACLL,MAAM,CAACM,SADF,EAEL;AACEC,MAAAA,QAAQ,EAAEhG,UAAU,KAAK,WAAf,GAA6B,UAA7B,GAA0C,UADtD;AAEEiG,MAAAA,MAAM,EAAEjG,UAAU,KAAK,MAAf,GAAwB,CAAC,CAAzB,GAA6B;AAFvC,KAFK,EAMLkF,mBANK,EAOLnF,WAPK;AAHT,KAaGS,mBAAmB,EAbtB,CA7BF,CATF,CADF,CADF;AA2DD;;AAED,MAAMiF,MAAM,GAAGxE,wBAAWiF,MAAX,CAAkB;AAC/BH,EAAAA,SAAS,EAAE;AACTI,IAAAA,GAAG,EAAE,CADI;AAETC,IAAAA,MAAM,EAAE,CAFC;AAGTC,IAAAA,QAAQ,EAAE,MAHD;AAITrF,IAAAA,KAAK,EAAE5B;AAJE,GADoB;AAO/BwG,EAAAA,OAAO,EAAE;AACPU,IAAAA,IAAI,EAAE;AADC,GAPsB;AAU/BZ,EAAAA,IAAI,EAAE;AACJY,IAAAA,IAAI,EAAE,CADF;AAEJ,OAAGT,sBAASU,MAAT,CAAgB;AACjB;AACA;AACAC,MAAAA,GAAG,EAAE,IAHY;AAIjBC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,QAAQ,EAAE;AAAZ;AAJQ,KAAhB;AAFC;AAVyB,CAAlB,CAAf","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"]}
@@ -4,7 +4,7 @@ import { getHeaderTitle, Header, SafeAreaProviderCompat, Screen } from '@react-n
4
4
  import { DrawerActions, useTheme } from '@react-navigation/native';
5
5
  import * as React from 'react';
6
6
  import { BackHandler, I18nManager, Platform, StyleSheet, View } from 'react-native';
7
- import Animated from 'react-native-reanimated';
7
+ import * as Reanimated from 'react-native-reanimated';
8
8
  import { useSafeAreaFrame } from 'react-native-safe-area-context';
9
9
  import DrawerPositionContext from '../utils/DrawerPositionContext';
10
10
  import DrawerStatusContext from '../utils/DrawerStatusContext';
@@ -36,7 +36,7 @@ const getDefaultDrawerWidth = _ref => {
36
36
  const GestureHandlerWrapper = GestureHandlerRootView !== null && GestureHandlerRootView !== void 0 ? GestureHandlerRootView : View;
37
37
 
38
38
  function DrawerViewBase(_ref2) {
39
- var _Animated$isConfigure;
39
+ var _Reanimated$isConfigu;
40
40
 
41
41
  let {
42
42
  state,
@@ -45,11 +45,9 @@ function DrawerViewBase(_ref2) {
45
45
  defaultStatus,
46
46
  drawerContent = props => /*#__PURE__*/React.createElement(DrawerContent, props),
47
47
  detachInactiveScreens = Platform.OS === 'web' || Platform.OS === 'android' || Platform.OS === 'ios',
48
- // Running in chrome debugger
49
- // @ts-expect-error
50
- useLegacyImplementation = !global.nativeCallSyncHook || // Reanimated 2 is not configured
48
+ // Reanimated 2 is not configured
51
49
  // @ts-expect-error: the type definitions are incomplete
52
- !((_Animated$isConfigure = Animated.isConfigured) !== null && _Animated$isConfigure !== void 0 && _Animated$isConfigure.call(Animated))
50
+ useLegacyImplementation = !((_Reanimated$isConfigu = Reanimated.isConfigured) !== null && _Reanimated$isConfigu !== void 0 && _Reanimated$isConfigu.call(Reanimated))
53
51
  } = _ref2;
54
52
  const Drawer = useLegacyImplementation ? require('./legacy/Drawer').default : require('./modern/Drawer').default;
55
53
  const focusedRouteKey = state.routes[state.index].key;
@@ -1 +1 @@
1
- {"version":3,"sources":["DrawerView.tsx"],"names":["getHeaderTitle","Header","SafeAreaProviderCompat","Screen","DrawerActions","useTheme","React","BackHandler","I18nManager","Platform","StyleSheet","View","Animated","useSafeAreaFrame","DrawerPositionContext","DrawerStatusContext","getDrawerStatusFromState","DrawerContent","DrawerToggleButton","GestureHandlerRootView","MaybeScreen","MaybeScreenContainer","getDefaultDrawerWidth","height","width","smallerAxisSize","Math","min","isLandscape","isTablet","appBarHeight","OS","maxWidth","GestureHandlerWrapper","DrawerViewBase","state","navigation","descriptors","defaultStatus","drawerContent","props","detachInactiveScreens","useLegacyImplementation","global","nativeCallSyncHook","isConfigured","Drawer","require","default","focusedRouteKey","routes","index","key","drawerHideStatusBarOnOpen","drawerPosition","isRTL","drawerStatusBarAnimation","drawerStyle","drawerType","select","ios","gestureHandlerProps","keyboardDismissMode","overlayColor","swipeEdgeWidth","swipeEnabled","swipeMinDistance","options","loaded","setLoaded","useState","includes","dimensions","colors","drawerStatus","handleDrawerOpen","useCallback","dispatch","openDrawer","target","handleDrawerClose","closeDrawer","useEffect","handleHardwareBack","isFocused","handleEscape","e","subscription","addEventListener","document","body","remove","removeEventListener","renderDrawerContent","renderSceneContent","styles","content","map","route","descriptor","lazy","unmountOnBlur","header","layout","name","headerLeft","sceneContainerStyle","absoluteFill","zIndex","headerShown","headerTransparent","headerStatusBarHeight","render","backgroundColor","card","borderRightColor","border","borderRightWidth","hairlineWidth","borderLeftColor","borderLeftWidth","DrawerView","rest","create","flex"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport {\n DrawerActions,\n DrawerNavigationState,\n DrawerStatus,\n ParamListBase,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n BackHandler,\n I18nManager,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaFrame } from 'react-native-safe-area-context';\n\nimport type {\n DrawerContentComponentProps,\n DrawerDescriptorMap,\n DrawerHeaderProps,\n DrawerNavigationConfig,\n DrawerNavigationHelpers,\n DrawerNavigationProp,\n DrawerProps,\n} from '../types';\nimport DrawerPositionContext from '../utils/DrawerPositionContext';\nimport DrawerStatusContext from '../utils/DrawerStatusContext';\nimport getDrawerStatusFromState from '../utils/getDrawerStatusFromState';\nimport DrawerContent from './DrawerContent';\nimport DrawerToggleButton from './DrawerToggleButton';\nimport { GestureHandlerRootView } from './GestureHandler';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\n\ntype Props = DrawerNavigationConfig & {\n defaultStatus: DrawerStatus;\n state: DrawerNavigationState<ParamListBase>;\n navigation: DrawerNavigationHelpers;\n descriptors: DrawerDescriptorMap;\n};\n\nconst getDefaultDrawerWidth = ({\n height,\n width,\n}: {\n height: number;\n width: number;\n}) => {\n /*\n * Default drawer width is screen width - header height\n * with a max width of 280 on mobile and 320 on tablet\n * https://material.io/components/navigation-drawer\n */\n const smallerAxisSize = Math.min(height, width);\n const isLandscape = width > height;\n const isTablet = smallerAxisSize >= 600;\n const appBarHeight = Platform.OS === 'ios' ? (isLandscape ? 32 : 44) : 56;\n const maxWidth = isTablet ? 320 : 280;\n\n return Math.min(smallerAxisSize - appBarHeight, maxWidth);\n};\n\nconst GestureHandlerWrapper = GestureHandlerRootView ?? View;\n\nfunction DrawerViewBase({\n state,\n navigation,\n descriptors,\n defaultStatus,\n drawerContent = (props: DrawerContentComponentProps) => (\n <DrawerContent {...props} />\n ),\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n // Running in chrome debugger\n // @ts-expect-error\n useLegacyImplementation = !global.nativeCallSyncHook ||\n // Reanimated 2 is not configured\n // @ts-expect-error: the type definitions are incomplete\n !Animated.isConfigured?.(),\n}: Props) {\n const Drawer: React.ComponentType<DrawerProps> = useLegacyImplementation\n ? require('./legacy/Drawer').default\n : require('./modern/Drawer').default;\n\n const focusedRouteKey = state.routes[state.index].key;\n const {\n drawerHideStatusBarOnOpen = false,\n drawerPosition = I18nManager.isRTL ? 'right' : 'left',\n drawerStatusBarAnimation = 'slide',\n drawerStyle,\n drawerType = Platform.select({ ios: 'slide', default: 'front' }),\n gestureHandlerProps,\n keyboardDismissMode = 'on-drag',\n overlayColor = 'rgba(0, 0, 0, 0.5)',\n swipeEdgeWidth = 32,\n swipeEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n swipeMinDistance = 60,\n } = descriptors[focusedRouteKey].options;\n\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n\n const dimensions = useSafeAreaFrame();\n\n const { colors } = useTheme();\n\n const drawerStatus = getDrawerStatusFromState(state);\n\n const handleDrawerOpen = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.openDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n const handleDrawerClose = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.closeDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n React.useEffect(() => {\n if (drawerStatus === defaultStatus || drawerType === 'permanent') {\n return;\n }\n\n const handleHardwareBack = () => {\n // We shouldn't handle the back button if the parent screen isn't focused\n // This will avoid the drawer overriding event listeners from a focused screen\n if (!navigation.isFocused()) {\n return false;\n }\n\n if (defaultStatus === 'open') {\n handleDrawerOpen();\n } else {\n handleDrawerClose();\n }\n\n return true;\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleHardwareBack();\n }\n };\n\n // We only add the listeners when drawer opens\n // This way we can make sure that the listener is added as late as possible\n // This will make sure that our handler will run first when back button is pressed\n const subscription = BackHandler.addEventListener(\n 'hardwareBackPress',\n handleHardwareBack\n );\n\n if (Platform.OS === 'web') {\n document?.body?.addEventListener?.('keyup', handleEscape);\n }\n\n return () => {\n subscription.remove();\n\n if (Platform.OS === 'web') {\n document?.body?.removeEventListener?.('keyup', handleEscape);\n }\n };\n }, [\n defaultStatus,\n drawerStatus,\n drawerType,\n handleDrawerClose,\n handleDrawerOpen,\n navigation,\n ]);\n\n const renderDrawerContent = () => {\n return (\n <DrawerPositionContext.Provider value={drawerPosition}>\n {drawerContent({\n state: state,\n navigation: navigation,\n descriptors: descriptors,\n })}\n </DrawerPositionContext.Provider>\n );\n };\n\n const renderSceneContent = () => {\n return (\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n hasTwoStates\n style={styles.content}\n >\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const { lazy = true, unmountOnBlur } = descriptor.options;\n const isFocused = state.index === index;\n\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n\n const {\n header = ({ layout, options }: DrawerHeaderProps) => (\n <Header\n {...options}\n layout={layout}\n title={getHeaderTitle(options, route.name)}\n headerLeft={\n options.headerLeft ??\n ((props) => <DrawerToggleButton {...props} />)\n }\n />\n ),\n sceneContainerStyle,\n } = descriptor.options;\n\n return (\n <MaybeScreen\n key={route.key}\n style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}\n visible={isFocused}\n enabled={detachInactiveScreens}\n >\n <Screen\n focused={isFocused}\n route={descriptor.route}\n navigation={descriptor.navigation}\n headerShown={descriptor.options.headerShown}\n headerTransparent={descriptor.options.headerTransparent}\n headerStatusBarHeight={descriptor.options.headerStatusBarHeight}\n header={header({\n layout: dimensions,\n route: descriptor.route,\n navigation:\n descriptor.navigation as DrawerNavigationProp<ParamListBase>,\n options: descriptor.options,\n })}\n style={sceneContainerStyle}\n >\n {descriptor.render()}\n </Screen>\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n );\n };\n\n return (\n <DrawerStatusContext.Provider value={drawerStatus}>\n <Drawer\n open={drawerStatus !== 'closed'}\n onOpen={handleDrawerOpen}\n onClose={handleDrawerClose}\n gestureHandlerProps={gestureHandlerProps}\n swipeEnabled={swipeEnabled}\n swipeEdgeWidth={swipeEdgeWidth}\n swipeVelocityThreshold={500}\n swipeDistanceThreshold={swipeMinDistance}\n hideStatusBarOnOpen={drawerHideStatusBarOnOpen}\n statusBarAnimation={drawerStatusBarAnimation}\n keyboardDismissMode={keyboardDismissMode}\n drawerType={drawerType}\n drawerPosition={drawerPosition}\n drawerStyle={[\n {\n width: getDefaultDrawerWidth(dimensions),\n backgroundColor: colors.card,\n },\n drawerType === 'permanent' &&\n (drawerPosition === 'left'\n ? {\n borderRightColor: colors.border,\n borderRightWidth: StyleSheet.hairlineWidth,\n }\n : {\n borderLeftColor: colors.border,\n borderLeftWidth: StyleSheet.hairlineWidth,\n }),\n drawerStyle,\n ]}\n overlayStyle={{ backgroundColor: overlayColor }}\n renderDrawerContent={renderDrawerContent}\n renderSceneContent={renderSceneContent}\n dimensions={dimensions}\n />\n </DrawerStatusContext.Provider>\n );\n}\n\nexport default function DrawerView({ navigation, ...rest }: Props) {\n return (\n <SafeAreaProviderCompat>\n <GestureHandlerWrapper style={styles.content}>\n <DrawerViewBase navigation={navigation} {...rest} />\n </GestureHandlerWrapper>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n },\n});\n"]}
1
+ {"version":3,"sources":["DrawerView.tsx"],"names":["getHeaderTitle","Header","SafeAreaProviderCompat","Screen","DrawerActions","useTheme","React","BackHandler","I18nManager","Platform","StyleSheet","View","Reanimated","useSafeAreaFrame","DrawerPositionContext","DrawerStatusContext","getDrawerStatusFromState","DrawerContent","DrawerToggleButton","GestureHandlerRootView","MaybeScreen","MaybeScreenContainer","getDefaultDrawerWidth","height","width","smallerAxisSize","Math","min","isLandscape","isTablet","appBarHeight","OS","maxWidth","GestureHandlerWrapper","DrawerViewBase","state","navigation","descriptors","defaultStatus","drawerContent","props","detachInactiveScreens","useLegacyImplementation","isConfigured","Drawer","require","default","focusedRouteKey","routes","index","key","drawerHideStatusBarOnOpen","drawerPosition","isRTL","drawerStatusBarAnimation","drawerStyle","drawerType","select","ios","gestureHandlerProps","keyboardDismissMode","overlayColor","swipeEdgeWidth","swipeEnabled","swipeMinDistance","options","loaded","setLoaded","useState","includes","dimensions","colors","drawerStatus","handleDrawerOpen","useCallback","dispatch","openDrawer","target","handleDrawerClose","closeDrawer","useEffect","handleHardwareBack","isFocused","handleEscape","e","subscription","addEventListener","document","body","remove","removeEventListener","renderDrawerContent","renderSceneContent","styles","content","map","route","descriptor","lazy","unmountOnBlur","header","layout","name","headerLeft","sceneContainerStyle","absoluteFill","zIndex","headerShown","headerTransparent","headerStatusBarHeight","render","backgroundColor","card","borderRightColor","border","borderRightWidth","hairlineWidth","borderLeftColor","borderLeftWidth","DrawerView","rest","create","flex"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport {\n DrawerActions,\n DrawerNavigationState,\n DrawerStatus,\n ParamListBase,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n BackHandler,\n I18nManager,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\nimport * as Reanimated from 'react-native-reanimated';\nimport { useSafeAreaFrame } from 'react-native-safe-area-context';\n\nimport type {\n DrawerContentComponentProps,\n DrawerDescriptorMap,\n DrawerHeaderProps,\n DrawerNavigationConfig,\n DrawerNavigationHelpers,\n DrawerNavigationProp,\n DrawerProps,\n} from '../types';\nimport DrawerPositionContext from '../utils/DrawerPositionContext';\nimport DrawerStatusContext from '../utils/DrawerStatusContext';\nimport getDrawerStatusFromState from '../utils/getDrawerStatusFromState';\nimport DrawerContent from './DrawerContent';\nimport DrawerToggleButton from './DrawerToggleButton';\nimport { GestureHandlerRootView } from './GestureHandler';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\n\ntype Props = DrawerNavigationConfig & {\n defaultStatus: DrawerStatus;\n state: DrawerNavigationState<ParamListBase>;\n navigation: DrawerNavigationHelpers;\n descriptors: DrawerDescriptorMap;\n};\n\nconst getDefaultDrawerWidth = ({\n height,\n width,\n}: {\n height: number;\n width: number;\n}) => {\n /*\n * Default drawer width is screen width - header height\n * with a max width of 280 on mobile and 320 on tablet\n * https://material.io/components/navigation-drawer\n */\n const smallerAxisSize = Math.min(height, width);\n const isLandscape = width > height;\n const isTablet = smallerAxisSize >= 600;\n const appBarHeight = Platform.OS === 'ios' ? (isLandscape ? 32 : 44) : 56;\n const maxWidth = isTablet ? 320 : 280;\n\n return Math.min(smallerAxisSize - appBarHeight, maxWidth);\n};\n\nconst GestureHandlerWrapper = GestureHandlerRootView ?? View;\n\nfunction DrawerViewBase({\n state,\n navigation,\n descriptors,\n defaultStatus,\n drawerContent = (props: DrawerContentComponentProps) => (\n <DrawerContent {...props} />\n ),\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n // Reanimated 2 is not configured\n // @ts-expect-error: the type definitions are incomplete\n useLegacyImplementation = !Reanimated.isConfigured?.(),\n}: Props) {\n const Drawer: React.ComponentType<DrawerProps> = useLegacyImplementation\n ? require('./legacy/Drawer').default\n : require('./modern/Drawer').default;\n\n const focusedRouteKey = state.routes[state.index].key;\n const {\n drawerHideStatusBarOnOpen = false,\n drawerPosition = I18nManager.isRTL ? 'right' : 'left',\n drawerStatusBarAnimation = 'slide',\n drawerStyle,\n drawerType = Platform.select({ ios: 'slide', default: 'front' }),\n gestureHandlerProps,\n keyboardDismissMode = 'on-drag',\n overlayColor = 'rgba(0, 0, 0, 0.5)',\n swipeEdgeWidth = 32,\n swipeEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n swipeMinDistance = 60,\n } = descriptors[focusedRouteKey].options;\n\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n\n const dimensions = useSafeAreaFrame();\n\n const { colors } = useTheme();\n\n const drawerStatus = getDrawerStatusFromState(state);\n\n const handleDrawerOpen = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.openDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n const handleDrawerClose = React.useCallback(() => {\n navigation.dispatch({\n ...DrawerActions.closeDrawer(),\n target: state.key,\n });\n }, [navigation, state.key]);\n\n React.useEffect(() => {\n if (drawerStatus === defaultStatus || drawerType === 'permanent') {\n return;\n }\n\n const handleHardwareBack = () => {\n // We shouldn't handle the back button if the parent screen isn't focused\n // This will avoid the drawer overriding event listeners from a focused screen\n if (!navigation.isFocused()) {\n return false;\n }\n\n if (defaultStatus === 'open') {\n handleDrawerOpen();\n } else {\n handleDrawerClose();\n }\n\n return true;\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleHardwareBack();\n }\n };\n\n // We only add the listeners when drawer opens\n // This way we can make sure that the listener is added as late as possible\n // This will make sure that our handler will run first when back button is pressed\n const subscription = BackHandler.addEventListener(\n 'hardwareBackPress',\n handleHardwareBack\n );\n\n if (Platform.OS === 'web') {\n document?.body?.addEventListener?.('keyup', handleEscape);\n }\n\n return () => {\n subscription.remove();\n\n if (Platform.OS === 'web') {\n document?.body?.removeEventListener?.('keyup', handleEscape);\n }\n };\n }, [\n defaultStatus,\n drawerStatus,\n drawerType,\n handleDrawerClose,\n handleDrawerOpen,\n navigation,\n ]);\n\n const renderDrawerContent = () => {\n return (\n <DrawerPositionContext.Provider value={drawerPosition}>\n {drawerContent({\n state: state,\n navigation: navigation,\n descriptors: descriptors,\n })}\n </DrawerPositionContext.Provider>\n );\n };\n\n const renderSceneContent = () => {\n return (\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n hasTwoStates\n style={styles.content}\n >\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const { lazy = true, unmountOnBlur } = descriptor.options;\n const isFocused = state.index === index;\n\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n\n const {\n header = ({ layout, options }: DrawerHeaderProps) => (\n <Header\n {...options}\n layout={layout}\n title={getHeaderTitle(options, route.name)}\n headerLeft={\n options.headerLeft ??\n ((props) => <DrawerToggleButton {...props} />)\n }\n />\n ),\n sceneContainerStyle,\n } = descriptor.options;\n\n return (\n <MaybeScreen\n key={route.key}\n style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}\n visible={isFocused}\n enabled={detachInactiveScreens}\n >\n <Screen\n focused={isFocused}\n route={descriptor.route}\n navigation={descriptor.navigation}\n headerShown={descriptor.options.headerShown}\n headerTransparent={descriptor.options.headerTransparent}\n headerStatusBarHeight={descriptor.options.headerStatusBarHeight}\n header={header({\n layout: dimensions,\n route: descriptor.route,\n navigation:\n descriptor.navigation as DrawerNavigationProp<ParamListBase>,\n options: descriptor.options,\n })}\n style={sceneContainerStyle}\n >\n {descriptor.render()}\n </Screen>\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n );\n };\n\n return (\n <DrawerStatusContext.Provider value={drawerStatus}>\n <Drawer\n open={drawerStatus !== 'closed'}\n onOpen={handleDrawerOpen}\n onClose={handleDrawerClose}\n gestureHandlerProps={gestureHandlerProps}\n swipeEnabled={swipeEnabled}\n swipeEdgeWidth={swipeEdgeWidth}\n swipeVelocityThreshold={500}\n swipeDistanceThreshold={swipeMinDistance}\n hideStatusBarOnOpen={drawerHideStatusBarOnOpen}\n statusBarAnimation={drawerStatusBarAnimation}\n keyboardDismissMode={keyboardDismissMode}\n drawerType={drawerType}\n drawerPosition={drawerPosition}\n drawerStyle={[\n {\n width: getDefaultDrawerWidth(dimensions),\n backgroundColor: colors.card,\n },\n drawerType === 'permanent' &&\n (drawerPosition === 'left'\n ? {\n borderRightColor: colors.border,\n borderRightWidth: StyleSheet.hairlineWidth,\n }\n : {\n borderLeftColor: colors.border,\n borderLeftWidth: StyleSheet.hairlineWidth,\n }),\n drawerStyle,\n ]}\n overlayStyle={{ backgroundColor: overlayColor }}\n renderDrawerContent={renderDrawerContent}\n renderSceneContent={renderSceneContent}\n dimensions={dimensions}\n />\n </DrawerStatusContext.Provider>\n );\n}\n\nexport default function DrawerView({ navigation, ...rest }: Props) {\n return (\n <SafeAreaProviderCompat>\n <GestureHandlerWrapper style={styles.content}>\n <DrawerViewBase navigation={navigation} {...rest} />\n </GestureHandlerWrapper>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n },\n});\n"]}
@@ -1,7 +1,7 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import * as React from 'react';
4
- import { InteractionManager, Keyboard, Platform, StatusBar, StyleSheet, View } from 'react-native';
4
+ import { I18nManager, InteractionManager, Keyboard, Platform, StatusBar, StyleSheet, View } from 'react-native';
5
5
  import { PanGestureHandler, State as GestureState } from 'react-native-gesture-handler';
6
6
  import Animated, { interpolate, runOnJS, useAnimatedGestureHandler, useAnimatedStyle, useDerivedValue, useSharedValue, withSpring } from 'react-native-reanimated';
7
7
  import DrawerProgressContext from '../../utils/DrawerProgressContext';
@@ -100,7 +100,7 @@ export default function Drawer(_ref) {
100
100
  hideStatusBar(true);
101
101
  };
102
102
 
103
- const onGestureEnd = () => {
103
+ const onGestureFinish = () => {
104
104
  endInteraction();
105
105
  }; // FIXME: Currently hitSlop is broken when on Android when drawer is on right
106
106
  // https://github.com/software-mansion/react-native-gesture-handler/issues/569
@@ -160,7 +160,9 @@ export default function Drawer(_ref) {
160
160
  (event.velocityX === 0 ? event.translationX : event.velocityX) > 0 : // If swiped to left, open the drawer, otherwise close it
161
161
  (event.velocityX === 0 ? event.translationX : event.velocityX) < 0 : open;
162
162
  toggleDrawer(nextOpen, event.velocityX);
163
- runOnJS(onGestureEnd)();
163
+ },
164
+ onFinish: () => {
165
+ runOnJS(onGestureFinish)();
164
166
  }
165
167
  });
166
168
  const translateX = useDerivedValue(() => {
@@ -194,11 +196,13 @@ export default function Drawer(_ref) {
194
196
  return translateX;
195
197
  });
196
198
  const drawerAnimatedStyle = useAnimatedStyle(() => {
199
+ const distanceFromEdge = dimensions.width - drawerWidth;
197
200
  return {
198
201
  transform: drawerType === 'permanent' ? // Reanimated needs the property to be present, but it results in Browser bug
199
202
  // https://bugs.chromium.org/p/chromium/issues/detail?id=20574
200
203
  [] : [{
201
- translateX: drawerType === 'back' ? 0 : translateX.value
204
+ translateX: // The drawer stays in place when `drawerType` is `back`
205
+ (drawerType === 'back' ? 0 : translateX.value) + (drawerPosition === 'left' ? I18nManager.isRTL ? -distanceFromEdge : 0 : I18nManager.isRTL ? 0 : distanceFromEdge)
202
206
  }]
203
207
  };
204
208
  });
@@ -207,7 +211,8 @@ export default function Drawer(_ref) {
207
211
  transform: drawerType === 'permanent' ? // Reanimated needs the property to be present, but it results in Browser bug
208
212
  // https://bugs.chromium.org/p/chromium/issues/detail?id=20574
209
213
  [] : [{
210
- translateX: drawerType === 'front' ? 0 : drawerPosition === 'left' ? drawerWidth + translateX.value : translateX.value - drawerWidth
214
+ translateX: // The screen content stays in place when `drawerType` is `front`
215
+ drawerType === 'front' ? 0 : translateX.value + drawerWidth * (drawerPosition === 'left' ? 1 : -1)
211
216
  }]
212
217
  };
213
218
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["Drawer.tsx"],"names":["React","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","onGestureEnd","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","touchDistance","ACTIVE","drawerAnimatedStyle","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 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 onGestureEnd = () => {\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 runOnJS(onGestureEnd)();\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 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: drawerType === 'back' ? 0 : translateX.value,\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 drawerType === 'front'\n ? 0\n : drawerPosition === 'left'\n ? drawerWidth + translateX.value\n : translateX.value - drawerWidth,\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","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"]}
@@ -29,9 +29,7 @@ export declare type DrawerNavigationConfig = {
29
29
  * The new implementation based on Reanimated 2 will perform better,
30
30
  * but you need additional configuration and need to use Hermes with Flipper to debug.
31
31
  *
32
- * This defaults to `true` in following cases:
33
- * - Reanimated 2 is not configured
34
- * - App is connected to Chrome debugger (Reanimated 2 cannot be used with Chrome debugger)
32
+ * This defaults to `true` if Reanimated 2 is not configured.
35
33
  *
36
34
  * Otherwise, it defaults to `false`
37
35
  */
@@ -124,6 +122,8 @@ export declare type DrawerNavigationOptions = HeaderOptions & {
124
122
  * - `back`: The drawer is revealed behind the screen on swipe.
125
123
  * - `slide`: Both the screen and the drawer slide on swipe to reveal the drawer.
126
124
  * - `permanent`: A permanent drawer is shown as a sidebar.
125
+ *
126
+ * Defaults to `slide` on iOS and `front` on other platforms.
127
127
  */
128
128
  drawerType?: 'front' | 'back' | 'slide' | 'permanent';
129
129
  /**
@@ -143,14 +143,6 @@ export declare type DrawerNavigationOptions = HeaderOptions & {
143
143
  * Style object for the component wrapping the screen content.
144
144
  */
145
145
  sceneContainerStyle?: StyleProp<ViewStyle>;
146
- /**
147
- * Whether you can use gestures to open or close the drawer.
148
- * Setting this to `false` disables swipe gestures as well as tap on overlay to close.
149
- * See `swipeEnabled` to disable only the swipe gesture.
150
- * Defaults to `true`.
151
- * Not supported on Web.
152
- */
153
- gestureEnabled?: boolean;
154
146
  /**
155
147
  * Props to pass to the underlying pan gesture handler.
156
148
  * Not supported on Web.
@@ -6,7 +6,7 @@ declare const Overlay: React.ForwardRefExoticComponent<{
6
6
  onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | Animated.Node<((event: import("react-native").LayoutChangeEvent) => void) | undefined> | undefined;
7
7
  pointerEvents?: "none" | "auto" | "box-none" | "box-only" | Animated.Node<"none" | "auto" | "box-none" | "box-only" | undefined> | undefined;
8
8
  removeClippedSubviews?: boolean | Animated.Node<boolean | undefined> | undefined;
9
- style?: import("react-native").StyleProp<Animated.AnimateStyle<import("react-native").StyleProp<import("react-native").ViewStyle>>>;
9
+ style?: import("react-native").StyleProp<import("react-native").ViewStyle> | Animated.Node<import("react-native").StyleProp<import("react-native").ViewStyle>>;
10
10
  testID?: string | Animated.Node<string | undefined> | undefined;
11
11
  nativeID?: string | Animated.Node<string | undefined> | undefined;
12
12
  collapsable?: boolean | Animated.Node<boolean | undefined> | undefined;
@@ -60,6 +60,8 @@ declare const Overlay: React.ForwardRefExoticComponent<{
60
60
  onAccessibilityTap?: (() => void) | Animated.Node<(() => void) | undefined> | undefined;
61
61
  onMagicTap?: (() => void) | Animated.Node<(() => void) | undefined> | undefined;
62
62
  accessibilityIgnoresInvertColors?: boolean | Animated.Node<boolean | undefined> | undefined;
63
+ } & {
64
+ style?: import("react-native").StyleProp<Animated.AnimateStyle<import("react-native").StyleProp<import("react-native").ViewStyle>>>;
63
65
  } & {
64
66
  animatedProps?: Partial<Animated.AnimateProps<import("react-native").ViewProps>> | undefined;
65
67
  layout?: import("react-native-reanimated").BaseAnimationBuilder | import("react-native-reanimated").LayoutAnimationFunction | typeof import("react-native-reanimated").BaseAnimationBuilder | undefined;
@@ -6,7 +6,7 @@ declare const Overlay: React.ForwardRefExoticComponent<{
6
6
  onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | Animated.Node<((event: import("react-native").LayoutChangeEvent) => void) | undefined> | undefined;
7
7
  pointerEvents?: "none" | "auto" | "box-none" | "box-only" | Animated.Node<"none" | "auto" | "box-none" | "box-only" | undefined> | undefined;
8
8
  removeClippedSubviews?: boolean | Animated.Node<boolean | undefined> | undefined;
9
- style?: import("react-native").StyleProp<Animated.AnimateStyle<import("react-native").StyleProp<import("react-native").ViewStyle>>>;
9
+ style?: import("react-native").StyleProp<import("react-native").ViewStyle> | Animated.Node<import("react-native").StyleProp<import("react-native").ViewStyle>>;
10
10
  testID?: string | Animated.Node<string | undefined> | undefined;
11
11
  nativeID?: string | Animated.Node<string | undefined> | undefined;
12
12
  collapsable?: boolean | Animated.Node<boolean | undefined> | undefined;
@@ -60,6 +60,8 @@ declare const Overlay: React.ForwardRefExoticComponent<{
60
60
  onAccessibilityTap?: (() => void) | Animated.Node<(() => void) | undefined> | undefined;
61
61
  onMagicTap?: (() => void) | Animated.Node<(() => void) | undefined> | undefined;
62
62
  accessibilityIgnoresInvertColors?: boolean | Animated.Node<boolean | undefined> | undefined;
63
+ } & {
64
+ style?: import("react-native").StyleProp<Animated.AnimateStyle<import("react-native").StyleProp<import("react-native").ViewStyle>>>;
63
65
  } & {
64
66
  animatedProps?: Partial<Animated.AnimateProps<import("react-native").ViewProps>> | undefined;
65
67
  layout?: import("react-native-reanimated").BaseAnimationBuilder | import("react-native-reanimated").LayoutAnimationFunction | typeof import("react-native-reanimated").BaseAnimationBuilder | undefined;
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.3.0",
4
+ "version": "6.3.3",
5
5
  "keywords": [
6
6
  "react-native-component",
7
7
  "react-component",
@@ -55,7 +55,7 @@
55
55
  "react-native": "~0.64.3",
56
56
  "react-native-builder-bob": "^0.18.1",
57
57
  "react-native-gesture-handler": "~2.2.0",
58
- "react-native-reanimated": "~2.3.1",
58
+ "react-native-reanimated": "~2.4.1",
59
59
  "react-native-safe-area-context": "3.3.2",
60
60
  "react-native-screens": "~3.10.1",
61
61
  "typescript": "^4.3.2"
@@ -83,5 +83,5 @@
83
83
  ]
84
84
  ]
85
85
  },
86
- "gitHead": "4cddbce150413c15db93897c76b813f436f5186d"
86
+ "gitHead": "1e342f16627854bca6534e2aef149824c00c99c0"
87
87
  }
package/src/types.tsx CHANGED
@@ -40,9 +40,7 @@ export type DrawerNavigationConfig = {
40
40
  * The new implementation based on Reanimated 2 will perform better,
41
41
  * but you need additional configuration and need to use Hermes with Flipper to debug.
42
42
  *
43
- * This defaults to `true` in following cases:
44
- * - Reanimated 2 is not configured
45
- * - App is connected to Chrome debugger (Reanimated 2 cannot be used with Chrome debugger)
43
+ * This defaults to `true` if Reanimated 2 is not configured.
46
44
  *
47
45
  * Otherwise, it defaults to `false`
48
46
  */
@@ -152,6 +150,8 @@ export type DrawerNavigationOptions = HeaderOptions & {
152
150
  * - `back`: The drawer is revealed behind the screen on swipe.
153
151
  * - `slide`: Both the screen and the drawer slide on swipe to reveal the drawer.
154
152
  * - `permanent`: A permanent drawer is shown as a sidebar.
153
+ *
154
+ * Defaults to `slide` on iOS and `front` on other platforms.
155
155
  */
156
156
  drawerType?: 'front' | 'back' | 'slide' | 'permanent';
157
157
 
@@ -176,15 +176,6 @@ export type DrawerNavigationOptions = HeaderOptions & {
176
176
  */
177
177
  sceneContainerStyle?: StyleProp<ViewStyle>;
178
178
 
179
- /**
180
- * Whether you can use gestures to open or close the drawer.
181
- * Setting this to `false` disables swipe gestures as well as tap on overlay to close.
182
- * See `swipeEnabled` to disable only the swipe gesture.
183
- * Defaults to `true`.
184
- * Not supported on Web.
185
- */
186
- gestureEnabled?: boolean;
187
-
188
179
  /**
189
180
  * Props to pass to the underlying pan gesture handler.
190
181
  * Not supported on Web.
@@ -19,7 +19,7 @@ import {
19
19
  StyleSheet,
20
20
  View,
21
21
  } from 'react-native';
22
- import Animated from 'react-native-reanimated';
22
+ import * as Reanimated from 'react-native-reanimated';
23
23
  import { useSafeAreaFrame } from 'react-native-safe-area-context';
24
24
 
25
25
  import type {
@@ -80,12 +80,9 @@ function DrawerViewBase({
80
80
  detachInactiveScreens = Platform.OS === 'web' ||
81
81
  Platform.OS === 'android' ||
82
82
  Platform.OS === 'ios',
83
- // Running in chrome debugger
84
- // @ts-expect-error
85
- useLegacyImplementation = !global.nativeCallSyncHook ||
86
- // Reanimated 2 is not configured
87
- // @ts-expect-error: the type definitions are incomplete
88
- !Animated.isConfigured?.(),
83
+ // Reanimated 2 is not configured
84
+ // @ts-expect-error: the type definitions are incomplete
85
+ useLegacyImplementation = !Reanimated.isConfigured?.(),
89
86
  }: Props) {
90
87
  const Drawer: React.ComponentType<DrawerProps> = useLegacyImplementation
91
88
  ? require('./legacy/Drawer').default
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import {
3
+ I18nManager,
3
4
  InteractionManager,
4
5
  Keyboard,
5
6
  Platform,
@@ -129,7 +130,7 @@ export default function Drawer({
129
130
  hideStatusBar(true);
130
131
  };
131
132
 
132
- const onGestureEnd = () => {
133
+ const onGestureFinish = () => {
133
134
  endInteraction();
134
135
  };
135
136
 
@@ -210,7 +211,9 @@ export default function Drawer({
210
211
  : open;
211
212
 
212
213
  toggleDrawer(nextOpen, event.velocityX);
213
- runOnJS(onGestureEnd)();
214
+ },
215
+ onFinish: () => {
216
+ runOnJS(onGestureFinish)();
214
217
  },
215
218
  });
216
219
 
@@ -260,6 +263,8 @@ export default function Drawer({
260
263
  });
261
264
 
262
265
  const drawerAnimatedStyle = useAnimatedStyle(() => {
266
+ const distanceFromEdge = dimensions.width - drawerWidth;
267
+
263
268
  return {
264
269
  transform:
265
270
  drawerType === 'permanent'
@@ -268,7 +273,16 @@ export default function Drawer({
268
273
  []
269
274
  : [
270
275
  {
271
- translateX: drawerType === 'back' ? 0 : translateX.value,
276
+ translateX:
277
+ // The drawer stays in place when `drawerType` is `back`
278
+ (drawerType === 'back' ? 0 : translateX.value) +
279
+ (drawerPosition === 'left'
280
+ ? I18nManager.isRTL
281
+ ? -distanceFromEdge
282
+ : 0
283
+ : I18nManager.isRTL
284
+ ? 0
285
+ : distanceFromEdge),
272
286
  },
273
287
  ],
274
288
  };
@@ -284,11 +298,11 @@ export default function Drawer({
284
298
  : [
285
299
  {
286
300
  translateX:
301
+ // The screen content stays in place when `drawerType` is `front`
287
302
  drawerType === 'front'
288
303
  ? 0
289
- : drawerPosition === 'left'
290
- ? drawerWidth + translateX.value
291
- : translateX.value - drawerWidth,
304
+ : translateX.value +
305
+ drawerWidth * (drawerPosition === 'left' ? 1 : -1),
292
306
  },
293
307
  ],
294
308
  };