Phoundry UI

DatePicker

DatePicker is a read-only text field that opens the calendar in a popover (single or range). For an inline calendar with time and toggles, see DatePickerAdvanced.

import { DatePicker } from 'phoundry-ui';

Single date

Selected: none

Show code
let date = $state<Date | null>(null);

<DatePicker
  value={date}
  onchange={(d) => date = d}
/>

Date range

Range: none — none

Show code
let start = $state<Date | null>(null);
let end = $state<Date | null>(null);

<DatePicker
  mode="range"
  rangeStart={start}
  rangeEnd={end}
  onrangechange={(s, e) => { start = s; end = e; }}
/>

Trigger size

Same selection; inputSize only affects the field height.

Show code
<DatePicker value={date} onchange={(d) => (date = d)} inputSize="sm" />

Bounds, Monday week, placeholder

Constrained: none

Show code
<DatePicker
  value={date}
  onchange={(d) => (date = d)}
  minDate={new Date(2026, 4, 1)}
  maxDate={new Date(2026, 4, 31)}
  weekStartsOn={1}
  placeholder="Pick a May 2026 date"
/>

DatePicker props

PropTypeDefaultDescription
value Date | nullSelected date (single mode).
rangeStart Date | nullRange start date (range mode).
rangeEnd Date | nullRange end date (range mode).
mode 'single' | 'range''single'Selection mode.
onchange (date: Date) => voidCalled when a single date is selected.
onrangechange (start: Date, end: Date) => voidCalled when a range is completed.
minDate DateEarliest selectable date.
maxDate DateLatest selectable date.
disabled booleanfalseDisable the input and picker.
weekStartsOn 0 | 10First day of week: 0 = Sunday, 1 = Monday.
placeholder string'Select date'Placeholder when empty.
inputSize 'sm' | 'md' | 'lg''md'Size of the read-only trigger field (passed to TextInput).
class stringAdditional CSS classes on the wrapper.

Usage tips

  • Use minDate and maxDate to constrain selectable dates.
  • In range mode, the first click sets the start and the second click sets the end.
  • Set weekStartsOn={1} for Monday-first calendars (ISO standard).