{"id":"XSA3","dependencies":[{"name":"/Users/david/dev/react-use-focus-trap/package.json","includedInParent":true,"mtime":1662553802836},{"name":"./util.js","loc":{"line":2,"column":50,"index":106},"parent":"/Users/david/dev/react-use-focus-trap/src/useFocusTrap.js","resolved":"/Users/david/dev/react-use-focus-trap/src/util.js"}],"generated":{"js":"\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0}),exports.useFocusTrap=o;var e=require(\"react\"),t=require(\"./util.js\");const n=\"a[href], area[href], input:not([disabled]):not([type=hidden]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]\",r=9;function o(){const o=(0,e.useRef)(null),l=(0,e.useCallback)((e,t,n=!1,r=0)=>{if(r>e.length)return!1;const o=!!n,a=e.length-1;var d;t||(t=null!==(d=e.indexOf(document.activeElement))&&void 0!==d?d:0);let i=o?t-1:t+1;i>a&&(i=0),i<0&&(i=a);const s=e[i];s.focus(),document.activeElement!==s&&l(e,i,n,r+1)}),a=(0,e.useCallback)(e=>{const a=o.current;if(null!==a&&(e.which===r||\"Tab\"===e.key)){e.preventDefault();const r=!!e.shiftKey;let o=Array.from(a.querySelectorAll(n)).filter(e=>(0,t.getTabIndexOfNode)(e)>=0);o=o.sort(t.sortByTabIndex),l(o,void 0,r)}},[]);return(0,e.useEffect)(()=>(window.addEventListener(\"keydown\",a),()=>{window.removeEventListener(\"keydown\",a)}),[]),[o]}"},"sourceMaps":{"js":{"mappings":[{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":0}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":13}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":20}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":35}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":43}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":56}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":57}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":64}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":68}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":76}},{"source":"useFocusTrap.js","original":{"line":88,"column":1},"generated":{"line":1,"column":89}},{"source":"useFocusTrap.js","original":{"line":1,"column":0},"generated":{"line":1,"column":91}},{"source":"useFocusTrap.js","original":{"line":1,"column":0},"generated":{"line":1,"column":95}},{"source":"useFocusTrap.js","original":{"line":1,"column":0},"generated":{"line":1,"column":97}},{"source":"useFocusTrap.js","original":{"line":1,"column":0},"generated":{"line":1,"column":105}},{"source":"useFocusTrap.js","original":{"line":2,"column":0},"generated":{"line":1,"column":114}},{"source":"useFocusTrap.js","original":{"line":2,"column":0},"generated":{"line":1,"column":116}},{"source":"useFocusTrap.js","original":{"line":2,"column":0},"generated":{"line":1,"column":124}},{"source":"useFocusTrap.js","original":{"line":4,"column":0},"generated":{"line":1,"column":137}},{"source":"useFocusTrap.js","name":"focusableElementsSelector","original":{"line":4,"column":6},"generated":{"line":1,"column":143}},{"source":"useFocusTrap.js","original":{"line":5,"column":2},"generated":{"line":1,"column":145}},{"source":"useFocusTrap.js","name":"TAB_KEY","original":{"line":6,"column":6},"generated":{"line":1,"column":339}},{"source":"useFocusTrap.js","original":{"line":6,"column":16},"generated":{"line":1,"column":341}},{"source":"useFocusTrap.js","original":{"line":8,"column":7},"generated":{"line":1,"column":343}},{"source":"useFocusTrap.js","name":"useFocusTrap","original":{"line":8,"column":16},"generated":{"line":1,"column":352}},{"source":"useFocusTrap.js","original":{"line":9,"column":2},"generated":{"line":1,"column":356}},{"source":"useFocusTrap.js","name":"trapRef","original":{"line":9,"column":8},"generated":{"line":1,"column":362}},{"source":"useFocusTrap.js","original":{"line":9,"column":18},"generated":{"line":1,"column":365}},{"source":"useFocusTrap.js","name":"useRef","original":{"line":9,"column":18},"generated":{"line":1,"column":367}},{"source":"useFocusTrap.js","original":{"line":9,"column":18},"generated":{"line":1,"column":369}},{"source":"useFocusTrap.js","original":{"line":9,"column":25},"generated":{"line":1,"column":377}},{"source":"useFocusTrap.js","name":"selectNextFocusableElem","original":{"line":11,"column":8},"generated":{"line":1,"column":383}},{"source":"useFocusTrap.js","original":{"line":11,"column":34},"generated":{"line":1,"column":386}},{"source":"useFocusTrap.js","name":"useCallback","original":{"line":11,"column":34},"generated":{"line":1,"column":388}},{"source":"useFocusTrap.js","original":{"line":11,"column":34},"generated":{"line":1,"column":390}},{"source":"useFocusTrap.js","original":{"line":12,"column":4},"generated":{"line":1,"column":403}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":13,"column":6},"generated":{"line":1,"column":404}},{"source":"useFocusTrap.js","name":"currentIndex","original":{"line":14,"column":6},"generated":{"line":1,"column":406}},{"source":"useFocusTrap.js","name":"shiftKeyPressed","original":{"line":15,"column":6},"generated":{"line":1,"column":408}},{"source":"useFocusTrap.js","original":{"line":15,"column":24},"generated":{"line":1,"column":411}},{"source":"useFocusTrap.js","name":"skipCount","original":{"line":16,"column":6},"generated":{"line":1,"column":413}},{"source":"useFocusTrap.js","original":{"line":16,"column":18},"generated":{"line":1,"column":415}},{"source":"useFocusTrap.js","original":{"line":18,"column":6},"generated":{"line":1,"column":420}},{"source":"useFocusTrap.js","name":"skipCount","original":{"line":18,"column":10},"generated":{"line":1,"column":423}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":18,"column":22},"generated":{"line":1,"column":425}},{"source":"useFocusTrap.js","name":"length","original":{"line":18,"column":43},"generated":{"line":1,"column":427}},{"source":"useFocusTrap.js","original":{"line":21,"column":8},"generated":{"line":1,"column":434}},{"source":"useFocusTrap.js","original":{"line":21,"column":15},"generated":{"line":1,"column":441}},{"source":"useFocusTrap.js","original":{"line":24,"column":6},"generated":{"line":1,"column":443}},{"source":"useFocusTrap.js","name":"backwards","original":{"line":24,"column":12},"generated":{"line":1,"column":449}},{"source":"useFocusTrap.js","name":"shiftKeyPressed","original":{"line":24,"column":26},"generated":{"line":1,"column":453}},{"source":"useFocusTrap.js","name":"maxIndex","original":{"line":25,"column":12},"generated":{"line":1,"column":455}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":25,"column":23},"generated":{"line":1,"column":457}},{"source":"useFocusTrap.js","name":"length","original":{"line":25,"column":44},"generated":{"line":1,"column":459}},{"source":"useFocusTrap.js","original":{"line":25,"column":53},"generated":{"line":1,"column":466}},{"source":"useFocusTrap.js","original":{"line":27,"column":25},"generated":{"line":1,"column":468}},{"source":"useFocusTrap.js","original":{"line":27,"column":25},"generated":{"line":1,"column":472}},{"source":"useFocusTrap.js","name":"currentIndex","original":{"line":27,"column":11},"generated":{"line":1,"column":474}},{"source":"useFocusTrap.js","name":"currentIndex","original":{"line":28,"column":8},"generated":{"line":1,"column":478}},{"source":"useFocusTrap.js","original":{"line":29,"column":66},"generated":{"line":1,"column":480}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":29,"column":10},"generated":{"line":1,"column":488}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":29,"column":10},"generated":{"line":1,"column":490}},{"source":"useFocusTrap.js","name":"indexOf","original":{"line":29,"column":31},"generated":{"line":1,"column":492}},{"source":"useFocusTrap.js","name":"document","original":{"line":29,"column":39},"generated":{"line":1,"column":500}},{"source":"useFocusTrap.js","name":"activeElement","original":{"line":29,"column":48},"generated":{"line":1,"column":509}},{"source":"useFocusTrap.js","original":{"line":29,"column":66},"generated":{"line":1,"column":531}},{"source":"useFocusTrap.js","original":{"line":29,"column":66},"generated":{"line":1,"column":535}},{"source":"useFocusTrap.js","original":{"line":29,"column":66},"generated":{"line":1,"column":537}},{"source":"useFocusTrap.js","original":{"line":29,"column":66},"generated":{"line":1,"column":539}},{"source":"useFocusTrap.js","original":{"line":32,"column":6},"generated":{"line":1,"column":542}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":32,"column":10},"generated":{"line":1,"column":546}},{"source":"useFocusTrap.js","name":"backwards","original":{"line":32,"column":22},"generated":{"line":1,"column":548}},{"source":"useFocusTrap.js","name":"currentIndex","original":{"line":32,"column":34},"generated":{"line":1,"column":550}},{"source":"useFocusTrap.js","original":{"line":32,"column":49},"generated":{"line":1,"column":552}},{"source":"useFocusTrap.js","name":"currentIndex","original":{"line":32,"column":53},"generated":{"line":1,"column":554}},{"source":"useFocusTrap.js","original":{"line":32,"column":68},"generated":{"line":1,"column":556}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":33,"column":10},"generated":{"line":1,"column":558}},{"source":"useFocusTrap.js","name":"maxIndex","original":{"line":33,"column":22},"generated":{"line":1,"column":560}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":34,"column":8},"generated":{"line":1,"column":564}},{"source":"useFocusTrap.js","original":{"line":34,"column":20},"generated":{"line":1,"column":566}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":37,"column":10},"generated":{"line":1,"column":569}},{"source":"useFocusTrap.js","original":{"line":37,"column":22},"generated":{"line":1,"column":571}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":38,"column":8},"generated":{"line":1,"column":575}},{"source":"useFocusTrap.js","name":"maxIndex","original":{"line":38,"column":20},"generated":{"line":1,"column":577}},{"source":"useFocusTrap.js","original":{"line":41,"column":6},"generated":{"line":1,"column":580}},{"source":"useFocusTrap.js","name":"newFocusElem","original":{"line":41,"column":12},"generated":{"line":1,"column":586}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":41,"column":27},"generated":{"line":1,"column":588}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":41,"column":48},"generated":{"line":1,"column":590}},{"source":"useFocusTrap.js","name":"newFocusElem","original":{"line":43,"column":6},"generated":{"line":1,"column":593}},{"source":"useFocusTrap.js","name":"focus","original":{"line":43,"column":19},"generated":{"line":1,"column":595}},{"source":"useFocusTrap.js","name":"document","original":{"line":45,"column":10},"generated":{"line":1,"column":603}},{"source":"useFocusTrap.js","name":"activeElement","original":{"line":45,"column":19},"generated":{"line":1,"column":612}},{"source":"useFocusTrap.js","name":"newFocusElem","original":{"line":45,"column":37},"generated":{"line":1,"column":628}},{"source":"useFocusTrap.js","name":"selectNextFocusableElem","original":{"line":47,"column":8},"generated":{"line":1,"column":631}},{"source":"useFocusTrap.js","name":"sortedFocusableElems","original":{"line":48,"column":10},"generated":{"line":1,"column":633}},{"source":"useFocusTrap.js","name":"nextIndex","original":{"line":49,"column":10},"generated":{"line":1,"column":635}},{"source":"useFocusTrap.js","name":"shiftKeyPressed","original":{"line":50,"column":10},"generated":{"line":1,"column":637}},{"source":"useFocusTrap.js","name":"skipCount","original":{"line":51,"column":10},"generated":{"line":1,"column":639}},{"source":"useFocusTrap.js","original":{"line":51,"column":22},"generated":{"line":1,"column":641}},{"source":"useFocusTrap.js","name":"trapper","original":{"line":58,"column":8},"generated":{"line":1,"column":646}},{"source":"useFocusTrap.js","original":{"line":58,"column":18},"generated":{"line":1,"column":649}},{"source":"useFocusTrap.js","name":"useCallback","original":{"line":58,"column":18},"generated":{"line":1,"column":651}},{"source":"useFocusTrap.js","original":{"line":58,"column":18},"generated":{"line":1,"column":653}},{"source":"useFocusTrap.js","name":"evt","original":{"line":58,"column":31},"generated":{"line":1,"column":666}},{"source":"useFocusTrap.js","original":{"line":59,"column":4},"generated":{"line":1,"column":670}},{"source":"useFocusTrap.js","name":"trapRefElem","original":{"line":59,"column":10},"generated":{"line":1,"column":676}},{"source":"useFocusTrap.js","name":"trapRef","original":{"line":59,"column":24},"generated":{"line":1,"column":678}},{"source":"useFocusTrap.js","name":"current","original":{"line":59,"column":32},"generated":{"line":1,"column":680}},{"source":"useFocusTrap.js","original":{"line":60,"column":4},"generated":{"line":1,"column":688}},{"source":"useFocusTrap.js","original":{"line":60,"column":24},"generated":{"line":1,"column":691}},{"source":"useFocusTrap.js","name":"trapRefElem","original":{"line":60,"column":8},"generated":{"line":1,"column":698}},{"source":"useFocusTrap.js","name":"evt","original":{"line":61,"column":10},"generated":{"line":1,"column":702}},{"source":"useFocusTrap.js","name":"which","original":{"line":61,"column":14},"generated":{"line":1,"column":704}},{"source":"useFocusTrap.js","name":"TAB_KEY","original":{"line":61,"column":24},"generated":{"line":1,"column":712}},{"source":"useFocusTrap.js","original":{"line":61,"column":47},"generated":{"line":1,"column":715}},{"source":"useFocusTrap.js","name":"evt","original":{"line":61,"column":35},"generated":{"line":1,"column":723}},{"source":"useFocusTrap.js","name":"key","original":{"line":61,"column":39},"generated":{"line":1,"column":725}},{"source":"useFocusTrap.js","original":{"line":61,"column":54},"generated":{"line":1,"column":730}},{"source":"useFocusTrap.js","name":"evt","original":{"line":62,"column":8},"generated":{"line":1,"column":731}},{"source":"useFocusTrap.js","name":"preventDefault","original":{"line":62,"column":12},"generated":{"line":1,"column":733}},{"source":"useFocusTrap.js","original":{"line":63,"column":8},"generated":{"line":1,"column":750}},{"source":"useFocusTrap.js","name":"shiftKeyPressed","original":{"line":63,"column":14},"generated":{"line":1,"column":756}},{"source":"useFocusTrap.js","name":"evt","original":{"line":63,"column":34},"generated":{"line":1,"column":760}},{"source":"useFocusTrap.js","name":"shiftKey","original":{"line":63,"column":38},"generated":{"line":1,"column":762}},{"source":"useFocusTrap.js","original":{"line":64,"column":8},"generated":{"line":1,"column":771}},{"source":"useFocusTrap.js","name":"focusableElems","original":{"line":64,"column":12},"generated":{"line":1,"column":775}},{"source":"useFocusTrap.js","name":"Array","original":{"line":64,"column":29},"generated":{"line":1,"column":777}},{"source":"useFocusTrap.js","name":"from","original":{"line":64,"column":35},"generated":{"line":1,"column":783}},{"source":"useFocusTrap.js","name":"trapRefElem","original":{"line":65,"column":10},"generated":{"line":1,"column":788}},{"source":"useFocusTrap.js","name":"querySelectorAll","original":{"line":65,"column":22},"generated":{"line":1,"column":790}},{"source":"useFocusTrap.js","name":"focusableElementsSelector","original":{"line":65,"column":39},"generated":{"line":1,"column":807}},{"source":"useFocusTrap.js","name":"filter","original":{"line":66,"column":10},"generated":{"line":1,"column":811}},{"source":"useFocusTrap.js","name":"focusableElement","original":{"line":67,"column":11},"generated":{"line":1,"column":818}},{"source":"useFocusTrap.js","original":{"line":67,"column":32},"generated":{"line":1,"column":822}},{"source":"useFocusTrap.js","name":"getTabIndexOfNode","original":{"line":67,"column":32},"generated":{"line":1,"column":824}},{"source":"useFocusTrap.js","original":{"line":67,"column":32},"generated":{"line":1,"column":826}},{"source":"useFocusTrap.js","name":"focusableElement","original":{"line":67,"column":50},"generated":{"line":1,"column":845}},{"source":"useFocusTrap.js","original":{"line":67,"column":71},"generated":{"line":1,"column":849}},{"source":"useFocusTrap.js","name":"focusableElems","original":{"line":70,"column":8},"generated":{"line":1,"column":852}},{"source":"useFocusTrap.js","name":"focusableElems","original":{"line":70,"column":25},"generated":{"line":1,"column":854}},{"source":"useFocusTrap.js","name":"sort","original":{"line":70,"column":40},"generated":{"line":1,"column":856}},{"source":"useFocusTrap.js","name":"sortByTabIndex","original":{"line":70,"column":45},"generated":{"line":1,"column":861}},{"source":"useFocusTrap.js","original":{"line":70,"column":25},"generated":{"line":1,"column":863}},{"source":"useFocusTrap.js","name":"selectNextFocusableElem","original":{"line":72,"column":8},"generated":{"line":1,"column":879}},{"source":"useFocusTrap.js","name":"focusableElems","original":{"line":72,"column":32},"generated":{"line":1,"column":881}},{"source":"useFocusTrap.js","name":"undefined","original":{"line":72,"column":48},"generated":{"line":1,"column":888}},{"source":"useFocusTrap.js","name":"shiftKeyPressed","original":{"line":72,"column":59},"generated":{"line":1,"column":890}},{"source":"useFocusTrap.js","original":{"line":76,"column":5},"generated":{"line":1,"column":895}},{"source":"useFocusTrap.js","original":{"line":87,"column":2},"generated":{"line":1,"column":899}},{"source":"useFocusTrap.js","original":{"line":78,"column":2},"generated":{"line":1,"column":906}},{"source":"useFocusTrap.js","name":"useEffect","original":{"line":78,"column":2},"generated":{"line":1,"column":908}},{"source":"useFocusTrap.js","original":{"line":78,"column":2},"generated":{"line":1,"column":910}},{"source":"useFocusTrap.js","original":{"line":78,"column":12},"generated":{"line":1,"column":921}},{"source":"useFocusTrap.js","name":"window","original":{"line":79,"column":4},"generated":{"line":1,"column":926}},{"source":"useFocusTrap.js","name":"addEventListener","original":{"line":79,"column":11},"generated":{"line":1,"column":933}},{"source":"useFocusTrap.js","original":{"line":79,"column":28},"generated":{"line":1,"column":950}},{"source":"useFocusTrap.js","name":"trapper","original":{"line":79,"column":39},"generated":{"line":1,"column":960}},{"source":"useFocusTrap.js","original":{"line":81,"column":11},"generated":{"line":1,"column":963}},{"source":"useFocusTrap.js","name":"window","original":{"line":82,"column":6},"generated":{"line":1,"column":968}},{"source":"useFocusTrap.js","name":"removeEventListener","original":{"line":82,"column":13},"generated":{"line":1,"column":975}},{"source":"useFocusTrap.js","original":{"line":82,"column":33},"generated":{"line":1,"column":995}},{"source":"useFocusTrap.js","name":"trapper","original":{"line":82,"column":44},"generated":{"line":1,"column":1005}},{"source":"useFocusTrap.js","original":{"line":85,"column":5},"generated":{"line":1,"column":1010}},{"source":"useFocusTrap.js","original":{"line":87,"column":9},"generated":{"line":1,"column":1014}},{"source":"useFocusTrap.js","name":"trapRef","original":{"line":87,"column":10},"generated":{"line":1,"column":1015}}],"sources":{"useFocusTrap.js":"import { useCallback, useEffect, useRef } from \"react\";\nimport { getTabIndexOfNode, sortByTabIndex } from \"./util.js\";\n\nconst focusableElementsSelector =\n  \"a[href], area[href], input:not([disabled]):not([type=hidden]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]\";\nconst TAB_KEY = 9;\n\nexport function useFocusTrap() {\n  const trapRef = useRef(null);\n\n  const selectNextFocusableElem = useCallback(\n    (\n      sortedFocusableElems,\n      currentIndex,\n      shiftKeyPressed = false,\n      skipCount = 0\n    ) => {\n      if (skipCount > sortedFocusableElems.length) {\n        // this means that it ran through all of elements but non was properly focusable\n        // hence we stop it to avoid running in an infinite loop\n        return false;\n      }\n\n      const backwards = !!shiftKeyPressed;\n      const maxIndex = sortedFocusableElems.length - 1;\n\n      if (!currentIndex) {\n        currentIndex =\n          sortedFocusableElems.indexOf(document.activeElement) ?? 0;\n      }\n\n      let nextIndex = backwards ? currentIndex - 1 : currentIndex + 1;\n      if (nextIndex > maxIndex) {\n        nextIndex = 0;\n      }\n\n      if (nextIndex < 0) {\n        nextIndex = maxIndex;\n      }\n\n      const newFocusElem = sortedFocusableElems[nextIndex];\n\n      newFocusElem.focus();\n\n      if (document.activeElement !== newFocusElem) {\n        // run another round\n        selectNextFocusableElem(\n          sortedFocusableElems,\n          nextIndex,\n          shiftKeyPressed,\n          skipCount + 1\n        );\n      }\n    }\n  );\n\n  // defining the trap function first\n  const trapper = useCallback((evt) => {\n    const trapRefElem = trapRef.current;\n    if (trapRefElem !== null) {\n      if (evt.which === TAB_KEY || evt.key === \"Tab\") {\n        evt.preventDefault();\n        const shiftKeyPressed = !!evt.shiftKey;\n        let focusableElems = Array.from(\n          trapRefElem.querySelectorAll(focusableElementsSelector)\n        ).filter(\n          (focusableElement) => getTabIndexOfNode(focusableElement) >= 0\n        ); // caching this is NOT a good idea in dynamic applications - so don't!\n        // now we need to sort it by tabIndex, highest first\n        focusableElems = focusableElems.sort(sortByTabIndex);\n\n        selectNextFocusableElem(focusableElems, undefined, shiftKeyPressed);\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    window.addEventListener(\"keydown\", trapper);\n\n    return () => {\n      window.removeEventListener(\"keydown\", trapper);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return [trapRef];\n}\n"},"lineCount":null}},"error":null,"hash":"69feeea8583dc0e84fa0d55a035452cb","cacheData":{"env":{}}}