@rozie-ui/fullcalendar-vue

Idiomatic Vue calendar/scheduler — one Rozie source compiled to Vue wrapping FullCalendar.
1,763 1
Install
npm install @rozie-ui/fullcalendar-vue
Latest Version:0.2.3
Vue:3
License:MIT
Last Updated:Oct 15, 2026
Links: GitHub  ·  npm
Maintainer: serpentblade

@rozie-ui/fullcalendar-vue

Idiomatic vue FullCalendar — a cross-framework calendar/scheduler compiled from one Rozie source wrapping FullCalendar. This package is generated; do not edit src/ by hand.

Install

npm i @rozie-ui/fullcalendar-vue

Peer dependencies: the four @fullcalendar/* engine packages (@fullcalendar/core, @fullcalendar/daygrid, @fullcalendar/timegrid, @fullcalendar/interaction, all ^6.1) + vue. Install them alongside this package. FullCalendar v6 auto-injects its own stylesheet — there is no manual CSS import to add.

Usage

<script setup lang="ts">
import { ref } from 'vue';
import FullCalendar from '@rozie-ui/fullcalendar-vue';

const view = ref('dayGridMonth');
const events = ref([{ id: '1', title: 'Kickoff', start: '2026-06-04' }]);
</script>

<template>
  <FullCalendar v-model:view="view" :events="events" @eventClick="(e) => console.log(e.event, e.el)" />
</template>

Props

Name Type Default Two-way (model) Required
events Array []
view String "dayGridMonth" ✓
weekends Boolean true
editable Boolean true
selectable Boolean true
height String | Number 480
defaultColor String "#3b82f6"
locale String "en"
firstDay Number null
slotDuration String "00:30:00"
nowIndicator Boolean false
headerToolbar Object {…}
options Object {}

Events

Event Payload Description
eventClick FullCalendarEventClick Fired when a calendar event is clicked, or activated with Enter/Space (then jsEvent is a KeyboardEvent). el is the clicked event's DOM element (use it as the anchor for a popover or tooltip).
dateClick FullCalendarDateClick Fired when an empty date/time cell is clicked. dayEl is the clicked day cell (an anchor for a popover) and jsEvent the click.
eventDrop FullCalendarEventDrop Fired after an event is dragged to a new date/time. Call revert() to reject the move; oldEvent is the event before it. event and oldEvent both carry allDay, so a drop onto or off the all-day row shows as event.allDay !== oldEvent.allDay.
select FullCalendarSelection Fired when a date/time range is selected by drag (requires selectable).
eventResize FullCalendarEventResize Fired after an event is resized by dragging its edge (requires editable). Call revert() to reject the resize; oldEvent is the event before it. event and oldEvent both carry allDay.
datesSet FullCalendarDatesSet Fired whenever the visible date range changes (navigation or view switch). view is the active view type string.
eventMouseEnter FullCalendarEventPointer Fired when the pointer enters a calendar event (payload mirrors eventClick, with jsEvent always a MouseEvent).
eventMouseLeave FullCalendarEventPointer Fired when the pointer leaves a calendar event (payload mirrors eventMouseEnter).
unselect FullCalendarUnselect Fired when a previously selected date/time range is cleared. jsEvent is the pointer/touch UIEvent, or null when it was cleared programmatically (e.g. clearSelection).
loading FullCalendarLoading Fired when the calendar begins or finishes loading events. It fires only while FullCalendar fetches an event source itself (a URL/JSON feed or a function source); with only the events array bound it never fires (see Gotchas).
eventsSet FullCalendarEventsSet Fired after the set of rendered events changes — the normalized current event set, for persistence/sync consumers.

Imperative handle

Beyond props/events, the component exposes imperative methods (declared once in the Rozie source via $expose). Grab a handle with the native ref mechanism and call them directly:

<script setup>
import { ref } from 'vue';
const cal = ref();          // template ref
</script>

<template>
  <FullCalendar ref="cal" />
  <button @click="cal.next()">Next</button>
</template>
Method Description
getApi Return the underlying FullCalendar Calendar instance for direct API access.
changeView Switch the active view — changeView(viewName, dateOrRange?).
addEvent Add an event — addEvent(eventInput, source?).
removeEvent Remove an event by id — removeEvent(id).
today Navigate to today.
prev Navigate to the previous date range.
next Navigate to the next date range.
gotoDate Navigate to a specific date — gotoDate(date).
getDate Return the calendar’s current anchor Date (the view model carries only the view type). null before mount.
getEvents Return all current events as an EventApi[] (synchronous read; eventsSet is push-only). [] before mount.
scrollToTime Scroll a timeGrid view to a time of day — scrollToTime(duration) (e.g. "09:00").
updateSize Force a relayout after the container resized outside FullCalendar’s knowledge (tab reveal, sidebar collapse).
prevYear Navigate to the previous year.
nextYear Navigate to the next year.
selectRange Programmatically select a date/time range — selectRange(dateOrObj, endDate?) (CalendarApi.select).
clearSelection Clear the current selection (CalendarApi.unselect).

Slots

Slot Params Bind as
event arg <template #event="{ arg }">
dayCell arg <template #dayCell="{ arg }">
dayHeader arg <template #dayHeader="{ arg }">
slotLabel arg <template #slotLabel="{ arg }">
weekNumber arg <template #weekNumber="{ arg }">
nowIndicatorContent arg <template #nowIndicatorContent="{ arg }">
moreLink arg <template #moreLink="{ arg }">
allDayContent arg <template #allDayContent="{ arg }">
slotLaneContent arg <template #slotLaneContent="{ arg }">
noEventsContent arg <template #noEventsContent="{ arg }">

Gotchas

Events are keyboard-focusable. Whenever an eventClick handler is registered, FullCalendar makes every event interactive (tabindex="0", Enter/Space activation). This wrapper always registers one, because it powers the eventClick event. FullCalendar checks the eventInteractive option before it checks for handlers, so opt out with :options="{ eventInteractive: false }". A per-event interactive: false also works when the global option is unset.

loading fires only for fetched sources. It reflects event sources FullCalendar fetches itself (a URL/JSON feed or a function source). The events prop is always an in-memory array reconciled synchronously, so with events alone loading never fires; track your own fetch state instead. For FullCalendar-managed fetching, pass sources through options as eventSources: :options="{ eventSources: [{ url: '/api/events' }] }".

noEventsContent needs a list view. The slot renders only in list views, and the baked-in daygrid/timegrid/interaction plugins provide none. Recipe: npm i @fullcalendar/list, import listPlugin from '@fullcalendar/list', pass :options="{ plugins: [listPlugin] }" (the plugins key merges with the baked-in defaults), and set view to listWeek, listDay or listMonth. The slot then renders when the list is empty.

Related Packages

@fullcalendar/vue3-scheduler

FullCalendar Vue 3 Scheduler package

8,047 799
@forcecalendar/vue

Vue 3 adapter for forceCalendar - enterprise calendar Web Components

590 0
@fullcalendar/core

FullCalendar core types package

89,463,914 20,704
vue-full-calendar

FullCalendar wrapper for vue

187,893 472
@cocoar/vue-calendar

Vue 3 calendar component — Temporal-only public surface, single drop pipeline, p...

6,785 0

Version History

Version Released Vue License
0.2.3 ^3.4 MIT
0.2.2 ^3.4 MIT
0.2.1 ^3.4 MIT
0.2.0 ^3.4 MIT
0.1.5 ^3.4 MIT