Skip to content

OtpInput ​

Composant de saisie OTP (One-Time Password) pour les codes de verification. Supporte plusieurs variantes visuelles, groupement configurable, validation flexible et soumission automatique. Conforme aux normes WCAG avec support complet clavier et lecteurs d'ecran.

Exemples d'utilisation ​

Basique ​

Code a 6 chiffres

vue
<SuOtpInput :length="6" />

Variantes visuelles ​

boxes / underline / seamless

Boxes (defaut)

Underline

Seamless

vue
<SuOtpInput variant="boxes" :length="6" />
<SuOtpInput variant="underline" :length="6" />
<SuOtpInput variant="seamless" :length="6" />

Tailles ​

sm / md / lg

vue
<SuOtpInput size="sm" :length="6" />
<SuOtpInput size="md" :length="6" />
<SuOtpInput size="lg" :length="6" />

Groupement ​

Groupement configurable

6 digits en [3, 3]

6 digits en [2, 2, 2]

8 digits en [4, 4]

vue
<SuOtpInput :length="6" :grouping="[3, 3]" separator="-" />
<SuOtpInput :length="6" :grouping="[2, 2, 2]" separator="·" />
<SuOtpInput :length="8" :grouping="[4, 4]" separator="-" />

Types de saisie ​

Numerique / Alphanumerique / Alphabetique

Numerique (defaut)

Alphanumerique

Alphabetique

vue
<SuOtpInput inputType="numeric" :length="6" />
<SuOtpInput inputType="alphanumeric" :length="6" />
<SuOtpInput inputType="alphabetic" :length="6" />

Validation personnalisee ​

Hexadecimal uniquement

vue
<!-- Via pattern regex -->
<SuOtpInput :length="6" pattern="^[0-9a-fA-F]$" inputType="alphanumeric" />

<!-- Via fonction validate -->
<SuOtpInput :length="6" :validate="(char) => /^[0-9a-fA-F]$/.test(char)" />

Masquage ​

Caracteres masques

vue
<SuOtpInput :length="6" :masked="true" />

Etats de validation ​

error / success / warning

vue
<SuOtpInput state="error" :length="6" />
<SuOtpInput state="success" :length="6" />
<SuOtpInput state="warning" :length="6" />

Soumission automatique ​

vue
<SuOtpInput :length="6" :autoSubmit="true" @complete="handleComplete" />
vue
<script setup>
const handleComplete = (code) => {
  console.log('Code complet :', code)
  // Verifier le code...
}
</script>

Avec FormField (OtpInputField) ​

Label, message et etat

vue
<SuOtpInputField
  label="Code de verification"
  message="Entrez le code recu par SMS"
  :length="6"
  :grouping="[3, 3]"
/>

4 digits (code SMS) ​

Code court

vue
<SuOtpInput :length="4" placeholder="0" />

API ​

Props (OtpInput) ​

PropTypeDefautDescription
modelValuestring''Valeur du code OTP (v-model)
lengthnumber6Nombre de caracteres
variant'boxes' | 'underline' | 'seamless''boxes'Variante visuelle
inputType'numeric' | 'alphanumeric' | 'alphabetic''numeric'Type de caracteres acceptes
patternstring—Regex personnalisee (surcharge inputType)
validate(char: string, index: number) => boolean—Fonction de validation par caractere
size'sm' | 'md' | 'lg''md'Taille
stateState'default'Etat de validation
disabledbooleanfalseDesactive
readonlybooleanfalseLecture seule
requiredbooleanfalseRequis
maskedbooleanfalseMasquer les caracteres
groupingnumber[]—Schema de groupement (ex: [3, 3])
separatorstring'-'Caractere separateur entre groupes
autoSubmitbooleanfalseEmettre complete quand tous les champs sont remplis
placeholderstring''Placeholder par champ
autoFocusbooleanfalseAuto-focus au montage

Props (OtpInputField) ​

Herite de FormFieldProps + OtpInputProps. Props supplementaires :

PropTypeDefautDescription
labelstring—Label du champ
messagestring—Message d'aide ou d'erreur
fieldIdstring—ID personnalise
requiredTextstring'requis'Texte indicateur requis

Evenements ​

EvenementPayloadDescription
update:modelValuestringMise a jour du v-model
completestringTous les champs sont remplis (si autoSubmit)
changestringValeur modifiee
focusFocusEvent, numberFocus sur un champ (avec index)
blurFocusEvent, numberPerte de focus (avec index)

Slots ​

SlotDescription
separatorContenu personnalise du separateur entre groupes

Methodes exposees ​

MethodeDescription
focus()Focus le premier champ
clear()Efface tous les champs et focus le premier

Accessibilite ​

  • role="group" avec aria-label descriptif sur le conteneur
  • Chaque champ a un aria-label individuel ("Caractere X sur Y")
  • Zone aria-live="polite" pour annoncer la progression
  • Navigation clavier : fleches gauche/droite, Home, End, Backspace, Delete
  • autocomplete="one-time-code" pour le remplissage automatique mobile
  • inputmode="numeric" pour afficher le clavier numerique sur mobile
  • Support collage (paste) avec distribution automatique des caracteres
  • Support prefers-contrast: high et prefers-reduced-motion: reduce

Publié sous licence MIT.