focus-trap.tsx 718 B

12345678910111213141516171819202122232425262728293031
  1. import { useRef } from 'react'
  2. import {
  3. FocusTrap as FocusTrapReact,
  4. FocusTrapProps as FocusTrapReactProps,
  5. } from 'focus-trap-react'
  6. export type FocusTrapProps = {
  7. active: FocusTrapReactProps['active']
  8. children: React.ReactNode
  9. focusTrapOptions?: FocusTrapReactProps['focusTrapOptions']
  10. }
  11. export default function FocusTrap({
  12. active,
  13. focusTrapOptions,
  14. children,
  15. }: FocusTrapProps) {
  16. const containerRef = useRef<HTMLDivElement>(null)
  17. return (
  18. <FocusTrapReact
  19. active={active}
  20. focusTrapOptions={{
  21. ...focusTrapOptions,
  22. fallbackFocus: () => containerRef.current as HTMLElement,
  23. }}
  24. >
  25. <div ref={containerRef}>{children}</div>
  26. </FocusTrapReact>
  27. )
  28. }