# Focus Trap URL: https://ark-ui.com/docs/utilities/focus-trap Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/utilities/focus-trap.mdx Trap focus within a specified container. --- ## Motivation Focus trapping is essential for modal interfaces and other interactive elements that require user attention. The `FocusTrap` component helps maintain accessibility by ensuring keyboard focus remains within a designated container until explicitly released. ## Examples **Example: basic** #### React ```tsx import { FocusTrap } from '@ark-ui/react/focus-trap' import { useState } from 'react' export const Basic = () => { const [trapped, setTrapped] = useState(false) return ( <>
``` ### Autofocus The focus trap respects elements with the `autofocus` attribute. **Example: autofocus** #### React ```tsx import { FocusTrap } from '@ark-ui/react/focus-trap' import { useRef, useState } from 'react' export const Autofocus = () => { const [trapped, setTrapped] = useState(false) const toggle = () => setTrapped((c) => !c) const buttonRef = useRef(null) const getButtonNode = () => { const node = buttonRef.current if (!node) throw new Error('Button not found') return node } return (
{trapped && (
{/* biome-ignore lint/a11y/noAutofocus: intentional */}
)}
) } ``` #### Solid ```tsx import { FocusTrap } from '@ark-ui/solid/focus-trap' import { Show, createSignal } from 'solid-js' export const Autofocus = () => { const [trapped, setTrapped] = createSignal(false) let buttonRef!: HTMLButtonElement return (
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
{#if trapped}
{/if}
``` ### Initial Focus Use the `initialFocus` prop to set the element that should receive initial focus when the trap is activated. **Example: initial-focus** #### React ```tsx import { FocusTrap } from '@ark-ui/react/focus-trap' import { useRef, useState } from 'react' export const InitialFocus = () => { const [trapped, setTrapped] = useState(false) const toggle = () => setTrapped((c) => !c) const inputRef = useRef(null) return (
inputRef.current}>
``` ## API Reference