diff --git a/packages/overlays/src/OverlayController.js b/packages/overlays/src/OverlayController.js index a7a6f3afb..74c504ea3 100644 --- a/packages/overlays/src/OverlayController.js +++ b/packages/overlays/src/OverlayController.js @@ -246,9 +246,11 @@ export class OverlayController { this.contentNode.setAttribute('id', this._contentId); } if (this.isTooltip) { - // TODO: (@tlouisse) this could also be labelledby. if (this.invokerNode) { - this.invokerNode.setAttribute('aria-describedby', this._contentId); + this.invokerNode.setAttribute( + this.invokerRelation === 'label' ? 'aria-labelledby' : 'aria-describedby', + this._contentId, + ); } this.contentNode.setAttribute('role', 'tooltip'); } else { diff --git a/packages/overlays/test/OverlayController.test.js b/packages/overlays/test/OverlayController.test.js index 6754976b4..b4a3feccd 100644 --- a/packages/overlays/test/OverlayController.test.js +++ b/packages/overlays/test/OverlayController.test.js @@ -1167,6 +1167,19 @@ describe('OverlayController', () => { expect(ctrl.invokerNode.getAttribute('aria-describedby')).to.equal(ctrl._contentId); }); + it('adds [aria-labelledby] on invoker when invokerRelation is label', async () => { + const invokerNode = await fixture('