Для короткого однострочного значения используйте CdsTextInput, для выбора из готовых вариантов — CdsSelect.
Анатомия
Сверху — лейбл и описание, в центре — многострочное поле с кнопкой очистки, под полем — строка сообщений и счётчик символов. Устройство совпадает с CdsTextInput: доступны те же зоны prepend / append снаружи и внутри рамки — как пропсы *-icon и одноимённые слоты.
Вариации
Лейбл и описание
Свойство label называет поле, description добавляет вспомогательный текст под лейблом. Одноимённые слоты принимают произвольную разметку.
Количество строк
Свойство rows задаёт высоту области в строках — по умолчанию 5. Выбирайте высоту под ожидаемый объём ответа: для комментария хватит 2–3 строк.
Автоматическая высота
Свойство auto-grow увеличивает высоту области по мере ввода — текст не приходится прокручивать. max-rows ограничивает рост числом строк, max-height — высотой в пикселях; дальше появляется прокрутка.
Изменение размера
По умолчанию пользователь может растянуть область за правый нижний угол. Свойство no-resize отключает это; при auto-grow ручное изменение размера отключается автоматически.
Очистка
Свойство clearable показывает иконку очистки при наведении или фокусе, persistent-clearable держит её видимой всегда.
Счётчик
Свойство counter показывает счётчик символов: true — без лимита, число — с лимитом. counter-value принимает свою формулу подсчёта, persistent-counter оставляет счётчик видимым вне фокуса. Чтобы лимит нельзя было превысить, добавьте атрибут maxlength.
Состояния
disabled блокирует ввод и снижает контрастность, readonly запрещает изменение, но оставляет фокус и копирование, loading показывает индикатор загрузки — полосой или кругом (loading="circle").
Рекомендации
Сценарии использования
Отправка обращения
Форма собирается из CdsForm, короткой темы в текстовом поле и сообщения в текстовой области. Свойство rules проверяет, что сообщение достаточно подробное, а counter с maxlength заранее показывают лимит. Кнопка получает loading на время запроса.
Комментарий в обсуждении
Компактное поле комментария: rows="1" и auto-grow с max-rows — область начинается с одной строки и растёт вместе с текстом, hide-details убирает нижний блок. Кнопка отправки — CdsFunctionalButton в слоте append-inner; Enter отправляет комментарий, Shift+Enter переносит строку.
Ошибка с сервера
Ответ сервера кладётся в error-messages как есть — валидация через rules для этого не нужна. Сбрасывайте ошибку при изменении значения, чтобы поле не ругалось на уже исправленный текст.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
active | boolean | undefined | — | Активное состояние поля |
activeColor | string | undefined | — | Цвет компонента, когда он находится в активном состоянии |
appendIcon | IconValue | undefined | — | Иконка в слоте append после контента |
appendInnerIcon | IconValue | undefined | — | Иконка во внутреннем слоте append после содержимого поля |
autocomplete | string | undefined | — | Помогает влиять на предложения браузера. Значение «suppress» изменяет атрибут name полей, а значение «off» полагается на то, что браузер по собственной инициативе перестанет предлагать значения. Любое другое значение передается встроенной функции автозаполнения для соответствующего элемента. |
autofocus | boolean | undefined | — | Включает автофокус |
autoGrow | 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 | Максимальное число отображаемых ошибок при валидации |
maxHeight | string | number | undefined | — | Максимальная высота текстовой области |
maxRows | string | number | undefined | — | Максимальное количество строк при автоматическом увеличении высоты |
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 | — | Имя поля ввода |
noResize | boolean | 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 | — | Обратный порядок расположения элементов внутри поля |
rows | string | number | undefined | 5 | Количество строк текстовой области |
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 | — | Тема компонента |
validateOn | ValidateOn | undefined | — | Изменяет тип события, при котором запускается валидация |
validationValue | any | — | Значение, используемое при применении правил валидации |
width | string | number | undefined | — | Ширина компонента |
События
| Имя | Тип | Описание |
|---|---|---|
click:control | [e: MouseEvent] | Событие, возникающее при клике в основной области контрола |
mousedown:control | [e: MouseEvent] | Событие, которое срабатывает при нажатии кнопки мыши в основной области контрола |
update:focused | [focused: boolean] | Вызывается при переходе фокуса на элемент или при его потере |
update:modelValue | [value: string] | Событие, которое срабатывает при изменении модели компонента |
update:rows | [rows: number] | Событие изменения вычисленного количества строк при автоматическом увеличении высоты |
Слоты
| Имя | Тип | Описание |
|---|---|---|
append | CdsInputSlot | Добавляет элемент после поля ввода |
append-inner | CdsInputDefaultSlot | Слот, добавляемый в конце инпута ввода |
clear | CdsInputDefaultSlot & { props: Record<string, any>; } | Слот для пользовательского иконки очистки (отображается, когда свойство clearable имеет значение «true»). |
counter | CdsCounterSlot | Слот для ввода пользовательского счетчика |
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[]> | Функция валидации поля ввода |