Skip to content

Commit e638d85

Browse files
committedOct 17, 2024·
fix(theme/a11y): don't select search result unless mouse is actually moved
closes #4297
1 parent fcae4d5 commit e638d85

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed
 

‎src/client/theme-default/components/VPLocalSearchBox.vue

+13-2
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ function onSearchBarClick(event: PointerEvent) {
281281
/* Search keyboard selection */
282282
283283
const selectedIndex = ref(-1)
284-
const disableMouseOver = ref(false)
284+
const disableMouseOver = ref(true)
285285
286286
watch(results, (r) => {
287287
selectedIndex.value = r.length ? 0 : -1
@@ -400,6 +400,16 @@ function formMarkRegex(terms: Set<string>) {
400400
'gi'
401401
)
402402
}
403+
404+
function onMouseMove(e: MouseEvent) {
405+
if (!disableMouseOver.value) return
406+
const el = (e.target as HTMLElement)?.closest<HTMLAnchorElement>('.result')
407+
const index = Number.parseInt(el?.dataset.index!)
408+
if (index >= 0 && index !== selectedIndex.value) {
409+
selectedIndex.value = index
410+
}
411+
disableMouseOver.value = false
412+
}
403413
</script>
404414

405415
<template>
@@ -487,7 +497,7 @@ function formMarkRegex(terms: Set<string>) {
487497
:role="results?.length ? 'listbox' : undefined"
488498
:aria-labelledby="results?.length ? 'localsearch-label' : undefined"
489499
class="results"
490-
@mousemove="disableMouseOver = false"
500+
@mousemove="onMouseMove"
491501
>
492502
<li
493503
v-for="(p, index) in results"
@@ -506,6 +516,7 @@ function formMarkRegex(terms: Set<string>) {
506516
@mouseenter="!disableMouseOver && (selectedIndex = index)"
507517
@focusin="selectedIndex = index"
508518
@click="$emit('close')"
519+
:data-index="index"
509520
>
510521
<div>
511522
<div class="titles">

0 commit comments

Comments
 (0)
Please sign in to comment.