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
maxLengthnumberCantidad de dígitos
valuestringValor controlado
onChange(value: string) => voidCallback al cambiar
onComplete(value: string) => voidCallback al completar
patternstringRegex 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