File tree 2 files changed +30
-0
lines changed
packages/calcite-components/src/components/tooltip
2 files changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -98,6 +98,11 @@ export default class TooltipManager {
98
98
}
99
99
} ;
100
100
101
+ private pointerLeaveHandler = ( ) : void => {
102
+ this . clearHoverTimeout ( ) ;
103
+ this . closeHoveredTooltip ( ) ;
104
+ } ;
105
+
101
106
private pointerMoveHandler = ( event : PointerEvent ) : void => {
102
107
if ( event . defaultPrevented ) {
103
108
this . closeHoveredTooltip ( ) ;
@@ -218,6 +223,7 @@ export default class TooltipManager {
218
223
window . addEventListener ( "click" , this . clickHandler ) ;
219
224
window . addEventListener ( "focusin" , this . focusInHandler ) ;
220
225
window . addEventListener ( "blur" , this . blurHandler ) ;
226
+ document . addEventListener ( "pointerleave" , this . pointerLeaveHandler ) ;
221
227
}
222
228
223
229
private removeListeners ( ) : void {
@@ -226,6 +232,7 @@ export default class TooltipManager {
226
232
window . removeEventListener ( "click" , this . clickHandler ) ;
227
233
window . removeEventListener ( "focusin" , this . focusInHandler ) ;
228
234
window . removeEventListener ( "blur" , this . blurHandler ) ;
235
+ document . removeEventListener ( "pointerleave" , this . pointerLeaveHandler ) ;
229
236
}
230
237
231
238
private clearHoverOpenTimeout ( ) : void {
Original file line number Diff line number Diff line change @@ -1396,6 +1396,29 @@ describe("calcite-tooltip", () => {
1396
1396
} ) ;
1397
1397
} ) ;
1398
1398
1399
+ it ( "closes tooltip when pointer leaves document (simulates iframe use case)" , async ( ) => {
1400
+ const page = await newE2EPage ( ) ;
1401
+ await page . setContent ( `
1402
+ <calcite-tooltip id="tooltip" reference-element="trigger">Awesome tooltip!</calcite-tooltip>
1403
+ <button id="trigger">Hover me</button>
1404
+ ` ) ;
1405
+ const button = await page . find ( "#trigger" ) ;
1406
+ const tooltip = await page . find ( "calcite-tooltip" ) ;
1407
+
1408
+ await button . hover ( ) ;
1409
+ await page . waitForTimeout ( TOOLTIP_OPEN_DELAY_MS ) ;
1410
+ await page . waitForChanges ( ) ;
1411
+
1412
+ expect ( await tooltip . getProperty ( "open" ) ) . toBe ( true ) ;
1413
+
1414
+ const viewport = page . viewport ( ) ;
1415
+ await page . mouse . move ( viewport . width + 100 , viewport . height + 100 ) ;
1416
+ await page . waitForChanges ( ) ;
1417
+
1418
+ await page . waitForTimeout ( TOOLTIP_CLOSE_DELAY_MS ) ;
1419
+ expect ( await tooltip . getProperty ( "open" ) ) . toBe ( false ) ;
1420
+ } ) ;
1421
+
1399
1422
describe ( "theme" , ( ) => {
1400
1423
describe ( "default" , ( ) => {
1401
1424
themed (
You can’t perform that action at this time.
0 commit comments