From 5cb87e66308c9fee1f71fca336d23f7e989979e4 Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:04:13 +0200 Subject: [PATCH] fix: announce toggle state of integrations menu rows to screen readers (#27667) Every toggle row in the chat integrations menu (filters, Web Search, Image, Code Interpreter, Tools, Skills) is a button whose on/off state was carried only by the decorative Switch inside it. Screen readers announced the row name and nothing else, so there was no way to tell whether a tool or feature was active without looking at it. Each row button now carries aria-pressed, and the Switch wrapper is marked inert so the nested role=switch stops competing with the row for the announcement and stops adding a nameless tab stop. Hit testing skips inert content, so clicking the switch still toggles the row. Tool rows that are not yet authenticated omit aria-pressed: activating those starts an OAuth redirect rather than toggling, so announcing them as an unpressed toggle would be wrong. The Web Search, Image and Code Interpreter rows also had a state-flipping aria-label ("Disable Web Search") on top of aria-pressed, which announces as "Disable Web Search, pressed" and reads as the opposite of the truth. Removed: the visible row text already names each control. Fixes #17150 --- .../chat/MessageInput/IntegrationsMenu.svelte | 58 +++++-------------- 1 file changed, 15 insertions(+), 43 deletions(-) diff --git a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte index 32ef3f6643..b840eb5c96 100644 --- a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte +++ b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte @@ -201,6 +201,7 @@ @@ -272,9 +267,6 @@ @@ -308,9 +294,6 @@ @@ -343,9 +320,6 @@ @@ -394,6 +362,9 @@ {#each Object.keys(tools) as toolId} @@ -517,6 +488,7 @@ {#each Object.keys(skills) as skillId}