{"version":3,"file":"generated.js","sources":["node_modules/browser-pack/_prelude.js","dist/src/ally.js","node_modules/css.escape/css.escape.js","node_modules/platform/platform.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","ally","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"_interopDefault","ex","_typeof","before","data","activeElement","document","windowScrollTop","scrollTop","windowScrollLeft","scrollLeft","bodyScrollTop","body","bodyScrollLeft","iframe","createElement","setAttribute","appendChild","_window","contentWindow","_document","open","close","wrapper","test","options","innerHTML","element","focus","mutate","parentNode","validate","after","blur","platform","is","IE10","removeChild","readLocalStorage","key","localStorage","getItem","JSON","parse","writeLocalStorage","value","hasFocus","setItem","stringify","removeItem","makeFocusableForeignObject","fragment","firstChild","generate","HTMLElement","prototype","focusSvgForeignObjectHack","focusTarget","executeTests","results","detectFocus","testDescriptions","Object","keys","testCallbacks","forEach","disabledFocus","logger","warn","disableTabindex","disabledState","tabIndex","tabindexValue","toggleAttributeValue","attribute","temporaryValue","saveValue","disableVideoControls","toggleAttribute","remove","disableSvgFocusable","undefined","disableSvgLink","setAriaDisabled","disableScriptFocus","disablePointerEvents","pointerEvents","style","_pointerEvents","getAttribute","removeAttribute","setElementDisabled","nodeName","toLowerCase","ownerSVGElement","supports","focusSvgFocusableAttribute","focusSvgTabindexAttribute","findMethodName","names","some","_name","name","elementMatches","selector","isUserModifyWritable","userModify","webkitUserModify","Boolean","indexOf","hasCssOverflowScroll","getPropertyValue","overflow","hasCssDisplayFlex","display","isScrollableContainer","parentNodeName","parentStyle","offsetHeight","scrollHeight","offsetWidth","scrollWidth","isFocusRelevantRules","_ref6","arguments","context","_ref6$except","except","flexbox","scrollable","shadow","supports$5","_supports","contextToElement","label","resolveDocument","shadowRoot","type","focusRedirectLegend","hasAttribute","svgType","focusObjectSvg","focusObjectSwf","focusAudioWithoutControls","focusVideoWithoutControls","focusSummary","validTabindex$$1","validTabindex","focusImgUsemapTabindex","focusRedirectImgUsemap","focusTable","focusFieldset","isSvgElement","isSvgContent","focusableAttribute","tabindex","focusSvgUseTabindex","focusSvgForeignobjectTabindex","focusSvgNegativeTabindexAttribute","focusSvg","focusSvgInIframe","getComputedStyle","focusImgIsmap","hasLinkParent","getParents","parent","focusScrollContainer","focusScrollContainerWithoutOverflow","focusFlexboxContainer","parentElement","focusScrollBody","focusChildrenOfFocusableFlexbox","findIndex","array","callback","findDocumentHostElement","selectInShadows","_frameElement","potentialHosts","querySelectorAll","getContentDocument","getFrameElement","getWindow","frameElement","computedStyle","property","notDisplayed","_path","notVisible","hidden","visibility","visible","collapsedParent","offset","slice","isVisibleRules","_ref7","_ref7$except","notRendered","cssDisplay","cssVisibility","detailsElement","browsingContext","notRenderedElementsPattern","isAudioWithoutControls","_isVisible","getMapByName","map","querySelector","cssEscape","getMapOfImage","usemap","getDocument","getImageOfArea","isDisabledFieldset","disabled","isDisabledForm","isOnlyTabbableRules","_ref8","_ref8$except","onlyFocusableBrowsingContext","isVisible","GECKO","TRIDENT","EDGE","isOnlyFocusRelevant","_tabindex","supports$4","focusLabelTabindex","validArea","isFocusableRules","_ref9","_ref9$except","onlyTabbable","_isOnlyTabbable","isOnlyTabbable","rules","focusRelevant","isFocusRelevant","visibilityOptions","focusInHiddenIframe","focusObjectSvgHidden","_nodeName2","_nodeName","focusInZeroDimensionObject","createFilter","condition","filter","node","NodeFilter","FILTER_ACCEPT","FILTER_SKIP","acceptNode","queryFocusableStrict","_ref10","includeContext","includeOnlyTabbable","strategy","documentElement","_isFocusable","isFocusable","walker","createTreeWalker","SHOW_ELEMENT","PossiblyFocusableFilter","list","nextNode","currentNode","push","concat","unshift","queryFocusableQuick","_ref11","_selector","selector$2","elements","result","isTabbableRules","_ref13","_ref13$except","supports$9","BLINK","ANDROID","majorVersion","WEBKIT","IOS","frameNodeName","isFixedBlink","hasTabbableTabindexOrNone","hasTabbableTabindex","focusableElementsPattern","potentiallyTabbable","_style","_style2","img","_style3","isFocusRelevantWithoutFlexbox","isTabbableWithoutFlexbox","compareDomPosition","b","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","getFirstSuccessorOffset","target","findInsertionOffsets","resolveElement","insertions","replace","injections","nodeArray","insertElementsAtOffsets","inserted","sort","insertion","args","splice","apply","formControlElement","resolveLabelElement","forId","getElementById","resolveLegendWithinFieldset","fieldset","focusable$$1","focusable","resolveLegendWithinDocument","tabbable","queryTabbable","merged","mergeInDomOrder","resolveLegendElement","supports$3","resolveImgElement","collectScrollPositions","parents","entry","focus$1","isActiveElement","actionPerformed","destruct","_ref19","force","instances","disengage","_result","initialize","engage","bind","noop$1","observeActiveElement","previousActiveElement","activeElementEvent","CustomEvent$1","bubbles","cancelable","detail","dispatchEvent","raf","requestAnimationFrame","cancelAnimationFrame","walkToShadowedElement","walkFromShadowedElement","hosts","shadowHostParents","destruct$1","initialize$1","_ref22","noop$2","getParentComparator","_ref25","includeSelf","DOCUMENT_POSITION_CONTAINED_BY","TypeError","queryInsignificantBranches","_ref26","containsFilteredElement","containsNode","insiginificantBranches","CollectInsignificantBranchesFilter","FILTER_REJECT","queryShadowHosts","_ref28","defaultToDocument","makeElementInert","elementDisabled","undoElementInert","makeElementHidden","undoElementHidden","moveContextToBeginning","pos","tmp","sortElements","_context","supports$10","tabsequenceAreaAtImgPosition","sortArea","sortTabindex","createExpectedModifiers","ignoreModifiers","altKey","ctrlKey","metaKey","shiftKey","resolveModifiers","modifiers","expected","token","operator","propertyName","modifier","resolveKey","keycode","parseInt","isNaN","_alias","matchModifiers","event","modifierSequence","prop","handleWindowBlurEvent","_activePointers","_activeKeys","handlePointerStartEvent","isPrimary","handlePointerEndEvent","touches","setImmediate","setTimeout","Math","max","handleKeyStartEvent","keyCode","which","handleKeyEndEvent","getInteractionType","pointer","disengage$5","removeEventListener","pointerStartEvents","pointerEndEvents","engage$5","addEventListener","get","hasAutofocus","hasNoPositiveTabindex","getClassNames","className","split","toggleClass","classNames","idx","hasClass","shouldHaveClass","join","removeClass","addClass","handleFocusEvent","source","focusEventName","interactionType","interactionTypeHandler","lock","blurEventName","used","current","getCurrentFocusSource","getUsedFocusSource","lockFocusSource","unlockFocusSource","disengage$6","shadowHandle","engage$6","shadowFocus","engageInteractionTypeObserver","unlock","applyFocusWithinClass","active","_active","getActiveElements","supports$11","cssShadowPiercingDeepCombinator","_current","selector$3","reduce","previous","handleDocumentBlurEvent","blurTimer","handleDocumentFocusEvent","clearImmediate","clearTimeout","handleShadowFocusEvent","disengage$7","shadowHandle$1","blurEventName$1","focusEventName$1","engage$7","getIntersectingRect","one","two","top","left","right","min","bottom","width","height","getViewportRect","innerWidth","clientWidth","innerHeight","clientHeight","getInnerBoundingClientRect","rect","getBoundingClientRect","scrollbarWidth","scrollbarHeight","_rect","area","isOverflowingElement","isScrollableElement","getScrollableParentRect","scrollingContainers","intersection","_platform","input","Array","isArray","nodeType","String","_ref","_ref$label","DOCUMENT_NODE","ELEMENT_NODE","DOCUMENT_FRAGMENT_NODE","getShadowHost","_ref2","container","host","ownerDocument","shadowHost","defaultView","os","family","WINDOWS","OSX","layout","version","parseFloat","floor","IE9","IE11","tests","version$1","userAgent","navigator","cacheKey","cache","cache$1","set","values","time","Date","toISOString","combinator","noArrowArrowArrow","noDeep","gif","focusAreaImgTabindex","focusAreaTabindex","focusAreaWithoutHref","invalidGif","focusBrokenImageMap","focusFieldsetDisabled","focusFormDisabled","href","iframeDocument","focusInvalidTabindex","svg","result$1","firstElementChild","foreignObject","getElementsByTagName","result$2","SVGElement","focusTabindexTrailingCharacters","createDocumentFragment","result$3","supportsCache","supports$1","validIntegerPatternNoTrailing","validIntegerPatternWithTrailing","validIntegerPattern","hasTabindex","hasTabIndex","attributeName","supports$2","disabledElementsPattern","disabledElements","select","textarea","button","form","isNativeDisabledSupported","RegExp","_ref3","temporaryAttribute","temporaryAttributeValue","_value","_value2","_ref4","_value3","noop","_console","log","debug","info","error","console","currentState","runningAsGetter","_ref5","contentDocument","getSVGDocument","shadowPrefix","supports$6","complete","naturalHeight","childOfInteractive","_element","supports$7","supports$8","selector$1","_ref12","_ref12$strategy","isTabbable","_ref14","_isTabbable","sortDomOrder","_ref15","_list","_elements","focusRedirectTarget","_ref16","skipFocusable","_ref17","getTarget","focus$2","_ref18","defaultToAncestor","undoScrolling","targetIsFocusable","_undoScrolling","lastTime","vendors","requestAnimationFrameName","cancelAnimationFrameName","x","currTime","getTime","timeToCall","id","_CustomEvent","CustomEvent","params","evt","createEvent","initCustomEvent","Event","decorateService","_ref20","shadowed","_ref21","engage$1","disengage$1","createShadowRoot","blurElement","handleElementBlurEvent","stopHandleElementBlurEvent","handleFocusChange","observeElementBlurEvent","shadowFocusEvent","decorateContext","_ref23","engage$2","disengage$2","relevantToCurrentBrowser","handleBeforeFocusEvent","reverse","children","transition","item","pointerFocusChildren","engage$3","disengage$3","relevantToCurrentBrowser$1","handleMouseDownEvent","defaultPrevented","handleMouseUpEvent","pointerFocusInput","engage$4","disengage$4","relevantToCurrentBrowser$2","pointerFocusParent","fix","activeElement$1","_ref24","getInsignificantBranches","_ref27","activeElements","insignificantBranches","shadowObserverConfig","childList","subtree","ShadowMutationObserver","_this","_ref29","config","_classCallCheck","clientObserver","MutationObserver","hostObserver","mutations","handleHostMutation","observeContext","observeShadowHosts","disconnect","_this2","observe","mutation","addedElements","addedNodes","shadowMutations","_ref30","service","observerConfig","attributes","attributeFilter","InertSubtree","_this3","_ref31","_filter","_inertElementCache","handleMutation","renderInert","filterElements","filterParentElements","shadowObserver","_this4","makeInert","isParentOfElement","addedFocusableElements","listQueryFocusable","disabled$1","_ref32","observerConfig$1","HiddenSubtree","_ref33","isInsignificantBranch","startObserver","_observer","_this5","_ref34","Maps","maps","addMapByName","usemaps","extractAreasFromList","image","getAreasFor","Shadows","hostCounter","inHost","inDocument","_sortingId","parentHost","_registerHost","_registerHostParent","_registerElement","_injectHosts","_replaceHosts","_cleanup","_merge","_resolveHostElement","sortShadowed","shadows","extractElements","indexes","normal","reduceRight","tabsequence","_ref35","tab","up","down","pageUp","page-up","pageDown","page-down","end","home","enter","escape","space","shift","capsLock","caps-lock","ctrl","alt","meta","pause","insert","delete","backspace",91,"_n","numCode","_n2","_code","_name2","fromCharCode","keyBinding","text","_text","tokens","_modifiers","_keyCodes","keyCodes","bindings","mapKeys","registerBinding","addCallback","handleKeyDown","_event","tabFocus","_ref36","?alt+?shift+tab","preventDefault","sequence","backward","first","last","currentIndex","found","index","maintain","aria-busy","default","aria-checked","aria-disabled","aria-expanded","aria-grabbed","aria-hidden","aria-invalid","aria-pressed","aria-selected","aria-atomic","aria-autocomplete","aria-dropeffect","multiple","aria-haspopup","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-readonly","aria-relevant","aria-required","aria-sort","other","firstTabbable","_ref37","ignoreAutofocus","defaultToContext","query","shadowHosts","supportsFocusIn","script","initial","focusSource","supportsFocusIn$1","focusWithin","visibleArea","_viewport","_area","_container","_visible","maxArea","round","factor","roundedVisibleArea","whenVisibleArea","_ref38","evaluate","predicate","checkPredicate","focusable$1","_ref39","filterCallback","handle","when","conflicted","ally_js","noConflict","root","factory","CSS","codeUnit","string","firstCodeUnit","charCodeAt","toString","charAt","capitalize","toUpperCase","cleanupOS","pattern","10.0","6.4","6.3","6.2","6.1","6.0","5.2","5.1","5.01","5.0","4.0","4.90","exec","format","each","object","maxSafeInteger","forOwn","trim","hasOwnProperty","getClassOf","isHostType","qualify","accumulator","ua","getLayout","guesses","guess","getManufacturer","product","getName","getOS","getProduct","getVersion","patterns","toStringPlatform","description","isCustomContext","nav","isSpecialCasedOS","isModuleScope","thisBinding","oldRoot","likeChrome","objectClass","airRuntimeClass","enviroClass","javaClass","java","phantomClass","rhino","environment","alpha","beta","doc","opera","operamini","operaClass","reOpera","arch","prerelease","useFeatures","manufacturer","Apple","iPad","iPhone","iPod","Archos","Amazon","Kindle","Kindle Fire","Asus","Transformer","Barnes & Noble","Nook","BlackBerry","PlayBook","Google","Google TV","Nexus","HP","TouchPad","HTC","LG","Microsoft","Xbox","Xbox One","Motorola","Xoom","Nintendo","Wii U","Wii","Nokia","Lumia","Samsung","Galaxy S","Galaxy S2","Galaxy S3","Galaxy S4","Sony","PlayStation 4","PlayStation 3","PlayStation Vita","lang","System","getProperty","system","process","browser","runtime","flash","Capabilities","phantom","major","minor","patch","documentMode","toFixed","appMinorVersion","external","architecture","cpuClass","objectTypes","function","freeExports","freeModule","freeGlobal","pow","objectProto"],"mappings":"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B,OAA9B,EAAuC,SAAvC,EAAkD,IAAlD;AACA,cAAU,OAAO,SAAP,EAAV;AACD,GAHD;;AAKA,YAAU,gBAAV,CAA2B,OAA3B,EAAoC,SAApC,EAA+C,IAA/C;;AAEA,SAAO,EAAE,oBAAF,EAAP;AACD,CA5BD;;AA8BA;;AAEA,IAAI,OAAO;AACT,aAAW,WADF;AAET,UAFS;AAGT,eAAa;AAHJ,CAAX;;AAMA;;AAEA;AACA,IAAM,aAAa,OAAO,MAAP,KAAkB,WAAlB,IAAiC,OAAO,IAA3D;;AAEA,IAAI,UAAU;AACZ,kBADY;AAEZ,cAFY;AAGZ,UAHY;AAIZ,UAJY;AAKZ,QALY;AAMZ,oBANY;AAOZ,UAPY;AAQZ,kBARY;AASZ,cATY;AAUZ,cAVY;AAWZ,YAXY;AAYZ,WAAS,SAZG;AAaZ,cAAY,sBAAW;AACrB,QAAI,OAAO,MAAP,KAAkB,WAAlB,IAAiC,OAAO,IAAP,KAAgB,IAArD,EAA2D;AACzD,aAAO,IAAP,GAAc,UAAd;AACD;;AAED,WAAO,IAAP;AACD;AAnBW,CAAd;;AAsBA,OAAO,OAAP,GAAiB,OAAjB;;;;AC7qLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar _platform = _interopDefault(require('platform'));\nvar cssEscape = _interopDefault(require('css.escape'));\n\n// input may be undefined, selector-tring, Node, NodeList, HTMLCollection, array of Nodes\n// yes, to some extent this is a bad replica of jQuery's constructor function\nvar nodeArray = function(input) {\n  if (!input) {\n    return [];\n  }\n\n  if (Array.isArray(input)) {\n    return input;\n  }\n\n  // instanceof Node - does not work with iframes\n  if (input.nodeType !== undefined) {\n    return [input];\n  }\n\n  if (typeof input === 'string') {\n    input = document.querySelectorAll(input);\n  }\n\n  if (input.length !== undefined) {\n    return [].slice.call(input, 0);\n  }\n\n  throw new TypeError('unexpected input ' + String(input));\n};\n\nvar contextToElement = function({\n  context,\n  label = 'context-to-element',\n  resolveDocument,\n  defaultToDocument,\n}) {\n  let element = nodeArray(context)[0];\n\n  if (resolveDocument && element && element.nodeType === Node.DOCUMENT_NODE) {\n    element = element.documentElement;\n  }\n\n  if (!element && defaultToDocument) {\n    return document.documentElement;\n  }\n\n  if (!element) {\n    throw new TypeError(label + ' requires valid options.context');\n  }\n\n  if (element.nodeType !== Node.ELEMENT_NODE && element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n    throw new TypeError(label + ' requires options.context to be an Element');\n  }\n\n  return element;\n};\n\nvar getShadowHost = function({context} = {}) {\n  let element = contextToElement({\n    label: 'get/shadow-host',\n    context,\n  });\n\n  // walk up to the root\n  let container = null;\n\n  while (element) {\n    container = element;\n    element = element.parentNode;\n  }\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType\n  // NOTE: Firefox 34 does not expose ShadowRoot.host (but 37 does)\n  if (container.nodeType === container.DOCUMENT_FRAGMENT_NODE && container.host) {\n    // the root is attached to a fragment node that has a host\n    return container.host;\n  }\n\n  return null;\n};\n\nvar getDocument = function(node) {\n  if (!node) {\n    return document;\n  }\n\n  if (node.nodeType === Node.DOCUMENT_NODE) {\n    return node;\n  }\n\n  return node.ownerDocument || document;\n};\n\n// Determines if an element is the activeElement within its context, i.e. its document iFrame or ShadowHost\n\nvar isActiveElement = function(context) {\n  const element = contextToElement({\n    label: 'is/active-element',\n    resolveDocument: true,\n    context,\n  });\n\n  const _document = getDocument(element);\n  if (_document.activeElement === element) {\n    return true;\n  }\n\n  const shadowHost = getShadowHost({ context: element });\n  if (shadowHost && shadowHost.shadowRoot.activeElement === element) {\n    return true;\n  }\n\n  return false;\n};\n\nvar getWindow = function(node) {\n  const _document = getDocument(node);\n  return _document.defaultView || window;\n};\n\n// wrapper for HTMLElement.prototype.blur\n\nvar blur = function(context) {\n  const element = contextToElement({\n    label: 'element/blur',\n    context,\n  });\n\n  if (!isActiveElement(element)) {\n    return null;\n  }\n\n  const nodeName = element.nodeName.toLowerCase();\n  if (nodeName === 'body') {\n    // prevent the browser window from losing focus in IE9\n    // according to https://bugs.jqueryui.com/ticket/9420\n    return null;\n  }\n\n  if (element.blur) {\n    element.blur();\n    return document.activeElement;\n  }\n\n  const _window = getWindow(element);\n\n  try {\n    // The element itself does not have a blur method.\n    // This is true for SVG elements in Firefox and IE,\n    // as well as MathML elements in every browser.\n    // IE9 - 11 will let us abuse HTMLElement's blur method,\n    // Firefox and Edge will throw an error.\n    _window.HTMLElement.prototype.blur.call(element);\n  } catch (e) {\n    // if we're not in an HTML document, we don't have access to document.body\n    const body = _window.document && _window.document.body;\n    if (!body) {\n      return null;\n    }\n\n    // we can't simply call document.body.focus() unless\n    // we make sure the element actually is focusable\n    const tabindex = body.getAttribute('tabindex');\n    body.setAttribute('tabindex', '-1');\n    body.focus();\n    if (tabindex) {\n      body.setAttribute('tabindex', tabindex);\n    } else {\n      body.removeAttribute('tabindex');\n    }\n  }\n\n  return _window.document.activeElement;\n};\n\n// sugar for https://github.com/bestiejs/platform.js\n// make sure to ALWAYS reference the layout engine,\n// even if it is not necessary for the condition,\n// as this makes grepping for this stuff simpler\n\n// deep clone of original platform\nconst platform = JSON.parse(JSON.stringify(_platform));\n\n// operating system\nconst os = platform.os.family || '';\nconst ANDROID = os === 'Android';\nconst WINDOWS = os.slice(0, 7) === 'Windows';\nconst OSX = os === 'OS X';\nconst IOS = os === 'iOS';\n\n// layout\nconst BLINK = platform.layout === 'Blink';\nconst GECKO = platform.layout === 'Gecko';\nconst TRIDENT = platform.layout === 'Trident';\nconst EDGE = platform.layout === 'EdgeHTML';\nconst WEBKIT = platform.layout === 'WebKit';\n\n// browser version (not layout engine version!)\nconst version = parseFloat(platform.version);\nconst majorVersion = Math.floor(version);\nplatform.majorVersion = majorVersion;\n\nplatform.is = {\n  // operating system\n  ANDROID,\n  WINDOWS,\n  OSX,\n  IOS,\n  // layout\n  BLINK, // \"Chrome\", \"Chrome Mobile\", \"Opera\"\n  GECKO, // \"Firefox\"\n  TRIDENT, // \"Internet Explorer\"\n  EDGE, // \"Microsoft Edge\"\n  WEBKIT, // \"Safari\"\n  // INTERNET EXPLORERS\n  IE9: TRIDENT && majorVersion === 9,\n  IE10: TRIDENT && majorVersion === 10,\n  IE11: TRIDENT && majorVersion === 11,\n};\n\nfunction before() {\n  const data = {\n    // remember what had focus to restore after test\n    activeElement: document.activeElement,\n    // remember scroll positions to restore after test\n    windowScrollTop: window.scrollTop,\n    windowScrollLeft: window.scrollLeft,\n    bodyScrollTop: document.body.scrollTop,\n    bodyScrollLeft: document.body.scrollLeft,\n  };\n\n  // wrap tests in an element hidden from screen readers to prevent them\n  // from announcing focus, which can be quite irritating to the user\n  const iframe = document.createElement('iframe');\n  iframe.setAttribute('style', 'position:absolute; position:fixed; top:0; left:-2px; width:1px; height:1px; overflow:hidden;');\n  iframe.setAttribute('aria-live', 'off');\n  iframe.setAttribute('aria-busy', 'true');\n  iframe.setAttribute('aria-hidden', 'true');\n  document.body.appendChild(iframe);\n\n  const _window = iframe.contentWindow;\n  const _document = _window.document;\n\n  _document.open();\n  _document.close();\n  const wrapper = _document.createElement('div');\n  _document.body.appendChild(wrapper);\n\n  data.iframe = iframe;\n  data.wrapper = wrapper;\n  data.window = _window;\n  data.document = _document;\n\n  return data;\n}\n\n// options.element:\n//  {string} element name\n//  {function} callback(wrapper, document) to generate an element\n// options.mutate: (optional)\n//  {function} callback(element, wrapper, document) to manipulate element prior to focus-test.\n//             Can return DOMElement to define focus target (default: element)\n// options.validate: (optional)\n//  {function} callback(element, focusTarget, document) to manipulate test-result\nfunction test(data, options) {\n  // make sure we operate on a clean slate\n  data.wrapper.innerHTML = '';\n  // create dummy element to test focusability of\n  const element = typeof options.element === 'string'\n    ? data.document.createElement(options.element)\n    : options.element(data.wrapper, data.document);\n  // allow callback to further specify dummy element\n  // and optionally define element to focus\n  let focus = options.mutate && options.mutate(element, data.wrapper, data.document);\n  if (!focus && focus !== false) {\n    focus = element;\n  }\n  // element needs to be part of the DOM to be focusable\n  !element.parentNode && data.wrapper.appendChild(element);\n  // test if the element with invalid tabindex can be focused\n  focus && focus.focus && focus.focus();\n  // validate test's result\n  return options.validate\n    ? options.validate(element, focus, data.document)\n    : data.document.activeElement === focus;\n}\n\nfunction after(data) {\n  // restore focus to what it was before test and cleanup\n  if (data.activeElement === document.body) {\n    document.activeElement && document.activeElement.blur && document.activeElement.blur();\n    if (platform.is.IE10) {\n      // IE10 does not redirect focus to <body> when the activeElement is removed\n      document.body.focus();\n    }\n  } else {\n    data.activeElement && data.activeElement.focus && data.activeElement.focus();\n  }\n\n  document.body.removeChild(data.iframe);\n\n  // restore scroll position\n  window.scrollTop = data.windowScrollTop;\n  window.scrollLeft = data.windowScrollLeft;\n  document.body.scrollTop = data.bodyScrollTop;\n  document.body.scrollLeft = data.bodyScrollLeft;\n}\n\nvar detectFocus = function(tests) {\n  const data = before();\n\n  const results = {};\n  Object.keys(tests).map(function(key) {\n    results[key] = test(data, tests[key]);\n  });\n\n  after(data);\n  return results;\n};\n\n// this file is overwritten by `npm run build:pre`\nconst version$1 = '1.4.1';\n\n/*\n    Facility to cache test results in localStorage.\n\n    USAGE:\n      cache.get('key');\n      cache.set('key', 'value');\n */\n\nfunction readLocalStorage(key) {\n  // allow reading from storage to retrieve previous support results\n  // even while the document does not have focus\n  let data;\n\n  try {\n    data = window.localStorage && window.localStorage.getItem(key);\n    data = data ? JSON.parse(data) : {};\n  } catch (e) {\n    data = {};\n  }\n\n  return data;\n}\n\nfunction writeLocalStorage(key, value) {\n  if (!document.hasFocus()) {\n    // if the document does not have focus when tests are executed, focus() may\n    // not be handled properly and events may not be dispatched immediately.\n    // This can happen when a document is reloaded while Developer Tools have focus.\n    try {\n      window.localStorage && window.localStorage.removeItem(key);\n    } catch (e) {\n      // ignore\n    }\n\n    return;\n  }\n\n  try {\n    window.localStorage && window.localStorage.setItem(key, JSON.stringify(value));\n  } catch (e) {\n    // ignore\n  }\n}\n\nconst userAgent = typeof window !== 'undefined' && window.navigator.userAgent || '';\nconst cacheKey = 'ally-supports-cache';\nlet cache = readLocalStorage(cacheKey);\n\n// update the cache if ally or the user agent changed (newer version, etc)\nif (cache.userAgent !== userAgent || cache.version !== version$1) {\n  cache = {};\n}\n\ncache.userAgent = userAgent;\ncache.version = version$1;\n\nvar cache$1 = {\n  get: function() {\n    return cache;\n  },\n  set: function(values) {\n    Object.keys(values).forEach(function(key) {\n      cache[key] = values[key];\n    });\n\n    cache.time = new Date().toISOString();\n    writeLocalStorage(cacheKey, cache);\n  },\n};\n\nvar cssShadowPiercingDeepCombinator = function() {\n  let combinator;\n\n  // see https://dev.w3.org/csswg/css-scoping-1/#deep-combinator\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1117572\n  // https://code.google.com/p/chromium/issues/detail?id=446051\n  try {\n    document.querySelector('html >>> :first-child');\n    combinator = '>>>';\n  } catch (noArrowArrowArrow) {\n    try {\n      // old syntax supported at least up to Chrome 41\n      // https://code.google.com/p/chromium/issues/detail?id=446051\n      document.querySelector('html /deep/ :first-child');\n      combinator = '/deep/';\n    } catch (noDeep) {\n      combinator = '';\n    }\n  }\n\n  return combinator;\n};\n\nvar gif = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaImgTabindex = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = '<map name=\"image-map-tabindex-test\">'\n      + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>'\n      + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" src=\"' + gif + '\">';\n\n    return element.querySelector('area');\n  },\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaTabindex = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = '<map name=\"image-map-tabindex-test\">'\n      + '<area href=\"#void\" tabindex=\"-1\" shape=\"rect\" coords=\"63,19,144,45\"></map>'\n      + '<img usemap=\"#image-map-tabindex-test\" alt=\"\" src=\"' + gif + '\">';\n\n    return false;\n  },\n  validate: function(element, focusTarget, _document) {\n    if (platform.is.GECKO) {\n      // fixes https://github.com/medialize/ally.js/issues/35\n      // Firefox loads the DataURI asynchronously, causing a false-negative\n      return true;\n    }\n\n    const focus = element.querySelector('area');\n    focus.focus();\n    return _document.activeElement === focus;\n  },\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaWithoutHref = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = '<map name=\"image-map-area-href-test\">'\n      + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>'\n      + '<img usemap=\"#image-map-area-href-test\" alt=\"\" src=\"' + gif + '\">';\n\n    return element.querySelector('area');\n  },\n  validate: function(element, focusTarget, _document) {\n    if (platform.is.GECKO) {\n      // fixes https://github.com/medialize/ally.js/issues/35\n      // Firefox loads the DataURI asynchronously, causing a false-negative\n      return true;\n    }\n\n    return _document.activeElement === focusTarget;\n  },\n};\n\n// export default 'data:audio/mp3;base64,audio-focus-test';\n\nvar focusAudioWithoutControls = {\n  name: 'can-focus-audio-without-controls',\n  element: 'audio',\n  mutate: function(element) {\n    try {\n      // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n      element.setAttribute('src', gif);\n    } catch (e) {\n      // IE9 may throw \"Error: Not implemented\"\n    }\n  },\n};\n\nvar invalidGif = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';\n\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\nvar focusBrokenImageMap = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = '<map name=\"broken-image-map-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>'\n      + '<img usemap=\"#broken-image-map-test\" alt=\"\" src=\"' + invalidGif + '\">';\n\n    return element.querySelector('area');\n  },\n};\n\n// Children of focusable elements with display:flex are focusable in IE10-11\nvar focusChildrenOfFocusableFlexbox = {\n  element: 'div',\n  mutate: function(element) {\n    element.setAttribute('tabindex', '-1');\n    element.setAttribute('style', 'display: -webkit-flex; display: -ms-flexbox; display: flex;');\n    element.innerHTML = '<span style=\"display: block;\">hello</span>';\n    return element.querySelector('span');\n  },\n};\n\n// fieldset[tabindex=0][disabled] should not be focusable, but Blink and WebKit disagree\n// @specification https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\n// @browser-issue Chromium https://crbug.com/453847\n// @browser-issue WebKit https://bugs.webkit.org/show_bug.cgi?id=141086\nvar focusFieldsetDisabled = {\n  element: 'fieldset',\n  mutate: function(element) {\n    element.setAttribute('tabindex', 0);\n    element.setAttribute('disabled', 'disabled');\n  },\n};\n\nvar focusFieldset = {\n  element: 'fieldset',\n  mutate: function(element) {\n    element.innerHTML = '<legend>legend</legend><p>content</p>';\n  },\n};\n\n// elements with display:flex are focusable in IE10-11\nvar focusFlexboxContainer = {\n  element: 'span',\n  mutate: function(element) {\n    element.setAttribute('style', 'display: -webkit-flex; display: -ms-flexbox; display: flex;');\n    element.innerHTML = '<span style=\"display: block;\">hello</span>';\n  },\n};\n\n// form[tabindex=0][disabled] should be focusable as the\n// specification doesn't know the disabled attribute on the form element\n// @specification https://www.w3.org/TR/html5/forms.html#the-form-element\nvar focusFormDisabled = {\n  element: 'form',\n  mutate: function(element) {\n    element.setAttribute('tabindex', 0);\n    element.setAttribute('disabled', 'disabled');\n  },\n};\n\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// fixes https://github.com/medialize/ally.js/issues/20\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-ismap\nvar focusImgIsmap = {\n  element: 'a',\n  mutate: function(element) {\n    element.href = '#void';\n    element.innerHTML = '<img ismap src=\"' + gif + '\" alt=\"\">';\n    return element.querySelector('img');\n  },\n};\n\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\nvar focusImgUsemapTabindex = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = '<map name=\"image-map-tabindex-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>'\n      + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" '\n      + 'src=\"' + gif + '\">';\n\n    return element.querySelector('img');\n  },\n};\n\nvar focusInHiddenIframe = {\n  element: function(wrapper, _document) {\n    const iframe = _document.createElement('iframe');\n\n    // iframe must be part of the DOM before accessing the contentWindow is possible\n    wrapper.appendChild(iframe);\n\n    // create the iframe's default document (<html><head></head><body></body></html>)\n    const iframeDocument = iframe.contentWindow.document;\n    iframeDocument.open();\n    iframeDocument.close();\n    return iframe;\n  },\n  mutate: function(iframe) {\n    iframe.style.visibility = 'hidden';\n\n    const iframeDocument = iframe.contentWindow.document;\n    const input = iframeDocument.createElement('input');\n    iframeDocument.body.appendChild(input);\n    return input;\n  },\n  validate: function(iframe) {\n    const iframeDocument = iframe.contentWindow.document;\n    const focus = iframeDocument.querySelector('input');\n    return iframeDocument.activeElement === focus;\n  },\n};\n\nconst result = !platform.is.WEBKIT;\n\nvar focusInZeroDimensionObject = function() {\n  return result;\n};\n\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusInvalidTabindex = {\n  element: 'div',\n  mutate: function(element) {\n    element.setAttribute('tabindex', 'invalid-value');\n  },\n};\n\nvar focusLabelTabindex = {\n  element: 'label',\n  mutate: function(element) {\n    element.setAttribute('tabindex', '-1');\n  },\n  validate: function(element, focusTarget, _document) {\n    // force layout in Chrome 49, otherwise the element won't be focusable\n    /* eslint-disable no-unused-vars */\n    const variableToPreventDeadCodeElimination = element.offsetHeight;\n    /* eslint-enable no-unused-vars */\n    element.focus();\n    return _document.activeElement === element;\n  },\n};\n\nvar svg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb'\n  + 'G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ'\n  + 'zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==';\n\n// Note: IE10 on BrowserStack does not like this test\n\nvar focusObjectSvgHidden = {\n  element: 'object',\n  mutate: function(element) {\n    element.setAttribute('type', 'image/svg+xml');\n    element.setAttribute('data', svg);\n    element.setAttribute('width', '200');\n    element.setAttribute('height', '50');\n    element.style.visibility = 'hidden';\n  },\n};\n\n// Note: IE10 on BrowserStack does not like this test\n\nvar focusObjectSvg = {\n  name: 'can-focus-object-svg',\n  element: 'object',\n  mutate: function(element) {\n    element.setAttribute('type', 'image/svg+xml');\n    element.setAttribute('data', svg);\n    element.setAttribute('width', '200');\n    element.setAttribute('height', '50');\n  },\n  validate: function(element, focusTarget, _document) {\n    if (platform.is.GECKO) {\n      // Firefox seems to be handling the object creation asynchronously and thereby produces a false negative test result.\n      // Because we know Firefox is able to focus object elements referencing SVGs, we simply cheat by sniffing the user agent string\n      return true;\n    }\n\n    return _document.activeElement === element;\n  },\n};\n\n// Every Environment except IE9 considers SWF objects focusable\nconst result$1 = !platform.is.IE9;\n\nvar focusObjectSwf = function() {\n  return result$1;\n};\n\nvar focusRedirectImgUsemap = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = '<map name=\"focus-redirect-img-usemap\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>'\n      + '<img usemap=\"#focus-redirect-img-usemap\" alt=\"\" '\n      + 'src=\"' + gif + '\">';\n\n    // focus the <img>, not the <div>\n    return element.querySelector('img');\n  },\n  validate: function(element, focusTarget, _document) {\n    const target = element.querySelector('area');\n    return _document.activeElement === target;\n  },\n};\n\n// see https://jsbin.com/nenirisage/edit?html,js,console,output\n\nvar focusRedirectLegend = {\n  element: 'fieldset',\n  mutate: function(element) {\n    element.innerHTML = '<legend>legend</legend><input tabindex=\"-1\"><input tabindex=\"0\">';\n    // take care of focus in validate();\n    return false;\n  },\n  validate: function(element, focusTarget, _document) {\n    const focusable = element.querySelector('input[tabindex=\"-1\"]');\n    const tabbable = element.querySelector('input[tabindex=\"0\"]');\n\n    // Firefox requires this test to focus the <fieldset> first, while this is not necessary in\n    // https://jsbin.com/nenirisage/edit?html,js,console,output\n    element.focus();\n\n    element.querySelector('legend').focus();\n    return _document.activeElement === focusable && 'focusable'\n      || _document.activeElement === tabbable && 'tabbable'\n      || '';\n  },\n};\n\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollBody = {\n  element: 'div',\n  mutate: function(element) {\n    element.setAttribute('style', 'width: 100px; height: 50px; overflow: auto;');\n    element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n    return element.querySelector('div');\n  },\n};\n\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainerWithoutOverflow = {\n  element: 'div',\n  mutate: function(element) {\n    element.setAttribute('style', 'width: 100px; height: 50px;');\n    element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n  },\n};\n\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainer = {\n  element: 'div',\n  mutate: function(element) {\n    element.setAttribute('style', 'width: 100px; height: 50px; overflow: auto;');\n    element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n  },\n};\n\nvar focusSummary = {\n  element: 'details',\n  mutate: function(element) {\n    element.innerHTML = '<summary>foo</summary><p>content</p>';\n    return element.firstElementChild;\n  },\n};\n\nfunction makeFocusableForeignObject() {\n  const fragment = document.createElement('div');\n  fragment.innerHTML = `<svg><foreignObject width=\"30\" height=\"30\">\n      <input type=\"text\"/>\n  </foreignObject></svg>`;\n\n  return fragment.firstChild.firstChild;\n}\n\nvar focusSvgForeignObjectHack = function(element) {\n  // Edge13, Edge14: foreignObject focus hack\n  // https://jsbin.com/kunehinugi/edit?html,js,output\n  // https://jsbin.com/fajagi/3/edit?html,js,output\n  const isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === 'svg';\n  if (!isSvgElement) {\n    return false;\n  }\n\n  // inject and focus an <input> element into the SVG element to receive focus\n  const foreignObject = makeFocusableForeignObject();\n  element.appendChild(foreignObject);\n  const input = foreignObject.querySelector('input');\n  input.focus();\n\n  // upon disabling the activeElement, IE and Edge\n  // will not shift focus to <body> like all the other\n  // browsers, but instead find the first focusable\n  // ancestor and shift focus to that\n  input.disabled = true;\n\n  // clean up\n  element.removeChild(foreignObject);\n  return true;\n};\n\nfunction generate(element) {\n  return '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">'\n    + element + '</svg>';\n}\n\nfunction focus(element) {\n  if (element.focus) {\n    return;\n  }\n\n  try {\n    HTMLElement.prototype.focus.call(element);\n  } catch (e) {\n    focusSvgForeignObjectHack(element);\n  }\n}\n\nfunction validate(element, focusTarget, _document) {\n  focus(focusTarget);\n  return _document.activeElement === focusTarget;\n}\n\nvar focusSvgFocusableAttribute = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = generate('<text focusable=\"true\">a</text>');\n    return element.querySelector('text');\n  },\n  validate,\n};\n\nvar focusSvgTabindexAttribute = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = generate('<text tabindex=\"0\">a</text>');\n    return element.querySelector('text');\n  },\n  validate,\n};\n\nvar focusSvgNegativeTabindexAttribute = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = generate('<text tabindex=\"-1\">a</text>');\n    return element.querySelector('text');\n  },\n  validate,\n};\n\nvar focusSvgUseTabindex = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = generate([\n      '<g id=\"ally-test-target\"><a xlink:href=\"#void\"><text>link</text></a></g>',\n      '<use xlink:href=\"#ally-test-target\" x=\"0\" y=\"0\" tabindex=\"-1\" />',\n    ].join(''));\n\n    return element.querySelector('use');\n  },\n  validate,\n};\n\nvar focusSvgForeignobjectTabindex = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = generate('<foreignObject tabindex=\"-1\"><input type=\"text\" /></foreignObject>');\n    // Safari 8's quersSelector() can't identify foreignObject, but getElementyByTagName() can\n    return element.querySelector('foreignObject') || element.getElementsByTagName('foreignObject')[0];\n  },\n  validate,\n\n};\n\n// Firefox seems to be handling the SVG-document-in-iframe creation asynchronously\n// and thereby produces a false negative test result. Thus the test is pointless\n// and we resort to UA sniffing once again.\n// see http://jsbin.com/vunadohoko/1/edit?js,console,output\n\nconst result$2 = Boolean(platform.is.GECKO && typeof SVGElement !== 'undefined' && SVGElement.prototype.focus);\n\nvar focusSvgInIframe = function() {\n  return result$2;\n};\n\nvar focusSvg = {\n  element: 'div',\n  mutate: function(element) {\n    element.innerHTML = generate('');\n    return element.firstChild;\n  },\n  validate,\n};\n\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusTabindexTrailingCharacters = {\n  element: 'div',\n  mutate: function(element) {\n    element.setAttribute('tabindex', '3x');\n  },\n};\n\nvar focusTable = {\n  element: 'table',\n  mutate: function(element, wrapper, _document) {\n    // IE9 has a problem replacing TBODY contents with innerHTML.\n    // https://stackoverflow.com/a/8097055/515124\n    // element.innerHTML = '<tr><td>cell</td></tr>';\n    const fragment = _document.createDocumentFragment();\n    fragment.innerHTML = '<tr><td>cell</td></tr>';\n    element.appendChild(fragment);\n  },\n};\n\n// export default 'data:video/mp4;base64,video-focus-test';\n\nvar focusVideoWithoutControls = {\n  element: 'video',\n  mutate: function(element) {\n    try {\n      // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n      element.setAttribute('src', gif);\n    } catch (e) {\n      // IE9 may throw \"Error: Not implemented\"\n    }\n  },\n};\n\n// https://jsbin.com/vafaba/3/edit?html,js,console,output\nconst result$3 = platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE;\n\nvar tabsequenceAreaAtImgPosition = function() {\n  return result$3;\n};\n\nconst testCallbacks = {\n  cssShadowPiercingDeepCombinator,\n  focusInZeroDimensionObject,\n  focusObjectSwf,\n  focusSvgInIframe,\n  tabsequenceAreaAtImgPosition,\n};\n\nconst testDescriptions = {\n  focusAreaImgTabindex,\n  focusAreaTabindex,\n  focusAreaWithoutHref,\n  focusAudioWithoutControls,\n  focusBrokenImageMap,\n  focusChildrenOfFocusableFlexbox,\n  focusFieldsetDisabled,\n  focusFieldset,\n  focusFlexboxContainer,\n  focusFormDisabled,\n  focusImgIsmap,\n  focusImgUsemapTabindex,\n  focusInHiddenIframe,\n  focusInvalidTabindex,\n  focusLabelTabindex,\n  focusObjectSvg,\n  focusObjectSvgHidden,\n  focusRedirectImgUsemap,\n  focusRedirectLegend,\n  focusScrollBody,\n  focusScrollContainerWithoutOverflow,\n  focusScrollContainer,\n  focusSummary,\n  focusSvgFocusableAttribute,\n  focusSvgTabindexAttribute,\n  focusSvgNegativeTabindexAttribute,\n  focusSvgUseTabindex,\n  focusSvgForeignobjectTabindex,\n  focusSvg,\n  focusTabindexTrailingCharacters,\n  focusTable,\n  focusVideoWithoutControls,\n};\n\nfunction executeTests() {\n  const results = detectFocus(testDescriptions);\n  Object.keys(testCallbacks).forEach(function(key) {\n    results[key] = testCallbacks[key]();\n  });\n\n  return results;\n}\n\nlet supportsCache = null;\n\nvar _supports = function() {\n  if (supportsCache) {\n    return supportsCache;\n  }\n\n  supportsCache = cache$1.get();\n  if (!supportsCache.time) {\n    cache$1.set(executeTests());\n    supportsCache = cache$1.get();\n  }\n\n  return supportsCache;\n};\n\n// determine if an element's tabindex attribute has a valid value\n\nlet supports$1;\n\n// https://www.w3.org/TR/html5/infrastructure.html#rules-for-parsing-integers\n// NOTE: all browsers agree to allow trailing spaces as well\nconst validIntegerPatternNoTrailing = /^\\s*(-|\\+)?[0-9]+\\s*$/;\nconst validIntegerPatternWithTrailing = /^\\s*(-|\\+)?[0-9]+.*$/;\n\nvar validTabindex = function(context) {\n  if (!supports$1) {\n    supports$1 = _supports();\n  }\n\n  const validIntegerPattern = supports$1.focusTabindexTrailingCharacters\n    ? validIntegerPatternWithTrailing\n    : validIntegerPatternNoTrailing;\n\n  const element = contextToElement({\n    label: 'is/valid-tabindex',\n    resolveDocument: true,\n    context,\n  });\n\n  // Edge 14 has a capitalization problem on SVG elements,\n  // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n  const hasTabindex = element.hasAttribute('tabindex');\n  const hasTabIndex = element.hasAttribute('tabIndex');\n\n  if (!hasTabindex && !hasTabIndex) {\n    return false;\n  }\n\n  // older Firefox and Internet Explorer don't support tabindex on SVG elements\n  const isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === 'svg';\n  if (isSvgElement && !supports$1.focusSvgTabindexAttribute) {\n    return false;\n  }\n\n  // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n  if (supports$1.focusInvalidTabindex) {\n    return true;\n  }\n\n  // an element matches the tabindex selector even if its value is invalid\n  const tabindex = element.getAttribute(hasTabindex ? 'tabindex' : 'tabIndex');\n  // IE11 parses tabindex=\"\" as the value \"-32768\"\n  // @browser-issue Trident https://connect.microsoft.com/IE/feedback/details/1072965\n  if (tabindex === '-32768') {\n    return false;\n  }\n\n  return Boolean(tabindex && validIntegerPattern.test(tabindex));\n};\n\nvar tabindexValue = function(element) {\n  if (!validTabindex(element)) {\n    return null;\n  }\n\n  // Edge 14 has a capitalization problem on SVG elements,\n  // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n  const hasTabindex = element.hasAttribute('tabindex');\n  const attributeName = hasTabindex ? 'tabindex' : 'tabIndex';\n\n  // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n  const tabindex = parseInt(element.getAttribute(attributeName), 10);\n  return isNaN(tabindex) ? -1 : tabindex;\n};\n\n// Determine if an element supports the disabled attribute\n\nlet supports$2;\n\n// https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\nlet disabledElementsPattern;\nconst disabledElements = {\n  input: true,\n  select: true,\n  textarea: true,\n  button: true,\n  fieldset: true,\n  form: true,\n};\n\nvar isNativeDisabledSupported = function(context) {\n  if (!supports$2) {\n    supports$2 = _supports();\n\n    if (supports$2.focusFieldsetDisabled) {\n      delete disabledElements.fieldset;\n    }\n\n    if (supports$2.focusFormDisabled) {\n      delete disabledElements.form;\n    }\n\n    disabledElementsPattern = new RegExp('^(' + Object.keys(disabledElements).join('|') + ')$');\n  }\n\n  const element = contextToElement({\n    label: 'is/native-disabled-supported',\n    context,\n  });\n\n  const nodeName = element.nodeName.toLowerCase();\n  return Boolean(disabledElementsPattern.test(nodeName));\n};\n\n// helper to turn\n//  <div some-attribute=\"original\">\n// into\n//  <div data-cached-some-attribute=\"original\">\n// and back\n\nvar toggleAttribute = function({element, attribute}) {\n  const temporaryAttribute = 'data-cached-' + attribute;\n  const temporaryAttributeValue = element.getAttribute(temporaryAttribute);\n\n  if (temporaryAttributeValue === null) {\n    const _value = element.getAttribute(attribute);\n    if (_value === null) {\n      // can't remove what's not there\n      return;\n    }\n\n    element.setAttribute(temporaryAttribute, _value || '');\n    element.removeAttribute(attribute);\n  } else {\n    const _value = element.getAttribute(temporaryAttribute);\n    element.removeAttribute(temporaryAttribute);\n    element.setAttribute(attribute, _value);\n  }\n};\n\n// helper to turn\n//  <div some-attribute=\"original\">\n// into\n//  <div some-attribute=\"new\" data-cached-some-attribute=\"original\">\n// and back\n\nvar toggleAttributeValue = function({element, attribute, temporaryValue, saveValue}) {\n  const temporaryAttribute = 'data-cached-' + attribute;\n\n  if (temporaryValue !== undefined) {\n    const _value = saveValue || element.getAttribute(attribute);\n    element.setAttribute(temporaryAttribute, _value || '');\n    element.setAttribute(attribute, temporaryValue);\n  } else {\n    const _value = element.getAttribute(temporaryAttribute);\n    element.removeAttribute(temporaryAttribute);\n    if (_value === '') {\n      element.removeAttribute(attribute);\n    } else {\n      element.setAttribute(attribute, _value);\n    }\n  }\n};\n\nconst noop = function() {};\nconst _console = {\n  log: noop,\n  debug: noop,\n  info: noop,\n  warn: noop,\n  error: noop,\n};\n\nvar logger = typeof console !== 'undefined' ? console : _console;\n\n/*\n  Utility to make any element inert (disabled). Inert means the elements cannot be interacted\n  with and they cannot be focused via script, pointer or keyboard - and thus not receive focus.\n\n  Elements made inert (disabled) by this utility are given the attribute [data-ally-disabled=\"true\"].\n\n  ---------------\n\n  inert attribute was [removed](https://html5.org/r/8536) [tweet by steve](https://twitter.com/stevefaulkner/status/443075900201259008)\n  but definition of [inert subtrees](https://www.w3.org/html/wg/drafts/html/master/editing.html#inert-subtrees) remains.\n\n  [implementation idea by Vasilis](https://codepen.io/vasilisvg/pen/scowI)\n  [inert attribute polyfill by GoogleChrome](https://github.com/GoogleChrome/inert-polyfill)\n\n  [Gecko Bug: Inert Attribute](https://bugzilla.mozilla.org/show_bug.cgi?id=921504)\n  [Chromium Bug: Inert Attribute](https://code.google.com/p/chromium/issues/detail?id=269846)\n  [Chromium Bug: Inert Subtree](https://code.google.com/p/chromium/issues/detail?id=241699)\n  [WebKit Bug: Inert Subtree](https://bugs.webkit.org/show_bug.cgi?id=110952)\n*/\n\nlet supports;\n\nfunction disabledFocus() {\n  logger.warn('trying to focus inert element', this);\n}\n\nfunction disableTabindex(element, disabledState) {\n  if (disabledState) {\n    const tabIndex = tabindexValue(element);\n    toggleAttributeValue({\n      element,\n      attribute: 'tabindex',\n      temporaryValue: '-1',\n      saveValue: tabIndex !== null ? tabIndex : '',\n    });\n  } else {\n    toggleAttributeValue({\n      element,\n      attribute: 'tabindex',\n    });\n  }\n}\n\nfunction disableVideoControls(element, disabledState) {\n  toggleAttribute({\n    element,\n    attribute: 'controls',\n    remove: disabledState,\n  });\n}\n\nfunction disableSvgFocusable(element, disabledState) {\n  toggleAttributeValue({\n    element,\n    attribute: 'focusable',\n    temporaryValue: disabledState ? 'false' : undefined,\n  });\n}\n\nfunction disableSvgLink(element, disabledState) {\n  toggleAttribute({\n    element,\n    attribute: 'xlink:href',\n    remove: disabledState,\n  });\n}\n\nfunction setAriaDisabled(element, disabledState) {\n  toggleAttributeValue({\n    element,\n    attribute: 'aria-disabled',\n    temporaryValue: disabledState ? 'true' : undefined,\n  });\n}\n\nfunction disableScriptFocus(element, disabledState) {\n  if (disabledState) {\n    // make sure no script can focus the element\n    element.focus = disabledFocus;\n  } else {\n    // restore original focus function from prototype\n    delete element.focus;\n  }\n}\n\nfunction disablePointerEvents(element, disabledState) {\n  if (disabledState) {\n    // remember previous pointer events status so we can restore it\n    const pointerEvents = element.style.pointerEvents || '';\n    element.setAttribute('data-inert-pointer-events', pointerEvents);\n    // make sure no pointer interaction can access the element\n    element.style.pointerEvents = 'none';\n  } else {\n    // restore to previous pointer interaction status\n    const pointerEvents = element.getAttribute('data-inert-pointer-events');\n    element.removeAttribute('data-inert-pointer-events');\n    element.style.pointerEvents = pointerEvents;\n  }\n}\n\nfunction setElementDisabled(element, disabledState) {\n  setAriaDisabled(element, disabledState);\n  disableTabindex(element, disabledState);\n  disableScriptFocus(element, disabledState);\n  disablePointerEvents(element, disabledState);\n\n  const nodeName = element.nodeName.toLowerCase();\n  if (nodeName === 'video' || nodeName === 'audio') {\n    // Blink and Gecko leave <video controls tabindex=\"-1\"> in document focus navigation sequence\n    // Blink leaves <audio controls tabindex=\"-1\"> in document focus navigation sequence\n    disableVideoControls(element, disabledState);\n  }\n\n  if (nodeName === 'svg' || element.ownerSVGElement) {\n    if (supports.focusSvgFocusableAttribute) {\n      // Internet Explorer knows focusable=\"false\" instead of tabindex=\"-1\"\n      disableSvgFocusable(element, disabledState);\n    } else if (!supports.focusSvgTabindexAttribute && nodeName === 'a') {\n      // Firefox neither knows focusable=\"false\" nor tabindex=\"-1\"\n      disableSvgLink(element, disabledState);\n    }\n  }\n\n  if (disabledState) {\n    element.setAttribute('data-ally-disabled', 'true');\n  } else {\n    element.removeAttribute('data-ally-disabled');\n  }\n}\n\nvar elementDisabled = function(context, disabledState) {\n  if (!supports) {\n    supports = _supports();\n  }\n\n  const element = contextToElement({\n    label: 'element/disabled',\n    context,\n  });\n\n  // accept truthy/falsy values\n  disabledState = Boolean(disabledState);\n  const currentState = element.hasAttribute('data-ally-disabled');\n  // if there's no value to set, we're running as a getter\n  const runningAsGetter = arguments.length === 1;\n\n  if (isNativeDisabledSupported(element)) {\n    if (runningAsGetter) {\n      return element.disabled;\n    }\n\n    // form elements know the disabled attribute, which we shall use instead of our poor man's copy of it\n    element.disabled = disabledState;\n    return element;\n  }\n\n  if (runningAsGetter) {\n    return currentState;\n  }\n\n  if (currentState === disabledState) {\n    // no update necessary\n    return element;\n  }\n\n  setElementDisabled(element, disabledState);\n  return element;\n};\n\n// [elem, elem.parent, elem.parent.parent, …, html]\n// will not contain the shadowRoot (DOCUMENT_FRAGMENT_NODE) and shadowHost\nvar getParents = function({context} = {}) {\n  const list = [];\n  let element = contextToElement({\n    label: 'get/parents',\n    context,\n  });\n\n  while (element) {\n    list.push(element);\n    // IE does know support parentElement on SVGElement\n    element = element.parentNode;\n    if (element && element.nodeType !== Node.ELEMENT_NODE) {\n      element = null;\n    }\n  }\n\n  return list;\n};\n\n// Element.prototype.matches may be available at a different name\n// https://developer.mozilla.org/en/docs/Web/API/Element/matches\n\nconst names = ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector'];\nlet name = null;\n\nfunction findMethodName(element) {\n  names.some(function(_name) {\n    if (!element[_name]) {\n      return false;\n    }\n\n    name = _name;\n    return true;\n  });\n}\n\nfunction elementMatches(element, selector) {\n  if (!name) {\n    findMethodName(element);\n  }\n\n  return element[name](selector);\n}\n\n// this is a shared utility file for focus-relevant.js and tabbable.js\n// separate testing of this file's functions is not necessary,\n// as they're implicitly tested by way of the consumers\n\nfunction isUserModifyWritable(style) {\n  // https://www.w3.org/TR/1999/WD-css3-userint-19990916#user-modify\n  // https://github.com/medialize/ally.js/issues/17\n  const userModify = style.webkitUserModify || '';\n  return Boolean(userModify && userModify.indexOf('write') !== -1);\n}\n\nfunction hasCssOverflowScroll(style) {\n  return [\n    style.getPropertyValue('overflow'),\n    style.getPropertyValue('overflow-x'),\n    style.getPropertyValue('overflow-y'),\n  ].some(overflow => overflow === 'auto' || overflow === 'scroll');\n}\n\nfunction hasCssDisplayFlex(style) {\n  return style.display.indexOf('flex') > -1;\n}\n\nfunction isScrollableContainer(element, nodeName, parentNodeName, parentStyle) {\n  if (nodeName !== 'div' && nodeName !== 'span') {\n    // Internet Explorer advances scrollable containers and bodies to focusable\n    // only if the scrollable container is <div> or <span> - this does *not*\n    // happen for <section>, <article>, …\n    return false;\n  }\n\n  if (parentNodeName && parentNodeName !== 'div' && parentNodeName !== 'span' && !hasCssOverflowScroll(parentStyle)) {\n    return false;\n  }\n\n  return element.offsetHeight < element.scrollHeight || element.offsetWidth < element.scrollWidth;\n}\n\n// determine if an element supports.can be focused by script regardless\n// of the element actually being focusable at the time of execution\n// i.e. <input disabled> is conisdered focus-relevant, but not focusable\n\nlet supports$5;\n\nfunction isFocusRelevantRules({\n  context,\n  except = {\n    flexbox: false,\n    scrollable: false,\n    shadow: false,\n  },\n} = {}) {\n  if (!supports$5) {\n    supports$5 = _supports();\n  }\n\n  const element = contextToElement({\n    label: 'is/focus-relevant',\n    resolveDocument: true,\n    context,\n  });\n\n  if (!except.shadow && element.shadowRoot) {\n    // a ShadowDOM host receives focus when the focus moves to its content\n    return true;\n  }\n\n  const nodeName = element.nodeName.toLowerCase();\n\n  if (nodeName === 'input' && element.type === 'hidden') {\n    // input[type=\"hidden\"] supports.cannot be focused\n    return false;\n  }\n\n  if (nodeName === 'input' || nodeName === 'select' || nodeName === 'button' || nodeName === 'textarea') {\n    return true;\n  }\n\n  if (nodeName === 'legend' && supports$5.focusRedirectLegend) {\n    // specifics filtered in is/focusable\n    return true;\n  }\n\n  if (nodeName === 'label') {\n    // specifics filtered in is/focusable\n    return true;\n  }\n\n  if (nodeName === 'area') {\n    // specifics filtered in is/focusable\n    return true;\n  }\n\n  if (nodeName === 'a' && element.hasAttribute('href')) {\n    return true;\n  }\n\n  if (nodeName === 'object' && element.hasAttribute('usemap')) {\n    // object[usemap] is not focusable in any browser\n    return false;\n  }\n\n  if (nodeName === 'object') {\n    const svgType = element.getAttribute('type');\n    if (!supports$5.focusObjectSvg && svgType === 'image/svg+xml') {\n      // object[type=\"image/svg+xml\"] is not focusable in Internet Explorer\n      return false;\n    } else if (!supports$5.focusObjectSwf && svgType === 'application/x-shockwave-flash') {\n      // object[type=\"application/x-shockwave-flash\"] is not focusable in Internet Explorer 9\n      return false;\n    }\n  }\n\n  if (nodeName === 'iframe' || nodeName === 'object') {\n    // browsing context containers\n    return true;\n  }\n\n  if (nodeName === 'embed' || nodeName === 'keygen') {\n    // embed is considered focus-relevant but not focusable\n    // see https://github.com/medialize/ally.js/issues/82\n    return true;\n  }\n\n  if (element.hasAttribute('contenteditable')) {\n    // also see CSS property user-modify below\n    return true;\n  }\n\n  if (nodeName === 'audio' && (supports$5.focusAudioWithoutControls || element.hasAttribute('controls'))) {\n    return true;\n  }\n\n  if (nodeName === 'video' && (supports$5.focusVideoWithoutControls || element.hasAttribute('controls'))) {\n    return true;\n  }\n\n  if (supports$5.focusSummary && nodeName === 'summary') {\n    return true;\n  }\n\n  const validTabindex$$1 = validTabindex(element);\n\n  if (nodeName === 'img' && element.hasAttribute('usemap')) {\n    // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n    // it appears the tabindex is overruled so focus is still forwarded to the <map>\n    return validTabindex$$1 && supports$5.focusImgUsemapTabindex || supports$5.focusRedirectImgUsemap;\n  }\n\n  if (supports$5.focusTable && (nodeName === 'table' || nodeName === 'td')) {\n    // IE10-11 supports.can focus <table> and <td>\n    return true;\n  }\n\n  if (supports$5.focusFieldset && nodeName === 'fieldset') {\n    // IE10-11 supports.can focus <fieldset>\n    return true;\n  }\n\n  const isSvgElement = nodeName === 'svg';\n  const isSvgContent = element.ownerSVGElement;\n  const focusableAttribute = element.getAttribute('focusable');\n  const tabindex = tabindexValue(element);\n\n  if (nodeName === 'use' && tabindex !== null && !supports$5.focusSvgUseTabindex) {\n    // <use> cannot be made focusable by adding a tabindex attribute anywhere but Blink and WebKit\n    return false;\n  }\n\n  if (nodeName === 'foreignobject') {\n    // <use> can only be made focusable in Blink and WebKit\n    return tabindex !== null && supports$5.focusSvgForeignobjectTabindex;\n  }\n\n  if (elementMatches(element, 'svg a') && element.hasAttribute('xlink:href')) {\n    return true;\n  }\n\n  if ((isSvgElement || isSvgContent) && element.focus && !supports$5.focusSvgNegativeTabindexAttribute && tabindex < 0) {\n    // Firefox 51 and 52 treat any natively tabbable SVG element with\n    // tabindex=\"-1\" as tabbable and everything else as inert\n    // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n    return false;\n  }\n\n  if (isSvgElement) {\n    return validTabindex$$1 || supports$5.focusSvg || supports$5.focusSvgInIframe\n      // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n      || Boolean(supports$5.focusSvgFocusableAttribute && focusableAttribute && focusableAttribute === 'true');\n  }\n\n  if (isSvgContent) {\n    if (supports$5.focusSvgTabindexAttribute && validTabindex$$1) {\n      return true;\n    }\n\n    if (supports$5.focusSvgFocusableAttribute) {\n      // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n      return focusableAttribute === 'true';\n    }\n  }\n\n  // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n  if (validTabindex$$1) {\n    return true;\n  }\n\n  const style = window.getComputedStyle(element, null);\n  if (isUserModifyWritable(style)) {\n    return true;\n  }\n\n  if (supports$5.focusImgIsmap && nodeName === 'img' && element.hasAttribute('ismap')) {\n    // IE10-11 considers the <img> in <a href><img ismap> focusable\n    // https://github.com/medialize/ally.js/issues/20\n    const hasLinkParent = getParents({context: element}).some(\n      parent => parent.nodeName.toLowerCase() === 'a' && parent.hasAttribute('href')\n    );\n\n    if (hasLinkParent) {\n      return true;\n    }\n  }\n\n  // https://github.com/medialize/ally.js/issues/21\n  if (!except.scrollable && supports$5.focusScrollContainer) {\n    if (supports$5.focusScrollContainerWithoutOverflow) {\n      // Internet Explorer does will consider the scrollable area focusable\n      // if the element is a <div> or a <span> and it is in fact scrollable,\n      // regardless of the CSS overflow property\n      if (isScrollableContainer(element, nodeName)) {\n        return true;\n      }\n    } else if (hasCssOverflowScroll(style)) {\n      // Firefox requires proper overflow setting, IE does not necessarily\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/overflow\n      return true;\n    }\n  }\n\n  if (!except.flexbox && supports$5.focusFlexboxContainer && hasCssDisplayFlex(style)) {\n    // elements with display:flex are focusable in IE10-11\n    return true;\n  }\n\n  const parent = element.parentElement;\n  if (!except.scrollable && parent) {\n    const parentNodeName = parent.nodeName.toLowerCase();\n    const parentStyle = window.getComputedStyle(parent, null);\n    if (supports$5.focusScrollBody && isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n      // scrollable bodies are focusable Internet Explorer\n      // https://github.com/medialize/ally.js/issues/21\n      return true;\n    }\n\n    // Children of focusable elements with display:flex are focusable in IE10-11\n    if (supports$5.focusChildrenOfFocusableFlexbox) {\n      if (hasCssDisplayFlex(parentStyle)) {\n        return true;\n      }\n    }\n  }\n\n  // NOTE: elements marked as inert are not focusable,\n  // but that property is not exposed to the DOM\n  // https://www.w3.org/TR/html5/editing.html#inert\n\n  return false;\n}\n\n// bind exceptions to an iterator callback\nisFocusRelevantRules.except = function(except = {}) {\n  const isFocusRelevant = function(context) {\n    return isFocusRelevantRules({\n      context,\n      except,\n    });\n  };\n\n  isFocusRelevant.rules = isFocusRelevantRules;\n  return isFocusRelevant;\n};\n\n// provide isFocusRelevant(context) as default iterator callback\nconst isFocusRelevant = isFocusRelevantRules.except({});\n\nfunction findIndex(array, callback) {\n  // attempt to use native or polyfilled Array#findIndex first\n  if (array.findIndex) {\n    return array.findIndex(callback);\n  }\n\n  const length = array.length;\n\n  // shortcut if the array is empty\n  if (length === 0) {\n    return -1;\n  }\n\n  // otherwise loop over array\n  for (let i = 0; i < length; i++) {\n    if (callback(array[i], i, array)) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\nvar getContentDocument = function(node) {\n  try {\n    // works on <object> and <iframe>\n    return node.contentDocument\n      // works on <object> and <iframe>\n      || node.contentWindow && node.contentWindow.document\n      // works on <object> and <iframe> that contain SVG\n      || node.getSVGDocument && node.getSVGDocument()\n      || null;\n  } catch (e) {\n    // SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement'\n    // also IE may throw member not found exception e.g. on <object type=\"image/png\">\n    return null;\n  }\n};\n\n// convert a CSS selector so that it also pierces ShadowDOM\n// takes \".a, #b\" and turns it into \".a, #b, html >>> .a, html >>> #b\"\n\nlet shadowPrefix;\n\nvar selectInShadows = function(selector) {\n  if (typeof shadowPrefix !== 'string') {\n    const operator = cssShadowPiercingDeepCombinator();\n    if (operator) {\n      shadowPrefix = ', html ' + operator + ' ';\n    }\n  }\n\n  if (!shadowPrefix) {\n    return selector;\n  }\n\n  return selector + shadowPrefix + selector.replace(/\\s*,\\s*/g, ',').split(',').join(shadowPrefix);\n};\n\nlet selector;\n\nfunction findDocumentHostElement(_window) {\n  if (!selector) {\n    selector = selectInShadows('object, iframe');\n  }\n\n  if (_window._frameElement !== undefined) {\n    return _window._frameElement;\n  }\n\n  _window._frameElement = null;\n\n  const potentialHosts = _window.parent.document.querySelectorAll(selector);\n  [].some.call(potentialHosts, function(element) {\n    const _document = getContentDocument(element);\n    if (_document !== _window.document) {\n      return false;\n    }\n\n    _window._frameElement = element;\n    return true;\n  });\n\n  return _window._frameElement;\n}\n\nfunction getFrameElement(element) {\n  const _window = getWindow(element);\n  if (!_window.parent || _window.parent === _window) {\n    // if there is no parent browsing context,\n    // we're not going to get a frameElement either way\n    return null;\n  }\n\n  try {\n    // see https://developer.mozilla.org/en-US/docs/Web/API/Window/frameElement\n    // does not work within <embed> anywhere, and not within in <object> in IE\n    return _window.frameElement || findDocumentHostElement(_window);\n  } catch (e) {\n    return null;\n  }\n}\n\n// determine if an element is rendered\n// NOTE: that does not mean an element is visible in the viewport, see util/visible-area\n\n// https://www.w3.org/TR/html5/rendering.html#being-rendered\n// <area> is not rendered, but we *consider* it visible to simplfiy this function's usage\nconst notRenderedElementsPattern = /^(area)$/;\n\nfunction computedStyle(element, property) {\n  return window.getComputedStyle(element, null)\n    .getPropertyValue(property);\n}\n\nfunction notDisplayed(_path) {\n  return _path.some(function(element) {\n    // display:none is not visible (optimized away at layout)\n    return computedStyle(element, 'display') === 'none';\n  });\n}\n\nfunction notVisible(_path) {\n  // https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L109-L114\n  // NOTE: a nested element can reverse visibility:hidden|collapse by explicitly setting visibility:visible\n  // NOTE: visibility can be [\"\", \"visible\", \"hidden\", \"collapse\"]\n  const hidden = findIndex(_path, function(element) {\n    const visibility = computedStyle(element, 'visibility');\n    return visibility === 'hidden' || visibility === 'collapse';\n  });\n\n  if (hidden === -1) {\n    // there is no hidden element\n    return false;\n  }\n\n  const visible = findIndex(_path, function(element) {\n    return computedStyle(element, 'visibility') === 'visible';\n  });\n\n  if (visible === -1) {\n    // there is no visible element (but a hidden element)\n    return true;\n  }\n\n  if (hidden < visible) {\n    // there is a hidden element and it's closer than the first visible element\n    return true;\n  }\n\n  // there may be a hidden element, but the closest element is visible\n  return false;\n}\n\nfunction collapsedParent(_path) {\n  let offset = 1;\n  if (_path[0].nodeName.toLowerCase() === 'summary') {\n    offset = 2;\n  }\n\n  return _path.slice(offset).some(function(element) {\n    // \"content children\" of a closed details element are not visible\n    return element.nodeName.toLowerCase() === 'details' && element.open === false;\n  });\n}\n\nfunction isVisibleRules({\n  context,\n  except = {\n    notRendered: false,\n    cssDisplay: false,\n    cssVisibility: false,\n    detailsElement: false,\n    browsingContext: false,\n  },\n} = {}) {\n  const element = contextToElement({\n    label: 'is/visible',\n    resolveDocument: true,\n    context,\n  });\n\n  const nodeName = element.nodeName.toLowerCase();\n  if (!except.notRendered && notRenderedElementsPattern.test(nodeName)) {\n    return true;\n  }\n\n  const _path = getParents({context: element});\n\n  // in Internet Explorer <audio> has a default display: none, where others have display: inline\n  // but IE allows focusing <audio style=\"display:none\">, but not <div display:none><audio>\n  // this is irrelevant to other browsers, as the controls attribute is required to make <audio> focusable\n  const isAudioWithoutControls = nodeName === 'audio' && !element.hasAttribute('controls');\n  if (!except.cssDisplay && notDisplayed(isAudioWithoutControls ? _path.slice(1) : _path)) {\n    return false;\n  }\n\n  if (!except.cssVisibility && notVisible(_path)) {\n    return false;\n  }\n\n  if (!except.detailsElement && collapsedParent(_path)) {\n    return false;\n  }\n\n  if (!except.browsingContext) {\n    // elements within a browsing context are affected by the\n    // browsing context host element's visibility and tabindex\n    const frameElement = getFrameElement(element);\n    const _isVisible = isVisibleRules.except(except);\n    if (frameElement && !_isVisible(frameElement)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n// bind exceptions to an iterator callback\nisVisibleRules.except = function(except = {}) {\n  const isVisible = function(context) {\n    return isVisibleRules({\n      context,\n      except,\n    });\n  };\n\n  isVisible.rules = isVisibleRules;\n  return isVisible;\n};\n\n// provide isVisible(context) as default iterator callback\nconst isVisible = isVisibleRules.except({});\n\nfunction getMapByName(name, _document) {\n  // apparently getElementsByName() also considers id attribute in IE & opera\n  // https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByName\n  const map = _document.querySelector('map[name=\"' + cssEscape(name) + '\"]');\n  return map || null;\n}\n\nfunction getMapOfImage(element) {\n  const usemap = element.getAttribute('usemap');\n  if (!usemap) {\n    return null;\n  }\n\n  const _document = getDocument(element);\n  return getMapByName(usemap.slice(1), _document);\n}\n\nfunction getImageOfArea(element) {\n  const map = element.parentElement;\n\n  if (!map.name || map.nodeName.toLowerCase() !== 'map') {\n    return null;\n  }\n\n  // NOTE: image maps can also be applied to <object> with image content,\n  // but no browser supports this at the moment\n\n  // HTML5 specifies HTMLMapElement.images to be an HTMLCollection of all\n  // <img> and <object> referencing the <map> element, but no browser implements this\n  //   https://www.w3.org/TR/html5/embedded-content-0.html#the-map-element\n  //   https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement\n  // the image must be valid and loaded for the map to take effect\n  const _document = getDocument(element);\n  return _document.querySelector('img[usemap=\"#' + cssEscape(map.name) + '\"]') || null;\n}\n\n// determine if an <area> element is being properly used by and <img> via a <map>\n\nlet supports$6;\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\n// https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L88-L107\nvar validArea = function(context) {\n  if (!supports$6) {\n    supports$6 = _supports();\n  }\n\n  const element = contextToElement({\n    label: 'is/valid-area',\n    context,\n  });\n\n  const nodeName = element.nodeName.toLowerCase();\n  if (nodeName !== 'area') {\n    return false;\n  }\n\n  const hasTabindex = element.hasAttribute('tabindex');\n  if (!supports$6.focusAreaTabindex && hasTabindex) {\n    // Blink and WebKit do not consider <area tabindex=\"-1\" href=\"#void\"> focusable\n    return false;\n  }\n\n  const img = getImageOfArea(element);\n  if (!img || !isVisible(img)) {\n    return false;\n  }\n\n  // Firefox only allows fully loaded images to reference image maps\n  // https://stereochro.me/ideas/detecting-broken-images-js\n  if (!supports$6.focusBrokenImageMap && (!img.complete || !img.naturalHeight || img.offsetWidth <= 0 || img.offsetHeight <= 0)) {\n    return false;\n  }\n\n  // Firefox supports.can focus area elements even if they don't have an href attribute\n  if (!supports$6.focusAreaWithoutHref && !element.href) {\n    // Internet explorer supports.can focus area elements without href if either\n    // the area element or the image element has a tabindex attribute\n    return supports$6.focusAreaTabindex && hasTabindex || supports$6.focusAreaImgTabindex && img.hasAttribute('tabindex');\n  }\n\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-usemap\n  const childOfInteractive = getParents({context: img}).slice(1).some(function(_element) {\n    const name = _element.nodeName.toLowerCase();\n    return name === 'button' || name === 'a';\n  });\n\n  if (childOfInteractive) {\n    return false;\n  }\n\n  return true;\n};\n\n// Determine if an element is disabled (i.e. not editable)\n\nlet supports$7;\n\nfunction isDisabledFieldset(element) {\n  const nodeName = element.nodeName.toLowerCase();\n  return nodeName === 'fieldset' && element.disabled;\n}\n\nfunction isDisabledForm(element) {\n  const nodeName = element.nodeName.toLowerCase();\n  return nodeName === 'form' && element.disabled;\n}\n\nvar disabled = function(context) {\n  if (!supports$7) {\n    supports$7 = _supports();\n  }\n\n  const element = contextToElement({\n    label: 'is/disabled',\n    context,\n  });\n\n  if (element.hasAttribute('data-ally-disabled')) {\n    // treat ally's element/disabled like the DOM native element.disabled\n    return true;\n  }\n\n  if (!isNativeDisabledSupported(element)) {\n    // non-form elements do not support the disabled attribute\n    return false;\n  }\n\n  if (element.disabled) {\n    // the element itself is disabled\n    return true;\n  }\n\n  const parents = getParents({context: element});\n  if (parents.some(isDisabledFieldset)) {\n    // a parental <fieldset> is disabld and inherits the state onto this element\n    return true;\n  }\n\n  if (!supports$7.focusFormDisabled && parents.some(isDisabledForm)) {\n    // a parental <form> is disabld and inherits the state onto this element\n    return true;\n  }\n\n  return false;\n};\n\nfunction isOnlyTabbableRules({\n  context,\n  except = {\n    onlyFocusableBrowsingContext: false,\n    visible: false,\n  },\n} = {}) {\n  const element = contextToElement({\n    label: 'is/only-tabbable',\n    resolveDocument: true,\n    context,\n  });\n\n  if (!except.visible && !isVisible(element)) {\n    return false;\n  }\n\n  if (!except.onlyFocusableBrowsingContext && (platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE)) {\n    const frameElement = getFrameElement(element);\n    if (frameElement) {\n      if (tabindexValue(frameElement) < 0) {\n        // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n        // tabbable demotion onto elements of their browsing contexts\n        return false;\n      }\n    }\n  }\n\n  const nodeName = element.nodeName.toLowerCase();\n  const tabindex = tabindexValue(element);\n\n  if (nodeName === 'label' && platform.is.GECKO) {\n    // Firefox cannot focus, but tab to: label[tabindex=0]\n    return tabindex !== null && tabindex >= 0;\n  }\n\n  // SVG Elements were keyboard focusable but not script focusable before Firefox 51.\n  // Firefox 51 added the focus management DOM API (.focus and .blur) to SVGElement,\n  // see https://bugzilla.mozilla.org/show_bug.cgi?id=778654\n  if (platform.is.GECKO && element.ownerSVGElement && !element.focus) {\n    if (nodeName === 'a' && element.hasAttribute('xlink:href')) {\n      // any focusable child of <svg> cannot be focused, but tabbed to\n      if (platform.is.GECKO) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\n// bind exceptions to an iterator callback\nisOnlyTabbableRules.except = function(except = {}) {\n  const isOnlyTabbable = function(context) {\n    return isOnlyTabbableRules({\n      context,\n      except,\n    });\n  };\n\n  isOnlyTabbable.rules = isOnlyTabbableRules;\n  return isOnlyTabbable;\n};\n\n// provide isOnlyTabbable(context) as default iterator callback\nconst isOnlyTabbable = isOnlyTabbableRules.except({});\n\n// determine if an element can be focused\n\n// https://www.w3.org/TR/html5/editing.html#focus-management\n\n// NOTE: The following known issues exist:\n//   Gecko: `svg a[xlink|href]` is not identified as focusable (because SVGElement.prototype.focus is missing)\n//   Blink, WebKit: SVGElements that have been made focusable by adding a focus event listener are not identified as focusable\n\nlet supports$4;\n\nfunction isOnlyFocusRelevant(element) {\n  const nodeName = element.nodeName.toLowerCase();\n  if (nodeName === 'embed' || nodeName === 'keygen') {\n    // embed is considered focus-relevant but not focusable\n    // see https://github.com/medialize/ally.js/issues/82\n    return true;\n  }\n\n  const _tabindex = tabindexValue(element);\n  if (element.shadowRoot && _tabindex === null) {\n    // ShadowDOM host elements *may* receive focus\n    // even though they are not considered focuable\n    return true;\n  }\n\n  if (nodeName === 'label') {\n    // <label tabindex=\"0\"> is only tabbable in Firefox, not script-focusable\n    // there's no way to make an element focusable other than by adding a tabindex,\n    // and focus behavior of the label element seems hard-wired to ignore tabindex\n    // in some browsers (like Gecko, Blink and WebKit)\n    return !supports$4.focusLabelTabindex || _tabindex === null;\n  }\n\n  if (nodeName === 'legend') {\n    return _tabindex === null;\n  }\n\n  if (supports$4.focusSvgFocusableAttribute && (element.ownerSVGElement || nodeName === 'svg')) {\n    // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n    const focusableAttribute = element.getAttribute('focusable');\n    return focusableAttribute && focusableAttribute === 'false';\n  }\n\n  if (nodeName === 'img' && element.hasAttribute('usemap')) {\n    // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n    // it appears the tabindex is overruled so focus is still forwarded to the <map>\n    return _tabindex === null || !supports$4.focusImgUsemapTabindex;\n  }\n\n  if (nodeName === 'area') {\n    // all <area>s are considered relevant,\n    // but only the valid <area>s are focusable\n    return !validArea(element);\n  }\n\n  return false;\n}\n\nfunction isFocusableRules({\n  context,\n  except = {\n    disabled: false,\n    visible: false,\n    onlyTabbable: false,\n  },\n} = {}) {\n  if (!supports$4) {\n    supports$4 = _supports();\n  }\n\n  const _isOnlyTabbable = isOnlyTabbable.rules.except({\n    onlyFocusableBrowsingContext: true,\n    visible: except.visible,\n  });\n\n  const element = contextToElement({\n    label: 'is/focusable',\n    resolveDocument: true,\n    context,\n  });\n\n  const focusRelevant = isFocusRelevant.rules({\n    context: element,\n    except,\n  });\n\n  if (!focusRelevant || isOnlyFocusRelevant(element)) {\n    return false;\n  }\n\n  if (!except.disabled && disabled(element)) {\n    return false;\n  }\n\n  if (!except.onlyTabbable && _isOnlyTabbable(element)) {\n    // some elements may be keyboard focusable, but not script focusable\n    return false;\n  }\n\n  // elements that are not rendered, cannot be focused\n  if (!except.visible) {\n    const visibilityOptions = {\n      context: element,\n      except: {},\n    };\n\n    if (supports$4.focusInHiddenIframe) {\n      // WebKit and Blink can focus content in hidden <iframe> and <object>\n      visibilityOptions.except.browsingContext = true;\n    }\n\n    if (supports$4.focusObjectSvgHidden) {\n      // Blink allows focusing the object element, even if it has visibility: hidden;\n      // @browser-issue Blink https://code.google.com/p/chromium/issues/detail?id=586191\n      const nodeName = element.nodeName.toLowerCase();\n      if (nodeName === 'object') {\n        visibilityOptions.except.cssVisibility = true;\n      }\n    }\n\n    if (!isVisible.rules(visibilityOptions)) {\n      return false;\n    }\n  }\n\n  const frameElement = getFrameElement(element);\n  if (frameElement) {\n    const _nodeName = frameElement.nodeName.toLowerCase();\n    if (_nodeName === 'object' && !supports$4.focusInZeroDimensionObject) {\n      if (!frameElement.offsetWidth || !frameElement.offsetHeight) {\n        // WebKit can not focus content in <object> if it doesn't have dimensions\n        return false;\n      }\n    }\n  }\n\n  const nodeName = element.nodeName.toLowerCase();\n  if (nodeName === 'svg' && supports$4.focusSvgInIframe && !frameElement && element.getAttribute('tabindex') === null) {\n    return false;\n  }\n\n  return true;\n}\n\n// bind exceptions to an iterator callback\nisFocusableRules.except = function(except = {}) {\n  const isFocusable = function(context) {\n    return isFocusableRules({\n      context,\n      except,\n    });\n  };\n\n  isFocusable.rules = isFocusableRules;\n  return isFocusable;\n};\n\n// provide isFocusRelevant(context) as default iterator callback\nconst isFocusable = isFocusableRules.except({});\n\n// https://www.w3.org/TR/html5/editing.html#focusable\n// https://www.w3.org/WAI/PF/aria-practices/#keyboard\n\nfunction createFilter(condition) {\n  // see https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter\n  const filter = function(node) {\n    if (node.shadowRoot) {\n      // return ShadowRoot elements regardless of them being focusable,\n      // so they can be walked recursively later\n      return NodeFilter.FILTER_ACCEPT;\n    }\n\n    if (condition(node)) {\n      // finds elements that could have been found by document.querySelectorAll()\n      return NodeFilter.FILTER_ACCEPT;\n    }\n\n    return NodeFilter.FILTER_SKIP;\n  };\n  // IE requires a function, Browsers require {acceptNode: function}\n  // see http://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm\n  filter.acceptNode = filter;\n  return filter;\n}\n\nconst PossiblyFocusableFilter = createFilter(isFocusRelevant);\n\nfunction queryFocusableStrict({\n  context,\n  includeContext,\n  includeOnlyTabbable,\n  strategy,\n} = {}) {\n  if (!context) {\n    context = document.documentElement;\n  }\n\n  const _isFocusable = isFocusable.rules.except({\n    onlyTabbable: includeOnlyTabbable,\n  });\n\n  const _document = getDocument(context);\n  // see https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker\n  const walker = _document.createTreeWalker(\n    // root element to start search in\n    context,\n    // element type filter\n    NodeFilter.SHOW_ELEMENT,\n    // custom NodeFilter filter\n    strategy === 'all' ? PossiblyFocusableFilter : createFilter(_isFocusable),\n    // deprecated, but IE requires it\n    false\n  );\n\n  let list = [];\n\n  while (walker.nextNode()) {\n    if (walker.currentNode.shadowRoot) {\n      if (_isFocusable(walker.currentNode)) {\n        list.push(walker.currentNode);\n      }\n\n      list = list.concat(queryFocusableStrict({\n        context: walker.currentNode.shadowRoot,\n        includeOnlyTabbable,\n        strategy,\n      }));\n    } else {\n      list.push(walker.currentNode);\n    }\n  }\n\n  // add context if requested and focusable\n  if (includeContext) {\n    if (strategy === 'all') {\n      if (isFocusRelevant(context)) {\n        list.unshift(context);\n      }\n    } else if (_isFocusable(context)) {\n      list.unshift(context);\n    }\n  }\n\n  return list;\n}\n\n// NOTE: this selector MUST *never* be used directly,\n// always go through query/focusable or is/focusable.js\n// there are too many edge cases that they could be covered in\n// a simple CSS selector…\n\nlet supports$8;\n\nlet selector$1;\n\nvar selector$2 = function() {\n  if (!supports$8) {\n    supports$8 = _supports();\n  }\n\n  if (typeof selector$1 === 'string') {\n    return selector$1;\n  }\n\n  // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n  selector$1 = ''\n    // IE11 supports.can focus <table> and <td>\n    + (supports$8.focusTable ? 'table, td,' : '')\n    // IE11 supports.can focus <fieldset>\n    + (supports$8.focusFieldset ? 'fieldset,' : '')\n    // Namespace problems of [xlink:href] explained in https://stackoverflow.com/a/23047888/515124\n    // svg a[*|href] does not match in IE9, but since we're filtering\n    // through is/focusable we can include all <a> from SVG\n    + 'svg a,'\n    // may behave as 'svg, svg *,' in chrome as *every* svg element with a focus event listener is focusable\n    // navigational elements\n    + 'a[href],'\n    // validity determined by is/valid-area.js\n    + 'area[href],'\n    // validity determined by is/disabled.js\n    + 'input, select, textarea, button,'\n    // browsing context containers\n    + 'iframe, object, embed,'\n    // interactive content\n    + 'keygen,'\n    + (supports$8.focusAudioWithoutControls ? 'audio,' : 'audio[controls],')\n    + (supports$8.focusVideoWithoutControls ? 'video,' : 'video[controls],')\n    + (supports$8.focusSummary ? 'summary,' : '')\n    // validity determined by is/valid-tabindex.js\n    + '[tabindex],'\n    // editing hosts\n    + '[contenteditable]';\n\n  // where ShadowDOM is supported, we also want the shadowed focusable elements (via \">>>\" or \"/deep/\")\n  selector$1 = selectInShadows(selector$1);\n\n  return selector$1;\n};\n\n// https://www.w3.org/TR/html5/editing.html#focusable\n// https://www.w3.org/WAI/PF/aria-practices/#keyboard\n\nfunction queryFocusableQuick({\n  context,\n  includeContext,\n  includeOnlyTabbable,\n} = {}) {\n  const _selector = selector$2();\n  const elements = context.querySelectorAll(_selector);\n  // the selector potentially matches more than really is focusable\n\n  const _isFocusable = isFocusable.rules.except({\n    onlyTabbable: includeOnlyTabbable,\n  });\n\n  const result = [].filter.call(elements, _isFocusable);\n\n  // add context if requested and focusable\n  if (includeContext && _isFocusable(context)) {\n    result.unshift(context);\n  }\n\n  return result;\n}\n\n// https://www.w3.org/TR/html5/editing.html#focusable\n// https://www.w3.org/WAI/PF/aria-practices/#keyboard\n\nvar focusable = function({\n  context,\n  includeContext,\n  includeOnlyTabbable,\n  strategy = 'quick',\n} = {}) {\n  const element = contextToElement({\n    label: 'query/focusable',\n    resolveDocument: true,\n    defaultToDocument: true,\n    context,\n  });\n\n  const options = {\n    context: element,\n    includeContext,\n    includeOnlyTabbable,\n    strategy,\n  };\n\n  if (strategy === 'quick') {\n    return queryFocusableQuick(options);\n  } else if (strategy === 'strict' || strategy === 'all') {\n    return queryFocusableStrict(options);\n  }\n\n  throw new TypeError('query/focusable requires option.strategy to be one of [\"quick\", \"strict\", \"all\"]');\n};\n\n// determine if an element can be focused by keyboard (i.e. is part of the document's sequential focus navigation order)\n\nlet supports$9;\n\n// Internet Explorer 11 considers fieldset, table, td focusable, but not tabbable\n// Internet Explorer 11 considers body to have [tabindex=0], but does not allow tabbing to it\nconst focusableElementsPattern = /^(fieldset|table|td|body)$/;\n\nfunction isTabbableRules({\n  context,\n  except = {\n    flexbox: false,\n    scrollable: false,\n    shadow: false,\n    visible: false,\n    onlyTabbable: false,\n  },\n} = {}) {\n  if (!supports$9) {\n    supports$9 = _supports();\n  }\n\n  const element = contextToElement({\n    label: 'is/tabbable',\n    resolveDocument: true,\n    context,\n  });\n\n  if (platform.is.BLINK && platform.is.ANDROID && platform.majorVersion > 42) {\n    // External keyboard support worked fine in CHrome 42, but stopped working in Chrome 45.\n    // The on-screen keyboard does not provide a way to focus the next input element (like iOS does).\n    // That leaves us with no option to advance focus by keyboard, ergo nothing is tabbable (keyboard focusable).\n    return false;\n  }\n\n  const frameElement = getFrameElement(element);\n  if (frameElement) {\n    if (platform.is.WEBKIT && platform.is.IOS) {\n      // iOS only does not consider anything from another browsing context keyboard focusable\n      return false;\n    }\n\n    // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n    // tabbable demotion onto elements of their browsing contexts\n    if (tabindexValue(frameElement) < 0) {\n      return false;\n    }\n\n    if (!except.visible && (platform.is.BLINK || platform.is.WEBKIT) && !isVisible(frameElement)) {\n      // Blink and WebKit consider elements in hidden browsing contexts focusable, but not tabbable\n      return false;\n    }\n\n    // Webkit and Blink don't consider anything in <object> tabbable\n    // Blink fixed that fixed in Chrome 54, Opera 41\n    const frameNodeName = frameElement.nodeName.toLowerCase();\n    if (frameNodeName === 'object') {\n      const isFixedBlink = (platform.name === 'Chrome' && platform.majorVersion >= 54)\n        || (platform.name === 'Opera' && platform.majorVersion >= 41);\n\n      if (platform.is.WEBKIT || (platform.is.BLINK && !isFixedBlink)) {\n        return false;\n      }\n    }\n  }\n\n  const nodeName = element.nodeName.toLowerCase();\n  const _tabindex = tabindexValue(element);\n  const tabindex = _tabindex === null ? null : _tabindex >= 0;\n\n  if (platform.is.EDGE && platform.majorVersion >= 14 && frameElement && element.ownerSVGElement && _tabindex < 0) {\n    // Edge 14+ considers <a xlink:href=\"…\" tabindex=\"-1\"> keyboard focusable\n    // if the element is in a nested browsing context\n    return true;\n  }\n\n  const hasTabbableTabindexOrNone = tabindex !== false;\n  const hasTabbableTabindex = _tabindex !== null && _tabindex >= 0;\n\n  // NOTE: Firefox 31 considers [contenteditable] to have [tabindex=-1], but allows tabbing to it\n  // fixed in Firefox 40 the latest - https://bugzilla.mozilla.org/show_bug.cgi?id=1185657\n  if (element.hasAttribute('contenteditable')) {\n    // tabbing can still be disabled by explicitly providing [tabindex=\"-1\"]\n    return hasTabbableTabindexOrNone;\n  }\n\n  if (focusableElementsPattern.test(nodeName) && tabindex !== true) {\n    return false;\n  }\n\n  if (platform.is.WEBKIT && platform.is.IOS) {\n    // iOS only considers a hand full of elements tabbable (keyboard focusable)\n    // this holds true even with external keyboards\n    let potentiallyTabbable = (nodeName === 'input' && element.type === 'text' || element.type === 'password')\n      || nodeName === 'select'\n      || nodeName === 'textarea'\n      || element.hasAttribute('contenteditable');\n\n    if (!potentiallyTabbable) {\n      const style = window.getComputedStyle(element, null);\n      potentiallyTabbable = isUserModifyWritable(style);\n    }\n\n    if (!potentiallyTabbable) {\n      return false;\n    }\n  }\n\n  if (nodeName === 'use' && _tabindex !== null) {\n    if (platform.is.BLINK || platform.is.WEBKIT && platform.majorVersion === 9) {\n      // In Chrome and Safari 9 the <use> element is keyboard focusable even for tabindex=\"-1\"\n      return true;\n    }\n  }\n\n  if (elementMatches(element, 'svg a') && element.hasAttribute('xlink:href')) {\n    if (hasTabbableTabindexOrNone) {\n      // in Trident and Gecko SVGElement does not handle the tabIndex property properly\n      return true;\n    }\n\n    if (element.focus && !supports$9.focusSvgNegativeTabindexAttribute) {\n      // Firefox 51 and 52 treat any natively tabbable SVG element with\n      // tabindex=\"-1\" as tabbable and everything else as inert\n      // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n      return true;\n    }\n  }\n\n  if (nodeName === 'svg' && supports$9.focusSvgInIframe && hasTabbableTabindexOrNone) {\n    return true;\n  }\n\n  if (platform.is.TRIDENT || platform.is.EDGE) {\n    if (nodeName === 'svg') {\n      if (supports$9.focusSvg) {\n        // older Internet Explorers consider <svg> keyboard focusable\n        // unless they have focsable=\"false\", but then they wouldn't\n        // be focusable and thus not even reach this filter\n        return true;\n      }\n\n      // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n      return element.hasAttribute('focusable') || hasTabbableTabindex;\n    }\n\n    if (element.ownerSVGElement) {\n      if (supports$9.focusSvgTabindexAttribute && hasTabbableTabindex) {\n        return true;\n      }\n\n      // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n      return element.hasAttribute('focusable');\n    }\n  }\n  if (element.tabIndex === undefined) {\n    return Boolean(except.onlyTabbable);\n  }\n\n  if (nodeName === 'audio') {\n    if (!element.hasAttribute('controls')) {\n      // In Internet Explorer the <audio> element is focusable, but not tabbable, and tabIndex property is wrong\n      return false;\n    } else if (platform.is.BLINK) {\n      // In Chrome <audio controls tabindex=\"-1\"> remains keyboard focusable\n      return true;\n    }\n  }\n\n  if (nodeName === 'video') {\n    if (!element.hasAttribute('controls')) {\n      if (platform.is.TRIDENT || platform.is.EDGE) {\n        // In Internet Explorer and Edge the <video> element is focusable, but not tabbable, and tabIndex property is wrong\n        return false;\n      }\n    } else if (platform.is.BLINK || platform.is.GECKO) {\n      // In Chrome and Firefox <video controls tabindex=\"-1\"> remains keyboard focusable\n      return true;\n    }\n  }\n\n  if (nodeName === 'object') {\n    if (platform.is.BLINK || platform.is.WEBKIT) {\n      // In all Blink and WebKit based browsers <embed> and <object> are never keyboard focusable, even with tabindex=\"0\" set\n      return false;\n    }\n  }\n\n  if (nodeName === 'iframe') {\n    // In Internet Explorer all iframes are only focusable\n    // In WebKit, Blink and Gecko iframes may be tabbable depending on content.\n    // Since we can't reliably investigate iframe documents because of the\n    // SameOriginPolicy, we're declaring everything only focusable.\n    return false;\n  }\n\n  if (!except.scrollable && platform.is.GECKO) {\n    // Firefox considers scrollable containers keyboard focusable,\n    // even though their tabIndex property is -1\n    const style = window.getComputedStyle(element, null);\n    if (hasCssOverflowScroll(style)) {\n      return hasTabbableTabindexOrNone;\n    }\n  }\n\n  if (platform.is.TRIDENT || platform.is.EDGE) {\n    // IE and Edge degrade <area> to script focusable, if the image\n    // using the <map> has been given tabindex=\"-1\"\n    if (nodeName === 'area') {\n      const img = getImageOfArea(element);\n      if (img && tabindexValue(img) < 0) {\n        return false;\n      }\n    }\n\n    const style = window.getComputedStyle(element, null);\n    if (isUserModifyWritable(style)) {\n      // prevent being swallowed by the overzealous isScrollableContainer() below\n      return element.tabIndex >= 0;\n    }\n\n    if (!except.flexbox && hasCssDisplayFlex(style)) {\n      if (_tabindex !== null) {\n        return hasTabbableTabindex;\n      }\n\n      return isFocusRelevantWithoutFlexbox(element) && isTabbableWithoutFlexbox(element);\n    }\n\n    // IE considers scrollable containers script focusable only,\n    // even though their tabIndex property is 0\n    if (isScrollableContainer(element, nodeName)) {\n      return false;\n    }\n\n    const parent = element.parentElement;\n    if (parent) {\n      const parentNodeName = parent.nodeName.toLowerCase();\n      const parentStyle = window.getComputedStyle(parent, null);\n      // IE considers scrollable bodies script focusable only,\n      if (isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n        return false;\n      }\n\n      // Children of focusable elements with display:flex are focusable in IE10-11,\n      // even though their tabIndex property suggests otherwise\n      if (hasCssDisplayFlex(parentStyle)) {\n        // value of tabindex takes precedence\n        return hasTabbableTabindex;\n      }\n    }\n  }\n\n  // https://www.w3.org/WAI/PF/aria-practices/#focus_tabindex\n  return element.tabIndex >= 0;\n}\n\n// bind exceptions to an iterator callback\nisTabbableRules.except = function(except = {}) {\n  const isTabbable = function(context) {\n    return isTabbableRules({\n      context,\n      except,\n    });\n  };\n\n  isTabbable.rules = isTabbableRules;\n  return isTabbable;\n};\n\nconst isFocusRelevantWithoutFlexbox = isFocusRelevant.rules.except({flexbox: true});\nconst isTabbableWithoutFlexbox = isTabbableRules.except({flexbox: true});\n\n// provide isTabbable(context) as default iterator callback\nconst isTabbable = isTabbableRules.except({});\n\n// https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n// https://www.w3.org/WAI/PF/aria-practices/#keyboard\n\nvar queryTabbable = function({\n  context,\n  includeContext,\n  includeOnlyTabbable,\n  strategy,\n} = {}) {\n  const _isTabbable = isTabbable.rules.except({\n    onlyTabbable: includeOnlyTabbable,\n  });\n\n  return focusable({\n    context,\n    includeContext,\n    includeOnlyTabbable,\n    strategy,\n  }).filter(_isTabbable);\n};\n\n// sorts a list of elements according to their order in the DOM\n\nfunction compareDomPosition(a, b) {\n  return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n}\n\nvar sortDomOrder = function(elements) {\n  return elements.sort(compareDomPosition);\n};\n\n// sort a list of elements into another list of elements in DOM order\n\n/*\n  USAGE:\n    mergeDomOrder({\n      // DOM ordered array of elements to use as base of merge\n      list: [],\n      // unordered array of elements to merge into base list\n      elements: [],\n      // callback function to resolve an element\n      resolveElement: function(element) {\n        // return null to skip\n        // return element to replace insertion\n        // return [element1, element2, …] to replace insertion with multiple elements\n        return element;\n      },\n    })\n*/\n\nfunction getFirstSuccessorOffset(list, target) {\n  // find the first element that comes AFTER the target element\n  return findIndex(list, function(element) {\n    return target.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING;\n  });\n}\n\nfunction findInsertionOffsets(list, elements, resolveElement) {\n  // instead of mutating the elements list directly, remember position and map\n  // to inject later, when we can do this more efficiently\n  const insertions = [];\n  elements.forEach(function(element) {\n    let replace = true;\n    let offset = list.indexOf(element);\n\n    if (offset === -1) {\n      // element is not in target list\n      offset = getFirstSuccessorOffset(list, element);\n      replace = false;\n    }\n\n    if (offset === -1) {\n      // there is no successor in the tabsequence,\n      // meaning the image must be the last element\n      offset = list.length;\n    }\n\n    // allow the consumer to replace the injected element\n    const injections = nodeArray(resolveElement ? resolveElement(element) : element);\n    if (!injections.length) {\n      // we can't inject zero elements\n      return;\n    }\n\n    insertions.push({\n      offset,\n      replace,\n      elements: injections,\n    });\n  });\n\n  return insertions;\n}\n\nfunction insertElementsAtOffsets(list, insertions) {\n  // remember the number of elements we have already injected\n  // so we account for the caused index offset\n  let inserted = 0;\n  // make sure that we insert the elements in sequence,\n  // otherwise the offset compensation won't work\n  insertions.sort((a, b) => a.offset - b.offset);\n  insertions.forEach(function(insertion) {\n    // array.splice has an annoying function signature :(\n    const remove = insertion.replace ? 1 : 0;\n    const args = [insertion.offset + inserted, remove].concat(insertion.elements);\n    list.splice.apply(list, args);\n    inserted += insertion.elements.length - remove;\n  });\n}\n\nvar mergeInDomOrder = function({list, elements, resolveElement} = {}) {\n  // operate on a copy so we don't mutate the original array\n  const _list = list.slice(0);\n  // make sure the elements we're injecting are provided in DOM order\n  const _elements = nodeArray(elements).slice(0);\n  sortDomOrder(_elements);\n  // find the offsets within the target array (list) at which to inject\n  // each individual element (from elements)\n  const insertions = findInsertionOffsets(_list, _elements, resolveElement);\n  // actually inject the elements into the target array at the identified positions\n  insertElementsAtOffsets(_list, insertions);\n  return _list;\n};\n\nlet supports$3;\n\nfunction formControlElement(element) {\n  const nodeName = element.nodeName.toLowerCase();\n  return nodeName === 'input'\n    || nodeName === 'textarea'\n    || nodeName === 'select'\n    || nodeName === 'button';\n}\n\nfunction resolveLabelElement(element, _document) {\n  const forId = element.getAttribute('for');\n  if (forId) {\n    // <label for=\"…\"> - referenced form control\n    return _document.getElementById(forId);\n  }\n\n  // <label><input - nested form control\n  return element.querySelector('input, select, textarea');\n}\n\nfunction resolveLegendWithinFieldset(element) {\n  // Chrome: first focusable input/select/textarea/button within <fieldset>\n  const fieldset = element.parentNode;\n  const focusable$$1 = focusable({\n    context: fieldset,\n    strategy: 'strict',\n  });\n\n  return focusable$$1.filter(formControlElement)[0] || null;\n}\n\nfunction resolveLegendWithinDocument(element, _document) {\n  // Firefox: *next* tabbable (in DOM order)\n  const tabbable = queryTabbable({\n    // Firefox apparently needs to query from the body element,\n    // not the document, looking inside a dynamically written iframe\n    context: _document.body,\n    strategy: 'strict',\n  });\n\n  if (!tabbable.length) {\n    return null;\n  }\n\n  // sort <legend> into the list of tabbable elements\n  // so that we can identify the next element\n  const merged = mergeInDomOrder({\n    list: tabbable,\n    elements: [element],\n  });\n\n  const offset = merged.indexOf(element);\n  if (offset === merged.length - 1) {\n    return null;\n  }\n\n  return merged[offset + 1];\n}\n\nfunction resolveLegendElement(element, _document) {\n  // <legend> - first <input> in <fieldset>\n  if (!supports$3.focusRedirectLegend) {\n    return null;\n  }\n\n  // legend must be the first child of a <fieldset>\n  const fieldset = element.parentNode;\n  if (fieldset.nodeName.toLowerCase() !== 'fieldset') {\n    return null;\n  }\n\n  if (supports$3.focusRedirectLegend === 'tabbable') {\n    // Firefox goes for *next* tabbable (in DOM order)\n    return resolveLegendWithinDocument(element, _document);\n  }\n\n  // Chrome goes for first focusable input/select/textarea/button within <fieldset>\n  return resolveLegendWithinFieldset(element, _document);\n}\n\nfunction resolveImgElement(element) {\n  if (!supports$3.focusRedirectImgUsemap) {\n    return null;\n  }\n\n  // IE9-11: <img usemap=\"#…\" src=\"…\"> - first <area>\n  const map = getMapOfImage(element);\n  return map && map.querySelector('area') || null;\n}\n\nvar focusRedirectTarget = function({context, skipFocusable} = {}) {\n  if (!supports$3) {\n    supports$3 = _supports();\n  }\n\n  const element = contextToElement({\n    label: 'get/focus-redirect-target',\n    context,\n  });\n\n  if (!skipFocusable && isFocusable(element)) {\n    return null;\n  }\n\n  const nodeName = element.nodeName.toLowerCase();\n  const _document = getDocument(element);\n\n  if (nodeName === 'label') {\n    return resolveLabelElement(element, _document);\n  }\n\n  if (nodeName === 'legend') {\n    return resolveLegendElement(element, _document);\n  }\n\n  if (nodeName === 'img') {\n    return resolveImgElement(element, _document);\n  }\n\n  return null;\n};\n\n/*\n  Identify the first focusable element in the element's ancestry, including itself\n*/\n\nvar focusTarget = function({context, except} = {}) {\n  const element = contextToElement({\n    label: 'get/focus-target',\n    context,\n  });\n\n  let result = null;\n  const getTarget = function(_element) {\n    const focusable = isFocusable.rules({\n      context: _element,\n      except,\n    });\n\n    if (focusable) {\n      result = _element;\n      return true;\n    }\n\n    result = focusRedirectTarget({\n      context: _element,\n      skipFocusable: true,\n    });\n\n    return Boolean(result);\n  };\n\n  if (getTarget(element)) {\n    return result;\n  }\n\n  getParents({context: element}).slice(1).some(getTarget);\n  return result;\n};\n\nfunction collectScrollPositions(element) {\n  const parents = getParents({context: element});\n  const list = parents.slice(1).map(function(element) {\n    return {\n      element,\n      scrollTop: element.scrollTop,\n      scrollLeft: element.scrollLeft,\n    };\n  });\n\n  return function resetScrollPositions() {\n    list.forEach(function(entry) {\n      entry.element.scrollTop = entry.scrollTop;\n      entry.element.scrollLeft = entry.scrollLeft;\n    });\n  };\n}\n\n// wrapper for HTMLElement.prototype.focus\n\nfunction focus$1(element) {\n  if (element.focus) {\n    element.focus();\n    return isActiveElement(element) ? element : null;\n  }\n\n  const _window = getWindow(element);\n\n  try {\n    // The element itself does not have a focus method.\n    // This is true for SVG elements in Firefox and IE,\n    // as well as MathML elements in every browser.\n    // IE9 - 11 will let us abuse HTMLElement's focus method,\n    // Firefox and Edge will throw an error.\n    _window.HTMLElement.prototype.focus.call(element);\n    return isActiveElement(element) ? element : null;\n  } catch (e) {\n    const actionPerformed = focusSvgForeignObjectHack(element);\n    return actionPerformed && isActiveElement(element) ? element : null;\n  }\n}\n\nconst except = {\n  // exclude elements affected by the IE flexbox bug\n  flexbox: true,\n  // exclude overflowing elements that are not intentionally\n  // made focusable by adding a tabindex attribute\n  scrollable: true,\n  // include elements that don't have a focus() method\n  onlyTabbable: true,\n};\n\nvar focus$2 = function(context, {\n  defaultToAncestor,\n  undoScrolling,\n} = {}) {\n  const element = contextToElement({\n    label: 'element/focus',\n    context,\n  });\n\n  const targetIsFocusable = isFocusable.rules({\n    context: element,\n    except,\n  });\n\n  if (!defaultToAncestor && !targetIsFocusable) {\n    return null;\n  }\n\n  const target = focusTarget({\n    context: element,\n    except,\n  });\n\n  if (!target) {\n    return null;\n  }\n\n  if (isActiveElement(target)) {\n    return target;\n  }\n\n  let _undoScrolling;\n  if (undoScrolling) {\n    _undoScrolling = collectScrollPositions(target);\n  }\n\n  const result = focus$1(target);\n\n  _undoScrolling && _undoScrolling();\n\n  return result;\n};\n\n// exporting modules to be included the UMD bundle\n\nvar element = {\n  blur,\n  disabled: elementDisabled,\n  focus: focus$2,\n};\n\n// Polyfill requestAnimationFrame for oldIE\n// adapted from https://gist.github.com/paulirish/1579671\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n// original source was published under the MIT license\n// https://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\ntypeof window !== 'undefined' && (function() {\n  let lastTime = 0;\n  const vendors = ['ms', 'moz', 'webkit', 'o'];\n  let requestAnimationFrameName = '';\n  let cancelAnimationFrameName = '';\n\n  for (let x = 0, length = vendors.length; x < length; ++x) {\n    requestAnimationFrameName = window[vendors[x] + 'RequestAnimationFrame'];\n    cancelAnimationFrameName = window[vendors[x] + 'CancelAnimationFrame']\n      || window[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (typeof window.requestAnimationFrame !== 'function') {\n    window.requestAnimationFrame = window[requestAnimationFrameName] || function(callback) {\n      const currTime = new Date().getTime();\n      const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n      const id = window.setTimeout(function() {\n        callback(currTime + timeToCall);\n      }, timeToCall);\n\n      lastTime = currTime + timeToCall;\n      return id;\n    };\n  }\n\n  if (typeof window.cancelAnimationFrame !== 'function') {\n    window.cancelAnimationFrame = window[cancelAnimationFrameName] || function(id) {\n      clearTimeout(id);\n    };\n  }\n})();\n\n// Polyfill originally copied from https://developer.mozilla.org/en/docs/Web/API/CustomEvent#Polyfill\n// and rewritten to *not* pollute global space because of CustomEvent being an object Internet Explorer 11\n// https://msdn.microsoft.com/en-us/library/ff974338(v=vs.85).aspx\n\nlet _CustomEvent = typeof window !== 'undefined' && window.CustomEvent || function() {};\n\nif (typeof _CustomEvent !== 'function') {\n  _CustomEvent = function CustomEventPolyfill(event, params) {\n    const evt = document.createEvent('CustomEvent');\n\n    !params && (params = {\n      bubbles: false,\n      cancelable: false,\n      detail: undefined,\n    });\n\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return evt;\n  };\n\n  _CustomEvent.prototype = window.Event.prototype;\n}\n\nvar CustomEvent$1 = _CustomEvent;\n\n/*\n  The Singleton Decorator is intended to allow modules to initialize a (\"singleton\") component as if\n  it was the only one using it. Every module gets to initialize and destruct the component by itself.\n  Via simple reference counting the component keeps track of how many modules have initialized it,\n  so it destructs only when the last module is gone. This decorator hides the component's singleton\n  nature from the application in order to offer a homogenous API.\n\n  engage() can return an object (result) with methods to expose to the consumer,\n  upon initialization result.disengage is added and returned to the consumer.\n*/\n\nfunction destruct({force} = {}) {\n  if (force) {\n    this.instances = 0;\n  } else {\n    this.instances--;\n  }\n\n  if (!this.instances) {\n    this.disengage();\n    this._result = null;\n  }\n}\n\nfunction initialize() {\n  if (this.instances) {\n    this.instances++;\n    return this._result;\n  }\n\n  this.instances++;\n  this._result = this.engage() || {};\n  this._result.disengage = destruct.bind(this);\n\n  return this._result;\n}\n\nfunction noop$1() {}\n\nvar decorateService = function({engage, disengage} = {}) {\n  const data = {\n    engage: engage || noop$1,\n    disengage: disengage || noop$1,\n    instances: 0,\n    _result: null,\n  };\n\n  return initialize.bind(data);\n};\n\n/*\n  Debugging tool that observe changes to activeElement regardless of focus/blur events.\n  This utility does *not* work with ShadowDOM.\n\n  USAGE:\n    engage();\n    document.body.addEventListener('active-element', function(event) {\n      // event.detail.focus: element that received focus\n      // event.detail.blur: element that lost focus\n    }, false);\n\n  NOTE: You *can* use event-delegation on focus events by using the capture-phase:\n    document.body.addEventListener('focus', function(event) {\n      // event.target: element that received focus\n      // event.relatedTarget: element that lost focus\n    }, true);\n*/\n\nlet previousActiveElement;\nlet raf;\n\nfunction observeActiveElement() {\n  if (!document.activeElement) {\n    // IE10 does not redirect focus to <body> when the activeElement is removed\n    document.body.focus();\n  } else if (document.activeElement !== previousActiveElement) {\n    // https://developer.mozilla.org/en/docs/Web/API/CustomEvent\n    const activeElementEvent = new CustomEvent$1('active-element', {\n      bubbles: false,\n      cancelable: false,\n      detail: {\n        focus: document.activeElement,\n        blur: previousActiveElement,\n      },\n    });\n\n    document.dispatchEvent(activeElementEvent);\n    previousActiveElement = document.activeElement;\n  }\n\n  if (raf === false) {\n    return;\n  }\n\n  raf = requestAnimationFrame(observeActiveElement);\n}\n\nfunction engage() {\n  raf = true;\n  previousActiveElement = document.activeElement;\n  observeActiveElement();\n}\n\nfunction disengage() {\n  cancelAnimationFrame(raf);\n  raf = false;\n}\n\nvar activeElement = decorateService({ engage, disengage });\n\n// determine if an element is the child of a ShadowRoot\n\nvar shadowed = function(context) {\n  const element = contextToElement({\n    label: 'is/shadowed',\n    resolveDocument: true,\n    context,\n  });\n\n  return Boolean(getShadowHost({context: element}));\n};\n\nvar shadowHostParents = function({context} = {}) {\n  const list = [];\n  let element = contextToElement({\n    label: 'get/shadow-host-parents',\n    context,\n  });\n\n  while (element) {\n    element = getShadowHost({context: element});\n    if (!element) {\n      break;\n    }\n\n    list.push(element);\n  }\n\n  return list;\n};\n\n// [0] always is the actual active element (even within web-components)\n// [0+n] is the hierarchy of shadow-doms with [length -1] being the top most shadow-host\n\nfunction walkToShadowedElement() {\n  const list = [document.activeElement];\n\n  while (list[0] && list[0].shadowRoot) {\n    list.unshift(list[0].shadowRoot.activeElement);\n  }\n\n  return list;\n}\n\nfunction walkFromShadowedElement() {\n  const hosts = shadowHostParents({context: document.activeElement});\n  return [document.activeElement].concat(hosts);\n}\n\nvar getActiveElements = function() {\n  if (document.activeElement === null) {\n    // IE10 does not redirect focus to <body> when the activeElement is removed\n    document.body.focus();\n  }\n\n  // Firefox currently leaks the shadowed element\n  // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1117535\n  if (shadowed(document.activeElement)) {\n    return walkFromShadowedElement();\n  }\n\n  return walkToShadowedElement();\n};\n\n/*\n  Utility to observe focus changes within ShadowDOMs.\n\n  USAGE:\n    engage();\n    document.body.addEventListener('shadow-focus', function(event) {\n      // event.detail.elements: complete focus ancestry (array of nodes)\n      // event.detail.active: the actually focused element within the ShadowDOM\n      // event.detail.hosts: the shadow host ancestry of the active element\n    }, false);\n\n  Alternate implementation: https://github.com/cdata/focus-observer\n*/\n\nlet engage$1;\nlet disengage$1;\n\nif (typeof document === 'undefined' || !document.documentElement.createShadowRoot) {\n  // no need to initialize any of this if we don't have ShadowDOM available\n  engage$1 = disengage$1 = function() {};\n} else {\n  let blurTimer;\n  let blurElement;\n\n  const handleElementBlurEvent = function() {\n    stopHandleElementBlurEvent();\n    // abort any handlers that come from document blur handler\n    (window.clearImmediate || window.clearTimeout)(blurTimer);\n    blurTimer = (window.setImmediate || window.setTimeout)(function() {\n      handleFocusChange();\n    });\n  };\n\n  const observeElementBlurEvent = function(element) {\n    // call us when we're leaving the element\n    element.addEventListener('blur', handleElementBlurEvent, true);\n    blurElement = element;\n  };\n\n  const stopHandleElementBlurEvent = function() {\n    // once() - sometimes I miss jQuery's simplicity…\n    blurElement && blurElement.removeEventListener('blur', handleElementBlurEvent, true);\n    blurElement = null;\n  };\n\n  const handleFocusChange = function() {\n    const _active = getActiveElements();\n    if (_active.length === 1) {\n      stopHandleElementBlurEvent();\n      return;\n    }\n\n    // listen for blur so we know when to re-validate\n    observeElementBlurEvent(_active[0]);\n    const shadowFocusEvent = new CustomEvent('shadow-focus', {\n      bubbles: false,\n      cancelable: false,\n      detail: {\n        // complete focus ancestry\n        elements: _active,\n        // the actually focused element\n        active: _active[0],\n        // shadow host ancestry\n        hosts: _active.slice(1),\n      },\n    });\n\n    document.dispatchEvent(shadowFocusEvent);\n  };\n\n  const handleDocumentFocusEvent = function() {\n    (window.clearImmediate || window.clearTimeout)(blurTimer);\n    handleFocusChange();\n  };\n\n  engage$1 = function() {\n    document.addEventListener('focus', handleDocumentFocusEvent, true);\n  };\n\n  disengage$1 = function() {\n    (window.clearImmediate || window.clearTimeout)(blurTimer);\n    blurElement && blurElement.removeEventListener('blur', handleElementBlurEvent, true);\n    document.removeEventListener('focus', handleDocumentFocusEvent, true);\n  };\n}\n\nvar shadowFocus = decorateService({ engage: engage$1, disengage: disengage$1 });\n\n// exporting modules to be included the UMD bundle\n\nvar event = {\n  activeElement,\n  shadowFocus,\n};\n\n/*\n  The Context Decorator is intended to allow modules to easily map dis/engage methods to the general\n  dis/engage and context API format\n*/\n\nfunction destruct$1(/* {force: false} */) {\n  if (!this.context) {\n    return;\n  }\n\n  this.context.forEach(this.disengage);\n  this.context = null;\n  this.engage = null;\n  this.disengage = null;\n}\n\nfunction initialize$1({context} = {}) {\n  this.context = nodeArray(context || document);\n  this.context.forEach(this.engage);\n  return {\n    disengage: destruct$1.bind(this),\n  };\n}\n\nfunction noop$2() {}\n\nvar decorateContext = function({engage, disengage} = {}) {\n  const data = {\n    engage: engage || noop$2,\n    disengage: disengage || noop$2,\n    context: null,\n  };\n\n  return initialize$1.bind(data);\n};\n\n/*\n  Children of focusable elements with display:flex are focusable.\n  Because focus can be given to focusable (not tabbable) elements\n  by mouse, we have to counter this behavior, so the correct element\n  becomes the activeElement (i.e. receives focus).\n\n  Example:\n    <div tabindex=\"-1\" style=\"display:flex\">\n      <span>I would receive focus</span>\n    </div>\n\n  This (wrong) behavior was observed in Internet Explorer 10 and 11.\n  It is fixed in IE12 (Win10 IE Tec Preview)\n*/\n\nlet engage$2;\nlet disengage$2;\n// This fix is only relevant to IE10 (Trident/6) and IE11 (Trident/7)\nconst relevantToCurrentBrowser = platform.is.TRIDENT && (platform.is.IE10 || platform.is.IE11);\n\nif (!relevantToCurrentBrowser) {\n  engage$2 = function() {};\n} else {\n  const handleBeforeFocusEvent = function(event) {\n    // find the element that would receive focus\n    const target = focusTarget({\n      context: event.target,\n      except: {\n        flexbox: true,\n        scrollable: true,\n      },\n    });\n\n    if (!target || target === event.target) {\n      // there's nothing to focus, or we're focusing the element clicked on\n      return;\n    }\n\n    window.setImmediate(function() {\n      target.focus();\n    });\n\n    // hide all children, because hidden elements can't get focus\n    // remember previous element style (not necessarily computed style)\n    // to undo hiding later. Reset transitions as well, in case visibility\n    // is to be transitioned. This will effectively kill all transitions\n    // that are executed on mousedown / :active\n    const reverse = [].map.call(target.children, function(element) {\n      const visibility = element.style.visibility || '';\n      const transition = element.style.transition || '';\n      element.style.visibility = 'hidden';\n      element.style.transition = 'none';\n      return [element, visibility, transition];\n    });\n\n    // add cleanup (undo hide) to the RunLoop\n    window.setImmediate(function() {\n      reverse.forEach(function(item) {\n        item[0].style.visibility = item[1];\n        item[0].style.transition = item[2];\n      });\n    });\n  };\n\n  engage$2 = function(element) {\n    // WebDriver does not reliably dispatch PointerEvents so we'll go with\n    // mousedown, which shouldn't be a problem since we're targeting the\n    // focus handling which immediately follows mousedown.\n    element.addEventListener('mousedown', handleBeforeFocusEvent, true);\n  };\n\n  disengage$2 = function(element) {\n    element.removeEventListener('mousedown', handleBeforeFocusEvent, true);\n  };\n}\n\nvar pointerFocusChildren = decorateContext({ engage: engage$2, disengage: disengage$2 });\n\n/*\n  Clicking on form field does not necessarily assign it focus in Safari and Firefox on Mac OS X.\n  While not a browser bug, it may be considered undesired behavior.\n\n  https://bugs.webkit.org/show_bug.cgi?id=22261\n  https://bugs.webkit.org/show_bug.cgi?id=118043\n\n  Note: This behavior can be turned off in Firefox by changing the\n  option `accessibility.mouse_focuses_formcontrol` in about:config\n*/\n\nlet engage$3;\nlet disengage$3;\n// This fix is only relevant to Safari and Firefox on OSX\nconst relevantToCurrentBrowser$1 = platform.is.OSX && (platform.is.GECKO || platform.is.WEBKIT);\n\nif (!relevantToCurrentBrowser$1) {\n  engage$3 = function() {};\n} else {\n  const handleMouseDownEvent = function(event) {\n    if (event.defaultPrevented || !elementMatches(event.target, 'input, button, button *')) {\n      // abort if the mousedown event was cancelled,\n      // or we're not dealing with an affected form control\n      return;\n    }\n\n    const target = focusTarget({\n      context: event.target,\n    });\n\n    // we need to set focus AFTER the mousedown finished, otherwise WebKit will ignore the call\n    (window.setImmediate || window.setTimeout)(function() {\n      target.focus();\n    });\n  };\n\n  const handleMouseUpEvent = function(event) {\n    if (event.defaultPrevented || !elementMatches(event.target, 'label, label *')) {\n      // abort if the mouseup event was cancelled,\n      // or we're not dealing with a <label>\n      return;\n    }\n\n    const target = focusTarget({\n      context: event.target,\n    });\n\n    if (!target) {\n      return;\n    }\n\n    target.focus();\n  };\n\n  engage$3 = function(element) {\n    element.addEventListener('mousedown', handleMouseDownEvent, false);\n    // <label> elements redirect focus upon mouseup, not mousedown\n    element.addEventListener('mouseup', handleMouseUpEvent, false);\n  };\n\n  disengage$3 = function(element) {\n    element.removeEventListener('mousedown', handleMouseDownEvent, false);\n    element.removeEventListener('mouseup', handleMouseUpEvent, false);\n  };\n}\n\nvar pointerFocusInput = decorateContext({ engage: engage$3, disengage: disengage$3 });\n\n/*\n  Clicking on a link that has a focusable element in its ancestry [tabindex=\"-1\"],\n  can lead to that parental element gaining focus, instead of the link.\n\n  Example:\n    <div tabindex=\"-1\">\n      <a href=\"#foo\">click me</a>\n    </div>\n\n  This (wrong) behavior was observed in Chrome 38, iOS8, Safari 6.2, WebKit r175131\n  It is not a problem in Firefox 33, Internet Explorer 11, Chrome 39.\n*/\n\nlet engage$4;\nlet disengage$4;\n// This fix is only relevant to WebKit\nconst relevantToCurrentBrowser$2 = platform.is.WEBKIT;\n\nif (!relevantToCurrentBrowser$2) {\n  engage$4 = function() {};\n} else {\n  // add [tabindex=\"0\"] to the (focusable) element that is about to be clicked\n  // if it does not already have an explicit tabindex (attribute).\n  // By applying an explicit tabindex, WebKit will not go look for\n  // the first valid tabindex in the element's parents.\n  const handleBeforeFocusEvent = function(event) {\n    // find the element that would receive focus\n    const target = focusTarget({context: event.target});\n    if (!target || target.hasAttribute('tabindex') && validTabindex(target)) {\n      // there's nothing to focus, or the element already has tabindex, we're good\n      return;\n    }\n\n    // assign explicit tabindex, as implicit tabindex is the problem\n    target.setAttribute('tabindex', 0);\n\n    // add cleanup to the RunLoop\n    (window.setImmediate || window.setTimeout)(function() {\n      target.removeAttribute('tabindex');\n    }, 0);\n  };\n\n  engage$4 = function(element) {\n    element.addEventListener('mousedown', handleBeforeFocusEvent, true);\n    element.addEventListener('touchstart', handleBeforeFocusEvent, true);\n  };\n\n  disengage$4 = function(element) {\n    element.removeEventListener('mousedown', handleBeforeFocusEvent, true);\n    element.removeEventListener('touchstart', handleBeforeFocusEvent, true);\n  };\n}\n\nvar pointerFocusParent = decorateContext({ engage: engage$4, disengage: disengage$4 });\n\n// exporting modules to be included the UMD bundle\n\nvar fix = {\n  pointerFocusChildren,\n  pointerFocusInput,\n  pointerFocusParent,\n};\n\n/*\n  create ally.get.activeElement()\n    wrapping ally.get.activeElements()\n\n  fix ally.get.activeElements()\n    https://github.com/jquery/jquery-ui/blob/ffcfb85c9818954adda69e73cf9ba76ea07b554c/ui/safe-active-element.js\n*/\n\nvar activeElement$1 = function({ context } = {}) {\n  const _document = getDocument(context);\n  let activeElement;\n\n  try {\n    // IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n    // see https://github.com/jquery/jquery-ui/blob/ffcfb85c9818954adda69e73cf9ba76ea07b554c/ui/safe-active-element.js#L15-L21\n    activeElement = _document.activeElement;\n  } catch (e) {\n    // ignore\n  }\n\n  // IE11 may return null instead of an element\n  // see https://github.com/jquery/jquery-ui/blob/ffcfb85c9818954adda69e73cf9ba76ea07b554c/ui/safe-active-element.js#L23-L28\n  // https://github.com/jquery/jquery-ui/blob/ffcfb85c9818954adda69e73cf9ba76ea07b554c/ui/safe-active-element.js#L30-L35\n  if (!activeElement || !activeElement.nodeType) {\n    activeElement = _document.body || _document.documentElement;\n  }\n\n  return activeElement;\n};\n\n// Node.compareDocumentPosition is available since IE9\n// see https://developer.mozilla.org/en-US/docs/Web/API/Node.compareDocumentPosition\n\n// callback returns true when element is contained by parent or is the parent suited for use with Array.some()\n/*\n  USAGE:\n    var isChildOf = getParentComparator({parent: someNode});\n    listOfElements.some(isChildOf)\n*/\n\nfunction getParentComparator({parent, element, includeSelf} = {}) {\n  if (parent) {\n    return function isChildOf(node) {\n      return Boolean(\n        includeSelf && node === parent\n        || parent.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY\n      );\n    };\n  } else if (element) {\n    return function isParentOf(node) {\n      return Boolean(\n        includeSelf && element === node\n        || node.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_CONTAINED_BY\n      );\n    };\n  }\n\n  throw new TypeError('util/compare-position#getParentComparator required either options.parent or options.element');\n}\n\n// find all highest elements within context that do not contain any of the filter elements.\n// (basically the tree minus the parent paths of each filtered element reduced to the top most nodes)\n// originally inspired by Marcy Sutton's Material Dialog Component:\n// https://github.com/angular/material/blob/v0.11.1/src/components/dialog/dialog.js#L748-L783\n// to avoid this behavior: https://marcysutton.com/slides/mobile-a11y-seattlejs/#/36\n\nfunction queryInsignificantBranches({context, filter}) {\n  const containsFilteredElement = function(node) {\n    const containsNode = getParentComparator({parent: node});\n    return filter.some(containsNode);\n  };\n\n  // We'd use a Set() for this, if we could\n  const insiginificantBranches = [];\n\n  // see https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter\n  const CollectInsignificantBranchesFilter = function(node) {\n    if (filter.some(element => node === element)) {\n      // we've hit a filtered element and can ignore its children\n      return NodeFilter.FILTER_REJECT;\n    }\n\n    if (containsFilteredElement(node)) {\n      // we've hit a significant tree, so we'll have to keep investigating\n      return NodeFilter.FILTER_ACCEPT;\n    }\n\n    // we've found an insignificant tree\n    insiginificantBranches.push(node);\n    return NodeFilter.FILTER_REJECT;\n  };\n  // IE requires a function, Browsers require {acceptNode: function}\n  // see https://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm\n  CollectInsignificantBranchesFilter.acceptNode = CollectInsignificantBranchesFilter;\n\n  const _document = getDocument(context);\n  // see https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker\n  const walker = _document.createTreeWalker(\n    // root element to start search in\n    context,\n    // element type filter\n    NodeFilter.SHOW_ELEMENT,\n    // custom NodeFilter filter\n    CollectInsignificantBranchesFilter,\n    // deprecated, but IE requires it\n    false\n  );\n\n  while (walker.nextNode()) {\n    // collection things is happening through the filter method\n  }\n\n  return insiginificantBranches;\n}\n\nvar getInsignificantBranches = function({context, filter} = {}) {\n  context = contextToElement({\n    label: 'get/insignificant-branches',\n    defaultToDocument: true,\n    context,\n  });\n\n  filter = nodeArray(filter);\n  if (!filter.length) {\n    throw new TypeError('get/insignificant-branches requires valid options.filter');\n  }\n\n  return queryInsignificantBranches({\n    context,\n    filter,\n  });\n};\n\n// exporting modules to be included the UMD bundle\n\nvar get = {\n  activeElement: activeElement$1,\n  activeElements: getActiveElements,\n  focusRedirectTarget,\n  focusTarget,\n  insignificantBranches: getInsignificantBranches,\n  parents: getParents,\n  shadowHostParents,\n  shadowHost: getShadowHost,\n};\n\n// exporting modules to be included the UMD bundle\n\nvar is = {\n  activeElement: isActiveElement,\n  disabled,\n  focusRelevant: isFocusRelevant,\n  focusable: isFocusable,\n  onlyTabbable: isOnlyTabbable,\n  shadowed,\n  tabbable: isTabbable,\n  validArea,\n  validTabindex,\n  visible: isVisible,\n};\n\n// see https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter\nconst filter = function(node) {\n  if (node.shadowRoot) {\n    return NodeFilter.FILTER_ACCEPT;\n  }\n\n  return NodeFilter.FILTER_SKIP;\n};\n// IE requires a function, Browsers require {acceptNode: function}\n// see http://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm\nfilter.acceptNode = filter;\n\nfunction queryShadowHosts({ context } = {}) {\n  const element = contextToElement({\n    label: 'query/shadow-hosts',\n    resolveDocument: true,\n    defaultToDocument: true,\n    context,\n  });\n\n  const _document = getDocument(context);\n  // see https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker\n  const walker = _document.createTreeWalker(\n    // root element to start search in\n    element,\n    // element type filter\n    NodeFilter.SHOW_ELEMENT,\n    // custom NodeFilter filter\n    filter,\n    // deprecated, but IE requires it\n    false\n  );\n\n  let list = [];\n\n  if (element.shadowRoot) {\n    // TreeWalker does not run the filter on the context element\n    list.push(element);\n    list = list.concat(queryShadowHosts({\n      context: element.shadowRoot,\n    }));\n  }\n\n  while (walker.nextNode()) {\n    list.push(walker.currentNode);\n    list = list.concat(queryShadowHosts({\n      context: walker.currentNode.shadowRoot,\n    }));\n  }\n\n  return list;\n}\n\nconst shadowObserverConfig = {\n  childList: true,\n  subtree: true,\n};\n\nclass ShadowMutationObserver {\n  constructor({context, callback, config} = {}) {\n    this.config = config;\n\n    this.disengage = this.disengage.bind(this);\n\n    this.clientObserver = new MutationObserver(callback);\n    this.hostObserver = new MutationObserver(mutations => mutations.forEach(this.handleHostMutation, this));\n\n    this.observeContext(context);\n    this.observeShadowHosts(context);\n  }\n\n  disengage() {\n    this.clientObserver && this.clientObserver.disconnect();\n    this.clientObserver = null;\n    this.hostObserver && this.hostObserver.disconnect();\n    this.hostObserver = null;\n  }\n\n  observeShadowHosts(context) {\n    const hosts = queryShadowHosts({\n      context,\n    });\n\n    hosts.forEach(element => this.observeContext(element.shadowRoot));\n  }\n\n  observeContext(context) {\n    this.clientObserver.observe(context, this.config);\n    this.hostObserver.observe(context, shadowObserverConfig);\n  }\n\n  handleHostMutation(mutation) {\n    if (mutation.type !== 'childList') {\n      return;\n    }\n\n    const addedElements = nodeArray(mutation.addedNodes).filter(element => element.nodeType === Node.ELEMENT_NODE);\n    addedElements.forEach(this.observeShadowHosts, this);\n  }\n}\n\nvar shadowMutations = function({\n  context,\n  callback,\n  config,\n} = {}) {\n  if (typeof callback !== 'function') {\n    throw new TypeError('observe/shadow-mutations requires options.callback to be a function');\n  }\n\n  if (typeof config !== 'object') {\n    throw new TypeError('observe/shadow-mutations requires options.config to be an object');\n  }\n\n  if (!window.MutationObserver) {\n    // not supporting IE10 via Mutation Events, because they're too expensive\n    // https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events\n    return {\n      disengage: function() {},\n    };\n  }\n\n  const element = contextToElement({\n    label: 'observe/shadow-mutations',\n    resolveDocument: true,\n    defaultToDocument: true,\n    context,\n  });\n\n  const service = new ShadowMutationObserver({\n    context: element,\n    callback,\n    config,\n  });\n\n  return {\n    disengage: service.disengage,\n  };\n};\n\n/*\n  Utility to make a sub-tree of the DOM inert. Inert means the elements cannot be interacted\n  with and they cannot be focused via script, pointer or keyboard.\n\n  inert attribute was [removed](https://html5.org/r/8536) [tweet by steve](https://twitter.com/stevefaulkner/status/443075900201259008)\n  but definition of [inert subtrees](https://www.w3.org/html/wg/drafts/html/master/editing.html#inert-subtrees) remains.\n\n  [implementation idea by Vasilis](https://codepen.io/vasilisvg/pen/scowI)\n  [inert attribute polyfill by GoogleChrome](https://github.com/GoogleChrome/inert-polyfill)\n\n  [Gecko Bug: Inert Attribute](https://bugzilla.mozilla.org/show_bug.cgi?id=921504)\n  [Chromium Bug: Inert Attribute](https://code.google.com/p/chromium/issues/detail?id=269846)\n  [Chromium Bug: Inert Subtree](https://code.google.com/p/chromium/issues/detail?id=241699)\n  [WebKit Bug: Inert Subtree](https://bugs.webkit.org/show_bug.cgi?id=110952)\n*/\n\nfunction makeElementInert(element) {\n  return elementDisabled(element, true);\n}\n\nfunction undoElementInert(element) {\n  return elementDisabled(element, false);\n}\n\nconst observerConfig = {\n  attributes: true,\n  childList: true,\n  subtree: true,\n  attributeFilter: ['tabindex', 'disabled', 'data-ally-disabled'],\n};\n\nclass InertSubtree {\n  constructor({context, filter} = {}) {\n    this._context = nodeArray(context || document.documentElement)[0];\n    this._filter = nodeArray(filter);\n    this._inertElementCache = [];\n\n    this.disengage = this.disengage.bind(this);\n    this.handleMutation = this.handleMutation.bind(this);\n    this.renderInert = this.renderInert.bind(this);\n    this.filterElements = this.filterElements.bind(this);\n    this.filterParentElements = this.filterParentElements.bind(this);\n\n    const focusable$$1 = focusable({\n      context: this._context,\n      includeContext: true,\n      strategy: 'all',\n    });\n\n    this.renderInert(focusable$$1);\n\n    this.shadowObserver = shadowMutations({\n      context: this._context,\n      config: observerConfig,\n      callback: mutations => mutations.forEach(this.handleMutation),\n    });\n  }\n\n  disengage() {\n    if (!this._context) {\n      return;\n    }\n\n    undoElementInert(this._context);\n    this._inertElementCache.forEach((element) => undoElementInert(element));\n\n    this._inertElementCache = null;\n    this._filter = null;\n    this._context = null;\n    this.shadowObserver && this.shadowObserver.disengage();\n    this.shadowObserver = null;\n  }\n\n  listQueryFocusable(list) {\n    return list\n      // find all focusable elements within the given contexts\n      .map(element => focusable({context: element, includeContext: true, strategy: 'all'}))\n      // flatten nested arrays\n      .reduce((previous, current) => previous.concat(current), []);\n  }\n\n  renderInert(elements) {\n    const makeInert = (element) => {\n      this._inertElementCache.push(element);\n      makeElementInert(element);\n    };\n\n    elements\n      .filter(this.filterElements)\n      .filter(this.filterParentElements)\n      // ignore elements that already are disabled\n      // so we don't enable them on disengage()\n      .filter(element => !elementDisabled(element))\n      .forEach(makeInert);\n  }\n\n  filterElements(element) {\n    // ignore elements within the exempted sub-trees\n    const isParentOfElement = getParentComparator({element, includeSelf: true});\n    return !this._filter.some(isParentOfElement);\n  }\n\n  filterParentElements(element) {\n    // ignore ancestors of the exempted sub-trees\n    const isParentOfElement = getParentComparator({parent: element});\n    return !this._filter.some(isParentOfElement);\n  }\n\n  handleMutation(mutation) {\n    if (mutation.type === 'childList') {\n      const addedElements = nodeArray(mutation.addedNodes).filter(element => element.nodeType === Node.ELEMENT_NODE);\n      if (!addedElements.length) {\n        return;\n      }\n\n      const addedFocusableElements = this.listQueryFocusable(addedElements);\n      this.renderInert(addedFocusableElements);\n    } else if (mutation.type === 'attributes') {\n      this.renderInert([mutation.target]);\n    }\n  }\n}\n\nvar disabled$1 = function({context, filter} = {}) {\n  const service = new InertSubtree({context, filter});\n  return { disengage: service.disengage };\n};\n\n// Utility to make the entire DOM aria-hidden=\"true\" except for a given set of elements\n\nfunction makeElementHidden(element) {\n  toggleAttributeValue({\n    element,\n    attribute: 'aria-hidden',\n    temporaryValue: 'true',\n  });\n}\n\nfunction undoElementHidden(element) {\n  toggleAttributeValue({\n    element,\n    attribute: 'aria-hidden',\n  });\n}\n\nconst observerConfig$1 = {\n  attributes: false,\n  childList: true,\n  subtree: true,\n};\n\nclass HiddenSubtree {\n  constructor({context, filter} = {}) {\n    this._context = nodeArray(context || document.documentElement)[0];\n    this._filter = nodeArray(filter);\n\n    this.disengage = this.disengage.bind(this);\n    this.handleMutation = this.handleMutation.bind(this);\n    this.isInsignificantBranch = this.isInsignificantBranch.bind(this);\n\n    const insignificantBranches = getInsignificantBranches({context: this._context, filter: this._filter});\n    insignificantBranches.forEach(makeElementHidden);\n    this.startObserver();\n  }\n\n  disengage() {\n    if (!this._context) {\n      return;\n    }\n\n    [].forEach.call(this._context.querySelectorAll('[data-cached-aria-hidden]'), undoElementHidden);\n\n    this._context = null;\n    this._filter = null;\n    this._observer && this._observer.disconnect();\n    this._observer = null;\n  }\n\n  startObserver() {\n    if (!window.MutationObserver) {\n      // not supporting IE10 via Mutation Events, because they're too expensive\n      // https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events\n      return;\n    }\n    // http://caniuse.com/#search=mutation\n    // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n    this._observer = new MutationObserver(mutations => mutations.forEach(this.handleMutation));\n    this._observer.observe(this._context, observerConfig$1);\n  }\n\n  handleMutation(mutation) {\n    if (mutation.type === 'childList') {\n      // a new branch cannot contain a filtered element\n      // (unless it is moved there, which is an edge-case we'll ignore for now),\n      // so anything that is within context,\n      // and not within a previously known insignificant branch and not within a filtered element,\n      // must be an insignificant branch as well\n      nodeArray(mutation.addedNodes)\n        .filter(element => element.nodeType === Node.ELEMENT_NODE)\n        .filter(this.isInsignificantBranch)\n        .forEach(makeElementHidden);\n    }\n  }\n\n  isInsignificantBranch(element) {\n    const parents = getParents({context: element});\n    if (parents.some(_element => _element.getAttribute('aria-hidden') === 'true')) {\n      // element is child of a hidden element\n      return false;\n    }\n\n    const isParentOfElement = getParentComparator({element});\n    if (this._filter.some(isParentOfElement)) {\n      // element is a descendant of a filtered element\n      return false;\n    }\n\n    return true;\n  }\n}\n\nvar hidden = function({context, filter} = {}) {\n  const service = new HiddenSubtree({context, filter});\n  return { disengage: service.disengage };\n};\n\n// move <area> elements to the location of the <img> elements that reference them\n\nclass Maps {\n  constructor(context) {\n    this._document = getDocument(context);\n    this.maps = {};\n  }\n\n  getAreasFor(name) {\n    if (!this.maps[name]) {\n      // the map is not defined within the context, so we\n      // have to go find it elsewhere in the document\n      this.addMapByName(name);\n    }\n\n    return this.maps[name];\n  }\n\n  addMapByName(name) {\n    const map = getMapByName(name, this._document);\n    if (!map) {\n      // if there is no map, the img[usemap] wasn't doing anything anyway\n      return;\n    }\n\n    this.maps[map.name] = queryTabbable({context: map});\n  }\n\n  extractAreasFromList(elements) {\n    // remove all <area> elements from the elements list,\n    // but put them the map for later retrieval\n    return elements.filter(function(element) {\n      const nodeName = element.nodeName.toLowerCase();\n      if (nodeName !== 'area') {\n        return true;\n      }\n\n      const map = element.parentNode;\n      if (!this.maps[map.name]) {\n        this.maps[map.name] = [];\n      }\n\n      this.maps[map.name].push(element);\n      return false;\n    }, this);\n  }\n}\n\nvar sortArea = function(elements, context) {\n  // images - unless they are focusable themselves, likely not\n  // part of the elements list, so we'll have to find them and\n  // sort them into the elements list manually\n  const usemaps = context.querySelectorAll('img[usemap]');\n  const maps = new Maps(context);\n\n  // remove all <area> elements from the elements list,\n  // but put them the map for later retrieval\n  const _elements = maps.extractAreasFromList(elements);\n\n  if (!usemaps.length) {\n    // the context does not contain any <area>s so no need\n    // to replace anything, just remove any maps\n    return _elements;\n  }\n\n  return mergeInDomOrder({\n    list: _elements,\n    elements: usemaps,\n    resolveElement: function(image) {\n      const name = image.getAttribute('usemap').slice(1);\n      return maps.getAreasFor(name);\n    },\n  });\n};\n\nclass Shadows {\n  constructor(context, sortElements) {\n    // document context we're working with\n    this.context = context;\n    // callback that sorts an array of elements\n    this.sortElements = sortElements;\n    // reference to create unique IDs for each ShadowHost\n    this.hostCounter = 1;\n    // reference map for child-ShadowHosts of a ShadowHost\n    this.inHost = {};\n    // reference map for child-ShadowHost of the document\n    this.inDocument = [];\n    // reference map for ShadowHosts\n    this.hosts = {};\n    // reference map for tabbable elements of a ShadowHost\n    this.elements = {};\n  }\n\n  // remember which hosts we have to sort within later\n  _registerHost(host) {\n    if (host._sortingId) {\n      return;\n    }\n\n    // make the ShadowHost identifiable (see cleanup() for undo)\n    host._sortingId = 'shadow-' + (this.hostCounter++);\n    this.hosts[host._sortingId] = host;\n\n    // hosts may contain other hosts\n    const parentHost = getShadowHost({context: host});\n    if (parentHost) {\n      this._registerHost(parentHost);\n      this._registerHostParent(host, parentHost);\n    } else {\n      this.inDocument.push(host);\n    }\n  }\n\n  // remember which host is the child of which other host\n  _registerHostParent(host, parent) {\n    if (!this.inHost[parent._sortingId]) {\n      this.inHost[parent._sortingId] = [];\n    }\n\n    this.inHost[parent._sortingId].push(host);\n  }\n\n  // remember which elements a host contains\n  _registerElement(element, host) {\n    if (!this.elements[host._sortingId]) {\n      this.elements[host._sortingId] = [];\n    }\n\n    this.elements[host._sortingId].push(element);\n  }\n\n  // remove shadowed elements from the sequence and register\n  // the ShadowHosts they belong to so we know what to sort\n  // later on\n  extractElements(elements) {\n    return elements.filter(function(element) {\n      const host = getShadowHost({ context: element });\n      if (!host) {\n        return true;\n      }\n\n      this._registerHost(host);\n      this._registerElement(element, host);\n      return false;\n    }, this);\n  }\n\n  // inject hosts into the sequence, sort everything,\n  // and recoursively replace hosts by its descendants\n  sort(elements) {\n    let _elements = this._injectHosts(elements);\n    _elements = this._replaceHosts(_elements);\n    this._cleanup();\n    return _elements;\n  }\n\n  // merge ShadowHosts into the element lists of other ShadowHosts\n  // or the document, then sort the individual lists\n  _injectHosts(elements) {\n    Object.keys(this.hosts).forEach(function(_sortingId) {\n      const _list = this.elements[_sortingId];\n      const _elements = this.inHost[_sortingId];\n      const _context = this.hosts[_sortingId].shadowRoot;\n      this.elements[_sortingId] = this._merge(_list, _elements, _context);\n    }, this);\n\n    return this._merge(elements, this.inDocument, this.context);\n  }\n\n  _merge(list, elements, context) {\n    const merged = mergeInDomOrder({\n      list,\n      elements,\n    });\n\n    return this.sortElements(merged, context);\n  }\n\n  _replaceHosts(elements) {\n    return mergeInDomOrder({\n      list: elements,\n      elements: this.inDocument,\n      resolveElement: this._resolveHostElement.bind(this),\n    });\n  }\n\n  _resolveHostElement(host) {\n    const merged = mergeInDomOrder({\n      list: this.elements[host._sortingId],\n      elements: this.inHost[host._sortingId],\n      resolveElement: this._resolveHostElement.bind(this),\n    });\n\n    const _tabindex = tabindexValue(host);\n    if (_tabindex !== null && _tabindex > -1) {\n      return [host].concat(merged);\n    }\n\n    return merged;\n  }\n\n  _cleanup() {\n    // remove those identifers we put on the ShadowHost to avoid using Map()\n    Object.keys(this.hosts).forEach(function(key) {\n      delete this.hosts[key]._sortingId;\n    }, this);\n  }\n}\n\nvar sortShadowed = function(elements, context, sortElements) {\n  const shadows = new Shadows(context, sortElements);\n  const _elements = shadows.extractElements(elements);\n\n  if (_elements.length === elements.length) {\n    // no shadowed content found, no need to continue\n    return sortElements(elements);\n  }\n\n  return shadows.sort(_elements);\n};\n\nvar sortTabindex = function(elements) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.tabIndex\n  // elements with tabIndex \"0\" (including tabbableElements without tabIndex) should be navigated in the order they appear.\n  // elements with a positive tabIndex:\n  //   Elements that have identical tabIndexes should be navigated in the order they appear.\n  //   Navigation proceeds from the lowest tabIndex to the highest tabIndex.\n\n  // NOTE: sort implementation may be unstable and thus mess up DOM order,\n  // that's why we build a map that's being sorted instead. If we were able to rely\n  // on a stable sorting algorithm, sortTabindex() could be as simple as\n  // elements.sort(function(a, b) { return a.tabIndex - b.tabIndex; });\n  // at this time Chrome does not use a stable sorting algorithm\n  // see http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html#stability\n\n  // NOTE: compareDocumentPosition seemed like more overhead than just sorting this with buckets\n  // https://developer.mozilla.org/en-US/docs/Web/API/Node.compareDocumentPosition\n\n  const map = {};\n  const indexes = [];\n  const normal = elements.filter(function(element) {\n    // in Trident and Gecko SVGElement does not know about the tabIndex property\n    let tabIndex = element.tabIndex;\n    if (tabIndex === undefined) {\n      tabIndex = tabindexValue(element);\n    }\n\n    // extract elements that don't need sorting\n    if (tabIndex <= 0 || tabIndex === null || tabIndex === undefined) {\n      return true;\n    }\n\n    if (!map[tabIndex]) {\n      // create sortable bucket for dom-order-preservation of elements with the same tabIndex\n      map[tabIndex] = [];\n      // maintain a list of unique tabIndexes\n      indexes.push(tabIndex);\n    }\n\n    // sort element into the proper bucket\n    map[tabIndex].push(element);\n    // element moved to sorting map, so not \"normal\" anymore\n    return false;\n  });\n\n  // sort the tabindex ascending,\n  // then resolve them to their appropriate buckets,\n  // then flatten the array of arrays to an array\n  const _elements = indexes.sort().map(function(tabIndex) {\n    return map[tabIndex];\n  }).reduceRight(function(previous, current) {\n    return current.concat(previous);\n  }, normal);\n\n  return _elements;\n};\n\n// https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n// https://www.w3.org/WAI/PF/aria-practices/#keyboard\n\nlet supports$10;\n\nfunction moveContextToBeginning(elements, context) {\n  const pos = elements.indexOf(context);\n  if (pos > 0) {\n    const tmp = elements.splice(pos, 1);\n    return tmp.concat(elements);\n  }\n\n  return elements;\n}\n\nfunction sortElements(elements, _context) {\n  if (supports$10.tabsequenceAreaAtImgPosition) {\n    // Some browsers sort <area> in DOM order, some place the <area>s\n    // where the <img> referecing them would've been in DOM order.\n    // https://github.com/medialize/ally.js/issues/5\n    elements = sortArea(elements, _context);\n  }\n\n  elements = sortTabindex(elements);\n  return elements;\n}\n\nvar tabsequence = function({\n  context,\n  includeContext,\n  includeOnlyTabbable,\n  strategy,\n} = {}) {\n  if (!supports$10) {\n    supports$10 = _supports();\n  }\n\n  const _context = nodeArray(context)[0] || document.documentElement;\n  let elements = queryTabbable({\n    context: _context,\n    includeContext,\n    includeOnlyTabbable,\n    strategy,\n  });\n\n  if (document.body.createShadowRoot && platform.is.BLINK) {\n    // sort tabindex localized to shadow dom\n    // see https://github.com/medialize/ally.js/issues/6\n    elements = sortShadowed(elements, _context, sortElements);\n  } else {\n    elements = sortElements(elements, _context);\n  }\n\n  if (includeContext) {\n    // if we include the context itself, it has to be the first\n    // element of the sequence\n    elements = moveContextToBeginning(elements, _context);\n  }\n\n  return elements;\n};\n\n// codes mostly cloned from https://github.com/keithamus/jwerty/blob/master/jwerty.js\n// deliberately not exposing characters like <,.-#* because they vary *wildly*\n// across keyboard layouts and may cause various problems\n// (e.g. \"*\" is \"Shift +\" on a German Mac keyboard)\n// (e.g. \"@\" is \"Alt L\" on a German Mac keyboard)\n\nconst keycode = {\n  // Element Focus\n  tab: 9,\n\n  // Navigation\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  pageUp: 33,\n  'page-up': 33,\n  pageDown: 34,\n  'page-down': 34,\n  end: 35,\n  home: 36,\n\n  // Action\n  enter: 13,\n  escape: 27,\n  space: 32,\n\n  // Modifier\n  shift: 16,\n  capsLock: 20,\n  'caps-lock': 20,\n  ctrl: 17,\n  alt: 18,\n  meta: 91,\n  // in firefox: 224\n  // on mac (chrome): meta-left=91, meta-right=93\n  // on win (IE11): meta-left=91, meta-right=92\n  pause: 19,\n\n  // Content Manipulation\n  insert: 45,\n  'delete': 46,\n  backspace: 8,\n\n  // the same logical key may be identified through different keyCodes\n  _alias: {\n    91: [92, 93, 224],\n  },\n};\n\n// Function keys (112 - 137)\n// NOTE: not every keyboard knows F13+\nfor (let n = 1; n < 26; n++) {\n  keycode['f' + n] = n + 111;\n}\n\n// Number keys (48-57, numpad 96-105)\n// NOTE: not every keyboard knows num-0+\nfor (let n = 0; n < 10; n++) {\n  const code = n + 48;\n  const numCode = n + 96;\n  keycode[n] = code;\n  keycode['num-' + n] = numCode;\n  keycode._alias[code] = [numCode];\n}\n\n// Latin characters (65 - 90)\nfor (let n = 0; n < 26; n++) {\n  const code = n + 65;\n  const name = String.fromCharCode(code).toLowerCase();\n  keycode[name] = code;\n}\n\n/*\n  decodes a key binding token to a JavaScript structure\n\n  returns an array of objects:\n    {\n      // key name translated to keyCode (possibly more than one)\n      keyCodes: [<number>],\n      // translated modifiers\n      modifiers: {\n        altKey: null,   // ignore\n        ctrKey: false,  // expect not pressed\n        metaKey: true,  // expect pressed\n        shiftKey: true, // expect pressed\n      },\n      // callback that returns true if event's\n      // modifier keys match the expected state\n      matchModifiers: function(event){},\n    }\n*/\n\nconst modifier = {\n  alt: 'altKey',\n  ctrl: 'ctrlKey',\n  meta: 'metaKey',\n  shift: 'shiftKey',\n};\n\nconst modifierSequence = Object.keys(modifier).map(name => modifier[name]);\n\nfunction createExpectedModifiers(ignoreModifiers) {\n  const value = ignoreModifiers ? null : false;\n  return {\n    altKey: value,\n    ctrlKey: value,\n    metaKey: value,\n    shiftKey: value,\n  };\n}\n\nfunction resolveModifiers(modifiers) {\n  const ignoreModifiers = modifiers.indexOf('*') !== -1;\n  const expected = createExpectedModifiers(ignoreModifiers);\n\n  modifiers.forEach(function(token) {\n    if (token === '*') {\n      // we've already covered the all-in operator\n      return;\n    }\n\n    // we want the modifier pressed\n    let value = true;\n    const operator = token.slice(0, 1);\n    if (operator === '?') {\n      // we don't care if the modifier is pressed\n      value = null;\n    } else if (operator === '!') {\n      // we do not want the modifier pressed\n      value = false;\n    }\n\n    if (value !== true) {\n      // compensate for the modifier's operator\n      token = token.slice(1);\n    }\n\n    const propertyName = modifier[token];\n    if (!propertyName) {\n      throw new TypeError('Unknown modifier \"' + token + '\"');\n    }\n\n    expected[propertyName] = value;\n  });\n\n  return expected;\n}\n\nfunction resolveKey(key) {\n  const code = keycode[key] || parseInt(key, 10);\n  if (!code || typeof code !== 'number' || isNaN(code)) {\n    throw new TypeError('Unknown key \"' + key + '\"');\n  }\n\n  return [code].concat(keycode._alias[code] || []);\n}\n\nfunction matchModifiers(expected, event) {\n  // returns true on match\n  return !modifierSequence.some(function(prop) {\n    // returns true on mismatch\n    return typeof expected[prop] === 'boolean' && Boolean(event[prop]) !== expected[prop];\n  });\n}\n\nvar keyBinding = function(text) {\n  return text.split(/\\s+/).map(function(_text) {\n    const tokens = _text.split('+');\n    const _modifiers = resolveModifiers(tokens.slice(0, -1));\n    const _keyCodes = resolveKey(tokens.slice(-1));\n    return {\n      keyCodes: _keyCodes,\n      modifiers: _modifiers,\n      matchModifiers: matchModifiers.bind(null, _modifiers),\n    };\n  });\n};\n\n// Bug 286933 - Key events in the autocomplete popup should be hidden from page scripts\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=286933\n\nvar key = function(map = {}) {\n  const bindings = {};\n\n  const context = nodeArray(map.context)[0] || document.documentElement;\n  delete map.context;\n  const filter = nodeArray(map.filter);\n  delete map.filter;\n\n  const mapKeys = Object.keys(map);\n  if (!mapKeys.length) {\n    throw new TypeError('when/key requires at least one option key');\n  }\n\n  const registerBinding = function(event) {\n    event.keyCodes.forEach(function(code) {\n      if (!bindings[code]) {\n        bindings[code] = [];\n      }\n\n      bindings[code].push(event);\n    });\n  };\n\n  mapKeys.forEach(function(text) {\n    if (typeof map[text] !== 'function') {\n      throw new TypeError('when/key requires option[\"' + text + '\"] to be a function');\n    }\n\n    const addCallback = function(event) {\n      event.callback = map[text];\n      return event;\n    };\n\n    keyBinding(text)\n      .map(addCallback)\n      .forEach(registerBinding);\n  });\n\n  const handleKeyDown = function(event) {\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    if (filter.length) {\n      // ignore elements within the exempted sub-trees\n      const isParentOfElement = getParentComparator({element: event.target, includeSelf: true});\n      if (filter.some(isParentOfElement)) {\n        return;\n      }\n    }\n\n    const key = event.keyCode || event.which;\n    if (!bindings[key]) {\n      return;\n    }\n\n    bindings[key].forEach(function(_event) {\n      if (!_event.matchModifiers(event)) {\n        return;\n      }\n\n      _event.callback.call(context, event, disengage);\n    });\n  };\n\n  context.addEventListener('keydown', handleKeyDown, false);\n\n  const disengage = function() {\n    context.removeEventListener('keydown', handleKeyDown, false);\n  };\n\n  return { disengage };\n};\n\nvar tabFocus = function({ context } = {}) {\n  if (!context) {\n    context = document.documentElement;\n  }\n\n  // Make sure the supports tests are run before intercepting the Tab key,\n  // or IE10 and IE11 will fail to process the first Tab key event. Not\n  // limiting this warm-up to IE because it may be a problem elsewhere, too.\n  tabsequence();\n\n  return key({\n    // Safari on OSX may require ALT+TAB to reach links,\n    // see https://github.com/medialize/ally.js/issues/146\n    '?alt+?shift+tab': function(event) {\n      // we're completely taking over the Tab key handling\n      event.preventDefault();\n\n      const sequence = tabsequence({\n        context,\n      });\n\n      const backward = event.shiftKey;\n      const first = sequence[0];\n      const last = sequence[sequence.length - 1];\n\n      // wrap around first to last, last to first\n      const source = backward ? first : last;\n      const target = backward ? last : first;\n      if (isActiveElement(source)) {\n        target.focus();\n        return;\n      }\n\n      // find current position in tabsequence\n      let currentIndex;\n      const found = sequence.some(function(element, index) {\n        if (!isActiveElement(element)) {\n          return false;\n        }\n\n        currentIndex = index;\n        return true;\n      });\n\n      if (!found) {\n        // redirect to first as we're not in our tabsequence\n        first.focus();\n        return;\n      }\n\n      // shift focus to previous/next element in the sequence\n      const offset = backward ? -1 : 1;\n      sequence[currentIndex + offset].focus();\n    },\n  });\n};\n\n// exporting modules to be included the UMD bundle\n\nvar maintain = {\n  disabled: disabled$1,\n  hidden,\n  tabFocus,\n};\n\n/*\n  'property-name': {\n    'default': default value\n    values: list of possible values\n    'multiple': boolean, allows multiple values (space separated)\n    'other': boolean, allows other values than offered in values list\n  }\n*/\n\nvar attribute = {\n  // aria state properties\n\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-busy\n  'aria-busy': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-checked\n  'aria-checked': {\n    'default': undefined,\n    values: ['true', 'false', 'mixed', undefined],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-disabled\n  'aria-disabled': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-expanded\n  'aria-expanded': {\n    'default': undefined,\n    values: ['true', 'false', undefined],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-grabbed\n  'aria-grabbed': {\n    'default': undefined,\n    values: ['true', 'false', undefined],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-hidden\n  'aria-hidden': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-invalid\n  'aria-invalid': {\n    'default': 'false',\n    values: ['true', 'false', 'grammar', 'spelling'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-pressed\n  'aria-pressed': {\n    'default': undefined,\n    values: ['true', 'false', 'mixed', undefined],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-selected\n  'aria-selected': {\n    'default': undefined,\n    values: ['true', 'false', undefined],\n  },\n\n  // aria descriptive properties\n\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-atomic\n  'aria-atomic': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-autocomplete\n  'aria-autocomplete': {\n    'default': 'none',\n    values: ['inline', 'list', 'both', 'none'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-dropeffect\n  'aria-dropeffect': {\n    'default': 'none',\n    multiple: true,\n    values: ['copy', 'move', 'link', 'execute', 'popup', 'none'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-haspopup\n  'aria-haspopup': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-live\n  'aria-live': {\n    'default': 'off',\n    values: ['off', 'polite', 'assertive'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-multiline\n  'aria-multiline': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-multiselectable\n  'aria-multiselectable': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-orientation\n  'aria-orientation': {\n    'default': 'horizontal',\n    values: ['vertical', 'horizontal'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-readonly\n  'aria-readonly': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-relevant\n  'aria-relevant': {\n    'default': 'additions text',\n    multiple: true,\n    values: ['additions', 'removals', 'text', 'all'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-required\n  'aria-required': {\n    'default': 'false',\n    values: ['true', 'false'],\n  },\n  // https://www.w3.org/TR/wai-aria/states_and_properties#aria-sort\n  'aria-sort': {\n    'default': 'none',\n    other: true,\n    values: ['ascending', 'descending', 'none'],\n  },\n};\n\n// exporting modules to be included the UMD bundle\n\nvar map = {\n  attribute,\n  keycode,\n};\n\n/*\n  Observe keyboard-, pointer-, mouse- and touch-events so that a query for\n  the current interaction type can be made at any time. For pointer interaction\n  this observer is limited to pointer button down/up - move is not observed!\n\n  USAGE:\n    var listener = engage();\n    listener.get() === {pointer: Boolean, key: Boolean}\n*/\n\n// counters to track primary input\nlet _activePointers = 0;\nlet _activeKeys = 0;\n\nconst pointerStartEvents = [\n  'touchstart',\n  'pointerdown',\n  'MSPointerDown',\n  'mousedown',\n];\nconst pointerEndEvents = [\n  'touchend',\n  'touchcancel',\n  'pointerup',\n  'MSPointerUp',\n  'pointercancel',\n  'MSPointerCancel',\n  'mouseup',\n];\n\nfunction handleWindowBlurEvent() {\n  // reset internal counters when window loses focus\n  _activePointers = 0;\n  _activeKeys = 0;\n}\n\nfunction handlePointerStartEvent(event) {\n  if (event.isPrimary === false) {\n    // ignore non-primary pointer events\n    // https://w3c.github.io/pointerevents/#widl-PointerEvent-isPrimary\n    return;\n  }\n\n  // mousedown without following mouseup\n  // (likely not possible in Chrome)\n  _activePointers++;\n}\n\nfunction handlePointerEndEvent(event) {\n  if (event.isPrimary === false) {\n    // ignore non-primary pointer events\n    // https://w3c.github.io/pointerevents/#widl-PointerEvent-isPrimary\n    return;\n  } else if (event.touches) {\n    _activePointers = event.touches.length;\n    return;\n  }\n\n  // delay reset to when the current handlers are executed\n  (window.setImmediate || window.setTimeout)(function() {\n    // mouseup without prior mousedown\n    // (drag something out of the window)\n    _activePointers = Math.max(_activePointers - 1, 0);\n  });\n}\n\nfunction handleKeyStartEvent(event) {\n  // ignore modifier keys\n  switch (event.keyCode || event.which) {\n    case 16: // space\n    case 17: // control\n    case 18: // alt\n    case 91: // command left\n    case 93: // command right\n      return;\n  }\n\n  // keydown without a following keyup\n  // (may happen on CMD+TAB)\n  _activeKeys++;\n}\n\nfunction handleKeyEndEvent(event) {\n  // ignore modifier keys\n  switch (event.keyCode || event.which) {\n    case 16: // space\n    case 17: // control\n    case 18: // alt\n    case 91: // command left\n    case 93: // command right\n      return;\n  }\n\n  // delay reset to when the current handlers are executed\n  (window.setImmediate || window.setTimeout)(function() {\n    // keyup without prior keydown\n    // (may happen on CMD+R)\n    _activeKeys = Math.max(_activeKeys - 1, 0);\n  });\n}\n\nfunction getInteractionType() {\n  return {\n    pointer: Boolean(_activePointers),\n    key: Boolean(_activeKeys),\n  };\n}\n\nfunction disengage$5() {\n  _activePointers = _activeKeys = 0;\n  window.removeEventListener('blur', handleWindowBlurEvent, false);\n  document.documentElement.removeEventListener('keydown', handleKeyStartEvent, true);\n  document.documentElement.removeEventListener('keyup', handleKeyEndEvent, true);\n  pointerStartEvents.forEach(function(event) {\n    document.documentElement.removeEventListener(event, handlePointerStartEvent, true);\n  });\n  pointerEndEvents.forEach(function(event) {\n    document.documentElement.removeEventListener(event, handlePointerEndEvent, true);\n  });\n}\n\nfunction engage$5() {\n  // window blur must be in bubble phase so it won't capture regular blurs\n  window.addEventListener('blur', handleWindowBlurEvent, false);\n  // handlers to identify the method of focus change\n  document.documentElement.addEventListener('keydown', handleKeyStartEvent, true);\n  document.documentElement.addEventListener('keyup', handleKeyEndEvent, true);\n  pointerStartEvents.forEach(function(event) {\n    document.documentElement.addEventListener(event, handlePointerStartEvent, true);\n  });\n  pointerEndEvents.forEach(function(event) {\n    document.documentElement.addEventListener(event, handlePointerEndEvent, true);\n  });\n\n  return {\n    get: getInteractionType,\n  };\n}\n\nvar engageInteractionTypeObserver = decorateService({ engage: engage$5, disengage: disengage$5 });\n\n// exporting modules to be included the UMD bundle\n\nvar observe = {\n  interactionType: engageInteractionTypeObserver,\n  shadowMutations,\n};\n\n/*\n    query/firstTabbable() finds the first suitable element to receive focus in the given context.\n    If an element has [autofocus] return that element, otherwise return the first element\n    in document order that does *not* have a positive tabIndex (e.g. as [tabindex=\"1\"]),\n    otherwise return the context itself, if it is focusable.\n\n    Note: Chrome's <dialog> will focus the first tabbable element, even if it has\n    [tabindex=\"1\"]. Since [tabindex=\"1\"] is considered\n    bad practice we'll ignore it until someone complains.\n */\n\nfunction hasAutofocus(element) {\n  // [autofocus] actually only works on form element, but who cares?\n  return element.hasAttribute('autofocus');\n}\n\nfunction hasNoPositiveTabindex(element) {\n  return element.tabIndex <= 0;\n}\n\nvar firstTabbable = function({\n  context,\n  sequence,\n  strategy,\n  ignoreAutofocus,\n  defaultToContext,\n  includeOnlyTabbable,\n} = {}) {\n  let index = -1;\n\n  if (!sequence) {\n    context = nodeArray(context || document.body)[0];\n    sequence = queryTabbable({\n      context,\n      includeOnlyTabbable,\n      strategy,\n    });\n  }\n\n  if (sequence.length && !ignoreAutofocus) {\n    // prefer [autofocus]\n    index = findIndex(sequence, hasAutofocus);\n  }\n\n  if (sequence.length && index === -1) {\n    // ignore positive [tabindex]\n    index = findIndex(sequence, hasNoPositiveTabindex);\n  }\n\n  const _isFocusable = isFocusable.rules.except({\n    onlyTabbable: includeOnlyTabbable,\n  });\n\n  if (index === -1 && defaultToContext && context && _isFocusable(context)) {\n    return context;\n  }\n\n  return sequence[index] || null;\n};\n\n// exporting modules to be included the UMD bundle\n\nvar query = {\n  firstTabbable,\n  focusable,\n  shadowHosts: queryShadowHosts,\n  tabbable: queryTabbable,\n  tabsequence,\n};\n\n//\n// This util allows to easily add, remove or toggle classes.\n//\n// Using it is neccessary as IE 9 doesn't support element classList\n// and IE 11 doesn't support classList for SVG elements\n// see also https://developer.mozilla.org/en/docs/Web/API/Element/classList\n//\n// This file is a replacement for domtokenlist because of\n// https://github.com/medialize/ally.js/issues/147\n//\n// Usage:\n//\n// toggleClass(div, 'demo'); // Toggles the class `demo`\n// toggleClass(div, 'demo', true); // Adds the class `demo`\n// toggleClass(div, 'demo', false); // removes the class `demo`\n//\n// removeClass(div, 'demo');\n// addClass(div, 'demo');\n//\n\n/**\n * Extract an array of all classNames of the given DOM or SVG node\n */\nfunction getClassNames(element) {\n  const className = element.getAttribute && element.getAttribute('class') || '';\n  return className === '' ? [] : className.split(' ');\n}\n\nfunction toggleClass(element, className, force) {\n  const classNames = getClassNames(element);\n  const idx = classNames.indexOf(className);\n  const hasClass = idx !== -1;\n  const shouldHaveClass = force !== undefined ? force : !hasClass;\n  // Break if classes are already set/removed\n  if (shouldHaveClass === hasClass) {\n    return;\n  }\n  // Remove class\n  if (!shouldHaveClass) {\n    classNames.splice(idx, 1);\n  }\n  // Add class\n  if (shouldHaveClass) {\n    classNames.push(className);\n  }\n  element.setAttribute('class', classNames.join(' '));\n}\n\nfunction removeClass(element, className) {\n  return toggleClass(element, className, false);\n}\n\nfunction addClass(element, className) {\n  return toggleClass(element, className, true);\n}\n\n/*\n  add data-focus-source attribute to html element containing \"key\", \"pointer\" or \"script\"\n  depending on the input method used to change focus.\n\n  USAGE:\n    style/focus-source()\n\n    body :focus {\n      outline: 1px solid grey;\n    }\n\n    html[data-focus-source=\"key\"] body :focus {\n      outline: 5px solid red;\n    }\n\n    html[data-focus-source=\"key\"] body :focus {\n      outline: 1px solid blue;\n    }\n\n  NOTE: I don't have a GamePad to test, if you do and you want to\n  implement an observer for https://w3c.github.io/gamepad/ - send a PR!\n\n  Alternate implementation: https://github.com/alice/modality\n*/\n\n// preferring focusin/out because they are synchronous in IE10+11\nconst supportsFocusIn = typeof document !== 'undefined' && 'onfocusin' in document;\nconst focusEventName = supportsFocusIn ? 'focusin' : 'focus';\nconst blurEventName = supportsFocusIn ? 'focusout' : 'blur';\n\n// interface to read interaction-type-listener state\nlet interactionTypeHandler;\nlet shadowHandle;\n// keep track of last focus source\nlet current = null;\n// overwrite focus source for use with the every upcoming focus event\nlet lock = null;\n// keep track of ever having used a particular input method to change focus\nconst used = {\n  pointer: false,\n  key: false,\n  script: false,\n  initial: false,\n};\n\nfunction handleFocusEvent(event) {\n  let source = '';\n  if (event.type === focusEventName || event.type === 'shadow-focus') {\n    const interactionType = interactionTypeHandler.get();\n    source = lock\n      || interactionType.pointer && 'pointer'\n      || interactionType.key && 'key'\n      || 'script';\n  } else if (event.type === 'initial') {\n    source = 'initial';\n  }\n\n  document.documentElement.setAttribute('data-focus-source', source);\n\n  if (event.type !== blurEventName) {\n    if (!used[source]) {\n      addClass(document.documentElement, 'focus-source-' + source);\n    }\n\n    used[source] = true;\n    current = source;\n  }\n}\n\nfunction getCurrentFocusSource() {\n  return current;\n}\n\nfunction getUsedFocusSource(source) {\n  return used[source];\n}\n\nfunction lockFocusSource(source) {\n  lock = source;\n}\n\nfunction unlockFocusSource() {\n  lock = false;\n}\n\nfunction disengage$6() {\n  // clear dom state\n  handleFocusEvent({type: blurEventName});\n  current = lock = null;\n  Object.keys(used).forEach(function(key) {\n    removeClass(document.documentElement, 'focus-source-' + key);\n    used[key] = false;\n  });\n  // kill interaction type identification listener\n  interactionTypeHandler.disengage();\n  // kill shadow-focus event dispatcher\n  shadowHandle && shadowHandle.disengage();\n  document.removeEventListener('shadow-focus', handleFocusEvent, true);\n  document.documentElement.removeEventListener(focusEventName, handleFocusEvent, true);\n  document.documentElement.removeEventListener(blurEventName, handleFocusEvent, true);\n  document.documentElement.removeAttribute('data-focus-source');\n}\n\nfunction engage$6() {\n  // enable the shadow-focus event dispatcher\n  shadowHandle = shadowFocus();\n  // handlers to modify the focused element\n  document.addEventListener('shadow-focus', handleFocusEvent, true);\n  document.documentElement.addEventListener(focusEventName, handleFocusEvent, true);\n  document.documentElement.addEventListener(blurEventName, handleFocusEvent, true);\n  // enable the interaction type identification observer\n  interactionTypeHandler = engageInteractionTypeObserver();\n  // set up initial dom state\n  handleFocusEvent({type: 'initial'});\n\n  return {\n    used: getUsedFocusSource,\n    current: getCurrentFocusSource,\n    lock: lockFocusSource,\n    unlock: unlockFocusSource,\n  };\n}\n\nvar focusSource = decorateService({ engage: engage$6, disengage: disengage$6 });\n\n/*\n  add .ally-focus-within class to parents of document.activeElement,\n  to provide the functionality of :focus-within where it's not available\n  see https://dev.w3.org/csswg/selectors-4/#the-focus-within-pseudo\n\n  USAGE:\n    style/focus-within()\n*/\n\nlet supports$11;\n\n// preferring focusin/out because they are synchronous in IE10+11\nconst supportsFocusIn$1 = typeof document !== 'undefined' && 'onfocusin' in document;\nconst focusEventName$1 = supportsFocusIn$1 ? 'focusin' : 'focus';\nconst blurEventName$1 = supportsFocusIn$1 ? 'focusout' : 'blur';\n\nconst className = 'ally-focus-within';\n// defined in engage();\nlet selector$3;\nlet blurTimer;\nlet shadowHandle$1;\n\nfunction applyFocusWithinClass(active) {\n  let _active = active || getActiveElements();\n  if (!supports$11.cssShadowPiercingDeepCombinator) {\n    // no shadow-piercing descendant selector, no joy\n    _active = _active.slice(-1);\n  }\n\n  // identify the elements that currently have :focus-within\n  const _current = [].slice.call(document.querySelectorAll(selector$3), 0);\n  // get the path (ancestry) of each ShadowRoot and merge them into a flat list\n  const elements = _active.map((context) => getParents({context})).reduce(function(previous, current) {\n    return current.concat(previous);\n  }, []);\n\n  // remove the class only from elements that would not receive it again (minimize dom action)\n  _current.forEach(function(element) {\n    if (elements.indexOf(element) !== -1) {\n      return;\n    }\n\n    removeClass(element, className);\n  });\n\n  // apply the class only to elements that do not yet have it (minimize dom action)\n  elements.forEach(function(element) {\n    if (_current.indexOf(element) !== -1) {\n      return;\n    }\n\n    addClass(element, className);\n  });\n}\n\nfunction handleDocumentBlurEvent() {\n  // we won't get a focus for <body>, but a delayed blur handler will achieve\n  // the same thing listening for focus would've done, unless we get a focus, of course\n  blurTimer = (window.setImmediate || window.setTimeout)(function() {\n    applyFocusWithinClass();\n  });\n}\n\nfunction handleDocumentFocusEvent() {\n  // abort any handlers that come from document or element blur handlers\n  (window.clearImmediate || window.clearTimeout)(blurTimer);\n  // NOTE: we could overcome Firefox 34 issue of not supporting ShadowRoot.host by\n  // passing event.target (which references the first-level ShadowHost), but that\n  // would require applyFocusWithinClass() to distinguish between the argument and\n  // getActiveElements().\n  applyFocusWithinClass();\n}\n\nfunction handleShadowFocusEvent(event) {\n  applyFocusWithinClass(event.detail.elements);\n}\n\nfunction disengage$7() {\n  shadowHandle$1 && shadowHandle$1.disengage();\n  (window.clearImmediate || window.clearTimeout)(blurTimer);\n  document.removeEventListener(blurEventName$1, handleDocumentBlurEvent, true);\n  document.removeEventListener(focusEventName$1, handleDocumentFocusEvent, true);\n  document.removeEventListener('shadow-focus', handleShadowFocusEvent, true);\n\n  // remove any remaining ally-within-focus occurrences\n  [].forEach.call(document.querySelectorAll(selector$3), function(element) {\n    removeClass(element, className);\n  });\n}\n\nfunction engage$7() {\n  if (!supports$11) {\n    supports$11 = _supports();\n    selector$3 = selectInShadows('.' + className);\n  }\n\n  shadowHandle$1 = shadowFocus();\n  document.addEventListener(blurEventName$1, handleDocumentBlurEvent, true);\n  document.addEventListener(focusEventName$1, handleDocumentFocusEvent, true);\n  document.addEventListener('shadow-focus', handleShadowFocusEvent, true);\n  applyFocusWithinClass();\n}\n\nvar focusWithin = decorateService({ engage: engage$7, disengage: disengage$7 });\n\n// exporting modules to be included the UMD bundle\n\nvar style = {\n  focusSource,\n  focusWithin,\n};\n\nfunction getIntersectingRect(one, two) {\n  // identify the rectangle that _element and _container overlap in\n  const top = Math.max(one.top, two.top);\n  const left = Math.max(one.left, two.left);\n  // make sure bottom can't be above top, right can't be before left\n  const right = Math.max(Math.min(one.right, two.right), left);\n  const bottom = Math.max(Math.min(one.bottom, two.bottom), top);\n  // return something resembling ClientRect\n  return {\n    top: top,\n    right: right,\n    bottom: bottom,\n    left: left,\n    width: right - left,\n    height: bottom - top,\n  };\n}\n\nfunction getViewportRect() {\n  const width = window.innerWidth || document.documentElement.clientWidth;\n  const height = window.innerHeight || document.documentElement.clientHeight;\n  // return something resembling ClientRect\n  return {\n    top: 0,\n    right: width,\n    bottom: height,\n    left: 0,\n    width: width,\n    height: height,\n  };\n}\n\nfunction getInnerBoundingClientRect(element) {\n  // convenience for the .reduce() in getScrollableParentRect()\n  const rect = element.getBoundingClientRect();\n\n  // remove the width of the scrollbar because that\n  // area is not really considered visible\n  // NOTE: assuming scrollbar is always to the right and bottom\n  const scrollbarWidth = element.offsetWidth - element.clientWidth;\n  const scrollbarHeight = element.offsetHeight - element.clientHeight;\n  // cannot mutate rect because it has readonly properties\n  const _rect = {\n    top: rect.top,\n    left: rect.left,\n    right: rect.right - scrollbarWidth,\n    bottom: rect.bottom - scrollbarHeight,\n    width: rect.width - scrollbarWidth,\n    height: rect.height - scrollbarHeight,\n    area: 0,\n  };\n\n  _rect.area = _rect.width * _rect.height;\n  return _rect;\n}\n\nfunction isOverflowingElement(element) {\n  const style = window.getComputedStyle(element, null);\n  const value = 'visible';\n  return style.getPropertyValue('overflow-x') !== value\n    && style.getPropertyValue('overflow-y') !== value;\n}\n\nfunction isScrollableElement(element) {\n  // an element not scrollable if it doesn't crop its content\n  if (!isOverflowingElement(element)) {\n    return false;\n  }\n\n  // an element is scrollable when it is smaller than its content\n  return element.offsetHeight < element.scrollHeight\n    || element.offsetWidth < element.scrollWidth;\n}\n\nfunction getScrollableParentRect(element) {\n  // get largest possible space constrained by scrolling containers\n\n  // find scrollable parents\n  const scrollingContainers = getParents({context: element}).slice(1).filter(isScrollableElement);\n\n  if (!scrollingContainers.length) {\n    // no containers, no joy\n    return null;\n  }\n\n  // identify the currently visible intersection of all scrolling container parents\n  return scrollingContainers.reduce(function(previous, current) {\n    const rect = getInnerBoundingClientRect(current);\n    const intersection = getIntersectingRect(rect, previous);\n    // identify the smallest scrolling container so we know how much space\n    // our element can fill at the most - note that this is NOT the area\n    // of the intersection, intersection is just abused as a vehicle\n    intersection.area = Math.min(rect.area, previous.area);\n    return intersection;\n  }, getInnerBoundingClientRect(scrollingContainers[0]));\n}\n\nvar visibleArea = function(element) {\n  // dimensions of the element itself\n  const _element = element.getBoundingClientRect();\n  // dimensions of the viewport\n  const _viewport = getViewportRect();\n  // we need the area to know how much of the element can be displayed at the most\n  _viewport.area = _viewport.width * _viewport.height;\n\n  let _area = _viewport;\n  // dimensions of the intersection of all scrollable parents\n  const _container = getScrollableParentRect(element);\n  if (_container) {\n    if (!_container.width || !_container.height) {\n      // scrollable containers without dimensions are invisible,\n      // meaning that the element is not visible at all\n      return 0;\n    }\n\n    // dimension the element can currently be rendered in\n    _area = getIntersectingRect(_container, _viewport);\n    _area.area = _container.area;\n  }\n\n  // dimension of the element currently rendered in identified space\n  const _visible = getIntersectingRect(_element, _area);\n  if (!_visible.width || !_visible.height) {\n    // element is not shown within the identified area\n    return 0;\n  }\n\n  // compare the element's currently visible size to the size it\n  // could take up at the most, being either the element's actual\n  // size, or the space theroetically made available if all\n  // scrollable parents are aligned properly\n  const area = _element.width * _element.height;\n  const maxArea = Math.min(area, _area.area);\n  // Firefox may return sub-pixel bounding client rect\n  const visibleArea = Math.round(_visible.width) * Math.round(_visible.height) / maxArea;\n  // Edge might not reach 0.5 exactly\n  const factor = 10000;\n  const roundedVisibleArea = Math.round(visibleArea * factor) / factor;\n  // clamp the value at 1\n  return Math.min(roundedVisibleArea, 1);\n};\n\n/*\n  execute a callback once an element became fully visible in the viewport\n*/\n\nvar whenVisibleArea = function({context, callback, area} = {}) {\n  if (typeof callback !== 'function') {\n    throw new TypeError('when/visible-area requires options.callback to be a function');\n  }\n\n  if (typeof area !== 'number') {\n    area = 1;\n  }\n\n  const element = contextToElement({\n    label: 'when/visible-area',\n    context,\n  });\n\n  let raf;\n  let evaluate = null;\n  const disengage = function() {\n    raf && cancelAnimationFrame(raf);\n  };\n\n  const predicate = function() {\n    return !isVisible(element) || visibleArea(element) < area || callback(element) === false;\n  };\n\n  const checkPredicate = function() {\n    if (predicate()) {\n      evaluate();\n      return;\n    }\n\n    disengage();\n  };\n\n  evaluate = function() {\n    raf = requestAnimationFrame(checkPredicate);\n  };\n\n  evaluate();\n  return { disengage };\n};\n\n/*\n  trigger a callback once the context element is focusable and is fully visible in the viewport\n*/\n\nvar focusable$1 = function({context, callback, area} = {}) {\n  if (typeof callback !== 'function') {\n    throw new TypeError('when/focusable requires options.callback to be a function');\n  }\n\n  const element = contextToElement({\n    label: 'when/focusable',\n    context,\n  });\n\n  const filterCallback = function(target) {\n    if (!isFocusable(target)) {\n      return false;\n    }\n\n    return callback(target);\n  };\n\n  const _document = getDocument(element);\n  const handle = whenVisibleArea({ context: element, callback: filterCallback, area });\n  const disengage = function() {\n    _document.removeEventListener('focus', disengage, true);\n    handle && handle.disengage();\n  };\n\n  _document.addEventListener('focus', disengage, true);\n\n  return { disengage };\n};\n\n// exporting modules to be included the UMD bundle\n\nvar when = {\n  focusable: focusable$1,\n  key,\n  visibleArea: whenVisibleArea,\n};\n\n// this builds up the UMD bundle\n\n// save current window.ally for noConflict()\nconst conflicted = typeof window !== 'undefined' && window.ally;\n\nvar ally_js = {\n  element,\n  event,\n  fix,\n  get,\n  is,\n  maintain,\n  map,\n  observe,\n  query,\n  style,\n  when,\n  version: version$1,\n  noConflict: function() {\n    if (typeof window !== 'undefined' && window.ally === this) {\n      window.ally = conflicted;\n    }\n\n    return this;\n  },\n};\n\nmodule.exports = ally_js;\n","/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n;(function(root, factory) {\n\t// https://github.com/umdjs/umd/blob/master/returnExports.js\n\tif (typeof exports == 'object') {\n\t\t// For Node.js.\n\t\tmodule.exports = factory(root);\n\t} else if (typeof define == 'function' && define.amd) {\n\t\t// For AMD. Register as an anonymous module.\n\t\tdefine([], factory.bind(root, root));\n\t} else {\n\t\t// For browser globals (not exposing the function separately).\n\t\tfactory(root);\n\t}\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn root.CSS.escape;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\treturn cssEscape;\n\n}));\n","/*!\r\n * Platform.js <https://mths.be/platform>\r\n * Copyright 2014-2016 Benjamin Tan <https://demoneaux.github.io/>\r\n * Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>\r\n * Available under MIT license <https://mths.be/mit>\r\n */\r\n;(function() {\r\n  'use strict';\r\n\r\n  /** Used to determine if values are of the language type `Object`. */\r\n  var objectTypes = {\r\n    'function': true,\r\n    'object': true\r\n  };\r\n\r\n  /** Used as a reference to the global object. */\r\n  var root = (objectTypes[typeof window] && window) || this;\r\n\r\n  /** Backup possible global object. */\r\n  var oldRoot = root;\r\n\r\n  /** Detect free variable `exports`. */\r\n  var freeExports = objectTypes[typeof exports] && exports;\r\n\r\n  /** Detect free variable `module`. */\r\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\r\n\r\n  /** Detect free variable `global` from Node.js or Browserified code and use it as `root`. */\r\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;\r\n  if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\r\n    root = freeGlobal;\r\n  }\r\n\r\n  /**\r\n   * Used as the maximum length of an array-like object.\r\n   * See the [ES6 spec](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength)\r\n   * for more details.\r\n   */\r\n  var maxSafeInteger = Math.pow(2, 53) - 1;\r\n\r\n  /** Regular expression to detect Opera. */\r\n  var reOpera = /\\bOpera/;\r\n\r\n  /** Possible global object. */\r\n  var thisBinding = this;\r\n\r\n  /** Used for native method references. */\r\n  var objectProto = Object.prototype;\r\n\r\n  /** Used to check for own properties of an object. */\r\n  var hasOwnProperty = objectProto.hasOwnProperty;\r\n\r\n  /** Used to resolve the internal `[[Class]]` of values. */\r\n  var toString = objectProto.toString;\r\n\r\n  /*--------------------------------------------------------------------------*/\r\n\r\n  /**\r\n   * Capitalizes a string value.\r\n   *\r\n   * @private\r\n   * @param {string} string The string to capitalize.\r\n   * @returns {string} The capitalized string.\r\n   */\r\n  function capitalize(string) {\r\n    string = String(string);\r\n    return string.charAt(0).toUpperCase() + string.slice(1);\r\n  }\r\n\r\n  /**\r\n   * A utility function to clean up the OS name.\r\n   *\r\n   * @private\r\n   * @param {string} os The OS name to clean up.\r\n   * @param {string} [pattern] A `RegExp` pattern matching the OS name.\r\n   * @param {string} [label] A label for the OS.\r\n   */\r\n  function cleanupOS(os, pattern, label) {\r\n    // Platform tokens are defined at:\r\n    // http://msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx\r\n    // http://web.archive.org/web/20081122053950/http://msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx\r\n    var data = {\r\n      '10.0': '10',\r\n      '6.4':  '10 Technical Preview',\r\n      '6.3':  '8.1',\r\n      '6.2':  '8',\r\n      '6.1':  'Server 2008 R2 / 7',\r\n      '6.0':  'Server 2008 / Vista',\r\n      '5.2':  'Server 2003 / XP 64-bit',\r\n      '5.1':  'XP',\r\n      '5.01': '2000 SP1',\r\n      '5.0':  '2000',\r\n      '4.0':  'NT',\r\n      '4.90': 'ME'\r\n    };\r\n    // Detect Windows version from platform tokens.\r\n    if (pattern && label && /^Win/i.test(os) && !/^Windows Phone /i.test(os) &&\r\n        (data = data[/[\\d.]+$/.exec(os)])) {\r\n      os = 'Windows ' + data;\r\n    }\r\n    // Correct character case and cleanup string.\r\n    os = String(os);\r\n\r\n    if (pattern && label) {\r\n      os = os.replace(RegExp(pattern, 'i'), label);\r\n    }\r\n\r\n    os = format(\r\n      os.replace(/ ce$/i, ' CE')\r\n        .replace(/\\bhpw/i, 'web')\r\n        .replace(/\\bMacintosh\\b/, 'Mac OS')\r\n        .replace(/_PowerPC\\b/i, ' OS')\r\n        .replace(/\\b(OS X) [^ \\d]+/i, '$1')\r\n        .replace(/\\bMac (OS X)\\b/, '$1')\r\n        .replace(/\\/(\\d)/, ' $1')\r\n        .replace(/_/g, '.')\r\n        .replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i, '')\r\n        .replace(/\\bx86\\.64\\b/gi, 'x86_64')\r\n        .replace(/\\b(Windows Phone) OS\\b/, '$1')\r\n        .replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/, '$1')\r\n        .split(' on ')[0]\r\n    );\r\n\r\n    return os;\r\n  }\r\n\r\n  /**\r\n   * An iteration utility for arrays and objects.\r\n   *\r\n   * @private\r\n   * @param {Array|Object} object The object to iterate over.\r\n   * @param {Function} callback The function called per iteration.\r\n   */\r\n  function each(object, callback) {\r\n    var index = -1,\r\n        length = object ? object.length : 0;\r\n\r\n    if (typeof length == 'number' && length > -1 && length <= maxSafeInteger) {\r\n      while (++index < length) {\r\n        callback(object[index], index, object);\r\n      }\r\n    } else {\r\n      forOwn(object, callback);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Trim and conditionally capitalize string values.\r\n   *\r\n   * @private\r\n   * @param {string} string The string to format.\r\n   * @returns {string} The formatted string.\r\n   */\r\n  function format(string) {\r\n    string = trim(string);\r\n    return /^(?:webOS|i(?:OS|P))/.test(string)\r\n      ? string\r\n      : capitalize(string);\r\n  }\r\n\r\n  /**\r\n   * Iterates over an object's own properties, executing the `callback` for each.\r\n   *\r\n   * @private\r\n   * @param {Object} object The object to iterate over.\r\n   * @param {Function} callback The function executed per own property.\r\n   */\r\n  function forOwn(object, callback) {\r\n    for (var key in object) {\r\n      if (hasOwnProperty.call(object, key)) {\r\n        callback(object[key], key, object);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the internal `[[Class]]` of a value.\r\n   *\r\n   * @private\r\n   * @param {*} value The value.\r\n   * @returns {string} The `[[Class]]`.\r\n   */\r\n  function getClassOf(value) {\r\n    return value == null\r\n      ? capitalize(value)\r\n      : toString.call(value).slice(8, -1);\r\n  }\r\n\r\n  /**\r\n   * Host objects can return type values that are different from their actual\r\n   * data type. The objects we are concerned with usually return non-primitive\r\n   * types of \"object\", \"function\", or \"unknown\".\r\n   *\r\n   * @private\r\n   * @param {*} object The owner of the property.\r\n   * @param {string} property The property to check.\r\n   * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`.\r\n   */\r\n  function isHostType(object, property) {\r\n    var type = object != null ? typeof object[property] : 'number';\r\n    return !/^(?:boolean|number|string|undefined)$/.test(type) &&\r\n      (type == 'object' ? !!object[property] : true);\r\n  }\r\n\r\n  /**\r\n   * Prepares a string for use in a `RegExp` by making hyphens and spaces optional.\r\n   *\r\n   * @private\r\n   * @param {string} string The string to qualify.\r\n   * @returns {string} The qualified string.\r\n   */\r\n  function qualify(string) {\r\n    return String(string).replace(/([ -])(?!$)/g, '$1?');\r\n  }\r\n\r\n  /**\r\n   * A bare-bones `Array#reduce` like utility function.\r\n   *\r\n   * @private\r\n   * @param {Array} array The array to iterate over.\r\n   * @param {Function} callback The function called per iteration.\r\n   * @returns {*} The accumulated result.\r\n   */\r\n  function reduce(array, callback) {\r\n    var accumulator = null;\r\n    each(array, function(value, index) {\r\n      accumulator = callback(accumulator, value, index, array);\r\n    });\r\n    return accumulator;\r\n  }\r\n\r\n  /**\r\n   * Removes leading and trailing whitespace from a string.\r\n   *\r\n   * @private\r\n   * @param {string} string The string to trim.\r\n   * @returns {string} The trimmed string.\r\n   */\r\n  function trim(string) {\r\n    return String(string).replace(/^ +| +$/g, '');\r\n  }\r\n\r\n  /*--------------------------------------------------------------------------*/\r\n\r\n  /**\r\n   * Creates a new platform object.\r\n   *\r\n   * @memberOf platform\r\n   * @param {Object|string} [ua=navigator.userAgent] The user agent string or\r\n   *  context object.\r\n   * @returns {Object} A platform object.\r\n   */\r\n  function parse(ua) {\r\n\r\n    /** The environment context object. */\r\n    var context = root;\r\n\r\n    /** Used to flag when a custom context is provided. */\r\n    var isCustomContext = ua && typeof ua == 'object' && getClassOf(ua) != 'String';\r\n\r\n    // Juggle arguments.\r\n    if (isCustomContext) {\r\n      context = ua;\r\n      ua = null;\r\n    }\r\n\r\n    /** Browser navigator object. */\r\n    var nav = context.navigator || {};\r\n\r\n    /** Browser user agent string. */\r\n    var userAgent = nav.userAgent || '';\r\n\r\n    ua || (ua = userAgent);\r\n\r\n    /** Used to flag when `thisBinding` is the [ModuleScope]. */\r\n    var isModuleScope = isCustomContext || thisBinding == oldRoot;\r\n\r\n    /** Used to detect if browser is like Chrome. */\r\n    var likeChrome = isCustomContext\r\n      ? !!nav.likeChrome\r\n      : /\\bChrome\\b/.test(ua) && !/internal|\\n/i.test(toString.toString());\r\n\r\n    /** Internal `[[Class]]` value shortcuts. */\r\n    var objectClass = 'Object',\r\n        airRuntimeClass = isCustomContext ? objectClass : 'ScriptBridgingProxyObject',\r\n        enviroClass = isCustomContext ? objectClass : 'Environment',\r\n        javaClass = (isCustomContext && context.java) ? 'JavaPackage' : getClassOf(context.java),\r\n        phantomClass = isCustomContext ? objectClass : 'RuntimeObject';\r\n\r\n    /** Detect Java environments. */\r\n    var java = /\\bJava/.test(javaClass) && context.java;\r\n\r\n    /** Detect Rhino. */\r\n    var rhino = java && getClassOf(context.environment) == enviroClass;\r\n\r\n    /** A character to represent alpha. */\r\n    var alpha = java ? 'a' : '\\u03b1';\r\n\r\n    /** A character to represent beta. */\r\n    var beta = java ? 'b' : '\\u03b2';\r\n\r\n    /** Browser document object. */\r\n    var doc = context.document || {};\r\n\r\n    /**\r\n     * Detect Opera browser (Presto-based).\r\n     * http://www.howtocreate.co.uk/operaStuff/operaObject.html\r\n     * http://dev.opera.com/articles/view/opera-mini-web-content-authoring-guidelines/#operamini\r\n     */\r\n    var opera = context.operamini || context.opera;\r\n\r\n    /** Opera `[[Class]]`. */\r\n    var operaClass = reOpera.test(operaClass = (isCustomContext && opera) ? opera['[[Class]]'] : getClassOf(opera))\r\n      ? operaClass\r\n      : (opera = null);\r\n\r\n    /*------------------------------------------------------------------------*/\r\n\r\n    /** Temporary variable used over the script's lifetime. */\r\n    var data;\r\n\r\n    /** The CPU architecture. */\r\n    var arch = ua;\r\n\r\n    /** Platform description array. */\r\n    var description = [];\r\n\r\n    /** Platform alpha/beta indicator. */\r\n    var prerelease = null;\r\n\r\n    /** A flag to indicate that environment features should be used to resolve the platform. */\r\n    var useFeatures = ua == userAgent;\r\n\r\n    /** The browser/environment version. */\r\n    var version = useFeatures && opera && typeof opera.version == 'function' && opera.version();\r\n\r\n    /** A flag to indicate if the OS ends with \"/ Version\" */\r\n    var isSpecialCasedOS;\r\n\r\n    /* Detectable layout engines (order is important). */\r\n    var layout = getLayout([\r\n      { 'label': 'EdgeHTML', 'pattern': 'Edge' },\r\n      'Trident',\r\n      { 'label': 'WebKit', 'pattern': 'AppleWebKit' },\r\n      'iCab',\r\n      'Presto',\r\n      'NetFront',\r\n      'Tasman',\r\n      'KHTML',\r\n      'Gecko'\r\n    ]);\r\n\r\n    /* Detectable browser names (order is important). */\r\n    var name = getName([\r\n      'Adobe AIR',\r\n      'Arora',\r\n      'Avant Browser',\r\n      'Breach',\r\n      'Camino',\r\n      'Epiphany',\r\n      'Fennec',\r\n      'Flock',\r\n      'Galeon',\r\n      'GreenBrowser',\r\n      'iCab',\r\n      'Iceweasel',\r\n      'K-Meleon',\r\n      'Konqueror',\r\n      'Lunascape',\r\n      'Maxthon',\r\n      { 'label': 'Microsoft Edge', 'pattern': 'Edge' },\r\n      'Midori',\r\n      'Nook Browser',\r\n      'PaleMoon',\r\n      'PhantomJS',\r\n      'Raven',\r\n      'Rekonq',\r\n      'RockMelt',\r\n      'SeaMonkey',\r\n      { 'label': 'Silk', 'pattern': '(?:Cloud9|Silk-Accelerated)' },\r\n      'Sleipnir',\r\n      'SlimBrowser',\r\n      { 'label': 'SRWare Iron', 'pattern': 'Iron' },\r\n      'Sunrise',\r\n      'Swiftfox',\r\n      'WebPositive',\r\n      'Opera Mini',\r\n      { 'label': 'Opera Mini', 'pattern': 'OPiOS' },\r\n      'Opera',\r\n      { 'label': 'Opera', 'pattern': 'OPR' },\r\n      'Chrome',\r\n      { 'label': 'Chrome Mobile', 'pattern': '(?:CriOS|CrMo)' },\r\n      { 'label': 'Firefox', 'pattern': '(?:Firefox|Minefield)' },\r\n      { 'label': 'Firefox for iOS', 'pattern': 'FxiOS' },\r\n      { 'label': 'IE', 'pattern': 'IEMobile' },\r\n      { 'label': 'IE', 'pattern': 'MSIE' },\r\n      'Safari'\r\n    ]);\r\n\r\n    /* Detectable products (order is important). */\r\n    var product = getProduct([\r\n      { 'label': 'BlackBerry', 'pattern': 'BB10' },\r\n      'BlackBerry',\r\n      { 'label': 'Galaxy S', 'pattern': 'GT-I9000' },\r\n      { 'label': 'Galaxy S2', 'pattern': 'GT-I9100' },\r\n      { 'label': 'Galaxy S3', 'pattern': 'GT-I9300' },\r\n      { 'label': 'Galaxy S4', 'pattern': 'GT-I9500' },\r\n      'Google TV',\r\n      'Lumia',\r\n      'iPad',\r\n      'iPod',\r\n      'iPhone',\r\n      'Kindle',\r\n      { 'label': 'Kindle Fire', 'pattern': '(?:Cloud9|Silk-Accelerated)' },\r\n      'Nexus',\r\n      'Nook',\r\n      'PlayBook',\r\n      'PlayStation 3',\r\n      'PlayStation 4',\r\n      'PlayStation Vita',\r\n      'TouchPad',\r\n      'Transformer',\r\n      { 'label': 'Wii U', 'pattern': 'WiiU' },\r\n      'Wii',\r\n      'Xbox One',\r\n      { 'label': 'Xbox 360', 'pattern': 'Xbox' },\r\n      'Xoom'\r\n    ]);\r\n\r\n    /* Detectable manufacturers. */\r\n    var manufacturer = getManufacturer({\r\n      'Apple': { 'iPad': 1, 'iPhone': 1, 'iPod': 1 },\r\n      'Archos': {},\r\n      'Amazon': { 'Kindle': 1, 'Kindle Fire': 1 },\r\n      'Asus': { 'Transformer': 1 },\r\n      'Barnes & Noble': { 'Nook': 1 },\r\n      'BlackBerry': { 'PlayBook': 1 },\r\n      'Google': { 'Google TV': 1, 'Nexus': 1 },\r\n      'HP': { 'TouchPad': 1 },\r\n      'HTC': {},\r\n      'LG': {},\r\n      'Microsoft': { 'Xbox': 1, 'Xbox One': 1 },\r\n      'Motorola': { 'Xoom': 1 },\r\n      'Nintendo': { 'Wii U': 1,  'Wii': 1 },\r\n      'Nokia': { 'Lumia': 1 },\r\n      'Samsung': { 'Galaxy S': 1, 'Galaxy S2': 1, 'Galaxy S3': 1, 'Galaxy S4': 1 },\r\n      'Sony': { 'PlayStation 4': 1, 'PlayStation 3': 1, 'PlayStation Vita': 1 }\r\n    });\r\n\r\n    /* Detectable operating systems (order is important). */\r\n    var os = getOS([\r\n      'Windows Phone',\r\n      'Android',\r\n      'CentOS',\r\n      { 'label': 'Chrome OS', 'pattern': 'CrOS' },\r\n      'Debian',\r\n      'Fedora',\r\n      'FreeBSD',\r\n      'Gentoo',\r\n      'Haiku',\r\n      'Kubuntu',\r\n      'Linux Mint',\r\n      'OpenBSD',\r\n      'Red Hat',\r\n      'SuSE',\r\n      'Ubuntu',\r\n      'Xubuntu',\r\n      'Cygwin',\r\n      'Symbian OS',\r\n      'hpwOS',\r\n      'webOS ',\r\n      'webOS',\r\n      'Tablet OS',\r\n      'Linux',\r\n      'Mac OS X',\r\n      'Macintosh',\r\n      'Mac',\r\n      'Windows 98;',\r\n      'Windows '\r\n    ]);\r\n\r\n    /*------------------------------------------------------------------------*/\r\n\r\n    /**\r\n     * Picks the layout engine from an array of guesses.\r\n     *\r\n     * @private\r\n     * @param {Array} guesses An array of guesses.\r\n     * @returns {null|string} The detected layout engine.\r\n     */\r\n    function getLayout(guesses) {\r\n      return reduce(guesses, function(result, guess) {\r\n        return result || RegExp('\\\\b' + (\r\n          guess.pattern || qualify(guess)\r\n        ) + '\\\\b', 'i').exec(ua) && (guess.label || guess);\r\n      });\r\n    }\r\n\r\n    /**\r\n     * Picks the manufacturer from an array of guesses.\r\n     *\r\n     * @private\r\n     * @param {Array} guesses An object of guesses.\r\n     * @returns {null|string} The detected manufacturer.\r\n     */\r\n    function getManufacturer(guesses) {\r\n      return reduce(guesses, function(result, value, key) {\r\n        // Lookup the manufacturer by product or scan the UA for the manufacturer.\r\n        return result || (\r\n          value[product] ||\r\n          value[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(product)] ||\r\n          RegExp('\\\\b' + qualify(key) + '(?:\\\\b|\\\\w*\\\\d)', 'i').exec(ua)\r\n        ) && key;\r\n      });\r\n    }\r\n\r\n    /**\r\n     * Picks the browser name from an array of guesses.\r\n     *\r\n     * @private\r\n     * @param {Array} guesses An array of guesses.\r\n     * @returns {null|string} The detected browser name.\r\n     */\r\n    function getName(guesses) {\r\n      return reduce(guesses, function(result, guess) {\r\n        return result || RegExp('\\\\b' + (\r\n          guess.pattern || qualify(guess)\r\n        ) + '\\\\b', 'i').exec(ua) && (guess.label || guess);\r\n      });\r\n    }\r\n\r\n    /**\r\n     * Picks the OS name from an array of guesses.\r\n     *\r\n     * @private\r\n     * @param {Array} guesses An array of guesses.\r\n     * @returns {null|string} The detected OS name.\r\n     */\r\n    function getOS(guesses) {\r\n      return reduce(guesses, function(result, guess) {\r\n        var pattern = guess.pattern || qualify(guess);\r\n        if (!result && (result =\r\n              RegExp('\\\\b' + pattern + '(?:/[\\\\d.]+|[ \\\\w.]*)', 'i').exec(ua)\r\n            )) {\r\n          result = cleanupOS(result, pattern, guess.label || guess);\r\n        }\r\n        return result;\r\n      });\r\n    }\r\n\r\n    /**\r\n     * Picks the product name from an array of guesses.\r\n     *\r\n     * @private\r\n     * @param {Array} guesses An array of guesses.\r\n     * @returns {null|string} The detected product name.\r\n     */\r\n    function getProduct(guesses) {\r\n      return reduce(guesses, function(result, guess) {\r\n        var pattern = guess.pattern || qualify(guess);\r\n        if (!result && (result =\r\n              RegExp('\\\\b' + pattern + ' *\\\\d+[.\\\\w_]*', 'i').exec(ua) ||\r\n              RegExp('\\\\b' + pattern + '(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)', 'i').exec(ua)\r\n            )) {\r\n          // Split by forward slash and append product version if needed.\r\n          if ((result = String((guess.label && !RegExp(pattern, 'i').test(guess.label)) ? guess.label : result).split('/'))[1] && !/[\\d.]+/.test(result[0])) {\r\n            result[0] += ' ' + result[1];\r\n          }\r\n          // Correct character case and cleanup string.\r\n          guess = guess.label || guess;\r\n          result = format(result[0]\r\n            .replace(RegExp(pattern, 'i'), guess)\r\n            .replace(RegExp('; *(?:' + guess + '[_-])?', 'i'), ' ')\r\n            .replace(RegExp('(' + guess + ')[-_.]?(\\\\w)', 'i'), '$1 $2'));\r\n        }\r\n        return result;\r\n      });\r\n    }\r\n\r\n    /**\r\n     * Resolves the version using an array of UA patterns.\r\n     *\r\n     * @private\r\n     * @param {Array} patterns An array of UA patterns.\r\n     * @returns {null|string} The detected version.\r\n     */\r\n    function getVersion(patterns) {\r\n      return reduce(patterns, function(result, pattern) {\r\n        return result || (RegExp(pattern +\r\n          '(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)', 'i').exec(ua) || 0)[1] || null;\r\n      });\r\n    }\r\n\r\n    /**\r\n     * Returns `platform.description` when the platform object is coerced to a string.\r\n     *\r\n     * @name toString\r\n     * @memberOf platform\r\n     * @returns {string} Returns `platform.description` if available, else an empty string.\r\n     */\r\n    function toStringPlatform() {\r\n      return this.description || '';\r\n    }\r\n\r\n    /*------------------------------------------------------------------------*/\r\n\r\n    // Convert layout to an array so we can add extra details.\r\n    layout && (layout = [layout]);\r\n\r\n    // Detect product names that contain their manufacturer's name.\r\n    if (manufacturer && !product) {\r\n      product = getProduct([manufacturer]);\r\n    }\r\n    // Clean up Google TV.\r\n    if ((data = /\\bGoogle TV\\b/.exec(product))) {\r\n      product = data[0];\r\n    }\r\n    // Detect simulators.\r\n    if (/\\bSimulator\\b/i.test(ua)) {\r\n      product = (product ? product + ' ' : '') + 'Simulator';\r\n    }\r\n    // Detect Opera Mini 8+ running in Turbo/Uncompressed mode on iOS.\r\n    if (name == 'Opera Mini' && /\\bOPiOS\\b/.test(ua)) {\r\n      description.push('running in Turbo/Uncompressed mode');\r\n    }\r\n    // Detect IE Mobile 11.\r\n    if (name == 'IE' && /\\blike iPhone OS\\b/.test(ua)) {\r\n      data = parse(ua.replace(/like iPhone OS/, ''));\r\n      manufacturer = data.manufacturer;\r\n      product = data.product;\r\n    }\r\n    // Detect iOS.\r\n    else if (/^iP/.test(product)) {\r\n      name || (name = 'Safari');\r\n      os = 'iOS' + ((data = / OS ([\\d_]+)/i.exec(ua))\r\n        ? ' ' + data[1].replace(/_/g, '.')\r\n        : '');\r\n    }\r\n    // Detect Kubuntu.\r\n    else if (name == 'Konqueror' && !/buntu/i.test(os)) {\r\n      os = 'Kubuntu';\r\n    }\r\n    // Detect Android browsers.\r\n    else if ((manufacturer && manufacturer != 'Google' &&\r\n        ((/Chrome/.test(name) && !/\\bMobile Safari\\b/i.test(ua)) || /\\bVita\\b/.test(product))) ||\r\n        (/\\bAndroid\\b/.test(os) && /^Chrome/.test(name) && /\\bVersion\\//i.test(ua))) {\r\n      name = 'Android Browser';\r\n      os = /\\bAndroid\\b/.test(os) ? os : 'Android';\r\n    }\r\n    // Detect Silk desktop/accelerated modes.\r\n    else if (name == 'Silk') {\r\n      if (!/\\bMobi/i.test(ua)) {\r\n        os = 'Android';\r\n        description.unshift('desktop mode');\r\n      }\r\n      if (/Accelerated *= *true/i.test(ua)) {\r\n        description.unshift('accelerated');\r\n      }\r\n    }\r\n    // Detect PaleMoon identifying as Firefox.\r\n    else if (name == 'PaleMoon' && (data = /\\bFirefox\\/([\\d.]+)\\b/.exec(ua))) {\r\n      description.push('identifying as Firefox ' + data[1]);\r\n    }\r\n    // Detect Firefox OS and products running Firefox.\r\n    else if (name == 'Firefox' && (data = /\\b(Mobile|Tablet|TV)\\b/i.exec(ua))) {\r\n      os || (os = 'Firefox OS');\r\n      product || (product = data[1]);\r\n    }\r\n    // Detect false positives for Firefox/Safari.\r\n    else if (!name || (data = !/\\bMinefield\\b/i.test(ua) && /\\b(?:Firefox|Safari)\\b/.exec(name))) {\r\n      // Escape the `/` for Firefox 1.\r\n      if (name && !product && /[\\/,]|^[^(]+?\\)/.test(ua.slice(ua.indexOf(data + '/') + 8))) {\r\n        // Clear name of false positives.\r\n        name = null;\r\n      }\r\n      // Reassign a generic name.\r\n      if ((data = product || manufacturer || os) &&\r\n          (product || manufacturer || /\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(os))) {\r\n        name = /[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(os) ? os : data) + ' Browser';\r\n      }\r\n    }\r\n    // Detect non-Opera (Presto-based) versions (order is important).\r\n    if (!version) {\r\n      version = getVersion([\r\n        '(?:Cloud9|CriOS|CrMo|Edge|FxiOS|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|Silk(?!/[\\\\d.]+$))',\r\n        'Version',\r\n        qualify(name),\r\n        '(?:Firefox|Minefield|NetFront)'\r\n      ]);\r\n    }\r\n    // Detect stubborn layout engines.\r\n    if ((data =\r\n          layout == 'iCab' && parseFloat(version) > 3 && 'WebKit' ||\r\n          /\\bOpera\\b/.test(name) && (/\\bOPR\\b/.test(ua) ? 'Blink' : 'Presto') ||\r\n          /\\b(?:Midori|Nook|Safari)\\b/i.test(ua) && !/^(?:Trident|EdgeHTML)$/.test(layout) && 'WebKit' ||\r\n          !layout && /\\bMSIE\\b/i.test(ua) && (os == 'Mac OS' ? 'Tasman' : 'Trident') ||\r\n          layout == 'WebKit' && /\\bPlayStation\\b(?! Vita\\b)/i.test(name) && 'NetFront'\r\n        )) {\r\n      layout = [data];\r\n    }\r\n    // Detect Windows Phone 7 desktop mode.\r\n    if (name == 'IE' && (data = (/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(ua) || 0)[1])) {\r\n      name += ' Mobile';\r\n      os = 'Windows Phone ' + (/\\+$/.test(data) ? data : data + '.x');\r\n      description.unshift('desktop mode');\r\n    }\r\n    // Detect Windows Phone 8.x desktop mode.\r\n    else if (/\\bWPDesktop\\b/i.test(ua)) {\r\n      name = 'IE Mobile';\r\n      os = 'Windows Phone 8.x';\r\n      description.unshift('desktop mode');\r\n      version || (version = (/\\brv:([\\d.]+)/.exec(ua) || 0)[1]);\r\n    }\r\n    // Detect IE 11.\r\n    else if (name != 'IE' && layout == 'Trident' && (data = /\\brv:([\\d.]+)/.exec(ua))) {\r\n      if (name) {\r\n        description.push('identifying as ' + name + (version ? ' ' + version : ''));\r\n      }\r\n      name = 'IE';\r\n      version = data[1];\r\n    }\r\n    // Leverage environment features.\r\n    if (useFeatures) {\r\n      // Detect server-side environments.\r\n      // Rhino has a global function while others have a global object.\r\n      if (isHostType(context, 'global')) {\r\n        if (java) {\r\n          data = java.lang.System;\r\n          arch = data.getProperty('os.arch');\r\n          os = os || data.getProperty('os.name') + ' ' + data.getProperty('os.version');\r\n        }\r\n        if (isModuleScope && isHostType(context, 'system') && (data = [context.system])[0]) {\r\n          os || (os = data[0].os || null);\r\n          try {\r\n            data[1] = context.require('ringo/engine').version;\r\n            version = data[1].join('.');\r\n            name = 'RingoJS';\r\n          } catch(e) {\r\n            if (data[0].global.system == context.system) {\r\n              name = 'Narwhal';\r\n            }\r\n          }\r\n        }\r\n        else if (\r\n          typeof context.process == 'object' && !context.process.browser &&\r\n          (data = context.process)\r\n        ) {\r\n          name = 'Node.js';\r\n          arch = data.arch;\r\n          os = data.platform;\r\n          version = /[\\d.]+/.exec(data.version)[0];\r\n        }\r\n        else if (rhino) {\r\n          name = 'Rhino';\r\n        }\r\n      }\r\n      // Detect Adobe AIR.\r\n      else if (getClassOf((data = context.runtime)) == airRuntimeClass) {\r\n        name = 'Adobe AIR';\r\n        os = data.flash.system.Capabilities.os;\r\n      }\r\n      // Detect PhantomJS.\r\n      else if (getClassOf((data = context.phantom)) == phantomClass) {\r\n        name = 'PhantomJS';\r\n        version = (data = data.version || null) && (data.major + '.' + data.minor + '.' + data.patch);\r\n      }\r\n      // Detect IE compatibility modes.\r\n      else if (typeof doc.documentMode == 'number' && (data = /\\bTrident\\/(\\d+)/i.exec(ua))) {\r\n        // We're in compatibility mode when the Trident version + 4 doesn't\r\n        // equal the document mode.\r\n        version = [version, doc.documentMode];\r\n        if ((data = +data[1] + 4) != version[1]) {\r\n          description.push('IE ' + version[1] + ' mode');\r\n          layout && (layout[1] = '');\r\n          version[1] = data;\r\n        }\r\n        version = name == 'IE' ? String(version[1].toFixed(1)) : version[0];\r\n      }\r\n      os = os && format(os);\r\n    }\r\n    // Detect prerelease phases.\r\n    if (version && (data =\r\n          /(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(version) ||\r\n          /(?:alpha|beta)(?: ?\\d)?/i.exec(ua + ';' + (useFeatures && nav.appMinorVersion)) ||\r\n          /\\bMinefield\\b/i.test(ua) && 'a'\r\n        )) {\r\n      prerelease = /b/i.test(data) ? 'beta' : 'alpha';\r\n      version = version.replace(RegExp(data + '\\\\+?$'), '') +\r\n        (prerelease == 'beta' ? beta : alpha) + (/\\d+\\+?/.exec(data) || '');\r\n    }\r\n    // Detect Firefox Mobile.\r\n    if (name == 'Fennec' || name == 'Firefox' && /\\b(?:Android|Firefox OS)\\b/.test(os)) {\r\n      name = 'Firefox Mobile';\r\n    }\r\n    // Obscure Maxthon's unreliable version.\r\n    else if (name == 'Maxthon' && version) {\r\n      version = version.replace(/\\.[\\d.]+/, '.x');\r\n    }\r\n    // Detect Xbox 360 and Xbox One.\r\n    else if (/\\bXbox\\b/i.test(product)) {\r\n      os = null;\r\n      if (product == 'Xbox 360' && /\\bIEMobile\\b/.test(ua)) {\r\n        description.unshift('mobile mode');\r\n      }\r\n    }\r\n    // Add mobile postfix.\r\n    else if ((/^(?:Chrome|IE|Opera)$/.test(name) || name && !product && !/Browser|Mobi/.test(name)) &&\r\n        (os == 'Windows CE' || /Mobi/i.test(ua))) {\r\n      name += ' Mobile';\r\n    }\r\n    // Detect IE platform preview.\r\n    else if (name == 'IE' && useFeatures && context.external === null) {\r\n      description.unshift('platform preview');\r\n    }\r\n    // Detect BlackBerry OS version.\r\n    // http://docs.blackberry.com/en/developers/deliverables/18169/HTTP_headers_sent_by_BB_Browser_1234911_11.jsp\r\n    else if ((/\\bBlackBerry\\b/.test(product) || /\\bBB10\\b/.test(ua)) && (data =\r\n          (RegExp(product.replace(/ +/g, ' *') + '/([.\\\\d]+)', 'i').exec(ua) || 0)[1] ||\r\n          version\r\n        )) {\r\n      data = [data, /BB10/.test(ua)];\r\n      os = (data[1] ? (product = null, manufacturer = 'BlackBerry') : 'Device Software') + ' ' + data[0];\r\n      version = null;\r\n    }\r\n    // Detect Opera identifying/masking itself as another browser.\r\n    // http://www.opera.com/support/kb/view/843/\r\n    else if (this != forOwn && product != 'Wii' && (\r\n          (useFeatures && opera) ||\r\n          (/Opera/.test(name) && /\\b(?:MSIE|Firefox)\\b/i.test(ua)) ||\r\n          (name == 'Firefox' && /\\bOS X (?:\\d+\\.){2,}/.test(os)) ||\r\n          (name == 'IE' && (\r\n            (os && !/^Win/.test(os) && version > 5.5) ||\r\n            /\\bWindows XP\\b/.test(os) && version > 8 ||\r\n            version == 8 && !/\\bTrident\\b/.test(ua)\r\n          ))\r\n        ) && !reOpera.test((data = parse.call(forOwn, ua.replace(reOpera, '') + ';'))) && data.name) {\r\n      // When \"identifying\", the UA contains both Opera and the other browser's name.\r\n      data = 'ing as ' + data.name + ((data = data.version) ? ' ' + data : '');\r\n      if (reOpera.test(name)) {\r\n        if (/\\bIE\\b/.test(data) && os == 'Mac OS') {\r\n          os = null;\r\n        }\r\n        data = 'identify' + data;\r\n      }\r\n      // When \"masking\", the UA contains only the other browser's name.\r\n      else {\r\n        data = 'mask' + data;\r\n        if (operaClass) {\r\n          name = format(operaClass.replace(/([a-z])([A-Z])/g, '$1 $2'));\r\n        } else {\r\n          name = 'Opera';\r\n        }\r\n        if (/\\bIE\\b/.test(data)) {\r\n          os = null;\r\n        }\r\n        if (!useFeatures) {\r\n          version = null;\r\n        }\r\n      }\r\n      layout = ['Presto'];\r\n      description.push(data);\r\n    }\r\n    // Detect WebKit Nightly and approximate Chrome/Safari versions.\r\n    if ((data = (/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(ua) || 0)[1])) {\r\n      // Correct build number for numeric comparison.\r\n      // (e.g. \"532.5\" becomes \"532.05\")\r\n      data = [parseFloat(data.replace(/\\.(\\d)$/, '.0$1')), data];\r\n      // Nightly builds are postfixed with a \"+\".\r\n      if (name == 'Safari' && data[1].slice(-1) == '+') {\r\n        name = 'WebKit Nightly';\r\n        prerelease = 'alpha';\r\n        version = data[1].slice(0, -1);\r\n      }\r\n      // Clear incorrect browser versions.\r\n      else if (version == data[1] ||\r\n          version == (data[2] = (/\\bSafari\\/([\\d.]+\\+?)/i.exec(ua) || 0)[1])) {\r\n        version = null;\r\n      }\r\n      // Use the full Chrome version when available.\r\n      data[1] = (/\\bChrome\\/([\\d.]+)/i.exec(ua) || 0)[1];\r\n      // Detect Blink layout engine.\r\n      if (data[0] == 537.36 && data[2] == 537.36 && parseFloat(data[1]) >= 28 && layout == 'WebKit') {\r\n        layout = ['Blink'];\r\n      }\r\n      // Detect JavaScriptCore.\r\n      // http://stackoverflow.com/questions/6768474/how-can-i-detect-which-javascript-engine-v8-or-jsc-is-used-at-runtime-in-androi\r\n      if (!useFeatures || (!likeChrome && !data[1])) {\r\n        layout && (layout[1] = 'like Safari');\r\n        data = (data = data[0], data < 400 ? 1 : data < 500 ? 2 : data < 526 ? 3 : data < 533 ? 4 : data < 534 ? '4+' : data < 535 ? 5 : data < 537 ? 6 : data < 538 ? 7 : data < 601 ? 8 : '8');\r\n      } else {\r\n        layout && (layout[1] = 'like Chrome');\r\n        data = data[1] || (data = data[0], data < 530 ? 1 : data < 532 ? 2 : data < 532.05 ? 3 : data < 533 ? 4 : data < 534.03 ? 5 : data < 534.07 ? 6 : data < 534.10 ? 7 : data < 534.13 ? 8 : data < 534.16 ? 9 : data < 534.24 ? 10 : data < 534.30 ? 11 : data < 535.01 ? 12 : data < 535.02 ? '13+' : data < 535.07 ? 15 : data < 535.11 ? 16 : data < 535.19 ? 17 : data < 536.05 ? 18 : data < 536.10 ? 19 : data < 537.01 ? 20 : data < 537.11 ? '21+' : data < 537.13 ? 23 : data < 537.18 ? 24 : data < 537.24 ? 25 : data < 537.36 ? 26 : layout != 'Blink' ? '27' : '28');\r\n      }\r\n      // Add the postfix of \".x\" or \"+\" for approximate versions.\r\n      layout && (layout[1] += ' ' + (data += typeof data == 'number' ? '.x' : /[.+]/.test(data) ? '' : '+'));\r\n      // Obscure version for some Safari 1-2 releases.\r\n      if (name == 'Safari' && (!version || parseInt(version) > 45)) {\r\n        version = data;\r\n      }\r\n    }\r\n    // Detect Opera desktop modes.\r\n    if (name == 'Opera' &&  (data = /\\bzbov|zvav$/.exec(os))) {\r\n      name += ' ';\r\n      description.unshift('desktop mode');\r\n      if (data == 'zvav') {\r\n        name += 'Mini';\r\n        version = null;\r\n      } else {\r\n        name += 'Mobile';\r\n      }\r\n      os = os.replace(RegExp(' *' + data + '$'), '');\r\n    }\r\n    // Detect Chrome desktop mode.\r\n    else if (name == 'Safari' && /\\bChrome\\b/.exec(layout && layout[1])) {\r\n      description.unshift('desktop mode');\r\n      name = 'Chrome Mobile';\r\n      version = null;\r\n\r\n      if (/\\bOS X\\b/.test(os)) {\r\n        manufacturer = 'Apple';\r\n        os = 'iOS 4.3+';\r\n      } else {\r\n        os = null;\r\n      }\r\n    }\r\n    // Strip incorrect OS versions.\r\n    if (version && version.indexOf((data = /[\\d.]+$/.exec(os))) == 0 &&\r\n        ua.indexOf('/' + data + '-') > -1) {\r\n      os = trim(os.replace(data, ''));\r\n    }\r\n    // Add layout engine.\r\n    if (layout && !/\\b(?:Avant|Nook)\\b/.test(name) && (\r\n        /Browser|Lunascape|Maxthon/.test(name) ||\r\n        name != 'Safari' && /^iOS/.test(os) && /\\bSafari\\b/.test(layout[1]) ||\r\n        /^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Sleipnir|Web)/.test(name) && layout[1])) {\r\n      // Don't add layout details to description if they are falsey.\r\n      (data = layout[layout.length - 1]) && description.push(data);\r\n    }\r\n    // Combine contextual information.\r\n    if (description.length) {\r\n      description = ['(' + description.join('; ') + ')'];\r\n    }\r\n    // Append manufacturer to description.\r\n    if (manufacturer && product && product.indexOf(manufacturer) < 0) {\r\n      description.push('on ' + manufacturer);\r\n    }\r\n    // Append product to description.\r\n    if (product) {\r\n      description.push((/^on /.test(description[description.length - 1]) ? '' : 'on ') + product);\r\n    }\r\n    // Parse the OS into an object.\r\n    if (os) {\r\n      data = / ([\\d.+]+)$/.exec(os);\r\n      isSpecialCasedOS = data && os.charAt(os.length - data[0].length - 1) == '/';\r\n      os = {\r\n        'architecture': 32,\r\n        'family': (data && !isSpecialCasedOS) ? os.replace(data[0], '') : os,\r\n        'version': data ? data[1] : null,\r\n        'toString': function() {\r\n          var version = this.version;\r\n          return this.family + ((version && !isSpecialCasedOS) ? ' ' + version : '') + (this.architecture == 64 ? ' 64-bit' : '');\r\n        }\r\n      };\r\n    }\r\n    // Add browser/OS architecture.\r\n    if ((data = /\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(arch)) && !/\\bi686\\b/i.test(arch)) {\r\n      if (os) {\r\n        os.architecture = 64;\r\n        os.family = os.family.replace(RegExp(' *' + data), '');\r\n      }\r\n      if (\r\n          name && (/\\bWOW64\\b/i.test(ua) ||\r\n          (useFeatures && /\\w(?:86|32)$/.test(nav.cpuClass || nav.platform) && !/\\bWin64; x64\\b/i.test(ua)))\r\n      ) {\r\n        description.unshift('32-bit');\r\n      }\r\n    }\r\n    // Chrome 39 and above on OS X is always 64-bit.\r\n    else if (\r\n        os && /^OS X/.test(os.family) &&\r\n        name == 'Chrome' && parseFloat(version) >= 39\r\n    ) {\r\n      os.architecture = 64;\r\n    }\r\n\r\n    ua || (ua = null);\r\n\r\n    /*------------------------------------------------------------------------*/\r\n\r\n    /**\r\n     * The platform object.\r\n     *\r\n     * @name platform\r\n     * @type Object\r\n     */\r\n    var platform = {};\r\n\r\n    /**\r\n     * The platform description.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.description = ua;\r\n\r\n    /**\r\n     * The name of the browser's layout engine.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.layout = layout && layout[0];\r\n\r\n    /**\r\n     * The name of the product's manufacturer.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.manufacturer = manufacturer;\r\n\r\n    /**\r\n     * The name of the browser/environment.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.name = name;\r\n\r\n    /**\r\n     * The alpha/beta release indicator.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.prerelease = prerelease;\r\n\r\n    /**\r\n     * The name of the product hosting the browser.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.product = product;\r\n\r\n    /**\r\n     * The browser's user agent string.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.ua = ua;\r\n\r\n    /**\r\n     * The browser/environment version.\r\n     *\r\n     * @memberOf platform\r\n     * @type string|null\r\n     */\r\n    platform.version = name && version;\r\n\r\n    /**\r\n     * The name of the operating system.\r\n     *\r\n     * @memberOf platform\r\n     * @type Object\r\n     */\r\n    platform.os = os || {\r\n\r\n      /**\r\n       * The CPU architecture the OS is built for.\r\n       *\r\n       * @memberOf platform.os\r\n       * @type number|null\r\n       */\r\n      'architecture': null,\r\n\r\n      /**\r\n       * The family of the OS.\r\n       *\r\n       * Common values include:\r\n       * \"Windows\", \"Windows Server 2008 R2 / 7\", \"Windows Server 2008 / Vista\",\r\n       * \"Windows XP\", \"OS X\", \"Ubuntu\", \"Debian\", \"Fedora\", \"Red Hat\", \"SuSE\",\r\n       * \"Android\", \"iOS\" and \"Windows Phone\"\r\n       *\r\n       * @memberOf platform.os\r\n       * @type string|null\r\n       */\r\n      'family': null,\r\n\r\n      /**\r\n       * The version of the OS.\r\n       *\r\n       * @memberOf platform.os\r\n       * @type string|null\r\n       */\r\n      'version': null,\r\n\r\n      /**\r\n       * Returns the OS string.\r\n       *\r\n       * @memberOf platform.os\r\n       * @returns {string} The OS string.\r\n       */\r\n      'toString': function() { return 'null'; }\r\n    };\r\n\r\n    platform.parse = parse;\r\n    platform.toString = toStringPlatform;\r\n\r\n    if (platform.version) {\r\n      description.unshift(version);\r\n    }\r\n    if (platform.name) {\r\n      description.unshift(name);\r\n    }\r\n    if (os && name && !(os == String(os).split(' ')[0] && (os == name.split(' ')[0] || product))) {\r\n      description.push(product ? '(' + os + ')' : 'on ' + os);\r\n    }\r\n    if (description.length) {\r\n      platform.description = description.join(' ');\r\n    }\r\n    return platform;\r\n  }\r\n\r\n  /*--------------------------------------------------------------------------*/\r\n\r\n  // Export platform.\r\n  var platform = parse();\r\n\r\n  // Some AMD build optimizers, like r.js, check for condition patterns like the following:\r\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\r\n    // Expose platform on the global object to prevent errors when platform is\r\n    // loaded by a script tag in the presence of an AMD loader.\r\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\r\n    root.platform = platform;\r\n\r\n    // Define as an anonymous module so platform can be aliased through path mapping.\r\n    define(function() {\r\n      return platform;\r\n    });\r\n  }\r\n  // Check for `exports` after `define` in case a build optimizer adds an `exports` object.\r\n  else if (freeExports && freeModule) {\r\n    // Export for CommonJS support.\r\n    forOwn(platform, function(value, key) {\r\n      freeExports[key] = value;\r\n    });\r\n  }\r\n  else {\r\n    // Export to the global object.\r\n    root.platform = platform;\r\n  }\r\n}.call(this));\r\n"]}