Для обычного выбора берите готовые контролы — CdsCheckbox, CdsRadio, CdsToggle: у них уже есть иконки, размеры, цвета состояний и блок сообщений.
CdsSelectionControlнужен, когда нужного контрола нет в библиотеке.
Анатомия
Слева — контрол: иконка состояния из true-icon / false-icon и невидимый нативный input поверх неё. Справа — метка (CdsLabel) и описание (CdsDescription); клик по метке переключает контрол.
Своих размеров у компонента нет: зону контрола задают CSS-переменные --cds-selection-control-width и --cds-selection-control-height, а отступ до метки — свободное место внутри этой зоны. В примерах ниже расстояние добавлено классом gap-x-2.
Вариации
Тип и иконки
Свойство type задаёт тип нативного input — от него зависят поведение и доступность: checkbox включается и выключается, radio только выбирается. Иконки состояний приходят из true-icon и false-icon; без них у контрола не будет видимой части.
Метка и описание
Свойство label называет вариант, description поясняет его. Коротко назовите вариант в метке, а детали — цену, сроки, ограничения — уберите в описание.
Значения
По умолчанию модель хранит true или false. Свойства true-value и false-value подменяют их своими значениями — удобно, когда на сервер уходит не булево значение.
Множественный выбор
Если в модели массив, контролы работают в режиме multiple: каждый добавляет в неё своё value и убирает при снятии. Режим включается автоматически — свойство multiple нужно, только чтобы задать его вручную. За сравнение значений отвечает value-comparator, по умолчанию — глубокое сравнение.
Состояния
disabled блокирует контрол и гасит его цвет, readonly запрещает менять значение, оставляя прежний вид. error ставит на корень модификатор --error — цвет ошибки к нему рисуют стили конкретного контрола, у базового компонента их нет.
Цвета
color задаёт цвет выбранного контрола, base-color — невыбранного. Значения — цвета палитры дизайн-системы.
Компоновка
Внутри флекс-контейнера контрол растягивается наравне с соседями. Свойство inline оставляет ему ширину содержимого — так контролы можно поставить в ряд без лишних пустот.
Слоты
Слоты заменяют контент из пропсов и саму разметку контрола.
| Слот | Описание |
|---|---|
default | Контент внутри зоны контрола, перед input. Получает классы и стили цвета фона |
input | Разметка контрола целиком. Получает model, готовый inputNode и текущую icon |
label | Содержимое метки. Замещает label |
description | Содержимое описания. Замещает description |
Сценарии использования
Плитка выбора
Слот input заменяет иконку своей разметкой, а нативный input из inputNode остаётся поверх неё и ловит клики и фокус. Размер кликабельной зоны задают переменные --cds-selection-control-width и --cds-selection-control-height, состояние приходит в слот через model.
Согласие перед отправкой
Сообщения контрол не показывает — за них отвечает обвязка CdsInput. Без неё выводите текст ошибки рядом, а error передайте контролу: модификатор пригодится вашим стилям.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
activeColor | string | undefined | — | Цвет компонента, когда он находится в активном состоянии |
baseColor | string | undefined | — | Цвет неактивного компонента |
bgColor | string | undefined | — | Цвет фона компонента |
color | string | undefined | — | Цвет компонента |
defaultsTarget | string | undefined | — | Имя дочернего компонента, которому пробрасываются значения пропсов группы по умолчанию |
description | string | undefined | — | Описание компонента, отображаемое под меткой |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
error | boolean | undefined | — | Переводит компонент в визуальное состояние ошибки |
falseIcon | IconValue | undefined | — | Иконка невыбранного состояния |
falseValue | any | — | Значение для false состояния. |
id | string | undefined | — | Уникальный идентификатор компонента |
inline | boolean | undefined | — | Отображает контрол как inline-элемент — контейнер не растягивается на всю ширину |
label | string | undefined | — | Текст метки (label) компонента |
modelValue | any | — | Значение компонента (v-model). В группе — значение выбранного контрола, при multiple — массив выбранных значений |
multiple | boolean | null | undefined | null | Разрешает выбор нескольких значений — модель становится массивом. Включается автоматически, если в modelValue передан массив |
name | string | undefined | — | Атрибут name нативного элемента input. В группе одно имя объединяет все вложенные контролы |
readonly | boolean | null | undefined | null | Только для чтения |
textColor | string | undefined | — | Цвет текста компонента |
theme | string | undefined | — | Тема компонента |
trueIcon | IconValue | undefined | — | Иконка выбранного состояния |
trueValue | any | — | Значение для true состояния. |
type | string | undefined | — | Тип нативного элемента input — например, radio или checkbox |
value | any | — | Значение, используемое при выборе компонента в группе. Если оно не указано, будет использоваться уникальный идентификатор. |
valueComparator | ValueComparator | undefined | true | Функция сравнения значения модели со значением value контрола. По умолчанию — глубокое сравнение |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [value: any] | Событие, которое срабатывает при изменении модели компонента. |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | { backgroundColorClasses: Ref<string[], string[]>; backgroundColorStyles: Ref<CSSProperties, CSSProperties>; } | Слот по-умолчанию |
description | { description: string | undefined; props: Record<string, any>; } | Слот по умолчанию для компонента CdsDescription |
input | SelectionControlSlot | Слот для элемента ввода по умолчанию. |
label | { label: string | undefined; props: Record<string, any>; } | Слот по умолчанию для компонента CdsLabel |
Exposed
| Имя | Тип | Описание |
|---|---|---|
input | HTMLInputElement | undefined | Ссылка на нативный элемент input — чекбокс или радиокнопку. |
isFocused | boolean | Находится ли элемент управления в фокусе. |