sigilUI

Calendar

A token-driven calendar built on react-day-picker with single, range, and dropdown navigation modes.

@sigil-ui/componentsReact

Preview

Live preview Interactive

Import

import { Calendar } from "@sigil-ui/components";

Variants

Range selection

Live preview Interactive

Caption-only navigation (no dropdowns)

Live preview Interactive

Usage

"use client";

import { useState } from "react";
import { Calendar } from "@sigil-ui/components";

function CalendarPreview() {
  const [date, setDate] = useState<Date | undefined>(new Date(2026, 4, 12));
  return <div className="grid gap-[var(--s-space-16)] w-full">
    <Calendar mode="single" defaultMonth={new Date(2026, 4, 1)} selected={date} onSelect={setDate} />
    <p role="status" className="text-[var(--s-text-muted)] text-[length:var(--s-size-sm)]">{date ? `Selected: ${date.toLocaleDateString("en-US", { dateStyle: "long" })}` : "Choose a date."}</p>
  </div>;
}

For ranges:

const [range, setRange] = React.useState<DateRange>();

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

Props

The Calendar accepts every prop from react-day-picker's DayPicker, plus a Sigil-themed default.

PropTypeDefaultDescription
mode"single" | "multiple" | "range""single"Selection behavior.
captionLayout"label" | "dropdown" | "dropdown-months" | "dropdown-years""dropdown"Header navigation style.
showOutsideDaysbooleantrueShow days from the previous/next month in the grid.
fixedWeeksbooleantrueAlways render six weeks.
startMonth / endMonthDate±100 / +10 yrsBounds for the dropdown selectors.

Token integration

CSS VariablePurpose
--s-backgroundCalendar surface
--s-surface / --s-surface-elevatedHover, dropdown panel
--s-border / --s-border-styleCalendar frame
--s-text / --s-text-muted / --s-text-subtleDay text hierarchy
--s-primary / --s-primary-contrastSelected day fill, today indicator dot
--s-radius-sm / --s-radius-md / --s-card-radiusFrame and day pill radii
--s-shadow-lgDropdown elevation
--s-duration-fastHover/select transitions
--s-focus-ring-color / --s-focus-ring-widthKeyboard focus ring
--s-font-monoWeekday label typography