From d9eda900a30ba6063547a41de4d76a357bbec216 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Fri, 23 Oct 2026 09:41:27 +0200 Subject: [PATCH] fix(multiple): update fake event detection in aria Aligns the fake event detection in Angular Aria with the approach we've been using for a while in the CDK. It works a bit better across browsers. --- .../behaviors/event-manager/click-event-manager.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/aria/private/behaviors/event-manager/click-event-manager.ts b/src/aria/private/behaviors/event-manager/click-event-manager.ts index 3be9949a84e9..eb8ac1187cd3 100644 --- a/src/aria/private/behaviors/event-manager/click-event-manager.ts +++ b/src/aria/private/behaviors/event-manager/click-event-manager.ts @@ -17,20 +17,16 @@ import { /** * Gets whether an event could be a simulated click event. - * - * Screen readers and keyboard activation (Enter/Space) often dispatch fake click - * events. We distinguish them by checking if `event.detail` is zero or if - * `event.pointerType` is missing. */ -export function isFakeClick(event: PointerEvent): boolean { - return event.detail === 0 || !event.pointerType; +function isFakeClick(event: MouseEvent): boolean { + return event.detail === 0 && event.screenX === 0 && event.screenY === 0; } /** * Gets whether an event is a programmatic click (e.g. triggered by .click() or .dispatchEvent()). * Programmatic events are untrusted. */ -export function isProgrammaticClick(event: Event): boolean { +function isProgrammaticClick(event: Event): boolean { return !event.isTrusted; } @@ -85,7 +81,7 @@ export class ClickEventManager extends EventManager { }; } - _isMatch(event: T, modifiers: ModifierInputs) { + private _isMatch(event: T, modifiers: ModifierInputs) { const isAllowed = isProgrammaticClick(event) || !isFakeClick(event); return isAllowed && hasModifiers(event, modifiers); }