Implementing Syncfusion React Calendars
Calendar
The Syncfusion React CalendarComponent is a highly customizable calendar UI control that allows users to select single or multiple dates. It supports multiple views (Month, Year, Decade), navigation, week numbers, disabled dates, custom day cell rendering, localization, RTL support, and full accessibility (WCAG 2.2 compliant).
Quick Start (React)
Install
Basic Example (App.jsx)
Notes:
- Use the
changeevent to sync selected date to React state. - Import theme CSS once (global or component-level) to style the control.
Guidance & Patterns
- Controlled component: keep source-of-truth in React state and update
valueviachangeevent. - Multi-selection: use
isMultiSelection={true}withvaluesprop andaddDate()/removeDate()methods. - Programmatic navigation: use a
refto callnavigateTo(view, date)— both arguments are required (see references/getting-started-react.md). - Date ranges: for range selection, use DateRangePicker (separate component). The Calendar itself does not have a built-in range highlight mode.
- Accessibility: use wrapper elements with
role="region"and a separatearia-liveregion for announcements — these are not direct Calendar props. - Week numbers: enable with
weekNumber={true}(the correct prop name).
References
Navigate to the reference that matches your current task:
Getting Started
📄 Read: references/getting-started-react.md [blocked]
- Installation and npm setup
- React component examples
- CSS/theme imports
- Using refs and methods
Date Selection
📄 Read: references/date-selection.md [blocked]
- Single date selection
- Multiple dates and ranges
- Min/max constraints
- Disabling specific dates
Calendar Views
📄 Read: references/calendar-views.md [blocked]
- Month, Year, Decade views
- Navigating between views
- Initial and depth controls
- Programmatic navigation
Styling & Customization
📄 Read: references/styling-customization.md [blocked]
- Theme selection and switching
- CSS class customization
- Custom day cell rendering
- RTL and responsive design
Events & Methods
📄 Read: references/events-methods.md [blocked]
- Event handlers (change, created, renderDayCell)
- Using refs and imperative methods
- Advanced renderDayCell hook
- Event tracking patterns
Accessibility & Globalization
📄 Read: references/accessibility-globalization.md [blocked]
- WCAG 2.1 compliance
- Keyboard navigation
- ARIA attributes
- Locale support and RTL
- Testing for accessibility
API Reference (Quick Lookup)
📄 Read: references/api-reference.md [blocked]
- Props, events, methods at a glance
- Common enums and types
- Link to upstream docs
Troubleshooting & Tips
- Styles not applied: confirm CSS imports point to
node_modules/@syncfusion/ej2-calendars/styles/and are loaded before component styles. - React state mismatch: use the
valueprop andchangeevent to keep React state in sync — do not rely on framework-specific bindings. - Multiple date selection not working: ensure
isMultiSelection={true}and usevalues(notvalue) for the initial array. navigateTonot working: the method requires two arguments —navigateTo(view: CalendarView, date: Date).- "Cannot find module": run
npm install @syncfusion/ej2-react-calendars @syncfusion/ej2-baseand confirmpackage.json. - Week numbers not showing: use
weekNumber={true}(notshowWeekNumber).
DatePicker
The Syncfusion React DatePickerComponent provides an intuitive input control with a calendar popup for selecting a single date. It features flexible formatting, masked input, min/max date validation, strict mode, multiple input formats, custom day rendering, localization, and seamless integration as a controlled React component.
Component Overview
The DatePicker is a Syncfusion React component for date selection with powerful features:
- Calendar popup - Visual date selection with navigation
- Flexible formatting - Display and input formats with pattern support
- Masked input -
enableMaskfor segment-by-segment date entry withmaskPlaceholder - Range validation - Min/max dates with
strictModeautomatic correction - Multiple views - Month, year, and decade views via
startanddepthproperties - Day cell customization - Disable weekends, highlight special dates via
renderDayCellevent - Full globalization - 150+ cultures, RTL (
enableRtl), locale-specific formatting,firstDayOfWeek - WCAG 2.2 compliant - Full accessibility with keyboard navigation and ARIA attributes
- Form ready - Controlled components, React hooks, form validation integration
- Programmatic control -
show(),hide(),focusIn(),focusOut(),navigateTo(),currentView()
Complete API Summary
Key Properties
Methods
Events
Documentation & Navigation Guide
When the user needs help with DatePicker, guide them to the appropriate reference:
Getting Started
📄 Read: references/getting-started.md [blocked]
- Installation via npm (@syncfusion/ej2-react-calendars)
- CSS theme imports (material3, bootstrap, fluent, tailwind)
- Component imports and setup
- Basic JSX implementation with DatePickerComponent
- Functional vs class component examples
- Running your first application
Date Formats & Input
📄 Read: references/date-formats-and-input.md [blocked]
- Display format property and patterns (yyyy-MM-dd, dd/MM/yyyy, etc.)
- Custom format specifiers (# and 0 patterns)
- Input formats for flexible date entry (accepting multiple formats)
- Format examples with real-world scenarios
- Parsing and converting user input automatically
- Culture-based default formatting
Date Range & Validation
📄 Read: references/date-range-and-validation.md [blocked]
- Min and max date properties for range restriction
- Range validation and error states
- strictMode for automatic out-of-range correction
- Out-of-range behavior and error handling
- Disabling dates outside valid range
- Edge cases and gotchas
Date Views & Navigation
📄 Read: references/date-views-and-navigation.md [blocked]
- Start property (month, year, decade initial view)
- Depth property for restricting view levels
- Calendar navigation and user interactions
- Month and year selection shortcuts
- Navigating between different views
- Default behavior and best practices
Customization & Styling
📄 Read: references/customization-and-styling.md [blocked]
- CSS classes for styling (e-datepicker, e-calendar, e-day, etc.)
- renderDayCell event for day customization
- Disabling specific dates and weekends
- Placeholder, disabled, and readonly states
- Custom CSS and theme customization
- Day cell appearance and behavior
Globalization & Localization
📄 Read: references/globalization-and-localization.md [blocked]
- Culture and locale configuration (German, French, Arabic, etc.)
- Loading CLDR data for internationalization
- Date format by culture (different countries, different formats)
- Locale text customization (today button, placeholder)
- Right-to-Left (RTL) support for Arabic, Hebrew, Urdu
- Week start day by culture
- Number formatting and calendar adjustments
Accessibility & Keyboard Navigation
📄 Read: references/accessibility-and-keyboard.md [blocked]
- WCAG 2.2 compliance and accessibility standards
- Keyboard navigation shortcuts (Alt+Down, arrow keys, Esc)
- ARIA attributes (aria-expanded, aria-disabled, aria-activedescendant)
- Screen reader support and announcements
- Focus management and visible focus indicators
- Color contrast and visual accessibility
- Mobile device support
Date Masking & Advanced Validation
📄 Read: references/date-masking-and-strict-mode.md [blocked]
enableMaskproperty for structured segment-by-segment date inputmaskPlaceholderfor custom segment placeholder text- Date masking patterns for input guidance
strictModeproperty behavior and enforcement- Date parsing rules and validation logic
- Input validation and format enforcement
- Edge cases (leap years, month boundaries, etc.)
- Troubleshooting common validation issues
- Best practices for date input
Quick Start Example
Here's a minimal working example to get started:
Key points:
- Import
DatePickerComponentfrom@syncfusion/ej2-react-calendars - Import all required CSS themes (base, buttons, inputs, popups, calendars)
- Use
valueprop for the current date (can be null or Date object) - Use
changeevent (notonChange) to update React state — this is the Syncfusion event name - DatePicker opens a calendar popup on click or Alt+Down arrow
Common Patterns
1. Date Range Picker (Min/Max Dates)
2. Custom Date Format
3. Multiple Accepted Input Formats
4. Year/Decade View for Birth Date Selection
5. Disable Weekends
6. Controlled Component in React Form
7. German Culture with RTL Support
8. Masked Date Input
9. Programmatic Control
10. Handle All Key Events
DateRangePicker
The Syncfusion React DateRangePickerComponent enables users to select a start and end date range with built-in support for presets, validation, custom formatting, separator configuration, full-screen mobile mode, and advanced range constraints (minDays, maxDays, min, max).
Documentation Navigation Guide
Getting Started
📄 Read: references/getting-started.md [blocked]
- Installation via npm (@syncfusion/ej2-react-calendars)
- CSS imports and theme configuration
- Basic DateRangePicker implementation
- Class component vs functional component setup
- Component initialization and structure
- Running development server
- Common troubleshooting
Date Range Selection
📄 Read: references/date-range-selection.md [blocked]
- Start and end date properties
- Date range validation patterns
- Minimum and maximum date constraints
- Disabled dates configuration
- Date range presets (Last 7 days, Last 30 days, etc.)
- Value binding and two-way updates
- Read-only and disabled states
- Placeholder and labels
Date Range Formatting
📄 Read: references/date-range-formatting.md [blocked]
- Date format string options (MM/dd/yyyy, dd-MMM-yyyy, etc.)
- Display format vs input format
- Locale-based date formatting
- Custom separator between start and end dates
- Float label types (Never, Always, Auto)
- Placeholder text customization
- htmlAttributes for DOM attributes
Events and Methods
📄 Read: references/events-and-methods.md [blocked]
- Event handlers (change, open, close, blur, focus, select)
- Event argument structures
- Methods (show, hide, focusIn, focusOut, reset, destroy)
- Imperative control with useRef
- Lifecycle events (created, destroyed)
- Event patterns and best practices
- Clearing values and state reset
- DateRangeSelectingEvent and ChangedEventArgs
Customization and Styling
📄 Read: references/customization-and-styling.md [blocked]
- CSS class customization with cssClass
- Theme options (Material, Bootstrap, Fluent, Tailwind, Fabric)
- Full-screen mode for mobile devices
- RTL (right-to-left) language support
- Preset ranges customization
- Z-index management
- Width and height configuration
- Accessibility features and ARIA attributes
API Reference
📄 Read: references/api-reference.md [blocked]
- Complete properties list (35+ properties)
- All methods with signatures (8 methods)
- All events with event arguments (12 events)
- Type definitions and interfaces
- Default values and constraints
- Use cases for each property and method
Advanced Patterns
📄 Read: references/advanced-patterns.md [blocked]
- Form submission with date range validation
- Keyboard shortcuts and key navigation
- Server timezone offset handling
- Persistence and localStorage
- Multi-component integration (start/end date binding)
- Performance optimization with lazy loading
- Error handling and validation patterns
- Complex date range scenarios (fiscal years, quarters)
Quick Start
Common Patterns
Pattern 1: Date Range with Preset Options
Pattern 2: Date Range with Validation
<!-- Pattern 3 removed: examples using non-API props (e.g., `disabledDates`) deleted to match authoritative API reference -->Pattern 4: Event Handling and State Management
Pattern 5: Custom Date Range Format
Key Props Reference
- Prop:
startDate: Type:Date— Default:null— Initial start date of the range. - Prop:
endDate: Type:Date— Default:null— Initial end date of the range. - Prop:
min: Type:Date— Default:new Date(1900, 0, 1)— Minimum selectable date. - Prop:
max: Type:Date— Default:new Date(2099, 11, 31)— Maximum selectable date. - Prop:
value: Type:Date[] | DateRange— Default:null— Gets or sets the start and end date. - Prop:
format: Type:string | RangeFormatObject— Default:null— Date display and input format. - Prop:
placeholder: Type:string— Default:null— Input placeholder text. - Prop:
enabled: Type:boolean— Default:true— Enables or disables the component (useenabled, notdisabled). - Prop:
readonly: Type:boolean— Default:false— Read-only state; prevents editing. - Prop:
allowEdit: Type:boolean— Default:true— Allow manual text editing of the input. - Prop:
cssClass: Type:string— Default:''— Adds a custom CSS class to the root element. - Prop:
floatLabelType: Type:FloatLabelType | string— Default:Never— Float label behavior (Never, Always, Auto). - Prop:
separator: Type:string— Default:'-'— Separator string between start and end date in the input. - Prop:
locale: Type:string— Default:'en-US'— Locale used for formatting and localization. - Prop:
inputFormats: Type:string[] | RangeFormatObject[]— Default:null— Acceptable input parsing formats. - Prop:
keyConfigs: Type:object— Default:null— Custom keyboard shortcuts mapping. - Prop:
firstDayOfWeek: Type:number— Default:null— First day of week for calendar rendering. - Prop:
dayHeaderFormat: Type:DayHeaderFormats— Default:Short— Day name format in header. - Prop:
start: Type:CalendarView— Default:Month— Initial calendar view when popup opens. - Prop:
depth: Type:CalendarView— Default:Month— Maximum navigation depth for the calendar. - Prop:
weekNumber: Type:boolean— Default:false— Show week numbers in calendar rows. - Prop:
weekRule: Type:WeekRule— Default:FirstDay— Rule that defines first week of the year. - Prop:
minDays: Type:number— Default:null— Minimum allowed span of days in a selection. - Prop:
maxDays: Type:number— Default:null— Maximum allowed span of days in a selection. - Prop:
strictMode: Type:boolean— Default:false— When true, only valid ranges can be entered. - Prop:
showClearButton: Type:boolean— Default:true— Toggle visibility of the clear button. - Prop:
fullScreenMode: Type:boolean— Default:false— Use full-screen popup on mobile. - Prop:
htmlAttributes: Type:{ [key: string]: string }— Default:{}— Additional HTML attributes applied to the component element. - Prop:
serverTimezoneOffset: Type:number— Default:null— Server timezone offset in minutes for initial value processing. - Prop:
width: Type:number | string— Default:''— Width of the component input. - Prop:
zIndex: Type:number— Default:1000— z-index for popup element.
Next Steps:
- Read references/getting-started.md [blocked] to install and set up your first DateRangePicker
- Explore references/date-range-selection.md [blocked] for range selection patterns
- Check references/date-range-formatting.md [blocked] for format options
- See references/advanced-patterns.md [blocked] for complex scenarios
- Refer to references/api-reference.md [blocked] for complete API documentation
DateTimePicker
The Syncfusion React DateTimePickerComponent combines date and time selection in a single control. It offers calendar + time list popup, customizable time steps, masking, strict validation, timezone handling, format customization, and full keyboard accessibility.
Documentation (read these references in order)
- 📄 Read: references/getting-started.md [blocked] — installation, module setup, CSS imports, basic usage
- 📄 Read: references/api-reference.md [blocked] — full properties, methods, and events
- 📄 Read: references/date-time-selection.md [blocked] — selection patterns and constraints
- 📄 Read: references/time-configuration.md [blocked] — step, minTime/maxTime, scroll behavior
- 📄 Read: references/events-and-methods.md [blocked] — event handlers and method usage
- 📄 Read: references/styling-and-customization.md [blocked] — themes and cssClass usage
- 📄 Read: references/advanced-features.md [blocked] — masked input, strict mode, calendar modes, timezone handling
- 📄 Read: references/accessibility.md [blocked] — keyboard and ARIA guidance
Quick Start (React + TypeScript)
- Install package:
- Import styles (in
index.cssor component CSS):
- Minimal functional example (
App.tsx):
Common Patterns
- Controlled value: bind
valueand update onchange. - Range enforcement: use
minandmaxfor dates,minTime/maxTimefor times. - Masked input: enable with
enableMaskand providemaskPlaceholder. - Localization: set
localeor use global culture settings. - Keyboard-first: provide
keyConfigsfor custom shortcuts.
Key Props Summary (see API reference for full list)
value,min,max,step,format,enableMask,placeholder,cssClass,locale,readonly,enabled.
Key Events
change,open,close,created,destroyed,navigated,blur,focus,renderDayCell.
Next steps
- All reference files have been created and validated against the official Syncfusion API (see
references/api-reference.md). - Next: run the test-case guide and validation checks, then create automated examples or add platform-specific notes on request.
- Ask me to run tests, update
completion-status.json, or produce publish-ready artifacts.
TimePicker
The Syncfusion React TimePickerComponent is a lightweight and feature-rich control for selecting time values. It supports 12/24-hour formats, time stepping, min/max constraints, masked input, localization, full-screen mode, and easy integration into React forms.
Documentation Navigation Guide
Getting Started
📄 Read: references/getting-started.md [blocked]
- Installation via npm (@syncfusion/ej2-react-calendars)
- CalendarModule setup in app.module.ts
- CSS imports and theme configuration
- Basic TimePicker implementation
- Component registration with useRef
- Running development server
- Common troubleshooting
Time Format and Display
📄 Read: references/time-format-and-display.md [blocked]
- Format string options (24-hour, 12-hour formats)
- TimeFormatObject with skeleton property
- Locale-based time formatting
- Placeholder text customization
- Float label types (Never, Always, Auto)
- htmlAttributes for DOM attributes
- Masked input with enableMask
- Mask placeholder configuration
Time Range and Selection
📄 Read: references/time-range-and-selection.md [blocked]
- Minimum and maximum time constraints
- Time step intervals (15, 30, 60 minutes)
- ScrollTo default position
- Value binding and two-way updates
- Read-only and disabled states
- OpenOnFocus behavior
- Time popup list population
- Stepped time intervals
Events and Methods
📄 Read: references/events-and-methods.md [blocked]
- Event handlers (change, open, close, blur, focus)
- Event argument structures
- Methods (show, hide, focusIn, focusOut)
- Imperative control with useRef
- Lifecycle events (created, destroyed)
- Event patterns and best practices
- Clearing values and state reset
- ItemRender for custom formatting
Customization and Styling
📄 Read: references/customization-and-styling.md [blocked]
- CSS class customization with cssClass
- Theme options (Material, Bootstrap, Fluent, Tailwind)
- Full-screen mode for mobile devices
- RTL (right-to-left) language support
- Strict mode validation
- Z-index management
- Width and height configuration
- Accessibility features
- Theme Studio integration
API Reference
📄 Read: references/api-reference.md [blocked]
- Complete properties list (26 properties)
- All methods with signatures (5 methods)
- All events with event arguments (9 events)
- Type definitions and interfaces
- Default values and constraints
- Use cases for each property
Advanced Patterns
📄 Read: references/advanced-patterns.md [blocked]
- Form submission with validation
- Keyboard shortcuts and keyConfigs
- Server timezone offset handling
- Persistence and localStorage
- Multi-component integration
- Performance optimization
- Error handling patterns
- Complex validation scenarios
Quick Start
Common Patterns
Pattern 1: Time Picker with Min/Max Constraints
Pattern 2: Form with Time Picker Submission
Pattern 3: Time Picker with Custom Format
Pattern 4: Event Handling and State Management
Pattern 5: Masked Time Input
Key Props Reference
Next Steps:
- Read references/getting-started.md [blocked] to install and set up your first TimePicker
- Explore references/time-format-and-display.md [blocked] for format options
- Check references/time-range-and-selection.md [blocked] for time constraints
- See references/advanced-patterns.md [blocked] for complex scenarios


