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 | number—Valore del campo (v-model)
defaultValuestring | number | null—Valore predefinito (modalità non controllata)
type'text' | 'email' | 'url' | 'tel' | 'search''text'Tipo nativo dell'input HTML
labelstring | null—Label mostrata sopra il campo
placeholderstring | null—Testo placeholder
helperTextstring | null—Testo di aiuto sotto il campo
errorstring | null—Messaggio di errore (sovrascrive helperText)
reserveMessageSpacebooleantrueRiserva sotto il campo lo spazio del messaggio anche senza helperText né error, così un errore non sposta i campi sotto. false nelle barre filtri: un error resta comunque visibile (dalla 1.23.0)
variant'outlined' | 'filled''outlined'Variante visiva del campo. Il bordo di outlined usa --color-field-border, almeno 3:1 su ogni superficie (dalla 1.24.0)
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. Opacità solo sul wrapper (0,6): fino alla 1.23 si sommava a quella del campo (0,6 × 0,5) (dalla 1.24.0)
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)
maxlengthnumber—Numero massimo di caratteri
patternstring—Pattern regex per validazione HTML5 nativa
inputmodestring—Suggerimento tastiera virtuale su mobile
autocompletestring—Valore attributo autocomplete HTML
prefixIconstring | null—Classe CSS icona a sinistra del campo
suffixIconstring | null—Classe CSS icona a destra del campo
inputIdstring | nullauto-generatoID dell'elemento input
inputClassstring | null—Classe CSS aggiuntiva per l'input
inputStylestring | object | null—Stile inline per l'input
ariaLabelstring | null—Label ARIA per screen reader
ariaLabelledbystring | null—ID elemento che funge da label ARIA
tabindexnumber | null—Ordine di tabulazione
autofocusbooleanfalseFocus automatico al mount
namestring | null—Nome 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
prefix—Contenuto personalizzato a sinistra dell'input (sovrascrive prefixIcon)
suffix—Contenuto personalizzato a destra dell'input (sovrascrive suffixIcon)

Esempi

Con icone e clear button

Varianti visive

Con contatore caratteri

Stati di validazione

Con slot personalizzati

Attributi non dichiarati come prop

Dalla versione 1.9.0 gli attributi passati dall'esterno vengono ripartiti: class e style restano sul wrapper radice, tutto il resto (data-*, name, attributi ARIA extra, listener non dichiarati) arriva all'<input> interno. Prima venivano scartati in silenzio.

<InputText id="codiceclient" class="flex-1" data-testid="wizard-codiceclient" />
<div class="hs-inputtext-wrapper w-full flex-1">
  <div class="relative">
    <input id="codiceclient" data-testid="wizard-codiceclient" class="hs-inputtext ..." />
  </div>
</div>

Due attributi restano gestiti dal componente e non vengono sovrascritti:

  • id — applicato all'<input> ed è l'id a cui punta la <label>;
  • aria-describedby — applicato all'<input>, concatenato con gli id di helper text, messaggio di errore e counter, che altrimenti andrebbero persi.

Vale per tutti i campi form: vedi la panoramica della categoria.

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',
}