Calendar

A month to pick a day or a range from: a booking's date, a stylist's time off. Round days on the button scale, the selected one black, weeks from Monday. Built on the vendored react-day-picker calendar.

Playground

Examples are pinned to October 2026, with today on Tuesday the 13th.

October 2026
Calendar
Unavailable

Picking a day

The selected day is a black disc with white numerals. Today sits on a faint ink disc in a heavier weight, so it never competes with the selection. Days of the months either side stay visible and quiet, and can be picked.

October 2026

Sizes

Days follow the button scale: md 36px by default, a comfortable touch target in a popover. sm is 32px, for a narrow side panel. On a touch screen each day's hit area reaches up and down into the gap between weeks, to the 40px touch floor.

October 2026
October 2026

Availability

Days a client can't book are disabled: they dim and can't be focused or picked. Here, the past, Sundays when the salon is closed, and Friday the 16th, fully booked.

October 2026

A range

mode="range" picks a start and an end, like a stylist's week off. The ends are black; the days between share a quiet ink band.

October 2026

In a popover

The dashboard's date picker: a secondary button that names the day opens the month in a flush popover, and picking a day closes it. Press it.

Language

Pass the page's locale from react-day-picker/locale so month and weekday names match the rest of the page. Without it they stay in English.

október 2026

API reference

PropTypeDefaultDescription
size"sm" | "md""md"The day's size: 32 or 36px, on the button scale.
mode"single" | "multiple" | "range"—What a click selects. Without a mode the month is read-only.
selectedDate | Date[] | DateRange—The selection, matching the mode. Without onSelect it is only the starting value.
onSelect(selected, day, modifiers, event) => void—Called with the new selection.
requiredbooleanfalseClicking the selected day keeps it rather than clearing it.
disabledMatcher | Matcher[]—Days that can't be picked: dates, { before }, { after }, { dayOfWeek } or a function.
weekStartsOn0 – 61Monday, as in every Okami market. 0 is Sunday.
localeLocaleEnglishFrom react-day-picker/locale (sk, cs, enGB): month and weekday names.
defaultMonthDatetoday's monthThe month shown first.
classNamestring—Layout only. The calendar has no surface of its own.

Every other DayPicker prop passes through: month, numberOfMonths, startMonth, endMonth, showOutsideDays, …

Guidelines

  • Disable what can't be booked: closed days, the past, days with no free slot. Don't let a client pick a day only to be told it is full.
  • Black marks the selection and nothing else. Don't colour weekends, holidays or busy days. Disable them, or say it in words beside the calendar.
  • Say the chosen day in words next to it (“Thursday 15 October”), in the page's language. A disc in a grid is easy to misread.
  • Put a calendar in a popover or on a surface; it has none of its own. In a popover, use flush and close it on pick.