Для многострочного текста используйте CdsTextArea, для выбора из готовых вариантов — CdsSelect.
Анатомия
Первая схема — каркас компонента: лейбл, описание, поле и нижний блок с сообщениями и счётчиком. Вторая — устройство самого поля: зоны prepend и append снаружи рамки, prepend-inner и append-inner внутри, кнопка очистки. Каждая зона доступна и как проп *-icon, и как одноимённый слот.
Вариации
Лейбл и описание
Свойство label называет поле, description добавляет вспомогательный текст под лейблом. Одноимённые слоты принимают произвольную разметку.
Сообщения и подсказки
Под полем есть одна текстовая строка, и свойства делят её по состояниям: messages виден в покое, hint — при фокусе, error-messages — при ошибке и поверх остальных. Слоты messages и details переопределяют содержимое.
Скрытие деталей
Свойство hide-details убирает нижний блок целиком — поля можно ставить вплотную. Значение auto скрывает блок, только пока показывать нечего: как только появляется ошибка или подсказка, блок рендерится и сдвигает контент ниже.
Иконки
Свойства prepend-icon и append-icon ставят иконку снаружи поля, prepend-inner-icon и append-inner-icon — внутри.
Префикс и суффикс
Свойства prefix и suffix добавляют неизменяемый текст по краям вводимого значения — валюту, код страны, домен.
Очистка
Свойство clearable показывает иконку очистки при наведении или фокусе, persistent-clearable держит её видимой всегда.
Состояния
disabled блокирует ввод и снижает контрастность, readonly запрещает изменение, но оставляет фокус и копирование, loading показывает индикатор загрузки — полосой или кругом (loading="circle").
Валидация
Свойство rules принимает массив функций-валидаторов: каждая возвращает true либо строку с сообщением об ошибке. validate-on задаёт момент запуска — blur, input или submit (только по вызову validate()).
Валидаторы — обычные функции: объявите их один раз и переиспользуйте между полями формы. Здесь заголовок проверяется на обязательность и длину (в паре с maxlength и счётчиком), почта — на формат.
Ошибки извне
Свойство error-messages показывает готовые сообщения — например, пришедшие с сервера — независимо от rules. error включает визуальное состояние ошибки без текста, max-errors ограничивает число сообщений.
Счётчик
Свойство counter показывает счётчик символов: true — без лимита, число — с лимитом. counter-value принимает свою формулу подсчёта, persistent-counter оставляет счётчик видимым вне фокуса.
Цвета
Свойство color задаёт основной цвет, active-color — цвет при фокусе, icon-color — цвет иконок, bg-color — фон поля.
Слоты
Когда пропсов недостаточно, содержимое любого блока заменяется слотом. prepend / append кладут элементы снаружи поля, prepend-inner / append-inner — внутрь; в отличие от пропсов *-icon, слоты принимают любые компоненты — кнопки, ссылки, бейджи.
| Имя слота | Описание |
|---|---|
label | Содержимое лейбла (замещает label) |
description | Содержимое описания (замещает description) |
prepend | Элемент до поля ввода |
append | Элемент после поля ввода |
prepend-inner | Элемент в начале поля, внутри рамки |
append-inner | Элемент в конце поля, внутри рамки |
clear | Своя иконка очистки (при clearable) |
loader | Свой индикатор загрузки (при loading) |
counter | Содержимое счётчика |
details | Нижний блок целиком — сообщения и счётчик |
messages | Содержимое блока сообщений |
Рекомендации
Сценарии использования
Поиск по списку
Поисковое поле собирается из иконки prepend-inner-icon="search" и clearable — пользователь одним кликом сбрасывает запрос и видит полный список. Лейбл здесь не нужен: роль поля очевидна из иконки и placeholder.
Пароль с просмотром
Слот append-inner принимает интерактивные элементы — например, кнопку, которая переключает type между password и text. Подсказка в hint сообщает требования к паролю до того, как пользователь ошибётся.
Ошибка с сервера
Ответ сервера кладётся в error-messages как есть — валидация через rules для этого не нужна. Сбрасывайте ошибку при изменении значения, чтобы поле не ругалось на уже исправленный ввод.
События
Каждая иконная зона испускает своё событие клика: click:prepend, click:append, click:prepend-inner, click:append-inner и click:clear (последнее срабатывает уже после сброса значения). Здесь иконка слева перебирает варианты, замок внутри поля переключается, кнопка отправки очищает сообщение. Когда вместо иконки нужен сложный элемент — кнопка, бейдж — используйте одноимённые слоты, как в примере с паролем выше.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
active | boolean | undefined | — | Активное состояние поля |
activeColor | string | undefined | — | Цвет компонента, когда он находится в активном состоянии |
appendIcon | IconValue | undefined | — | Иконка в слоте append после контента |
appendInnerIcon | IconValue | undefined | — | Иконка во внутреннем слоте append после содержимого поля |
autocomplete | string | undefined | — | Помогает влиять на предложения браузера. Значение «suppress» изменяет атрибут name полей, а значение «off» полагается на то, что браузер по собственной инициативе перестанет предлагать значения. Любое другое значение передается встроенной функции автозаполнения для соответствующего элемента. |
autofocus | boolean | undefined | — | Включает автофокус |
baseColor | string | undefined | — | Цвет неактивного компонента |
bgColor | string | undefined | — | Цвет фона компонента |
centerAffix | boolean | undefined | — | Выровнять по вертикали элементы appendInner, prependInner, clearIcon и label по центру. |
clearable | boolean | undefined | — | Отображать кнопку очистки значения |
clearIcon | IconValue | undefined | 'remove' | Иконка кнопки очистки |
color | string | undefined | — | Цвет компонента |
counter | string | number | boolean | undefined | — | Счетчик символов. Принимает булево значение, число или строку |
counterValue | number | ((value: any) => number) | undefined | — | Пользовательское значение счетчика. Может быть числом или функцией вычисления от текущего значения |
description | string | undefined | — | Описание компонента, отображаемое под меткой |
dirty | boolean | undefined | — | Признак того, что значение поля было изменено пользователем |
disabled | boolean | null | undefined | null | Заблокированное состояние |
error | boolean | undefined | — | Состояние ошибки |
errorMessages | string | readonly string[] | null | undefined | [] | Отображает компонент в состояние ошибки и передает пользовательские сообщения об ошибках.
Будет объединяться с любыми проверками, заданными в свойстве rules.
Это поле не запускает валидацию. |
focused | boolean | undefined | — | Управляет состоянием фокуса компонента. Когда true, компонент считается сфокусированным и может применять соответствующие стили или поведение. |
hideDetails | boolean | "auto" | undefined | — | Скрытие блока с деталями (сообщениями и подсказками). При значении 'auto' блок скрывается, если нет сообщений |
hideMessages | boolean | undefined | — | Скрыть сообщения под полем ввода |
hint | string | undefined | — | Текст подсказки, отображаемый под полем ввода |
iconColor | string | boolean | undefined | — | Цвет иконки. Принимает булево значение или строку с цветом |
id | string | undefined | — | Уникальный идентификатор компонента |
label | string | undefined | — | Текст метки (label) компонента |
loading | string | boolean | undefined | — | Индикатор загрузки для компонента |
maxErrors | string | number | undefined | 1 | Максимальное число отображаемых ошибок при валидации |
maxWidth | string | number | undefined | — | Максимальная ширина компонента |
messages | string | readonly string[] | undefined | [] | Сообщения для отображения под полем ввода |
minWidth | string | number | undefined | — | Минимальная ширина компонента |
modelModifiers | Record<string, boolean> | undefined | — | Модификаторы v-model, переданные Vue для обработки значения поля |
modelValue | any | — | Значение компонента в v-model. Если компонент поддерживает свойство multiple, по умолчанию используется пустой массив. |
name | string | undefined | — | Имя поля ввода |
persistentClearable | boolean | undefined | — | Всегда отображать кнопку очистки, а не только при наведении или фокусе |
persistentCounter | boolean | undefined | — | Всегда отображать счетчик, а не только при взаимодействии с полем |
persistentHint | boolean | undefined | — | Всегда отображать подсказку, а не только при фокусе |
persistentPlaceholder | boolean | undefined | — | Всегда отображать placeholder, а не скрывать его при взаимодействии с полем |
placeholder | string | undefined | — | Текст-заполнитель, отображаемый в пустом поле |
prefix | string | undefined | — | Текстовый префикс, отображаемый перед значением поля |
prependIcon | IconValue | undefined | — | Иконка в слоте prepend перед контентом |
prependInnerIcon | IconValue | undefined | — | Иконка во внутреннем слоте prepend перед содержимым поля |
readonly | boolean | null | undefined | null | Только для чтения |
reverse | boolean | undefined | — | Обратный порядок расположения элементов внутри поля |
role | string | undefined | — | ARIA-роль для нативного элемента ввода |
rules | readonly ValidationRule[] | undefined | [] | Принимает массив, состоящий из элементов различных типов: функций, логических значений и строк. Функции принимают входное значение в качестве аргумента и должны возвращать либо true / false, либо строку, содержащую сообщение об ошибке. Поле ввода перейдет в состояние ошибки, если функция возвращает значение false (или любое значение в массиве содержит false) либо является строкой. |
size | number | "xs" | "sm" | "md" | "lg" | "xl" | undefined | 'md' | Размер компонента |
suffix | string | undefined | — | Текстовый суффикс, отображаемый после значения поля |
textColor | string | undefined | — | Цвет текста компонента |
theme | string | undefined | — | Тема компонента |
type | string | undefined | 'text' | Тип нативного поля ввода |
validateOn | ValidateOn | undefined | — | Изменяет тип события, при котором запускается валидация |
validationValue | any | — | Значение, используемое при применении правил валидации |
width | string | 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] | Событие, которое срабатывает при изменении модели компонента |
Слоты
| Имя | Тип | Описание |
|---|---|---|
append | CdsInputSlot | Добавляет элемент после поля ввода |
append-inner | CdsInputDefaultSlot | Слот, добавляемый в конце инпута ввода |
clear | CdsInputDefaultSlot & { props: Record<string, any>; } | Слот для пользовательского иконки очистки (отображается, когда свойство clearable имеет значение «true»). |
counter | CdsCounterSlot | Слот для ввода пользовательского счетчика |
default | { id: Readonly<Ref<string, string>>; } | Слот по умолчанию |
description | { description: string | undefined; props: Record<string, any>; } | Слот по умолчанию для компонента CdsDescription |
details | CdsInputSlot | Слот для ввода пользовательских данных, позволяющее настраивать отображение сообщений |
label | { label: string | undefined; props: Record<string, any>; } | Слот по умолчанию для компонента CdsLabel |
loader | LoaderSlotProps | Слот для пользовательского загрузчика (отображается, если свойство loading имеет значение true). |
message | CdsMessageSlot | Слот для настройки содержания сообщения |
messages | CdsInputSlot | Слот для ввода пользовательских данных, позволяющее настраивать отображение сообщений |
prepend | CdsInputSlot | Добавляет элемент до поля ввода |
prepend-inner | CdsInputDefaultSlot | Слот, добавляемый в начало инпута ввода |
Exposed
| Имя | Тип | Описание |
|---|---|---|
controlRef | HTMLElement | undefined | Ref-ссылка на контролл поля ввода |
fieldIconColor | string | undefined | Цвет иконки |
isDirty | boolean | Является ли поле ввода "грязным" |
isDisabled | boolean | Является ли поле ввода заблокированным |
isPure | boolean | Является ли поле ввода "чистым" |
isReadonly | boolean | Является ли поле ввода только для чтения |
isValid | boolean | null | Является ли поле ввода валидным |
isValidating | boolean | Является ли поле ввода в процессе валидации |
reset | () => Promise<void> | Функция сброса поля ввода в исходное состояние |
resetValidation | () => Promise<void> | Функция сброса валидации поля ввода |
validate | (silent?: boolean) => Promise<string[]> | Функция валидации поля ввода |