Email list — accessibility
Keyboard
- The row is an Item list row: a real
<button>, so Tab reaches it and Enter opens the message. - The star is its own control inside the row and stops the click from bubbling, so starring never opens the message by accident.
- The category tabs are buttons; there is no arrow-key movement between them (the same gap as the Tab strip).
ARIA
- The list is
role="list"withrole="listitem"wrappers, from Item list. - The star is a button whose name says what it will do (
Označit hvězdou/Odebrat hvězdu). - Read and unread differ by tone; the state is not otherwise exposed, so a screen-reader user cannot tell them apart — a real limit of the current row.
- The attachment icon carries a
title; the count is not spoken.
Focus
- Row and star take the foundation ring from
ds.css. - Hover actions appear on hover or focus within the row, so tabbing to them does not press an invisible control.
Contrast
Computed from packages/ui/src/tokens/tokens.css:
- Unread subject in ink — above AA in both themes.
- A read row drops to the muted tone (
--fg-muted= 2.85:1 light) — below AA, and by design, since it marks "already seen". - Sender, date and the attachment icon sit at the same muted level.
- The star when on uses the amber tone; when off it is muted.
Known limits
- Read vs unread is carried by tone alone and is not exposed programmatically.
- The empty state is inline text rather than the DS empty state.
- Loading is plain text, not the DS skeleton.
- Secondary text sits below AA in light theme.
Source: docs/email-list/email-list.a11y.md · GitLab