Calendar

Date field with a month grid, min/max clamping, manual entry and a clear affordance.

Source
1 file
Dependencies
none
Playground
no

Examples

Every variant of the shipped component, live. Switch the layout to read them as a table or one at a time, and open Code for the file behind them.

01Basic
02Select header
03Label + helper

Choose any upcoming day.

04Min / Max

Constrained to this month + next.

05Today button
06Disabled
07Day shape

Installation

One package for the whole library — run this once and every component on this site is importable. Adding the tokens to your stylesheet is the other half; the installation guide covers it.

npm install kipui
import { Calendar } from "kipui";
Peer dependencies

react 19

react-dom 19

tailwindcss 4

Bundled dependencies

None beyond the peers above.

Usage

calendar-example.tsx
import { Calendar } from "kipui";

<Calendar
  value={date}
  onValueChange={setDate}
  minDate={new Date()}
  showTodayButton
  showClearButton
/>
  • `value` accepts an ISO `yyyy-MM-dd` string or a `Date`; the callback always hands back a `Date` or `null`.
  • `allowManualInput` lets people type the date instead of hunting for it in the grid — keep it on for date-of-birth style fields.

API reference

Transcribed from the component's own types. Props with no default are required.

PropDefaultDescription
valuestring | Date | nullrequiredSelected date, ISO string or Date.
onValueChange(date: Date | null) => voidrequiredFires on selection and on clear.
minDateDate | nullrequiredEarliest selectable date.
maxDateDate | nullrequiredLatest selectable date.
allowManualInputbooleanfalseLets the field be typed into.
showTodayButtonbooleanfalseShortcut to the current date.
showClearButtonbooleanfalseClears back to null.
labelstringrequiredField label.
errorstringrequiredError message; also sets the invalid styling.
helperTextstringrequiredHint shown under the field.
placeholderstringrequiredShown in the field before a date is picked.
disabledbooleanfalseBlocks both the field and the grid.
readOnlybooleanfalseShows the value without allowing a change.
requiredbooleanfalseMarks the field required for validation.
requiredSignbooleanfalseDraws the asterisk beside the label.
highlightTodaybooleantrueRings the current date in the grid.
useSelectHeaderbooleanfalseMonth and year as selects instead of arrows.
dayRounded"none" | "sm" | "md" | "lg" | "full""md"Corner radius of a day cell.
dayBorderedbooleanfalseRules between the day cells.
fullWidthbooleanfalseStretches the field to its container.
startIconReactNoderequiredReplaces the calendar icon before the text.
endIconReactNoderequiredElement rendered after the text.
inputClassstringrequiredMerged onto the field, not the popover.
aria-labelstringrequiredNames the field when there is no visible label.