").attr("id",b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(b){a.isArray(b)&&(b.length?b.length===this.anchors.length&&(b=!0):b=!1);for(var c,d=0;c=this.tabs[d];d++)b===!0||-1!==a.inArray(d,b)?a(c).addClass("ui-state-disabled").attr("aria-disabled","true"):a(c).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=b},_setupEvents:function(b){var c={click:function(a){a.preventDefault()}};b&&a.each(b.split(" "),function(a,b){c[b]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,c),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(b){var c,d=this.element.parent();"fill"===b?(c=d.height(),c-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var b=a(this),d=b.css("position");"absolute"!==d&&"fixed"!==d&&(c-=b.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){c-=a(this).outerHeight(!0)
+}),this.panels.each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")):"auto"===b&&(c=0,this.panels.each(function(){c=Math.max(c,a(this).height("").height())}).height(c))},_eventHandler:function(b){var c=this.options,d=this.active,e=a(b.currentTarget),f=e.closest("li"),g=f[0]===d[0],h=g&&c.collapsible,i=h?a():this._getPanelForTab(f),j=d.length?this._getPanelForTab(d):a(),k={oldTab:d,oldPanel:j,newTab:h?a():f,newPanel:i};b.preventDefault(),f.hasClass("ui-state-disabled")||f.hasClass("ui-tabs-loading")||this.running||g&&!c.collapsible||this._trigger("beforeActivate",b,k)===!1||(c.active=h?!1:this.tabs.index(f),this.active=g?a():f,this.xhr&&this.xhr.abort(),j.length||i.length||a.error("jQuery UI Tabs: Mismatching fragment identifier."),i.length&&this.load(this.tabs.index(f),b),this._toggle(b,k))},_toggle:function(b,c){function d(){f.running=!1,f._trigger("activate",b,c)}function e(){c.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),g.length&&f.options.show?f._show(g,f.options.show,d):(g.show(),d())}var f=this,g=c.newPanel,h=c.oldPanel;this.running=!0,h.length&&this.options.hide?this._hide(h,this.options.hide,function(){c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),e()}):(c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),h.hide(),e()),h.attr({"aria-expanded":"false","aria-hidden":"true"}),c.oldTab.attr("aria-selected","false"),g.length&&h.length?c.oldTab.attr("tabIndex",-1):g.length&&this.tabs.filter(function(){return 0===a(this).attr("tabIndex")}).attr("tabIndex",-1),g.attr({"aria-expanded":"true","aria-hidden":"false"}),c.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(b){var c,d=this._findActive(b);d[0]!==this.active[0]&&(d.length||(d=this.active),c=d.find(".ui-tabs-anchor")[0],this._eventHandler({target:c,currentTarget:c,preventDefault:a.noop}))},_findActive:function(b){return b===!1?a():this.tabs.eq(b)},_getIndex:function(a){return"string"==typeof a&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){a.data(this,"ui-tabs-destroy")?a(this).remove():a(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var b=a(this),c=b.data("ui-tabs-aria-controls");c?b.attr("aria-controls",c).removeData("ui-tabs-aria-controls"):b.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(c){var d=this.options.disabled;d!==!1&&(c===b?d=!1:(c=this._getIndex(c),d=a.isArray(d)?a.map(d,function(a){return a!==c?a:null}):a.map(this.tabs,function(a,b){return b!==c?b:null})),this._setupDisabled(d))},disable:function(c){var d=this.options.disabled;if(d!==!0){if(c===b)d=!0;else{if(c=this._getIndex(c),-1!==a.inArray(c,d))return;d=a.isArray(d)?a.merge([c],d).sort():[c]}this._setupDisabled(d)}},load:function(b,c){b=this._getIndex(b);var e=this,f=this.tabs.eq(b),g=f.find(".ui-tabs-anchor"),h=this._getPanelForTab(f),i={tab:f,panel:h};d(g[0])||(this.xhr=a.ajax(this._ajaxSettings(g,c,i)),this.xhr&&"canceled"!==this.xhr.statusText&&(f.addClass("ui-tabs-loading"),h.attr("aria-busy","true"),this.xhr.success(function(a){setTimeout(function(){h.html(a),e._trigger("load",c,i)},1)}).complete(function(a,b){setTimeout(function(){"abort"===b&&e.panels.stop(!1,!0),f.removeClass("ui-tabs-loading"),h.removeAttr("aria-busy"),a===e.xhr&&delete e.xhr},1)})))},_ajaxSettings:function(b,c,d){var e=this;return{url:b.attr("href"),beforeSend:function(b,f){return e._trigger("beforeLoad",c,a.extend({jqXHR:b,ajaxSettings:f},d))}}},_getPanelForTab:function(b){var c=a(b).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+c))}})}(a),function(){}(a),function(a,b){function c(a){e=a.originalEvent,i=e.accelerationIncludingGravity,f=Math.abs(i.x),g=Math.abs(i.y),h=Math.abs(i.z),!b.orientation&&(f>7||(h>6&&8>g||8>h&&g>6)&&f>5)?d.enabled&&d.disable():d.enabled||d.enable()}a.mobile.iosorientationfixEnabled=!0;var d,e,f,g,h,i,j=navigator.userAgent;return/iPhone|iPad|iPod/.test(navigator.platform)&&/OS [1-5]_[0-9_]* like Mac OS X/i.test(j)&&j.indexOf("AppleWebKit")>-1?(d=a.mobile.zoom,void a.mobile.document.on("mobileinit",function(){a.mobile.iosorientationfixEnabled&&a.mobile.window.bind("orientationchange.iosorientationfix",d.enable).bind("devicemotion.iosorientationfix",c)})):void(a.mobile.iosorientationfixEnabled=!1)}(a,this),function(a,b,d){function e(){f.removeClass("ui-mobile-rendering")}var f=a("html"),g=a.mobile.window;a(b.document).trigger("mobileinit"),a.mobile.gradeA()&&(a.mobile.ajaxBlacklist&&(a.mobile.ajaxEnabled=!1),f.addClass("ui-mobile ui-mobile-rendering"),setTimeout(e,5e3),a.extend(a.mobile,{initializePage:function(){var b=a.mobile.path,f=a(":jqmData(role='page'), :jqmData(role='dialog')"),h=b.stripHash(b.stripQueryParams(b.parseLocation().hash)),i=a.mobile.path.parseLocation(),j=h?c.getElementById(h):d;f.length||(f=a("body").wrapInner("
").children(0)),f.each(function(){var c=a(this);c[0].getAttribute("data-"+a.mobile.ns+"url")||c.attr("data-"+a.mobile.ns+"url",c.attr("id")||b.convertUrlToDataUrl(i.pathname+i.search))}),a.mobile.firstPage=f.first(),a.mobile.pageContainer=a.mobile.firstPage.parent().addClass("ui-mobile-viewport").pagecontainer(),a.mobile.navreadyDeferred.resolve(),g.trigger("pagecontainercreate"),a.mobile.loading("show"),e(),a.mobile.hashListeningEnabled&&a.mobile.path.isHashValid(location.hash)&&(a(j).is(":jqmData(role='page')")||a.mobile.path.isPath(h)||h===a.mobile.dialogHashKey)?a.event.special.navigate.isPushStateEnabled()?(a.mobile.navigate.history.stack=[],a.mobile.navigate(a.mobile.path.isPath(location.hash)?location.hash:location.href)):g.trigger("hashchange",[!0]):(a.event.special.navigate.isPushStateEnabled()&&a.mobile.navigate.navigator.squash(b.parseLocation().href),a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0}))}}),a(function(){a.support.inlineSVG(),a.mobile.hideUrlBar&&b.scrollTo(0,1),a.mobile.defaultHomeScroll=a.support.scrollTop&&1!==a.mobile.window.scrollTop()?1:0,a.mobile.autoInitializePage&&a.mobile.initializePage(),a.mobile.hideUrlBar&&g.load(a.mobile.silentScroll),a.support.cssPointerEvents||a.mobile.document.delegate(".ui-state-disabled,.ui-disabled","vclick",function(a){a.preventDefault(),a.stopImmediatePropagation()})}))}(a,this)});
+//# sourceMappingURL=jquery.mobile-1.4.5.min.map
\ No newline at end of file
diff --git a/XPST/Scripts/jquery.mobile-1.4.5.min.map b/XPST/Scripts/jquery.mobile-1.4.5.min.map
new file mode 100644
index 0000000..852c422
--- /dev/null
+++ b/XPST/Scripts/jquery.mobile-1.4.5.min.map
@@ -0,0 +1 @@
+{"version":3,"file":"jquery.mobile-1.4.5.min.js","sources":["jquery.mobile-1.4.5.js"],"names":["root","doc","factory","define","amd","$","mobile","jQuery","this","document","window","undefined","focusable","element","isTabIndexNotNaN","map","mapName","img","nodeName","toLowerCase","parentNode","name","href","visible","test","disabled","expr","filters","parents","addBack","filter","css","length","uuid","runiqueId","ui","extend","version","keyCode","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","fn","focus","orig","delay","each","elem","setTimeout","call","apply","arguments","scrollParent","ie","eq","ownerDocument","uniqueId","id","removeUniqueId","removeAttr","data","createPseudo","dataName","i","match","isNaN","attr","tabbable","tabIndex","isTabIndexNaN","outerWidth","jquery","reduce","size","border","margin","side","parseFloat","type","innerWidth","innerHeight","outerHeight","selector","add","prevObject","removeData","key","camelCase","exec","navigator","userAgent","support","selectstart","createElement","disableSelection","bind","event","preventDefault","enableSelection","unbind","zIndex","position","value","parseInt","parent","plugin","module","option","set","proto","prototype","plugins","push","instance","args","allowDisconnected","nodeType","options","compensateToolbars","page","desiredHeight","pageParent","toolbarsAffectingHeight","noPadders","theElement","widgetOptions","toolbar","ns","updatePagePadding","externalHeaders","children","internalHeaders","externalFooters","internalFooters","concat","toArray","index","Math","max","behaviors","silentScroll","ypos","defaultHomeScroll","special","scrollstart","enabled","scrollTo","trigger","x","y","getClosestBaseUrl","ele","url","closest","jqmData","base","path","documentBase","hrefNoHash","dynamicBaseEnabled","isPath","makeUrlAbsolute","removeActiveLinkClass","forceRemoval","activeClickedLink","activePageClass","removeClass","activeBtnClass","getInheritedTheme","el","defaultTheme","c","m","e","ltr","re","className","enhanceable","elements","haveParents","hijackable","ignoreContentEnabled","$element","excluded","count","$newSet","getAttribute","getScreenHeight","height","resetActivePageHeight","pageHeight","pageOuterHeight","loading","loader","_widget","defaultHtml","returnValue","addDependents","newDependents","$elem","dependents","removeWithDependents","enhanceWithin","widgetElements","keepNative","keepNativeSelector","that","nojs","links","degradeInputsWithin","buttonMarkup","find","initSelector","not","jqmEnhanceable","fieldcontain","widgets","constructor","widgetName","getEncodedText","text","html","jqmHijackable","nativeElement","remove","matches","matchesSelector","node","subPageUrlKey","hideUrlBar","focusClass","ajaxEnabled","hashListeningEnabled","linkBindingEnabled","defaultPageTransition","maxTransitionWidth","minScrollBack","defaultDialogTransition","pageLoadErrorMessage","pageLoadErrorMessageTheme","phonegapNavigationEnabled","autoInitializePage","pushStateEnabled","hoverDelay","pageContainer","allowCrossDomainPages","dialogHashKey","slice","Array","_cleanData","cleanData","elems","triggerHandler","widget","fullName","existingConstructor","basePrototype","proxiedPrototype","namespace","split","Widget","_createWidget","_proto","_childConstructors","prop","isFunction","_super","_superApply","__super","__superApply","widgetEventPrefix","widgetFullName","child","childPrototype","bridge","target","input","inputIndex","inputLength","hasOwnProperty","isPlainObject","object","isMethodCall","methodValue","charAt","pushStack","get","error","_init","defaultElement","create","eventNamespace","_getCreateOptions","bindings","hoverable","_on","destroy","style","defaultView","parentWindow","_create","_trigger","_getCreateEventData","noop","_destroy","parts","curOption","shift","pop","_setOptions","_setOption","toggleClass","enable","disable","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","hasClass","guid","eventName","delegate","_off","join","undelegate","_delay","_hoverable","mouseenter","currentTarget","addClass","mouseleave","_focusable","focusin","focusout","callback","Event","originalEvent","isDefaultPrevented","show","hide","method","defaultEffect","effect","hasOptions","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","nsNormalizeDict","oldFind","rbrace","jqmDataRE","JSON","parse","err","nsNormalize","closestPageData","$target","result","jqmRemoveData","context","ret","extra","indexOf","replace","rcapitals","replaceFunction","loaderClass","$html","theme","textVisible","fakeFixLoader","activeBtn","first","top","scrollTop","offset","checkLoaderPosition","screenHeight","proxy","resetHtml","msgText","textonly","message","loadSettings","appendTo","pagecontainer","get_fragment","location","fake_onhashchange","str_hashchange","doc_mode","documentMode","supports_onhashchange","setup","start","teardown","stop","poll","hash","history_hash","history_get","last_hash","history_set","timeout_id","self","fn_retval","val","clearTimeout","attachEvent","addEventListener","iframe","iframe_src","src","one","insertAfter","contentWindow","onpropertychange","propertyName","title","iframe_doc","domain","open","write","close","matchMedia","bool","docElem","documentElement","refNode","firstElementChild","firstChild","fakeBody","div","cssText","background","appendChild","q","innerHTML","insertBefore","offsetWidth","removeChild","media","touch","orientation","propExists","v","uc_prop","toUpperCase","substr","props","vendors","fbCSS","inlineSVG","w","svg","createElementNS","createSVGRect","opera","Image","onerror","onload","width","transform3dTest","transforms","t","mqProp","MozTransform","transform","append","getComputedStyle","getPropertyValue","baseTagTest","link","rebase","fauxBase","protocol","host","pathname","fauxEle","prependTo","cssPointerEventsTest","supports","pointerEvents","boundingRect","getBoundingClientRect","fixedPosition","ua","platform","wkmatch","wkversion","ffmatch","ffversion","operammobilematch","omversion","operamini","toString","nokiaLTE7_3","webos","bb","blackberry","browser","oldIE","a","all","pushState","history","search","mediaquery","cssPseudoElement","touchOverflow","cssTransform3d","boxShadow","dynamicBaseTag","cssPointerEvents","gradeA","ajaxBlacklist","WebKitPoint","$win","dummyFnToInitNavigate","beforenavigate","on","off","navigate","bound","originalEventName","isPushStateEnabled","isHashChangeEnabled","popstate","newEvent","beforeNavigate","state","historyState","hashchange","hashchangeState","$base","uiStateKey","urlParseRE","getLocation","parsedUrl","parseUrl","uri","doubleSlash","substring","getDocumentUrl","asParsedObject","documentUrl","parseLocation","hrefNoSearch","authority","username","password","hostname","port","directory","filename","makePathAbsolute","relPath","absPath","absStack","relStack","d","isSameDomain","absUrl1","absUrl2","isRelativeUrl","isAbsoluteUrl","relUrl","absUrl","relObj","absObj","hasPath","addSearchParams","params","u","p","param","s","convertUrlToDataUrl","isEmbeddedPage","decodeURIComponent","newPath","stripHash","clean","stripQueryParams","cleanHash","isHashValid","isExternal","hasProtocol","documentBaseDiffers","squash","resolutionUrl","cleanedUrl","stateIndex","docUrl","preservedHash","uiState","isPreservableHash","hashToSelector","hasHash","getFilePath","isFirstPageUrl","samePath","fp","firstPage","fpId","isPermittedCrossDomainRequest","reqUrl","getDocumentBase","History","stack","activeIndex","getActive","getLast","previousIndex","getNext","getPrev","clearForward","earlyReturn","entry","direct","opts","newActiveIndex","present","back","forward","missing","initialHref","Navigator","ignoreInitialHashChange","popstate.history","hashchange.history","replaceState","parsed","loc","resolved","go","noEvents","popstateEvent","isPopStateEvent","preventNextHashChange","preventHashAssignPopState","ignorePopState","stopImmediatePropagation","historyEntry","direction","animation","transition","testElement","vendorPrefixes","testName","j","prefix","cssTransitions","cssAnimations","animationComplete","fallbackTime","timer","eventBinding","animationType","defaultDuration","getNativeEvent","createVirtualEvent","eventType","oe","ne","ct","len","mouseEventProps","which","touches","changedTouches","touchEventProps","getVirtualBindingFlags","b","k","flags","dataPropertyName","hasVirtualBinding","getClosestElementWithVirtualBinding","enableTouchBindings","blockTouchTriggers","disableTouchBindings","enableMouseBindings","lastTouchID","clickBlockList","blockMouseTriggers","disableMouseBindings","startResetTimer","clearResetTimer","resetTimerID","vmouse","resetTimerDuration","triggerVirtualEvent","ve","mouseEventCallback","touchID","touchTargetPropertyName","isPropagationStopped","stopPropagation","isImmediatePropagationStopped","handleTouchStart","nextTouchID","didScroll","startX","pageX","startY","pageY","handleScroll","handleTouchMove","didCancel","moveThreshold","moveDistanceThreshold","abs","handleTouchEnd","clientX","clientY","hasVirtualBindings","dummyMouseHandler","getSpecialEventObject","realType","activeDocHandlers","$document","eventCaptureSupported","$this","threshold","virtualEventNames","mouseHookProps","mouseHooks","clickDistanceThreshold","o","cnt","triggerCustomEvent","obj","bubble","originalType","dispatch","supportTouch","scrollEvent","touchStartEvent","touchStopEvent","touchMoveEvent","attrFn","scrolling","thisObject","tap","tapholdThreshold","emitTapOnTaphold","isTaphold","clearTapTimer","clearTapHandlers","clickHandler","origTarget","swipe","scrollSupressionThreshold","durationThreshold","horizontalDistanceThreshold","verticalDistanceThreshold","winPageX","pageXOffset","winPageY","pageYOffset","floor","time","Date","getTime","coords","origin","handleSwipe","swipestart","swipestop","eventInProgress","events","emitted","move","scrollstop","taphold","swipeleft","swiperight","sourceEvent","throttledresize","heldCall","curr","diff","throttle","lastCall","get_orientation","last_orientation","win","event_name","initial_orientation_is_landscape","initial_orientation_is_default","ww","wh","landscape_threshold","portrait_map","0","180","-90","90","orientationchange","handleObj","old_handler","isPortrait","clientWidth","clientHeight","baseElement","linkSelector","rewrite","thisAttr","is","theLocation","thisUrl","reset","originalWidget","keepNativeFactoryDefault","domCache","keepNativeDefault","contentTheme","enhanced","_enhance","pagebeforehide","pagebeforeshow","dialog","attrPrefix","role","bindRemove","samePage","prEvent","_handlePageBeforeShow","setContainerBackground","removeContainerBackground","trim","globalValue","optionValue","newDefault","oldDefault","setLastScrollEnabled","pagechange","_disableRecordScroll","_enableRecordScroll","_afterContentChange","_recordScroll","currentScroll","minScroll","defaultScroll","active","_getActiveHistory","_getScroll","_getMinScroll","_getDefaultScroll","lastScroll","_delayedRecordScroll","_filterNavigateEvents","_getHash","_handleNavigate","getActivePage","activePage","_getInitialContent","_getHistory","_getDocumentBase","steps","change","changeHash","fromHashChange","_handleDestination","to","_transitionFromHistory","defaultTransition","_handleDialog","changePageOptions","activeContent","pageUrl","reverse","_changeContent","changePage","_getBase","_getNs","content","_include","settings","_find","fileUrl","_createFileUrl","dataUrl","_createDataUrl","initialContent","_getLoader","_showLoading","msg","_loadMsg","_hideLoading","_showError","_parse","_setLoadedTitle","newPageTitle","RegExp","$1","_isRewritableBaseTag","absoluteUrl","_triggerWithDeprecated","deprecatedEvent","_loadSuccess","triggerData","deferred","textStatus","xhr","pageElemRegex","dataUrlRegex","encodeURIComponent","prefetch","toPage","showLoadMsg","resolve","_loadDefaults","reloadPage","reload","loadMsgDelay","load","pblEvent","Deferred","reloadOptionExtension","_findBaseWithDefault","reject","promise","prevPage","fromPage","ajax","contentType","dataType","success","_loadError","errorThrown","plfEvent","_getTransitionHandler","_maybeDegradeTransition","transitionHandlers","defaultTransitionHandler","_triggerCssTransitionEvents","from","nextPage","_cssTransition","TransitionHandler","done","_releaseTransitionLock","isPageTransitioning","pageTransitionQueue","_removeActiveLinkClass","force","_loadUrl","fail","_triggerPageBeforeChange","returnEvents","unshift","defaults","activeIsInitialPage","historyDir","pageTitle","isDialog","alreadyThere","cssTransitionDeferred","beforeTransition","allowSamePageTransition","activeElement","blur","encodeURI","$to","$from","alreadyFocused","duplicateCachedPage","focusPage","closestBase","navreadyDeferred","findClosestLink","domreadyDeferred","loadDeferred","pageIsFullyLoaded","$lastVClicked","loadPage","container","nav","app","backHistory","autofocus","_registerInternalEvents","getAjaxFormData","$form","calculateOnly","formData","vclickedName","serializeArray","form","$btn","btnEls","needClosest","outer","baseUrl","useDefaultUrlHandling","$link","httpCleanup","urls","inArray","readyState","when","Transition","init","toPreClass","cleanFrom","beforeDoneIn","beforeDoneOut","beforeStartOut","doneIn","toggleViewportClass","toScroll","scrollPage","sequential","doneOut","reverseClass","none","preventFocus","startIn","hideIn","startOut","maxTransitionOverride","getMaxScrollForTransition","SerialTransition","ConcurrentTransition","defaultGetMaxScrollForTransition","simultaneous","transitionFallbacks","flip","flow","slide","slidedown","slidefade","slideup","turn","degradeInputs","color","date","datetime","datetime-local","email","month","number","range","tel","week","hasType","findstr","repstr","optType","clone","replaceWith","closeBtn","closeBtnText","overlayTheme","corners","_inner","_headerCloseButton","_setCloseBtn","wrapInner","class","closeButtonLocation","closeButtonText","currentOpts","dst","btn","_isCloseable","_handlePageBeforeHide","_handleVClickSubmit","attrs","vclick","submit","click","hist","rInitialLetter","iconposClass","iconpos","expandCueText","collapseCueText","collapsed","heading","collapsedIcon","expandedIcon","inset","mini","accordion","collapsibleset","_ui","_renderedOptions","_getOptions","anchor","status","_handleExpandCollapse","accordionWidget","collapsible","_themeClassFromOption","iconclass","contentThemeClass","originalHeading","placeholder","detach","refresh","_applyOptions","isCollapsed","newTheme","oldTheme","hasCorners","hasIcon","isCollapse","expand","collapse","contents","unwrap","noHiddenClass","uiScreenHiddenRegex","addFirstLastClasses","_getVisibles","$els","visibles","_addFirstLastClasses","$visibles","end","last","_removeFirstLastClasses","childCollapsiblesSelector","_handleCollapsibleExpand","closestCollapsible","siblings","_classes","collapsibleexpand","_refresh","themeClass","collapsiblesInSet","grid","iterator","letter","$kids","gridCols","solo","$navbar","$navbtns","icon","classes","getAttr","countTheme","dividerTheme","splitIcon","splitTheme","shadow","listviewClasses","_findFirstElementByTagName","nextProp","lcName","ucName","dict","_addThumbClasses","containers","_getChildrenByTagName","results","nextSibling","_beforeListviewRefresh","_afterListviewRefresh","buttonClass","pos","numli","item","itemClass","itemTheme","itemIcon","isDivider","startCount","newStartCount","splittheme","splitThemeClass","spliticon","altButtonClass","li","$list","ol","itemClassDict","countBubbles","countThemeClass","empty","defaultAutodividersSelector","elt","listview","autodividers","autodividersSelector","_replaceDividers","lis","dividerText","divider","lastDividerText","list","createTextNode","setAttribute","rdivider","rhidden","hideDividers","items","idx","hideDivider","formReset","_handleFormReset","escapeId","wrapperClass","inheritAttr","dataAttr","label","isParent","_findLabel","inputtype","checkedClass","uncheckedClass","labelIsParent","vmouseover","vmousedown","parentLabel","labelsList","labels","contains","getElementsByTagName","wrapAll","_wrapper","wrap","prepend","_handleInputFocus","_handleInputBlur","_handleInputVClick","_getInputSet","_updateAll","_handleLabelVMouseOver","_handleLabelVClick","_cacheVals","checked","formId","radio","radios","changeTriggered","checkboxradio","_reset","_hasIcon","controlgroup","controlgroupWidget","controlgroupConstructor","isChecked","addClasses","removeClasses","currentOptions","iconshadow","inline","wrapper","_button","iconClasses","_getIconClasses","originalElement","isDisabled","meta","disabledZoom","enabledZoom","disabledInitially","zoom","locked","lock","unlock","restore","preventFocusZoom","isSearch","isTextarea","tagName","isRange","inputNeedsWrap","_classesFromOptions","_autoCorrect","setOptions","elementClasses","_wrap","autocorrect","_handleBlur","_handleFocus","trackTheme","highlight","optionsCount","origTabIndex","activeClass","sliderImg","control","trackThemeClass","cornerClass","miniClass","cType","isToggleSwitch","isRangeslider","selectClass","controlID","$label","labelID","min","step","domHandle","handle","domSlider","slider","valuebg","bg","aria-valuemin","aria-valuemax","aria-valuenow","_value","aria-valuetext","aria-labelledby","dragging","beforeStart","userModified","mouseMoved","childNodes","_labels","keyup","vmouseup","_sliderVMouseDown","vmousemove","keydown","_setTheme","_setTrackTheme","_setCorners","_setMini","_setHighlight","_setDisabled","_controlChange","_controlKeyup","_controlBlur","_controlVMouseUp","_checkedRefresh","_handleVMouseDown","_handleKeydown","_keySliding","_handleKeyup","selectedIndex","_sliderVMouseUp","_preventDocumentDrag","isfromControl","preventInputUpdate","left","tol","pxStep","percent","isInput","optionElements","newval","valModStep","alignValue","percentPerStep","handlePercent","aPercent","bPercent","valueChanged","parentTheme","round","toFixed","ab","currentTheme","currentTrackTheme","newTrackTheme","getPopup","popup","popupEnabled","showValue","_currentValue","_popup","_popupVisible","_positionPopup","dstOffset","newValue","_showPopup","_hidePopup","onText","offText","flipswitch","_originalTabIndex","_left","_right","after","existingDirection","_toggle","_keydown","$el","elClass","_inputFirst","_inputLast","_label","_sliderWidgetFirst","_sliderWidgetLast","_sliderFirst","_sliderLast","firstHandle","_sliders","_targetVal","_sliderTarget","_proxy","slidebeforestart","slidestop","slidedrag","slidebeforechange","mousedown","_handleReset","_updateHighlight","_dragFirstHandle","_slidedrag","otherSlider","_slidestop","_slidebeforestart","_change","thisSlider","margin-left","textinput","clearBtn","clearBtnText","_addClearBtn","clearButton","_clearBtnClick","_clearBtn","_enhanceClear","_bindClearEvents","_toggleClear","cut","paste","_unbindClear","_destroyClear","_toggleClearClass","autogrow","keyupTimeoutBuffer","_autogrow","pageshow","popupbeforeposition","updatelayout","panelopen","_handleShow","_prepareHeightUpdate","_unbindAutogrow","keyupTimeout","_updateHeight","_timeout","paddingTop","paddingBottom","paddingHeight","scrollHeight","borderTop","borderBottom","borderHeight","min-height","max-height","hidePlaceholderMenuItems","closeText","nativeMenu","button","_focusButton","_selectOptions","select","_preExtension","selectId","buttonId","isMultiple","multiple","setButtonText","buttonCount","build","selected","selectedIndices","span","setButtonCount","_refreshButton","idref","fitSegmentInsideSegment","windowSize","segmentSize","desired","getWindowCoordinates","theWindow","scrollLeft","cx","cy","positionTo","tolerance","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","dismissible","_handleDocumentVmousedown","theEvent","_isOpen","_ignoreResizeEvents","myId","_scrollTop","_page","_fallbackTransition","_currentTransition","_prerequisites","_tolerance","_resizeData","_ignoreResizeTo","_orientationchangeInProgress","screen","prev","getElementById","_applyTransition","_setTolerance","focusElement","resize","fragment","createDocumentFragment","_eatEventAndClose","_resizeScreen","popupHeight","documentHeight","_handleWindowKeyUp","_expectResizeEvent","windowCoordinates","timeoutId","_resizeTimeout","reposition","_stopIgnoringResizeEvents","_handleWindowResize","_handleWindowOrientationchange","_handleDocumentFocusIn","targetElement","_safelyBlur","newOptions","ar","r","l","String","_clampPopupWidth","infoOnly","menuSize","rectangle","rc","_calculateFinalLocation","clampInfo","_placementCoords","_createPrerequisites","screenPrerequisite","containerPrerequisite","whenDone","prerequisites","then","_animate","classToRemove","screenClassToAdd","applyTransition","containerClassToAdd","_desiredCoords","openOptions","pTo","_reposition","currentElement","_openPrerequisitesComplete","firstFocus","_open","androidBlacklist","androidmatch","andversion","chromematch","additionalCondition","_closePrerequisiteScreen","_closePrerequisiteContainer","_closePrerequisitesDone","_close","immediate","_unenhance","_closePopup","parsedDst","toUrl","_myUrl","_bindContainerClose","hashkey","currentIsDialog","urlHistory","urlAltered","handleLink","unfocusableItemSelector","goToAdjacentItem","adjacent","selectmenu","_handleSelectFocus","_handleButtonVclickKeydown","isOpen","_decideFormat","menuType","popupId","dialogId","_handleListFocus","tabindex","_handleListKeydown","_handleMenuPageHide","_delayedTrigger","thisPage","_handleHeaderCloseClick","_handleListItemClick","listItem","oldIndex","newIndex","_triggerChange","menuId","themeAttr","overlayThemeAttr","dividerThemeAttr","menuPage","listbox","header","headerTitle","menuPageContent","menuPageClose","headerClose","_origTabIndex","click li:not(.ui-disabled,.ui-state-disabled,.ui-li-divider)","pagehide","popupafterclose","_popupClosed","_isRebuildRequired","indices","_buildList","_focusMenuItem","$window","selfListParent","menuHeight","btnOffset","popupafteropen","$options","numOptions","optGroup","$option","optLabel","needPlaceholder","dataIcon","dataPrefix","dataIndexAttr","dataIconAttr","dataRoleAttr","dataPlaceholderAttr","isPlaceholderItem","_removePlaceholderAttr","aria-haspopup","aria-owns","optionsToClasses","existingClasses","classNameToOptions","unknownClass","alreadyEnhanced","noIcon","unknownClasses","reverseBoolOptionMap","camelCase2Hyphenated","ui-shadow","ui-corner-all","ui-btn-inline","ui-shadow-icon","ui-mini","getAttrFixed","capitalLettersRE","overwriteClasses","retrievedOptions","optionKey","excludeInvisible","_childWidgets","_initialRefresh","groupLegend","childWrapper","callRefresh","els","buttons","addBackBtn","backBtnTheme","backBtnText","leftbtn","rightbtn","_updateBackButton","_addHeaderButtonClasses","_setRelative","_addHeadingClasses","_btnMarkup","headerAnchors","backButton","_backButton","attached","aria-level","visibleOnPageShow","disablePageZoom","fullscreen","tapToggle","tapToggleBlacklist","hideDuringFocus","trackPersistentToolbars","supportBlacklist","_makeFixed","_addTransitionClass","_bindPageEvents","_bindToggleHandlers","$page","tclass","webkitAnimationStart","animationstart","_handleAnimationStart","_handlePageShow","thisFooter","thisHeader","nextFooter","nextHeader","_visible","tbPage","_useTransition","notransition","scroll","elHeight","pHeight","viewportHeight","hideClass","outclass","toggle","delayShow","delayHide","isVisible","pageClasses","toolbarClasses","hasFixed","hasFullscreen","_workarounds","os","_bindScrollWorkaround","_bindListThumbWorkaround","_viewportOffset","viewportOffset","_triggerRedraw","getArrow","uiTemplate","gd","arEls","ieHack","arrow","_addArrow","_tryAnArrow","dir","best","desiredForArrow","tip","arFull","dimKey","guideDims","fst","arHalf","oDimKey","menuHalf","offsetFactor","contentBox","arrowOffsetFactor","snd","tipOffset","guideOffset","posProp","posVal","_getPlacementState","clamp","gdOffset","right","bottom","elOffset","bgRef","panel","panelOpen","panelClosed","panelFixed","panelInner","modal","modalOpen","pageWrapper","pageFixedToolbar","pageContentPrefix","animate","display","swipeClose","positionFixed","_closeLink","_parentPage","_modal","_panelInner","_fixedToolbars","parentPage","_openedPage","_getPage","_getPanelInner","_getFixedToolbars","_getWrapper","_addPanelClasses","_bindUpdateLayout","_bindCloseEvents","_bindLinkListeners","_createModal","_bindSwipeEvents","extFixedToolbars","intFixedToolbars","fixedToolbars","_getPosDisplayClasses","_getPanelClasses","panelClasses","_handleCloseClick","click a:jqmData(ajax='false')","_positionPanel","scrollToTop","panelInnerHeight","_unfixPanel","_fixPanel","_bindFixListener","_unbindFixListener","click a","_handleClick","panelId","area","_pageContentOpenClasses","_modalOpenClasses","_openPanel","panelclose","_closePanel","otherPanels","multiplePanels","table","headers","allHeaders","_setHeaders","trs","rebuild","columnCount","mode","columnBtnTheme","columnPopupTheme","columnBtnText","columnBtn","priorityPrefix","columnToggleTable","_menu","_id","_addToggles","_enhanceColToggle","_setupEvents","_setToggleState","change input","menu","keep","inputs","checkboxIndex","cells","priority","_menuInputChange","evt","_unlockCells","menuButton","before","hiddenColumns","checkbox","reflowTable","cellLabels","_updateReflow","iteration","colstart","hierarchyClass","_addLabels","defaultFilterCallback","searchValue","filterReveal","filterCallback","_search","_timer","_setInput","_filterItems","_onKeyUp","lastval","_getFilterableItems","filterItems","_refreshChildWidget","recognizedWidgets","keypress","_onKeyDown","_preventKeyPress","_onKeyPress","refilter","replaceSetOptions","_syncTextInputOptions","rDividerListItem","origDefaultFilterCallback","filterable","filterPlaceholder","filterTheme","createHandlers","_setWidget","_handleCreate","_isSearchInternal","updatePlaceholder","textinputOpts","_refreshingChildWidget","textinputOptions","getNextTabId","tabId","isLocal","rhash","heightStyle","activate","beforeActivate","beforeLoad","running","_processTabs","_initialActive","isArray","unique","tabs","sort","anchors","_findActive","locationHash","tab","_getPanelForTab","_tabKeydown","focusedTab","goingForward","_handlePageNav","activating","_activate","_focusNextTab","ctrlKey","_panelKeydown","altKey","_findNextTab","constrain","lastTabIndex","_setupDisabled","_setupHeightStyle","_tabId","_sanitizeSelector","tablist","aria-selected","panels","aria-expanded","aria-hidden","_getList","anchorId","originalAriaControls","_createPanel","aria-controls","maxHeight","_eventHandler","clickedIsActive","collapsing","toShow","toHide","eventData","oldTab","oldPanel","newTab","newPanel","abort","_show","_hide","_getIndex","num","merge","_ajaxSettings","statusText","response","jqXHR","beforeSend","ajaxSettings","checkTilt","aig","accelerationIncludingGravity","z","iosorientationfixEnabled","hideRenderingClass","initializePage","$pages","hashPage"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/popper-utils.js b/XPST/Scripts/popper-utils.js
new file mode 100644
index 0000000..562ffdd
--- /dev/null
+++ b/XPST/Scripts/popper-utils.js
@@ -0,0 +1,1052 @@
+/**!
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version 1.14.1
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+function getStyleComputedProperty(element, property) {
+ if (element.nodeType !== 1) {
+ return [];
+ }
+ // NOTE: 1 DOM access here
+ const css = getComputedStyle(element, null);
+ return property ? css[property] : css;
+}
+
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+function getParentNode(element) {
+ if (element.nodeName === 'HTML') {
+ return element;
+ }
+ return element.parentNode || element.host;
+}
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+function getScrollParent(element) {
+ // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+ if (!element) {
+ return document.body;
+ }
+
+ switch (element.nodeName) {
+ case 'HTML':
+ case 'BODY':
+ return element.ownerDocument.body;
+ case '#document':
+ return element.body;
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+ const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);
+ if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+ return element;
+ }
+
+ return getScrollParent(getParentNode(element));
+}
+
+/**
+ * Tells if you are running Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @argument {number} version to check
+ * @returns {Boolean} isIE
+ */
+const cache = {};
+
+var isIE = function (version = 'all') {
+ version = version.toString();
+ if (cache.hasOwnProperty(version)) {
+ return cache[version];
+ }
+ switch (version) {
+ case '11':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1;
+ break;
+ case '10':
+ cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;
+ break;
+ case 'all':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;
+ break;
+ }
+
+ //Set IE
+ cache.all = cache.all || Object.keys(cache).some(key => cache[key]);
+ return cache[version];
+};
+
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+function getOffsetParent(element) {
+ if (!element) {
+ return document.documentElement;
+ }
+
+ const noOffsetParent = isIE(10) ? document.body : null;
+
+ // NOTE: 1 DOM access here
+ let offsetParent = element.offsetParent;
+ // Skip hidden elements which don't have an offsetParent
+ while (offsetParent === noOffsetParent && element.nextElementSibling) {
+ offsetParent = (element = element.nextElementSibling).offsetParent;
+ }
+
+ const nodeName = offsetParent && offsetParent.nodeName;
+
+ if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+ return element ? element.ownerDocument.documentElement : document.documentElement;
+ }
+
+ // .offsetParent will return the closest TD or TABLE in case
+ // no offsetParent is present, I hate this job...
+ if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
+ return getOffsetParent(offsetParent);
+ }
+
+ return offsetParent;
+}
+
+function isOffsetContainer(element) {
+ const { nodeName } = element;
+ if (nodeName === 'BODY') {
+ return false;
+ }
+ return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
+}
+
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+function getRoot(node) {
+ if (node.parentNode !== null) {
+ return getRoot(node.parentNode);
+ }
+
+ return node;
+}
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+function findCommonOffsetParent(element1, element2) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+ return document.documentElement;
+ }
+
+ // Here we make sure to give as "start" the element that comes first in the DOM
+ const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
+ const start = order ? element1 : element2;
+ const end = order ? element2 : element1;
+
+ // Get common ancestor container
+ const range = document.createRange();
+ range.setStart(start, 0);
+ range.setEnd(end, 0);
+ const { commonAncestorContainer } = range;
+
+ // Both nodes are inside #document
+ if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
+ if (isOffsetContainer(commonAncestorContainer)) {
+ return commonAncestorContainer;
+ }
+
+ return getOffsetParent(commonAncestorContainer);
+ }
+
+ // one of the nodes is inside shadowDOM, find which one
+ const element1root = getRoot(element1);
+ if (element1root.host) {
+ return findCommonOffsetParent(element1root.host, element2);
+ } else {
+ return findCommonOffsetParent(element1, getRoot(element2).host);
+ }
+}
+
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+function getScroll(element, side = 'top') {
+ const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+ const nodeName = element.nodeName;
+
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ const html = element.ownerDocument.documentElement;
+ const scrollingElement = element.ownerDocument.scrollingElement || html;
+ return scrollingElement[upperSide];
+ }
+
+ return element[upperSide];
+}
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+function includeScroll(rect, element, subtract = false) {
+ const scrollTop = getScroll(element, 'top');
+ const scrollLeft = getScroll(element, 'left');
+ const modifier = subtract ? -1 : 1;
+ rect.top += scrollTop * modifier;
+ rect.bottom += scrollTop * modifier;
+ rect.left += scrollLeft * modifier;
+ rect.right += scrollLeft * modifier;
+ return rect;
+}
+
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+function getBordersSize(styles, axis) {
+ const sideA = axis === 'x' ? 'Left' : 'Top';
+ const sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+ return parseFloat(styles[`border${sideA}Width`], 10) + parseFloat(styles[`border${sideB}Width`], 10);
+}
+
+function getSize(axis, body, html, computedStyle) {
+ return Math.max(body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE(10) ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0);
+}
+
+function getWindowSizes() {
+ const body = document.body;
+ const html = document.documentElement;
+ const computedStyle = isIE(10) && getComputedStyle(html);
+
+ return {
+ height: getSize('Height', body, html, computedStyle),
+ width: getSize('Width', body, html, computedStyle)
+ };
+}
+
+var _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
+
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+function getClientRect(offsets) {
+ return _extends({}, offsets, {
+ right: offsets.left + offsets.width,
+ bottom: offsets.top + offsets.height
+ });
+}
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+function getBoundingClientRect(element) {
+ let rect = {};
+
+ // IE10 10 FIX: Please, don't ask, the element isn't
+ // considered in DOM in some circumstances...
+ // This isn't reproducible in IE10 compatibility mode of IE11
+ try {
+ if (isIE(10)) {
+ rect = element.getBoundingClientRect();
+ const scrollTop = getScroll(element, 'top');
+ const scrollLeft = getScroll(element, 'left');
+ rect.top += scrollTop;
+ rect.left += scrollLeft;
+ rect.bottom += scrollTop;
+ rect.right += scrollLeft;
+ } else {
+ rect = element.getBoundingClientRect();
+ }
+ } catch (e) {}
+
+ const result = {
+ left: rect.left,
+ top: rect.top,
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top
+ };
+
+ // subtract scrollbar size from sizes
+ const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};
+ const width = sizes.width || element.clientWidth || result.right - result.left;
+ const height = sizes.height || element.clientHeight || result.bottom - result.top;
+
+ let horizScrollbar = element.offsetWidth - width;
+ let vertScrollbar = element.offsetHeight - height;
+
+ // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+ // we make this check conditional for performance reasons
+ if (horizScrollbar || vertScrollbar) {
+ const styles = getStyleComputedProperty(element);
+ horizScrollbar -= getBordersSize(styles, 'x');
+ vertScrollbar -= getBordersSize(styles, 'y');
+
+ result.width -= horizScrollbar;
+ result.height -= vertScrollbar;
+ }
+
+ return getClientRect(result);
+}
+
+function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {
+ const isIE10 = isIE(10);
+ const isHTML = parent.nodeName === 'HTML';
+ const childrenRect = getBoundingClientRect(children);
+ const parentRect = getBoundingClientRect(parent);
+ const scrollParent = getScrollParent(children);
+
+ const styles = getStyleComputedProperty(parent);
+ const borderTopWidth = parseFloat(styles.borderTopWidth, 10);
+ const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
+
+ // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+ if (fixedPosition && parent.nodeName === 'HTML') {
+ parentRect.top = Math.max(parentRect.top, 0);
+ parentRect.left = Math.max(parentRect.left, 0);
+ }
+ let offsets = getClientRect({
+ top: childrenRect.top - parentRect.top - borderTopWidth,
+ left: childrenRect.left - parentRect.left - borderLeftWidth,
+ width: childrenRect.width,
+ height: childrenRect.height
+ });
+ offsets.marginTop = 0;
+ offsets.marginLeft = 0;
+
+ // Subtract margins of documentElement in case it's being used as parent
+ // we do this only on HTML because it's the only element that behaves
+ // differently when margins are applied to it. The margins are included in
+ // the box of the documentElement, in the other cases not.
+ if (!isIE10 && isHTML) {
+ const marginTop = parseFloat(styles.marginTop, 10);
+ const marginLeft = parseFloat(styles.marginLeft, 10);
+
+ offsets.top -= borderTopWidth - marginTop;
+ offsets.bottom -= borderTopWidth - marginTop;
+ offsets.left -= borderLeftWidth - marginLeft;
+ offsets.right -= borderLeftWidth - marginLeft;
+
+ // Attach marginTop and marginLeft because in some circumstances we may need them
+ offsets.marginTop = marginTop;
+ offsets.marginLeft = marginLeft;
+ }
+
+ if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
+ offsets = includeScroll(offsets, parent);
+ }
+
+ return offsets;
+}
+
+function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {
+ const html = element.ownerDocument.documentElement;
+ const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+ const width = Math.max(html.clientWidth, window.innerWidth || 0);
+ const height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+ const scrollTop = !excludeScroll ? getScroll(html) : 0;
+ const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+ const offset = {
+ top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+ left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+ width,
+ height
+ };
+
+ return getClientRect(offset);
+}
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+function isFixed(element) {
+ const nodeName = element.nodeName;
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ return isFixed(getParentNode(element));
+}
+
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+function getFixedPositionOffsetParent(element) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element || !element.parentElement || isIE()) {
+ return document.documentElement;
+ }
+ let el = element.parentElement;
+ while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+ el = el.parentElement;
+ }
+ return el || document.documentElement;
+}
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+function getBoundaries(popper, reference, padding, boundariesElement, fixedPosition = false) {
+ // NOTE: 1 DOM access here
+
+ let boundaries = { top: 0, left: 0 };
+ const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+
+ // Handle viewport case
+ if (boundariesElement === 'viewport') {
+ boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+ } else {
+ // Handle other cases based on DOM element used as boundaries
+ let boundariesNode;
+ if (boundariesElement === 'scrollParent') {
+ boundariesNode = getScrollParent(getParentNode(reference));
+ if (boundariesNode.nodeName === 'BODY') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ }
+ } else if (boundariesElement === 'window') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ } else {
+ boundariesNode = boundariesElement;
+ }
+
+ const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
+
+ // In case of HTML, we need a different computation
+ if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+ const { height, width } = getWindowSizes();
+ boundaries.top += offsets.top - offsets.marginTop;
+ boundaries.bottom = height + offsets.top;
+ boundaries.left += offsets.left - offsets.marginLeft;
+ boundaries.right = width + offsets.left;
+ } else {
+ // for all the other DOM elements, this one is good
+ boundaries = offsets;
+ }
+ }
+
+ // Add paddings
+ boundaries.left += padding;
+ boundaries.top += padding;
+ boundaries.right -= padding;
+ boundaries.bottom -= padding;
+
+ return boundaries;
+}
+
+function getArea({ width, height }) {
+ return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement, padding = 0) {
+ if (placement.indexOf('auto') === -1) {
+ return placement;
+ }
+
+ const boundaries = getBoundaries(popper, reference, padding, boundariesElement);
+
+ const rects = {
+ top: {
+ width: boundaries.width,
+ height: refRect.top - boundaries.top
+ },
+ right: {
+ width: boundaries.right - refRect.right,
+ height: boundaries.height
+ },
+ bottom: {
+ width: boundaries.width,
+ height: boundaries.bottom - refRect.bottom
+ },
+ left: {
+ width: refRect.left - boundaries.left,
+ height: boundaries.height
+ }
+ };
+
+ const sortedAreas = Object.keys(rects).map(key => _extends({
+ key
+ }, rects[key], {
+ area: getArea(rects[key])
+ })).sort((a, b) => b.area - a.area);
+
+ const filteredAreas = sortedAreas.filter(({ width, height }) => width >= popper.clientWidth && height >= popper.clientHeight);
+
+ const computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
+
+ const variation = placement.split('-')[1];
+
+ return computedPlacement + (variation ? `-${variation}` : '');
+}
+
+const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
+const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+let timeoutDuration = 0;
+for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+ if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+ timeoutDuration = 1;
+ break;
+ }
+}
+
+function microtaskDebounce(fn) {
+ let called = false;
+ return () => {
+ if (called) {
+ return;
+ }
+ called = true;
+ window.Promise.resolve().then(() => {
+ called = false;
+ fn();
+ });
+ };
+}
+
+function taskDebounce(fn) {
+ let scheduled = false;
+ return () => {
+ if (!scheduled) {
+ scheduled = true;
+ setTimeout(() => {
+ scheduled = false;
+ fn();
+ }, timeoutDuration);
+ }
+ };
+}
+
+const supportsMicroTasks = isBrowser && window.Promise;
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
+
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function find(arr, check) {
+ // use native find if supported
+ if (Array.prototype.find) {
+ return arr.find(check);
+ }
+
+ // use `filter` to obtain the same behavior of `find`
+ return arr.filter(check)[0];
+}
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function findIndex(arr, prop, value) {
+ // use native findIndex if supported
+ if (Array.prototype.findIndex) {
+ return arr.findIndex(cur => cur[prop] === value);
+ }
+
+ // use `find` + `indexOf` if `findIndex` isn't supported
+ const match = find(arr, obj => obj[prop] === value);
+ return arr.indexOf(match);
+}
+
+/**
+ * Get the position of the given element, relative to its offset parent
+ * @method
+ * @memberof Popper.Utils
+ * @param {Element} element
+ * @return {Object} position - Coordinates of the element and its `scrollTop`
+ */
+function getOffsetRect(element) {
+ let elementRect;
+ if (element.nodeName === 'HTML') {
+ const { width, height } = getWindowSizes();
+ elementRect = {
+ width,
+ height,
+ left: 0,
+ top: 0
+ };
+ } else {
+ elementRect = {
+ width: element.offsetWidth,
+ height: element.offsetHeight,
+ left: element.offsetLeft,
+ top: element.offsetTop
+ };
+ }
+
+ // position
+ return getClientRect(elementRect);
+}
+
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+function getOuterSizes(element) {
+ const styles = getComputedStyle(element);
+ const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
+ const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
+ const result = {
+ width: element.offsetWidth + y,
+ height: element.offsetHeight + x
+ };
+ return result;
+}
+
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+function getOppositePlacement(placement) {
+ const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);
+}
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+function getPopperOffsets(popper, referenceOffsets, placement) {
+ placement = placement.split('-')[0];
+
+ // Get popper node sizes
+ const popperRect = getOuterSizes(popper);
+
+ // Add position, width and height to our offsets object
+ const popperOffsets = {
+ width: popperRect.width,
+ height: popperRect.height
+ };
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ const isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+ const mainSide = isHoriz ? 'top' : 'left';
+ const secondarySide = isHoriz ? 'left' : 'top';
+ const measurement = isHoriz ? 'height' : 'width';
+ const secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+ popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
+ if (placement === secondarySide) {
+ popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+ } else {
+ popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
+ }
+
+ return popperOffsets;
+}
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+function getReferenceOffsets(state, popper, reference, fixedPosition = null) {
+ const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+ return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
+
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+function getSupportedPropertyName(property) {
+ const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+ const upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+ for (let i = 0; i < prefixes.length; i++) {
+ const prefix = prefixes[i];
+ const toCheck = prefix ? `${prefix}${upperProp}` : property;
+ if (typeof document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+}
+
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+function isFunction(functionToCheck) {
+ const getType = {};
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+}
+
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+function isModifierEnabled(modifiers, modifierName) {
+ return modifiers.some(({ name, enabled }) => enabled && name === modifierName);
+}
+
+/**
+ * Helper used to know if the given modifier depends from another one.
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+function isModifierRequired(modifiers, requestingName, requestedName) {
+ const requesting = find(modifiers, ({ name }) => name === requestingName);
+
+ const isRequired = !!requesting && modifiers.some(modifier => {
+ return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
+ });
+
+ if (!isRequired) {
+ const requesting = `\`${requestingName}\``;
+ const requested = `\`${requestedName}\``;
+ console.warn(`${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`);
+ }
+ return isRequired;
+}
+
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+function isNumeric(n) {
+ return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+function getWindow(element) {
+ const ownerDocument = element.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView : window;
+}
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function removeEventListeners(reference, state) {
+ // Remove resize event listener on window
+ getWindow(reference).removeEventListener('resize', state.updateBound);
+
+ // Remove scroll event listener on scroll parents
+ state.scrollParents.forEach(target => {
+ target.removeEventListener('scroll', state.updateBound);
+ });
+
+ // Reset state
+ state.updateBound = null;
+ state.scrollParents = [];
+ state.scrollElement = null;
+ state.eventsEnabled = false;
+ return state;
+}
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+function runModifiers(modifiers, data, ends) {
+ const modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+ modifiersToRun.forEach(modifier => {
+ if (modifier['function']) {
+ // eslint-disable-line dot-notation
+ console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+ }
+ const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+ if (modifier.enabled && isFunction(fn)) {
+ // Add properties to offsets to make them a complete clientRect object
+ // we do this before each modifier to make sure the previous one doesn't
+ // mess with these values
+ data.offsets.popper = getClientRect(data.offsets.popper);
+ data.offsets.reference = getClientRect(data.offsets.reference);
+
+ data = fn(data, modifier);
+ }
+ });
+
+ return data;
+}
+
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setAttributes(element, attributes) {
+ Object.keys(attributes).forEach(function (prop) {
+ const value = attributes[prop];
+ if (value !== false) {
+ element.setAttribute(prop, attributes[prop]);
+ } else {
+ element.removeAttribute(prop);
+ }
+ });
+}
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setStyles(element, styles) {
+ Object.keys(styles).forEach(prop => {
+ let unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+}
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+ const isBody = scrollParent.nodeName === 'BODY';
+ const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+ target.addEventListener(event, callback, { passive: true });
+
+ if (!isBody) {
+ attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
+ }
+ scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function setupEventListeners(reference, options, state, updateBound) {
+ // Resize event listener on window
+ state.updateBound = updateBound;
+ getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+ // Scroll event listener on scroll parents
+ const scrollElement = getScrollParent(reference);
+ attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
+ state.scrollElement = scrollElement;
+ state.eventsEnabled = true;
+
+ return state;
+}
+
+// This is here just for backward compatibility with versions lower than v1.10.3
+// you should import the utilities using named exports, if you want them all use:
+// ```
+// import * as PopperUtils from 'popper-utils';
+// ```
+// The default export will be removed in the next major version.
+var index = {
+ computeAutoPlacement,
+ debounce,
+ findIndex,
+ getBordersSize,
+ getBoundaries,
+ getBoundingClientRect,
+ getClientRect,
+ getOffsetParent,
+ getOffsetRect,
+ getOffsetRectRelativeToArbitraryNode,
+ getOuterSizes,
+ getParentNode,
+ getPopperOffsets,
+ getReferenceOffsets,
+ getScroll,
+ getScrollParent,
+ getStyleComputedProperty,
+ getSupportedPropertyName,
+ getWindowSizes,
+ isFixed,
+ isFunction,
+ isModifierEnabled,
+ isModifierRequired,
+ isNumeric,
+ removeEventListeners,
+ runModifiers,
+ setAttributes,
+ setStyles,
+ setupEventListeners
+};
+
+export { computeAutoPlacement, debounce, findIndex, getBordersSize, getBoundaries, getBoundingClientRect, getClientRect, getOffsetParent, getOffsetRect, getOffsetRectRelativeToArbitraryNode, getOuterSizes, getParentNode, getPopperOffsets, getReferenceOffsets, getScroll, getScrollParent, getStyleComputedProperty, getSupportedPropertyName, getWindowSizes, isFixed, isFunction, isModifierEnabled, isModifierRequired, isNumeric, removeEventListeners, runModifiers, setAttributes, setStyles, setupEventListeners };
+export default index;
+//# sourceMappingURL=popper-utils.js.map
diff --git a/XPST/Scripts/popper-utils.js.map b/XPST/Scripts/popper-utils.js.map
new file mode 100644
index 0000000..7d9a347
--- /dev/null
+++ b/XPST/Scripts/popper-utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-utils.js","sources":["../src/utils/getStyleComputedProperty.js","../src/utils/getParentNode.js","../src/utils/getScrollParent.js","../src/utils/isIE.js","../src/utils/getOffsetParent.js","../src/utils/isOffsetContainer.js","../src/utils/getRoot.js","../src/utils/findCommonOffsetParent.js","../src/utils/getScroll.js","../src/utils/includeScroll.js","../src/utils/getBordersSize.js","../src/utils/getWindowSizes.js","../src/utils/getClientRect.js","../src/utils/getBoundingClientRect.js","../src/utils/getOffsetRectRelativeToArbitraryNode.js","../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../src/utils/isFixed.js","../src/utils/getFixedPositionOffsetParent.js","../src/utils/getBoundaries.js","../src/utils/computeAutoPlacement.js","../src/utils/debounce.js","../src/utils/find.js","../src/utils/findIndex.js","../src/utils/getOffsetRect.js","../src/utils/getOuterSizes.js","../src/utils/getOppositePlacement.js","../src/utils/getPopperOffsets.js","../src/utils/getReferenceOffsets.js","../src/utils/getSupportedPropertyName.js","../src/utils/isFunction.js","../src/utils/isModifierEnabled.js","../src/utils/isModifierRequired.js","../src/utils/isNumeric.js","../src/utils/getWindow.js","../src/utils/removeEventListeners.js","../src/utils/runModifiers.js","../src/utils/setAttributes.js","../src/utils/setStyles.js","../src/utils/setupEventListeners.js","../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","document","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","window","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","length","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","isFunction","functionToCheck","getType","call","isModifierEnabled","modifiers","modifierName","name","enabled","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","warn","isNumeric","n","isNaN","isFinite","getWindow","defaultView","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","target","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","setAttributes","attributes","setAttribute","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","addEventListener","passive","push","setupEventListeners","options"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/popper-utils.min.js b/XPST/Scripts/popper-utils.min.js
new file mode 100644
index 0000000..6ec756e
--- /dev/null
+++ b/XPST/Scripts/popper-utils.min.js
@@ -0,0 +1,5 @@
+/*
+ Copyright (C) Federico Zivolo 2018
+ Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
+ */function a(a,b){if(1!==a.nodeType)return[];const c=getComputedStyle(a,null);return b?c[b]:c}function b(a){return'HTML'===a.nodeName?a:a.parentNode||a.host}function c(d){if(!d)return document.body;switch(d.nodeName){case'HTML':case'BODY':return d.ownerDocument.body;case'#document':return d.body;}const{overflow:e,overflowX:f,overflowY:g}=a(d);return /(auto|scroll|overlay)/.test(e+g+f)?d:c(b(d))}const d={};var e=function(a='all'){return(a=a.toString(),d.hasOwnProperty(a))?d[a]:('11'===a?d[a]=-1!==navigator.userAgent.indexOf('Trident'):'10'===a?d[a]=-1!==navigator.appVersion.indexOf('MSIE 10'):'all'===a?d[a]=-1!==navigator.userAgent.indexOf('Trident')||-1!==navigator.userAgent.indexOf('MSIE'):void 0,d.all=d.all||Object.keys(d).some((a)=>d[a]),d[a])};function f(b){if(!b)return document.documentElement;const c=e(10)?document.body:null;let d=b.offsetParent;for(;d===c&&b.nextElementSibling;)d=(b=b.nextElementSibling).offsetParent;const g=d&&d.nodeName;return g&&'BODY'!==g&&'HTML'!==g?-1!==['TD','TABLE'].indexOf(d.nodeName)&&'static'===a(d,'position')?f(d):d:b?b.ownerDocument.documentElement:document.documentElement}function g(a){const{nodeName:b}=a;return'BODY'!==b&&('HTML'===b||f(a.firstElementChild)===a)}function h(a){return null===a.parentNode?a:h(a.parentNode)}function i(a,b){if(!a||!a.nodeType||!b||!b.nodeType)return document.documentElement;const c=a.compareDocumentPosition(b)&Node.DOCUMENT_POSITION_FOLLOWING,d=c?a:b,e=c?b:a,j=document.createRange();j.setStart(d,0),j.setEnd(e,0);const{commonAncestorContainer:k}=j;if(a!==k&&b!==k||d.contains(e))return g(k)?k:f(k);const l=h(a);return l.host?i(l.host,b):i(a,h(b).host)}function j(a,b='top'){const c='top'===b?'scrollTop':'scrollLeft',d=a.nodeName;if('BODY'===d||'HTML'===d){const b=a.ownerDocument.documentElement,d=a.ownerDocument.scrollingElement||b;return d[c]}return a[c]}function k(a,b,c=!1){const d=j(b,'top'),e=j(b,'left'),f=c?-1:1;return a.top+=d*f,a.bottom+=d*f,a.left+=e*f,a.right+=e*f,a}function l(a,b){const c='x'===b?'Left':'Top',d='Left'==c?'Right':'Bottom';return parseFloat(a[`border${c}Width`],10)+parseFloat(a[`border${d}Width`],10)}function m(a,b,c,d){return Math.max(b[`offset${a}`],b[`scroll${a}`],c[`client${a}`],c[`offset${a}`],c[`scroll${a}`],e(10)?c[`offset${a}`]+d[`margin${'Height'===a?'Top':'Left'}`]+d[`margin${'Height'===a?'Bottom':'Right'}`]:0)}function n(){const a=document.body,b=document.documentElement,c=e(10)&&getComputedStyle(b);return{height:m('Height',a,b,c),width:m('Width',a,b,c)}}var o=Object.assign||function(a){for(var b,c=1;c
o({key:a},h[a],{area:w(h[a])})).sort((c,a)=>a.area-c.area),j=i.filter(({width:a,height:b})=>a>=c.clientWidth&&b>=c.clientHeight),k=0{b||(b=!0,window.Promise.resolve().then(()=>{b=!1,a()}))}}function C(a){let b=!1;return()=>{b||(b=!0,setTimeout(()=>{b=!1,a()},A))}}const D=y&&window.Promise;var E=D?B:C;function F(a,b){return Array.prototype.find?a.find(b):a.filter(b)[0]}function G(a,b,c){if(Array.prototype.findIndex)return a.findIndex((a)=>a[b]===c);const d=F(a,(a)=>a[b]===c);return a.indexOf(d)}function H(a){let b;if('HTML'===a.nodeName){const{width:a,height:c}=n();b={width:a,height:c,left:0,top:0}}else b={width:a.offsetWidth,height:a.offsetHeight,left:a.offsetLeft,top:a.offsetTop};return p(b)}function I(a){const b=getComputedStyle(a),c=parseFloat(b.marginTop)+parseFloat(b.marginBottom),d=parseFloat(b.marginLeft)+parseFloat(b.marginRight),e={width:a.offsetWidth+d,height:a.offsetHeight+c};return e}function J(a){const b={left:'right',right:'left',bottom:'top',top:'bottom'};return a.replace(/left|right|bottom|top/g,(a)=>b[a])}function K(a,b,c){c=c.split('-')[0];const d=I(a),e={width:d.width,height:d.height},f=-1!==['right','left'].indexOf(c),g=f?'top':'left',h=f?'left':'top',i=f?'height':'width',j=f?'width':'height';return e[g]=b[g]+b[i]/2-d[i]/2,e[h]=c===h?b[h]-d[j]:b[J(h)],e}function L(a,b,c,d=null){const e=d?u(b):i(b,c);return r(c,e,d)}function M(a){const b=[!1,'ms','Webkit','Moz','O'],c=a.charAt(0).toUpperCase()+a.slice(1);for(let d=0;dc&&a===b)}function P(a,b,c){const d=F(a,({name:a})=>a===b),e=!!d&&a.some((a)=>a.name===c&&a.enabled&&a.order{a.removeEventListener('scroll',b.updateBound)}),b.updateBound=null,b.scrollParents=[],b.scrollElement=null,b.eventsEnabled=!1,b}function T(a,b,c){const d=void 0===c?a:a.slice(0,G(a,'name',c));return d.forEach((a)=>{a['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');const c=a['function']||a.fn;a.enabled&&N(c)&&(b.offsets.popper=p(b.offsets.popper),b.offsets.reference=p(b.offsets.reference),b=c(b,a))}),b}function U(a,b){Object.keys(b).forEach(function(c){const d=b[c];!1===d?a.removeAttribute(c):a.setAttribute(c,b[c])})}function V(a,b){Object.keys(b).forEach((c)=>{let d='';-1!==['width','height','top','right','bottom','left'].indexOf(c)&&Q(b[c])&&(d='px'),a.style[c]=b[c]+d})}function W(a,b,d,e){const f='BODY'===a.nodeName,g=f?a.ownerDocument.defaultView:a;g.addEventListener(b,d,{passive:!0}),f||W(c(g.parentNode),b,d,e),e.push(g)}function X(a,b,d,e){d.updateBound=e,R(a).addEventListener('resize',d.updateBound,{passive:!0});const f=c(a);return W(f,'scroll',d.updateBound,d.scrollParents),d.scrollElement=f,d.eventsEnabled=!0,d}var Y={computeAutoPlacement:x,debounce:E,findIndex:G,getBordersSize:l,getBoundaries:v,getBoundingClientRect:q,getClientRect:p,getOffsetParent:f,getOffsetRect:H,getOffsetRectRelativeToArbitraryNode:r,getOuterSizes:I,getParentNode:b,getPopperOffsets:K,getReferenceOffsets:L,getScroll:j,getScrollParent:c,getStyleComputedProperty:a,getSupportedPropertyName:M,getWindowSizes:n,isFixed:t,isFunction:N,isModifierEnabled:O,isModifierRequired:P,isNumeric:Q,removeEventListeners:S,runModifiers:T,setAttributes:U,setStyles:V,setupEventListeners:X};export{x as computeAutoPlacement,E as debounce,G as findIndex,l as getBordersSize,v as getBoundaries,q as getBoundingClientRect,p as getClientRect,f as getOffsetParent,H as getOffsetRect,r as getOffsetRectRelativeToArbitraryNode,I as getOuterSizes,b as getParentNode,K as getPopperOffsets,L as getReferenceOffsets,j as getScroll,c as getScrollParent,a as getStyleComputedProperty,M as getSupportedPropertyName,n as getWindowSizes,t as isFixed,N as isFunction,O as isModifierEnabled,P as isModifierRequired,Q as isNumeric,S as removeEventListeners,T as runModifiers,U as setAttributes,V as setStyles,X as setupEventListeners};export default Y;
+//# sourceMappingURL=popper-utils.min.js.map
diff --git a/XPST/Scripts/popper-utils.min.js.map b/XPST/Scripts/popper-utils.min.js.map
new file mode 100644
index 0000000..ba25205
--- /dev/null
+++ b/XPST/Scripts/popper-utils.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-utils.min.js","sources":["../src/utils/getStyleComputedProperty.js","../src/utils/getParentNode.js","../src/utils/getScrollParent.js","../src/utils/isIE.js","../src/utils/getOffsetParent.js","../src/utils/isOffsetContainer.js","../src/utils/getRoot.js","../src/utils/findCommonOffsetParent.js","../src/utils/getScroll.js","../src/utils/includeScroll.js","../src/utils/getBordersSize.js","../src/utils/getWindowSizes.js","../src/utils/getClientRect.js","../src/utils/getBoundingClientRect.js","../src/utils/getOffsetRectRelativeToArbitraryNode.js","../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../src/utils/isFixed.js","../src/utils/getFixedPositionOffsetParent.js","../src/utils/getBoundaries.js","../src/utils/computeAutoPlacement.js","../src/utils/debounce.js","../src/utils/find.js","../src/utils/findIndex.js","../src/utils/getOffsetRect.js","../src/utils/getOuterSizes.js","../src/utils/getOppositePlacement.js","../src/utils/getPopperOffsets.js","../src/utils/getReferenceOffsets.js","../src/utils/getSupportedPropertyName.js","../src/utils/isFunction.js","../src/utils/isModifierEnabled.js","../src/utils/isModifierRequired.js","../src/utils/isNumeric.js","../src/utils/getWindow.js","../src/utils/removeEventListeners.js","../src/utils/runModifiers.js","../src/utils/setAttributes.js","../src/utils/setStyles.js","../src/utils/setupEventListeners.js","../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","overflow","overflowX","overflowY","getStyleComputedProperty","test","getScrollParent","getParentNode","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","key","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","window","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","called","Promise","resolve","then","scheduled","supportsMicroTasks","Array","prototype","find","arr","findIndex","cur","match","obj","elementRect","offsetLeft","offsetTop","x","marginBottom","y","marginRight","hash","replace","matched","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","commonOffsetParent","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","functionToCheck","getType","call","modifiers","name","enabled","requesting","isRequired","requested","warn","n","isNaN","isFinite","defaultView","removeEventListener","state","updateBound","scrollParents","forEach","target","scrollElement","eventsEnabled","modifiersToRun","ends","fn","isFunction","data","reference","value","attributes","removeAttribute","setAttribute","prop","unit","isNumeric","isBody","addEventListener","passive","push"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/popper.js b/XPST/Scripts/popper.js
new file mode 100644
index 0000000..9e7d689
--- /dev/null
+++ b/XPST/Scripts/popper.js
@@ -0,0 +1,2362 @@
+/**!
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version 1.14.1
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
+const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+let timeoutDuration = 0;
+for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+ if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+ timeoutDuration = 1;
+ break;
+ }
+}
+
+function microtaskDebounce(fn) {
+ let called = false;
+ return () => {
+ if (called) {
+ return;
+ }
+ called = true;
+ window.Promise.resolve().then(() => {
+ called = false;
+ fn();
+ });
+ };
+}
+
+function taskDebounce(fn) {
+ let scheduled = false;
+ return () => {
+ if (!scheduled) {
+ scheduled = true;
+ setTimeout(() => {
+ scheduled = false;
+ fn();
+ }, timeoutDuration);
+ }
+ };
+}
+
+const supportsMicroTasks = isBrowser && window.Promise;
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
+
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+function isFunction(functionToCheck) {
+ const getType = {};
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+}
+
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+function getStyleComputedProperty(element, property) {
+ if (element.nodeType !== 1) {
+ return [];
+ }
+ // NOTE: 1 DOM access here
+ const css = getComputedStyle(element, null);
+ return property ? css[property] : css;
+}
+
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+function getParentNode(element) {
+ if (element.nodeName === 'HTML') {
+ return element;
+ }
+ return element.parentNode || element.host;
+}
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+function getScrollParent(element) {
+ // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+ if (!element) {
+ return document.body;
+ }
+
+ switch (element.nodeName) {
+ case 'HTML':
+ case 'BODY':
+ return element.ownerDocument.body;
+ case '#document':
+ return element.body;
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+ const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);
+ if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+ return element;
+ }
+
+ return getScrollParent(getParentNode(element));
+}
+
+/**
+ * Tells if you are running Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @argument {number} version to check
+ * @returns {Boolean} isIE
+ */
+const cache = {};
+
+var isIE = function (version = 'all') {
+ version = version.toString();
+ if (cache.hasOwnProperty(version)) {
+ return cache[version];
+ }
+ switch (version) {
+ case '11':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1;
+ break;
+ case '10':
+ cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;
+ break;
+ case 'all':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;
+ break;
+ }
+
+ //Set IE
+ cache.all = cache.all || Object.keys(cache).some(key => cache[key]);
+ return cache[version];
+};
+
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+function getOffsetParent(element) {
+ if (!element) {
+ return document.documentElement;
+ }
+
+ const noOffsetParent = isIE(10) ? document.body : null;
+
+ // NOTE: 1 DOM access here
+ let offsetParent = element.offsetParent;
+ // Skip hidden elements which don't have an offsetParent
+ while (offsetParent === noOffsetParent && element.nextElementSibling) {
+ offsetParent = (element = element.nextElementSibling).offsetParent;
+ }
+
+ const nodeName = offsetParent && offsetParent.nodeName;
+
+ if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+ return element ? element.ownerDocument.documentElement : document.documentElement;
+ }
+
+ // .offsetParent will return the closest TD or TABLE in case
+ // no offsetParent is present, I hate this job...
+ if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
+ return getOffsetParent(offsetParent);
+ }
+
+ return offsetParent;
+}
+
+function isOffsetContainer(element) {
+ const { nodeName } = element;
+ if (nodeName === 'BODY') {
+ return false;
+ }
+ return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
+}
+
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+function getRoot(node) {
+ if (node.parentNode !== null) {
+ return getRoot(node.parentNode);
+ }
+
+ return node;
+}
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+function findCommonOffsetParent(element1, element2) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+ return document.documentElement;
+ }
+
+ // Here we make sure to give as "start" the element that comes first in the DOM
+ const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
+ const start = order ? element1 : element2;
+ const end = order ? element2 : element1;
+
+ // Get common ancestor container
+ const range = document.createRange();
+ range.setStart(start, 0);
+ range.setEnd(end, 0);
+ const { commonAncestorContainer } = range;
+
+ // Both nodes are inside #document
+ if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
+ if (isOffsetContainer(commonAncestorContainer)) {
+ return commonAncestorContainer;
+ }
+
+ return getOffsetParent(commonAncestorContainer);
+ }
+
+ // one of the nodes is inside shadowDOM, find which one
+ const element1root = getRoot(element1);
+ if (element1root.host) {
+ return findCommonOffsetParent(element1root.host, element2);
+ } else {
+ return findCommonOffsetParent(element1, getRoot(element2).host);
+ }
+}
+
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+function getScroll(element, side = 'top') {
+ const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+ const nodeName = element.nodeName;
+
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ const html = element.ownerDocument.documentElement;
+ const scrollingElement = element.ownerDocument.scrollingElement || html;
+ return scrollingElement[upperSide];
+ }
+
+ return element[upperSide];
+}
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+function includeScroll(rect, element, subtract = false) {
+ const scrollTop = getScroll(element, 'top');
+ const scrollLeft = getScroll(element, 'left');
+ const modifier = subtract ? -1 : 1;
+ rect.top += scrollTop * modifier;
+ rect.bottom += scrollTop * modifier;
+ rect.left += scrollLeft * modifier;
+ rect.right += scrollLeft * modifier;
+ return rect;
+}
+
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+function getBordersSize(styles, axis) {
+ const sideA = axis === 'x' ? 'Left' : 'Top';
+ const sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+ return parseFloat(styles[`border${sideA}Width`], 10) + parseFloat(styles[`border${sideB}Width`], 10);
+}
+
+function getSize(axis, body, html, computedStyle) {
+ return Math.max(body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE(10) ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0);
+}
+
+function getWindowSizes() {
+ const body = document.body;
+ const html = document.documentElement;
+ const computedStyle = isIE(10) && getComputedStyle(html);
+
+ return {
+ height: getSize('Height', body, html, computedStyle),
+ width: getSize('Width', body, html, computedStyle)
+ };
+}
+
+var _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
+
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+function getClientRect(offsets) {
+ return _extends({}, offsets, {
+ right: offsets.left + offsets.width,
+ bottom: offsets.top + offsets.height
+ });
+}
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+function getBoundingClientRect(element) {
+ let rect = {};
+
+ // IE10 10 FIX: Please, don't ask, the element isn't
+ // considered in DOM in some circumstances...
+ // This isn't reproducible in IE10 compatibility mode of IE11
+ try {
+ if (isIE(10)) {
+ rect = element.getBoundingClientRect();
+ const scrollTop = getScroll(element, 'top');
+ const scrollLeft = getScroll(element, 'left');
+ rect.top += scrollTop;
+ rect.left += scrollLeft;
+ rect.bottom += scrollTop;
+ rect.right += scrollLeft;
+ } else {
+ rect = element.getBoundingClientRect();
+ }
+ } catch (e) {}
+
+ const result = {
+ left: rect.left,
+ top: rect.top,
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top
+ };
+
+ // subtract scrollbar size from sizes
+ const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};
+ const width = sizes.width || element.clientWidth || result.right - result.left;
+ const height = sizes.height || element.clientHeight || result.bottom - result.top;
+
+ let horizScrollbar = element.offsetWidth - width;
+ let vertScrollbar = element.offsetHeight - height;
+
+ // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+ // we make this check conditional for performance reasons
+ if (horizScrollbar || vertScrollbar) {
+ const styles = getStyleComputedProperty(element);
+ horizScrollbar -= getBordersSize(styles, 'x');
+ vertScrollbar -= getBordersSize(styles, 'y');
+
+ result.width -= horizScrollbar;
+ result.height -= vertScrollbar;
+ }
+
+ return getClientRect(result);
+}
+
+function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {
+ const isIE10 = isIE(10);
+ const isHTML = parent.nodeName === 'HTML';
+ const childrenRect = getBoundingClientRect(children);
+ const parentRect = getBoundingClientRect(parent);
+ const scrollParent = getScrollParent(children);
+
+ const styles = getStyleComputedProperty(parent);
+ const borderTopWidth = parseFloat(styles.borderTopWidth, 10);
+ const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
+
+ // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+ if (fixedPosition && parent.nodeName === 'HTML') {
+ parentRect.top = Math.max(parentRect.top, 0);
+ parentRect.left = Math.max(parentRect.left, 0);
+ }
+ let offsets = getClientRect({
+ top: childrenRect.top - parentRect.top - borderTopWidth,
+ left: childrenRect.left - parentRect.left - borderLeftWidth,
+ width: childrenRect.width,
+ height: childrenRect.height
+ });
+ offsets.marginTop = 0;
+ offsets.marginLeft = 0;
+
+ // Subtract margins of documentElement in case it's being used as parent
+ // we do this only on HTML because it's the only element that behaves
+ // differently when margins are applied to it. The margins are included in
+ // the box of the documentElement, in the other cases not.
+ if (!isIE10 && isHTML) {
+ const marginTop = parseFloat(styles.marginTop, 10);
+ const marginLeft = parseFloat(styles.marginLeft, 10);
+
+ offsets.top -= borderTopWidth - marginTop;
+ offsets.bottom -= borderTopWidth - marginTop;
+ offsets.left -= borderLeftWidth - marginLeft;
+ offsets.right -= borderLeftWidth - marginLeft;
+
+ // Attach marginTop and marginLeft because in some circumstances we may need them
+ offsets.marginTop = marginTop;
+ offsets.marginLeft = marginLeft;
+ }
+
+ if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
+ offsets = includeScroll(offsets, parent);
+ }
+
+ return offsets;
+}
+
+function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {
+ const html = element.ownerDocument.documentElement;
+ const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+ const width = Math.max(html.clientWidth, window.innerWidth || 0);
+ const height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+ const scrollTop = !excludeScroll ? getScroll(html) : 0;
+ const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+ const offset = {
+ top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+ left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+ width,
+ height
+ };
+
+ return getClientRect(offset);
+}
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+function isFixed(element) {
+ const nodeName = element.nodeName;
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ return isFixed(getParentNode(element));
+}
+
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+function getFixedPositionOffsetParent(element) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element || !element.parentElement || isIE()) {
+ return document.documentElement;
+ }
+ let el = element.parentElement;
+ while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+ el = el.parentElement;
+ }
+ return el || document.documentElement;
+}
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+function getBoundaries(popper, reference, padding, boundariesElement, fixedPosition = false) {
+ // NOTE: 1 DOM access here
+
+ let boundaries = { top: 0, left: 0 };
+ const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+
+ // Handle viewport case
+ if (boundariesElement === 'viewport') {
+ boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+ } else {
+ // Handle other cases based on DOM element used as boundaries
+ let boundariesNode;
+ if (boundariesElement === 'scrollParent') {
+ boundariesNode = getScrollParent(getParentNode(reference));
+ if (boundariesNode.nodeName === 'BODY') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ }
+ } else if (boundariesElement === 'window') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ } else {
+ boundariesNode = boundariesElement;
+ }
+
+ const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
+
+ // In case of HTML, we need a different computation
+ if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+ const { height, width } = getWindowSizes();
+ boundaries.top += offsets.top - offsets.marginTop;
+ boundaries.bottom = height + offsets.top;
+ boundaries.left += offsets.left - offsets.marginLeft;
+ boundaries.right = width + offsets.left;
+ } else {
+ // for all the other DOM elements, this one is good
+ boundaries = offsets;
+ }
+ }
+
+ // Add paddings
+ boundaries.left += padding;
+ boundaries.top += padding;
+ boundaries.right -= padding;
+ boundaries.bottom -= padding;
+
+ return boundaries;
+}
+
+function getArea({ width, height }) {
+ return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement, padding = 0) {
+ if (placement.indexOf('auto') === -1) {
+ return placement;
+ }
+
+ const boundaries = getBoundaries(popper, reference, padding, boundariesElement);
+
+ const rects = {
+ top: {
+ width: boundaries.width,
+ height: refRect.top - boundaries.top
+ },
+ right: {
+ width: boundaries.right - refRect.right,
+ height: boundaries.height
+ },
+ bottom: {
+ width: boundaries.width,
+ height: boundaries.bottom - refRect.bottom
+ },
+ left: {
+ width: refRect.left - boundaries.left,
+ height: boundaries.height
+ }
+ };
+
+ const sortedAreas = Object.keys(rects).map(key => _extends({
+ key
+ }, rects[key], {
+ area: getArea(rects[key])
+ })).sort((a, b) => b.area - a.area);
+
+ const filteredAreas = sortedAreas.filter(({ width, height }) => width >= popper.clientWidth && height >= popper.clientHeight);
+
+ const computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
+
+ const variation = placement.split('-')[1];
+
+ return computedPlacement + (variation ? `-${variation}` : '');
+}
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+function getReferenceOffsets(state, popper, reference, fixedPosition = null) {
+ const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+ return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
+
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+function getOuterSizes(element) {
+ const styles = getComputedStyle(element);
+ const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
+ const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
+ const result = {
+ width: element.offsetWidth + y,
+ height: element.offsetHeight + x
+ };
+ return result;
+}
+
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+function getOppositePlacement(placement) {
+ const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);
+}
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+function getPopperOffsets(popper, referenceOffsets, placement) {
+ placement = placement.split('-')[0];
+
+ // Get popper node sizes
+ const popperRect = getOuterSizes(popper);
+
+ // Add position, width and height to our offsets object
+ const popperOffsets = {
+ width: popperRect.width,
+ height: popperRect.height
+ };
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ const isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+ const mainSide = isHoriz ? 'top' : 'left';
+ const secondarySide = isHoriz ? 'left' : 'top';
+ const measurement = isHoriz ? 'height' : 'width';
+ const secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+ popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
+ if (placement === secondarySide) {
+ popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+ } else {
+ popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
+ }
+
+ return popperOffsets;
+}
+
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function find(arr, check) {
+ // use native find if supported
+ if (Array.prototype.find) {
+ return arr.find(check);
+ }
+
+ // use `filter` to obtain the same behavior of `find`
+ return arr.filter(check)[0];
+}
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function findIndex(arr, prop, value) {
+ // use native findIndex if supported
+ if (Array.prototype.findIndex) {
+ return arr.findIndex(cur => cur[prop] === value);
+ }
+
+ // use `find` + `indexOf` if `findIndex` isn't supported
+ const match = find(arr, obj => obj[prop] === value);
+ return arr.indexOf(match);
+}
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+function runModifiers(modifiers, data, ends) {
+ const modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+ modifiersToRun.forEach(modifier => {
+ if (modifier['function']) {
+ // eslint-disable-line dot-notation
+ console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+ }
+ const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+ if (modifier.enabled && isFunction(fn)) {
+ // Add properties to offsets to make them a complete clientRect object
+ // we do this before each modifier to make sure the previous one doesn't
+ // mess with these values
+ data.offsets.popper = getClientRect(data.offsets.popper);
+ data.offsets.reference = getClientRect(data.offsets.reference);
+
+ data = fn(data, modifier);
+ }
+ });
+
+ return data;
+}
+
+/**
+ * Updates the position of the popper, computing the new offsets and applying
+ * the new style.
+ * Prefer `scheduleUpdate` over `update` because of performance reasons.
+ * @method
+ * @memberof Popper
+ */
+function update() {
+ // if popper is destroyed, don't perform any further update
+ if (this.state.isDestroyed) {
+ return;
+ }
+
+ let data = {
+ instance: this,
+ styles: {},
+ arrowStyles: {},
+ attributes: {},
+ flipped: false,
+ offsets: {}
+ };
+
+ // compute reference element offsets
+ data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
+
+ // compute auto placement, store placement inside the data object,
+ // modifiers will be able to edit `placement` if needed
+ // and refer to originalPlacement to know the original value
+ data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
+
+ // store the computed placement inside `originalPlacement`
+ data.originalPlacement = data.placement;
+
+ data.positionFixed = this.options.positionFixed;
+
+ // compute the popper offsets
+ data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
+ data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
+
+ // run the modifiers
+ data = runModifiers(this.modifiers, data);
+
+ // the first `update` will call `onCreate` callback
+ // the other ones will call `onUpdate` callback
+ if (!this.state.isCreated) {
+ this.state.isCreated = true;
+ this.options.onCreate(data);
+ } else {
+ this.options.onUpdate(data);
+ }
+}
+
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+function isModifierEnabled(modifiers, modifierName) {
+ return modifiers.some(({ name, enabled }) => enabled && name === modifierName);
+}
+
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+function getSupportedPropertyName(property) {
+ const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+ const upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+ for (let i = 0; i < prefixes.length; i++) {
+ const prefix = prefixes[i];
+ const toCheck = prefix ? `${prefix}${upperProp}` : property;
+ if (typeof document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+}
+
+/**
+ * Destroy the popper
+ * @method
+ * @memberof Popper
+ */
+function destroy() {
+ this.state.isDestroyed = true;
+
+ // touch DOM only if `applyStyle` modifier is enabled
+ if (isModifierEnabled(this.modifiers, 'applyStyle')) {
+ this.popper.removeAttribute('x-placement');
+ this.popper.style.position = '';
+ this.popper.style.top = '';
+ this.popper.style.left = '';
+ this.popper.style.right = '';
+ this.popper.style.bottom = '';
+ this.popper.style.willChange = '';
+ this.popper.style[getSupportedPropertyName('transform')] = '';
+ }
+
+ this.disableEventListeners();
+
+ // remove the popper if user explicity asked for the deletion on destroy
+ // do not use `remove` because IE11 doesn't support it
+ if (this.options.removeOnDestroy) {
+ this.popper.parentNode.removeChild(this.popper);
+ }
+ return this;
+}
+
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+function getWindow(element) {
+ const ownerDocument = element.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView : window;
+}
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+ const isBody = scrollParent.nodeName === 'BODY';
+ const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+ target.addEventListener(event, callback, { passive: true });
+
+ if (!isBody) {
+ attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
+ }
+ scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function setupEventListeners(reference, options, state, updateBound) {
+ // Resize event listener on window
+ state.updateBound = updateBound;
+ getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+ // Scroll event listener on scroll parents
+ const scrollElement = getScrollParent(reference);
+ attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
+ state.scrollElement = scrollElement;
+ state.eventsEnabled = true;
+
+ return state;
+}
+
+/**
+ * It will add resize/scroll events and start recalculating
+ * position of the popper element when they are triggered.
+ * @method
+ * @memberof Popper
+ */
+function enableEventListeners() {
+ if (!this.state.eventsEnabled) {
+ this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
+ }
+}
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function removeEventListeners(reference, state) {
+ // Remove resize event listener on window
+ getWindow(reference).removeEventListener('resize', state.updateBound);
+
+ // Remove scroll event listener on scroll parents
+ state.scrollParents.forEach(target => {
+ target.removeEventListener('scroll', state.updateBound);
+ });
+
+ // Reset state
+ state.updateBound = null;
+ state.scrollParents = [];
+ state.scrollElement = null;
+ state.eventsEnabled = false;
+ return state;
+}
+
+/**
+ * It will remove resize/scroll events and won't recalculate popper position
+ * when they are triggered. It also won't trigger onUpdate callback anymore,
+ * unless you call `update` method manually.
+ * @method
+ * @memberof Popper
+ */
+function disableEventListeners() {
+ if (this.state.eventsEnabled) {
+ cancelAnimationFrame(this.scheduleUpdate);
+ this.state = removeEventListeners(this.reference, this.state);
+ }
+}
+
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+function isNumeric(n) {
+ return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setStyles(element, styles) {
+ Object.keys(styles).forEach(prop => {
+ let unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+}
+
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setAttributes(element, attributes) {
+ Object.keys(attributes).forEach(function (prop) {
+ const value = attributes[prop];
+ if (value !== false) {
+ element.setAttribute(prop, attributes[prop]);
+ } else {
+ element.removeAttribute(prop);
+ }
+ });
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} data.styles - List of style properties - values to apply to popper element
+ * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The same data object
+ */
+function applyStyle(data) {
+ // any property present in `data.styles` will be applied to the popper,
+ // in this way we can make the 3rd party modifiers add custom styles to it
+ // Be aware, modifiers could override the properties defined in the previous
+ // lines of this modifier!
+ setStyles(data.instance.popper, data.styles);
+
+ // any property present in `data.attributes` will be applied to the popper,
+ // they will be set as HTML attributes of the element
+ setAttributes(data.instance.popper, data.attributes);
+
+ // if arrowElement is defined and arrowStyles has some properties
+ if (data.arrowElement && Object.keys(data.arrowStyles).length) {
+ setStyles(data.arrowElement, data.arrowStyles);
+ }
+
+ return data;
+}
+
+/**
+ * Set the x-placement attribute before everything else because it could be used
+ * to add margins to the popper margins needs to be calculated to get the
+ * correct popper offsets.
+ * @method
+ * @memberof Popper.modifiers
+ * @param {HTMLElement} reference - The reference element used to position the popper
+ * @param {HTMLElement} popper - The HTML element used as popper
+ * @param {Object} options - Popper.js options
+ */
+function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
+ // compute reference element offsets
+ const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
+
+ // compute auto placement, store placement inside the data object,
+ // modifiers will be able to edit `placement` if needed
+ // and refer to originalPlacement to know the original value
+ const placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
+
+ popper.setAttribute('x-placement', placement);
+
+ // Apply `position` to popper before anything else because
+ // without the position applied we can't guarantee correct computations
+ setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
+
+ return options;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeStyle(data, options) {
+ const { x, y } = options;
+ const { popper } = data.offsets;
+
+ // Remove this legacy support in Popper.js v2
+ const legacyGpuAccelerationOption = find(data.instance.modifiers, modifier => modifier.name === 'applyStyle').gpuAcceleration;
+ if (legacyGpuAccelerationOption !== undefined) {
+ console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
+ }
+ const gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
+
+ const offsetParent = getOffsetParent(data.instance.popper);
+ const offsetParentRect = getBoundingClientRect(offsetParent);
+
+ // Styles
+ const styles = {
+ position: popper.position
+ };
+
+ // floor sides to avoid blurry text
+ const offsets = {
+ left: Math.floor(popper.left),
+ top: Math.floor(popper.top),
+ bottom: Math.floor(popper.bottom),
+ right: Math.floor(popper.right)
+ };
+
+ const sideA = x === 'bottom' ? 'top' : 'bottom';
+ const sideB = y === 'right' ? 'left' : 'right';
+
+ // if gpuAcceleration is set to `true` and transform is supported,
+ // we use `translate3d` to apply the position to the popper we
+ // automatically use the supported prefixed version if needed
+ const prefixedProperty = getSupportedPropertyName('transform');
+
+ // now, let's make a step back and look at this code closely (wtf?)
+ // If the content of the popper grows once it's been positioned, it
+ // may happen that the popper gets misplaced because of the new content
+ // overflowing its reference element
+ // To avoid this problem, we provide two options (x and y), which allow
+ // the consumer to define the offset origin.
+ // If we position a popper on top of a reference element, we can set
+ // `x` to `top` to make the popper grow towards its top instead of
+ // its bottom.
+ let left, top;
+ if (sideA === 'bottom') {
+ top = -offsetParentRect.height + offsets.bottom;
+ } else {
+ top = offsets.top;
+ }
+ if (sideB === 'right') {
+ left = -offsetParentRect.width + offsets.right;
+ } else {
+ left = offsets.left;
+ }
+ if (gpuAcceleration && prefixedProperty) {
+ styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;
+ styles[sideA] = 0;
+ styles[sideB] = 0;
+ styles.willChange = 'transform';
+ } else {
+ // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
+ const invertTop = sideA === 'bottom' ? -1 : 1;
+ const invertLeft = sideB === 'right' ? -1 : 1;
+ styles[sideA] = top * invertTop;
+ styles[sideB] = left * invertLeft;
+ styles.willChange = `${sideA}, ${sideB}`;
+ }
+
+ // Attributes
+ const attributes = {
+ 'x-placement': data.placement
+ };
+
+ // Update `data` attributes, styles and arrowStyles
+ data.attributes = _extends({}, attributes, data.attributes);
+ data.styles = _extends({}, styles, data.styles);
+ data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
+
+ return data;
+}
+
+/**
+ * Helper used to know if the given modifier depends from another one.
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+function isModifierRequired(modifiers, requestingName, requestedName) {
+ const requesting = find(modifiers, ({ name }) => name === requestingName);
+
+ const isRequired = !!requesting && modifiers.some(modifier => {
+ return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
+ });
+
+ if (!isRequired) {
+ const requesting = `\`${requestingName}\``;
+ const requested = `\`${requestedName}\``;
+ console.warn(`${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`);
+ }
+ return isRequired;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function arrow(data, options) {
+ // arrow depends on keepTogether in order to work
+ if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
+ return data;
+ }
+
+ let arrowElement = options.element;
+
+ // if arrowElement is a string, suppose it's a CSS selector
+ if (typeof arrowElement === 'string') {
+ arrowElement = data.instance.popper.querySelector(arrowElement);
+
+ // if arrowElement is not found, don't run the modifier
+ if (!arrowElement) {
+ return data;
+ }
+ } else {
+ // if the arrowElement isn't a query selector we must check that the
+ // provided DOM node is child of its popper node
+ if (!data.instance.popper.contains(arrowElement)) {
+ console.warn('WARNING: `arrow.element` must be child of its popper element!');
+ return data;
+ }
+ }
+
+ const placement = data.placement.split('-')[0];
+ const { popper, reference } = data.offsets;
+ const isVertical = ['left', 'right'].indexOf(placement) !== -1;
+
+ const len = isVertical ? 'height' : 'width';
+ const sideCapitalized = isVertical ? 'Top' : 'Left';
+ const side = sideCapitalized.toLowerCase();
+ const altSide = isVertical ? 'left' : 'top';
+ const opSide = isVertical ? 'bottom' : 'right';
+ const arrowElementSize = getOuterSizes(arrowElement)[len];
+
+ //
+ // extends keepTogether behavior making sure the popper and its
+ // reference have enough pixels in conjuction
+ //
+
+ // top/left side
+ if (reference[opSide] - arrowElementSize < popper[side]) {
+ data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
+ }
+ // bottom/right side
+ if (reference[side] + arrowElementSize > popper[opSide]) {
+ data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
+ }
+ data.offsets.popper = getClientRect(data.offsets.popper);
+
+ // compute center of the popper
+ const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
+
+ // Compute the sideValue using the updated popper offsets
+ // take popper margin in account because we don't have this info available
+ const css = getStyleComputedProperty(data.instance.popper);
+ const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);
+ const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);
+ let sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
+
+ // prevent arrowElement from being placed not contiguously to its popper
+ sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
+
+ data.arrowElement = arrowElement;
+ data.offsets.arrow = {
+ [side]: Math.round(sideValue),
+ [altSide]: '' // make sure to unset any eventual altSide value from the DOM node
+ };
+
+ return data;
+}
+
+/**
+ * Get the opposite placement variation of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement variation
+ * @returns {String} flipped placement variation
+ */
+function getOppositeVariation(variation) {
+ if (variation === 'end') {
+ return 'start';
+ } else if (variation === 'start') {
+ return 'end';
+ }
+ return variation;
+}
+
+/**
+ * List of accepted placements to use as values of the `placement` option.
+ * Valid placements are:
+ * - `auto`
+ * - `top`
+ * - `right`
+ * - `bottom`
+ * - `left`
+ *
+ * Each placement can have a variation from this list:
+ * - `-start`
+ * - `-end`
+ *
+ * Variations are interpreted easily if you think of them as the left to right
+ * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
+ * is right.
+ * Vertically (`left` and `right`), `start` is top and `end` is bottom.
+ *
+ * Some valid examples are:
+ * - `top-end` (on top of reference, right aligned)
+ * - `right-start` (on right of reference, top aligned)
+ * - `bottom` (on bottom, centered)
+ * - `auto-right` (on the side with more space available, alignment depends by placement)
+ *
+ * @static
+ * @type {Array}
+ * @enum {String}
+ * @readonly
+ * @method placements
+ * @memberof Popper
+ */
+var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
+
+// Get rid of `auto` `auto-start` and `auto-end`
+const validPlacements = placements.slice(3);
+
+/**
+ * Given an initial placement, returns all the subsequent placements
+ * clockwise (or counter-clockwise).
+ *
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement - A valid placement (it accepts variations)
+ * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
+ * @returns {Array} placements including their variations
+ */
+function clockwise(placement, counter = false) {
+ const index = validPlacements.indexOf(placement);
+ const arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
+ return counter ? arr.reverse() : arr;
+}
+
+const BEHAVIORS = {
+ FLIP: 'flip',
+ CLOCKWISE: 'clockwise',
+ COUNTERCLOCKWISE: 'counterclockwise'
+};
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function flip(data, options) {
+ // if `inner` modifier is enabled, we can't use the `flip` modifier
+ if (isModifierEnabled(data.instance.modifiers, 'inner')) {
+ return data;
+ }
+
+ if (data.flipped && data.placement === data.originalPlacement) {
+ // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
+ return data;
+ }
+
+ const boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
+
+ let placement = data.placement.split('-')[0];
+ let placementOpposite = getOppositePlacement(placement);
+ let variation = data.placement.split('-')[1] || '';
+
+ let flipOrder = [];
+
+ switch (options.behavior) {
+ case BEHAVIORS.FLIP:
+ flipOrder = [placement, placementOpposite];
+ break;
+ case BEHAVIORS.CLOCKWISE:
+ flipOrder = clockwise(placement);
+ break;
+ case BEHAVIORS.COUNTERCLOCKWISE:
+ flipOrder = clockwise(placement, true);
+ break;
+ default:
+ flipOrder = options.behavior;
+ }
+
+ flipOrder.forEach((step, index) => {
+ if (placement !== step || flipOrder.length === index + 1) {
+ return data;
+ }
+
+ placement = data.placement.split('-')[0];
+ placementOpposite = getOppositePlacement(placement);
+
+ const popperOffsets = data.offsets.popper;
+ const refOffsets = data.offsets.reference;
+
+ // using floor because the reference offsets may contain decimals we are not going to consider here
+ const floor = Math.floor;
+ const overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
+
+ const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
+ const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
+ const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
+ const overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
+
+ const overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
+
+ // flip the variation if required
+ const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+ const flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
+
+ if (overlapsRef || overflowsBoundaries || flippedVariation) {
+ // this boolean to detect any flip loop
+ data.flipped = true;
+
+ if (overlapsRef || overflowsBoundaries) {
+ placement = flipOrder[index + 1];
+ }
+
+ if (flippedVariation) {
+ variation = getOppositeVariation(variation);
+ }
+
+ data.placement = placement + (variation ? '-' + variation : '');
+
+ // this object contains `position`, we want to preserve it along with
+ // any additional property we may add in the future
+ data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
+
+ data = runModifiers(data.instance.modifiers, data, 'flip');
+ }
+ });
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function keepTogether(data) {
+ const { popper, reference } = data.offsets;
+ const placement = data.placement.split('-')[0];
+ const floor = Math.floor;
+ const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+ const side = isVertical ? 'right' : 'bottom';
+ const opSide = isVertical ? 'left' : 'top';
+ const measurement = isVertical ? 'width' : 'height';
+
+ if (popper[side] < floor(reference[opSide])) {
+ data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
+ }
+ if (popper[opSide] > floor(reference[side])) {
+ data.offsets.popper[opSide] = floor(reference[side]);
+ }
+
+ return data;
+}
+
+/**
+ * Converts a string containing value + unit into a px value number
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} str - Value + unit string
+ * @argument {String} measurement - `height` or `width`
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @returns {Number|String}
+ * Value in pixels, or original string if no values were extracted
+ */
+function toValue(str, measurement, popperOffsets, referenceOffsets) {
+ // separate value from unit
+ const split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
+ const value = +split[1];
+ const unit = split[2];
+
+ // If it's not a number it's an operator, I guess
+ if (!value) {
+ return str;
+ }
+
+ if (unit.indexOf('%') === 0) {
+ let element;
+ switch (unit) {
+ case '%p':
+ element = popperOffsets;
+ break;
+ case '%':
+ case '%r':
+ default:
+ element = referenceOffsets;
+ }
+
+ const rect = getClientRect(element);
+ return rect[measurement] / 100 * value;
+ } else if (unit === 'vh' || unit === 'vw') {
+ // if is a vh or vw, we calculate the size based on the viewport
+ let size;
+ if (unit === 'vh') {
+ size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+ } else {
+ size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
+ }
+ return size / 100 * value;
+ } else {
+ // if is an explicit pixel unit, we get rid of the unit and keep the value
+ // if is an implicit unit, it's px, and we return just the value
+ return value;
+ }
+}
+
+/**
+ * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} offset
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @argument {String} basePlacement
+ * @returns {Array} a two cells array with x and y offsets in numbers
+ */
+function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
+ const offsets = [0, 0];
+
+ // Use height if placement is left or right and index is 0 otherwise use width
+ // in this way the first offset will use an axis and the second one
+ // will use the other one
+ const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
+
+ // Split the offset string to obtain a list of values and operands
+ // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
+ const fragments = offset.split(/(\+|\-)/).map(frag => frag.trim());
+
+ // Detect if the offset string contains a pair of values or a single one
+ // they could be separated by comma or space
+ const divider = fragments.indexOf(find(fragments, frag => frag.search(/,|\s/) !== -1));
+
+ if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
+ console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
+ }
+
+ // If divider is found, we divide the list of values and operands to divide
+ // them by ofset X and Y.
+ const splitRegex = /\s*,\s*|\s+/;
+ let ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
+
+ // Convert the values with units to absolute pixels to allow our computations
+ ops = ops.map((op, index) => {
+ // Most of the units rely on the orientation of the popper
+ const measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
+ let mergeWithPrevious = false;
+ return op
+ // This aggregates any `+` or `-` sign that aren't considered operators
+ // e.g.: 10 + +5 => [10, +, +5]
+ .reduce((a, b) => {
+ if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
+ a[a.length - 1] = b;
+ mergeWithPrevious = true;
+ return a;
+ } else if (mergeWithPrevious) {
+ a[a.length - 1] += b;
+ mergeWithPrevious = false;
+ return a;
+ } else {
+ return a.concat(b);
+ }
+ }, [])
+ // Here we convert the string values into number values (in px)
+ .map(str => toValue(str, measurement, popperOffsets, referenceOffsets));
+ });
+
+ // Loop trough the offsets arrays and execute the operations
+ ops.forEach((op, index) => {
+ op.forEach((frag, index2) => {
+ if (isNumeric(frag)) {
+ offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
+ }
+ });
+ });
+ return offsets;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @argument {Number|String} options.offset=0
+ * The offset value as described in the modifier description
+ * @returns {Object} The data object, properly modified
+ */
+function offset(data, { offset }) {
+ const { placement, offsets: { popper, reference } } = data;
+ const basePlacement = placement.split('-')[0];
+
+ let offsets;
+ if (isNumeric(+offset)) {
+ offsets = [+offset, 0];
+ } else {
+ offsets = parseOffset(offset, popper, reference, basePlacement);
+ }
+
+ if (basePlacement === 'left') {
+ popper.top += offsets[0];
+ popper.left -= offsets[1];
+ } else if (basePlacement === 'right') {
+ popper.top += offsets[0];
+ popper.left += offsets[1];
+ } else if (basePlacement === 'top') {
+ popper.left += offsets[0];
+ popper.top -= offsets[1];
+ } else if (basePlacement === 'bottom') {
+ popper.left += offsets[0];
+ popper.top += offsets[1];
+ }
+
+ data.popper = popper;
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function preventOverflow(data, options) {
+ let boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
+
+ // If offsetParent is the reference element, we really want to
+ // go one step up and use the next offsetParent as reference to
+ // avoid to make this modifier completely useless and look like broken
+ if (data.instance.reference === boundariesElement) {
+ boundariesElement = getOffsetParent(boundariesElement);
+ }
+
+ const boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
+ options.boundaries = boundaries;
+
+ const order = options.priority;
+ let popper = data.offsets.popper;
+
+ const check = {
+ primary(placement) {
+ let value = popper[placement];
+ if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
+ value = Math.max(popper[placement], boundaries[placement]);
+ }
+ return { [placement]: value };
+ },
+ secondary(placement) {
+ const mainSide = placement === 'right' ? 'left' : 'top';
+ let value = popper[mainSide];
+ if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
+ value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
+ }
+ return { [mainSide]: value };
+ }
+ };
+
+ order.forEach(placement => {
+ const side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
+ popper = _extends({}, popper, check[side](placement));
+ });
+
+ data.offsets.popper = popper;
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function shift(data) {
+ const placement = data.placement;
+ const basePlacement = placement.split('-')[0];
+ const shiftvariation = placement.split('-')[1];
+
+ // if shift shiftvariation is specified, run the modifier
+ if (shiftvariation) {
+ const { reference, popper } = data.offsets;
+ const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
+ const side = isVertical ? 'left' : 'top';
+ const measurement = isVertical ? 'width' : 'height';
+
+ const shiftOffsets = {
+ start: { [side]: reference[side] },
+ end: {
+ [side]: reference[side] + reference[measurement] - popper[measurement]
+ }
+ };
+
+ data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
+ }
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function hide(data) {
+ if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
+ return data;
+ }
+
+ const refRect = data.offsets.reference;
+ const bound = find(data.instance.modifiers, modifier => modifier.name === 'preventOverflow').boundaries;
+
+ if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
+ // Avoid unnecessary DOM access if visibility hasn't changed
+ if (data.hide === true) {
+ return data;
+ }
+
+ data.hide = true;
+ data.attributes['x-out-of-boundaries'] = '';
+ } else {
+ // Avoid unnecessary DOM access if visibility hasn't changed
+ if (data.hide === false) {
+ return data;
+ }
+
+ data.hide = false;
+ data.attributes['x-out-of-boundaries'] = false;
+ }
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function inner(data) {
+ const placement = data.placement;
+ const basePlacement = placement.split('-')[0];
+ const { popper, reference } = data.offsets;
+ const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
+
+ const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
+
+ popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
+
+ data.placement = getOppositePlacement(placement);
+ data.offsets.popper = getClientRect(popper);
+
+ return data;
+}
+
+/**
+ * Modifier function, each modifier can have a function of this type assigned
+ * to its `fn` property.
+ * These functions will be called on each update, this means that you must
+ * make sure they are performant enough to avoid performance bottlenecks.
+ *
+ * @function ModifierFn
+ * @argument {dataObject} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {dataObject} The data object, properly modified
+ */
+
+/**
+ * Modifiers are plugins used to alter the behavior of your poppers.
+ * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
+ * needed by the library.
+ *
+ * Usually you don't want to override the `order`, `fn` and `onLoad` props.
+ * All the other properties are configurations that could be tweaked.
+ * @namespace modifiers
+ */
+var modifiers = {
+ /**
+ * Modifier used to shift the popper on the start or end of its reference
+ * element.
+ * It will read the variation of the `placement` property.
+ * It can be one either `-end` or `-start`.
+ * @memberof modifiers
+ * @inner
+ */
+ shift: {
+ /** @prop {number} order=100 - Index used to define the order of execution */
+ order: 100,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: shift
+ },
+
+ /**
+ * The `offset` modifier can shift your popper on both its axis.
+ *
+ * It accepts the following units:
+ * - `px` or unitless, interpreted as pixels
+ * - `%` or `%r`, percentage relative to the length of the reference element
+ * - `%p`, percentage relative to the length of the popper element
+ * - `vw`, CSS viewport width unit
+ * - `vh`, CSS viewport height unit
+ *
+ * For length is intended the main axis relative to the placement of the popper.
+ * This means that if the placement is `top` or `bottom`, the length will be the
+ * `width`. In case of `left` or `right`, it will be the height.
+ *
+ * You can provide a single value (as `Number` or `String`), or a pair of values
+ * as `String` divided by a comma or one (or more) white spaces.
+ * The latter is a deprecated method because it leads to confusion and will be
+ * removed in v2.
+ * Additionally, it accepts additions and subtractions between different units.
+ * Note that multiplications and divisions aren't supported.
+ *
+ * Valid examples are:
+ * ```
+ * 10
+ * '10%'
+ * '10, 10'
+ * '10%, 10'
+ * '10 + 10%'
+ * '10 - 5vh + 3%'
+ * '-10px + 5vh, 5px - 6%'
+ * ```
+ * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
+ * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
+ * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ offset: {
+ /** @prop {number} order=200 - Index used to define the order of execution */
+ order: 200,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: offset,
+ /** @prop {Number|String} offset=0
+ * The offset value as described in the modifier description
+ */
+ offset: 0
+ },
+
+ /**
+ * Modifier used to prevent the popper from being positioned outside the boundary.
+ *
+ * An scenario exists where the reference itself is not within the boundaries.
+ * We can say it has "escaped the boundaries" — or just "escaped".
+ * In this case we need to decide whether the popper should either:
+ *
+ * - detach from the reference and remain "trapped" in the boundaries, or
+ * - if it should ignore the boundary and "escape with its reference"
+ *
+ * When `escapeWithReference` is set to`true` and reference is completely
+ * outside its boundaries, the popper will overflow (or completely leave)
+ * the boundaries in order to remain attached to the edge of the reference.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ preventOverflow: {
+ /** @prop {number} order=300 - Index used to define the order of execution */
+ order: 300,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: preventOverflow,
+ /**
+ * @prop {Array} [priority=['left','right','top','bottom']]
+ * Popper will try to prevent overflow following these priorities by default,
+ * then, it could overflow on the left and on top of the `boundariesElement`
+ */
+ priority: ['left', 'right', 'top', 'bottom'],
+ /**
+ * @prop {number} padding=5
+ * Amount of pixel used to define a minimum distance between the boundaries
+ * and the popper this makes sure the popper has always a little padding
+ * between the edges of its container
+ */
+ padding: 5,
+ /**
+ * @prop {String|HTMLElement} boundariesElement='scrollParent'
+ * Boundaries used by the modifier, can be `scrollParent`, `window`,
+ * `viewport` or any DOM element.
+ */
+ boundariesElement: 'scrollParent'
+ },
+
+ /**
+ * Modifier used to make sure the reference and its popper stay near eachothers
+ * without leaving any gap between the two. Expecially useful when the arrow is
+ * enabled and you want to assure it to point to its reference element.
+ * It cares only about the first axis, you can still have poppers with margin
+ * between the popper and its reference element.
+ * @memberof modifiers
+ * @inner
+ */
+ keepTogether: {
+ /** @prop {number} order=400 - Index used to define the order of execution */
+ order: 400,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: keepTogether
+ },
+
+ /**
+ * This modifier is used to move the `arrowElement` of the popper to make
+ * sure it is positioned between the reference element and its popper element.
+ * It will read the outer size of the `arrowElement` node to detect how many
+ * pixels of conjuction are needed.
+ *
+ * It has no effect if no `arrowElement` is provided.
+ * @memberof modifiers
+ * @inner
+ */
+ arrow: {
+ /** @prop {number} order=500 - Index used to define the order of execution */
+ order: 500,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: arrow,
+ /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
+ element: '[x-arrow]'
+ },
+
+ /**
+ * Modifier used to flip the popper's placement when it starts to overlap its
+ * reference element.
+ *
+ * Requires the `preventOverflow` modifier before it in order to work.
+ *
+ * **NOTE:** this modifier will interrupt the current update cycle and will
+ * restart it if it detects the need to flip the placement.
+ * @memberof modifiers
+ * @inner
+ */
+ flip: {
+ /** @prop {number} order=600 - Index used to define the order of execution */
+ order: 600,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: flip,
+ /**
+ * @prop {String|Array} behavior='flip'
+ * The behavior used to change the popper's placement. It can be one of
+ * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
+ * placements (with optional variations).
+ */
+ behavior: 'flip',
+ /**
+ * @prop {number} padding=5
+ * The popper will flip if it hits the edges of the `boundariesElement`
+ */
+ padding: 5,
+ /**
+ * @prop {String|HTMLElement} boundariesElement='viewport'
+ * The element which will define the boundaries of the popper position,
+ * the popper will never be placed outside of the defined boundaries
+ * (except if keepTogether is enabled)
+ */
+ boundariesElement: 'viewport'
+ },
+
+ /**
+ * Modifier used to make the popper flow toward the inner of the reference element.
+ * By default, when this modifier is disabled, the popper will be placed outside
+ * the reference element.
+ * @memberof modifiers
+ * @inner
+ */
+ inner: {
+ /** @prop {number} order=700 - Index used to define the order of execution */
+ order: 700,
+ /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
+ enabled: false,
+ /** @prop {ModifierFn} */
+ fn: inner
+ },
+
+ /**
+ * Modifier used to hide the popper when its reference element is outside of the
+ * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
+ * be used to hide with a CSS selector the popper when its reference is
+ * out of boundaries.
+ *
+ * Requires the `preventOverflow` modifier before it in order to work.
+ * @memberof modifiers
+ * @inner
+ */
+ hide: {
+ /** @prop {number} order=800 - Index used to define the order of execution */
+ order: 800,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: hide
+ },
+
+ /**
+ * Computes the style that will be applied to the popper element to gets
+ * properly positioned.
+ *
+ * Note that this modifier will not touch the DOM, it just prepares the styles
+ * so that `applyStyle` modifier can apply it. This separation is useful
+ * in case you need to replace `applyStyle` with a custom implementation.
+ *
+ * This modifier has `850` as `order` value to maintain backward compatibility
+ * with previous versions of Popper.js. Expect the modifiers ordering method
+ * to change in future major versions of the library.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ computeStyle: {
+ /** @prop {number} order=850 - Index used to define the order of execution */
+ order: 850,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: computeStyle,
+ /**
+ * @prop {Boolean} gpuAcceleration=true
+ * If true, it uses the CSS 3d transformation to position the popper.
+ * Otherwise, it will use the `top` and `left` properties.
+ */
+ gpuAcceleration: true,
+ /**
+ * @prop {string} [x='bottom']
+ * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
+ * Change this if your popper should grow in a direction different from `bottom`
+ */
+ x: 'bottom',
+ /**
+ * @prop {string} [x='left']
+ * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
+ * Change this if your popper should grow in a direction different from `right`
+ */
+ y: 'right'
+ },
+
+ /**
+ * Applies the computed styles to the popper element.
+ *
+ * All the DOM manipulations are limited to this modifier. This is useful in case
+ * you want to integrate Popper.js inside a framework or view library and you
+ * want to delegate all the DOM manipulations to it.
+ *
+ * Note that if you disable this modifier, you must make sure the popper element
+ * has its position set to `absolute` before Popper.js can do its work!
+ *
+ * Just disable this modifier and define you own to achieve the desired effect.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ applyStyle: {
+ /** @prop {number} order=900 - Index used to define the order of execution */
+ order: 900,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: applyStyle,
+ /** @prop {Function} */
+ onLoad: applyStyleOnLoad,
+ /**
+ * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
+ * @prop {Boolean} gpuAcceleration=true
+ * If true, it uses the CSS 3d transformation to position the popper.
+ * Otherwise, it will use the `top` and `left` properties.
+ */
+ gpuAcceleration: undefined
+ }
+};
+
+/**
+ * The `dataObject` is an object containing all the informations used by Popper.js
+ * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
+ * @name dataObject
+ * @property {Object} data.instance The Popper.js instance
+ * @property {String} data.placement Placement applied to popper
+ * @property {String} data.originalPlacement Placement originally defined on init
+ * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
+ * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.
+ * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
+ * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.boundaries Offsets of the popper boundaries
+ * @property {Object} data.offsets The measurements of popper, reference and arrow elements.
+ * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
+ */
+
+/**
+ * Default options provided to Popper.js constructor.
+ * These can be overriden using the `options` argument of Popper.js.
+ * To override an option, simply pass as 3rd argument an object with the same
+ * structure of this object, example:
+ * ```
+ * new Popper(ref, pop, {
+ * modifiers: {
+ * preventOverflow: { enabled: false }
+ * }
+ * })
+ * ```
+ * @type {Object}
+ * @static
+ * @memberof Popper
+ */
+var Defaults = {
+ /**
+ * Popper's placement
+ * @prop {Popper.placements} placement='bottom'
+ */
+ placement: 'bottom',
+
+ /**
+ * Set this to true if you want popper to position it self in 'fixed' mode
+ * @prop {Boolean} positionFixed=false
+ */
+ positionFixed: false,
+
+ /**
+ * Whether events (resize, scroll) are initially enabled
+ * @prop {Boolean} eventsEnabled=true
+ */
+ eventsEnabled: true,
+
+ /**
+ * Set to true if you want to automatically remove the popper when
+ * you call the `destroy` method.
+ * @prop {Boolean} removeOnDestroy=false
+ */
+ removeOnDestroy: false,
+
+ /**
+ * Callback called when the popper is created.
+ * By default, is set to no-op.
+ * Access Popper.js instance with `data.instance`.
+ * @prop {onCreate}
+ */
+ onCreate: () => {},
+
+ /**
+ * Callback called when the popper is updated, this callback is not called
+ * on the initialization/creation of the popper, but only on subsequent
+ * updates.
+ * By default, is set to no-op.
+ * Access Popper.js instance with `data.instance`.
+ * @prop {onUpdate}
+ */
+ onUpdate: () => {},
+
+ /**
+ * List of modifiers used to modify the offsets before they are applied to the popper.
+ * They provide most of the functionalities of Popper.js
+ * @prop {modifiers}
+ */
+ modifiers
+};
+
+/**
+ * @callback onCreate
+ * @param {dataObject} data
+ */
+
+/**
+ * @callback onUpdate
+ * @param {dataObject} data
+ */
+
+// Utils
+// Methods
+class Popper {
+ /**
+ * Create a new Popper.js instance
+ * @class Popper
+ * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
+ * @param {HTMLElement} popper - The HTML element used as popper.
+ * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
+ * @return {Object} instance - The generated Popper.js instance
+ */
+ constructor(reference, popper, options = {}) {
+ this.scheduleUpdate = () => requestAnimationFrame(this.update);
+
+ // make update() debounced, so that it only runs at most once-per-tick
+ this.update = debounce(this.update.bind(this));
+
+ // with {} we create a new object with the options inside it
+ this.options = _extends({}, Popper.Defaults, options);
+
+ // init state
+ this.state = {
+ isDestroyed: false,
+ isCreated: false,
+ scrollParents: []
+ };
+
+ // get reference and popper elements (allow jQuery wrappers)
+ this.reference = reference && reference.jquery ? reference[0] : reference;
+ this.popper = popper && popper.jquery ? popper[0] : popper;
+
+ // Deep merge modifiers options
+ this.options.modifiers = {};
+ Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(name => {
+ this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
+ });
+
+ // Refactoring modifiers' list (Object => Array)
+ this.modifiers = Object.keys(this.options.modifiers).map(name => _extends({
+ name
+ }, this.options.modifiers[name]))
+ // sort the modifiers by order
+ .sort((a, b) => a.order - b.order);
+
+ // modifiers have the ability to execute arbitrary code when Popper.js get inited
+ // such code is executed in the same order of its modifier
+ // they could add new properties to their options configuration
+ // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
+ this.modifiers.forEach(modifierOptions => {
+ if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
+ modifierOptions.onLoad(this.reference, this.popper, this.options, modifierOptions, this.state);
+ }
+ });
+
+ // fire the first update to position the popper in the right place
+ this.update();
+
+ const eventsEnabled = this.options.eventsEnabled;
+ if (eventsEnabled) {
+ // setup event listeners, they will take care of update the position in specific situations
+ this.enableEventListeners();
+ }
+
+ this.state.eventsEnabled = eventsEnabled;
+ }
+
+ // We can't use class properties because they don't get listed in the
+ // class prototype and break stuff like Sinon stubs
+ update() {
+ return update.call(this);
+ }
+ destroy() {
+ return destroy.call(this);
+ }
+ enableEventListeners() {
+ return enableEventListeners.call(this);
+ }
+ disableEventListeners() {
+ return disableEventListeners.call(this);
+ }
+
+ /**
+ * Schedule an update, it will run on the next UI update available
+ * @method scheduleUpdate
+ * @memberof Popper
+ */
+
+
+ /**
+ * Collection of utilities useful when writing custom modifiers.
+ * Starting from version 1.7, this method is available only if you
+ * include `popper-utils.js` before `popper.js`.
+ *
+ * **DEPRECATION**: This way to access PopperUtils is deprecated
+ * and will be removed in v2! Use the PopperUtils module directly instead.
+ * Due to the high instability of the methods contained in Utils, we can't
+ * guarantee them to follow semver. Use them at your own risk!
+ * @static
+ * @private
+ * @type {Object}
+ * @deprecated since version 1.8
+ * @member Utils
+ * @memberof Popper
+ */
+}
+
+/**
+ * The `referenceObject` is an object that provides an interface compatible with Popper.js
+ * and lets you use it as replacement of a real DOM node.
+ * You can use this method to position a popper relatively to a set of coordinates
+ * in case you don't have a DOM node to use as reference.
+ *
+ * ```
+ * new Popper(referenceObject, popperNode);
+ * ```
+ *
+ * NB: This feature isn't supported in Internet Explorer 10
+ * @name referenceObject
+ * @property {Function} data.getBoundingClientRect
+ * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
+ * @property {number} data.clientWidth
+ * An ES6 getter that will return the width of the virtual reference element.
+ * @property {number} data.clientHeight
+ * An ES6 getter that will return the height of the virtual reference element.
+ */
+
+Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
+Popper.placements = placements;
+Popper.Defaults = Defaults;
+
+export default Popper;
+//# sourceMappingURL=popper.js.map
diff --git a/XPST/Scripts/popper.js.map b/XPST/Scripts/popper.js.map
new file mode 100644
index 0000000..e1d71c5
--- /dev/null
+++ b/XPST/Scripts/popper.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper.js","sources":["../src/utils/debounce.js","../src/utils/isFunction.js","../src/utils/getStyleComputedProperty.js","../src/utils/getParentNode.js","../src/utils/getScrollParent.js","../src/utils/isIE.js","../src/utils/getOffsetParent.js","../src/utils/isOffsetContainer.js","../src/utils/getRoot.js","../src/utils/findCommonOffsetParent.js","../src/utils/getScroll.js","../src/utils/includeScroll.js","../src/utils/getBordersSize.js","../src/utils/getWindowSizes.js","../src/utils/getClientRect.js","../src/utils/getBoundingClientRect.js","../src/utils/getOffsetRectRelativeToArbitraryNode.js","../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../src/utils/isFixed.js","../src/utils/getFixedPositionOffsetParent.js","../src/utils/getBoundaries.js","../src/utils/computeAutoPlacement.js","../src/utils/getReferenceOffsets.js","../src/utils/getOuterSizes.js","../src/utils/getOppositePlacement.js","../src/utils/getPopperOffsets.js","../src/utils/find.js","../src/utils/findIndex.js","../src/utils/runModifiers.js","../src/methods/update.js","../src/utils/isModifierEnabled.js","../src/utils/getSupportedPropertyName.js","../src/methods/destroy.js","../src/utils/getWindow.js","../src/utils/setupEventListeners.js","../src/methods/enableEventListeners.js","../src/utils/removeEventListeners.js","../src/methods/disableEventListeners.js","../src/utils/isNumeric.js","../src/utils/setStyles.js","../src/utils/setAttributes.js","../src/modifiers/applyStyle.js","../src/modifiers/computeStyle.js","../src/utils/isModifierRequired.js","../src/modifiers/arrow.js","../src/utils/getOppositeVariation.js","../src/methods/placements.js","../src/utils/clockwise.js","../src/modifiers/flip.js","../src/modifiers/keepTogether.js","../src/modifiers/offset.js","../src/modifiers/preventOverflow.js","../src/modifiers/shift.js","../src/modifiers/hide.js","../src/modifiers/inner.js","../src/modifiers/index.js","../src/methods/defaults.js","../src/index.js"],"sourcesContent":["const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style. \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option. \n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right. \n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property. \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers. \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element. \n * It will read the variation of the `placement` property. \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper. \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces. \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2. \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries. \n * We can say it has \"escaped the boundaries\" — or just \"escaped\". \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor. \n * These can be overriden using the `options` argument of Popper.js. \n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node. \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/popper.min.js b/XPST/Scripts/popper.min.js
new file mode 100644
index 0000000..6b76a3f
--- /dev/null
+++ b/XPST/Scripts/popper.min.js
@@ -0,0 +1,5 @@
+/*
+ Copyright (C) Federico Zivolo 2018
+ Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
+ */const e='undefined'!=typeof window&&'undefined'!=typeof document,t=['Edge','Trident','Firefox'];let o=0;for(let n=0;n{t||(t=!0,window.Promise.resolve().then(()=>{t=!1,e()}))}}function i(e){let t=!1;return()=>{t||(t=!0,setTimeout(()=>{t=!1,e()},o))}}const r=e&&window.Promise;var p=r?n:i;function d(e){return e&&'[object Function]'==={}.toString.call(e)}function s(e,t){if(1!==e.nodeType)return[];const o=getComputedStyle(e,null);return t?o[t]:o}function a(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function f(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}const{overflow:t,overflowX:o,overflowY:n}=s(e);return /(auto|scroll|overlay)/.test(t+n+o)?e:f(a(e))}const l={};var m=function(e='all'){return(e=e.toString(),l.hasOwnProperty(e))?l[e]:('11'===e?l[e]=-1!==navigator.userAgent.indexOf('Trident'):'10'===e?l[e]=-1!==navigator.appVersion.indexOf('MSIE 10'):'all'===e?l[e]=-1!==navigator.userAgent.indexOf('Trident')||-1!==navigator.userAgent.indexOf('MSIE'):void 0,l.all=l.all||Object.keys(l).some((e)=>l[e]),l[e])};function h(e){if(!e)return document.documentElement;const t=m(10)?document.body:null;let o=e.offsetParent;for(;o===t&&e.nextElementSibling;)o=(e=e.nextElementSibling).offsetParent;const n=o&&o.nodeName;return n&&'BODY'!==n&&'HTML'!==n?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===s(o,'position')?h(o):o:e?e.ownerDocument.documentElement:document.documentElement}function c(e){const{nodeName:t}=e;return'BODY'!==t&&('HTML'===t||h(e.firstElementChild)===e)}function u(e){return null===e.parentNode?e:u(e.parentNode)}function g(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;const o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);const{commonAncestorContainer:p}=r;if(e!==p&&t!==p||n.contains(i))return c(p)?p:h(p);const d=u(e);return d.host?g(d.host,t):g(e,u(t).host)}function b(e,t='top'){const o='top'===t?'scrollTop':'scrollLeft',n=e.nodeName;if('BODY'===n||'HTML'===n){const t=e.ownerDocument.documentElement,n=e.ownerDocument.scrollingElement||t;return n[o]}return e[o]}function w(e,t,o=!1){const n=b(t,'top'),i=b(t,'left'),r=o?-1:1;return e.top+=n*r,e.bottom+=n*r,e.left+=i*r,e.right+=i*r,e}function y(e,t){const o='x'===t?'Left':'Top',n='Left'==o?'Right':'Bottom';return parseFloat(e[`border${o}Width`],10)+parseFloat(e[`border${n}Width`],10)}function E(e,t,o,n){return Math.max(t[`offset${e}`],t[`scroll${e}`],o[`client${e}`],o[`offset${e}`],o[`scroll${e}`],m(10)?o[`offset${e}`]+n[`margin${'Height'===e?'Top':'Left'}`]+n[`margin${'Height'===e?'Bottom':'Right'}`]:0)}function x(){const e=document.body,t=document.documentElement,o=m(10)&&getComputedStyle(t);return{height:E('Height',e,t,o),width:E('Width',e,t,o)}}var v=Object.assign||function(e){for(var t,o=1;ov({key:e},d[e],{area:P(d[e])})).sort((e,t)=>t.area-e.area),a=s.filter(({width:e,height:t})=>e>=o.clientWidth&&t>=o.clientHeight),f=0t[e])}function A(e,t,o){o=o.split('-')[0];const n=H(e),i={width:n.width,height:n.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',d=r?'left':'top',s=r?'height':'width',a=r?'width':'height';return i[p]=t[p]+t[s]/2-n[s]/2,i[d]=o===d?t[d]-n[a]:t[W(d)],i}function M(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function I(e,t,o){if(Array.prototype.findIndex)return e.findIndex((e)=>e[t]===o);const n=M(e,(e)=>e[t]===o);return e.indexOf(n)}function F(e,t,o){const n=void 0===o?e:e.slice(0,I(e,'name',o));return n.forEach((e)=>{e['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');const o=e['function']||e.fn;e.enabled&&d(o)&&(t.offsets.popper=O(t.offsets.popper),t.offsets.reference=O(t.offsets.reference),t=o(t,e))}),t}function R(){if(this.state.isDestroyed)return;let e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=k(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=B(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=A(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?'fixed':'absolute',e=F(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}function U(e,t){return e.some(({name:e,enabled:o})=>o&&e===t)}function Y(e){const t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1);for(let n=0;n{e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function _(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=q(this.reference,this.state))}function X(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Q(e,t){Object.keys(t).forEach((o)=>{let n='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&X(t[o])&&(n='px'),e.style[o]=t[o]+n})}function J(e,t){Object.keys(t).forEach(function(o){const n=t[o];!1===n?e.removeAttribute(o):e.setAttribute(o,t[o])})}function Z(e){return Q(e.instance.popper,e.styles),J(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Q(e.arrowElement,e.arrowStyles),e}function $(e,t,o,n,i){const r=k(i,t,e,o.positionFixed),p=B(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Q(t,{position:o.positionFixed?'fixed':'absolute'}),o}function ee(e,t){var o=Math.floor;const{x:n,y:i}=t,{popper:r}=e.offsets,p=M(e.instance.modifiers,(e)=>'applyStyle'===e.name).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');const d=void 0===p?t.gpuAcceleration:p,s=h(e.instance.popper),a=S(s),f={position:r.position},l={left:o(r.left),top:o(r.top),bottom:o(r.bottom),right:o(r.right)},m='bottom'===n?'top':'bottom',c='right'===i?'left':'right',u=Y('transform');let g,b;if(b='bottom'==m?-a.height+l.bottom:l.top,g='right'==c?-a.width+l.right:l.left,d&&u)f[u]=`translate3d(${g}px, ${b}px, 0)`,f[m]=0,f[c]=0,f.willChange='transform';else{const e='bottom'==m?-1:1,t='right'==c?-1:1;f[m]=b*e,f[c]=g*t,f.willChange=`${m}, ${c}`}const w={"x-placement":e.placement};return e.attributes=v({},w,e.attributes),e.styles=v({},f,e.styles),e.arrowStyles=v({},e.offsets.arrow,e.arrowStyles),e}function te(e,t,o){const n=M(e,({name:e})=>e===t),i=!!n&&e.some((e)=>e.name===o&&e.enabled&&e.orderi[m]&&(e.offsets.popper[f]+=r[f]+h-i[m]),e.offsets.popper=O(e.offsets.popper);const c=r[f]+r[d]/2-h/2,u=s(e.instance.popper),g=parseFloat(u[`margin${a}`],10),b=parseFloat(u[`border${a}Width`],10);let w=c-e.offsets.popper[f]-g-b;return w=Math.max(Math.min(i[d]-h,w),0),e.arrowElement=o,e.offsets.arrow={[f]:Math.round(w),[l]:''},e}function ne(e){if('end'===e)return'start';return'start'===e?'end':e}var ie=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'];const re=ie.slice(3);function pe(e,t=!1){const o=re.indexOf(e),n=re.slice(o+1).concat(re.slice(0,o));return t?n.reverse():n}const de={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'};function se(e,t){if(U(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;const o=C(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed);let n=e.placement.split('-')[0],i=W(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case de.FLIP:p=[n,i];break;case de.CLOCKWISE:p=pe(n);break;case de.COUNTERCLOCKWISE:p=pe(n,!0);break;default:p=t.behavior;}return p.forEach((d,s)=>{if(n!==d||p.length===s+1)return e;n=e.placement.split('-')[0],i=W(n);const a=e.offsets.popper,f=e.offsets.reference,l=Math.floor,m='left'===n&&l(a.right)>l(f.left)||'right'===n&&l(a.left)l(f.top)||'bottom'===n&&l(a.top)l(o.right),u=l(a.top)l(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&u||'bottom'===n&&g,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&u||!w&&'end'===r&&g);(m||b||y)&&(e.flipped=!0,(m||b)&&(n=p[s+1]),y&&(r=ne(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=v({},e.offsets.popper,A(e.instance.popper,e.offsets.reference,e.placement)),e=F(e.instance.modifiers,e,'flip'))}),e}function ae(e){const{popper:t,reference:o}=e.offsets,n=e.placement.split('-')[0],i=Math.floor,r=-1!==['top','bottom'].indexOf(n),p=r?'right':'bottom',d=r?'left':'top',s=r?'width':'height';return t[p]i(o[p])&&(e.offsets.popper[d]=i(o[p])),e}function fe(e,t,o,n){var i=Math.max;const r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),p=+r[1],d=r[2];if(!p)return e;if(0===d.indexOf('%')){let e;switch(d){case'%p':e=o;break;case'%':case'%r':default:e=n;}const i=O(e);return i[t]/100*p}if('vh'===d||'vw'===d){let e;return e='vh'===d?i(document.documentElement.clientHeight,window.innerHeight||0):i(document.documentElement.clientWidth,window.innerWidth||0),e/100*p}return p}function le(e,t,o,n){const i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map((e)=>e.trim()),d=p.indexOf(M(p,(e)=>-1!==e.search(/,|\s/)));p[d]&&-1===p[d].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');const s=/\s*,\s*|\s+/;let a=-1===d?[p]:[p.slice(0,d).concat([p[d].split(s)[0]]),[p[d].split(s)[1]].concat(p.slice(d+1))];return a=a.map((e,n)=>{const i=(1===n?!r:r)?'height':'width';let p=!1;return e.reduce((e,t)=>''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t),[]).map((e)=>fe(e,i,t,o))}),a.forEach((e,t)=>{e.forEach((o,n)=>{X(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function me(e,{offset:t}){const{placement:o,offsets:{popper:n,reference:i}}=e,r=o.split('-')[0];let p;return p=X(+t)?[+t,0]:le(t,n,i,r),'left'===r?(n.top+=p[0],n.left-=p[1]):'right'===r?(n.top+=p[0],n.left+=p[1]):'top'===r?(n.left+=p[0],n.top-=p[1]):'bottom'===r&&(n.left+=p[0],n.top+=p[1]),e.popper=n,e}function he(e,t){let o=t.boundariesElement||h(e.instance.popper);e.instance.reference===o&&(o=h(o));const n=C(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);t.boundaries=n;const i=t.priority;let r=e.offsets.popper;const p={primary(e){let o=r[e];return r[e]n[e]&&!t.escapeWithReference&&(i=Math.min(r[o],n[e]-('right'===e?r.width:r.height))),{[o]:i}}};return i.forEach((e)=>{const t=-1===['left','top'].indexOf(e)?'secondary':'primary';r=v({},r,p[t](e))}),e.offsets.popper=r,e}function ce(e){const t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){const{reference:t,popper:i}=e.offsets,r=-1!==['bottom','top'].indexOf(o),p=r?'left':'top',d=r?'width':'height',s={start:{[p]:t[p]},end:{[p]:t[p]+t[d]-i[d]}};e.offsets.popper=v({},i,s[n])}return e}function ue(e){if(!te(e.instance.modifiers,'hide','preventOverflow'))return e;const t=e.offsets.reference,o=M(e.instance.modifiers,(e)=>'preventOverflow'===e.name).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right{},onUpdate:()=>{},modifiers:be};class ye{constructor(e,t,o={}){this.scheduleUpdate=()=>requestAnimationFrame(this.update),this.update=p(this.update.bind(this)),this.options=v({},ye.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=t&&t.jquery?t[0]:t,this.options.modifiers={},Object.keys(v({},ye.Defaults.modifiers,o.modifiers)).forEach((e)=>{this.options.modifiers[e]=v({},ye.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map((e)=>v({name:e},this.options.modifiers[e])).sort((e,t)=>e.order-t.order),this.modifiers.forEach((e)=>{e.enabled&&d(e.onLoad)&&e.onLoad(this.reference,this.popper,this.options,e,this.state)}),this.update();const n=this.options.eventsEnabled;n&&this.enableEventListeners(),this.state.eventsEnabled=n}update(){return R.call(this)}destroy(){return K.call(this)}enableEventListeners(){return z.call(this)}disableEventListeners(){return _.call(this)}}ye.Utils=('undefined'==typeof window?global:window).PopperUtils,ye.placements=ie,ye.Defaults=we;export default ye;
+//# sourceMappingURL=popper.min.js.map
diff --git a/XPST/Scripts/popper.min.js.map b/XPST/Scripts/popper.min.js.map
new file mode 100644
index 0000000..4ace128
--- /dev/null
+++ b/XPST/Scripts/popper.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper.min.js","sources":["../src/utils/debounce.js","../src/utils/isFunction.js","../src/utils/getStyleComputedProperty.js","../src/utils/getParentNode.js","../src/utils/getScrollParent.js","../src/utils/isIE.js","../src/utils/getOffsetParent.js","../src/utils/isOffsetContainer.js","../src/utils/getRoot.js","../src/utils/findCommonOffsetParent.js","../src/utils/getScroll.js","../src/utils/includeScroll.js","../src/utils/getBordersSize.js","../src/utils/getWindowSizes.js","../src/utils/getClientRect.js","../src/utils/getBoundingClientRect.js","../src/utils/getOffsetRectRelativeToArbitraryNode.js","../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../src/utils/isFixed.js","../src/utils/getFixedPositionOffsetParent.js","../src/utils/getBoundaries.js","../src/utils/computeAutoPlacement.js","../src/utils/getReferenceOffsets.js","../src/utils/getOuterSizes.js","../src/utils/getOppositePlacement.js","../src/utils/getPopperOffsets.js","../src/utils/find.js","../src/utils/findIndex.js","../src/utils/runModifiers.js","../src/methods/update.js","../src/utils/isModifierEnabled.js","../src/utils/getSupportedPropertyName.js","../src/methods/destroy.js","../src/utils/getWindow.js","../src/utils/setupEventListeners.js","../src/methods/enableEventListeners.js","../src/utils/removeEventListeners.js","../src/methods/disableEventListeners.js","../src/utils/isNumeric.js","../src/utils/setStyles.js","../src/utils/setAttributes.js","../src/modifiers/applyStyle.js","../src/modifiers/computeStyle.js","../src/utils/isModifierRequired.js","../src/modifiers/arrow.js","../src/utils/getOppositeVariation.js","../src/methods/placements.js","../src/utils/clockwise.js","../src/modifiers/flip.js","../src/modifiers/keepTogether.js","../src/modifiers/offset.js","../src/modifiers/preventOverflow.js","../src/modifiers/shift.js","../src/modifiers/hide.js","../src/modifiers/inner.js","../src/modifiers/index.js","../src/methods/defaults.js","../src/index.js"],"sourcesContent":["const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style. \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option. \n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right. \n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property. \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers. \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element. \n * It will read the variation of the `placement` property. \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper. \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces. \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2. \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries. \n * We can say it has \"escaped the boundaries\" — or just \"escaped\". \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor. \n * These can be overriden using the `options` argument of Popper.js. \n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node. \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","called","Promise","resolve","then","scheduled","supportsMicroTasks","functionToCheck","getType","toString","call","element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","body","ownerDocument","overflow","overflowX","overflowY","getStyleComputedProperty","test","getScrollParent","getParentNode","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","key","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","variation","split","commonOffsetParent","x","marginBottom","y","marginRight","hash","replace","matched","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","Array","prototype","find","arr","findIndex","cur","match","obj","modifiersToRun","ends","modifiers","slice","forEach","warn","fn","enabled","isFunction","data","reference","state","isDestroyed","getReferenceOffsets","options","positionFixed","computeAutoPlacement","flip","originalPlacement","getPopperOffsets","position","runModifiers","isCreated","onUpdate","onCreate","name","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","isModifierEnabled","removeAttribute","willChange","getSupportedPropertyName","disableEventListeners","removeOnDestroy","removeChild","defaultView","isBody","target","addEventListener","passive","push","updateBound","scrollElement","scrollParents","eventsEnabled","setupEventListeners","scheduleUpdate","removeEventListener","removeEventListeners","n","isNaN","isFinite","prop","unit","isNumeric","value","attributes","setAttribute","instance","arrowElement","arrowStyles","floor","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrow","requesting","isRequired","requested","isModifierRequired","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","validPlacements","placements","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","clockwise","COUNTERCLOCKWISE","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","str","size","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","mergeWithPrevious","op","reduce","toValue","index2","basePlacement","parseOffset","priority","check","escapeWithReference","shiftvariation","shiftOffsets","bound","hide","subtractLength","requestAnimationFrame","update","debounce","bind","Popper","Defaults","jquery","modifierOptions","onLoad","enableEventListeners","destroy","Utils","global","PopperUtils"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/umd/popper-utils.js b/XPST/Scripts/umd/popper-utils.js
new file mode 100644
index 0000000..0aa9215
--- /dev/null
+++ b/XPST/Scripts/umd/popper-utils.js
@@ -0,0 +1,1145 @@
+/**!
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version 1.14.1
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (factory((global.PopperUtils = {})));
+}(this, (function (exports) { 'use strict';
+
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+function getStyleComputedProperty(element, property) {
+ if (element.nodeType !== 1) {
+ return [];
+ }
+ // NOTE: 1 DOM access here
+ var css = getComputedStyle(element, null);
+ return property ? css[property] : css;
+}
+
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+function getParentNode(element) {
+ if (element.nodeName === 'HTML') {
+ return element;
+ }
+ return element.parentNode || element.host;
+}
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+function getScrollParent(element) {
+ // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+ if (!element) {
+ return document.body;
+ }
+
+ switch (element.nodeName) {
+ case 'HTML':
+ case 'BODY':
+ return element.ownerDocument.body;
+ case '#document':
+ return element.body;
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+
+ var _getStyleComputedProp = getStyleComputedProperty(element),
+ overflow = _getStyleComputedProp.overflow,
+ overflowX = _getStyleComputedProp.overflowX,
+ overflowY = _getStyleComputedProp.overflowY;
+
+ if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+ return element;
+ }
+
+ return getScrollParent(getParentNode(element));
+}
+
+/**
+ * Tells if you are running Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @argument {number} version to check
+ * @returns {Boolean} isIE
+ */
+var cache = {};
+
+var isIE = function () {
+ var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all';
+
+ version = version.toString();
+ if (cache.hasOwnProperty(version)) {
+ return cache[version];
+ }
+ switch (version) {
+ case '11':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1;
+ break;
+ case '10':
+ cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;
+ break;
+ case 'all':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;
+ break;
+ }
+
+ //Set IE
+ cache.all = cache.all || Object.keys(cache).some(function (key) {
+ return cache[key];
+ });
+ return cache[version];
+};
+
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+function getOffsetParent(element) {
+ if (!element) {
+ return document.documentElement;
+ }
+
+ var noOffsetParent = isIE(10) ? document.body : null;
+
+ // NOTE: 1 DOM access here
+ var offsetParent = element.offsetParent;
+ // Skip hidden elements which don't have an offsetParent
+ while (offsetParent === noOffsetParent && element.nextElementSibling) {
+ offsetParent = (element = element.nextElementSibling).offsetParent;
+ }
+
+ var nodeName = offsetParent && offsetParent.nodeName;
+
+ if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+ return element ? element.ownerDocument.documentElement : document.documentElement;
+ }
+
+ // .offsetParent will return the closest TD or TABLE in case
+ // no offsetParent is present, I hate this job...
+ if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
+ return getOffsetParent(offsetParent);
+ }
+
+ return offsetParent;
+}
+
+function isOffsetContainer(element) {
+ var nodeName = element.nodeName;
+
+ if (nodeName === 'BODY') {
+ return false;
+ }
+ return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
+}
+
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+function getRoot(node) {
+ if (node.parentNode !== null) {
+ return getRoot(node.parentNode);
+ }
+
+ return node;
+}
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+function findCommonOffsetParent(element1, element2) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+ return document.documentElement;
+ }
+
+ // Here we make sure to give as "start" the element that comes first in the DOM
+ var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
+ var start = order ? element1 : element2;
+ var end = order ? element2 : element1;
+
+ // Get common ancestor container
+ var range = document.createRange();
+ range.setStart(start, 0);
+ range.setEnd(end, 0);
+ var commonAncestorContainer = range.commonAncestorContainer;
+
+ // Both nodes are inside #document
+
+ if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
+ if (isOffsetContainer(commonAncestorContainer)) {
+ return commonAncestorContainer;
+ }
+
+ return getOffsetParent(commonAncestorContainer);
+ }
+
+ // one of the nodes is inside shadowDOM, find which one
+ var element1root = getRoot(element1);
+ if (element1root.host) {
+ return findCommonOffsetParent(element1root.host, element2);
+ } else {
+ return findCommonOffsetParent(element1, getRoot(element2).host);
+ }
+}
+
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+function getScroll(element) {
+ var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
+
+ var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+ var nodeName = element.nodeName;
+
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ var html = element.ownerDocument.documentElement;
+ var scrollingElement = element.ownerDocument.scrollingElement || html;
+ return scrollingElement[upperSide];
+ }
+
+ return element[upperSide];
+}
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+function includeScroll(rect, element) {
+ var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ var scrollTop = getScroll(element, 'top');
+ var scrollLeft = getScroll(element, 'left');
+ var modifier = subtract ? -1 : 1;
+ rect.top += scrollTop * modifier;
+ rect.bottom += scrollTop * modifier;
+ rect.left += scrollLeft * modifier;
+ rect.right += scrollLeft * modifier;
+ return rect;
+}
+
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+function getBordersSize(styles, axis) {
+ var sideA = axis === 'x' ? 'Left' : 'Top';
+ var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+ return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
+}
+
+function getSize(axis, body, html, computedStyle) {
+ return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
+}
+
+function getWindowSizes() {
+ var body = document.body;
+ var html = document.documentElement;
+ var computedStyle = isIE(10) && getComputedStyle(html);
+
+ return {
+ height: getSize('Height', body, html, computedStyle),
+ width: getSize('Width', body, html, computedStyle)
+ };
+}
+
+var _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
+
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+function getClientRect(offsets) {
+ return _extends({}, offsets, {
+ right: offsets.left + offsets.width,
+ bottom: offsets.top + offsets.height
+ });
+}
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+function getBoundingClientRect(element) {
+ var rect = {};
+
+ // IE10 10 FIX: Please, don't ask, the element isn't
+ // considered in DOM in some circumstances...
+ // This isn't reproducible in IE10 compatibility mode of IE11
+ try {
+ if (isIE(10)) {
+ rect = element.getBoundingClientRect();
+ var scrollTop = getScroll(element, 'top');
+ var scrollLeft = getScroll(element, 'left');
+ rect.top += scrollTop;
+ rect.left += scrollLeft;
+ rect.bottom += scrollTop;
+ rect.right += scrollLeft;
+ } else {
+ rect = element.getBoundingClientRect();
+ }
+ } catch (e) {}
+
+ var result = {
+ left: rect.left,
+ top: rect.top,
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top
+ };
+
+ // subtract scrollbar size from sizes
+ var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};
+ var width = sizes.width || element.clientWidth || result.right - result.left;
+ var height = sizes.height || element.clientHeight || result.bottom - result.top;
+
+ var horizScrollbar = element.offsetWidth - width;
+ var vertScrollbar = element.offsetHeight - height;
+
+ // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+ // we make this check conditional for performance reasons
+ if (horizScrollbar || vertScrollbar) {
+ var styles = getStyleComputedProperty(element);
+ horizScrollbar -= getBordersSize(styles, 'x');
+ vertScrollbar -= getBordersSize(styles, 'y');
+
+ result.width -= horizScrollbar;
+ result.height -= vertScrollbar;
+ }
+
+ return getClientRect(result);
+}
+
+function getOffsetRectRelativeToArbitraryNode(children, parent) {
+ var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ var isIE10 = isIE(10);
+ var isHTML = parent.nodeName === 'HTML';
+ var childrenRect = getBoundingClientRect(children);
+ var parentRect = getBoundingClientRect(parent);
+ var scrollParent = getScrollParent(children);
+
+ var styles = getStyleComputedProperty(parent);
+ var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
+ var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
+
+ // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+ if (fixedPosition && parent.nodeName === 'HTML') {
+ parentRect.top = Math.max(parentRect.top, 0);
+ parentRect.left = Math.max(parentRect.left, 0);
+ }
+ var offsets = getClientRect({
+ top: childrenRect.top - parentRect.top - borderTopWidth,
+ left: childrenRect.left - parentRect.left - borderLeftWidth,
+ width: childrenRect.width,
+ height: childrenRect.height
+ });
+ offsets.marginTop = 0;
+ offsets.marginLeft = 0;
+
+ // Subtract margins of documentElement in case it's being used as parent
+ // we do this only on HTML because it's the only element that behaves
+ // differently when margins are applied to it. The margins are included in
+ // the box of the documentElement, in the other cases not.
+ if (!isIE10 && isHTML) {
+ var marginTop = parseFloat(styles.marginTop, 10);
+ var marginLeft = parseFloat(styles.marginLeft, 10);
+
+ offsets.top -= borderTopWidth - marginTop;
+ offsets.bottom -= borderTopWidth - marginTop;
+ offsets.left -= borderLeftWidth - marginLeft;
+ offsets.right -= borderLeftWidth - marginLeft;
+
+ // Attach marginTop and marginLeft because in some circumstances we may need them
+ offsets.marginTop = marginTop;
+ offsets.marginLeft = marginLeft;
+ }
+
+ if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
+ offsets = includeScroll(offsets, parent);
+ }
+
+ return offsets;
+}
+
+function getViewportOffsetRectRelativeToArtbitraryNode(element) {
+ var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+ var html = element.ownerDocument.documentElement;
+ var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+ var width = Math.max(html.clientWidth, window.innerWidth || 0);
+ var height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+ var scrollTop = !excludeScroll ? getScroll(html) : 0;
+ var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+ var offset = {
+ top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+ left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+ width: width,
+ height: height
+ };
+
+ return getClientRect(offset);
+}
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+function isFixed(element) {
+ var nodeName = element.nodeName;
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ return isFixed(getParentNode(element));
+}
+
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+function getFixedPositionOffsetParent(element) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element || !element.parentElement || isIE()) {
+ return document.documentElement;
+ }
+ var el = element.parentElement;
+ while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+ el = el.parentElement;
+ }
+ return el || document.documentElement;
+}
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+function getBoundaries(popper, reference, padding, boundariesElement) {
+ var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+ // NOTE: 1 DOM access here
+
+ var boundaries = { top: 0, left: 0 };
+ var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+
+ // Handle viewport case
+ if (boundariesElement === 'viewport') {
+ boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+ } else {
+ // Handle other cases based on DOM element used as boundaries
+ var boundariesNode = void 0;
+ if (boundariesElement === 'scrollParent') {
+ boundariesNode = getScrollParent(getParentNode(reference));
+ if (boundariesNode.nodeName === 'BODY') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ }
+ } else if (boundariesElement === 'window') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ } else {
+ boundariesNode = boundariesElement;
+ }
+
+ var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
+
+ // In case of HTML, we need a different computation
+ if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+ var _getWindowSizes = getWindowSizes(),
+ height = _getWindowSizes.height,
+ width = _getWindowSizes.width;
+
+ boundaries.top += offsets.top - offsets.marginTop;
+ boundaries.bottom = height + offsets.top;
+ boundaries.left += offsets.left - offsets.marginLeft;
+ boundaries.right = width + offsets.left;
+ } else {
+ // for all the other DOM elements, this one is good
+ boundaries = offsets;
+ }
+ }
+
+ // Add paddings
+ boundaries.left += padding;
+ boundaries.top += padding;
+ boundaries.right -= padding;
+ boundaries.bottom -= padding;
+
+ return boundaries;
+}
+
+function getArea(_ref) {
+ var width = _ref.width,
+ height = _ref.height;
+
+ return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
+ var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
+
+ if (placement.indexOf('auto') === -1) {
+ return placement;
+ }
+
+ var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
+
+ var rects = {
+ top: {
+ width: boundaries.width,
+ height: refRect.top - boundaries.top
+ },
+ right: {
+ width: boundaries.right - refRect.right,
+ height: boundaries.height
+ },
+ bottom: {
+ width: boundaries.width,
+ height: boundaries.bottom - refRect.bottom
+ },
+ left: {
+ width: refRect.left - boundaries.left,
+ height: boundaries.height
+ }
+ };
+
+ var sortedAreas = Object.keys(rects).map(function (key) {
+ return _extends({
+ key: key
+ }, rects[key], {
+ area: getArea(rects[key])
+ });
+ }).sort(function (a, b) {
+ return b.area - a.area;
+ });
+
+ var filteredAreas = sortedAreas.filter(function (_ref2) {
+ var width = _ref2.width,
+ height = _ref2.height;
+ return width >= popper.clientWidth && height >= popper.clientHeight;
+ });
+
+ var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
+
+ var variation = placement.split('-')[1];
+
+ return computedPlacement + (variation ? '-' + variation : '');
+}
+
+var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
+var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+var timeoutDuration = 0;
+for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+ if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+ timeoutDuration = 1;
+ break;
+ }
+}
+
+function microtaskDebounce(fn) {
+ var called = false;
+ return function () {
+ if (called) {
+ return;
+ }
+ called = true;
+ window.Promise.resolve().then(function () {
+ called = false;
+ fn();
+ });
+ };
+}
+
+function taskDebounce(fn) {
+ var scheduled = false;
+ return function () {
+ if (!scheduled) {
+ scheduled = true;
+ setTimeout(function () {
+ scheduled = false;
+ fn();
+ }, timeoutDuration);
+ }
+ };
+}
+
+var supportsMicroTasks = isBrowser && window.Promise;
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
+
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function find(arr, check) {
+ // use native find if supported
+ if (Array.prototype.find) {
+ return arr.find(check);
+ }
+
+ // use `filter` to obtain the same behavior of `find`
+ return arr.filter(check)[0];
+}
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function findIndex(arr, prop, value) {
+ // use native findIndex if supported
+ if (Array.prototype.findIndex) {
+ return arr.findIndex(function (cur) {
+ return cur[prop] === value;
+ });
+ }
+
+ // use `find` + `indexOf` if `findIndex` isn't supported
+ var match = find(arr, function (obj) {
+ return obj[prop] === value;
+ });
+ return arr.indexOf(match);
+}
+
+/**
+ * Get the position of the given element, relative to its offset parent
+ * @method
+ * @memberof Popper.Utils
+ * @param {Element} element
+ * @return {Object} position - Coordinates of the element and its `scrollTop`
+ */
+function getOffsetRect(element) {
+ var elementRect = void 0;
+ if (element.nodeName === 'HTML') {
+ var _getWindowSizes = getWindowSizes(),
+ width = _getWindowSizes.width,
+ height = _getWindowSizes.height;
+
+ elementRect = {
+ width: width,
+ height: height,
+ left: 0,
+ top: 0
+ };
+ } else {
+ elementRect = {
+ width: element.offsetWidth,
+ height: element.offsetHeight,
+ left: element.offsetLeft,
+ top: element.offsetTop
+ };
+ }
+
+ // position
+ return getClientRect(elementRect);
+}
+
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+function getOuterSizes(element) {
+ var styles = getComputedStyle(element);
+ var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
+ var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
+ var result = {
+ width: element.offsetWidth + y,
+ height: element.offsetHeight + x
+ };
+ return result;
+}
+
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+function getOppositePlacement(placement) {
+ var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, function (matched) {
+ return hash[matched];
+ });
+}
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+function getPopperOffsets(popper, referenceOffsets, placement) {
+ placement = placement.split('-')[0];
+
+ // Get popper node sizes
+ var popperRect = getOuterSizes(popper);
+
+ // Add position, width and height to our offsets object
+ var popperOffsets = {
+ width: popperRect.width,
+ height: popperRect.height
+ };
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+ var mainSide = isHoriz ? 'top' : 'left';
+ var secondarySide = isHoriz ? 'left' : 'top';
+ var measurement = isHoriz ? 'height' : 'width';
+ var secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+ popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
+ if (placement === secondarySide) {
+ popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+ } else {
+ popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
+ }
+
+ return popperOffsets;
+}
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+function getReferenceOffsets(state, popper, reference) {
+ var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+
+ var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+ return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
+
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+function getSupportedPropertyName(property) {
+ var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+ var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+ for (var i = 0; i < prefixes.length; i++) {
+ var prefix = prefixes[i];
+ var toCheck = prefix ? '' + prefix + upperProp : property;
+ if (typeof document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+}
+
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+function isFunction(functionToCheck) {
+ var getType = {};
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+}
+
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+function isModifierEnabled(modifiers, modifierName) {
+ return modifiers.some(function (_ref) {
+ var name = _ref.name,
+ enabled = _ref.enabled;
+ return enabled && name === modifierName;
+ });
+}
+
+/**
+ * Helper used to know if the given modifier depends from another one.
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+function isModifierRequired(modifiers, requestingName, requestedName) {
+ var requesting = find(modifiers, function (_ref) {
+ var name = _ref.name;
+ return name === requestingName;
+ });
+
+ var isRequired = !!requesting && modifiers.some(function (modifier) {
+ return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
+ });
+
+ if (!isRequired) {
+ var _requesting = '`' + requestingName + '`';
+ var requested = '`' + requestedName + '`';
+ console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
+ }
+ return isRequired;
+}
+
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+function isNumeric(n) {
+ return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+function getWindow(element) {
+ var ownerDocument = element.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView : window;
+}
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function removeEventListeners(reference, state) {
+ // Remove resize event listener on window
+ getWindow(reference).removeEventListener('resize', state.updateBound);
+
+ // Remove scroll event listener on scroll parents
+ state.scrollParents.forEach(function (target) {
+ target.removeEventListener('scroll', state.updateBound);
+ });
+
+ // Reset state
+ state.updateBound = null;
+ state.scrollParents = [];
+ state.scrollElement = null;
+ state.eventsEnabled = false;
+ return state;
+}
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+function runModifiers(modifiers, data, ends) {
+ var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+ modifiersToRun.forEach(function (modifier) {
+ if (modifier['function']) {
+ // eslint-disable-line dot-notation
+ console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+ }
+ var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+ if (modifier.enabled && isFunction(fn)) {
+ // Add properties to offsets to make them a complete clientRect object
+ // we do this before each modifier to make sure the previous one doesn't
+ // mess with these values
+ data.offsets.popper = getClientRect(data.offsets.popper);
+ data.offsets.reference = getClientRect(data.offsets.reference);
+
+ data = fn(data, modifier);
+ }
+ });
+
+ return data;
+}
+
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setAttributes(element, attributes) {
+ Object.keys(attributes).forEach(function (prop) {
+ var value = attributes[prop];
+ if (value !== false) {
+ element.setAttribute(prop, attributes[prop]);
+ } else {
+ element.removeAttribute(prop);
+ }
+ });
+}
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setStyles(element, styles) {
+ Object.keys(styles).forEach(function (prop) {
+ var unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+}
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+ var isBody = scrollParent.nodeName === 'BODY';
+ var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+ target.addEventListener(event, callback, { passive: true });
+
+ if (!isBody) {
+ attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
+ }
+ scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function setupEventListeners(reference, options, state, updateBound) {
+ // Resize event listener on window
+ state.updateBound = updateBound;
+ getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+ // Scroll event listener on scroll parents
+ var scrollElement = getScrollParent(reference);
+ attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
+ state.scrollElement = scrollElement;
+ state.eventsEnabled = true;
+
+ return state;
+}
+
+// This is here just for backward compatibility with versions lower than v1.10.3
+// you should import the utilities using named exports, if you want them all use:
+// ```
+// import * as PopperUtils from 'popper-utils';
+// ```
+// The default export will be removed in the next major version.
+var index = {
+ computeAutoPlacement: computeAutoPlacement,
+ debounce: debounce,
+ findIndex: findIndex,
+ getBordersSize: getBordersSize,
+ getBoundaries: getBoundaries,
+ getBoundingClientRect: getBoundingClientRect,
+ getClientRect: getClientRect,
+ getOffsetParent: getOffsetParent,
+ getOffsetRect: getOffsetRect,
+ getOffsetRectRelativeToArbitraryNode: getOffsetRectRelativeToArbitraryNode,
+ getOuterSizes: getOuterSizes,
+ getParentNode: getParentNode,
+ getPopperOffsets: getPopperOffsets,
+ getReferenceOffsets: getReferenceOffsets,
+ getScroll: getScroll,
+ getScrollParent: getScrollParent,
+ getStyleComputedProperty: getStyleComputedProperty,
+ getSupportedPropertyName: getSupportedPropertyName,
+ getWindowSizes: getWindowSizes,
+ isFixed: isFixed,
+ isFunction: isFunction,
+ isModifierEnabled: isModifierEnabled,
+ isModifierRequired: isModifierRequired,
+ isNumeric: isNumeric,
+ removeEventListeners: removeEventListeners,
+ runModifiers: runModifiers,
+ setAttributes: setAttributes,
+ setStyles: setStyles,
+ setupEventListeners: setupEventListeners
+};
+
+exports.computeAutoPlacement = computeAutoPlacement;
+exports.debounce = debounce;
+exports.findIndex = findIndex;
+exports.getBordersSize = getBordersSize;
+exports.getBoundaries = getBoundaries;
+exports.getBoundingClientRect = getBoundingClientRect;
+exports.getClientRect = getClientRect;
+exports.getOffsetParent = getOffsetParent;
+exports.getOffsetRect = getOffsetRect;
+exports.getOffsetRectRelativeToArbitraryNode = getOffsetRectRelativeToArbitraryNode;
+exports.getOuterSizes = getOuterSizes;
+exports.getParentNode = getParentNode;
+exports.getPopperOffsets = getPopperOffsets;
+exports.getReferenceOffsets = getReferenceOffsets;
+exports.getScroll = getScroll;
+exports.getScrollParent = getScrollParent;
+exports.getStyleComputedProperty = getStyleComputedProperty;
+exports.getSupportedPropertyName = getSupportedPropertyName;
+exports.getWindowSizes = getWindowSizes;
+exports.isFixed = isFixed;
+exports.isFunction = isFunction;
+exports.isModifierEnabled = isModifierEnabled;
+exports.isModifierRequired = isModifierRequired;
+exports.isNumeric = isNumeric;
+exports.removeEventListeners = removeEventListeners;
+exports.runModifiers = runModifiers;
+exports.setAttributes = setAttributes;
+exports.setStyles = setStyles;
+exports.setupEventListeners = setupEventListeners;
+exports['default'] = index;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=popper-utils.js.map
diff --git a/XPST/Scripts/umd/popper-utils.js.map b/XPST/Scripts/umd/popper-utils.js.map
new file mode 100644
index 0000000..4515cc3
--- /dev/null
+++ b/XPST/Scripts/umd/popper-utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-utils.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","document","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","window","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","length","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","isFunction","functionToCheck","getType","call","isModifierEnabled","modifiers","modifierName","name","enabled","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","warn","isNumeric","n","isNaN","isFinite","getWindow","defaultView","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","setAttributes","attributes","setAttribute","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","target","addEventListener","passive","push","setupEventListeners","options"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/umd/popper-utils.min.js b/XPST/Scripts/umd/popper-utils.min.js
new file mode 100644
index 0000000..c504ea4
--- /dev/null
+++ b/XPST/Scripts/umd/popper-utils.min.js
@@ -0,0 +1,5 @@
+/*
+ Copyright (C) Federico Zivolo 2018
+ Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
+ */(function(a,b){'object'==typeof exports&&'undefined'!=typeof module?b(exports):'function'==typeof define&&define.amd?define(['exports'],b):b(a.PopperUtils={})})(this,function(a){'use strict';function b(a,b){if(1!==a.nodeType)return[];var c=getComputedStyle(a,null);return b?c[b]:c}function c(a){return'HTML'===a.nodeName?a:a.parentNode||a.host}function d(a){if(!a)return document.body;switch(a.nodeName){case'HTML':case'BODY':return a.ownerDocument.body;case'#document':return a.body;}var e=b(a),f=e.overflow,g=e.overflowX,h=e.overflowY;return /(auto|scroll|overlay)/.test(f+h+g)?a:d(c(a))}function e(a){if(!a)return document.documentElement;for(var c=S(10)?document.body:null,d=a.offsetParent;d===c&&a.nextElementSibling;)d=(a=a.nextElementSibling).offsetParent;var f=d&&d.nodeName;return f&&'BODY'!==f&&'HTML'!==f?-1!==['TD','TABLE'].indexOf(d.nodeName)&&'static'===b(d,'position')?e(d):d:a?a.ownerDocument.documentElement:document.documentElement}function f(a){var b=a.nodeName;return'BODY'!==b&&('HTML'===b||e(a.firstElementChild)===a)}function g(a){return null===a.parentNode?a:g(a.parentNode)}function h(a,b){if(!a||!a.nodeType||!b||!b.nodeType)return document.documentElement;var c=a.compareDocumentPosition(b)&Node.DOCUMENT_POSITION_FOLLOWING,d=c?a:b,i=c?b:a,j=document.createRange();j.setStart(d,0),j.setEnd(i,0);var k=j.commonAncestorContainer;if(a!==k&&b!==k||d.contains(i))return f(k)?k:e(k);var l=g(a);return l.host?h(l.host,b):h(a,g(b).host)}function j(a){var b=1=c.clientWidth&&d>=c.clientHeight}),k=0 ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","indexOf","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","window","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","Object","keys","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","key","variation","split","Array","prototype","find","arr","findIndex","cur","match","obj","elementRect","offsetLeft","offsetTop","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","commonOffsetParent","prefixes","upperProp","charAt","toUpperCase","slice","i","prefix","toCheck","style","functionToCheck","getType","toString","call","modifiers","some","name","enabled","requesting","isRequired","warn","requested","n","isNaN","isFinite","defaultView","removeEventListener","state","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","modifiersToRun","ends","fn","isFunction","data","reference","value","attributes","removeAttribute","setAttribute","unit","isNumeric","isBody","target","addEventListener","passive","push","max","cache","version","hasOwnProperty","navigator","userAgent","appVersion","all","isBrowser","longerTimeoutBrowsers","timeoutDuration","supportsMicroTasks","Promise","called","resolve","then","scheduled"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/umd/popper.js b/XPST/Scripts/umd/popper.js
new file mode 100644
index 0000000..92ebc93
--- /dev/null
+++ b/XPST/Scripts/umd/popper.js
@@ -0,0 +1,2519 @@
+/**!
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version 1.14.1
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.Popper = factory());
+}(this, (function () { 'use strict';
+
+var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
+var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+var timeoutDuration = 0;
+for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+ if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+ timeoutDuration = 1;
+ break;
+ }
+}
+
+function microtaskDebounce(fn) {
+ var called = false;
+ return function () {
+ if (called) {
+ return;
+ }
+ called = true;
+ window.Promise.resolve().then(function () {
+ called = false;
+ fn();
+ });
+ };
+}
+
+function taskDebounce(fn) {
+ var scheduled = false;
+ return function () {
+ if (!scheduled) {
+ scheduled = true;
+ setTimeout(function () {
+ scheduled = false;
+ fn();
+ }, timeoutDuration);
+ }
+ };
+}
+
+var supportsMicroTasks = isBrowser && window.Promise;
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
+
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+function isFunction(functionToCheck) {
+ var getType = {};
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+}
+
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+function getStyleComputedProperty(element, property) {
+ if (element.nodeType !== 1) {
+ return [];
+ }
+ // NOTE: 1 DOM access here
+ var css = getComputedStyle(element, null);
+ return property ? css[property] : css;
+}
+
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+function getParentNode(element) {
+ if (element.nodeName === 'HTML') {
+ return element;
+ }
+ return element.parentNode || element.host;
+}
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+function getScrollParent(element) {
+ // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+ if (!element) {
+ return document.body;
+ }
+
+ switch (element.nodeName) {
+ case 'HTML':
+ case 'BODY':
+ return element.ownerDocument.body;
+ case '#document':
+ return element.body;
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+
+ var _getStyleComputedProp = getStyleComputedProperty(element),
+ overflow = _getStyleComputedProp.overflow,
+ overflowX = _getStyleComputedProp.overflowX,
+ overflowY = _getStyleComputedProp.overflowY;
+
+ if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+ return element;
+ }
+
+ return getScrollParent(getParentNode(element));
+}
+
+/**
+ * Tells if you are running Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @argument {number} version to check
+ * @returns {Boolean} isIE
+ */
+var cache = {};
+
+var isIE = function () {
+ var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all';
+
+ version = version.toString();
+ if (cache.hasOwnProperty(version)) {
+ return cache[version];
+ }
+ switch (version) {
+ case '11':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1;
+ break;
+ case '10':
+ cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;
+ break;
+ case 'all':
+ cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;
+ break;
+ }
+
+ //Set IE
+ cache.all = cache.all || Object.keys(cache).some(function (key) {
+ return cache[key];
+ });
+ return cache[version];
+};
+
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+function getOffsetParent(element) {
+ if (!element) {
+ return document.documentElement;
+ }
+
+ var noOffsetParent = isIE(10) ? document.body : null;
+
+ // NOTE: 1 DOM access here
+ var offsetParent = element.offsetParent;
+ // Skip hidden elements which don't have an offsetParent
+ while (offsetParent === noOffsetParent && element.nextElementSibling) {
+ offsetParent = (element = element.nextElementSibling).offsetParent;
+ }
+
+ var nodeName = offsetParent && offsetParent.nodeName;
+
+ if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+ return element ? element.ownerDocument.documentElement : document.documentElement;
+ }
+
+ // .offsetParent will return the closest TD or TABLE in case
+ // no offsetParent is present, I hate this job...
+ if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
+ return getOffsetParent(offsetParent);
+ }
+
+ return offsetParent;
+}
+
+function isOffsetContainer(element) {
+ var nodeName = element.nodeName;
+
+ if (nodeName === 'BODY') {
+ return false;
+ }
+ return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
+}
+
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+function getRoot(node) {
+ if (node.parentNode !== null) {
+ return getRoot(node.parentNode);
+ }
+
+ return node;
+}
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+function findCommonOffsetParent(element1, element2) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+ return document.documentElement;
+ }
+
+ // Here we make sure to give as "start" the element that comes first in the DOM
+ var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
+ var start = order ? element1 : element2;
+ var end = order ? element2 : element1;
+
+ // Get common ancestor container
+ var range = document.createRange();
+ range.setStart(start, 0);
+ range.setEnd(end, 0);
+ var commonAncestorContainer = range.commonAncestorContainer;
+
+ // Both nodes are inside #document
+
+ if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
+ if (isOffsetContainer(commonAncestorContainer)) {
+ return commonAncestorContainer;
+ }
+
+ return getOffsetParent(commonAncestorContainer);
+ }
+
+ // one of the nodes is inside shadowDOM, find which one
+ var element1root = getRoot(element1);
+ if (element1root.host) {
+ return findCommonOffsetParent(element1root.host, element2);
+ } else {
+ return findCommonOffsetParent(element1, getRoot(element2).host);
+ }
+}
+
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+function getScroll(element) {
+ var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
+
+ var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+ var nodeName = element.nodeName;
+
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ var html = element.ownerDocument.documentElement;
+ var scrollingElement = element.ownerDocument.scrollingElement || html;
+ return scrollingElement[upperSide];
+ }
+
+ return element[upperSide];
+}
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+function includeScroll(rect, element) {
+ var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ var scrollTop = getScroll(element, 'top');
+ var scrollLeft = getScroll(element, 'left');
+ var modifier = subtract ? -1 : 1;
+ rect.top += scrollTop * modifier;
+ rect.bottom += scrollTop * modifier;
+ rect.left += scrollLeft * modifier;
+ rect.right += scrollLeft * modifier;
+ return rect;
+}
+
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+function getBordersSize(styles, axis) {
+ var sideA = axis === 'x' ? 'Left' : 'Top';
+ var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+ return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
+}
+
+function getSize(axis, body, html, computedStyle) {
+ return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
+}
+
+function getWindowSizes() {
+ var body = document.body;
+ var html = document.documentElement;
+ var computedStyle = isIE(10) && getComputedStyle(html);
+
+ return {
+ height: getSize('Height', body, html, computedStyle),
+ width: getSize('Width', body, html, computedStyle)
+ };
+}
+
+var classCallCheck = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+};
+
+var createClass = function () {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ return function (Constructor, protoProps, staticProps) {
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+}();
+
+
+
+
+
+var defineProperty = function (obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+};
+
+var _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
+
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+function getClientRect(offsets) {
+ return _extends({}, offsets, {
+ right: offsets.left + offsets.width,
+ bottom: offsets.top + offsets.height
+ });
+}
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+function getBoundingClientRect(element) {
+ var rect = {};
+
+ // IE10 10 FIX: Please, don't ask, the element isn't
+ // considered in DOM in some circumstances...
+ // This isn't reproducible in IE10 compatibility mode of IE11
+ try {
+ if (isIE(10)) {
+ rect = element.getBoundingClientRect();
+ var scrollTop = getScroll(element, 'top');
+ var scrollLeft = getScroll(element, 'left');
+ rect.top += scrollTop;
+ rect.left += scrollLeft;
+ rect.bottom += scrollTop;
+ rect.right += scrollLeft;
+ } else {
+ rect = element.getBoundingClientRect();
+ }
+ } catch (e) {}
+
+ var result = {
+ left: rect.left,
+ top: rect.top,
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top
+ };
+
+ // subtract scrollbar size from sizes
+ var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};
+ var width = sizes.width || element.clientWidth || result.right - result.left;
+ var height = sizes.height || element.clientHeight || result.bottom - result.top;
+
+ var horizScrollbar = element.offsetWidth - width;
+ var vertScrollbar = element.offsetHeight - height;
+
+ // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+ // we make this check conditional for performance reasons
+ if (horizScrollbar || vertScrollbar) {
+ var styles = getStyleComputedProperty(element);
+ horizScrollbar -= getBordersSize(styles, 'x');
+ vertScrollbar -= getBordersSize(styles, 'y');
+
+ result.width -= horizScrollbar;
+ result.height -= vertScrollbar;
+ }
+
+ return getClientRect(result);
+}
+
+function getOffsetRectRelativeToArbitraryNode(children, parent) {
+ var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ var isIE10 = isIE(10);
+ var isHTML = parent.nodeName === 'HTML';
+ var childrenRect = getBoundingClientRect(children);
+ var parentRect = getBoundingClientRect(parent);
+ var scrollParent = getScrollParent(children);
+
+ var styles = getStyleComputedProperty(parent);
+ var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
+ var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
+
+ // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+ if (fixedPosition && parent.nodeName === 'HTML') {
+ parentRect.top = Math.max(parentRect.top, 0);
+ parentRect.left = Math.max(parentRect.left, 0);
+ }
+ var offsets = getClientRect({
+ top: childrenRect.top - parentRect.top - borderTopWidth,
+ left: childrenRect.left - parentRect.left - borderLeftWidth,
+ width: childrenRect.width,
+ height: childrenRect.height
+ });
+ offsets.marginTop = 0;
+ offsets.marginLeft = 0;
+
+ // Subtract margins of documentElement in case it's being used as parent
+ // we do this only on HTML because it's the only element that behaves
+ // differently when margins are applied to it. The margins are included in
+ // the box of the documentElement, in the other cases not.
+ if (!isIE10 && isHTML) {
+ var marginTop = parseFloat(styles.marginTop, 10);
+ var marginLeft = parseFloat(styles.marginLeft, 10);
+
+ offsets.top -= borderTopWidth - marginTop;
+ offsets.bottom -= borderTopWidth - marginTop;
+ offsets.left -= borderLeftWidth - marginLeft;
+ offsets.right -= borderLeftWidth - marginLeft;
+
+ // Attach marginTop and marginLeft because in some circumstances we may need them
+ offsets.marginTop = marginTop;
+ offsets.marginLeft = marginLeft;
+ }
+
+ if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
+ offsets = includeScroll(offsets, parent);
+ }
+
+ return offsets;
+}
+
+function getViewportOffsetRectRelativeToArtbitraryNode(element) {
+ var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+ var html = element.ownerDocument.documentElement;
+ var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+ var width = Math.max(html.clientWidth, window.innerWidth || 0);
+ var height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+ var scrollTop = !excludeScroll ? getScroll(html) : 0;
+ var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+ var offset = {
+ top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+ left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+ width: width,
+ height: height
+ };
+
+ return getClientRect(offset);
+}
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+function isFixed(element) {
+ var nodeName = element.nodeName;
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ return isFixed(getParentNode(element));
+}
+
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+function getFixedPositionOffsetParent(element) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element || !element.parentElement || isIE()) {
+ return document.documentElement;
+ }
+ var el = element.parentElement;
+ while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+ el = el.parentElement;
+ }
+ return el || document.documentElement;
+}
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+function getBoundaries(popper, reference, padding, boundariesElement) {
+ var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+ // NOTE: 1 DOM access here
+
+ var boundaries = { top: 0, left: 0 };
+ var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+
+ // Handle viewport case
+ if (boundariesElement === 'viewport') {
+ boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+ } else {
+ // Handle other cases based on DOM element used as boundaries
+ var boundariesNode = void 0;
+ if (boundariesElement === 'scrollParent') {
+ boundariesNode = getScrollParent(getParentNode(reference));
+ if (boundariesNode.nodeName === 'BODY') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ }
+ } else if (boundariesElement === 'window') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ } else {
+ boundariesNode = boundariesElement;
+ }
+
+ var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
+
+ // In case of HTML, we need a different computation
+ if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+ var _getWindowSizes = getWindowSizes(),
+ height = _getWindowSizes.height,
+ width = _getWindowSizes.width;
+
+ boundaries.top += offsets.top - offsets.marginTop;
+ boundaries.bottom = height + offsets.top;
+ boundaries.left += offsets.left - offsets.marginLeft;
+ boundaries.right = width + offsets.left;
+ } else {
+ // for all the other DOM elements, this one is good
+ boundaries = offsets;
+ }
+ }
+
+ // Add paddings
+ boundaries.left += padding;
+ boundaries.top += padding;
+ boundaries.right -= padding;
+ boundaries.bottom -= padding;
+
+ return boundaries;
+}
+
+function getArea(_ref) {
+ var width = _ref.width,
+ height = _ref.height;
+
+ return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
+ var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
+
+ if (placement.indexOf('auto') === -1) {
+ return placement;
+ }
+
+ var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
+
+ var rects = {
+ top: {
+ width: boundaries.width,
+ height: refRect.top - boundaries.top
+ },
+ right: {
+ width: boundaries.right - refRect.right,
+ height: boundaries.height
+ },
+ bottom: {
+ width: boundaries.width,
+ height: boundaries.bottom - refRect.bottom
+ },
+ left: {
+ width: refRect.left - boundaries.left,
+ height: boundaries.height
+ }
+ };
+
+ var sortedAreas = Object.keys(rects).map(function (key) {
+ return _extends({
+ key: key
+ }, rects[key], {
+ area: getArea(rects[key])
+ });
+ }).sort(function (a, b) {
+ return b.area - a.area;
+ });
+
+ var filteredAreas = sortedAreas.filter(function (_ref2) {
+ var width = _ref2.width,
+ height = _ref2.height;
+ return width >= popper.clientWidth && height >= popper.clientHeight;
+ });
+
+ var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
+
+ var variation = placement.split('-')[1];
+
+ return computedPlacement + (variation ? '-' + variation : '');
+}
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+function getReferenceOffsets(state, popper, reference) {
+ var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+
+ var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+ return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
+
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+function getOuterSizes(element) {
+ var styles = getComputedStyle(element);
+ var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
+ var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
+ var result = {
+ width: element.offsetWidth + y,
+ height: element.offsetHeight + x
+ };
+ return result;
+}
+
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+function getOppositePlacement(placement) {
+ var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, function (matched) {
+ return hash[matched];
+ });
+}
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+function getPopperOffsets(popper, referenceOffsets, placement) {
+ placement = placement.split('-')[0];
+
+ // Get popper node sizes
+ var popperRect = getOuterSizes(popper);
+
+ // Add position, width and height to our offsets object
+ var popperOffsets = {
+ width: popperRect.width,
+ height: popperRect.height
+ };
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+ var mainSide = isHoriz ? 'top' : 'left';
+ var secondarySide = isHoriz ? 'left' : 'top';
+ var measurement = isHoriz ? 'height' : 'width';
+ var secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+ popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
+ if (placement === secondarySide) {
+ popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+ } else {
+ popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
+ }
+
+ return popperOffsets;
+}
+
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function find(arr, check) {
+ // use native find if supported
+ if (Array.prototype.find) {
+ return arr.find(check);
+ }
+
+ // use `filter` to obtain the same behavior of `find`
+ return arr.filter(check)[0];
+}
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function findIndex(arr, prop, value) {
+ // use native findIndex if supported
+ if (Array.prototype.findIndex) {
+ return arr.findIndex(function (cur) {
+ return cur[prop] === value;
+ });
+ }
+
+ // use `find` + `indexOf` if `findIndex` isn't supported
+ var match = find(arr, function (obj) {
+ return obj[prop] === value;
+ });
+ return arr.indexOf(match);
+}
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+function runModifiers(modifiers, data, ends) {
+ var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+ modifiersToRun.forEach(function (modifier) {
+ if (modifier['function']) {
+ // eslint-disable-line dot-notation
+ console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+ }
+ var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+ if (modifier.enabled && isFunction(fn)) {
+ // Add properties to offsets to make them a complete clientRect object
+ // we do this before each modifier to make sure the previous one doesn't
+ // mess with these values
+ data.offsets.popper = getClientRect(data.offsets.popper);
+ data.offsets.reference = getClientRect(data.offsets.reference);
+
+ data = fn(data, modifier);
+ }
+ });
+
+ return data;
+}
+
+/**
+ * Updates the position of the popper, computing the new offsets and applying
+ * the new style.
+ * Prefer `scheduleUpdate` over `update` because of performance reasons.
+ * @method
+ * @memberof Popper
+ */
+function update() {
+ // if popper is destroyed, don't perform any further update
+ if (this.state.isDestroyed) {
+ return;
+ }
+
+ var data = {
+ instance: this,
+ styles: {},
+ arrowStyles: {},
+ attributes: {},
+ flipped: false,
+ offsets: {}
+ };
+
+ // compute reference element offsets
+ data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
+
+ // compute auto placement, store placement inside the data object,
+ // modifiers will be able to edit `placement` if needed
+ // and refer to originalPlacement to know the original value
+ data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
+
+ // store the computed placement inside `originalPlacement`
+ data.originalPlacement = data.placement;
+
+ data.positionFixed = this.options.positionFixed;
+
+ // compute the popper offsets
+ data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
+ data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
+
+ // run the modifiers
+ data = runModifiers(this.modifiers, data);
+
+ // the first `update` will call `onCreate` callback
+ // the other ones will call `onUpdate` callback
+ if (!this.state.isCreated) {
+ this.state.isCreated = true;
+ this.options.onCreate(data);
+ } else {
+ this.options.onUpdate(data);
+ }
+}
+
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+function isModifierEnabled(modifiers, modifierName) {
+ return modifiers.some(function (_ref) {
+ var name = _ref.name,
+ enabled = _ref.enabled;
+ return enabled && name === modifierName;
+ });
+}
+
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+function getSupportedPropertyName(property) {
+ var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+ var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+ for (var i = 0; i < prefixes.length; i++) {
+ var prefix = prefixes[i];
+ var toCheck = prefix ? '' + prefix + upperProp : property;
+ if (typeof document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+}
+
+/**
+ * Destroy the popper
+ * @method
+ * @memberof Popper
+ */
+function destroy() {
+ this.state.isDestroyed = true;
+
+ // touch DOM only if `applyStyle` modifier is enabled
+ if (isModifierEnabled(this.modifiers, 'applyStyle')) {
+ this.popper.removeAttribute('x-placement');
+ this.popper.style.position = '';
+ this.popper.style.top = '';
+ this.popper.style.left = '';
+ this.popper.style.right = '';
+ this.popper.style.bottom = '';
+ this.popper.style.willChange = '';
+ this.popper.style[getSupportedPropertyName('transform')] = '';
+ }
+
+ this.disableEventListeners();
+
+ // remove the popper if user explicity asked for the deletion on destroy
+ // do not use `remove` because IE11 doesn't support it
+ if (this.options.removeOnDestroy) {
+ this.popper.parentNode.removeChild(this.popper);
+ }
+ return this;
+}
+
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+function getWindow(element) {
+ var ownerDocument = element.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView : window;
+}
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+ var isBody = scrollParent.nodeName === 'BODY';
+ var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+ target.addEventListener(event, callback, { passive: true });
+
+ if (!isBody) {
+ attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
+ }
+ scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function setupEventListeners(reference, options, state, updateBound) {
+ // Resize event listener on window
+ state.updateBound = updateBound;
+ getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+ // Scroll event listener on scroll parents
+ var scrollElement = getScrollParent(reference);
+ attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
+ state.scrollElement = scrollElement;
+ state.eventsEnabled = true;
+
+ return state;
+}
+
+/**
+ * It will add resize/scroll events and start recalculating
+ * position of the popper element when they are triggered.
+ * @method
+ * @memberof Popper
+ */
+function enableEventListeners() {
+ if (!this.state.eventsEnabled) {
+ this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
+ }
+}
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function removeEventListeners(reference, state) {
+ // Remove resize event listener on window
+ getWindow(reference).removeEventListener('resize', state.updateBound);
+
+ // Remove scroll event listener on scroll parents
+ state.scrollParents.forEach(function (target) {
+ target.removeEventListener('scroll', state.updateBound);
+ });
+
+ // Reset state
+ state.updateBound = null;
+ state.scrollParents = [];
+ state.scrollElement = null;
+ state.eventsEnabled = false;
+ return state;
+}
+
+/**
+ * It will remove resize/scroll events and won't recalculate popper position
+ * when they are triggered. It also won't trigger onUpdate callback anymore,
+ * unless you call `update` method manually.
+ * @method
+ * @memberof Popper
+ */
+function disableEventListeners() {
+ if (this.state.eventsEnabled) {
+ cancelAnimationFrame(this.scheduleUpdate);
+ this.state = removeEventListeners(this.reference, this.state);
+ }
+}
+
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+function isNumeric(n) {
+ return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setStyles(element, styles) {
+ Object.keys(styles).forEach(function (prop) {
+ var unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+}
+
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setAttributes(element, attributes) {
+ Object.keys(attributes).forEach(function (prop) {
+ var value = attributes[prop];
+ if (value !== false) {
+ element.setAttribute(prop, attributes[prop]);
+ } else {
+ element.removeAttribute(prop);
+ }
+ });
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} data.styles - List of style properties - values to apply to popper element
+ * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The same data object
+ */
+function applyStyle(data) {
+ // any property present in `data.styles` will be applied to the popper,
+ // in this way we can make the 3rd party modifiers add custom styles to it
+ // Be aware, modifiers could override the properties defined in the previous
+ // lines of this modifier!
+ setStyles(data.instance.popper, data.styles);
+
+ // any property present in `data.attributes` will be applied to the popper,
+ // they will be set as HTML attributes of the element
+ setAttributes(data.instance.popper, data.attributes);
+
+ // if arrowElement is defined and arrowStyles has some properties
+ if (data.arrowElement && Object.keys(data.arrowStyles).length) {
+ setStyles(data.arrowElement, data.arrowStyles);
+ }
+
+ return data;
+}
+
+/**
+ * Set the x-placement attribute before everything else because it could be used
+ * to add margins to the popper margins needs to be calculated to get the
+ * correct popper offsets.
+ * @method
+ * @memberof Popper.modifiers
+ * @param {HTMLElement} reference - The reference element used to position the popper
+ * @param {HTMLElement} popper - The HTML element used as popper
+ * @param {Object} options - Popper.js options
+ */
+function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
+ // compute reference element offsets
+ var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
+
+ // compute auto placement, store placement inside the data object,
+ // modifiers will be able to edit `placement` if needed
+ // and refer to originalPlacement to know the original value
+ var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
+
+ popper.setAttribute('x-placement', placement);
+
+ // Apply `position` to popper before anything else because
+ // without the position applied we can't guarantee correct computations
+ setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
+
+ return options;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeStyle(data, options) {
+ var x = options.x,
+ y = options.y;
+ var popper = data.offsets.popper;
+
+ // Remove this legacy support in Popper.js v2
+
+ var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
+ return modifier.name === 'applyStyle';
+ }).gpuAcceleration;
+ if (legacyGpuAccelerationOption !== undefined) {
+ console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
+ }
+ var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
+
+ var offsetParent = getOffsetParent(data.instance.popper);
+ var offsetParentRect = getBoundingClientRect(offsetParent);
+
+ // Styles
+ var styles = {
+ position: popper.position
+ };
+
+ // floor sides to avoid blurry text
+ var offsets = {
+ left: Math.floor(popper.left),
+ top: Math.floor(popper.top),
+ bottom: Math.floor(popper.bottom),
+ right: Math.floor(popper.right)
+ };
+
+ var sideA = x === 'bottom' ? 'top' : 'bottom';
+ var sideB = y === 'right' ? 'left' : 'right';
+
+ // if gpuAcceleration is set to `true` and transform is supported,
+ // we use `translate3d` to apply the position to the popper we
+ // automatically use the supported prefixed version if needed
+ var prefixedProperty = getSupportedPropertyName('transform');
+
+ // now, let's make a step back and look at this code closely (wtf?)
+ // If the content of the popper grows once it's been positioned, it
+ // may happen that the popper gets misplaced because of the new content
+ // overflowing its reference element
+ // To avoid this problem, we provide two options (x and y), which allow
+ // the consumer to define the offset origin.
+ // If we position a popper on top of a reference element, we can set
+ // `x` to `top` to make the popper grow towards its top instead of
+ // its bottom.
+ var left = void 0,
+ top = void 0;
+ if (sideA === 'bottom') {
+ top = -offsetParentRect.height + offsets.bottom;
+ } else {
+ top = offsets.top;
+ }
+ if (sideB === 'right') {
+ left = -offsetParentRect.width + offsets.right;
+ } else {
+ left = offsets.left;
+ }
+ if (gpuAcceleration && prefixedProperty) {
+ styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
+ styles[sideA] = 0;
+ styles[sideB] = 0;
+ styles.willChange = 'transform';
+ } else {
+ // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
+ var invertTop = sideA === 'bottom' ? -1 : 1;
+ var invertLeft = sideB === 'right' ? -1 : 1;
+ styles[sideA] = top * invertTop;
+ styles[sideB] = left * invertLeft;
+ styles.willChange = sideA + ', ' + sideB;
+ }
+
+ // Attributes
+ var attributes = {
+ 'x-placement': data.placement
+ };
+
+ // Update `data` attributes, styles and arrowStyles
+ data.attributes = _extends({}, attributes, data.attributes);
+ data.styles = _extends({}, styles, data.styles);
+ data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
+
+ return data;
+}
+
+/**
+ * Helper used to know if the given modifier depends from another one.
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+function isModifierRequired(modifiers, requestingName, requestedName) {
+ var requesting = find(modifiers, function (_ref) {
+ var name = _ref.name;
+ return name === requestingName;
+ });
+
+ var isRequired = !!requesting && modifiers.some(function (modifier) {
+ return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
+ });
+
+ if (!isRequired) {
+ var _requesting = '`' + requestingName + '`';
+ var requested = '`' + requestedName + '`';
+ console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
+ }
+ return isRequired;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function arrow(data, options) {
+ var _data$offsets$arrow;
+
+ // arrow depends on keepTogether in order to work
+ if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
+ return data;
+ }
+
+ var arrowElement = options.element;
+
+ // if arrowElement is a string, suppose it's a CSS selector
+ if (typeof arrowElement === 'string') {
+ arrowElement = data.instance.popper.querySelector(arrowElement);
+
+ // if arrowElement is not found, don't run the modifier
+ if (!arrowElement) {
+ return data;
+ }
+ } else {
+ // if the arrowElement isn't a query selector we must check that the
+ // provided DOM node is child of its popper node
+ if (!data.instance.popper.contains(arrowElement)) {
+ console.warn('WARNING: `arrow.element` must be child of its popper element!');
+ return data;
+ }
+ }
+
+ var placement = data.placement.split('-')[0];
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var isVertical = ['left', 'right'].indexOf(placement) !== -1;
+
+ var len = isVertical ? 'height' : 'width';
+ var sideCapitalized = isVertical ? 'Top' : 'Left';
+ var side = sideCapitalized.toLowerCase();
+ var altSide = isVertical ? 'left' : 'top';
+ var opSide = isVertical ? 'bottom' : 'right';
+ var arrowElementSize = getOuterSizes(arrowElement)[len];
+
+ //
+ // extends keepTogether behavior making sure the popper and its
+ // reference have enough pixels in conjuction
+ //
+
+ // top/left side
+ if (reference[opSide] - arrowElementSize < popper[side]) {
+ data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
+ }
+ // bottom/right side
+ if (reference[side] + arrowElementSize > popper[opSide]) {
+ data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
+ }
+ data.offsets.popper = getClientRect(data.offsets.popper);
+
+ // compute center of the popper
+ var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
+
+ // Compute the sideValue using the updated popper offsets
+ // take popper margin in account because we don't have this info available
+ var css = getStyleComputedProperty(data.instance.popper);
+ var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
+ var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
+ var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
+
+ // prevent arrowElement from being placed not contiguously to its popper
+ sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
+
+ data.arrowElement = arrowElement;
+ data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
+
+ return data;
+}
+
+/**
+ * Get the opposite placement variation of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement variation
+ * @returns {String} flipped placement variation
+ */
+function getOppositeVariation(variation) {
+ if (variation === 'end') {
+ return 'start';
+ } else if (variation === 'start') {
+ return 'end';
+ }
+ return variation;
+}
+
+/**
+ * List of accepted placements to use as values of the `placement` option.
+ * Valid placements are:
+ * - `auto`
+ * - `top`
+ * - `right`
+ * - `bottom`
+ * - `left`
+ *
+ * Each placement can have a variation from this list:
+ * - `-start`
+ * - `-end`
+ *
+ * Variations are interpreted easily if you think of them as the left to right
+ * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
+ * is right.
+ * Vertically (`left` and `right`), `start` is top and `end` is bottom.
+ *
+ * Some valid examples are:
+ * - `top-end` (on top of reference, right aligned)
+ * - `right-start` (on right of reference, top aligned)
+ * - `bottom` (on bottom, centered)
+ * - `auto-right` (on the side with more space available, alignment depends by placement)
+ *
+ * @static
+ * @type {Array}
+ * @enum {String}
+ * @readonly
+ * @method placements
+ * @memberof Popper
+ */
+var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
+
+// Get rid of `auto` `auto-start` and `auto-end`
+var validPlacements = placements.slice(3);
+
+/**
+ * Given an initial placement, returns all the subsequent placements
+ * clockwise (or counter-clockwise).
+ *
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement - A valid placement (it accepts variations)
+ * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
+ * @returns {Array} placements including their variations
+ */
+function clockwise(placement) {
+ var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+ var index = validPlacements.indexOf(placement);
+ var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
+ return counter ? arr.reverse() : arr;
+}
+
+var BEHAVIORS = {
+ FLIP: 'flip',
+ CLOCKWISE: 'clockwise',
+ COUNTERCLOCKWISE: 'counterclockwise'
+};
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function flip(data, options) {
+ // if `inner` modifier is enabled, we can't use the `flip` modifier
+ if (isModifierEnabled(data.instance.modifiers, 'inner')) {
+ return data;
+ }
+
+ if (data.flipped && data.placement === data.originalPlacement) {
+ // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
+ return data;
+ }
+
+ var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
+
+ var placement = data.placement.split('-')[0];
+ var placementOpposite = getOppositePlacement(placement);
+ var variation = data.placement.split('-')[1] || '';
+
+ var flipOrder = [];
+
+ switch (options.behavior) {
+ case BEHAVIORS.FLIP:
+ flipOrder = [placement, placementOpposite];
+ break;
+ case BEHAVIORS.CLOCKWISE:
+ flipOrder = clockwise(placement);
+ break;
+ case BEHAVIORS.COUNTERCLOCKWISE:
+ flipOrder = clockwise(placement, true);
+ break;
+ default:
+ flipOrder = options.behavior;
+ }
+
+ flipOrder.forEach(function (step, index) {
+ if (placement !== step || flipOrder.length === index + 1) {
+ return data;
+ }
+
+ placement = data.placement.split('-')[0];
+ placementOpposite = getOppositePlacement(placement);
+
+ var popperOffsets = data.offsets.popper;
+ var refOffsets = data.offsets.reference;
+
+ // using floor because the reference offsets may contain decimals we are not going to consider here
+ var floor = Math.floor;
+ var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
+
+ var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
+ var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
+ var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
+ var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
+
+ var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
+
+ // flip the variation if required
+ var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+ var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
+
+ if (overlapsRef || overflowsBoundaries || flippedVariation) {
+ // this boolean to detect any flip loop
+ data.flipped = true;
+
+ if (overlapsRef || overflowsBoundaries) {
+ placement = flipOrder[index + 1];
+ }
+
+ if (flippedVariation) {
+ variation = getOppositeVariation(variation);
+ }
+
+ data.placement = placement + (variation ? '-' + variation : '');
+
+ // this object contains `position`, we want to preserve it along with
+ // any additional property we may add in the future
+ data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
+
+ data = runModifiers(data.instance.modifiers, data, 'flip');
+ }
+ });
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function keepTogether(data) {
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var placement = data.placement.split('-')[0];
+ var floor = Math.floor;
+ var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+ var side = isVertical ? 'right' : 'bottom';
+ var opSide = isVertical ? 'left' : 'top';
+ var measurement = isVertical ? 'width' : 'height';
+
+ if (popper[side] < floor(reference[opSide])) {
+ data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
+ }
+ if (popper[opSide] > floor(reference[side])) {
+ data.offsets.popper[opSide] = floor(reference[side]);
+ }
+
+ return data;
+}
+
+/**
+ * Converts a string containing value + unit into a px value number
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} str - Value + unit string
+ * @argument {String} measurement - `height` or `width`
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @returns {Number|String}
+ * Value in pixels, or original string if no values were extracted
+ */
+function toValue(str, measurement, popperOffsets, referenceOffsets) {
+ // separate value from unit
+ var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
+ var value = +split[1];
+ var unit = split[2];
+
+ // If it's not a number it's an operator, I guess
+ if (!value) {
+ return str;
+ }
+
+ if (unit.indexOf('%') === 0) {
+ var element = void 0;
+ switch (unit) {
+ case '%p':
+ element = popperOffsets;
+ break;
+ case '%':
+ case '%r':
+ default:
+ element = referenceOffsets;
+ }
+
+ var rect = getClientRect(element);
+ return rect[measurement] / 100 * value;
+ } else if (unit === 'vh' || unit === 'vw') {
+ // if is a vh or vw, we calculate the size based on the viewport
+ var size = void 0;
+ if (unit === 'vh') {
+ size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+ } else {
+ size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
+ }
+ return size / 100 * value;
+ } else {
+ // if is an explicit pixel unit, we get rid of the unit and keep the value
+ // if is an implicit unit, it's px, and we return just the value
+ return value;
+ }
+}
+
+/**
+ * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} offset
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @argument {String} basePlacement
+ * @returns {Array} a two cells array with x and y offsets in numbers
+ */
+function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
+ var offsets = [0, 0];
+
+ // Use height if placement is left or right and index is 0 otherwise use width
+ // in this way the first offset will use an axis and the second one
+ // will use the other one
+ var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
+
+ // Split the offset string to obtain a list of values and operands
+ // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
+ var fragments = offset.split(/(\+|\-)/).map(function (frag) {
+ return frag.trim();
+ });
+
+ // Detect if the offset string contains a pair of values or a single one
+ // they could be separated by comma or space
+ var divider = fragments.indexOf(find(fragments, function (frag) {
+ return frag.search(/,|\s/) !== -1;
+ }));
+
+ if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
+ console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
+ }
+
+ // If divider is found, we divide the list of values and operands to divide
+ // them by ofset X and Y.
+ var splitRegex = /\s*,\s*|\s+/;
+ var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
+
+ // Convert the values with units to absolute pixels to allow our computations
+ ops = ops.map(function (op, index) {
+ // Most of the units rely on the orientation of the popper
+ var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
+ var mergeWithPrevious = false;
+ return op
+ // This aggregates any `+` or `-` sign that aren't considered operators
+ // e.g.: 10 + +5 => [10, +, +5]
+ .reduce(function (a, b) {
+ if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
+ a[a.length - 1] = b;
+ mergeWithPrevious = true;
+ return a;
+ } else if (mergeWithPrevious) {
+ a[a.length - 1] += b;
+ mergeWithPrevious = false;
+ return a;
+ } else {
+ return a.concat(b);
+ }
+ }, [])
+ // Here we convert the string values into number values (in px)
+ .map(function (str) {
+ return toValue(str, measurement, popperOffsets, referenceOffsets);
+ });
+ });
+
+ // Loop trough the offsets arrays and execute the operations
+ ops.forEach(function (op, index) {
+ op.forEach(function (frag, index2) {
+ if (isNumeric(frag)) {
+ offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
+ }
+ });
+ });
+ return offsets;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @argument {Number|String} options.offset=0
+ * The offset value as described in the modifier description
+ * @returns {Object} The data object, properly modified
+ */
+function offset(data, _ref) {
+ var offset = _ref.offset;
+ var placement = data.placement,
+ _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var basePlacement = placement.split('-')[0];
+
+ var offsets = void 0;
+ if (isNumeric(+offset)) {
+ offsets = [+offset, 0];
+ } else {
+ offsets = parseOffset(offset, popper, reference, basePlacement);
+ }
+
+ if (basePlacement === 'left') {
+ popper.top += offsets[0];
+ popper.left -= offsets[1];
+ } else if (basePlacement === 'right') {
+ popper.top += offsets[0];
+ popper.left += offsets[1];
+ } else if (basePlacement === 'top') {
+ popper.left += offsets[0];
+ popper.top -= offsets[1];
+ } else if (basePlacement === 'bottom') {
+ popper.left += offsets[0];
+ popper.top += offsets[1];
+ }
+
+ data.popper = popper;
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function preventOverflow(data, options) {
+ var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
+
+ // If offsetParent is the reference element, we really want to
+ // go one step up and use the next offsetParent as reference to
+ // avoid to make this modifier completely useless and look like broken
+ if (data.instance.reference === boundariesElement) {
+ boundariesElement = getOffsetParent(boundariesElement);
+ }
+
+ var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
+ options.boundaries = boundaries;
+
+ var order = options.priority;
+ var popper = data.offsets.popper;
+
+ var check = {
+ primary: function primary(placement) {
+ var value = popper[placement];
+ if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
+ value = Math.max(popper[placement], boundaries[placement]);
+ }
+ return defineProperty({}, placement, value);
+ },
+ secondary: function secondary(placement) {
+ var mainSide = placement === 'right' ? 'left' : 'top';
+ var value = popper[mainSide];
+ if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
+ value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
+ }
+ return defineProperty({}, mainSide, value);
+ }
+ };
+
+ order.forEach(function (placement) {
+ var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
+ popper = _extends({}, popper, check[side](placement));
+ });
+
+ data.offsets.popper = popper;
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function shift(data) {
+ var placement = data.placement;
+ var basePlacement = placement.split('-')[0];
+ var shiftvariation = placement.split('-')[1];
+
+ // if shift shiftvariation is specified, run the modifier
+ if (shiftvariation) {
+ var _data$offsets = data.offsets,
+ reference = _data$offsets.reference,
+ popper = _data$offsets.popper;
+
+ var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
+ var side = isVertical ? 'left' : 'top';
+ var measurement = isVertical ? 'width' : 'height';
+
+ var shiftOffsets = {
+ start: defineProperty({}, side, reference[side]),
+ end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
+ };
+
+ data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
+ }
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function hide(data) {
+ if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
+ return data;
+ }
+
+ var refRect = data.offsets.reference;
+ var bound = find(data.instance.modifiers, function (modifier) {
+ return modifier.name === 'preventOverflow';
+ }).boundaries;
+
+ if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
+ // Avoid unnecessary DOM access if visibility hasn't changed
+ if (data.hide === true) {
+ return data;
+ }
+
+ data.hide = true;
+ data.attributes['x-out-of-boundaries'] = '';
+ } else {
+ // Avoid unnecessary DOM access if visibility hasn't changed
+ if (data.hide === false) {
+ return data;
+ }
+
+ data.hide = false;
+ data.attributes['x-out-of-boundaries'] = false;
+ }
+
+ return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function inner(data) {
+ var placement = data.placement;
+ var basePlacement = placement.split('-')[0];
+ var _data$offsets = data.offsets,
+ popper = _data$offsets.popper,
+ reference = _data$offsets.reference;
+
+ var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
+
+ var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
+
+ popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
+
+ data.placement = getOppositePlacement(placement);
+ data.offsets.popper = getClientRect(popper);
+
+ return data;
+}
+
+/**
+ * Modifier function, each modifier can have a function of this type assigned
+ * to its `fn` property.
+ * These functions will be called on each update, this means that you must
+ * make sure they are performant enough to avoid performance bottlenecks.
+ *
+ * @function ModifierFn
+ * @argument {dataObject} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {dataObject} The data object, properly modified
+ */
+
+/**
+ * Modifiers are plugins used to alter the behavior of your poppers.
+ * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
+ * needed by the library.
+ *
+ * Usually you don't want to override the `order`, `fn` and `onLoad` props.
+ * All the other properties are configurations that could be tweaked.
+ * @namespace modifiers
+ */
+var modifiers = {
+ /**
+ * Modifier used to shift the popper on the start or end of its reference
+ * element.
+ * It will read the variation of the `placement` property.
+ * It can be one either `-end` or `-start`.
+ * @memberof modifiers
+ * @inner
+ */
+ shift: {
+ /** @prop {number} order=100 - Index used to define the order of execution */
+ order: 100,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: shift
+ },
+
+ /**
+ * The `offset` modifier can shift your popper on both its axis.
+ *
+ * It accepts the following units:
+ * - `px` or unitless, interpreted as pixels
+ * - `%` or `%r`, percentage relative to the length of the reference element
+ * - `%p`, percentage relative to the length of the popper element
+ * - `vw`, CSS viewport width unit
+ * - `vh`, CSS viewport height unit
+ *
+ * For length is intended the main axis relative to the placement of the popper.
+ * This means that if the placement is `top` or `bottom`, the length will be the
+ * `width`. In case of `left` or `right`, it will be the height.
+ *
+ * You can provide a single value (as `Number` or `String`), or a pair of values
+ * as `String` divided by a comma or one (or more) white spaces.
+ * The latter is a deprecated method because it leads to confusion and will be
+ * removed in v2.
+ * Additionally, it accepts additions and subtractions between different units.
+ * Note that multiplications and divisions aren't supported.
+ *
+ * Valid examples are:
+ * ```
+ * 10
+ * '10%'
+ * '10, 10'
+ * '10%, 10'
+ * '10 + 10%'
+ * '10 - 5vh + 3%'
+ * '-10px + 5vh, 5px - 6%'
+ * ```
+ * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
+ * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
+ * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ offset: {
+ /** @prop {number} order=200 - Index used to define the order of execution */
+ order: 200,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: offset,
+ /** @prop {Number|String} offset=0
+ * The offset value as described in the modifier description
+ */
+ offset: 0
+ },
+
+ /**
+ * Modifier used to prevent the popper from being positioned outside the boundary.
+ *
+ * An scenario exists where the reference itself is not within the boundaries.
+ * We can say it has "escaped the boundaries" — or just "escaped".
+ * In this case we need to decide whether the popper should either:
+ *
+ * - detach from the reference and remain "trapped" in the boundaries, or
+ * - if it should ignore the boundary and "escape with its reference"
+ *
+ * When `escapeWithReference` is set to`true` and reference is completely
+ * outside its boundaries, the popper will overflow (or completely leave)
+ * the boundaries in order to remain attached to the edge of the reference.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ preventOverflow: {
+ /** @prop {number} order=300 - Index used to define the order of execution */
+ order: 300,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: preventOverflow,
+ /**
+ * @prop {Array} [priority=['left','right','top','bottom']]
+ * Popper will try to prevent overflow following these priorities by default,
+ * then, it could overflow on the left and on top of the `boundariesElement`
+ */
+ priority: ['left', 'right', 'top', 'bottom'],
+ /**
+ * @prop {number} padding=5
+ * Amount of pixel used to define a minimum distance between the boundaries
+ * and the popper this makes sure the popper has always a little padding
+ * between the edges of its container
+ */
+ padding: 5,
+ /**
+ * @prop {String|HTMLElement} boundariesElement='scrollParent'
+ * Boundaries used by the modifier, can be `scrollParent`, `window`,
+ * `viewport` or any DOM element.
+ */
+ boundariesElement: 'scrollParent'
+ },
+
+ /**
+ * Modifier used to make sure the reference and its popper stay near eachothers
+ * without leaving any gap between the two. Expecially useful when the arrow is
+ * enabled and you want to assure it to point to its reference element.
+ * It cares only about the first axis, you can still have poppers with margin
+ * between the popper and its reference element.
+ * @memberof modifiers
+ * @inner
+ */
+ keepTogether: {
+ /** @prop {number} order=400 - Index used to define the order of execution */
+ order: 400,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: keepTogether
+ },
+
+ /**
+ * This modifier is used to move the `arrowElement` of the popper to make
+ * sure it is positioned between the reference element and its popper element.
+ * It will read the outer size of the `arrowElement` node to detect how many
+ * pixels of conjuction are needed.
+ *
+ * It has no effect if no `arrowElement` is provided.
+ * @memberof modifiers
+ * @inner
+ */
+ arrow: {
+ /** @prop {number} order=500 - Index used to define the order of execution */
+ order: 500,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: arrow,
+ /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
+ element: '[x-arrow]'
+ },
+
+ /**
+ * Modifier used to flip the popper's placement when it starts to overlap its
+ * reference element.
+ *
+ * Requires the `preventOverflow` modifier before it in order to work.
+ *
+ * **NOTE:** this modifier will interrupt the current update cycle and will
+ * restart it if it detects the need to flip the placement.
+ * @memberof modifiers
+ * @inner
+ */
+ flip: {
+ /** @prop {number} order=600 - Index used to define the order of execution */
+ order: 600,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: flip,
+ /**
+ * @prop {String|Array} behavior='flip'
+ * The behavior used to change the popper's placement. It can be one of
+ * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
+ * placements (with optional variations).
+ */
+ behavior: 'flip',
+ /**
+ * @prop {number} padding=5
+ * The popper will flip if it hits the edges of the `boundariesElement`
+ */
+ padding: 5,
+ /**
+ * @prop {String|HTMLElement} boundariesElement='viewport'
+ * The element which will define the boundaries of the popper position,
+ * the popper will never be placed outside of the defined boundaries
+ * (except if keepTogether is enabled)
+ */
+ boundariesElement: 'viewport'
+ },
+
+ /**
+ * Modifier used to make the popper flow toward the inner of the reference element.
+ * By default, when this modifier is disabled, the popper will be placed outside
+ * the reference element.
+ * @memberof modifiers
+ * @inner
+ */
+ inner: {
+ /** @prop {number} order=700 - Index used to define the order of execution */
+ order: 700,
+ /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
+ enabled: false,
+ /** @prop {ModifierFn} */
+ fn: inner
+ },
+
+ /**
+ * Modifier used to hide the popper when its reference element is outside of the
+ * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
+ * be used to hide with a CSS selector the popper when its reference is
+ * out of boundaries.
+ *
+ * Requires the `preventOverflow` modifier before it in order to work.
+ * @memberof modifiers
+ * @inner
+ */
+ hide: {
+ /** @prop {number} order=800 - Index used to define the order of execution */
+ order: 800,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: hide
+ },
+
+ /**
+ * Computes the style that will be applied to the popper element to gets
+ * properly positioned.
+ *
+ * Note that this modifier will not touch the DOM, it just prepares the styles
+ * so that `applyStyle` modifier can apply it. This separation is useful
+ * in case you need to replace `applyStyle` with a custom implementation.
+ *
+ * This modifier has `850` as `order` value to maintain backward compatibility
+ * with previous versions of Popper.js. Expect the modifiers ordering method
+ * to change in future major versions of the library.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ computeStyle: {
+ /** @prop {number} order=850 - Index used to define the order of execution */
+ order: 850,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: computeStyle,
+ /**
+ * @prop {Boolean} gpuAcceleration=true
+ * If true, it uses the CSS 3d transformation to position the popper.
+ * Otherwise, it will use the `top` and `left` properties.
+ */
+ gpuAcceleration: true,
+ /**
+ * @prop {string} [x='bottom']
+ * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
+ * Change this if your popper should grow in a direction different from `bottom`
+ */
+ x: 'bottom',
+ /**
+ * @prop {string} [x='left']
+ * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
+ * Change this if your popper should grow in a direction different from `right`
+ */
+ y: 'right'
+ },
+
+ /**
+ * Applies the computed styles to the popper element.
+ *
+ * All the DOM manipulations are limited to this modifier. This is useful in case
+ * you want to integrate Popper.js inside a framework or view library and you
+ * want to delegate all the DOM manipulations to it.
+ *
+ * Note that if you disable this modifier, you must make sure the popper element
+ * has its position set to `absolute` before Popper.js can do its work!
+ *
+ * Just disable this modifier and define you own to achieve the desired effect.
+ *
+ * @memberof modifiers
+ * @inner
+ */
+ applyStyle: {
+ /** @prop {number} order=900 - Index used to define the order of execution */
+ order: 900,
+ /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+ enabled: true,
+ /** @prop {ModifierFn} */
+ fn: applyStyle,
+ /** @prop {Function} */
+ onLoad: applyStyleOnLoad,
+ /**
+ * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
+ * @prop {Boolean} gpuAcceleration=true
+ * If true, it uses the CSS 3d transformation to position the popper.
+ * Otherwise, it will use the `top` and `left` properties.
+ */
+ gpuAcceleration: undefined
+ }
+};
+
+/**
+ * The `dataObject` is an object containing all the informations used by Popper.js
+ * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
+ * @name dataObject
+ * @property {Object} data.instance The Popper.js instance
+ * @property {String} data.placement Placement applied to popper
+ * @property {String} data.originalPlacement Placement originally defined on init
+ * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
+ * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.
+ * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
+ * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.boundaries Offsets of the popper boundaries
+ * @property {Object} data.offsets The measurements of popper, reference and arrow elements.
+ * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
+ */
+
+/**
+ * Default options provided to Popper.js constructor.
+ * These can be overriden using the `options` argument of Popper.js.
+ * To override an option, simply pass as 3rd argument an object with the same
+ * structure of this object, example:
+ * ```
+ * new Popper(ref, pop, {
+ * modifiers: {
+ * preventOverflow: { enabled: false }
+ * }
+ * })
+ * ```
+ * @type {Object}
+ * @static
+ * @memberof Popper
+ */
+var Defaults = {
+ /**
+ * Popper's placement
+ * @prop {Popper.placements} placement='bottom'
+ */
+ placement: 'bottom',
+
+ /**
+ * Set this to true if you want popper to position it self in 'fixed' mode
+ * @prop {Boolean} positionFixed=false
+ */
+ positionFixed: false,
+
+ /**
+ * Whether events (resize, scroll) are initially enabled
+ * @prop {Boolean} eventsEnabled=true
+ */
+ eventsEnabled: true,
+
+ /**
+ * Set to true if you want to automatically remove the popper when
+ * you call the `destroy` method.
+ * @prop {Boolean} removeOnDestroy=false
+ */
+ removeOnDestroy: false,
+
+ /**
+ * Callback called when the popper is created.
+ * By default, is set to no-op.
+ * Access Popper.js instance with `data.instance`.
+ * @prop {onCreate}
+ */
+ onCreate: function onCreate() {},
+
+ /**
+ * Callback called when the popper is updated, this callback is not called
+ * on the initialization/creation of the popper, but only on subsequent
+ * updates.
+ * By default, is set to no-op.
+ * Access Popper.js instance with `data.instance`.
+ * @prop {onUpdate}
+ */
+ onUpdate: function onUpdate() {},
+
+ /**
+ * List of modifiers used to modify the offsets before they are applied to the popper.
+ * They provide most of the functionalities of Popper.js
+ * @prop {modifiers}
+ */
+ modifiers: modifiers
+};
+
+/**
+ * @callback onCreate
+ * @param {dataObject} data
+ */
+
+/**
+ * @callback onUpdate
+ * @param {dataObject} data
+ */
+
+// Utils
+// Methods
+var Popper = function () {
+ /**
+ * Create a new Popper.js instance
+ * @class Popper
+ * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
+ * @param {HTMLElement} popper - The HTML element used as popper.
+ * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
+ * @return {Object} instance - The generated Popper.js instance
+ */
+ function Popper(reference, popper) {
+ var _this = this;
+
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ classCallCheck(this, Popper);
+
+ this.scheduleUpdate = function () {
+ return requestAnimationFrame(_this.update);
+ };
+
+ // make update() debounced, so that it only runs at most once-per-tick
+ this.update = debounce(this.update.bind(this));
+
+ // with {} we create a new object with the options inside it
+ this.options = _extends({}, Popper.Defaults, options);
+
+ // init state
+ this.state = {
+ isDestroyed: false,
+ isCreated: false,
+ scrollParents: []
+ };
+
+ // get reference and popper elements (allow jQuery wrappers)
+ this.reference = reference && reference.jquery ? reference[0] : reference;
+ this.popper = popper && popper.jquery ? popper[0] : popper;
+
+ // Deep merge modifiers options
+ this.options.modifiers = {};
+ Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
+ _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
+ });
+
+ // Refactoring modifiers' list (Object => Array)
+ this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
+ return _extends({
+ name: name
+ }, _this.options.modifiers[name]);
+ })
+ // sort the modifiers by order
+ .sort(function (a, b) {
+ return a.order - b.order;
+ });
+
+ // modifiers have the ability to execute arbitrary code when Popper.js get inited
+ // such code is executed in the same order of its modifier
+ // they could add new properties to their options configuration
+ // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
+ this.modifiers.forEach(function (modifierOptions) {
+ if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
+ modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
+ }
+ });
+
+ // fire the first update to position the popper in the right place
+ this.update();
+
+ var eventsEnabled = this.options.eventsEnabled;
+ if (eventsEnabled) {
+ // setup event listeners, they will take care of update the position in specific situations
+ this.enableEventListeners();
+ }
+
+ this.state.eventsEnabled = eventsEnabled;
+ }
+
+ // We can't use class properties because they don't get listed in the
+ // class prototype and break stuff like Sinon stubs
+
+
+ createClass(Popper, [{
+ key: 'update',
+ value: function update$$1() {
+ return update.call(this);
+ }
+ }, {
+ key: 'destroy',
+ value: function destroy$$1() {
+ return destroy.call(this);
+ }
+ }, {
+ key: 'enableEventListeners',
+ value: function enableEventListeners$$1() {
+ return enableEventListeners.call(this);
+ }
+ }, {
+ key: 'disableEventListeners',
+ value: function disableEventListeners$$1() {
+ return disableEventListeners.call(this);
+ }
+
+ /**
+ * Schedule an update, it will run on the next UI update available
+ * @method scheduleUpdate
+ * @memberof Popper
+ */
+
+
+ /**
+ * Collection of utilities useful when writing custom modifiers.
+ * Starting from version 1.7, this method is available only if you
+ * include `popper-utils.js` before `popper.js`.
+ *
+ * **DEPRECATION**: This way to access PopperUtils is deprecated
+ * and will be removed in v2! Use the PopperUtils module directly instead.
+ * Due to the high instability of the methods contained in Utils, we can't
+ * guarantee them to follow semver. Use them at your own risk!
+ * @static
+ * @private
+ * @type {Object}
+ * @deprecated since version 1.8
+ * @member Utils
+ * @memberof Popper
+ */
+
+ }]);
+ return Popper;
+}();
+
+/**
+ * The `referenceObject` is an object that provides an interface compatible with Popper.js
+ * and lets you use it as replacement of a real DOM node.
+ * You can use this method to position a popper relatively to a set of coordinates
+ * in case you don't have a DOM node to use as reference.
+ *
+ * ```
+ * new Popper(referenceObject, popperNode);
+ * ```
+ *
+ * NB: This feature isn't supported in Internet Explorer 10
+ * @name referenceObject
+ * @property {Function} data.getBoundingClientRect
+ * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
+ * @property {number} data.clientWidth
+ * An ES6 getter that will return the width of the virtual reference element.
+ * @property {number} data.clientHeight
+ * An ES6 getter that will return the height of the virtual reference element.
+ */
+
+
+Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
+Popper.placements = placements;
+Popper.Defaults = Defaults;
+
+return Popper;
+
+})));
+//# sourceMappingURL=popper.js.map
diff --git a/XPST/Scripts/umd/popper.js.map b/XPST/Scripts/umd/popper.js.map
new file mode 100644
index 0000000..e33f13c
--- /dev/null
+++ b/XPST/Scripts/umd/popper.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper.js","sources":["../../src/utils/debounce.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style. \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option. \n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right. \n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property. \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers. \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element. \n * It will read the variation of the `placement` property. \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper. \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces. \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2. \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries. \n * We can say it has \"escaped the boundaries\" — or just \"escaped\". \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor. \n * These can be overriden using the `options` argument of Popper.js. \n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node. \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Scripts/umd/popper.min.js b/XPST/Scripts/umd/popper.min.js
new file mode 100644
index 0000000..640b1a6
--- /dev/null
+++ b/XPST/Scripts/umd/popper.min.js
@@ -0,0 +1,5 @@
+/*
+ Copyright (C) Federico Zivolo 2018
+ Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
+ */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){if(!e)return document.documentElement;for(var o=ie(10)?document.body:null,n=e.offsetParent;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?r(n):n:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,a=document.createRange();a.setStart(n,0),a.setEnd(i,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0n[e]&&!t.escapeWithReference&&(i=X(p[o],n[e]-('right'===e?p.width:p.height))),se({},o,i)}};return i.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=de({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=J,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!q(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(i)[l];d[g]-us[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,y=t(e.instance.popper),w=parseFloat(y['margin'+f],10),E=parseFloat(y['border'+f+'Width'],10),v=b-e.offsets.popper[m]-w-E;return v=Q(X(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},se(n,m,Math.round(v)),se(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(P(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=E(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=S(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case fe.FLIP:p=[n,i];break;case fe.CLOCKWISE:p=V(n);break;case fe.COUNTERCLOCKWISE:p=V(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=S(n);var a=e.offsets.popper,l=e.offsets.reference,f=J,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=K(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=de({},e.offsets.popper,T(e.instance.popper,e.offsets.reference,e.placement)),e=N(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=S(t),e.offsets.popper=c(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!q(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style. \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one. \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node. \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor. \n * These can be overriden using the `options` argument of Popper.js. \n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates. \n * By default, is set to no-op. \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property. \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers. \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element. \n * It will read the variation of the `placement` property. \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper. \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces. \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2. \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries. \n * We can say it has \"escaped the boundaries\" — or just \"escaped\". \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n"],"names":["functionToCheck","getType","toString","call","element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","indexOf","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","window","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","Object","keys","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","key","variation","split","commonOffsetParent","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","Array","prototype","find","arr","findIndex","cur","match","obj","modifiersToRun","ends","modifiers","slice","forEach","warn","fn","enabled","isFunction","data","reference","state","isDestroyed","getReferenceOffsets","options","positionFixed","computeAutoPlacement","flip","originalPlacement","getPopperOffsets","position","runModifiers","isCreated","onUpdate","onCreate","some","name","prefixes","upperProp","charAt","toUpperCase","i","prefix","toCheck","style","isModifierEnabled","removeAttribute","willChange","getSupportedPropertyName","disableEventListeners","removeOnDestroy","removeChild","defaultView","isBody","target","addEventListener","passive","push","updateBound","scrollElement","scrollParents","eventsEnabled","setupEventListeners","scheduleUpdate","removeEventListener","removeEventListeners","n","isNaN","isFinite","unit","isNumeric","value","attributes","setAttribute","requesting","isRequired","requested","counter","index","validPlacements","concat","reverse","str","size","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","mergeWithPrevious","op","reduce","toValue","index2","basePlacement","parseOffset","min","floor","max","isBrowser","longerTimeoutBrowsers","timeoutDuration","navigator","userAgent","supportsMicroTasks","Promise","called","resolve","then","scheduled","cache","version","hasOwnProperty","appVersion","all","placements","BEHAVIORS","Popper","requestAnimationFrame","update","debounce","bind","Defaults","jquery","modifierOptions","onLoad","enableEventListeners","destroy","Utils","global","PopperUtils","shiftvariation","isVertical","shiftOffsets","instance","priority","check","escapeWithReference","opSide","isModifierRequired","arrowElement","querySelector","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","arrow","round","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","clockwise","COUNTERCLOCKWISE","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","subtractLength","bound","hide","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrowStyles"],"mappings":"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"}
\ No newline at end of file
diff --git a/XPST/Web.config b/XPST/Web.config
index 1b0a0b0..fdc5685 100644
--- a/XPST/Web.config
+++ b/XPST/Web.config
@@ -39,7 +39,14 @@
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100" />
-->
-
+
+
+
+
+
+
+
+
@@ -145,6 +152,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/XPST/WebMasterPages/Bootstrap.Master b/XPST/WebMasterPages/Bootstrap.Master
index ac2f457..482022e 100644
--- a/XPST/WebMasterPages/Bootstrap.Master
+++ b/XPST/WebMasterPages/Bootstrap.Master
@@ -1,20 +1,76 @@
-<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Bootstrap.master.cs" Inherits="XPS.WebMasterPages.Bootstrap" %>
+<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Bootstrap.master.cs" Inherits="WebMasterPages.Bootstrap" %>
+
+<%@ Register Src="~/WebUserControls/mod_footer.ascx" TagPrefix="uc1" TagName="mod_footer" %>
+<%@ Register Src="~/WebUserControls/mod_menuTopCompact.ascx" TagPrefix="uc1" TagName="mod_menuTopCompact" %>
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+ XPST: <%: SteamWare.devicesAuthProxy.getPage(Request.Url) %>
+
+
+ <%--<%: Scripts.Render("~/bundles/modernizr") %>--%>
+ <%: Scripts.Render("~/bundles/jquery") %>
+ <%: Scripts.Render("~/bundles/jqueryui") %>
+ <%--<%: Scripts.Render("~/bundles/BrowserWindowSize") %>--%>
+
+
+ <%-- --%>
+
+
-