react-navigation-stack
Version:
Stack navigator component for React Navigation
169 lines (168 loc) • 7.13 kB
TypeScript
/// <reference types="react" />
import { Animated, TextProps, StyleProp, TextStyle, ViewStyle } from 'react-native';
import { SafeAreaView, NavigationRoute, NavigationDescriptor, NavigationAction, NavigationState, NavigationParams, NavigationScreenProp, NavigationNavigateAction, NavigationEventCallback, NavigationEventSubscription, NavigationScreenConfig, SupportedThemes } from 'react-navigation';
export declare type Scene = {
key: string;
index: number;
isStale: boolean;
isActive: boolean;
route: NavigationRoute;
descriptor: NavigationDescriptor<NavigationParams, NavigationStackOptions>;
};
export declare type NavigationStackEventName = 'willFocus' | 'didFocus' | 'willBlur' | 'didBlur';
export declare type NavigationStackState = NavigationState;
export declare type NavigationStackProp<State = NavigationRoute, Params = NavigationParams> = NavigationScreenProp<State, Params> & {
push: (routeName: string, params?: NavigationParams, action?: NavigationNavigateAction) => boolean;
replace: (routeName: string, params?: NavigationParams, action?: NavigationNavigateAction) => boolean;
reset: (actions: NavigationAction[], index: number) => boolean;
pop: (n?: number, params?: {
immediate?: boolean;
}) => boolean;
popToTop: (params?: {
immediate?: boolean;
}) => boolean;
addListener: (event: NavigationStackEventName, callback: NavigationEventCallback) => NavigationEventSubscription;
};
export declare type HeaderMode = 'float' | 'screen' | 'none';
export declare type HeaderLayoutPreset = 'left' | 'center';
export declare type HeaderTransitionPreset = 'fade-in-place' | 'uikit';
export declare type HeaderBackgroundTransitionPreset = 'translate' | 'fade' | 'toggle';
export declare type HeaderProps = {
mode: HeaderMode;
position: Animated.Value;
navigation: NavigationStackProp;
layout: TransitionerLayout;
scene: Scene;
scenes: Scene[];
layoutPreset: HeaderLayoutPreset;
transitionPreset?: HeaderTransitionPreset;
backTitleVisible?: boolean;
leftInterpolator?: (props: SceneInterpolatorProps) => any;
titleInterpolator?: (props: SceneInterpolatorProps) => any;
rightInterpolator?: (props: SceneInterpolatorProps) => any;
backgroundInterpolator?: (props: SceneInterpolatorProps) => any;
isLandscape: boolean;
};
export declare type HeaderTransitionConfig = {
headerLeftInterpolator?: SceneInterpolator;
headerLeftLabelInterpolator?: SceneInterpolator;
headerLeftButtonInterpolator?: SceneInterpolator;
headerTitleFromLeftInterpolator?: SceneInterpolator;
headerTitleInterpolator?: SceneInterpolator;
headerRightInterpolator?: SceneInterpolator;
headerBackgroundInterpolator?: SceneInterpolator;
headerLayoutInterpolator?: SceneInterpolator;
};
export declare type NavigationStackOptions = {
title?: string;
header?: ((props: HeaderProps) => React.ReactNode) | null;
headerShown?: boolean;
headerTitle?: ((props: TextProps & {
children?: string;
}) => React.ReactNode) | React.ReactNode;
headerTitleStyle?: StyleProp<TextStyle>;
headerTitleContainerStyle?: StyleProp<ViewStyle>;
headerTintColor?: string;
headerTitleAllowFontScaling?: boolean;
headerBackAllowFontScaling?: boolean;
headerBackTitle?: string | null;
headerBackTitleStyle?: StyleProp<TextStyle>;
headerTruncatedBackTitle?: string;
headerLeft?: ((props: HeaderBackButtonProps) => React.ReactNode) | React.ReactNode;
headerLeftContainerStyle?: StyleProp<ViewStyle>;
headerRight?: (() => React.ReactNode) | React.ReactNode;
headerRightContainerStyle?: StyleProp<ViewStyle>;
headerBackImage?: (props: {
tintColor?: string;
title?: string | null;
}) => React.ReactNode;
headerPressColorAndroid?: string;
headerBackground?: React.ReactNode;
headerTransparent?: boolean;
headerStyle?: StyleProp<ViewStyle>;
headerForceInset?: React.ComponentProps<typeof SafeAreaView>['forceInset'];
gesturesEnabled?: boolean;
gestureDirection?: 'inverted' | 'normal';
gestureResponseDistance?: {
vertical: number;
horizontal: number;
};
disableKeyboardHandling?: boolean;
};
export declare type NavigationStackConfig = {
mode?: 'card' | 'modal';
headerMode?: HeaderMode;
headerLayoutPreset?: HeaderLayoutPreset;
headerTransitionPreset?: HeaderTransitionPreset;
headerBackgroundTransitionPreset?: HeaderBackgroundTransitionPreset;
headerBackTitleVisible?: boolean;
disableKeyboardHandling?: boolean;
transparentCard?: boolean;
cardShadowEnabled?: boolean;
cardOverlayEnabled?: boolean;
cardStyle?: StyleProp<ViewStyle>;
onTransitionStart?: () => void;
onTransitionEnd?: () => void;
transitionConfig?: (transitionProps: TransitionProps, prevTransitionProps?: TransitionProps, isModal?: boolean) => TransitionConfig & HeaderTransitionConfig;
};
export declare type NavigationStackScreenProps<Params = NavigationParams, ScreenProps = unknown> = {
theme: SupportedThemes;
navigation: NavigationStackProp<NavigationRoute, Params>;
screenProps: ScreenProps;
};
export declare type NavigationStackScreenComponent<Params = NavigationParams, ScreenProps = unknown> = React.ComponentType<NavigationStackScreenProps<Params, ScreenProps>> & {
navigationOptions?: NavigationScreenConfig<NavigationStackOptions, NavigationStackProp<NavigationRoute, Params>, ScreenProps>;
};
export declare type SceneDescriptorMap = {
[key: string]: NavigationDescriptor<NavigationParams, NavigationStackOptions, NavigationStackProp>;
};
export declare type HeaderBackButtonProps = {
disabled?: boolean;
onPress: () => void;
pressColorAndroid?: string;
tintColor?: string;
backImage?: NavigationStackOptions['headerBackImage'];
title?: string | null;
truncatedTitle?: string | null;
backTitleVisible?: boolean;
allowFontScaling?: boolean;
titleStyle?: StyleProp<TextStyle>;
layoutPreset: HeaderLayoutPreset;
width?: number;
scene: Scene;
};
export declare type SceneInterpolatorProps = {
mode?: HeaderMode;
layout: TransitionerLayout;
scene: Scene;
scenes: Scene[];
position: Animated.AnimatedInterpolation;
navigation: NavigationStackProp;
shadowEnabled?: boolean;
cardOverlayEnabled?: boolean;
};
export declare type SceneInterpolator = (props: SceneInterpolatorProps) => any;
export declare type TransitionerLayout = {
height: Animated.Value;
width: Animated.Value;
initHeight: number;
initWidth: number;
isMeasured: boolean;
};
export declare type TransitionProps = {
layout: TransitionerLayout;
navigation: NavigationStackProp;
position: Animated.Value;
scenes: Scene[];
scene: Scene;
index: number;
};
export declare type TransitionConfig = {
transitionSpec: {
timing: Function;
};
screenInterpolator: SceneInterpolator;
containerStyle?: StyleProp<ViewStyle>;
containerStyleLight?: StyleProp<ViewStyle>;
containerStyleDark?: StyleProp<ViewStyle>;
};