Carousel

Горизонтальная прокрутка слайдов. Принимает children как массив React-элементов и управляет переключением через стрелки, пагинацию и свайп. Поддерживает infiniteScroll, autoSwipe, несколько элементов в viewport (showItems) и управляемый режим (state).

Когда использовать

  • Галереи изображений и медиа.
  • Онбординг с несколькими шагами.
  • Секции «Похожие товары», «Недавние проекты» — несколько карточек в viewport (showItems > 1).

Когда не нужен: для табличных данных (используйте @cloud-ru/ds-tabs), для форм (обычная вертикальная прокрутка), для длинных списков (виртуализация).

Анатомия

Controls visibility

Режим отображения стрелок и пагинации: hover — элементы управления проявляются по наведению (чище в галереях), always — видны всегда (рекомендуется для touch и для onboarding).

Установка

pnpm add @cloud-ru/ds-carousel
import { Carousel } from '@cloud-ru/ds-carousel'

Примеры использования

1. Базовая карусель

1. Базовая карусель
tsx
import { Carousel } from '@cloud-ru/ds-carousel';

export function Basic() {
  return (
    <div style={{ width: 480 }}>
      <Carousel>
        <div style={{ height: 180, background: '#4f46e5', color: '#fff', display: 'grid', placeItems: 'center' }}>
          Slide 1
        </div>
        <div style={{ height: 180, background: '#0ea5e9', color: '#fff', display: 'grid', placeItems: 'center' }}>
          Slide 2
        </div>
      </Carousel>
    </div>
  );
}

2. Три элемента в viewport

2. Три элемента в viewportshowItems=3, кастомный gap
tsx
import { Carousel } from '@cloud-ru/ds-carousel';

export function ThreePerView() {
  return (
    <div style={{ width: 600 }}>
      <Carousel showItems={3} gap='12px'>
        {Array.from({ length: 6 }).map((_, i) => (
          <div
            key={i}
            style={{ height: 120, background: '#f3f4f6', display: 'grid', placeItems: 'center', borderRadius: 8 }}
          >
            Card {i + 1}
          </div>
        ))}
      </Carousel>
    </div>
  );
}

3. Бесконечная с автопрокруткой

3. Бесконечная с автопрокруткойinfiniteScroll + autoSwipe=3 секунды на слайд
tsx
import { Carousel } from '@cloud-ru/ds-carousel';

export function Infinite() {
  return (
    <div style={{ width: 480 }}>
      <Carousel infiniteScroll autoSwipe={3}>
        <div style={{ height: 180, background: '#10b981', color: '#fff', display: 'grid', placeItems: 'center' }}>
          Slide 1
        </div>
        <div style={{ height: 180, background: '#f59e0b', color: '#fff', display: 'grid', placeItems: 'center' }}>
          Slide 2
        </div>
        <div style={{ height: 180, background: '#ec4899', color: '#fff', display: 'grid', placeItems: 'center' }}>
          Slide 3
        </div>
      </Carousel>
    </div>
  );
}

Props

Storybook

Figma