# @cloud-ru/ds-carousel > Компонент горизонтальной прокрутки слайдов — стрелки, пагинация, свайп, автопрокрутка, infinite scroll и multi-item отображение. Docs: /snack-v2/components/carousel/ ## Установка ```sh pnpm add @cloud-ru/ds-carousel ``` ## Когда использовать - Галереи изображений и медиа. - Онбординг с несколькими шагами. - Секции «Похожие товары», «Недавние проекты» — несколько карточек в viewport (`showItems > 1`). Когда **не** нужен: для табличных данных (используйте `@cloud-ru/ds-tabs`), для форм (обычная вертикальная прокрутка), для длинных списков (виртуализация). ## API ### Carousel | Prop | Type | Default | Required | Description | |------|------|---------|----------|-------------| | `arrows` | `boolean` | `true` | no | Использовать стрелки для переключения страниц | | `autoSwipe` | `number` | — | no | Автоматическое переключение слайдов в секундах | | `children` | `ReactElement>[]` | — | yes | Массив айтемов | | `className` | `string` | — | no | CSS - класснейм | | `controlsVisibility` | `always \| hover` | `hover` | no | Управление видимостью стрелок: 'hover' — по ховеру, 'always' — всегда | | `data-test-id` | `string` | — | no | | | `gap` | `string` | `var(--dimension-2m)` | no | Расстояние между айтемами | | `infiniteScroll` | `boolean` | `false` | no | Цикличная прокрутка | | `pagination` | `boolean` | `true` | no | Использовать пагинацию для переключения страниц | | `scrollBy` | `number` | `Math.trunc(show)` | no | Сдвиг айтемов при смене 1 страницы | | `showItems` | `number` | `1` | no | Кол-во отображаемых единовременно айтемов | | `state` | `{ page: number; onChange(page: number): void; }` | — | no | Управление состоянием извне | | `swipe` | `boolean` | `true` | no | Переключение страниц свайпом | | `swipeActivateLength` | `number` | `48` | no | Минимальная длина в px для активации свайпа | | `transition` | `number` | `0.4` | no | Время переключения 1 страницы (в s) | #### Related types - `ControlsVisibility` = `always | hover` ### Control | Prop | Type | Default | Required | Description | |------|------|---------|----------|-------------| | `className` | `string` | — | no | | | `data-test-id` | `string` | — | no | | | `direction` | `next \| prev` | — | yes | | | `onClick` | `(() => void)` | — | no | | ### ItemProvider | Prop | Type | Default | Required | Description | |------|------|---------|----------|-------------| | `gap` | `string` | — | no | | | `page` | `number` | — | yes | | | `scrollBy` | `number` | — | yes | | | `showItems` | `number` | — | yes | | | `slideCallback` | `(direction: number) => void` | — | yes | | | `swipe` | `boolean` | — | yes | | | `swipeActivateLength` | `number` | — | yes | | | `transition` | `number` | — | yes | | ## Примеры ### Basic ```tsx import { Carousel } from '@cloud-ru/ds-carousel'; export function Basic() { return (
Slide 1
Slide 2
); } ``` ### Infinite ```tsx import { Carousel } from '@cloud-ru/ds-carousel'; export function Infinite() { return (
Slide 1
Slide 2
Slide 3
); } ``` ### ThreePerView ```tsx import { Carousel } from '@cloud-ru/ds-carousel'; export function ThreePerView() { return (
{Array.from({ length: 6 }).map((_, i) => (
Card {i + 1}
))}
); } ```