Skip to content

Comments

fix(multiple): change aria keyboard manager to only handle repeated events in correct places#32728

Merged
adolgachev merged 1 commit intoangular:mainfrom
adolgachev:aria-kb-repeat
Feb 10, 2026
Merged

fix(multiple): change aria keyboard manager to only handle repeated events in correct places#32728
adolgachev merged 1 commit intoangular:mainfrom
adolgachev:aria-kb-repeat

Conversation

@adolgachev
Copy link
Contributor

@adolgachev adolgachev commented Jan 29, 2026

The angular-aria keyboard manager ignores the event.repeat parameter so holding down a key will cause it to loop even when that behavior is not desired. In general, repeated events should only be handled when navigating with arrow keys, and especially not when toggling (as then it just goes from off to on to off and so on).

Another issue is that the browser can interpret a keyboard space or enter as a click in certain cases. This is true with the toolbar so added check for a proper mouse event to handle the click (else already handled with keyboard) as well as updated spec to pass a proper event.

Note: we are missing tests for this but they probably need to be added at a higher level so that we can catch for not just the repeat issue but also issues like the click above. Else can just add explicit repeat but keyDown events but that isn't as useful.

Fixes b/479281429.

@adolgachev adolgachev changed the title fix(aria/many): don't repeat keys fix(multiple): don't repeat keys Feb 3, 2026
@adolgachev adolgachev changed the title fix(multiple): don't repeat keys fix(aria/many): change aria keyboard manager to only handle repeated events in correct places Feb 4, 2026
@adolgachev adolgachev changed the title fix(aria/many): change aria keyboard manager to only handle repeated events in correct places fix(multiple): change aria keyboard manager to only handle repeated events in correct places Feb 4, 2026
@adolgachev adolgachev marked this pull request as ready for review February 4, 2026 22:54
@adolgachev adolgachev requested a review from ok7sai February 4, 2026 22:54
@pullapprove pullapprove bot requested a review from andrewseguin February 4, 2026 22:54
@adolgachev adolgachev requested review from tjshiu and removed request for andrewseguin February 4, 2026 22:55
@adolgachev adolgachev added Accessibility This issue is related to accessibility (a11y) target: patch This PR is targeted for the next patch release action: review The PR is still awaiting reviews from at least one requested reviewer action: presubmit The PR is in need of a google3 presubmit labels Feb 4, 2026
* This library has not yet had a need for stopPropagationImmediate.
*/
export interface EventHandlerOptions {
handleRepeat?: boolean;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I might prefer preventRepeat instead. It makes it clearer what it is doing. I wasn't sure at first what handleRepeat was doing.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I originally had ignoreRepeat but then I changed the default to ignore the repeat, and it is generally better to have defaults be false.

But we actually do default the others as true already, so I'll go back to that.

@adolgachev adolgachev removed the request for review from ok7sai February 10, 2026 22:20
@adolgachev adolgachev added action: merge The PR is ready for merge by the caretaker and removed action: review The PR is still awaiting reviews from at least one requested reviewer action: presubmit The PR is in need of a google3 presubmit labels Feb 10, 2026
@adolgachev adolgachev merged commit 529c1bf into angular:main Feb 10, 2026
25 of 27 checks passed
@adolgachev
Copy link
Contributor Author

This PR was merged into the repository. The changes were merged into the following branches:

adolgachev added a commit that referenced this pull request Feb 10, 2026
…vents in correct places (#32728)

(cherry picked from commit 529c1bf)
@adolgachev adolgachev deleted the aria-kb-repeat branch February 10, 2026 22:23
jermowery added a commit to jermowery/components that referenced this pull request Feb 23, 2026
…nside the button

Add a new API, testing API, and docs for allowing progress indicators to be projected into a button and have them shown in an accessible manner

Fixes angular#13667

undo

Use more specific selector

refactor(cdk/overlay): add way to only handle specific events in overlay

We dispatch keyboard events to the different overlays depending on their attachment order and if they're listening for keyboard events. This works fine for the most part, but can lead to unexpected behavior where an overlay only cares about one type of event which ends up blocking the event from reaching other overlays.

These changes add an `eventPredicate` option that overlay can use to allow some events to pass through.

fix(material/tooltip): do not block events to other overlays

Fixes that the tooltip was blocking keyboard events to other overlays, even if it doesn't care about them.

Fixes angular#32760.

fix(multiple): change aria keyboard manager to only handle repeated events in correct places (angular#32728)

perf(aria/grid): performance when selecting in a large grid (angular#32766)

Fixes that the grid cell's host bindings were slowing down the page significantly during selection when placed in a large grid. The issue seems to come from the fact that there's a non-zero cost to the signal reads in the directive's host bindings which can add up.

These changes address the issue by batching the reads together in an effect.

Fixes angular#32759.

fix(material/radio): hide empty labels (angular#32754)

We have similar logic in the checkbox and slide toggle so these changes apply it to the radio button: hiding the label when it's empty so it doesn't affect the layout.

build: bump stackblitz template to 21.1 (angular#32752)

Updates the template for Stackblitz examples to the latest version of Angular.

docs: release notes for the v21.1.4 release

release: cut the v21.2.0-next.4 release

fix(aria/combobox): fix autocomplete examples and add comments explaining combobox selection behavior (angular#32714)

fix(material/select): disable position locking (angular#32772)

In angular#9789 we enabled locked positioning for `mat-select` due to the previous of laying out the panel. Then in angular#30628 we enabled flexible dimensions so it's able to shrink. This combination can cause the panel to shrink when the user scrolls it out of view.

These changes remove the locked positioning since it's not necessary anymore.

Fixes angular#32771.

build: update cross-repo angular dependencies (angular#32684)

See associated pull request for more information.

fix(google-maps): fix mismatch in clusterer types (angular#32778)

Fixes that the clusterer types seem to no longer match with the ones on npm, causing a type error.

Fixes angular#32696.

refactor(material/select): remove dependency on NgClass (angular#32776)

Drops the dependency on `NgClass` from the select component since we can achieve the same with class bindings.

fix(cdk/tree): no nodes focusable if data is replaced (angular#32781)

Fixes that none of the tree nodes were focusable if the data is swapped out after initialization.

Fixes angular#32779.

build: update bazel dependencies (angular#32689)

See associated pull request for more information.

build: update all github actions (angular#32722)

See associated pull request for more information.

build: lock file maintenance (angular#32737)

See associated pull request for more information.

build: update pnpm to v10.29.3 (angular#32755)

See associated pull request for more information.

build: update cross-repo angular dependencies (angular#32784)

See associated pull request for more information.

docs: release notes for the v21.1.5 release

release: cut the v21.2.0-next.5 release

release: bump the next branch to v21.3.0-next.0

docs: release notes for the v21.2.0-rc.0 release

build: update cross-repo angular dependencies (angular#32794)

See associated pull request for more information.

fix(aria/combobox): Adjust AutoComplete examples to properly announce no results text (angular#32786)

build: update pnpm to v10.30.0 (angular#32803)

See associated pull request for more information.

build: update cross-repo angular dependencies (angular#32801)

See associated pull request for more information.

build: update dependencies and resolve breaking change (angular#32799)

Takes over the dependency bump from angular#32690 and resolves a breaking change.

fix(material/core): expose strong focus indicator structural styles (angular#32808)

Exposes the structural styles for strong focus indicators so users can use them in their own components.

Fixes angular#32773.

build: set up schematics for v22 (angular#32806)

One of the pre-requisites to release the next version of v22 is to have schematics set up. These changes add them ahead of time so we don't run into any issues when we go to release.

fix(material/datepicker): drop dependency on NgClass (angular#32810)

Drops the dependency on `NgClass` from the datepicker in favor of a direct `class` binding.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Accessibility This issue is related to accessibility (a11y) action: merge The PR is ready for merge by the caretaker target: patch This PR is targeted for the next patch release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants