Found while reviewing #14685.
A dashboard navbar links to its own pages with a URL hash, such as dashboard.html#cool. These are the URLs that a dashboard author shares.
When a page loads with that hash, the browser sets the sequential focus navigation starting point to the target element. The target is the whole .tab-pane for that page. The first Tab press therefore moves focus into the page content.
The navbar comes before that starting point in DOM order, so forward Tab never reaches it. A keyboard user must press Shift+Tab, or tab through the rest of the document to wrap around.
Repro: render a dashboard with two pages, open …#cool, then press Tab. Focus lands on the first control inside the Cool page. The navbar tabs and the page title are not reachable by forward Tab.
Verified in released Quarto 1.10.18 and on main (b69ed2d), in Chromium.
A page hash selects a page. It is not a position within one. On load, when the hash names a page (isPage()), the dashboard should return the focus starting point to the top of the document.
This also makes the skip-to-content link of #14684 unreachable, because that link is the first element of <body>.
Part of #8706.
Investigation was AI-assisted, grounded in a local clone (per CONTRIBUTING.md).
Found while reviewing #14685.
A dashboard navbar links to its own pages with a URL hash, such as
dashboard.html#cool. These are the URLs that a dashboard author shares.When a page loads with that hash, the browser sets the sequential focus navigation starting point to the target element. The target is the whole
.tab-panefor that page. The first Tab press therefore moves focus into the page content.The navbar comes before that starting point in DOM order, so forward Tab never reaches it. A keyboard user must press Shift+Tab, or tab through the rest of the document to wrap around.
Repro: render a dashboard with two pages, open
…#cool, then press Tab. Focus lands on the first control inside the Cool page. The navbar tabs and the page title are not reachable by forward Tab.Verified in released Quarto 1.10.18 and on
main(b69ed2d), in Chromium.A page hash selects a page. It is not a position within one. On load, when the hash names a page (
isPage()), the dashboard should return the focus starting point to the top of the document.This also makes the skip-to-content link of #14684 unreachable, because that link is the first element of
<body>.Part of #8706.
Investigation was AI-assisted, grounded in a local clone (per CONTRIBUTING.md).