Skip to content

Commit

Permalink
fix(Menu): first item wasn't highlighted when open menu using keyboard
Browse files Browse the repository at this point in the history
  • Loading branch information
zernonia committed Jul 11, 2024
1 parent 0dfaeec commit 3270255
Showing 1 changed file with 39 additions and 28 deletions.
67 changes: 39 additions & 28 deletions packages/radix-vue/src/Menu/MenuItemImpl.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,17 @@ import { injectMenuContentContext } from './MenuContentImpl.vue'
import {
Primitive,
} from '@/Primitive'
import { CollectionItem } from '@/Collection'
import { useForwardExpose } from '@/shared'
defineOptions({
inheritAttrs: false,
})
const props = defineProps<MenuItemImplProps>()
const contentContext = injectMenuContentContext()
const { forwardRef } = useForwardExpose()
const isFocused = ref(false)
Expand Down Expand Up @@ -56,32 +63,36 @@ async function handlePointerLeave(event: PointerEvent) {
</script>

<template>
<Primitive
role="menuitem"
tabindex="-1"
:as="as"
:as-child="asChild"
data-radix-vue-collection-item
:aria-disabled="disabled || undefined"
:data-disabled="disabled ? '' : undefined"
:data-highlighted="isFocused ? '' : undefined"
@pointermove="handlePointerMove"
@pointerleave="handlePointerLeave"
@focus="
async (event) => {
await nextTick();
if (event.defaultPrevented || disabled) return;
isFocused = true;
}
"
@blur="
async (event) => {
await nextTick();
if (event.defaultPrevented) return;
isFocused = false;
}
"
>
<slot />
</Primitive>
<CollectionItem>
<Primitive
:ref="forwardRef"
role="menuitem"
tabindex="-1"
v-bind="$attrs"
:as="as"
:as-child="asChild"
data-radix-vue-collection-item
:aria-disabled="disabled || undefined"
:data-disabled="disabled ? '' : undefined"
:data-highlighted="isFocused ? '' : undefined"
@pointermove="handlePointerMove"
@pointerleave="handlePointerLeave"
@focus="
async (event) => {
await nextTick();
if (event.defaultPrevented || disabled) return;
isFocused = true;
}
"
@blur="
async (event) => {
await nextTick();
if (event.defaultPrevented) return;
isFocused = false;
}
"
>
<slot />
</Primitive>
</CollectionItem>
</template>

0 comments on commit 3270255

Please sign in to comment.