import { BlueBase, IntlContextData, MaybeThunk, ThemeContextData } from '@bluebase/core'; import { BottomTabNavigationOptions as BaseBottomTabNavigationOptions } from '@react-navigation/bottom-tabs'; import { DefaultNavigatorOptions, EventMapBase, NavigationState, ParamListBase, RouteConfig as BaseRouteConfig, RouteProp } from '@react-navigation/core'; import { DrawerNavigationOptions as BaseDrawerNavigationOptions } from '@react-navigation/drawer'; import { MaterialBottomTabNavigationOptions as BaseMaterialBottomTabNavigationOptions } from '@react-navigation/material-bottom-tabs'; import { MaterialTopTabNavigationOptions as BaseMaterialTopTabNavigationOptions } from '@react-navigation/material-top-tabs'; import { NativeStackNavigationOptions as BaseNativeStackNavigationOptions } from '@react-navigation/native-stack'; import { StackNavigationOptions as BaseStackNavigationOptions } from '@react-navigation/stack'; import React from 'react'; export type RouteType = 'bottom-tabs' | 'drawer' | 'material-bottom-tabs' | 'material-top-tabs' | 'native-stack' | 'stack' | 'switch'; export interface BlueBaseContextPack { BB: BlueBase; themes: ThemeContextData; intl: IntlContextData; } export type CustomRouteConfig = Omit, 'children'> & { /** Screen component */ screen?: React.ComponentType | string; /** URL */ path?: string; /** Should route match exact path pattern? */ exact?: boolean; /** Child Navigator */ navigator?: NavigatorProps; }; export type CustomNavigatorConfig = Omit, 'children'> & { type: RouteType; /** * Routes */ routes: MaybeThunk; /** * Default options for all screens under this navigator. */ screenOptions?: NavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => NavigationOptions); /** * Default options specified by the navigator. * It receives the custom options in the arguments if a function is specified. */ defaultScreenOptions?: NavigationOptions | ((props: { route: RouteProp; navigation: any; options: NavigationOptions; }, ctx: BlueBaseContextPack) => NavigationOptions); }; export type BottomTabNavigationOptions = BaseBottomTabNavigationOptions & {}; export type BottomTabRouteConfig = CustomRouteConfig & { options?: BottomTabNavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => BottomTabNavigationOptions); }; export type BottomTabNavigatorConfig = CustomNavigatorConfig & { type: 'bottom-tabs'; }; export type DrawerNavigationOptions = BaseDrawerNavigationOptions & {}; export type DrawerRouteConfig = CustomRouteConfig & { options?: DrawerNavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => DrawerNavigationOptions); }; export type DrawerNavigatorConfig = CustomNavigatorConfig & { type: 'drawer'; }; export type MaterialBottomTabNavigationOptions = BaseMaterialBottomTabNavigationOptions & {}; export type MaterialBottomTabRouteConfig = CustomRouteConfig & { options?: MaterialBottomTabNavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => MaterialBottomTabNavigationOptions); }; export type MaterialBottomTabNavigatorConfig = CustomNavigatorConfig & { type: 'material-bottom-tabs'; }; export type MaterialTopTabNavigationOptions = BaseMaterialTopTabNavigationOptions & {}; export type MaterialTopTabRouteConfig = CustomRouteConfig & { options?: MaterialTopTabNavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => MaterialTopTabNavigationOptions); }; export type MaterialTopTabNavigatorConfig = CustomNavigatorConfig & { type: 'material-top-tabs'; }; export type NativeStackNavigationOptions = BaseNativeStackNavigationOptions & {}; export type NativeStackRouteConfig = CustomRouteConfig & { options?: NativeStackNavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => NativeStackNavigationOptions); }; export type NativeStackNavigatorConfig = CustomNavigatorConfig & { type: 'native-stack'; }; export type StackNavigationOptions = BaseStackNavigationOptions & {}; export type StackRouteConfig = CustomRouteConfig & { options?: StackNavigationOptions | ((props: { route: RouteProp; navigation: any; }, ctx: BlueBaseContextPack) => StackNavigationOptions); }; export type StackNavigatorConfig = CustomNavigatorConfig & { type: 'stack'; }; export type SwitchRouteConfig = CustomRouteConfig & {}; export type SwitchNavigatorConfig = Omit, 'screenOptions' | 'defaultScreenOptions'> & { type: 'switch'; }; export type RouteConfig = BottomTabRouteConfig | DrawerRouteConfig | MaterialBottomTabRouteConfig | MaterialTopTabRouteConfig | NativeStackRouteConfig | StackRouteConfig | SwitchRouteConfig; export type NavigatorProps = BottomTabNavigatorConfig | DrawerNavigatorConfig | MaterialBottomTabNavigatorConfig | MaterialTopTabNavigatorConfig | NativeStackNavigatorConfig | StackNavigatorConfig | SwitchNavigatorConfig; /** * Props for the Router component */ export interface NavigationProps { [key: string]: any; navigator: NavigatorProps; } export declare const Navigation: React.ComponentType;