mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-27 11:01:56 +02:00
* 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
32 lines
718 B
TypeScript
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>
|
|
)
|
|
}
|