{"version":3,"file":"focusTrap.js","names":["focusEdgeElement","trapElement","focusLast","focusableElementsSelector","focusableElements","Array","prototype","slice","call","querySelectorAll","filter","el","offsetParent","disabled","length","focusCatch","parentNode","focus","activeTraps","focusTrapWindowFocusHandler","contains","document","activeElement","activateFocusTrap","options","window","addEventListener","unshift","catchElements","tabIndexStart","tabIndexEnd","map","tabIndex","i","catchElement","createElement","isBefore","setAttribute","className","insertBefore","nextSibling","bind","previouslyActiveElement","active","deactivate","shift","removeEventListener","forEach","catchEl","removeChild","body"],"sources":["utils/focusTrap.js"],"sourcesContent":["var focusEdgeElement = function (trapElement, focusLast) {\r\n var focusableElementsSelector =\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\r\n var focusableElements = Array.prototype.slice\r\n .call(trapElement.querySelectorAll(focusableElementsSelector))\r\n .filter(function (el) {\r\n return el.offsetParent !== null && !el.disabled;\r\n }); // Filter out invisible and disabled elements\r\n if (focusableElements.length === 0) {\r\n var focusCatch = trapElement.parentNode.querySelectorAll('.focus-catch')[0];\r\n if (focusCatch) {\r\n focusCatch.focus();\r\n }\r\n return;\r\n }\r\n if (focusLast) {\r\n focusableElements[focusableElements.length - 1].focus();\r\n } else {\r\n focusableElements[0].focus();\r\n }\r\n};\r\n\r\nvar activeTraps = [];\r\nvar focusTrapWindowFocusHandler = function () {\r\n var trapElement = activeTraps[0];\r\n if (trapElement && !trapElement.contains(document.activeElement)) {\r\n trapElement.focus();\r\n if (document.activeElement !== trapElement) {\r\n focusEdgeElement(trapElement, false);\r\n }\r\n }\r\n};\r\n\r\nvar activateFocusTrap = function (trapElement, options) {\r\n if (activeTraps.length === 0) {\r\n window.addEventListener('focus', focusTrapWindowFocusHandler);\r\n }\r\n activeTraps.unshift(trapElement);\r\n\r\n var catchElements = [\r\n options && options.tabIndexStart != null ? options.tabIndexStart : 0,\r\n options && options.tabIndexEnd != null ? options.tabIndexEnd : 0,\r\n ].map(function (tabIndex, i) {\r\n var catchElement = document.createElement('div');\r\n var isBefore = i === 0;\r\n (catchElement.tabIndex = tabIndex), catchElement.setAttribute('role', 'none');\r\n catchElement.className = 'focus-catch';\r\n trapElement.parentNode.insertBefore(\r\n catchElement,\r\n isBefore ? trapElement : trapElement.nextSibling\r\n );\r\n catchElement.addEventListener('focus', focusEdgeElement.bind(null, trapElement, isBefore));\r\n return catchElement;\r\n });\r\n\r\n var previouslyActiveElement =\r\n options && options.previouslyActiveElement\r\n ? options.previouslyActiveElement\r\n : document.activeElement;\r\n var active = true;\r\n var deactivate = function () {\r\n if (!active) {\r\n return;\r\n }\r\n active = false;\r\n activeTraps.shift();\r\n if (activeTraps.length === 0) {\r\n window.removeEventListener('focus', focusTrapWindowFocusHandler);\r\n }\r\n catchElements.forEach(function (catchEl) {\r\n catchEl.parentNode.removeChild(catchEl);\r\n });\r\n if (previouslyActiveElement && previouslyActiveElement.focus) {\r\n previouslyActiveElement.focus();\r\n } else {\r\n document.body.focus();\r\n }\r\n };\r\n focusTrapWindowFocusHandler();\r\n return deactivate;\r\n};\r\n\r\nexport default activateFocusTrap;\r\n"],"mappings":"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"}