StartFoundationsComponentsContent

Calendar

A calendar is a month grid that stays on the page. People pick one day, or a range in mode="range".

Stable Figma
OverviewUsageAPIAccessibility
<tk-calendar label="Departure date" value="2026-03-17"
             min="2026-03-05" max="2026-09-30"></tk-calendar>

Anatomy

Part What it is
tk-calendar the element; one Tab stop
heading the month and year, such as "March 2026"; it names the grid
paging buttons "Previous month" and "Next month"; disabled when that month is out of bounds
weekday header two-letter day names; screen readers hear the full name
day grid always six rows, so the height never changes while paging
day cell 32×32px; the number with a circle behind it when selected
grid part the day-grid table

Days from the next and previous month fill the corners. They are dimmed but still work: picking one selects it and pages to its month. With more than one month shown, the corners stay empty. The grid shows days only.

States

<tk-calendar label="Delivery date" value="2026-04-08"
             min="2026-04-06" max="2026-04-24"></tk-calendar>
Day Looks like
today a small accent dot under the number
selected a filled accent circle behind the number
selected and today the circle, with the dot on it
hover / press a gray circle
keyboard focus a focus ring around the day
from another month gray number, still clickable
outside min / max faded, can't be clicked or focused

Week start

week-start sets the first day of the week, from 1 (Monday, the default) to 7 (Sunday).

<tk-calendar label="Shift date" week-start="7"></tk-calendar>

Range mode

mode="range" picks a period. The first pick sets start, the second sets end. A pick before the start moves the start; a pick after a full range starts a new one. Hovering shows the span before the second click.

<tk-calendar mode="range" start="2026-03-10" end="2026-03-18"
             visible-months="2" label="Stay dates"></tk-calendar>
  • The two ends get the accent circle; the days between get a faint accent band.
  • visible-months shows up to three months side by side. They work as one grid: arrows move from one month into the next, and the paging buttons move the whole set.
  • For a form, use the Date range picker; it builds on this.