From 4490993fe785b2bd95ec720f5868aee16d33e7c9 Mon Sep 17 00:00:00 2001 From: Lotus Bot Date: Wed, 20 May 2026 21:44:41 -0400 Subject: [PATCH] feat(a11y): landmark regions, skip link, dialog labels, icon button labels C-3: nav/main landmark roles in ClientLayout (nav + main areas) C-4: Skip-to-main-content link in ClientLayout (visually hidden, focusable) H-2: aria-labelledby on LeaveRoomPrompt and RoomTopicViewer dialogs C-1: aria-label on ~15 icon-only buttons (back, menu, close, folder, account) Co-Authored-By: Claude Sonnet 4.6 --- .../leave-room-prompt/LeaveRoomPrompt.tsx | 4 +-- .../room-topic-viewer/RoomTopicViewer.tsx | 3 +- src/app/pages/client/ClientLayout.tsx | 28 ++++++++++++++++--- src/app/pages/client/ClientRoot.tsx | 1 + src/app/pages/client/direct/Direct.tsx | 2 +- src/app/pages/client/direct/DirectCreate.tsx | 2 +- src/app/pages/client/explore/Explore.tsx | 2 +- src/app/pages/client/explore/Featured.tsx | 2 +- src/app/pages/client/explore/Server.tsx | 2 +- src/app/pages/client/home/CreateRoom.tsx | 2 +- src/app/pages/client/home/Home.tsx | 2 +- src/app/pages/client/home/Search.tsx | 2 +- src/app/pages/client/inbox/Invites.tsx | 2 +- src/app/pages/client/inbox/Notifications.tsx | 2 +- src/app/pages/client/sidebar/SpaceTabs.tsx | 2 +- src/app/pages/client/space/Search.tsx | 2 +- src/app/pages/client/space/Space.tsx | 2 +- 17 files changed, 42 insertions(+), 20 deletions(-) diff --git a/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx b/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx index 74244dde1..b7f0473be 100644 --- a/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx +++ b/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx @@ -56,7 +56,7 @@ export function LeaveRoomPrompt({ roomId, onDone, onCancel }: LeaveRoomPromptPro escapeDeactivates: stopPropagation, }} > - +
- Leave Room + Leave Room diff --git a/src/app/components/room-topic-viewer/RoomTopicViewer.tsx b/src/app/components/room-topic-viewer/RoomTopicViewer.tsx index c6eae43f4..0b0927ac8 100644 --- a/src/app/components/room-topic-viewer/RoomTopicViewer.tsx +++ b/src/app/components/room-topic-viewer/RoomTopicViewer.tsx @@ -17,12 +17,13 @@ export const RoomTopicViewer = as< size="300" flexHeight className={classNames(css.ModalFlex, className)} + aria-labelledby="room-topic-title" {...props} ref={ref} >
- + {name} diff --git a/src/app/pages/client/ClientLayout.tsx b/src/app/pages/client/ClientLayout.tsx index 4a077ba6a..d136d0f99 100644 --- a/src/app/pages/client/ClientLayout.tsx +++ b/src/app/pages/client/ClientLayout.tsx @@ -7,9 +7,29 @@ type ClientLayoutProps = { }; export function ClientLayout({ nav, children }: ClientLayoutProps) { return ( - - {nav} - {children} - + <> + { (e.currentTarget as HTMLElement).style.top = '0'; }} + onBlur={(e) => { (e.currentTarget as HTMLElement).style.top = '-40px'; }} + > + Skip to main content + + + {nav} + {children} + + ); } diff --git a/src/app/pages/client/ClientRoot.tsx b/src/app/pages/client/ClientRoot.tsx index 93f0526e3..5a6120dd5 100644 --- a/src/app/pages/client/ClientRoot.tsx +++ b/src/app/pages/client/ClientRoot.tsx @@ -69,6 +69,7 @@ function ClientRootOptions({ mx }: { mx?: MatrixClient }) { variant="Background" fill="None" onClick={handleToggle} + aria-label="Account options" > - + diff --git a/src/app/pages/client/direct/DirectCreate.tsx b/src/app/pages/client/direct/DirectCreate.tsx index 3deb0b6dd..683aa57f1 100644 --- a/src/app/pages/client/direct/DirectCreate.tsx +++ b/src/app/pages/client/direct/DirectCreate.tsx @@ -44,7 +44,7 @@ export function DirectCreate() { {(onBack) => ( - + )} diff --git a/src/app/pages/client/explore/Explore.tsx b/src/app/pages/client/explore/Explore.tsx index dae831668..24036be0c 100644 --- a/src/app/pages/client/explore/Explore.tsx +++ b/src/app/pages/client/explore/Explore.tsx @@ -96,7 +96,7 @@ export function AddServer() { Add Server - setDialog(false)} radii="300"> + setDialog(false)} radii="300" aria-label="Close">
diff --git a/src/app/pages/client/explore/Featured.tsx b/src/app/pages/client/explore/Featured.tsx index f056cbb5c..b47fef4c6 100644 --- a/src/app/pages/client/explore/Featured.tsx +++ b/src/app/pages/client/explore/Featured.tsx @@ -33,7 +33,7 @@ export function FeaturedRooms() { {(onBack) => ( - + )} diff --git a/src/app/pages/client/explore/Server.tsx b/src/app/pages/client/explore/Server.tsx index 48f267ccd..1279bfb67 100644 --- a/src/app/pages/client/explore/Server.tsx +++ b/src/app/pages/client/explore/Server.tsx @@ -499,7 +499,7 @@ export function PublicRooms() { {screenSize === ScreenSize.Mobile && ( {(onBack) => ( - + )} diff --git a/src/app/pages/client/home/CreateRoom.tsx b/src/app/pages/client/home/CreateRoom.tsx index fddd75aac..bb733d0fb 100644 --- a/src/app/pages/client/home/CreateRoom.tsx +++ b/src/app/pages/client/home/CreateRoom.tsx @@ -25,7 +25,7 @@ export function HomeCreateRoom() { {(onBack) => ( - + )} diff --git a/src/app/pages/client/home/Home.tsx b/src/app/pages/client/home/Home.tsx index d87db963d..c216742c4 100644 --- a/src/app/pages/client/home/Home.tsx +++ b/src/app/pages/client/home/Home.tsx @@ -121,7 +121,7 @@ function HomeHeader() { - + diff --git a/src/app/pages/client/home/Search.tsx b/src/app/pages/client/home/Search.tsx index d5ddfb778..e76e9d537 100644 --- a/src/app/pages/client/home/Search.tsx +++ b/src/app/pages/client/home/Search.tsx @@ -19,7 +19,7 @@ export function HomeSearch() { {screenSize === ScreenSize.Mobile && ( {(onBack) => ( - + )} diff --git a/src/app/pages/client/inbox/Invites.tsx b/src/app/pages/client/inbox/Invites.tsx index 20518e568..5e87b28a1 100644 --- a/src/app/pages/client/inbox/Invites.tsx +++ b/src/app/pages/client/inbox/Invites.tsx @@ -753,7 +753,7 @@ export function Invites() { {screenSize === ScreenSize.Mobile && ( {(onBack) => ( - + )} diff --git a/src/app/pages/client/inbox/Notifications.tsx b/src/app/pages/client/inbox/Notifications.tsx index 9592224f8..7e999ed68 100644 --- a/src/app/pages/client/inbox/Notifications.tsx +++ b/src/app/pages/client/inbox/Notifications.tsx @@ -642,7 +642,7 @@ export function Notifications() { {screenSize === ScreenSize.Mobile && ( {(onBack) => ( - + )} diff --git a/src/app/pages/client/sidebar/SpaceTabs.tsx b/src/app/pages/client/sidebar/SpaceTabs.tsx index 6fc528a10..7a874b8da 100644 --- a/src/app/pages/client/sidebar/SpaceTabs.tsx +++ b/src/app/pages/client/sidebar/SpaceTabs.tsx @@ -522,7 +522,7 @@ function OpenedSpaceFolder({ folder, onClose, children }: OpenedSpaceFolderProps > - + diff --git a/src/app/pages/client/space/Search.tsx b/src/app/pages/client/space/Search.tsx index 017262b5b..12ceddad5 100644 --- a/src/app/pages/client/space/Search.tsx +++ b/src/app/pages/client/space/Search.tsx @@ -34,7 +34,7 @@ export function SpaceSearch() { {screenSize === ScreenSize.Mobile && ( {(onBack) => ( - + )} diff --git a/src/app/pages/client/space/Space.tsx b/src/app/pages/client/space/Space.tsx index 2a7c61993..1f18afe4e 100644 --- a/src/app/pages/client/space/Space.tsx +++ b/src/app/pages/client/space/Space.tsx @@ -273,7 +273,7 @@ function SpaceHeader() { {joinRules?.join_rule !== JoinRule.Public && } - +