// Type definitions for react-native-tab-view 0.0 // Project: https://github.com/react-native-community/react-native-tab-view // Definitions by: Kalle Ott // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.4 import { PureComponent, ReactNode, ComponentType } from 'react' import { Animated, StyleProp, ViewStyle, EasingFunction } from 'react-native' export type Key = { key: string } export type RouteBase = Key & { testID?: string } export type Route = T export type NavigationState = { index: number routes: T[] } export type Scene = { route: T focused: boolean index: number } export type Layout = { height: number width: number } export type SceneRendererProps = { layout: Layout & { measured: boolean } navigationState: NavigationState position: Animated.Value jumpToIndex: (index: number) => void getLastPosition: () => number subscribe: ( event: SubscriptionName, callback: () => void ) => { remove: () => void } } export type SubscriptionName = 'reset' | 'position' export type TransitionProps = { progress: number } export type NavigationTransitionSpec = { duration?: number, // An easing function from `Easing`. easing?: EasingFunction, // A timing function such as `Animated.timing`. timing?: (value: Animated.Value, config: any) => any, } export type TransitionConfigurator = ( currentTransitionProps: TransitionProps, nextTransitionProps: TransitionProps ) => NavigationTransitionSpec export type PagerProps = { configureTransition?: TransitionConfigurator animationEnabled?: boolean swipeEnabled?: boolean swipeDistanceThreshold?: number swipeVelocityThreshold?: number children?: ReactNode } export type TabViewAnimatedProps< T extends RouteBase = RouteBase > = PagerProps & { navigationState: NavigationState onIndexChange: (index: number) => void onPositionChange?: (props: { value: number }) => void initialLayout?: Layout canJumpToTab?: (route: T) => boolean renderPager?: (props: SceneRendererProps & PagerProps) => ReactNode renderScene: (props: SceneRendererProps & Scene) => ReactNode renderHeader?: (props: SceneRendererProps) => ReactNode renderFooter?: (props: SceneRendererProps) => ReactNode lazy?: boolean style?: StyleProp } export class TabViewAnimated extends PureComponent< TabViewAnimatedProps, any > {} export type GestureEvent = { nativeEvent: { changedTouches: any[] identifier: number locationX: number locationY: number pageX: number pageY: number target: number timestamp: number touches: any[] } } export type GestureState = { stateID: number moveX: number moveY: number x0: number y0: number dx: number dy: number vx: number vy: number numberActiveTouches: number } export type GestureHandler = (event: GestureEvent, state: GestureState) => void export type TabViewPagerPanProps< T extends RouteBase = RouteBase > = SceneRendererProps & { configureTransition?: TransitionConfigurator animationEnabled?: boolean swipeEnabled?: boolean swipeDistanceThreshold?: number swipeVelocityThreshold?: number onSwipeStart?: GestureHandler onSwipeEnd?: GestureHandler children?: ReactNode } export type DefaultTransitionSpec = { timing: typeof Animated.spring tension: 300 friction: 35 } export class TabViewPagerPan extends PureComponent< TabViewPagerPanProps, void > { static defaultProps: { configureTransition: () => DefaultTransitionSpec initialLayout: { height: 0 width: 0 } swipeDistanceThreshold: 120 swipeVelocityThreshold: 0.25 } } export type ScrollEvent = { nativeEvent: { contentOffset: { x: number y: number } } } export type TabViewPagerScrollProps< T extends RouteBase = RouteBase > = SceneRendererProps & { animationEnabled?: boolean swipeEnabled?: boolean children?: ReactNode } export class TabViewPagerScroll extends PureComponent< TabViewPagerScrollProps, any > {} export type PageScrollEvent = { nativeEvent: { position: number offset: number } } export type PageScrollState = 'dragging' | 'settling' | 'idle' export type TabViewPagerAndroidProps< T extends RouteBase = RouteBase > = SceneRendererProps & { animationEnabled?: boolean swipeEnabled?: boolean children?: ReactNode } export class TabViewPagerAndroid extends PureComponent< TabViewPagerAndroidProps, void > {} export type IndicatorProps< T extends RouteBase = RouteBase > = SceneRendererProps & { width: Animated.Value } export type TabBarProps = SceneRendererProps< T > & { scrollEnabled?: boolean pressColor?: string pressOpacity?: number getLabelText?: (scene: Scene) => string | undefined | null renderLabel?: (scene: Scene) => ReactNode renderIcon?: (scene: Scene) => ReactNode renderBadge?: (scene: Scene) => ReactNode renderIndicator?: (props: IndicatorProps) => ReactNode onTabPress?: (scene: Scene) => void tabStyle?: StyleProp indicatorStyle?: StyleProp labelStyle?: StyleProp style?: StyleProp } export class TabBar extends PureComponent< TabBarProps, any > {} export function SceneMap(scenes: { [key: string]: ComponentType }): (props: { route: Route }) => ReactNode