Forms

Calendar

Calendario inline standalone per la selezione di date in modalita singola, multipla o intervallo. Non include input testuale — usare DatePicker per il pattern input+popup.

Import

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

Esempio Base

Il Calendar e sempre visibile (inline). Per un selettore con input testuale e popup, usare DatePicker.

Props

PropTipoDefaultDescrizione
modelValueDate | Date[] | nullnullValore corrente (v-model)
severitySeverity'primary'Colore del tema per la data selezionata
selectionMode'single' | 'multiple' | 'range''single'Modalita di selezione
minDateDateData minima selezionabile
maxDateDateData massima selezionabile
disabledDatesDate[][]Lista di date disabilitate
disabledDaysnumber[][]Giorni della settimana disabilitati (0=Dom, 6=Sab)
showQuickOptionsbooleantrueMostra opzioni rapide (Oggi, Domani, Dopodomani)
quickOptionsCalendarQuickOption[]Sostituisce le opzioni rapide predefinite
firstDayOfWeeknumberlocalePrimo giorno della settimana (0=Dom, 1=Lun)
showWeekNumbersbooleanfalseMostra numeri di settimana nella colonna sinistra
inlinebooleanfalseForza visualizzazione inline
disabledbooleanfalseDisabilita tutte le interazioni
readonlybooleanfalseSola lettura
showActionButtonsbooleanfalseMostra bottoni Conferma/Annulla in fondo

Emits

EventoPayloadDescrizione
update:modelValueDate | Date[] | nullAggiornamento valore (v-model)
dateSelectDateData cliccata
monthChange{ month: number; year: number }Cambio mese nella navigazione
yearChangenumberCambio anno nella navigazione
confirmDate | Date[] | nullConferma selezione (con showActionButtons)
cancelAnnullamento (con showActionButtons)

Slot

SlotDescrizione
headerContenuto aggiuntivo nell'area superiore del calendario
footerContenuto aggiuntivo nell'area inferiore del calendario

Tipi Correlati

export interface CalendarQuickOption {
  label: string
  value: Date | (() => Date)
}

export interface CalendarDay {
  date: Date
  day: number
  isCurrentMonth: boolean
  isToday: boolean
  isSelected: boolean
  isDisabled: boolean
}

Esempi

Selezione multipla

Selezione intervallo

Con date disabilitate

<script setup lang="ts">
const today = new Date()
const disabledDates = [
  new Date(today.getFullYear(), today.getMonth(), 15),
  new Date(today.getFullYear(), today.getMonth(), 20),
]
</script>

<template>
  <Calendar
    v-model="selectedDate"
    :disabled-dates="disabledDates"
    :disabled-days="[0, 6]"
  />
</template>

Con opzioni rapide personalizzate

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

const quickOptions: CalendarQuickOption[] = [
  { label: 'Oggi', value: () => new Date() },
  { label: 'Fine settimana', value: () => {
    const d = new Date()
    d.setDate(d.getDate() + (6 - d.getDay()))
    return d
  }},
]
</script>

<template>
  <Calendar v-model="selectedDate" :quick-options="quickOptions" />
</template>

Con bottoni conferma

<Calendar
  v-model="selectedDate"
  show-action-buttons
  @confirm="handleConfirm"
  @cancel="handleCancel"
/>

Accessibilita

  • Navigazione mese/anno tramite pulsanti con aria-label localizzati
  • Ogni giorno e selezionabile da tastiera
  • Le date disabilitate ricevono aria-disabled="true"

TypeScript

import type { CalendarProps, CalendarQuickOption, CalendarDay } from '@pzeta/vue-components'

// Selezione singola
const singleDate = ref<Date | null>(null)

// Selezione multipla o intervallo
const multiDate = ref<Date[]>([])