@@ -22,43 +22,25 @@ function generateDropdown(element, callback, immediate, options = {}) {
2222 { } ,
2323 Templates . dropdown ( ) ,
2424 {
25- hideOnClick :
26- element . dataset [ "hideOnClick" ] !== "false" ? "toggle" : false ,
2725 onCreate ( instance ) {
2826 const onload = ( ) => {
2927 if ( instance . loaded ) {
3028 return ;
3129 }
3230
3331 document . addEventListener ( "click" , ( event ) => {
34- const isClickInAnyDropdown =
35- ! ! event . target . closest ( "[data-tippy-root]" ) ;
3632 const isClickOnReference = instance . reference . contains (
3733 event . target ,
3834 ) ;
35+ // Don't close the dropdown if the user is interacting with a SELECT menu inside of it
36+ const isSelect = event . target . tagName === "SELECT" ;
3937
40- if ( ! isClickInAnyDropdown && ! isClickOnReference ) {
38+ if ( ! isClickOnReference && ! isSelect ) {
39+ instance . clickToHide = true ;
4140 instance . hide ( ) ;
4241 }
4342 } ) ;
4443
45- instance . popper . addEventListener ( "mouseenter" , ( ) => {
46- const handleMouseMove = ( ) => {
47- const dropdowns =
48- document . querySelectorAll ( "[data-tippy-root]" ) ;
49- const isMouseOverAnyDropdown = Array . from ( dropdowns ) . some (
50- ( dropdown ) => dropdown . matches ( ":hover" ) ,
51- ) ;
52-
53- if ( ! isMouseOverAnyDropdown ) {
54- instance . hide ( ) ;
55- document . removeEventListener ( "mousemove" , handleMouseMove ) ;
56- }
57- } ;
58-
59- document . addEventListener ( "mousemove" , handleMouseMove ) ;
60- } ) ;
61-
6244 callback ( instance ) ;
6345 } ;
6446 if ( immediate ) {
@@ -69,13 +51,21 @@ function generateDropdown(element, callback, immediate, options = {}) {
6951 } ) ;
7052 }
7153 } ,
72- onHide ( ) {
73- const dropdowns = document . querySelectorAll ( "[data-tippy-root]" ) ;
74- const isMouseOverAnyDropdown = Array . from ( dropdowns ) . some (
75- ( dropdown ) => dropdown . matches ( ":hover" ) ,
76- ) ;
54+ onHide ( instance ) {
55+ if (
56+ instance . props . trigger === "mouseenter" &&
57+ ! instance . clickToHide
58+ ) {
59+ const dropdowns = document . querySelectorAll ( "[data-tippy-root]" ) ;
60+ const isMouseOverAnyDropdown = Array . from ( dropdowns ) . some (
61+ ( dropdown ) => dropdown . matches ( ":hover" ) ,
62+ ) ;
63+
64+ return ! isMouseOverAnyDropdown ;
65+ }
7766
78- return ! isMouseOverAnyDropdown ;
67+ instance . clickToHide = false ;
68+ return true ;
7969 } ,
8070 } ,
8171 options ,
0 commit comments