@@ -573,19 +573,21 @@ const Tooltip = ({
573573 } )
574574 }
575575
576- const handleMouseEnterTooltip = ( ) => {
576+ const handleMouseOverTooltip = ( ) => {
577577 hoveringTooltip . current = true
578578 }
579- const handleMouseLeaveTooltip = ( ) => {
579+ const handleMouseOutTooltip = ( ) => {
580580 hoveringTooltip . current = false
581581 handleHideTooltip ( )
582582 }
583583
584- if ( clickable && ! hasClickEvent ) {
585- // used to keep the tooltip open when hovering content.
586- // not needed if using click events.
587- tooltipRef . current ?. addEventListener ( 'mouseenter' , handleMouseEnterTooltip )
588- tooltipRef . current ?. addEventListener ( 'mouseleave' , handleMouseLeaveTooltip )
584+ const addHoveringTooltipListeners =
585+ clickable && ( actualCloseEvents . mouseout || actualCloseEvents . mouseleave )
586+ if ( addHoveringTooltipListeners ) {
587+ // used to keep the tooltip open when hovering from anchor to tooltip.
588+ // only relevant if either `mouseout`/`mouseleave` is in use
589+ tooltipRef . current ?. addEventListener ( 'mouseover' , handleMouseOverTooltip )
590+ tooltipRef . current ?. addEventListener ( 'mouseout' , handleMouseOutTooltip )
589591 }
590592
591593 enabledEvents . forEach ( ( { event, listener } ) => {
@@ -611,9 +613,9 @@ const Tooltip = ({
611613 if ( actualGlobalCloseEvents . escape ) {
612614 window . removeEventListener ( 'keydown' , handleEsc )
613615 }
614- if ( clickable && ! hasClickEvent ) {
615- tooltipRef . current ?. removeEventListener ( 'mouseenter ' , handleMouseEnterTooltip )
616- tooltipRef . current ?. removeEventListener ( 'mouseleave ' , handleMouseLeaveTooltip )
616+ if ( addHoveringTooltipListeners ) {
617+ tooltipRef . current ?. removeEventListener ( 'mouseover ' , handleMouseOverTooltip )
618+ tooltipRef . current ?. removeEventListener ( 'mouseout ' , handleMouseOutTooltip )
617619 }
618620 enabledEvents . forEach ( ( { event, listener } ) => {
619621 elementRefs . forEach ( ( ref ) => {
0 commit comments