Skip to content

CdsToggle

Тумблер — переключатель настройки «вкл/выкл», который срабатывает сразу, без кнопки «Сохранить»: уведомления, автопродление, видимость профиля. Построен на CdsInput: умеет лейбл и описание, сообщения и ошибки, загрузку и неопределённое состояние.

Storybook GitLab Figma
Покрытие тестами: 100% — хорошее покрытие
API в спеках
69 / 69 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
66 юнит · 0 браузерных · 4 в планах
Покрытие кода
100% строк · 96.7% ветвей замер v4.0.0-alpha.13
A11y (axe)
2 рекомендаций в 13 историях замер v4.0.0-alpha.11

Тумблер меняет настройку мгновенно. Если выбор применяется вместе с остальной формой по кнопке — возьмите CdsCheckbox, а для выбора одного варианта из набора — CdsRadioGroup.

Анатомия ​

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

Вариации ​

Лейбл и описание ​

label называет настройку, description поясняет последствия включения. Формулируйте лейбл так, чтобы было понятно, что произойдёт во включённом положении.

Sandbox Storybook

Размеры ​

Пять размеров по шкале size — от xs до xl, по умолчанию md.

Sandbox Storybook

Состояния ​

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

Sandbox Storybook

Загрузка и иконки ​

loading показывает индикатор в бегунке — удобно, пока настройка сохраняется на сервере; строковое значение задаёт цвет загрузчика. true-icon и false-icon добавляют в бегунок иконку для каждого положения.

Sandbox Storybook

Цвета ​

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

Sandbox Storybook

Свои значения ​

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

Sandbox Storybook

Сообщения ​

messages выводит подсказку под тумблером, error-messages — готовое сообщение об ошибке вместе с состоянием ошибки. hide-details убирает нижний блок целиком.

Sandbox Storybook

Слоты ​

Когда текстовых пропсов недостаточно, части компонента заменяются слотами.

Имя слотаОписание
labelСодержимое лейбла (замещает label)
descriptionСодержимое описания (замещает description)
thumbСодержимое бегунка; получает текущую иконку и модель
track-true / track-falseСодержимое дорожки во включённом / выключенном положении
loaderКастомный индикатор загрузки
prepend / appendЭлементы до и после контрола
messages / detailsСодержимое блока сообщений / нижний блок целиком

В демо слот thumb меняет иконку бегунка в зависимости от значения, а track-true и track-false показывают иконки на дорожке.

Sandbox Storybook

Рекомендации ​

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

Настройки уведомлений ​

Главный тумблер управляет всей группой: пока уведомления выключены, каналы заблокированы через disabled. Выбор каналов при этом сохраняется — после включения группа возвращается к прежним значениям.

Sandbox Storybook

Сохранение на сервере ​

Настройка сохраняется сразу после переключения: пока идёт запрос, тумблер показывает loading и не принимает клики через readonly. Если сервер отклонил изменение, значение возвращается, а причина выводится в error-messages. Попробуйте выключить тумблер.

Sandbox Storybook

Платные опции ​

Каждый тумблер добавляет опцию к тарифу, итоговая стоимость пересчитывается сразу — пользователь видит последствия выбора до оплаты.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
appendIconIconValue | undefined—Иконка в слоте append после контента
baseColorstring | undefined—Цвет неактивного компонента
centerAffixboolean | undefinedtrueВыровнять по вертикали элементы appendInner, prependInner, clearIcon и label по центру.
colorstring | undefined—Цвет компонента
defaultsTargetstring | undefined—Имя дочернего компонента, которому пробрасываются значения пропсов группы по умолчанию
descriptionstring | undefined—Описание компонента, отображаемое под меткой
direction"horizontal" | "vertical" | undefined'horizontal'Переключение между горизонтальным или вертикальным отображением.
disabledboolean | null | undefinednullЗаблокированное состояние
errorboolean | undefined—Переводит компонент в визуальное состояние ошибки
errorMessagesstring | readonly string[] | null | undefined[]Отображает компонент в состояние ошибки и передает пользовательские сообщения об ошибках. Будет объединяться с любыми проверками, заданными в свойстве rules. Это поле не запускает валидацию.
falseIconIconValue | undefined—Иконка невыбранного состояния
falseValueany—Значение для false состояния.
focusedboolean | undefined—Управляет состоянием фокуса компонента. Когда true, компонент считается сфокусированным и может применять соответствующие стили или поведение.
hideDetailsboolean | "auto" | undefined—Скрытие блока с деталями (сообщениями и подсказками). При значении 'auto' блок скрывается, если нет сообщений
hideMessagesboolean | undefined—Скрыть сообщения под полем ввода
hintstring | undefined—Текст подсказки, отображаемый под полем ввода
iconColorstring | boolean | undefined—Цвет иконки. Принимает булево значение или строку с цветом
idstring | undefined—Уникальный идентификатор компонента
indeterminateboolean | undefined—Неопределённое состояние переключателя.
inlineboolean | undefined—Отображает контрол как inline-элемент — контейнер не растягивается на всю ширину
labelstring | undefined—Текст метки (label) компонента
loadingstring | boolean | undefinedfalseИндикатор загрузки. Принимает булево значение или строку с цветом загрузчика.
maxErrorsstring | number | undefined1Максимальное число отображаемых ошибок при валидации
maxWidthstring | number | undefined—Максимальная ширина компонента
messagesstring | readonly string[] | undefined[]Сообщения для отображения под полем ввода
minWidthstring | number | undefined—Минимальная ширина компонента
modelValueany—Значение компонента (v-model). В группе — значение выбранного контрола, при multiple — массив выбранных значений
multipleboolean | null | undefinednullРазрешает выбор нескольких значений — модель становится массивом. Включается автоматически, если в modelValue передан массив
namestring | undefined—Атрибут name нативного элемента input. В группе одно имя объединяет все вложенные контролы
persistentHintboolean | undefined—Всегда отображать подсказку, а не только при фокусе
prependIconIconValue | undefined—Иконка в слоте prepend перед контентом
readonlyboolean | null | undefinednullТолько для чтения
rulesreadonly ValidationRule[] | undefined[]Принимает массив, состоящий из элементов различных типов: функций, логических значений и строк. Функции принимают входное значение в качестве аргумента и должны возвращать либо true / false, либо строку, содержащую сообщение об ошибке. Поле ввода перейдет в состояние ошибки, если функция возвращает значение false (или любое значение в массиве содержит false) либо является строкой.
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
themestring | undefined—Тема компонента
thumbColorstring | undefined—Цвет бегунка.
trueIconIconValue | undefined—Иконка выбранного состояния
trueValueany—Значение для true состояния.
typestring | undefined—Тип нативного элемента input — например, radio или checkbox
validateOnValidateOn | undefined—Изменяет тип события, при котором запускается валидация
validationValueany—Значение, используемое при применении правил валидации
valueany—Значение, используемое при выборе компонента в группе. Если оно не указано, будет использоваться уникальный идентификатор.
valueComparatorValueComparator | undefinedtrueФункция сравнения значения модели со значением value контрола. По умолчанию — глубокое сравнение
widthstring | number | undefined—Ширина компонента

События

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

Слоты

ИмяТипОписание
appendCdsInputSlotДобавляет элемент после поля ввода
default{ backgroundColorClasses: Ref<string[], string[]>; backgroundColorStyles: Ref<CSSProperties, CSSProperties>; }Слот по-умолчанию
description{ description: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsDescription
detailsCdsInputSlotСлот для ввода пользовательских данных, позволяющее настраивать отображение сообщений
inputSelectionControlSlotСлот для элемента ввода по умолчанию.
label{ label: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsLabel
loaderLoaderSlotPropsСлот для кастомного индикатора загрузки.
messageCdsMessageSlotСлот для настройки содержания сообщения
messagesCdsInputSlotСлот для ввода пользовательских данных, позволяющее настраивать отображение сообщений
prependCdsInputSlotДобавляет элемент до поля ввода
thumb{ icon: IconValue | undefined; } & CdsToggleSlotСлот для содержимого «бегунка» (thumb).
track-falseCdsToggleSlotСлот для содержимого выключенной части дорожки (track).
track-trueCdsToggleSlotСлот для содержимого включённой части дорожки (track).

Exposed

ИмяТипОписание
isDirtybooleanЯвляется ли поле ввода "грязным"
isDisabledbooleanЯвляется ли поле ввода заблокированным
isPurebooleanЯвляется ли поле ввода "чистым"
isReadonlybooleanЯвляется ли поле ввода только для чтения
isValidboolean | nullЯвляется ли поле ввода валидным
isValidatingbooleanЯвляется ли поле ввода в процессе валидации
reset() => Promise<void>Функция сброса поля ввода в исходное состояние
resetValidation() => Promise<void>Функция сброса валидации поля ввода
validate(silent?: boolean) => Promise<string[]>Функция валидации поля ввода