Skip to content
Zuno UI
Explore components
EXPLORE
Actions
Forms
Layout
Navigation
Data display
Feedback
Overlays
RESOURCES
Components/Calendar

Calendar

Date selection with clear navigation, localization and disabled days; built on react-day-picker.

react-day-picker reference ↗
November 2026

Installation

Run it from the root of a project already set up with zunoui init.

npx zunoui@latest add calendar

Dependencies

What add calendar installs alongside the component. The CLI skips any you already have in a compatible version.

ZUNO registry

  • @zuno/utils

Examples

4 examples · 1 component
calendar
November 2026

Single date

Controlled selection; the footer reports the chosen date for screen readers too.

calendar
November 2026
December 2026

Range across two months

mode="range" with two months side by side; they stack on narrow screens.

calendar
November 2026

Disabled days and limits

Weekends and past days are disabled and navigation stays within three months.

calendar
noviembre 2026

Localized with dropdowns

Spanish locale (Monday first) and month/year dropdowns for distant dates.

API reference

Keeps the props of react-day-picker, plus ZUNO's styles; the table lists the ones you use most.

PropTypeDefault
mode

Selection mode; pair it with selected and onSelect.

"single" | "multiple" | "range"—
selected / onSelect

Controlled selection; the type follows mode.

Date | Date[] | DateRange—
disabled

Days that cannot be selected: dates, ranges, { before }, { after } or { dayOfWeek }.

Matcher | Matcher[]—
startMonth / endMonth

Navigation limits; required context for captionLayout="dropdown".

Date—
numberOfMonths

Months shown side by side (stacked on narrow screens).

number1
captionLayout

Month and year dropdowns for distant dates.

"label" | "dropdown" | "dropdown-months" | "dropdown-years""label"
locale / weekStartsOn

date-fns locale from react-day-picker/locale; weekday names, labels and first day follow it.

Locale / 0–6en-US
timeZone

IANA zone for "today" and the selected dates.

string—
showOutsideDays

Shows the adjacent months' days, muted; off by default with numberOfMonths > 1 to avoid repeated days.

booleantrue with one month
CalendarDayButton

Exported day button; reuse it when you override components.

button—

States

The states that apply to this component and their visual treatment.

StateTreatment
TodayAccent fill and semibold when not selected.
SelectedPrimary fill on the chosen day.
RangeStart and end in primary, the days between in accent with a continuous band.
OutsideAdjacent-month days are muted (showOutsideDays).
DisabledDimmed and not selectable; navigation stops at startMonth/endMonth.
FocusVisible outline on the focused day, managed by the grid's roving focus.

Accessibility

The month is a grid: arrows move by day and week, Page Up/Down by month (Shift for year), Home/End to the week edges; focus is roving and lands on the selected day or today.

Each day has a full accessible label ("Today, Friday, September 25th, 2026, selected") and the navigation buttons are named after the target month.

Disabled days stay focusable for context but cannot be selected; today and the selection are marked with text weight and fill, not color alone.

Localize with locale: month and weekday names, labels and the first day of the week come from the same source. Render it inside a labelled region or popover so users know what date they pick.