import * as React from 'react'; import { StyleProp, TextStyle, ColorValue, ScrollViewProps } from 'react-native'; import type { SharedValue } from 'react-native-reanimated'; import type { PagerViewProps } from 'react-native-pager-view'; import type { TabProps } from './Tab'; import type { TabBarProps } from './TabView'; import type { TabsIndicatorProps } from './TabsIndicator'; export type TabValue = string | number; export interface RenderTabIconProps { item: TabItem; index: number; color: ColorValue; selected: boolean; disabled: boolean; } export interface RenderTabLabelProps { item: TabItem; index: number; color: ColorValue; style: StyleProp; selected: boolean; disabled: boolean; } export interface RenderTabBadgeProps { item: TabItem; index: number; color: ColorValue; selected: boolean; disabled: boolean; } export type RenderTabItem = (props: TabProps) => React.ReactElement; export type RenderTabIcon = (props: RenderTabIconProps) => React.ReactNode; export type RenderTabLabel = (props: RenderTabLabelProps) => React.ReactNode; export type RenderTabBadge = (props: RenderTabBadgeProps) => React.ReactNode; export type ShouldSceneRender = (props: { index: number; state: TabViewState; }) => boolean; export interface ChangeEvent { item: TabItem; defaultPrevented: boolean; preventDefault(): void; } export interface TabPressEvent { item: TabItem; defaultPrevented: boolean; preventDefault(): void; } export interface TabLongPressEvent { item: TabItem; index: number; } export type OnChange = (value: Value, event: ChangeEvent) => void; export type OnTabPress = (event: TabPressEvent) => void; export type OnTabLongPress = (event: TabLongPressEvent) => void; export type RenderScene = (props: SceneProps) => React.ReactNode; export type RenderTabBar = (props: TabBarProps) => React.ReactNode; export type RenderTabsIndicator = (props: TabsIndicatorProps) => React.ReactNode; export interface Route { /** * You can provide your own route key. */ key: T; /** * The tab label. */ label?: string; /** * If `true`, the component is disabled. */ disabled?: boolean; } export interface TabItem { /** * You can provide your own value. */ value: Value; /** * The tab label. */ label?: string; /** * If `true`, the component is disabled. */ disabled?: boolean; } export interface TabItemLayout { x: number; width: number; } export interface TabViewState { index: number; routes: T[]; } export interface Layout { width: number; height: number; } export interface SceneProps { route: T; index: number; jumpTo: (key: T['key'], animated?: boolean) => void; focused: boolean; position: SharedValue; } export interface SceneRendererProps { layout: Layout; jumpTo: (key: string, animated?: boolean) => void; position: SharedValue; } export type PagerProps = Omit & { keyboardDismissMode?: 'none' | 'on-drag' | 'auto'; animationEnabled?: boolean; setPageAnimationEnabled?: boolean; onSwipeStart?: () => void; onSwipeEnd?: () => void; overScrollMode?: ScrollViewProps['overScrollMode']; animatedPosition?: SharedValue; };