Docs

Data feedback

DateRangePicker

DatePicker popup for selecting start and end date ranges.

5 examplesInteractive ComponentReact 19 & Next.js 16Tailwind CSS v4
Install
pnpm add @quinkit/ui react-day-picker
Import
import { DateRangePicker } from "@quinkit/ui";

Required packages

Powers Calendar and DateRangePicker. Add these packages before using this component:

  • @quinkit/ui
  • react-day-picker

Install command is shown above. Without the peer package, imports will fail at build time.

Interactive Examples

Live previews · code · themes · viewport · dark mode

Basic Date Range Picker

Pop-up calendar for picking start and end dates.

Basic Date Range Picker rendered preview

Quick Presets Bar

Preset shortcuts alongside calendar range selector.

Quick Presets Bar rendered preview

Form Field Integration

Date range picker integrated within a standard form.

Form Field Integration rendered preview

Disabled State

Non-interactive date range picker.

Disabled State rendered preview

Historical Audit Range (Read-Only)

Reporting Window Selector

Analytics report export date range container.

Reporting Window Selector rendered preview

Analytics Export Window

Overview

DateRangePicker is a popover-anchored date range selector composed from Popover and Calendar. It provides a clean trigger button displaying formatted date ranges, a clear button action, and a dual-month calendar grid.

Installation

bash
pnpm add @quinkit/ui react-day-picker

react-day-picker is a required peer dependency for DateRangePicker (and Calendar).

Usage Examples

### Basic Usage

tsx
import { useState } from "react";
import { DateRangePicker, type DateRange } from "@quinkit/ui";

export function DateRangePickerDemo() {
  const [range, setRange] = useState<DateRange | undefined>({
    from: new Date(),
    to: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000)
  });

  return <DateRangePicker value={range} onChange={setRange} />;
}

Props

PropTypeDefaultDescription
valueDateRangeundefinedSelected start (from) and end (to) dates.
onChange(range: DateRange | undefined) => voidundefinedCallback fired when range changes.
placeholderstring"Pick a date range"Trigger text when no range is selected.
classNamestringundefinedAdditional class names for container.

Accessibility Details

  • Popover trigger communicates aria-expanded and aria-haspopup.
  • Clear button contains an explicit aria-label.
  • Escape key closes popover without mutating value.

Accessibility & Keyboard

DateRangePicker adheres to WAI-ARIA design patterns for accessible web components.

Keyboard Navigation

  • Tab / Shift + Tab — Focuses control and moves between interactive elements.
  • Space / Enter — Triggers action or toggles selection.
  • Escape — Closes open popovers, overlays, or dropdown menus.

ARIA Standards

  • Built with semantic HTML tags and explicit aria-* attributes.
  • Uses high-contrast focus rings (ring-ring) visible in both light & dark mode.
  • Supports screen readers with non-visual label fallbacks.

Registry Install

Add a shadcn-compatible bridge file to your project that re-exports from @quinkit/ui.

Registry
npx shadcn@latest add https://quinkit-ui.vercel.app/r/date-range-picker.json