CalendarDayTable
A calendar grid for a grid of the time slots of one day: one row per slot. It is a structural wrapper on a <table role="grid"> with data-view="day": the consumer supplies the head, body and rows using the existing CalendarTable* sub-elements, and owns every date, locale format and cell.
Status: beta — implemented and unit-tested in the Svelte canonical; not yet exercised in composed flows.
CalendarDayTable is one of five calendar views alongside CalendarTable (the general-purpose grid). The component adds only a view-specific base class (calendar-day-table) and the data-view hook, so one stylesheet rule can lay out all five and views can be swapped without changing cell markup. Grid shape for this view: time-slot rows (for example hourly or half-hourly), optionally split into resource columns.
Implementation Notes
- Renders
<table class="calendar-day-table {class}" role="grid" aria-label={label} data-view="day"> - Renders a
<caption>whencaptionis provided - Reuses
CalendarTableHead,CalendarTableBody,CalendarTableFoot,CalendarTableRow,CalendarTableTHandCalendarTableTD— there are noCalendarDayTable*sub-elements - No internal state; the consumer owns locale formatting (use
Intl.DateTimeFormat) and cell content - Spreads
restPropsonto the root<table>
Props
| Prop | Type | Default | Description |
|---|---|---|---|
class |
string | "" |
Appended to the base class |
label |
string (required) | — | Accessible name describing the period shown, e.g. a day (e.g. "Monday 6 January 2025") |
caption |
string | — | Visible <caption> text |
children |
slot (required) | — | Head, body and foot sections |
...restProps |
HTML attributes | — | Spread onto the root <table> |
Usage
<CalendarDayTable label="Monday 6 January 2025">
<CalendarTableHead>
<CalendarTableRow><CalendarTableTH scope="col">…</CalendarTableTH></CalendarTableRow>
</CalendarTableHead>
<CalendarTableBody>
<CalendarTableRow><CalendarTableTD>…</CalendarTableTD></CalendarTableRow>
</CalendarTableBody>
</CalendarDayTable>
Keyboard Interactions
| Key | Action |
|---|---|
| — | None built-in. The consumer implements APG grid navigation: arrow keys move between cells, Home/End jump within a row, Enter/Space select |
ARIA
role="grid"identifies the table as an interactive gridaria-label(fromlabel) names the period showndata-view="day"is for consumer CSS and JS, not assistive technology
When to Use
- Showing a grid of the time slots of one day: one row per slot
- Scheduling, booking and planner views that switch between periods
- When several calendar views share one stylesheet and need a stable
data-viewhook
When Not to Use
- Use
CalendarTablewhen the view is not specifically day-scoped - Use
CalendarRangePickerto choose a date range, orDateInputto enter a single date - Use
DataTablefor tabular data that is not a calendar - Use
GanttTablefor tasks laid out across a time axis
Headless
The component decides semantics only: the table element, the grid role, the name and the view hook. It decides nothing about layout, colour, today/selected styling, or which dates appear.
Styles
Target .calendar-day-table or [data-view="day"] for view-specific layout. No default styles are included.
Testing
- Renders a
<table>withrole="grid"and classcalendar-day-table labelsetsaria-label;data-viewisdaycaptionrenders a<caption>only when provided- Children and rest props are passed through
Advice
- Format every date with
Intl.DateTimeFormatin the consumer; pass the already-formatted period aslabel. - Give every cell an accessible name that includes its full date, not just the day number.
- Provide an obvious way to reach neighbouring periods (previous / next buttons outside the grid).
Related components
calendar-table— the general-purpose calendar grid and its sub-elementsCalendarWeekTablewhen several days must be comparedcalendar-range-picker/date-input— typing a single date
References
Lily™ and Lily Design System™ are trademarks.