BlogPlaygroundOne

VCalendar API


Props
name
type
default
  | string
  | (string | { name: string; categoryName: string; [string]: any })[]

Specifies what categories to display in the category view. This controls the order of the categories as well. If the calendar uses events any categories specified in those events not specified in this value are dynamically rendered in the view unless category-hide-dynamic is true.

string | number
1

The number of days to render in the category view.

string

The category to place events in that have invalid categories. A category is invalid when it is not a string. By default events without a category are not displayed until this value is specified.

boolean
false

Sets whether categories specified in an event should be hidden if it’s not defined in categories.

boolean
false

Set whether the category view should show all defined categories even if there are no events for a category.

  | string
  | ((
      category: string | { name: string; categoryName: string; [string]: any },
    ) => string)
undefined

If categories is a list of objects, you can use this to determine what property to print out as the category text on the calendar. You can provide a function to do some logic or just define the prop name. It’s similar to item-text on v-select

(timestamp: CalendarTimestamp, short: boolean) => string
undefined

Formats day of the month string that appears in a day to a specified locale

string | number | Date
undefined

The ending date on the calendar (inclusive) in the format of YYYY-MM-DD. This may be ignored depending on the type of the calendar.

string | ((event: { [string]: any }) => string)
'category'

Set property of event’s category. Instead of a property a function can be given which takes an event and returns the category.

string | ((event: { [string]: any }) => string)
'primary'

A background color for all events or a function which accepts an event object passed to the calendar to return a color.

string
'end'

Set property of event’s end timestamp.

number
20

The height of an event in pixels in the month view and at the top of the day views.

number
1

Margin bottom for event

boolean
true

Whether the more ‘button’ is displayed on a calendar with too many events in a given day. It will say something like ‘5 more’ and when clicked generates a click:more event.

string
'$vuetify.calendar.moreEvents'

The text to display in the more ‘button’ given the number of hidden events.

  | string
  | ((
      event: CalendarEventParsed,
      timedEvent: boolean,
    ) => string | VNode<RendererNode, RendererElement, { [key: string]: any }>)
'name'

Set property of event’s displayed name, or a function which accepts an event object passed to the calendar as the first argument and a flag signalling whether the name is for a timed event (true) or an event over a day.

  | 'stack'
  | 'column'
  | ((
      events: CalendarEventParsed[],
      firstWeekday: number,
      overlapThreshold: number,
    ) => (
      day: CalendarDaySlotScope,
      dayEvents: CalendarEventParsed[],
      timed: boolean,
      reset: boolean,
    ) => CalendarEventVisual[])
'stack'

One of stack, column, or a custom render function

string | number
60

A value in minutes that’s used to determine whether two timed events should be placed in column beside each other or should be treated as slightly overlapping events.

boolean | Record<string, any>
null

Applies the v-ripple directive.

{ [string]: any }[]
[]

An array of event objects with a property for a start timestamp and optionally a name and end timestamp. If an end timestamp is not given, the value of start will be used. If no name is given, you must provide an implementation for the event slot.

string
'start'

Set property of event’s start timestamp.

string | ((event: { [string]: any }) => string)
undefined

A text color for all events or a function which accepts an event object passed to the calendar to return a color.

string | ((event: { [string]: any }) => boolean)
'timed'

If Dates or milliseconds are used as the start or end timestamp of an event, this prop can be a string to a property on the event that is truthy if the event is a timed event or a function which takes the event and returns a truthy value if the event is a timed event.

string | number
undefined

Sets the first day of the week, starting with 0 for Sunday. (Note: not guaranteed to work when using custom date adapters.)

string | number
undefined

Sets the day that determines the first week of the year, starting with 0 for Sunday. For ISO 8601 this should be 4. (Note: not guaranteed to work when using custom date adapters.)

string
undefined

The locale of the calendar.

number
7

The maximum number of days to display in the custom calendar if an end day is not set.

string | number | Date
undefined

The v-model value of the component. If component supports the multiple prop, this defaults to an empty array.

string
undefined

Override the day & time which is considered now. This is in the format of YYYY-MM-DD hh:mm:ss. The calendar is styled according to now.

string | number | Date
2026-04-30

The starting date on the calendar (inclusive) in the format of YYYY-MM-DD. This may be ignored depending on the type of the calendar.

  | 'category'
  | 'day'
  | 'month'
  | 'week'
  | '4day'
  | 'custom-weekly'
  | 'custom-daily'
'month'

A string which is one of month, week, day, 4day, custom-weekly, custom-daily, and category. The custom types look at the start and end dates passed to the component as opposed to the value.

(timestamp: CalendarTimestamp, short: boolean) => string
undefined

Formats day of the week string that appears in the header to specified locale

string | number[]
[0, 1, 2, 3, 4, 5, 6]

An array of weekdays to display. Does not affect the order.

Events
name
type
[Event, CalendarTimestamp]

Any event on the day of the month link. The second argument is the day & time object.

[
  Event,
  {
    timeToY: (
      time: string | number | CalendarTimestamp,
      targetDateOrClamp: boolean | CalendarTimestamp,
    ) => number
    timeDelta: (
      time: string | number | CalendarTimestamp,
      targetDate: CalendarTimestamp,
    ) => number | false
    outside: boolean
    index: number
    week: CalendarTimestamp[]
    category: string | { name: string; categoryName: string; [string]: any }
    intervalRange: [number, number]
    date: string
    time: string
    year: number
    month: number
    day: number
    weekday: number
    hour: number
    minute: number
    hasDay: boolean
    hasTime: boolean
    past: boolean
    present: boolean
    future: boolean
  },
]

Any event on a day. The second argument is the day object.

[
  Event,
  {
    category: string | { name: string; categoryName: string; [string]: any }
    timeToY: (
      time: string | number | CalendarTimestamp,
      targetDateOrClamp: boolean | CalendarTimestamp,
    ) => number
    timeDelta: (
      time: string | number | CalendarTimestamp,
      targetDate: CalendarTimestamp,
    ) => number | false
    outside: boolean
    index: number
    week: CalendarTimestamp[]
    intervalRange: [number, number]
    date: string
    time: string
    year: number
    month: number
    day: number
    weekday: number
    hour: number
    minute: number
    hasDay: boolean
    hasTime: boolean
    past: boolean
    present: boolean
    future: boolean
  },
]

Any event on a day in the category view. The second argument is the day object.

[
  Event,
  {
    event: { [string]: any }
    outside: boolean
    singline: boolean
    overlapsNoon: boolean
    formatTime: (withTime: CalendarTimestamp, ampm: boolean) => string
    timeSummary: () => string
    eventSummary: () => JSX.Element
    eventParsed: CalendarEventParsed
    day: CalendarDaySlotScope
    start: boolean
    end: boolean
    timed: boolean
  },
]

Any event on a specific event. The second argument is the day & time object.

[Event, CalendarTimestamp]

Any event at a specific interval label in the day view. The second argument is the day & time object.

[Event, CalendarDaySlotScope]

Any event on the X more button on views with too many events in a day. The second argument is the day & time object.

[
  Event,
  {
    timeToY: (
      time: string | number | CalendarTimestamp,
      targetDateOrClamp: boolean | CalendarTimestamp,
    ) => number
    timeDelta: (
      time: string | number | CalendarTimestamp,
      targetDate: CalendarTimestamp,
    ) => number | false
    outside: boolean
    index: number
    week: CalendarTimestamp[]
    category: string | { name: string; categoryName: string; [string]: any }
    intervalRange: [number, number]
    date: string
    time: string
    year: number
    month: number
    day: number
    weekday: number
    hour: number
    minute: number
    hasDay: boolean
    hasTime: boolean
    past: boolean
    present: boolean
    future: boolean
  },
]

Any event at a specific time in the day view. The second argument is the day & time object.

[
  Event,
  {
    category: string | { name: string; categoryName: string; [string]: any }
    timeToY: (
      time: string | number | CalendarTimestamp,
      targetDateOrClamp: boolean | CalendarTimestamp,
    ) => number
    timeDelta: (
      time: string | number | CalendarTimestamp,
      targetDate: CalendarTimestamp,
    ) => number | false
    outside: boolean
    index: number
    week: CalendarTimestamp[]
    intervalRange: [number, number]
    date: string
    time: string
    year: number
    month: number
    day: number
    weekday: number
    hour: number
    minute: number
    hasDay: boolean
    hasTime: boolean
    past: boolean
    present: boolean
    future: boolean
  },
]

Any event at a specific time in the category view. The second argument is the day & time object.

Slots
{ category: string | { name: string; categoryName: string; [string]: any } timeToY: ( time: string | number | CalendarTimestamp, targetDateOrClamp: boolean | CalendarTimestamp, ) => number timeDelta: ( time: string | number | CalendarTimestamp, targetDate: CalendarTimestamp, ) => number | false outside: boolean index: number week: CalendarTimestamp[] intervalRange: [number, number] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean }
{ outside: boolean index: number week: CalendarTimestamp[] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean category: string | { name: string; categoryName: string; [string]: any } }
{ timeToY: ( time: string | number | CalendarTimestamp, targetDateOrClamp: boolean | CalendarTimestamp, ) => number timeDelta: ( time: string | number | CalendarTimestamp, targetDate: CalendarTimestamp, ) => number | false outside: boolean index: number week: CalendarTimestamp[] category: string | { name: string; categoryName: string; [string]: any } intervalRange: [number, number] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean }
{ index: number week: CalendarTimestamp[] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean category: string | { name: string; categoryName: string; [string]: any } }
{ event: { [string]: any } outside: boolean singline: boolean overlapsNoon: boolean formatTime: (withTime: CalendarTimestamp, ampm: boolean) => string timeSummary: () => string eventSummary: () => JSX.Element eventParsed: CalendarEventParsed day: CalendarDaySlotScope start: boolean end: boolean timed: boolean }
{ category: string | { name: string; categoryName: string; [string]: any } timeToY: ( time: string | number | CalendarTimestamp, targetDateOrClamp: boolean | CalendarTimestamp, ) => number timeDelta: ( time: string | number | CalendarTimestamp, targetDate: CalendarTimestamp, ) => number | false outside: boolean index: number week: CalendarTimestamp[] intervalRange: [number, number] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean }
never

The content placed in a category header for the category type. The category variable is null for events with invalid (non-string) categories.

The content that is placed in a week or month view. The day & time object is passed through this slots scope.

The content that is placed in a day view in the scrollable interval container. The day & time object is passed through this slots scope.

The content that is placed in a day view in the top container. The day & time object is passed through this slots scope.

The content that is placed in the day of the month space in the custom-weekly or month view. The day & time object is passed through this slots scope.

The content that is placed in the day of the month space in the week, day, 4day, or custom-daily view. The day & time object is passed through this slots scope.

The content that is placed in the month space in the week or month view. The day & time object is passed through this slots scope.

The content placed in an event. This ignores the event-name prop.

The content that is placed in the interval space in the day view. The day & time object is passed through this slots scope.

The content that is placed in the interval space in the top left of the day view.

Exposed
number
boolean
() => void
(timestamp: CalendarTimestamp, short: boolean) => string
number[]
(event: { [string]: any }) => string
(e: { [string]: any }) => string
( events: CalendarEventParsed[], firstWeekday: number, overlapThreshold: number, ) => ( day: CalendarDaySlotScope, dayEvents: CalendarEventParsed[], timed: boolean, reset: boolean, ) => CalendarEventVisual[]
( event: CalendarEventParsed, timedEvent: boolean, ) => string | VNode<RendererNode, RendererElement, { [key: string]: any }>
HTMLElement[]
(event: { [string]: any }) => string
(event: { [string]: any }) => boolean
number[]
number
( __0: CalendarEventVisual, day: CalendarDaySlotScope, ) => VNode<RendererNode, RendererElement, { [key: string]: any }>
( event: CalendarEventParsed, scopeInput: { eventParsed: CalendarEventParsed day: CalendarDaySlotScope start: boolean end: boolean timed: boolean }, timedEvent: boolean, data: Record<string, unknown>, ) => VNode<RendererNode, RendererElement, { [key: string]: any }>
( day: CalendarDaySlotScope, ) => VNode<RendererNode, RendererElement, { [key: string]: any }>
( eventSummary: () => | string | VNode<RendererNode, RendererElement, { [key: string]: any }>, ) => VNode<RendererNode, RendererElement, { [key: string]: any }>
( day: CalendarTimestamp, ) => VNode<RendererNode, RendererElement, { [key: string]: any }>
( __0: CalendarEventVisual, day: { timeToY: ( time: string | number | CalendarTimestamp, targetDateOrClamp: boolean | CalendarTimestamp, ) => number timeDelta: ( time: string | number | CalendarTimestamp, targetDate: CalendarTimestamp, ) => number | false outside: boolean index: number week: CalendarTimestamp[] category: string | { name: string; categoryName: string; [string]: any } intervalRange: [number, number] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean }, ) => false | VNode<RendererNode, RendererElement, { [key: string]: any }>
( categories: ( | string | { [key: string]: any name?: string | undefined categoryName?: string | undefined } )[], ) => ( | string | { [key: string]: any name?: string | undefined categoryName?: string | undefined } )[]
(colors: { background: string | false; text: string | false }) => { class: string[] style: CSSProperties }
() => { [string]: { parent: HTMLElement; more: HTMLElement; events: HTMLElement[] } }
( options: Intl.DateTimeFormatOptions, ) => (timestamp: CalendarTimestamp, short: boolean) => string
( timestamp: CalendarTimestamp, outside: boolean, ) => { 'v-present': boolean 'v-past': boolean 'v-future': boolean 'v-outside': boolean }
() => any
() => number
(timestamp: CalendarTimestamp) => { timeToY: ( time: string | number | CalendarTimestamp, targetDateOrClamp: boolean | CalendarTimestamp, ) => number timeDelta: ( time: string | number | CalendarTimestamp, targetDate: CalendarTimestamp, ) => number | false outside: boolean index: number week: CalendarTimestamp[] category: string | { name: string; categoryName: string; [string]: any } intervalRange: [number, number] date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean }
(timestamp: CalendarTimestamp) => number
() => void
(timestamp: CalendarTimestamp, short: boolean) => string
(_interval: CalendarTimestamp) => StyleValue
( event: CalendarEventParsed, category: string | { name: string; categoryName: string; [string]: any }, ) => boolean
(day: CalendarTimestamp) => boolean
{ date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean category?: | string | { [x: string]: any name?: string | undefined categoryName?: string | undefined } | undefined }
{ date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean category?: | string | { [x: string]: any name?: string | undefined categoryName?: string | undefined } | undefined }
{ isRtl: boolean rtl: Record<string, boolean> rtlClasses: string name: string decimalSeparator: string messages: LocaleMessages current: string fallback: string t: (key: string, ...params: unknown[]) => string n: (value: number) => string provide: (props: LocaleOptions) => LocaleInstance }
(minutes: number) => number
(timestamp: CalendarTimestamp, short: boolean) => string
(timestamp: CalendarTimestamp, short: boolean) => string
(timestamp: CalendarTimestamp, short: boolean) => string
(amount: number) => void
(amount: number) => void
boolean
() => void
HTMLElement
( | string | { [key: string]: any name?: string | undefined categoryName?: string | undefined } )[]
number
number
number
number | false
number
number
number
number[]
(amount: number) => void
{ start: CalendarTimestamp end: CalendarTimestamp component: | (new () => any) | FunctionalComponent | { filterProps: (props: T) => Partial<T> } maxDays: number categories: ( | string | { [key: string]: any name?: string | undefined categoryName?: string | undefined } )[] }
HTMLElement
number
( time: string | number | { hour: number; minute: number }, ) => boolean
(interval: CalendarTimestamp) => boolean
( time: CalendarTimestamp | string | number | { hour: number; minute: number }, targetDate: CalendarTimestamp, ) => number | false
{ now: { date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean category?: | string | { [x: string]: any name?: string | undefined categoryName?: string | undefined } | undefined } today: { date: string time: string year: number month: number day: number weekday: number hour: number minute: number hasDay: boolean hasTime: boolean past: boolean present: boolean future: boolean category?: | string | { [x: string]: any name?: string | undefined categoryName?: string | undefined } | undefined } }
( time: CalendarTimestamp | string | number | { hour: number; minute: number }, targetDateOrClamp: boolean | CalendarTimestamp, ) => number | false
string
() => void
() => void
(timestamp: CalendarTimestamp, short: boolean) => string
number[]

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

MISSING DESCRIPTION (edit in github)

SASS Variables
name
default
rgb(var(--v-theme-surface))
200px
40px
0px 0px 3px 0px
56px
50px
right
10px
8px
-6px
4px
11px
3px 0px 0px 0px
settings.$border-radius-root
1px
1px
12px
20px
10px
rgba(var(--v-border-color), var(--v-border-opacity))
rgb(var(--v-theme-on-surface))
1px
rgb(var(--v-theme-on-surface))
rgb(var(--v-theme-on-surface-light))
rgb(var(--v-theme-on-surface))
rgba(var(--v-border-color), var(--v-border-opacity))
rgb(var(--v-theme-surface-light))
rgb(var(--v-theme-on-surface))
12px
4px 0 0 0
32px
36px
0px 0px 0px 0px
11px
0px 4px 0px 4px
24px
14.5px
rgb(var(--v-theme-surface))