Composite Widget
composite, composite container, composite widgetsDefinitions
In the APG, a widget that contains navigable descendants and is one stop in the page's tab sequence — Tab reaches it, and the arrow keys move within it. A listbox, a menu, a radio group, a tab list, a tree, a grid
The single tab stop is the whole idea, and it is a usability rule before it is an accessibility one: a mail client with forty messages would otherwise cost forty presses of Tab to get past. Two techniques implement it — a roving tabindex, where exactly one child holds tabindex="0" and the rest hold -1, moved as the selection moves; or aria-activedescendant, where focus stays on the container and an attribute names the active child. The first is simpler and the second keeps focus put, which matters when a text input drives the list.
In the Agentic DS draft's kind enum, a component with an open composition slot and state of its own — an accordion, tabs, a carousel
The draft chose the name to line up with the APG, but the two senses are different axes. kind asks about slots and state. The APG asks about focus, and the answer follows from the component's a11y.pattern: a tablist is one tab stop with a roving tabindex, while a disclosure accordion and a carousel give every control its own Tab stop. The draft locks the accordion's arrow keys out by default. So of the draft's three examples, only tabs is a composite in the APG's sense. Structurally, this kind consumes nesting depth, needs statefulAllows on its slots, and has its own keyboard pattern checked against whatever nests inside. Candidate renames, none in use: host, stateful container, slotted widget.
One Tab in, arrows to move, one Tab out.
Avoid: giving every child its own tab stop because each one is focusable. That is the mistake the pattern exists to prevent, and it is invisible to anyone testing with a mouse — the component looks identical and is unusable from a keyboard.
Two senses share this page. In the APG a composite is about focus —
one tab stop, arrows within. In the Agentic DS draft's kind it is about
structure — an open slot plus state of its own. Tabs is both; an
accordion is only the second.
Avoid: reading kind: composite on a component contract as a promise of
arrow-key navigation. Check its a11y.pattern instead.