️(frontend) add accessible back button in side panel

label the back button and separate it from the heading for a11y
This commit is contained in:
Cyril
2026-01-16 15:51:31 +01:00
committed by aleb_the_flash
parent f9524b2f0a
commit cb77688572
6 changed files with 34 additions and 19 deletions

View File

@@ -8,9 +8,14 @@ and this project adheres to
## [Unreleased] ## [Unreleased]
### Changed
- ♿️(frontend) add accessible back button in side panel #881
### Fixed ### Fixed
🔒(backend) prevent automatic upgrade setuptools - 🔒(backend) prevent automatic upgrade setuptools
## [1.3.0] - 2026-01-13 ## [1.3.0] - 2026-01-13

View File

@@ -13,6 +13,7 @@ import { Effects } from './effects/Effects'
import { Admin } from './Admin' import { Admin } from './Admin'
import { Tools } from './Tools' import { Tools } from './Tools'
import { Info } from './Info' import { Info } from './Info'
import { HStack } from '@/styled-system/jsx'
type StyledSidePanelProps = { type StyledSidePanelProps = {
title: string title: string
@@ -23,6 +24,7 @@ type StyledSidePanelProps = {
closeButtonTooltip: string closeButtonTooltip: string
isSubmenu: boolean isSubmenu: boolean
onBack: () => void onBack: () => void
backButtonLabel: string
} }
const StyledSidePanel = ({ const StyledSidePanel = ({
@@ -34,6 +36,7 @@ const StyledSidePanel = ({
closeButtonTooltip, closeButtonTooltip,
isSubmenu = false, isSubmenu = false,
onBack, onBack,
backButtonLabel,
}: StyledSidePanelProps) => ( }: StyledSidePanelProps) => (
<aside <aside
className={css({ className={css({
@@ -63,31 +66,34 @@ const StyledSidePanel = ({
aria-hidden={isClosed} aria-hidden={isClosed}
aria-label={ariaLabel} aria-label={ariaLabel}
> >
<Heading <HStack alignItems="center">
slot="title"
level={1}
className={text({ variant: 'h2' })}
style={{
paddingLeft: '1.5rem',
paddingTop: '1rem',
display: isClosed ? 'none' : 'flex',
justifyContent: 'start',
alignItems: 'center',
}}
>
{isSubmenu && ( {isSubmenu && (
<Button <Button
variant="secondaryText" variant="secondaryText"
size="sm" size="sm"
square square
className={css({ marginRight: '0.5rem' })} className={css({ marginRight: '0.5rem', marginLeft: '1rem' })}
aria-label={backButtonLabel}
onPress={onBack} onPress={onBack}
> >
<RiArrowLeftLine size={20} /> <RiArrowLeftLine size={20} aria-hidden="true" />
</Button> </Button>
)} )}
{title} <Heading
</Heading> slot="title"
level={1}
className={text({ variant: 'h2' })}
style={{
paddingLeft: isSubmenu ? 0 : '1.5rem',
paddingTop: '1rem',
display: isClosed ? 'none' : 'flex',
justifyContent: 'start',
alignItems: 'center',
}}
>
{title}
</Heading>
</HStack>
<Div <Div
position="absolute" position="absolute"
top="5" top="5"
@@ -129,7 +135,6 @@ const Panel = ({ isOpen, keepAlive = false, children }: PanelProps) => (
{keepAlive || isOpen ? children : null} {keepAlive || isOpen ? children : null}
</div> </div>
) )
export const SidePanel = () => { export const SidePanel = () => {
const { const {
activePanelId, activePanelId,
@@ -158,6 +163,7 @@ export const SidePanel = () => {
})} })}
isClosed={!isSidePanelOpen} isClosed={!isSidePanelOpen}
isSubmenu={isSubPanelOpen} isSubmenu={isSubPanelOpen}
backButtonLabel={t('backToTools')}
onBack={() => (layoutStore.activeSubPanelId = null)} onBack={() => (layoutStore.activeSubPanelId = null)}
> >
<Panel isOpen={isParticipantsOpen}> <Panel isOpen={isParticipantsOpen}>

View File

@@ -277,6 +277,7 @@
}, },
"sidePanel": { "sidePanel": {
"ariaLabel": "Seitenleiste", "ariaLabel": "Seitenleiste",
"backToTools": "Zurück zu den Meeting-Tools",
"heading": { "heading": {
"participants": "Teilnehmer", "participants": "Teilnehmer",
"effects": "Effekte", "effects": "Effekte",

View File

@@ -277,6 +277,7 @@
}, },
"sidePanel": { "sidePanel": {
"ariaLabel": "Sidepanel", "ariaLabel": "Sidepanel",
"backToTools": "Back to meeting tools",
"heading": { "heading": {
"participants": "Participants", "participants": "Participants",
"effects": "Backgrounds and Effects", "effects": "Backgrounds and Effects",

View File

@@ -277,6 +277,7 @@
}, },
"sidePanel": { "sidePanel": {
"ariaLabel": "Panneau latéral", "ariaLabel": "Panneau latéral",
"backToTools": "Retour aux outils de réunion",
"heading": { "heading": {
"participants": "Participants", "participants": "Participants",
"effects": "Arrière-plans et effets", "effects": "Arrière-plans et effets",

View File

@@ -277,6 +277,7 @@
}, },
"sidePanel": { "sidePanel": {
"ariaLabel": "Zijbalk", "ariaLabel": "Zijbalk",
"backToTools": "Terug naar vergadertools",
"heading": { "heading": {
"participants": "Deelnemers", "participants": "Deelnemers",
"effects": "Effecten", "effects": "Effecten",