· 8 years ago · Jun 28, 2018, 07:36 AM
1{"version":3,"sources":["webpack:///envision.js","webpack:///webpack/bootstrap b449e72f26b8245f0803","webpack:///./src/js/util.js","webpack:///./src/js/collapse.js","webpack:///./src/js/dropdown.js","webpack:///./src/js/image-slider.js","webpack:///./src/js/image-viewer.js","webpack:///./src/js/modal-dialog.js","webpack:///./src/js/popover.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/js/range-slider.js","webpack:///./src/js/shims.js","webpack:///./node_modules/svgxuse/svgxuse.js","webpack:///./src/js/tabs.js","webpack:///./src/icons/envision-icons.svg"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","value","Util","getEndEvent","events","t","el","document","createElement","undefined","style","TRANSITIONS","WebkitTransition","MozTransition","OTransition","transition","ANIMATIONS","OAnimation","MozAnimation","WebkitAnimation","animation","getAnimationEndEvent","getTransitionEndEvent","reflow","element","offsetHeight","isTouch","window","DocumentTouch","getSelectorFromElement","selector","getAttribute","$","length","error","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","writable","key","protoProps","staticProps","_util","_util2","obj","Collapse","NAME","NO_CONFLICT","fn","this","$el","hasClass","MODIFIER_BASE","hide","show","addClass","one","_showTransitionComplete","height","scrollHeight","removeClass","_hideTransitionComplete","e","currentTarget","attr","config","each","data","Error","toggle","_jQuery","noConflict","on","preventDefault","$this","$target","jQuery","Dropdown","_id","id","focus","_bindEvents","find","blur","_unbindEvents","_this","ENV_CLICK","ENV_CLICK_EVENT","ENV_KEYDOWN","ENV_KEYDOWN_EVENT","off","event","which","method","_typeof","Symbol","iterator","constructor","Imageslider","DATA_KEY","EVENT_KEY","DEFAULTS","buttons","imageSlider","interval","keyboard","pause","slide","swipe","wrap","SELECTORS","ACTIVE","ACTIVE_DOT","ACTIVE_ITEM","DATA_SLIDE","DATA_IMAGE_SLIDER","INDICATORS","INNER","NEXT_PREV","ITEM","THUMBNAILS","ClassName","IMAGESLIDER","LEFT","NEXT","PREV","RIGHT","SLIDE","Direction","Events","CLICK_DATA_API","KEYDOWN","LOAD_DATA_API","MOUSEENTER","MOUSELEAVE","SLID","TOUCHEND","TOUCHMOVE","TOUCHSTART","$images","_isSliding","_isPaused","_interval","_activeElement","_indicatorsElement","_thumbnailElements","extend","_addSlideButtons","_slide","hidden","next","clearInterval","setInterval","visibilityState","nextWhenVisible","bind","index","activeIndex","_getItemIndex","cycle","direction","touchstartx","originalEvent","touches","pageX","touchmovex","movex","moved","activeItem","children","css","prev","setTimeout","removeData","sliderId","buttonHTML","append","activeElement","isNextDirection","lastImageIndex","delta","itemIndex","_keydown","touchTimeout","clearTimeout","_bindTouchSlider","_this2","container","startTouchSlide","moveTouchSlide","endTouchSlide","test","tagName","targetElement","eventDirectionName","targetIndex","fromIndex","slideEvent","Event","from","to","trigger","nextIndicator","firstElementChild","_this3","activeElementIndex","nextElement","_getItemByDirection","nextElementIndex","directionalClassName","orderClassName","$nextElement","_triggerSlideEvent","isDefaultPrevented","_setActiveIndicatorElement","slidEvent","relatedTarget","$activeElement","_this4","_config","action","move","goTo","eq","slideIndex","_jQueryInterface","_dataApiClickHandler","slider","$slider","Imageviewer","ANIMATION","DATA_MOVE_TO","DATA_MOVE","DATA_IMAGE_VIEWER","IMAGES","DATA_SLIDE_TO","SPINNER","HIDDEN","SPINNER_HIDE","$image","_isShown","_getNextItemIndex","_getPrevItemIndex","Number","image","href","$btnContainer","$downloadingImage","_loadImage","$imgContainer","html","$modal","class","appendTo","body","_getIndicators","_getButtons","_bindContainerEvents","_showBackdrop","SPINNER_TEMPLATE","prependTo","removeBackdropCallback","$backdrop","remove","tabindex","src","imageHeight","windowHeight","innerHeight","max-height","viewerIndex","_getIndicatorItems","map","join","_removeBackdropAnimation","BACKDROP_ANIMATION","_this5","indicator","_this6","is","envImageviewer","parent","ModalDialog","FOCUSIN","EVENTS","HIDE","SHOW","SHOWN","showEvent","shownEvent","removeAttr","hideModalCallback","hiddenEvent","hideEvent","has","focusableElements","firstElement","lastElement","shiftKey","_popper","_popper2","Popover","attachmentMapping","top","bottom","left","right","clickOutside","constraints","content","delay","escapeContent","placement","template","title","bindEvents","split","forEach","EVENT_NAMESPACE","isShowing","hoverTrigger","inEvent","outEvent","hidetimeout","showtimeout","hoverPopover","$popoverElement","getPopoverElement","text","setText","assign","setTitle","setContent","setArrowPosition","detach","oldClassNames","replace","trim","_cleanTipClass","_addAttachmentClass","className","render","modifiers","flip","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","update","clickOutsideHandler","destroy","closest","__webpack_exports__","global","microtaskDebounce","scheduled","elem","MutationObserver","observe","attributes","setAttribute","taskDebounce","timeoutDuration","isFunction","functionToCheck","getType","toString","getStyleComputedProperty","nodeType","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","indexOf","_getStyleComputedProp","overflow","overflowX","overflowY","getOffsetParent","offsetParent","documentElement","isOffsetContainer","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","arguments","upperSide","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","Math","max","isIE10$1","getWindowSizes","width","getClientRect","offsets","_extends","getBoundingClientRect","err","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","isIE10","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","relativeOffset","innerWidth","isFixed","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","getArea","_ref","computeAutoPlacement","refRect","rects","sortedAreas","keys","area","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","getReferenceOffsets","state","getOuterSizes","x","parseFloat","marginBottom","y","marginRight","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","check","Array","findIndex","prop","cur","match","runModifiers","ends","slice","function","console","warn","enabled","isDestroyed","arrowStyles","flipped","options","position","isCreated","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","removeAttribute","disableEventListeners","removeOnDestroy","removeChild","attachToScrollParents","callback","scrollParents","isBody","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","cancelAnimationFrame","isNumeric","isNaN","isFinite","setStyles","unit","setAttributes","applyStyle","arrowElement","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","prefixedProperty","willChange","invertTop","invertLeft","x-placement","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","querySelector","_data$offsets","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","sideValue","min","round","getOppositeVariation","clockwise","counter","validPlacements","concat","reverse","placementOpposite","flipOrder","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","parseOffset","offset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","priority","primary","escapeWithReference","secondary","shift","shiftvariation","shiftOffsets","bound","inner","subtractLength","nativeHints","isBrowser","longerTimeoutBrowsers","navigator","userAgent","supportsNativeMutationObserver","hint","debounce","appVersion","classCallCheck","createClass","source","placements","onLoad","Defaults","Popper","requestAnimationFrame","jquery","Utils","PopperUtils","g","Function","eval","RangeSlider","HANDLES_SELECTOR","VALUE_HOLDERS_SELECTOR","RANGE_SELECTOR","IDENTIFIER","STOP","values","visibleValues","$document","handles","$range","valueHolders","handleEvents","mousedown","_initSlide","touchstart","keydown","_initKeySlide","keyup","_stopKeySlide","_setupHandles","_refreshRange","isArray","_trimAlignValue","handle","lastValPercent","valPercent","val","_getValue","_getPosition","normValue","_normValueFromMouse","distance","$closestHandle","thisDistance","type","_handleSlide","_stopSlide","abs","_lastChangedValue","_handleIndex","_clickOffset","parseInt","newVal","otherVal","currentValue","newValues","_getValues","_trigger","_setValue","keyCode","_keySliding","curVal","pixelTotal","outerWidth","valueTotal","pixelMouse","percentMouse","valueMouse","pos","pageY","valModStep","alignValue","toFixed","newValue","cb","_len","args","_key","rangeSlider","apply","initialize","checkUseElems","tid","cache","create","debouncedCheck","unobserveChanges","observeChanges","observer","childList","subtree","disconnect","ignore","createRequest","url","getOrigin","loc","protocol","Request","origin","origin2","XMLHttpRequest","location","withCredentials","XDomainRequest","xlinkNS","observeIfDone","inProgressCount","attrUpdateFunc","spec","base","isXlink","useEl","setAttributeNS","onErrorTimeout","xhr","onerror","ontimeout","bcr","isHidden","uses","getElementsByTagName","getAttributeNS","onload","svg","innerHTML","responseText","insertBefore","firstChild","open","send","abort","winLoad","readyState","Tabs","IS_ACTIVE","TAB_SELECTOR","active","$tabs","$panels","$activeTab","tab","$tab","$panel","_setActive","_resetActive","_getPanelForTab","argument","tabs"],"mappings":"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","file":"envision.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar Util = function () {\n\n var TRANSITIONS = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n\n var ANIMATIONS = {\n OAnimation: 'oAnimationEnd',\n MozAnimation: 'animationend',\n WebkitAnimation: 'webkitAnimationEnd',\n animation: 'animationend'\n };\n\n function getEndEvent(events) {\n var t = void 0;\n var el = document.createElement('fakeelement');\n\n for (t in events) {\n if (el.style[t] !== undefined) {\n return events[t];\n }\n }\n\n return false;\n }\n\n var Util = {\n getAnimationEndEvent: function getAnimationEndEvent() {\n return getEndEvent(ANIMATIONS);\n },\n getTransitionEndEvent: function getTransitionEndEvent() {\n return getEndEvent(TRANSITIONS);\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n isTouch: function isTouch() {\n return 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n return $(selector).length > 0 ? selector : null;\n } catch (error) {\n return null;\n }\n }\n };\n\n return Util;\n}();\n\nexports.default = Util;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(2);\n__webpack_require__(3);\n__webpack_require__(4);\n__webpack_require__(5);\n__webpack_require__(6);\n__webpack_require__(7);\n__webpack_require__(10);\n__webpack_require__(11);\n__webpack_require__(13);\n__webpack_require__(14);\nmodule.exports = __webpack_require__(15);\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Collapse = function ($) {\n\n var ARIA_EXPANDED = 'aria-expanded';\n var AUTO = 'auto';\n var COLLAPSING = 'collapsing';\n var MODIFIER_BASE = 'env-collapse--';\n var NAME = 'envCollapse';\n var NO_CONFLICT = $.fn[NAME];\n var SHOW = 'show';\n\n var Collapse = function () {\n function Collapse(element) {\n _classCallCheck(this, Collapse);\n\n this.el = element;\n this.$el = $(element);\n }\n\n _createClass(Collapse, [{\n key: 'toggle',\n value: function toggle() {\n if (this.$el.hasClass(MODIFIER_BASE + SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n }\n }, {\n key: 'show',\n value: function show() {\n this.$el.addClass(MODIFIER_BASE + COLLAPSING).one(_util2.default.getTransitionEndEvent(), this._showTransitionComplete).height(this.el.scrollHeight);\n }\n }, {\n key: 'hide',\n value: function hide() {\n this.$el.height(this.$el.height()).removeClass(MODIFIER_BASE + SHOW).addClass(MODIFIER_BASE + COLLAPSING).one(_util2.default.getTransitionEndEvent(), this._hideTransitionComplete).height(0);\n }\n\n // Private\n\n }, {\n key: '_showTransitionComplete',\n value: function _showTransitionComplete(e) {\n var $target = $(e.currentTarget);\n\n $target.removeClass(MODIFIER_BASE + COLLAPSING).addClass(MODIFIER_BASE + SHOW).height(AUTO).attr(ARIA_EXPANDED, true);\n }\n }, {\n key: '_hideTransitionComplete',\n value: function _hideTransitionComplete(e) {\n var $target = $(e.currentTarget);\n\n $target.removeClass(MODIFIER_BASE + COLLAPSING).attr(ARIA_EXPANDED, false);\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery(config) {\n return this.each(function () {\n var data = new Collapse(this);\n\n if (typeof config === 'string') {\n if (data[config] === undefined) {\n throw new Error('No method named \"' + config + '\"');\n }\n data[config]();\n return;\n }\n\n data.toggle();\n });\n }\n }]);\n\n return Collapse;\n }();\n\n $.fn[NAME] = Collapse._jQuery;\n $.fn[NAME].Constructor = Collapse;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return Collapse._jQuery;\n };\n\n $(document).on('click', '[data-env-collapse]', function (e) {\n e.preventDefault();\n\n var $this = $(this);\n var target = $this.attr('href') || $this.attr('data-target');\n var $target = $(target);\n\n if ($target.hasClass(MODIFIER_BASE + COLLAPSING)) {\n return;\n }\n\n $target[NAME]();\n });\n\n return Collapse;\n}(jQuery);\n\nexports.default = Collapse;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar Dropdown = function ($) {\n\n var NAME = 'envDropdown';\n var NO_CONFLICT = $.fn[NAME];\n var ENV_DROPDOWN_OPEN = 'env-is-open';\n var TOGGLE_DROPDOWN = '[data-dropdown]';\n var ESCAPE_KEY = 27;\n var ENV_CLICK_EVENT = 'click.env-dropdown';\n var ENV_KEYDOWN_EVENT = 'keydown.env-dropdown';\n\n var Dropdown = function () {\n function Dropdown(element) {\n _classCallCheck(this, Dropdown);\n\n this.el = element;\n this.$el = $(element);\n this._id = this.el.id;\n }\n\n _createClass(Dropdown, [{\n key: 'toggle',\n value: function toggle() {\n if (this.$el.hasClass(ENV_DROPDOWN_OPEN)) {\n this.hide();\n } else {\n this.show();\n }\n }\n }, {\n key: 'show',\n value: function show() {\n this.$el.attr('aria-expanded', 'true').addClass(ENV_DROPDOWN_OPEN).focus();\n\n this._bindEvents();\n }\n }, {\n key: 'hide',\n value: function hide() {\n this.$el.attr('aria-expanded', 'false').removeClass(ENV_DROPDOWN_OPEN).find('.env-dropdown--toggle').blur();\n\n this._unbindEvents();\n }\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this = this;\n\n var ENV_CLICK = ENV_CLICK_EVENT + '-' + this.el.id;\n var ENV_KEYDOWN = ENV_KEYDOWN_EVENT + '-' + this.el.id;\n $(document).off(ENV_CLICK).on(ENV_CLICK, function (event) {\n if (!$(event.target).hasClass('env-dropdown__menu')) {\n _this.hide();\n }\n });\n\n this.$el.off(ENV_KEYDOWN).one(ENV_KEYDOWN, function (event) {\n if (event.which === ESCAPE_KEY) {\n _this.hide();\n }\n });\n }\n }, {\n key: '_unbindEvents',\n value: function _unbindEvents() {\n $(document).off(ENV_CLICK_EVENT + '-' + this.el.id);\n this.$el.off(ENV_KEYDOWN_EVENT + '-' + this.el.id);\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('env.dropdown');\n\n if (!data) {\n data = new Dropdown(this);\n $this.data('env.dropdown', data);\n }\n\n if (typeof config === 'string') {\n var method = data[config];\n if (method === undefined) {\n throw new Error('No method named \"' + config + '\"');\n }\n method.call(data);\n return;\n }\n\n data.toggle();\n });\n }\n }]);\n\n return Dropdown;\n }();\n\n $.fn[NAME] = Dropdown._jQuery;\n $.fn[NAME].Constructor = Dropdown;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return Dropdown._jQuery;\n };\n\n $(document).on('click', TOGGLE_DROPDOWN, function (e) {\n e.preventDefault();\n\n var $this = $(this);\n var $target = $($this.data('target'));\n\n $target[NAME]();\n });\n\n return Dropdown;\n}(jQuery);\n\nexports.default = Dropdown;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Imageslider = function ($) {\n\n var DATA_KEY = 'env.image-slider';\n var EVENT_KEY = '.' + DATA_KEY;\n var NAME = 'envImageslider';\n var DATA_API_KEY = '.data-api';\n var NO_CONFLICT = $.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37;\n var ARROW_RIGHT_KEYCODE = 39;\n var TOUCHEVENT_WAIT = 500;\n var SLIDE_WIDTH_PX = 80;\n\n var DEFAULTS = {\n buttons: true,\n imageSlider: false,\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n slide: false,\n swipe: true,\n wrap: true\n };\n\n var SELECTORS = {\n ACTIVE: '.env-image-slider__item--active',\n ACTIVE_DOT: '.env-is-active',\n ACTIVE_ITEM: '.env-image-slider__item--active.env-image-slider__item',\n DATA_SLIDE: '[data-move], [data-move-to], [data-image-slider-touch]',\n DATA_IMAGE_SLIDER: '[data-image-slider]',\n INDICATORS: '.env-image-slider__indicators',\n INNER: '.env-image-slider__inner',\n NEXT_PREV: '.env-image-slider--next, .env-image-slider--prev',\n ITEM: '.env-image-slider__item',\n THUMBNAILS: '.env-image-slider__thumbnails'\n };\n\n var ClassName = {\n ACTIVE: 'env-image-slider__item--active',\n ACTIVE_DOT: 'env-is-active',\n IMAGESLIDER: 'env-image-slider',\n LEFT: 'env-image-slider__item--left',\n NEXT: 'env-image-slider__item--next',\n PREV: 'env-image-slider__item--prev',\n RIGHT: 'env-image-slider__item--right',\n SLIDE: 'env-image-slider--slide'\n };\n\n var Direction = {\n LEFT: 'left',\n NEXT: 'next',\n PREV: 'prev',\n RIGHT: 'right'\n };\n\n var Events = {\n CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,\n KEYDOWN: 'keydown' + EVENT_KEY,\n LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY,\n MOUSEENTER: 'mouseenter' + EVENT_KEY,\n MOUSELEAVE: 'mouseleave' + EVENT_KEY,\n SLID: 'slid' + EVENT_KEY,\n SLIDE: 'slide' + EVENT_KEY,\n TOUCHEND: 'touchend' + EVENT_KEY,\n TOUCHMOVE: 'touchmove' + EVENT_KEY,\n TOUCHSTART: 'touchstart' + EVENT_KEY\n };\n\n var Imageslider = function () {\n function Imageslider(element, config) {\n _classCallCheck(this, Imageslider);\n\n this.$el = $(element);\n this.$images = this.$el.find(SELECTORS.ITEM);\n\n this._isSliding = false;\n this._isPaused = false;\n this._interval = null;\n\n this._activeElement = null;\n this._indicatorsElement = this.$el.find(SELECTORS.INDICATORS)[0];\n this._thumbnailElements = this.$el.find(SELECTORS.THUMBNAILS)[0];\n this.config = $.extend({}, DEFAULTS, this.$el.data(), config);\n\n if (this.$images.length > 1 && config.buttons) {\n this._addSlideButtons();\n }\n\n this._bindEvents();\n }\n\n _createClass(Imageslider, [{\n key: 'next',\n value: function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n }\n }, {\n key: 'prev',\n value: function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n }\n }, {\n key: 'nextWhenVisible',\n value: function nextWhenVisible() {\n if (!document.hidden) {\n this.next();\n }\n }\n }, {\n key: 'pause',\n value: function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n clearInterval(this._interval);\n this._interval = null;\n }\n }, {\n key: 'cycle',\n value: function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this.config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this.config.interval);\n }\n }\n }, {\n key: 'goTo',\n value: function goTo(index) {\n this._activeElement = this.$el.find(SELECTORS.ACTIVE_ITEM)[0];\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this.$images.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this.$images[index]);\n return;\n }\n }, {\n key: 'startTouchSlide',\n value: function startTouchSlide(event) {\n this.touchstartx = event.originalEvent.touches[0].pageX;\n }\n }, {\n key: 'moveTouchSlide',\n value: function moveTouchSlide(event) {\n this.touchmovex = event.originalEvent.touches[0].pageX;\n\n this.movex = -(this.touchstartx - this.touchmovex);\n\n this.moved = false;\n var activeItem = this.$el.find(SELECTORS.ACTIVE).children();\n activeItem.css('transform', 'translate3d(' + this.movex + 'px, 0, 0)');\n\n if (this.movex > SLIDE_WIDTH_PX) {\n this.prev();\n this.moved = true;\n setTimeout(function () {\n activeItem.css('transform', 'translate3d(0, 0, 0)');\n }, TOUCHEVENT_WAIT);\n } else if (this.movex < -SLIDE_WIDTH_PX) {\n this.next();\n this.moved = true;\n setTimeout(function () {\n activeItem.css('transform', 'translate3d(0, 0, 0)');\n }, TOUCHEVENT_WAIT);\n }\n }\n }, {\n key: 'endTouchSlide',\n value: function endTouchSlide() {\n if (!this.moved) {\n this.$el.find(SELECTORS.ACTIVE).children().css('transform', 'translate3d(0, 0, 0)');\n }\n }\n }, {\n key: 'dispose',\n value: function dispose() {\n this.$el.off(EVENT_KEY).removeData(DATA_KEY);\n\n this.$el = null;\n this.$images = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n this._thumbnailElements = null;\n }\n }, {\n key: '_addSlideButtons',\n value: function _addSlideButtons() {\n var sliderId = this.$el[0].id;\n var buttonHTML = '<a class=\"env-image-slider--prev\" role=\"button\" data-move=\"prev\" href=\"#' + sliderId + '\">\\n <i class=\"env-image-slider__previous-icon\"></i>\\n <span class=\"env-assistive-text\">Previous</span>\\n </a>\\n <a class=\"env-image-slider--next\" role=\"button\" data-move=\"next\" href=\"#' + sliderId + '\">\\n <i class=\"env-image-slider__next-icon\"></i>\\n <span class=\"env-assistive-text\">Next</span>\\n </a>';\n\n $('#' + sliderId).find(SELECTORS.INNER).append(buttonHTML);\n }\n }, {\n key: '_getItemByDirection',\n value: function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var activeIndex = this._getItemIndex(activeElement);\n var lastImageIndex = this.$images.length - 1;\n var isGoingToWrap = !isNextDirection && activeIndex === 0 || isNextDirection && activeIndex === lastImageIndex;\n\n if (isGoingToWrap && !this.config.wrap) {\n return activeElement;\n }\n\n var delta = isNextDirection ? 1 : -1;\n var itemIndex = (activeIndex + delta) % this.$images.length;\n\n return itemIndex === -1 ? this.$images[lastImageIndex] : this.$images[itemIndex];\n }\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this = this;\n\n if (this.config.keyboard) {\n this.$el.on(Events.KEYDOWN, function (event) {\n return _this._keydown(event);\n });\n }\n\n if (this.config.pause === 'hover' && this.config.imageSlider === 'cycle') {\n this.$el.on(Events.MOUSEENTER, function (event) {\n return _this.pause(event);\n }).on(Events.MOUSELEAVE, function (event) {\n return _this.cycle(event);\n });\n if (_util2.default.isTouch()) {\n this.$el.on(Events.TOUCHEND, function () {\n _this.pause();\n if (_this.touchTimeout) {\n clearTimeout(_this.touchTimeout);\n }\n _this.touchTimeout = setTimeout(function (event) {\n return _this.cycle(event);\n }, TOUCHEVENT_WAIT, _this.config.interval);\n });\n }\n }\n if (this.config.swipe) {\n this._bindTouchSlider();\n }\n }\n }, {\n key: '_bindTouchSlider',\n value: function _bindTouchSlider() {\n var _this2 = this;\n\n var container = this.$el.find(SELECTORS.INNER);\n container.on(Events.TOUCHSTART, function (event) {\n _this2.startTouchSlide(event);\n });\n\n container.on(Events.TOUCHMOVE, function (event) {\n _this2.moveTouchSlide(event);\n });\n\n container.on(Events.TOUCHEND, function () {\n _this2.endTouchSlide(event);\n });\n }\n }, {\n key: '_keydown',\n value: function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n default:\n return;\n }\n }\n }, {\n key: '_getItemIndex',\n value: function _getItemIndex(element) {\n return this.$images.index(element);\n }\n }, {\n key: '_triggerSlideEvent',\n value: function _triggerSlideEvent(targetElement, eventDirectionName) {\n var targetIndex = this._getItemIndex(targetElement);\n var fromIndex = this._getItemIndex(this.$el.find(SELECTORS.ACTIVE_ITEM)[0]);\n var slideEvent = $.Event(Events.SLIDE, {\n targetElement: targetElement,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n\n this.$el.trigger(slideEvent);\n\n return slideEvent;\n }\n }, {\n key: '_setActiveIndicatorElement',\n value: function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement).find(SELECTORS.ACTIVE_DOT).removeClass(ClassName.ACTIVE_DOT);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE_DOT);\n }\n } else if (this._thumbnailElements) {\n $(this._thumbnailElements).find(SELECTORS.ACTIVE).removeClass(ClassName.ACTIVE);\n\n var _nextIndicator = this._thumbnailElements.children[this._getItemIndex(element)].firstElementChild;\n\n if (_nextIndicator) {\n $(_nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n }\n }, {\n key: '_slide',\n value: function _slide(direction, element) {\n var _this3 = this;\n\n var activeElement = this.$el.find(SELECTORS.ACTIVE_ITEM)[0];\n var activeElementIndex = this._getItemIndex(activeElement);\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var directionalClassName = void 0;\n var orderClassName = void 0;\n var eventDirectionName = void 0;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n var $nextElement = $(nextElement);\n\n if (nextElement && $nextElement.hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n return;\n }\n\n this._isSliding = true;\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Events.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n var $activeElement = $(activeElement);\n\n if (this.$el.hasClass(ClassName.SLIDE)) {\n\n $nextElement.addClass(orderClassName);\n\n _util2.default.reflow(nextElement);\n\n $activeElement.addClass(directionalClassName);\n $nextElement.addClass(directionalClassName);\n\n $activeElement.one(_util2.default.getTransitionEndEvent(), function () {\n\n $nextElement.removeClass(directionalClassName + ' ' + orderClassName).addClass(ClassName.ACTIVE);\n\n $activeElement.removeClass(ClassName.ACTIVE + ' ' + orderClassName + ' ' + directionalClassName);\n\n _this3._isSliding = false;\n\n _this3.$el.trigger(slidEvent);\n });\n } else {\n $activeElement.removeClass(ClassName.ACTIVE);\n $nextElement.addClass(ClassName.ACTIVE);\n\n this._isSliding = false;\n this.$el.trigger(slideEvent);\n }\n }\n }], [{\n key: '_jQueryInterface',\n value: function _jQueryInterface(config) {\n var _this4 = this;\n\n return this.each(function () {\n var $this = $(_this4);\n var data = $this.data(DATA_KEY);\n\n var _config = $.extend({}, DEFAULTS, $this.data());\n\n if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object') {\n $.extend(_config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.move;\n\n if (!data) {\n data = new Imageslider(_this4, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.goTo(config);\n } else if (typeof action === 'string') {\n if (data[action] === undefined) {\n throw new Error('No method named \"' + action + '\"');\n }\n data[action]();\n } else if (_config.interval && _config.imageSlider === 'cycle') {\n data.pause();\n data.cycle();\n }\n });\n }\n }, {\n key: '_dataApiClickHandler',\n value: function _dataApiClickHandler(event) {\n // 'this' is current clicked element i.e. slide-right, slide-left or a indicator/thumbnail.\n var selector = _util2.default.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var $target = $(selector).eq(0);\n\n if (!$target.length || !$target.hasClass(ClassName.IMAGESLIDER)) {\n return;\n }\n\n var config = $.extend({}, $target.data(), $(this).data());\n var slideIndex = this.getAttribute('data-move-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Imageslider._jQueryInterface.call($target, config);\n\n if (slideIndex) {\n $target.data(DATA_KEY).goTo(slideIndex);\n }\n\n event.preventDefault();\n }\n }]);\n\n return Imageslider;\n }();\n\n $(document).on(Events.CLICK_DATA_API, SELECTORS.DATA_SLIDE, Imageslider._dataApiClickHandler);\n\n $(window).on(Events.LOAD_DATA_API, function () {\n var $imageSliders = $(SELECTORS.DATA_IMAGE_SLIDER);\n $imageSliders.each(function (i, slider) {\n var $slider = $(slider);\n Imageslider._jQueryInterface.call($slider, $slider.data());\n });\n });\n\n $.fn[NAME] = Imageslider._jQueryInterface;\n $.fn[NAME].Constructor = Imageslider;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return Imageslider._jQueryInterface;\n };\n\n return Imageslider;\n}(jQuery);\n\nexports.default = Imageslider;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Imageviewer = function ($) {\n\n var ANIMATION = 'env-animation-in-progress';\n var BACKDROP = 'env-image-viewer__backdrop';\n var BACKDROP_ANIMATION = 'env-image-viewer__backdrop--in';\n var DATA_KEY = 'env.image-viewer';\n var EVENT_KEY = '.' + DATA_KEY;\n var NAME = 'envImageviewer';\n var DATA_API_KEY = '.data-api';\n var NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEY = 27;\n var ARROW_LEFT_KEYCODE = 37;\n var ARROW_RIGHT_KEYCODE = 39;\n var SPINNER_TEMPLATE = '<div class=\"env-spinner\">\\n <div class=\"env-rect1\"></div>\\n <div class=\"env-rect2\"></div>\\n <div class=\"env-rect3\"></div>\\n <div class=\"env-rect4\"></div>\\n <div class=\"env-rect5\"></div>\\n </div>';\n\n var SELECTORS = {\n ACTIVE_DOT: '.env-is-active',\n DATA_MOVE_TO: '[data-move-to]',\n DATA_MOVE: '[data-move]',\n DATA_IMAGE_VIEWER: '[data-image-viewer]',\n IMAGES: '.env-image-viewer__images',\n INDICATORS: '.env-image-viewer__indicators',\n DATA_SLIDE_TO: '[data-slide-to]',\n SPINNER: '.env-spinner'\n };\n\n var ClassName = {\n ACTIVE_DOT: 'env-is-active',\n HIDDEN: 'env-image-viewer--hidden',\n SPINNER_HIDE: 'env-spinner--hide'\n };\n\n var Events = {\n CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,\n TOUCHEND: 'touchend' + EVENT_KEY,\n TOUCHMOVE: 'touchmove' + EVENT_KEY,\n TOUCHSTART: 'touchstart' + EVENT_KEY\n };\n\n var Imageviewer = function () {\n function Imageviewer(element, $image) {\n _classCallCheck(this, Imageviewer);\n\n this.$el = $(element);\n this.$images = this.$el.find(SELECTORS.IMAGES);\n this._isShown = false;\n\n this.config = $.extend({}, this.$el.data());\n this.config.index = this.$images.index($image[0]);\n }\n\n _createClass(Imageviewer, [{\n key: 'next',\n value: function next() {\n this.show(this._getNextItemIndex());\n }\n }, {\n key: 'prev',\n value: function prev() {\n this.show(this._getPrevItemIndex());\n }\n }, {\n key: 'show',\n value: function show(index) {\n this.config.index = Number(index);\n var image = $(this.$images[index])[0];\n var href = image.getAttribute('href');\n\n if (this._isShown) {\n $(SELECTORS.SPINNER).removeClass(ClassName.SPINNER_HIDE);\n this.$btnContainer.addClass(ClassName.HIDDEN);\n\n var $downloadingImage = this._loadImage(href);\n\n this.$imgContainer.html($downloadingImage);\n this._setActiveIndicatorElement();\n } else {\n this.$modal = $('<div/>', {\n class: 'env-image-viewer__modal'\n });\n\n this.$btnContainer = $('<div/>', {\n class: 'env-image-viewer__dialog'\n });\n\n this.$imgContainer = $('<div/>', {\n class: 'env-image-viewer__modal-container'\n });\n\n this.$modal.append(this.$btnContainer);\n this.$btnContainer.append(this.$imgContainer);\n this.$modal.appendTo(document.body);\n\n this.$btnContainer.append(this._getIndicators());\n\n if (this.$images.length > 1) {\n this.$btnContainer.append(this._getButtons());\n }\n\n this.$btnContainer.addClass(ClassName.HIDDEN);\n var _$downloadingImage = this._loadImage(href);\n\n this.$imgContainer.html(_$downloadingImage);\n\n this._isShown = true;\n\n $('body').css('overflow', 'hidden');\n\n this._bindContainerEvents();\n this._bindEvents();\n this._showBackdrop();\n\n $(SPINNER_TEMPLATE).prependTo(this.$modal);\n }\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n\n var removeBackdropCallback = function removeBackdropCallback() {\n _this.$backdrop.remove();\n _this.$modal.remove();\n _this.$btnContainer.remove();\n _this.$imgContainer.remove();\n $('body').css('overflow', 'scroll');\n };\n\n this.$backdrop.one(_util2.default.getTransitionEndEvent(), removeBackdropCallback).removeClass(BACKDROP_ANIMATION);\n\n this._isShown = false;\n }\n }, {\n key: '_loadImage',\n value: function _loadImage(href) {\n var _this2 = this;\n\n var $downloadingImage = $('<img>');\n\n $downloadingImage.addClass('env-image-viewer__img').attr({\n tabindex: '-1',\n src: href\n }).on('load', function () {\n\n var imageHeight = $downloadingImage.height();\n var windowHeight = window.innerHeight;\n var heightModifier = 0.8;\n\n if (windowHeight < imageHeight) {\n $downloadingImage.css({\n 'max-height': windowHeight * heightModifier\n });\n }\n\n $(SELECTORS.SPINNER).addClass(ClassName.SPINNER_HIDE);\n _this2.$btnContainer.removeClass(ClassName.HIDDEN);\n _this2.$imgContainer.children()[0].focus();\n });\n\n return $downloadingImage;\n }\n }, {\n key: '_bindContainerEvents',\n value: function _bindContainerEvents() {\n var _this3 = this;\n\n this.$btnContainer.on(Events.CLICK_DATA_API, SELECTORS.DATA_MOVE, function (e) {\n e.preventDefault();\n\n if ($(e.currentTarget).data('move') === 'next') {\n _this3.next();\n } else {\n _this3.prev();\n }\n });\n\n this.$btnContainer.on(Events.CLICK_DATA_API, SELECTORS.DATA_MOVE_TO, function (e) {\n var viewerIndex = e.currentTarget.getAttribute('data-move-to');\n\n if (viewerIndex) {\n _this3.show(viewerIndex);\n }\n });\n }\n }, {\n key: '_getButtons',\n value: function _getButtons() {\n var buttonHTML = '<a class=\"env-image-viewer--prev\" role=\"button\" data-move=\"prev\">\\n <i class=\"env-image-viewer__prev-icon\"></i>\\n <span class=\"env-assistive-text\">Previous</span>\\n </a>\\n <a class=\"env-image-viewer--next\" role=\"button\" data-move=\"next\">\\n <i class=\"env-image-viewer__next-icon\"></i>\\n <span class=\"env-assistive-text\">Next</span>\\n </a>';\n\n return buttonHTML;\n }\n }, {\n key: '_getIndicators',\n value: function _getIndicators() {\n var indicatorItems = this._getIndicatorItems();\n return '<ol class=\"env-image-viewer__indicators\">\\n ' + indicatorItems + '\\n </ol>';\n }\n }, {\n key: '_getIndicatorItems',\n value: function _getIndicatorItems() {\n var activeElementIndex = this.config.index;\n\n return this.$images.map(function (index) {\n var isActive = index === activeElementIndex;\n return '<li data-move-to=\"' + index + '\" class=\"' + (isActive ? 'env-is-active' : '') + '\"></li>';\n }).get().join('');\n }\n }, {\n key: '_showBackdrop',\n value: function _showBackdrop() {\n var _this4 = this;\n\n this.$backdrop = $('<div/>', {\n class: BACKDROP\n });\n\n this.$modal.on(Events.CLICK_DATA_API, function (event) {\n\n if (_this4.$backdrop.hasClass(ANIMATION)) {\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (!_this4._isShown) {\n return;\n }\n\n _this4.hide();\n });\n\n this.$backdrop.appendTo(document.body);\n\n this.$backdrop.one(_util2.default.getAnimationEndEvent(), this._removeBackdropAnimation).addClass(BACKDROP_ANIMATION + ' ' + ANIMATION);\n }\n }, {\n key: '_removeBackdropAnimation',\n value: function _removeBackdropAnimation(e) {\n $(e.currentTarget).removeClass(ANIMATION);\n }\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this5 = this;\n\n this.$imgContainer.on('keydown', function (event) {\n return _this5._keydown(event);\n });\n }\n }, {\n key: '_keydown',\n value: function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n case ESCAPE_KEY:\n event.preventDefault();\n if (!this.$backdrop.hasClass(ANIMATION)) {\n this.hide();\n }\n break;\n default:\n return;\n }\n }\n }, {\n key: '_getNextItemIndex',\n value: function _getNextItemIndex() {\n return this.config.index === this.$images.length - 1 ? 0 : this.config.index + 1;\n }\n }, {\n key: '_getPrevItemIndex',\n value: function _getPrevItemIndex() {\n return this.config.index === 0 ? this.$images.length - 1 : this.config.index - 1;\n }\n }, {\n key: '_setActiveIndicatorElement',\n value: function _setActiveIndicatorElement() {\n this._indicatorsElement = this.$btnContainer.find(SELECTORS.INDICATORS)[0];\n if (this.$images.length > 0) {\n this.$btnContainer.find(SELECTORS.ACTIVE_DOT).removeClass(ClassName.ACTIVE_DOT);\n\n var indicator = this.$btnContainer.find(SELECTORS.INDICATORS).children()[this.config.index];\n\n if (indicator) {\n $(indicator).addClass(ClassName.ACTIVE_DOT);\n }\n }\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery($image) {\n var _this6 = this;\n\n return this.each(function () {\n var data = new Imageviewer(_this6, $image);\n data.show(data.config.index);\n });\n }\n }]);\n\n return Imageviewer;\n }();\n\n $(document).on(Events.CLICK_DATA_API, SELECTORS.DATA_IMAGE_VIEWER, function (e) {\n e.preventDefault();\n var $target = $(e.target);\n\n if (!$target.is('img')) {\n return;\n }\n\n $(this).envImageviewer($target.parent());\n });\n\n $.fn[NAME] = Imageviewer._jQuery;\n $.fn[NAME].Constructor = Imageviewer;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return Imageviewer._jQuery;\n };\n\n return Imageviewer;\n}(jQuery);\n\nexports.default = Imageviewer;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ModalDialog = function ($) {\n\n var ANIMATION = 'env-animation-in-progress';\n var BACKDROP = 'env-modal-dialog__backdrop';\n var BACKDROP_ANIMATION = 'env-modal-dialog__backdrop--in';\n var DATA_KEY = 'env.modal-dialog';\n var DISMISS_SELECTOR = '[data-modal-dialog-dismiss]';\n var ESCAPE_KEY = 27;\n var FOCUSIN = 'focusin.env-modal-dialog';\n var MODIFIER_BASE = 'env-modal-dialog--';\n var NAME = 'envDialog';\n var NO_CONFLICT = $.fn[NAME];\n var SELECTOR = '[data-modal-dialog]';\n var SHOW = 'show';\n var TAB_KEY = 9;\n\n var FOCUSABLE_ELEMENTS_SELECTOR = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable]';\n\n var EVENTS = {\n HIDE: 'hide.env-modal-dialog',\n HIDDEN: 'hidden.env-modal-dialog',\n SHOW: 'show.env-modal-dialog',\n SHOWN: 'shown.env-modal-dialog'\n };\n\n var ModalDialog = function () {\n function ModalDialog(element) {\n _classCallCheck(this, ModalDialog);\n\n this.el = element;\n this.$el = $(element);\n this._isShown = false;\n }\n\n _createClass(ModalDialog, [{\n key: 'toggle',\n value: function toggle() {\n return this._isShown ? this.hide() : this.show();\n }\n }, {\n key: 'show',\n value: function show() {\n var _this = this;\n\n if (this._isShown) {\n return;\n }\n\n _util2.default.reflow(this.el); // Used to force reflow\n\n var showEvent = $.Event(EVENTS.SHOW, {});\n\n this.$el.trigger(showEvent);\n\n var shownEvent = $.Event(EVENTS.SHOWN, {});\n\n this.$el.one(_util2.default.getTransitionEndEvent(), function () {\n _this.$el.trigger(shownEvent);\n }).addClass(MODIFIER_BASE + SHOW).removeAttr('aria-hidden').css('opacity', 1);\n\n this._showBackdrop();\n\n this._isShown = true;\n this.el.focus();\n\n $('body').css('overflow', 'hidden');\n\n this._bindEvents();\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this2 = this;\n\n if (!this._isShown) {\n return;\n }\n\n var hideModalCallback = function hideModalCallback() {\n _this2.$el.removeClass(MODIFIER_BASE + SHOW);\n var hiddenEvent = $.Event(EVENTS.HIDDEN, {});\n _this2.$el.trigger(hiddenEvent);\n };\n\n var removeBackdropCallback = function removeBackdropCallback() {\n _this2.$backdrop.remove();\n $('body').css('overflow', '');\n };\n\n var hideEvent = $.Event(EVENTS.HIDE, {});\n\n this.$el.trigger(hideEvent);\n\n this.$el.one(_util2.default.getTransitionEndEvent(), hideModalCallback).attr('aria-hidden', 'true').css('opacity', 0).off('click', DISMISS_SELECTOR);\n\n this.$backdrop.one(_util2.default.getTransitionEndEvent(), removeBackdropCallback).removeClass(BACKDROP_ANIMATION);\n\n this._isShown = false;\n this._unbindEvents();\n }\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this3 = this;\n\n this.$el.on('click', DISMISS_SELECTOR, function (event) {\n return _this3.hide(event);\n });\n\n $(document).off(FOCUSIN).one(FOCUSIN, function (event) {\n if (document !== event.target && _this3.el !== event.target && !_this3.$el.has(event.target).length) {\n _this3.el.focus();\n }\n });\n\n var focusableElements = this.$el.find(FOCUSABLE_ELEMENTS_SELECTOR);\n var firstElement = focusableElements[0];\n var lastElement = focusableElements[focusableElements.length - 1];\n\n this.$el.on('keydown', function (e) {\n if (e.which === TAB_KEY) {\n if (e.shiftKey) {\n if (e.target === firstElement) {\n e.preventDefault();\n lastElement.focus();\n }\n } else if (e.target === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n\n if (e.which === ESCAPE_KEY) {\n _this3.hide();\n }\n });\n }\n }, {\n key: '_unbindEvents',\n value: function _unbindEvents() {\n this.$el.off('click keydown');\n $(document).off(FOCUSIN);\n }\n }, {\n key: '_showBackdrop',\n value: function _showBackdrop() {\n var _this4 = this;\n\n this.$backdrop = $('<div/>', {\n class: BACKDROP\n });\n\n this.$el.on('click', function (event) {\n if (_this4.$backdrop.hasClass(ANIMATION)) {\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (!_this4._isShown) {\n return;\n }\n\n _this4.hide();\n });\n\n this.$backdrop.appendTo(document.body);\n\n this.$backdrop.one(_util2.default.getAnimationEndEvent(), this._removeBackdropAnimation).addClass(BACKDROP_ANIMATION + ' ' + ANIMATION);\n }\n }, {\n key: '_removeBackdropAnimation',\n value: function _removeBackdropAnimation(e) {\n $(e.currentTarget).removeClass(ANIMATION);\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery(action) {\n var _this5 = this;\n\n return this.each(function () {\n var $this = $(_this5);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new ModalDialog(_this5);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof action === 'string') {\n var method = data[action];\n if (method === undefined) {\n throw new Error('No method named \"' + action + '\"');\n }\n method.call(data);\n return;\n }\n\n data.show();\n });\n }\n }]);\n\n return ModalDialog;\n }();\n\n $.fn[NAME] = ModalDialog._jQuery;\n $.fn[NAME].Constructor = ModalDialog;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return ModalDialog._jQuery;\n };\n\n $(document).on('click', SELECTOR, function (e) {\n e.preventDefault();\n\n var $target = $($(this).data('target'));\n\n $target[NAME]();\n });\n\n return ModalDialog;\n}(jQuery);\n\nexports.default = ModalDialog;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar _popper = __webpack_require__(8);\n\nvar _popper2 = _interopRequireDefault(_popper);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Popover = function ($) {\n\n var NAME = 'envPopover';\n var IDENTIFIER = 'env.popover';\n var EVENT_NAMESPACE = '.' + IDENTIFIER;\n var NO_CONFLICT = $.fn[NAME];\n\n var attachmentMapping = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right'\n };\n\n var DEFAULTS = {\n clickOutside: false,\n constraints: [],\n container: 'body',\n content: '',\n delay: 0,\n escapeContent: true,\n placement: 'top',\n template: '<div class=\"env-popover\" role=\"tooltip\">\\n <div class=\"env-popover__arrow\"></div>\\n <div class=\"env-popover__header\">\\n <h4 class=\"env-text env-popover__header__title\"></h4>\\n </div>\\n <div class=\"env-popover__content env-text env-p-around--small\"></div>\\n </div>',\n title: '',\n trigger: 'click'\n };\n\n var Popover = function () {\n function Popover(element, config) {\n _classCallCheck(this, Popover);\n\n this.el = element;\n this.$el = $(this.el);\n this.config = $.extend({}, DEFAULTS, this.$el.data(), config);\n\n this.bindEvents();\n }\n\n _createClass(Popover, [{\n key: 'bindEvents',\n value: function bindEvents() {\n var _this = this;\n\n var triggers = this.config.trigger.split(' ');\n\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n _this.$el.on(_this.config.trigger + EVENT_NAMESPACE, function () {\n if (_this.isShowing) {\n _this.hide();\n } else {\n _this.show();\n }\n });\n } else {\n var hoverTrigger = trigger === 'hover';\n var inEvent = hoverTrigger ? 'mouseenter' : 'focusin';\n var outEvent = hoverTrigger ? 'mouseleave' : 'focusout';\n\n _this.$el.on(inEvent + EVENT_NAMESPACE, function () {\n if (_this.config.delay > 0) {\n if (_this.hidetimeout) {\n clearTimeout(_this.hidetimeout);\n }\n if (_this.showtimeout) {\n clearTimeout(_this.showtimeout);\n }\n if (!_this.isShowing) {\n _this.showtimeout = setTimeout(function () {\n _this.show();\n }, _this.config.delay);\n }\n } else if (!_this.isShowing) {\n _this.show();\n }\n }).on(outEvent + EVENT_NAMESPACE, function () {\n if (_this.config.delay > 0) {\n _this.hoverPopover();\n if (_this.showtimeout) {\n clearTimeout(_this.showtimeout);\n }\n if (_this.isShowing) {\n _this.hidetimeout = setTimeout(function () {\n _this.hide();\n }, _this.config.delay);\n }\n } else if (_this.isShowing) {\n _this.hide();\n }\n });\n }\n });\n }\n }, {\n key: 'hoverPopover',\n value: function hoverPopover() {\n var _this2 = this;\n\n var $popoverElement = this.getPopoverElement();\n\n $popoverElement.off('mouseenter').on('mouseenter', function () {\n if (_this2.hidetimeout) {\n clearTimeout(_this2.hidetimeout);\n }\n if (_this2.showtimeout) {\n clearTimeout(_this2.showtimeout);\n }\n if (!_this2.isShowing) {\n _this2.showtimeout = setTimeout(function () {\n _this2.show();\n }, _this2.config.delay);\n }\n });\n $popoverElement.off('mouseleave').on('mouseleave', function () {\n if (_this2.showtimeout) {\n clearTimeout(_this2.showtimeout);\n }\n if (_this2.isShowing) {\n _this2.hidetimeout = setTimeout(function () {\n _this2.hide();\n }, _this2.config.delay);\n }\n });\n }\n }, {\n key: 'getPopoverElement',\n value: function getPopoverElement() {\n return this.$popoverElement = this.$popoverElement || $(this.config.template);\n }\n }, {\n key: 'setText',\n value: function setText($popoverElement, selector, text) {\n $popoverElement.find(selector)[this.config.escapeContent ? 'text' : 'html'](text);\n }\n }, {\n key: 'setTitle',\n value: function setTitle($popoverElement) {\n this.setText($popoverElement, '.env-popover__header__title', this.config.title);\n }\n }, {\n key: 'setContent',\n value: function setContent($popoverElement) {\n this.setText($popoverElement, '.env-popover__content', this.config.content);\n }\n }, {\n key: 'updateConfig',\n value: function updateConfig(config) {\n Object.assign(this.config, config);\n return this;\n }\n }, {\n key: 'render',\n value: function render() {\n var $popoverElement = this.getPopoverElement();\n\n this.setTitle($popoverElement);\n this.setContent($popoverElement);\n this.setArrowPosition($popoverElement);\n }\n }, {\n key: 'setArrowPosition',\n value: function setArrowPosition($popoverElement) {\n $popoverElement.find('.env-popover__arrow').addClass('env-popover__arrow--' + this.config.placement);\n }\n }, {\n key: 'hide',\n value: function hide() {\n var $popoverElement = this.getPopoverElement();\n\n $popoverElement.detach();\n\n if (this.config.clickOutside) {\n $('body').off(this.config.trigger + EVENT_NAMESPACE);\n }\n\n this.isShowing = false;\n }\n }, {\n key: '_cleanTipClass',\n value: function _cleanTipClass() {\n this.$popoverElement.find('.env-popover__arrow').removeClass(function (index, oldClassNames) {\n var modifier = oldClassNames.replace(/env-popover__arrow/g, '').trim();\n\n return 'env-popover__arrow' + modifier;\n });\n }\n }, {\n key: '_handlePopperPlacementChange',\n value: function _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n this._addAttachmentClass(attachmentMapping[data.placement]);\n }\n }, {\n key: '_addAttachmentClass',\n value: function _addAttachmentClass(className) {\n this.$popoverElement.find('.env-popover__arrow').addClass('env-popover__arrow--' + className);\n }\n }, {\n key: 'show',\n value: function show() {\n var _this3 = this;\n\n this.render();\n\n var $popoverElement = this.getPopoverElement();\n\n $('body').append($popoverElement);\n\n this._popper = new _popper2.default(this.el, $popoverElement[0], {\n placement: attachmentMapping[this.config.placement],\n modifiers: {\n flip: {\n behavior: 'flip'\n },\n arrow: {\n element: '.env-popover__arrow'\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this3._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this3._handlePopperPlacementChange(data);\n }\n });\n\n this._popper.update();\n\n if (this.config.clickOutside) {\n $('body').on(this.config.trigger + EVENT_NAMESPACE, this.clickOutsideHandler.bind(this));\n }\n\n this.isShowing = true;\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.hide();\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this.$popoverElement = undefined;\n this._popper = undefined;\n this.isShowing = false;\n this.$el.off();\n this.$el.removeData(IDENTIFIER);\n }\n }, {\n key: 'clickOutsideHandler',\n value: function clickOutsideHandler(e) {\n var $target = $(e.target);\n\n if (this.isShowing && !$target.is(this.$el) && !$target.closest(this.$popoverElement).length) {\n this.hide();\n }\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(IDENTIFIER);\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null);\n $this.data(IDENTIFIER, data);\n }\n\n if (typeof config === 'string') {\n var method = data[config];\n\n if (!method) {\n throw new Error('Invalid method name \"' + config + '\"');\n }\n\n method.call(data);\n }\n });\n }\n }]);\n\n return Popover;\n }();\n\n $.fn[NAME] = Popover._jQuery;\n $.fn[NAME].Constructor = Popover;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return Popover._jQuery;\n };\n\n return Popover;\n}(jQuery);\n\nexports.default = Popover;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global) {/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.12.5\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 */\nvar nativeHints = ['native code', '[object MutationObserverConstructor]'];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @method\n * @memberof Popper.Utils\n * @argument {Function | undefined} fn the function to check\n * @returns {Boolean}\n */\nvar isNative = (function (fn) {\n return nativeHints.some(function (hint) {\n return (fn || '').toString().indexOf(hint) > -1;\n });\n});\n\nvar isBrowser = typeof window !== 'undefined';\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (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\nfunction microtaskDebounce(fn) {\n var scheduled = false;\n var i = 0;\n var elem = document.createElement('span');\n\n // MutationObserver provides a mechanism for scheduling microtasks, which\n // are scheduled *before* the next task. This gives us a way to debounce\n // a function but ensure it's called *before* the next paint.\n var observer = new MutationObserver(function () {\n fn();\n scheduled = false;\n });\n\n observer.observe(elem, { attributes: true });\n\n return function () {\n if (!scheduled) {\n scheduled = true;\n elem.setAttribute('x-index', i);\n i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n }\n };\n}\n\nfunction 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\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nvar supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);\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*/\nvar debounce = supportsNativeMutationObserver ? 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 */\nfunction 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 */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.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 */\nfunction 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 */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) {\n return window.document.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\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\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 */\nfunction getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element && element.offsetParent;\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return window.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\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\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 */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\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 */\nfunction 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 window.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\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 */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = window.document.documentElement;\n var scrollingElement = window.document.scrollingElement || html;\n return scrollingElement[upperSide];\n }\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 */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\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\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return +styles['border' + sideA + 'Width'].split('px')[0] + +styles['border' + sideB + 'Width'].split('px')[0];\n}\n\n/**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\nvar isIE10 = undefined;\n\nvar isIE10$1 = function () {\n if (isIE10 === undefined) {\n isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n }\n return isIE10;\n};\n\nfunction 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\nfunction getWindowSizes() {\n var body = window.document.body;\n var html = window.document.documentElement;\n var computedStyle = isIE10$1() && window.getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar 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\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\n\n\n\n\nvar defineProperty = function (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\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\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 */\nfunction 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 */\nfunction 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\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\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\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction 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\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = +styles.borderTopWidth.split('px')[0];\n var borderLeftWidth = +styles.borderLeftWidth.split('px')[0];\n\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 = +styles.marginTop.split('px')[0];\n var marginLeft = +styles.marginLeft.split('px')[0];\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var html = window.document.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\n var scrollTop = getScroll(html);\n var scrollLeft = getScroll(html, 'left');\n\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\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 */\nfunction 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 */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = { top: 0, left: 0 };\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(popper));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = window.document.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = window.document.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\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\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\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 */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\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\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\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\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\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 */\nfunction 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 */\nfunction getOuterSizes(element) {\n var styles = window.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 */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\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 */\nfunction 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\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\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 */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\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 */\nfunction findIndex(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(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 */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier.function) {\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier.function || modifier.fn;\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\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 */\nfunction 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 */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\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 window.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 */\nfunction 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\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\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? window : scrollParent;\n target.addEventListener(event, callback, { 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 */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n window.addEventListener('resize', state.updateBound, { passive: true });\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\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 */\nfunction 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 */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n window.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 */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n window.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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nfunction 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\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: '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 */\nfunction 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(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\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\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\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\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 */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\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 */\nfunction arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n 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\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\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\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 popperMarginSide = getStyleComputedProperty(data.instance.popper, 'margin' + sideCapitalized).replace('px', '');\n var sideValue = center - getClientRect(data.offsets.popper)[side] - popperMarginSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {};\n data.offsets.arrow[side] = Math.round(sideValue);\n data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\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 */\nfunction 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.<br />\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.<br />\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 */\nvar 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`\nvar 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 */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\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\nvar 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 */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n 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\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\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\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\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 */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\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\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\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 */\nfunction 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\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\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 */\nfunction 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(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\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 */\nfunction 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\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\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 */\nfunction 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\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\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\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\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 */\nfunction 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\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\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 */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\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\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\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 */\nfunction 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\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\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.<br />\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 */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\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.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\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 */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: 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\nvar 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\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\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.jquery ? reference[0] : reference;\n this.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\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\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\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 /**\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 }]);\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.<br />\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\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popper);\n//# sourceMappingURL=popper.js.map\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(9)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RangeSlider = function ($) {\n\n var HANDLE_INDEX = 'range-handle-index';\n var HANDLES_SELECTOR = '.env-range-slider__handle';\n var VALUE_HOLDERS_SELECTOR = '.env-range-slider__values__value';\n var RANGE_SELECTOR = '.env-range-slider__range';\n var TOUCH_MODIFIER = 'env-range-slider--touch';\n var IDENTIFIER = 'env.range-slider';\n var NAME = 'envRangeSlider';\n var NO_CONFLICT = $.fn[NAME];\n var KEY_RIGHT = 39;\n var KEY_LEFT = 37;\n var KEY_DOWN = 40;\n var KEY_UP = 38;\n\n var EVENTS = {\n SLIDE: 'slide',\n STOP: 'slidestop'\n };\n\n var DEFAULTS = {\n min: 0,\n max: 100,\n step: 1,\n values: [0, 0],\n visibleValues: true\n };\n\n var RangeSlider = function () {\n function RangeSlider(element, config) {\n _classCallCheck(this, RangeSlider);\n\n this.config = $.extend({}, DEFAULTS, config);\n this.$document = $(document);\n this.el = element;\n this.$el = $(element);\n this.handles = this.$el.find(HANDLES_SELECTOR);\n this.$range = this.$el.find(RANGE_SELECTOR);\n this.isTouch = _util2.default.isTouch();\n\n if (this.config.visibleValues) {\n this.valueHolders = this.$el.find(VALUE_HOLDERS_SELECTOR);\n }\n\n this.handleEvents = {\n mousedown: this._initSlide.bind(this),\n touchstart: this._initSlide.bind(this),\n keydown: this._initKeySlide.bind(this),\n keyup: this._stopKeySlide.bind(this)\n };\n }\n\n _createClass(RangeSlider, [{\n key: 'initialize',\n value: function initialize() {\n this._setupHandles();\n this._refreshRange();\n this._bindEvents();\n\n if (this.isTouch) {\n this.$el.addClass(TOUCH_MODIFIER);\n }\n }\n }, {\n key: 'values',\n value: function values(_values) {\n if ($.isArray(_values)) {\n for (var i = 0; i < _values.length; i += 1) {\n this.config.values[i] = this._trimAlignValue(_values[i]);\n }\n this._refreshRange();\n }\n }\n }, {\n key: '_setupHandles',\n value: function _setupHandles() {\n this.handles.each(function (i, handle) {\n $(handle).data(HANDLE_INDEX, i);\n });\n }\n }, {\n key: '_refreshRange',\n value: function _refreshRange() {\n var _this = this;\n\n var lastValPercent = void 0;\n var valPercent = void 0;\n var val = void 0;\n\n this.handles.each(function (i, handle) {\n val = _this._getValue(i);\n /* eslint-disable no-magic-numbers */\n valPercent = (val - _this.config.min) / (_this.config.max - _this.config.min) * 100;\n /* eslint-enable no-magic-numbers */\n $(handle).css('left', valPercent + '%');\n\n if (i === 0) {\n _this.$range.css('left', valPercent + '%');\n\n if (_this.config.visibleValues) {\n _this.valueHolders.eq(i).text(val);\n }\n } else {\n _this.$range.css('width', valPercent - lastValPercent + '%');\n\n if (_this.config.visibleValues) {\n _this.valueHolders.eq(i).text(val);\n }\n }\n\n lastValPercent = valPercent;\n });\n }\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n this.handles.off();\n this.handles.on(this.handleEvents);\n }\n }, {\n key: '_initSlide',\n value: function _initSlide(e) {\n var _this2 = this;\n\n var position = this._getPosition(e);\n var normValue = this._normValueFromMouse(position);\n var distance = this.config.max - this.config.min + 1;\n var $closestHandle = void 0;\n var index = void 0;\n var val = void 0;\n var thisDistance = void 0;\n\n if (e.type === 'touchstart') {\n this.$document.on('touchmove.' + IDENTIFIER, this._handleSlide.bind(this));\n this.$document.one('touchend.' + IDENTIFIER, this._stopSlide.bind(this));\n } else {\n this.$document.on('mousemove.' + IDENTIFIER, this._handleSlide.bind(this));\n this.$document.one('mouseup.' + IDENTIFIER, this._stopSlide.bind(this));\n }\n\n this.handles.each(function (i, handle) {\n val = _this2._getValue(i);\n thisDistance = Math.abs(normValue - val);\n if (distance > thisDistance || distance === thisDistance && (i === _this2._lastChangedValue || val === _this2.config.min)) {\n distance = thisDistance;\n $closestHandle = $(handle);\n index = i;\n }\n });\n\n this._handleIndex = index;\n\n $closestHandle.trigger('focus');\n\n var offset = $closestHandle.offset();\n /* eslint-disable no-magic-numbers */\n this._clickOffset = {\n left: position.x - offset.left - $closestHandle.width() / 2,\n top: position.y - offset.top - $closestHandle.height() / 2 - (parseInt($closestHandle.css('borderTopWidth'), 10) || 0) - (parseInt($closestHandle.css('borderBottomWidth'), 10) || 0) + (parseInt($closestHandle.css('marginTop'), 10) || 0)\n };\n /* eslint-enable no-magic-numbers */\n\n this._slide(e, index, normValue);\n }\n }, {\n key: '_handleSlide',\n value: function _handleSlide(e) {\n var normValue = this._normValueFromMouse(this._getPosition(e));\n this._slide(e, this._handleIndex, normValue);\n\n return false;\n }\n }, {\n key: '_slide',\n value: function _slide(e, index, newVal) {\n var otherVal = this._getValue(index ? 0 : 1);\n var currentValue = this._getValue(index);\n var newValues = this._getValues();\n newVal = index === 0 ? Math.min(otherVal, newVal) : Math.max(otherVal, newVal);\n newValues[index] = newVal;\n\n if (newVal === currentValue) {\n return;\n }\n\n this._trigger(EVENTS.SLIDE, e, {\n values: newValues\n });\n\n this._setValue(index, newVal);\n }\n }, {\n key: '_stopSlide',\n value: function _stopSlide(e) {\n this.$document.off('mousemove.' + IDENTIFIER + ' touchmove.' + IDENTIFIER);\n\n this._trigger(EVENTS.STOP, e, {\n values: this._getValues()\n });\n\n this._handleIndex = null;\n this._clickOffset = null;\n\n return false;\n }\n }, {\n key: '_initKeySlide',\n value: function _initKeySlide(e) {\n switch (e.keyCode) {\n case KEY_UP:\n case KEY_DOWN:\n case KEY_LEFT:\n case KEY_RIGHT:\n e.preventDefault();\n if (!this._keySliding) {\n this._keySliding = true;\n }\n break;\n default:\n return;\n }\n\n var index = $(e.target).data(HANDLE_INDEX);\n var curVal = this._getValue(index);\n var newVal = void 0;\n\n switch (event.keyCode) {\n case KEY_UP:\n case KEY_RIGHT:\n if (curVal === this.config.max) {\n return;\n }\n newVal = this._trimAlignValue(curVal + this.config.step);\n break;\n case KEY_DOWN:\n case KEY_LEFT:\n if (curVal === this.config.min) {\n return;\n }\n newVal = this._trimAlignValue(curVal - this.config.step);\n break;\n default:\n }\n\n this._slide(e, index, newVal);\n }\n }, {\n key: '_stopKeySlide',\n value: function _stopKeySlide(e) {\n if (this._keySliding) {\n this._keySliding = false;\n this._trigger(EVENTS.STOP, e, {\n values: this._getValues()\n });\n }\n }\n }, {\n key: '_normValueFromMouse',\n value: function _normValueFromMouse(position) {\n var pixelTotal = this.el.outerWidth();\n var valueTotal = this.config.max - this.config.min;\n var pixelMouse = position.x - this.el.offset().left - (this._clickOffset ? this._clickOffset.left : 0);\n var percentMouse = pixelMouse / pixelTotal;\n\n if (percentMouse > 1) {\n percentMouse = 1;\n }\n\n if (percentMouse < 0) {\n percentMouse = 0;\n }\n\n var valueMouse = this.config.min + percentMouse * valueTotal;\n\n return this._trimAlignValue(valueMouse);\n }\n }, {\n key: '_getPosition',\n value: function _getPosition(e) {\n var pos = {};\n\n if (this.isTouch) {\n var touches = e.originalEvent.touches[0];\n pos.x = touches.pageX;\n pos.y = touches.pageY;\n } else {\n pos.x = e.pageX;\n pos.y = e.pageY;\n }\n\n return pos;\n }\n }, {\n key: '_trimAlignValue',\n value: function _trimAlignValue(val) {\n if (val <= this.config.min) {\n return this.config.min;\n }\n\n if (val >= this.config.max) {\n return this.config.max;\n }\n\n var step = this.config.step;\n var valModStep = (val - this.config.min) % step;\n var alignValue = val - valModStep;\n /* eslint-disable no-magic-numbers */\n if (Math.abs(valModStep) * 2 >= step) {\n alignValue += valModStep > 0 ? step : -step;\n }\n\n return parseFloat(alignValue.toFixed(5));\n /* eslint-enable no-magic-numbers */\n }\n }, {\n key: '_getValues',\n value: function _getValues() {\n return this.config.values.slice();\n }\n }, {\n key: '_getValue',\n value: function _getValue(index) {\n return this.config.values[index];\n }\n }, {\n key: '_setValue',\n value: function _setValue(index, newValue) {\n this.config.values[index] = this._trimAlignValue(newValue);\n this._refreshRange();\n }\n }, {\n key: '_trigger',\n value: function _trigger(type, e, data) {\n var el = this.el[0];\n var cb = this.config[type];\n\n e = $.Event(e);\n e.type = type;\n e.target = el;\n this.$el.trigger(e, data);\n\n if (cb) {\n cb.call(el, e, data);\n }\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery(config) {\n var _this3 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return this.each(function () {\n var $this = $(_this3);\n var rangeSlider = $this.data(IDENTIFIER);\n\n if (!rangeSlider) {\n rangeSlider = new RangeSlider(_this3, config);\n $this.data(IDENTIFIER, rangeSlider);\n }\n\n if (typeof config === 'string') {\n var method = rangeSlider[config];\n if (method === undefined) {\n throw new Error('No method named \"' + config + '\"');\n }\n\n method.call.apply(method, [rangeSlider].concat(args));\n }\n\n rangeSlider.initialize();\n });\n }\n }]);\n\n return RangeSlider;\n }();\n\n $.fn[NAME] = RangeSlider._jQuery;\n $.fn[NAME].Constructor = RangeSlider;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return RangeSlider._jQuery;\n };\n\n return RangeSlider;\n}(jQuery);\n\nexports.default = RangeSlider;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(12);\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n/*!\n * @copyright Copyright (c) 2017 IcoMoon.io\n * @license Licensed under MIT license\n * See https://github.com/Keyamoon/svgxuse\n * @version 1.2.4\n */\n/*jslint browser: true */\n/*global XDomainRequest, MutationObserver, window */\n(function () {\n \"use strict\";\n if (typeof window !== \"undefined\" && window.addEventListener) {\n var cache = Object.create(null); // holds xhr objects to prevent multiple requests\n var checkUseElems;\n var tid; // timeout id\n var debouncedCheck = function () {\n clearTimeout(tid);\n tid = setTimeout(checkUseElems, 100);\n };\n var unobserveChanges = function () {\n return;\n };\n var observeChanges = function () {\n var observer;\n window.addEventListener(\"resize\", debouncedCheck, false);\n window.addEventListener(\"orientationchange\", debouncedCheck, false);\n if (window.MutationObserver) {\n observer = new MutationObserver(debouncedCheck);\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true\n });\n unobserveChanges = function () {\n try {\n observer.disconnect();\n window.removeEventListener(\"resize\", debouncedCheck, false);\n window.removeEventListener(\"orientationchange\", debouncedCheck, false);\n } catch (ignore) {}\n };\n } else {\n document.documentElement.addEventListener(\"DOMSubtreeModified\", debouncedCheck, false);\n unobserveChanges = function () {\n document.documentElement.removeEventListener(\"DOMSubtreeModified\", debouncedCheck, false);\n window.removeEventListener(\"resize\", debouncedCheck, false);\n window.removeEventListener(\"orientationchange\", debouncedCheck, false);\n };\n }\n };\n var createRequest = function (url) {\n // In IE 9, cross origin requests can only be sent using XDomainRequest.\n // XDomainRequest would fail if CORS headers are not set.\n // Therefore, XDomainRequest should only be used with cross origin requests.\n function getOrigin(loc) {\n var a;\n if (loc.protocol !== undefined) {\n a = loc;\n } else {\n a = document.createElement(\"a\");\n a.href = loc;\n }\n return a.protocol.replace(/:/g, \"\") + a.host;\n }\n var Request;\n var origin;\n var origin2;\n if (window.XMLHttpRequest) {\n Request = new XMLHttpRequest();\n origin = getOrigin(location);\n origin2 = getOrigin(url);\n if (Request.withCredentials === undefined && origin2 !== \"\" && origin2 !== origin) {\n Request = XDomainRequest || undefined;\n } else {\n Request = XMLHttpRequest;\n }\n }\n return Request;\n };\n var xlinkNS = \"http://www.w3.org/1999/xlink\";\n checkUseElems = function () {\n var base;\n var bcr;\n var fallback = \"\"; // optional fallback URL in case no base path to SVG file was given and no symbol definition was found.\n var hash;\n var href;\n var i;\n var inProgressCount = 0;\n var isHidden;\n var isXlink = false;\n var Request;\n var url;\n var uses;\n var xhr;\n function observeIfDone() {\n // If done with making changes, start watching for chagnes in DOM again\n inProgressCount -= 1;\n if (inProgressCount === 0) { // if all xhrs were resolved\n unobserveChanges(); // make sure to remove old handlers\n observeChanges(); // watch for changes to DOM\n }\n }\n function attrUpdateFunc(spec) {\n return function () {\n if (cache[spec.base] !== true) {\n if (spec.isXlink) {\n spec.useEl.setAttributeNS(xlinkNS, \"xlink:href\", \"#\" + spec.hash);\n } else {\n spec.useEl.setAttribute(\"href\", \"#\" + spec.hash);\n }\n }\n };\n }\n function onloadFunc(xhr) {\n return function () {\n var body = document.body;\n var x = document.createElement(\"x\");\n var svg;\n xhr.onload = null;\n x.innerHTML = xhr.responseText;\n svg = x.getElementsByTagName(\"svg\")[0];\n if (svg) {\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.style.position = \"absolute\";\n svg.style.width = 0;\n svg.style.height = 0;\n svg.style.overflow = \"hidden\";\n body.insertBefore(svg, body.firstChild);\n }\n observeIfDone();\n };\n }\n function onErrorTimeout(xhr) {\n return function () {\n xhr.onerror = null;\n xhr.ontimeout = null;\n observeIfDone();\n };\n }\n unobserveChanges(); // stop watching for changes to DOM\n // find all use elements\n uses = document.getElementsByTagName(\"use\");\n for (i = 0; i < uses.length; i += 1) {\n try {\n bcr = uses[i].getBoundingClientRect();\n } catch (ignore) {\n // failed to get bounding rectangle of the use element\n bcr = false;\n }\n href = uses[i].getAttribute(\"href\");\n if (!href) {\n href = uses[i].getAttributeNS(xlinkNS, \"href\");\n isXlink = true;\n } else {\n isXlink = false;\n }\n if (href && href.split) {\n url = href.split(\"#\");\n } else {\n url = [\"\", \"\"];\n }\n base = url[0];\n hash = url[1];\n isHidden = bcr && bcr.left === 0 && bcr.right === 0 && bcr.top === 0 && bcr.bottom === 0;\n if (bcr && bcr.width === 0 && bcr.height === 0 && !isHidden) {\n // the use element is empty\n // if there is a reference to an external SVG, try to fetch it\n // use the optional fallback URL if there is no reference to an external SVG\n if (fallback && !base.length && hash && !document.getElementById(hash)) {\n base = fallback;\n }\n if (base.length) {\n // schedule updating xlink:href\n xhr = cache[base];\n if (xhr !== true) {\n // true signifies that prepending the SVG was not required\n setTimeout(attrUpdateFunc({\n useEl: uses[i],\n base: base,\n hash: hash,\n isXlink: isXlink\n }), 0);\n }\n if (xhr === undefined) {\n Request = createRequest(base);\n if (Request !== undefined) {\n xhr = new Request();\n cache[base] = xhr;\n xhr.onload = onloadFunc(xhr);\n xhr.onerror = onErrorTimeout(xhr);\n xhr.ontimeout = onErrorTimeout(xhr);\n xhr.open(\"GET\", base);\n xhr.send();\n inProgressCount += 1;\n }\n }\n }\n } else {\n if (!isHidden) {\n if (cache[base] === undefined) {\n // remember this URL if the use element was not empty and no request was sent\n cache[base] = true;\n } else if (cache[base].onload) {\n // if it turns out that prepending the SVG is not necessary,\n // abort the in-progress xhr.\n cache[base].abort();\n delete cache[base].onload;\n cache[base] = true;\n }\n } else if (base.length && cache[base]) {\n setTimeout(attrUpdateFunc({\n useEl: uses[i],\n base: base,\n hash: hash,\n isXlink: isXlink\n }), 0);\n }\n }\n }\n uses = \"\";\n inProgressCount += 1;\n observeIfDone();\n };\n var winLoad;\n winLoad = function () {\n window.removeEventListener(\"load\", winLoad, false); // to prevent memory leaks\n tid = setTimeout(checkUseElems, 0);\n };\n if (document.readyState !== \"complete\") {\n // The load event fires when all resources have finished loading, which allows detecting whether SVG use elements are empty.\n window.addEventListener(\"load\", winLoad, false);\n } else {\n // No need to add a listener if the document is already loaded, initialize immediately.\n winLoad();\n }\n }\n}());\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nvar Tabs = function ($) {\n\n var ARIA_SELECTED = 'aria-selected';\n var ARIA_HIDDEN = 'aria-hidden';\n var ENTER_KEY = 13;\n var IDENTIFIER = 'env.tabs';\n var IS_ACTIVE = 'env-tabs__link--active';\n var NAME = 'envTabs';\n var NO_CONFLICT = $.fn[NAME];\n var TAB_SELECTOR = '.env-tabs__link';\n\n var DEFAULTS = {\n active: 0\n };\n\n var Tabs = function () {\n function Tabs(element, config) {\n _classCallCheck(this, Tabs);\n\n this.el = element;\n this.$el = $(element);\n this.$tabs = this.$el.find(TAB_SELECTOR);\n this.config = $.extend({}, DEFAULTS, config);\n this.$panels = {};\n this.$activeTab = undefined;\n\n this._bindEvents();\n }\n\n _createClass(Tabs, [{\n key: 'initialize',\n value: function initialize() {\n var _this = this;\n\n this.$tabs.each(function (i, tab) {\n var $tab = $(tab);\n var $panel = $($tab.attr('href'));\n _this.$panels[$tab.attr('id')] = $panel;\n\n $tab.removeClass(IS_ACTIVE).attr(ARIA_SELECTED, false);\n\n $panel.attr(ARIA_HIDDEN, true).hide();\n });\n\n this._setActive(this.$tabs.eq(this.config.active));\n }\n }, {\n key: 'activate',\n value: function activate(index) {\n this._setActive(this.$tabs.eq(index));\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.$tabs.off('click keydown');\n this.$activeTab = undefined;\n this.$tabs = undefined;\n this.$panels = undefined;\n this.$el.removeData(IDENTIFIER);\n }\n\n // Private\n\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this2 = this;\n\n this.$tabs.on('click', function (e) {\n e.preventDefault();\n _this2._setActive($(e.currentTarget));\n });\n\n this.$tabs.on('keydown', function (e) {\n if (e.which === ENTER_KEY) {\n _this2._setActive($(e.currentTarget));\n }\n });\n }\n }, {\n key: '_setActive',\n value: function _setActive($tab) {\n this._resetActive();\n\n $tab.addClass(IS_ACTIVE).attr(ARIA_SELECTED, true).focus();\n\n this._getPanelForTab($tab).attr(ARIA_HIDDEN, false).show();\n\n this.$activeTab = $tab;\n }\n }, {\n key: '_getPanelForTab',\n value: function _getPanelForTab($tab) {\n return this.$panels[$tab.attr('id')];\n }\n }, {\n key: '_resetActive',\n value: function _resetActive() {\n if (this.$activeTab) {\n this.$activeTab.removeClass(IS_ACTIVE).attr(ARIA_SELECTED, false);\n\n this._getPanelForTab(this.$activeTab).attr(ARIA_HIDDEN, true).hide();\n }\n }\n }], [{\n key: '_jQuery',\n value: function _jQuery(config, argument) {\n var _this3 = this;\n\n return this.each(function () {\n var $this = $(_this3);\n var tabs = $this.data(IDENTIFIER);\n\n if (!tabs) {\n tabs = new Tabs(_this3, config);\n $this.data(IDENTIFIER, tabs);\n tabs.initialize();\n } else if (typeof config === 'string') {\n var method = tabs[config];\n\n if (!method) {\n throw new Error('Invalid method name \"' + config + '\"');\n }\n\n method.call(tabs, argument);\n }\n });\n }\n }]);\n\n return Tabs;\n }();\n\n $.fn[NAME] = Tabs._jQuery;\n $.fn[NAME].Constructor = Tabs;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = NO_CONFLICT;\n return Tabs._jQuery;\n };\n\n return Tabs;\n}(jQuery);\n\nexports.default = Tabs;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__.p + \"envision-icons.svg\";\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// envision.js"," \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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b449e72f26b8245f0803","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nconst Util = (() => {\n\n const TRANSITIONS = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n };\n\n const ANIMATIONS = {\n OAnimation : 'oAnimationEnd',\n MozAnimation : 'animationend',\n WebkitAnimation : 'webkitAnimationEnd',\n animation : 'animationend'\n };\n\n function getEndEvent(events) {\n let t;\n const el = document.createElement('fakeelement');\n\n for (t in events) {\n if (el.style[t] !== undefined) {\n return events[t];\n }\n }\n\n return false;\n }\n\n const Util = {\n\n getAnimationEndEvent() {\n return getEndEvent(ANIMATIONS);\n },\n\n getTransitionEndEvent() {\n return getEndEvent(TRANSITIONS);\n },\n\n reflow(element) {\n return element.offsetHeight;\n },\n\n isTouch() {\n return 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target');\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n return $(selector).length > 0 ? selector : null;\n } catch (error) {\n return null;\n }\n }\n };\n\n return Util;\n\n})();\n\nexport default Util;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/util.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nimport Util from './util';\n\nconst Collapse = (($) => {\n\n const ARIA_EXPANDED = 'aria-expanded';\n const AUTO = 'auto';\n const COLLAPSING = 'collapsing';\n const MODIFIER_BASE = 'env-collapse--';\n const NAME = 'envCollapse';\n const NO_CONFLICT = $.fn[NAME];\n const SHOW = 'show';\n\n class Collapse {\n\n constructor(element) {\n this.el = element;\n this.$el = $(element);\n }\n\n toggle() {\n if (this.$el.hasClass(MODIFIER_BASE + SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n show() {\n this.$el\n .addClass(MODIFIER_BASE + COLLAPSING)\n .one(Util.getTransitionEndEvent(), this._showTransitionComplete)\n .height(this.el.scrollHeight);\n }\n\n hide() {\n this.$el\n .height(this.$el.height())\n .removeClass(MODIFIER_BASE + SHOW)\n .addClass(MODIFIER_BASE + COLLAPSING)\n .one(Util.getTransitionEndEvent(), this._hideTransitionComplete)\n .height(0);\n }\n\n // Private\n\n _showTransitionComplete(e) {\n const $target = $(e.currentTarget);\n\n $target\n .removeClass(MODIFIER_BASE + COLLAPSING)\n .addClass(MODIFIER_BASE + SHOW)\n .height(AUTO)\n .attr(ARIA_EXPANDED, true);\n }\n\n _hideTransitionComplete(e) {\n const $target = $(e.currentTarget);\n\n $target\n .removeClass(MODIFIER_BASE + COLLAPSING)\n .attr(ARIA_EXPANDED, false);\n }\n\n static _jQuery(config) {\n return this.each(function() {\n const data = new Collapse(this);\n\n if (typeof config === 'string') {\n if (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`);\n }\n data[config]();\n return;\n }\n\n data.toggle();\n });\n }\n }\n\n $.fn[NAME] = Collapse._jQuery;\n $.fn[NAME].Constructor = Collapse;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return Collapse._jQuery;\n };\n\n\n $(document).on('click', '[data-env-collapse]', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const target = $this.attr('href') || $this.attr('data-target');\n const $target = $(target);\n\n if ($target.hasClass(MODIFIER_BASE + COLLAPSING)) {\n return;\n }\n\n $target[NAME]();\n });\n\n return Collapse;\n\n})(jQuery);\n\nexport default Collapse;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/collapse.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (($) => {\n\n const NAME = 'envDropdown';\n const NO_CONFLICT = $.fn[NAME];\n const ENV_DROPDOWN_OPEN = 'env-is-open';\n const TOGGLE_DROPDOWN = '[data-dropdown]';\n const ESCAPE_KEY = 27;\n const ENV_CLICK_EVENT = 'click.env-dropdown';\n const ENV_KEYDOWN_EVENT = 'keydown.env-dropdown';\n\n class Dropdown {\n\n constructor(element) {\n this.el = element;\n this.$el = $(element);\n this._id = this.el.id;\n }\n\n toggle() {\n if (this.$el.hasClass(ENV_DROPDOWN_OPEN)) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n show() {\n this.$el\n .attr('aria-expanded', 'true')\n .addClass(ENV_DROPDOWN_OPEN)\n .focus();\n\n this._bindEvents();\n }\n\n hide() {\n this.$el\n .attr('aria-expanded', 'false')\n .removeClass(ENV_DROPDOWN_OPEN)\n .find('.env-dropdown--toggle').blur();\n\n this._unbindEvents();\n }\n\n _bindEvents() {\n const ENV_CLICK = `${ENV_CLICK_EVENT}-${this.el.id}`;\n const ENV_KEYDOWN = `${ENV_KEYDOWN_EVENT}-${this.el.id}`;\n $(document)\n .off(ENV_CLICK)\n .on(ENV_CLICK, (event) => {\n if (!$(event.target).hasClass('env-dropdown__menu')) {\n this.hide();\n }\n });\n\n this.$el\n .off(ENV_KEYDOWN)\n .one(ENV_KEYDOWN, (event) => {\n if (event.which === ESCAPE_KEY) {\n this.hide();\n }\n });\n }\n\n _unbindEvents() {\n $(document).off(`${ENV_CLICK_EVENT}-${this.el.id}`);\n this.$el.off(`${ENV_KEYDOWN_EVENT}-${this.el.id}`);\n }\n\n static _jQuery(config) {\n return this.each(function() {\n const $this = $(this);\n let data = $this.data('env.dropdown');\n\n if (!data) {\n data = new Dropdown(this);\n $this.data('env.dropdown', data);\n }\n\n if (typeof config === 'string') {\n const method = data[config];\n if (method === undefined) {\n throw new Error(`No method named \"${config}\"`);\n }\n method.call(data);\n return;\n }\n\n data.toggle();\n });\n }\n }\n\n $.fn[NAME] = Dropdown._jQuery;\n $.fn[NAME].Constructor = Dropdown;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return Dropdown._jQuery;\n };\n\n $(document).on('click', TOGGLE_DROPDOWN, function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $target = $($this.data('target'));\n\n $target[NAME]();\n });\n\n return Dropdown;\n\n})(jQuery);\n\nexport default Dropdown;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/dropdown.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nimport Util from './util';\n\nconst Imageslider = (($) => {\n\n const DATA_KEY = 'env.image-slider';\n const EVENT_KEY = `.${DATA_KEY}`;\n const NAME = 'envImageslider';\n const DATA_API_KEY = '.data-api';\n const NO_CONFLICT = $.fn[NAME];\n const ARROW_LEFT_KEYCODE = 37;\n const ARROW_RIGHT_KEYCODE = 39;\n const TOUCHEVENT_WAIT = 500;\n const SLIDE_WIDTH_PX = 80;\n\n const DEFAULTS = {\n buttons: true,\n imageSlider: false,\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n slide: false,\n swipe: true,\n wrap: true\n };\n\n const SELECTORS = {\n ACTIVE: '.env-image-slider__item--active',\n ACTIVE_DOT: '.env-is-active',\n ACTIVE_ITEM: '.env-image-slider__item--active.env-image-slider__item',\n DATA_SLIDE: '[data-move], [data-move-to], [data-image-slider-touch]',\n DATA_IMAGE_SLIDER: '[data-image-slider]',\n INDICATORS: '.env-image-slider__indicators',\n INNER: '.env-image-slider__inner',\n NEXT_PREV: '.env-image-slider--next, .env-image-slider--prev',\n ITEM: '.env-image-slider__item',\n THUMBNAILS: '.env-image-slider__thumbnails'\n };\n\n const ClassName = {\n ACTIVE: 'env-image-slider__item--active',\n ACTIVE_DOT: 'env-is-active',\n IMAGESLIDER: 'env-image-slider',\n LEFT: 'env-image-slider__item--left',\n NEXT: 'env-image-slider__item--next',\n PREV: 'env-image-slider__item--prev',\n RIGHT: 'env-image-slider__item--right',\n SLIDE: 'env-image-slider--slide'\n };\n\n const Direction = {\n LEFT: 'left',\n NEXT: 'next',\n PREV: 'prev',\n RIGHT: 'right'\n };\n\n const Events = {\n CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN: `keydown${EVENT_KEY}`,\n LOAD_DATA_API: `load${EVENT_KEY}${DATA_API_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`,\n SLID: `slid${EVENT_KEY}`,\n SLIDE: `slide${EVENT_KEY}`,\n TOUCHEND: `touchend${EVENT_KEY}`,\n TOUCHMOVE: `touchmove${EVENT_KEY}`,\n TOUCHSTART: `touchstart${EVENT_KEY}`\n };\n\n class Imageslider {\n\n constructor(element, config) {\n this.$el = $(element);\n this.$images = this.$el.find(SELECTORS.ITEM);\n\n this._isSliding = false;\n this._isPaused = false;\n this._interval = null;\n\n this._activeElement = null;\n this._indicatorsElement = this.$el.find(SELECTORS.INDICATORS)[0];\n this._thumbnailElements = this.$el.find(SELECTORS.THUMBNAILS)[0];\n this.config = $.extend({}, DEFAULTS, this.$el.data(), config);\n\n if (this.$images.length > 1 && config.buttons) {\n this._addSlideButtons();\n }\n\n this._bindEvents();\n }\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n }\n\n nextWhenVisible() {\n if (!document.hidden) {\n this.next();\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n clearInterval(this._interval);\n this._interval = null;\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this.config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this.config.interval\n );\n }\n }\n\n goTo(index) {\n this._activeElement = this.$el.find(SELECTORS.ACTIVE_ITEM)[0];\n\n const activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this.$images.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n const direction = index > activeIndex ?\n Direction.NEXT :\n Direction.PREV;\n\n this._slide(direction, this.$images[index]);\n return;\n }\n\n startTouchSlide(event) {\n this.touchstartx = event.originalEvent.touches[0].pageX;\n }\n\n moveTouchSlide(event) {\n this.touchmovex = event.originalEvent.touches[0].pageX;\n\n this.movex = -(this.touchstartx - this.touchmovex);\n\n this.moved = false;\n const activeItem = this.$el.find(SELECTORS.ACTIVE).children();\n activeItem.css('transform', `translate3d(${this.movex}px, 0, 0)`);\n\n if (this.movex > SLIDE_WIDTH_PX) {\n this.prev();\n this.moved = true;\n setTimeout(() => {\n activeItem.css('transform', 'translate3d(0, 0, 0)');\n }, TOUCHEVENT_WAIT);\n } else if (this.movex < -SLIDE_WIDTH_PX) {\n this.next();\n this.moved = true;\n setTimeout(() => {\n activeItem.css('transform', 'translate3d(0, 0, 0)');\n }, TOUCHEVENT_WAIT);\n }\n }\n\n endTouchSlide() {\n if (!this.moved) {\n this.$el.find(SELECTORS.ACTIVE)\n .children()\n .css('transform', 'translate3d(0, 0, 0)');\n }\n }\n\n dispose() {\n this.$el.off(EVENT_KEY).removeData(DATA_KEY);\n\n this.$el = null;\n this.$images = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n this._thumbnailElements = null;\n }\n\n _addSlideButtons() {\n const sliderId = this.$el[0].id;\n const buttonHTML = `<a class=\"env-image-slider--prev\" role=\"button\" data-move=\"prev\" href=\"#${sliderId}\">\n <i class=\"env-image-slider__previous-icon\"></i>\n <span class=\"env-assistive-text\">Previous</span>\n </a>\n <a class=\"env-image-slider--next\" role=\"button\" data-move=\"next\" href=\"#${sliderId}\">\n <i class=\"env-image-slider__next-icon\"></i>\n <span class=\"env-assistive-text\">Next</span>\n </a>`;\n\n $(`#${sliderId}`).find(SELECTORS.INNER).append(buttonHTML);\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT;\n const activeIndex = this._getItemIndex(activeElement);\n const lastImageIndex = this.$images.length - 1;\n const isGoingToWrap = (!isNextDirection && activeIndex === 0) || (isNextDirection && activeIndex === lastImageIndex);\n\n if (isGoingToWrap && !this.config.wrap) {\n return activeElement;\n }\n\n const delta = isNextDirection ? 1 : -1;\n const itemIndex = (activeIndex + delta) % this.$images.length;\n\n return itemIndex === -1 ?\n this.$images[lastImageIndex] : this.$images[itemIndex];\n }\n\n _bindEvents() {\n if (this.config.keyboard) {\n this.$el\n .on(Events.KEYDOWN, (event) => this._keydown(event));\n }\n\n if (this.config.pause === 'hover' && this.config.imageSlider === 'cycle') {\n this.$el\n .on(Events.MOUSEENTER, (event) => this.pause(event))\n .on(Events.MOUSELEAVE, (event) => this.cycle(event));\n if (Util.isTouch()) {\n this.$el\n .on(Events.TOUCHEND, () => {\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_WAIT, this.config.interval);\n });\n }\n }\n if (this.config.swipe) {\n this._bindTouchSlider();\n }\n }\n\n _bindTouchSlider() {\n const container = this.$el.find(SELECTORS.INNER);\n container.on(Events.TOUCHSTART, (event) => {\n this.startTouchSlide(event);\n });\n\n container.on(Events.TOUCHMOVE, (event) => {\n this.moveTouchSlide(event);\n });\n\n container.on(Events.TOUCHEND, () => {\n this.endTouchSlide(event);\n });\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n default:\n return;\n }\n }\n\n _getItemIndex(element) {\n return this.$images.index(element);\n }\n\n _triggerSlideEvent(targetElement, eventDirectionName) {\n const targetIndex = this._getItemIndex(targetElement);\n const fromIndex = this._getItemIndex(this.$el.find(SELECTORS.ACTIVE_ITEM)[0]);\n const slideEvent = $.Event(Events.SLIDE, {\n targetElement,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n\n this.$el.trigger(slideEvent);\n\n return slideEvent;\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement)\n .find(SELECTORS.ACTIVE_DOT)\n .removeClass(ClassName.ACTIVE_DOT);\n\n const nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE_DOT);\n }\n } else if (this._thumbnailElements) {\n $(this._thumbnailElements)\n .find(SELECTORS.ACTIVE)\n .removeClass(ClassName.ACTIVE);\n\n const nextIndicator = this._thumbnailElements.children[this._getItemIndex(element)].firstElementChild;\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this.$el.find(SELECTORS.ACTIVE_ITEM)[0];\n const activeElementIndex = this._getItemIndex(activeElement);\n const nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n const nextElementIndex = this._getItemIndex(nextElement);\n\n let directionalClassName;\n let orderClassName;\n let eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n const $nextElement = $(nextElement);\n\n if (nextElement && $nextElement.hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n return;\n }\n\n this._isSliding = true;\n\n this._setActiveIndicatorElement(nextElement);\n\n const slidEvent = $.Event(Events.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n const $activeElement = $(activeElement);\n\n if (this.$el.hasClass(ClassName.SLIDE)) {\n\n $nextElement.addClass(orderClassName);\n\n Util.reflow(nextElement);\n\n $activeElement.addClass(directionalClassName);\n $nextElement.addClass(directionalClassName);\n\n $activeElement\n .one(Util.getTransitionEndEvent(), () => {\n\n $nextElement\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE);\n\n $activeElement\n .removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`);\n\n this._isSliding = false;\n\n this.$el.trigger(slidEvent);\n });\n\n } else {\n $activeElement.removeClass(ClassName.ACTIVE);\n $nextElement.addClass(ClassName.ACTIVE);\n\n this._isSliding = false;\n this.$el.trigger(slideEvent);\n }\n }\n\n static _jQueryInterface(config) {\n return this.each(() => {\n const $this = $(this);\n let data = $this.data(DATA_KEY);\n\n const _config = $.extend({}, DEFAULTS, $this.data());\n\n if (typeof config === 'object') {\n $.extend(_config, config);\n }\n\n const action = typeof config === 'string' ? config : _config.move;\n\n if (!data) {\n data = new Imageslider(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.goTo(config);\n } else if (typeof action === 'string') {\n if (data[action] === undefined) {\n throw new Error(`No method named \"${action}\"`);\n }\n data[action]();\n } else if (_config.interval && _config.imageSlider === 'cycle') {\n data.pause();\n data.cycle();\n }\n });\n }\n\n static _dataApiClickHandler(event) {\n // 'this' is current clicked element i.e. slide-right, slide-left or a indicator/thumbnail.\n const selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n const $target = $(selector).eq(0);\n\n if (!$target.length || !$target.hasClass(ClassName.IMAGESLIDER)) {\n return;\n }\n\n const config = $.extend({}, $target.data(), $(this).data());\n const slideIndex = this.getAttribute('data-move-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Imageslider._jQueryInterface.call($target, config);\n\n if (slideIndex) {\n $target.data(DATA_KEY).goTo(slideIndex);\n }\n\n event.preventDefault();\n }\n }\n\n $(document)\n .on(Events.CLICK_DATA_API, SELECTORS.DATA_SLIDE, Imageslider._dataApiClickHandler);\n\n $(window).on(Events.LOAD_DATA_API, () => {\n const $imageSliders = $(SELECTORS.DATA_IMAGE_SLIDER);\n $imageSliders.each((i, slider) => {\n const $slider = $(slider);\n Imageslider._jQueryInterface.call($slider, $slider.data());\n });\n });\n\n $.fn[NAME] = Imageslider._jQueryInterface;\n $.fn[NAME].Constructor = Imageslider;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return Imageslider._jQueryInterface;\n };\n\n return Imageslider;\n\n})(jQuery);\n\nexport default Imageslider;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/image-slider.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nimport Util from './util';\n\nconst Imageviewer = (($) => {\n\n const ANIMATION = 'env-animation-in-progress';\n const BACKDROP = 'env-image-viewer__backdrop';\n const BACKDROP_ANIMATION = 'env-image-viewer__backdrop--in';\n const DATA_KEY = 'env.image-viewer';\n const EVENT_KEY = `.${DATA_KEY}`;\n const NAME = 'envImageviewer';\n const DATA_API_KEY = '.data-api';\n const NO_CONFLICT = $.fn[NAME];\n const ESCAPE_KEY = 27;\n const ARROW_LEFT_KEYCODE = 37;\n const ARROW_RIGHT_KEYCODE = 39;\n const SPINNER_TEMPLATE = `<div class=\"env-spinner\">\n <div class=\"env-rect1\"></div>\n <div class=\"env-rect2\"></div>\n <div class=\"env-rect3\"></div>\n <div class=\"env-rect4\"></div>\n <div class=\"env-rect5\"></div>\n </div>`;\n\n const SELECTORS = {\n ACTIVE_DOT : '.env-is-active',\n DATA_MOVE_TO : '[data-move-to]',\n DATA_MOVE : '[data-move]',\n DATA_IMAGE_VIEWER : '[data-image-viewer]',\n IMAGES : '.env-image-viewer__images',\n INDICATORS : '.env-image-viewer__indicators',\n DATA_SLIDE_TO : '[data-slide-to]',\n SPINNER : '.env-spinner'\n };\n\n const ClassName = {\n ACTIVE_DOT : 'env-is-active',\n HIDDEN : 'env-image-viewer--hidden',\n SPINNER_HIDE : 'env-spinner--hide'\n };\n\n const Events = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`\n };\n\n class Imageviewer {\n\n constructor(element, $image) {\n this.$el = $(element);\n this.$images = this.$el.find(SELECTORS.IMAGES);\n this._isShown = false;\n\n this.config = $.extend({}, this.$el.data());\n this.config.index = this.$images.index($image[0]);\n }\n\n next() {\n this.show(this._getNextItemIndex());\n }\n\n prev() {\n this.show(this._getPrevItemIndex());\n }\n\n show(index) {\n this.config.index = Number(index);\n const image = $(this.$images[index])[0];\n const href = image.getAttribute('href');\n\n if (this._isShown) {\n $(SELECTORS.SPINNER).removeClass(ClassName.SPINNER_HIDE);\n this.$btnContainer.addClass(ClassName.HIDDEN);\n\n const $downloadingImage = this._loadImage(href);\n\n this.$imgContainer.html($downloadingImage);\n this._setActiveIndicatorElement();\n } else {\n this.$modal = $('<div/>', {\n class: 'env-image-viewer__modal'\n });\n\n this.$btnContainer = $('<div/>', {\n class: 'env-image-viewer__dialog'\n });\n\n this.$imgContainer = $('<div/>', {\n class: 'env-image-viewer__modal-container'\n });\n\n this.$modal.append(this.$btnContainer);\n this.$btnContainer.append(this.$imgContainer);\n this.$modal.appendTo(document.body);\n\n this.$btnContainer.append(this._getIndicators());\n\n if (this.$images.length > 1) {\n this.$btnContainer.append(this._getButtons());\n }\n\n this.$btnContainer.addClass(ClassName.HIDDEN);\n const $downloadingImage = this._loadImage(href);\n\n this.$imgContainer.html($downloadingImage);\n\n this._isShown = true;\n\n $('body').css('overflow', 'hidden');\n\n this._bindContainerEvents();\n this._bindEvents();\n this._showBackdrop();\n\n $(SPINNER_TEMPLATE).prependTo(this.$modal);\n }\n }\n\n hide() {\n const removeBackdropCallback = () => {\n this.$backdrop.remove();\n this.$modal.remove();\n this.$btnContainer.remove();\n this.$imgContainer.remove();\n $('body').css('overflow', 'scroll');\n };\n\n this.$backdrop\n .one(Util.getTransitionEndEvent(), removeBackdropCallback)\n .removeClass(BACKDROP_ANIMATION);\n\n this._isShown = false;\n }\n\n _loadImage(href) {\n const $downloadingImage = $('<img>');\n\n $downloadingImage\n .addClass('env-image-viewer__img')\n .attr({\n tabindex: '-1',\n src: href\n })\n .on('load', () => {\n\n const imageHeight = $downloadingImage.height();\n const windowHeight = window.innerHeight;\n const heightModifier = 0.8;\n\n if (windowHeight < imageHeight) {\n $downloadingImage.css({\n 'max-height': windowHeight * heightModifier\n });\n }\n\n $(SELECTORS.SPINNER).addClass(ClassName.SPINNER_HIDE);\n this.$btnContainer.removeClass(ClassName.HIDDEN);\n this.$imgContainer.children()[0].focus();\n });\n\n return $downloadingImage;\n }\n\n _bindContainerEvents() {\n this.$btnContainer.on(Events.CLICK_DATA_API, SELECTORS.DATA_MOVE, (e) => {\n e.preventDefault();\n\n if ($(e.currentTarget).data('move') === 'next') {\n this.next();\n } else {\n this.prev();\n }\n });\n\n this.$btnContainer.on(Events.CLICK_DATA_API, SELECTORS.DATA_MOVE_TO, (e) => {\n const viewerIndex = e.currentTarget.getAttribute('data-move-to');\n\n if (viewerIndex) {\n this.show(viewerIndex);\n }\n });\n }\n\n _getButtons() {\n const buttonHTML = `<a class=\"env-image-viewer--prev\" role=\"button\" data-move=\"prev\">\n <i class=\"env-image-viewer__prev-icon\"></i>\n <span class=\"env-assistive-text\">Previous</span>\n </a>\n <a class=\"env-image-viewer--next\" role=\"button\" data-move=\"next\">\n <i class=\"env-image-viewer__next-icon\"></i>\n <span class=\"env-assistive-text\">Next</span>\n </a>`;\n\n return buttonHTML;\n }\n\n _getIndicators() {\n const indicatorItems = this._getIndicatorItems();\n return `<ol class=\"env-image-viewer__indicators\">\n ${indicatorItems}\n </ol>`;\n }\n\n _getIndicatorItems() {\n const activeElementIndex = this.config.index;\n\n return this.$images.map((index) => {\n const isActive = index === activeElementIndex;\n return `<li data-move-to=\"${index}\" class=\"${isActive ? 'env-is-active' : ''}\"></li>`;\n })\n .get()\n .join('');\n }\n\n _showBackdrop() {\n this.$backdrop = $('<div/>', {\n class: BACKDROP\n });\n\n this.$modal.on(Events.CLICK_DATA_API, (event) => {\n\n if (this.$backdrop.hasClass(ANIMATION)) {\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (!this._isShown) {\n return;\n }\n\n this.hide();\n });\n\n this.$backdrop.appendTo(document.body);\n\n this.$backdrop\n .one(Util.getAnimationEndEvent(), this._removeBackdropAnimation)\n .addClass(`${BACKDROP_ANIMATION} ${ANIMATION}`);\n }\n\n _removeBackdropAnimation(e) {\n $(e.currentTarget).removeClass(ANIMATION);\n }\n\n _bindEvents() {\n this.$imgContainer\n .on('keydown', (event) => this._keydown(event));\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n case ESCAPE_KEY:\n event.preventDefault();\n if (!this.$backdrop.hasClass(ANIMATION)) {\n this.hide();\n }\n break;\n default:\n return;\n }\n }\n\n _getNextItemIndex() {\n return this.config.index === this.$images.length - 1 ? 0 : this.config.index + 1;\n }\n\n _getPrevItemIndex() {\n return this.config.index === 0 ? this.$images.length - 1 : this.config.index - 1;\n }\n\n _setActiveIndicatorElement() {\n this._indicatorsElement = this.$btnContainer.find(SELECTORS.INDICATORS)[0];\n if (this.$images.length > 0) {\n this.$btnContainer\n .find(SELECTORS.ACTIVE_DOT)\n .removeClass(ClassName.ACTIVE_DOT);\n\n const indicator = this.$btnContainer.find(SELECTORS.INDICATORS).children()[this.config.index];\n\n if (indicator) {\n $(indicator)\n .addClass(ClassName.ACTIVE_DOT);\n }\n }\n }\n\n static _jQuery($image) {\n return this.each(() => {\n const data = new Imageviewer(this, $image);\n data.show(data.config.index);\n });\n }\n }\n\n $(document)\n .on(Events.CLICK_DATA_API, SELECTORS.DATA_IMAGE_VIEWER, function(e) {\n e.preventDefault();\n const $target = $(e.target);\n\n if (!$target.is('img')) {\n return;\n }\n\n $(this).envImageviewer($target.parent());\n });\n\n $.fn[NAME] = Imageviewer._jQuery;\n $.fn[NAME].Constructor = Imageviewer;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return Imageviewer._jQuery;\n };\n\n return Imageviewer;\n\n})(jQuery);\n\nexport default Imageviewer;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/image-viewer.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nimport Util from './util';\n\nconst ModalDialog = (($) => {\n\n const ANIMATION = 'env-animation-in-progress';\n const BACKDROP = 'env-modal-dialog__backdrop';\n const BACKDROP_ANIMATION = 'env-modal-dialog__backdrop--in';\n const DATA_KEY = 'env.modal-dialog';\n const DISMISS_SELECTOR = '[data-modal-dialog-dismiss]';\n const ESCAPE_KEY = 27;\n const FOCUSIN = 'focusin.env-modal-dialog';\n const MODIFIER_BASE = 'env-modal-dialog--';\n const NAME = 'envDialog';\n const NO_CONFLICT = $.fn[NAME];\n const SELECTOR = '[data-modal-dialog]';\n const SHOW = 'show';\n const TAB_KEY = 9;\n\n const FOCUSABLE_ELEMENTS_SELECTOR = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable]';\n\n const EVENTS = {\n HIDE: 'hide.env-modal-dialog',\n HIDDEN: 'hidden.env-modal-dialog',\n SHOW: 'show.env-modal-dialog',\n SHOWN: 'shown.env-modal-dialog'\n };\n\n class ModalDialog {\n\n constructor(element) {\n this.el = element;\n this.$el = $(element);\n this._isShown = false;\n }\n\n toggle() {\n return this._isShown ? this.hide() : this.show();\n }\n\n show() {\n if (this._isShown) {\n return;\n }\n\n Util.reflow(this.el); // Used to force reflow\n\n const showEvent = $.Event(EVENTS.SHOW, {});\n\n this.$el.trigger(showEvent);\n\n const shownEvent = $.Event(EVENTS.SHOWN, {});\n\n this.$el\n .one(Util.getTransitionEndEvent(), () => {\n this.$el.trigger(shownEvent);\n })\n .addClass(MODIFIER_BASE + SHOW)\n .removeAttr('aria-hidden')\n .css('opacity', 1);\n\n this._showBackdrop();\n\n this._isShown = true;\n this.el.focus();\n\n $('body').css('overflow', 'hidden');\n\n this._bindEvents();\n }\n\n hide() {\n if (!this._isShown) {\n return;\n }\n\n const hideModalCallback = () => {\n this.$el.removeClass(MODIFIER_BASE + SHOW);\n const hiddenEvent = $.Event(EVENTS.HIDDEN, {});\n this.$el.trigger(hiddenEvent);\n };\n\n const removeBackdropCallback = () => {\n this.$backdrop.remove();\n $('body').css('overflow', '');\n };\n\n const hideEvent = $.Event(EVENTS.HIDE, {});\n\n this.$el.trigger(hideEvent);\n\n this.$el\n .one(Util.getTransitionEndEvent(), hideModalCallback)\n .attr('aria-hidden', 'true')\n .css('opacity', 0)\n .off('click', DISMISS_SELECTOR);\n\n this.$backdrop\n .one(Util.getTransitionEndEvent(), removeBackdropCallback)\n .removeClass(BACKDROP_ANIMATION);\n\n this._isShown = false;\n this._unbindEvents();\n }\n\n _bindEvents() {\n this.$el.on('click', DISMISS_SELECTOR, (event) => this.hide(event));\n\n $(document)\n .off(FOCUSIN)\n .one(FOCUSIN, (event) => {\n if (document !== event.target &&\n this.el !== event.target &&\n !this.$el.has(event.target).length) {\n this.el.focus();\n }\n });\n\n const focusableElements = this.$el.find(FOCUSABLE_ELEMENTS_SELECTOR);\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n this.$el.on('keydown', (e) => {\n if (e.which === TAB_KEY) {\n if (e.shiftKey) {\n if (e.target === firstElement) {\n e.preventDefault();\n lastElement.focus();\n }\n } else if (e.target === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n\n if (e.which === ESCAPE_KEY) {\n this.hide();\n }\n });\n }\n\n _unbindEvents() {\n this.$el.off('click keydown');\n $(document).off(FOCUSIN);\n }\n\n _showBackdrop() {\n this.$backdrop = $('<div/>', {\n class: BACKDROP\n });\n\n this.$el.on('click', (event) => {\n if (this.$backdrop.hasClass(ANIMATION)) {\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (!this._isShown) {\n return;\n }\n\n this.hide();\n });\n\n this.$backdrop.appendTo(document.body);\n\n this.$backdrop\n .one(Util.getAnimationEndEvent(), this._removeBackdropAnimation)\n .addClass(`${BACKDROP_ANIMATION} ${ANIMATION}`);\n }\n\n _removeBackdropAnimation(e) {\n $(e.currentTarget).removeClass(ANIMATION);\n }\n\n static _jQuery(action) {\n return this.each(() => {\n const $this = $(this);\n let data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new ModalDialog(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof action === 'string') {\n const method = data[action];\n if (method === undefined) {\n throw new Error(`No method named \"${action}\"`);\n }\n method.call(data);\n return;\n }\n\n data.show();\n });\n }\n }\n\n $.fn[NAME] = ModalDialog._jQuery;\n $.fn[NAME].Constructor = ModalDialog;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return ModalDialog._jQuery;\n };\n\n $(document).on('click', SELECTOR, function(e) {\n e.preventDefault();\n\n const $target = $($(this).data('target'));\n\n $target[NAME]();\n });\n\n return ModalDialog;\n\n})(jQuery);\n\nexport default ModalDialog;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/modal-dialog.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nimport Popper from 'popper.js';\n\nconst Popover = (($) => {\n\n const NAME = 'envPopover';\n const IDENTIFIER = 'env.popover';\n const EVENT_NAMESPACE = `.${IDENTIFIER}`;\n const NO_CONFLICT = $.fn[NAME];\n\n const attachmentMapping = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right'\n };\n\n const DEFAULTS = {\n clickOutside: false,\n constraints: [],\n container: 'body',\n content: '',\n delay: 0,\n escapeContent: true,\n placement: 'top',\n template: `<div class=\"env-popover\" role=\"tooltip\">\n <div class=\"env-popover__arrow\"></div>\n <div class=\"env-popover__header\">\n <h4 class=\"env-text env-popover__header__title\"></h4>\n </div>\n <div class=\"env-popover__content env-text env-p-around--small\"></div>\n </div>`,\n title: '',\n trigger: 'click'\n };\n\n class Popover {\n\n constructor(element, config) {\n this.el = element;\n this.$el = $(this.el);\n this.config = $.extend({}, DEFAULTS, this.$el.data(), config);\n\n this.bindEvents();\n }\n\n bindEvents() {\n const triggers = this.config.trigger.split(' ');\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n this.$el.on(this.config.trigger + EVENT_NAMESPACE, () => {\n if (this.isShowing) {\n this.hide();\n } else {\n this.show();\n }\n });\n } else {\n const hoverTrigger = trigger === 'hover';\n const inEvent = hoverTrigger ? 'mouseenter' : 'focusin';\n const outEvent = hoverTrigger ? 'mouseleave' : 'focusout';\n\n this.$el\n .on(inEvent + EVENT_NAMESPACE, () => {\n if (this.config.delay > 0) {\n if (this.hidetimeout) {\n clearTimeout(this.hidetimeout);\n }\n if (this.showtimeout) {\n clearTimeout(this.showtimeout);\n }\n if (!this.isShowing) {\n this.showtimeout = setTimeout(() => {\n this.show();\n },\n this.config.delay);\n }\n } else if (!this.isShowing) {\n this.show();\n }\n })\n .on(outEvent + EVENT_NAMESPACE, () => {\n if (this.config.delay > 0) {\n this.hoverPopover();\n if (this.showtimeout) {\n clearTimeout(this.showtimeout);\n }\n if (this.isShowing) {\n this.hidetimeout = setTimeout(() => {\n this.hide();\n },\n this.config.delay);\n }\n } else if (this.isShowing) {\n this.hide();\n }\n });\n }\n });\n }\n\n hoverPopover() {\n const $popoverElement = this.getPopoverElement();\n\n $popoverElement\n .off('mouseenter')\n .on('mouseenter', () => {\n if (this.hidetimeout) {\n clearTimeout(this.hidetimeout);\n }\n if (this.showtimeout) {\n clearTimeout(this.showtimeout);\n }\n if (!this.isShowing) {\n this.showtimeout = setTimeout(() => {\n this.show();\n },\n this.config.delay);\n }\n });\n $popoverElement\n .off('mouseleave')\n .on('mouseleave', () => {\n if (this.showtimeout) {\n clearTimeout(this.showtimeout);\n }\n if (this.isShowing) {\n this.hidetimeout = setTimeout(() => {\n this.hide();\n },\n this.config.delay);\n }\n });\n }\n\n getPopoverElement() {\n return this.$popoverElement = this.$popoverElement || $(this.config.template);\n }\n\n setText($popoverElement, selector, text) {\n $popoverElement.find(selector)[this.config.escapeContent ? 'text' : 'html'](text);\n }\n\n setTitle($popoverElement) {\n this.setText($popoverElement, '.env-popover__header__title', this.config.title);\n }\n\n setContent($popoverElement) {\n this.setText($popoverElement, '.env-popover__content', this.config.content);\n }\n\n updateConfig(config) {\n Object.assign(this.config, config);\n return this;\n }\n\n render() {\n const $popoverElement = this.getPopoverElement();\n\n this.setTitle($popoverElement);\n this.setContent($popoverElement);\n this.setArrowPosition($popoverElement);\n }\n\n setArrowPosition($popoverElement) {\n $popoverElement.find('.env-popover__arrow')\n .addClass(`env-popover__arrow--${this.config.placement}`);\n }\n\n hide() {\n const $popoverElement = this.getPopoverElement();\n\n $popoverElement.detach();\n\n if (this.config.clickOutside) {\n $('body').off(this.config.trigger + EVENT_NAMESPACE);\n }\n\n this.isShowing = false;\n }\n\n _cleanTipClass() {\n this.$popoverElement\n .find('.env-popover__arrow')\n .removeClass((index, oldClassNames) => {\n const modifier = oldClassNames.replace(/env-popover__arrow/g, '').trim();\n\n return `env-popover__arrow${modifier}`;\n });\n }\n\n _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n this._addAttachmentClass(attachmentMapping[data.placement]);\n }\n\n _addAttachmentClass(className) {\n this.$popoverElement\n .find('.env-popover__arrow')\n .addClass(`env-popover__arrow--${className}`);\n }\n\n show() {\n this.render();\n\n const $popoverElement = this.getPopoverElement();\n\n $('body').append($popoverElement);\n\n this._popper = new Popper(this.el, $popoverElement[0], {\n placement : attachmentMapping[this.config.placement],\n modifiers : {\n flip: {\n behavior: 'flip'\n },\n arrow: {\n element: '.env-popover__arrow'\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: (data) => {\n this._handlePopperPlacementChange(data);\n }\n });\n\n this._popper.update();\n\n if (this.config.clickOutside) {\n $('body').on(this.config.trigger + EVENT_NAMESPACE, this.clickOutsideHandler.bind(this));\n }\n\n this.isShowing = true;\n }\n\n destroy() {\n this.hide();\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this.$popoverElement = undefined;\n this._popper = undefined;\n this.isShowing = false;\n this.$el.off();\n this.$el.removeData(IDENTIFIER);\n }\n\n clickOutsideHandler(e) {\n const $target = $(e.target);\n\n if (this.isShowing && !$target.is(this.$el) && !$target.closest(this.$popoverElement).length) {\n this.hide();\n }\n }\n\n static _jQuery(config) {\n return this.each(function() {\n const $this = $(this);\n let data = $this.data(IDENTIFIER);\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, typeof config === 'object' ? config : null);\n $this.data(IDENTIFIER, data);\n }\n\n if (typeof config === 'string') {\n const method = data[config];\n\n if (!method) {\n throw new Error(`Invalid method name \"${config}\"`);\n }\n\n method.call(data);\n }\n });\n }\n }\n\n $.fn[NAME] = Popover._jQuery;\n $.fn[NAME].Constructor = Popover;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return Popover._jQuery;\n };\n\n return Popover;\n\n})(jQuery);\n\nexport default Popover;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/popover.js","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.12.5\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 */\nvar nativeHints = ['native code', '[object MutationObserverConstructor]'];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @method\n * @memberof Popper.Utils\n * @argument {Function | undefined} fn the function to check\n * @returns {Boolean}\n */\nvar isNative = (function (fn) {\n return nativeHints.some(function (hint) {\n return (fn || '').toString().indexOf(hint) > -1;\n });\n});\n\nvar isBrowser = typeof window !== 'undefined';\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (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\nfunction microtaskDebounce(fn) {\n var scheduled = false;\n var i = 0;\n var elem = document.createElement('span');\n\n // MutationObserver provides a mechanism for scheduling microtasks, which\n // are scheduled *before* the next task. This gives us a way to debounce\n // a function but ensure it's called *before* the next paint.\n var observer = new MutationObserver(function () {\n fn();\n scheduled = false;\n });\n\n observer.observe(elem, { attributes: true });\n\n return function () {\n if (!scheduled) {\n scheduled = true;\n elem.setAttribute('x-index', i);\n i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n }\n };\n}\n\nfunction 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\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nvar supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);\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*/\nvar debounce = supportsNativeMutationObserver ? 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 */\nfunction 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 */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.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 */\nfunction 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 */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) {\n return window.document.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\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\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 */\nfunction getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element && element.offsetParent;\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return window.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\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\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 */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\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 */\nfunction 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 window.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\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 */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = window.document.documentElement;\n var scrollingElement = window.document.scrollingElement || html;\n return scrollingElement[upperSide];\n }\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 */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\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\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return +styles['border' + sideA + 'Width'].split('px')[0] + +styles['border' + sideB + 'Width'].split('px')[0];\n}\n\n/**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\nvar isIE10 = undefined;\n\nvar isIE10$1 = function () {\n if (isIE10 === undefined) {\n isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n }\n return isIE10;\n};\n\nfunction 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\nfunction getWindowSizes() {\n var body = window.document.body;\n var html = window.document.documentElement;\n var computedStyle = isIE10$1() && window.getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar 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\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\n\n\n\n\nvar defineProperty = function (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\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\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 */\nfunction 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 */\nfunction 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\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\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\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction 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\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = +styles.borderTopWidth.split('px')[0];\n var borderLeftWidth = +styles.borderLeftWidth.split('px')[0];\n\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 = +styles.marginTop.split('px')[0];\n var marginLeft = +styles.marginLeft.split('px')[0];\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var html = window.document.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\n var scrollTop = getScroll(html);\n var scrollLeft = getScroll(html, 'left');\n\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\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 */\nfunction 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 */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = { top: 0, left: 0 };\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(popper));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = window.document.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = window.document.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\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\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\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 */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\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\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\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\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\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 */\nfunction 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 */\nfunction getOuterSizes(element) {\n var styles = window.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 */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\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 */\nfunction 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\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\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 */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\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 */\nfunction findIndex(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(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 */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier.function) {\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier.function || modifier.fn;\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\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 */\nfunction 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 */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\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 window.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 */\nfunction 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\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\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? window : scrollParent;\n target.addEventListener(event, callback, { 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 */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n window.addEventListener('resize', state.updateBound, { passive: true });\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\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 */\nfunction 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 */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n window.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 */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n window.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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nfunction 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\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: '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 */\nfunction 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(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\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\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\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\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 */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\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 */\nfunction arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n 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\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\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\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 popperMarginSide = getStyleComputedProperty(data.instance.popper, 'margin' + sideCapitalized).replace('px', '');\n var sideValue = center - getClientRect(data.offsets.popper)[side] - popperMarginSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {};\n data.offsets.arrow[side] = Math.round(sideValue);\n data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\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 */\nfunction 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.<br />\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.<br />\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 */\nvar 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`\nvar 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 */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\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\nvar 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 */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n 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\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\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\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\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 */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\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\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\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 */\nfunction 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\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\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 */\nfunction 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(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\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 */\nfunction 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\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\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 */\nfunction 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\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\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\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\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 */\nfunction 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\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\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 */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\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\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\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 */\nfunction 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\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\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.<br />\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 */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\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.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\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 */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: 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\nvar 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\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\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.jquery ? reference[0] : reference;\n this.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\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\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\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 /**\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 }]);\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.<br />\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\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/popper.js/dist/esm/popper.js\n// module id = 8\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 9\n// module chunks = 0","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nimport Util from './util';\n\nconst RangeSlider = (($) => {\n\n const HANDLE_INDEX = 'range-handle-index';\n const HANDLES_SELECTOR = '.env-range-slider__handle';\n const VALUE_HOLDERS_SELECTOR = '.env-range-slider__values__value';\n const RANGE_SELECTOR = '.env-range-slider__range';\n const TOUCH_MODIFIER = 'env-range-slider--touch';\n const IDENTIFIER = 'env.range-slider';\n const NAME = 'envRangeSlider';\n const NO_CONFLICT = $.fn[NAME];\n const KEY_RIGHT = 39;\n const KEY_LEFT = 37;\n const KEY_DOWN = 40;\n const KEY_UP = 38;\n\n const EVENTS = {\n SLIDE: 'slide',\n STOP: 'slidestop'\n };\n\n const DEFAULTS = {\n min: 0,\n max: 100,\n step: 1,\n values: [0, 0],\n visibleValues: true\n };\n\n class RangeSlider {\n\n constructor(element, config) {\n this.config = $.extend({}, DEFAULTS, config);\n this.$document = $(document);\n this.el = element;\n this.$el = $(element);\n this.handles = this.$el.find(HANDLES_SELECTOR);\n this.$range = this.$el.find(RANGE_SELECTOR);\n this.isTouch = Util.isTouch();\n\n if (this.config.visibleValues) {\n this.valueHolders = this.$el.find(VALUE_HOLDERS_SELECTOR);\n }\n\n this.handleEvents = {\n mousedown: this._initSlide.bind(this),\n touchstart: this._initSlide.bind(this),\n keydown: this._initKeySlide.bind(this),\n keyup: this._stopKeySlide.bind(this)\n };\n }\n\n initialize() {\n this._setupHandles();\n this._refreshRange();\n this._bindEvents();\n\n if (this.isTouch) {\n this.$el.addClass(TOUCH_MODIFIER);\n }\n }\n\n values(values) {\n if ($.isArray(values)) {\n for (let i = 0; i < values.length; i += 1) {\n this.config.values[i] = this._trimAlignValue(values[i]);\n }\n this._refreshRange();\n }\n }\n\n _setupHandles() {\n this.handles.each((i, handle) => {\n $(handle).data(HANDLE_INDEX, i);\n });\n }\n\n _refreshRange() {\n let lastValPercent;\n let valPercent;\n let val;\n\n this.handles.each((i, handle) => {\n val = this._getValue(i);\n /* eslint-disable no-magic-numbers */\n valPercent = (val - this.config.min) / (this.config.max - this.config.min) * 100;\n /* eslint-enable no-magic-numbers */\n $(handle).css('left', `${valPercent}%`);\n\n if (i === 0) {\n this.$range.css('left', `${valPercent}%`);\n\n if (this.config.visibleValues) {\n this.valueHolders\n .eq(i)\n .text(val);\n }\n\n } else {\n this.$range.css('width', `${valPercent - lastValPercent}%`);\n\n if (this.config.visibleValues) {\n this.valueHolders\n .eq(i)\n .text(val);\n }\n }\n\n lastValPercent = valPercent;\n });\n }\n\n _bindEvents() {\n this.handles.off();\n this.handles.on(this.handleEvents);\n }\n\n _initSlide(e) {\n const position = this._getPosition(e);\n const normValue = this._normValueFromMouse(position);\n let distance = this.config.max - this.config.min + 1;\n let $closestHandle;\n let index;\n let val;\n let thisDistance;\n\n if (e.type === 'touchstart') {\n this.$document.on(`touchmove.${IDENTIFIER}`, this._handleSlide.bind(this));\n this.$document.one(`touchend.${IDENTIFIER}`, this._stopSlide.bind(this));\n } else {\n this.$document.on(`mousemove.${IDENTIFIER}`, this._handleSlide.bind(this));\n this.$document.one(`mouseup.${IDENTIFIER}`, this._stopSlide.bind(this));\n }\n\n this.handles.each((i, handle) => {\n val = this._getValue(i);\n thisDistance = Math.abs(normValue - val);\n if (distance > thisDistance ||\n distance === thisDistance &&\n (i === this._lastChangedValue || val === this.config.min)) {\n distance = thisDistance;\n $closestHandle = $(handle);\n index = i;\n }\n });\n\n this._handleIndex = index;\n\n $closestHandle.trigger('focus');\n\n const offset = $closestHandle.offset();\n /* eslint-disable no-magic-numbers */\n this._clickOffset = {\n left: position.x - offset.left - $closestHandle.width() / 2,\n top: position.y - offset.top -\n $closestHandle.height() / 2 -\n (parseInt($closestHandle.css('borderTopWidth'), 10) || 0) -\n (parseInt($closestHandle.css('borderBottomWidth'), 10) || 0) +\n (parseInt($closestHandle.css('marginTop'), 10) || 0)\n };\n /* eslint-enable no-magic-numbers */\n\n this._slide(e, index, normValue);\n }\n\n _handleSlide(e) {\n const normValue = this._normValueFromMouse(this._getPosition(e));\n this._slide(e, this._handleIndex, normValue);\n\n return false;\n }\n\n _slide(e, index, newVal) {\n const otherVal = this._getValue(index ? 0 : 1);\n const currentValue = this._getValue(index);\n const newValues = this._getValues();\n newVal = index === 0 ? Math.min(otherVal, newVal) : Math.max(otherVal, newVal);\n newValues[index] = newVal;\n\n if (newVal === currentValue) {\n return;\n }\n\n this._trigger(EVENTS.SLIDE, e, {\n values: newValues\n });\n\n this._setValue(index, newVal);\n }\n\n _stopSlide(e) {\n this.$document.off(`mousemove.${IDENTIFIER} touchmove.${IDENTIFIER}`);\n\n this._trigger(EVENTS.STOP, e, {\n values: this._getValues()\n });\n\n this._handleIndex = null;\n this._clickOffset = null;\n\n return false;\n }\n\n _initKeySlide(e) {\n switch (e.keyCode) {\n case KEY_UP:\n case KEY_DOWN:\n case KEY_LEFT:\n case KEY_RIGHT:\n e.preventDefault();\n if (!this._keySliding) {\n this._keySliding = true;\n }\n break;\n default:\n return;\n }\n\n const index = $(e.target).data(HANDLE_INDEX);\n const curVal = this._getValue(index);\n let newVal;\n\n switch (event.keyCode) {\n case KEY_UP:\n case KEY_RIGHT:\n if (curVal === this.config.max) {\n return;\n }\n newVal = this._trimAlignValue(curVal + this.config.step);\n break;\n case KEY_DOWN:\n case KEY_LEFT:\n if (curVal === this.config.min) {\n return;\n }\n newVal = this._trimAlignValue(curVal - this.config.step);\n break;\n default:\n }\n\n this._slide(e, index, newVal);\n }\n\n _stopKeySlide(e) {\n if (this._keySliding) {\n this._keySliding = false;\n this._trigger(EVENTS.STOP, e, {\n values: this._getValues()\n });\n }\n }\n\n _normValueFromMouse(position) {\n const pixelTotal = this.el.outerWidth();\n const valueTotal = this.config.max - this.config.min;\n const pixelMouse = position.x - this.el.offset().left - (this._clickOffset ? this._clickOffset.left : 0);\n let percentMouse = pixelMouse / pixelTotal;\n\n if (percentMouse > 1) {\n percentMouse = 1;\n }\n\n if (percentMouse < 0) {\n percentMouse = 0;\n }\n\n const valueMouse = this.config.min + percentMouse * valueTotal;\n\n return this._trimAlignValue(valueMouse);\n }\n\n _getPosition(e) {\n const pos = {};\n\n if (this.isTouch) {\n const touches = e.originalEvent.touches[0];\n pos.x = touches.pageX;\n pos.y = touches.pageY;\n } else {\n pos.x = e.pageX;\n pos.y = e.pageY;\n }\n\n return pos;\n }\n\n _trimAlignValue(val) {\n if (val <= this.config.min) {\n return this.config.min;\n }\n\n if (val >= this.config.max) {\n return this.config.max;\n }\n\n const step = this.config.step;\n const valModStep = (val - this.config.min) % step;\n let alignValue = val - valModStep;\n /* eslint-disable no-magic-numbers */\n if (Math.abs(valModStep) * 2 >= step) {\n alignValue += valModStep > 0 ? step : -step;\n }\n\n return parseFloat(alignValue.toFixed(5));\n /* eslint-enable no-magic-numbers */\n }\n\n _getValues() {\n return this.config.values.slice();\n }\n\n _getValue(index) {\n return this.config.values[index];\n }\n\n _setValue(index, newValue) {\n this.config.values[index] = this._trimAlignValue(newValue);\n this._refreshRange();\n }\n\n _trigger(type, e, data) {\n const el = this.el[0];\n const cb = this.config[type];\n\n e = $.Event(e);\n e.type = type;\n e.target = el;\n this.$el.trigger(e, data);\n\n if (cb) {\n cb.call(el, e, data);\n }\n }\n\n static _jQuery(config, ...args) {\n return this.each(() => {\n const $this = $(this);\n let rangeSlider = $this.data(IDENTIFIER);\n\n if (!rangeSlider) {\n rangeSlider = new RangeSlider(this, config);\n $this.data(IDENTIFIER, rangeSlider);\n }\n\n if (typeof config === 'string') {\n const method = rangeSlider[config];\n if (method === undefined) {\n throw new Error(`No method named \"${config}\"`);\n }\n\n method.call(rangeSlider, ...args);\n }\n\n rangeSlider.initialize();\n });\n }\n }\n\n $.fn[NAME] = RangeSlider._jQuery;\n $.fn[NAME].Constructor = RangeSlider;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return RangeSlider._jQuery;\n };\n\n return RangeSlider;\n\n})(jQuery);\n\nexport default RangeSlider;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/range-slider.js","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\n /**\n * Make use of external svgs possible in IE 11\n */\nimport 'svgxuse';\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/shims.js","/*!\n * @copyright Copyright (c) 2017 IcoMoon.io\n * @license Licensed under MIT license\n * See https://github.com/Keyamoon/svgxuse\n * @version 1.2.4\n */\n/*jslint browser: true */\n/*global XDomainRequest, MutationObserver, window */\n(function () {\n \"use strict\";\n if (typeof window !== \"undefined\" && window.addEventListener) {\n var cache = Object.create(null); // holds xhr objects to prevent multiple requests\n var checkUseElems;\n var tid; // timeout id\n var debouncedCheck = function () {\n clearTimeout(tid);\n tid = setTimeout(checkUseElems, 100);\n };\n var unobserveChanges = function () {\n return;\n };\n var observeChanges = function () {\n var observer;\n window.addEventListener(\"resize\", debouncedCheck, false);\n window.addEventListener(\"orientationchange\", debouncedCheck, false);\n if (window.MutationObserver) {\n observer = new MutationObserver(debouncedCheck);\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true\n });\n unobserveChanges = function () {\n try {\n observer.disconnect();\n window.removeEventListener(\"resize\", debouncedCheck, false);\n window.removeEventListener(\"orientationchange\", debouncedCheck, false);\n } catch (ignore) {}\n };\n } else {\n document.documentElement.addEventListener(\"DOMSubtreeModified\", debouncedCheck, false);\n unobserveChanges = function () {\n document.documentElement.removeEventListener(\"DOMSubtreeModified\", debouncedCheck, false);\n window.removeEventListener(\"resize\", debouncedCheck, false);\n window.removeEventListener(\"orientationchange\", debouncedCheck, false);\n };\n }\n };\n var createRequest = function (url) {\n // In IE 9, cross origin requests can only be sent using XDomainRequest.\n // XDomainRequest would fail if CORS headers are not set.\n // Therefore, XDomainRequest should only be used with cross origin requests.\n function getOrigin(loc) {\n var a;\n if (loc.protocol !== undefined) {\n a = loc;\n } else {\n a = document.createElement(\"a\");\n a.href = loc;\n }\n return a.protocol.replace(/:/g, \"\") + a.host;\n }\n var Request;\n var origin;\n var origin2;\n if (window.XMLHttpRequest) {\n Request = new XMLHttpRequest();\n origin = getOrigin(location);\n origin2 = getOrigin(url);\n if (Request.withCredentials === undefined && origin2 !== \"\" && origin2 !== origin) {\n Request = XDomainRequest || undefined;\n } else {\n Request = XMLHttpRequest;\n }\n }\n return Request;\n };\n var xlinkNS = \"http://www.w3.org/1999/xlink\";\n checkUseElems = function () {\n var base;\n var bcr;\n var fallback = \"\"; // optional fallback URL in case no base path to SVG file was given and no symbol definition was found.\n var hash;\n var href;\n var i;\n var inProgressCount = 0;\n var isHidden;\n var isXlink = false;\n var Request;\n var url;\n var uses;\n var xhr;\n function observeIfDone() {\n // If done with making changes, start watching for chagnes in DOM again\n inProgressCount -= 1;\n if (inProgressCount === 0) { // if all xhrs were resolved\n unobserveChanges(); // make sure to remove old handlers\n observeChanges(); // watch for changes to DOM\n }\n }\n function attrUpdateFunc(spec) {\n return function () {\n if (cache[spec.base] !== true) {\n if (spec.isXlink) {\n spec.useEl.setAttributeNS(xlinkNS, \"xlink:href\", \"#\" + spec.hash);\n } else {\n spec.useEl.setAttribute(\"href\", \"#\" + spec.hash);\n }\n }\n };\n }\n function onloadFunc(xhr) {\n return function () {\n var body = document.body;\n var x = document.createElement(\"x\");\n var svg;\n xhr.onload = null;\n x.innerHTML = xhr.responseText;\n svg = x.getElementsByTagName(\"svg\")[0];\n if (svg) {\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.style.position = \"absolute\";\n svg.style.width = 0;\n svg.style.height = 0;\n svg.style.overflow = \"hidden\";\n body.insertBefore(svg, body.firstChild);\n }\n observeIfDone();\n };\n }\n function onErrorTimeout(xhr) {\n return function () {\n xhr.onerror = null;\n xhr.ontimeout = null;\n observeIfDone();\n };\n }\n unobserveChanges(); // stop watching for changes to DOM\n // find all use elements\n uses = document.getElementsByTagName(\"use\");\n for (i = 0; i < uses.length; i += 1) {\n try {\n bcr = uses[i].getBoundingClientRect();\n } catch (ignore) {\n // failed to get bounding rectangle of the use element\n bcr = false;\n }\n href = uses[i].getAttribute(\"href\");\n if (!href) {\n href = uses[i].getAttributeNS(xlinkNS, \"href\");\n isXlink = true;\n } else {\n isXlink = false;\n }\n if (href && href.split) {\n url = href.split(\"#\");\n } else {\n url = [\"\", \"\"];\n }\n base = url[0];\n hash = url[1];\n isHidden = bcr && bcr.left === 0 && bcr.right === 0 && bcr.top === 0 && bcr.bottom === 0;\n if (bcr && bcr.width === 0 && bcr.height === 0 && !isHidden) {\n // the use element is empty\n // if there is a reference to an external SVG, try to fetch it\n // use the optional fallback URL if there is no reference to an external SVG\n if (fallback && !base.length && hash && !document.getElementById(hash)) {\n base = fallback;\n }\n if (base.length) {\n // schedule updating xlink:href\n xhr = cache[base];\n if (xhr !== true) {\n // true signifies that prepending the SVG was not required\n setTimeout(attrUpdateFunc({\n useEl: uses[i],\n base: base,\n hash: hash,\n isXlink: isXlink\n }), 0);\n }\n if (xhr === undefined) {\n Request = createRequest(base);\n if (Request !== undefined) {\n xhr = new Request();\n cache[base] = xhr;\n xhr.onload = onloadFunc(xhr);\n xhr.onerror = onErrorTimeout(xhr);\n xhr.ontimeout = onErrorTimeout(xhr);\n xhr.open(\"GET\", base);\n xhr.send();\n inProgressCount += 1;\n }\n }\n }\n } else {\n if (!isHidden) {\n if (cache[base] === undefined) {\n // remember this URL if the use element was not empty and no request was sent\n cache[base] = true;\n } else if (cache[base].onload) {\n // if it turns out that prepending the SVG is not necessary,\n // abort the in-progress xhr.\n cache[base].abort();\n delete cache[base].onload;\n cache[base] = true;\n }\n } else if (base.length && cache[base]) {\n setTimeout(attrUpdateFunc({\n useEl: uses[i],\n base: base,\n hash: hash,\n isXlink: isXlink\n }), 0);\n }\n }\n }\n uses = \"\";\n inProgressCount += 1;\n observeIfDone();\n };\n var winLoad;\n winLoad = function () {\n window.removeEventListener(\"load\", winLoad, false); // to prevent memory leaks\n tid = setTimeout(checkUseElems, 0);\n };\n if (document.readyState !== \"complete\") {\n // The load event fires when all resources have finished loading, which allows detecting whether SVG use elements are empty.\n window.addEventListener(\"load\", winLoad, false);\n } else {\n // No need to add a listener if the document is already loaded, initialize immediately.\n winLoad();\n }\n }\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/svgxuse/svgxuse.js\n// module id = 12\n// module chunks = 0","/**\n * --------------------------------------------------------------------------\n * Licensed under MIT https://github.com/sitevision/envision/blob/master/LICENSE\n * --------------------------------------------------------------------------\n */\n\nconst Tabs = (($) => {\n\n const ARIA_SELECTED = 'aria-selected';\n const ARIA_HIDDEN = 'aria-hidden';\n const ENTER_KEY = 13;\n const IDENTIFIER = 'env.tabs';\n const IS_ACTIVE = 'env-tabs__link--active';\n const NAME = 'envTabs';\n const NO_CONFLICT = $.fn[NAME];\n const TAB_SELECTOR = '.env-tabs__link';\n\n const DEFAULTS = {\n active: 0\n };\n\n class Tabs {\n\n constructor(element, config) {\n this.el = element;\n this.$el = $(element);\n this.$tabs = this.$el.find(TAB_SELECTOR);\n this.config = $.extend({}, DEFAULTS, config);\n this.$panels = {};\n this.$activeTab = undefined;\n\n this._bindEvents();\n }\n\n initialize() {\n this.$tabs\n .each((i, tab) => {\n const $tab = $(tab);\n const $panel = $($tab.attr('href'));\n this.$panels[$tab.attr('id')] = $panel;\n\n $tab\n .removeClass(IS_ACTIVE)\n .attr(ARIA_SELECTED, false);\n\n $panel\n .attr(ARIA_HIDDEN, true)\n .hide();\n });\n\n this._setActive(this.$tabs.eq(this.config.active));\n }\n\n activate(index) {\n this._setActive(this.$tabs.eq(index));\n }\n\n destroy() {\n this.$tabs.off('click keydown');\n this.$activeTab = undefined;\n this.$tabs = undefined;\n this.$panels = undefined;\n this.$el.removeData(IDENTIFIER);\n }\n\n // Private\n\n _bindEvents() {\n this.$tabs.on('click', (e) => {\n e.preventDefault();\n this._setActive($(e.currentTarget));\n });\n\n this.$tabs.on('keydown', (e) => {\n if (e.which === ENTER_KEY) {\n this._setActive($(e.currentTarget));\n }\n });\n }\n\n _setActive($tab) {\n this._resetActive();\n\n $tab\n .addClass(IS_ACTIVE)\n .attr(ARIA_SELECTED, true)\n .focus();\n\n this._getPanelForTab($tab)\n .attr(ARIA_HIDDEN, false)\n .show();\n\n this.$activeTab = $tab;\n }\n\n _getPanelForTab($tab) {\n return this.$panels[$tab.attr('id')];\n }\n\n _resetActive() {\n if (this.$activeTab) {\n this.$activeTab\n .removeClass(IS_ACTIVE)\n .attr(ARIA_SELECTED, false);\n\n this._getPanelForTab(this.$activeTab)\n .attr(ARIA_HIDDEN, true)\n .hide();\n }\n }\n\n static _jQuery(config, argument) {\n return this.each(() => {\n const $this = $(this);\n let tabs = $this.data(IDENTIFIER);\n\n if (!tabs) {\n tabs = new Tabs(this, config);\n $this.data(IDENTIFIER, tabs);\n tabs.initialize();\n } else if (typeof config === 'string') {\n const method = tabs[config];\n\n if (!method) {\n throw new Error(`Invalid method name \"${config}\"`);\n }\n\n method.call(tabs, argument);\n }\n });\n }\n }\n\n $.fn[NAME] = Tabs._jQuery;\n $.fn[NAME].Constructor = Tabs;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = NO_CONFLICT;\n return Tabs._jQuery;\n };\n\n return Tabs;\n\n})(jQuery);\n\nexport default Tabs;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/tabs.js","module.exports = __webpack_public_path__ + \"envision-icons.svg\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/icons/envision-icons.svg\n// module id = 15\n// module chunks = 0"],"sourceRoot":""}