react-native-screens
Version:
Native navigation primitives for your React Native app.
174 lines • 6.6 kB
TypeScript
import type { NativeSyntheticEvent, StyleProp, ViewProps, ViewStyle } from 'react-native';
import type { TabsScreenPropsIOS } from './TabsScreen.ios.types';
import type { TabsScreenPropsAndroid } from './TabsScreen.android.types';
import type { InterfaceOrientation } from '../../shared/types';
export type EmptyObject = Record<string, never>;
export type TabsScreenEventHandler<T> = (event: NativeSyntheticEvent<T>) => void;
export type TabsScreenOrientation = InterfaceOrientation | 'inherit';
export interface TabsScreenPropsBase {
/**
* @summary Identifies screen, e.g. when receiving onNativeFocusChange event.
*
* @platform android, ios
*/
screenKey: string;
/**
* @summary When set to `true`, prevents native tab selection for this screen.
*
* @default false
*
* @platform android, ios
*/
preventNativeSelection?: boolean | undefined;
children?: ViewProps['children'] | undefined;
style?: StyleProp<Pick<ViewStyle, 'backgroundColor'>> | undefined;
/**
* @summary Title of the tab screen, displayed in the tab bar item.
*
* @platform android, ios
*/
title?: string | undefined;
/**
* @summary Specifies content of tab bar item badge.
*
* On iOS, badge is displayed as regular string.
*
* On Android, the value is interpreted in the following order:
* - if the string can be parsed to integer, displays the value as a number;
* - otherwise if the string is empty, displays "small dot" badge;
* - otherwise, displays the value as a text.
*
* @platform android, ios
*/
badgeValue?: string | undefined;
/**
* @summary Specifies which special effects (also known as microinteractions)
* are enabled for the tab screen.
*
* For repeated tab selection (selecting already focused tab bar item),
* there are 2 supported special effects:
* - `popToRoot` - when Stack is nested inside tab screen and repeated
* selection is detected, the Stack will pop to root screen,
* - `scrollToTop` - when there is a ScrollView in first descendant
* chain from tab screen and repeated selection is detected, ScrollView
* will be scrolled to top.
*
* `popToRoot` has priority over `scrollToTop`.
*
* @default All special effects are enabled by default.
*
* @platform android, ios
*/
specialEffects?: {
repeatedTabSelection?: {
/**
* @default true
*/
popToRoot?: boolean | undefined;
/**
* @default true
*/
scrollToTop?: boolean | undefined;
} | undefined;
} | undefined;
/**
* @summary Specifies supported orientations for the tab screen.
*
* Procedure for determining supported orientations:
* 1. Traversal initiates from the root component and moves to the
* deepest child possible.
* 2. Components are queried for their supported orientations:
* - if `orientation` is explicitly set (e.g., `portrait`,
* `landscape`), it is immediately used,
* - if `orientation` is set to `inherit`, the parent component
* is queried.
*
* Note that:
* - some components (like `SplitHost`) may choose not to query
* its child components,
* - Stack v4 implementation **ALWAYS** returns some supported
* orientations (`allButUpsideDown` by default), overriding
* orientation from tab screen.
*
* The following values are currently supported:
*
* - `inherit` - tab screen supports the same orientations as parent
* component,
* - `all` - tab screen supports all orientations,
* - `allButUpsideDown` - tab screen supports all but the upside-down
* portrait interface orientation,
* - `portrait` - tab screen supports both portrait-up and portrait-down
* interface orientations,
* - 'portraitUp' - tab screen supports a portrait-up interface
* orientation,
* - `portraitDown` - tab screen supports a portrait-down interface
* orientation,
* - `landscape` - tab screen supports both landscape-left and
* landscape-right interface orientations,
* - `landscapeLeft` - tab screen supports landscape-left interface
* orientaion,
* - `landscapeRight` - tab screen supports landscape-right interface
* orientaion.
*
* The supported values (apart from `inherit`, `portrait`, `portraitUp`,
* `portraitDown`) correspond to the official UIKit documentation:
*
* @see {@link https://developer.apple.com/documentation/uikit/uiinterfaceorientationmask|UIInterfaceOrientationMask}
*
* @default inherit
*
* @platform ios
*/
orientation?: TabsScreenOrientation | undefined;
/**
* @summary testID for the TabsScreen
*/
testID?: string | undefined;
/**
* @summary accessibilityLabel for the TabsScreen
*/
accessibilityLabel?: string | undefined;
/**
* @summary testID for the TabBarItem
*/
tabBarItemTestID?: string | undefined;
/**
* @summary accessibilityLabel for the TabBarItem
*
* @supported iOS, Android API level >=26
*/
tabBarItemAccessibilityLabel?: string | undefined;
/**
* @summary A callback that gets invoked when the tab screen will appear.
* This is called as soon as the transition begins.
*
* @platform android, ios
*/
onWillAppear?: TabsScreenEventHandler<EmptyObject> | undefined;
/**
* @summary A callback that gets invoked when the tab screen did appear.
* This is called as soon as the transition ends.
*
* @platform android, ios
*/
onDidAppear?: TabsScreenEventHandler<EmptyObject> | undefined;
/**
* @summary A callback that gets invoked when the tab screen will disappear.
* This is called as soon as the transition begins.
*
* @platform android, ios
*/
onWillDisappear?: TabsScreenEventHandler<EmptyObject> | undefined;
/**
* @summary A callback that gets invoked when the tab screen did disappear.
* This is called as soon as the transition ends.
*
* @platform android, ios
*/
onDidDisappear?: TabsScreenEventHandler<EmptyObject> | undefined;
}
export interface TabsScreenProps extends TabsScreenPropsBase {
ios?: TabsScreenPropsIOS | undefined;
android?: TabsScreenPropsAndroid | undefined;
}
//# sourceMappingURL=TabsScreen.types.d.ts.map