TextBox (Blazor)
Наряду с компонентом «кнопка» (Button), текстовое поле является одним из самых базовых и популярных компонентов графического пользовательского интерфейса. Речь идёт о вводе текста без форматирования (такого как выделение жирным или курсивом), а текстовый редактор с поддержкой форматирования текста — это отдельный и довольно сложный тема. Но несмотря на отсутствие форматирования, есть много данных, которые принимаются от пользователя через данный компонент: имена, адреса, всевозможные названия. Более того под «текстом» подразумевается не только набор завершённых предложений, но и любая информация, которая может быть представлена в виде последовательности символов:
- Адреса электронной почты
- Пароли
- Ссылки
Кроме того, данный компонент иногда применяется и для ввода числовых данных, правда зачастую это не числа, а последовательности цифр иногда вперемешку в вспомогательными символами:
- Телефонные номера
- Почтовые индексы
- Номера кредитных карт
В большинстве случаев, данный компонент не предусматривает перенос строки, а при вводе большого количества символов отображается лишь часть из них, хотя с помощью клавиш по стрелками возможна прокрутка. Однако в случаях, когда от пользователя требуется ввести именно завершенные предложения (может даже абзацы), требуется возможность переноса строки, что иногда может рассматриваться как простое форматирование текста. С точки зрения HTML, для многострочного текста используется отдельный вид элемента (причём автоматической регулировки высоты изначально не предусмотрено), однако в YDF для поддержки многострочного режима нужно лишь указать соответствующую опцию, и автоматическая регулировка высоты также доступна.
Как и в случае с кнопками, простота текстового поле обманчива. Во-первых, текстовое поле ввода — это валидируемый компонент, а потому вся сложность задачи валидации вводимых данных имеет к нему прямое отношение. В YDF текстовое поле ввода, как и другие компоненты, обёрнутые в компонент ValidatableControlShell включает в себя опциональные вспомогательные элементы, такие как надпись, комментарий, список ошибок валидации и так далее, хотя с точки зрения HTML это всё отдельные элементы.
У текстового поля ввода много состояний. Визуально различимы должны быть как минимум:
:hover- Активируется при наведение курсора мыши, давая понять пользователю, что система реагирует на его действия и если кликнуть по полю ввода, то можно будет начать ввод.
:focus- Активируется, когда текстовое поле приняло фокус, то есть ввод с клавиатуры будет приниматься внутрь данного текстового поля.
:readonly/:disabled- Активно, когда поле ввода доступно только для чтения. Данная функциональность не такая редкая, как кажется, потому что во многих приложениях есть режим просмотра и режим редактирования.
- Невалидное состояние
- Активно, когда введённое значение не является валидным, а также если при этом активен режим отображения валидности состояния. Если поле ввода изначально пустое, при этом обязательно для ввода, то пустой значение невалидно изначально, однако перед тем подсвечивать поле красным и сообщать ещё ничего не сделавшему пользователю об ошибках валидации, следует дать пользователю заполнить это поле, и только когда он уберёт фокус из поля ввода, можно активировать режим отображения валидности состояния. Заметим, что такой концепции с точки зрения HTML/CSS нет, а потому если определить валидацию через HTML-атрибуты наподобие
requiredиminlengthи стили для псевдокласса:invalid, то эти стили будут применяться вне зависимости от того, начал ли пользователь вводить данные в пустые поля или ещё нет.
Более того, часть этих состояний может возникать одновременно. Например состоянии hover может возникнуть одновременно с focus, причём оба этих состояния могут возникнуть поверх invalid. Тут возникает вопрос о приоритете стилей.
Также, на практике для поле ввода востребована следующая дополнительная функциональность:
- Иконки, которые в зависимости от дизайна могут быть как слева, так и справа
- Кнопка отображения/сокрытия пароля
- Кнопка копирования введённого значения
Вся эта функциональность доступна в компоненте TextBox.
Сводка
- Класс компонента
TextBox- Stylus-примесь для генерации стилей
generateTextBoxYDF_GUI_ComponentStyles- Готовые темы
TextBox.StandardThemes.regular- Базовая (по умолчанию)
- Готовые геометрические вариации
TextBox.StandardGeometricVariations.regular- Базовая (по умолчанию)
TextBox.StandardGeometricVariations.small- Компактная
TextBox.StandardGeometricVariations.labelLike- Похожая на обычную надпись
- Геометрические модификаторы
TextBox.GeometricModifiers.noRoundings- Отсутствие скруглений
- Готовые декоративные вариации
TextBox.StandardDecorativeVariations.regular- Базовая (по умолчанию)
TextBox.StandardDecorativeVariations.labelLike- Похожая на обычную надпись
- Loading placeholder
- Недоступен
Класс TextBox
Параметры Razor-компонента
- HTML_Type
- Русскоязычное наименование
- HTML-тип
- Тип
- string
- Значение по умолчанию
- "text"
- Допустимые варианты
- TextBox__YDF.HTML_Types.regular
- TextBox__YDF.HTML_Types.email
- TextBox__YDF.HTML_Types.number
- TextBox__YDF.HTML_Types.password
- TextBox__YDF.HTML_Types.phoneNumber
- TextBox__YDF.HTML_Types.URI
- label
- Русскоязычное наименование
- Заголовочная надпись
- Тип
- string
- Обязательное
- Нет
- Минимум символов
- 1
- guidance
- Русскоязычное наименование
- Комментарий
- Тип
- string
- Обязательное
- Нет
- Минимум символов
- 1
- accessibilityGuidance
- Русскоязычное наименование
- Текст для ассистивных технологий
- Тип
- string
- Обязательное
- Нет
- Минимум символов
- 1
- externalLabelHTML_ID
- Русскоязычное наименование
- HTML-идентификатор внешней заголовочной надписи
- Тип
- string
- Обязательное
- Нет
- Минимум символов
- 1
- placeholder
- Русскоязычное наименование
- Текст отображающийся при пустом значении
- Тип
- string
- Обязательное
- Нет
- Минимум символов
- 1
- autocomplete
- Русскоязычное наименование
- Значение атрибута «autocomplete»
- Тип
- string
- Обязательное
- Нет
- value
- Русскоязычное наименование
- Начальное значение
- Тип
- string
- Значение по умолчанию
- ""
- multiline
- Русскоязычное наименование
- Нужна ли поддержка многострочного режима
- Тип
- boolean
- Значение по умолчанию
- false
- autoResizingForMultilineMode
- Русскоязычное наименование
- Нужна ли автоматическая регулировка высоты в многострочном режиме
- Тип
- boolean
- Значение по умолчанию
- true
- disabled
- Русскоязычное наименование
- Находится ли в неактивном состоянии
- Тип
- boolean
- Обязательное
- Нет
- readonly
- Русскоязычное наименование
- Доступен ли только для чтения
- Тип
- boolean
- Обязательное
- Нет
- required
- Русскоязычное наименование
- Является ли ввод обязательным
- Тип
- boolean
- Значение по умолчанию
- false
- mustDisplayAppropriateBadgeIfInputIsRequired
- Русскоязычное наименование
- Нужно ли отображать надпись «обязательное» когда ввод обязателен
- Тип
- boolean
- Значение по умолчанию
- false
- mustDisplayAppropriateBadgeIfInputIsOptional
- Русскоязычное наименование
- Нужно ли отображать надпись «необязательное» когда ввод необязателен
- Тип
- boolean
- Значение по умолчанию
- false
- mustAddInvisibleBadgeForHeightEqualizingWhenNoBadge
- Русскоязычное наименование
- Нужно ли добавлять невидимый значок для выравнивание высоты
- Тип
- boolean
- Значение по умолчанию
- false
- minimalCharactersCount
- Русскоязычное наименование
- Минимальное число символов
- Тип
- number
- Обязательное
- Нет
- Множество чисел
- Положительное целое число либо ноль
- maximalCharactersCount
- Русскоязычное наименование
- Максимальное число символов
- Тип
- number
- Обязательное
- Нет
- Множество чисел
- Положительное целое число либо ноль
- minimalNumericValue
- Русскоязычное наименование
- Минимальное числовое значение
- Тип
- number
- Обязательное
- Нет
- Множество чисел
- Положительное целое число либо ноль
- maximalNumericValue
- Русскоязычное наименование
- Максимальное числовое значение
- Тип
- number
- Обязательное
- Нет
- Множество чисел
- Положительное целое число либо ноль
- hasValueCopyingButton
- Русскоязычное наименование
- Нужна ли кнопка копирования введённого значения
- Тип
- boolean
- Значение по умолчанию
- false
- hasPasswordDisplayingToggle
- Русскоязычное наименование
- Нужен ли переключатель отображения пароля
- Тип
- boolean
- Значение по умолчанию
- false
- instanceID_UniqueDynamicPart
- Русскоязычное наименование
- Уникальная динамическая часть идентификатор экземпляра
- Тип
- string
- Обязательное
- Нет
- Минимум символов
- 1
- HTML_IDs
- Русскоязычное наименование
- HTML-идентификаторы
- Тип
- объект фиксированной структуры
- Обязательное
- Нет
- Структура объекта
- {
- inputOrTextArea
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- label
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- theme
- Русскоязычное наименование
- Тема
- Тип
- string
- Значение по умолчанию
- TextBox.StandardThemes.regular
- Допустимые варианты
- TextBox.StandardThemes.regular
- (Любые, определённые через `TextBox.defineCustomThemes(CustomThemesEnumeration)`)
- areThemesCSS_ClassesCommon
- Русскоязычное наименование
- Являются ли CSS-классы тем общими для всех компонентов
- Тип
- boolean
- Значение по умолчанию
- false
- geometricVariation
- Русскоязычное наименование
- Геометрическая вариация
- Тип
- string
- Значение по умолчанию
- TextBox.StandardGeometricVariations.regular
- Допустимые варианты
- TextBox.StandardGeometricVariations.regular
- TextBox.StandardGeometricVariations.small
- TextBox.StandardGeometricVariations.labelLike
- (Любые, определённые через `TextBox.defineCustomGeometricVariations(CustomGeometricVariationsNamesEnumeration)`)
- geometricModifiers
- Русскоязычное наименование
- Геометрические модификаторы
- Тип
- индексный массив
- Значение по умолчанию
- []
- Элементы массива
- Тип
- string
- Допустимые варианты
- TextBox.GeometricModifiers.pillShape
- TextBox.GeometricModifiers.squareShape
- TextBox.GeometricModifiers.squareShapeUnlessOverflowed
- TextBox.GeometricModifiers.singleLine
- TextBox.GeometricModifiers.noLeftBorderAndRoundings
- TextBox.GeometricModifiers.noRightBorderAndRoundings
- TextBox.GeometricModifiers.noTopBorderAndRoundings
- TextBox.GeometricModifiers.noBottomBorderAndRoundings
- TextBox.GeometricModifiers.noRoundings
- TextBox.GeometricModifiers.horizontallyShrinkable
- decorativeVariation
- Русскоязычное наименование
- Декоративная вариация
- Тип
- string
- Значение по умолчанию
- TextBox.StandardDecorativeVariations.regular
- Допустимые варианты
- Button.StandardDecorativeVariations.regular
- Button.StandardDecorativeVariations.labelLike
- (Любые, определённые через `TextBox.defineCustomDecorativeVariations(CustomDecorativeVariationsEnumeration)`)
- rootElementModifierCSS_Class
- Русскоязычное наименование
- CSS-класс-модификатор коревого элемента
- Тип
- string
- Обязательное
- Нет
- rootElementModifierCSS_Classes
- Русскоязычное наименование
- Массив CSS-классов-модификаторов коревого элемента
- Тип
- индексный массив
- Обязательное
- Нет
- Элементы массива
- Тип
- string
- rootElementSpaceSeparatedModifierCSS_Classes
- Русскоязычное наименование
- Разделённые пробелом CSS-классы-модификаторы коревого элемента
- Тип
- string
- Обязательное
- Нет