Files
overleaf-cep/services/web/frontend/js/shared/components/focus-trap.tsx
Rebeka Dekany b773ac2715 Add focus trap to Modal component (#28754)
* Add focus-trap-react npm package

* Trap the focus for the Modal

* In some cases, the focus will not return to the trigger element

* If there are no tabbable elements, the focus should fallback

* Add explanations for focusTrapOptions props and extend test

* Auto generate package-lock.json - Add focus-trap-react npm package

GitOrigin-RevId: 488a05d5e95dd369c69bedcfaf7c1fd5e456e302
2025-11-17 09:05:45 +00:00

32 lines
718 B
TypeScript

import { useRef } from 'react'
import {
FocusTrap as FocusTrapReact,
FocusTrapProps as FocusTrapReactProps,
} from 'focus-trap-react'
export type FocusTrapProps = {
active: FocusTrapReactProps['active']
children: React.ReactNode
focusTrapOptions?: FocusTrapReactProps['focusTrapOptions']
}
export default function FocusTrap({
active,
focusTrapOptions,
children,
}: FocusTrapProps) {
const containerRef = useRef<HTMLDivElement>(null)
return (
<FocusTrapReact
active={active}
focusTrapOptions={{
...focusTrapOptions,
fallbackFocus: () => containerRef.current as HTMLElement,
}}
>
<div ref={containerRef}>{children}</div>
</FocusTrapReact>
)
}