Skip to content

Commit e3dc396

Browse files
authored
fix: make dialog element and role interactive (#15429)
Fixes #8283 Also see jsx-eslint/eslint-plugin-jsx-a11y#932
1 parent b82692a commit e3dc396

File tree

4 files changed

+17
-11
lines changed

4 files changed

+17
-11
lines changed

.changeset/gentle-humans-call.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: make dialog element and role interactive

packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const non_interactive_roles = non_abstract_roles
3030
// 'generic' is meant to have no semantic meaning.
3131
// 'cell' is treated as CellRole by the AXObject which is interactive, so we treat 'cell' it as interactive as well.
3232
!['toolbar', 'tabpanel', 'generic', 'cell'].includes(name) &&
33-
!role?.superClass.some((classes) => classes.includes('widget'))
33+
!role?.superClass.some((classes) => classes.includes('widget') || classes.includes('window'))
3434
);
3535
})
3636
.concat(

packages/svelte/tests/validator/samples/a11y-no-noninteractive-element-interactions/input.svelte

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<div role="button" tabindex="-1" on:click={() => {}} on:keypress={() => {}}></div>
44
<div role="listitem" aria-hidden="true" on:click={() => {}} on:keypress={() => {}}></div>
55
<button on:click={() => {}}>click me</button>
6+
<dialog on:click={() => {}}>alert</dialog>
67
<h1 contenteditable="true" on:keydown={() => {}}>Heading</h1>
78
<h1>Heading</h1>
89

packages/svelte/tests/validator/samples/a11y-no-noninteractive-element-interactions/warnings.json

+10-10
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,60 @@
33
"code": "a11y_no_noninteractive_element_interactions",
44
"end": {
55
"column": 51,
6-
"line": 10
6+
"line": 11
77
},
88
"message": "Non-interactive element `<div>` should not be assigned mouse or keyboard event listeners",
99
"start": {
1010
"column": 0,
11-
"line": 10
11+
"line": 11
1212
}
1313
},
1414
{
1515
"code": "a11y_no_noninteractive_element_interactions",
1616
"end": {
1717
"column": 58,
18-
"line": 11
18+
"line": 12
1919
},
2020
"message": "Non-interactive element `<h1>` should not be assigned mouse or keyboard event listeners",
2121
"start": {
2222
"column": 0,
23-
"line": 11
23+
"line": 12
2424
}
2525
},
2626
{
2727
"code": "a11y_no_noninteractive_element_interactions",
2828
"end": {
2929
"column": 50,
30-
"line": 12
30+
"line": 13
3131
},
3232
"message": "Non-interactive element `<h1>` should not be assigned mouse or keyboard event listeners",
3333
"start": {
3434
"column": 0,
35-
"line": 12
35+
"line": 13
3636
}
3737
},
3838
{
3939
"code": "a11y_no_noninteractive_element_interactions",
4040
"end": {
4141
"column": 30,
42-
"line": 13
42+
"line": 14
4343
},
4444
"message": "Non-interactive element `<p>` should not be assigned mouse or keyboard event listeners",
4545
"start": {
4646
"column": 0,
47-
"line": 13
47+
"line": 14
4848
}
4949
},
5050
{
5151
"code": "a11y_no_noninteractive_element_interactions",
5252
"end": {
5353
"column": 50,
54-
"line": 14
54+
"line": 15
5555
},
5656
"message": "Non-interactive element `<div>` should not be assigned mouse or keyboard event listeners",
5757
"start": {
5858
"column": 0,
59-
"line": 14
59+
"line": 15
6060
}
6161
}
6262
]

0 commit comments

Comments
 (0)