Roving Focus
Tab to focus
Learn more about roving tabindex in Keyboard Navigation Inside Composite Components
Anatomy
Import all parts and piece them together.
<script setup>
import { RovingFocusGroup, RovingFocusItem } from 'reka-ui'
</script>
<template>
<RovingFocusGroup>
<RovingFocusItem />
</RovingFocusGroup>
</template>
API Reference
Group
Contains all the parts of a Roving Focus
Prop | Default | Type |
---|---|---|
as | 'div' | AsTag | Component The element or component this component should render as. Can be overwritten by |
asChild | boolean Change the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | |
currentTabStopId | string | null The controlled value of the current stop item. Can be binded as | |
defaultCurrentTabStopId | string The value of the current stop item. Use when you do not need to control the state of the stop item. | |
dir | 'ltr' | 'rtl' The direction of navigation between items. | |
loop | false | boolean Whether keyboard navigation should loop around |
orientation | 'vertical' | 'horizontal' The orientation of the group. Mainly so arrow navigation is done accordingly (left & right vs. up & down) | |
preventScrollOnEntryFocus | false | boolean When |
Emit | Payload |
---|---|
entryFocus | [event: Event] Event handler called when container is being focused. Can be prevented. |
update:currentTabStopId | [value: string | null] |
Methods | Type |
---|---|
getItems | (includeDisabledItem?: boolean) => { ref: HTMLElement; value?: any; }[] |
Data Attribute | Value |
---|---|
[data-orientation] | "vertical" | "horizontal" | "undefined" |
Item
The item that would inherit the roving tabindex
Prop | Default | Type |
---|---|---|
active | boolean When | |
allowShiftKey | boolean When | |
as | 'span' | AsTag | Component The element or component this component should render as. Can be overwritten by |
asChild | boolean Change the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | |
focusable | true | boolean When |
tabStopId | string |
Data Attribute | Value |
---|---|
[data-active] | Present when not active |
[data-disabled] | Present when not focusable |
[data-orientation] | "vertical" | "horizontal" | "undefined" |
Examples
Vertical orientation
<template>
<RovingFocusGroup :orientation="'vertical'">
…
</RovingFocusGroup>
</template>
Loop
Use loop
property to enable roving from last item to the first item, and vice versa.
<template>
<RovingFocusGroup loop>
…
</RovingFocusGroup>
</template>
Initial focus item
Set active
prop to item to initially focused item.
<template>
<RovingFocusGroup>
<RovingFocusItem>1</RovingFocusItem>
<RovingFocusItem active>2</RovingFocusItem>
<RovingFocusItem>3</RovingFocusItem>
</RovingFocusGroup>
</template>
Unfocusable item
Set focusable="false"
prop to item will prevent them from being focused.
<template>
<RovingFocusGroup>
<RovingFocusItem>1</RovingFocusItem>
<RovingFocusItem :focusable="false">2</RovingFocusItem>
<RovingFocusItem>3</RovingFocusItem>
</RovingFocusGroup>
</template>
Accessibility
Adheres to the Keyboard Navigation Inside Composite Components.
Keyboard Interactions
Key | Description |
---|---|
ArrowDown | Moves focus to the next roving focus item in the group. |
ArrowRight | Moves focus to the next roving focus item in the group. |
ArrowUp | Moves focus to the previous roving focus item in the group. |
ArrowLeft | Moves focus to the previous roving focus item in the group. |
SpaceEnter | Triggers click on the roving focus item. |