Forms

InputText

Campo di testo generico con supporto per icone, clear button, contatore caratteri e varianti visive. Compatibile con v-model e tutti i tipi HTML5 standard.

Import

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

Esempio Base

Props

PropTipoDefaultDescrizione
modelValuestring | numberValore del campo (v-model)
defaultValuestring | number | nullValore predefinito (modalità non controllata)
type'text' | 'email' | 'url' | 'tel' | 'search''text'Tipo nativo dell'input HTML
labelstring | nullLabel mostrata sopra il campo
placeholderstring | nullTesto placeholder
helperTextstring | nullTesto di aiuto sotto il campo
errorstring | nullMessaggio di errore (sovrascrive helperText)
variant'outlined' | 'filled''outlined'Variante visiva del campo
size'small' | 'medium' | 'large''medium'Dimensione del campo
severity'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'contrast' | 'help''primary'Colore focus e accenti
disabledbooleanfalseDisabilita il campo
readonlybooleanfalseCampo in sola lettura
requiredbooleanfalseCampo obbligatorio (mostra asterisco)
invalidbooleanfalseStato di validazione invalido
fluidbooleanfalseOccupa tutta la larghezza disponibile
roundedbooleanfalseBordi completamente arrotondati
loadingbooleanfalseMostra indicatore di caricamento
loadingIconstringconfig globaleClasse CSS icona di caricamento
showClearbooleanfalseMostra pulsante per cancellare il contenuto
clearIconstringconfig globaleClasse CSS icona clear
showCharacterCounterbooleanfalseMostra contatore caratteri (richiede maxlength)
maxlengthnumberNumero massimo di caratteri
patternstringPattern regex per validazione HTML5 nativa
inputmodestringSuggerimento tastiera virtuale su mobile
autocompletestringValore attributo autocomplete HTML
prefixIconstring | nullClasse CSS icona a sinistra del campo
suffixIconstring | nullClasse CSS icona a destra del campo
inputIdstring | nullauto-generatoID dell'elemento input
inputClassstring | nullClasse CSS aggiuntiva per l'input
inputStylestring | object | nullStile inline per l'input
ariaLabelstring | nullLabel ARIA per screen reader
ariaLabelledbystring | nullID elemento che funge da label ARIA
tabindexnumber | nullOrdine di tabulazione
autofocusbooleanfalseFocus automatico al mount
namestring | nullNome del campo per form nativi

Emits

EventoPayloadDescrizione
update:modelValuestring | numberAggiornamento v-model
input{ originalEvent: Event, value: string | number }Ad ogni input dell'utente
change{ originalEvent: Event, value: string | number }Al cambio del valore (blur)
focusFocusEventQuando il campo riceve il focus
blurFocusEventQuando il campo perde il focus
keydownKeyboardEventAlla pressione di un tasto
keyupKeyboardEventAl rilascio di un tasto
keypressKeyboardEventAlla pressione di un tasto che produce carattere
pasteClipboardEventAl paste di contenuto
clearEventQuando il contenuto viene cancellato tramite clear button

Slot

SlotScopeDescrizione
prefixContenuto personalizzato a sinistra dell'input (sovrascrive prefixIcon)
suffixContenuto personalizzato a destra dell'input (sovrascrive suffixIcon)

Esempi

Con icone e clear button

Varianti visive

Con contatore caratteri

Stati di validazione

Con slot personalizzati

Accessibilità

  • La label è collegata all'input tramite for/id (ID auto-generato se non specificato)
  • I campi required mostrano asterisco visivo e testo "obbligatorio" nascosto per screen reader
  • Lo stato invalid e error impostano aria-invalid sull'input
  • Il clear button ha tabindex="-1" per non interferire con la navigazione da tastiera
  • Il loading indicator è escluso dalla navigazione da tastiera

TypeScript

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

const inputProps: InputTextProps = {
  type: 'email',
  label: 'Email',
  required: true,
  variant: 'outlined',
}