Skip to content

Commit 9bb73e3

Browse files
author
Hector Arce De Las Heras
committed
Fix aria-describedby Accessibility Issue
Corrected the implementation of aria-describedby to ensure compatibility with NVDA and VoiceOver. Elements such as span or div now have appropriate roles (interactive, image, or landmark) to ensure they are not ignored by screen readers. This update maintains compatibility with JAWS and Talkback, enhancing overall accessibility.
1 parent 71b7ec9 commit 9bb73e3

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/components/tooltip/components/tooltipTrigger.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@ import { TooltipTriggerWrapperStyled } from '../tooltip.styled';
66
interface ITooltipTrigger {
77
disabled?: boolean;
88
childrenAsButton: boolean;
9+
ariaDescribedBy?: string;
910
}
1011

1112
export const TooltipTrigger = (
1213
props: React.PropsWithChildren<ITooltipTrigger>
1314
): React.ReactNode => {
1415
if (props.childrenAsButton) {
1516
return (
16-
<TooltipTriggerWrapperStyled disabled={props.disabled} type={ButtonType.BUTTON}>
17+
<TooltipTriggerWrapperStyled
18+
aria-describedby={props.ariaDescribedBy}
19+
disabled={props.disabled}
20+
type={ButtonType.BUTTON}
21+
>
1722
{props.children}
1823
</TooltipTriggerWrapperStyled>
1924
);

src/components/tooltip/tooltipStandAlone.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,6 @@ const TooltipStandAlone = ({
149149
return (
150150
<TooltipStyled
151151
ref={props.labelRef}
152-
// Aria describedby is used when the tooltip is not used as a modal
153-
// Tooltip will not be shown when the popover component is used and it is hidden
154-
aria-describedby={
155-
!props.tooltipAsModal &&
156-
(props.mediaDevice === DeviceBreakpointsType.DESKTOP || props.popoverOpen)
157-
? ariaDescriptorsBy
158-
: undefined
159-
}
160152
data-testid={`${props.dataTestId}Tooltip`}
161153
tooltipAsModal={props.tooltipAsModal}
162154
onBlur={props.onBlur}
@@ -165,12 +157,23 @@ const TooltipStandAlone = ({
165157
onKeyDown={props.onKeyDown}
166158
onMouseDown={props.onMouseDown}
167159
onMouseEnter={props.onMouseEnter}
168-
// When no focusable elements screenReaders may read the text when focus and then using arrows
169-
// https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tooltip_role
170-
// or https://dequeuniversity.com/library/aria/tooltip
171160
onMouseLeave={props.onMouseLeave}
172161
>
173-
<TooltipTrigger childrenAsButton={childrenAsButton}>{props.children}</TooltipTrigger>
162+
<TooltipTrigger
163+
// Aria describedby is used when the tooltip is not used as a modal
164+
// When no focusable elements screenReaders may read the text when focus and then using arrows
165+
// https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tooltip_role
166+
// or https://dequeuniversity.com/library/aria/tooltip
167+
ariaDescribedBy={
168+
!props.tooltipAsModal &&
169+
(props.mediaDevice === DeviceBreakpointsType.DESKTOP || props.popoverOpen)
170+
? ariaDescriptorsBy
171+
: undefined
172+
}
173+
childrenAsButton={childrenAsButton}
174+
>
175+
{props.children}
176+
</TooltipTrigger>
174177
{props.mediaDevice === DeviceBreakpointsType.DESKTOP ? (
175178
Tooltip
176179
) : (

0 commit comments

Comments
 (0)