<div role=tablist>
<button id=tab-npm type=button role=tab aria-selected=true aria-controls=tabpanel-npm>npm</button>
<button id=tab-yarn type=button role=tab aria-selected=false tabindex=-1>yarn</button>
<button id=tab-pnpm type=button role=tab aria-selected=false tabindex=-1>pnpm</button>
</div>
<div id=tabpanel-npm role=tabpanel aria-labelledby=tab-npm>
<p>Content for npm</p>
</div>
role=tablistelement (i.e. the “tab list”) is labelled. Great job! People tend to miss this.aria-orientation=horizontal— the implicit default for arole=tablist).aria-selected) doesn’t have to follow focus.tabpanelrole.aria-controlson therole=tabelement. Therole=tabpanelelement can usearia-labelledbyto reference the tab for its label.tabindex=0. In this case, it seems like there’s a copy button.Here’s a simplified markup structure that we’re aiming for: