The calendar component is a web component that displays a calendar with the ability to select a date.
The calendar component provides a visual date picker interface with full keyboard navigation support. It's built using the dayjs library for date manipulation and offers comprehensive customization options including date ranges, localization, and custom disabled date functions.
The calendar component is using the dayjs library to handle dates. The best way to use the calendar component if you are using the dayjs library in your project. The component settings are properties, not attributes, so you have to set them in JavaScript.
The calendar component can be used to select a date. By default, it displays the current month and no date is selected.
The value
property can be used to set the selected date. The calendar will automatically navigate to the month containing the selected date.
HTML
Js
const calendar = document.querySelector('dap-ds-calendar')
calendar.value = dayjs().add(1, 'day')
The currentDate
property can be used to set the currently visible month and year. This is useful for displaying a specific month without selecting a date.
HTML
Js
const calendar = document.querySelector('dap-ds-calendar')
calendar.currentDate = new Date('2022-08-15T22:00:00.000Z')
calendar.value = dayjs('2022-08-13T22:00:00.000Z')
The minDate
and maxDate
properties can be used to restrict the selectable date range. Dates outside this range will be disabled and navigation will be limited to the allowed range.
In this example, the minDate
is set to the previous month and the maxDate
is set to the next month, so navigation is restricted to a 3-month window.
HTML
Js
const calendar = document.querySelector('dap-ds-calendar')
calendar.minDate = dayjs().add(-1, 'month')
calendar.maxDate = dayjs().add(1, 'month')
calendar.value = dayjs()
The disabledDate
property accepts a function that determines if a specific date should be disabled. The function receives a Dayjs
object and should return true
if the date should be disabled.
In this example, the disabledDate
function disables weekends (Saturday and Sunday).
HTML
JS
const calendar = document.querySelector('dap-ds-calendar')
calendar.disabledDate = (date) => date.day() === 0 || date.day() === 6
The locale
property can be used to set the locale of the calendar, affecting month names, weekday names, and date formatting. The component automatically detects the browser's locale if not specified.
Supported locales are en
(English) and hu
(Hungarian).
HTML
Hungarian locale
English locale
Js
const calendar = document.querySelector('dap-ds-calendar')
calendar.locale = 'hu'
calendar.value = dayjs().add(1, 'day')
- ARIA Labels: Navigation buttons and select controls have descriptive labels
- Keyboard Navigation: Full keyboard support for date selection and navigation
- Screen Reader Support: Proper ARIA attributes for grid navigation
- Focus Management: Clear focus indicators and logical tab order
- Disabled State: Proper ARIA attributes for disabled dates
- Use with dayjs: The component is designed to work with dayjs objects for optimal performance
- Set reasonable date ranges: Use
minDate
andmaxDate
to prevent users from navigating to irrelevant dates - Provide clear labels: Use descriptive labels for better accessibility
- Handle events: Always listen for
dds-change
events to update your application state - Consider locale: Set the appropriate locale for your users' region
const calendar = document.querySelector('dap-ds-calendar')
calendar.minDate = dayjs().subtract(1, 'year')
calendar.maxDate = dayjs().add(1, 'year')
const calendar = document.querySelector('dap-ds-calendar')
calendar.disabledDate = (date) => {
const day = date.day()
return day === 0 || day === 6 // Disable weekends
}
const calendar = document.querySelector('dap-ds-calendar')
document.querySelector('#locale-selector').addEventListener('change', (e) => {
calendar.locale = e.target.value
})
import { DapDSCalendar } from 'dap-design-system/dist/dds'
import { DapDSCalendarReact } from 'dap-design-system/dist/react'
Property | Type | Default | Description |
---|---|---|---|
value | Dayjs | The value of the calendar. | |
currentDate | Dayjs | dayjs() | The current visible date of the calendar. Only the month and year are considered. |
minDate | Dayjs | dayjs().subtract(50, 'year') | The minimum date of the calendar. Only the month and year are considered. |
maxDate | Dayjs | dayjs().add(50, 'year') | The maximum date of the calendar. Only the month and year are considered. |
disabledDate | Function | () => false | The function to determine if the date is disabled. |
locale | string | dayjs.locale() | The locale of the calendar. |
Name | Description |
---|---|
(default) | The content of the calendar. |
Event Name | Description | Type |
---|---|---|
dds-change | Fired when the calendar value changes. | {value: Dayjs } |
Part Name | Description |
---|---|
base | The main calendar container. |
header | The header of the calendar. |
body | The body of the calendar. |
Property Name | Description |
---|---|
--dds-calendar-display | The display property of the calendar container. Default is flex. |
--dds-calendar-isolation | The isolation property of the calendar. Default is isolate. |
--dds-calendar-block-display | The display property of the calendar block. Default is block. |
--dds-calendar-transition | The transition property for the calendar. Default is 'all 0.2s ease-in-out'. |
--dds-calendar-header-display | The display property of the calendar header. Default is grid. |
--dds-calendar-header-grid-flow | The grid-auto-flow property of the calendar header. Default is column. |
--dds-calendar-header-width | The width of the calendar header. Default is 100%. |
--dds-calendar-header-gap | The gap between header items. Default is the design system's spacing-100. |
--dds-calendar-select-min-height | The minimum height of the select trigger. Default is auto. |
--dds-calendar-select-max-height | The maximum height of the select trigger. Default is 32px. |
--dds-calendar-select-padding | The padding of the select trigger. Default is the design system's spacing-200. |
--dds-calendar-select-border-radius | The border radius of the select trigger. Default is the design system's radius-rounded. |
--dds-calendar-select-border-color | The border color of the select trigger. Default is the design system's border-neutral-transparent-interactive. |
--dds-calendar-select-background | The background color of the select trigger. Default is the design system's button-subtle-background-enabled. |
--dds-calendar-select-color | The text color of the select trigger. Default is the design system's button-subtle-text-enabled. |
--dds-calendar-select-font-size | The font size of the select trigger. Default is the design system's font-sm. |
--dds-calendar-select-font-style | The font style of the select trigger. Default is normal. |
--dds-calendar-select-font-weight | The font weight of the select trigger. Default is the design system's font-weight-bold. |
--dds-calendar-nav-button-margin | The margin of the navigation buttons. Default is the design system's spacing-200. |
--dds-calendar-nav-button-color | The color of the navigation button icons. Default is the design system's button-subtle-icon-enabled. |
Property | Type | Default | Description |
---|---|---|---|
value | Dayjs | The value of the calendar cell. | |
selected | boolean | false | Whether the calendar cell is selected. |
disabledDay | boolean | false | Whether the calendar cell is disabled. |
today | boolean | false | Whether the calendar cell is today. |
outOfRange | boolean | false | Whether the calendar cell is out of range. |
header | boolean | false | Whether the calendar cell is a date header. |
focused | boolean | false | Whether the calendar cell is focused. |
Name | Description |
---|---|
(default) | The content of the calendar cell. |
No custom events available.
Part Name | Description |
---|---|
base | The main calendar cell container. |
today-mark | The today mark of the calendar cell. |
No CSS custom properties available.