import type { ReactNode } from 'react'; import type { ViewStyle, StyleProp } from 'react-native'; export interface NavigationState { routes: Route[]; index: number; key: string; } export interface Route { key: string; name: string; params?: Record; } export interface NavigationOptions { title?: string; headerShown?: boolean; headerTitle?: string; headerLeft?: () => ReactNode; headerRight?: () => ReactNode; headerBackTitle?: string; } export interface ScreenProps { name: string; component: React.ComponentType; options?: NavigationOptions | ((props: { route: Route; }) => NavigationOptions); initialParams?: Record; } export interface NavigatorProps { children: ReactNode; initialRouteName?: string; screenOptions?: NavigationOptions; } export interface DrawerOptions extends NavigationOptions { drawerIcon?: (props: { color: string; size: number; focused: boolean; }) => ReactNode; drawerLabel?: string; } export interface DrawerScreenProps extends Omit { options?: DrawerOptions | ((props: { route: Route; }) => DrawerOptions); } export interface DrawerNavigatorProps extends NavigatorProps { screenOptions?: DrawerOptions; drawerStyle?: StyleProp; drawerContent?: (props: any) => ReactNode; } export interface StackOptions extends NavigationOptions { presentation?: 'modal' | 'card'; gestureEnabled?: boolean; } export interface StackScreenProps extends Omit { options?: StackOptions | ((props: { route: Route; }) => StackOptions); } export interface StackNavigatorProps extends NavigatorProps { screenOptions?: StackOptions; } export interface NavigationContext { state: NavigationState; navigate: (name: string, params?: Record) => void; goBack: () => void; canGoBack: () => boolean; reset: (state: NavigationState) => void; }