@@ -27,6 +27,7 @@ import {
27
27
toRefs ,
28
28
watch ,
29
29
watchEffect ,
30
+ ref ,
30
31
} from 'vue' ;
31
32
import type { CSSProperties , ExtractPropTypes , PropType } from 'vue' ;
32
33
import PropTypes from '../_util/vue-types' ;
@@ -280,6 +281,7 @@ export default defineComponent({
280
281
const triggerRef = shallowRef < RefTriggerProps > ( null ) ;
281
282
const selectorRef = shallowRef < RefSelectorProps > ( null ) ;
282
283
const listRef = shallowRef < RefOptionListProps > ( null ) ;
284
+ const blurRef = ref < boolean > ( false ) ;
283
285
284
286
/** Used for component focused management */
285
287
const [ mockFocused , setMockFocused , cancelSetMockFocused ] = useDelayReset ( ) ;
@@ -339,10 +341,10 @@ export default defineComponent({
339
341
const onToggleOpen = ( newOpen ?: boolean ) => {
340
342
const nextOpen = newOpen !== undefined ? newOpen : ! mergedOpen . value ;
341
343
342
- if ( innerOpen . value !== nextOpen && ! props . disabled ) {
344
+ if ( ! props . disabled ) {
343
345
setInnerOpen ( nextOpen ) ;
344
- if ( props . onDropdownVisibleChange ) {
345
- props . onDropdownVisibleChange ( nextOpen ) ;
346
+ if ( mergedOpen . value !== nextOpen ) {
347
+ props . onDropdownVisibleChange && props . onDropdownVisibleChange ( nextOpen ) ;
346
348
}
347
349
}
348
350
} ;
@@ -413,6 +415,9 @@ export default defineComponent({
413
415
if ( innerOpen . value && ! ! props . disabled ) {
414
416
setInnerOpen ( false ) ;
415
417
}
418
+ if ( props . disabled && ! blurRef . value ) {
419
+ setMockFocused ( false ) ;
420
+ }
416
421
} ,
417
422
{ immediate : true } ,
418
423
) ;
@@ -524,9 +529,12 @@ export default defineComponent({
524
529
} ;
525
530
526
531
const onContainerBlur : FocusEventHandler = ( ...args ) => {
532
+ blurRef . value = true ;
533
+
527
534
setMockFocused ( false , ( ) => {
528
535
focusRef . value = false ;
529
- onToggleOpen ( false ) ;
536
+ blurRef . value = false ;
537
+ //onToggleOpen(false);
530
538
} ) ;
531
539
532
540
if ( props . disabled ) {
0 commit comments