Calendar

Choose a single date from a month grid. Calendar owns date selection; DateNavigator steps an existing context, and DatePicker adds editable entry and an anchored layer.

Appointment

October 2026

S M T W T F S

Today is outlined, the chosen date keeps its selected plate, and weekends are unavailable. Arrow keys inspect dates; Enter or Space selects. Single arrows step months; double arrows step years.

State channels

State Driver Meaning
Today aria-current="date" Host-local today; independent of selection.
Selected selection.bg Persists through hover, press and disabled state.
Focused focus.ring One roving date; navigation does not commit.
Unavailable aria-disabled="true" Discoverable by arrows; activation is guarded.
Outside month text.muted Adjacent dates remain usable when policy allows.
Readonly / disabled data-readonly / data-disabled Readonly permits navigation; disabled removes every button from focus.

Usage

Verdict Rule
Do Use Calendar for choosing one Gregorian date; use DateNavigator for stepping an existing period and DatePicker for field entry plus a calendar.
Do Keep ISO YYYY-MM-DD date-only values separate from display formatting and time zones; the host supplies locale, today, availability and inclusive limits.
Do Keep today, selected date, outside-month date and keyboard focus independent. Persistent selection uses selection.bg and survives hover, press and disabled state.
Do Keep one roving date button in the tab sequence. Arrow navigation moves focus without selecting; Enter or Space selects only an available day.
Do Keep unavailable dates visible and arrow-focusable with aria-disabled so their full date and state can be discovered; guard every activation.
Do Announce the displayed month through a polite heading; use narrow, single-letter weekday labels while preserving their full accessible names.
Do Respect locale week order or an explicit first-day override. PageUp/PageDown preserves the day where possible and clamps to the destination month and inclusive limits.
Do Center the month between previous and next arrow pairs. Single chevrons step one month; double chevrons step one year. Header actions share the date-control ink-only hover and inset pressed plate; date cells keep standalone ghost states.
Don’t Do not interpret readonly as disabled: readonly permits inspection and navigation but never changes the committed value.
Don’t Do not imply range selection, time selection or non-Gregorian calendars; each requires an explicit extension.