Date Picker A button-triggered date picker popover built on Calendar and Base UI Popover. Supports single, range, and multiple selection, preset shortcuts, stacked or sidebar preset layouts, footer slot, and min/max constraints.
pnpm add @tessinaui/ui react-day-picker
import { DatePicker, createRangePresets } from "@tessinaui/ui" ;
{ /* Single date */ }
< DatePicker mode = "single" selected = {date} onSelect = {setDate} />
{ /* Date + time range with Apply button */ }
< DatePicker
mode = "range"
selected = {range}
onSelect = {setRange}
showDateTime
showTimezone
onApply = {({ start , startTime , end , endTime }) => console. log ({ start, startTime, end, endTime })}
/>
{ /* Date range with presets sidebar */ }
< DatePicker
mode = "range"
selected = {range}
onSelect = {setRange}
presets = { createRangePresets ()}
presetsPosition = "left"
numberOfMonths = { 2 }
/>
Prop Type Default Description mode"single" | "range" | "multiple""single"Selection mode selectedDate | DateRange | Date[]— Controlled selection value onSelect(value) => void— Called when selection changes
Prop Type Default Description placeholderstring"Pick a date"Label shown when nothing is selected triggerVariantButtonProps["variant"]"outline"Trigger button variant triggerSizeButtonProps["size"]"sm"Trigger button size triggerClassNamestring— Extra classes for the trigger (e.g. "w-56")
Prop Type Default Description size"sm" | "md" | "lg""md"Calendar cell size numberOfMonthsnumber1Months shown inside the popover showWeekNumberbooleanfalseShow ISO week numbers showOutsideDaysbooleantrueShow adjacent month days fixedWeeksbooleanfalseAlways render 6 rows fromDateDate— Earliest selectable date toDateDate— Latest selectable date disabledMatcher | Matcher[]— Disable specific dates defaultMonthDate— Default visible month
Prop Type Default Description showDateTimebooleanfalseShow built-in Start/End date inputs, time inputs, and Apply button below the calendar onApply(data: DateTimeApplyData) => void— Called when the Apply button is clicked showTimezonebooleanfalseShow the detected local timezone below the Apply button
interface DateTimeApplyData {
start ?: Date ;
startTime ?: string ; // "HH:MM"
end ?: Date ;
endTime ?: string ; // "HH:MM"
}
Prop Type Default Description presetsPresetItem[]— List of preset shortcuts presetsPosition"left" | "top""left""left" renders a sidebar; "top" renders pill chips above the calendar
Prop Type Default Description footerReactNode— Slot rendered below the calendar (e.g. apply/clear buttons) rounded"none" | "sm" | "md" | "lg" | "xl" | "full""lg"Popover border radius align"start" | "center" | "end""start"Popover horizontal alignment relative to trigger side"bottom" | "top" | "left" | "right""bottom"Popover side dir"ltr" | "rtl""ltr"Text direction — RTL flips nav arrows and calendar layout classNamestring— Added to the outer wrapper <div>
interface PresetItem {
label : string ;
getValue : () => Date | DateRange ;
}
import { createSinglePresets, createRangePresets } from "@tessinaui/ui" ;
// Single: Today, Yesterday, Last week
const singlePresets = createSinglePresets ();
// Range: Today, Yesterday, Last 7 days, Last 30 days, Last 3 months
const rangePresets = createRangePresets ();
import type { DateRange } from "@tessinaui/ui" ;
interface DateRange {
from : Date | undefined ;
to ?: Date | undefined ;
}
Multi-line text input with intent variants, sizes, label positions, character counter, auto-resize, and LTR/RTL support.
Date picker calendar built on react-day-picker v9. Supports single, range, and multiple selection modes, RTL, week numbers, disabled dates, multi-month view, and an optional footer slot.