Skip to content

Props y Eventos

Referencia completa de la API del componente <OtpInput>.

Props

Básicos

PropTipoDefaultDescripción
modelValuestring''Enlace v-model para el valor OTP
numInputsnumber6Número de campos de entrada
inputType'number' | 'tel' | 'letter-numeric' | 'password''tel'Tipo de validación de entrada
inputmodestring'numeric'Inputmode HTML para teclado virtual

Apariencia

PropTipoDefaultDescripción
themeOtpTheme'box'Tema visual (ver Temas)
variant'default' | 'primary' | 'success' | 'danger' | 'warning''default'Variante de color
size'sm' | 'md' | 'lg' | 'xl''md'Tamaño del input
placeholderstring | string[]''Placeholder (string para todos, o array por input)
separatorstring''HTML a renderizar entre inputs

Estado

PropTipoDefaultDescripción
shouldAutoFocusbooleanfalseAuto-focus en el primer input al montar
shouldFocusOrderbooleanfalseForzar orden secuencial de entrada
disabledbooleanfalseDeshabilitar todos los inputs
readonlybooleanfalseModo solo lectura
errorbooleanfalseEstado de error (activa animación shake)
successbooleanfalseEstado de éxito (activa animación pulse)

Estilo

PropTipoDefaultDescripción
inputClassesstring | string[]''Clases CSS para cada input
conditionalClassstring[] | (index, value) => stringClases por input (array o función)
containerClassstring''Clase CSS para el contenedor
ariaLabelstring'OTP Input'Etiqueta accesible

Tipo de Tema

ts
type OtpTheme =
  | 'box'        // Bordes limpios con esquinas redondeadas
  | 'underline'  // Borde inferior mínimo
  | 'rounded'    // Inputs circulares
  | 'pill'       // Forma de cápsula
  | 'separated'  // Tarjetas elevadas con efecto lift
  | 'flush'      // Barra continua unida
  | 'shadow'     // Sombra prominente
  | 'neon'       // Brillo neón sobre fondo oscuro
  | 'glass'      // Glassmorfismo con blur
  | 'minimal'    // Bordes finos, ultra limpio
  | 'filled'     // Fondo sólido, sin borde

Eventos

EventoPayloadDescripción
update:modelValuestringCada cambio (soporte v-model)
changestringCada cambio de carácter
completestringTodos los inputs completados
vue
<OtpInput
  v-model="otp"
  @change="enCadaCambio"
  @complete="alCompletar"
/>

Métodos Expuestos

Accede mediante una ref de template:

vue
<script setup>
import { ref } from 'vue'
import { OtpInput } from 'vue-otp-pro'

const otpRef = ref<InstanceType<typeof OtpInput> | null>(null)

otpRef.value?.clear()        // Limpiar todos los inputs
otpRef.value?.fill('123456') // Rellenar todos los inputs
otpRef.value?.focus()        // Enfocar el primer input
otpRef.value?.focusInput(3)  // Enfocar un input específico por índice
</script>

<template>
  <OtpInput ref="otpRef" />
</template>
MétodoArgumentosDescripción
clear()Limpia todos los inputs y enfoca el primero
fill(value)stringRellena los inputs con el valor dado
focus()Enfoca el primer input
focusInput(index)numberEnfoca un input específico por índice

Slots

separator

vue
<OtpInput separator="-">
  <template #separator>
    <span style="color: #6366f1; font-weight: bold;">-</span>
  </template>
</OtpInput>

TypeScript

Todos los tipos son exportados:

ts
import type {
  OtpInputProps, OtpInputExpose, OtpInputType,
  OtpTheme, OtpVariant, OtpSize,
} from 'vue-otp-pro'