Skip to content

DatePicker

Date selection component with calendar dropdown, supporting date, month, and year modes.

Also known as: calendar, date selector, date input, month picker, year picker

View in Storybook

When to use

  • Selecting dates, months, or years. Supports date range constraints with minDate/maxDate.
  • Use mode="month" or mode="year" for less granular selection.

Import

tsx
import { DatePicker } from '@vacano/ui'

Usage

tsx
const [date, setDate] = useState<Date | null>(null)

<DatePicker
  value={date}
  onChange={setDate}
  placeholder="Select date"
/>

With Label

tsx
<DatePicker
  label="Birth Date"
  value={date}
  onChange={setDate}
/>

Selection Modes

tsx
// Date selection (default)
<DatePicker mode="date" value={date} onChange={setDate} />

// Month selection
<DatePicker mode="month" value={date} onChange={setDate} />

// Year selection
<DatePicker mode="year" value={date} onChange={setDate} />

Display Format

Uses Go-style date formatting:

tsx
// Day.Month.Year
<DatePicker displayFormat="02.01.2006" value={date} onChange={setDate} />

// Month Year
<DatePicker displayFormat="January 2006" value={date} onChange={setDate} />

// Year-Month-Day
<DatePicker displayFormat="2006-01-02" value={date} onChange={setDate} />

Locale

tsx
<DatePicker locale="ru" value={date} onChange={setDate} />
<DatePicker locale="de" value={date} onChange={setDate} />
<DatePicker locale="en-US" value={date} onChange={setDate} />

Week Start

tsx
// Sunday start
<DatePicker weekStartsOn={0} value={date} onChange={setDate} />

// Monday start
<DatePicker weekStartsOn={1} value={date} onChange={setDate} />

Min/Max Date

tsx
<DatePicker
  value={date}
  onChange={setDate}
  minDate={new Date('2024-01-01')}
  maxDate={new Date('2024-12-31')}
/>

Variants & Sizes

tsx
<DatePicker variant="normal" value={date} onChange={setDate} />
<DatePicker variant="error" value={date} onChange={setDate} />

<DatePicker size="default" value={date} onChange={setDate} />
<DatePicker size="compact" value={date} onChange={setDate} />

Controlled Open State

tsx
const [open, setOpen] = useState(false)

<DatePicker
  value={date}
  onChange={setDate}
  open={open}
  onOpen={() => setOpen(true)}
  onClose={() => setOpen(false)}
/>

Props

PropTypeDefaultDescription
valueDate | null-Selected date
onChange(date: Date | null) => void-Change handler
mode'date' | 'month' | 'year''date'Selection mode
displayFormatstring-Go-style date format (e.g., "02.01.2006", "January 2006")
placeholderstring-Placeholder text when no date selected
localestring-Locale for month/weekday names (e.g., "en-US", "ru", "de")
weekStartsOn0 | 10First day of week (0 = Sunday, 1 = Monday)
minDateDate-Minimum selectable date
maxDateDate-Maximum selectable date
labelstring-Label text
messagestring-Message text below picker (error, hint)
size'compact' | 'default''default'Input size
variant'normal' | 'error''normal'Visual variant
disabledbooleanfalseDisable picker
fullWidthbooleanfalseFull width mode
openboolean-Controlled open state
onOpen() => void-Callback when dropdown opens
onClose() => void-Callback when dropdown closes
portalRenderNodeHTMLElement | null-Portal target for dropdown (for overflow hidden containers)
classNamestring-CSS class for root element
classnamesDatePickerClassNames-Custom class names for inner elements
refRef<HTMLDivElement>-Ref to the root container element
data-test-idstring-Test identifier for automated testing

ClassNames

KeyDescription
triggerTrigger input
calendarCalendar container
headerCalendar header
gridDays/months/years grid
cellIndividual cell

Released under the MIT License.