Calendar
A fully styled date-picker calendar built on react-day-picker v9. Supports single, multiple, and range selection modes with full token styling — no extra CSS import required.
Built on Radix UI.
- ✓Built on react-day-picker v9
- ✓Single, multiple, and range selection modes
- ✓Full token styling — uses design system colors, border-radius, and spacing
- ✓No CSS import required — all styles applied via className props
- ✓Outside days visible by default, easily hidden via showOutsideDays={false}
- ✓Navigation arrows built with Lucide icons, styled to match Button variants
May 2026
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| 26 | 27 | 28 | 29 | 30 | 1 | 2 |
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 | 1 | 2 | 3 | 4 | 5 | 6 |
import { Calendar }from "@aetherstack/ui"
calendar.tsx
import { Calendar } from "@/components/ui/calendar"
export function CalendarDemo() {
return <Calendar />
}Usage
Single date selection
Controlled single-date picker using the mode="single" prop.
May 2026
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
Date range selection
Range mode highlights a start and end date along with all days in between.
May 2026
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| mode | "single" | "multiple" | "range" | "default" | "default" | Selection mode. Use 'single' for one date, 'multiple' for several, 'range' for a start–end span. |
| selected | Date | Date[] | DateRange | undefined | — | The currently selected date(s). Type depends on the mode prop. |
| onSelect | (value: ...) => void | — | Callback fired when the user selects a date. Receives the new selected value. |
| showOutsideDays | boolean | true | Whether to render days from the previous and next months in the current month grid. |
| disabled | Matcher | Matcher[] | — | Dates or date matchers that should be disabled and non-interactive. |
| className | string | — | Additional class names applied to the root DayPicker element. |
* Required props
Accessibility
- →Uses native button elements for day cells — fully keyboard navigable with arrow keys.
- →Selected and disabled states are communicated via aria-selected and aria-disabled.
- →Navigation buttons include visible focus rings and meet contrast requirements.
- →Screen readers announce month/year via the caption element.