Skip to content

CdsTextArea

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

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

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

Анатомия ​

Сверху — лейбл и описание, в центре — многострочное поле с кнопкой очистки, под полем — строка сообщений и счётчик символов. Устройство совпадает с CdsTextInput: доступны те же зоны prepend / append снаружи и внутри рамки — как пропсы *-icon и одноимённые слоты.

Вариации ​

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

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

Sandbox Storybook

Количество строк ​

Свойство rows задаёт высоту области в строках — по умолчанию 5. Выбирайте высоту под ожидаемый объём ответа: для комментария хватит 2–3 строк.

Sandbox Storybook

Автоматическая высота ​

Свойство auto-grow увеличивает высоту области по мере ввода — текст не приходится прокручивать. max-rows ограничивает рост числом строк, max-height — высотой в пикселях; дальше появляется прокрутка.

Sandbox Storybook

Изменение размера ​

По умолчанию пользователь может растянуть область за правый нижний угол. Свойство no-resize отключает это; при auto-grow ручное изменение размера отключается автоматически.

Sandbox Storybook

Очистка ​

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

Sandbox Storybook

Счётчик ​

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

Sandbox Storybook

Состояния ​

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

Sandbox Storybook

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

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

Отправка обращения ​

Форма собирается из CdsForm, короткой темы в текстовом поле и сообщения в текстовой области. Свойство rules проверяет, что сообщение достаточно подробное, а counter с maxlength заранее показывают лимит. Кнопка получает loading на время запроса.

Sandbox Storybook

Комментарий в обсуждении ​

Компактное поле комментария: rows="1" и auto-grow с max-rows — область начинается с одной строки и растёт вместе с текстом, hide-details убирает нижний блок. Кнопка отправки — CdsFunctionalButton в слоте append-inner; Enter отправляет комментарий, Shift+Enter переносит строку.

Sandbox Storybook

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

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

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeboolean | undefined—Активное состояние поля
activeColorstring | undefined—Цвет компонента, когда он находится в активном состоянии
appendIconIconValue | undefined—Иконка в слоте append после контента
appendInnerIconIconValue | undefined—Иконка во внутреннем слоте append после содержимого поля
autocompletestring | undefined—Помогает влиять на предложения браузера. Значение «suppress» изменяет атрибут name полей, а значение «off» полагается на то, что браузер по собственной инициативе перестанет предлагать значения. Любое другое значение передается встроенной функции автозаполнения для соответствующего элемента.
autofocusboolean | undefined—Включает автофокус
autoGrowboolean | 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Максимальное число отображаемых ошибок при валидации
maxHeightstring | number | undefined—Максимальная высота текстовой области
maxRowsstring | number | undefined—Максимальное количество строк при автоматическом увеличении высоты
maxWidthstring | number | undefined—Максимальная ширина компонента
messagesstring | readonly string[] | undefined[]Сообщения для отображения под полем ввода
minWidthstring | number | undefined—Минимальная ширина компонента
modelModifiersRecord<string, boolean> | undefined—Модификаторы v-model, переданные Vue для обработки значения поля
modelValueany—Значение компонента в v-model. Если компонент поддерживает свойство multiple, по умолчанию используется пустой массив.
namestring | undefined—Имя поля ввода
noResizeboolean | 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—Обратный порядок расположения элементов внутри поля
rowsstring | number | undefined5Количество строк текстовой области
rulesreadonly ValidationRule[] | undefined[]Принимает массив, состоящий из элементов различных типов: функций, логических значений и строк. Функции принимают входное значение в качестве аргумента и должны возвращать либо true / false, либо строку, содержащую сообщение об ошибке. Поле ввода перейдет в состояние ошибки, если функция возвращает значение false (или любое значение в массиве содержит false) либо является строкой.
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
suffixstring | undefined—Текстовый суффикс, отображаемый после значения поля
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
validateOnValidateOn | undefined—Изменяет тип события, при котором запускается валидация
validationValueany—Значение, используемое при применении правил валидации
widthstring | number | undefined—Ширина компонента

События

ИмяТипОписание
click:control[e: MouseEvent]Событие, возникающее при клике в основной области контрола
mousedown:control[e: MouseEvent]Событие, которое срабатывает при нажатии кнопки мыши в основной области контрола
update:focused[focused: boolean]Вызывается при переходе фокуса на элемент или при его потере
update:modelValue[value: string]Событие, которое срабатывает при изменении модели компонента
update:rows[rows: number]Событие изменения вычисленного количества строк при автоматическом увеличении высоты

Слоты

ИмяТипОписание
appendCdsInputSlotДобавляет элемент после поля ввода
append-innerCdsInputDefaultSlotСлот, добавляемый в конце инпута ввода
clearCdsInputDefaultSlot & { props: Record<string, any>; }Слот для пользовательского иконки очистки (отображается, когда свойство clearable имеет значение «true»).
counterCdsCounterSlotСлот для ввода пользовательского счетчика
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[]>Функция валидации поля ввода