Skip to content

Commit 623ed76

Browse files
committed
fix(ui-top-nav-bar,ui-popover,ui-drilldown): automatically set aria-expanded, allow override with shouldSetARIAExpanded
INSTUI-4544
1 parent baf1645 commit 623ed76

File tree

8 files changed

+34
-11
lines changed

8 files changed

+34
-11
lines changed

packages/ui-drilldown/src/Drilldown/index.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ class Drilldown extends Component<DrilldownProps, DrilldownState> {
121121
shouldReturnFocus: true,
122122
withArrow: true,
123123
offsetX: 0,
124-
offsetY: 0
124+
offsetY: 0,
125+
shouldSetARIAExpanded: true
125126
}
126127

127128
static Group = DrilldownGroup
@@ -1494,11 +1495,13 @@ class Drilldown extends Component<DrilldownProps, DrilldownState> {
14941495
onFocus,
14951496
onMouseOver,
14961497
offsetX,
1497-
offsetY
1498+
offsetY,
1499+
shouldSetARIAExpanded
14981500
} = this.props
14991501

15001502
return trigger ? (
15011503
<Popover
1504+
shouldSetARIAExpanded={shouldSetARIAExpanded}
15021505
isShowingContent={show}
15031506
defaultIsShowingContent={defaultShow}
15041507
shouldCloseOnDocumentClick={true}
@@ -1553,6 +1556,7 @@ class Drilldown extends Component<DrilldownProps, DrilldownState> {
15531556
this._trigger = el
15541557
},
15551558
'aria-haspopup': this.props.role,
1559+
'aria-expanded': 'true',
15561560
id: this._triggerId,
15571561
disabled: !!((trigger as ReactElement).props.disabled || disabled),
15581562
'aria-disabled':

packages/ui-drilldown/src/Drilldown/props.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ type DrilldownOwnProps = {
261261
* Works only if `trigger` is provided.
262262
*/
263263
offsetY?: string | number
264+
/**
265+
* If `true` (default), aria-expanded is calculated automatically on the trigger
266+
*/
267+
shouldSetARIAExpanded?: boolean
264268
}
265269

266270
type PropKeys = keyof DrilldownOwnProps
@@ -338,7 +342,8 @@ const propTypes: PropValidators<PropKeys> = {
338342
shouldReturnFocus: PropTypes.bool,
339343
withArrow: PropTypes.bool,
340344
offsetX: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
341-
offsetY: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
345+
offsetY: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
346+
shouldSetARIAExpanded: PropTypes.bool
342347
}
343348

344349
const allowedProps: AllowedPropKeys = [

packages/ui-popover/src/Popover/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ class Popover extends Component<PopoverProps, PopoverState> {
9898
shouldReturnFocus: true,
9999
shouldCloseOnDocumentClick: true,
100100
shouldFocusContentOnTriggerBlur: false,
101-
shouldCloseOnEscape: true
101+
shouldCloseOnEscape: true,
102+
shouldSetARIAExpanded: true
102103
}
103104

104105
constructor(props: PopoverProps) {
@@ -437,7 +438,7 @@ class Popover extends Component<PopoverProps, PopoverState> {
437438
let trigger = this._renderTrigger
438439

439440
if (trigger) {
440-
const { on, shouldContainFocus } = this.props
441+
const { on } = this.props
441442

442443
let onClick: React.MouseEventHandler | undefined = undefined
443444
let onFocus: React.FocusEventHandler | undefined = undefined
@@ -468,7 +469,7 @@ class Popover extends Component<PopoverProps, PopoverState> {
468469
}
469470
}
470471

471-
if (shouldContainFocus) {
472+
if (this.props.shouldSetARIAExpanded) {
472473
// only set aria-expanded if popover can contain focus
473474
expanded = this.shown ? 'true' : 'false'
474475

packages/ui-popover/src/Popover/props.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,10 @@ type PopoverOwnProps = {
283283
* Only applies to a Popover without an arrow.
284284
*/
285285
borderWidth?: BorderWidth
286+
/**
287+
* If `true` (default), aria-expanded is calculated automatically on the trigger
288+
*/
289+
shouldSetARIAExpanded?: boolean
286290
}
287291

288292
type PopoverProps = PopoverOwnProps &
@@ -353,7 +357,8 @@ const propTypes: PropValidators<PropKeys> = {
353357
renderTrigger: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
354358
children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
355359
elementRef: PropTypes.func,
356-
borderWidth: ThemeablePropTypes.borderWidth
360+
borderWidth: ThemeablePropTypes.borderWidth,
361+
shouldSetARIAExpanded: PropTypes.bool
357362
}
358363

359364
const allowedProps: AllowedPropKeys = [
@@ -399,7 +404,8 @@ const allowedProps: AllowedPropKeys = [
399404
'renderTrigger',
400405
'children',
401406
'elementRef',
402-
'borderWidth'
407+
'borderWidth',
408+
'shouldSetARIAExpanded'
403409
]
404410

405411
export type { PopoverOwnProps, PopoverProps, PopoverState, PopoverStyle }

packages/ui-tooltip/src/Tooltip/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class Tooltip extends Component<TooltipProps, TooltipState> {
177177
elementRef={this.handleRef}
178178
shouldCloseOnDocumentClick={false}
179179
shouldCloseOnEscape
180+
shouldSetARIAExpanded={false}
180181
>
181182
{!preventTooltip ? (
182183
<span id={this._id} css={styles?.tooltip} role="tooltip">

packages/ui-top-nav-bar/src/TopNavBar/TopNavBarActionItems/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,10 @@ class TopNavBarActionItems extends Component<
223223
tooltip={tooltip}
224224
showSubmenuChevron={false}
225225
renderSubmenu={
226-
<Drilldown rootPageId={this._hiddenActionItemsMenuId}>
226+
<Drilldown
227+
shouldSetARIAExpanded={false}
228+
rootPageId={this._hiddenActionItemsMenuId}
229+
>
227230
{[
228231
<Drilldown.Page
229232
id={this._hiddenActionItemsMenuId}

packages/ui-top-nav-bar/src/TopNavBar/TopNavBarMenuItems/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,10 @@ class TopNavBarMenuItems extends Component<
163163
id={this._hiddenMenuItemsMenuTriggerId}
164164
status={hasActiveChild ? 'active' : 'default'}
165165
renderSubmenu={
166-
<Drilldown rootPageId={this._hiddenItemsMenuId}>
166+
<Drilldown
167+
shouldSetARIAExpanded={false}
168+
rootPageId={this._hiddenItemsMenuId}
169+
>
167170
{[
168171
<Drilldown.Page
169172
id={this._hiddenItemsMenuId}

packages/ui-top-nav-bar/src/TopNavBar/utils/exampleHelpers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ const avatarExample = {
8484
}
8585

8686
const itemSubmenuExample = (
87-
<Drilldown rootPageId="root">
87+
<Drilldown shouldSetARIAExpanded={false} rootPageId="root">
8888
<Drilldown.Page id="root">
8989
<Drilldown.Option id="linkExampleOption1" href="/#One">
9090
Link One

0 commit comments

Comments
 (0)