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[] | nullValore corrente (v-model)
defaultValuestring | Date | Date[] | nullValore iniziale non controllato
labelstringLabel del campo
placeholderstringlocaleTesto placeholder (default da i18n)
helperTextstringTesto di aiuto sotto il campo
errorstringMessaggio di errore
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
minstringData minima in formato YYYY-MM-DD
maxstringData massima in formato YYYY-MM-DD
minDateDate | nullData minima come oggetto Date
maxDateDate | nullData massima come oggetto Date
disabledDatesDate[] | nullLista di date disabilitate
disabledDaysnumber[] | nullGiorni della settimana disabilitati (0=Dom, 6=Sab)
selectionMode'single' | 'multiple' | 'range''single'Modalità di selezione
dateFormatstringFormato di visualizzazione data
showTimebooleanMostra selettore orario nel calendario
timeOnlybooleanSolo selettore orario
hourFormat'12' | '24'Formato ore
numberOfMonthsnumberNumero di mesi visualizzati affiancati
showWeekbooleanMostra numero settimana
showWeekNumbersbooleanfalseMostra numeri di settimana nella colonna sinistra
showButtonBarbooleanMostra 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 | nullIntervallo anni selezionabili (es. '1900:2030')
touchUIbooleanOttimizzato per dispositivi touch
prefixIconstringClasse icona prefix
suffixIconstringClasse icona suffix
clearIconstringconfigClasse icona clear (override config)
loadingIconstringconfigClasse icona loading (override config)
inputIdstringautoID dell'elemento input
inputClassstring | nullClasse CSS aggiuntiva per l'input
inputStylestring | Record<string, string | number> | nullStile inline per l'input
namestringNome 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
todayClickClick su "Oggi" nel calendario
clearClickClick su "Clear" nel calendario
monthChange{ month: number; year: number }Cambio mese nella navigazione
yearChange{ month: number; year: number }Cambio anno nella navigazione
beforeShowPrima dell'apertura popup
showPopup aperto
beforeHidePrima della chiusura popup
hidePopup chiuso
confirmstring | Date | Date[] | nullConferma selezione (con showActionButtons)
cancelAnnullamento 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

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)
  • Il popup si chiude con Escape
  • 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() },
]