Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@meetdhanani/react-image-carousel

meetdhanani8842MIT1.0.9TypeScript support: included

A modern React Image Carousel component with smooth transitions and touch support

react, carousel, image-carousel, slider, component

readme

React Image Carousel

A modern, feature-rich image carousel component for React applications with smooth transitions, touch support, and customizable navigation.

image (1)

✨ Features

  • 🖼️ Multiple Transition Effects

    • Smooth sliding
    • Fade transitions
    • Zoom effects
    • 3D flip animations
    • Instant transitions
    • Jump transitions
    • Seamless infinite loops
  • 🎨 Customizable Styles

    • Modern arrow designs
    • Various dot indicators
    • Customizable colors and sizes
    • Responsive design
  • 🎯 Interactive Controls

    • Touch/swipe support
    • Keyboard navigation
    • Custom navigation buttons
    • Progress indicators
  • Performance Optimized

    • Lazy image loading
    • Smooth animations
    • Efficient state management
    • Optimized re-renders
  • Accessibility

    • ARIA labels
    • Keyboard navigation
    • Screen reader support
    • Focus management

🚀 Quick Start

npm i @meetdhanani/react-image-carousel
# or
yarn add @meetdhanani/react-image-carousel
import { ImageCarousel } from '@meetdhanani/react-image-carousel';

const App = () => {
  const images = [
    'https://example.com/image1.jpg',
    'https://example.com/image2.jpg',
    'https://example.com/image3.jpg'
  ];

  return (
    <ImageCarousel
      images={images}
      autoPlay={true}
      interval={3000}
      showArrows={true}
      showDots={true}
      transitionStyle="smooth"
    />
  );
};

📦 Requirements

  • React 18 or higher
  • TypeScript 4.5 or higher
  • Modern browser with CSS Grid and CSS Transitions support

🔧 Development

# Install dependencies
npm install

# Start development server
npm run dev

# Build for production
npm run build

# Run tests
npm test

🌐 Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)
  • Opera (latest)

🔄 React 19 Support

This component is fully compatible with React 19 and its new features:

  • Uses the new JSX transform
  • Compatible with React 19's automatic batching
  • Supports React 19's concurrent features
  • Optimized for React 19's performance improvements

React 19 Specific Features

// Example of using React 19's automatic batching
const App = () => {
  const [count, setCount] = useState(0);

  const handleSlideChange = (index: number) => {
    // These updates will be batched automatically in React 19
    setCount(prev => prev + 1);
    setCurrentSlide(index);
  };

  return (
    <ImageCarousel
      images={images}
      onSlideChange={handleSlideChange}
    />
  );
};

Performance Optimizations

The component takes advantage of React 19's performance improvements:

  • Uses useCallback for memoized functions
  • Implements useMemo for expensive computations
  • Leverages React 19's improved Suspense support
  • Optimized for concurrent rendering

📖 Props

Basic Props

Prop Type Default Description
images string[] Required Array of image URLs to display
autoPlay boolean true Enable automatic sliding
interval number 3000 Time between slides in milliseconds
showArrows boolean true Show navigation arrows
showDots boolean true Show navigation dots

Style Props

Prop Type Default Description
arrowStyle 'default' | 'minimal' | 'rounded' | 'modern' | 'floating' | 'outline' | 'gradient' 'default' Style variant for navigation arrows
dotStyle 'default' | 'minimal' | 'square' | 'line' | 'pill' | 'circle' | 'pulse' | 'bar' 'default' Style variant for navigation dots
transitionStyle 'smooth' | 'instant' | 'slide' | 'jump' | 'infinite' | 'fade' | 'zoom' | 'flip' 'smooth' Transition effect between slides

Customization Props

Prop Type Default Description
className string '' Custom class for main wrapper
containerClassName string '' Custom class for container
slideClassName string '' Custom class for slides
arrowClassName string '' Custom class for arrows
dotClassName string '' Custom class for dots
transitionDuration number 500 Duration of transitions in ms
swipeThreshold number 50 Minimum swipe distance in pixels

Behavior Props

Prop Type Default Description
infinite boolean true Enable infinite loop
pauseOnHover boolean false Pause autoplay on hover
showLoadingPlaceholder boolean true Show loading state
placeholderColor string '#f0f0f0' Loading placeholder color

Callback Props

Prop Type Description
onSlideChange (index: number) => void Called when slide changes
onImagesLoaded () => void Called when all images load

Style Examples 🎨

Arrow Styles

// Modern style
<ImageCarousel
  images={images}
  arrowStyle="modern"
/>

// Floating style
<ImageCarousel
  images={images}
  arrowStyle="floating"
/>

// Gradient style
<ImageCarousel
  images={images}
  arrowStyle="gradient"
/>

Dot Styles

// Line style
<ImageCarousel
  images={images}
  dotStyle="line"
/>

// Pulse style
<ImageCarousel
  images={images}
  dotStyle="pulse"
/>

// Bar style
<ImageCarousel
  images={images}
  dotStyle="bar"
/>

Transition Styles

// Fade transition
<ImageCarousel
  images={images}
  transitionStyle="fade"
/>

// Zoom transition
<ImageCarousel
  images={images}
  transitionStyle="zoom"
/>

// Flip transition
<ImageCarousel
  images={images}
  transitionStyle="flip"
/>

Advanced Usage Examples 🚀

Custom Loading Placeholder

<ImageCarousel
  images={images}
  loadingPlaceholder={
    <div className="custom-loader">
      <span>Loading...</span>
    </div>
  }
/>

Custom Navigation

<ImageCarousel
  images={images}
  showArrows={false}
  showDots={false}
  className="custom-carousel"
  containerClassName="custom-container"
/>

Event Handling

<ImageCarousel
  images={images}
  onSlideChange={(index) => {
    console.log(`Current slide: ${index}`);
  }}
  onImagesLoaded={() => {
    console.log('All images loaded!');
  }}
/>

Responsive Design 📱

The carousel is fully responsive and adapts to different screen sizes. You can use the following classes to control the size:

// Full width
<ImageCarousel
  images={images}
  className="full-width"
/>

// Full height
<ImageCarousel
  images={images}
  className="full-height"
/>

License 📄

MIT License - feel free to use this component in your projects!