FieldText
Однострочный текстовый input. Базируется на FieldDecorator и @cloud-ru/ds-input-private. Несёт заголовок, подсказку, кнопки очистки и копирования (последняя — только в readonly). Слотов вокруг строки ввода не имеет — для них есть FieldCombo.
Когда использовать
- Стандартное поле в формах, фильтрах, редакторах настроек.
- Отображение значений только-для-чтения (
readonly+ автоматическая кнопка копирования). - Нужен префикс, иконка или кнопка-сегмент:
- берите FieldCombo.
- Для специфичного поведения поиска (suggest, recent) используйте
@cloud-ru/ds-search, не FieldText.
Анатомия
Size (default m)
| Значение | Когда |
|---|---|
s | Плотные таблицы, inline-редактирование |
m | Стандартные формы (по умолчанию) |
l | Лендинги, primary-формы |
ValidationState (default default)
Управляет тонировкой acrylic-фона поля и иконкой подсказки. Проп error форсит error.
| Значение | Когда |
|---|---|
default | Нет валидации — нейтральный фон, текст подсказки textTertiary, без иконки валидации |
error | Поле не прошло валидацию — красная тонировка фона |
warning | Предупреждение, ввод допустим — жёлтая тонировка фона |
success | Подтверждение успешного ввода — зелёная тонировка фона |
Background (default true)
Acrylic-фон поля. При background = false поле остаётся без подложки (borderless-вид) — уместно во встроенных/inline-сценариях, где фон даёт окружающий контейнер.
Кнопки очистки и копирования
Постфикс-слот несёт взаимоисключающие кнопки:
- Кнопка очистки (
showClearButton, по умолчаниюtrue) появляется при непустомvalueв редактируемом поле. Вdisabledиreadonlyона скрыта — очищать нечего. - Кнопка копирования (
showCopyButton, по умолчаниюtrue) появляется только приreadonlyи непустомvalue. После клика иконка на 2 секунды меняется на галочку — подтверждение, что значение скопировано.
Установка
pnpm add @cloud-ru/ds-fields
import { FieldText } from '@cloud-ru/ds-fields'
Примеры использования
Базовое поле
Как к вам обращаться
tsx
import { FieldText } from '@cloud-ru/ds-fields';
import { useState } from 'react';
export function Basic() {
const [value, setValue] = useState('');
return <FieldText label='Имя' hint='Как к вам обращаться' placeholder='Иван' value={value} onChange={setValue} />;
}Валидация ошибки
*
Введите корректный email
tsx
import { FieldText } from '@cloud-ru/ds-fields';
import { useState } from 'react';
export function WithError() {
const [value, setValue] = useState('abc');
return (
<FieldText
label='Email'
required
placeholder='user@example.com'
error={value.includes('@') ? '' : 'Введите корректный email'}
showHintIcon
value={value}
onChange={setValue}
/>
);
}Readonly с копированием
tsx
import { FieldText } from '@cloud-ru/ds-fields';
export function Readonly() {
return <FieldText label='Token' readonly value='sk-XXXXXXXXXXXXXXXXXXXXXXXX' />;
}Props
Types
Props
FieldTextProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
allowMoreThanMaxLength | boolean | false | no | Разрешить ввод свыше `maxLength` символов (счётчик продолжит расти). |
autoComplete | string | boolean | false | no | Включен ли автокомплит для поля |
autoFocus | boolean | false | no | Включен ли авто-фокус для поля |
background | boolean | true | no | Фон поля (acrylic) |
caption | string | — | no | Вторичная подпись справа |
className | string | — | no | CSS-класс CSS-класс корня `FieldDecorator` |
data-test-id | string | — | no | |
defaultValue | string | — | no | Начальное значение (uncontrolled-режим) |
disabled | boolean | false | no | Поле выключено Является ли поле деактивированным |
error | string | — | no | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
fieldClassName | string | — | no | CSS-класс оболочки поля ввода |
hint | string | — | no | Подсказка |
id | string | — | no | Значение html-атрибута id |
innerRef | Ref<HTMLDivElement> | — | no | Ref на корневой DOM-элемент |
inputMode | "decimal" | "email" | "none" | "numeric" | "search" | "tel" | "text" | "url" | — | no | Режим работы экранной клавиатуры |
label | string | — | no | Заголовок |
labelFor | string | — | no | HTML-атрибут `for` для `<label>` |
labelTooltip | QuestionTooltipProps | — | no | Подсказка (question-tooltip) у заголовка |
layoutPresets | Partial<Record<LayoutType, Partial<{ autoFocus: boolean; }>>> | — | no | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
length | FieldLength | — | no | Счётчик длины `current/max` |
max | number | — | no | Максимальное значение поля |
maxLength | number | — | no | Максимальная длина вводимого значения |
min | number | — | no | Минимальное значение поля |
name | string | — | no | Значение html-атрибута name |
onBlur | FocusEventHandler<HTMLInputElement> | — | no | Колбек обработки потери фокуса |
onChange | ((value: string) => void) | — | no | Колбек смены значения |
onClearButtonClick | (() => void) | — | no | Колбек клика по кнопке очистки |
onClick | MouseEventHandler<HTMLInputElement> | — | no | Колбек обработки клика |
onCopyButtonClick | (() => void) | — | no | Колбек после копирования значения в буфер |
onFocus | FocusEventHandler<HTMLInputElement> | — | no | Колбек обработки получения фокуса |
onKeyDown | KeyboardEventHandler<HTMLInputElement> | — | no | Колбек обработки начала нажатия клавиши клавиатуры |
onMouseDown | MouseEventHandler<HTMLInputElement> | — | no | Колбек обработки нажатия кнопки мыши |
onPaste | ClipboardEventHandler<HTMLInputElement> | — | no | Колбек обработки вставки значения |
outline | boolean | true | no | Разделитель между основным полем и слотами `elementBefore` / `elementAfter` |
pattern | string | — | no | Регулярное выражение валидного инпута |
placeholder | string | — | no | Значение плейсхолдера |
readonly | boolean | false | no | Только для чтения Является ли поле доступным только для чтения |
required | boolean | — | no | Показать знак обязательности `*` |
showClearButton | boolean | true | no | Показывать кнопку очистки значения (как в Search) |
showCopyButton | boolean | true | no | Показывать кнопку копирования значения (только при `readonly = true` и непустом `value`) |
showHintIcon | boolean | — | no | Отображение статус-иконки у подсказки (по умолчанию `true`) |
size | "l" | "m" | "s" | — | no | Размер |
spellCheck | boolean | true | no | Значение атрибута spellcheck (проверка орфографии) |
step | string | number | — | no | Максимальное значение поля |
tabIndex | number | 0 | no | Значение атрибута tab-index |
type | "email" | "number" | "password" | "tel" | "text" | "url" | — | no | Тип инпута |
validationState | "default" | "error" | "success" | "warning" | — | no | Состояние валидации |
value | string | — | no | Значение поля (controlled-режим) |