angular / angular/components

bug(CDK Dialog): aria-hidden is not removed when a child dialog is opened before but closed after a parent dialog.

Offen
#30,028 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: cdk/dialog P3
Vorherrschende Sprache
TypeScript
Sterne
25k
Forks
6.8k
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
91

Beschreibung

### Is this a regression?

- [ ] Yes, this behavior used to work in the previous version

### The previous version in which this bug was not present was

_No response_

### Description

When an application uses routing, the application has its CDK `Dialog` instance (A), and the route's component has its own CDK `Dialog` instance (B), which has A as its parent.

When B opens a component in an overlay, it sets the **aria-hidden** attributes.

When the application provides a set of shared dialog components and a service to open them, they are opened from A, and **aria-hidden** attributes are not set because they are already present. (see [Dialog._hideNonDialogContentFromAssistiveTechnology](https://github.com/angular/components/blob/ef9cff380771da821fbf018b0e58ed4c0600b355/src/cdk/dialog/dialog.ts#L375C11-L375C55)).

When B removes the last dialog (see [Dialog._removeOpenDialog](https://github.com/angular/components/blob/ef9cff380771da821fbf018b0e58ed4c0600b355/src/cdk/dialog/dialog.ts#L348)) while its parent (A) has dialogs open, the aria-hidden attributes are not removed.

This means that because the parent CDK dialog (A) doesn't know that the child dialog had any attributes set, the **aria-hidden** attributes are never removed again, and the application becomes inaccessible to assistive technologies.

### Reproduction

StackBlitz link: https://stackblitz.com/edit/components-issue-starter-aa1qpb
Steps to reproduce:
1. Click on Load Child
2. Click on Show Dialog
3. In the dialog click 'save and close'
4. observe the 'wait dialog' being opened (before the Dialog is closed)
5. the dialog is closed
6. after the wait dialog is closed check the

### Expected Behavior

All **aria-hidden** attributes **set** by dialogs are removed again.

### Actual Behavior

The aria-hidden attributes set by CDK `Dialog` B remain.

### Environment

- Angular: 18.2.8
- CDK/Material: 18.2.8
- Browser(s): Any
- Operating System (e.g. Windows, macOS, Ubuntu): Any

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in src/cdk/dialog/dialog.ts bei _hideNonDialogContentFromAssistiveTechnology und _removeOpenDialog und verfolge den im Reproduktionsbeispiel beschriebenen Ablauf von übergeordnetem und untergeordnetem Dialog. Stelle das Routing-Szenario aus dem verknüpften StackBlitz nach und überprüfe anschließend, dass die vom untergeordneten Dialog gesetzten aria-hidden-Attribute entfernt werden, nachdem beide Dialoge geschlossen wurden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
accessibility, frontend
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.