Range Calendar
A calendar component that allows users to select a range of dates.
Loading preview…
1<script lang="ts">
2 import { getLocalTimeZone, today } from '@internationalized/date';
3 import { RangeCalendar } from './index.js';
4
5 const start = today(getLocalTimeZone());
6 let value = $state({
7 start,
8 end: start.add({ days: 7 })
9 });
10</script>
11
12<RangeCalendar bind:value class="rounded-md border shadow-sm" captionLayout="dropdown" />
13Installation
1. Install dependencies
2. Copy these files into your project
- ~/components/range-calendar/range-calendar.svelte
- ~/components/range-calendar/range-calendar-caption.svelte
- ~/components/range-calendar/range-calendar-cell.svelte
- ~/components/range-calendar/range-calendar-day.svelte
- ~/components/range-calendar/range-calendar-grid.svelte
- ~/components/range-calendar/range-calendar-grid-body.svelte
- ~/components/range-calendar/range-calendar-grid-head.svelte
- ~/components/range-calendar/range-calendar-grid-row.svelte
- ~/components/range-calendar/range-calendar-head-cell.svelte
- ~/components/range-calendar/range-calendar-header.svelte
- ~/components/range-calendar/range-calendar-heading.svelte
- ~/components/range-calendar/range-calendar-month.svelte
- ~/components/range-calendar/range-calendar-month-select.svelte
- ~/components/range-calendar/range-calendar-months.svelte
- ~/components/range-calendar/range-calendar-nav.svelte
- ~/components/range-calendar/range-calendar-next-button.svelte
- ~/components/range-calendar/range-calendar-prev-button.svelte
- ~/components/range-calendar/range-calendar-year-select.svelte
- ~/components/range-calendar/index.ts
Usage
Use range calendar for start–end date selection. Bind value as { start, end }. Switch captionLayout between label, dropdown, dropdown-months, and dropdown-years.
1<script lang="ts">
2 import { getLocalTimeZone, today } from '@internationalized/date';
3 import { RangeCalendar } from '~/components/range-calendar';
4
5 const start = today(getLocalTimeZone());
6 let value = $state({
7 start,
8 end: start.add({ days: 7 })
9 });
10</script>
11
12<RangeCalendar bind:value class="rounded-md border shadow-sm" captionLayout="dropdown" />