НачалоОсновыКомпонентыТексты

OTP input

OTP input принимает короткий одноразовый код: код подтверждения из SMS или письма, код двухфакторной проверки, PIN. На каждый символ — своя ячейка, а под ними одно настоящее поле.

Стабильный Figma
ОбзорИспользованиеAPIДоступность
<tk-field label="Enter the 6-digit code we sent you" helper="Sent to +1 ••• ••• 4321">
  <tk-otp-input name="code"></tk-otp-input>
</tk-field>

Анатомия

Часть Что это
tk-otp-input сам элемент; одна остановка Tab
part field ряд ячеек
part box одна ячейка, 48×48px
part input одно настоящее <input>, невидимое, поверх ряда

Подпись, подсказку и сообщение об ошибке рисует Field. Скринридер слышит одно поле, а не по полю на ячейку.

Длина, тип и маска

<tk-field label="Enter your 4-digit PIN">
  <tk-otp-input name="pin" length="4" mask></tk-otp-input>
</tk-field>
<tk-field label="Enter a backup code">
  <tk-otp-input name="backup" length="8" type="alphanumeric"></tk-otp-input>
</tk-field>
  • length задаёт число ячеек: по умолчанию 6, для PIN — 4.
  • type: numeric (по умолчанию) принимает 0–9 и открывает цифровую клавиатуру; alphanumeric принимает буквы и цифры и сохраняет регистр.
  • mask показывает заполненные ячейки точками. Только для кода, который человек знает, например PIN: маска может помешать телефону подставить код из SMS.

Ввод и вставка

  • Введённый символ заполняет ячейку, и курсор переходит к следующей. Символ на заполненной ячейке заменяет её.
  • Backspace стирает ячейку и возвращается назад. Стрелки, Home и End переходят между ячейками. Tab всегда выводит из поля.
  • Вставка заполняет все ячейки с любой позиции, а пробелы и дефисы отбрасывает: «98 76-54» становится 987654.
  • Код из SMS, который подставляет телефон, заполняет все ячейки сразу.
  • В активной ячейке мигает курсор; при ограничении анимации он не мигает.

Состояния

<tk-otp-input aria-label="Verification code" value="482913" readonly></tk-otp-input>
<tk-otp-input aria-label="Verification code" disabled></tk-otp-input>
<tk-field label="Enter the 6-digit code we sent you" error="That code is incorrect. Check it and try again.">
  <tk-otp-input name="code" value="123456"></tk-otp-input>
</tk-field>

При наведении ячейки не меняются. Активная ячейка окрашивается в цвет фокуса и получает более толстую рамку — это и есть индикатор фокуса.

  • Ошибка: задайте error у Field. Все ячейки, включая активную, станут красными, а под рядом появится сообщение. OTP input код не проверяет: когда и что сказать, решаете вы.
  • readonly: на поле можно перейти и скопировать код, но не изменить.
  • disabled: на поле нельзя перейти и нельзя ввести код, а в форму оно не попадает.
  • Обязательное поле: задайте required у Field. Форма отправится, только когда код введён целиком.
  • Зелёного состояния для верного кода нет. Переводите человека на следующий экран.

Завершение

Когда заполнена последняя ячейка, поле отправляет событие tk-complete с кодом в detail.value. Само оно форму не отправляет и фокус не переводит.

  • Отправлять форму по tk-complete можно, но человеку со скринридером или клавиатурой может понадобиться проверить код. Кнопка проверки надёжнее.
  • Если код неверный, задайте error у Field и оставьте фокус в поле.