Calendar

A month grid for picking a day or a range, with limits and disabled days.
Stable
Web
iOS
Android
@advui/core
Source

Single day

March 2026
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

Installation

pnpm
pnpm add @advui/core
npm
npm install @advui/core

Usage

import { Calendar } from '@advui/core'

<Calendar value={day} onValueChange={setDay} min={new Date()} />

Examples

Range with disabled weekends

April 2026
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

API reference

Calendar

PropTypeDefaultDescription
mode'single' | 'range''single'Pick one day, or a start and an end.
valueDate | DateRange | null—The picked day, or `{ start, end }` in range mode, when you control it. Only the calendar day is used, not the time.
defaultValueDate | DateRange | null—The picked day or range at first, when the calendar manages it.
onValueChange(value) => void—Called when a day is picked.
monthDate—The visible month, when you control it.
defaultMonthDate—The month shown first. Defaults to the picked day or today.
onMonthChange(month: Date) => void—Called when the visible month changes.
minDate—Earliest selectable day.
maxDate—Latest selectable day.
isDateDisabled(date: Date) => boolean—Makes days unselectable, e.g. weekends.
weekStartsOn0 | 1 | 2 | 3 | 4 | 5 | 60First day of the week (0 = Sunday).
localestring—BCP 47 locale for month and day names. Defaults to the device.
previousMonthLabelstring'Previous month'Accessible name of the previous-month button.
nextMonthLabelstring'Next month'Accessible name of the next-month button.
todayLabelstring'today'Read after today’s date on iOS and Android ("…, today"), which have no `aria-current`.

Accessibility

  • On web it is a WAI-ARIA grid labelled by the month name, with one Tab stop.
  • Every day is named with its full date ("Monday, 28 September 2026"); the picked days have aria-selected, today has aria-current="date" (on iOS and Android, where that is not read, its name ends in todayLabel), and days outside the limits have aria-disabled.
  • The month name is a polite live region, so changing month is announced.
Keyboard interactions
KeyAction
ArrowLeft / ArrowRightPrevious / next day.
ArrowUp / ArrowDownSame day of the previous / next week.
Home / EndFirst / last day of the week.
PageUp / PageDownPrevious / next month (with Shift: year).
Enter / SpacePicks the focused day.

Platform notes

iOS
Each day is a button, so VoiceOver swipes through the days in order.
Android
Each day is a button, so TalkBack swipes through the days in order.
Since v0.5.0Last updated Nov 2, 2026Edit this page on GitHub