Components
Carousel

Carousel Component

Installation

The Carousel component provides a flexible way to showcase content in a scrollable container.

Installation Command
npx @nativecn/cli add carousel

Basic Usage

Basic Carousel

Vertical Orientation

Vertical Carousel

With Custom Content

Product Showcase Carousel

Usage Examples

Image Gallery with Loop
import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from '@nativecn/ui';
import { View, Image, StyleSheet, useColorScheme } from 'react-native';

export function ImageGallery({ images }) {
  const colorScheme = useColorScheme();
  
  return (
    <Carousel 
      loop 
      mode={colorScheme}
      className="w-full"
    >
      <CarouselContent>
        {images.map((image, index) => (
          <CarouselItem key={index}>
            <Image
              source={{ uri: image.url }}
              style={styles.image}
              resizeMode="cover"
            />
          </CarouselItem>
        ))}
      </CarouselContent>
      <CarouselPrevious variant="default" />
      <CarouselNext variant="default" />
    </Carousel>
  );
}

const styles = StyleSheet.create({
  image: {
    width: '100%',
    height: 400,
    borderRadius: 8,
  },
});
Onboarding Screens
import { Carousel, CarouselContent, CarouselItem } from '@nativecn/ui';
import { View, Text, StyleSheet, useWindowDimensions } from 'react-native';

export function OnboardingScreens() {
  const { width } = useWindowDimensions();
  
  const screens = [
    {
      title: 'Welcome',
      description: 'Get started with our amazing app',
      icon: '👋',
    },
    {
      title: 'Features',
      description: 'Discover all the powerful features',
      icon: '⚡',
    },
    {
      title: 'Get Started',
      description: 'Create your account and jump right in',
      icon: '🚀',
    },
  ];

  return (
    <Carousel className="w-full h-[500px]">
      <CarouselContent>
        {screens.map((screen, index) => (
          <CarouselItem key={index}>
            <View style={[styles.screen, { width }]}>
              <Text style={styles.icon}>{screen.icon}</Text>
              <Text style={styles.title}>{screen.title}</Text>
              <Text style={styles.description}>{screen.description}</Text>
            </View>
          </CarouselItem>
        ))}
      </CarouselContent>
    </Carousel>
  );
}

const styles = StyleSheet.create({
  screen: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
    padding: 20,
  },
  icon: {
    fontSize: 64,
    marginBottom: 20,
  },
  title: {
    fontSize: 24,
    fontWeight: 'bold',
    marginBottom: 10,
  },
  description: {
    fontSize: 16,
    textAlign: 'center',
    color: '#666',
  },
});

Reference

Carousel Props
interface CarouselProps extends ViewProps {
  // Orientation of the carousel
  orientation?: 'horizontal' | 'vertical';
  
  // Enable infinite loop
  loop?: boolean;
  
  // Number of items (optional, automatically calculated)
  itemCount?: number;
  
  // Light/dark mode
  mode?: 'light' | 'dark';
  
  // Optional className for styling
  className?: string;
}

interface CarouselNavigationProps extends ViewProps {
  // Navigation button variant
  variant?: 'default' | 'outline' | 'ghost';
  
  // Button size
  size?: 'default' | 'sm' | 'lg' | 'icon';
  
  // Optional className for styling
  className?: string;
}