diff --git a/packages/svelte/src/compiler/compile/utils/a11y.js b/packages/svelte/src/compiler/compile/utils/a11y.js index 563d5bfb64..74a679b543 100644 --- a/packages/svelte/src/compiler/compile/utils/a11y.js +++ b/packages/svelte/src/compiler/compile/utils/a11y.js @@ -14,7 +14,8 @@ const non_interactive_roles = new Set( // aria-activedescendant, thus in practice we treat it as a widget. // focusable tabpanel elements are recommended if any panels in a set contain content where the first element in the panel is not focusable. // 'generic' is meant to have no semantic meaning. - !['toolbar', 'tabpanel', 'generic'].includes(name) && + // 'cell' is treated as CellRole by the AXObject which is interactive, so we treat 'cell' it as interactive as well. + !['toolbar', 'tabpanel', 'generic', 'cell'].includes(name) && !role.superClass.some((classes) => classes.includes('widget')) ); }) diff --git a/packages/svelte/test/validator/samples/a11y-no-interactive-element-to-noninteractive-role/input.svelte b/packages/svelte/test/validator/samples/a11y-no-interactive-element-to-noninteractive-role/input.svelte index 47dec07d63..6729890c59 100644 --- a/packages/svelte/test/validator/samples/a11y-no-interactive-element-to-noninteractive-role/input.svelte +++ b/packages/svelte/test/validator/samples/a11y-no-interactive-element-to-noninteractive-role/input.svelte @@ -21,37 +21,37 @@ - - - - - - - - - + + + + + + + + + - - - - - + + + + -