{"version":3,"file":"useTrapFocus-D4Ub1Mxi-chunk.js","sources":["../../../GSDClient/Scripts/Hooks/useTrapFocus.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nconst useTrapFocus = (isOpen: boolean, closeTrap: () => void) => {\n const focusRef = useRef();\n useEffect(() => {\n if (isOpen) {\n const trap: HTMLElement | null = focusRef.current;\n const focusableElements: NodeListOf | null =\n trap?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n const handleTabKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n if (\n event.shiftKey &&\n document.activeElement === firstElement\n ) {\n closeTrap();\n } else if (\n !event.shiftKey &&\n document.activeElement === lastElement\n ) {\n closeTrap();\n }\n }\n };\n\n const handleEscapeKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeTrap();\n }\n };\n\n trap.addEventListener('keydown', event => handleTabKeyPress(event));\n trap.addEventListener('keydown', event =>\n handleEscapeKeyPress(event)\n );\n\n return () => {\n trap.removeEventListener('keydown', event =>\n handleTabKeyPress(event)\n );\n trap.removeEventListener('keydown', event =>\n handleEscapeKeyPress(event)\n );\n };\n }\n }, [isOpen]);\n return focusRef;\n};\n\nexport default useTrapFocus;\n"],"names":["useTrapFocus","isOpen","closeTrap","focusRef","useRef","useEffect","trap","focusableElements","firstElement","lastElement","handleTabKeyPress","event","handleEscapeKeyPress"],"mappings":"+CAEM,MAAAA,EAAe,CAACC,EAAiBC,IAA0B,CAC7D,MAAMC,EAAWC,EAAAA,SACjBC,OAAAA,EAAAA,UAAU,IAAM,CACZ,GAAIJ,EAAQ,CACR,MAAMK,EAA2BH,EAAS,QACpCI,EACFD,GAAA,YAAAA,EAAM,iBACF,4EAGFE,EAAeD,EAAkB,CAAC,EAClCE,EAAcF,EAAkBA,EAAkB,OAAS,CAAC,EAE5DG,EAAqBC,GAAyB,CAC5CA,EAAM,MAAQ,QAEVA,EAAM,UACN,SAAS,gBAAkBH,GAI3B,CAACG,EAAM,UACP,SAAS,gBAAkBF,IAEjBP,GAElB,EAGEU,EAAwBD,GAAyB,CAC/CA,EAAM,MAAQ,UACJT,GACd,EAGJ,OAAAI,EAAK,iBAAiB,UAAoBK,GAAAD,EAAkBC,CAAK,CAAC,EAC7DL,EAAA,iBAAiB,UAAWK,GAC7BC,EAAqBD,CAAK,CAAA,EAGvB,IAAM,CACJL,EAAA,oBAAoB,UAAWK,GAChCD,EAAkBC,CAAK,CAAA,EAEtBL,EAAA,oBAAoB,UAAWK,GAChCC,EAAqBD,CAAK,CAAA,CAC9B,CAER,CAAA,EACD,CAACV,CAAM,CAAC,EACJE,CACX"}