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: none removes it from the tree.

Focus

  • Foundation ring from ds.css applies 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