♿️(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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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}>
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -277,6 +277,7 @@
|
|||||||
},
|
},
|
||||||
"sidePanel": {
|
"sidePanel": {
|
||||||
"ariaLabel": "Zijbalk",
|
"ariaLabel": "Zijbalk",
|
||||||
|
"backToTools": "Terug naar vergadertools",
|
||||||
"heading": {
|
"heading": {
|
||||||
"participants": "Deelnemers",
|
"participants": "Deelnemers",
|
||||||
"effects": "Effecten",
|
"effects": "Effecten",
|
||||||
|
|||||||
Reference in New Issue
Block a user