Если кнопки запускают действия, а не хранят выбор, возьмите CdsButtonGroup. Для выбора из длинного списка подойдёт CdsSelect, а в формах — CdsRadioGroup.
Вариации
Выбор
По умолчанию выбирается одна кнопка, повторный клик снимает выбор. В v-model попадает value кнопки, а если он не задан — её порядковый индекс.
Множественный выбор
Свойство multiple разрешает выбрать несколько кнопок — v-model становится массивом значений.
Свойство max ограничивает число выбранных кнопок: когда лимит достигнут, клики по остальным кнопкам не добавляют выбор.
Обязательный выбор
Свойство mandatory не даёт снять последний выбор — группа всегда остаётся в каком-то состоянии. Со значением 'force' первая доступная кнопка выбирается автоматически, даже если v-model пуст.
Цвет активной кнопки
Свойство active-color перекрашивает выбранные кнопки — выбор заметнее на панелях, где много элементов управления.
Свойства группы
CdsButtonToggle построен на CdsButtonGroup и принимает все его свойства: variant и size применяются ко всем кнопкам сразу, вид по умолчанию — soft. Цвет выбранной кнопки задают active-color или color (по умолчанию brand), невыбранных — base-color (по умолчанию neutral); divided добавляет разделители, direction="vertical" разворачивает группу в столбец.
Рекомендации
Сценарии использования
Вид отображения
Классика toggle-группы — переключение списка и плитки. Кнопки-иконки с aria-label экономят место, mandatory гарантирует, что список всегда отображается в одном из видов, а нейтральный вид по умолчанию и size="sm" не отвлекают от контента.
Панель форматирования
Стили текста независимы друг от друга, поэтому группа работает с multiple: каждая кнопка включает и выключает свой стиль, а v-model собирает выбранные значения в массив.
Фильтр по периоду
Задайте кнопкам value — и v-model вернёт осмысленное значение, по которому удобно запрашивать данные. mandatory не даёт остаться без периода: показатели всегда относятся к выбранному диапазону.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
activeColor | string | undefined | — | Цвет компонента, когда он находится в активном состоянии |
appearancedeprecated | "inverse" | "primary" | "secondary" | "tertiary" | "transparent" | undefined | — | Внешний вид компонента. Устарел: используйте variant и color |
baseColor | string | undefined | — | Цвет неактивного компонента |
color | (string & {}) | "neutral" | "brand" | "accent" | "danger" | "inverse" | undefined | 'brand' | Цвет компонента: роль, алиас палитры, токен темы или CSS-цвет |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
divided | boolean | undefined | — | Добавляет разделители между кнопками группы. |
mandatory | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
max | number | undefined | — | Максимальное количество выбираемых элементов |
modelValue | any | — | Значение выбранных элементов группы |
multiple | boolean | undefined | — | Разрешить множественный выбор |
required | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
size | number | "xs" | "sm" | "md" | "lg" | "xl" | undefined | 'md' | Размер компонента |
tag | string | JSXComponent<any> | undefined | 'div' | Пользовательский HTML-тег для отображения |
theme | string | undefined | — | Тема компонента |
variant | "solid" | "soft" | "outline" | "surface" | "ghost" | undefined | 'soft' | Вид кнопок: solid, soft, outline, surface, ghost |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [value: unknown] | Срабатывает при изменении выбранного значения. |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | CdsButtonToggleSlotProps | Кнопки toggle-группы. В аргументах слота доступно состояние группы (выбор, навигация). |
Exposed
| Имя | Тип | Описание |
|---|---|---|
isSelected | (id: string) => boolean | Проверить, выбрана ли кнопка по id |
next | () => void | Выбрать следующую кнопку |
prev | () => void | Выбрать предыдущую кнопку |
select | (id: string, value: boolean) => void | Выбрать кнопку по id |
selected | readonly string[] | Идентификаторы выбранных кнопок |