Date Range Picker

Composable date range picker with root, trigger, popover content, calendar, header, grid, summary, footer, clear and preset parts, plus a shared state hook. Compact inline and dropdown compositions, direct month and year selection, and full keyboard navigation.

Preview

Install

Add it with the shadcn CLI, or copy the source manually.

$ bunx --bun shadcn add @beui/date-range-picker

API Reference

DateRangePicker

value?
DateRange | null
—
defaultValue?
DateRange | null
—
onValueChange?
((range: DateRange | null) => void)
—
defaultMonth?
string
—
min?
string
—
max?
string
—
isDateDisabled?
((date: string) => boolean)
—
presets?
DateRangePreset[]
—
locale?
string
—
label?
string
—
disabled?
boolean
—
autoFocus?
boolean

Move focus to the active date on mount, for use inside a popover.

—
showSummary?
boolean

Show the start/end summary above the calendar. Default true.

—
className?
string
—
children?
ReactNode

Compose custom controls; omitted children render the inline calendar.

—
open?
boolean
—
defaultOpen?
boolean
—
onOpenChange?
((open: boolean) => void)
—
closeOnSelect?
boolean

Close an open popover after a complete range or preset. Default false.

—

DateRangePickerCalendar

showSummary?
boolean
—
className?
string
—

DateRangePickerSummary

className?
string
—

DateRangePickerHeader

className?
string
—

DateRangePickerGrid

className?
string
—

DateRangePickerSelection

className?
string
—

DateRangePickerClear

className?
string
—

DateRangePickerFooter

className?
string
—

DateRangePickerPresets

className?
string
—

DateRangePickerPreset

value
DateRange
—
label
string

Accessible preset name and selection announcement.

—
className?
string
—

DateRangePickerTrigger

placeholder?
string
Select dates
className?
string
—

DateRangePickerContent

autoFocus?
boolean

Move focus to the active calendar date when opened. Default true.

true
side?
"bottom" | "top"
—
align?
"start" | "end"
—
sideOffset?
number

Gap between trigger and panel, in px. Default 8.

—
radius?
number

Panel corner radius, in px. Default 16.

—
shadow?
boolean

Draw the surface shadow. Default true.

—
onOpenAutoFocus?
((content: HTMLDivElement) => void)

Runs after the portalled surface is positioned and visible.

—
className?
string
—

DateRangePickerDropdown

placeholder?
string
—
triggerClassName?
string
—
calendarClassName?
string
—
defaultValue?
DateRange | null
—
autoFocus?
boolean

Move focus to the active date on mount, for use inside a popover.

true
className?
string
—
max?
string
—
min?
string
—
label?
string
—
value?
DateRange | null
—
disabled?
boolean
—
onValueChange?
((range: DateRange | null) => void)
—
open?
boolean
—
closeOnSelect?
boolean

Close an open popover after a complete range or preset. Default false.

—
defaultMonth?
string
—
isDateDisabled?
((date: string) => boolean)
—
presets?
DateRangePreset[]
—
locale?
string
—
showSummary?
boolean

Show the start/end summary above the calendar. Default true.

false
defaultOpen?
boolean
—
onOpenChange?
((open: boolean) => void)
—

Updated