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 4c472df546..9a42c6b1dc 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 @@ -292,12 +292,11 @@ export function check_element(node, context) { if (handlers.has('click')) { const is_non_presentation_role = role_static_value !== null && !is_presentation_role(role_static_value); - const is_table_cell_or_row = node.name === 'tr' || node.name === 'td' || node.name === 'th'; if ( !is_dynamic_element && !is_hidden_from_screen_reader(node.name, attribute_map) && (!role || is_non_presentation_role) && - (!is_interactive || is_table_cell_or_row) && + !is_interactive && !has_spread ) { const has_key_event = @@ -614,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 4aea444769..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,8 +26,11 @@ + + + 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 11b966a1a5..0f52c92b32 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 @@ -99,11 +99,11 @@ "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 `