diff --git a/packages/ui/src/components/base/Combobox.vue b/packages/ui/src/components/base/Combobox.vue index 81174c22fc..ec85bd9dbd 100644 --- a/packages/ui/src/components/base/Combobox.vue +++ b/packages/ui/src/components/base/Combobox.vue @@ -39,12 +39,25 @@ @clear="handleSearchClear" > @@ -1024,13 +1037,16 @@ function handleSearchClick() { } } -function handleSearchIconClick() { - if (isOpen.value) { - closeDropdown(false) - return - } +function handleSearchChevronClick() { + if (props.disabled) return - openDropdown() + const wasOpen = isOpen.value + searchTriggerRef.value?.focus() + if (wasOpen) { + closeDropdown() + } else { + openDropdown() + } } function handleWindowResize() { @@ -1062,10 +1078,17 @@ function startPositionTracking() { listenerWindow.addEventListener('beforeunload', handleWindowClose) listenerWindow.visualViewport?.addEventListener('scroll', handleViewportChange) listenerWindow.visualViewport?.addEventListener('resize', handleViewportChange) - stopOutsideClick = onClickOutside(dropdownRef, () => closeDropdown(false), { - window: listenerWindow, - ignore: outsideClickIgnoreTargets, - }) + stopOutsideClick = onClickOutside( + dropdownRef, + (event) => { + if (containerRef.value && event.composedPath().includes(containerRef.value)) return + closeDropdown(false) + }, + { + window: listenerWindow, + ignore: outsideClickIgnoreTargets, + }, + ) } function stopPositionTracking() {