brumate/ui

RangeCalendar

A grid of the days of a month, to pick a range of dates.

Stay, October 2026

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Pick the first night, then the last.

<script>
  import { $bind, $signal } from 'brumate/signals';
  import Button from '@brumate/ui/Button.brm';
  import CalendarGrid from '@brumate/ui/CalendarGrid.brm';
  import CalendarHeading from '@brumate/ui/CalendarHeading.brm';
  import RangeCalendar from '@brumate/ui/RangeCalendar.brm';

  let stay = $signal<{ start: string; end: string } | null>(null);
</script>

<RangeCalendar class="ui-calendar" aria-label="Stay" value=$bind(stay)>
  <header>
    <Button slot="previous" class="ui-button ui-icon-button">‹</Button>
    <CalendarHeading />
    <Button slot="next" class="ui-button ui-icon-button">›</Button>
  </header>
  <CalendarGrid />
</RangeCalendar>
<p>{stay ? `From ${stay.start} to ${stay.end}.` : 'Pick the first night, then the last.'}</p>
<RangeCalendar aria-label="Stay" value=$bind(stay)>
  <header>
    <Button slot="previous">‹</Button>
    <CalendarHeading />
    <Button slot="next">›</Button>
  </header>
  <CalendarGrid />
</RangeCalendar>

Picking a range

Cells