Forms

DatePicker

Input data con calendario popup e auto-completamento intelligente. Supporta selezione singola, multipla e a intervallo, opzioni rapide e bottoni di conferma.

Import

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

Esempio Base

Formato Valore

DirezioneFormato
modelValue in ingressoYYYY-MM-DD (single), Date[] (multiple/range) o null
update:modelValue in uscitaYYYY-MM-DD (single), Date[] (multiple/range) o null
Visualizzato all'utenteDD/MM/YYYY (locale it)
Auto-completamento intelligente — In modalità singola l'utente può digitare solo il giorno (completato con mese/anno correnti) o giorno+mese (completato con anno corrente). Es. digitando 5 in dicembre 2025 si ottiene 05/12/2025.

Props

PropTipoDefaultDescrizione
modelValuestring | Date | Date[] | null—Valore corrente (v-model)
defaultValuestring | Date | Date[] | null—Valore iniziale non controllato
labelstring—Label del campo
placeholderstringlocaleTesto placeholder (default da i18n)
helperTextstring—Testo di aiuto sotto il campo
errorstring—Messaggio di errore
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 (dalla 1.19.0)
disabledbooleanfalseDisabilita il componente
readonlybooleanfalseSola lettura
loadingbooleanfalseMostra spinner di caricamento
requiredbooleanfalseCampo obbligatorio
invalidbooleanfalseForza stato errore
size'small' | 'medium' | 'large''medium'Dimensione dell'input
severitySeverity'primary'Colore del tema
variant'outlined' | 'filled''outlined'Variante visiva
fluidbooleanfalseAdatta la larghezza al contenitore
roundedbooleanfalseBordi arrotondati
showClearbooleanfalseMostra pulsante di svuotamento
showIconbooleantrueMostra icona calendario
iconDisplay'button' | 'input''button'Posizione icona: suffix button o prefix input
manualInputbooleantruePermette la digitazione manuale
inlinebooleanfalseCalendario sempre visibile senza popup
minstring—Data minima in formato YYYY-MM-DD
maxstring—Data massima in formato YYYY-MM-DD
minDateDate | null—Data minima come oggetto Date
maxDateDate | null—Data massima come oggetto Date
disabledDatesDate[] | null—Lista di date disabilitate
disabledDaysnumber[] | null—Giorni della settimana disabilitati (0=Dom, 6=Sab)
selectionMode'single' | 'multiple' | 'range''single'Modalità di selezione
dateFormatstring—Formato di visualizzazione data
showTimeboolean—Mostra selettore orario nel calendario
timeOnlyboolean—Solo selettore orario
hourFormat'12' | '24'—Formato ore
numberOfMonthsnumber—Numero di mesi visualizzati affiancati
showWeekboolean—Mostra numero settimana
showWeekNumbersbooleanfalseMostra numeri di settimana nella colonna sinistra
showButtonBarboolean—Mostra barra pulsanti oggi/clear nel calendario
showQuickOptionsbooleanfalseMostra opzioni rapide (Oggi, Domani, ecc.)
quickOptionsCalendarQuickOption[]—Opzioni rapide personalizzate
firstDayOfWeeknumberlocalePrimo giorno settimana (0=Dom, 1=Lun)
showActionButtonsbooleanfalseChiude popup solo su conferma/annulla
view'date' | 'month' | 'year'—Vista iniziale del calendario
yearRangestring | null—Intervallo anni selezionabili (es. '1900:2030')
touchUIboolean—Ottimizzato per dispositivi touch
prefixIconstring—Classe icona prefix
suffixIconstring—Classe icona suffix
clearIconstringconfigClasse icona clear (override config)
loadingIconstringconfigClasse icona loading (override config)
inputIdstringautoID dell'elemento input
inputClassstring | null—Classe CSS aggiuntiva per l'input
inputStylestring | Record<string, string | number> | null—Stile inline per l'input
namestring—Nome del campo per form submission
autofocusbooleanfalseFocus automatico al mount

Emits

EventoPayloadDescrizione
update:modelValuestring | Date | Date[] | nullAggiornamento valore (v-model)
input{ originalEvent: Event; value: string | Date | Date[] | null }Input testuale
change{ originalEvent: Event; value: string | Date | Date[] | null }Cambio valore confermato
focusFocusEventFocus sull'input
blurFocusEventBlur dall'input
keydownKeyboardEventTasto premuto
keyupKeyboardEventTasto rilasciato
keypressKeyboardEventTasto premuto (keypress)
clearMouseEventClick sul pulsante clear
dateSelectDate | Date[]Data selezionata nel calendario
todayClick—Click su "Oggi" nel calendario
clearClick—Click su "Clear" nel calendario
monthChange{ month: number; year: number }Cambio mese nella navigazione
yearChange{ month: number; year: number }Cambio anno nella navigazione
beforeShow—Prima dell'apertura popup
show—Popup aperto
beforeHide—Prima della chiusura popup
hide—Popup chiuso
confirmstring | Date | Date[] | nullConferma selezione (con showActionButtons)
cancel—Annullamento selezione (con showActionButtons)

Slot

SlotDescrizione
iconSostituzione dell'icona calendario
calendar-headerContenuto aggiuntivo nell'header del popup calendario
calendar-footerContenuto aggiuntivo nel footer del popup calendario

Esempi

Con limiti di data

Una data digitata fuori da min/max (o minDate/maxDate) non viene accettata: all'uscita dal campo il valore torna all'ultimo valido e sotto compare il motivo, per esempio «La data non può essere precedente al 01/01/1900», annunciato agli screen reader (role="alert", aria-invalid, aria-describedby). Prima veniva scartata in silenzio. Il messaggio sparisce quando si riscrive o si sceglie una data dal calendario; un error passato dal chiamante ha la precedenza (dalla 1.24.0).

Con opzioni rapide e conferma

Con show-action-buttons il popup si chiude solo premendo OK o Annulla. Il valore viene aggiornato solo alla conferma e l'evento confirm riceve il valore finale in formato ISO.

Selezione multipla

In modalità multiple il modelValue è un Date[]. Ogni click sul calendario aggiunge/rimuove la data dall'array.

Selezione range

In modalità range il primo click seleziona la data di inizio, il secondo la data di fine. Usa number-of-months per visualizzare più mesi affiancati e facilitare la selezione.

Calendario inline

Con giorni disabilitati

disabledDays accetta un array di indici (0=Domenica, 6=Sabato). Per disabilitare date specifiche usa disabledDates: Date[].

Opzioni rapide personalizzate

Metodi Esposti

MetodoDescrizione
focus()Porta il focus sull'input
blur()Rimuove il focus dall'input
select()Seleziona il testo nell'input
open()Apre il calendario popup
close()Chiude il calendario popup
toggle()Alterna apertura/chiusura del popup

Accessibilità

  • Input associato alla label tramite id generato automaticamente o inputId
  • L'icona calendario è un <button> con tabindex="-1" (fuori dal tab order)
  • All'apertura il focus entra nella griglia, sul giorno selezionato o su oggi (dalla 1.24.0)
  • Tab e Maiusc+Tab restano dentro il popup anche in un Dialog: il popup è teleportato fuori dal dialog, e prima il focus trap del Dialog riportava il focus nel dialog (dalla 1.24.0)
  • Il popup si chiude con Escape, e in un Dialog chiude solo il popup: il dialog si chiude al tasto successivo. Vale anche col focus sul body (per esempio dopo il pulsante che apre il calendario), grazie a useEscapeWhileOpen (dalla 1.24.0)
  • Si apre con Enter quando l'input ha il focus
  • ariaLabel e ariaLabelledby per descrizioni accessibili aggiuntive
Per selezionare data e ora insieme usa il componente dedicato DateTimePicker invece di DatePicker con showTime.

TypeScript

import type { DatePickerProps, DatePickerEmits, CalendarQuickOption } from '@pzeta/vue-components'

// Valore in formato ISO YYYY-MM-DD
const dateValue = ref<string>('')

// Opzioni rapide tipizzate
const quickOptions: CalendarQuickOption[] = [
  { label: 'Oggi', value: () => new Date() },
]