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

Il valore emesso e una stringa in formato ISO YYYY-MM-DD. L'input visualizza il formato DD/MM/YYYY. L'auto-completamento intelligente permette di digitare solo il giorno (completato al mese/anno corrente) o giorno+mese.

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'Modalita 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

<DatePicker
  v-model="birthDate"
  label="Data di Nascita"
  placeholder="gg/mm/aaaa"
  :min="'1900-01-01'"
  :max="new Date().toISOString().split('T')[0]"
/>

Con opzioni rapide e conferma

<DatePicker
  v-model="dateValue"
  label="Data con conferma"
  show-action-buttons
  show-quick-options
  show-clear
  @confirm="handleConfirm"
  @cancel="handleCancel"
/>

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.

Calendario inline

Opzioni rapide personalizzate

<script setup lang="ts">
import type { CalendarQuickOption } from '@pzeta/vue-components'

const quickOptions: CalendarQuickOption[] = [
  { label: 'Oggi', value: () => new Date() },
  { label: 'Prossimo lunedi', value: () => {
    const d = new Date()
    d.setDate(d.getDate() + (8 - d.getDay()) % 7)
    return d
  }},
]
</script>

<template>
  <DatePicker
    v-model="dateValue"
    label="Data"
    show-quick-options
    :quick-options="quickOptions"
  />
</template>

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

Accessibilita

  • Input associato alla label tramite id generato automaticamente o inputId
  • L'icona calendario e 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

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() },
]