Reference index

Components

Calendar

Month grid on react-day-picker: hairline weeks, ink-fill selection, heavy-rule today, Barlow Condensed numerals, 44px days.

Preview

November 2026

Install

bash

npx shadcn add @eloquent/calendar

This adds react-day-picker (Base UI has no calendar part).

Usage

tsx

import * as React from "react";
import { enGB } from "react-day-picker/locale";
import { Calendar } from "@/components/ui/calendar";

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

<Calendar
  mode="single"
  selected={date}
  onSelect={setDate}
  locale={enGB}
  labels={{
    labelPrevious: () => "Go to the previous month",
    labelNext: () => "Go to the next month",
  }}
/>

The component carries no English text of its own. Pass locale for month and weekday names and labels for the accessible names of the navigation buttons and day buttons. Every other prop is react-day-picker's.

States

November 2026
Selected: ink fill. Today: heavy rule. Disabled: grey, struck through, not allowed.
November 2026
Range: ink ends, tint-1 between.
StateTreatment
Default44px days, Barlow Condensed numerals, hairlines between weeks and columns
SelectedInk fill, paper text, aria-selected on the cell
Today3px heavy rule under the numeral (paper on an ink fill)
RangeInk ends, tint-1 between
Disabledhalftone, struck through, cursor-not-allowed
Outside monthhalftone
Focus2px ink outline, 2px offset
Navigation buttonsInk fill on press; no hover effect

Keyboard

KeyAction
TabMoves to the navigation buttons, then to the one day in the grid (the selected day, else today)
Arrow Left / RightPrevious / next day
Arrow Up / DownPrevious / next week
Home / EndFirst / last day of the week
Page Up / Page DownPrevious / next month
Shift + Page Up / Page DownPrevious / next year
Enter / SpaceSelects the focused day

Vietnamese

Tháng Mười Một 2026

The VI example passes the vi locale from react-day-picker/locale and Vietnamese labels.

Ink adaptation

Upstream's rounded accent cells, primary-coloured selection and ghost buttons are replaced by hairlines, an ink fill for the selection and a heavy rule for today. Hover is removed from the days and the navigation buttons. react-day-picker's own stylesheet is not used.