Поле с токенами TokenInput

Поле с токенами — это поле ввода со списком подсказок. Оно похоже на комбобокс, но используется в случаях, когда нужно указать сразу много однородных элементов — токенов.

Когда использовать

Поле с токенами используют для выбора нескольких значений из справочника и для добавления своих значений.

Описание работы

Состояние по умолчанию

Плейсхолдер подсказывает, что в поле можно ввести несколько значений.

Пустое поле с плейсхолдером «Введите адреса электронной почты через запятую»

Фокус по пустому полю

При получении фокуса плейсхолдер становится чуть светлее, появляется чёрная рамка у поля, сразу открывается список вариантов.

Поле в фокусе с посветлевшим плейсхолдером, под ним список из шести адресов от «first@domain.com» до «sixth@domain.com»

Когда курсор находится над раскрывающимся списком, то скроллится список, а не страница.

Если список большой, показывайте сначала наиболее релевантные варианты.

Поле в фокусе, в списке пять адресов от «first@domain.com» до «fifth@domain.com», под ними серый текст «Показано 5 из 317 записей. Начните вводить значение, чтобы увидеть остальные»

Начало ввода

При вводе символов список фильтруется. Первый пункт в списке подсвечивается.

В поле введено «th», в списке адреса от «third@domain.com» до «sixth@domain.com», первый пункт подсвечен

Если значений, соответствующих введённой строке, много, показывайте только часть из них.

В поле введено «inf», в списке пять значений от «infrastructure» до «claims.info», первое подсвечено. Под ними серый текст «Показано 5 из 317 записей. Уточните запрос, чтобы увидеть остальные» и пункт «Добавить inf».

Если в справочнике нет элементов, удовлетворяющих поиску, и можно добавлять свои, отображается только один пункт — «Добавить».

В поле введено «guides@skbkontur.ru», в списке единственный подсвеченный пункт «Добавить guides@skbkontur.ru» с подсказкой «Нажмите запятую или пробел»

Выбор пункта из списка

При выборе значения мышью или клавишей Enter фокус остаётся в поле, раскрывающийся список перемещается в новую позицию рядом с текстовым курсором.

Уже выбранные элементы не отображаются в раскрывающемся списке.

Поле с токеном «first@domain.com», под текстовым курсором после токена список от «second@domain.com» до «sixth@domain.com», адреса «first@domain.com» в нём нет

Фокус по заполненному полю

Если курсор был над одним из токенов в момент клика, то выбирается этот токен и у поля появляется фокусная чёрная рамка.

Поле в фокусе с токенами «first@dom.com» и «second@dom.com», второй токен выделен — он тёмный с белым текстом

Если начать в этот момент набирать текст — выделение с выбранного токена снимается, появляется раскрывающийся список.

После токенов «first@dom.com» и «second@dom.com» введено «th», оба токена серые, под текстом список от «third@domain.com» до «sixth@domain.com», первый пункт подсвечен

Если курсор был не над токеном или поле получило фокус после нажатия Tab на клавиатуре — в поле ставится текстовый курсор, появляется чёрная рамка у поля и список с подсказками.

Поле в фокусе с токенами «first@dom.com» и «second@dom.com», после них текстовый курсор, под ним список от «third@domain.com» до «sixth@domain.com»

Если в поле введено произвольное значение не из справочника и поле получило фокус после нажатия Tab на клавиатуре, введённое значение выделяется.

Поле в фокусе с токенами «first@dom.com» и «second@dom.com», за ними введённый текст «third», выделенный синим

Редактирование элементов

Чтобы отредактировать токен, нужно дважды кликнуть на него мышью или выделить и нажать Enter. В этом случае токен превратится в текст, список появится непосредственно под курсором, а не под всем полем, а повторное нажатие на Enter превратит текст обратно в токен.

Сначала в поле из трёх токенов выделен «second@dom.com». После нажатия Enter он превращается в выделенный синим текст на том же месте, под ним список с подсвеченным «second@dom.com».

Токен ведёт себя как комбобокс при получении фокуса: значение выделяется, открывается список с подсказками и скроллится до выбранного значения.

В момент перехода в режим редактирования и обратно все остальные токены должны оставаться на своих местах.

Если во время ввода нового значения длина токена увеличивается, он сдвигает все идущие за ним токены, а если они не входят — переносит их на следующую строку.

В поле токен «first@domain.com», за ним редактируемый текст «twentysecond@dom.com», токен «third@dom.com» на второй строке. Под текстом пункт «twentysecond@dom.com» с подсказкой «Нажмите запятую или пробел».

Если длина токена становится больше ширины поля ввода, редактируемый текст переносится на следующую строку.

Под токеном «first@domain.com» на второй строке редактируемый текст «twothousandtwohundredtwentysecond@dom.com», под полем пункт с этим значением и подсказкой «Нажмите запятую или пробел»

Совсем огромный токен может занять несколько строк, сдвигая остальные.

Под токеном «first@domain.com» редактируемый текст — очень длинный адрес «twomillion…second@dom.com», он занимает две строки поля. В пункте списка под полем адрес тоже в две строки, ниже подсказка «Нажмите запятую или пробел».

Токен в этом случае тоже становится больше.

Под токеном «first@domain.com» тот же длинный адрес стал токеном высотой в две строки, текстовый курсор перешёл на новую строку, под ним список подсказок с подсвеченным «second@dom.com»

По нажатию на Enter или запятую текст снова становится токеном. Выделение остаётся на нём.

Сначала в поле между токенами «first@domain.com» и «third@dom.com» редактируется текст «twentysecond@dom.com», под ним пункт с подсказкой «Нажмите запятую или пробел». После нажатия Enter текст стал выделенным токеном.

Если во время ввода текста убрать фокус с поля клавиатурой или мышкой, то текст останется в поле, но не превратится в токен.

Размер поля

Если пользователь ввёл токенов больше, чем входит по ширине, поле увеличивается по высоте и ведёт себя как текстовая область.

Поле с шестью токенами-адресами в четыре строки — оно выросло по высоте. Под текстовым курсором после последнего токена список: «fifth@domain.com» и «sixth@domain.com».

Маска

Чтобы упростить форматирование, можно использовать маску.

Поле с токеном «+7 909 000-00-00», за ним номер вводится по маске: введено «+7 90», остальные цифры — серые подчёркивания

Цвет

В обычных случаях токен бесцветный. В случаях, если вводимые значения будут на одной странице в нескольких экземплярах и их нужно визуально связывать или различать (например, теги), можно использовать цветные токены.

Цвета должны быть разные по оттенку, но близкие по насыщенности.

Три цветных токена: зелёный «#первичка», голубой «#оплачено» и розовый «#счёт-фактура»

Виды полей

С выбором из справочника

Если в поле можно ввести только значения из справочника и пользователь не может добавлять свои, то при вводе в поле появляются подсказки.

В поле с токеном «1207 99 910 0» введено «4014», в списке подсказок два кода с названиями: «Изделия гигиенические или фармацевтические из резины» и «Прочие изделия из резины»

Если в справочнике нет подходящего значения, добавить элемент нельзя.

В поле с токеном «1207 99 910 0» введено «401466613», под полем вместо списка серый текст «Не найдено»

С возможностью добавления в справочник

Если пользователь может вводить любые значения в поле, в конце списка появляется подсказка об этом и пункт «Добавить».

Значение добавляется в справочник и в поле, если выбрать этот пункт в списке с помощью мыши или клавиатуры, а также если ввести разделитель — запятую или пробел.

В поле с токенами «#корректировка» и «#ндс» введено «#конт», в списке «#контора» и «#контрагент», под чертой пункт «Добавить #конт» с подсказкой «Нажмите запятую или пробел»

Без справочника

Если справочника нет, то пользователь может ввести любое значение. Значения можно ввести через разделитель или добавить токены по нажатию на Enter. Подсказок у таких полей нет.

Поле в фокусе с токеном «guides@skbkontur.ru», за ним введён текст «mail@domain.com», списка под полем нет

Разделитель элементов

Введённый текст превращается в токен при выборе значения из списка или при вводе разделителя. В общем случае разделителем служит запятая. Разделитель следует выбирать в зависимости от формата данных.

Например, при вводе электронной почты, разделителем уместно сделать запятую с пробелом, поскольку эти символы в ней не встречаются. В случае с телефоном пробел нельзя использовать, поскольку пользователь может сам ввести его для удобочитаемости или скопировать его из места, где он уже был.

Название

Используйте множественное число при указании названия — поле с токенами допускает ввод нескольких значений.

Два пустых поля: «Номера телефонов» с плейсхолдером «Введите номера телефонов через запятую» и «Электронные почты» с плейсхолдером «Введите адреса электронной почты через запятую»

Если поле уже заполнено, например, с полем работает несколько людей, пользователь может неправильно понять, как с ним взаимодействовать. Добавляйте подсказку под полем, если поле уже заполнено.

Поле «Электронные почты» с токеном «first@dom.com», под полем серая подсказка «Введите адреса электронной почты, на которые будут приходить оповещения»

Валидация

Если текст не подходит по формату, то токен не формируется. В этом случае при потере фокуса валидируется всё поле целиком.

Поле в красной рамке: четыре токена-телефона и обычный текст «48-71-26, доб. 44», который не стал токеном. Над полем подсказка «Некоторые телефоны не подходят по формату. Убедитесь, что ввели номера мобильных телефонов».

После того, как пользователь исправит неправильно введённое значение, оно превратится в токен по нажатию Enter или добавлению разделителя.

Каждый токен может валидироваться отдельно. Пример — валидация значения при отправке формы.

Поле с четырьмя токенами-телефонами, два в красной рамке: «+49 800 000-0002» и «+775 000 000-00-04». Над полем подсказка «Для отправки СМС можно использовать только номера с кодами +7, +380 и +375».

Доступность

Управление клавиатурой

В режиме ввода или редактирования токена

В режиме ввода токена клавиатура работает как в обычном поле — стрелки вправо и влево управляют перемещением текстового курсора между символами, а стрелки вверх и вниз перемещают выделение в раскрывающемся списке. Backspace стирает введённые символы.

В поле после токена «first@dom.com» введено «do», в списке «second@dom.com», «fourth@domain.com», «fifth@domain.com» и «sixth@domain.com», первый пункт подсвечен

В обычном режиме

Когда пользователь нажимает Backspace в поле, в котором нет введённого текста, сначала выделяется предыдущий токен, а второе нажатие Backspace удаляет его.

Сначала в поле токены «first@dom.com», «second@dom.com», «third@dom.com» и курсор после них. После нажатия Backspace токен «third@dom.com» выделен. После второго нажатия Backspace он удалён, остались два токена.

При нажатии стрелок на клавиатуре курсор перемещается между токенами, а не между буквами внутри него. В поле работают все те же горячие клавиши и клавиши-модификаторы, что и в обычном поле. Например, нажатие стрелок с зажатой клавишей Shift выделяет токены по одному, а Ctrl+A выделяет все сразу.

Токены можно копировать и вставлять. Если вставить токен в обычное поле, он вставится в виде обычного текста.