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 `