@@ -91,6 +91,11 @@ const activeBtnEl = shallowRef<HTMLElement>()
9191let closeTimer: ReturnType <typeof setTimeout > | undefined
9292let lastOpenTime = 0
9393
94+ // Mouse tracking for scroll interactions
95+ let mouseX = 0
96+ let mouseY = 0
97+ let scrollTimer: ReturnType <typeof setTimeout > | undefined
98+
9499function cancelClose() {
95100 if (closeTimer ) {
96101 clearTimeout (closeTimer )
@@ -256,16 +261,43 @@ function onDocumentKeydown(e: KeyboardEvent) {
256261 }
257262}
258263
264+ function onMouseMove(e : MouseEvent ) {
265+ mouseX = e .clientX
266+ mouseY = e .clientY
267+ }
268+
269+ function checkHover() {
270+ const el = document .elementFromPoint (mouseX , mouseY )
271+ const btn = el ?.closest (' button[data-cid]' ) as HTMLElement | null
272+ if (btn ) {
273+ openById (Number (btn .dataset .cid ), btn )
274+ }
275+ }
276+
277+ function onScroll() {
278+ if (activeContributor .value ) {
279+ setActiveBtnExpanded (null , false )
280+ activeContributor .value = undefined
281+ }
282+ clearTimeout (scrollTimer )
283+ scrollTimer = setTimeout (checkHover , 150 )
284+ }
285+
259286let activeBtnDom: HTMLElement | null = null
260287
261288onMounted (() => {
262289 document .addEventListener (' pointerdown' , onDocumentPointerDown )
263290 document .addEventListener (' keydown' , onDocumentKeydown )
291+ window .addEventListener (' scroll' , onScroll , { passive: true })
292+ window .addEventListener (' mousemove' , onMouseMove , { passive: true })
264293})
265294onBeforeUnmount (() => {
266295 cancelClose ()
296+ clearTimeout (scrollTimer )
267297 document .removeEventListener (' pointerdown' , onDocumentPointerDown )
268298 document .removeEventListener (' keydown' , onDocumentKeydown )
299+ window .removeEventListener (' scroll' , onScroll )
300+ window .removeEventListener (' mousemove' , onMouseMove )
269301})
270302 </script >
271303
0 commit comments