🔇 fix: Hide Button Icons from Screen Readers (#10776)
Some checks failed
Docker Dev Branch Images Build / build (Dockerfile, lc-dev, node) (push) Has been cancelled
Docker Dev Branch Images Build / build (Dockerfile.multi, lc-dev-api, api-build) (push) Has been cancelled

If you've got a screen reader that is reading out the whole page,
each icon button (i.e., `<button><SVG></button>`) will have both
the button's aria-label read out as well as the title from the
SVG (which is usually just "image").

Since we are pretty good about setting aria-labels, we should instead
use `aria-hidden="true"` on these images, since they are not useful
to be read out.

I don't consider this a comprehensive review of all icons in the app,
but I knocked out all the low hanging fruit in this commit.
This commit is contained in:
Daniel Lew 2025-12-11 15:35:17 -06:00 committed by GitHub
parent b288d81f5a
commit 1143f73f59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
175 changed files with 340 additions and 183 deletions

View file

@ -37,7 +37,7 @@ function MCPToolItem({
if (isInstalled) {
return {
text: localize('com_nav_tool_remove'),
icon: <XCircle className="flex h-4 w-4 items-center stroke-2" />,
icon: <XCircle className="flex h-4 w-4 items-center stroke-2" aria-hidden="true" />,
className:
'btn relative bg-gray-300 hover:bg-gray-400 dark:bg-gray-50 dark:hover:bg-gray-200',
disabled: false,
@ -47,7 +47,7 @@ function MCPToolItem({
if (isConfiguring) {
return {
text: localize('com_ui_confirm'),
icon: <PlusCircleIcon className="flex h-4 w-4 items-center stroke-2" />,
icon: <PlusCircleIcon className="flex h-4 w-4 items-center stroke-2" aria-hidden="true" />,
className: 'btn btn-primary relative',
disabled: false,
};
@ -56,7 +56,7 @@ function MCPToolItem({
if (isInitializing) {
return {
text: localize('com_ui_initializing'),
icon: <Wrench className="flex h-4 w-4 items-center stroke-2" />,
icon: <Wrench className="flex h-4 w-4 items-center stroke-2" aria-hidden="true" />,
className: 'btn btn-primary relative opacity-75 cursor-not-allowed',
disabled: true,
};
@ -64,7 +64,7 @@ function MCPToolItem({
return {
text: localize('com_ui_add'),
icon: <PlusCircleIcon className="flex h-4 w-4 items-center stroke-2" />,
icon: <PlusCircleIcon className="flex h-4 w-4 items-center stroke-2" aria-hidden="true" />,
className: 'btn btn-primary relative',
disabled: false,
};

View file

@ -58,7 +58,7 @@ function ToolItem({ tool, onAddTool, onRemoveTool, isInstalled = false }: ToolIt
>
<div className="flex w-full items-center justify-center gap-2">
{localize('com_ui_add')}
<PlusCircleIcon className="flex h-4 w-4 items-center stroke-2" />
<PlusCircleIcon className="flex h-4 w-4 items-center stroke-2" aria-hidden="true" />
</div>
</button>
) : (
@ -69,7 +69,7 @@ function ToolItem({ tool, onAddTool, onRemoveTool, isInstalled = false }: ToolIt
>
<div className="flex w-full items-center justify-center gap-2">
{localize('com_nav_tool_remove')}
<XCircle className="flex h-4 w-4 items-center stroke-2" />
<XCircle className="flex h-4 w-4 items-center stroke-2" aria-hidden="true" />
</div>
</button>
)}