brumate/ui

Calendar

A grid of the days of a month, to pick a date.

Delivery date, 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

Delivery on no date yet.

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

  let date = $signal<string | null>(null);

  function weekend(value: string) {
    return [0, 6].includes(new Date(`${value}T00:00:00Z`).getUTCDay());
  }
</script>

<Calendar class="ui-calendar" aria-label="Delivery date" value=$bind(date) isDateUnavailable=weekend>
  <header>
    <Button slot="previous" class="ui-button ui-icon-button">‹</Button>
    <CalendarHeading />
    <Button slot="next" class="ui-button ui-icon-button">›</Button>
  </header>
  <CalendarGrid />
</Calendar>
<p>Delivery on {date ?? 'no date yet'}.</p>
<Calendar aria-label="Delivery date" value=$bind(date)>
  <header>
    <Button slot="previous">‹</Button>
    <CalendarHeading />
    <Button slot="next">›</Button>
  </header>
  <CalendarGrid />
</Calendar>

Dates

Months

Keys

Cells

<CalendarGrid cell=day />

#template day(date: string) {
  <CalendarCell date=date>{Number(date.slice(8))}.</CalendarCell>
}