ProductBrand
Join us
Foundations
  • Introduction
  • Colors
  • Typography
  • Icons
  • Illustrations
  • Logos
  • Shadows
Components
  • Accordion
  • Alert Dialog
  • Avatar
  • Badge
  • Button
  • Calendar
  • Card
  • Chart
  • Checkbox
  • Collapsible
  • Combobox
  • Context Menu
  • Date Picker
  • Dialog
  • Drawer
  • Dropdown Menu
  • Fluid Avatar
  • Hover Scroll Text
  • Input
  • Kbd
  • Popover
  • Progress Bar
  • Radio Group
  • Scroll Area
  • Select
  • Selectors
  • Separator
  • Separator Dot
  • Shimmer Text
  • Skeleton
  • Slider
  • Switch
  • Tabs
  • Textarea
  • Toast
  • Tooltip
Compositions
  • Empty State
  • File Attachment
  • Floating Bar
  • Input Banner
  • Markdown Editor
  • Media Controls
  • Product Feature Banner
  • Panels
  • Sidebar
  • Reasoning Trace
  • Pagination
  • Data Table
  • Breadcrumb
  • Thread Outline
Inline
  • Overview
  • Stat Tile
  • Metric Row
  • Comparison Table
  • Chart Card
  • Trend Tile
  • Cite
  • Custom
  • Agent skill

Date Picker

The form side of dates: a grid for picking a single date, multiple dates, or a range, plus the composition pattern for date fields. For readonly month views that display data (heatmaps, event grids, mini calendars), see Calendar.

Examples

June 2026
MoTuWeThFrSaSu

Date picker field

Overview

The picker grid is the Calendar component, which wraps react-day-picker v9 with Rogo styling. All DayPicker props pass through: selection modes, min/max dates, disabled matchers, multiple months, localization, and custom formatters.

tsx
import { Calendar } from "@rogo-technologies/ui/calendar";

const [date, setDate] = useState<Date | undefined>();

<Calendar mode="single" selected={date} onSelect={setDate} />;

Usage

Selection modes

mode controls what selected / onSelect operate on: a Date (single), a Date[] (multiple), or a DateRange (range).

tsx
import { Calendar, type DateRange } from "@rogo-technologies/ui/calendar";

const [range, setRange] = useState<DateRange | undefined>();

<Calendar mode="range" selected={range} onSelect={setRange} numberOfMonths={2} />;

Disabling dates

disabled accepts a Matcher or array of matchers: weekdays, ranges, predicates, or explicit dates.

tsx
<Calendar
  mode="single"
  selected={date}
  onSelect={setDate}
  disabled={[{ dayOfWeek: [0, 6] }, { before: new Date() }]}
/>

Month and year dropdowns

captionLayout="dropdown" replaces the caption label with month and year selects. Bound the years with startMonth / endMonth.

tsx
<Calendar
  mode="single"
  captionLayout="dropdown"
  startMonth={new Date(2000, 0)}
  endMonth={new Date(2035, 11)}
  selected={date}
  onSelect={setDate}
/>

Date picker field

There is intentionally no DatePicker component. Compose Popover, Button, and Calendar.

tsx
<Popover open={open} onOpenChange={setOpen}>
  <PopoverTrigger asChild>
    <Button variant="outline" prefix={<IconCalendar1 />}>
      {date ? format(date, "PPP") : "Pick a date"}
    </Button>
  </PopoverTrigger>
  <PopoverContent className="w-auto p-0" align="start">
    <Calendar mode="single" selected={date} onSelect={selectDate} />
  </PopoverContent>
</Popover>

API

PropTypeDefaultDescription
mode"single" | "multiple" | "range"-Selection behavior.
selectedDate | Date[] | DateRange-Controlled selection (type follows mode).
onSelect(value) => void-Selection callback (type follows mode).
numberOfMonthsnumber1Months rendered side by side.
captionLayout"label" | "dropdown""label"Caption as text or month/year dropdowns.
disabledMatcher | Matcher[]-Dates that can't be selected.
showOutsideDaysbooleantrueRender leading/trailing days of neighboring months.
startMonth / endMonthDate-Navigation bounds (also bound the year dropdown).

All other react-day-picker props pass through unchanged.

Guidelines

Do

  • Use Calendar for anything that picks dates, since it ships keyboard navigation and ARIA grid semantics from react-day-picker
  • Compose date picker fields from Popover + Button + Calendar
  • Bound the year dropdown with startMonth / endMonth when using captionLayout="dropdown"

Don't

  • Don't rebuild date selection on top of calendar-core. That's what Calendar is for
  • Don't reach for react-day-picker directly in apps; import from @rogo-technologies/ui/calendar so styling stays consistent
  • Don't use a picker for readonly month views. Build those on Calendar's calendar-core utilities
PreviousContext Menu
NextDialog
Made in NYC© 2026 Rogo Technologies Inc.

Design at Rogo

We’re redesigning an entire industry. Come design it with us.

See open roles

Design at Rogo

  • How we workThe mission of design at Rogo, and the open roles
  • About RogoThe company and the product