@react-navigation/material-top-tabs
Version:
Integration for the animated tab view component from react-native-tab-view
214 lines • 9.16 kB
TypeScript
import type { DefaultNavigatorOptions, Descriptor, NavigationHelpers, NavigationProp, ParamListBase, Route, RouteProp, TabActionHelpers, TabNavigationState, TabRouterOptions, Theme } from '@react-navigation/native';
import type React from 'react';
import type { Animated, PressableAndroidRippleConfig, StyleProp, TextStyle, ViewStyle } from 'react-native';
import type { SceneRendererProps, TabBar, TabViewProps } from 'react-native-tab-view';
export type MaterialTopTabNavigationEventMap = {
/**
* Event which fires on tapping on the tab in the tab bar.
*/
tabPress: {
data: undefined;
canPreventDefault: true;
};
/**
* Event which fires on long press on the tab in the tab bar.
*/
tabLongPress: {
data: undefined;
};
/**
* Event which fires when a swipe gesture starts, i.e. finger touches the screen.
*/
swipeStart: {
data: undefined;
};
/**
* Event which fires when a swipe gesture ends, i.e. finger leaves the screen.
*/
swipeEnd: {
data: undefined;
};
};
export type MaterialTopTabNavigationHelpers = NavigationHelpers<ParamListBase, MaterialTopTabNavigationEventMap> & TabActionHelpers<ParamListBase>;
export type MaterialTopTabNavigationProp<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList, NavigatorID extends string | undefined = undefined> = NavigationProp<ParamList, RouteName, NavigatorID, TabNavigationState<ParamList>, MaterialTopTabNavigationOptions, MaterialTopTabNavigationEventMap> & TabActionHelpers<ParamList>;
export type MaterialTopTabScreenProps<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList, NavigatorID extends string | undefined = undefined> = {
navigation: MaterialTopTabNavigationProp<ParamList, RouteName, NavigatorID>;
route: RouteProp<ParamList, RouteName>;
};
export type MaterialTopTabOptionsArgs<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList, NavigatorID extends string | undefined = undefined> = MaterialTopTabScreenProps<ParamList, RouteName, NavigatorID> & {
theme: Theme;
};
export type MaterialTopTabNavigationOptions = {
/**
* Title text for the screen.
*/
title?: string;
/**
* Title string of a tab displayed in the tab bar
* or a function that given { focused: boolean, color: string } returns a React.Node, to display in tab bar.
*
* When undefined, scene title is used. Use `tabBarShowLabel` to hide the label.
*/
tabBarLabel?: string | ((props: {
focused: boolean;
color: string;
children: string;
}) => React.ReactNode);
/**
* Accessibility label for the tab button. This is read by the screen reader when the user taps the tab.
* It's recommended to set this if you don't have a label for the tab.
*/
tabBarAccessibilityLabel?: string;
/**
* Whether label font should scale to respect Text Size accessibility settings.
*/
tabBarAllowFontScaling?: boolean;
/**
* Whether the tab label should be visible. Defaults to `true`.
*/
tabBarShowLabel?: boolean;
/**
* A function that given { focused: boolean, color: string } returns a React.Node to display in the tab bar.
*/
tabBarIcon?: (props: {
focused: boolean;
color: string;
}) => React.ReactElement;
/**
* Whether the tab icon should be visible. Defaults to `false`.
*/
tabBarShowIcon?: boolean;
/**
* Function that returns a React element to use as a badge for the tab.
*/
tabBarBadge?: () => React.ReactElement;
/**
* Function that returns a React element as the tab bar indicator.
*/
tabBarIndicator?: (props: Omit<Parameters<NonNullable<React.ComponentProps<typeof TabBar>['renderIndicator']>>[0], 'navigationState'> & {
state: TabNavigationState<ParamListBase>;
}) => React.ReactNode;
/**
* Style object for the tab bar indicator.
*/
tabBarIndicatorStyle?: StyleProp<ViewStyle>;
/**
* Style object for the view containing the tab bar indicator.
*/
tabBarIndicatorContainerStyle?: StyleProp<ViewStyle>;
/**
* ID to locate this tab button in tests.
*/
tabBarButtonTestID?: string;
/**
* Color for the icon and label in the active tab.
*/
tabBarActiveTintColor?: string;
/**
* Color for the icon and label in the inactive tabs.
*/
tabBarInactiveTintColor?: string;
/**
* Color for material ripple (Android >= 5.0 only).
*/
tabBarPressColor?: string;
/**
* Opacity for pressed tab (iOS and Android < 5.0 only).
*/
tabBarPressOpacity?: number;
/**
* Boolean indicating whether the tab bar bounces when overscrolling.
*/
tabBarBounces?: boolean;
/**
* Boolean indicating whether to make the tab bar scrollable.
*
* If you set this to `true`, you should also specify a width in `tabBarItemStyle` to improve the performance of initial render.
*/
tabBarScrollEnabled?: boolean;
/**
* Style object for the tab label.
*/
tabBarLabelStyle?: StyleProp<TextStyle>;
/**
* Style object for the individual tab items.
*/
tabBarItemStyle?: StyleProp<ViewStyle>;
/**
* Style object for the view containing the tab items.
*/
tabBarContentContainerStyle?: StyleProp<ViewStyle>;
/**
* Style object for the the tab bar.
*/
tabBarStyle?: StyleProp<ViewStyle>;
/**
* Gap between tabs
*/
tabBarGap?: number;
/**
* Allows to customize the android ripple effect (Android >= 5.0 only).
*
* Default: `{ borderless: true }`
*/
tabBarAndroidRipple?: PressableAndroidRippleConfig;
/**
* Whether to enable swipe gestures when this screen is focused.
* Swipe gestures are enabled by default. Passing `false` will disable swipe gestures,
* but the user can still switch tabs by pressing the tab bar.
*/
swipeEnabled?: boolean;
/**
* Whether to enable animations when switching between tabs by pressing on the tab bar or programmatically.
* Switching tab via swipe gesture will still result in an animation.
*/
animationEnabled?: boolean;
/**
* Whether this screen should be lazily rendered. When this is set to `true`,
* the screen will be rendered as it comes into the viewport.
* By default all screens are rendered to provide a smoother swipe experience.
* But you might want to defer the rendering of screens out of the viewport until the user sees them.
* To enable lazy rendering for this screen, set `lazy` to `true`.
*
* When you enable `lazy`, the lazy loaded screens will usually take some time to render
* when they come into the viewport. You can use the `lazyPlaceholder` prop to customize
* what the user sees during this short period.
*/
lazy?: boolean;
/**
* When `lazy` is enabled, you can specify how many adjacent screens should be preloaded in advance with this prop.
* This value defaults to `0` which means lazy pages are loaded as they come into the viewport.
*/
lazyPreloadDistance?: number;
/**
* Function that returns a React element to render if this screen hasn't been rendered yet.
* The `lazy` option also needs to be enabled for this to work.
*
* This view is usually only shown for a split second. Keep it lightweight.
*
* By default, this renders `null`.
*/
lazyPlaceholder?: () => React.ReactNode;
/**
* Style object for the component wrapping the screen content.
*/
sceneStyle?: StyleProp<ViewStyle>;
};
export type MaterialTopTabDescriptor = Descriptor<MaterialTopTabNavigationOptions, MaterialTopTabNavigationProp<ParamListBase>, RouteProp<ParamListBase>>;
export type MaterialTopTabDescriptorMap = Record<string, MaterialTopTabDescriptor>;
export type MaterialTopTabNavigationConfig = Omit<TabViewProps<Route<string>>, 'navigationState' | 'onIndexChange' | 'onSwipeStart' | 'onSwipeEnd' | 'renderScene' | 'renderTabBar' | 'renderLazyPlaceholder' | 'swipeEnabled' | 'animationEnabled' | 'lazy' | 'lazyPreloadDistance' | 'lazyPlaceholder'> & {
/**
* Function that returns a React element to display as the tab bar.
*/
tabBar?: (props: MaterialTopTabBarProps) => React.ReactNode;
};
export type MaterialTopTabBarProps = SceneRendererProps & {
state: TabNavigationState<ParamListBase>;
navigation: NavigationHelpers<ParamListBase, MaterialTopTabNavigationEventMap>;
descriptors: MaterialTopTabDescriptorMap;
};
export type MaterialTopTabAnimationContext = {
position: Animated.AnimatedInterpolation<number>;
};
export type MaterialTopTabNavigatorProps = DefaultNavigatorOptions<ParamListBase, string | undefined, TabNavigationState<ParamListBase>, MaterialTopTabNavigationOptions, MaterialTopTabNavigationEventMap, MaterialTopTabNavigationProp<ParamListBase>> & TabRouterOptions & MaterialTopTabNavigationConfig;
//# sourceMappingURL=types.d.ts.map