Skip to content

Commit 9501b90

Browse files
committed
Should prefer aria-labelled-by over aria-label
1 parent b9f3f77 commit 9501b90

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

packages/react/src/Banner/Banner.test.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,25 @@ describe('Banner', () => {
5050
expect(screen.getByRole('region')).toHaveAttribute('aria-label', 'Test')
5151
})
5252

53+
it('should prefer aria-labelledby over aria-label and not set both', () => {
54+
render(
55+
<Banner aria-label="Override" aria-labelledby="my-banner-title">
56+
<Banner.Title id="my-banner-title">Explicit Banner Title</Banner.Title>
57+
</Banner>,
58+
)
59+
60+
const region = screen.getByRole('region', {name: 'Explicit Banner Title'})
61+
expect(region).toHaveAttribute('aria-labelledby', 'my-banner-title')
62+
expect(region).not.toHaveAttribute('aria-label')
63+
})
64+
65+
it('should only set aria-label when aria-labelledby is not provided', () => {
66+
render(<Banner aria-label="Custom Label" title="test" />)
67+
const region = screen.getByRole('region')
68+
expect(region).toHaveAttribute('aria-label', 'Custom Label')
69+
expect(region).not.toHaveAttribute('aria-labelledby')
70+
})
71+
5372
it('should default the title to a h2', () => {
5473
render(<Banner title="test" />)
5574
expect(screen.getByRole('heading', {level: 2})).toBeInTheDocument()

packages/react/src/Banner/Banner.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ const labels: Record<BannerVariant, string> = {
8585
export const Banner = React.forwardRef<HTMLElement, BannerProps>(function Banner(
8686
{
8787
'aria-label': label,
88+
'aria-labelledby': labelledBy,
8889
children,
8990
className,
9091
description,
@@ -131,7 +132,8 @@ export const Banner = React.forwardRef<HTMLElement, BannerProps>(function Banner
131132
return (
132133
<section
133134
{...rest}
134-
aria-label={label ?? labels[variant]}
135+
aria-labelledby={labelledBy}
136+
aria-label={labelledBy ? undefined : (label ?? labels[variant])}
135137
className={clsx(className, classes.Banner)}
136138
data-dismissible={onDismiss ? '' : undefined}
137139
data-title-hidden={hideTitle ? '' : undefined}

0 commit comments

Comments
 (0)