Skip to content

Commit a987ad5

Browse files
zernoniaclaude
andauthored
fix(tooltip,hovercard): close when scrollable ancestor is scrolled (#2557)
Tooltip already had a window scroll listener but lacked `{ capture: true }`, so it only fired for page-level scroll and missed scrolls on inner overflow containers (scroll events don't bubble). HoverCard had no scroll handler at all. Fixes #2543 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 9102386 commit a987ad5

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

packages/core/src/HoverCard/HoverCardContentImpl.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface HoverCardContentImplProps extends PopperContentProps {}
99
</script>
1010

1111
<script setup lang="ts">
12+
import { useEventListener } from '@vueuse/core'
1213
import { nextTick, onMounted, onUnmounted, ref, watchEffect } from 'vue'
1314
import { DismissableLayer } from '@/DismissableLayer'
1415
import { PopperContent } from '@/Popper'
@@ -68,6 +69,12 @@ onMounted(() => {
6869
const tabbables = getTabbableNodes(contentElement.value)
6970
tabbables.forEach(tabbable => tabbable.setAttribute('tabindex', '-1'))
7071
}
72+
73+
useEventListener(window, 'scroll', (event: Event) => {
74+
const target = event.target as HTMLElement
75+
if (target?.contains(rootContext.triggerElement.value!))
76+
rootContext.onDismiss()
77+
}, { capture: true })
7178
})
7279
7380
onUnmounted(() => {

packages/core/src/Tooltip/TooltipContentImpl.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ onMounted(() => {
8585
const target = event.target as HTMLElement
8686
if (target?.contains(rootContext.trigger.value!))
8787
rootContext.onClose()
88-
})
88+
}, { capture: true })
8989
// Close this tooltip if another one opens
9090
useEventListener(window, TOOLTIP_OPEN, rootContext.onClose)
9191
})

0 commit comments

Comments
 (0)