{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/webpacker/packs/models/page.js","webpack:///./app/webpacker/packs/helpers/arrays.js","webpack:///./node_modules/tippy.js/dist/tippy.js","webpack:///./node_modules/sortablejs/Sortable.js","webpack:///./app/webpacker/packs/sitewide/activateChosen.js","webpack:///./app/webpacker/packs/sitewide/activateFroala.js","webpack:///./app/webpacker/packs/sitewide/activatePopper.js","webpack:///./app/webpacker/packs/sitewide/activateQuizSessionTimer.js","webpack:///./app/webpacker/packs/sitewide/activateSelectBoxIt.js","webpack:///./app/webpacker/packs/sitewide/activateSortable.js","webpack:///./app/webpacker/packs/sitewide/activateTippable.js","webpack:///./app/webpacker/packs/pageSpecific/initDashboard.js","webpack:///./app/webpacker/packs/pageSpecific/initHomepage.js","webpack:///./app/webpacker/packs/pageSpecific/initQuizSession.js","webpack:///./app/webpacker/packs/pageSpecific/initSchoolSelection.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js","webpack:///./app/webpacker/packs/application.js","webpack:///(webpack)/buildin/module.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","page","Page","_classCallCheck","document","querySelector","getAttribute","compare","array","otherArray","length","factory","_typeof","iterator","constructor","Browser","window","SUPPORTED","SUPPORTS_TOUCH","touch","dynamicInputDetection","iOS","test","navigator","userAgent","MSStream","Store","Selectors","Defaults","html","position","animation","animateFill","arrow","arrowSize","delay","trigger","duration","interactive","interactiveBorder","theme","size","distance","offset","hideOnClick","multiple","followCursor","inertia","flipDuration","sticky","stickyDuration","appendTo","body","zIndex","touchHold","performance","dynamicTitle","popperOptions","DefaultsKeys","keys","hideAllPoppers","exclude","forEach","refData","popper","tippyInstance","_refData$settings","settings","contains","isHideOnClick","indexOf","isNotCurrentRef","hide","matches","Element","e","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","this","ownerDocument","querySelectorAll","item","matches$1","closest","element","parentSelector","selector","el","parentElement","find","arr","checkFn","Array","filter","init","done","touchHandler","classList","add","addEventListener","mousemoveHandler","time","now","removeEventListener","remove","event","target","ref","_ref","_ref$settings","activeElement","blur","maxTouchPoints","msMaxTouchPoints","defer","fn","requestAnimationFrame","setTimeout","prefix","prefixes","upperProp","charAt","toUpperCase","slice","_prefix","prefixedProp","style","removeTitle","title","setAttribute","removeAttribute","modifyClassList","els","callback","getInnerElements","tooltip","circle","content","applyTransitionDuration","_duration","Math","round","isVisible","visibility","noop","isObjectLiteral","input","toString","getCorePlacement","placement","replace","followCursorHandler","_this","data","halfPopperWidth","offsetWidth","halfPopperHeight","offsetHeight","pageWidth","documentElement","pageX","pageY","x","y","onTransitionEnd","transitionendFired","listeners","action","listenerCallback","clearTimeout","_transitionendTimeout","isBrowser","longerTimeoutBrowsers","timeoutDuration","debounce","Promise","called","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getOffsetParent","offsetParent","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","upperSide","arguments","undefined","scrollingElement","getBordersSize","styles","axis","sideA","sideB","parseFloat","isIE10","isIE10$1","appVersion","getSize","computedStyle","max","getWindowSizes","height","width","createClass","defineProperties","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","obj","_extends","assign","source","getClientRect","offsets","right","left","bottom","top","getBoundingClientRect","rect","scrollTop","scrollLeft","err","result","sizes","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","children","parent","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","isFixed","getBoundaries","reference","padding","boundariesElement","boundaries","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","_getWindowSizes","computeAutoPlacement","refRect","rects","sortedAreas","map","area","sort","a","b","filteredAreas","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","getOuterSizes","marginBottom","marginRight","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find$1","check","runModifiers","modifiers","ends","prop","findIndex","cur","match","findIndex$1","console","warn","enabled","update","isDestroyed","instance","arrowStyles","attributes","flipped","options","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","toCheck","destroy","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","scrollParents","isBody","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","isNumeric","isNaN","isFinite","setStyles","unit","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","index","concat","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","shift","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","preventOverflow","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","_data$offsets$arrow","arrowElement","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","willChange","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Defaults$1","Popper","TypeError","classCallCheck","jquery","getOffsetDistanceInPx","Utils","global","PopperUtils","createClass$1","_extends$1","mountPopper","_data$settings","appendChild","popperInstance","config","MutationObserver","observer","observe","childList","subtree","characterData","_mutationObservers","createPopperInstance","makeSticky","updatePosition","getEventListenerHandlers","showDelay","touchWait","hideDelay","clearTimeouts","_show","_delay","isArray","show","handleTrigger","mouseenterTouch","type","isClick","isNotPersistent","callbacks","wait","click","handleMouseleave","handleMousemove","triggerHide","closestTooltippedEl","isOverPopper","isOverEl","isClickTriggered","clientX","clientY","corePosition","borderWithDistance","exceeds","cursorIsOutsideInteractiveBorder","handleBlur","relatedTarget","idCounter","createTooltips","acc","id","evaluateSettings","instanceSettings","val","JSON","parse","getIndividualSettings","createElement","_arrow","templateId","innerHTML","getElementById","createPopperElement","handlers","handler","createTrigger","Tippy","classCallCheck$1","destroyed","shown","hidden","onShow","onShown","onHide","onHidden","store","NodeList","_","getArrayOfElements","apply","error","customDuration","_getInnerElements","refObj","opacity","triggerReflow","list","_onShownFired","focus","_this2","_getInnerElements2","_data$settings2","elementIsInViewport","_isLast","_this3","listener","disconnect","splice","_this4","storeLength","tippy$2","classNames","disableDynamicInputDetection","enableDynamicInputDetection","Error","dragEl","parentEl","ghostEl","cloneEl","rootEl","nextEl","lastDownEl","scrollEl","scrollParentEl","scrollCustomFn","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","activeGroup","putSortable","pointerElemChangedInterval","lastPointerElemX","lastPointerElemY","tapEvt","touchEvt","moved","lastTarget","lastDirection","lastMode","targetMoveDistance","ghostRelativeParent","realDragElRect","autoScrolls","scrolling","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","R_SPACE","expando","Date","getTime","win","parseInt","$","jQuery","Zepto","Polymer","captureMode","capture","IE11OrLess","Edge","FireFox","Safari","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","cssText","pointerEvents","_silent","_alignedSilent","abs","savedInputChecked","_detectDirection","elCSS","_css","elWidth","paddingLeft","paddingRight","borderRightWidth","child1","_getChild","child2","firstChildCSS","secondChildCSS","firstChildWidth","_getRect","secondChildWidth","display","flexDirection","gridTemplateColumns","touchingSideChild2","clear","_getParentAutoScrollElement","includeSelf","_getWindowScrollingElement","elem","gotSelf","scrollWidth","scrollHeight","elemCSS","_scrollBy","_autoScroll","_throttle","evt","isFallback","scroll","sens","scrollSensitivity","speed","scrollSpeed","winScroller","scrollThisInstance","_clearAutoScrolls","scrollFn","layersOut","currentParent","vx","vy","canScrollX","canScrollY","scrollPosX","scrollPosY","clearInterval","pid","setInterval","layer","Sortable","active","_emulateDragOver","_onTouchMove","scrollOffsetY","scrollOffsetX","bubbleScroll","autoScroll","_prepareGroup","toFn","pull","to","from","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","_checkAlignment","_computeIsAligned","_hideGhostForTarget","_unhideGhostForTarget","preventDefault","stopPropagation","stopImmediatePropagation","_throttleTimeout","nearestEmptyInsertDetectEvent","nearest","_lastChild","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_detectNearestEmptySortable","touches","_onDragOver","_extend","defaults","disabled","handle","draggable","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_on","_onTapStart","_closest","ctx","includeCTX","_matches","_getParentOrHost","_off","_toggleClass","className","currentStyle","_matrix","appliedTransforms","transform","DOMMatrix","WebKitCSSMatrix","CSSMatrix","_find","tagName","getElementsByTagName","_dispatchEvent","sortable","targetEl","toEl","fromEl","startIndex","startDraggableIndex","originalEvt","onName","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","clone","originalEvent","pullMode","lastPutMode","dispatchEvent","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","dragged","draggedRect","related","relatedRect","_disableDraggable","_unsilent","childNum","currentChild","last","lastElementChild","previousElementSibling","_getInsertDirection","_index","_generateId","src","href","sum","charCodeAt","substring","ms","args","dst","_clone","dom","cloneNode","_nextTick","_cancelNextTick","adjustForTransform","container","adjustForFixed","elRect","containerRect","matrix","scaleX","scaleY","_isScrolledPast","elSide","parentSide","_getRelativeScrollOffset","offsetLeft","offsetTop","elementFromPoint","targetS1Opp","targetS2Opp","mouseOnOppAxis","sortableMouseAligned","_getDirection","originalTarget","shadowRoot","path","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","_prepareDragStart","_handleAutoScroll","fallback","ogElemScroller","newElem","dragStartFn","nextSibling","_lastX","_lastY","transition","_disableDelayedDragEvents","_triggerDragStart","_onDrop","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","pointerType","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","_appendGhost","_nulling","forAutoScroll","relativeScrollOffset","dx","dy","translate3d","ghostRelativeParentRect","_hideClone","_cloneId","insertBefore","_loopId","effectAllowed","_dragStartId","revert","activeSortable","isOwner","canSort","animated","completed","elLastChild","mouseOnAxis","targetS2","spacer","_ghostIsLast","_showClone","changed","targetBeforeFirstSwap","aligned","differentLevel","side1","scrolledPastTop","scrollBefore","el1","el2","el1Rect","el2Rect","el1S1Opp","el1S2Opp","el1OppLength","el2S1Opp","el2S2Opp","el2OppLength","_isElInRowColumn","isLastTarget","targetLength","targetS1","invert","_getSwapDirection","nextElementSibling","after","moveVector","insertion","_animate","prevRect","currentRect","_repaint","_offMoveEvents","_offUpEvents","save","handleEvent","dropEffect","_globalDragOver","toArray","items","set","option","cloneHidden","utils","on","off","is","extend","throttle","toggleClass","nextTick","cancelNextTick","detectDirection","getChild","version","activateChosen","chosen","activateFroala","fontFamily","htmlAllowedAttrsSafe","htmlAllowedTagsSafe","each","safe","hasClass","froalaEditor","activatePopper","_step","_iterator","_createForOfIteratorHelper","popupSelector","popup","tippy","f","activateQuizSessionTimer","$quizSessionTimer","timeLeft","deadline","setSeconds","getSeconds","Number","countdown","strftime","$quizTaker","submit","activateSelectBoxIt","$el","first","selectBoxIt","autoWidth","downArrowIcon","dynamicPositioning","selectBoxTextID","togglePlaceholder","activateSortable","_loop","url","startingIDs","endingIDs","ajax","method","dataType","ids","stringify","activateTippable","initDashboard","controller","$remaining","$submitButton","contentLength","text","attr","animate","initHomepage","isLoggedIn","$school","$signupForm","typeahead","local","parsley","addAsyncValidator","xhr","responseJSON","valid","isValid","initQuizSession","topics","initOrUpdateChosen","$topic","$subject","log","session","question","answer","initSchoolSelection","g","Function","Rails","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","cspNonce","oMatchesSelector","getData","csrfParam","csrfToken","meta","CSRFProtection","token","setRequestHeader","refreshCSRFTokens","param","fire","params","initCustomEvent","detail","Event","defaultPrevented","stopEverything","delegate","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","xml","json","script","response","responseText","getResponseHeader","status","success","statusText","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","location","accept","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","head","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","serializeElement","additionalParam","elements","selected","encodeURIComponent","formElements","form","allowAction","handleConfirm","message","confirm","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","link","isRemote","handleRemote","enctype","FormData","append","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","rails","ajaxPrefilter","originalOptions","_rails_loaded","ready","webpackPolyfill","deprecate","paths"],"mappings":"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","file":"js/application-06292e2c234696eeca19.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n","class Page {\n get controller() {\n return document.querySelector('meta[name=psj]').getAttribute('controller');\n }\n\n get action() {\n return document.querySelector('meta[name=psj]').getAttribute('action');\n }\n\n get isLoggedIn() {\n return document.querySelector('meta[name=psj]').getAttribute('signed_in') === 'true';\n }\n}\n\nconst page = new Page();\n\nexport default page;\n","export function compare(array, otherArray) {\n if (array.length !== otherArray.length) return false;\n\n for (var i = 0; i < otherArray.length; i++) {\n if (array[i].compare) {\n if (!array[i].compare(otherArray[i])) return false;\n } else if (array[i] !== otherArray[i]) {\n return false;\n }\n }\n return true;\n}\n","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.tippy = factory();\n})(this, function () {\n 'use strict';\n\n var Browser = {};\n if (typeof window !== 'undefined') {\n Browser.SUPPORTED = 'requestAnimationFrame' in window;\n Browser.SUPPORTS_TOUCH = 'ontouchstart' in window;\n Browser.touch = false;\n Browser.dynamicInputDetection = true;\n // Chrome device/touch emulation can make this dynamic\n Browser.iOS = function () {\n return /iPhone|iPad|iPod/.test(navigator.userAgent) && !window.MSStream;\n };\n }\n\n /**\n * The global storage array which holds all data reference objects\n * from every instance\n * This allows us to hide tooltips from all instances, finding the ref when\n * clicking on the body, and for followCursor\n */\n var Store = [];\n\n /**\n * Selector constants used for grabbing elements\n */\n var Selectors = {\n POPPER: '.tippy-popper',\n TOOLTIP: '.tippy-tooltip',\n CONTENT: '.tippy-tooltip-content',\n CIRCLE: '[x-circle]',\n ARROW: '[x-arrow]',\n TOOLTIPPED_EL: '[data-tooltipped]',\n CONTROLLER: '[data-tippy-controller]'\n\n /**\n * The default settings applied to each instance\n */\n };\n var Defaults = {\n html: false,\n position: 'top',\n animation: 'shift',\n animateFill: true,\n arrow: false,\n arrowSize: 'regular',\n delay: 0,\n trigger: 'mouseenter focus',\n duration: 350,\n interactive: false,\n interactiveBorder: 2,\n theme: 'dark',\n size: 'regular',\n distance: 10,\n offset: 0,\n hideOnClick: true,\n multiple: false,\n followCursor: false,\n inertia: false,\n flipDuration: 350,\n sticky: false,\n stickyDuration: 200,\n appendTo: function appendTo() {\n return document.body;\n },\n zIndex: 9999,\n touchHold: false,\n performance: false,\n dynamicTitle: false,\n popperOptions: {}\n\n /**\n * The keys of the defaults object for reducing down into a new object\n * Used in `getIndividualSettings()`\n */\n };\n var DefaultsKeys = Browser.SUPPORTED && Object.keys(Defaults);\n\n /**\n * Hides all poppers\n * @param {Object} exclude - refData to exclude if needed\n */\n function hideAllPoppers(exclude) {\n Store.forEach(function (refData) {\n var popper = refData.popper,\n tippyInstance = refData.tippyInstance,\n _refData$settings = refData.settings,\n appendTo = _refData$settings.appendTo,\n hideOnClick = _refData$settings.hideOnClick,\n trigger = _refData$settings.trigger;\n\n // Don't hide already hidden ones\n\n if (!appendTo.contains(popper)) return;\n\n // hideOnClick can have the truthy value of 'persistent', so strict check is needed\n var isHideOnClick = hideOnClick === true || trigger.indexOf('focus') !== -1;\n var isNotCurrentRef = !exclude || popper !== exclude.popper;\n if (isHideOnClick && isNotCurrentRef) {\n tippyInstance.hide(popper);\n }\n });\n }\n var matches = {};\n if (typeof Element !== 'undefined') {\n var e = Element.prototype;\n matches = e.matches || e.matchesSelector || e.webkitMatchesSelector || e.mozMatchesSelector || e.msMatchesSelector || function (s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n var matches$1 = matches;\n\n /**\n * Ponyfill to get the closest parent element\n * @param {Element} element - child of parent to be returned\n * @param {String} parentSelector - selector to match the parent if found\n * @return {Element}\n */\n function closest(element, parentSelector) {\n var _closest = Element.prototype.closest || function (selector) {\n var el = this;\n while (el) {\n if (matches$1.call(el, selector)) {\n return el;\n }\n el = el.parentElement;\n }\n };\n return _closest.call(element, parentSelector);\n }\n\n /**\n * Ponyfill for Array.prototype.find\n * @param {Array} arr\n * @param {Function} checkFn\n * @return item in the array\n */\n function find(arr, checkFn) {\n if (Array.prototype.find) {\n return arr.find(checkFn);\n }\n\n // use `filter` as fallback\n return arr.filter(checkFn)[0];\n }\n\n /**\n * Adds the needed event listeners\n */\n function bindEventListeners() {\n var touchHandler = function touchHandler() {\n Browser.touch = true;\n if (Browser.iOS()) {\n document.body.classList.add('tippy-touch');\n }\n if (Browser.dynamicInputDetection && window.performance) {\n document.addEventListener('mousemove', mousemoveHandler);\n }\n };\n var mousemoveHandler = function () {\n var time = void 0;\n return function () {\n var now = performance.now();\n\n // Chrome 60+ is 1 mousemove per rAF, use 20ms time difference\n if (now - time < 20) {\n Browser.touch = false;\n document.removeEventListener('mousemove', mousemoveHandler);\n if (!Browser.iOS()) {\n document.body.classList.remove('tippy-touch');\n }\n }\n time = now;\n };\n }();\n var clickHandler = function clickHandler(event) {\n // Simulated events dispatched on the document\n if (!(event.target instanceof Element)) {\n return hideAllPoppers();\n }\n var el = closest(event.target, Selectors.TOOLTIPPED_EL);\n var popper = closest(event.target, Selectors.POPPER);\n if (popper) {\n var ref = find(Store, function (ref) {\n return ref.popper === popper;\n });\n var interactive = ref.settings.interactive;\n if (interactive) return;\n }\n if (el) {\n var _ref = find(Store, function (ref) {\n return ref.el === el;\n });\n var _ref$settings = _ref.settings,\n hideOnClick = _ref$settings.hideOnClick,\n multiple = _ref$settings.multiple,\n trigger = _ref$settings.trigger;\n\n // Hide all poppers except the one belonging to the element that was clicked IF\n // `multiple` is false AND they are a touch user, OR\n // `multiple` is false AND it's triggered by a click\n\n if (!multiple && Browser.touch || !multiple && trigger.indexOf('click') !== -1) {\n return hideAllPoppers(_ref);\n }\n\n // If hideOnClick is not strictly true or triggered by a click don't hide poppers\n if (hideOnClick !== true || trigger.indexOf('click') !== -1) return;\n }\n\n // Don't trigger a hide for tippy controllers, and don't needlessly run loop\n if (closest(event.target, Selectors.CONTROLLER) || !document.querySelector(Selectors.POPPER)) return;\n hideAllPoppers();\n };\n var blurHandler = function blurHandler(event) {\n var _document = document,\n el = _document.activeElement;\n if (el && el.blur && matches$1.call(el, Selectors.TOOLTIPPED_EL)) {\n el.blur();\n }\n };\n\n // Hook events\n document.addEventListener('click', clickHandler);\n document.addEventListener('touchstart', touchHandler);\n window.addEventListener('blur', blurHandler);\n if (!Browser.SUPPORTS_TOUCH && (navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0)) {\n document.addEventListener('pointerdown', touchHandler);\n }\n }\n\n /**\n * To run a single time, once DOM is presumed to be ready\n * @return {Boolean} whether the function has run or not\n */\n function init() {\n if (init.done) return false;\n init.done = true;\n bindEventListeners();\n return true;\n }\n\n /**\n * Waits until next repaint to execute a fn\n * @param {Function} fn\n */\n function defer(fn) {\n window.requestAnimationFrame(function () {\n setTimeout(fn, 0);\n });\n }\n\n /**\n * Returns the supported prefixed property - only `webkit` is needed, `moz`, `ms` and `o` are obsolete\n * @param {String} property\n * @return {String} - browser supported prefixed property\n */\n function prefix(property) {\n var prefixes = [false, 'webkit'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n for (var i = 0; i < prefixes.length; i++) {\n var _prefix = prefixes[i];\n var prefixedProp = _prefix ? '' + _prefix + upperProp : property;\n if (typeof window.document.body.style[prefixedProp] !== 'undefined') {\n return prefixedProp;\n }\n }\n return null;\n }\n\n /**\n * Ponyfill for Array.prototype.findIndex\n * @param {Array} arr\n * @param {Function} checkFn\n * @return index of the item in the array\n */\n function findIndex(arr, checkFn) {\n if (Array.prototype.findIndex) {\n return arr.findIndex(checkFn);\n }\n\n // fallback\n return arr.indexOf(find(arr, checkFn));\n }\n\n /**\n * Removes the title from the tooltipped element, setting `data-original-title`\n * appropriately\n * @param {Element} el\n */\n function removeTitle(el) {\n var title = el.getAttribute('title');\n\n // Only set `data-original-title` attr if there is a title\n if (title) {\n el.setAttribute('data-original-title', title);\n }\n el.removeAttribute('title');\n }\n\n /**\n * Determines if an element is visible in the viewport\n * @param {Element} el\n * @return {Boolean}\n */\n function elementIsInViewport(el) {\n var rect = el.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n }\n\n /**\n * Triggers a document repaint or reflow for CSS transition\n * @param {Element} tooltip\n * @param {Element} circle\n */\n function triggerReflow(tooltip, circle) {\n // Safari needs the specific 'transform' property to be accessed\n circle ? window.getComputedStyle(circle)[prefix('transform')] : window.getComputedStyle(tooltip).opacity;\n }\n\n /**\n * Modifies elements' class lists\n * @param {Element[]} els - Array of elements\n * @param {Function} callback\n */\n function modifyClassList(els, callback) {\n els.forEach(function (el) {\n if (!el) return;\n callback(el.classList);\n });\n }\n\n /**\n * Returns inner elements of the popper element\n * @param {Element} popper\n * @return {Object}\n */\n function getInnerElements(popper) {\n return {\n tooltip: popper.querySelector(Selectors.TOOLTIP),\n circle: popper.querySelector(Selectors.CIRCLE),\n content: popper.querySelector(Selectors.CONTENT)\n };\n }\n\n /**\n * Applies the transition duration to each element\n * @param {Element[]} els - Array of elements\n * @param {Number} duration\n */\n function applyTransitionDuration(els, duration) {\n els.forEach(function (el) {\n if (!el) return;\n var isContent = matches$1.call(el, Selectors.CONTENT);\n var _duration = isContent ? Math.round(duration / 1.3) : duration;\n el.style[prefix('transitionDuration')] = _duration + 'ms';\n });\n }\n\n /**\n * Determines if a popper is currently visible\n * @param {Element} popper\n * @return {Boolean}\n */\n function isVisible(popper) {\n return popper.style.visibility === 'visible';\n }\n function noop() {}\n function isObjectLiteral(input) {\n return !!input && input.toString() === '[object Object]';\n }\n\n /**\n * Returns the non-shifted placement (e.g., 'bottom-start' => 'bottom')\n * @param {String} placement\n * @return {String}\n */\n function getCorePlacement(placement) {\n return placement.replace(/-.+/, '');\n }\n\n /**\n * Mousemove event listener callback method for follow cursor setting\n * @param {MouseEvent} e\n */\n function followCursorHandler(e) {\n var _this = this;\n var data = find(Store, function (data) {\n return data.el === _this;\n });\n var popper = data.popper,\n offset = data.settings.offset;\n var position = getCorePlacement(popper.getAttribute('x-placement'));\n var halfPopperWidth = Math.round(popper.offsetWidth / 2);\n var halfPopperHeight = Math.round(popper.offsetHeight / 2);\n var viewportPadding = 5;\n var pageWidth = document.documentElement.offsetWidth || document.body.offsetWidth;\n var pageX = e.pageX,\n pageY = e.pageY;\n var x = void 0,\n y = void 0;\n switch (position) {\n case 'top':\n x = pageX - halfPopperWidth + offset;\n y = pageY - 2 * halfPopperHeight;\n break;\n case 'bottom':\n x = pageX - halfPopperWidth + offset;\n y = pageY + 10;\n break;\n case 'left':\n x = pageX - 2 * halfPopperWidth;\n y = pageY - halfPopperHeight + offset;\n break;\n case 'right':\n x = pageX + 5;\n y = pageY - halfPopperHeight + offset;\n break;\n }\n var isRightOverflowing = pageX + viewportPadding + halfPopperWidth + offset > pageWidth;\n var isLeftOverflowing = pageX - viewportPadding - halfPopperWidth + offset < 0;\n\n // Prevent left/right overflow\n if (position === 'top' || position === 'bottom') {\n if (isRightOverflowing) {\n x = pageWidth - viewportPadding - 2 * halfPopperWidth;\n }\n if (isLeftOverflowing) {\n x = viewportPadding;\n }\n }\n popper.style[prefix('transform')] = 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n }\n\n /**\n * Returns an array of elements based on the selector input\n * @param {String|Element|Element[]} selector\n * @return {Element[]}\n */\n function getArrayOfElements(selector) {\n if (selector instanceof Element || isObjectLiteral(selector)) {\n return [selector];\n }\n if (selector instanceof NodeList) {\n return [].slice.call(selector);\n }\n if (Array.isArray(selector)) {\n return selector;\n }\n try {\n return [].slice.call(document.querySelectorAll(selector));\n } catch (_) {\n return [];\n }\n }\n\n /**\n * Prepares the callback functions for `show` and `hide` methods\n * @param {Object} data\n * @param {Number} duration\n * @param {Function} callback - callback function to fire once transitions complete\n */\n function onTransitionEnd(data, duration, callback) {\n // Make callback synchronous if duration is 0\n if (!duration) {\n return callback();\n }\n var _getInnerElements = getInnerElements(data.popper),\n tooltip = _getInnerElements.tooltip;\n var transitionendFired = false;\n var listeners = function listeners(action) {\n tooltip[action + 'EventListener']('webkitTransitionEnd', listenerCallback);\n tooltip[action + 'EventListener']('transitionend', listenerCallback);\n };\n var listenerCallback = function listenerCallback(e) {\n if (e.target === tooltip && !transitionendFired) {\n transitionendFired = true;\n listeners('remove');\n callback();\n }\n };\n\n // Fire callback upon transition completion\n listeners('add');\n\n // Fallback: transitionend listener sometimes may not fire\n clearTimeout(data._transitionendTimeout);\n data._transitionendTimeout = setTimeout(function () {\n if (!transitionendFired) {\n listeners('remove');\n callback();\n }\n }, duration);\n }\n\n /**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.12.9\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n var timeoutDuration = 0;\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n }\n function microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n }\n function taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n }\n var supportsMicroTasks = isBrowser && window.Promise;\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 */\n var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\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 */\n function isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && 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 */\n function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n }\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 */\n function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n }\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 */\n 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 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\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n return getScrollParent(getParentNode(element));\n }\n\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 */\n function getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element && element.offsetParent;\n var nodeName = offsetParent && offsetParent.nodeName;\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n if (element) {\n return element.ownerDocument.documentElement;\n }\n return 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 (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n return offsetParent;\n }\n function isOffsetContainer(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY') {\n return false;\n }\n return 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 */\n function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n return node;\n }\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 */\n 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 var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var 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 /**\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 */\n function getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n return element[upperSide];\n }\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 */\n function includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var 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 /*\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\n function getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n }\n\n /**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\n var isIE10 = undefined;\n var isIE10$1 = function isIE10$1() {\n if (isIE10 === undefined) {\n isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n }\n return isIE10;\n };\n function getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n }\n function getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE10$1() && getComputedStyle(html);\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n }\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n };\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\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 */\n function getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n }\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 */\n function getBoundingClientRect(element) {\n var 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 if (isIE10$1()) {\n try {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } catch (err) {}\n } else {\n rect = element.getBoundingClientRect();\n }\n var 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 var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n var horizScrollbar = element.offsetWidth - width;\n var 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 var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n return getClientRect(result);\n }\n function getOffsetRectRelativeToArbitraryNode(children, parent) {\n var isIE10 = isIE10$1();\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n var 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 var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\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 if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n return offsets;\n }\n function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n var scrollTop = getScroll(html);\n var scrollLeft = getScroll(html, 'left');\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n return getClientRect(offset);\n }\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 */\n function isFixed(element) {\n var 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\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 * @returns {Object} Coordinates of the boundaries\n */\n function getBoundaries(popper, reference, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = {\n top: 0,\n left: 0\n };\n var offsetParent = findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\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 var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\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 return boundaries;\n }\n function getArea(_ref) {\n var width = _ref.width,\n height = _ref.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 */\n function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n var 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 var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n var variation = placement.split('-')[1];\n return computedPlacement + (variation ? '-' + variation : '');\n }\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 * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n function getReferenceOffsets(state, popper, reference) {\n var commonOffsetParent = findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);\n }\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 */\n function getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n }\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 */\n function getOppositePlacement(placement) {\n var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n }\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 */\n function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var 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 var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n return popperOffsets;\n }\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 */\n function find$1(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\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 */\n function findIndex$1(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find$1(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n }\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 */\n function runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex$1(modifiers, 'name', ends));\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var 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 data = fn(data, modifier);\n }\n });\n return data;\n }\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 */\n function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n var 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(this.state, this.popper, this.reference);\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(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = '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 /**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\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 */\n function getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n for (var i = 0; i < prefixes.length - 1; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n }\n\n /**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\n 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.left = '';\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\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 /**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n function getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, {\n passive: true\n });\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\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 */\n function setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, {\n passive: true\n });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n return state;\n }\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 */\n function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n }\n\n /**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n 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(function (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\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 */\n function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\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 */\n function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n }\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 */\n function setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\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 */\n function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n }\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 */\n 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 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 */\n function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference);\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 var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\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, {\n position: 'absolute'\n });\n return options;\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 */\n function computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find$1(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // floor sides to avoid blurry text\n var 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 var sideA = x === 'bottom' ? 'top' : 'bottom';\n var 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 var 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 var left = void 0,\n top = void 0;\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 var invertTop = sideA === 'bottom' ? -1 : 1;\n var 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 var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n return data;\n }\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 */\n function isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find$1(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\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 */\n function arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n var 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('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var 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] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var 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 var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = 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 data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n return data;\n }\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 */\n 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 /**\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 */\n 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'];\n\n // Get rid of `auto` `auto-start` and `auto-end`\n var 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 */\n function clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n }\n var 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 */\n 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 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 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n var flipOrder = [];\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 flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n 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);\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\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 = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\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 */\n function keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n return data;\n }\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 */\n function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var 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 if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n var 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 var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\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 */\n function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var 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 var 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 var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\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 var divider = fragments.indexOf(find$1(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\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 var splitRegex = /\\s*,\\s*|\\s+/;\n 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];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (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(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (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 */\n function offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var basePlacement = placement.split('-')[0];\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\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 data.popper = popper;\n return data;\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 */\n function preventOverflow(data, options) {\n var boundariesElement = 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 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n options.boundaries = boundaries;\n var order = options.priority;\n var popper = data.offsets.popper;\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n data.offsets.popper = popper;\n return data;\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 */\n function shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n return data;\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 */\n function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n var refRect = data.offsets.reference;\n var bound = find$1(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\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 data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n return data;\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 */\n function inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n return data;\n }\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 */\n var modifiers = {\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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 /**\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 */\n var Defaults$1 = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\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 * 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: function onCreate() {},\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: function onUpdate() {},\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: modifiers\n };\n\n /**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n /**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n // Utils\n // Methods\n var Popper = function () {\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 function Popper(reference, popper) {\n var _this = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\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 = _extends({}, 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(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\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(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n var 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 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\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\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\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 }]);\n return Popper;\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\n Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n Popper.placements = placements;\n Popper.Defaults = Defaults$1;\n\n /**\n * Returns the distance taking into account the default distance due to\n * the transform: translate setting in CSS\n * @param {Number} distance\n * @return {String}\n */\n function getOffsetDistanceInPx(distance) {\n return -(distance - Defaults.distance) + 'px';\n }\n var classCallCheck$1 = function classCallCheck$1(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass$1 = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var _extends$1 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n\n /**\n * Creates a new popper instance\n * @param {Object} data\n * @return {Object} - the popper instance\n */\n function createPopperInstance(data) {\n var el = data.el,\n popper = data.popper,\n _data$settings = data.settings,\n position = _data$settings.position,\n popperOptions = _data$settings.popperOptions,\n offset = _data$settings.offset,\n distance = _data$settings.distance,\n flipDuration = _data$settings.flipDuration;\n var _getInnerElements = getInnerElements(popper),\n tooltip = _getInnerElements.tooltip;\n var config = _extends$1({\n placement: position\n }, popperOptions || {}, {\n modifiers: _extends$1({}, popperOptions ? popperOptions.modifiers : {}, {\n flip: _extends$1({\n padding: distance + 5 /* 5px from viewport boundary */\n }, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.flip : {}),\n offset: _extends$1({\n offset: offset\n }, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.offset : {})\n }),\n onUpdate: function onUpdate() {\n var styles = tooltip.style;\n styles.top = '';\n styles.bottom = '';\n styles.left = '';\n styles.right = '';\n styles[getCorePlacement(popper.getAttribute('x-placement'))] = getOffsetDistanceInPx(distance);\n }\n });\n\n // Update the popper's position whenever its content changes\n // Not supported in IE10 unless polyfilled\n if (window.MutationObserver) {\n var styles = popper.style;\n var observer = new MutationObserver(function () {\n styles[prefix('transitionDuration')] = '0ms';\n data.popperInstance.update();\n defer(function () {\n styles[prefix('transitionDuration')] = flipDuration + 'ms';\n });\n });\n observer.observe(popper, {\n childList: true,\n subtree: true,\n characterData: true\n });\n data._mutationObservers.push(observer);\n }\n return new Popper(el, popper, config);\n }\n\n /**\n * Appends the popper and creates a popper instance if one does not exist\n * Also updates its position if need be and enables event listeners\n * @param {Object} data - the element/popper reference data\n */\n function mountPopper(data) {\n var el = data.el,\n popper = data.popper,\n _data$settings = data.settings,\n appendTo = _data$settings.appendTo,\n followCursor = _data$settings.followCursor;\n\n // Already on the DOM\n\n if (appendTo.contains(popper)) return;\n appendTo.appendChild(popper);\n if (!data.popperInstance) {\n data.popperInstance = createPopperInstance(data);\n } else {\n data.popperInstance.update();\n if (!followCursor || Browser.touch) {\n data.popperInstance.enableEventListeners();\n }\n }\n\n // Since touch is determined dynamically, followCursor is set on mount\n if (followCursor && !Browser.touch) {\n el.addEventListener('mousemove', followCursorHandler);\n data.popperInstance.disableEventListeners();\n }\n }\n\n /**\n * Updates a popper's position on each animation frame to make it stick to a moving element\n * @param {Object} refData\n */\n function makeSticky(refData) {\n var popper = refData.popper,\n popperInstance = refData.popperInstance,\n stickyDuration = refData.settings.stickyDuration;\n var applyTransitionDuration = function applyTransitionDuration() {\n return popper.style[prefix('transitionDuration')] = stickyDuration + 'ms';\n };\n var removeTransitionDuration = function removeTransitionDuration() {\n return popper.style[prefix('transitionDuration')] = '';\n };\n var updatePosition = function updatePosition() {\n popperInstance && popperInstance.scheduleUpdate();\n applyTransitionDuration();\n isVisible(popper) ? window.requestAnimationFrame(updatePosition) : removeTransitionDuration();\n };\n\n // Wait until Popper's position has been updated initially\n defer(updatePosition);\n }\n\n /**\n * Returns an object of settings to override global settings\n * @param {Element} el - the tooltipped element\n * @param {Object} instanceSettings\n * @return {Object} - individual settings\n */\n function getIndividualSettings(el, instanceSettings) {\n var settings = DefaultsKeys.reduce(function (acc, key) {\n var val = el.getAttribute('data-' + key.toLowerCase()) || instanceSettings[key];\n\n // Convert strings to booleans\n if (val === 'false') val = false;\n if (val === 'true') val = true;\n\n // Convert number strings to true numbers\n if (isFinite(val) && !isNaN(parseFloat(val))) {\n val = parseFloat(val);\n }\n\n // Convert array strings to actual arrays\n if (typeof val === 'string' && val.trim().charAt(0) === '[') {\n val = JSON.parse(val);\n }\n acc[key] = val;\n return acc;\n }, {});\n return _extends$1({}, instanceSettings, settings);\n }\n\n /**\n * Creates a popper element then returns it\n * @param {Number} id - the popper id\n * @param {String} title - the tooltip's `title` attribute\n * @param {Object} settings - individual settings\n * @return {Element} - the popper element\n */\n function createPopperElement(id, title, settings) {\n var position = settings.position,\n distance = settings.distance,\n arrow = settings.arrow,\n animateFill = settings.animateFill,\n inertia = settings.inertia,\n animation = settings.animation,\n arrowSize = settings.arrowSize,\n size = settings.size,\n theme = settings.theme,\n html = settings.html,\n zIndex = settings.zIndex,\n interactive = settings.interactive;\n var popper = document.createElement('div');\n popper.setAttribute('class', 'tippy-popper');\n popper.setAttribute('role', 'tooltip');\n popper.setAttribute('aria-hidden', 'true');\n popper.setAttribute('id', 'tippy-tooltip-' + id);\n popper.style.zIndex = zIndex;\n var tooltip = document.createElement('div');\n tooltip.setAttribute('class', 'tippy-tooltip tippy-tooltip--' + size + ' leave');\n tooltip.setAttribute('data-animation', animation);\n theme.split(' ').forEach(function (t) {\n tooltip.classList.add(t + '-theme');\n });\n if (arrow) {\n // Add an arrow\n var _arrow = document.createElement('div');\n _arrow.setAttribute('class', 'arrow-' + arrowSize);\n _arrow.setAttribute('x-arrow', '');\n tooltip.appendChild(_arrow);\n }\n if (animateFill) {\n // Create animateFill circle element for animation\n tooltip.setAttribute('data-animatefill', '');\n var circle = document.createElement('div');\n circle.setAttribute('class', 'leave');\n circle.setAttribute('x-circle', '');\n tooltip.appendChild(circle);\n }\n if (inertia) {\n // Change transition timing function cubic bezier\n tooltip.setAttribute('data-inertia', '');\n }\n if (interactive) {\n tooltip.setAttribute('data-interactive', '');\n }\n\n // Tooltip content (text or HTML)\n var content = document.createElement('div');\n content.setAttribute('class', 'tippy-tooltip-content');\n if (html) {\n var templateId = void 0;\n if (html instanceof Element) {\n content.appendChild(html);\n templateId = '#' + html.id || 'tippy-html-template';\n } else {\n content.innerHTML = document.getElementById(html.replace('#', '')).innerHTML;\n templateId = html;\n }\n popper.classList.add('html-template');\n interactive && popper.setAttribute('tabindex', '-1');\n tooltip.setAttribute('data-template-id', templateId);\n } else {\n content.innerHTML = title;\n }\n\n // Init distance. Further updates are made in the popper instance's `onUpdate()` method\n tooltip.style[getCorePlacement(position)] = getOffsetDistanceInPx(distance);\n tooltip.appendChild(content);\n popper.appendChild(tooltip);\n return popper;\n }\n\n /**\n * Creates a trigger\n * @param {Object} event - the custom event specified in the `trigger` setting\n * @param {Element} el - tooltipped element\n * @param {Object} handlers - the handlers for each listener\n * @param {Boolean} touchHold\n * @return {Array} - array of listener objects\n */\n function createTrigger(event, el, handlers, touchHold) {\n var listeners = [];\n if (event === 'manual') return listeners;\n\n // Enter\n el.addEventListener(event, handlers.handleTrigger);\n listeners.push({\n event: event,\n handler: handlers.handleTrigger\n });\n\n // Leave\n if (event === 'mouseenter') {\n if (Browser.SUPPORTS_TOUCH && touchHold) {\n el.addEventListener('touchstart', handlers.handleTrigger);\n listeners.push({\n event: 'touchstart',\n handler: handlers.handleTrigger\n });\n el.addEventListener('touchend', handlers.handleMouseleave);\n listeners.push({\n event: 'touchend',\n handler: handlers.handleMouseleave\n });\n }\n el.addEventListener('mouseleave', handlers.handleMouseleave);\n listeners.push({\n event: 'mouseleave',\n handler: handlers.handleMouseleave\n });\n }\n if (event === 'focus') {\n el.addEventListener('blur', handlers.handleBlur);\n listeners.push({\n event: 'blur',\n handler: handlers.handleBlur\n });\n }\n return listeners;\n }\n\n /**\n * Determines if the mouse's cursor is outside the interactive border\n * @param {MouseEvent} event\n * @param {Element} popper\n * @param {Object} settings\n * @return {Boolean}\n */\n function cursorIsOutsideInteractiveBorder(event, popper, settings) {\n if (!popper.getAttribute('x-placement')) return true;\n var x = event.clientX,\n y = event.clientY;\n var interactiveBorder = settings.interactiveBorder,\n distance = settings.distance;\n var rect = popper.getBoundingClientRect();\n var corePosition = getCorePlacement(popper.getAttribute('x-placement'));\n var borderWithDistance = interactiveBorder + distance;\n var exceeds = {\n top: rect.top - y > interactiveBorder,\n bottom: y - rect.bottom > interactiveBorder,\n left: rect.left - x > interactiveBorder,\n right: x - rect.right > interactiveBorder\n };\n switch (corePosition) {\n case 'top':\n exceeds.top = rect.top - y > borderWithDistance;\n break;\n case 'bottom':\n exceeds.bottom = y - rect.bottom > borderWithDistance;\n break;\n case 'left':\n exceeds.left = rect.left - x > borderWithDistance;\n break;\n case 'right':\n exceeds.right = x - rect.right > borderWithDistance;\n break;\n }\n return exceeds.top || exceeds.bottom || exceeds.left || exceeds.right;\n }\n\n /**\n * Returns relevant listener callbacks for each ref\n * @param {Element} el\n * @param {Element} popper\n * @param {Object} settings\n * @return {Object} - relevant listener handlers\n */\n function getEventListenerHandlers(el, popper, settings) {\n var _this = this;\n var position = settings.position,\n delay = settings.delay,\n duration = settings.duration,\n interactive = settings.interactive,\n interactiveBorder = settings.interactiveBorder,\n distance = settings.distance,\n hideOnClick = settings.hideOnClick,\n trigger = settings.trigger,\n touchHold = settings.touchHold,\n touchWait = settings.touchWait;\n var showDelay = void 0,\n hideDelay = void 0;\n var clearTimeouts = function clearTimeouts() {\n clearTimeout(showDelay);\n clearTimeout(hideDelay);\n };\n var _show = function _show() {\n clearTimeouts();\n\n // Not hidden. For clicking when it also has a `focus` event listener\n if (isVisible(popper)) return;\n var _delay = Array.isArray(delay) ? delay[0] : delay;\n if (delay) {\n showDelay = setTimeout(function () {\n return _this.show(popper);\n }, _delay);\n } else {\n _this.show(popper);\n }\n };\n var show = function show(event) {\n return _this.callbacks.wait ? _this.callbacks.wait.call(popper, _show, event) : _show();\n };\n var hide = function hide() {\n clearTimeouts();\n var _delay = Array.isArray(delay) ? delay[1] : delay;\n if (delay) {\n hideDelay = setTimeout(function () {\n return _this.hide(popper);\n }, _delay);\n } else {\n _this.hide(popper);\n }\n };\n var handleTrigger = function handleTrigger(event) {\n var mouseenterTouch = event.type === 'mouseenter' && Browser.SUPPORTS_TOUCH && Browser.touch;\n if (mouseenterTouch && touchHold) return;\n\n // Toggle show/hide when clicking click-triggered tooltips\n var isClick = event.type === 'click';\n var isNotPersistent = hideOnClick !== 'persistent';\n isClick && isVisible(popper) && isNotPersistent ? hide() : show(event);\n if (mouseenterTouch && Browser.iOS() && el.click) {\n el.click();\n }\n };\n var handleMouseleave = function handleMouseleave(event) {\n // Don't fire 'mouseleave', use the 'touchend'\n if (event.type === 'mouseleave' && Browser.SUPPORTS_TOUCH && Browser.touch && touchHold) {\n return;\n }\n if (interactive) {\n // Temporarily handle mousemove to check if the mouse left somewhere\n // other than its popper\n var handleMousemove = function handleMousemove(event) {\n var triggerHide = function triggerHide() {\n document.body.removeEventListener('mouseleave', hide);\n document.removeEventListener('mousemove', handleMousemove);\n hide();\n };\n var closestTooltippedEl = closest(event.target, Selectors.TOOLTIPPED_EL);\n var isOverPopper = closest(event.target, Selectors.POPPER) === popper;\n var isOverEl = closestTooltippedEl === el;\n var isClickTriggered = trigger.indexOf('click') !== -1;\n var isOverOtherTooltippedEl = closestTooltippedEl && closestTooltippedEl !== el;\n if (isOverOtherTooltippedEl) {\n return triggerHide();\n }\n if (isOverPopper || isOverEl || isClickTriggered) return;\n if (cursorIsOutsideInteractiveBorder(event, popper, settings)) {\n triggerHide();\n }\n };\n document.body.addEventListener('mouseleave', hide);\n document.addEventListener('mousemove', handleMousemove);\n return;\n }\n\n // If it's not interactive, just hide it\n hide();\n };\n var handleBlur = function handleBlur(event) {\n // Ignore blur on touch devices, if there is no `relatedTarget`, hide\n // If the related target is a popper, ignore\n if (!event.relatedTarget || Browser.touch) return;\n if (closest(event.relatedTarget, Selectors.POPPER)) return;\n hide();\n };\n return {\n handleTrigger: handleTrigger,\n handleMouseleave: handleMouseleave,\n handleBlur: handleBlur\n };\n }\n\n /**\n * Evaluates/modifies the settings object for appropriate behavior\n * @param {Object} settings\n * @return {Object} modified/evaluated settings\n */\n function evaluateSettings(settings) {\n // animateFill is disabled if an arrow is true\n if (settings.arrow) {\n settings.animateFill = false;\n }\n\n // reassign appendTo into the result of evaluating appendTo\n // if it's set as a function instead of Element\n if (settings.appendTo && typeof settings.appendTo === 'function') {\n settings.appendTo = settings.appendTo();\n }\n return settings;\n }\n var idCounter = 1;\n\n /**\n * Creates tooltips for all el elements that match the instance's selector\n * @param {Element[]} els\n * @return {Object[]} Array of ref data objects\n */\n function createTooltips(els) {\n var _this = this;\n return els.reduce(function (acc, el) {\n var id = idCounter;\n var settings = _extends$1({}, evaluateSettings(_this.settings.performance ? _this.settings : getIndividualSettings(el, _this.settings)));\n if (typeof settings.html === 'function') settings.html = settings.html(el);\n var html = settings.html,\n trigger = settings.trigger,\n touchHold = settings.touchHold,\n dynamicTitle = settings.dynamicTitle;\n var title = el.getAttribute('title');\n if (!title && !html) return acc;\n el.setAttribute('data-tooltipped', '');\n el.setAttribute('aria-describedby', 'tippy-tooltip-' + id);\n removeTitle(el);\n var popper = createPopperElement(id, title, settings);\n var handlers = getEventListenerHandlers.call(_this, el, popper, settings);\n var listeners = [];\n trigger.trim().split(' ').forEach(function (event) {\n return listeners = listeners.concat(createTrigger(event, el, handlers, touchHold));\n });\n\n // Add a mutation observer to observe the reference element for `title`\n // attribute changes, then automatically update tooltip content\n var observer = void 0;\n if (dynamicTitle && window.MutationObserver) {\n var _getInnerElements = getInnerElements(popper),\n content = _getInnerElements.content;\n observer = new MutationObserver(function () {\n var title = el.getAttribute('title');\n if (title) {\n content.innerHTML = title;\n removeTitle(el);\n }\n });\n observer.observe(el, {\n attributes: true\n });\n }\n acc.push({\n id: id,\n el: el,\n popper: popper,\n settings: settings,\n listeners: listeners,\n tippyInstance: _this,\n _mutationObservers: [observer]\n });\n idCounter++;\n return acc;\n }, []);\n }\n\n /* Utility functions */\n /* Core library functions */\n /**\n * @param {String|Element|Element[]} selector\n * @param {Object} settings (optional) - the object of settings to be applied to the instance\n */\n\n var Tippy = function () {\n function Tippy(selector) {\n var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck$1(this, Tippy);\n\n // Use default browser tooltip on unsupported browsers\n if (!Browser.SUPPORTED) return;\n init();\n this.state = {\n destroyed: false\n };\n this.selector = selector;\n this.settings = _extends$1({}, Defaults, settings);\n if (settings.show || settings.shown || settings.hide || settings.hidden) {\n console.warn('Callbacks without the `on` prefix are deprecated (with the exception of `wait`).' + ' Use onShow, onShown, onHide, and onHidden instead.');\n }\n this.callbacks = {\n wait: settings.wait,\n show: settings.onShow || settings.show || noop,\n shown: settings.onShown || settings.shown || noop,\n hide: settings.onHide || settings.hide || noop,\n hidden: settings.onHidden || settings.hidden || noop\n };\n this.store = createTooltips.call(this, getArrayOfElements(selector));\n Store.push.apply(Store, this.store);\n }\n\n /**\n * Returns the reference element's popper element\n * @param {Element} el\n * @return {Element}\n */\n\n createClass$1(Tippy, [{\n key: 'getPopperElement',\n value: function getPopperElement(el) {\n try {\n return find(this.store, function (data) {\n return data.el === el;\n }).popper;\n } catch (e) {\n console.error('[getPopperElement]: Element passed as the argument does not exist in the instance');\n }\n }\n\n /**\n * Returns a popper's reference element\n * @param {Element} popper\n * @return {Element}\n */\n }, {\n key: 'getReferenceElement',\n value: function getReferenceElement(popper) {\n try {\n return find(this.store, function (data) {\n return data.popper === popper;\n }).el;\n } catch (e) {\n console.error('[getReferenceElement]: Popper passed as the argument does not exist in the instance');\n }\n }\n\n /**\n * Returns the reference data object from either the reference element or popper element\n * @param {Element} x (reference element or popper)\n * @return {Object}\n */\n }, {\n key: 'getReferenceData',\n value: function getReferenceData(x) {\n return find(this.store, function (data) {\n return data.el === x || data.popper === x;\n });\n }\n\n /**\n * Shows a popper\n * @param {Element} popper\n * @param {Number} customDuration (optional)\n */\n }, {\n key: 'show',\n value: function show(popper, customDuration) {\n var _this = this;\n if (this.state.destroyed) return;\n var data = find(this.store, function (data) {\n return data.popper === popper;\n });\n var _getInnerElements = getInnerElements(popper),\n tooltip = _getInnerElements.tooltip,\n circle = _getInnerElements.circle,\n content = _getInnerElements.content;\n\n // Destroy popper if its reference is no longer on the DOM (excluding refObjs)\n\n if (!this.selector.refObj && !document.body.contains(data.el)) {\n this.destroy(popper);\n return;\n }\n this.callbacks.show.call(popper);\n var el = data.el,\n _data$settings = data.settings,\n appendTo = _data$settings.appendTo,\n sticky = _data$settings.sticky,\n interactive = _data$settings.interactive,\n followCursor = _data$settings.followCursor,\n flipDuration = _data$settings.flipDuration,\n duration = _data$settings.duration;\n var _duration = customDuration !== undefined ? customDuration : Array.isArray(duration) ? duration[0] : duration;\n\n // Prevent a transition when popper changes position\n applyTransitionDuration([popper, tooltip, circle], 0);\n mountPopper(data);\n popper.style.visibility = 'visible';\n popper.setAttribute('aria-hidden', 'false');\n\n // Wait for popper's position to update\n defer(function () {\n if (!isVisible(popper)) return;\n\n // Sometimes the arrow will not be in the correct position, force another update\n if (!followCursor || Browser.touch) {\n data.popperInstance.update();\n applyTransitionDuration([popper], flipDuration);\n }\n\n // Re-apply transition durations\n applyTransitionDuration([tooltip, circle], _duration);\n\n // Make content fade out a bit faster than the tooltip if `animateFill`\n if (circle) content.style.opacity = 1;\n\n // Interactive tooltips receive a class of 'active'\n interactive && el.classList.add('active');\n\n // Update popper's position on every animation frame\n sticky && makeSticky(data);\n\n // Repaint/reflow is required for CSS transition when appending\n triggerReflow(tooltip, circle);\n modifyClassList([tooltip, circle], function (list) {\n list.contains('tippy-notransition') && list.remove('tippy-notransition');\n list.remove('leave');\n list.add('enter');\n });\n\n // Wait for transitions to complete\n onTransitionEnd(data, _duration, function () {\n if (!isVisible(popper) || data._onShownFired) return;\n\n // Focus interactive tooltips only\n interactive && popper.focus();\n // Remove transitions from tooltip\n tooltip.classList.add('tippy-notransition');\n // Prevents shown() from firing more than once from early transition cancellations\n data._onShownFired = true;\n _this.callbacks.shown.call(popper);\n });\n });\n }\n\n /**\n * Hides a popper\n * @param {Element} popper\n * @param {Number} customDuration (optional)\n */\n }, {\n key: 'hide',\n value: function hide(popper, customDuration) {\n var _this2 = this;\n if (this.state.destroyed) return;\n this.callbacks.hide.call(popper);\n var data = find(this.store, function (data) {\n return data.popper === popper;\n });\n var _getInnerElements2 = getInnerElements(popper),\n tooltip = _getInnerElements2.tooltip,\n circle = _getInnerElements2.circle,\n content = _getInnerElements2.content;\n var el = data.el,\n _data$settings2 = data.settings,\n appendTo = _data$settings2.appendTo,\n sticky = _data$settings2.sticky,\n interactive = _data$settings2.interactive,\n followCursor = _data$settings2.followCursor,\n html = _data$settings2.html,\n trigger = _data$settings2.trigger,\n duration = _data$settings2.duration;\n var _duration = customDuration !== undefined ? customDuration : Array.isArray(duration) ? duration[1] : duration;\n data._onShownFired = false;\n interactive && el.classList.remove('active');\n popper.style.visibility = 'hidden';\n popper.setAttribute('aria-hidden', 'true');\n applyTransitionDuration([tooltip, circle, circle ? content : null], _duration);\n if (circle) content.style.opacity = 0;\n modifyClassList([tooltip, circle], function (list) {\n list.contains('tippy-tooltip') && list.remove('tippy-notransition');\n list.remove('enter');\n list.add('leave');\n });\n\n // Re-focus click-triggered html elements\n // and the tooltipped element IS in the viewport (otherwise it causes unsightly scrolling\n // if the tooltip is closed and the element isn't in the viewport anymore)\n if (html && trigger.indexOf('click') !== -1 && elementIsInViewport(el)) {\n el.focus();\n }\n\n // Wait for transitions to complete\n onTransitionEnd(data, _duration, function () {\n // `isVisible` is not completely reliable to determine if we shouldn't\n // run the hidden callback, we need to check the computed opacity style.\n // This prevents glitchy behavior of the transition when quickly showing\n // and hiding a tooltip.\n if (isVisible(popper) || !appendTo.contains(popper) || getComputedStyle(tooltip).opacity === '1') return;\n el.removeEventListener('mousemove', followCursorHandler);\n data.popperInstance.disableEventListeners();\n appendTo.removeChild(popper);\n _this2.callbacks.hidden.call(popper);\n });\n }\n\n /**\n * Updates a popper with new content\n * @param {Element} popper\n */\n }, {\n key: 'update',\n value: function update(popper) {\n if (this.state.destroyed) return;\n var data = find(this.store, function (data) {\n return data.popper === popper;\n });\n var _getInnerElements3 = getInnerElements(popper),\n content = _getInnerElements3.content;\n var el = data.el,\n html = data.settings.html;\n if (html instanceof Element) {\n console.warn('Aborted: update() should not be used if `html` is a DOM element');\n return;\n }\n content.innerHTML = html ? document.getElementById(html.replace('#', '')).innerHTML : el.getAttribute('title') || el.getAttribute('data-original-title');\n if (!html) removeTitle(el);\n }\n\n /**\n * Destroys a popper\n * @param {Element} popper\n * @param {Boolean} _isLast - private param used by destroyAll to optimize\n */\n }, {\n key: 'destroy',\n value: function destroy(popper, _isLast) {\n var _this3 = this;\n if (this.state.destroyed) return;\n var data = find(this.store, function (data) {\n return data.popper === popper;\n });\n var el = data.el,\n popperInstance = data.popperInstance,\n listeners = data.listeners,\n _mutationObservers = data._mutationObservers;\n\n // Ensure the popper is hidden\n\n if (isVisible(popper)) {\n this.hide(popper, 0);\n }\n\n // Remove Tippy-only event listeners from tooltipped element\n listeners.forEach(function (listener) {\n return el.removeEventListener(listener.event, listener.handler);\n });\n\n // Restore original title\n el.setAttribute('title', el.getAttribute('data-original-title'));\n el.removeAttribute('data-original-title');\n el.removeAttribute('data-tooltipped');\n el.removeAttribute('aria-describedby');\n popperInstance && popperInstance.destroy();\n _mutationObservers.forEach(function (observer) {\n observer && observer.disconnect();\n });\n\n // Remove from store\n Store.splice(findIndex(Store, function (data) {\n return data.popper === popper;\n }), 1);\n\n // Ensure filter is called only once\n if (_isLast === undefined || _isLast) {\n this.store = Store.filter(function (data) {\n return data.tippyInstance === _this3;\n });\n }\n }\n\n /**\n * Destroys all tooltips created by the instance\n */\n }, {\n key: 'destroyAll',\n value: function destroyAll() {\n var _this4 = this;\n if (this.state.destroyed) return;\n var storeLength = this.store.length;\n this.store.forEach(function (_ref, index) {\n var popper = _ref.popper;\n _this4.destroy(popper, index === storeLength - 1);\n });\n this.store = null;\n this.state.destroyed = true;\n }\n }]);\n return Tippy;\n }();\n function tippy$2(selector, settings) {\n // Create a virtual object for custom positioning\n if (isObjectLiteral(selector)) {\n selector = {\n refObj: true,\n attributes: selector.attributes || {},\n getBoundingClientRect: selector.getBoundingClientRect,\n clientWidth: selector.clientWidth,\n clientHeight: selector.clientHeight,\n setAttribute: function setAttribute(key, val) {\n selector.attributes[key] = val;\n },\n getAttribute: function getAttribute(key) {\n return selector.attributes[key];\n },\n removeAttribute: function removeAttribute(key) {\n delete selector.attributes[key];\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n classList: {\n classNames: {},\n add: function add(key) {\n selector.classList.classNames[key] = true;\n },\n remove: function remove(key) {\n selector.classList.classNames[key] = false;\n return true;\n },\n contains: function contains(key) {\n return !!selector.classList.classNames[key];\n }\n }\n };\n }\n return new Tippy(selector, settings);\n }\n tippy$2.Browser = Browser;\n tippy$2.Defaults = Defaults;\n tippy$2.disableDynamicInputDetection = function () {\n return Browser.dynamicInputDetection = false;\n };\n tippy$2.enableDynamicInputDetection = function () {\n return Browser.dynamicInputDetection = true;\n };\n return tippy$2;\n});","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**!\n * Sortable\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\n\n(function sortableModule(factory) {\n \"use strict\";\n\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\n module.exports = factory();\n } else {\n /* jshint sub:true */\n window[\"Sortable\"] = factory();\n }\n})(function sortableFactory() {\n \"use strict\";\n\n if (typeof window === \"undefined\" || !window.document) {\n return function sortableError() {\n throw new Error(\"Sortable.js requires a window with a document\");\n };\n }\n var dragEl,\n parentEl,\n ghostEl,\n cloneEl,\n rootEl,\n nextEl,\n lastDownEl,\n scrollEl,\n scrollParentEl,\n scrollCustomFn,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n autoScrolls = [],\n scrolling = false,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n pointerElemChangedInterval,\n lastPointerElemX,\n lastPointerElemY,\n tapEvt,\n touchEvt,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n lastMode,\n // 'swap' or 'insert'\n\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n realDragElRect,\n // dragEl rect after current animation\n\n /** @const */\n R_SPACE = /\\s+/g,\n expando = 'Sortable' + new Date().getTime(),\n win = window,\n document = win.document,\n parseInt = win.parseInt,\n setTimeout = win.setTimeout,\n $ = win.jQuery || win.Zepto,\n Polymer = win.Polymer,\n captureMode = {\n capture: false,\n passive: false\n },\n IE11OrLess = !!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\\.|msie|iemobile)/i),\n Edge = !!navigator.userAgent.match(/Edge/i),\n FireFox = !!navigator.userAgent.match(/firefox/i),\n Safari = !!(navigator.userAgent.match(/safari/i) && !navigator.userAgent.match(/chrome/i) && !navigator.userAgent.match(/android/i)),\n IOS = !!navigator.userAgent.match(/iP(ad|od|hone)/i),\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _silent = false,\n _alignedSilent = false,\n abs = Math.abs,\n min = Math.min,\n max = Math.max,\n savedInputChecked = [],\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = _css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = _getChild(el, 0, options),\n child2 = _getChild(el, 1, options),\n firstChildCSS = child1 && _css(child1),\n secondChildCSS = child2 && _css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + _getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + _getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n /**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n for (var i = 0; i < sortables.length; i++) {\n if (_lastChild(sortables[i])) continue;\n var rect = _getRect(sortables[i]),\n threshold = sortables[i][expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (threshold && insideHorizontally && insideVertically) {\n return sortables[i];\n }\n }\n },\n _isClientInRowColumn = function _isClientInRowColumn(x, y, el, axis, options) {\n var targetRect = _getRect(el),\n targetS1Opp = axis === 'vertical' ? targetRect.left : targetRect.top,\n targetS2Opp = axis === 'vertical' ? targetRect.right : targetRect.bottom,\n mouseOnOppAxis = axis === 'vertical' ? x : y;\n return targetS1Opp < mouseOnOppAxis && mouseOnOppAxis < targetS2Opp;\n },\n _isElInRowColumn = function _isElInRowColumn(el1, el2, axis) {\n var el1Rect = el1 === dragEl && realDragElRect || _getRect(el1),\n el2Rect = el2 === dragEl && realDragElRect || _getRect(el2),\n el1S1Opp = axis === 'vertical' ? el1Rect.left : el1Rect.top,\n el1S2Opp = axis === 'vertical' ? el1Rect.right : el1Rect.bottom,\n el1OppLength = axis === 'vertical' ? el1Rect.width : el1Rect.height,\n el2S1Opp = axis === 'vertical' ? el2Rect.left : el2Rect.top,\n el2S2Opp = axis === 'vertical' ? el2Rect.right : el2Rect.bottom,\n el2OppLength = axis === 'vertical' ? el2Rect.width : el2Rect.height;\n return el1S1Opp === el2S1Opp || el1S2Opp === el2S2Opp || el1S1Opp + el1OppLength / 2 === el2S1Opp + el2OppLength / 2;\n },\n _getParentAutoScrollElement = function _getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return _getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = _css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem || !elem.getBoundingClientRect || elem === document.body) return _getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return _getWindowScrollingElement();\n },\n _getWindowScrollingElement = function _getWindowScrollingElement() {\n if (IE11OrLess) {\n return document.documentElement;\n } else {\n return document.scrollingElement;\n }\n },\n _scrollBy = function _scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n },\n _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl, /**Boolean*/isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (options.scroll) {\n var _this = rootEl ? rootEl[expando] : window,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n x = evt.clientX,\n y = evt.clientY,\n winScroller = _getWindowScrollingElement(),\n scrollThisInstance = false;\n\n // Detect scrollEl\n if (scrollParentEl !== rootEl) {\n _clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = _getParentAutoScrollElement(rootEl, true);\n scrollParentEl = scrollEl;\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = _getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n scrollWidth,\n scrollHeight,\n css,\n vx,\n vy,\n canScrollX,\n canScrollY,\n scrollPosX,\n scrollPosY;\n scrollWidth = el.scrollWidth;\n scrollHeight = el.scrollHeight;\n css = _css(el);\n scrollPosX = el.scrollLeft;\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll' || css.overflowX === 'visible');\n canScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll' || css.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll');\n }\n vx = canScrollX && (abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (abs(left - x) <= sens && !!scrollPosX);\n vy = canScrollY && (abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (el && (vx != 0 || vy != 0)) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._emulateDragOver(true);\n Sortable.active._onTouchMove(touchEvt, true);\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if ('function' === typeof scrollCustomFn) {\n if (scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt, touchEvt, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n _scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = _getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n }\n }, 30),\n _clearAutoScrolls = function _clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _checkAlignment = function _checkAlignment(evt) {\n if (!dragEl || !dragEl.parentNode) return;\n dragEl.parentNode[expando] && dragEl.parentNode[expando]._computeIsAligned(evt);\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n _css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n _css(ghostEl, 'display', '');\n }\n };\n\n // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n event[i] = evt[i];\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n };\n\n /**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n function Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw 'Sortable: `el` must be HTMLElement, not ' + {}.toString.call(el);\n }\n this.el = el; // root element\n this.options = options = _extend({}, options);\n\n // Export instance\n el[expando] = this;\n\n // Default options\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true,\n draggable: /[uo]l/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,\n emptyInsertThreshold: 5\n };\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n _on(el, 'pointerdown', this._onTapStart);\n } else {\n _on(el, 'mousedown', this._onTapStart);\n _on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n _on(el, 'dragover', this);\n _on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n }\n Sortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _computeIsAligned: function _computeIsAligned(evt) {\n var target;\n if (ghostEl && !supportCssPointerEvents) {\n _hideGhostForTarget();\n target = document.elementFromPoint(evt.clientX, evt.clientY);\n _unhideGhostForTarget();\n } else {\n target = evt.target;\n }\n target = _closest(target, this.options.draggable, this.el, false);\n if (_alignedSilent) return;\n if (!dragEl || dragEl.parentNode !== this.el) return;\n var children = this.el.children;\n for (var i = 0; i < children.length; i++) {\n // Don't change for target in case it is changed to aligned before onDragOver is fired\n if (_closest(children[i], this.options.draggable, this.el, false) && children[i] !== target) {\n children[i].sortableMouseAligned = _isClientInRowColumn(evt.clientX, evt.clientY, children[i], this._getDirection(evt, null), this.options);\n }\n }\n // Used for nulling last target when not in element, nothing to do with checking if aligned\n if (!_closest(target, this.options.draggable, this.el, true)) {\n lastTarget = null;\n }\n _alignedSilent = true;\n setTimeout(function () {\n _alignedSilent = false;\n }, 30);\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(/** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0],\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter,\n startIndex,\n startDraggableIndex;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n target = _closest(target, options.draggable, el, false);\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n startIndex = _index(target);\n startDraggableIndex = _index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent(_this, originalTarget, 'filter', target, el, el, startIndex, undefined, startDraggableIndex);\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = _closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent(_this, criteria, 'filter', target, el, el, startIndex, undefined, startDraggableIndex);\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !_closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target, startIndex, startDraggableIndex);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n if (!dragEl || !this.options.scroll) return;\n var x = evt.clientX,\n y = evt.clientY,\n elem = document.elementFromPoint(x, y),\n _this = this;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || Edge || IE11OrLess || Safari) {\n _autoScroll(evt, _this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = _getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastPointerElemX || y !== lastPointerElemY)) {\n pointerElemChangedInterval && clearInterval(pointerElemChangedInterval);\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n if (!dragEl) return;\n // could also check if scroll direction on newElem changes due to parent autoscrolling\n var newElem = _getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n _clearAutoScrolls();\n _autoScroll(evt, _this.options, ogElemScroller, fallback);\n }\n }, 10);\n lastPointerElemX = x;\n lastPointerElemY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!_this.options.bubbleScroll || _getParentAutoScrollElement(elem, true) === _getWindowScrollingElement()) {\n _clearAutoScrolls();\n return;\n }\n _autoScroll(evt, _this.options, _getParentAutoScrollElement(elem, false), false);\n }\n },\n _prepareDragStart: function _prepareDragStart(/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex, /** Number */startDraggableIndex) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n oldIndex = startIndex;\n oldDraggableIndex = startDraggableIndex;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n // undo animation if needed\n dragEl.style.transition = '';\n dragEl.style.transform = '';\n dragStartFn = function dragStartFn() {\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, rootEl, oldIndex, undefined, oldDraggableIndex);\n\n // Chosen item\n _toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n _find(dragEl, criteria.trim(), _disableDraggable);\n });\n _on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n _on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n _on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n _on(ownerDocument, 'mouseup', _this._onDrop);\n _on(ownerDocument, 'touchend', _this._onDrop);\n _on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (options.delayOnTouchOnly ? touch : true) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n _on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n _on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n _on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n _on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && _on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(/** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (max(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n _off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n _off(ownerDocument, 'touchend', this._disableDelayedDrag);\n _off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n _off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n _off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n _off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(/** Event */evt, /** Touch */touch) {\n touch = touch || (evt.pointerType == 'touch' ? evt : null);\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n _on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n _on(document, 'touchmove', this._onTouchMove);\n } else {\n _on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n _on(dragEl, 'dragend', this);\n _on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n if (this.nativeDraggable) {\n _on(document, 'dragover', this._handleAutoScroll);\n _on(document, 'dragover', _checkAlignment);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && _toggleClass(dragEl, options.dragClass, false);\n _toggleClass(dragEl, options.ghostClass, true);\n\n // In case dragging an animated element\n _css(dragEl, 'transform', '');\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, rootEl, oldIndex, undefined, oldDraggableIndex, undefined, evt);\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver(forAutoScroll) {\n if (touchEvt) {\n if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY && !forAutoScroll) {\n return;\n }\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n dragEl.parentNode[expando]._computeIsAligned(touchEvt);\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(/**TouchEvent*/evt, forAutoScroll) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n matrix = ghostEl && _matrix(ghostEl),\n scaleX = ghostEl && matrix && matrix.a,\n scaleY = ghostEl && matrix && matrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && _getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1),\n translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n !forAutoScroll && this._handleAutoScroll(touch, true);\n moved = true;\n touchEvt = touch;\n _css(ghostEl, 'webkitTransform', translate3d);\n _css(ghostEl, 'mozTransform', translate3d);\n _css(ghostEl, 'msTransform', translate3d);\n _css(ghostEl, 'transform', translate3d);\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = _getRect(dragEl, true, container, !PositionGhostAbsolutely),\n css = _css(dragEl),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (_css(ghostRelativeParent, 'position') === 'static' && _css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document) {\n var ghostRelativeParentRect = _getRect(ghostRelativeParent, true);\n rect.top -= ghostRelativeParentRect.top;\n rect.left -= ghostRelativeParentRect.left;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = _getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = _getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = _getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n _toggleClass(ghostEl, options.ghostClass, false);\n _toggleClass(ghostEl, options.fallbackClass, true);\n _toggleClass(ghostEl, options.dragClass, true);\n _css(ghostEl, 'box-sizing', 'border-box');\n _css(ghostEl, 'margin', 0);\n _css(ghostEl, 'top', rect.top);\n _css(ghostEl, 'left', rect.left);\n _css(ghostEl, 'width', rect.width);\n _css(ghostEl, 'height', rect.height);\n _css(ghostEl, 'opacity', '0.8');\n _css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n _css(ghostEl, 'zIndex', '100000');\n _css(ghostEl, 'pointerEvents', 'none');\n container.appendChild(ghostEl);\n }\n },\n _onDragStart: function _onDragStart(/**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n\n // Setup clone\n cloneEl = _clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n _toggleClass(cloneEl, _this.options.chosenClass, false);\n\n // #1143: IFrame support workaround\n _this._cloneId = _nextTick(function () {\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _dispatchEvent(_this, rootEl, 'clone', dragEl);\n });\n !fallback && _toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n _off(document, 'mouseup', _this._onDrop);\n _off(document, 'touchend', _this._onDrop);\n _off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n _on(document, 'drop', _this);\n\n // #1276 fix:\n _css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n _on(document, 'selectstart', _this);\n if (Safari) {\n _css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(/**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n _this = this;\n if (_silent) return;\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n if (insertion) {\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (activeSortable) {\n // Set ghost class to new sortable's ghost class\n _toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n _toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active) {\n putSortable = null;\n }\n\n // Animation\n dragRect && _this._animate(dragRect, dragEl);\n target && targetRect && _this._animate(targetRect, target);\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n _this._handleAutoScroll(evt);\n dragEl.parentNode[expando]._computeIsAligned(evt);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n _dispatchEvent(_this, rootEl, 'change', target, el, rootEl, oldIndex, _index(dragEl), oldDraggableIndex, _index(dragEl, options.draggable), evt);\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n moved = true;\n target = _closest(target, options.draggable, el, true);\n\n // target is dragEl or target is animated\n if (dragEl.contains(evt.target) || target.animated) {\n return completed(false);\n }\n if (target !== dragEl) {\n ignoreNextClick = false;\n }\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n var axis = this._getDirection(evt, target);\n dragRect = _getRect(dragEl);\n if (revert) {\n this._hideClone();\n parentEl = rootEl; // actualization\n\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n return completed(true);\n }\n var elLastChild = _lastChild(el);\n if (!elLastChild || _ghostIsLast(evt, axis, el) && !elLastChild.animated) {\n // assign target only if condition is true\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = _getRect(target);\n }\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(this);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n el.appendChild(dragEl);\n parentEl = el; // actualization\n realDragElRect = null;\n changed();\n return completed(true);\n }\n } else if (target && target !== dragEl && target.parentNode === el) {\n var direction = 0,\n targetBeforeFirstSwap,\n aligned = target.sortableMouseAligned,\n differentLevel = dragEl.parentNode !== el,\n side1 = axis === 'vertical' ? 'top' : 'left',\n scrolledPastTop = _isScrolledPast(target, 'top') || _isScrolledPast(dragEl, 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n lastMode = null;\n targetBeforeFirstSwap = _getRect(target)[side1];\n pastFirstInvertThresh = false;\n }\n\n // Reference: https://www.lucidchart.com/documents/view/10fa0e93-e362-4126-aca2-b709ee56bd8b/0\n if (_isElInRowColumn(dragEl, target, axis) && aligned || differentLevel || scrolledPastTop || options.invertSwap || lastMode === 'insert' ||\n // Needed, in the case that we are inside target and inserted because not aligned... aligned will stay false while inside\n // and lastMode will change to 'insert', but we must swap\n lastMode === 'swap') {\n // New target that we will be inside\n if (lastMode !== 'swap') {\n isCircumstantialInvert = options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, axis, options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n lastMode = 'swap';\n } else {\n // Insert at position\n direction = _getInsertDirection(target);\n lastMode = 'insert';\n }\n if (direction === 0) return completed(false);\n realDragElRect = null;\n lastTarget = target;\n lastDirection = direction;\n targetRect = _getRect(target);\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(this);\n }\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment\n if (scrolledPastTop) {\n _scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = abs(targetBeforeFirstSwap - _getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _animate: function _animate(prevRect, target) {\n var ms = this.options.animation;\n if (ms) {\n var currentRect = _getRect(target);\n if (target === dragEl) {\n realDragElRect = currentRect;\n }\n if (prevRect.nodeType === 1) {\n prevRect = _getRect(prevRect);\n }\n\n // Check if actually moving position\n if (prevRect.left + prevRect.width / 2 !== currentRect.left + currentRect.width / 2 || prevRect.top + prevRect.height / 2 !== currentRect.top + currentRect.height / 2) {\n var matrix = _matrix(this.el),\n scaleX = matrix && matrix.a,\n scaleY = matrix && matrix.d;\n _css(target, 'transition', 'none');\n _css(target, 'transform', 'translate3d(' + (prevRect.left - currentRect.left) / (scaleX ? scaleX : 1) + 'px,' + (prevRect.top - currentRect.top) / (scaleY ? scaleY : 1) + 'px,0)');\n this._repaint(target);\n _css(target, 'transition', 'transform ' + ms + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n _css(target, 'transform', 'translate3d(0,0,0)');\n }\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n _css(target, 'transition', '');\n _css(target, 'transform', '');\n target.animated = false;\n }, ms);\n }\n },\n _repaint: function _repaint(target) {\n return target.offsetWidth;\n },\n _offMoveEvents: function _offMoveEvents() {\n _off(document, 'touchmove', this._onTouchMove);\n _off(document, 'pointermove', this._onTouchMove);\n _off(document, 'dragover', nearestEmptyInsertDetectEvent);\n _off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n _off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n _off(ownerDocument, 'mouseup', this._onDrop);\n _off(ownerDocument, 'touchend', this._onDrop);\n _off(ownerDocument, 'pointerup', this._onDrop);\n _off(ownerDocument, 'touchcancel', this._onDrop);\n _off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(/**Event*/evt) {\n var el = this.el,\n options = this.options;\n awaitingDragStarted = false;\n scrolling = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearInterval(pointerElemChangedInterval);\n _clearAutoScrolls();\n _cancelThrottle();\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this._cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n _off(document, 'mousemove', this._onTouchMove);\n if (this.nativeDraggable) {\n _off(document, 'drop', this);\n _off(el, 'dragstart', this._onDragStart);\n _off(document, 'dragover', this._handleAutoScroll);\n _off(document, 'dragover', _checkAlignment);\n }\n if (Safari) {\n _css(document.body, 'user-select', '');\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n _off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove class's\n _toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n _toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent(this, rootEl, 'unchoose', dragEl, parentEl, rootEl, oldIndex, null, oldDraggableIndex, null, evt);\n if (rootEl !== parentEl) {\n newIndex = _index(dragEl);\n newDraggableIndex = _index(dragEl, options.draggable);\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent(null, parentEl, 'add', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n\n // Remove event\n _dispatchEvent(this, rootEl, 'remove', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n\n // drag from one list and drop into another\n _dispatchEvent(null, parentEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n _dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n }\n putSortable && putSortable.save();\n } else {\n if (dragEl.nextSibling !== nextEl) {\n // Get the index of the dragged element within its parent\n newIndex = _index(dragEl);\n newDraggableIndex = _index(dragEl, options.draggable);\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent(this, rootEl, 'update', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n _dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent(this, rootEl, 'end', dragEl, parentEl, rootEl, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, evt);\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = scrollEl = scrollParentEl = autoScrolls.length = pointerElemChangedInterval = lastPointerElemX = lastPointerElemY = tapEvt = touchEvt = moved = newIndex = oldIndex = lastTarget = lastDirection = realDragElRect = putSortable = activeGroup = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = 0;\n },\n handleEvent: function handleEvent(/**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (_closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (_closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n },\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest(el, selector) {\n return _closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n options[name] = value;\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\n * Destroy\n */\n destroy: function destroy() {\n var el = this.el;\n el[expando] = null;\n _off(el, 'mousedown', this._onTapStart);\n _off(el, 'touchstart', this._onTapStart);\n _off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n _off(el, 'dragover', this);\n _off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneEl.cloneHidden) {\n _css(cloneEl, 'display', 'none');\n cloneEl.cloneHidden = true;\n if (cloneEl.parentNode && this.options.removeCloneOnHide) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneEl.cloneHidden) {\n // show clone at dragEl or original position\n if (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this._animate(dragEl, cloneEl);\n }\n _css(cloneEl, 'display', '');\n cloneEl.cloneHidden = false;\n }\n }\n };\n function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && _matches(el, selector) : _matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = _getParentOrHost(el));\n }\n return null;\n }\n function _getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n }\n function _globalDragOver(/**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n }\n function _on(el, event, fn) {\n el.addEventListener(event, fn, IE11OrLess ? false : captureMode);\n }\n function _off(el, event, fn) {\n el.removeEventListener(event, fn, IE11OrLess ? false : captureMode);\n }\n function _toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n }\n function _css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n }\n function _matrix(el) {\n var appliedTransforms = '';\n do {\n var transform = _css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (el = el.parentNode);\n if (window.DOMMatrix) {\n return new DOMMatrix(appliedTransforms);\n } else if (window.WebKitCSSMatrix) {\n return new WebKitCSSMatrix(appliedTransforms);\n } else if (window.CSSMatrix) {\n return new CSSMatrix(appliedTransforms);\n }\n }\n function _find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n }\n function _dispatchEvent(sortable, rootEl, name, targetEl, toEl, fromEl, startIndex, newIndex, startDraggableIndex, newDraggableIndex, originalEvt) {\n sortable = sortable || rootEl[expando];\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = startIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = startDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvt;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n }\n function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || _getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvt;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvt);\n }\n return retVal;\n }\n function _disableDraggable(el) {\n el.draggable = false;\n }\n function _unsilent() {\n _silent = false;\n }\n\n /**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n function _getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== ghostEl && children[i] !== dragEl && _closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n }\n\n /**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n function _lastChild(el) {\n var last = el.lastElementChild;\n while (last && (last === ghostEl || _css(last, 'display') === 'none')) {\n last = last.previousElementSibling;\n }\n return last || null;\n }\n function _ghostIsLast(evt, axis, el) {\n var elRect = _getRect(_lastChild(el)),\n mouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX,\n mouseOnOppAxis = axis === 'vertical' ? evt.clientX : evt.clientY,\n targetS2 = axis === 'vertical' ? elRect.bottom : elRect.right,\n targetS1Opp = axis === 'vertical' ? elRect.left : elRect.top,\n targetS2Opp = axis === 'vertical' ? elRect.right : elRect.bottom,\n spacer = 10;\n return axis === 'vertical' ? mouseOnOppAxis > targetS2Opp + spacer || mouseOnOppAxis <= targetS2Opp && mouseOnAxis > targetS2 && mouseOnOppAxis >= targetS1Opp : mouseOnAxis > targetS2 && mouseOnOppAxis > targetS1Opp || mouseOnAxis <= targetS2 && mouseOnOppAxis > targetS2Opp + spacer;\n }\n function _getSwapDirection(evt, target, axis, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var targetRect = _getRect(target),\n mouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX,\n targetLength = axis === 'vertical' ? targetRect.height : targetRect.width,\n targetS1 = axis === 'vertical' ? targetRect.top : targetRect.left,\n targetS2 = axis === 'vertical' ? targetRect.bottom : targetRect.right,\n dragRect = _getRect(dragEl),\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n var dragS1 = axis === 'vertical' ? dragRect.top : dragRect.left,\n dragS2 = axis === 'vertical' ? dragRect.bottom : dragRect.right;\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return lastDirection * -1;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n }\n\n /**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n function _getInsertDirection(target) {\n var dragElIndex = _index(dragEl),\n targetIndex = _index(target);\n if (dragElIndex < targetIndex) {\n return 1;\n } else {\n return -1;\n }\n }\n\n /**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n function _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n }\n\n /**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n function _index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n while (el && (el = el.previousElementSibling)) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== cloneEl && (!selector || _matches(el, selector))) {\n index++;\n }\n }\n return index;\n }\n function _matches(/**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n }\n var _throttleTimeout;\n function _throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n _throttleTimeout = setTimeout(function () {\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n }\n function _cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n }\n function _extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n }\n function _clone(el) {\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n }\n function _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n }\n function _nextTick(fn) {\n return setTimeout(fn, 0);\n }\n function _cancelNextTick(id) {\n return clearTimeout(id);\n }\n\n /**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[HTMLElement]} container the parent the element will be placed in\n * @param {[Boolean]} adjustForTransform Whether the rect should compensate for parent's transform\n * @return {Object} The boundingClientRect of el\n */\n function _getRect(el, adjustForTransform, container, adjustForFixed) {\n if (!el.getBoundingClientRect && el !== win) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== win && el !== _getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if (adjustForFixed && el !== win) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && _css(container, 'transform') !== 'none') {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(_css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(_css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (adjustForTransform && el !== win) {\n // Adjust for scale()\n var matrix = _matrix(container || el),\n scaleX = matrix && matrix.a,\n scaleY = matrix && matrix.d;\n if (matrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n }\n\n /**\n * Checks if a side of an element is scrolled past a side of it's parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} side Side of the element in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n function _isScrolledPast(el, side) {\n var parent = _getParentAutoScrollElement(el, true),\n elSide = _getRect(el)[side];\n\n /* jshint boss:true */\n while (parent) {\n var parentSide = _getRect(parent)[side],\n visible;\n if (side === 'top' || side === 'left') {\n visible = elSide >= parentSide;\n } else {\n visible = elSide <= parentSide;\n }\n if (!visible) return parent;\n if (parent === _getWindowScrollingElement()) break;\n parent = _getParentAutoScrollElement(parent, false);\n }\n return false;\n }\n\n /**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n function _getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = _getWindowScrollingElement();\n if (el) {\n do {\n var matrix = _matrix(el),\n scaleX = matrix.a,\n scaleY = matrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n }\n\n // Fixed #973:\n _on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n\n // Export utils\n Sortable.utils = {\n on: _on,\n off: _off,\n css: _css,\n find: _find,\n is: function is(el, selector) {\n return !!_closest(el, selector, el, false);\n },\n extend: _extend,\n throttle: _throttle,\n closest: _closest,\n toggleClass: _toggleClass,\n clone: _clone,\n index: _index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: _getChild\n };\n\n /**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n Sortable.create = function (el, options) {\n return new Sortable(el, options);\n };\n\n // Export\n Sortable.version = '1.9.0';\n return Sortable;\n});","function activateChosen(el) {\n $(el).chosen();\n}\n\nexport default activateChosen;\n","function activateFroala(el) {\n const fontFamily = {\n 'proxima-nova, Helvetica, Arial, sans-serif': 'Default',\n 'Arial,Helvetica,sans-serif': 'Arial',\n 'Georgia,serif': 'Georgia',\n 'Impact,Charcoal,sans-serif': 'Impact',\n 'Tahoma,Geneva,sans-serif': 'Tahoma',\n \"'Times New Roman',Times,serif\": 'Times New Roman',\n 'Verdana,Geneva,sans-serif': 'Verdana'\n };\n\n const htmlAllowedAttrsSafe = [\n 'accept', 'accept-charset', 'accesskey', 'action', 'align', 'alt', 'async',\n 'autocomplete', 'autofocus', 'autoplay', 'autosave', 'background', 'bgcolor', 'border', 'charset',\n 'cellpadding', 'cellspacing', 'checked', 'cite', 'color', 'cols', 'colspan', 'content',\n 'contenteditable', 'contextmenu', 'controls', 'coords', 'data', 'data-.*', 'datetime', 'default',\n 'defer', 'dir', 'dirname', 'disabled', 'download', 'draggable', 'dropzone', 'enctype', 'for', 'form',\n 'formaction', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'http-equiv', 'icon',\n 'ismap', 'itemprop', 'keytype', 'kind', 'label', 'lang', 'language', 'list', 'loop', 'low', 'max',\n 'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'novalidate', 'open', 'optimum', 'pattern',\n 'ping', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required',\n 'reversed', 'rows', 'rowspan', 'sandbox', 'scope', 'scoped', 'scrolling', 'seamless', 'selected', 'shape',\n 'size', 'sizes', 'span', 'src', 'srcdoc', 'srclang', 'srcset', 'start', 'step', 'summary', 'spellcheck',\n 'style', 'tabindex', 'target', 'title', 'type', 'translate', 'usemap', 'value', 'valign', 'width', 'wrap'\n ];\n\n const htmlAllowedTagsSafe = [\n 'a', 'abbr', 'address', 'area', 'b', 'base', 'bdi', 'bdo',\n 'blockquote', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup',\n 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed',\n 'fieldset', 'figcaption', 'figure', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'hgroup', 'hr', 'i', 'iframe', 'img', 'ins', 'kbd', 'keygen',\n 'legend', 'li', 'link', 'map', 'mark', 'menu', 'menuitem', 'meter', 'nav',\n 'object', 'ol', 'optgroup', 'output', 'p', 'param', 'pre', 'progress', 'queue', 'rp',\n 'rt', 'ruby', 's', 'samp', 'small', 'source', 'span',\n 'strike', 'strong', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr'];\n\n $(el).each(function() {\n const el = $(this);\n const safe = el.hasClass('froala-editor--safe');\n const options = { fontFamily: fontFamily, key: 'modxhG5H-9d==' };\n\n if (safe) {\n options['htmlAllowedAttrs'] = htmlAllowedAttrsSafe;\n options['htmlAllowedTags'] = htmlAllowedTagsSafe;\n }\n\n el.froalaEditor(options);\n });\n}\n\nexport default activateFroala;\n","import tippy from \"tippy.js\";\n\nfunction activatePopper(el) {\n const els = document.querySelectorAll(el);\n\n for (const el of els) {\n const popupSelector = el.getAttribute('data-popup');\n const popup = document.querySelector(popupSelector);\n\n tippy(el, {\n html: popup,\n popperOptions: {\n modifiers: {\n offset: {\n offset: el.getAttribute('data-offset') || 0,\n },\n },\n },\n });\n\n if (popup) {\n popup.style.display = null;\n }\n }\n}\n\nexport default activatePopper;\n","function activateQuizSessionTimer() {\n const $quizSessionTimer = $(\"#quiz-session-timer\");\n\n if (!$quizSessionTimer.length) return;\n\n const timeLeft = document.querySelector('#quiz-session-time-left').getAttribute('data-time-left');\n const deadline = new Date();\n\n deadline.setSeconds(deadline.getSeconds() + Number(timeLeft));\n\n $quizSessionTimer.countdown(deadline, function(event) {\n this.innerHTML = event.strftime('%H:%M:%S');\n }).on('finish.countdown', function() {\n const $quizTaker = $('#quiz-taker');\n if ($quizTaker.length) $quizTaker.submit();\n });\n}\n\nexport default activateQuizSessionTimer;\n","function activateSelectBoxIt(el) {\n const $el = $(el);\n\n $el.find(\"option\").first().remove();\n\n $el.selectBoxIt({\n autoWidth: false,\n downArrowIcon: '',\n dynamicPositioning: false\n });\n\n $el.each(function() {\n togglePlaceholder(this);\n });\n}\n\nfunction togglePlaceholder(el) {\n const selectBoxTextID = '#' + el.getAttribute('id') + 'SelectBoxItText';\n const selectBoxText= $(selectBoxTextID);\n\n selectBoxText.toggleClass('placeholder', el.value.length === 0);\n}\n\nexport default activateSelectBoxIt;\n","import Sortable from 'sortablejs/Sortable';\n\nimport { compare } from '../helpers/arrays';\n\nfunction activateSortable(el) {\n const els = document.querySelectorAll(el);\n\n for (const el of els) {\n let options = { animation: 150 };\n const url = el.getAttribute('data-sortable-url');\n\n if (url) {\n options['onStart'] = function() {\n this.startingIDs = this.toArray();\n };\n\n options['onEnd'] = function() {\n this.endingIDs = this.toArray();\n\n if (!compare(this.startingIDs, this.endingIDs)) {\n $.ajax({\n method: 'PATCH',\n url: url,\n dataType: 'json',\n data: {\n ids: JSON.stringify(this.endingIDs)\n }\n });\n }\n };\n }\n\n Sortable.create(el, options);\n }\n}\n\nexport default activateSortable;\n","function activateTippable(el) {\n $(el).tooltip();\n}\n\nexport default activateTippable;\n","import Page from '../models/page';\n\nfunction initDashboard() {\n if (Page.controller !== 'static_pages' || Page.action !== 'home') return;\n\n const maxLength = 1000;\n\n $('#content').on('input', function() {\n const $remaining = $('#site-feedback-content-remaining');\n const $submitButton = $('#site-feedback-submit');\n const contentLength = $(this).val().length;\n\n $remaining.text(1000 - contentLength);\n $submitButton.prop('disabled', contentLength === 0 || contentLength > maxLength);\n });\n\n $('.dashboard-score-overlay').each(function() {\n const options = { width: $(this).attr('data-score') + '%' };\n\n $(this).animate(options, maxLength);\n });\n}\n\nexport default initDashboard;\n","import Page from '../models/page';\n\nfunction initHomepage() {\n if (Page.controller !== 'static_pages' || Page.action !== 'home' || Page.isLoggedIn) return;\n\n const $school = $('#school');\n const $signupForm = $('#sign-up-form');\n\n $school.typeahead({\n name: 'School',\n local: $school.data('source'),\n });\n\n if (!$signupForm.length) return;\n\n $signupForm.parsley({\n inputs: 'input[name^=\"user\"], select[name^=\"user\"], input[name=school]',\n trigger: 'change submit',\n });\n\n $signupForm.parsley().addAsyncValidator('remoteValidator', (xhr) => xhr.responseJSON.valid);\n\n const $submitButton = $signupForm.find('input[type=\"submit\"]');\n $submitButton.submit(function() {\n if ($signupForm.parsley().isValid()) {\n $submitButton.attr('disabled', 'disabled').val('Creating your account...');\n }\n });\n}\n\nexport default initHomepage;\n","import Page from \"../models/page\";\n\nfunction initQuizSession() {\n if (Page.controller !== \"quiz_sessions\") return;\n\n let topics;\n\n const initOrUpdateChosen = function (init = true) {\n const $topic = $(\"#topic\");\n const $subject = $(\"#subject option:selected\");\n\n console.log(\"subject\", $subject);\n\n if (init) {\n topics = $topic.html();\n }\n\n if ($subject) {\n let options = \"\";\n const name = $subject.data(\"name\");\n options += `\\n`;\n options += $(topics).filter(`optgroup[label=\"${name}\"]`).html() + \"\\n\";\n options += \"\\n\";\n\n $topic.html(options);\n } else {\n $topic.html(topics);\n }\n\n if (init) {\n $(\".chosen-select\").chosen();\n }\n\n $topic.trigger(\"chosen:updated\");\n };\n\n initOrUpdateChosen();\n\n $(document).on(\"change\", \"#subject\", function () {\n initOrUpdateChosen(false);\n });\n\n $(document).on(\"quiz_sessions:new\", function () {\n initOrUpdateChosen();\n });\n\n $(document).on(\"click\", \".complaint-button\", function () {\n const value = this.getAttribute(\"data-complaint\");\n $(\"#quiz_item_id\").val(value);\n });\n\n $(document).on(\n \"change\",\n '#quiz-taker .quiz-item-choices input[type=\"radio\"]',\n function () {\n const session = this.closest(\"form\").getAttribute(\"data-session\");\n const question = this.getAttribute(\"name\").replace(\"question\", \"\");\n const answer = this.value;\n\n $.ajax({\n method: \"PUT\",\n url: \"/api/v1/quiz_sessions/\" + session + \"/answer\",\n dataType: \"json\",\n data: { question: question, answer: answer },\n });\n }\n );\n}\n\nexport default initQuizSession;\n","import Page from '../models/page';\n\nfunction initSchoolSelection() {\n if (Page.controller !== 'registrations') return;\n\n const $school = $('#user_school');\n\n $school.typeahead({\n name: 'School',\n local: $school.data('source'),\n });\n}\n\nexport default initSchoolSelection;\n","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar g;\n\n// This works in non-strict mode\ng = function () {\n return this;\n}();\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n expando = '_ujsData';\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n return element[expando][key] = value;\n };\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n return result;\n };\n }\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n return options;\n };\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n processResponse = function processResponse(response, type) {\n var parser, script;\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n return response;\n };\n Rails.href = function (element) {\n return element.href;\n };\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n if (!message) {\n return true;\n }\n answer = false;\n if (fire(element, 'confirm')) {\n try {\n answer = confirm(message);\n } catch (error) {}\n callback = fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n Rails.enableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n disableFormElement = function disableFormElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, 'ujs:enable-with', null);\n }\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n if (!method) {\n return;\n }\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","import Rails from 'rails-ujs';\n\n// site-wide\nimport activateChosen from './sitewide/activateChosen';\nimport activateFroala from './sitewide/activateFroala';\nimport activatePopper from './sitewide/activatePopper';\nimport activateQuizSessionTimer from \"./sitewide/activateQuizSessionTimer\";\nimport activateSelectBoxIt from './sitewide/activateSelectBoxIt';\nimport activateSortable from './sitewide/activateSortable';\nimport activateTippable from './sitewide/activateTippable';\n\n// page-specific\nimport initDashboard from './pageSpecific/initDashboard';\nimport initHomepage from \"./pageSpecific/initHomepage\";\nimport initQuizSession from \"./pageSpecific/initQuizSession\";\nimport initSchoolSelection from \"./pageSpecific/initSchoolSelection\";\n\nRails.start();\n\n$(document).ready(function () {\n activateFroala('.froala-editor');\n activateChosen('.chosen-select');\n activatePopper('.has-tippy');\n activateQuizSessionTimer();\n activateSelectBoxIt('.selectboxit');\n activateSortable('.is-sortable');\n activateTippable('.tippable');\n\n initDashboard();\n initHomepage();\n initQuizSession();\n initSchoolSelection();\n});\n","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n module.paths = [];\n // module.parent = undefined by default\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n return module;\n};"],"sourceRoot":""}