@@ -145,8 +145,40 @@ function onDocumentPointerDown(e: PointerEvent) {
145145 }
146146}
147147
148- onMounted (() => document .addEventListener (' pointerdown' , onDocumentPointerDown ))
149- onUnmounted (() => document .removeEventListener (' pointerdown' , onDocumentPointerDown ))
148+ function onDocumentKeydown(e : KeyboardEvent ) {
149+ if (e .key === ' Escape' && activeContributor .value ) {
150+ activeContributor .value = null
151+ }
152+ }
153+
154+ function addListeners() {
155+ document .addEventListener (' pointerdown' , onDocumentPointerDown )
156+ document .addEventListener (' keydown' , onDocumentKeydown )
157+ }
158+
159+ function removeListeners() {
160+ document .removeEventListener (' pointerdown' , onDocumentPointerDown )
161+ document .removeEventListener (' keydown' , onDocumentKeydown )
162+ }
163+
164+ onMounted (() => {
165+ addListeners ()
166+ })
167+
168+ onBeforeUnmount (() => {
169+ cancelClose ()
170+ removeListeners ()
171+ })
172+
173+ onActivated (() => {
174+ addListeners ()
175+ })
176+
177+ onDeactivated (() => {
178+ cancelClose ()
179+ activeContributor .value = null
180+ removeListeners ()
181+ })
150182 </script >
151183
152184<template >
@@ -306,7 +338,7 @@ onUnmounted(() => document.removeEventListener('pointerdown', onDocumentPointerD
306338 :to =" contributor.html_url"
307339 no-underline
308340 no-external-icon
309- :aria-label =" $t('about.contributors.view_profile', { name: contributor.login } )"
341+ :aria-label =" getAriaLabel( contributor)"
310342 class =" group relative block h-12 w-12 rounded-lg transition-all outline-none p-0 bg-transparent"
311343 >
312344 <img
@@ -322,8 +354,10 @@ onUnmounted(() => document.removeEventListener('pointerdown', onDocumentPointerD
322354 v-else
323355 type =" button"
324356 :data-cid =" contributor.id"
325- :aria-expanded =" activeContributor?.id === contributor.id ? 'true' : undefined"
326- :aria-haspopup =" isExpandable(contributor) ? 'true' : undefined"
357+ :aria-expanded ="
358+ isMounted && activeContributor?.id === contributor.id ? 'true' : undefined
359+ "
360+ :aria-haspopup =" isMounted && isExpandable(contributor) ? 'true' : undefined"
327361 :aria-label ="
328362 isExpandable(contributor)
329363 ? getAriaLabel(contributor)
@@ -338,7 +372,6 @@ onUnmounted(() => document.removeEventListener('pointerdown', onDocumentPointerD
338372 @mouseenter =" open(contributor, $event.currentTarget as HTMLElement)"
339373 @mouseleave =" scheduleClose(contributor)"
340374 @click =" toggle(contributor, $event.currentTarget as HTMLElement)"
341- @keydown.escape =" activeContributor = null"
342375 >
343376 <img
344377 :src =" `${contributor.avatar_url}&s=64`"
@@ -391,7 +424,7 @@ onUnmounted(() => document.removeEventListener('pointerdown', onDocumentPointerD
391424 class =" flex items-center gap-1 font-sans text-2xs text-fg-muted text-start min-w-0"
392425 >
393426 <div
394- class =" i-lucide:building-2 size-3 shrink-0 mt-0.5 text-accent/80"
427+ class =" i-lucide:building-2 size-3 shrink-0 text-accent/80"
395428 aria-hidden =" true"
396429 />
397430 <div
0 commit comments