Syncfusion Vue Scheduler
A comprehensive scheduling component for Vue applications that provides calendar views, appointment management, resource scheduling, and time-based event visualization with drag-and-drop support.
When to Use This Skill
Use this skill when the user needs to:
- Implement calendar or scheduling functionality in Vue applications
- Create appointment booking or event management systems
- Build resource allocation or meeting scheduler tools
- Display events in day, week, month, timeline, or agenda views
- Handle recurring events with complex recurrence patterns
- Manage multiple resources with grouped scheduling
- Implement drag-and-drop event scheduling
- Create interactive calendars with CRUD operations
- Support multiple timezones in scheduling applications
- Export/import calendar data (ICS format)
Component Overview
The Syncfusion Vue Scheduler is a feature-rich calendar and scheduling component that supports:
- Multiple Views: Day, Week, Work Week, Month, Year, Agenda, Timeline views
- Event Management: Normal, all-day, spanned, and recurring events with exceptions
- Resource Scheduling: Single and multiple resource grouping with custom templates
- Drag & Drop: Move and resize events across time slots and resources
- Data Binding: Local and remote data sources with field mapping
- Customization: Cell templates, event templates, and comprehensive styling options
- Interactions: Context menus, clipboard operations, keyboard shortcuts
- Accessibility: Full WCAG compliance with keyboard navigation and screen reader support
Documentation and Navigation Guide
Complete coverage of Syncfusion Vue Scheduler with 17 comprehensive reference files covering all aspects of scheduler implementation.
Getting Started
📄 Read: references/getting-started.md
- Installation
@syncfusion/ej2-vue-schedule and theme package
- CSS reference using Syncfusion theme packages
- Module injection and provide setup for both Vue 2/3
- Basic scheduler initialization with selectedDate and currentView
- Creating first appointments with eventSettings
- CSS import paths for all required components
Appointments and Events
📄 Read: references/appointments.md
- Event types: normal, all-day, spanned, recurring appointments
- Event fields and custom field mapping
- Recurrence rules and patterns (FREQ, INTERVAL, COUNT, UNTIL, BYDAY, etc.)
- Recurrence exceptions and editing individual occurrences vs. series
- Drag and drop with dragStart/drag/dragStop events
- Resizing events with resize controls
- Inline appointment editing
- Event retrieval methods (getEventDetails, getCurrentViewEvents, getEvents)
Appointment Behavior and Validation
📄 Read: references/appointment-behavior-and-validation.md
- Setting minimum appointment height
- Blocking dates and times
- Readonly events and restricting event creation
- Differentiating past events and disabling past dates
- Appointments occupying entire cells and limiting displayed events
- Tooltip and filtering operations
- Appointment selection and deleting multiple appointments via Delete key
- Preventing overlaps and validating recurrence rules
Views and Navigation (Display Modes)
📄 Read: references/views.md
- Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda views
- Timeline views (TimelineDay, TimelineWeek, TimelineWorkWeek, TimelineMonth, TimelineYear)
- View-specific configuration (startHour, endHour, workDays, interval, dateFormat)
- Multi-day, multi-week, and multi-month view intervals
- View templates (cellTemplate, dateHeaderTemplate, eventTemplate, resourceHeaderTemplate)
- Custom header rows for timeline views
- First day of week configuration
- Hidden weekend support for all views
- Readonly view modes
- Virtual scrolling in Agenda and Timeline views
- Week number display
- Agenda days count and hideEmptyAgendaDays
- Limit overlapping events with
maxEventStack
Data Binding (Local and Remote)
📄 Read: references/data-binding.md
- Local data source with array of objects
- Remote data binding with DataManager (ODataV4Adaptor, WebApiAdaptor, UrlAdaptor)
- Custom field mapping (id, subject, startTime, endTime, location, description, isAllDay, recurrenceRule, isReadonly)
- Server-side filtering with includeFiltersInQuery
- Custom adaptors extending ODataV4Adaptor with processResponse
- Loading data via AJAX Post with callbacks
- Passing additional parameters to server with Query.addParams
- Handling failure actions with actionFailure event
- CRUD operations with UrlAdaptor and server-side controller code
- C# controller implementation with EditParams (Insert/Update/Remove logic)
- Google Calendar integration with WebApiAdaptor and dataBinding transformation
- DataManager configuration with crossDomain support
Resources and Grouping
📄 Read: references/resources.md
- Resource fields and properties (field, title, name, allowMultiple, dataSource, idField, textField, colorField, etc.)
- Resource data binding (local JSON and remote DataManager)
- Single and multiple resource assignment
- Single-level and multi-level hierarchical resource grouping
- Resource grouping by date (byDate property)
- One-to-one resource grouping (byGroupID: false)
- Shared events across resources with allowGroupEdit
- Vertical vs. Timeline resource view implementation
Resource Customization
📄 Read: references/resource-customization.md
- Custom working hours per resource
- Custom working days per resource
- Resource header templates with customization
- Multi-column resource headers (Timeline only)
- Customizing parent resource cells with renderCell event
- Custom CSS classes per resource
- Expanded/collapsed state for resources (Timeline views)
Time Configuration (Timescale and Timezone)
📄 Read: references/timescale-timezone.md
- Timescale configuration (enable, interval, slotCount, templates)
- Slot duration configuration (30-min, 15-min, 10-min, 5-min intervals)
- Hiding timescale and custom time format
- Major and minor slot templates
- Scheduler timezone configuration with IANA timezone names
- Common timezones (America/New_York, Europe/London, Asia/Tokyo, etc.)
- UTC display for global applications
- Per-event timezone with startTimezone and endTimezone fields
- Timezone conversion helper methods (convert, removeLocalOffset, addLocalOffset)
- Timezone dropdown in event editor
- Browser local timezone (no timezone setting)
- Daylight saving time handling
Customization
📄 Read: references/customization.md
- Cell dimensions with CSS classes (height, width for all views)
- Cell templates for workCells, monthCells, allDayCells, dateHeader cells
- RenderCell event with elementType checking (workCells, monthCells, dateHeader, resourceGroupCells, etc.)
- Cell header template for Month view
- Date header customization for Week/Day views
- Minimum and maximum date constraints
- Weekend cell customization and highlighting
- Custom working hours and working days
- Multi-cell and multi-row selection control
- Slot availability checking with isSlotAvailable method
Editor Templates
📄 Read: references/editor-template.md
- Event editor overview and modes (Add, Edit, EditOccurrence, EditSeries)
- Customizing editor field labels with title property
- Customizing editor buttons via localization (L10n)
- Field validation rules (required, regex, custom validators)
- Adding custom fields to default editor
- Creating fully custom editor template
- Quick info template customization (header, content, footer)
- Disabling editor with readonly or popupOpen event
- Editor field types and validation
Header Configuration
📄 Read: references/header-configuration.md
- Header bar customization and styling
- Header rows for timeline views (Year, Month, Date)
- Date header template for all views
- Custom toolbar actions and buttons
- Header navigation (previous, today, next)
- Hiding/showing header elements
CRUD Operations
📄 Read: references/crud-operations.md
- Adding events: addEvent method, multiple events batch add
- Editing events: saveEvent method with action types
- Deleting events: deleteEvent by ID or object, multiple delete
- Drag and drop with allowDragAndDrop module
- Event resizing with allowResizing module
- ActionBegin event for validation and cancellation
- ActionComplete event for post-operation handling
- ActionFailure event for error handling
- Readonly mode and per-event readonly flag
- Validation for time ranges and slot availability
- Preventing overlaps with isSlotAvailable
Clipboard Operations
📄 Read: references/clipboard.md
- Enabling clipboard with allowClipboard property
- Copy/cut/paste keyboard shortcuts (Ctrl+C, Ctrl+X, Ctrl+V)
- Programmatic API (copy(), cut(), paste() methods)
- Context menu integration with custom menu items
- Before/after paste events for data modification
- Behavior notes (copy creates duplicate, cut moves event)
- Multiple paste of copied events
- Cross-application paste support
Context Menu
📄 Read: references/context-menu.md
- Custom context menu integration with ContextMenu component
- Menu setup with items configuration
- BeforeOpen event for menu display logic
- OnSelect event for menu action handling
- Showing/hiding menu items based on context (cell vs. event)
- Recurring event menu with sub-items (Edit/Delete Occurrence/Series)
- Custom menu items (Print, Export, Email, etc.)
- Mobile context menu with tap-hold support
- Custom styling with CSS classes
Localization and Accessibility
📄 Read: references/localization-accessibility.md
- Locale configuration and language translation (en, fr, de, ja, etc.)
- L10n class for custom text translation
- Date and time formatting with
dateFormat and timeFormat (12/24-hour, ISO, locale-aware)
- RTL (right-to-left) support for Arabic, Hebrew
- WCAG 2.0 compliance level AA
- Keyboard shortcuts (Tab, Enter, Space, Delete, Ctrl+A, etc.)
- ARIA attributes (role, aria-label, aria-describedby)
- Screen reader support and announcements
- Focus management and visible focus indicator
Advanced Features
📄 Read: references/advanced-features.md
- Virtual scrolling for large datasets in Agenda/Timeline views
- Exporting to PDF and Excel formats
- Printing scheduler with custom templates
- State persistence (enablePersistence) saving view/date/scroll position
- Row auto height for overlapping events
- Event templates for custom rendering
- Quick info templates
- Block time slots (marking unavailable times)
- ICS calendar import/export
- Tooltip on event hover
- Inline editing support
- Responsive adaptive UI
Recurrence Editor and Calendar Modes
📄 Read: references/recurrence-editor-calendar-modes.md
- Recurrence editor and recurrence date generation
- Gregorian and Islamic calendar modes
- Working days, hours, and custom time ranges
- Scheduler styling and theming
- Performance optimization tips
- Best practices for production use
Quick Start Example
Basic Scheduler with Appointments
<template>
<div id='app'>
<ejs-schedule
height='550px'
:selectedDate='selectedDate'
:eventSettings='eventSettings'>
</ejs-schedule>
</div>
</template>
<script setup>
import { provide } from "vue";
import { ScheduleComponent as EjsSchedule, Day, Week, WorkWeek, Month, Agenda } from '@syncfusion/ej2-vue-schedule';
const selectedDate = new Date(2024, 0, 15);
const eventSettings = {
dataSource: [
{
Id: 1,
Subject: 'Team Meeting',
StartTime: new Date(2024, 0, 15, 10, 0),
EndTime: new Date(2024, 0, 15, 11, 30),
IsAllDay: false
},
{
Id: 2,
Subject: 'Project Review',
StartTime: new Date(2024, 0, 16, 14, 0),
EndTime: new Date(2024, 0, 16, 15, 30),
IsAllDay: false
}
]
};
// Inject required view modules
provide('schedule', [Day, Week, WorkWeek, Month, Agenda]);
</script>
<style>
@import "../node_modules/@syncfusion/ej2-material3-theme/styles/schedule/index.css";
</style>
Common Patterns
Recurring Event with Exceptions
<script setup>
const eventSettings = {
dataSource: [
{
Id: 1,
Subject: 'Daily Standup',
StartTime: new Date(2024, 0, 15, 9, 0),
EndTime: new Date(2024, 0, 15, 9, 30),
RecurrenceRule: 'FREQ=DAILY;INTERVAL=1;COUNT=10',
RecurrenceException: '20240117T090000Z,20240119T090000Z'
}
]
};
</script>
Resource Grouping
<template>
<ejs-schedule
:eventSettings='eventSettings'
:group='group'>
<e-resources>
<e-resource
field='RoomId'
title='Room'
name='Rooms'
:dataSource='roomData'
textField='Name'
idField='Id'
colorField='Color'>
</e-resource>
</e-resources>
</ejs-schedule>
</template>
<script setup>
const roomData = [
{ Id: 1, Name: 'Room A', Color: '#ffaa00' },
{ Id: 2, Name: 'Room B', Color: '#357cd2' }
];
const group = { resources: ['Rooms'] };
</script>
Custom Field Mapping
<script setup>
const eventSettings = {
dataSource: appointmentData,
fields: {
id: 'EventId',
subject: { name: 'Title' },
startTime: { name: 'From' },
endTime: { name: 'To' },
location: { name: 'Place' },
description: { name: 'Notes' },
isAllDay: { name: 'FullDay' }
}
};
</script>
Timeline View Configuration
<template>
<ejs-schedule
:selectedDate='selectedDate'
:eventSettings='eventSettings'>
<e-views>
<e-view option='TimelineDay'></e-view>
<e-view option='TimelineWeek'></e-view>
<e-view option='TimelineMonth'></e-view>
</e-views>
</ejs-schedule>
</template>
<script setup>
import { provide } from "vue";
import { TimelineViews, TimelineMonth } from '@syncfusion/ej2-vue-schedule';
provide('schedule', [TimelineViews, TimelineMonth]);
</script>
Key Props and Events
Essential Properties
| Property |
Type |
Description |
selectedDate |
Date |
Currently selected date in the scheduler |
currentView |
string |
Active view (Day, Week, Month, Agenda, etc.) |
eventSettings |
object |
Event data source and field configuration |
views |
array |
Collection of views to display |
startHour |
string |
Start hour for day/week views (e.g., '08:00') |
endHour |
string |
End hour for day/week views (e.g., '18:00') |
workDays |
number[] |
Working days (0=Sunday, 1=Monday, etc.) |
timeScale |
object |
Time slot configuration (interval, slotCount) |
group |
object |
Resource grouping configuration |
readonly |
boolean |
Prevents CRUD operations when true |
allowDragAndDrop |
boolean |
Enables drag and drop for events |
allowResizing |
boolean |
Enables event resizing |
allowMultiDrag |
boolean |
Enables multiple event drag selection |
allowClipboard |
boolean |
Enables clipboard operations |
timezone |
string |
Scheduler timezone (e.g., 'America/New_York') |
Essential Events
| Event |
Description |
actionBegin |
Triggered before any CRUD action (add/edit/delete) |
actionComplete |
Triggered after successful CRUD action |
actionFailure |
Triggered when CRUD action fails |
eventClick |
Triggered when an event is clicked |
eventDoubleClick |
Triggered when an event is double-clicked |
cellClick |
Triggered when a cell is clicked |
cellDoubleClick |
Triggered when a cell is double-clicked |
popupOpen |
Triggered before editor/quick info popup opens |
popupClose |
Triggered when popup closes |
dragStart |
Triggered when event drag starts |
drag |
Triggered during event dragging |
dragStop |
Triggered when event drag stops |
resizeStart |
Triggered when event resize starts |
resizing |
Triggered during event resizing |
resizeStop |
Triggered when event resize stops |
dataBinding |
Triggered before data binding |
dataBound |
Triggered after data binding completes |
beforePaste |
Triggered before clipboard paste operation |
Essential Methods
| Method |
Description |
addEvent(data) |
Adds new event to the scheduler |
saveEvent(data, action) |
Saves modified event |
deleteEvent(id/object) |
Deletes event by ID or object |
getEvents(startDate, endDate) |
Gets events within date range |
getEventDetails(element) |
Gets event details from element |
openEditor(data, action) |
Opens editor window programmatically |
closeEditor() |
Closes the editor window |
refreshEvents() |
Refreshes all events |
scrollTo(hour) |
Scrolls to specific hour in day/week views |
getCurrentViewDates() |
Returns current view date collection |
Installation
Install the Syncfusion Vue Schedule package:
npm install @syncfusion/ej2-vue-schedule --save
Import required CSS themes:
import '@syncfusion/ej2-base/styles/material3.css';
import '@syncfusion/ej2-buttons/styles/material3.css';
import '@syncfusion/ej2-calendars/styles/material3.css';
import '@syncfusion/ej2-dropdowns/styles/material3.css';
import '@syncfusion/ej2-inputs/styles/material3.css';
import '@syncfusion/ej2-navigations/styles/material3.css';
import '@syncfusion/ej2-popups/styles/material3.css';
import '@syncfusion/ej2-vue-schedule/styles/material3.css';
Module Injection
The Scheduler requires view modules to be injected. Only inject the views you need:
import {
Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda,
TimelineViews, TimelineMonth, TimelineYear,
DragAndDrop, Resize
} from '@syncfusion/ej2-vue-schedule';
provide('schedule', [Day, Week, Month, Agenda, DragAndDrop]);
Related Components
- Recurrence Editor: Standalone component for creating recurrence rules
- DatePicker/DateRangePicker: For date selection in custom editors
- TimePicker: For time selection in custom editors
- DropDownList: For resource selection in custom editors
Best Practices
- Module Injection: Only inject view modules you actually use to reduce bundle size
- Field Mapping: Use custom field mapping when data structure differs from default
- Performance: Enable virtual scrolling for large datasets (timeline views)
- Timezones: Set scheduler timezone explicitly when working with multiple timezones
- Event IDs: Always provide unique IDs for events to ensure proper CRUD operations
- Validation: Use actionBegin event to validate data before saving
- Templates: Use templates for custom event rendering and cell customization
- Accessibility: Enable keyboard navigation and provide proper ARIA labels
- Responsive: Use CSS media queries to adjust scheduler for mobile devices
- State Management: Use state persistence to save user preferences
Troubleshooting
Events not displaying: Verify event fields match the scheduler's expected field names or use field mapping in eventSettings.
View not loading: Ensure the required view module is properly injected via the provide method.
Drag and drop not working: Import and inject the DragAndDrop module.
Timezone issues: Set the scheduler's timezone property and ensure event times are in correct format.
Custom fields not saving: Map custom fields in eventSettings.fields configuration.
Performance issues: Enable virtual scrolling for timeline views with many events or resources.
Data not loading from server: Verify CORS settings, DataManager adaptor configuration, and network requests in browser DevTools.
Recurring events not generating occurrences: Check RecurrenceRule syntax (FREQ, INTERVAL, COUNT, UNTIL parameters) and verify rule is valid.
1---2name: syncfusion-vue-scheduler3description: Implement event scheduling, calendar views, and appointment management using Syncfusion Vue Scheduler component. Use this skill when working with calendars, event scheduling, appointment booking systems, resource management, timeline views, recurring events, drag-and-drop event handling, or any scenario involving time-based event visualization and management in Vue applications. Trigger for scheduler implementations, calendar integrations, booking systems, meeting planners, task schedulers, or resource allocation tools.4---56# Syncfusion Vue Scheduler78A comprehensive scheduling component for Vue applications that provides calendar views, appointment management, resource scheduling, and time-based event visualization with drag-and-drop support.910## When to Use This Skill1112Use this skill when the user needs to:13- Implement calendar or scheduling functionality in Vue applications14- Create appointment booking or event management systems15- Build resource allocation or meeting scheduler tools16- Display events in day, week, month, timeline, or agenda views17- Handle recurring events with complex recurrence patterns18- Manage multiple resources with grouped scheduling19- Implement drag-and-drop event scheduling20- Create interactive calendars with CRUD operations21- Support multiple timezones in scheduling applications22- Export/import calendar data (ICS format)2324## Component Overview2526The Syncfusion Vue Scheduler is a feature-rich calendar and scheduling component that supports:27- **Multiple Views**: Day, Week, Work Week, Month, Year, Agenda, Timeline views28- **Event Management**: Normal, all-day, spanned, and recurring events with exceptions29- **Resource Scheduling**: Single and multiple resource grouping with custom templates30- **Drag & Drop**: Move and resize events across time slots and resources31- **Data Binding**: Local and remote data sources with field mapping32- **Customization**: Cell templates, event templates, and comprehensive styling options33- **Interactions**: Context menus, clipboard operations, keyboard shortcuts34- **Accessibility**: Full WCAG compliance with keyboard navigation and screen reader support3536## Documentation and Navigation Guide3738Complete coverage of Syncfusion Vue Scheduler with 17 comprehensive reference files covering all aspects of scheduler implementation.3940### Getting Started41📄 **Read:** [references/getting-started.md](references/getting-started.md)42- Installation `@syncfusion/ej2-vue-schedule` and theme package43- CSS reference using Syncfusion theme packages44- Module injection and provide setup for both Vue 2/345- Basic scheduler initialization with selectedDate and currentView46- Creating first appointments with eventSettings47- CSS import paths for all required components4849### Appointments and Events50📄 **Read:** [references/appointments.md](references/appointments.md)51- Event types: normal, all-day, spanned, recurring appointments52- Event fields and custom field mapping53- Recurrence rules and patterns (FREQ, INTERVAL, COUNT, UNTIL, BYDAY, etc.)54- Recurrence exceptions and editing individual occurrences vs. series55- Drag and drop with dragStart/drag/dragStop events56- Resizing events with resize controls57- Inline appointment editing58- Event retrieval methods (getEventDetails, getCurrentViewEvents, getEvents)5960### Appointment Behavior and Validation61📄 **Read:** [references/appointment-behavior-and-validation.md](references/appointment-behavior-and-validation.md)62- Setting minimum appointment height63- Blocking dates and times64- Readonly events and restricting event creation65- Differentiating past events and disabling past dates66- Appointments occupying entire cells and limiting displayed events67- Tooltip and filtering operations68- Appointment selection and deleting multiple appointments via Delete key69- Preventing overlaps and validating recurrence rules7071### Views and Navigation (Display Modes)72📄 **Read:** [references/views.md](references/views.md)73- Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda views74- Timeline views (TimelineDay, TimelineWeek, TimelineWorkWeek, TimelineMonth, TimelineYear)75- View-specific configuration (startHour, endHour, workDays, interval, dateFormat)76- Multi-day, multi-week, and multi-month view intervals77- View templates (cellTemplate, dateHeaderTemplate, eventTemplate, resourceHeaderTemplate)78- Custom header rows for timeline views79- First day of week configuration80- Hidden weekend support for all views81- Readonly view modes82- Virtual scrolling in Agenda and Timeline views83- Week number display84- Agenda days count and hideEmptyAgendaDays85- Limit overlapping events with `maxEventStack`8687### Data Binding (Local and Remote)88📄 **Read:** [references/data-binding.md](references/data-binding.md)89- Local data source with array of objects90- Remote data binding with DataManager (ODataV4Adaptor, WebApiAdaptor, UrlAdaptor)91- Custom field mapping (id, subject, startTime, endTime, location, description, isAllDay, recurrenceRule, isReadonly)92- Server-side filtering with includeFiltersInQuery93- Custom adaptors extending ODataV4Adaptor with processResponse94- Loading data via AJAX Post with callbacks95- Passing additional parameters to server with Query.addParams96- Handling failure actions with actionFailure event97- CRUD operations with UrlAdaptor and server-side controller code98- C# controller implementation with EditParams (Insert/Update/Remove logic)99- Google Calendar integration with WebApiAdaptor and dataBinding transformation100- DataManager configuration with crossDomain support101102### Resources and Grouping103📄 **Read:** [references/resources.md](references/resources.md)104- Resource fields and properties (field, title, name, allowMultiple, dataSource, idField, textField, colorField, etc.)105- Resource data binding (local JSON and remote DataManager)106- Single and multiple resource assignment107- Single-level and multi-level hierarchical resource grouping108- Resource grouping by date (byDate property)109- One-to-one resource grouping (byGroupID: false)110- Shared events across resources with allowGroupEdit111- Vertical vs. Timeline resource view implementation112113### Resource Customization114📄 **Read:** [references/resource-customization.md](references/resource-customization.md)115- Custom working hours per resource116- Custom working days per resource117- Resource header templates with customization118- Multi-column resource headers (Timeline only)119- Customizing parent resource cells with renderCell event120- Custom CSS classes per resource121- Expanded/collapsed state for resources (Timeline views)122123### Time Configuration (Timescale and Timezone)124📄 **Read:** [references/timescale-timezone.md](references/timescale-timezone.md)125- Timescale configuration (enable, interval, slotCount, templates)126- Slot duration configuration (30-min, 15-min, 10-min, 5-min intervals)127- Hiding timescale and custom time format128- Major and minor slot templates129- Scheduler timezone configuration with IANA timezone names130- Common timezones (America/New_York, Europe/London, Asia/Tokyo, etc.)131- UTC display for global applications132- Per-event timezone with startTimezone and endTimezone fields133- Timezone conversion helper methods (convert, removeLocalOffset, addLocalOffset)134- Timezone dropdown in event editor135- Browser local timezone (no timezone setting)136- Daylight saving time handling137138### Customization139📄 **Read:** [references/customization.md](references/customization.md)140- Cell dimensions with CSS classes (height, width for all views)141- Cell templates for workCells, monthCells, allDayCells, dateHeader cells142- RenderCell event with elementType checking (workCells, monthCells, dateHeader, resourceGroupCells, etc.)143- Cell header template for Month view144- Date header customization for Week/Day views145- Minimum and maximum date constraints146- Weekend cell customization and highlighting147- Custom working hours and working days148- Multi-cell and multi-row selection control149- Slot availability checking with isSlotAvailable method150151### Editor Templates152📄 **Read:** [references/editor-template.md](references/editor-template.md)153- Event editor overview and modes (Add, Edit, EditOccurrence, EditSeries)154- Customizing editor field labels with title property155- Customizing editor buttons via localization (L10n)156- Field validation rules (required, regex, custom validators)157- Adding custom fields to default editor158- Creating fully custom editor template159- Quick info template customization (header, content, footer)160- Disabling editor with readonly or popupOpen event161- Editor field types and validation162163### Header Configuration164📄 **Read:** [references/header-configuration.md](references/header-configuration.md)165- Header bar customization and styling166- Header rows for timeline views (Year, Month, Date)167- Date header template for all views168- Custom toolbar actions and buttons169- Header navigation (previous, today, next)170- Hiding/showing header elements171172### CRUD Operations173📄 **Read:** [references/crud-operations.md](references/crud-operations.md)174- Adding events: addEvent method, multiple events batch add175- Editing events: saveEvent method with action types176- Deleting events: deleteEvent by ID or object, multiple delete177- Drag and drop with allowDragAndDrop module178- Event resizing with allowResizing module179- ActionBegin event for validation and cancellation180- ActionComplete event for post-operation handling181- ActionFailure event for error handling182- Readonly mode and per-event readonly flag183- Validation for time ranges and slot availability184- Preventing overlaps with isSlotAvailable185186### Clipboard Operations187📄 **Read:** [references/clipboard.md](references/clipboard.md)188- Enabling clipboard with allowClipboard property189- Copy/cut/paste keyboard shortcuts (Ctrl+C, Ctrl+X, Ctrl+V)190- Programmatic API (copy(), cut(), paste() methods)191- Context menu integration with custom menu items192- Before/after paste events for data modification193- Behavior notes (copy creates duplicate, cut moves event)194- Multiple paste of copied events195- Cross-application paste support196197### Context Menu198📄 **Read:** [references/context-menu.md](references/context-menu.md)199- Custom context menu integration with ContextMenu component200- Menu setup with items configuration201- BeforeOpen event for menu display logic202- OnSelect event for menu action handling203- Showing/hiding menu items based on context (cell vs. event)204- Recurring event menu with sub-items (Edit/Delete Occurrence/Series)205- Custom menu items (Print, Export, Email, etc.)206- Mobile context menu with tap-hold support207- Custom styling with CSS classes208209### Localization and Accessibility210📄 **Read:** [references/localization-accessibility.md](references/localization-accessibility.md)211- Locale configuration and language translation (en, fr, de, ja, etc.)212- L10n class for custom text translation213- Date and time formatting with `dateFormat` and `timeFormat` (12/24-hour, ISO, locale-aware)214- RTL (right-to-left) support for Arabic, Hebrew215- WCAG 2.0 compliance level AA216- Keyboard shortcuts (Tab, Enter, Space, Delete, Ctrl+A, etc.)217- ARIA attributes (role, aria-label, aria-describedby)218- Screen reader support and announcements219- Focus management and visible focus indicator220221### Advanced Features222📄 **Read:** [references/advanced-features.md](references/advanced-features.md)223- Virtual scrolling for large datasets in Agenda/Timeline views224- Exporting to PDF and Excel formats225- Printing scheduler with custom templates226- State persistence (enablePersistence) saving view/date/scroll position227- Row auto height for overlapping events228- Event templates for custom rendering229- Quick info templates230- Block time slots (marking unavailable times)231- ICS calendar import/export232- Tooltip on event hover233- Inline editing support234- Responsive adaptive UI235236### Recurrence Editor and Calendar Modes237📄 **Read:** [references/recurrence-editor-calendar-modes.md](references/recurrence-editor-calendar-modes.md)238- Recurrence editor and recurrence date generation239- Gregorian and Islamic calendar modes240- Working days, hours, and custom time ranges241- Scheduler styling and theming242- Performance optimization tips243- Best practices for production use244245## Quick Start Example246247### Basic Scheduler with Appointments248249```vue250<template>251 <div id='app'>252 <ejs-schedule 253 height='550px' 254 :selectedDate='selectedDate'255 :eventSettings='eventSettings'>256 </ejs-schedule>257 </div>258</template>259260<script setup>261import { provide } from "vue";262import { ScheduleComponent as EjsSchedule, Day, Week, WorkWeek, Month, Agenda } from '@syncfusion/ej2-vue-schedule';263264const selectedDate = new Date(2024, 0, 15);265const eventSettings = {266 dataSource: [267 {268 Id: 1,269 Subject: 'Team Meeting',270 StartTime: new Date(2024, 0, 15, 10, 0),271 EndTime: new Date(2024, 0, 15, 11, 30),272 IsAllDay: false273 },274 {275 Id: 2,276 Subject: 'Project Review',277 StartTime: new Date(2024, 0, 16, 14, 0),278 EndTime: new Date(2024, 0, 16, 15, 30),279 IsAllDay: false280 }281 ]282};283284// Inject required view modules285provide('schedule', [Day, Week, WorkWeek, Month, Agenda]);286</script>287288<style>289@import "../node_modules/@syncfusion/ej2-material3-theme/styles/schedule/index.css";290</style>291```292293## Common Patterns294295### Recurring Event with Exceptions296297```vue298<script setup>299const eventSettings = {300 dataSource: [301 {302 Id: 1,303 Subject: 'Daily Standup',304 StartTime: new Date(2024, 0, 15, 9, 0),305 EndTime: new Date(2024, 0, 15, 9, 30),306 RecurrenceRule: 'FREQ=DAILY;INTERVAL=1;COUNT=10',307 RecurrenceException: '20240117T090000Z,20240119T090000Z'308 }309 ]310};311</script>312```313314### Resource Grouping315316```vue317<template>318 <ejs-schedule 319 :eventSettings='eventSettings'320 :group='group'>321 <e-resources>322 <e-resource 323 field='RoomId' 324 title='Room' 325 name='Rooms'326 :dataSource='roomData'327 textField='Name' 328 idField='Id' 329 colorField='Color'>330 </e-resource>331 </e-resources>332 </ejs-schedule>333</template>334335<script setup>336const roomData = [337 { Id: 1, Name: 'Room A', Color: '#ffaa00' },338 { Id: 2, Name: 'Room B', Color: '#357cd2' }339];340341const group = { resources: ['Rooms'] };342</script>343```344345### Custom Field Mapping346347```vue348<script setup>349const eventSettings = {350 dataSource: appointmentData,351 fields: {352 id: 'EventId',353 subject: { name: 'Title' },354 startTime: { name: 'From' },355 endTime: { name: 'To' },356 location: { name: 'Place' },357 description: { name: 'Notes' },358 isAllDay: { name: 'FullDay' }359 }360};361</script>362```363364### Timeline View Configuration365366```vue367<template>368 <ejs-schedule 369 :selectedDate='selectedDate'370 :eventSettings='eventSettings'>371 <e-views>372 <e-view option='TimelineDay'></e-view>373 <e-view option='TimelineWeek'></e-view>374 <e-view option='TimelineMonth'></e-view>375 </e-views>376 </ejs-schedule>377</template>378379<script setup>380import { provide } from "vue";381import { TimelineViews, TimelineMonth } from '@syncfusion/ej2-vue-schedule';382383provide('schedule', [TimelineViews, TimelineMonth]);384</script>385```386387## Key Props and Events388389### Essential Properties390391| Property | Type | Description |392|----------|------|-------------|393| `selectedDate` | Date | Currently selected date in the scheduler |394| `currentView` | string | Active view (Day, Week, Month, Agenda, etc.) |395| `eventSettings` | object | Event data source and field configuration |396| `views` | array | Collection of views to display |397| `startHour` | string | Start hour for day/week views (e.g., '08:00') |398| `endHour` | string | End hour for day/week views (e.g., '18:00') |399| `workDays` | number[] | Working days (0=Sunday, 1=Monday, etc.) |400| `timeScale` | object | Time slot configuration (interval, slotCount) |401| `group` | object | Resource grouping configuration |402| `readonly` | boolean | Prevents CRUD operations when true |403| `allowDragAndDrop` | boolean | Enables drag and drop for events |404| `allowResizing` | boolean | Enables event resizing |405| `allowMultiDrag` | boolean | Enables multiple event drag selection |406| `allowClipboard` | boolean | Enables clipboard operations |407| `timezone` | string | Scheduler timezone (e.g., 'America/New_York') |408409### Essential Events410411| Event | Description |412|-------|-------------|413| `actionBegin` | Triggered before any CRUD action (add/edit/delete) |414| `actionComplete` | Triggered after successful CRUD action |415| `actionFailure` | Triggered when CRUD action fails |416| `eventClick` | Triggered when an event is clicked |417| `eventDoubleClick` | Triggered when an event is double-clicked |418| `cellClick` | Triggered when a cell is clicked |419| `cellDoubleClick` | Triggered when a cell is double-clicked |420| `popupOpen` | Triggered before editor/quick info popup opens |421| `popupClose` | Triggered when popup closes |422| `dragStart` | Triggered when event drag starts |423| `drag` | Triggered during event dragging |424| `dragStop` | Triggered when event drag stops |425| `resizeStart` | Triggered when event resize starts |426| `resizing` | Triggered during event resizing |427| `resizeStop` | Triggered when event resize stops |428| `dataBinding` | Triggered before data binding |429| `dataBound` | Triggered after data binding completes |430| `beforePaste` | Triggered before clipboard paste operation |431432### Essential Methods433434| Method | Description |435|--------|-------------|436| `addEvent(data)` | Adds new event to the scheduler |437| `saveEvent(data, action)` | Saves modified event |438| `deleteEvent(id/object)` | Deletes event by ID or object |439| `getEvents(startDate, endDate)` | Gets events within date range |440| `getEventDetails(element)` | Gets event details from element |441| `openEditor(data, action)` | Opens editor window programmatically |442| `closeEditor()` | Closes the editor window |443| `refreshEvents()` | Refreshes all events |444| `scrollTo(hour)` | Scrolls to specific hour in day/week views |445| `getCurrentViewDates()` | Returns current view date collection |446447## Installation448449Install the Syncfusion Vue Schedule package:450451```bash452npm install @syncfusion/ej2-vue-schedule --save453```454455Import required CSS themes:456457```javascript458import '@syncfusion/ej2-base/styles/material3.css';459import '@syncfusion/ej2-buttons/styles/material3.css';460import '@syncfusion/ej2-calendars/styles/material3.css';461import '@syncfusion/ej2-dropdowns/styles/material3.css';462import '@syncfusion/ej2-inputs/styles/material3.css';463import '@syncfusion/ej2-navigations/styles/material3.css';464import '@syncfusion/ej2-popups/styles/material3.css';465import '@syncfusion/ej2-vue-schedule/styles/material3.css';466```467468## Module Injection469470The Scheduler requires view modules to be injected. Only inject the views you need:471472```javascript473import { 474 Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda,475 TimelineViews, TimelineMonth, TimelineYear,476 DragAndDrop, Resize477} from '@syncfusion/ej2-vue-schedule';478479provide('schedule', [Day, Week, Month, Agenda, DragAndDrop]);480```481482## Related Components483484- **Recurrence Editor**: Standalone component for creating recurrence rules485- **DatePicker/DateRangePicker**: For date selection in custom editors486- **TimePicker**: For time selection in custom editors487- **DropDownList**: For resource selection in custom editors488489## Best Practices4904911. **Module Injection**: Only inject view modules you actually use to reduce bundle size4922. **Field Mapping**: Use custom field mapping when data structure differs from default4933. **Performance**: Enable virtual scrolling for large datasets (timeline views)4944. **Timezones**: Set scheduler timezone explicitly when working with multiple timezones4955. **Event IDs**: Always provide unique IDs for events to ensure proper CRUD operations4966. **Validation**: Use actionBegin event to validate data before saving4977. **Templates**: Use templates for custom event rendering and cell customization4988. **Accessibility**: Enable keyboard navigation and provide proper ARIA labels4999. **Responsive**: Use CSS media queries to adjust scheduler for mobile devices50010. **State Management**: Use state persistence to save user preferences501502## Troubleshooting503504**Events not displaying**: Verify event fields match the scheduler's expected field names or use field mapping in eventSettings.505506**View not loading**: Ensure the required view module is properly injected via the provide method.507508**Drag and drop not working**: Import and inject the DragAndDrop module.509510**Timezone issues**: Set the scheduler's timezone property and ensure event times are in correct format.511512**Custom fields not saving**: Map custom fields in eventSettings.fields configuration.513514**Performance issues**: Enable virtual scrolling for timeline views with many events or resources.515516**Data not loading from server**: Verify CORS settings, DataManager adaptor configuration, and network requests in browser DevTools.517518**Recurring events not generating occurrences**: Check RecurrenceRule syntax (FREQ, INTERVAL, COUNT, UNTIL parameters) and verify rule is valid.