CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-react-navigation--stack

Stack navigator component for iOS and Android with animated transitions and gestures

Pending
Overview
Eval results
Files

transition-presets.mddocs/

Transition Presets

Complete transition configurations combining card animations, header animations, and timing specifications for common platform-specific navigation patterns.

Capabilities

SlideFromRightIOS

Standard iOS navigation transition with horizontal slide from the right and fade header animation.

/**
 * Standard iOS navigation transition
 * Combines horizontal slide card animation with fade header animation
 */
const SlideFromRightIOS: TransitionPreset;

Usage Examples:

import { TransitionPresets } from '@react-navigation/stack';

// Apply to specific screen
<Stack.Screen
  name="Details"
  component={DetailsScreen}
  options={{
    ...TransitionPresets.SlideFromRightIOS,
  }}
/>

// Apply to all screens
<Stack.Navigator
  screenOptions={{
    ...TransitionPresets.SlideFromRightIOS,
  }}
>

ModalSlideFromBottomIOS

Standard iOS modal transition with vertical slide from the bottom.

/**
 * Standard iOS navigation transition for modals
 * Vertical slide from bottom with fade header animation
 */
const ModalSlideFromBottomIOS: TransitionPreset;

ModalPresentationIOS

iOS 13+ modal presentation style with card scaling and background effects.

/**
 * Standard iOS modal presentation style (introduced in iOS 13)
 * Card scaling with dimmed background and fade header
 */
const ModalPresentationIOS: TransitionPreset;

FadeFromBottomAndroid

Android navigation transition for devices running Android versions before Pie (API < 28).

/**
 * Standard Android navigation transition for Android < 9 (Oreo)
 * Fade from bottom animation with vertical gesture direction
 */
const FadeFromBottomAndroid: TransitionPreset;

RevealFromBottomAndroid

Android Pie (API 28) navigation transition with reveal animation from the bottom.

/**
 * Standard Android navigation transition for Android 9 (Pie)
 * Reveal from bottom with smooth bezier curve timing
 */
const RevealFromBottomAndroid: TransitionPreset;

ScaleFromCenterAndroid

Android 10+ (API 29+) navigation transition with center scaling animation.

/**
 * Standard Android navigation transition for Android 10+ (Q)
 * Scale from center with horizontal gesture support
 */
const ScaleFromCenterAndroid: TransitionPreset;

BottomSheetAndroid

Material Design bottom sheet transition sliding up from the bottom edge.

/**
 * Material Design bottom sheet transition
 * Slide up from bottom with bottom sheet timing specs
 */
const BottomSheetAndroid: TransitionPreset;

ModalFadeTransition

Cross-platform modal transition with simple fade animation.

/**
 * Cross-platform modal fade transition
 * Simple fade animation suitable for overlay-style modals
 */
const ModalFadeTransition: TransitionPreset;

DefaultTransition

Platform-specific default transition that automatically selects appropriate animation for iOS or Android.

/**
 * Platform-specific default transition
 * Automatically selects SlideFromRightIOS on iOS, FadeFromBottomAndroid on Android
 */
const DefaultTransition: TransitionPreset;

ModalTransition

Platform-specific modal transition that automatically selects appropriate modal animation.

/**
 * Platform-specific modal transition
 * Automatically selects ModalPresentationIOS on iOS, BottomSheetAndroid on Android
 */
const ModalTransition: TransitionPreset;

Transition Preset Structure

Each transition preset combines multiple animation aspects:

interface TransitionPreset {
  gestureDirection: GestureDirection;
  transitionSpec: {
    open: TransitionSpec;
    close: TransitionSpec;
  };
  cardStyleInterpolator: StackCardStyleInterpolator;
  headerStyleInterpolator: StackHeaderStyleInterpolator;
}

type GestureDirection = 'horizontal' | 'horizontal-inverted' | 'vertical' | 'vertical-inverted';

Usage Examples:

import { TransitionPresets } from '@react-navigation/stack';

// Platform-specific navigation
<Stack.Navigator
  screenOptions={{
    ...TransitionPresets.DefaultTransition,
  }}
>
  <Stack.Screen name="Home" component={HomeScreen} />
  <Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>

// Modal stack with iOS-style presentation
<Stack.Navigator
  screenOptions={{
    presentation: 'modal',
    ...TransitionPresets.ModalPresentationIOS,
  }}
>
  <Stack.Screen name="Settings" component={SettingsScreen} />
  <Stack.Screen name="Profile" component={ProfileScreen} />
</Stack.Navigator>

// Mixed transitions for different screen types
<Stack.Navigator>
  <Stack.Group screenOptions={TransitionPresets.SlideFromRightIOS}>
    <Stack.Screen name="Home" component={HomeScreen} />
    <Stack.Screen name="Details" component={DetailsScreen} />
  </Stack.Group>
  <Stack.Group 
    screenOptions={{
      presentation: 'modal',
      ...TransitionPresets.ModalSlideFromBottomIOS,
    }}
  >
    <Stack.Screen name="Modal" component={ModalScreen} />
    <Stack.Screen name="FullScreenModal" component={FullScreenModalScreen} />
  </Stack.Group>
</Stack.Navigator>

Custom Transition Presets

Create custom presets by combining different animation components:

import { 
  CardStyleInterpolators, 
  HeaderStyleInterpolators, 
  TransitionSpecs 
} from '@react-navigation/stack';

// Custom fade-slide transition
const CustomFadeSlide: TransitionPreset = {
  gestureDirection: 'horizontal',
  transitionSpec: {
    open: TransitionSpecs.TransitionIOSSpec,
    close: TransitionSpecs.TransitionIOSSpec,
  },
  cardStyleInterpolator: CardStyleInterpolators.forFadeFromCenter,
  headerStyleInterpolator: HeaderStyleInterpolators.forFade,
};

// Fast Android-style transition
const FastAndroidTransition: TransitionPreset = {
  gestureDirection: 'vertical',
  transitionSpec: {
    open: {
      animation: 'timing',
      config: {
        duration: 200,
        easing: Easing.out(Easing.poly(4)),
      },
    },
    close: {
      animation: 'timing',
      config: {
        duration: 150,
        easing: Easing.in(Easing.poly(4)),
      },
    },
  },
  cardStyleInterpolator: CardStyleInterpolators.forFadeFromBottomAndroid,
  headerStyleInterpolator: HeaderStyleInterpolators.forFade,
};

// Usage
<Stack.Navigator
  screenOptions={{
    ...CustomFadeSlide,
  }}
>

Gesture Configuration

Transition presets define gesture directions that determine swipe-to-go-back behavior:

// Horizontal gestures (left-right swipe)
gestureDirection: 'horizontal'          // Swipe from left edge to go back
gestureDirection: 'horizontal-inverted' // Swipe from right edge to go back

// Vertical gestures (up-down swipe)  
gestureDirection: 'vertical'            // Swipe from top edge to go back
gestureDirection: 'vertical-inverted'   // Swipe from bottom edge to go back

Usage Examples:

// Custom gesture configuration
<Stack.Screen
  name="CustomGesture"
  component={MyScreen}
  options={{
    ...TransitionPresets.SlideFromRightIOS,
    gestureDirection: 'horizontal-inverted', // Override gesture direction
    gestureResponseDistance: 50,             // Custom gesture sensitivity
    gestureVelocityImpact: 0.3,             // Custom velocity threshold
  }}
/>

Install with Tessl CLI

npx tessl i tessl/npm-react-navigation--stack

docs

animation-utilities.md

card-animations.md

header-animations.md

index.md

stack-navigation.md

transition-presets.md

transition-specs.md

tile.json