Repository navigation
fix(keyboard): roving tabindex needs key handling; modifier key listeners count (0.15.4) - #23
Merged
Merged
Conversation
…t skip only when unreachable (0.15.4) unreachable-control skipped a tabindex=-1 composite item whenever Tab could enter the widget, so a half-built tab list (no arrow-key handling) passed. Now it's skipped only when the widget, an item, a controller or an ancestor below <body> listens for keys; otherwise it's reported as moderate (heuristic). Without window.ng, listeners can't be read, so it still skips. The 0.15.3 mouse-shortcut skip ran before the reachability check and so also suppressed click-without-key on reachable elements; it now applies only to unreachable ones. --from --serve no longer also names the defaulted --base. Forms-pack docs dogfood (154 routes, dev build): identical findings to 0.15.3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… search at the component host Angular's getListeners reports (keydown.enter) as keydown.enter, which wasn't recognised as key handling, so click-without-key flagged the recommended (click)+(keydown.enter)+(keydown.space) fix, and roving widgets using (keydown.arrowRight) would be reported. Match on the base event. The roving-tabindex key search now walks ancestors only up to the nearest component host, so an app shell's shortcut listener doesn't vouch for every widget; results are cached per widget per scan, checking cheap candidates before the widget's contents. Real-Angular E2E covers modifiers and the half-built tab list; sabotage-checked. Docs dogfood (154 routes): identical to 0.15.3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ngbr/unreachable-control: a roving-tabindex item is skipped only when something handles keys (widget, anything inside it, a controller, or an ancestor up to the nearest component host). Otherwise: moderate, verify-by-hand finding. Production builds (nong.getListeners) still skip.(keydown.enter)→keydown.enter) now count as key handling —click-without-keyflagged the fix its own docs recommend.click-without-key.--from+--serveno longer also names--base.Tests: 297 pass incl. real-Angular E2E (modifiers + half-built tab list), sabotage-checked. Docs dogfood (154 routes, dev build): identical findings to 0.15.3.
🤖 Generated with Claude Code