Calendar
Grid primitive for date selection. Wrapper over
react-day-picker (opens in a new tab) v9, dressed with Apollion
tokens (colors, spacing, radius, animation).
It is a grid component — it does not handle positioning, popover or trigger.
When you need a calendar anchored to an input (the most common case), use
InputDate, which wraps the Calendar in a
@floating-ui/react popover.
When to use
| ✅ Use when… | 🚫 Avoid when… |
|---|---|
|
|
Single
Selection of a single date. Click on days to select; use the header arrows to navigate between months.
Selected: 5/15/2026
| dom | seg | ter | qua | qui | sex | sab |
|---|---|---|---|---|---|---|
const [date, setDate] = useState();
<Calendar mode="single" selected={date} onSelect={setDate} />;Range
Interval selection, with 2 months visible simultaneously. Click a start date + an end date to define the range.
Select a range
| dom | seg | ter | qua | qui | sex | sab |
|---|---|---|---|---|---|---|
| dom | seg | ter | qua | qui | sex | sab |
|---|---|---|---|---|---|---|
const [range, setRange] = useState();
<Calendar mode="range" selected={range} onSelect={setRange} numberOfMonths={2} />;Year navigation (caption dropdown)
captionLayout="dropdown" replaces the "May 2026" caption with two
dropdowns (month + year). Use it together with startMonth + endMonth to
limit the range of available years.
captionLayout="dropdown" enables month + year dropdowns in the header — useful for distant dates.
| dom | seg | ter | qua | qui | sex | sab |
|---|---|---|---|---|---|---|
<Calendar
mode="single"
selected={date}
onSelect={setDate}
captionLayout="dropdown"
startMonth={new Date(1970, 0, 1)}
endMonth={new Date(2100, 11, 31)}
/>Locale
Defaults to ptBR from date-fns/locale. Accepts any other date-fns
locale.
import { enUS } from 'date-fns/locale';
<Calendar mode="single" selected={date} onSelect={setDate} locale={enUS} />;Disabled dates
Accepts the same Matcher syntax as react-day-picker v9 — single
Date, range, predicate function, or array.
Weekends and days before 05/15 are disabled.
| dom | seg | ter | qua | qui | sex | sab |
|---|---|---|---|---|---|---|
<Calendar mode="single" selected={date} onSelect={setDate} disabled={[{ before: new Date() }, { dayOfWeek: [0, 6] }]} />
Calendarforwards the react-day-picker props (accessed via vendor). See also the layout props accepted by all components.
See also
- Storybook story: Components / Calendar
react-day-pickerdocumentation: https://daypicker.dev/ (opens in a new tab)- Input + popover wrapper:
InputDate Dropdownalso uses@floating-ui/react— a reference pattern for popover/menu positioning.