Components
A HeroUI range calendar for selecting a contiguous span of dates, built on react-aria. Supports default and controlled values, min/max bounds, unavailable and non-contiguous ranges, read-only and disabled states, per-day indicators, and multiple visible months. Month names are rendered in English.
npx @21st-dev/cli add hero_ui/heroui-range-calendarLoading preview...
"use client"
import { RangeCalendar } from "@/components/ui/heroui-range-calendar"
import { Description } from "@heroui/react"
import { getLocalTimeZone, today } from "@internationalized/date"
import { I18nProvider } from "react-aria-components"
export default function ReadOnly() {
return (
<I18nProvider locale="en-US">
<div className="flex w-full flex-col items-center gap-4 p-8">
<RangeCalendar
isReadOnly
aria-label="Trip dates"
defaultValue={{
end: today(getLocalTimeZone()).add({ days: 4 }),
start: today(getLocalTimeZone()),
}}
>
<RangeCalendar.Header>
<RangeCalendar.Heading />
<RangeCalendar.NavButton slot="previous" />
<RangeCalendar.NavButton slot="next" />
</RangeCalendar.Header>
<RangeCalendar.Grid>
<RangeCalendar.GridHeader>
{(day) => <RangeCalendar.HeaderCell>{day}</RangeCalendar.HeaderCell>}
</RangeCalendar.GridHeader>
<RangeCalendar.GridBody>
{(date) => <RangeCalendar.Cell date={date} />}
</RangeCalendar.GridBody>
</RangeCalendar.Grid>
</RangeCalendar>
<Description className="text-center">Range calendar is read-only</Description>
</div>
</I18nProvider>
)
}
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...