Для панели разделов возьмите готовые CdsTabs, для выбора тегов — CdsTagGroup, а чтобы листать слайды по одному — CdsSlideView.
Анатомия
По краям контейнера — кнопки-стрелки, между ними прокручивается лента элементов. Стрелки появляются, только когда лента не помещается в контейнер, и листают её на ширину видимой области.
Вариации
Прокрутка и стрелки
По умолчанию стрелки появляются на десктопе, когда элементы не помещаются в контейнер; на мобильных лента прокручивается пальцем без стрелок. Проп show-arrows меняет это поведение: true показывает стрелки при переполнении и на мобильных, desktop и mobile — всегда на соответствующих устройствах, always — всегда, never — никогда.
Выбор элементов
Оберните элементы в CdsSlideGroupItem — и группа начнёт вести выбор: v-model хранит значение выбранного элемента из его пропа value. Сам CdsSlideGroupItem ничего не рендерит — его слот получает isSelected и toggle, а как показать выбранное состояние, решаете вы. Проп mandatory не даёт снять последний выбор.
Проп multiple разрешает выбрать несколько элементов — v-model становится массивом, а max ограничивает число выбранных.
Активный элемент по центру
При изменении выбора лента сама докручивается до активного элемента — за это отвечает включённый по умолчанию scroll-to-active. Проп center-active дополнительно держит активный элемент по центру контейнера.
Вертикальная группа
Проп direction="vertical" разворачивает ленту в колонку — высоту ограничьте через max-height на самой группе.
Слоты
| Слот | Описание |
|---|---|
default | Элементы ленты, обычно CdsSlideGroupItem |
prev | Свой контент кнопки «назад» вместо стрелки |
next | Свой контент кнопки «вперёд» вместо стрелки |
Все слоты получают методы prev, next, select и isSelected. Клик по области стрелки группа обрабатывает сама, поэтому в prev / next достаточно положить только визуал. Иконки стандартных стрелок меняются без слотов — пропами prev-icon и next-icon.
Рекомендации
Сценарии использования
Запись на встречу
Две слайд-группы с выбором: лента дней с center-active держит выбранную дату по центру, лента времени компактнее — с кнопками size="sm". Оба списка с mandatory: у записи всегда есть выбранные дата и время.
Лента документов
Слайд-группа работает и без выбора — как обычная прокручиваемая лента. Карточки кладутся прямо в слот default без CdsSlideGroupItem, стрелки листают ленту на ширину видимой области.
Панель форматирования
Панель инструментов в узком контейнере: кнопки-иконки с aria-label, multiple разрешает включить несколько форматов сразу, а стрелки show-arrows="always" листают инструменты, которые не поместились.
API
CdsSlideGroup
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
centerActive | boolean | undefined | — | Принудительно выравнивает активный компонент по центру. |
contentClass | any | — | Добавляет классы к контейнеру slide group |
contentStyle | any | — | Добавляет inline-стили к контейнеру slide group |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
mandatory | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
max | number | undefined | — | Максимальное количество выбираемых элементов |
mobile | boolean | null | undefined | null | Определяет режим отображения компонента: Если значение равно true, компонент будет отображаться в режиме для Mobile. Если значение равно false, компонент будет отображаться в режиме для Desktop. Если значение равно null, режим будет зависеть от текущего Breakpoint. |
mobileBreakpoint | number | "xs" | "sm" | "md" | "lg" | "xl" | undefined | — | Указывает точку преломления, при которой отображение будет переключаться в мобильный режим. Может быть числом (например, 600) или строкой, соответствующей одному из предопределенных Breakpoint (например, 'xs', 'sm', 'md', 'lg', 'xl'). |
modelValue | any | — | Значение выбранных элементов группы |
multiple | boolean | undefined | — | Разрешить множественный выбор |
nextIcon | IconValue | undefined | 'chevron-right' | Иконка для кнопки "следующий". |
prevIcon | IconValue | undefined | 'chevron-left' | Иконка для кнопки "предыдущий". |
required | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
scrollToActive | boolean | undefined | true | Если true, то при изменении активного компонента, контейнер будет прокручиваться так, чтобы он был виден. |
selectedClass | string | undefined | 'cds-slide-group-item--active' | CSS класс для выбранного состояния |
showArrows | string | boolean | undefined | — | Изменяет настройки отображения стрелок: По умолчанию стрелки всегда отображаются на Desktop устройствах при переполнении контейнера.<br /> При переполнении контейнера на мобильных устройствах стрелки по умолчанию не отображаются.<br /> Значение «true» для параметра «show-arrows» позволяет отображать эти стрелки на мобильных устройствах при переполнении контейнера.<br /> Значение «desktop» всегда отображает стрелки на настольных устройствах, а значение «mobile» — на мобильных устройствах.<br /> Значение «always» всегда отображает стрелки как на настольных, так и на мобильных устройствах.<br /> Используйте значение «never», чтобы отключить отображение стрелок. |
tag | string | JSXComponent<any> | undefined | 'div' | Пользовательский HTML-тег для отображения |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | SlideGroupSlot | Слот для компонента CdsSlideGroupItem |
next | SlideGroupSlot | Слот для кнопки "следующий". |
prev | SlideGroupSlot | Слот для кнопки "предыдущий". |
Exposed
| Имя | Тип | Описание |
|---|---|---|
focus | (location?: "next" | "prev" | "first" | "last" | undefined) => void | Зафокусить компонента |
hasNext | boolean | Возвращает значение true, если после текущего индекса есть элементы. |
hasPrev | boolean | Возвращает значение true, если перед текущим индексом есть элементы. |
scrollOffset | number | Получить скролл элемента |
scrollTo | (location: "next" | "prev") => void | Проскроллить к элементу по индексу |
selected | readonly string[] | Получить индекс выбранного элемента |
CdsSlideGroupItem
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
disabled | boolean | null | undefined | null | Заблокированное состояние |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
value | any | — | Значение компонента в группе |
События
| Имя | Тип | Описание |
|---|---|---|
group:selected | [value: { value: boolean; }] | Событие, которое срабатывает при выборе элемента в группе. |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | { isSelected: boolean; select: (value: boolean) => void; toggle: () => void; selectedClass: false | (string | undefined)[]; } | Слот для контента |