Skip to content

InputOTP ​

Campo especializado para códigos de un solo uso (OTP, 2FA, PIN).


Import ​

jsx
import {
  InputOTP,
  InputOTPGroup,
  InputOTPSlot,
  InputOTPSeparator,
} from '@imansi/ui';

Uso básico ​

jsx
<InputOTP maxLength={6}>
  <InputOTPGroup>
    <InputOTPSlot index={0} />
    <InputOTPSlot index={1} />
    <InputOTPSlot index={2} />
    <InputOTPSlot index={3} />
    <InputOTPSlot index={4} />
    <InputOTPSlot index={5} />
  </InputOTPGroup>
</InputOTP>

Con separador ​

jsx
<InputOTP maxLength={6}>
  <InputOTPGroup>
    <InputOTPSlot index={0} />
    <InputOTPSlot index={1} />
    <InputOTPSlot index={2} />
  </InputOTPGroup>
  <InputOTPSeparator />
  <InputOTPGroup>
    <InputOTPSlot index={3} />
    <InputOTPSlot index={4} />
    <InputOTPSlot index={5} />
  </InputOTPGroup>
</InputOTP>

Con patrón numérico ​

jsx
<InputOTP
  maxLength={6}
  pattern="^[0-9]+$"
  value={codigo}
  onChange={setCodigo}
>
  {/* slots */}
</InputOTP>

Con callback al completar ​

jsx
<InputOTP
  maxLength={6}
  onComplete={(codigo) => verificar2FA(codigo)}
>
  {/* slots */}
</InputOTP>

Props ​

InputOTP ​

PropTipoDefaultDescripción
maxLengthnumber—Cantidad de dígitos
valuestring—Valor controlado
onChange(value: string) => void—Callback al cambiar
onComplete(value: string) => void—Callback al completar
patternstring—Regex del patrón permitido
disabledbooleanfalseDeshabilita

Accesibilidad ​

  • Auto-focus en el primer slot
  • Escribir mueve el foco al siguiente
  • Backspace borra y vuelve al anterior
  • Pegar un código lo distribuye automáticamente
  • Flechas ← → navegan entre slots

Hecho con ❤️ en Argentina