| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
<Calendar aria-label="Date" defaultValue={today(getLocalTimeZone())}>
<CalendarHeader>
<Button slot="previous" variant="quiet" isIconOnly>
<ChevronLeftIcon />
</Button>
<CalendarHeading />
<Button slot="next" variant="quiet" isIconOnly>
<ChevronRightIcon />
</Button>
</CalendarHeader>
<CalendarGrid>
<CalendarGridHeader>{(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}</CalendarGridHeader>
<CalendarGridBody>{(date) => <CalendarCell date={date} />}</CalendarGridBody>
</CalendarGrid>
</Calendar>npx shadcn@latest add @dotui/calendarUse Calendar to allow users to select a single date value.
import { Calendar } from "@/components/ui/calendar";<Calendar aria-label="Date" />Use RangeCalendar to let users select a contiguous range of dates.
import { RangeCalendar } from "@/components/ui/calendar";<RangeCalendar aria-label="Date range" />For full control, compose the calendar from its parts.
import {
CalendarHeader,
CalendarGrid,
CalendarGridHeader,
CalendarHeaderCell,
CalendarGridBody,
CalendarCell,
} from "@/components/ui/calendar";<Calendar>
<CalendarGrid>
<CalendarHeader>
<Button slot="previous"><ChevronLeftIcon /></Button>
<CalendarHeading />
<Button slot="next"><ChevronRightIcon /></Button>
</CalendarHeader>
<CalendarGridBody>
<CalendarGridHeader>
{day => <CalendarHeaderCell />}
</CalendarGridHeader>
<CalendarGridBody>
{date => <CalendarCell date={date} />}
</CalendarGridBody>
</CalendarGrid>
</Calendar>Calendar values use @internationalized/date objects. Pass defaultValue for uncontrolled state, or value with onChange to control it.
import { parseDate } from "@internationalized/date";
<Calendar defaultValue={parseDate("2020-02-03")} />;import { useState } from "react";
import { parseDate } from "@internationalized/date";
import type { DateValue } from "react-aria-components";
const [value, setValue] = useState<DateValue>(parseDate("2020-02-03"));
<Calendar value={value} onChange={setValue} />;| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
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 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
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 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
We are closed on weekends
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| س | ح | ن | ث | ر | خ | ج |
|---|---|---|---|---|---|---|
٣٠ | ٣١ | ١ | ٢ | ٣ | ٤ | ٥ |
٦ | ٧ | ٨ | ٩ | ١٠ | ١١ | ١٢ |
١٣ | ١٤ | ١٥ | ١٦ | ١٧ | ١٨ | ١٩ |
٢٠ | ٢١ | ٢٢ | ٢٣ | ٢٤ | ٢٥ | ٢٦ |
٢٧ | ٢٨ | ٢٩ | ٣٠ | ١ | ٢ | ٣ |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 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 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 1$100 | 2$100 | 3$100 | 4$100 | 5$100 | 6$120 |
7$120 | 8$100 | 9$100 | 10$100 | 11$100 | 12$100 | 13$120 |
14$120 | 15$100 | 16$100 | 17$100 | 18$100 | 19$100 | 20$120 |
21$120 | 22$100 | 23$100 | 24$100 | 25$100 | 26$100 | 27$120 |
28$120 | 29$100 | 30$100 | 1 | 2 | 3 | 4 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
31 | 1 | 2 Standup | 3 | 4 Design review1:1 with Sam+2 more | 5 Sprint planning | 6 |
7 Ship v2.1 | 8 Customer call | 9 | 10 | 11 Team offsite | 12 | 13 Board meeting |
14 | 15 | 16 | 17 | 18 Launch review | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 1 | 2 | 3 | 4 |
4 events
A calendar displays one or more date grids and allows users to select a single date.
| Prop | Type | Default | |
|---|---|---|---|
ReactNode | function | — | ||
((identifier: CalendarIdentifier) => Calendar) | — | ||
DateValue | null | — | ||
union | — | ||
DateValue | null | — | ||
((date: DateValue) => boolean) | — | ||
boolean | false | ||
boolean | false | ||
PageBehavior | visible | ||
DOMRenderFunction<"div", CalendarRenderProps<"single">> | — | ||
"center" | "end" | "start" | 'center' | ||
DateDuration | {months: 1} | ||
number | — | ||
"single" | "single" | ||
T | null | — | ||
T | null | — | ||
function | — | ||
A range calendar displays one or more date grids and allows users to select a contiguous range of dates.
| Prop | Type | Default | |
|---|---|---|---|
boolean | — | ||
ReactNode | function | — | ||
"clear" | "reset" | "select" | 'select' | ||
((identifier: CalendarIdentifier) => Calendar) | — | ||
DateValue | null | — | ||
union | — | ||
DateValue | null | — | ||
union | — | ||
boolean | false | ||
boolean | false | ||
PageBehavior | visible | ||
DOMRenderFunction<"div", RangeCalendarRenderProps> | — | ||
"center" | "end" | "start" | 'center' | ||
DateDuration | {months: 1} | ||
number | — | ||
RangeValue<T> | null | — | ||
RangeValue<T> | null | — | ||
function | — | ||
Missing description.
Supports all header attributes.
A calendar grid displays a single grid of days within a calendar or range calendar which can be keyboard navigated and selected by the user.
| Prop | Type | Default | |
|---|---|---|---|
union | — | ||
DOMRenderFunction<"table", undefined> | — | ||
"long" | "narrow" | "short" | "narrow" | ||
A calendar cell displays a date cell within a calendar grid which can be selected by the user.
| Prop | Type | Default | |
|---|---|---|---|
"accent" | "primary" | 'accent' | ||
ReactNode | function | — | ||
CalendarDate | — | ||
DOMRenderFunction<"div", CalendarCellRenderProps> | — | ||
Last updated on 6/4/2026