Skip to main content

Focus Scope

Traps focus within a container with loop support and auto-focus on mount/unmount.

import { FocusScope } from '@gentleduck/primitives/focus-scope'
import { FocusScope } from '@gentleduck/primitives/focus-scope'

Usage

<FocusScope trapped loop onMountAutoFocus={(e) => e.preventDefault()}>
  <div>
    <input placeholder="First" />
    <input placeholder="Second" />
    <button>Submit</button>
  </div>
</FocusScope>
<FocusScope trapped loop onMountAutoFocus={(e) => e.preventDefault()}>
  <div>
    <input placeholder="First" />
    <input placeholder="Second" />
    <button>Submit</button>
  </div>
</FocusScope>

Props

PropTypeDefaultDescription
trappedbooleanfalseTrap focus inside the scope
loopbooleanfalseTab wraps from last to first element
asChildbooleanfalseRender as child element
onMountAutoFocus(event) => void--Called when focus moves in on mount. Prevent default to skip auto-focus.
onUnmountAutoFocus(event) => void--Called when focus restores on unmount