Skip to content

CdsTextInput

Текстовое поле — базовый способ получить данные от пользователя: имя, почту, сумму, поисковый запрос. Вокруг нативного input компонент собирает всё, что нужно форме: лейбл, описание, подсказки, сообщения об ошибках, иконки, очистку и счётчик символов.

Storybook GitLab Figma
Покрытие тестами: 97% — хорошее покрытие
API в спеках
87 / 87 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
86 юнит · 3 браузерных
Известные баги
6 зафиксированы тестом it.fails
Покрытие кода
97.2% строк · 87.9% ветвей замер v4.0.0-alpha.13
A11y (axe)
12 рекомендаций в 19 историях замер v4.0.0-alpha.11

Для многострочного текста используйте CdsTextArea, для выбора из готовых вариантов — CdsSelect.

Анатомия ​

Первая схема — каркас компонента: лейбл, описание, поле и нижний блок с сообщениями и счётчиком. Вторая — устройство самого поля: зоны prepend и append снаружи рамки, prepend-inner и append-inner внутри, кнопка очистки. Каждая зона доступна и как проп *-icon, и как одноимённый слот.

Вариации ​

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

Свойство label называет поле, description добавляет вспомогательный текст под лейблом. Одноимённые слоты принимают произвольную разметку.

Sandbox Storybook

Сообщения и подсказки ​

Под полем есть одна текстовая строка, и свойства делят её по состояниям: messages виден в покое, hint — при фокусе, error-messages — при ошибке и поверх остальных. Слоты messages и details переопределяют содержимое.

Sandbox Storybook

Скрытие деталей ​

Свойство hide-details убирает нижний блок целиком — поля можно ставить вплотную. Значение auto скрывает блок, только пока показывать нечего: как только появляется ошибка или подсказка, блок рендерится и сдвигает контент ниже.

Sandbox Storybook

Иконки ​

Свойства prepend-icon и append-icon ставят иконку снаружи поля, prepend-inner-icon и append-inner-icon — внутри.

Sandbox Storybook

Префикс и суффикс ​

Свойства prefix и suffix добавляют неизменяемый текст по краям вводимого значения — валюту, код страны, домен.

Sandbox Storybook

Очистка ​

Свойство clearable показывает иконку очистки при наведении или фокусе, persistent-clearable держит её видимой всегда.

Sandbox Storybook

Состояния ​

disabled блокирует ввод и снижает контрастность, readonly запрещает изменение, но оставляет фокус и копирование, loading показывает индикатор загрузки — полосой или кругом (loading="circle").

Sandbox Storybook

Валидация ​

Свойство rules принимает массив функций-валидаторов: каждая возвращает true либо строку с сообщением об ошибке. validate-on задаёт момент запуска — blur, input или submit (только по вызову validate()).

Sandbox Storybook

Валидаторы — обычные функции: объявите их один раз и переиспользуйте между полями формы. Здесь заголовок проверяется на обязательность и длину (в паре с maxlength и счётчиком), почта — на формат.

Sandbox Storybook

Ошибки извне ​

Свойство error-messages показывает готовые сообщения — например, пришедшие с сервера — независимо от rules. error включает визуальное состояние ошибки без текста, max-errors ограничивает число сообщений.

Sandbox Storybook

Счётчик ​

Свойство counter показывает счётчик символов: true — без лимита, число — с лимитом. counter-value принимает свою формулу подсчёта, persistent-counter оставляет счётчик видимым вне фокуса.

Sandbox Storybook

Цвета ​

Свойство color задаёт основной цвет, active-color — цвет при фокусе, icon-color — цвет иконок, bg-color — фон поля.

Sandbox Storybook

Слоты ​

Когда пропсов недостаточно, содержимое любого блока заменяется слотом. prepend / append кладут элементы снаружи поля, prepend-inner / append-inner — внутрь; в отличие от пропсов *-icon, слоты принимают любые компоненты — кнопки, ссылки, бейджи.

Имя слотаОписание
labelСодержимое лейбла (замещает label)
descriptionСодержимое описания (замещает description)
prependЭлемент до поля ввода
appendЭлемент после поля ввода
prepend-innerЭлемент в начале поля, внутри рамки
append-innerЭлемент в конце поля, внутри рамки
clearСвоя иконка очистки (при clearable)
loaderСвой индикатор загрузки (при loading)
counterСодержимое счётчика
detailsНижний блок целиком — сообщения и счётчик
messagesСодержимое блока сообщений
Sandbox Storybook

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

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

Поиск по списку ​

Поисковое поле собирается из иконки prepend-inner-icon="search" и clearable — пользователь одним кликом сбрасывает запрос и видит полный список. Лейбл здесь не нужен: роль поля очевидна из иконки и placeholder.

Sandbox Storybook

Пароль с просмотром ​

Слот append-inner принимает интерактивные элементы — например, кнопку, которая переключает type между password и text. Подсказка в hint сообщает требования к паролю до того, как пользователь ошибётся.

Sandbox Storybook

Ошибка с сервера ​

Ответ сервера кладётся в error-messages как есть — валидация через rules для этого не нужна. Сбрасывайте ошибку при изменении значения, чтобы поле не ругалось на уже исправленный ввод.

Sandbox Storybook

События ​

Каждая иконная зона испускает своё событие клика: click:prepend, click:append, click:prepend-inner, click:append-inner и click:clear (последнее срабатывает уже после сброса значения). Здесь иконка слева перебирает варианты, замок внутри поля переключается, кнопка отправки очищает сообщение. Когда вместо иконки нужен сложный элемент — кнопка, бейдж — используйте одноимённые слоты, как в примере с паролем выше.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeboolean | undefined—Активное состояние поля
activeColorstring | undefined—Цвет компонента, когда он находится в активном состоянии
appendIconIconValue | undefined—Иконка в слоте append после контента
appendInnerIconIconValue | undefined—Иконка во внутреннем слоте append после содержимого поля
autocompletestring | undefined—Помогает влиять на предложения браузера. Значение «suppress» изменяет атрибут name полей, а значение «off» полагается на то, что браузер по собственной инициативе перестанет предлагать значения. Любое другое значение передается встроенной функции автозаполнения для соответствующего элемента.
autofocusboolean | undefined—Включает автофокус
baseColorstring | undefined—Цвет неактивного компонента
bgColorstring | undefined—Цвет фона компонента
centerAffixboolean | undefined—Выровнять по вертикали элементы appendInner, prependInner, clearIcon и label по центру.
clearableboolean | undefined—Отображать кнопку очистки значения
clearIconIconValue | undefined'remove'Иконка кнопки очистки
colorstring | undefined—Цвет компонента
counterstring | number | boolean | undefined—Счетчик символов. Принимает булево значение, число или строку
counterValuenumber | ((value: any) => number) | undefined—Пользовательское значение счетчика. Может быть числом или функцией вычисления от текущего значения
descriptionstring | undefined—Описание компонента, отображаемое под меткой
dirtyboolean | undefined—Признак того, что значение поля было изменено пользователем
disabledboolean | null | undefinednullЗаблокированное состояние
errorboolean | undefined—Состояние ошибки
errorMessagesstring | readonly string[] | null | undefined[]Отображает компонент в состояние ошибки и передает пользовательские сообщения об ошибках. Будет объединяться с любыми проверками, заданными в свойстве rules. Это поле не запускает валидацию.
focusedboolean | undefined—Управляет состоянием фокуса компонента. Когда true, компонент считается сфокусированным и может применять соответствующие стили или поведение.
hideDetailsboolean | "auto" | undefined—Скрытие блока с деталями (сообщениями и подсказками). При значении 'auto' блок скрывается, если нет сообщений
hideMessagesboolean | undefined—Скрыть сообщения под полем ввода
hintstring | undefined—Текст подсказки, отображаемый под полем ввода
iconColorstring | boolean | undefined—Цвет иконки. Принимает булево значение или строку с цветом
idstring | undefined—Уникальный идентификатор компонента
labelstring | undefined—Текст метки (label) компонента
loadingstring | boolean | undefined—Индикатор загрузки для компонента
maxErrorsstring | number | undefined1Максимальное число отображаемых ошибок при валидации
maxWidthstring | number | undefined—Максимальная ширина компонента
messagesstring | readonly string[] | undefined[]Сообщения для отображения под полем ввода
minWidthstring | number | undefined—Минимальная ширина компонента
modelModifiersRecord<string, boolean> | undefined—Модификаторы v-model, переданные Vue для обработки значения поля
modelValueany—Значение компонента в v-model. Если компонент поддерживает свойство multiple, по умолчанию используется пустой массив.
namestring | undefined—Имя поля ввода
persistentClearableboolean | undefined—Всегда отображать кнопку очистки, а не только при наведении или фокусе
persistentCounterboolean | undefined—Всегда отображать счетчик, а не только при взаимодействии с полем
persistentHintboolean | undefined—Всегда отображать подсказку, а не только при фокусе
persistentPlaceholderboolean | undefined—Всегда отображать placeholder, а не скрывать его при взаимодействии с полем
placeholderstring | undefined—Текст-заполнитель, отображаемый в пустом поле
prefixstring | undefined—Текстовый префикс, отображаемый перед значением поля
prependIconIconValue | undefined—Иконка в слоте prepend перед контентом
prependInnerIconIconValue | undefined—Иконка во внутреннем слоте prepend перед содержимым поля
readonlyboolean | null | undefinednullТолько для чтения
reverseboolean | undefined—Обратный порядок расположения элементов внутри поля
rolestring | undefined—ARIA-роль для нативного элемента ввода
rulesreadonly ValidationRule[] | undefined[]Принимает массив, состоящий из элементов различных типов: функций, логических значений и строк. Функции принимают входное значение в качестве аргумента и должны возвращать либо true / false, либо строку, содержащую сообщение об ошибке. Поле ввода перейдет в состояние ошибки, если функция возвращает значение false (или любое значение в массиве содержит false) либо является строкой.
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
suffixstring | undefined—Текстовый суффикс, отображаемый после значения поля
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
typestring | undefined'text'Тип нативного поля ввода
validateOnValidateOn | undefined—Изменяет тип события, при котором запускается валидация
validationValueany—Значение, используемое при применении правил валидации
widthstring | number | undefined—Ширина компонента

События

ИмяТипОписание
click:append[e: MouseEvent]Клик по внешней append-иконке (проп append-icon)
click:appendInner[e: MouseEvent]Клик по внутренней append-иконке (проп append-inner-icon)
click:clear[e: MouseEvent]Клик по иконке очистки (clearable); вызывается после сброса значения
click:control[e: MouseEvent]Событие, возникающее при клике в основной области контрола
click:prepend[e: MouseEvent]Клик по внешней prepend-иконке (проп prepend-icon)
click:prependInner[e: MouseEvent]Клик по внутренней prepend-иконке (проп prepend-inner-icon)
mousedown:control[e: MouseEvent]Событие, которое срабатывает при нажатии кнопки мыши в основной области контрола
update:focused[focused: boolean]Вызывается при переходе фокуса на элемент или при его потере
update:modelValue[value: string]Событие, которое срабатывает при изменении модели компонента

Слоты

ИмяТипОписание
appendCdsInputSlotДобавляет элемент после поля ввода
append-innerCdsInputDefaultSlotСлот, добавляемый в конце инпута ввода
clearCdsInputDefaultSlot & { props: Record<string, any>; }Слот для пользовательского иконки очистки (отображается, когда свойство clearable имеет значение «true»).
counterCdsCounterSlotСлот для ввода пользовательского счетчика
default{ id: Readonly<Ref<string, string>>; }Слот по умолчанию
description{ description: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsDescription
detailsCdsInputSlotСлот для ввода пользовательских данных, позволяющее настраивать отображение сообщений
label{ label: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsLabel
loaderLoaderSlotPropsСлот для пользовательского загрузчика (отображается, если свойство loading имеет значение true).
messageCdsMessageSlotСлот для настройки содержания сообщения
messagesCdsInputSlotСлот для ввода пользовательских данных, позволяющее настраивать отображение сообщений
prependCdsInputSlotДобавляет элемент до поля ввода
prepend-innerCdsInputDefaultSlotСлот, добавляемый в начало инпута ввода

Exposed

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