RangeCalendar

A range calendar displays a grid of days in one or more months and allows users to select a contiguous range of dates.

Usage

October to November 2025

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
27
28
29
30
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
import { BsRangeCalendar } from '@workspace/ui/components/Calendar'
import dayjs from 'dayjs'

export function RangeCalendarDemo() {
    return (
        <BsRangeCalendar
            defaultValue={{
                start: dayjs().format('YYYY-MM-DD'),
                end: dayjs().add(10, 'days').format('YYYY-MM-DD'),
            }}
        />
    )
}

Examples

Default

October to November 2025

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
27
28
29
30
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
import { BsRangeCalendar } from '@workspace/ui/components/Calendar'

export function RangeCalendarDefault() {
    return <BsRangeCalendar />
}

Controlled

October to November 2025

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
27
28
29
30
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
No value
'use client'

import { BsRangeCalendar, BsRangeCalendarValue } from '@workspace/ui/components/Calendar'
import { useState } from 'react'

export function RangeCalendarControlled() {
    const [value, setValue] = useState<BsRangeCalendarValue>()

    return (
        <div className="flex flex-col gap-2">
            <BsRangeCalendar value={value} onChange={setValue} />
            <pre className="font-mono text-xs bg-background-secondary p-2 rounded-md border">
                {value ? JSON.stringify(value, null, 2) : 'No value'}
            </pre>
        </div>
    )
}

Unstyled

October to November 2025

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
27
28
29
30
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
import { BsRangeCalendar } from '@workspace/ui/components/Calendar'

export function RangeCalendarUnstyled() {
    return <BsRangeCalendar variant="unstyled" />
}

With Min/Max Date

October to November 2025

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
27
28
29
30
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
import { BsRangeCalendar } from '@workspace/ui/components/Calendar'
import dayjs from 'dayjs'

export function RangeCalendarMinMax() {
    return (
        <BsRangeCalendar
            minValue={dayjs().format('YYYY-MM-DD')}
            maxValue={dayjs().add(20, 'days').format('YYYY-MM-DD')}
        />
    )
}