UNPKG

react-navigation-drawer

Version:

Drawer navigator component for React Navigation

162 lines (161 loc) 6.15 kB
/// <reference types="react" /> import { NavigationScreenProp, NavigationState, NavigationRoute, NavigationParams, NavigationDescriptor, SupportedThemes, NavigationScreenConfig } from 'react-navigation'; import { StyleProp, ViewStyle, TextStyle } from 'react-native'; import Animated from 'react-native-reanimated'; export declare type Scene = { route: NavigationRoute; index: number; focused: boolean; tintColor?: string; }; export declare type NavigationDrawerState = NavigationState & { isDrawerOpen: boolean; }; export declare type NavigationDrawerProp<State = NavigationRoute, Params = NavigationParams> = NavigationScreenProp<State, Params> & { openDrawer: () => void; closeDrawer: () => void; toggleDrawer: () => void; jumpTo: (routeName: string, key?: string) => void; }; export declare type DrawerLockMode = 'unlocked' | 'locked-closed' | 'locked-open'; export declare type DrawerIconProps = { tintColor?: string; focused: boolean; }; export declare type DrawerLabelProps = { tintColor?: string; focused: boolean; }; export declare type NavigationDrawerOptions = { title?: string; drawerLabel?: React.ReactNode | ((props: DrawerLabelProps) => React.ReactNode); drawerIcon?: React.ReactNode | ((props: DrawerIconProps) => React.ReactNode); drawerLockMode?: DrawerLockMode; }; export declare type NavigationDrawerConfig = { contentComponent?: React.ComponentType<DrawerContentComponentProps>; edgeWidth?: number; minSwipeDistance?: number; drawerWidth?: number | (() => number); drawerPosition?: 'left' | 'right'; drawerType?: 'front' | 'back' | 'slide'; drawerLockMode?: DrawerLockMode; keyboardDismissMode?: 'none' | 'on-drag'; swipeEdgeWidth?: number; swipeDistanceThreshold?: number; swipeVelocityThreshold?: number; hideStatusBar?: boolean; statusBarAnimation?: 'slide' | 'none' | 'fade'; drawerBackgroundColor?: ThemedColor; overlayColor?: ThemedColor; screenContainerStyle?: StyleProp<ViewStyle>; detachInactiveScreens?: boolean; }; export declare type NavigationDrawerRouterConfig = { unmountInactiveRoutes?: boolean; resetOnBlur?: boolean; initialRouteName?: string; contentComponent?: React.ComponentType<DrawerContentComponentProps>; contentOptions?: { /** * the array of routes, can be modified or overridden */ items?: NavigationRoute[]; /** * key identifying the active route */ activeItemKey?: string; /** * label and icon color of the active label */ activeTintColor?: string; /** * background color of the active label */ activeBackgroundColor?: string; /** * label and icon color of the inactive label */ inactiveTintColor?: string; /** * background color of the inactive label */ inactiveBackgroundColor?: string; /** * function to be invoked when an item is pressed */ onItemPress?: (info: DrawerItem) => void; /** * style object for the content section */ itemsContainerStyle?: StyleProp<ViewStyle>; /** * style object for the single item, which can contain an Icon and/or a Label */ itemStyle?: StyleProp<ViewStyle>; /** * style object to overwrite Text style inside content section, when your label is a string */ labelStyle?: StyleProp<TextStyle>; /** * style object to overwrite Text style of the active label, when your label is a string (merged with labelStyle) */ activeLabelStyle?: StyleProp<TextStyle>; /** * style object to overwrite Text style of the inactive label, when your label is a string (merged with labelStyle) */ inactiveLabelStyle?: StyleProp<TextStyle>; /** * style object to overwrite View icon container styles */ iconContainerStyle?: StyleProp<ViewStyle>; }; backBehavior?: 'none' | 'initialRoute' | 'history'; }; export interface DrawerItem { route: NavigationRoute; focused: boolean; } export declare type ThemedColor = string | { light: string; dark: string; }; export declare type DrawerNavigatorItemsProps = { items: NavigationRoute[]; activeItemKey?: string | null; activeTintColor?: string | ThemedColor; activeBackgroundColor?: string | ThemedColor; inactiveTintColor?: string | ThemedColor; inactiveBackgroundColor?: string | ThemedColor; getLabel: (scene: Scene) => React.ReactNode; renderIcon: (scene: Scene) => React.ReactNode; onItemPress: (scene: { route: NavigationRoute; focused: boolean; }) => void; itemsContainerStyle?: StyleProp<ViewStyle>; itemStyle?: StyleProp<ViewStyle>; labelStyle?: StyleProp<TextStyle>; activeLabelStyle?: StyleProp<TextStyle>; inactiveLabelStyle?: StyleProp<TextStyle>; iconContainerStyle?: StyleProp<ViewStyle>; drawerPosition: 'left' | 'right'; screenProps: unknown; }; export declare type DrawerContentComponentProps = DrawerNavigatorItemsProps & { navigation: NavigationScreenProp<NavigationDrawerState>; descriptors: SceneDescriptorMap; drawerOpenProgress: Animated.Node<number>; screenProps: unknown; }; export declare type NavigationDrawerScreenProps<Params = NavigationParams, ScreenProps = unknown> = { theme: SupportedThemes; navigation: NavigationDrawerProp<NavigationRoute, Params>; screenProps: ScreenProps; }; export declare type NavigationDrawerScreenComponent<Params = NavigationParams, ScreenProps = unknown> = React.ComponentType<NavigationDrawerScreenProps<Params, ScreenProps>> & { navigationOptions?: NavigationScreenConfig<NavigationDrawerOptions, NavigationDrawerProp<NavigationRoute, Params>, ScreenProps>; }; export declare type SceneDescriptorMap = { [key: string]: NavigationDescriptor<NavigationParams, NavigationDrawerOptions, NavigationDrawerProp<NavigationRoute, any>>; };