Calendar
The Calendar component provides a versatile and customizable way to display dates, select dates, and manage date-related events. It supports various display modes, date selection options, and styling capabilities.
See the Example by Serhii Pimenov on CodePen.
Basic Calendar
Section titled “Basic Calendar”<!-- Basic calendar --><div class="calendar" data-role="calendar"></div>
<!-- Calendar with specific date shown --><div class="calendar" data-role="calendar" data-show="2023-12-25"></div>
<!-- Calendar with date selection --><div class="calendar" data-role="calendar" data-preset="2023-12-25"></div>
Calendar Modes
Section titled “Calendar Modes”<!-- Static calendar (non-interactive) --><div class="calendar" data-role="calendar" data-static="true"></div>
<!-- Read-only calendar --><div class="calendar" data-role="calendar" data-readonly="true"></div>
<!-- Picker mode (for date selection) --><div class="calendar" data-role="calendar" data-picker-mode="true"></div>
<!-- Compact calendar --><div class="calendar" data-role="calendar" data-compact="true"></div>
<!-- Wide calendar --><div class="calendar" data-role="calendar" data-wide="true"></div>
Calendar with Time Selection
Section titled “Calendar with Time Selection”<!-- Calendar with time selection --><div class="calendar" data-role="calendar" data-show-time="true"></div>
<!-- Calendar with initial time --><div class="calendar" data-role="calendar" data-show-time="true" data-initial-time="14:30"></div>
Calendar with Date Constraints
Section titled “Calendar with Date Constraints”<!-- Calendar with minimum date --><div class="calendar" data-role="calendar" data-min-date="2023-01-01"></div>
<!-- Calendar with maximum date --><div class="calendar" data-role="calendar" data-max-date="2023-12-31"></div>
<!-- Calendar with excluded dates --><div class="calendar" data-role="calendar" data-exclude="2023-12-25,2023-12-26"></div>
<!-- Calendar with excluded days of week (0=Sunday, 6=Saturday) --><div class="calendar" data-role="calendar" data-exclude-day="0,6"></div>
Calendar with Events
Section titled “Calendar with Events”<!-- Calendar with events --><div class="calendar" data-role="calendar" data-events="2023-12-25,2023-12-31"></div>
Calendar with Multiple Date Selection
Section titled “Calendar with Multiple Date Selection”<!-- Calendar with multiple date selection --><div class="calendar" data-role="calendar" data-multi-select="true"></div>
<!-- Calendar with preset selected dates --><div class="calendar" data-role="calendar" data-multi-select="true" data-preset="2023-12-25,2023-12-31"></div>
Plugin Options
Section titled “Plugin Options”Option | Default | Description |
---|---|---|
weekStart | null | First day of week (0 for Sunday, 1 for Monday, etc.) |
static | false | If true, calendar becomes non-interactive |
readonly | false | If true, calendar is read-only |
showGhost | false | If true, shows ghost days from previous/next months |
events | null | Array or comma-separated string of dates with events |
startContent | ”days” | Initial content to show (“days”, “months”, “years”) |
showTime | false | If true, shows time selection |
initialTime | null | Initial time in format “HH:MM” |
initialHours | null | Initial hours value (0-23) |
initialMinutes | null | Initial minutes value (0-59) |
labelTimeHours | null | Custom label for hours |
labelTimeMinutes | null | Custom label for minutes |
animationContent | true | If true, enables content animation |
animationSpeed | 10 | Animation speed in milliseconds |
dayBorder | false | If true, shows borders around days |
excludeDay | null | Array or comma-separated string of days to exclude (0-6) |
prevMonthIcon | ”⯇“ | Icon for previous month button |
nextMonthIcon | ”⯈“ | Icon for next month button |
prevYearIcon | ”⯇“ | Icon for previous year button |
nextYearIcon | ”⯈“ | Icon for next year button |
compact | false | If true, shows calendar in compact mode |
wide | false | If true, shows calendar in wide mode |
widePoint | null | Breakpoint for wide mode |
pickerMode | false | If true, enables date picker mode |
show | null | Date to show initially |
outside | true | If true, allows selection of days outside current month |
buttons | "" | Buttons to show in footer (“cancel”, “today”, “clear”, “done”) |
yearsBefore | 100 | Number of years to show before current year |
yearsAfter | 100 | Number of years to show after current year |
headerFormat | ”dddd, MMM DD” | Format for header date |
showHeader | true | If true, shows calendar header |
showFooter | true | If true, shows calendar footer |
showWeekNumber | false | If true, shows week numbers |
isDialog | false | If true, calendar is used in dialog mode |
ripple | false | If true, enables ripple effect |
rippleColor | ”#cccccc” | Color for ripple effect |
exclude | null | Array or comma-separated string of dates to exclude |
preset | null | Array or comma-separated string of preset selected dates |
minDate | null | Minimum selectable date |
maxDate | null | Maximum selectable date |
weekDayClick | false | If true, enables clicking on week days |
weekNumberClick | false | If true, enables clicking on week numbers |
multiSelect | false | If true, enables multiple date selection |
special | null | Array or comma-separated string of special dates |
format | METRO_DATE_FORMAT | Format for date output |
inputFormat | null | Format for date input |
API Methods
Section titled “API Methods”Method | Parameters | Return | Description |
---|---|---|---|
getTime | asString (boolean) | Array or String | Gets current time as array [hours, minutes] or string “HH:MM” |
setTime | time (Array or String) | Object | Sets current time from array [hours, minutes] or string “HH:MM” |
getPreset | - | Array | Gets preset dates |
getSelected | - | Array | Gets selected dates |
getExcluded | - | Array | Gets excluded dates |
getToday | - | Object | Gets today’s date |
getCurrent | - | Object | Gets current date shown in calendar |
clearSelected | - | Object | Clears all selected dates |
toDay | - | Object | Sets calendar to today’s date |
setExclude | exclude (Array or String) | Object | Sets excluded dates |
setPreset | preset (Array or String) | Object | Sets preset selected dates |
setSpecial | special (Array or String) | Object | Sets special dates |
showDate | date (String or Object) | Object | Shows specified date |
setShow | show (String or Object) | Object | Sets date to show |
setMinDate | date (String or Object) | Object | Sets minimum selectable date |
setMaxDate | date (String or Object) | Object | Sets maximum selectable date |
destroy | - | - | Destroys the calendar component |
Events
Section titled “Events”Event | Description |
---|---|
onCancel | Triggered when cancel button is clicked |
onToday | Triggered when today button is clicked |
onClear | Triggered when clear button is clicked |
onDone | Triggered when done button is clicked |
onDayClick | Triggered when a day is clicked |
onDrawDay | Triggered when a day is drawn |
onDrawMonth | Triggered when a month is drawn |
onDrawYear | Triggered when a year is drawn |
onWeekDayClick | Triggered when a week day is clicked |
onWeekNumberClick | Triggered when a week number is clicked |
onMonthChange | Triggered when month is changed |
onYearChange | Triggered when year is changed |
onTimeChange | Triggered when time is changed |
onHoursChange | Triggered when hours are changed |
onMinutesChange | Triggered when minutes are changed |
onCalendarCreate | Triggered when calendar is created |
Styling with CSS Variables
Section titled “Styling with CSS Variables”The Calendar component can be styled using the following CSS variables:
Variable | Default (Light) | Dark Mode | Description |
---|---|---|---|
—calendar-background | #ffffff | #2b2d30 | Background color of the calendar |
—calendar-header-background | #fafafa | #43454a | Background color of the calendar header |
—calendar-header-color | #191919 | #dfe1e5 | Text color of the calendar header |
—calendar-weekday-background | #f8f8f7 | #414245 | Background color of weekday row |
—calendar-weekday-color | #191919 | #dfe1e5 | Text color of weekday row |
—calendar-border-color | #dddddd | #414245 | Border color of the calendar |
—calendar-color | #191919 | #dfe1e5 | Text color of the calendar |
—calendar-day-border-color | #e8e8e8 | #4a4d51 | Border color of days |
—calendar-exclude-day-background | #ffffff | #2b2d30 | Background color of excluded days |
—calendar-exclude-day-color | #aaa | #818181 | Text color of excluded days |
—calendar-today-day-background | #56c30f | #56c30f | Background color of today |
—calendar-today-day-color | #fff | #fff | Text color of today |
—calendar-border-radius | 6px | 6px | Border radius of the calendar |
Example of Custom Styling
Section titled “Example of Custom Styling”/* Custom styling for a specific calendar */#myCustomCalendar { --calendar-background: #f0f8ff; --calendar-header-background: #1e88e5; --calendar-header-color: #ffffff; --calendar-today-day-background: #ff5722; --calendar-border-radius: 12px;}
Available CSS Classes
Section titled “Available CSS Classes”Base Classes
Section titled “Base Classes”.calendar
- Main calendar container.compact
- Compact calendar.day-border
- Calendar with day borders
Component Classes
Section titled “Component Classes”.calendar-header
- Calendar header.calendar-content
- Calendar content area.calendar-footer
- Calendar footer.calendar-time
- Time selection area
State Classes
Section titled “State Classes”.selected
- Selected date.excluded
- Excluded date.today
- Today’s date.special
- Special date.outside
- Date outside current month.weekend
- Weekend date
Accessibility
Section titled “Accessibility”The Calendar component includes proper semantics for improved accessibility:
- Proper ARIA roles and attributes for interactive elements
- Keyboard navigation support
- Screen reader friendly structure
- High contrast support through CSS variables
Best Practices
Section titled “Best Practices”- Use appropriate date formats for your target audience
- Provide clear visual indication of selected dates
- Use the
minDate
andmaxDate
options to limit date selection when appropriate - Consider using the
exclude
option for dates that should not be selectable - Implement appropriate event handlers to respond to user interactions
- Use CSS variables for consistent styling across your application