Skip to Content
ComponentsDatePicker

DatePicker

A calendar component for selecting single dates, date ranges, or years.

Import

import { DatePicker } from "@raydenui/ui";

Usage

Basic (Single Date)

M
T
W
T
F
S
S
const [date, setDate] = useState<Date | null>(null); <DatePicker value={date} onChange={setDate} />
M
T
W
T
F
S
S
<DatePicker value={date} onChange={setDate} showFooter onDone={() => closeModal()} onClear={() => setDate(null)} />

Date Range

March 2026
M
T
W
T
F
S
S
const [range, setRange] = useState<[Date | null, Date | null]>([null, null]); <DatePicker mode="range" rangeValue={range} onRangeChange={setRange} />

Year Picker

2020–2039
const [date, setDate] = useState<Date | null>(new Date()); <DatePicker mode="year" value={date} onChange={setDate} />

With Min/Max Dates

const minDate = new Date(2024, 0, 1); // Jan 1, 2024 const maxDate = new Date(2024, 11, 31); // Dec 31, 2024 <DatePicker value={date} onChange={setDate} minDate={minDate} maxDate={maxDate} />

In a Form

const [checkIn, setCheckIn] = useState<Date | null>(null); const [checkOut, setCheckOut] = useState<Date | null>(null); <div className="space-y-4"> <div> <label>Check-in Date</label> <DatePicker value={checkIn} onChange={setCheckIn} /> </div> <div> <label>Check-out Date</label> <DatePicker value={checkOut} onChange={setCheckOut} minDate={checkIn ?? undefined} /> </div> </div>
const [range, setRange] = useState<[Date | null, Date | null]>([null, null]); const [isOpen, setIsOpen] = useState(false); <DatePicker mode="range" rangeValue={range} onRangeChange={setRange} showFooter onDone={() => setIsOpen(false)} onClear={() => setRange([null, null])} />

Props

PropTypeDefaultDescription
mode"single" | "range" | "year""single"Picker mode
valueDate | null—Selected date (single/year mode)
rangeValue[Date | null, Date | null]—Selected range (range mode)
onChange(date: Date | null) => void—Single date callback
onRangeChange(range: [Date | null, Date | null]) => void—Range change callback
showFooterbooleanfalseShow Clear/Done buttons
onDone() => void—Done button callback
onClear() => void—Clear button callback
minDateDate—Earliest selectable date
maxDateDate—Latest selectable date
classNamestring—Additional CSS classes

Modes

Single Mode

  • Standard calendar with month/year navigation
  • Click a day to select it
  • Selected date shows with primary color background
  • Today indicator (small dot)

Range Mode

  • Dual calendar view (side-by-side months)
  • Click to set start date, click again to set end date
  • Range visualized with colored start/end and highlighted middle dates
  • Automatically handles reversed selections

Year Mode

  • 20-year grid (4 columns x 5 rows)
  • Navigate between 20-year ranges
  • Click to select a year

Day States

StateAppearance
DefaultNormal text color
SelectedPrimary background, white text
TodayNormal with dot indicator
DisabledGrey text, not clickable
Start RangePrimary background, left-rounded
End RangePrimary background, right-rounded
Mid RangeLight primary background

Accessibility

  • Full keyboard navigation with arrow keys
  • Days outside min/max range are disabled
  • Clear visual indicators for selected states
  • Buttons have proper focus states
Last updated on