Skip to content

CdsSelectionControl

New in v4.0

Основа контролов выбора: нативный input с иконками состояний, метка и описание. Компонент хранит значение, умеет работать со своими true/false-значениями и множественным выбором и подхватывает настройки CdsSelectionControlGroup. На нём собраны чекбоксы, радиокнопки и переключатели дизайн-системы.

Storybook GitLab
Покрытие тестами: 98% — хорошее покрытие
API в спеках
32 / 32 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
51 юнит · 4 браузерных · 2 в планах
Известные баги
5 зафиксированы тестом it.fails
Покрытие кода
98.4% строк · 88.9% ветвей замер v4.0.0-alpha.13
A11y (axe)
2 рекомендаций в 11 историях замер v4.0.0-alpha.11

Для обычного выбора берите готовые контролы — 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; без них у контрола не будет видимой части.

Sandbox Storybook

Метка и описание ​

Свойство label называет вариант, description поясняет его. Коротко назовите вариант в метке, а детали — цену, сроки, ограничения — уберите в описание.

Sandbox Storybook

Значения ​

По умолчанию модель хранит true или false. Свойства true-value и false-value подменяют их своими значениями — удобно, когда на сервер уходит не булево значение.

Sandbox Storybook

Множественный выбор ​

Если в модели массив, контролы работают в режиме multiple: каждый добавляет в неё своё value и убирает при снятии. Режим включается автоматически — свойство multiple нужно, только чтобы задать его вручную. За сравнение значений отвечает value-comparator, по умолчанию — глубокое сравнение.

Sandbox Storybook

Состояния ​

disabled блокирует контрол и гасит его цвет, readonly запрещает менять значение, оставляя прежний вид. error ставит на корень модификатор --error — цвет ошибки к нему рисуют стили конкретного контрола, у базового компонента их нет.

Sandbox Storybook

Цвета ​

color задаёт цвет выбранного контрола, base-color — невыбранного. Значения — цвета палитры дизайн-системы.

Sandbox Storybook

Компоновка ​

Внутри флекс-контейнера контрол растягивается наравне с соседями. Свойство inline оставляет ему ширину содержимого — так контролы можно поставить в ряд без лишних пустот.

Sandbox Storybook

Слоты ​

Слоты заменяют контент из пропсов и саму разметку контрола.

СлотОписание
defaultКонтент внутри зоны контрола, перед input. Получает классы и стили цвета фона
inputРазметка контрола целиком. Получает model, готовый inputNode и текущую icon
labelСодержимое метки. Замещает label
descriptionСодержимое описания. Замещает description
Sandbox Storybook

Сценарии использования ​

Плитка выбора ​

Слот input заменяет иконку своей разметкой, а нативный input из inputNode остаётся поверх неё и ловит клики и фокус. Размер кликабельной зоны задают переменные --cds-selection-control-width и --cds-selection-control-height, состояние приходит в слот через model.

Sandbox Storybook

Согласие перед отправкой ​

Сообщения контрол не показывает — за них отвечает обвязка CdsInput. Без неё выводите текст ошибки рядом, а error передайте контролу: модификатор пригодится вашим стилям.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeColorstring | undefined—Цвет компонента, когда он находится в активном состоянии
baseColorstring | undefined—Цвет неактивного компонента
bgColorstring | undefined—Цвет фона компонента
colorstring | undefined—Цвет компонента
defaultsTargetstring | undefined—Имя дочернего компонента, которому пробрасываются значения пропсов группы по умолчанию
descriptionstring | undefined—Описание компонента, отображаемое под меткой
direction"horizontal" | "vertical" | undefined'horizontal'Переключение между горизонтальным или вертикальным отображением.
disabledboolean | null | undefinednullЗаблокированное состояние
errorboolean | undefined—Переводит компонент в визуальное состояние ошибки
falseIconIconValue | undefined—Иконка невыбранного состояния
falseValueany—Значение для false состояния.
idstring | undefined—Уникальный идентификатор компонента
inlineboolean | undefined—Отображает контрол как inline-элемент — контейнер не растягивается на всю ширину
labelstring | undefined—Текст метки (label) компонента
modelValueany—Значение компонента (v-model). В группе — значение выбранного контрола, при multiple — массив выбранных значений
multipleboolean | null | undefinednullРазрешает выбор нескольких значений — модель становится массивом. Включается автоматически, если в modelValue передан массив
namestring | undefined—Атрибут name нативного элемента input. В группе одно имя объединяет все вложенные контролы
readonlyboolean | null | undefinednullТолько для чтения
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
trueIconIconValue | undefined—Иконка выбранного состояния
trueValueany—Значение для true состояния.
typestring | undefined—Тип нативного элемента input — например, radio или checkbox
valueany—Значение, используемое при выборе компонента в группе. Если оно не указано, будет использоваться уникальный идентификатор.
valueComparatorValueComparator | undefinedtrueФункция сравнения значения модели со значением value контрола. По умолчанию — глубокое сравнение

События

ИмяТипОписание
update:modelValue[value: any]Событие, которое срабатывает при изменении модели компонента.

Слоты

ИмяТипОписание
default{ backgroundColorClasses: Ref<string[], string[]>; backgroundColorStyles: Ref<CSSProperties, CSSProperties>; }Слот по-умолчанию
description{ description: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsDescription
inputSelectionControlSlotСлот для элемента ввода по умолчанию.
label{ label: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsLabel

Exposed

ИмяТипОписание
inputHTMLInputElement | undefinedСсылка на нативный элемент input — чекбокс или радиокнопку.
isFocusedbooleanНаходится ли элемент управления в фокусе.