Skip to content

Commit 1230085

Browse files
authored
fix: hide menu-bar tooltip on overlay mouseleave to outside (#7322)
1 parent 9506724 commit 1230085

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

integration/tests/menu-bar-tooltip.test.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
import sinon from 'sinon';
1515
import '@vaadin/menu-bar';
1616
import { Tooltip } from '@vaadin/tooltip';
17-
import { mouseleave } from '@vaadin/tooltip/test/helpers.js';
17+
import { mouseenter, mouseleave } from '@vaadin/tooltip/test/helpers.js';
1818

1919
export function mouseover(target) {
2020
fire(target, 'mouseover');
@@ -129,6 +129,14 @@ describe('menu-bar with tooltip', () => {
129129
expect(tooltip.opened).to.be.false;
130130
});
131131

132+
it('should hide tooltip on mouseleave from overlay to outside', () => {
133+
const overlay = tooltip._overlayElement;
134+
mouseover(buttons[0]);
135+
mouseenter(overlay);
136+
mouseleave(overlay);
137+
expect(overlay.opened).to.be.false;
138+
});
139+
132140
it('should not show tooltip on focus without keyboard interaction', async () => {
133141
buttons[0].focus();
134142
await nextRender();

packages/menu-bar/src/vaadin-menu-bar-mixin.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ export const MenuBarMixin = (superClass) =>
179179
constructor() {
180180
super();
181181
this.__boundOnContextMenuKeydown = this.__onContextMenuKeydown.bind(this);
182+
this.__boundOnTooltipMouseLeave = this.__onTooltipOverlayMouseLeave.bind(this);
182183
}
183184

184185
/**
@@ -624,6 +625,11 @@ export const MenuBarMixin = (superClass) =>
624625
tooltip.generator = ({ item }) => item && item.tooltip;
625626
}
626627

628+
if (!tooltip._mouseLeaveListenerAdded) {
629+
tooltip._overlayElement.addEventListener('mouseleave', this.__boundOnTooltipMouseLeave);
630+
tooltip._mouseLeaveListenerAdded = true;
631+
}
632+
627633
if (!this._subMenu.opened) {
628634
this._tooltipController.setTarget(button);
629635
this._tooltipController.setContext({ item: button.item });
@@ -645,6 +651,13 @@ export const MenuBarMixin = (superClass) =>
645651
}
646652
}
647653

654+
/** @private */
655+
__onTooltipOverlayMouseLeave(event) {
656+
if (event.relatedTarget !== this._tooltipController.target) {
657+
this._hideTooltip();
658+
}
659+
}
660+
648661
/** @protected */
649662
_setExpanded(button, expanded) {
650663
button.toggleAttribute('expanded', expanded);

0 commit comments

Comments
 (0)