Skip to content

Commit 98a2efe

Browse files
committed
fix(clerk-js): Add aria-label and aria-expanded in menu trigger
1 parent 4c5c07f commit 98a2efe

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

packages/clerk-js/src/ui/elements/Menu.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,15 @@ export const Menu = withFloatingTree((props: MenuProps) => {
4444
);
4545
});
4646

47-
type MenuTriggerProps = React.PropsWithChildren<Record<never, never>>;
47+
type MenuTriggerProps = React.PropsWithChildren<{ arialLabel?: string | ((open: boolean) => string) }>;
4848

4949
export const MenuTrigger = (props: MenuTriggerProps) => {
50-
const { children } = props;
50+
const { children, arialLabel } = props;
5151
const { popoverCtx, elementId } = useMenuState();
5252
const { reference, toggle, isOpen } = popoverCtx;
5353

54+
const normalizedAriaLabel = typeof arialLabel === 'function' ? arialLabel(isOpen) : arialLabel;
55+
5456
if (!isValidElement(children)) {
5557
return null;
5658
}
@@ -60,7 +62,7 @@ export const MenuTrigger = (props: MenuTriggerProps) => {
6062
ref: reference,
6163
elementDescriptor: children.props.elementDescriptor || descriptors.menuButton,
6264
elementId: children.props.elementId || descriptors.menuButton.setId(elementId),
63-
'aria-label': `${isOpen ? 'Close' : 'Open'} menu`,
65+
'aria-label': normalizedAriaLabel,
6466
'aria-expanded': isOpen,
6567
onClick: (e: React.MouseEvent) => {
6668
children.props?.onClick?.(e);

packages/clerk-js/src/ui/elements/ThreeDotsMenu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const ThreeDotsMenu = (props: ThreeDotsMenuProps) => {
2121
const { actions, elementId } = props;
2222
return (
2323
<Menu elementId={elementId}>
24-
<MenuTrigger>
24+
<MenuTrigger arialLabel={isOpen => `${isOpen ? 'Close' : 'Open'} menu`}>
2525
<Button
2626
sx={t => ({
2727
padding: t.space.$0x5,

0 commit comments

Comments
 (0)