diff --git a/libs/features/icons/icons.js b/libs/features/icons/icons.js index a7bac4d16c4..97e2d86a1cf 100644 --- a/libs/features/icons/icons.js +++ b/libs/features/icons/icons.js @@ -24,7 +24,7 @@ function decorateToolTip(icon, iconName) { wrapper.parentElement.replaceChild(icon, wrapper); import('../../scripts/tooltip.js').then(({ default: addTooltipListeners }) => { - addTooltipListeners(icon); + addTooltipListeners(); }); } diff --git a/libs/scripts/tooltip.js b/libs/scripts/tooltip.js index b7f1d70c2c5..4e2afc39bf6 100644 --- a/libs/scripts/tooltip.js +++ b/libs/scripts/tooltip.js @@ -70,25 +70,19 @@ function setTooltipPosition(tooltips) { }); } -export default function addTooltipListeners(ownerElement) { - ownerElement?.addEventListener('click', () => { - ownerElement.classList.add('hide-tooltip'); - }); +export default function addTooltipListeners() { ['keydown', 'mouseenter', 'focus', 'mouseleave', 'blur'].forEach((eventType) => { document.addEventListener(eventType, (event) => { - if (ownerElement && !ownerElement.classList.contains('hide-tooltip') - && eventType === 'keydown' && event.key === 'Escape') { - ownerElement.classList.add('hide-tooltip'); - } - const isTooltip = event.target?.matches?.('.milo-tooltip'); - if (!isTooltip) return; + if (!isTooltip && eventType !== 'keydown') return; if (['mouseenter', 'focus'].includes(eventType)) { event.target.classList.remove('hide-tooltip'); setTooltipPosition([event.target]); } else if (['mouseleave', 'blur'].includes(eventType)) { event.target.classList.add('hide-tooltip'); + } else if (eventType === 'keydown' && event.key === 'Escape') { + document.querySelector('.milo-tooltip:not(.hide-tooltip)')?.classList.add('hide-tooltip'); } }, true); });