Range Calendar

Two-click date range on bits-ui RangeCalendar. Cells between start and end fill as the selection grows — end-points round, inner days stay flush — so the span reads as one continuous ribbon.

Usage

June 2026
SuMoTuWeThFrSa
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

Same range mechanics, swappable month + year selects for quick navigation.

SuMoTuWeThFrSa
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

Keyboard navigation

Tab into the grid, arrow-keys move day by day, Enter sets the start date — keep arrowing and press Enter again to set the end. Reduced-motion friendly: cells animate via CSS-var transitions that zero out under prefers-reduced-motion: reduce.

June 2026
SuMoTuWeThFrSa
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
←/→
Previous / next day
↑/↓
Previous / next week
PgUp / PgDn
Previous / next month
Enter
Set start (first press), set end (second press)

Source

June 2026
SuMoTuWeThFrSa
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

RangeCalendar props

Inherits bits-ui RangeCalendar.Root props via spread. Cells between the start and end dates render the `range-fill` state; end-points carry `range-start` / `range-end`.

PropTypeDescription
{ start?: DateValue; end?: DateValue } (bindable)The selected range. `start` is set on first click, `end` on the second.
DateValue (bindable)The visible month anchor when the range is empty.
'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years'Heading style — plain label, full dropdown, or one of each.
ButtonVariantVariant applied to the Prev/Next nav buttons.
stringBCP-47 tag used for weekday names, month labels, and number formatting.
'narrow' | 'short' | 'long'Intl.DateTimeFormat option for the weekday header row.
booleanWhen true, adjacent-month days render but are not interactive.
Snippet<[{ day: DateValue; outsideMonth: boolean }]>Optional render override for a single cell. Falls back to `RangeCalendar.Day`.
stringMerged onto the root container via tailwind-merge.