bug(CDK Dialog): aria-hidden is not removed when a child dialog is opened before but closed after a parent dialog.
- 主要言語
- TypeScript
- スター
- 25k
- フォーク
- 6.8k
- 平均マージ
- 1日 8時間
- マージ済み PR(30日)
- 91
説明
### 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
コントリビューションガイド
調査の方向性
src/cdk/dialog/dialog.ts の _hideNonDialogContentFromAssistiveTechnology と _removeOpenDialog から開始し、再現手順で説明されている親 Dialog と子 Dialog のフローを追います。リンクされた StackBlitz の routing シナリオを再現し、両方の Dialog が閉じた後に子 Dialog によって設定された aria-hidden 属性が削除されることを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- angular, typescript
- 領域
- accessibility, frontend
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 55/100