Drawer slot — accessibility
Keyboard
- The slot adds no keyboard behaviour of its own: the panel inside is part of the page, so Tab walks into it in DOM order after the page content.
- Escape is handled by the app shell's chain (drawer full → drawer → assistant panel), not by the slot; a modeless dialog above it deliberately does not swallow the key.
- There is no focus trap and none is wanted — the listing beside the drawer must stay reachable.
ARIA
- The slot is a plain
<div>with no role: it is a position, not a region. The panel inside brings its own semantics (<aside aria-label>for a record preview,role="dialog"for a create form). - Opening and closing is silent — nothing announces that a panel appeared, and the panel does not take focus by itself.
- Because the slot is hidden rather than unmounted when empty, assistive technology does not see stale content:
display: noneremoves it from the tree.
Focus
- Foundation ring from
ds.cssapplies to whatever controls the panel renders; the slot declares no focus style. - Opening does not move focus, so a keyboard user must Tab into the panel; closing leaves focus where it was.
- The panel is not a tab trap, so Tab eventually leaves it and continues in the page.
Contrast
- The slot paints nothing: it has no background, border or text of its own. All contrast belongs to the panel inside (see Record drawer or Drawer form).
- The panel floats over the page with the overlay shadow rather than a border, and there is no scrim behind it.
Known limits
- No announcement on open or close, and no focus move — the drawer is discoverable by sight and by tabbing, not by being told.
- The side changes per opening; a screen-reader user gets no notice that the panel is now on the other side.
- The slot's width is fixed by the shell, so a panel with wide content scrolls inside itself rather than widening.
Source: docs/app-shell/drawer-slot.a11y.md · GitLab