diff --git a/.changeset/green-tables-warn.md b/.changeset/green-tables-warn.md new file mode 100644 index 0000000000..1952476fb9 --- /dev/null +++ b/.changeset/green-tables-warn.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: warn on click handlers for table row and cell elements diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js index a6e801cf5a..b719ea4876 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js @@ -613,6 +613,12 @@ function has_disabled_attribute(attribute_map) { * @returns {typeof ElementInteractivity[keyof typeof ElementInteractivity]} */ function element_interactivity(tag_name, attribute_map) { + if (tag_name === 'tr' || tag_name === 'td' || tag_name === 'th') { + return attribute_map.has('role') + ? ElementInteractivity.Static + : ElementInteractivity.NonInteractive; + } + if ( interactive_element_role_schemas.some((schema) => match_schema(schema, tag_name, attribute_map)) ) { diff --git a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte index c525ebe813..e6e8901972 100644 --- a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte +++ b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte @@ -26,6 +26,12 @@ + + + + + +
diff --git a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json index a0d033ab16..f9784477a4 100644 --- a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json +++ b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json @@ -94,5 +94,41 @@ "line": 28, "column": 33 } + }, + { + "code": "a11y_click_events_have_key_events", + "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `