{"version":3,"sources":["webpack:///../node_modules/focus-trap/index.js","webpack:///../node_modules/tabbable/index.js","webpack:///../node_modules/xtend/immutable.js"],"names":["activeFocusDelay","trapQueue","tabbable","xtend","activeFocusTraps","activateTrap","trap","length","activeTrap","pause","trapIndex","indexOf","splice","push","deactivateTrap","unpause","delay","fn","setTimeout","module","exports","element","userOptions","doc","document","container","querySelector","config","returnFocusOnDeactivate","escapeDeactivates","state","firstTabbableNode","lastTabbableNode","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","activate","activateOptions","updateTabbableNodes","activeElement","onActivate","addListeners","deactivate","removeListeners","deactivateOptions","clearTimeout","onDeactivate","undefined","returnFocus","tryFocus","getInitialFocusNode","addEventListener","checkFocusIn","checkPointerDown","capture","passive","checkClick","checkKey","removeEventListener","getNodeForOption","optionName","optionValue","node","Error","contains","e","target","clickOutsideDeactivates","isFocusable","preventDefault","Document","stopImmediatePropagation","key","keyCode","isEscapeEvent","isTabEvent","shiftKey","checkTab","tabbableNodes","focus","tagName","toLowerCase","select","isSelectableInput","candidateSelectors","candidateSelector","join","matches","Element","prototype","msMatchesSelector","webkitMatchesSelector","el","options","i","candidate","candidateTabindex","regularTabbables","orderedTabbables","candidates","querySelectorAll","includeContainer","call","Array","slice","apply","unshift","isNodeMatchingSelectorTabbable","getTabindex","documentOrder","tabIndex","sort","sortOrderedTabbables","map","a","concat","isNodeMatchingSelectorFocusable","isInput","type","isRadio","name","checked","nodes","getCheckedRadio","ownerDocument","isTabbableRadio","isNonTabbableRadio","disabled","isHiddenInput","offsetParent","getComputedStyle","visibility","isHidden","isTabbable","focusableCandidateSelector","tabindexAttr","parseInt","getAttribute","isNaN","contentEditable","isContentEditable","b","arguments","source","hasOwnProperty","Object"],"mappings":"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","file":"36.9762b05d7e065958766a.js","sourcesContent":["var tabbable = require('tabbable');\nvar xtend = require('xtend');\n\nvar activeFocusDelay;\n\nvar activeFocusTraps = (function() {\n var trapQueue = [];\n return {\n activateTrap: function(trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap: function(trap) {\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n }\n };\n})();\n\nfunction focusTrap(element, userOptions) {\n var doc = document;\n var container =\n typeof element === 'string' ? doc.querySelector(element) : element;\n\n var config = xtend(\n {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true\n },\n userOptions\n );\n\n var state = {\n firstTabbableNode: null,\n lastTabbableNode: null,\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false\n };\n\n var trap = {\n activate: activate,\n deactivate: deactivate,\n pause: pause,\n unpause: unpause\n };\n\n return trap;\n\n function activate(activateOptions) {\n if (state.active) return;\n\n updateTabbableNodes();\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n var onActivate =\n activateOptions && activateOptions.onActivate\n ? activateOptions.onActivate\n : config.onActivate;\n if (onActivate) {\n onActivate();\n }\n\n addListeners();\n return trap;\n }\n\n function deactivate(deactivateOptions) {\n if (!state.active) return;\n\n clearTimeout(activeFocusDelay);\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n var onDeactivate =\n deactivateOptions && deactivateOptions.onDeactivate !== undefined\n ? deactivateOptions.onDeactivate\n : config.onDeactivate;\n if (onDeactivate) {\n onDeactivate();\n }\n\n var returnFocus =\n deactivateOptions && deactivateOptions.returnFocus !== undefined\n ? deactivateOptions.returnFocus\n : config.returnFocusOnDeactivate;\n if (returnFocus) {\n delay(function() {\n tryFocus(state.nodeFocusedBeforeActivation);\n });\n }\n\n return trap;\n }\n\n function pause() {\n if (state.paused || !state.active) return;\n state.paused = true;\n removeListeners();\n }\n\n function unpause() {\n if (!state.paused || !state.active) return;\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n }\n\n function addListeners() {\n if (!state.active) return;\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n activeFocusDelay = delay(function() {\n tryFocus(getInitialFocusNode());\n });\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false\n });\n\n return trap;\n }\n\n function removeListeners() {\n if (!state.active) return;\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n }\n\n function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n var node = optionValue;\n if (!optionValue) {\n return null;\n }\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue);\n if (!node) {\n throw new Error('`' + optionName + '` refers to no known node');\n }\n }\n if (typeof optionValue === 'function') {\n node = optionValue();\n if (!node) {\n throw new Error('`' + optionName + '` did not return a node');\n }\n }\n return node;\n }\n\n function getInitialFocusNode() {\n var node;\n if (getNodeForOption('initialFocus') !== null) {\n node = getNodeForOption('initialFocus');\n } else if (container.contains(doc.activeElement)) {\n node = doc.activeElement;\n } else {\n node = state.firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n\n if (!node) {\n throw new Error(\n \"You can't have a focus-trap without at least one focusable element\"\n );\n }\n\n return node;\n }\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n function checkPointerDown(e) {\n if (container.contains(e.target)) return;\n if (config.clickOutsideDeactivates) {\n deactivate({\n returnFocus: !tabbable.isFocusable(e.target)\n });\n } else {\n e.preventDefault();\n }\n }\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n function checkFocusIn(e) {\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (container.contains(e.target) || e.target instanceof Document) {\n return;\n }\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n\n function checkKey(e) {\n if (config.escapeDeactivates !== false && isEscapeEvent(e)) {\n e.preventDefault();\n deactivate();\n return;\n }\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n }\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n function checkTab(e) {\n updateTabbableNodes();\n if (e.shiftKey && e.target === state.firstTabbableNode) {\n e.preventDefault();\n tryFocus(state.lastTabbableNode);\n return;\n }\n if (!e.shiftKey && e.target === state.lastTabbableNode) {\n e.preventDefault();\n tryFocus(state.firstTabbableNode);\n return;\n }\n }\n\n function checkClick(e) {\n if (config.clickOutsideDeactivates) return;\n if (container.contains(e.target)) return;\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n function updateTabbableNodes() {\n var tabbableNodes = tabbable(container);\n state.firstTabbableNode = tabbableNodes[0] || getInitialFocusNode();\n state.lastTabbableNode =\n tabbableNodes[tabbableNodes.length - 1] || getInitialFocusNode();\n }\n\n function tryFocus(node) {\n if (node === doc.activeElement) return;\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus();\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n }\n}\n\nfunction isSelectableInput(node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n}\n\nfunction isEscapeEvent(e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n}\n\nfunction isTabEvent(e) {\n return e.key === 'Tab' || e.keyCode === 9;\n}\n\nfunction delay(fn) {\n return setTimeout(fn, 0);\n}\n\nmodule.exports = focusTrap;\n","var candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n];\nvar candidateSelector = candidateSelectors.join(',');\n\nvar matches = typeof Element === 'undefined'\n ? function () {}\n : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nfunction tabbable(el, options) {\n options = options || {};\n\n var regularTabbables = [];\n var orderedTabbables = [];\n\n var candidates = el.querySelectorAll(candidateSelector);\n\n if (options.includeContainer) {\n if (matches.call(el, candidateSelector)) {\n candidates = Array.prototype.slice.apply(candidates);\n candidates.unshift(el);\n }\n }\n\n var i, candidate, candidateTabindex;\n for (i = 0; i < candidates.length; i++) {\n candidate = candidates[i];\n\n if (!isNodeMatchingSelectorTabbable(candidate)) continue;\n\n candidateTabindex = getTabindex(candidate);\n if (candidateTabindex === 0) {\n regularTabbables.push(candidate);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n node: candidate,\n });\n }\n }\n\n var tabbableNodes = orderedTabbables\n .sort(sortOrderedTabbables)\n .map(function(a) { return a.node })\n .concat(regularTabbables);\n\n return tabbableNodes;\n}\n\ntabbable.isTabbable = isTabbable;\ntabbable.isFocusable = isFocusable;\n\nfunction isNodeMatchingSelectorTabbable(node) {\n if (\n !isNodeMatchingSelectorFocusable(node)\n || isNonTabbableRadio(node)\n || getTabindex(node) < 0\n ) {\n return false;\n }\n return true;\n}\n\nfunction isTabbable(node) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, candidateSelector) === false) return false;\n return isNodeMatchingSelectorTabbable(node);\n}\n\nfunction isNodeMatchingSelectorFocusable(node) {\n if (\n node.disabled\n || isHiddenInput(node)\n || isHidden(node)\n ) {\n return false;\n }\n return true;\n}\n\nvar focusableCandidateSelector = candidateSelectors.concat('iframe').join(',');\nfunction isFocusable(node) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, focusableCandidateSelector) === false) return false;\n return isNodeMatchingSelectorFocusable(node);\n}\n\nfunction getTabindex(node) {\n var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n if (!isNaN(tabindexAttr)) return tabindexAttr;\n // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n if (isContentEditable(node)) return 0;\n return node.tabIndex;\n}\n\nfunction sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n}\n\nfunction isContentEditable(node) {\n return node.contentEditable === 'true';\n}\n\nfunction isInput(node) {\n return node.tagName === 'INPUT';\n}\n\nfunction isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n}\n\nfunction isRadio(node) {\n return isInput(node) && node.type === 'radio';\n}\n\nfunction isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n}\n\nfunction getCheckedRadio(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked) {\n return nodes[i];\n }\n }\n}\n\nfunction isTabbableRadio(node) {\n if (!node.name) return true;\n // This won't account for the edge case where you have radio groups with the same\n // in separate forms on the same page.\n var radioSet = node.ownerDocument.querySelectorAll('input[type=\"radio\"][name=\"' + node.name + '\"]');\n var checked = getCheckedRadio(radioSet);\n return !checked || checked === node;\n}\n\nfunction isHidden(node) {\n // offsetParent being null will allow detecting cases where an element is invisible or inside an invisible element,\n // as long as the element does not use position: fixed. For them, their visibility has to be checked directly as well.\n return node.offsetParent === null || getComputedStyle(node).visibility === 'hidden';\n}\n\nmodule.exports = tabbable;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n"],"sourceRoot":""}