TabList
Headless tab bar component with keyboard navigation and ARIA built in.
TabList renders the tab bar for a single panel. It is fully headless — you supply the markup for each tab via renderTab. Keyboard navigation (←/→, Home/End, Delete), roving tabindex, and ARIA roles are handled automatically.
Props
panelId (required)
The ID of the panel this tab list belongs to. Must match a PanelNode id in the layout tree.
renderTab (required)
Called once per tab in the panel. Render whatever markup you want — just spread tabProps onto your interactive element.
Always spread tabProps — it carries the ARIA attributes, click handler, and keyboard handler that make the tab bar accessible.
leading
Slot rendered before the tab items — useful for a "new tab" button or a panel icon:
trailing
Slot rendered after the tab items — useful for a "more options" menu or close-panel button:
aria-label
Accessible label for the role="tablist" container. When multiple panels exist on the same page, give each tablist a unique label so screen readers can distinguish them:
className / style
Applied to the role="tablist" container div.
Keyboard navigation
| Key | Action |
|---|---|
← / ↑ | Focus previous tab |
→ / ↓ | Focus next tab |
Home | Focus first tab |
End | Focus last tab |
Delete | Close focused tab (if closable) |
See Keyboard reference for the full map.