Accessibility
trap()#
focus trap with restore
roving()#
arrow-key navigation for composite widgets
announce()#
live region announcements
A11y#
trap(el, { escape, outside, inert }), modal(dialog, open) on native <dialog>; an unregistered island prints a ready-to-paste register() scaffold
Focus and announcements in depth#
trap() stacks, recaptures and sees into shadow roots, roving() covers grids, trees, typeahead, RTL and the combobox aria-activedescendant pattern. Screen readers hear the app: two permanent live regions with a lossless queue, a route announcer with focus reset, focus that moves to a neighbour instead of <body> when a row disappears, audible loading / error / saved states and dialogs that name themselves.