Logo

Weekly

<v-row>
  <v-col>
    <v-sheet height="400">
      <v-calendar
        ref="calendar"
        :now="today"
        :value="today"
        :events="events"
        color="primary"
        type="week"
      ></v-calendar>
    </v-sheet>
  </v-col>
</v-row>

This is an example of an event calendar with all-day and timed events with a type of week.

Sun
Mon
Tue
Wed
Thu
Fri
Thomas' Birthday
Sat
1 AM
2 AM
3 AM
4 AM
5 AM
6 AM
7 AM
8 AM
9 AM
10 AM
11 AM
12 PM
1 PM
2 PM
3 PM
4 PM
5 PM
6 PM
7 PM
8 PM
9 PM
10 PM
11 PM
Weekly Meeting, 9 AM - 10 AM
Mash Potatoes
12:30 PM - 3:30 PM

Daily

<v-row>
  <v-col>
    <v-sheet height="400">
      <v-calendar
        color="primary"
        type="day"
      >
        <template v-slot:day-header="{ present }">
          <template
            v-if="present"
            class="text-center"
          >
            Today
          </template>
        </template>

        <template v-slot:interval="{ hour }">
          <div
            class="text-center"
          >
            {{ hour }} o'clock
          </div>
        </template>
      </v-calendar>
    </v-sheet>
  </v-col>
</v-row>

This is an example of calendar with content in each interval slot and a type of day.

Thu
Today
1 AM
2 AM
3 AM
4 AM
5 AM
6 AM
7 AM
8 AM
9 AM
10 AM
11 AM
12 PM
1 PM
2 PM
3 PM
4 PM
5 PM
6 PM
7 PM
8 PM
9 PM
10 PM
11 PM
0 o'clock
1 o'clock
2 o'clock
3 o'clock
4 o'clock
5 o'clock
6 o'clock
7 o'clock
8 o'clock
9 o'clock
10 o'clock
11 o'clock
12 o'clock
13 o'clock
14 o'clock
15 o'clock
16 o'clock
17 o'clock
18 o'clock
19 o'clock
20 o'clock
21 o'clock
22 o'clock
23 o'clock

Slots

<v-row>
  <v-col>
    <v-sheet height="500">
      <v-calendar
        :now="today"
        :value="today"
        color="primary"
      >
        <template v-slot:day="{ present, past, date }">
          <v-row
            class="fill-height"
          >
            <template v-if="past && tracked[date]">
              <v-sheet
                v-for="(percent, i) in tracked[date]"
                :key="i"
                :title="category[i]"
                :color="colors[i]"
                :width="`${percent}%`"
                height="100%"
                tile
              ></v-sheet>
            </template>
          </v-row>
        </template>
      </v-calendar>
    </v-sheet>
  </v-col>
</v-row>

Slots allow you to define the content for each day, time interval for the daily views, and various labels.

Sun
Mon
Tue
Wed
Thu
Fri
Sat

Events

<v-row class="fill-height">
  <v-col>
    <v-sheet height="64">
      <v-toolbar flat color="white">
        <v-btn outlined class="mr-4" color="grey darken-2" @click="setToday">
          Today
        </v-btn>
        <v-btn fab text small color="grey darken-2" @click="prev">
          <v-icon small>mdi-chevron-left</v-icon>
        </v-btn>
        <v-btn fab text small color="grey darken-2" @click="next">
          <v-icon small>mdi-chevron-right</v-icon>
        </v-btn>
        <v-toolbar-title>{{ title }}</v-toolbar-title>
        <v-spacer></v-spacer>
        <v-menu bottom right>
          <template v-slot:activator="{ on }">
            <v-btn
              outlined
              color="grey darken-2"
              v-on="on"
            >
              <span>{{ typeToLabel[type] }}</span>
              <v-icon right>mdi-menu-down</v-icon>
            </v-btn>
          </template>
          <v-list>
            <v-list-item @click="type = 'day'">
              <v-list-item-title>Day</v-list-item-title>
            </v-list-item>
            <v-list-item @click="type = 'week'">
              <v-list-item-title>Week</v-list-item-title>
            </v-list-item>
            <v-list-item @click="type = 'month'">
              <v-list-item-title>Month</v-list-item-title>
            </v-list-item>
            <v-list-item @click="type = '4day'">
              <v-list-item-title>4 days</v-list-item-title>
            </v-list-item>
          </v-list>
        </v-menu>
      </v-toolbar>
    </v-sheet>
    <v-sheet height="600">
      <v-calendar
        ref="calendar"
        v-model="focus"
        color="primary"
        :events="events"
        :event-color="getEventColor"
        :now="today"
        :type="type"
        @click:event="showEvent"
        @click:more="viewDay"
        @click:date="viewDay"
        @change="updateRange"
      ></v-calendar>
      <v-menu
        v-model="selectedOpen"
        :close-on-content-click="false"
        :activator="selectedElement"
        offset-x
      >
        <v-card
          color="grey lighten-4"
          min-width="350px"
          flat
        >
          <v-toolbar
            :color="selectedEvent.color"
            dark
          >
            <v-btn icon>
              <v-icon>mdi-pencil</v-icon>
            </v-btn>
            <v-toolbar-title v-html="selectedEvent.name"></v-toolbar-title>
            <v-spacer></v-spacer>
            <v-btn icon>
              <v-icon>mdi-heart</v-icon>
            </v-btn>
            <v-btn icon>
              <v-icon>mdi-dots-vertical</v-icon>
            </v-btn>
          </v-toolbar>
          <v-card-text>
            <span v-html="selectedEvent.details"></span>
          </v-card-text>
          <v-card-actions>
            <v-btn
              text
              color="secondary"
              @click="selectedOpen = false"
            >
              Cancel
            </v-btn>
          </v-card-actions>
        </v-card>
      </v-menu>
    </v-sheet>
  </v-col>
</v-row>

This is an example of a planner with additional event handlers and external components controlling the display of the calendar.

April 2025
Sun
Mon
Tue
Wed
Thu
Fri
Sat
5:45 AM Travel
11:45 PM Event
5:45 AM Meeting
2 more
Conference
PTO
Event
Conference
6 PM Party
2:15 AM Travel
11:15 AM Travel
12 PM Event
6:15 PM Birthday
2:15 AM Conference
4:45 PM Travel
7:45 AM Travel
3:30 PM Holiday
1:30 AM Birthday
4:45 PM Birthday
2 more
1:15 PM Party
7:45 AM Travel
5:30 PM Travel
Event
7:45 PM Conference
Event
3:30 AM Conference
Holiday
9 AM Conference
1:45 PM Meeting
7:15 AM Travel
6:15 PM Travel
1 PM Meeting
8 PM Party
11:15 PM Holiday
Conference
2:15 AM Event
1:15 AM Party
6:30 AM Event
8:15 AM Holiday
9 PM Meeting
3:45 PM Conference