Forms

InputMask

Campo di testo con maschera di formattazione per input strutturati come date, codici fiscali, numeri di telefono e codici seriali. Supporta pattern con caratteri speciali e opzioni di autoclear.

Import

import { InputMask } from '@pzeta/vue-components'

Esempio Base

Sintassi della Maschera

CarattereCorrisponde a
9Cifra numerica (0-9)
aCarattere alfabetico (a-z, A-Z)
*Carattere alfanumerico (a-z, A-Z, 0-9)
?Rende opzionale tutto ciò che segue
\Escape: il carattere successivo è letterale

Props

PropTipoDefaultDescrizione
modelValuestring | nullValore del campo (v-model)
defaultValuestring | nullValore predefinito (modalità non controllata)
maskstringPattern della maschera (es: '99/99/9999', '(999) 999-9999')
slotCharstring'_'Carattere placeholder mostrato nelle posizioni non compilate
autoClearbooleantrueCancella il valore se la maschera non è completamente compilata al blur
unmaskbooleanfalseSe true, emette il valore senza i caratteri letterali della maschera
labelstringLabel mostrata sopra il campo
placeholderstringTesto placeholder (default: il pattern della maschera)
helperTextstringTesto di aiuto sotto il campo
errorstringMessaggio di errore (sovrascrive helperText)
variant'outlined' | 'filled''outlined'Variante visiva del campo
size'small' | 'medium' | 'large''medium'Dimensione del campo
disabledbooleanfalseDisabilita il campo
readonlybooleanfalseCampo in sola lettura
requiredbooleanfalseCampo obbligatorio
invalidbooleanfalseStato di validazione invalido
fluidbooleanfalseOccupa tutta la larghezza disponibile
loadingbooleanfalseMostra indicatore di caricamento
loadingIconstringconfig globaleClasse CSS icona di caricamento
autocompletestringValore attributo autocomplete HTML
idstringauto-generatoID dell'elemento input
namestringNome del campo per form nativi
tabindexnumberOrdine di tabulazione
ariaLabelstringLabel ARIA per screen reader
ariaLabelledbystringID elemento che funge da label ARIA
ariaDescribedbystringID elemento con descrizione aggiuntiva
maskDescriptionstringDescrizione del formato per screen reader (es: "Formato: GG/MM/AAAA")
inputClassstring | nullClasse CSS aggiuntiva per l'input
inputStylestring | object | nullStile inline per l'input
autofocusbooleanfalseFocus automatico al mount

Emits

EventoPayloadDescrizione
update:modelValuestringAggiornamento v-model
valueChangestringCambio valore (modalità non controllata)
complete{ originalEvent: Event, value: string }Emesso quando la maschera è completamente compilata
focusFocusEventQuando il campo riceve il focus
blurFocusEventQuando il campo perde il focus
keydownKeyboardEventAlla pressione di un tasto
pasteClipboardEventAl paste di contenuto (la maschera viene applicata automaticamente)

Esempi

Maschere comuni

Con unmask (valore senza maschera)

Con maschera opzionale

Con accessibilità avanzata

<template>
  <InputMask
    v-model="data"
    mask="99/99/9999"
    label="Data di nascita"
    mask-description="Inserisci la data nel formato giorno/mese/anno"
    :auto-clear="false"
    @complete="onDateComplete"
  />
</template>

Accessibilità

  • La prop maskDescription aggiunge un testo nascosto visivamente (sr-only) collegato all'input tramite aria-describedby
  • aria-invalid viene impostato automaticamente quando invalid o error sono presenti
  • aria-required e aria-busy sono gestiti automaticamente
  • Il cursore viene posizionato automaticamente alla prima posizione libera al focus
  • I tasti ArrowLeft/ArrowRight navigano tra le posizioni della maschera
  • Al paste, la maschera viene applicata automaticamente filtrando i caratteri validi

TypeScript

import type { InputMaskProps } from '@pzeta/vue-components'

const maskProps: InputMaskProps = {
  mask: '99/99/9999',
  label: 'Data',
  slotChar: '_',
  autoClear: true,
  unmask: false,
  maskDescription: 'Formato: GG/MM/AAAA',
}