PinInput

Maintainer:
amje
GitHub
size
type
length
placeholder
note
validationState
errorMessage
disabled
otp
mask
import {PinInput} from '@gravity-ui/uikit';

PinInput — это группа элементов для быстрого ввода последовательности числовых или алфавитно-цифровых значений. Чаще всего используется для ввода одноразовых паролей (OTP) или кодов подтверждения, получаемых через SMS, электронную почту или приложения-аутентификаторы.

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

Тип

По умолчанию элементы ввода принимают только числовые значения. Чтобы разрешить ввод алфавитно-цифровых значений, установите свойство type в значение "alphanumeric":

<PinInput type="alphanumeric" />

Размер

Данный компонент бывает 4 размеров: s, m, l и xl. Размер по умолчанию — m.

<PinInput size="s" />
<PinInput size="m" />
<PinInput size="l" />
<PinInput size="xl" />

Состояние

Если вы не хотите, чтобы пользователь взаимодействовал с компонентом, задайте свойство disabled:

<PinInput disabled />

Чтобы отобразить недопустимое состояние компонента, задайте значение "invalid" в свойстве validationState. Опционально можно задать текст сообщения об ошибке через свойство errorMessage.

Incorrect PIN
<PinInput validationState="invalid" errorMessage="Incorrect PIN" />

Заглушка

По умолчанию заглушка в элементах ввода отсутствует. Можно добавить ее с помощью свойства placeholder:

<PinInput placeholder="😎" />

Маска

Если нужно маскировать введенные значения, используйте свойство mask, которое работает аналогично <input type="password"/>:

<PinInput mask />

OTP

Если вы хотите, чтобы браузер предлагал одноразовые коды из внешнего контекста (например, SMS), задайте свойство otp.

API

  • focus(): void — переключает фокус на текущий активный элемент ввода.

API CSS

ИмяОписание
--g-pin-input-item-widthЗадает ширину каждого элемента ввода, если для responsive не установлено значение true.
--g-pin-input-item-gapЗадает интервал между элементами ввода.

Свойства

ИмяОписаниеТипЗначение по умолчанию
apiRefRef к API.React.RefObject
aria-describedbyHTML-атрибут aria-describedby.string
aria-labelHTML-атрибут aria-label.string
aria-labelledbyHTML-атрибут aria-labelledby.string
autoFocusВключает или отключает фокусировку на первом элементе ввода при первоначальной отрисовке.boolean
classNameHTML-атрибут class.string
defaultValueНачальное значение для неконтролируемого компонента.string[]
disabledВключает или отключает состояние disabled.boolean
errorMessageТекст ошибки, расположенный в нижнем левом углу рядом с контейнером заметки. Отображается только если validationState имеет значение "invalid".React.ReactNode
idПрефикс HTML-атрибута id для элементов ввода. Полученный идентификатор также будет содержать часть "-${index}".string
lengthКоличество полей ввода.number4
maskЕсли установлено значение true, вводимые значения будут скрыты, как в поле пароля.boolean
nameПрефикс HTML-атрибута name для элемента ввода.string
formАссоциированная форма базового элемента ввода.string
noteЭлемент, расположенный в нижнем левом углу рядом с контейнером ошибки.React.ReactNode
onUpdateОбратный вызов, срабатывающий при изменении любого из элементов ввода.(value: string[]) => void
onUpdateCompleteОбратный вызов, срабатывающий при изменении любого из элементов ввода и заполнении всех полей ввода.(value: string[]) => void
otpПри установке значения true добавляет атрибут autocomplete="one-time-code" к элементам ввода.boolean
placeholderЗаглушка для элементов ввода.string
qaHTML-атрибут data-qa, используется для тестирования.string
responsiveШирина родительского контейнера равномерно распределяется между элементами ввода.boolean
sizeРазмер поля ввода."s" "m" "l" "xl""m"
styleHTML-атрибут style.React.CSSProperties
typeОпределяет допустимые типы значений для ввода."numeric" "alphanumeric""numeric"
validationStateСостояние валидации, которое определяет внешний вид компонента."invalid"
valueТекущее значение для контролируемого компонента.string[]
onFocusОбратный вызов, срабатывающий, когда компонент получает фокус.(event: React.FocusEvent<Element>) => void
onBlurОбратный вызов, срабатывающий, когда компонент теряет фокус.(event: React.FocusEvent<Element>) => void