import React, { PropsWithChildren } from 'react'; import { BottomTabNavigationOptions } from '@react-navigation/bottom-tabs'; import { NativeStackNavigationOptions } from '@react-navigation/native-stack'; import { NavigationContainer, ParamListBase, RouteProp } from '@react-navigation/native'; import { DrawerNavigationOptions } from '@react-navigation/drawer'; import { NativeStackNavigatorProps } from '@react-navigation/native-stack/lib/typescript/src/types'; export declare type Keys = keyof T; export declare type ContainerLayoutKeys = Keys; export declare type RootSetAs = keyof Pick; export declare type BaseOptionsProps = { route?: RouteProp; navigation?: any; } | undefined; export declare type BaseOptions = Return | ((props?: BaseOptionsProps) => Return); declare type ScreenOptions = BaseOptions; export declare type StackScreenOptions = ScreenOptions; export declare type ModalScreenOptions = StackScreenOptions; export declare type TabScreenOptions = BaseOptions; export declare type DrawerScreenOptions = BaseOptions; declare type StackNavigatorProps = Omit; declare type TabNavigatorProps = any; declare type DrawerNavigatorProps = any; export declare type TStackDefinition = StackName | ScreenName[] | TStackDataObj; export declare type TDrawerDefinition = DrawerName; export declare type TTabsDefinition = TabName; export declare type TModalsDefinition = ModalName; export declare type TScreenData = NavioScreen | { component: NavioScreen; options?: ScreenOptions; }; export declare type TStackDataObj = { screens: ScreenName[]; options?: StackScreenOptions; navigatorProps?: StackNavigatorProps; }; export declare type TStackData = ScreenName[] | TStackDataObj; export declare type TTabLayoutValue = { stack?: TStackDefinition; drawer?: TDrawerDefinition; options?: TabScreenOptions; }; export declare type TTabsData = { layout: Record>; options?: TabScreenOptions; navigatorProps?: TabNavigatorProps; }; export declare type TDrawerLayoutValue = { stack?: TStackDefinition; tabs?: TTabsDefinition; options?: DrawerScreenOptions; }; export declare type TDrawersData = { layout: Record>; options?: DrawerScreenOptions; navigatorProps?: DrawerNavigatorProps; }; export declare type TModalData = { stack?: TStackDefinition; options?: ModalScreenOptions; }; export declare type TRootName = `tabs.${TabsName}` | `stacks.${StackName}` | `drawers.${DrawersName}`; export declare type ExtractProps = Type extends React.FC ? X : never; export declare type Layout = { /** * `(required)` * Screens of the app. Navigate to by using `navio.push('...')` method. */ screens: Screens; /** * `(optional)` * Stacks of the app. Navigate to by using `navio.pushStack('...Stack')` method. Good to use if you want to hide tabs on the specific screens. */ stacks?: Stacks; /** * `(optional)` * Tabs app. Navigate to by using `navio.jumpTo('...Tab')` method. */ tabs?: Tabs; /** * `(optional)` * Modals of the app. Navigate to by using `navio.show('...Modal')` method. */ modals?: Modals; /** * `(optional)` * Drawers of the app. Navigate to by using `navio.drawer.open('...Drawer')` method. */ drawers?: Drawers; /** * `(optional)` * Root name to start the app with. Possible values `any of tabs, stacks, drawers names`. */ root?: RootName; /** * `(optional)` * List of hooks that will be run on each generated stack or tab navigators. Useful for dark mode or language change. */ hooks?: Function[]; /** * `(optional)` * Default options to be applied per each stack's, tab's or drawer's screens generated within the app. */ defaultOptions?: DefaultOptions; }; export declare type DefaultOptions = { stacks?: { screen?: StackScreenOptions; container?: ScreenOptions; }; tabs?: { screen?: TabScreenOptions; container?: ScreenOptions; }; drawers?: { screen?: DrawerScreenOptions; container?: ScreenOptions; }; modals?: { container?: ScreenOptions; }; }; export declare type NavioScreen = React.FC> & { options?: StackScreenOptions; }; export declare type RootProps = { navigationContainerProps?: Omit, 'children'>; root?: RootName; }; export declare type TunnelEvent$UpdateOptions$Params = { name: Name; options: Options; }; export declare type TunnelEvent = 'tabs.updateOptions' | 'drawer.updateOptions'; export declare type TunnelParams = T; export declare type TunnelListener = (params: TunnelParams) => void; export declare type TunnelEvents = Partial>; export {};