MonthList, the vertically-scrolling
month list. It takes the selection props and renders the selection as a
background band across the span (no per-day circle), so it stays distinct from
the “today” badge.
Range selection with useDateRange
useDateRange owns the start/end state machine: the first press sets the start,
the second sets the end (auto-swapping if you tap an earlier day), and a third
press starts over.
onSelectDrag to useDateRange’s selectRange.
Single and multiple days
selectedDates marks discrete days. Drive it from onPressDay:
Disabled days
minDate, maxDate, and isDateDisabled render days dimmed, ignore taps, and
keep them out of any selection (drag included). Pass the same constraints to
useDateRange so a rejected day never opens a range:
Selection is a
rangeBackground band over the span; there is no per-day selected circle by
default, so the “today” badge stays distinct. See Theming for the token.